From 0a7457a4bf9dda90cb020337a30323ce8b6d0b02 Mon Sep 17 00:00:00 2001 From: realaravinth Date: Fri, 16 Sep 2022 08:10:47 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20=20@=2004d7f?= =?UTF-8?q?872d54c1d4ea2206a29d9ed3b74170113f3=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../trait.GetLoginRoute.js | 3 + .../service/trait.HttpServiceFactory.js | 2 +- implementors/clap/derive/trait.Args.js | 3 + .../clap/derive/trait.CommandFactory.js | 3 + .../clap/derive/trait.FromArgMatches.js | 3 + implementors/clap/derive/trait.Parser.js | 3 + implementors/clap/derive/trait.Subcommand.js | 3 + implementors/core/clone/trait.Clone.js | 2 +- implementors/core/cmp/trait.Eq.js | 3 + implementors/core/cmp/trait.PartialEq.js | 2 +- implementors/core/convert/trait.From.js | 2 +- implementors/core/fmt/trait.Debug.js | 2 +- implementors/core/fmt/trait.Display.js | 2 +- implementors/core/marker/trait.Freeze.js | 2 +- implementors/core/marker/trait.Send.js | 2 +- .../core/marker/trait.StructuralEq.js | 3 + .../core/marker/trait.StructuralPartialEq.js | 2 +- implementors/core/marker/trait.Sync.js | 2 +- implementors/core/marker/trait.Unpin.js | 2 +- .../panic/unwind_safe/trait.RefUnwindSafe.js | 2 +- .../panic/unwind_safe/trait.UnwindSafe.js | 2 +- implementors/num_enum/trait.FromPrimitive.js | 3 + .../num_enum/trait.TryFromPrimitive.js | 3 + implementors/serde/de/trait.Deserialize.js | 2 +- implementors/serde/ser/trait.Serialize.js | 2 +- pages/all.html | 2 +- pages/api/index.html | 10 + pages/api/sidebar-items.js | 1 + pages/api/v1/account/fn.services.html | 9 + pages/api/v1/account/index.html | 14 + pages/api/v1/account/sidebar-items.js | 1 + .../account/struct.AccountCheckPayload.html | 39 + pages/api/v1/account/struct.Email.html | 39 + pages/api/v1/account/struct.Username.html | 39 + .../api/v1/account/struct.delete_account.html | 29 + pages/api/v1/account/struct.email_exists.html | 29 + pages/api/v1/account/struct.set_email.html | 30 + pages/api/v1/account/struct.set_username.html | 30 + .../account/struct.update_user_password.html | 29 + .../v1/account/struct.username_exists.html | 29 + pages/api/v1/auth/fn.services.html | 9 + pages/api/v1/auth/index.html | 11 + pages/api/v1/auth/sidebar-items.js | 1 + pages/api/v1/auth/struct.login.html | 29 + pages/api/v1/auth/struct.register.html | 29 + pages/api/v1/auth/struct.signout.html | 29 + pages/api/v1/fn.get_auth_middleware.html | 9 + pages/api/v1/fn.services.html | 9 + pages/api/v1/index.html | 14 + pages/api/v1/routes/constant.ROUTES.html | 10 + pages/api/v1/routes/index.html | 16 + pages/api/v1/routes/sidebar-items.js | 1 + pages/api/v1/routes/struct.Account.html | 44 + pages/api/v1/routes/struct.Auth.html | 38 + pages/api/v1/routes/struct.Routes.html | 40 + pages/api/v1/sidebar-items.js | 1 + pages/api/v1/struct.RedirectQuery.html | 32 + pages/constant.CACHE_AGE.html | 2 +- pages/constant.GIT_COMMIT_HASH.html | 2 +- pages/constant.PKG_DESCRIPTION.html | 2 +- pages/constant.PKG_HOMEPAGE.html | 2 +- pages/constant.PKG_NAME.html | 2 +- pages/constant.V1_API_ROUTES.html | 5 +- pages/constant.VERSION.html | 2 +- pages/ctx/api/index.html | 10 + pages/ctx/api/sidebar-items.js | 1 + pages/ctx/api/v1/account/index.html | 14 + pages/ctx/api/v1/account/sidebar-items.js | 1 + .../v1/account/struct.AccountCheckResp.html | 41 + .../account/struct.ChangePasswordReqest.html | 45 + pages/ctx/api/v1/auth/index.html | 14 + pages/ctx/api/v1/auth/sidebar-items.js | 1 + pages/ctx/api/v1/auth/struct.Login.html | 44 + pages/ctx/api/v1/auth/struct.Password.html | 41 + pages/ctx/api/v1/auth/struct.Register.html | 46 + pages/ctx/api/v1/index.html | 12 + pages/ctx/api/v1/sidebar-items.js | 1 + pages/ctx/index.html | 8 +- pages/ctx/sidebar-items.js | 2 +- pages/ctx/struct.Ctx.html | 37 +- pages/ctx/type.ArcCtx.html | 9 + pages/db/enum.ConnectionOptions.html | 35 + pages/db/enum.Login.html | 47 + pages/db/fn.get_db.html | 9 + pages/db/fn.map_register_err.html | 10 + pages/db/fn.map_row_not_found_err.html | 10 + pages/db/fn.now_unix_time_stamp.html | 9 + pages/db/index.html | 20 + pages/db/sidebar-items.js | 1 + pages/db/struct.Conn.html | 30 + pages/db/struct.Database.html | 45 + pages/db/struct.Fresh.html | 33 + pages/db/struct.NameHash.html | 47 + pages/db/struct.Register.html | 49 + pages/db/struct.UpdateEmail.html | 47 + pages/deploy/fn.find_page.html | 2 +- pages/deploy/index.html | 2 +- pages/deploy/routes/struct.Deploy.html | 16 +- pages/deploy/struct.DeployEvent.html | 22 +- pages/deploy/struct.DeployInfo.html | 27 +- pages/deploy/struct.DeploySecret.html | 27 +- pages/deploy/struct.deploy_info.html | 16 +- pages/deploy/struct.update.html | 16 +- pages/enum.Commands.html | 41 + pages/errors/enum.ServiceError.html | 76 +- pages/errors/index.html | 4 +- pages/errors/struct.ConfigError.html | 24 +- pages/errors/struct.ErrorToResponse.html | 26 +- pages/errors/struct.FSError.html | 24 +- pages/errors/type.ServiceResult.html | 2 +- pages/fn.get_identity_service.html | 9 + pages/fn.get_json_err.html | 2 +- pages/fn.main.html | 2 +- pages/fn.serve.html | 9 + pages/fn.services.html | 2 +- pages/git/enum.ContentType.html | 44 + pages/git/enum.GitFileMode.html | 77 ++ pages/git/fn.read_file.html | 14 + pages/git/fn.read_file_inner.html | 9 + pages/git/fn.read_preview_file.html | 9 + pages/git/index.html | 18 + pages/git/sidebar-items.js | 1 + pages/git/struct.FileInfo.html | 43 + pages/index.html | 16 +- pages/meta/fn.services.html | 2 +- pages/meta/index.html | 6 +- pages/meta/routes/struct.Meta.html | 16 +- pages/meta/sidebar-items.js | 2 +- pages/meta/struct.BuildDetails.html | 22 +- pages/meta/struct.Health.html | 40 + pages/meta/struct.build_details.html | 20 +- .../struct.health.html} | 26 +- pages/page/index.html | 2 +- pages/page/struct.Page.html | 36 +- pages/preview/index.html | 10 + pages/preview/sidebar-items.js | 1 + pages/preview/struct.Preview.html | 33 + pages/routes/constant.ROUTES.html | 9 - pages/routes/fn.services.html | 9 - pages/routes/index.html | 8 +- pages/routes/sidebar-items.js | 2 +- pages/serve/fn.find_page.html | 9 + pages/serve/fn.services.html | 9 + pages/serve/index.html | 12 + pages/serve/routes/index.html | 10 + pages/serve/routes/sidebar-items.js | 1 + pages/serve/routes/struct.Serve.html | 31 + pages/serve/sidebar-items.js | 1 + pages/serve/struct.index.html | 29 + pages/settings/enum.DBType.html | 45 + pages/settings/index.html | 7 +- pages/settings/sidebar-items.js | 2 +- pages/settings/struct.Database.html | 40 + pages/settings/struct.Server.html | 30 +- pages/settings/struct.Settings.html | 31 +- pages/sidebar-items.js | 2 +- pages/struct.Cli.html | 47 + pages/struct.Settings.html | 31 +- pages/type.AppCtx.html | 2 +- pages/utils/fn.get_random.html | 10 + pages/utils/index.html | 11 + pages/utils/sidebar-items.js | 1 + search-index.js | 2 +- source-files.js | 2 +- src/pages/api/mod.rs.html | 43 + src/pages/api/v1/account/mod.rs.html | 285 ++++++ src/pages/api/v1/auth.rs.html | 151 +++ src/pages/api/v1/mod.rs.html | 99 ++ src/pages/api/v1/routes.rs.html | 255 +++++ src/pages/ctx.rs.html | 69 -- src/pages/ctx/api/mod.rs.html | 43 + src/pages/ctx/api/v1/account.rs.html | 281 ++++++ src/pages/ctx/api/v1/auth.rs.html | 217 ++++ src/pages/ctx/api/v1/mod.rs.html | 51 + src/pages/ctx/mod.rs.html | 147 +++ src/pages/db.rs.html | 923 ++++++++++++++++++ src/pages/deploy.rs.html | 16 +- src/pages/errors.rs.html | 158 ++- src/pages/git.rs.html | 593 +++++++++++ src/pages/main.rs.html | 166 +++- src/pages/meta.rs.html | 80 +- src/pages/page.rs.html | 36 +- src/pages/preview.rs.html | 241 +++++ src/pages/routes.rs.html | 50 +- src/pages/serve.rs.html | 241 +++++ src/pages/settings.rs.html | 158 ++- src/pages/utils.rs.html | 67 ++ 187 files changed, 6527 insertions(+), 480 deletions(-) create mode 100644 implementors/actix_auth_middleware/trait.GetLoginRoute.js create mode 100644 implementors/clap/derive/trait.Args.js create mode 100644 implementors/clap/derive/trait.CommandFactory.js create mode 100644 implementors/clap/derive/trait.FromArgMatches.js create mode 100644 implementors/clap/derive/trait.Parser.js create mode 100644 implementors/clap/derive/trait.Subcommand.js create mode 100644 implementors/core/cmp/trait.Eq.js create mode 100644 implementors/core/marker/trait.StructuralEq.js create mode 100644 implementors/num_enum/trait.FromPrimitive.js create mode 100644 implementors/num_enum/trait.TryFromPrimitive.js create mode 100644 pages/api/index.html create mode 100644 pages/api/sidebar-items.js create mode 100644 pages/api/v1/account/fn.services.html create mode 100644 pages/api/v1/account/index.html create mode 100644 pages/api/v1/account/sidebar-items.js create mode 100644 pages/api/v1/account/struct.AccountCheckPayload.html create mode 100644 pages/api/v1/account/struct.Email.html create mode 100644 pages/api/v1/account/struct.Username.html create mode 100644 pages/api/v1/account/struct.delete_account.html create mode 100644 pages/api/v1/account/struct.email_exists.html create mode 100644 pages/api/v1/account/struct.set_email.html create mode 100644 pages/api/v1/account/struct.set_username.html create mode 100644 pages/api/v1/account/struct.update_user_password.html create mode 100644 pages/api/v1/account/struct.username_exists.html create mode 100644 pages/api/v1/auth/fn.services.html create mode 100644 pages/api/v1/auth/index.html create mode 100644 pages/api/v1/auth/sidebar-items.js create mode 100644 pages/api/v1/auth/struct.login.html create mode 100644 pages/api/v1/auth/struct.register.html create mode 100644 pages/api/v1/auth/struct.signout.html create mode 100644 pages/api/v1/fn.get_auth_middleware.html create mode 100644 pages/api/v1/fn.services.html create mode 100644 pages/api/v1/index.html create mode 100644 pages/api/v1/routes/constant.ROUTES.html create mode 100644 pages/api/v1/routes/index.html create mode 100644 pages/api/v1/routes/sidebar-items.js create mode 100644 pages/api/v1/routes/struct.Account.html create mode 100644 pages/api/v1/routes/struct.Auth.html create mode 100644 pages/api/v1/routes/struct.Routes.html create mode 100644 pages/api/v1/sidebar-items.js create mode 100644 pages/api/v1/struct.RedirectQuery.html create mode 100644 pages/ctx/api/index.html create mode 100644 pages/ctx/api/sidebar-items.js create mode 100644 pages/ctx/api/v1/account/index.html create mode 100644 pages/ctx/api/v1/account/sidebar-items.js create mode 100644 pages/ctx/api/v1/account/struct.AccountCheckResp.html create mode 100644 pages/ctx/api/v1/account/struct.ChangePasswordReqest.html create mode 100644 pages/ctx/api/v1/auth/index.html create mode 100644 pages/ctx/api/v1/auth/sidebar-items.js create mode 100644 pages/ctx/api/v1/auth/struct.Login.html create mode 100644 pages/ctx/api/v1/auth/struct.Password.html create mode 100644 pages/ctx/api/v1/auth/struct.Register.html create mode 100644 pages/ctx/api/v1/index.html create mode 100644 pages/ctx/api/v1/sidebar-items.js create mode 100644 pages/ctx/type.ArcCtx.html create mode 100644 pages/db/enum.ConnectionOptions.html create mode 100644 pages/db/enum.Login.html create mode 100644 pages/db/fn.get_db.html create mode 100644 pages/db/fn.map_register_err.html create mode 100644 pages/db/fn.map_row_not_found_err.html create mode 100644 pages/db/fn.now_unix_time_stamp.html create mode 100644 pages/db/index.html create mode 100644 pages/db/sidebar-items.js create mode 100644 pages/db/struct.Conn.html create mode 100644 pages/db/struct.Database.html create mode 100644 pages/db/struct.Fresh.html create mode 100644 pages/db/struct.NameHash.html create mode 100644 pages/db/struct.Register.html create mode 100644 pages/db/struct.UpdateEmail.html create mode 100644 pages/enum.Commands.html create mode 100644 pages/fn.get_identity_service.html create mode 100644 pages/fn.serve.html create mode 100644 pages/git/enum.ContentType.html create mode 100644 pages/git/enum.GitFileMode.html create mode 100644 pages/git/fn.read_file.html create mode 100644 pages/git/fn.read_file_inner.html create mode 100644 pages/git/fn.read_preview_file.html create mode 100644 pages/git/index.html create mode 100644 pages/git/sidebar-items.js create mode 100644 pages/git/struct.FileInfo.html create mode 100644 pages/meta/struct.Health.html rename pages/{routes/struct.Routes.html => meta/struct.health.html} (62%) create mode 100644 pages/preview/index.html create mode 100644 pages/preview/sidebar-items.js create mode 100644 pages/preview/struct.Preview.html delete mode 100644 pages/routes/constant.ROUTES.html delete mode 100644 pages/routes/fn.services.html create mode 100644 pages/serve/fn.find_page.html create mode 100644 pages/serve/fn.services.html create mode 100644 pages/serve/index.html create mode 100644 pages/serve/routes/index.html create mode 100644 pages/serve/routes/sidebar-items.js create mode 100644 pages/serve/routes/struct.Serve.html create mode 100644 pages/serve/sidebar-items.js create mode 100644 pages/serve/struct.index.html create mode 100644 pages/settings/enum.DBType.html create mode 100644 pages/settings/struct.Database.html create mode 100644 pages/struct.Cli.html create mode 100644 pages/utils/fn.get_random.html create mode 100644 pages/utils/index.html create mode 100644 pages/utils/sidebar-items.js create mode 100644 src/pages/api/mod.rs.html create mode 100644 src/pages/api/v1/account/mod.rs.html create mode 100644 src/pages/api/v1/auth.rs.html create mode 100644 src/pages/api/v1/mod.rs.html create mode 100644 src/pages/api/v1/routes.rs.html delete mode 100644 src/pages/ctx.rs.html create mode 100644 src/pages/ctx/api/mod.rs.html create mode 100644 src/pages/ctx/api/v1/account.rs.html create mode 100644 src/pages/ctx/api/v1/auth.rs.html create mode 100644 src/pages/ctx/api/v1/mod.rs.html create mode 100644 src/pages/ctx/mod.rs.html create mode 100644 src/pages/db.rs.html create mode 100644 src/pages/git.rs.html create mode 100644 src/pages/preview.rs.html create mode 100644 src/pages/serve.rs.html create mode 100644 src/pages/utils.rs.html diff --git a/implementors/actix_auth_middleware/trait.GetLoginRoute.js b/implementors/actix_auth_middleware/trait.GetLoginRoute.js new file mode 100644 index 0000000..64a9868 --- /dev/null +++ b/implementors/actix_auth_middleware/trait.GetLoginRoute.js @@ -0,0 +1,3 @@ +(function() {var implementors = {}; +implementors["pages"] = [{"text":"impl GetLoginRoute for Routes","synthetic":false,"types":["pages::api::v1::routes::Routes"]}]; +if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/actix_web/service/trait.HttpServiceFactory.js b/implementors/actix_web/service/trait.HttpServiceFactory.js index 2cbab09..ae55eea 100644 --- a/implementors/actix_web/service/trait.HttpServiceFactory.js +++ b/implementors/actix_web/service/trait.HttpServiceFactory.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl HttpServiceFactory for update","synthetic":false,"types":["pages::deploy::update"]},{"text":"impl HttpServiceFactory for deploy_info","synthetic":false,"types":["pages::deploy::deploy_info"]},{"text":"impl HttpServiceFactory for build_details","synthetic":false,"types":["pages::meta::build_details"]}]; +implementors["pages"] = [{"text":"impl HttpServiceFactory for set_username","synthetic":false,"types":["pages::api::v1::account::set_username"]},{"text":"impl HttpServiceFactory for username_exists","synthetic":false,"types":["pages::api::v1::account::username_exists"]},{"text":"impl HttpServiceFactory for email_exists","synthetic":false,"types":["pages::api::v1::account::email_exists"]},{"text":"impl HttpServiceFactory for set_email","synthetic":false,"types":["pages::api::v1::account::set_email"]},{"text":"impl HttpServiceFactory for delete_account","synthetic":false,"types":["pages::api::v1::account::delete_account"]},{"text":"impl HttpServiceFactory for update_user_password","synthetic":false,"types":["pages::api::v1::account::update_user_password"]},{"text":"impl HttpServiceFactory for register","synthetic":false,"types":["pages::api::v1::auth::register"]},{"text":"impl HttpServiceFactory for login","synthetic":false,"types":["pages::api::v1::auth::login"]},{"text":"impl HttpServiceFactory for signout","synthetic":false,"types":["pages::api::v1::auth::signout"]},{"text":"impl HttpServiceFactory for update","synthetic":false,"types":["pages::deploy::update"]},{"text":"impl HttpServiceFactory for deploy_info","synthetic":false,"types":["pages::deploy::deploy_info"]},{"text":"impl HttpServiceFactory for build_details","synthetic":false,"types":["pages::meta::build_details"]},{"text":"impl HttpServiceFactory for health","synthetic":false,"types":["pages::meta::health"]},{"text":"impl HttpServiceFactory for index","synthetic":false,"types":["pages::serve::index"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/clap/derive/trait.Args.js b/implementors/clap/derive/trait.Args.js new file mode 100644 index 0000000..0f1b32c --- /dev/null +++ b/implementors/clap/derive/trait.Args.js @@ -0,0 +1,3 @@ +(function() {var implementors = {}; +implementors["pages"] = [{"text":"impl Args for Cli","synthetic":false,"types":["pages::Cli"]}]; +if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/clap/derive/trait.CommandFactory.js b/implementors/clap/derive/trait.CommandFactory.js new file mode 100644 index 0000000..b04fc65 --- /dev/null +++ b/implementors/clap/derive/trait.CommandFactory.js @@ -0,0 +1,3 @@ +(function() {var implementors = {}; +implementors["pages"] = [{"text":"impl CommandFactory for Cli","synthetic":false,"types":["pages::Cli"]}]; +if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/clap/derive/trait.FromArgMatches.js b/implementors/clap/derive/trait.FromArgMatches.js new file mode 100644 index 0000000..a8ed812 --- /dev/null +++ b/implementors/clap/derive/trait.FromArgMatches.js @@ -0,0 +1,3 @@ +(function() {var implementors = {}; +implementors["pages"] = [{"text":"impl FromArgMatches for Cli","synthetic":false,"types":["pages::Cli"]},{"text":"impl FromArgMatches for Commands","synthetic":false,"types":["pages::Commands"]}]; +if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/clap/derive/trait.Parser.js b/implementors/clap/derive/trait.Parser.js new file mode 100644 index 0000000..5dc16ba --- /dev/null +++ b/implementors/clap/derive/trait.Parser.js @@ -0,0 +1,3 @@ +(function() {var implementors = {}; +implementors["pages"] = [{"text":"impl Parser for Cli","synthetic":false,"types":["pages::Cli"]}]; +if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/clap/derive/trait.Subcommand.js b/implementors/clap/derive/trait.Subcommand.js new file mode 100644 index 0000000..8fad26d --- /dev/null +++ b/implementors/clap/derive/trait.Subcommand.js @@ -0,0 +1,3 @@ +(function() {var implementors = {}; +implementors["pages"] = [{"text":"impl Subcommand for Commands","synthetic":false,"types":["pages::Commands"]}]; +if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/clone/trait.Clone.js b/implementors/core/clone/trait.Clone.js index a1e6ace..bc7ede8 100644 --- a/implementors/core/clone/trait.Clone.js +++ b/implementors/core/clone/trait.Clone.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl Clone for Ctx","synthetic":false,"types":["pages::ctx::Ctx"]},{"text":"impl Clone for DeployEvent","synthetic":false,"types":["pages::deploy::DeployEvent"]},{"text":"impl Clone for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl Clone for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl<'a> Clone for BuildDetails<'a>","synthetic":false,"types":["pages::meta::BuildDetails"]},{"text":"impl Clone for Page","synthetic":false,"types":["pages::page::Page"]},{"text":"impl Clone for Server","synthetic":false,"types":["pages::settings::Server"]},{"text":"impl Clone for Settings","synthetic":false,"types":["pages::settings::Settings"]}]; +implementors["pages"] = [{"text":"impl Clone for AccountCheckPayload","synthetic":false,"types":["pages::api::v1::account::AccountCheckPayload"]},{"text":"impl Clone for Email","synthetic":false,"types":["pages::api::v1::account::Email"]},{"text":"impl Clone for Username","synthetic":false,"types":["pages::api::v1::account::Username"]},{"text":"impl Clone for AccountCheckResp","synthetic":false,"types":["pages::ctx::api::v1::account::AccountCheckResp"]},{"text":"impl Clone for ChangePasswordReqest","synthetic":false,"types":["pages::ctx::api::v1::account::ChangePasswordReqest"]},{"text":"impl Clone for Register","synthetic":false,"types":["pages::ctx::api::v1::auth::Register"]},{"text":"impl Clone for Login","synthetic":false,"types":["pages::ctx::api::v1::auth::Login"]},{"text":"impl Clone for Password","synthetic":false,"types":["pages::ctx::api::v1::auth::Password"]},{"text":"impl Clone for Ctx","synthetic":false,"types":["pages::ctx::Ctx"]},{"text":"impl Clone for Database","synthetic":false,"types":["pages::db::Database"]},{"text":"impl<'a> Clone for Register<'a>","synthetic":false,"types":["pages::db::Register"]},{"text":"impl<'a> Clone for UpdateEmail<'a>","synthetic":false,"types":["pages::db::UpdateEmail"]},{"text":"impl<'a> Clone for Login<'a>","synthetic":false,"types":["pages::db::Login"]},{"text":"impl Clone for NameHash","synthetic":false,"types":["pages::db::NameHash"]},{"text":"impl Clone for DeployEvent","synthetic":false,"types":["pages::deploy::DeployEvent"]},{"text":"impl Clone for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl Clone for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl Clone for GitFileMode","synthetic":false,"types":["pages::git::GitFileMode"]},{"text":"impl Clone for FileInfo","synthetic":false,"types":["pages::git::FileInfo"]},{"text":"impl Clone for ContentType","synthetic":false,"types":["pages::git::ContentType"]},{"text":"impl<'a> Clone for BuildDetails<'a>","synthetic":false,"types":["pages::meta::BuildDetails"]},{"text":"impl Clone for Health","synthetic":false,"types":["pages::meta::Health"]},{"text":"impl Clone for Page","synthetic":false,"types":["pages::page::Page"]},{"text":"impl Clone for Server","synthetic":false,"types":["pages::settings::Server"]},{"text":"impl Clone for DBType","synthetic":false,"types":["pages::settings::DBType"]},{"text":"impl Clone for Database","synthetic":false,"types":["pages::settings::Database"]},{"text":"impl Clone for Settings","synthetic":false,"types":["pages::settings::Settings"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/cmp/trait.Eq.js b/implementors/core/cmp/trait.Eq.js new file mode 100644 index 0000000..13e284b --- /dev/null +++ b/implementors/core/cmp/trait.Eq.js @@ -0,0 +1,3 @@ +(function() {var implementors = {}; +implementors["pages"] = [{"text":"impl<'a> Eq for Register<'a>","synthetic":false,"types":["pages::db::Register"]},{"text":"impl<'a> Eq for UpdateEmail<'a>","synthetic":false,"types":["pages::db::UpdateEmail"]},{"text":"impl<'a> Eq for Login<'a>","synthetic":false,"types":["pages::db::Login"]},{"text":"impl Eq for NameHash","synthetic":false,"types":["pages::db::NameHash"]},{"text":"impl Eq for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl Eq for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl Eq for GitFileMode","synthetic":false,"types":["pages::git::GitFileMode"]},{"text":"impl Eq for FileInfo","synthetic":false,"types":["pages::git::FileInfo"]},{"text":"impl Eq for ContentType","synthetic":false,"types":["pages::git::ContentType"]},{"text":"impl Eq for Page","synthetic":false,"types":["pages::page::Page"]},{"text":"impl Eq for DBType","synthetic":false,"types":["pages::settings::DBType"]}]; +if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/cmp/trait.PartialEq.js b/implementors/core/cmp/trait.PartialEq.js index 3918baf..ab0ea24 100644 --- a/implementors/core/cmp/trait.PartialEq.js +++ b/implementors/core/cmp/trait.PartialEq.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl PartialEq<DeploySecret> for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl PartialEq<DeployInfo> for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl PartialEq<FSError> for FSError","synthetic":false,"types":["pages::errors::FSError"]},{"text":"impl PartialEq<ConfigError> for ConfigError","synthetic":false,"types":["pages::errors::ConfigError"]},{"text":"impl PartialEq<ServiceError> for ServiceError","synthetic":false,"types":["pages::errors::ServiceError"]},{"text":"impl PartialEq<Page> for Page","synthetic":false,"types":["pages::page::Page"]}]; +implementors["pages"] = [{"text":"impl<'a> PartialEq<Register<'a>> for Register<'a>","synthetic":false,"types":["pages::db::Register"]},{"text":"impl<'a> PartialEq<UpdateEmail<'a>> for UpdateEmail<'a>","synthetic":false,"types":["pages::db::UpdateEmail"]},{"text":"impl<'a> PartialEq<Login<'a>> for Login<'a>","synthetic":false,"types":["pages::db::Login"]},{"text":"impl PartialEq<NameHash> for NameHash","synthetic":false,"types":["pages::db::NameHash"]},{"text":"impl PartialEq<DeploySecret> for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl PartialEq<DeployInfo> for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl PartialEq<FSError> for FSError","synthetic":false,"types":["pages::errors::FSError"]},{"text":"impl PartialEq<ConfigError> for ConfigError","synthetic":false,"types":["pages::errors::ConfigError"]},{"text":"impl PartialEq<ServiceError> for ServiceError","synthetic":false,"types":["pages::errors::ServiceError"]},{"text":"impl PartialEq<GitFileMode> for GitFileMode","synthetic":false,"types":["pages::git::GitFileMode"]},{"text":"impl PartialEq<FileInfo> for FileInfo","synthetic":false,"types":["pages::git::FileInfo"]},{"text":"impl PartialEq<ContentType> for ContentType","synthetic":false,"types":["pages::git::ContentType"]},{"text":"impl PartialEq<Page> for Page","synthetic":false,"types":["pages::page::Page"]},{"text":"impl PartialEq<DBType> for DBType","synthetic":false,"types":["pages::settings::DBType"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/convert/trait.From.js b/implementors/core/convert/trait.From.js index 62684e9..2ee98e0 100644 --- a/implementors/core/convert/trait.From.js +++ b/implementors/core/convert/trait.From.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl From<Error> for ServiceError","synthetic":false,"types":["pages::errors::ServiceError"]},{"text":"impl From<ConfigError> for ServiceError","synthetic":false,"types":["pages::errors::ServiceError"]},{"text":"impl From<ParseError> for ServiceError","synthetic":false,"types":["pages::errors::ServiceError"]},{"text":"impl From<Error> for ServiceError","synthetic":false,"types":["pages::errors::ServiceError"]}]; +implementors["pages"] = [{"text":"impl From<Error> for ServiceError","synthetic":false,"types":["pages::errors::ServiceError"]},{"text":"impl From<ConfigError> for ServiceError","synthetic":false,"types":["pages::errors::ServiceError"]},{"text":"impl From<ParseError> for ServiceError","synthetic":false,"types":["pages::errors::ServiceError"]},{"text":"impl From<Error> for ServiceError","synthetic":false,"types":["pages::errors::ServiceError"]},{"text":"impl From<CredsError> for ServiceError","synthetic":false,"types":["pages::errors::ServiceError"]},{"text":"impl From<isize> for GitFileMode","synthetic":false,"types":["pages::git::GitFileMode"]},{"text":"impl From<&TreeEntry<'_>> for GitFileMode","synthetic":false,"types":["pages::git::GitFileMode"]},{"text":"impl From<TreeEntry<'_>> for GitFileMode","synthetic":false,"types":["pages::git::GitFileMode"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/fmt/trait.Debug.js b/implementors/core/fmt/trait.Debug.js index 59ac462..89a6815 100644 --- a/implementors/core/fmt/trait.Debug.js +++ b/implementors/core/fmt/trait.Debug.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl Debug for DeployEvent","synthetic":false,"types":["pages::deploy::DeployEvent"]},{"text":"impl Debug for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl Debug for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl Debug for FSError","synthetic":false,"types":["pages::errors::FSError"]},{"text":"impl Debug for ConfigError","synthetic":false,"types":["pages::errors::ConfigError"]},{"text":"impl Debug for ServiceError","synthetic":false,"types":["pages::errors::ServiceError"]},{"text":"impl Debug for ErrorToResponse","synthetic":false,"types":["pages::errors::ErrorToResponse"]},{"text":"impl<'a> Debug for BuildDetails<'a>","synthetic":false,"types":["pages::meta::BuildDetails"]},{"text":"impl Debug for Page","synthetic":false,"types":["pages::page::Page"]},{"text":"impl Debug for Server","synthetic":false,"types":["pages::settings::Server"]},{"text":"impl Debug for Settings","synthetic":false,"types":["pages::settings::Settings"]}]; +implementors["pages"] = [{"text":"impl Debug for AccountCheckPayload","synthetic":false,"types":["pages::api::v1::account::AccountCheckPayload"]},{"text":"impl Debug for Email","synthetic":false,"types":["pages::api::v1::account::Email"]},{"text":"impl Debug for Username","synthetic":false,"types":["pages::api::v1::account::Username"]},{"text":"impl Debug for AccountCheckResp","synthetic":false,"types":["pages::ctx::api::v1::account::AccountCheckResp"]},{"text":"impl Debug for ChangePasswordReqest","synthetic":false,"types":["pages::ctx::api::v1::account::ChangePasswordReqest"]},{"text":"impl Debug for Register","synthetic":false,"types":["pages::ctx::api::v1::auth::Register"]},{"text":"impl Debug for Login","synthetic":false,"types":["pages::ctx::api::v1::auth::Login"]},{"text":"impl Debug for Password","synthetic":false,"types":["pages::ctx::api::v1::auth::Password"]},{"text":"impl<'a> Debug for Register<'a>","synthetic":false,"types":["pages::db::Register"]},{"text":"impl<'a> Debug for UpdateEmail<'a>","synthetic":false,"types":["pages::db::UpdateEmail"]},{"text":"impl<'a> Debug for Login<'a>","synthetic":false,"types":["pages::db::Login"]},{"text":"impl Debug for NameHash","synthetic":false,"types":["pages::db::NameHash"]},{"text":"impl Debug for DeployEvent","synthetic":false,"types":["pages::deploy::DeployEvent"]},{"text":"impl Debug for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl Debug for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl Debug for FSError","synthetic":false,"types":["pages::errors::FSError"]},{"text":"impl Debug for ConfigError","synthetic":false,"types":["pages::errors::ConfigError"]},{"text":"impl Debug for ServiceError","synthetic":false,"types":["pages::errors::ServiceError"]},{"text":"impl Debug for ErrorToResponse","synthetic":false,"types":["pages::errors::ErrorToResponse"]},{"text":"impl Debug for GitFileMode","synthetic":false,"types":["pages::git::GitFileMode"]},{"text":"impl Debug for FileInfo","synthetic":false,"types":["pages::git::FileInfo"]},{"text":"impl Debug for ContentType","synthetic":false,"types":["pages::git::ContentType"]},{"text":"impl<'a> Debug for BuildDetails<'a>","synthetic":false,"types":["pages::meta::BuildDetails"]},{"text":"impl Debug for Health","synthetic":false,"types":["pages::meta::Health"]},{"text":"impl Debug for Page","synthetic":false,"types":["pages::page::Page"]},{"text":"impl Debug for Server","synthetic":false,"types":["pages::settings::Server"]},{"text":"impl Debug for DBType","synthetic":false,"types":["pages::settings::DBType"]},{"text":"impl Debug for Database","synthetic":false,"types":["pages::settings::Database"]},{"text":"impl Debug for Settings","synthetic":false,"types":["pages::settings::Settings"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/fmt/trait.Display.js b/implementors/core/fmt/trait.Display.js index 9fe8c4c..2a25853 100644 --- a/implementors/core/fmt/trait.Display.js +++ b/implementors/core/fmt/trait.Display.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl Display for FSError","synthetic":false,"types":["pages::errors::FSError"]},{"text":"impl Display for ConfigError","synthetic":false,"types":["pages::errors::ConfigError"]},{"text":"impl Display for ServiceError","synthetic":false,"types":["pages::errors::ServiceError"]}]; +implementors["pages"] = [{"text":"impl Display for FSError","synthetic":false,"types":["pages::errors::FSError"]},{"text":"impl Display for ConfigError","synthetic":false,"types":["pages::errors::ConfigError"]},{"text":"impl Display for ServiceError","synthetic":false,"types":["pages::errors::ServiceError"]},{"text":"impl Display for DBType","synthetic":false,"types":["pages::settings::DBType"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/marker/trait.Freeze.js b/implementors/core/marker/trait.Freeze.js index e86145b..313f018 100644 --- a/implementors/core/marker/trait.Freeze.js +++ b/implementors/core/marker/trait.Freeze.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl Freeze for Ctx","synthetic":true,"types":["pages::ctx::Ctx"]},{"text":"impl Freeze for Deploy","synthetic":true,"types":["pages::deploy::routes::Deploy"]},{"text":"impl Freeze for DeployEvent","synthetic":true,"types":["pages::deploy::DeployEvent"]},{"text":"impl Freeze for update","synthetic":true,"types":["pages::deploy::update"]},{"text":"impl Freeze for DeploySecret","synthetic":true,"types":["pages::deploy::DeploySecret"]},{"text":"impl Freeze for DeployInfo","synthetic":true,"types":["pages::deploy::DeployInfo"]},{"text":"impl Freeze for deploy_info","synthetic":true,"types":["pages::deploy::deploy_info"]},{"text":"impl Freeze for FSError","synthetic":true,"types":["pages::errors::FSError"]},{"text":"impl Freeze for ConfigError","synthetic":true,"types":["pages::errors::ConfigError"]},{"text":"impl Freeze for ServiceError","synthetic":true,"types":["pages::errors::ServiceError"]},{"text":"impl Freeze for ErrorToResponse","synthetic":true,"types":["pages::errors::ErrorToResponse"]},{"text":"impl Freeze for Meta","synthetic":true,"types":["pages::meta::routes::Meta"]},{"text":"impl<'a> Freeze for BuildDetails<'a>","synthetic":true,"types":["pages::meta::BuildDetails"]},{"text":"impl Freeze for build_details","synthetic":true,"types":["pages::meta::build_details"]},{"text":"impl Freeze for Page","synthetic":true,"types":["pages::page::Page"]},{"text":"impl Freeze for Routes","synthetic":true,"types":["pages::routes::Routes"]},{"text":"impl Freeze for Server","synthetic":true,"types":["pages::settings::Server"]},{"text":"impl Freeze for Settings","synthetic":true,"types":["pages::settings::Settings"]}]; +implementors["pages"] = [{"text":"impl Freeze for AccountCheckPayload","synthetic":true,"types":["pages::api::v1::account::AccountCheckPayload"]},{"text":"impl Freeze for Email","synthetic":true,"types":["pages::api::v1::account::Email"]},{"text":"impl Freeze for Username","synthetic":true,"types":["pages::api::v1::account::Username"]},{"text":"impl Freeze for set_username","synthetic":true,"types":["pages::api::v1::account::set_username"]},{"text":"impl Freeze for username_exists","synthetic":true,"types":["pages::api::v1::account::username_exists"]},{"text":"impl Freeze for email_exists","synthetic":true,"types":["pages::api::v1::account::email_exists"]},{"text":"impl Freeze for set_email","synthetic":true,"types":["pages::api::v1::account::set_email"]},{"text":"impl Freeze for delete_account","synthetic":true,"types":["pages::api::v1::account::delete_account"]},{"text":"impl Freeze for update_user_password","synthetic":true,"types":["pages::api::v1::account::update_user_password"]},{"text":"impl Freeze for register","synthetic":true,"types":["pages::api::v1::auth::register"]},{"text":"impl Freeze for login","synthetic":true,"types":["pages::api::v1::auth::login"]},{"text":"impl Freeze for signout","synthetic":true,"types":["pages::api::v1::auth::signout"]},{"text":"impl Freeze for Auth","synthetic":true,"types":["pages::api::v1::routes::Auth"]},{"text":"impl Freeze for Account","synthetic":true,"types":["pages::api::v1::routes::Account"]},{"text":"impl Freeze for Routes","synthetic":true,"types":["pages::api::v1::routes::Routes"]},{"text":"impl Freeze for RedirectQuery","synthetic":true,"types":["pages::api::v1::RedirectQuery"]},{"text":"impl Freeze for AccountCheckResp","synthetic":true,"types":["pages::ctx::api::v1::account::AccountCheckResp"]},{"text":"impl Freeze for ChangePasswordReqest","synthetic":true,"types":["pages::ctx::api::v1::account::ChangePasswordReqest"]},{"text":"impl Freeze for Register","synthetic":true,"types":["pages::ctx::api::v1::auth::Register"]},{"text":"impl Freeze for Login","synthetic":true,"types":["pages::ctx::api::v1::auth::Login"]},{"text":"impl Freeze for Password","synthetic":true,"types":["pages::ctx::api::v1::auth::Password"]},{"text":"impl Freeze for Ctx","synthetic":true,"types":["pages::ctx::Ctx"]},{"text":"impl Freeze for ConnectionOptions","synthetic":true,"types":["pages::db::ConnectionOptions"]},{"text":"impl Freeze for Conn","synthetic":true,"types":["pages::db::Conn"]},{"text":"impl Freeze for Fresh","synthetic":true,"types":["pages::db::Fresh"]},{"text":"impl Freeze for Database","synthetic":true,"types":["pages::db::Database"]},{"text":"impl<'a> Freeze for Register<'a>","synthetic":true,"types":["pages::db::Register"]},{"text":"impl<'a> Freeze for UpdateEmail<'a>","synthetic":true,"types":["pages::db::UpdateEmail"]},{"text":"impl<'a> Freeze for Login<'a>","synthetic":true,"types":["pages::db::Login"]},{"text":"impl Freeze for NameHash","synthetic":true,"types":["pages::db::NameHash"]},{"text":"impl Freeze for Deploy","synthetic":true,"types":["pages::deploy::routes::Deploy"]},{"text":"impl Freeze for DeployEvent","synthetic":true,"types":["pages::deploy::DeployEvent"]},{"text":"impl Freeze for update","synthetic":true,"types":["pages::deploy::update"]},{"text":"impl Freeze for DeploySecret","synthetic":true,"types":["pages::deploy::DeploySecret"]},{"text":"impl Freeze for DeployInfo","synthetic":true,"types":["pages::deploy::DeployInfo"]},{"text":"impl Freeze for deploy_info","synthetic":true,"types":["pages::deploy::deploy_info"]},{"text":"impl Freeze for FSError","synthetic":true,"types":["pages::errors::FSError"]},{"text":"impl Freeze for ConfigError","synthetic":true,"types":["pages::errors::ConfigError"]},{"text":"impl Freeze for ServiceError","synthetic":true,"types":["pages::errors::ServiceError"]},{"text":"impl Freeze for ErrorToResponse","synthetic":true,"types":["pages::errors::ErrorToResponse"]},{"text":"impl Freeze for GitFileMode","synthetic":true,"types":["pages::git::GitFileMode"]},{"text":"impl Freeze for FileInfo","synthetic":true,"types":["pages::git::FileInfo"]},{"text":"impl Freeze for ContentType","synthetic":true,"types":["pages::git::ContentType"]},{"text":"impl Freeze for Meta","synthetic":true,"types":["pages::meta::routes::Meta"]},{"text":"impl<'a> Freeze for BuildDetails<'a>","synthetic":true,"types":["pages::meta::BuildDetails"]},{"text":"impl Freeze for build_details","synthetic":true,"types":["pages::meta::build_details"]},{"text":"impl Freeze for Health","synthetic":true,"types":["pages::meta::Health"]},{"text":"impl Freeze for health","synthetic":true,"types":["pages::meta::health"]},{"text":"impl Freeze for Page","synthetic":true,"types":["pages::page::Page"]},{"text":"impl<'a> Freeze for Preview<'a>","synthetic":true,"types":["pages::preview::Preview"]},{"text":"impl Freeze for Serve","synthetic":true,"types":["pages::serve::routes::Serve"]},{"text":"impl Freeze for index","synthetic":true,"types":["pages::serve::index"]},{"text":"impl Freeze for Server","synthetic":true,"types":["pages::settings::Server"]},{"text":"impl Freeze for DBType","synthetic":true,"types":["pages::settings::DBType"]},{"text":"impl Freeze for Database","synthetic":true,"types":["pages::settings::Database"]},{"text":"impl Freeze for Settings","synthetic":true,"types":["pages::settings::Settings"]},{"text":"impl Freeze for Cli","synthetic":true,"types":["pages::Cli"]},{"text":"impl Freeze for Commands","synthetic":true,"types":["pages::Commands"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/marker/trait.Send.js b/implementors/core/marker/trait.Send.js index 29cf9b5..7533445 100644 --- a/implementors/core/marker/trait.Send.js +++ b/implementors/core/marker/trait.Send.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl Send for Ctx","synthetic":true,"types":["pages::ctx::Ctx"]},{"text":"impl Send for Deploy","synthetic":true,"types":["pages::deploy::routes::Deploy"]},{"text":"impl Send for DeployEvent","synthetic":true,"types":["pages::deploy::DeployEvent"]},{"text":"impl Send for update","synthetic":true,"types":["pages::deploy::update"]},{"text":"impl Send for DeploySecret","synthetic":true,"types":["pages::deploy::DeploySecret"]},{"text":"impl Send for DeployInfo","synthetic":true,"types":["pages::deploy::DeployInfo"]},{"text":"impl Send for deploy_info","synthetic":true,"types":["pages::deploy::deploy_info"]},{"text":"impl Send for FSError","synthetic":true,"types":["pages::errors::FSError"]},{"text":"impl Send for ConfigError","synthetic":true,"types":["pages::errors::ConfigError"]},{"text":"impl Send for ServiceError","synthetic":true,"types":["pages::errors::ServiceError"]},{"text":"impl Send for ErrorToResponse","synthetic":true,"types":["pages::errors::ErrorToResponse"]},{"text":"impl Send for Meta","synthetic":true,"types":["pages::meta::routes::Meta"]},{"text":"impl<'a> Send for BuildDetails<'a>","synthetic":true,"types":["pages::meta::BuildDetails"]},{"text":"impl Send for build_details","synthetic":true,"types":["pages::meta::build_details"]},{"text":"impl Send for Page","synthetic":true,"types":["pages::page::Page"]},{"text":"impl Send for Routes","synthetic":true,"types":["pages::routes::Routes"]},{"text":"impl Send for Server","synthetic":true,"types":["pages::settings::Server"]},{"text":"impl Send for Settings","synthetic":true,"types":["pages::settings::Settings"]}]; +implementors["pages"] = [{"text":"impl Send for AccountCheckPayload","synthetic":true,"types":["pages::api::v1::account::AccountCheckPayload"]},{"text":"impl Send for Email","synthetic":true,"types":["pages::api::v1::account::Email"]},{"text":"impl Send for Username","synthetic":true,"types":["pages::api::v1::account::Username"]},{"text":"impl Send for set_username","synthetic":true,"types":["pages::api::v1::account::set_username"]},{"text":"impl Send for username_exists","synthetic":true,"types":["pages::api::v1::account::username_exists"]},{"text":"impl Send for email_exists","synthetic":true,"types":["pages::api::v1::account::email_exists"]},{"text":"impl Send for set_email","synthetic":true,"types":["pages::api::v1::account::set_email"]},{"text":"impl Send for delete_account","synthetic":true,"types":["pages::api::v1::account::delete_account"]},{"text":"impl Send for update_user_password","synthetic":true,"types":["pages::api::v1::account::update_user_password"]},{"text":"impl Send for register","synthetic":true,"types":["pages::api::v1::auth::register"]},{"text":"impl Send for login","synthetic":true,"types":["pages::api::v1::auth::login"]},{"text":"impl Send for signout","synthetic":true,"types":["pages::api::v1::auth::signout"]},{"text":"impl Send for Auth","synthetic":true,"types":["pages::api::v1::routes::Auth"]},{"text":"impl Send for Account","synthetic":true,"types":["pages::api::v1::routes::Account"]},{"text":"impl Send for Routes","synthetic":true,"types":["pages::api::v1::routes::Routes"]},{"text":"impl Send for RedirectQuery","synthetic":true,"types":["pages::api::v1::RedirectQuery"]},{"text":"impl Send for AccountCheckResp","synthetic":true,"types":["pages::ctx::api::v1::account::AccountCheckResp"]},{"text":"impl Send for ChangePasswordReqest","synthetic":true,"types":["pages::ctx::api::v1::account::ChangePasswordReqest"]},{"text":"impl Send for Register","synthetic":true,"types":["pages::ctx::api::v1::auth::Register"]},{"text":"impl Send for Login","synthetic":true,"types":["pages::ctx::api::v1::auth::Login"]},{"text":"impl Send for Password","synthetic":true,"types":["pages::ctx::api::v1::auth::Password"]},{"text":"impl Send for Ctx","synthetic":true,"types":["pages::ctx::Ctx"]},{"text":"impl Send for ConnectionOptions","synthetic":true,"types":["pages::db::ConnectionOptions"]},{"text":"impl Send for Conn","synthetic":true,"types":["pages::db::Conn"]},{"text":"impl Send for Fresh","synthetic":true,"types":["pages::db::Fresh"]},{"text":"impl Send for Database","synthetic":true,"types":["pages::db::Database"]},{"text":"impl<'a> Send for Register<'a>","synthetic":true,"types":["pages::db::Register"]},{"text":"impl<'a> Send for UpdateEmail<'a>","synthetic":true,"types":["pages::db::UpdateEmail"]},{"text":"impl<'a> Send for Login<'a>","synthetic":true,"types":["pages::db::Login"]},{"text":"impl Send for NameHash","synthetic":true,"types":["pages::db::NameHash"]},{"text":"impl Send for Deploy","synthetic":true,"types":["pages::deploy::routes::Deploy"]},{"text":"impl Send for DeployEvent","synthetic":true,"types":["pages::deploy::DeployEvent"]},{"text":"impl Send for update","synthetic":true,"types":["pages::deploy::update"]},{"text":"impl Send for DeploySecret","synthetic":true,"types":["pages::deploy::DeploySecret"]},{"text":"impl Send for DeployInfo","synthetic":true,"types":["pages::deploy::DeployInfo"]},{"text":"impl Send for deploy_info","synthetic":true,"types":["pages::deploy::deploy_info"]},{"text":"impl Send for FSError","synthetic":true,"types":["pages::errors::FSError"]},{"text":"impl Send for ConfigError","synthetic":true,"types":["pages::errors::ConfigError"]},{"text":"impl Send for ServiceError","synthetic":true,"types":["pages::errors::ServiceError"]},{"text":"impl Send for ErrorToResponse","synthetic":true,"types":["pages::errors::ErrorToResponse"]},{"text":"impl Send for GitFileMode","synthetic":true,"types":["pages::git::GitFileMode"]},{"text":"impl Send for FileInfo","synthetic":true,"types":["pages::git::FileInfo"]},{"text":"impl Send for ContentType","synthetic":true,"types":["pages::git::ContentType"]},{"text":"impl Send for Meta","synthetic":true,"types":["pages::meta::routes::Meta"]},{"text":"impl<'a> Send for BuildDetails<'a>","synthetic":true,"types":["pages::meta::BuildDetails"]},{"text":"impl Send for build_details","synthetic":true,"types":["pages::meta::build_details"]},{"text":"impl Send for Health","synthetic":true,"types":["pages::meta::Health"]},{"text":"impl Send for health","synthetic":true,"types":["pages::meta::health"]},{"text":"impl Send for Page","synthetic":true,"types":["pages::page::Page"]},{"text":"impl<'a> Send for Preview<'a>","synthetic":true,"types":["pages::preview::Preview"]},{"text":"impl Send for Serve","synthetic":true,"types":["pages::serve::routes::Serve"]},{"text":"impl Send for index","synthetic":true,"types":["pages::serve::index"]},{"text":"impl Send for Server","synthetic":true,"types":["pages::settings::Server"]},{"text":"impl Send for DBType","synthetic":true,"types":["pages::settings::DBType"]},{"text":"impl Send for Database","synthetic":true,"types":["pages::settings::Database"]},{"text":"impl Send for Settings","synthetic":true,"types":["pages::settings::Settings"]},{"text":"impl Send for Cli","synthetic":true,"types":["pages::Cli"]},{"text":"impl Send for Commands","synthetic":true,"types":["pages::Commands"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/marker/trait.StructuralEq.js b/implementors/core/marker/trait.StructuralEq.js new file mode 100644 index 0000000..572534c --- /dev/null +++ b/implementors/core/marker/trait.StructuralEq.js @@ -0,0 +1,3 @@ +(function() {var implementors = {}; +implementors["pages"] = [{"text":"impl<'a> StructuralEq for Register<'a>","synthetic":false,"types":["pages::db::Register"]},{"text":"impl<'a> StructuralEq for UpdateEmail<'a>","synthetic":false,"types":["pages::db::UpdateEmail"]},{"text":"impl<'a> StructuralEq for Login<'a>","synthetic":false,"types":["pages::db::Login"]},{"text":"impl StructuralEq for NameHash","synthetic":false,"types":["pages::db::NameHash"]},{"text":"impl StructuralEq for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl StructuralEq for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl StructuralEq for GitFileMode","synthetic":false,"types":["pages::git::GitFileMode"]},{"text":"impl StructuralEq for FileInfo","synthetic":false,"types":["pages::git::FileInfo"]},{"text":"impl StructuralEq for ContentType","synthetic":false,"types":["pages::git::ContentType"]},{"text":"impl StructuralEq for Page","synthetic":false,"types":["pages::page::Page"]},{"text":"impl StructuralEq for DBType","synthetic":false,"types":["pages::settings::DBType"]}]; +if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/marker/trait.StructuralPartialEq.js b/implementors/core/marker/trait.StructuralPartialEq.js index 465fee6..d3d84aa 100644 --- a/implementors/core/marker/trait.StructuralPartialEq.js +++ b/implementors/core/marker/trait.StructuralPartialEq.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl StructuralPartialEq for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl StructuralPartialEq for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl StructuralPartialEq for ServiceError","synthetic":false,"types":["pages::errors::ServiceError"]},{"text":"impl StructuralPartialEq for Page","synthetic":false,"types":["pages::page::Page"]}]; +implementors["pages"] = [{"text":"impl<'a> StructuralPartialEq for Register<'a>","synthetic":false,"types":["pages::db::Register"]},{"text":"impl<'a> StructuralPartialEq for UpdateEmail<'a>","synthetic":false,"types":["pages::db::UpdateEmail"]},{"text":"impl<'a> StructuralPartialEq for Login<'a>","synthetic":false,"types":["pages::db::Login"]},{"text":"impl StructuralPartialEq for NameHash","synthetic":false,"types":["pages::db::NameHash"]},{"text":"impl StructuralPartialEq for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl StructuralPartialEq for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl StructuralPartialEq for ServiceError","synthetic":false,"types":["pages::errors::ServiceError"]},{"text":"impl StructuralPartialEq for GitFileMode","synthetic":false,"types":["pages::git::GitFileMode"]},{"text":"impl StructuralPartialEq for FileInfo","synthetic":false,"types":["pages::git::FileInfo"]},{"text":"impl StructuralPartialEq for ContentType","synthetic":false,"types":["pages::git::ContentType"]},{"text":"impl StructuralPartialEq for Page","synthetic":false,"types":["pages::page::Page"]},{"text":"impl StructuralPartialEq for DBType","synthetic":false,"types":["pages::settings::DBType"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/marker/trait.Sync.js b/implementors/core/marker/trait.Sync.js index 0240008..2406e2f 100644 --- a/implementors/core/marker/trait.Sync.js +++ b/implementors/core/marker/trait.Sync.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl Sync for Ctx","synthetic":true,"types":["pages::ctx::Ctx"]},{"text":"impl Sync for Deploy","synthetic":true,"types":["pages::deploy::routes::Deploy"]},{"text":"impl Sync for DeployEvent","synthetic":true,"types":["pages::deploy::DeployEvent"]},{"text":"impl Sync for update","synthetic":true,"types":["pages::deploy::update"]},{"text":"impl Sync for DeploySecret","synthetic":true,"types":["pages::deploy::DeploySecret"]},{"text":"impl Sync for DeployInfo","synthetic":true,"types":["pages::deploy::DeployInfo"]},{"text":"impl Sync for deploy_info","synthetic":true,"types":["pages::deploy::deploy_info"]},{"text":"impl Sync for FSError","synthetic":true,"types":["pages::errors::FSError"]},{"text":"impl Sync for ConfigError","synthetic":true,"types":["pages::errors::ConfigError"]},{"text":"impl Sync for ServiceError","synthetic":true,"types":["pages::errors::ServiceError"]},{"text":"impl Sync for ErrorToResponse","synthetic":true,"types":["pages::errors::ErrorToResponse"]},{"text":"impl Sync for Meta","synthetic":true,"types":["pages::meta::routes::Meta"]},{"text":"impl<'a> Sync for BuildDetails<'a>","synthetic":true,"types":["pages::meta::BuildDetails"]},{"text":"impl Sync for build_details","synthetic":true,"types":["pages::meta::build_details"]},{"text":"impl Sync for Page","synthetic":true,"types":["pages::page::Page"]},{"text":"impl Sync for Routes","synthetic":true,"types":["pages::routes::Routes"]},{"text":"impl Sync for Server","synthetic":true,"types":["pages::settings::Server"]},{"text":"impl Sync for Settings","synthetic":true,"types":["pages::settings::Settings"]}]; +implementors["pages"] = [{"text":"impl Sync for AccountCheckPayload","synthetic":true,"types":["pages::api::v1::account::AccountCheckPayload"]},{"text":"impl Sync for Email","synthetic":true,"types":["pages::api::v1::account::Email"]},{"text":"impl Sync for Username","synthetic":true,"types":["pages::api::v1::account::Username"]},{"text":"impl Sync for set_username","synthetic":true,"types":["pages::api::v1::account::set_username"]},{"text":"impl Sync for username_exists","synthetic":true,"types":["pages::api::v1::account::username_exists"]},{"text":"impl Sync for email_exists","synthetic":true,"types":["pages::api::v1::account::email_exists"]},{"text":"impl Sync for set_email","synthetic":true,"types":["pages::api::v1::account::set_email"]},{"text":"impl Sync for delete_account","synthetic":true,"types":["pages::api::v1::account::delete_account"]},{"text":"impl Sync for update_user_password","synthetic":true,"types":["pages::api::v1::account::update_user_password"]},{"text":"impl Sync for register","synthetic":true,"types":["pages::api::v1::auth::register"]},{"text":"impl Sync for login","synthetic":true,"types":["pages::api::v1::auth::login"]},{"text":"impl Sync for signout","synthetic":true,"types":["pages::api::v1::auth::signout"]},{"text":"impl Sync for Auth","synthetic":true,"types":["pages::api::v1::routes::Auth"]},{"text":"impl Sync for Account","synthetic":true,"types":["pages::api::v1::routes::Account"]},{"text":"impl Sync for Routes","synthetic":true,"types":["pages::api::v1::routes::Routes"]},{"text":"impl Sync for RedirectQuery","synthetic":true,"types":["pages::api::v1::RedirectQuery"]},{"text":"impl Sync for AccountCheckResp","synthetic":true,"types":["pages::ctx::api::v1::account::AccountCheckResp"]},{"text":"impl Sync for ChangePasswordReqest","synthetic":true,"types":["pages::ctx::api::v1::account::ChangePasswordReqest"]},{"text":"impl Sync for Register","synthetic":true,"types":["pages::ctx::api::v1::auth::Register"]},{"text":"impl Sync for Login","synthetic":true,"types":["pages::ctx::api::v1::auth::Login"]},{"text":"impl Sync for Password","synthetic":true,"types":["pages::ctx::api::v1::auth::Password"]},{"text":"impl Sync for Ctx","synthetic":true,"types":["pages::ctx::Ctx"]},{"text":"impl Sync for ConnectionOptions","synthetic":true,"types":["pages::db::ConnectionOptions"]},{"text":"impl Sync for Conn","synthetic":true,"types":["pages::db::Conn"]},{"text":"impl Sync for Fresh","synthetic":true,"types":["pages::db::Fresh"]},{"text":"impl Sync for Database","synthetic":true,"types":["pages::db::Database"]},{"text":"impl<'a> Sync for Register<'a>","synthetic":true,"types":["pages::db::Register"]},{"text":"impl<'a> Sync for UpdateEmail<'a>","synthetic":true,"types":["pages::db::UpdateEmail"]},{"text":"impl<'a> Sync for Login<'a>","synthetic":true,"types":["pages::db::Login"]},{"text":"impl Sync for NameHash","synthetic":true,"types":["pages::db::NameHash"]},{"text":"impl Sync for Deploy","synthetic":true,"types":["pages::deploy::routes::Deploy"]},{"text":"impl Sync for DeployEvent","synthetic":true,"types":["pages::deploy::DeployEvent"]},{"text":"impl Sync for update","synthetic":true,"types":["pages::deploy::update"]},{"text":"impl Sync for DeploySecret","synthetic":true,"types":["pages::deploy::DeploySecret"]},{"text":"impl Sync for DeployInfo","synthetic":true,"types":["pages::deploy::DeployInfo"]},{"text":"impl Sync for deploy_info","synthetic":true,"types":["pages::deploy::deploy_info"]},{"text":"impl Sync for FSError","synthetic":true,"types":["pages::errors::FSError"]},{"text":"impl Sync for ConfigError","synthetic":true,"types":["pages::errors::ConfigError"]},{"text":"impl Sync for ServiceError","synthetic":true,"types":["pages::errors::ServiceError"]},{"text":"impl Sync for ErrorToResponse","synthetic":true,"types":["pages::errors::ErrorToResponse"]},{"text":"impl Sync for GitFileMode","synthetic":true,"types":["pages::git::GitFileMode"]},{"text":"impl Sync for FileInfo","synthetic":true,"types":["pages::git::FileInfo"]},{"text":"impl Sync for ContentType","synthetic":true,"types":["pages::git::ContentType"]},{"text":"impl Sync for Meta","synthetic":true,"types":["pages::meta::routes::Meta"]},{"text":"impl<'a> Sync for BuildDetails<'a>","synthetic":true,"types":["pages::meta::BuildDetails"]},{"text":"impl Sync for build_details","synthetic":true,"types":["pages::meta::build_details"]},{"text":"impl Sync for Health","synthetic":true,"types":["pages::meta::Health"]},{"text":"impl Sync for health","synthetic":true,"types":["pages::meta::health"]},{"text":"impl Sync for Page","synthetic":true,"types":["pages::page::Page"]},{"text":"impl<'a> Sync for Preview<'a>","synthetic":true,"types":["pages::preview::Preview"]},{"text":"impl Sync for Serve","synthetic":true,"types":["pages::serve::routes::Serve"]},{"text":"impl Sync for index","synthetic":true,"types":["pages::serve::index"]},{"text":"impl Sync for Server","synthetic":true,"types":["pages::settings::Server"]},{"text":"impl Sync for DBType","synthetic":true,"types":["pages::settings::DBType"]},{"text":"impl Sync for Database","synthetic":true,"types":["pages::settings::Database"]},{"text":"impl Sync for Settings","synthetic":true,"types":["pages::settings::Settings"]},{"text":"impl Sync for Cli","synthetic":true,"types":["pages::Cli"]},{"text":"impl Sync for Commands","synthetic":true,"types":["pages::Commands"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/marker/trait.Unpin.js b/implementors/core/marker/trait.Unpin.js index 5d67e45..63baa24 100644 --- a/implementors/core/marker/trait.Unpin.js +++ b/implementors/core/marker/trait.Unpin.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl Unpin for Ctx","synthetic":true,"types":["pages::ctx::Ctx"]},{"text":"impl Unpin for Deploy","synthetic":true,"types":["pages::deploy::routes::Deploy"]},{"text":"impl Unpin for DeployEvent","synthetic":true,"types":["pages::deploy::DeployEvent"]},{"text":"impl Unpin for update","synthetic":true,"types":["pages::deploy::update"]},{"text":"impl Unpin for DeploySecret","synthetic":true,"types":["pages::deploy::DeploySecret"]},{"text":"impl Unpin for DeployInfo","synthetic":true,"types":["pages::deploy::DeployInfo"]},{"text":"impl Unpin for deploy_info","synthetic":true,"types":["pages::deploy::deploy_info"]},{"text":"impl Unpin for FSError","synthetic":true,"types":["pages::errors::FSError"]},{"text":"impl Unpin for ConfigError","synthetic":true,"types":["pages::errors::ConfigError"]},{"text":"impl Unpin for ServiceError","synthetic":true,"types":["pages::errors::ServiceError"]},{"text":"impl Unpin for ErrorToResponse","synthetic":true,"types":["pages::errors::ErrorToResponse"]},{"text":"impl Unpin for Meta","synthetic":true,"types":["pages::meta::routes::Meta"]},{"text":"impl<'a> Unpin for BuildDetails<'a>","synthetic":true,"types":["pages::meta::BuildDetails"]},{"text":"impl Unpin for build_details","synthetic":true,"types":["pages::meta::build_details"]},{"text":"impl Unpin for Page","synthetic":true,"types":["pages::page::Page"]},{"text":"impl Unpin for Routes","synthetic":true,"types":["pages::routes::Routes"]},{"text":"impl Unpin for Server","synthetic":true,"types":["pages::settings::Server"]},{"text":"impl Unpin for Settings","synthetic":true,"types":["pages::settings::Settings"]}]; +implementors["pages"] = [{"text":"impl Unpin for AccountCheckPayload","synthetic":true,"types":["pages::api::v1::account::AccountCheckPayload"]},{"text":"impl Unpin for Email","synthetic":true,"types":["pages::api::v1::account::Email"]},{"text":"impl Unpin for Username","synthetic":true,"types":["pages::api::v1::account::Username"]},{"text":"impl Unpin for set_username","synthetic":true,"types":["pages::api::v1::account::set_username"]},{"text":"impl Unpin for username_exists","synthetic":true,"types":["pages::api::v1::account::username_exists"]},{"text":"impl Unpin for email_exists","synthetic":true,"types":["pages::api::v1::account::email_exists"]},{"text":"impl Unpin for set_email","synthetic":true,"types":["pages::api::v1::account::set_email"]},{"text":"impl Unpin for delete_account","synthetic":true,"types":["pages::api::v1::account::delete_account"]},{"text":"impl Unpin for update_user_password","synthetic":true,"types":["pages::api::v1::account::update_user_password"]},{"text":"impl Unpin for register","synthetic":true,"types":["pages::api::v1::auth::register"]},{"text":"impl Unpin for login","synthetic":true,"types":["pages::api::v1::auth::login"]},{"text":"impl Unpin for signout","synthetic":true,"types":["pages::api::v1::auth::signout"]},{"text":"impl Unpin for Auth","synthetic":true,"types":["pages::api::v1::routes::Auth"]},{"text":"impl Unpin for Account","synthetic":true,"types":["pages::api::v1::routes::Account"]},{"text":"impl Unpin for Routes","synthetic":true,"types":["pages::api::v1::routes::Routes"]},{"text":"impl Unpin for RedirectQuery","synthetic":true,"types":["pages::api::v1::RedirectQuery"]},{"text":"impl Unpin for AccountCheckResp","synthetic":true,"types":["pages::ctx::api::v1::account::AccountCheckResp"]},{"text":"impl Unpin for ChangePasswordReqest","synthetic":true,"types":["pages::ctx::api::v1::account::ChangePasswordReqest"]},{"text":"impl Unpin for Register","synthetic":true,"types":["pages::ctx::api::v1::auth::Register"]},{"text":"impl Unpin for Login","synthetic":true,"types":["pages::ctx::api::v1::auth::Login"]},{"text":"impl Unpin for Password","synthetic":true,"types":["pages::ctx::api::v1::auth::Password"]},{"text":"impl Unpin for Ctx","synthetic":true,"types":["pages::ctx::Ctx"]},{"text":"impl Unpin for ConnectionOptions","synthetic":true,"types":["pages::db::ConnectionOptions"]},{"text":"impl Unpin for Conn","synthetic":true,"types":["pages::db::Conn"]},{"text":"impl Unpin for Fresh","synthetic":true,"types":["pages::db::Fresh"]},{"text":"impl Unpin for Database","synthetic":true,"types":["pages::db::Database"]},{"text":"impl<'a> Unpin for Register<'a>","synthetic":true,"types":["pages::db::Register"]},{"text":"impl<'a> Unpin for UpdateEmail<'a>","synthetic":true,"types":["pages::db::UpdateEmail"]},{"text":"impl<'a> Unpin for Login<'a>","synthetic":true,"types":["pages::db::Login"]},{"text":"impl Unpin for NameHash","synthetic":true,"types":["pages::db::NameHash"]},{"text":"impl Unpin for Deploy","synthetic":true,"types":["pages::deploy::routes::Deploy"]},{"text":"impl Unpin for DeployEvent","synthetic":true,"types":["pages::deploy::DeployEvent"]},{"text":"impl Unpin for update","synthetic":true,"types":["pages::deploy::update"]},{"text":"impl Unpin for DeploySecret","synthetic":true,"types":["pages::deploy::DeploySecret"]},{"text":"impl Unpin for DeployInfo","synthetic":true,"types":["pages::deploy::DeployInfo"]},{"text":"impl Unpin for deploy_info","synthetic":true,"types":["pages::deploy::deploy_info"]},{"text":"impl Unpin for FSError","synthetic":true,"types":["pages::errors::FSError"]},{"text":"impl Unpin for ConfigError","synthetic":true,"types":["pages::errors::ConfigError"]},{"text":"impl Unpin for ServiceError","synthetic":true,"types":["pages::errors::ServiceError"]},{"text":"impl Unpin for ErrorToResponse","synthetic":true,"types":["pages::errors::ErrorToResponse"]},{"text":"impl Unpin for GitFileMode","synthetic":true,"types":["pages::git::GitFileMode"]},{"text":"impl Unpin for FileInfo","synthetic":true,"types":["pages::git::FileInfo"]},{"text":"impl Unpin for ContentType","synthetic":true,"types":["pages::git::ContentType"]},{"text":"impl Unpin for Meta","synthetic":true,"types":["pages::meta::routes::Meta"]},{"text":"impl<'a> Unpin for BuildDetails<'a>","synthetic":true,"types":["pages::meta::BuildDetails"]},{"text":"impl Unpin for build_details","synthetic":true,"types":["pages::meta::build_details"]},{"text":"impl Unpin for Health","synthetic":true,"types":["pages::meta::Health"]},{"text":"impl Unpin for health","synthetic":true,"types":["pages::meta::health"]},{"text":"impl Unpin for Page","synthetic":true,"types":["pages::page::Page"]},{"text":"impl<'a> Unpin for Preview<'a>","synthetic":true,"types":["pages::preview::Preview"]},{"text":"impl Unpin for Serve","synthetic":true,"types":["pages::serve::routes::Serve"]},{"text":"impl Unpin for index","synthetic":true,"types":["pages::serve::index"]},{"text":"impl Unpin for Server","synthetic":true,"types":["pages::settings::Server"]},{"text":"impl Unpin for DBType","synthetic":true,"types":["pages::settings::DBType"]},{"text":"impl Unpin for Database","synthetic":true,"types":["pages::settings::Database"]},{"text":"impl Unpin for Settings","synthetic":true,"types":["pages::settings::Settings"]},{"text":"impl Unpin for Cli","synthetic":true,"types":["pages::Cli"]},{"text":"impl Unpin for Commands","synthetic":true,"types":["pages::Commands"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js b/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js index ef02400..11f93d4 100644 --- a/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js +++ b/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl RefUnwindSafe for Ctx","synthetic":true,"types":["pages::ctx::Ctx"]},{"text":"impl RefUnwindSafe for Deploy","synthetic":true,"types":["pages::deploy::routes::Deploy"]},{"text":"impl RefUnwindSafe for DeployEvent","synthetic":true,"types":["pages::deploy::DeployEvent"]},{"text":"impl RefUnwindSafe for update","synthetic":true,"types":["pages::deploy::update"]},{"text":"impl RefUnwindSafe for DeploySecret","synthetic":true,"types":["pages::deploy::DeploySecret"]},{"text":"impl RefUnwindSafe for DeployInfo","synthetic":true,"types":["pages::deploy::DeployInfo"]},{"text":"impl RefUnwindSafe for deploy_info","synthetic":true,"types":["pages::deploy::deploy_info"]},{"text":"impl !RefUnwindSafe for FSError","synthetic":true,"types":["pages::errors::FSError"]},{"text":"impl !RefUnwindSafe for ConfigError","synthetic":true,"types":["pages::errors::ConfigError"]},{"text":"impl !RefUnwindSafe for ServiceError","synthetic":true,"types":["pages::errors::ServiceError"]},{"text":"impl RefUnwindSafe for ErrorToResponse","synthetic":true,"types":["pages::errors::ErrorToResponse"]},{"text":"impl RefUnwindSafe for Meta","synthetic":true,"types":["pages::meta::routes::Meta"]},{"text":"impl<'a> RefUnwindSafe for BuildDetails<'a>","synthetic":true,"types":["pages::meta::BuildDetails"]},{"text":"impl RefUnwindSafe for build_details","synthetic":true,"types":["pages::meta::build_details"]},{"text":"impl RefUnwindSafe for Page","synthetic":true,"types":["pages::page::Page"]},{"text":"impl RefUnwindSafe for Routes","synthetic":true,"types":["pages::routes::Routes"]},{"text":"impl RefUnwindSafe for Server","synthetic":true,"types":["pages::settings::Server"]},{"text":"impl RefUnwindSafe for Settings","synthetic":true,"types":["pages::settings::Settings"]}]; +implementors["pages"] = [{"text":"impl RefUnwindSafe for AccountCheckPayload","synthetic":true,"types":["pages::api::v1::account::AccountCheckPayload"]},{"text":"impl RefUnwindSafe for Email","synthetic":true,"types":["pages::api::v1::account::Email"]},{"text":"impl RefUnwindSafe for Username","synthetic":true,"types":["pages::api::v1::account::Username"]},{"text":"impl RefUnwindSafe for set_username","synthetic":true,"types":["pages::api::v1::account::set_username"]},{"text":"impl RefUnwindSafe for username_exists","synthetic":true,"types":["pages::api::v1::account::username_exists"]},{"text":"impl RefUnwindSafe for email_exists","synthetic":true,"types":["pages::api::v1::account::email_exists"]},{"text":"impl RefUnwindSafe for set_email","synthetic":true,"types":["pages::api::v1::account::set_email"]},{"text":"impl RefUnwindSafe for delete_account","synthetic":true,"types":["pages::api::v1::account::delete_account"]},{"text":"impl RefUnwindSafe for update_user_password","synthetic":true,"types":["pages::api::v1::account::update_user_password"]},{"text":"impl RefUnwindSafe for register","synthetic":true,"types":["pages::api::v1::auth::register"]},{"text":"impl RefUnwindSafe for login","synthetic":true,"types":["pages::api::v1::auth::login"]},{"text":"impl RefUnwindSafe for signout","synthetic":true,"types":["pages::api::v1::auth::signout"]},{"text":"impl RefUnwindSafe for Auth","synthetic":true,"types":["pages::api::v1::routes::Auth"]},{"text":"impl RefUnwindSafe for Account","synthetic":true,"types":["pages::api::v1::routes::Account"]},{"text":"impl RefUnwindSafe for Routes","synthetic":true,"types":["pages::api::v1::routes::Routes"]},{"text":"impl RefUnwindSafe for RedirectQuery","synthetic":true,"types":["pages::api::v1::RedirectQuery"]},{"text":"impl RefUnwindSafe for AccountCheckResp","synthetic":true,"types":["pages::ctx::api::v1::account::AccountCheckResp"]},{"text":"impl RefUnwindSafe for ChangePasswordReqest","synthetic":true,"types":["pages::ctx::api::v1::account::ChangePasswordReqest"]},{"text":"impl RefUnwindSafe for Register","synthetic":true,"types":["pages::ctx::api::v1::auth::Register"]},{"text":"impl RefUnwindSafe for Login","synthetic":true,"types":["pages::ctx::api::v1::auth::Login"]},{"text":"impl RefUnwindSafe for Password","synthetic":true,"types":["pages::ctx::api::v1::auth::Password"]},{"text":"impl !RefUnwindSafe for Ctx","synthetic":true,"types":["pages::ctx::Ctx"]},{"text":"impl !RefUnwindSafe for ConnectionOptions","synthetic":true,"types":["pages::db::ConnectionOptions"]},{"text":"impl !RefUnwindSafe for Conn","synthetic":true,"types":["pages::db::Conn"]},{"text":"impl !RefUnwindSafe for Fresh","synthetic":true,"types":["pages::db::Fresh"]},{"text":"impl !RefUnwindSafe for Database","synthetic":true,"types":["pages::db::Database"]},{"text":"impl<'a> RefUnwindSafe for Register<'a>","synthetic":true,"types":["pages::db::Register"]},{"text":"impl<'a> RefUnwindSafe for UpdateEmail<'a>","synthetic":true,"types":["pages::db::UpdateEmail"]},{"text":"impl<'a> RefUnwindSafe for Login<'a>","synthetic":true,"types":["pages::db::Login"]},{"text":"impl RefUnwindSafe for NameHash","synthetic":true,"types":["pages::db::NameHash"]},{"text":"impl RefUnwindSafe for Deploy","synthetic":true,"types":["pages::deploy::routes::Deploy"]},{"text":"impl RefUnwindSafe for DeployEvent","synthetic":true,"types":["pages::deploy::DeployEvent"]},{"text":"impl RefUnwindSafe for update","synthetic":true,"types":["pages::deploy::update"]},{"text":"impl RefUnwindSafe for DeploySecret","synthetic":true,"types":["pages::deploy::DeploySecret"]},{"text":"impl RefUnwindSafe for DeployInfo","synthetic":true,"types":["pages::deploy::DeployInfo"]},{"text":"impl RefUnwindSafe for deploy_info","synthetic":true,"types":["pages::deploy::deploy_info"]},{"text":"impl !RefUnwindSafe for FSError","synthetic":true,"types":["pages::errors::FSError"]},{"text":"impl !RefUnwindSafe for ConfigError","synthetic":true,"types":["pages::errors::ConfigError"]},{"text":"impl !RefUnwindSafe for ServiceError","synthetic":true,"types":["pages::errors::ServiceError"]},{"text":"impl RefUnwindSafe for ErrorToResponse","synthetic":true,"types":["pages::errors::ErrorToResponse"]},{"text":"impl RefUnwindSafe for GitFileMode","synthetic":true,"types":["pages::git::GitFileMode"]},{"text":"impl RefUnwindSafe for FileInfo","synthetic":true,"types":["pages::git::FileInfo"]},{"text":"impl RefUnwindSafe for ContentType","synthetic":true,"types":["pages::git::ContentType"]},{"text":"impl RefUnwindSafe for Meta","synthetic":true,"types":["pages::meta::routes::Meta"]},{"text":"impl<'a> RefUnwindSafe for BuildDetails<'a>","synthetic":true,"types":["pages::meta::BuildDetails"]},{"text":"impl RefUnwindSafe for build_details","synthetic":true,"types":["pages::meta::build_details"]},{"text":"impl RefUnwindSafe for Health","synthetic":true,"types":["pages::meta::Health"]},{"text":"impl RefUnwindSafe for health","synthetic":true,"types":["pages::meta::health"]},{"text":"impl RefUnwindSafe for Page","synthetic":true,"types":["pages::page::Page"]},{"text":"impl<'a> RefUnwindSafe for Preview<'a>","synthetic":true,"types":["pages::preview::Preview"]},{"text":"impl RefUnwindSafe for Serve","synthetic":true,"types":["pages::serve::routes::Serve"]},{"text":"impl RefUnwindSafe for index","synthetic":true,"types":["pages::serve::index"]},{"text":"impl RefUnwindSafe for Server","synthetic":true,"types":["pages::settings::Server"]},{"text":"impl RefUnwindSafe for DBType","synthetic":true,"types":["pages::settings::DBType"]},{"text":"impl RefUnwindSafe for Database","synthetic":true,"types":["pages::settings::Database"]},{"text":"impl RefUnwindSafe for Settings","synthetic":true,"types":["pages::settings::Settings"]},{"text":"impl RefUnwindSafe for Cli","synthetic":true,"types":["pages::Cli"]},{"text":"impl RefUnwindSafe for Commands","synthetic":true,"types":["pages::Commands"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/panic/unwind_safe/trait.UnwindSafe.js b/implementors/core/panic/unwind_safe/trait.UnwindSafe.js index baf9f40..b34baf7 100644 --- a/implementors/core/panic/unwind_safe/trait.UnwindSafe.js +++ b/implementors/core/panic/unwind_safe/trait.UnwindSafe.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl UnwindSafe for Ctx","synthetic":true,"types":["pages::ctx::Ctx"]},{"text":"impl UnwindSafe for Deploy","synthetic":true,"types":["pages::deploy::routes::Deploy"]},{"text":"impl UnwindSafe for DeployEvent","synthetic":true,"types":["pages::deploy::DeployEvent"]},{"text":"impl UnwindSafe for update","synthetic":true,"types":["pages::deploy::update"]},{"text":"impl UnwindSafe for DeploySecret","synthetic":true,"types":["pages::deploy::DeploySecret"]},{"text":"impl UnwindSafe for DeployInfo","synthetic":true,"types":["pages::deploy::DeployInfo"]},{"text":"impl UnwindSafe for deploy_info","synthetic":true,"types":["pages::deploy::deploy_info"]},{"text":"impl !UnwindSafe for FSError","synthetic":true,"types":["pages::errors::FSError"]},{"text":"impl !UnwindSafe for ConfigError","synthetic":true,"types":["pages::errors::ConfigError"]},{"text":"impl !UnwindSafe for ServiceError","synthetic":true,"types":["pages::errors::ServiceError"]},{"text":"impl UnwindSafe for ErrorToResponse","synthetic":true,"types":["pages::errors::ErrorToResponse"]},{"text":"impl UnwindSafe for Meta","synthetic":true,"types":["pages::meta::routes::Meta"]},{"text":"impl<'a> UnwindSafe for BuildDetails<'a>","synthetic":true,"types":["pages::meta::BuildDetails"]},{"text":"impl UnwindSafe for build_details","synthetic":true,"types":["pages::meta::build_details"]},{"text":"impl UnwindSafe for Page","synthetic":true,"types":["pages::page::Page"]},{"text":"impl UnwindSafe for Routes","synthetic":true,"types":["pages::routes::Routes"]},{"text":"impl UnwindSafe for Server","synthetic":true,"types":["pages::settings::Server"]},{"text":"impl UnwindSafe for Settings","synthetic":true,"types":["pages::settings::Settings"]}]; +implementors["pages"] = [{"text":"impl UnwindSafe for AccountCheckPayload","synthetic":true,"types":["pages::api::v1::account::AccountCheckPayload"]},{"text":"impl UnwindSafe for Email","synthetic":true,"types":["pages::api::v1::account::Email"]},{"text":"impl UnwindSafe for Username","synthetic":true,"types":["pages::api::v1::account::Username"]},{"text":"impl UnwindSafe for set_username","synthetic":true,"types":["pages::api::v1::account::set_username"]},{"text":"impl UnwindSafe for username_exists","synthetic":true,"types":["pages::api::v1::account::username_exists"]},{"text":"impl UnwindSafe for email_exists","synthetic":true,"types":["pages::api::v1::account::email_exists"]},{"text":"impl UnwindSafe for set_email","synthetic":true,"types":["pages::api::v1::account::set_email"]},{"text":"impl UnwindSafe for delete_account","synthetic":true,"types":["pages::api::v1::account::delete_account"]},{"text":"impl UnwindSafe for update_user_password","synthetic":true,"types":["pages::api::v1::account::update_user_password"]},{"text":"impl UnwindSafe for register","synthetic":true,"types":["pages::api::v1::auth::register"]},{"text":"impl UnwindSafe for login","synthetic":true,"types":["pages::api::v1::auth::login"]},{"text":"impl UnwindSafe for signout","synthetic":true,"types":["pages::api::v1::auth::signout"]},{"text":"impl UnwindSafe for Auth","synthetic":true,"types":["pages::api::v1::routes::Auth"]},{"text":"impl UnwindSafe for Account","synthetic":true,"types":["pages::api::v1::routes::Account"]},{"text":"impl UnwindSafe for Routes","synthetic":true,"types":["pages::api::v1::routes::Routes"]},{"text":"impl UnwindSafe for RedirectQuery","synthetic":true,"types":["pages::api::v1::RedirectQuery"]},{"text":"impl UnwindSafe for AccountCheckResp","synthetic":true,"types":["pages::ctx::api::v1::account::AccountCheckResp"]},{"text":"impl UnwindSafe for ChangePasswordReqest","synthetic":true,"types":["pages::ctx::api::v1::account::ChangePasswordReqest"]},{"text":"impl UnwindSafe for Register","synthetic":true,"types":["pages::ctx::api::v1::auth::Register"]},{"text":"impl UnwindSafe for Login","synthetic":true,"types":["pages::ctx::api::v1::auth::Login"]},{"text":"impl UnwindSafe for Password","synthetic":true,"types":["pages::ctx::api::v1::auth::Password"]},{"text":"impl !UnwindSafe for Ctx","synthetic":true,"types":["pages::ctx::Ctx"]},{"text":"impl !UnwindSafe for ConnectionOptions","synthetic":true,"types":["pages::db::ConnectionOptions"]},{"text":"impl !UnwindSafe for Conn","synthetic":true,"types":["pages::db::Conn"]},{"text":"impl !UnwindSafe for Fresh","synthetic":true,"types":["pages::db::Fresh"]},{"text":"impl !UnwindSafe for Database","synthetic":true,"types":["pages::db::Database"]},{"text":"impl<'a> UnwindSafe for Register<'a>","synthetic":true,"types":["pages::db::Register"]},{"text":"impl<'a> UnwindSafe for UpdateEmail<'a>","synthetic":true,"types":["pages::db::UpdateEmail"]},{"text":"impl<'a> UnwindSafe for Login<'a>","synthetic":true,"types":["pages::db::Login"]},{"text":"impl UnwindSafe for NameHash","synthetic":true,"types":["pages::db::NameHash"]},{"text":"impl UnwindSafe for Deploy","synthetic":true,"types":["pages::deploy::routes::Deploy"]},{"text":"impl UnwindSafe for DeployEvent","synthetic":true,"types":["pages::deploy::DeployEvent"]},{"text":"impl UnwindSafe for update","synthetic":true,"types":["pages::deploy::update"]},{"text":"impl UnwindSafe for DeploySecret","synthetic":true,"types":["pages::deploy::DeploySecret"]},{"text":"impl UnwindSafe for DeployInfo","synthetic":true,"types":["pages::deploy::DeployInfo"]},{"text":"impl UnwindSafe for deploy_info","synthetic":true,"types":["pages::deploy::deploy_info"]},{"text":"impl !UnwindSafe for FSError","synthetic":true,"types":["pages::errors::FSError"]},{"text":"impl !UnwindSafe for ConfigError","synthetic":true,"types":["pages::errors::ConfigError"]},{"text":"impl !UnwindSafe for ServiceError","synthetic":true,"types":["pages::errors::ServiceError"]},{"text":"impl UnwindSafe for ErrorToResponse","synthetic":true,"types":["pages::errors::ErrorToResponse"]},{"text":"impl UnwindSafe for GitFileMode","synthetic":true,"types":["pages::git::GitFileMode"]},{"text":"impl UnwindSafe for FileInfo","synthetic":true,"types":["pages::git::FileInfo"]},{"text":"impl UnwindSafe for ContentType","synthetic":true,"types":["pages::git::ContentType"]},{"text":"impl UnwindSafe for Meta","synthetic":true,"types":["pages::meta::routes::Meta"]},{"text":"impl<'a> UnwindSafe for BuildDetails<'a>","synthetic":true,"types":["pages::meta::BuildDetails"]},{"text":"impl UnwindSafe for build_details","synthetic":true,"types":["pages::meta::build_details"]},{"text":"impl UnwindSafe for Health","synthetic":true,"types":["pages::meta::Health"]},{"text":"impl UnwindSafe for health","synthetic":true,"types":["pages::meta::health"]},{"text":"impl UnwindSafe for Page","synthetic":true,"types":["pages::page::Page"]},{"text":"impl<'a> UnwindSafe for Preview<'a>","synthetic":true,"types":["pages::preview::Preview"]},{"text":"impl UnwindSafe for Serve","synthetic":true,"types":["pages::serve::routes::Serve"]},{"text":"impl UnwindSafe for index","synthetic":true,"types":["pages::serve::index"]},{"text":"impl UnwindSafe for Server","synthetic":true,"types":["pages::settings::Server"]},{"text":"impl UnwindSafe for DBType","synthetic":true,"types":["pages::settings::DBType"]},{"text":"impl UnwindSafe for Database","synthetic":true,"types":["pages::settings::Database"]},{"text":"impl UnwindSafe for Settings","synthetic":true,"types":["pages::settings::Settings"]},{"text":"impl UnwindSafe for Cli","synthetic":true,"types":["pages::Cli"]},{"text":"impl UnwindSafe for Commands","synthetic":true,"types":["pages::Commands"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/num_enum/trait.FromPrimitive.js b/implementors/num_enum/trait.FromPrimitive.js new file mode 100644 index 0000000..5c14282 --- /dev/null +++ b/implementors/num_enum/trait.FromPrimitive.js @@ -0,0 +1,3 @@ +(function() {var implementors = {}; +implementors["pages"] = [{"text":"impl FromPrimitive for GitFileMode","synthetic":false,"types":["pages::git::GitFileMode"]}]; +if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/num_enum/trait.TryFromPrimitive.js b/implementors/num_enum/trait.TryFromPrimitive.js new file mode 100644 index 0000000..31013d8 --- /dev/null +++ b/implementors/num_enum/trait.TryFromPrimitive.js @@ -0,0 +1,3 @@ +(function() {var implementors = {}; +implementors["pages"] = [{"text":"impl TryFromPrimitive for GitFileMode","synthetic":false,"types":["pages::git::GitFileMode"]}]; +if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/serde/de/trait.Deserialize.js b/implementors/serde/de/trait.Deserialize.js index d843033..96c4aaa 100644 --- a/implementors/serde/de/trait.Deserialize.js +++ b/implementors/serde/de/trait.Deserialize.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl<'de> Deserialize<'de> for DeployEvent","synthetic":false,"types":["pages::deploy::DeployEvent"]},{"text":"impl<'de> Deserialize<'de> for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl<'de> Deserialize<'de> for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl<'de> Deserialize<'de> for ErrorToResponse","synthetic":false,"types":["pages::errors::ErrorToResponse"]},{"text":"impl<'de: 'a, 'a> Deserialize<'de> for BuildDetails<'a>","synthetic":false,"types":["pages::meta::BuildDetails"]},{"text":"impl<'de> Deserialize<'de> for Page","synthetic":false,"types":["pages::page::Page"]},{"text":"impl<'de> Deserialize<'de> for Server","synthetic":false,"types":["pages::settings::Server"]},{"text":"impl<'de> Deserialize<'de> for Settings","synthetic":false,"types":["pages::settings::Settings"]}]; +implementors["pages"] = [{"text":"impl<'de> Deserialize<'de> for AccountCheckPayload","synthetic":false,"types":["pages::api::v1::account::AccountCheckPayload"]},{"text":"impl<'de> Deserialize<'de> for Email","synthetic":false,"types":["pages::api::v1::account::Email"]},{"text":"impl<'de> Deserialize<'de> for Username","synthetic":false,"types":["pages::api::v1::account::Username"]},{"text":"impl<'de> Deserialize<'de> for RedirectQuery","synthetic":false,"types":["pages::api::v1::RedirectQuery"]},{"text":"impl<'de> Deserialize<'de> for AccountCheckResp","synthetic":false,"types":["pages::ctx::api::v1::account::AccountCheckResp"]},{"text":"impl<'de> Deserialize<'de> for ChangePasswordReqest","synthetic":false,"types":["pages::ctx::api::v1::account::ChangePasswordReqest"]},{"text":"impl<'de> Deserialize<'de> for Register","synthetic":false,"types":["pages::ctx::api::v1::auth::Register"]},{"text":"impl<'de> Deserialize<'de> for Login","synthetic":false,"types":["pages::ctx::api::v1::auth::Login"]},{"text":"impl<'de> Deserialize<'de> for Password","synthetic":false,"types":["pages::ctx::api::v1::auth::Password"]},{"text":"impl<'de: 'a, 'a> Deserialize<'de> for Register<'a>","synthetic":false,"types":["pages::db::Register"]},{"text":"impl<'de: 'a, 'a> Deserialize<'de> for UpdateEmail<'a>","synthetic":false,"types":["pages::db::UpdateEmail"]},{"text":"impl<'de: 'a, 'a> Deserialize<'de> for Login<'a>","synthetic":false,"types":["pages::db::Login"]},{"text":"impl<'de> Deserialize<'de> for NameHash","synthetic":false,"types":["pages::db::NameHash"]},{"text":"impl<'de> Deserialize<'de> for DeployEvent","synthetic":false,"types":["pages::deploy::DeployEvent"]},{"text":"impl<'de> Deserialize<'de> for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl<'de> Deserialize<'de> for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl<'de> Deserialize<'de> for ErrorToResponse","synthetic":false,"types":["pages::errors::ErrorToResponse"]},{"text":"impl<'de> Deserialize<'de> for ContentType","synthetic":false,"types":["pages::git::ContentType"]},{"text":"impl<'de: 'a, 'a> Deserialize<'de> for BuildDetails<'a>","synthetic":false,"types":["pages::meta::BuildDetails"]},{"text":"impl<'de> Deserialize<'de> for Health","synthetic":false,"types":["pages::meta::Health"]},{"text":"impl<'de> Deserialize<'de> for Page","synthetic":false,"types":["pages::page::Page"]},{"text":"impl<'de> Deserialize<'de> for Server","synthetic":false,"types":["pages::settings::Server"]},{"text":"impl<'de> Deserialize<'de> for DBType","synthetic":false,"types":["pages::settings::DBType"]},{"text":"impl<'de> Deserialize<'de> for Database","synthetic":false,"types":["pages::settings::Database"]},{"text":"impl<'de> Deserialize<'de> for Settings","synthetic":false,"types":["pages::settings::Settings"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/serde/ser/trait.Serialize.js b/implementors/serde/ser/trait.Serialize.js index d222e22..67bc5e4 100644 --- a/implementors/serde/ser/trait.Serialize.js +++ b/implementors/serde/ser/trait.Serialize.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["pages"] = [{"text":"impl Serialize for DeployEvent","synthetic":false,"types":["pages::deploy::DeployEvent"]},{"text":"impl Serialize for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl Serialize for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl Serialize for ErrorToResponse","synthetic":false,"types":["pages::errors::ErrorToResponse"]},{"text":"impl<'a> Serialize for BuildDetails<'a>","synthetic":false,"types":["pages::meta::BuildDetails"]}]; +implementors["pages"] = [{"text":"impl Serialize for AccountCheckPayload","synthetic":false,"types":["pages::api::v1::account::AccountCheckPayload"]},{"text":"impl Serialize for Email","synthetic":false,"types":["pages::api::v1::account::Email"]},{"text":"impl Serialize for Username","synthetic":false,"types":["pages::api::v1::account::Username"]},{"text":"impl Serialize for AccountCheckResp","synthetic":false,"types":["pages::ctx::api::v1::account::AccountCheckResp"]},{"text":"impl Serialize for ChangePasswordReqest","synthetic":false,"types":["pages::ctx::api::v1::account::ChangePasswordReqest"]},{"text":"impl Serialize for Register","synthetic":false,"types":["pages::ctx::api::v1::auth::Register"]},{"text":"impl Serialize for Login","synthetic":false,"types":["pages::ctx::api::v1::auth::Login"]},{"text":"impl Serialize for Password","synthetic":false,"types":["pages::ctx::api::v1::auth::Password"]},{"text":"impl<'a> Serialize for Register<'a>","synthetic":false,"types":["pages::db::Register"]},{"text":"impl<'a> Serialize for UpdateEmail<'a>","synthetic":false,"types":["pages::db::UpdateEmail"]},{"text":"impl<'a> Serialize for Login<'a>","synthetic":false,"types":["pages::db::Login"]},{"text":"impl Serialize for NameHash","synthetic":false,"types":["pages::db::NameHash"]},{"text":"impl Serialize for DeployEvent","synthetic":false,"types":["pages::deploy::DeployEvent"]},{"text":"impl Serialize for DeploySecret","synthetic":false,"types":["pages::deploy::DeploySecret"]},{"text":"impl Serialize for DeployInfo","synthetic":false,"types":["pages::deploy::DeployInfo"]},{"text":"impl Serialize for ErrorToResponse","synthetic":false,"types":["pages::errors::ErrorToResponse"]},{"text":"impl Serialize for ContentType","synthetic":false,"types":["pages::git::ContentType"]},{"text":"impl<'a> Serialize for BuildDetails<'a>","synthetic":false,"types":["pages::meta::BuildDetails"]},{"text":"impl Serialize for Health","synthetic":false,"types":["pages::meta::Health"]},{"text":"impl Serialize for DBType","synthetic":false,"types":["pages::settings::DBType"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/pages/all.html b/pages/all.html index 2668d7c..4e7223b 100644 --- a/pages/all.html +++ b/pages/all.html @@ -4,5 +4,5 @@
+

List of all items

Structs

Enums

Functions

Typedefs

Constants

\ No newline at end of file diff --git a/pages/api/index.html b/pages/api/index.html new file mode 100644 index 0000000..5833889 --- /dev/null +++ b/pages/api/index.html @@ -0,0 +1,10 @@ +pages::api - Rust +
+

Module pages::api

source · []

Modules

+
+ \ No newline at end of file diff --git a/pages/api/sidebar-items.js b/pages/api/sidebar-items.js new file mode 100644 index 0000000..efde08d --- /dev/null +++ b/pages/api/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"mod":[["v1",""]]}; \ No newline at end of file diff --git a/pages/api/v1/account/fn.services.html b/pages/api/v1/account/fn.services.html new file mode 100644 index 0000000..22b50ea --- /dev/null +++ b/pages/api/v1/account/fn.services.html @@ -0,0 +1,9 @@ +services in pages::api::v1::account - Rust +
+

Function pages::api::v1::account::services

source · []
pub fn services(cfg: &mut ServiceConfig)
+ \ No newline at end of file diff --git a/pages/api/v1/account/index.html b/pages/api/v1/account/index.html new file mode 100644 index 0000000..788e29b --- /dev/null +++ b/pages/api/v1/account/index.html @@ -0,0 +1,14 @@ +pages::api::v1::account - Rust +
+ \ No newline at end of file diff --git a/pages/api/v1/account/sidebar-items.js b/pages/api/v1/account/sidebar-items.js new file mode 100644 index 0000000..5b2e718 --- /dev/null +++ b/pages/api/v1/account/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"fn":[["services",""]],"struct":[["AccountCheckPayload",""],["Email",""],["Username",""],["delete_account",""],["email_exists",""],["set_email","update email"],["set_username","update username"],["update_user_password",""],["username_exists",""]]}; \ No newline at end of file diff --git a/pages/api/v1/account/struct.AccountCheckPayload.html b/pages/api/v1/account/struct.AccountCheckPayload.html new file mode 100644 index 0000000..7ba3b79 --- /dev/null +++ b/pages/api/v1/account/struct.AccountCheckPayload.html @@ -0,0 +1,39 @@ +AccountCheckPayload in pages::api::v1::account - Rust +
pub struct AccountCheckPayload {
+    pub val: String,
+}

Fields

val: String

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

Serialize this value into the given Serde serializer. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/api/v1/account/struct.Email.html b/pages/api/v1/account/struct.Email.html new file mode 100644 index 0000000..3eb7c8c --- /dev/null +++ b/pages/api/v1/account/struct.Email.html @@ -0,0 +1,39 @@ +Email in pages::api::v1::account - Rust +
+

Struct pages::api::v1::account::Email

source · []
pub struct Email {
+    pub email: String,
+}

Fields

email: String

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

Serialize this value into the given Serde serializer. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/api/v1/account/struct.Username.html b/pages/api/v1/account/struct.Username.html new file mode 100644 index 0000000..b426b35 --- /dev/null +++ b/pages/api/v1/account/struct.Username.html @@ -0,0 +1,39 @@ +Username in pages::api::v1::account - Rust +
pub struct Username {
+    pub username: String,
+}

Fields

username: String

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

Serialize this value into the given Serde serializer. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/api/v1/account/struct.delete_account.html b/pages/api/v1/account/struct.delete_account.html new file mode 100644 index 0000000..ff4f349 --- /dev/null +++ b/pages/api/v1/account/struct.delete_account.html @@ -0,0 +1,29 @@ +delete_account in pages::api::v1::account - Rust +
pub struct delete_account;

Trait Implementations

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/api/v1/account/struct.email_exists.html b/pages/api/v1/account/struct.email_exists.html new file mode 100644 index 0000000..6a5caa3 --- /dev/null +++ b/pages/api/v1/account/struct.email_exists.html @@ -0,0 +1,29 @@ +email_exists in pages::api::v1::account - Rust +
pub struct email_exists;

Trait Implementations

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/api/v1/account/struct.set_email.html b/pages/api/v1/account/struct.set_email.html new file mode 100644 index 0000000..07b50dd --- /dev/null +++ b/pages/api/v1/account/struct.set_email.html @@ -0,0 +1,30 @@ +set_email in pages::api::v1::account - Rust +
pub struct set_email;
Expand description

update email

+

Trait Implementations

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/api/v1/account/struct.set_username.html b/pages/api/v1/account/struct.set_username.html new file mode 100644 index 0000000..7a36d93 --- /dev/null +++ b/pages/api/v1/account/struct.set_username.html @@ -0,0 +1,30 @@ +set_username in pages::api::v1::account - Rust +
pub struct set_username;
Expand description

update username

+

Trait Implementations

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/api/v1/account/struct.update_user_password.html b/pages/api/v1/account/struct.update_user_password.html new file mode 100644 index 0000000..ac58f89 --- /dev/null +++ b/pages/api/v1/account/struct.update_user_password.html @@ -0,0 +1,29 @@ +update_user_password in pages::api::v1::account - Rust +
pub struct update_user_password;

Trait Implementations

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/api/v1/account/struct.username_exists.html b/pages/api/v1/account/struct.username_exists.html new file mode 100644 index 0000000..e7bb35d --- /dev/null +++ b/pages/api/v1/account/struct.username_exists.html @@ -0,0 +1,29 @@ +username_exists in pages::api::v1::account - Rust +
pub struct username_exists;

Trait Implementations

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/api/v1/auth/fn.services.html b/pages/api/v1/auth/fn.services.html new file mode 100644 index 0000000..5df0df5 --- /dev/null +++ b/pages/api/v1/auth/fn.services.html @@ -0,0 +1,9 @@ +services in pages::api::v1::auth - Rust +
+

Function pages::api::v1::auth::services

source · []
pub fn services(cfg: &mut ServiceConfig)
+ \ No newline at end of file diff --git a/pages/api/v1/auth/index.html b/pages/api/v1/auth/index.html new file mode 100644 index 0000000..8936611 --- /dev/null +++ b/pages/api/v1/auth/index.html @@ -0,0 +1,11 @@ +pages::api::v1::auth - Rust +
+ \ No newline at end of file diff --git a/pages/api/v1/auth/sidebar-items.js b/pages/api/v1/auth/sidebar-items.js new file mode 100644 index 0000000..abd6358 --- /dev/null +++ b/pages/api/v1/auth/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"fn":[["services",""]],"struct":[["login",""],["register",""],["signout",""]]}; \ No newline at end of file diff --git a/pages/api/v1/auth/struct.login.html b/pages/api/v1/auth/struct.login.html new file mode 100644 index 0000000..898befa --- /dev/null +++ b/pages/api/v1/auth/struct.login.html @@ -0,0 +1,29 @@ +login in pages::api::v1::auth - Rust +
+

Struct pages::api::v1::auth::login

source · []
pub struct login;

Trait Implementations

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/api/v1/auth/struct.register.html b/pages/api/v1/auth/struct.register.html new file mode 100644 index 0000000..a81c0e5 --- /dev/null +++ b/pages/api/v1/auth/struct.register.html @@ -0,0 +1,29 @@ +register in pages::api::v1::auth - Rust +
+

Struct pages::api::v1::auth::register

source · []
pub struct register;

Trait Implementations

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/api/v1/auth/struct.signout.html b/pages/api/v1/auth/struct.signout.html new file mode 100644 index 0000000..03f7230 --- /dev/null +++ b/pages/api/v1/auth/struct.signout.html @@ -0,0 +1,29 @@ +signout in pages::api::v1::auth - Rust +
+

Struct pages::api::v1::auth::signout

source · []
pub struct signout;

Trait Implementations

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/api/v1/fn.get_auth_middleware.html b/pages/api/v1/fn.get_auth_middleware.html new file mode 100644 index 0000000..dba3b4a --- /dev/null +++ b/pages/api/v1/fn.get_auth_middleware.html @@ -0,0 +1,9 @@ +get_auth_middleware in pages::api::v1 - Rust +
pub fn get_auth_middleware() -> Authentication<Routes>
+ \ No newline at end of file diff --git a/pages/api/v1/fn.services.html b/pages/api/v1/fn.services.html new file mode 100644 index 0000000..e2be73e --- /dev/null +++ b/pages/api/v1/fn.services.html @@ -0,0 +1,9 @@ +services in pages::api::v1 - Rust +
+

Function pages::api::v1::services

source · []
pub fn services(cfg: &mut ServiceConfig)
+ \ No newline at end of file diff --git a/pages/api/v1/index.html b/pages/api/v1/index.html new file mode 100644 index 0000000..336952a --- /dev/null +++ b/pages/api/v1/index.html @@ -0,0 +1,14 @@ +pages::api::v1 - Rust +
+ \ No newline at end of file diff --git a/pages/api/v1/routes/constant.ROUTES.html b/pages/api/v1/routes/constant.ROUTES.html new file mode 100644 index 0000000..000b7f4 --- /dev/null +++ b/pages/api/v1/routes/constant.ROUTES.html @@ -0,0 +1,10 @@ +ROUTES in pages::api::v1::routes - Rust +
+

Constant pages::api::v1::routes::ROUTES

source · []
pub const ROUTES: Routes;
Expand description

constant Routes instance

+
+ \ No newline at end of file diff --git a/pages/api/v1/routes/index.html b/pages/api/v1/routes/index.html new file mode 100644 index 0000000..223cb2c --- /dev/null +++ b/pages/api/v1/routes/index.html @@ -0,0 +1,16 @@ +pages::api::v1::routes - Rust +
+

Module pages::api::v1::routes

source · []
Expand description

V1 API Routes

+

Structs

+

Account management routes

+

Authentication routes

+

Top-level routes data structure for V1 AP1

+

Constants

+

constant Routes instance

+
+ \ No newline at end of file diff --git a/pages/api/v1/routes/sidebar-items.js b/pages/api/v1/routes/sidebar-items.js new file mode 100644 index 0000000..1e09afa --- /dev/null +++ b/pages/api/v1/routes/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"constant":[["ROUTES","constant Routes instance"]],"struct":[["Account","Account management routes"],["Auth","Authentication routes"],["Routes","Top-level routes data structure for V1 AP1"]]}; \ No newline at end of file diff --git a/pages/api/v1/routes/struct.Account.html b/pages/api/v1/routes/struct.Account.html new file mode 100644 index 0000000..67d9d7c --- /dev/null +++ b/pages/api/v1/routes/struct.Account.html @@ -0,0 +1,44 @@ +Account in pages::api::v1::routes - Rust +
pub struct Account {
+    pub delete: &'static str,
+    pub email_exists: &'static str,
+    pub update_email: &'static str,
+    pub update_password: &'static str,
+    pub username_exists: &'static str,
+    pub update_username: &'static str,
+}
Expand description

Account management routes

+

Fields

delete: &'static str

delete account route

+
email_exists: &'static str

route to check if an email exists

+
update_email: &'static str

route to update a user’s email

+
update_password: &'static str

route to update password

+
username_exists: &'static str

route to check if a username is already registered

+
update_username: &'static str

route to change username

+

Implementations

create a new instance of Account routes

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/api/v1/routes/struct.Auth.html b/pages/api/v1/routes/struct.Auth.html new file mode 100644 index 0000000..34dd09e --- /dev/null +++ b/pages/api/v1/routes/struct.Auth.html @@ -0,0 +1,38 @@ +Auth in pages::api::v1::routes - Rust +
+

Struct pages::api::v1::routes::Auth

source · []
pub struct Auth {
+    pub logout: &'static str,
+    pub login: &'static str,
+    pub register: &'static str,
+}
Expand description

Authentication routes

+

Fields

logout: &'static str

logout route

+
login: &'static str

login route

+
register: &'static str

registration route

+

Implementations

create new instance of Authentication route

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/api/v1/routes/struct.Routes.html b/pages/api/v1/routes/struct.Routes.html new file mode 100644 index 0000000..8db1675 --- /dev/null +++ b/pages/api/v1/routes/struct.Routes.html @@ -0,0 +1,40 @@ +Routes in pages::api::v1::routes - Rust +
+

Struct pages::api::v1::routes::Routes

source · []
pub struct Routes {
+    pub auth: Auth,
+    pub account: Account,
+    pub meta: Meta,
+    pub deploy: Deploy,
+    pub serve: Serve,
+}
Expand description

Top-level routes data structure for V1 AP1

+

Fields

auth: Auth

Authentication routes

+
account: Account

Account routes

+
meta: Meta

Meta routes

+
deploy: Deployserve: Serve

Implementations

create new instance of Routes

+

Trait Implementations

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/api/v1/sidebar-items.js b/pages/api/v1/sidebar-items.js new file mode 100644 index 0000000..29afbc1 --- /dev/null +++ b/pages/api/v1/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"fn":[["get_auth_middleware",""],["services",""]],"mod":[["account",""],["auth",""],["routes","V1 API Routes"]],"struct":[["RedirectQuery",""]]}; \ No newline at end of file diff --git a/pages/api/v1/struct.RedirectQuery.html b/pages/api/v1/struct.RedirectQuery.html new file mode 100644 index 0000000..ed25b0d --- /dev/null +++ b/pages/api/v1/struct.RedirectQuery.html @@ -0,0 +1,32 @@ +RedirectQuery in pages::api::v1 - Rust +
pub struct RedirectQuery {
+    pub redirect_to: Option<String>,
+}

Fields

redirect_to: Option<String>

Trait Implementations

Deserialize this value from the given Serde deserializer. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/constant.CACHE_AGE.html b/pages/constant.CACHE_AGE.html index 00b8781..ae9d066 100644 --- a/pages/constant.CACHE_AGE.html +++ b/pages/constant.CACHE_AGE.html @@ -5,5 +5,5 @@
-

Constant pages::CACHE_AGE

source · []
pub const CACHE_AGE: u32 = 604800;
+

Constant pages::CACHE_AGE

source · []
pub const CACHE_AGE: u32 = 604800;
\ No newline at end of file diff --git a/pages/constant.GIT_COMMIT_HASH.html b/pages/constant.GIT_COMMIT_HASH.html index d0ce2a6..5f5a893 100644 --- a/pages/constant.GIT_COMMIT_HASH.html +++ b/pages/constant.GIT_COMMIT_HASH.html @@ -5,5 +5,5 @@
pub const GIT_COMMIT_HASH: &str = "5978d178bcae7cfda3ace462e4eb9cacb210ff00";
+

Constant pages::GIT_COMMIT_HASH

source · []
pub const GIT_COMMIT_HASH: &str = "04d7f872d54c1d4ea2206a29d9ed3b74170113f3";
\ No newline at end of file diff --git a/pages/constant.PKG_DESCRIPTION.html b/pages/constant.PKG_DESCRIPTION.html index bef1969..2c09ae5 100644 --- a/pages/constant.PKG_DESCRIPTION.html +++ b/pages/constant.PKG_DESCRIPTION.html @@ -5,5 +5,5 @@
pub const PKG_DESCRIPTION: &str = "";
+

Constant pages::PKG_DESCRIPTION

source · []
pub const PKG_DESCRIPTION: &str = "";
\ No newline at end of file diff --git a/pages/constant.PKG_HOMEPAGE.html b/pages/constant.PKG_HOMEPAGE.html index 32bf8cc..5d1e0a0 100644 --- a/pages/constant.PKG_HOMEPAGE.html +++ b/pages/constant.PKG_HOMEPAGE.html @@ -5,5 +5,5 @@
pub const PKG_HOMEPAGE: &str = "https://github.com/realaravinth/pages";
+

Constant pages::PKG_HOMEPAGE

source · []
pub const PKG_HOMEPAGE: &str = "https://github.com/realaravinth/pages";
\ No newline at end of file diff --git a/pages/constant.PKG_NAME.html b/pages/constant.PKG_NAME.html index 1ecae2d..a243dbe 100644 --- a/pages/constant.PKG_NAME.html +++ b/pages/constant.PKG_NAME.html @@ -5,5 +5,5 @@
-

Constant pages::PKG_NAME

source · []
pub const PKG_NAME: &str = "pages";
+

Constant pages::PKG_NAME

source · []
pub const PKG_NAME: &str = "pages";
\ No newline at end of file diff --git a/pages/constant.V1_API_ROUTES.html b/pages/constant.V1_API_ROUTES.html index 9e6541b..0059ae9 100644 --- a/pages/constant.V1_API_ROUTES.html +++ b/pages/constant.V1_API_ROUTES.html @@ -1,9 +1,10 @@ -V1_API_ROUTES in pages - Rust
-

Constant pages::VERSION

source · []
pub const VERSION: &str = "0.1.0";
+

Constant pages::VERSION

source · []
pub const VERSION: &str = "0.1.0";
\ No newline at end of file diff --git a/pages/ctx/api/index.html b/pages/ctx/api/index.html new file mode 100644 index 0000000..c9390bc --- /dev/null +++ b/pages/ctx/api/index.html @@ -0,0 +1,10 @@ +pages::ctx::api - Rust +
+

Module pages::ctx::api

source · []

Modules

+
+ \ No newline at end of file diff --git a/pages/ctx/api/sidebar-items.js b/pages/ctx/api/sidebar-items.js new file mode 100644 index 0000000..efde08d --- /dev/null +++ b/pages/ctx/api/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"mod":[["v1",""]]}; \ No newline at end of file diff --git a/pages/ctx/api/v1/account/index.html b/pages/ctx/api/v1/account/index.html new file mode 100644 index 0000000..754963d --- /dev/null +++ b/pages/ctx/api/v1/account/index.html @@ -0,0 +1,14 @@ +pages::ctx::api::v1::account - Rust +
+

Module pages::ctx::api::v1::account

source · []
Expand description

Account management utility datastructures and methods

+

Re-exports

+
pub use super::auth;

Structs

+

Data structure used in *_exists methods

+

Data structure used to change password of a registered user

+
+ \ No newline at end of file diff --git a/pages/ctx/api/v1/account/sidebar-items.js b/pages/ctx/api/v1/account/sidebar-items.js new file mode 100644 index 0000000..a12c71e --- /dev/null +++ b/pages/ctx/api/v1/account/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"struct":[["AccountCheckResp","Data structure used in `*_exists` methods"],["ChangePasswordReqest","Data structure used to change password of a registered user"]]}; \ No newline at end of file diff --git a/pages/ctx/api/v1/account/struct.AccountCheckResp.html b/pages/ctx/api/v1/account/struct.AccountCheckResp.html new file mode 100644 index 0000000..8612b62 --- /dev/null +++ b/pages/ctx/api/v1/account/struct.AccountCheckResp.html @@ -0,0 +1,41 @@ +AccountCheckResp in pages::ctx::api::v1::account - Rust +
pub struct AccountCheckResp {
+    pub exists: bool,
+}
Expand description

Data structure used in *_exists methods

+

Fields

exists: bool

set to true if the attribute in question exists

+

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

Serialize this value into the given Serde serializer. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/ctx/api/v1/account/struct.ChangePasswordReqest.html b/pages/ctx/api/v1/account/struct.ChangePasswordReqest.html new file mode 100644 index 0000000..eb4423e --- /dev/null +++ b/pages/ctx/api/v1/account/struct.ChangePasswordReqest.html @@ -0,0 +1,45 @@ +ChangePasswordReqest in pages::ctx::api::v1::account - Rust +
pub struct ChangePasswordReqest {
+    pub password: String,
+    pub new_password: String,
+    pub confirm_new_password: String,
+}
Expand description

Data structure used to change password of a registered user

+

Fields

password: String

current password

+
new_password: String

new password

+
confirm_new_password: String

new password confirmation

+

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

Serialize this value into the given Serde serializer. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/ctx/api/v1/auth/index.html b/pages/ctx/api/v1/auth/index.html new file mode 100644 index 0000000..00a70d9 --- /dev/null +++ b/pages/ctx/api/v1/auth/index.html @@ -0,0 +1,14 @@ +pages::ctx::api::v1::auth - Rust +
+

Module pages::ctx::api::v1::auth

source · []
Expand description

Authentication helper methods and data structures

+

Structs

+

Login payload

+

struct used to represent password

+

Register payload

+
+ \ No newline at end of file diff --git a/pages/ctx/api/v1/auth/sidebar-items.js b/pages/ctx/api/v1/auth/sidebar-items.js new file mode 100644 index 0000000..2cb0500 --- /dev/null +++ b/pages/ctx/api/v1/auth/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"struct":[["Login","Login payload"],["Password","struct used to represent password"],["Register","Register payload"]]}; \ No newline at end of file diff --git a/pages/ctx/api/v1/auth/struct.Login.html b/pages/ctx/api/v1/auth/struct.Login.html new file mode 100644 index 0000000..f089090 --- /dev/null +++ b/pages/ctx/api/v1/auth/struct.Login.html @@ -0,0 +1,44 @@ +Login in pages::ctx::api::v1::auth - Rust +
+

Struct pages::ctx::api::v1::auth::Login

source · []
pub struct Login {
+    pub login: String,
+    pub password: String,
+}
Expand description

Login payload

+

Fields

login: String

user identifier: either username or email +an email is detected by checkinf for the existence of @ character

+
password: String

password

+

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

Serialize this value into the given Serde serializer. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/ctx/api/v1/auth/struct.Password.html b/pages/ctx/api/v1/auth/struct.Password.html new file mode 100644 index 0000000..601d021 --- /dev/null +++ b/pages/ctx/api/v1/auth/struct.Password.html @@ -0,0 +1,41 @@ +Password in pages::ctx::api::v1::auth - Rust +
+

Struct pages::ctx::api::v1::auth::Password

source · []
pub struct Password {
+    pub password: String,
+}
Expand description

struct used to represent password

+

Fields

password: String

password

+

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

Serialize this value into the given Serde serializer. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/ctx/api/v1/auth/struct.Register.html b/pages/ctx/api/v1/auth/struct.Register.html new file mode 100644 index 0000000..e5af6e8 --- /dev/null +++ b/pages/ctx/api/v1/auth/struct.Register.html @@ -0,0 +1,46 @@ +Register in pages::ctx::api::v1::auth - Rust +
+

Struct pages::ctx::api::v1::auth::Register

source · []
pub struct Register {
+    pub username: String,
+    pub password: String,
+    pub confirm_password: String,
+    pub email: String,
+}
Expand description

Register payload

+

Fields

username: String

username

+
password: String

password

+
confirm_password: String

password confirmation: password and confirm_password must match

+
email: String

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

Serialize this value into the given Serde serializer. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/ctx/api/v1/index.html b/pages/ctx/api/v1/index.html new file mode 100644 index 0000000..e89e763 --- /dev/null +++ b/pages/ctx/api/v1/index.html @@ -0,0 +1,12 @@ +pages::ctx::api::v1 - Rust +
+

Module pages::ctx::api::v1

source · []

Modules

+

Account management utility datastructures and methods

+

Authentication helper methods and data structures

+
+ \ No newline at end of file diff --git a/pages/ctx/api/v1/sidebar-items.js b/pages/ctx/api/v1/sidebar-items.js new file mode 100644 index 0000000..f248728 --- /dev/null +++ b/pages/ctx/api/v1/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"mod":[["account","Account management utility datastructures and methods"],["auth","Authentication helper methods and data structures"]]}; \ No newline at end of file diff --git a/pages/ctx/index.html b/pages/ctx/index.html index 12ae44f..75006c1 100644 --- a/pages/ctx/index.html +++ b/pages/ctx/index.html @@ -2,9 +2,11 @@

\ No newline at end of file diff --git a/pages/ctx/sidebar-items.js b/pages/ctx/sidebar-items.js index e9905cb..34914e8 100644 --- a/pages/ctx/sidebar-items.js +++ b/pages/ctx/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"struct":[["Ctx",""]]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"mod":[["api",""]],"struct":[["Ctx",""]],"type":[["ArcCtx",""]]}; \ No newline at end of file diff --git a/pages/ctx/struct.Ctx.html b/pages/ctx/struct.Ctx.html index 7405b90..57aa505 100644 --- a/pages/ctx/struct.Ctx.html +++ b/pages/ctx/struct.Ctx.html @@ -2,21 +2,34 @@

-

Struct pages::ctx::Ctx

source · []
pub struct Ctx {
+    

Struct pages::ctx::Ctx

source · []
pub struct Ctx {
     pub settings: Settings,
-}

Fields

settings: Settings

Implementations

Trait Implementations

Returns a copy of the value. Read more

+ pub db: Database, + pub creds: ArgonConfig, +}

Fields

settings: Settingsdb: Databasecreds: ArgonConfig

credential-procession policy

+

Implementations

check if email exists on database

+

update email

+

check if email exists in database

+

update username of a registered user

+

delete user

+

change password

+

Log in method. Returns Ok(()) when user is authenticated and errors when authentication +fails

+

register new user

+

Get credential-processing policy

+

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

-

Instruments this type with the provided Span, returning an -Instrumented wrapper. Read more

-

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

@@ -28,9 +41,9 @@

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

-

Attaches the provided Subscriber to this type, returning a -WithDispatch wrapper. Read more

-

Attaches the current default Subscriber to this type, returning a -WithDispatch wrapper. Read more

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

\ No newline at end of file diff --git a/pages/ctx/type.ArcCtx.html b/pages/ctx/type.ArcCtx.html new file mode 100644 index 0000000..ba15a2f --- /dev/null +++ b/pages/ctx/type.ArcCtx.html @@ -0,0 +1,9 @@ +ArcCtx in pages::ctx - Rust +
+

Type Definition pages::ctx::ArcCtx

source · []
pub type ArcCtx = Arc<Ctx>;
+ \ No newline at end of file diff --git a/pages/db/enum.ConnectionOptions.html b/pages/db/enum.ConnectionOptions.html new file mode 100644 index 0000000..e184794 --- /dev/null +++ b/pages/db/enum.ConnectionOptions.html @@ -0,0 +1,35 @@ +ConnectionOptions in pages::db - Rust +
pub enum ConnectionOptions {
+    Fresh(Fresh),
+    Existing(Conn),
+}
Expand description

Connect to databse

+

Variants

Fresh(Fresh)

fresh connection

+

Existing(Conn)

existing connection

+

Implementations

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/db/enum.Login.html b/pages/db/enum.Login.html new file mode 100644 index 0000000..157a4eb --- /dev/null +++ b/pages/db/enum.Login.html @@ -0,0 +1,47 @@ +Login in pages::db - Rust +
+

Enum pages::db::Login

source · []
pub enum Login<'a> {
+    Username(&'a str),
+    Email(&'a str),
+}
Expand description

types of credentials used as identifiers during login

+

Variants

Username(&'a str)

username as login

+

Email(&'a str)

email as login

+

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

This method tests for self and other values to be equal, and is used +by ==. Read more

+

This method tests for !=.

+

Serialize this value into the given Serde serializer. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Compare self to key and return true if they are equal.

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/db/fn.get_db.html b/pages/db/fn.get_db.html new file mode 100644 index 0000000..27d85a2 --- /dev/null +++ b/pages/db/fn.get_db.html @@ -0,0 +1,9 @@ +get_db in pages::db - Rust +
+

Function pages::db::get_db

source · []
pub async fn get_db(settings: &Settings) -> Database
+ \ No newline at end of file diff --git a/pages/db/fn.map_register_err.html b/pages/db/fn.map_register_err.html new file mode 100644 index 0000000..30a1c06 --- /dev/null +++ b/pages/db/fn.map_register_err.html @@ -0,0 +1,10 @@ +map_register_err in pages::db - Rust +
fn map_register_err(e: Error) -> ServiceError
Expand description

map postgres errors to ServiceError types

+
+ \ No newline at end of file diff --git a/pages/db/fn.map_row_not_found_err.html b/pages/db/fn.map_row_not_found_err.html new file mode 100644 index 0000000..438c97f --- /dev/null +++ b/pages/db/fn.map_row_not_found_err.html @@ -0,0 +1,10 @@ +map_row_not_found_err in pages::db - Rust +
pub fn map_row_not_found_err(
    e: Error,
    row_not_found: ServiceError
) -> ServiceError
Expand description

map custom row not found error to DB error

+
+ \ No newline at end of file diff --git a/pages/db/fn.now_unix_time_stamp.html b/pages/db/fn.now_unix_time_stamp.html new file mode 100644 index 0000000..ddcb2b6 --- /dev/null +++ b/pages/db/fn.now_unix_time_stamp.html @@ -0,0 +1,9 @@ +now_unix_time_stamp in pages::db - Rust +
fn now_unix_time_stamp() -> OffsetDateTime
+ \ No newline at end of file diff --git a/pages/db/index.html b/pages/db/index.html new file mode 100644 index 0000000..3f37883 --- /dev/null +++ b/pages/db/index.html @@ -0,0 +1,20 @@ +pages::db - Rust +
+

Module pages::db

source · []

Structs

+

Use an existing database pool

+

type encapsulating username and hashed password of a user

+

Data required to register a new user

+

data required to update them email of a user

+

Enums

+

Connect to databse

+

types of credentials used as identifiers during login

+

Functions

+

map postgres errors to ServiceError types

+

map custom row not found error to DB error

+
+ \ No newline at end of file diff --git a/pages/db/sidebar-items.js b/pages/db/sidebar-items.js new file mode 100644 index 0000000..c6b9a90 --- /dev/null +++ b/pages/db/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":[["ConnectionOptions","Connect to databse"],["Login","types of credentials used as identifiers during login"]],"fn":[["get_db",""],["map_register_err","map postgres errors to ServiceError types"],["map_row_not_found_err","map custom row not found error to DB error"],["now_unix_time_stamp",""]],"struct":[["Conn","Use an existing database pool"],["Database",""],["Fresh",""],["NameHash","type encapsulating username and hashed password of a user"],["Register","Data required to register a new user"],["UpdateEmail","data required to update them email of a user"]]}; \ No newline at end of file diff --git a/pages/db/struct.Conn.html b/pages/db/struct.Conn.html new file mode 100644 index 0000000..cd78a02 --- /dev/null +++ b/pages/db/struct.Conn.html @@ -0,0 +1,30 @@ +Conn in pages::db - Rust +
+

Struct pages::db::Conn

source · []
pub struct Conn(pub PgPool);
Expand description

Use an existing database pool

+

Tuple Fields

0: PgPool

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/db/struct.Database.html b/pages/db/struct.Database.html new file mode 100644 index 0000000..9170a72 --- /dev/null +++ b/pages/db/struct.Database.html @@ -0,0 +1,45 @@ +Database in pages::db - Rust +
+

Struct pages::db::Database

source · []
pub struct Database {
+    pub pool: PgPool,
+}

Fields

pool: PgPool

Implementations

register a new user

+

delete a user

+

check if username exists

+

get user email

+

check if email exists

+

update a user’s email

+

get a user’s password

+

update user’s password

+

update username

+

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/db/struct.Fresh.html b/pages/db/struct.Fresh.html new file mode 100644 index 0000000..7e76777 --- /dev/null +++ b/pages/db/struct.Fresh.html @@ -0,0 +1,33 @@ +Fresh in pages::db - Rust +
+

Struct pages::db::Fresh

source · []
pub struct Fresh {
+    pub pool_options: PgPoolOptions,
+    pub disable_logging: bool,
+    pub url: String,
+}

Fields

pool_options: PgPoolOptionsdisable_logging: boolurl: String

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/db/struct.NameHash.html b/pages/db/struct.NameHash.html new file mode 100644 index 0000000..b32ff81 --- /dev/null +++ b/pages/db/struct.NameHash.html @@ -0,0 +1,47 @@ +NameHash in pages::db - Rust +
+

Struct pages::db::NameHash

source · []
pub struct NameHash {
+    pub username: String,
+    pub hash: String,
+}
Expand description

type encapsulating username and hashed password of a user

+

Fields

username: String

username

+
hash: String

hashed password

+

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

This method tests for self and other values to be equal, and is used +by ==. Read more

+

This method tests for !=.

+

Serialize this value into the given Serde serializer. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Compare self to key and return true if they are equal.

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/db/struct.Register.html b/pages/db/struct.Register.html new file mode 100644 index 0000000..c88ba01 --- /dev/null +++ b/pages/db/struct.Register.html @@ -0,0 +1,49 @@ +Register in pages::db - Rust +
+

Struct pages::db::Register

source · []
pub struct Register<'a> {
+    pub username: &'a str,
+    pub hash: &'a str,
+    pub email: &'a str,
+}
Expand description

Data required to register a new user

+

Fields

username: &'a str

username of new user

+
hash: &'a str

hashed password of new use

+
email: &'a str

Optionally, email of new use

+

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

This method tests for self and other values to be equal, and is used +by ==. Read more

+

This method tests for !=.

+

Serialize this value into the given Serde serializer. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Compare self to key and return true if they are equal.

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/db/struct.UpdateEmail.html b/pages/db/struct.UpdateEmail.html new file mode 100644 index 0000000..27dcdd8 --- /dev/null +++ b/pages/db/struct.UpdateEmail.html @@ -0,0 +1,47 @@ +UpdateEmail in pages::db - Rust +
pub struct UpdateEmail<'a> {
+    pub username: &'a str,
+    pub new_email: &'a str,
+}
Expand description

data required to update them email of a user

+

Fields

username: &'a str

username of the user

+
new_email: &'a str

new email address of the user

+

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

This method tests for self and other values to be equal, and is used +by ==. Read more

+

This method tests for !=.

+

Serialize this value into the given Serde serializer. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Compare self to key and return true if they are equal.

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/deploy/fn.find_page.html b/pages/deploy/fn.find_page.html index 6672199..1ba41fe 100644 --- a/pages/deploy/fn.find_page.html +++ b/pages/deploy/fn.find_page.html @@ -5,5 +5,5 @@
fn find_page<'a>(secret: &str, ctx: &'a AppCtx) -> Option<&'a Page>
+

Function pages::deploy::find_page

source · []
pub fn find_page<'a>(secret: &str, ctx: &'a AppCtx) -> Option<&'a Page>
\ No newline at end of file diff --git a/pages/deploy/index.html b/pages/deploy/index.html index 54cb2b0..62ffe43 100644 --- a/pages/deploy/index.html +++ b/pages/deploy/index.html @@ -8,5 +8,5 @@

Module pages::deploy

source · []

Modules

Structs

Functions

-
find_page 🔒
+
\ No newline at end of file diff --git a/pages/deploy/routes/struct.Deploy.html b/pages/deploy/routes/struct.Deploy.html index a866e61..6be27f2 100644 --- a/pages/deploy/routes/struct.Deploy.html +++ b/pages/deploy/routes/struct.Deploy.html @@ -12,10 +12,10 @@

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

-

Instruments this type with the provided Span, returning an -Instrumented wrapper. Read more

-

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

@@ -24,9 +24,9 @@

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

-

Attaches the provided Subscriber to this type, returning a -WithDispatch wrapper. Read more

-

Attaches the current default Subscriber to this type, returning a -WithDispatch wrapper. Read more

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

\ No newline at end of file diff --git a/pages/deploy/struct.DeployEvent.html b/pages/deploy/struct.DeployEvent.html index f548e9b..25a87ab 100644 --- a/pages/deploy/struct.DeployEvent.html +++ b/pages/deploy/struct.DeployEvent.html @@ -11,16 +11,16 @@ }

Fields

secret: Stringbranch: String

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

-

Deserialize this value from the given Serde deserializer. Read more

-

Serialize this value into the given Serde serializer. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

-

Instruments this type with the provided Span, returning an -Instrumented wrapper. Read more

-

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

@@ -32,9 +32,9 @@

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

-

Attaches the provided Subscriber to this type, returning a -WithDispatch wrapper. Read more

-

Attaches the current default Subscriber to this type, returning a -WithDispatch wrapper. Read more

-
+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
\ No newline at end of file diff --git a/pages/deploy/struct.DeployInfo.html b/pages/deploy/struct.DeployInfo.html index dd2dcfd..d489c2d 100644 --- a/pages/deploy/struct.DeployInfo.html +++ b/pages/deploy/struct.DeployInfo.html @@ -2,7 +2,7 @@

pub struct DeployInfo {
@@ -12,19 +12,20 @@
 }

Fields

head: Stringremote: Stringcommit: String

Implementations

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

-

Deserialize this value from the given Serde deserializer. Read more

+

Deserialize this value from the given Serde deserializer. Read more

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

-

Serialize this value into the given Serde serializer. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Serialize this value into the given Serde serializer. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

+

Compare self to key and return true if they are equal.

Returns the argument unchanged.

-

Instruments this type with the provided Span, returning an -Instrumented wrapper. Read more

-

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

@@ -36,9 +37,9 @@ by ==.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

-

Attaches the provided Subscriber to this type, returning a -WithDispatch wrapper. Read more

-

Attaches the current default Subscriber to this type, returning a -WithDispatch wrapper. Read more

-
+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
\ No newline at end of file diff --git a/pages/deploy/struct.DeploySecret.html b/pages/deploy/struct.DeploySecret.html index 99917df..9890b3d 100644 --- a/pages/deploy/struct.DeploySecret.html +++ b/pages/deploy/struct.DeploySecret.html @@ -2,7 +2,7 @@

pub struct DeploySecret {
@@ -10,19 +10,20 @@
 }

Fields

secret: String

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

-

Deserialize this value from the given Serde deserializer. Read more

+

Deserialize this value from the given Serde deserializer. Read more

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

-

Serialize this value into the given Serde serializer. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Serialize this value into the given Serde serializer. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

+

Compare self to key and return true if they are equal.

Returns the argument unchanged.

-

Instruments this type with the provided Span, returning an -Instrumented wrapper. Read more

-

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

@@ -34,9 +35,9 @@ by ==.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

-

Attaches the provided Subscriber to this type, returning a -WithDispatch wrapper. Read more

-

Attaches the current default Subscriber to this type, returning a -WithDispatch wrapper. Read more

-
+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
\ No newline at end of file diff --git a/pages/deploy/struct.deploy_info.html b/pages/deploy/struct.deploy_info.html index 4ac0bb0..8821874 100644 --- a/pages/deploy/struct.deploy_info.html +++ b/pages/deploy/struct.deploy_info.html @@ -9,10 +9,10 @@

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

-

Instruments this type with the provided Span, returning an -Instrumented wrapper. Read more

-

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

@@ -21,9 +21,9 @@

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

-

Attaches the provided Subscriber to this type, returning a -WithDispatch wrapper. Read more

-

Attaches the current default Subscriber to this type, returning a -WithDispatch wrapper. Read more

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

\ No newline at end of file diff --git a/pages/deploy/struct.update.html b/pages/deploy/struct.update.html index 4a87624..5d982d8 100644 --- a/pages/deploy/struct.update.html +++ b/pages/deploy/struct.update.html @@ -9,10 +9,10 @@

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

-

Instruments this type with the provided Span, returning an -Instrumented wrapper. Read more

-

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

@@ -21,9 +21,9 @@

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

-

Attaches the provided Subscriber to this type, returning a -WithDispatch wrapper. Read more

-

Attaches the current default Subscriber to this type, returning a -WithDispatch wrapper. Read more

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

\ No newline at end of file diff --git a/pages/enum.Commands.html b/pages/enum.Commands.html new file mode 100644 index 0000000..795ee62 --- /dev/null +++ b/pages/enum.Commands.html @@ -0,0 +1,41 @@ +Commands in pages - Rust +
pub(crate) enum Commands {
+    Migrate,
+    Serve,
+}

Variants

Migrate

run database migrations

+

Serve

run server

+

Trait Implementations

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more

+

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more

+

Assign values from ArgMatches to self.

+

Assign values from ArgMatches to self.

+

Append to [Command] so it can instantiate Self. Read more

+

Append to [Command] so it can update self. Read more

+

Test whether Self can parse a specific subcommand

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/errors/enum.ServiceError.html b/pages/errors/enum.ServiceError.html index 88ae7a1..16aa859 100644 --- a/pages/errors/enum.ServiceError.html +++ b/pages/errors/enum.ServiceError.html @@ -2,11 +2,11 @@

pub enum ServiceError {
-
Show 13 variants InternalServerError, +

Enum pages::errors::ServiceError

source · []
pub enum ServiceError {
+
Show 25 variants InternalServerError, NotAUrl, URLTooLong, WebsiteNotFound, @@ -19,6 +19,18 @@ ConfigError(ConfigError), GitError(GitError), BranchNotFound(String), + UsernameTaken, + EmailTaken, + AccountNotFound, + ClosedForRegistration, + NotAnEmail, + WrongPassword, + ProfanityError, + BlacklistError, + UsernameCaseMappedError, + PasswordTooShort, + PasswordTooLong, + PasswordsDontMatch,
}
Expand description

Error data structure grouping various error subtypes

Variants

InternalServerError

All non-specific errors are grouped under this category

NotAUrl

The value you entered for url is not url“

@@ -27,29 +39,45 @@

PathTaken(Arc<Page>, Arc<Page>)

when the a path configured for a page is already taken

SecretTaken(Arc<Page>, Arc<Page>)

when the a Secret configured for a page is already taken

DuplicateRepositoryURL(Arc<Page>, Arc<Page>)

when the a Repository URL configured for a page is already taken

-

FSError(FSError)

UnauthorizedOperation(String)

BadRequest(String)

ConfigError(ConfigError)

GitError(GitError)

BranchNotFound(String)

Trait Implementations

Formats the value using the given formatter. Read more

-

Formats the value using the given formatter. Read more

-

The lower-level source of this error, if any. Read more

+

FSError(FSError)

UnauthorizedOperation(String)

BadRequest(String)

ConfigError(ConfigError)

GitError(GitError)

BranchNotFound(String)

UsernameTaken

Username is taken

+

EmailTaken

Email is taken

+

AccountNotFound

Account not found

+

ClosedForRegistration

registration failure, server is is closed for registration

+

NotAnEmail

The value you entered for email is not an email“

+

WrongPassword

wrong password

+

ProfanityError

when the value passed contains profanity

+

BlacklistError

when the value passed contains blacklisted words +see blacklist

+

UsernameCaseMappedError

when the value passed contains characters not present +in UsernameCaseMapped +profile

+

PasswordTooShort

password too short

+

PasswordTooLong

password too long

+

PasswordsDontMatch

passwords don’t match

+

Trait Implementations

Formats the value using the given formatter. Read more

+

Formats the value using the given formatter. Read more

+

The lower-level source of this error, if any. Read more

🔬 This is a nightly-only experimental API. (backtrace)

Returns a stack backtrace, if available, of where this error occurred. Read more

👎 Deprecated since 1.42.0:

use the Display impl or to_string()

👎 Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

-

Converts to this type from the input type.

-

Converts to this type from the input type.

-

Converts to this type from the input type.

-

Converts to this type from the input type.

-

This method tests for self and other values to be equal, and is used +

Converts to this type from the input type.

+

Converts to this type from the input type.

+

Converts to this type from the input type.

+

Converts to this type from the input type.

+

Converts to this type from the input type.

+

This method tests for self and other values to be equal, and is used by ==. Read more

-

This method tests for !=.

-

Creates full response for error. Read more

-

Returns appropriate status code for error. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

This method tests for !=.

+

Creates full response for error. Read more

+

Returns appropriate status code for error. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

-

Returns the argument unchanged.

-

Instruments this type with the provided Span, returning an -Instrumented wrapper. Read more

-

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

@@ -59,9 +87,9 @@ by ==.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

-

Attaches the provided Subscriber to this type, returning a -WithDispatch wrapper. Read more

-

Attaches the current default Subscriber to this type, returning a -WithDispatch wrapper. Read more

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

\ No newline at end of file diff --git a/pages/errors/index.html b/pages/errors/index.html index 63e4d1e..c5ec736 100644 --- a/pages/errors/index.html +++ b/pages/errors/index.html @@ -1,11 +1,11 @@ -pages::errors - Rust
pub struct ConfigError(pub ConfigErrorInner);

Tuple Fields

0: ConfigErrorInner

Trait Implementations

Formats the value using the given formatter. Read more

-

Formats the value using the given formatter. Read more

-

The lower-level source of this error, if any. Read more

+

Struct pages::errors::ConfigError

source · []
pub struct ConfigError(pub ConfigErrorInner);

Tuple Fields

0: ConfigErrorInner

Trait Implementations

Formats the value using the given formatter. Read more

+

Formats the value using the given formatter. Read more

+

The lower-level source of this error, if any. Read more

🔬 This is a nightly-only experimental API. (backtrace)

Returns a stack backtrace, if available, of where this error occurred. Read more

👎 Deprecated since 1.42.0:

use the Display impl or to_string()

👎 Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

-

This method tests for self and other values to be equal, and is used +

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

-

Instruments this type with the provided Span, returning an -Instrumented wrapper. Read more

-

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

@@ -31,9 +31,9 @@ by ==.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

-

Attaches the provided Subscriber to this type, returning a -WithDispatch wrapper. Read more

-

Attaches the current default Subscriber to this type, returning a -WithDispatch wrapper. Read more

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

\ No newline at end of file diff --git a/pages/errors/struct.ErrorToResponse.html b/pages/errors/struct.ErrorToResponse.html index 13757dc..283f534 100644 --- a/pages/errors/struct.ErrorToResponse.html +++ b/pages/errors/struct.ErrorToResponse.html @@ -5,19 +5,19 @@

ErrorToResponse

pub struct ErrorToResponse {
+    

Struct pages::errors::ErrorToResponse

source · []
pub struct ErrorToResponse {
     pub error: String,
-}

Fields

error: String

Trait Implementations

Formats the value using the given formatter. Read more

-

Deserialize this value from the given Serde deserializer. Read more

-

Serialize this value into the given Serde serializer. Read more

+}

Fields

error: String

Trait Implementations

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

-

Instruments this type with the provided Span, returning an -Instrumented wrapper. Read more

-

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

@@ -26,9 +26,9 @@

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

-

Attaches the provided Subscriber to this type, returning a -WithDispatch wrapper. Read more

-

Attaches the current default Subscriber to this type, returning a -WithDispatch wrapper. Read more

-
+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
\ No newline at end of file diff --git a/pages/errors/struct.FSError.html b/pages/errors/struct.FSError.html index 936f05e..27fdd5a 100644 --- a/pages/errors/struct.FSError.html +++ b/pages/errors/struct.FSError.html @@ -5,23 +5,23 @@

FSError

pub struct FSError(pub FSErrorInner);

Tuple Fields

0: FSErrorInner

Trait Implementations

Formats the value using the given formatter. Read more

-

Formats the value using the given formatter. Read more

-

The lower-level source of this error, if any. Read more

+

Struct pages::errors::FSError

source · []
pub struct FSError(pub FSErrorInner);

Tuple Fields

0: FSErrorInner

Trait Implementations

Formats the value using the given formatter. Read more

+

Formats the value using the given formatter. Read more

+

The lower-level source of this error, if any. Read more

🔬 This is a nightly-only experimental API. (backtrace)

Returns a stack backtrace, if available, of where this error occurred. Read more

👎 Deprecated since 1.42.0:

use the Display impl or to_string()

👎 Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

-

This method tests for self and other values to be equal, and is used +

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

-

Instruments this type with the provided Span, returning an -Instrumented wrapper. Read more

-

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

@@ -31,9 +31,9 @@ by ==.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

-

Attaches the provided Subscriber to this type, returning a -WithDispatch wrapper. Read more

-

Attaches the current default Subscriber to this type, returning a -WithDispatch wrapper. Read more

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

\ No newline at end of file diff --git a/pages/errors/type.ServiceResult.html b/pages/errors/type.ServiceResult.html index 96dba32..16867f3 100644 --- a/pages/errors/type.ServiceResult.html +++ b/pages/errors/type.ServiceResult.html @@ -5,6 +5,6 @@

ServiceResult

-

Type Definition pages::errors::ServiceResult

source · []
pub type ServiceResult<V> = Result<V, ServiceError>;
Expand description

Generic result data structure

+

Type Definition pages::errors::ServiceResult

source · []
pub type ServiceResult<V> = Result<V, ServiceError>;
Expand description

Generic result data structure

\ No newline at end of file diff --git a/pages/fn.get_identity_service.html b/pages/fn.get_identity_service.html new file mode 100644 index 0000000..0a1c968 --- /dev/null +++ b/pages/fn.get_identity_service.html @@ -0,0 +1,9 @@ +get_identity_service in pages - Rust +
pub fn get_identity_service(
    settings: &Settings
) -> IdentityService<CookieIdentityPolicy>
+ \ No newline at end of file diff --git a/pages/fn.get_json_err.html b/pages/fn.get_json_err.html index b555d47..f07753e 100644 --- a/pages/fn.get_json_err.html +++ b/pages/fn.get_json_err.html @@ -5,5 +5,5 @@
pub fn get_json_err() -> JsonConfig
+

Function pages::get_json_err

source · []
pub fn get_json_err() -> JsonConfig
\ No newline at end of file diff --git a/pages/fn.main.html b/pages/fn.main.html index c553655..d2f8032 100644 --- a/pages/fn.main.html +++ b/pages/fn.main.html @@ -5,5 +5,5 @@
-

Function pages::main

source · []
pub(crate) fn main() -> Result<()>
+

Function pages::main

source · []
pub(crate) fn main() -> Result<()>
\ No newline at end of file diff --git a/pages/fn.serve.html b/pages/fn.serve.html new file mode 100644 index 0000000..0f1be3a --- /dev/null +++ b/pages/fn.serve.html @@ -0,0 +1,9 @@ +serve in pages - Rust +
+

Function pages::serve

source · []
pub(crate) async fn serve(settings: Settings, ctx: AppCtx) -> Result<()>
+ \ No newline at end of file diff --git a/pages/fn.services.html b/pages/fn.services.html index 0c34b75..7abb995 100644 --- a/pages/fn.services.html +++ b/pages/fn.services.html @@ -5,5 +5,5 @@
-

Function pages::services

source · []
pub fn services(cfg: &mut ServiceConfig)
+

Function pages::services

source · []
pub fn services(cfg: &mut ServiceConfig)
\ No newline at end of file diff --git a/pages/git/enum.ContentType.html b/pages/git/enum.ContentType.html new file mode 100644 index 0000000..072d3bd --- /dev/null +++ b/pages/git/enum.ContentType.html @@ -0,0 +1,44 @@ +ContentType in pages::git - Rust +
pub enum ContentType {
+    Binary(Vec<u8>),
+    Text(String),
+}

Variants

Binary(Vec<u8>)

Text(String)

Implementations

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

This method tests for self and other values to be equal, and is used +by ==. Read more

+

This method tests for !=.

+

Serialize this value into the given Serde serializer. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Compare self to key and return true if they are equal.

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/git/enum.GitFileMode.html b/pages/git/enum.GitFileMode.html new file mode 100644 index 0000000..efdd73e --- /dev/null +++ b/pages/git/enum.GitFileMode.html @@ -0,0 +1,77 @@ +GitFileMode in pages::git - Rust +
#[repr(isize)]
+pub enum GitFileMode {
+    Empty,
+    Regular,
+    Dir,
+    Deprecated,
+    Executable,
+    Symlink,
+    Submodule,
+    Unsupported,
+}
Expand description

A FileMode represents the kind of tree entries used by git. It +resembles regular file systems modes, although FileModes are +considerably simpler (there are not so many), and there are some, +like Submodule that has no file system equivalent.

+

Variants

Empty

Empty is used as the GitFileMode of tree elements when comparing +trees in the following situations:

+
    +
  • the mode of tree elements before their creation.
  • +
  • the mode of tree elements after their deletion.
  • +
  • the mode of unmerged elements when checking the index.
  • +
+

Empty has no file system equivalent. As Empty is the zero value +of GitFileMode

+

Regular

Regular represent non-executable files.

+

Dir

Dir represent a Directory.

+

Deprecated

Deprecated represent non-executable files with the group writable bit set. This mode was +supported by the first versions of git, but it has been deprecated nowadays. This +library(github.com/go-git/go-git uses it, not realaravinth/gitpad at the moment) uses them +internally, so you can read old packfiles, but will treat them as Regulars when interfacing +with the outside world. This is the standard git behaviour.

+

Executable

Executable represents executable files.

+

Symlink represents symbolic links to files.

+

Submodule

Submodule represents git submodules. This mode has no file system +equivalent.

+

Unsupported

Unsupported file mode

+

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

Converts to this type from the input type.

+

Converts to this type from the input type.

+

Converts to this type from the input type.

+

This method tests for self and other values to be equal, and is used +by ==. Read more

+

This method tests for !=.

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Compare self to key and return true if they are equal.

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/git/fn.read_file.html b/pages/git/fn.read_file.html new file mode 100644 index 0000000..2d784a6 --- /dev/null +++ b/pages/git/fn.read_file.html @@ -0,0 +1,14 @@ +read_file in pages::git - Rust +
+

Function pages::git::read_file

source · []
pub fn read_file(repo_path: &str, path: &str) -> Result<FileInfo, ServiceError>
Expand description

Please note that this method expects path to not contain any spaces +Use [escape_spaces] before calling this method

+

For example, a read request for “foo bar.md” will fail even if that file is present +in the repository. However, it will succeed if the output of [escape_spaces] is +used in the request.

+
+ \ No newline at end of file diff --git a/pages/git/fn.read_file_inner.html b/pages/git/fn.read_file_inner.html new file mode 100644 index 0000000..595a776 --- /dev/null +++ b/pages/git/fn.read_file_inner.html @@ -0,0 +1,9 @@ +read_file_inner in pages::git - Rust +
fn read_file_inner(
    repo: &Repository,
    path: &str,
    tree: &Tree<'_>
) -> Result<FileInfo, ServiceError>
+ \ No newline at end of file diff --git a/pages/git/fn.read_preview_file.html b/pages/git/fn.read_preview_file.html new file mode 100644 index 0000000..6939a8d --- /dev/null +++ b/pages/git/fn.read_preview_file.html @@ -0,0 +1,9 @@ +read_preview_file in pages::git - Rust +
pub fn read_preview_file(
    repo_path: &str,
    preview_name: &str,
    path: &str
) -> Result<FileInfo, ServiceError>
+ \ No newline at end of file diff --git a/pages/git/index.html b/pages/git/index.html new file mode 100644 index 0000000..479e0e1 --- /dev/null +++ b/pages/git/index.html @@ -0,0 +1,18 @@ +pages::git - Rust +
+

Module pages::git

source · []

Structs

+

Enums

+

A FileMode represents the kind of tree entries used by git. It +resembles regular file systems modes, although FileModes are +considerably simpler (there are not so many), and there are some, +like Submodule that has no file system equivalent.

+

Functions

+

Please note that this method expects path to not contain any spaces +Use [escape_spaces] before calling this method

+
+ \ No newline at end of file diff --git a/pages/git/sidebar-items.js b/pages/git/sidebar-items.js new file mode 100644 index 0000000..bf4bc2b --- /dev/null +++ b/pages/git/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":[["ContentType",""],["GitFileMode","A FileMode represents the kind of tree entries used by git. It resembles regular file systems modes, although FileModes are considerably simpler (there are not so many), and there are some, like Submodule that has no file system equivalent."]],"fn":[["read_file","Please note that this method expects path to not contain any spaces Use [escape_spaces] before calling this method"],["read_file_inner",""],["read_preview_file",""]],"struct":[["FileInfo",""]]}; \ No newline at end of file diff --git a/pages/git/struct.FileInfo.html b/pages/git/struct.FileInfo.html new file mode 100644 index 0000000..7376d5d --- /dev/null +++ b/pages/git/struct.FileInfo.html @@ -0,0 +1,43 @@ +FileInfo in pages::git - Rust +
+

Struct pages::git::FileInfo

source · []
pub struct FileInfo {
+    pub filename: String,
+    pub content: ContentType,
+    pub mime: MimeGuess,
+}

Fields

filename: Stringcontent: ContentTypemime: MimeGuess

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

This method tests for self and other values to be equal, and is used +by ==. Read more

+

This method tests for !=.

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Compare self to key and return true if they are equal.

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/index.html b/pages/index.html index b7ae970..6ab5c8b 100644 --- a/pages/index.html +++ b/pages/index.html @@ -2,14 +2,16 @@

\ No newline at end of file diff --git a/pages/meta/fn.services.html b/pages/meta/fn.services.html index e64efef..a2251d1 100644 --- a/pages/meta/fn.services.html +++ b/pages/meta/fn.services.html @@ -5,5 +5,5 @@
-

Function pages::meta::services

source · []
pub fn services(cfg: &mut ServiceConfig)
+

Function pages::meta::services

source · []
pub fn services(cfg: &mut ServiceConfig)
\ No newline at end of file diff --git a/pages/meta/index.html b/pages/meta/index.html index 4c80854..eabcd9b 100644 --- a/pages/meta/index.html +++ b/pages/meta/index.html @@ -5,9 +5,11 @@

Module meta

-

Module pages::meta

source · []

Modules

+

Module pages::meta

source · []

Modules

Structs

-

emmits build details of the bninary

+

Health check return datatype

+

emits build details of the binary

+

checks all components of the system

Functions

\ No newline at end of file diff --git a/pages/meta/routes/struct.Meta.html b/pages/meta/routes/struct.Meta.html index e94b1d1..5cbc0ef 100644 --- a/pages/meta/routes/struct.Meta.html +++ b/pages/meta/routes/struct.Meta.html @@ -12,10 +12,10 @@

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

-

Instruments this type with the provided Span, returning an -Instrumented wrapper. Read more

-

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

@@ -24,9 +24,9 @@

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

-

Attaches the provided Subscriber to this type, returning a -WithDispatch wrapper. Read more

-

Attaches the current default Subscriber to this type, returning a -WithDispatch wrapper. Read more

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

\ No newline at end of file diff --git a/pages/meta/sidebar-items.js b/pages/meta/sidebar-items.js index 31fc317..ca4b38a 100644 --- a/pages/meta/sidebar-items.js +++ b/pages/meta/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"fn":[["services",""]],"mod":[["routes",""]],"struct":[["BuildDetails",""],["build_details","emmits build details of the bninary"]]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"fn":[["services",""]],"mod":[["routes",""]],"struct":[["BuildDetails",""],["Health","Health check return datatype"],["build_details","emits build details of the binary"],["health","checks all components of the system"]]}; \ No newline at end of file diff --git a/pages/meta/struct.BuildDetails.html b/pages/meta/struct.BuildDetails.html index efc0b94..4cf5d80 100644 --- a/pages/meta/struct.BuildDetails.html +++ b/pages/meta/struct.BuildDetails.html @@ -12,16 +12,16 @@ }

Fields

version: &'a strgit_commit_hash: &'a strsource_code: &'a str

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

-

Deserialize this value from the given Serde deserializer. Read more

-

Serialize this value into the given Serde serializer. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

-

Instruments this type with the provided Span, returning an -Instrumented wrapper. Read more

-

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

@@ -33,9 +33,9 @@

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

-

Attaches the provided Subscriber to this type, returning a -WithDispatch wrapper. Read more

-

Attaches the current default Subscriber to this type, returning a -WithDispatch wrapper. Read more

-
+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
\ No newline at end of file diff --git a/pages/meta/struct.Health.html b/pages/meta/struct.Health.html new file mode 100644 index 0000000..0381dc6 --- /dev/null +++ b/pages/meta/struct.Health.html @@ -0,0 +1,40 @@ +Health in pages::meta - Rust +
+

Struct pages::meta::Health

source · []
pub struct Health {
+    db: bool,
+}
Expand description

Health check return datatype

+

Fields

db: bool

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

Serialize this value into the given Serde serializer. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/meta/struct.build_details.html b/pages/meta/struct.build_details.html index f7e2f2c..6a5cd4d 100644 --- a/pages/meta/struct.build_details.html +++ b/pages/meta/struct.build_details.html @@ -1,19 +1,19 @@ -build_details in pages::meta - Rust
-

Struct pages::page::Page

source · []
pub struct Page {
+    

Struct pages::page::Page

source · []
pub struct Page {
     pub secret: String,
     pub repo: String,
     pub path: String,
     pub branch: String,
-}

Fields

secret: Stringrepo: Stringpath: Stringbranch: String

Implementations

Trait Implementations

Returns a copy of the value. Read more

+ pub domain: String, +}

Fields

secret: Stringrepo: Stringpath: Stringbranch: Stringdomain: String

Implementations

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Deserialize this value from the given Serde deserializer. Read more

-

This method tests for self and other values to be equal, and is used +

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

This method tests for self and other values to be equal, and is used by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

This method tests for !=.

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

+

Compare self to key and return true if they are equal.

Returns the argument unchanged.

-

Instruments this type with the provided Span, returning an -Instrumented wrapper. Read more

-

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

@@ -36,9 +38,9 @@ by ==.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

-

Attaches the provided Subscriber to this type, returning a -WithDispatch wrapper. Read more

-

Attaches the current default Subscriber to this type, returning a -WithDispatch wrapper. Read more

-
+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
\ No newline at end of file diff --git a/pages/preview/index.html b/pages/preview/index.html new file mode 100644 index 0000000..234e664 --- /dev/null +++ b/pages/preview/index.html @@ -0,0 +1,10 @@ +pages::preview - Rust +
+ \ No newline at end of file diff --git a/pages/preview/sidebar-items.js b/pages/preview/sidebar-items.js new file mode 100644 index 0000000..6f14dfe --- /dev/null +++ b/pages/preview/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"struct":[["Preview",""]]}; \ No newline at end of file diff --git a/pages/preview/struct.Preview.html b/pages/preview/struct.Preview.html new file mode 100644 index 0000000..6291fba --- /dev/null +++ b/pages/preview/struct.Preview.html @@ -0,0 +1,33 @@ +Preview in pages::preview - Rust +
pub struct Preview<'a> {
+    pub base: &'a str,
+    pub delimiter: &'static str,
+    pub prefix: &'static str,
+}

Fields

base: &'a strdelimiter: &'static strprefix: &'static str

Implementations

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/routes/constant.ROUTES.html b/pages/routes/constant.ROUTES.html deleted file mode 100644 index 5a0a572..0000000 --- a/pages/routes/constant.ROUTES.html +++ /dev/null @@ -1,9 +0,0 @@ -ROUTES in pages::routes - Rust -
-

Constant pages::routes::ROUTES

source · []
pub const ROUTES: Routes;
- \ No newline at end of file diff --git a/pages/routes/fn.services.html b/pages/routes/fn.services.html deleted file mode 100644 index 53a2249..0000000 --- a/pages/routes/fn.services.html +++ /dev/null @@ -1,9 +0,0 @@ -services in pages::routes - Rust -
-

Function pages::routes::services

source · []
pub fn services(cfg: &mut ServiceConfig)
- \ No newline at end of file diff --git a/pages/routes/index.html b/pages/routes/index.html index 935461a..d97dd53 100644 --- a/pages/routes/index.html +++ b/pages/routes/index.html @@ -2,11 +2,9 @@

Re-exports

+
pub use crate::api::v1::routes::ROUTES;
pub use crate::api::v1::services;
\ No newline at end of file diff --git a/pages/routes/sidebar-items.js b/pages/routes/sidebar-items.js index 2bed1bf..5244ce0 100644 --- a/pages/routes/sidebar-items.js +++ b/pages/routes/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"constant":[["ROUTES",""]],"fn":[["services",""]],"struct":[["Routes",""]]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {}; \ No newline at end of file diff --git a/pages/serve/fn.find_page.html b/pages/serve/fn.find_page.html new file mode 100644 index 0000000..ec6f946 --- /dev/null +++ b/pages/serve/fn.find_page.html @@ -0,0 +1,9 @@ +find_page in pages::serve - Rust +
+

Function pages::serve::find_page

source · []
pub fn find_page<'a>(domain: &str, ctx: &'a AppCtx) -> Option<&'a Page>
+ \ No newline at end of file diff --git a/pages/serve/fn.services.html b/pages/serve/fn.services.html new file mode 100644 index 0000000..59c93a6 --- /dev/null +++ b/pages/serve/fn.services.html @@ -0,0 +1,9 @@ +services in pages::serve - Rust +
+

Function pages::serve::services

source · []
pub fn services(cfg: &mut ServiceConfig)
+ \ No newline at end of file diff --git a/pages/serve/index.html b/pages/serve/index.html new file mode 100644 index 0000000..1623e78 --- /dev/null +++ b/pages/serve/index.html @@ -0,0 +1,12 @@ +pages::serve - Rust +
+ \ No newline at end of file diff --git a/pages/serve/routes/index.html b/pages/serve/routes/index.html new file mode 100644 index 0000000..b1eb2de --- /dev/null +++ b/pages/serve/routes/index.html @@ -0,0 +1,10 @@ +pages::serve::routes - Rust +
+ \ No newline at end of file diff --git a/pages/serve/routes/sidebar-items.js b/pages/serve/routes/sidebar-items.js new file mode 100644 index 0000000..2c69982 --- /dev/null +++ b/pages/serve/routes/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"struct":[["Serve",""]]}; \ No newline at end of file diff --git a/pages/serve/routes/struct.Serve.html b/pages/serve/routes/struct.Serve.html new file mode 100644 index 0000000..bf9dc10 --- /dev/null +++ b/pages/serve/routes/struct.Serve.html @@ -0,0 +1,31 @@ +Serve in pages::serve::routes - Rust +
pub struct Serve {
+    pub catch_all: &'static str,
+}

Fields

catch_all: &'static str

Implementations

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/serve/sidebar-items.js b/pages/serve/sidebar-items.js new file mode 100644 index 0000000..1a160b2 --- /dev/null +++ b/pages/serve/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"fn":[["find_page",""],["services",""]],"mod":[["routes",""]],"struct":[["index",""]]}; \ No newline at end of file diff --git a/pages/serve/struct.index.html b/pages/serve/struct.index.html new file mode 100644 index 0000000..1dd53a5 --- /dev/null +++ b/pages/serve/struct.index.html @@ -0,0 +1,29 @@ +index in pages::serve - Rust +
+

Struct pages::serve::index

source · []
pub struct index;

Trait Implementations

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/settings/enum.DBType.html b/pages/settings/enum.DBType.html new file mode 100644 index 0000000..d5af855 --- /dev/null +++ b/pages/settings/enum.DBType.html @@ -0,0 +1,45 @@ +DBType in pages::settings - Rust +
pub enum DBType {
+    Postgres,
+}

Variants

Postgres

Implementations

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

Formats the value using the given formatter. Read more

+

This method tests for self and other values to be equal, and is used +by ==. Read more

+

This method tests for !=.

+

Serialize this value into the given Serde serializer. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Compare self to key and return true if they are equal.

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+

Uses borrowed data to replace owned data, usually by cloning. Read more

+

Converts the given value to a String. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/settings/index.html b/pages/settings/index.html index d41292a..708e1d7 100644 --- a/pages/settings/index.html +++ b/pages/settings/index.html @@ -2,9 +2,10 @@

\ No newline at end of file diff --git a/pages/settings/sidebar-items.js b/pages/settings/sidebar-items.js index 5d9152e..5255d2a 100644 --- a/pages/settings/sidebar-items.js +++ b/pages/settings/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"struct":[["Server",""],["Settings",""]]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"enum":[["DBType",""]],"struct":[["Database",""],["Server",""],["Settings",""]]}; \ No newline at end of file diff --git a/pages/settings/struct.Database.html b/pages/settings/struct.Database.html new file mode 100644 index 0000000..78b8dc4 --- /dev/null +++ b/pages/settings/struct.Database.html @@ -0,0 +1,40 @@ +Database in pages::settings - Rust +
pub struct Database {
+    pub url: String,
+    pub pool: u32,
+    pub database_type: DBType,
+}

Fields

url: Stringpool: u32database_type: DBType

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The resulting type after obtaining ownership.

+

Creates owned data from borrowed data, usually by cloning. Read more

+

Uses borrowed data to replace owned data, usually by cloning. Read more

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/settings/struct.Server.html b/pages/settings/struct.Server.html index 6c2b749..4eecde1 100644 --- a/pages/settings/struct.Server.html +++ b/pages/settings/struct.Server.html @@ -2,25 +2,27 @@

pub struct Server {
+    

Struct pages::settings::Server

source · []
pub struct Server {
     pub port: u32,
     pub ip: String,
     pub workers: Option<usize>,
-}

Fields

port: u32ip: Stringworkers: Option<usize>

Implementations

Trait Implementations

Returns a copy of the value. Read more

+ pub cookie_secret: String, + pub domain: String, +}

Fields

port: u32ip: Stringworkers: Option<usize>cookie_secret: Stringdomain: String

Implementations

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Deserialize this value from the given Serde deserializer. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

-

Instruments this type with the provided Span, returning an -Instrumented wrapper. Read more

-

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

@@ -32,9 +34,9 @@

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

-

Attaches the provided Subscriber to this type, returning a -WithDispatch wrapper. Read more

-

Attaches the current default Subscriber to this type, returning a -WithDispatch wrapper. Read more

-
+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
\ No newline at end of file diff --git a/pages/settings/struct.Settings.html b/pages/settings/struct.Settings.html index 91943fa..f5b4280 100644 --- a/pages/settings/struct.Settings.html +++ b/pages/settings/struct.Settings.html @@ -2,25 +2,28 @@

pub struct Settings {
+    

Struct pages::settings::Settings

source · []
pub struct Settings {
+    pub allow_registration: bool,
+    pub debug: bool,
     pub server: Server,
     pub source_code: String,
     pub pages: Vec<Arc<Page>>,
-}

Fields

server: Serversource_code: Stringpages: Vec<Arc<Page>>

Implementations

Trait Implementations

Returns a copy of the value. Read more

+ pub database: Database, +}

Fields

allow_registration: booldebug: boolserver: Serversource_code: Stringpages: Vec<Arc<Page>>database: Database

Implementations

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Deserialize this value from the given Serde deserializer. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

-

Instruments this type with the provided Span, returning an -Instrumented wrapper. Read more

-

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

@@ -32,9 +35,9 @@

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

-

Attaches the provided Subscriber to this type, returning a -WithDispatch wrapper. Read more

-

Attaches the current default Subscriber to this type, returning a -WithDispatch wrapper. Read more

-
+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
\ No newline at end of file diff --git a/pages/sidebar-items.js b/pages/sidebar-items.js index beb11d3..3e313c2 100644 --- a/pages/sidebar-items.js +++ b/pages/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"constant":[["CACHE_AGE",""],["GIT_COMMIT_HASH",""],["PKG_DESCRIPTION",""],["PKG_HOMEPAGE",""],["PKG_NAME",""],["V1_API_ROUTES",""],["VERSION",""]],"fn":[["get_json_err",""],["main",""],["services",""]],"mod":[["ctx",""],["deploy",""],["errors","represents all the ways a trait can fail using this crate"],["meta",""],["page",""],["routes",""],["settings",""]],"struct":[["Settings",""]],"type":[["AppCtx",""]]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"constant":[["CACHE_AGE",""],["GIT_COMMIT_HASH",""],["PKG_DESCRIPTION",""],["PKG_HOMEPAGE",""],["PKG_NAME",""],["V1_API_ROUTES","constant Routes instance"],["VERSION",""]],"enum":[["Commands",""]],"fn":[["get_identity_service",""],["get_json_err",""],["main",""],["serve",""],["services",""]],"mod":[["api",""],["ctx",""],["db",""],["deploy",""],["errors","Represents all the ways a trait can fail using this crate"],["git",""],["meta",""],["page",""],["preview",""],["routes",""],["serve",""],["settings",""],["utils",""]],"struct":[["Cli",""],["Settings",""]],"type":[["AppCtx",""]]}; \ No newline at end of file diff --git a/pages/struct.Cli.html b/pages/struct.Cli.html new file mode 100644 index 0000000..4236ed6 --- /dev/null +++ b/pages/struct.Cli.html @@ -0,0 +1,47 @@ +Cli in pages - Rust +
+

Struct pages::Cli

source · []
pub(crate) struct Cli {
+    pub(crate) command: Commands,
+}

Fields

command: Commands

Trait Implementations

Append to [Command] so it can instantiate Self. Read more

+

Append to [Command] so it can update self. Read more

+

Deprecated, replaced with CommandFactory::command

+

Deprecated, replaced with CommandFactory::command_for_update

+

Build a [Command] that can instantiate Self. Read more

+

Build a [Command] that can update self. Read more

+

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more

+

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more

+

Assign values from ArgMatches to self.

+

Assign values from ArgMatches to self.

+

Parse from std::env::args_os(), exit on error

+

Parse from std::env::args_os(), return Err on error.

+

Parse from iterator, exit on error

+

Parse from iterator, return Err on error.

+

Update from iterator, exit on error

+

Update from iterator, return Err on error.

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns the argument unchanged.

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

+

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+

Should always be Self

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

The type returned in the event of a conversion error.

+

Performs the conversion.

+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
+ \ No newline at end of file diff --git a/pages/struct.Settings.html b/pages/struct.Settings.html index be2f878..b48fef8 100644 --- a/pages/struct.Settings.html +++ b/pages/struct.Settings.html @@ -2,25 +2,28 @@

-

Struct pages::Settings

source · []
pub struct Settings {
+    

Struct pages::Settings

source · []
pub struct Settings {
+    pub allow_registration: bool,
+    pub debug: bool,
     pub server: Server,
     pub source_code: String,
     pub pages: Vec<Arc<Page>>,
-}

Fields

server: Serversource_code: Stringpages: Vec<Arc<Page>>

Implementations

Trait Implementations

Returns a copy of the value. Read more

+ pub database: Database, +}

Fields

allow_registration: booldebug: boolserver: Serversource_code: Stringpages: Vec<Arc<Page>>database: Database

Implementations

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Deserialize this value from the given Serde deserializer. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

-

Instruments this type with the provided Span, returning an -Instrumented wrapper. Read more

-

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more

+

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more

+

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

@@ -32,9 +35,9 @@

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

-

Attaches the provided Subscriber to this type, returning a -WithDispatch wrapper. Read more

-

Attaches the current default Subscriber to this type, returning a -WithDispatch wrapper. Read more

-
+

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more

+

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more

+
\ No newline at end of file diff --git a/pages/type.AppCtx.html b/pages/type.AppCtx.html index fe9f519..8fdae7c 100644 --- a/pages/type.AppCtx.html +++ b/pages/type.AppCtx.html @@ -5,5 +5,5 @@

AppCtx

-

Type Definition pages::AppCtx

source · []
pub type AppCtx = WebData<Arc<Ctx>>;
+

Type Definition pages::AppCtx

source · []
pub type AppCtx = WebData<Arc<Ctx>>;
\ No newline at end of file diff --git a/pages/utils/fn.get_random.html b/pages/utils/fn.get_random.html new file mode 100644 index 0000000..28481c0 --- /dev/null +++ b/pages/utils/fn.get_random.html @@ -0,0 +1,10 @@ +get_random in pages::utils - Rust +
pub(crate) fn get_random(len: usize) -> String
Expand description

Get random string of specific length

+
+ \ No newline at end of file diff --git a/pages/utils/index.html b/pages/utils/index.html new file mode 100644 index 0000000..e18e066 --- /dev/null +++ b/pages/utils/index.html @@ -0,0 +1,11 @@ +pages::utils - Rust +
+

Module pages::utils

source · []

Functions

+
get_random 🔒

Get random string of specific length

+
+ \ No newline at end of file diff --git a/pages/utils/sidebar-items.js b/pages/utils/sidebar-items.js new file mode 100644 index 0000000..cf26f70 --- /dev/null +++ b/pages/utils/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"fn":[["get_random","Get random string of specific length"]]}; \ No newline at end of file diff --git a/search-index.js b/search-index.js index 95adc6d..2a5b43e 100644 --- a/search-index.js +++ b/search-index.js @@ -1,5 +1,5 @@ var searchIndex = JSON.parse('{\ -"pages":{"doc":"","t":[6,17,17,17,17,17,3,17,17,0,0,0,5,5,0,0,12,0,12,5,0,12,3,11,11,11,11,11,11,11,12,11,11,11,11,11,3,3,3,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,12,3,11,11,11,11,11,5,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,12,0,12,12,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,11,11,11,11,11,3,11,11,11,12,11,11,11,11,11,12,11,12,12,13,13,3,13,13,3,3,13,13,13,13,13,13,4,6,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,3,11,11,11,11,3,11,11,11,11,11,11,12,11,11,11,0,11,5,12,11,11,11,11,11,11,11,12,11,11,3,11,11,12,11,12,11,11,11,11,11,11,3,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,11,11,11,11,11,11,17,3,11,11,12,11,11,12,11,5,11,11,11,11,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,12,12,12,12,11,11,11,11,11,11,11,11,11,11,12],"n":["AppCtx","CACHE_AGE","GIT_COMMIT_HASH","PKG_DESCRIPTION","PKG_HOMEPAGE","PKG_NAME","Settings","V1_API_ROUTES","VERSION","ctx","deploy","errors","get_json_err","main","meta","page","pages","routes","server","services","settings","source_code","Ctx","borrow","borrow_mut","clone","clone_into","from","into","new","settings","to_owned","try_from","try_into","type_id","vzip","DeployEvent","DeployInfo","DeploySecret","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","branch","clone","clone","clone","clone_into","clone_into","clone_into","commit","deploy_info","deserialize","deserialize","deserialize","eq","eq","find_page","fmt","fmt","fmt","from","from","from","from","from","from_page","head","into","into","into","into","into","ne","ne","register","register","remote","routes","secret","secret","serialize","serialize","serialize","services","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","update","vzip","vzip","vzip","vzip","vzip","Deploy","borrow","borrow_mut","from","info","into","new","try_from","try_into","type_id","update","vzip","0","0","BadRequest","BranchNotFound","ConfigError","ConfigError","DuplicateRepositoryURL","ErrorToResponse","FSError","FSError","GitError","InternalServerError","NotAUrl","PathTaken","SecretTaken","ServiceError","ServiceResult","URLTooLong","UnauthorizedOperation","WebsiteNotFound","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","deserialize","eq","eq","eq","error","error_response","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","into","into","into","into","ne","serialize","source","source","source","status_code","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","0","0","0","0","0","0","0","0","0","1","1","1","BuildDetails","borrow","borrow","borrow_mut","borrow_mut","build_details","clone","clone_into","deserialize","fmt","from","from","git_commit_hash","into","into","register","routes","serialize","services","source_code","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","version","vzip","vzip","Meta","borrow","borrow_mut","build_details","from","health","into","new","try_from","try_into","type_id","vzip","Page","_fetch_remote_branch","borrow","borrow_mut","branch","clone","clone_into","create_repo","deploy_branch","deserialize","eq","fast_forward","fetch","fmt","from","get_deploy_branch","get_deploy_commit","get_deploy_remote","into","merge","ne","normal_merge","open_repo","path","repo","secret","to_owned","try_from","try_into","type_id","update","vzip","ROUTES","Routes","borrow","borrow_mut","deploy","from","into","meta","new","services","try_from","try_into","type_id","vzip","Server","Settings","borrow","borrow","borrow_mut","borrow_mut","check_url","clone","clone","clone_into","clone_into","deserialize","deserialize","fmt","fmt","from","from","get_ip","init","into","into","ip","new","pages","port","server","source_code","to_owned","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","workers"],"q":["pages","","","","","","","","","","","","","","","","","","","","","","pages::ctx","","","","","","","","","","","","","","pages::deploy","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::deploy::routes","","","","","","","","","","","","pages::errors","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::errors::ServiceError","","","","","","","","","","","","pages::meta","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::meta::routes","","","","","","","","","","","","pages::page","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::routes","","","","","","","","","","","","","","pages::settings","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","","","","","","","","","","","represents all the ways a trait can fail using this crate","","","","","","","","","","","","","","","","Returns the argument unchanged.","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","","","","","","","","when the a Repository URL configured for a page is already …","","","","","All non-specific errors are grouped under this category","The value you entered for url is not url“","when the a path configured for a page is already taken","when the a Secret configured for a page is already taken","Error data structure grouping various error subtypes","Generic result data structure","URL too long, maximum length can’t be greater then 2048 …","","website not found","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","","","","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","emmits build details of the bninary","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","","","Calls U::from(self).","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","",""],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,0,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,3,4,5,6,7,3,4,5,6,7,3,3,5,6,3,5,6,6,0,3,5,6,5,6,0,3,5,6,3,4,5,6,7,6,6,3,4,5,6,7,5,6,4,7,6,0,3,5,3,5,6,0,3,5,6,3,4,5,6,7,3,4,5,6,7,3,4,5,6,7,0,3,4,5,6,7,0,8,8,8,8,8,8,8,8,8,8,8,9,10,11,11,0,11,11,0,0,11,11,11,11,11,11,0,0,11,11,11,9,10,11,12,9,10,11,12,12,9,10,11,12,11,9,9,10,10,11,11,12,9,10,11,11,11,11,11,12,9,10,11,12,11,12,9,10,11,11,9,10,11,9,10,11,12,9,10,11,12,9,10,11,12,9,10,11,12,13,14,15,16,17,18,19,20,21,13,14,15,0,22,23,22,23,0,22,22,22,22,22,23,22,22,23,23,0,22,0,22,22,22,23,22,23,22,23,22,22,23,0,24,24,24,24,24,24,24,24,24,24,24,0,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,0,0,26,26,26,26,26,26,26,0,26,26,26,26,0,0,27,1,27,1,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,1,27,1,1,27,1,27,1,27,1,27,1,27,1,27],"f":[null,null,null,null,null,null,null,null,null,null,null,null,[[],["jsonconfig",3]],[[],["result",6]],null,null,null,null,null,[[["serviceconfig",3]]],null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["ctx",3]],["ctx",3]],[[["",0],["",0]]],[[]],[[]],[[["settings",3]],["arc",3,[["ctx",3]]]],null,[[["",0]]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[]],null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],null,[[["deployevent",3]],["deployevent",3]],[[["deploysecret",3]],["deploysecret",3]],[[["deployinfo",3]],["deployinfo",3]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],null,null,[[],["result",4,[["deployevent",3]]]],[[],["result",4,[["deploysecret",3]]]],[[],["result",4,[["deployinfo",3]]]],[[["deploysecret",3],["deploysecret",3]],["bool",0]],[[["deployinfo",3],["deployinfo",3]],["bool",0]],[[["str",0],["appctx",6]],["option",4,[["page",3]]]],[[["deployevent",3],["formatter",3]],["result",6]],[[["deploysecret",3],["formatter",3]],["result",6]],[[["deployinfo",3],["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[["page",3]],["result",4,[["deployinfo",3],["serviceerror",4]]]],null,[[]],[[]],[[]],[[]],[[]],[[["deploysecret",3],["deploysecret",3]],["bool",0]],[[["deployinfo",3],["deployinfo",3]],["bool",0]],[[["update",3],["appservice",3]]],[[["deploy_info",3],["appservice",3]]],null,null,null,null,[[["deployevent",3]],["result",4]],[[["deploysecret",3]],["result",4]],[[["deployinfo",3]],["result",4]],[[["serviceconfig",3]]],[[["",0]]],[[["",0]]],[[["",0]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],null,[[]],[[]],[[]],[[]],[[]],null,[[["",0]],["",0]],[[["",0]],["",0]],[[]],null,[[]],[[],["deploy",3]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],null,[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[],["result",4,[["errortoresponse",3]]]],[[["fserror",3],["fserror",3]],["bool",0]],[[["configerror",3],["configerror",3]],["bool",0]],[[["serviceerror",4],["serviceerror",4]],["bool",0]],null,[[["serviceerror",4]],["httpresponse",3]],[[["fserror",3],["formatter",3]],["result",6]],[[["fserror",3],["formatter",3]],["result",6]],[[["configerror",3],["formatter",3]],["result",6]],[[["configerror",3],["formatter",3]],["result",6]],[[["serviceerror",4],["formatter",3]],["result",6]],[[["serviceerror",4],["formatter",3]],["result",6]],[[["errortoresponse",3],["formatter",3]],["result",6]],[[]],[[]],[[["parseerror",4]],["serviceerror",4]],[[]],[[["fserrorinner",3]],["serviceerror",4]],[[["giterror",3]],["serviceerror",4]],[[["configerrorinner",4]],["serviceerror",4]],[[]],[[]],[[]],[[]],[[]],[[["serviceerror",4],["serviceerror",4]],["bool",0]],[[["errortoresponse",3]],["result",4]],[[["fserror",3]],["option",4,[["error",8]]]],[[["configerror",3]],["option",4,[["error",8]]]],[[["serviceerror",4]],["option",4,[["error",8]]]],[[["serviceerror",4]],["statuscode",3]],[[["",0]],["string",3]],[[["",0]],["string",3]],[[["",0]],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],null,[[["builddetails",3]],["builddetails",3]],[[["",0],["",0]]],[[],["result",4,[["builddetails",3]]]],[[["builddetails",3],["formatter",3]],["result",6]],[[]],[[]],null,[[]],[[]],[[["build_details",3],["appservice",3]]],null,[[["builddetails",3]],["result",4]],[[["serviceconfig",3]]],null,[[["",0]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],null,[[]],[[]],null,[[["",0]],["",0]],[[["",0]],["",0]],null,[[]],null,[[]],[[],["meta",3]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[]],null,[[["page",3],["repository",3],["str",0]],["result",4,[["serviceerror",4]]]],[[["",0]],["",0]],[[["",0]],["",0]],null,[[["page",3]],["page",3]],[[["",0],["",0]]],[[["page",3]],["result",4,[["repository",3],["serviceerror",4]]]],[[["page",3],["repository",3]],["result",4,[["serviceerror",4]]]],[[],["result",4,[["page",3]]]],[[["page",3],["page",3]],["bool",0]],[[["repository",3],["reference",3],["annotatedcommit",3]],["result",4,[["serviceerror",4]]]],[[["page",3],["repository",3]],["result",4,[["annotatedcommit",3],["serviceerror",4]]]],[[["page",3],["formatter",3]],["result",6]],[[]],[[["page",3],["repository",3]],["result",4,[["string",3],["serviceerror",4]]]],[[["repository",3]],["result",4,[["oid",3],["serviceerror",4]]]],[[["repository",3]],["result",4,[["remote",3],["serviceerror",4]]]],[[]],[[["page",3],["repository",3],["annotatedcommit",3]],["result",4,[["serviceerror",4]]]],[[["page",3],["page",3]],["bool",0]],[[["repository",3],["annotatedcommit",3],["annotatedcommit",3]],["result",4,[["error",3]]]],[[["page",3]],["result",4,[["repository",3],["serviceerror",4]]]],null,null,null,[[["",0]]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["page",3]],["result",4,[["serviceerror",4]]]],[[]],null,null,[[["",0]],["",0]],[[["",0]],["",0]],null,[[]],[[]],null,[[],["routes",3]],[[["serviceconfig",3]]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[]],null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["settings",3]]],[[["server",3]],["server",3]],[[["settings",3]],["settings",3]],[[["",0],["",0]]],[[["",0],["",0]]],[[],["result",4,[["server",3]]]],[[],["result",4,[["settings",3]]]],[[["server",3],["formatter",3]],["result",6]],[[["settings",3],["formatter",3]],["result",6]],[[]],[[]],[[["server",3]],["string",3]],[[["settings",3]]],[[]],[[]],null,[[],["result",4,[["settings",3],["serviceerror",4]]]],null,null,null,null,[[["",0]]],[[["",0]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[]],[[]],null],"p":[[3,"Settings"],[3,"Ctx"],[3,"DeployEvent"],[3,"update"],[3,"DeploySecret"],[3,"DeployInfo"],[3,"deploy_info"],[3,"Deploy"],[3,"FSError"],[3,"ConfigError"],[4,"ServiceError"],[3,"ErrorToResponse"],[13,"PathTaken"],[13,"SecretTaken"],[13,"DuplicateRepositoryURL"],[13,"FSError"],[13,"UnauthorizedOperation"],[13,"BadRequest"],[13,"ConfigError"],[13,"GitError"],[13,"BranchNotFound"],[3,"BuildDetails"],[3,"build_details"],[3,"Meta"],[3,"Page"],[3,"Routes"],[3,"Server"]]}\ +"pages":{"doc":"","t":[6,17,3,4,17,13,17,17,17,13,3,17,17,12,0,11,11,11,11,11,11,11,11,12,0,12,0,12,0,0,11,11,11,11,11,11,5,5,0,11,11,11,11,11,5,0,0,12,0,0,0,5,12,5,0,12,11,11,11,11,11,11,11,11,11,11,0,11,11,0,2,3,0,0,11,11,11,11,5,11,12,0,5,11,11,11,11,3,3,3,2,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,11,11,11,12,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,12,3,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,3,11,11,11,5,3,11,11,11,11,11,11,11,11,11,11,11,11,3,3,17,3,12,12,11,11,11,11,11,11,12,12,12,11,11,11,11,11,11,11,12,12,12,11,11,11,12,12,11,11,11,11,11,11,11,11,11,12,12,12,12,11,11,11,6,3,0,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,0,0,0,3,3,2,11,11,11,11,11,11,11,11,12,11,11,12,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,3,3,3,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,12,11,11,11,11,11,11,11,11,11,12,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,12,3,4,3,13,13,3,13,4,3,3,3,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,12,12,11,11,11,11,11,11,11,11,5,5,11,11,11,11,11,12,5,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,11,11,11,11,11,11,11,11,11,12,12,12,12,3,3,3,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,12,3,11,11,11,11,11,11,11,5,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,12,0,12,12,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,11,11,11,11,11,3,11,11,11,12,11,11,11,11,11,12,11,12,12,13,13,13,13,13,3,13,13,13,3,3,13,13,13,13,13,13,13,13,13,13,13,4,6,13,13,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,13,4,13,13,13,13,3,4,13,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,5,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,3,3,11,11,11,11,11,11,11,11,3,11,11,11,11,12,11,11,11,11,11,11,11,11,12,3,11,11,11,11,11,11,0,11,11,5,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,3,11,11,12,11,12,11,11,11,11,11,11,3,11,11,11,12,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,11,11,11,11,11,11,3,12,11,11,12,11,11,11,11,11,12,11,11,11,11,2,2,11,11,5,11,3,11,11,0,5,11,11,11,11,3,11,11,12,11,11,11,11,11,11,11,4,3,13,3,3,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,12,12,12,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,12,5],"n":["AppCtx","CACHE_AGE","Cli","Commands","GIT_COMMIT_HASH","Migrate","PKG_DESCRIPTION","PKG_HOMEPAGE","PKG_NAME","Serve","Settings","V1_API_ROUTES","VERSION","allow_registration","api","augment_args","augment_args_for_update","augment_subcommands","augment_subcommands_for_update","borrow","borrow","borrow_mut","borrow_mut","command","ctx","database","db","debug","deploy","errors","from","from","from_arg_matches","from_arg_matches","from_arg_matches_mut","from_arg_matches_mut","get_identity_service","get_json_err","git","has_subcommand","into","into","into_app","into_app_for_update","main","meta","page","pages","preview","routes","serve","serve","server","services","settings","source_code","try_from","try_from","try_into","try_into","type_id","type_id","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches_mut","update_from_arg_matches_mut","utils","vzip","vzip","v1","ROUTES","RedirectQuery","account","auth","borrow","borrow_mut","deserialize","from","get_auth_middleware","into","redirect_to","routes","services","try_from","try_into","type_id","vzip","AccountCheckPayload","Email","Username","auth","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","delete_account","deserialize","deserialize","deserialize","email","email_exists","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","into","into","into","into","into","into","into","into","into","register","register","register","register","register","register","serialize","serialize","serialize","services","set_email","set_username","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","update_user_password","username","username_exists","val","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","from","from","from","into","into","into","login","register","register","register","register","services","signout","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","Account","Auth","ROUTES","Routes","account","auth","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","delete","deploy","email_exists","from","from","from","get_login_route","into","into","into","login","logout","meta","new","new","new","register","serve","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","update_email","update_password","update_username","username_exists","vzip","vzip","vzip","ArcCtx","Ctx","api","authenticate","borrow","borrow_mut","change_password","clone","clone_into","creds","db","delete_user","email_exists","from","get_creds","into","login","new","register","set_email","settings","to_owned","try_from","try_into","type_id","update_username","username_exists","vzip","v1","account","auth","AccountCheckResp","ChangePasswordReqest","auth","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","confirm_new_password","deserialize","deserialize","exists","fmt","fmt","from","from","into","into","new_password","password","serialize","serialize","to_owned","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","Login","Password","Register","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","confirm_password","deserialize","deserialize","deserialize","email","fmt","fmt","fmt","from","from","from","into","into","into","login","password","password","password","serialize","serialize","serialize","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","username","vzip","vzip","vzip","0","Conn","ConnectionOptions","Database","Email","Existing","Fresh","Fresh","Login","NameHash","Register","UpdateEmail","Username","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","connect","delete_user","deserialize","deserialize","deserialize","deserialize","disable_logging","email","email_exists","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","get_db","get_email","get_password","hash","hash","into","into","into","into","into","into","into","into","map_register_err","map_row_not_found_err","migrate","ne","ne","ne","ne","new_email","now_unix_time_stamp","ping","pool","pool_options","register","serialize","serialize","serialize","serialize","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","update_email","update_password","update_username","url","username","username","username","username_exists","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","0","0","0","0","DeployEvent","DeployInfo","DeploySecret","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","branch","clone","clone","clone","clone_into","clone_into","clone_into","commit","deploy_info","deserialize","deserialize","deserialize","eq","eq","equivalent","equivalent","find_page","fmt","fmt","fmt","from","from","from","from","from","from_page","head","into","into","into","into","into","ne","ne","register","register","remote","routes","secret","secret","serialize","serialize","serialize","services","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","update","vzip","vzip","vzip","vzip","vzip","Deploy","borrow","borrow_mut","from","info","into","new","try_from","try_into","type_id","update","vzip","0","0","AccountNotFound","BadRequest","BlacklistError","BranchNotFound","ClosedForRegistration","ConfigError","ConfigError","DuplicateRepositoryURL","EmailTaken","ErrorToResponse","FSError","FSError","GitError","InternalServerError","NotAUrl","NotAnEmail","PasswordTooLong","PasswordTooShort","PasswordsDontMatch","PathTaken","ProfanityError","SecretTaken","ServiceError","ServiceResult","URLTooLong","UnauthorizedOperation","UsernameCaseMappedError","UsernameTaken","WebsiteNotFound","WrongPassword","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","deserialize","eq","eq","eq","error","error_response","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","into","into","into","into","ne","serialize","source","source","source","status_code","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","0","0","0","0","0","0","0","0","0","1","1","1","Binary","ContentType","Deprecated","Dir","Empty","Executable","FileInfo","GitFileMode","Regular","Submodule","Symlink","Text","Unsupported","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","bytes","clone","clone","clone","clone_into","clone_into","clone_into","content","deserialize","eq","eq","eq","equivalent","equivalent","equivalent","filename","fmt","fmt","fmt","from","from","from","from","from","from","from_blob","from_primitive","into","into","into","mime","ne","ne","read_file","read_file_inner","read_preview_file","serialize","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from_primitive","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","0","0","BuildDetails","Health","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build_details","clone","clone","clone_into","clone_into","db","deserialize","deserialize","fmt","fmt","from","from","from","from","git_commit_hash","health","into","into","into","into","register","register","routes","serialize","serialize","services","source_code","to_owned","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","version","vzip","vzip","vzip","vzip","Meta","borrow","borrow_mut","build_details","from","health","into","new","try_from","try_into","type_id","vzip","Page","_fetch_remote_branch","borrow","borrow_mut","branch","clone","clone_into","create_repo","deploy_branch","deserialize","domain","eq","equivalent","fast_forward","fetch","fmt","from","get_deploy_branch","get_deploy_commit","get_deploy_remote","into","merge","ne","normal_merge","open_repo","path","repo","secret","to_owned","try_from","try_into","type_id","update","vzip","Preview","base","borrow","borrow_mut","delimiter","extract","from","get_name","into","new","prefix","try_from","try_into","type_id","vzip","ROUTES","services","borrow","borrow_mut","find_page","from","index","into","register","routes","services","try_from","try_into","type_id","vzip","Serve","borrow","borrow_mut","catch_all","from","into","new","try_from","try_into","type_id","vzip","DBType","Database","Postgres","Server","Settings","allow_registration","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","check_url","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cookie_secret","database","database_type","debug","deserialize","deserialize","deserialize","deserialize","domain","eq","equivalent","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from_url","get_ip","init","into","into","into","into","ip","new","pages","pool","port","serialize","server","source_code","to_owned","to_owned","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","url","vzip","vzip","vzip","vzip","workers","get_random"],"q":["pages","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::api","pages::api::v1","","","","","","","","","","","","","","","","","pages::api::v1::account","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::api::v1::auth","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::api::v1::routes","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::ctx","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::ctx::api","pages::ctx::api::v1","","pages::ctx::api::v1::account","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::ctx::api::v1::auth","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::db","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::db::ConnectionOptions","","pages::db::Login","","pages::deploy","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::deploy::routes","","","","","","","","","","","","pages::errors","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::errors::ServiceError","","","","","","","","","","","","pages::git","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::git::ContentType","","pages::meta","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::meta::routes","","","","","","","","","","","","pages::page","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::preview","","","","","","","","","","","","","","","pages::routes","","pages::serve","","","","","","","","","","","","","pages::serve::routes","","","","","","","","","","","pages::settings","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","pages::utils"],"d":["","","","","","run database migrations","","","","run server","","constant Routes instance","","","","","","","","","","","","","","","","","","Represents all the ways a trait can fail using this crate","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","V1 API Routes","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","update email","update username","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","Account management routes","Authentication routes","constant Routes instance","Top-level routes data structure for V1 AP1","Account routes","Authentication routes","","","","","","","delete account route","","route to check if an email exists","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","login route","logout route","Meta routes","create new instance of Authentication route","create a new instance of Account routes","create new instance of Routes","registration route","","","","","","","","","","","route to update a user’s email","route to update password","route to change username","route to check if a username is already registered","","","","","","","","","","change password","","","credential-procession policy","","delete user","check if email exists on database","Returns the argument unchanged.","Get credential-processing policy","Calls U::from(self).","Log in method. Returns Ok(()) when user is authenticated …","","register new user","update email","","","","","","update username of a registered user","check if email exists in database","","","Account management utility datastructures and methods","Authentication helper methods and data structures","Data structure used in *_exists methods","Data structure used to change password of a registered user","","","","","","","","","","new password confirmation","","","set to true if the attribute in question exists","","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","new password","current password","","","","","","","","","","","","","Login payload","struct used to represent password","Register payload","","","","","","","","","","","","","password confirmation: password and confirm_password must …","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","user identifier: either username or email an email is …","password","password","password","","","","","","","","","","","","","","","","username","","","","","Use an existing database pool","Connect to databse","","email as login","existing connection","","fresh connection","types of credentials used as identifiers during login","type encapsulating username and hashed password of a user","Data required to register a new user","data required to update them email of a user","username as login","","","","","","","","","","","","","","","","","","","","","","","","","","","","delete a user","","","","","","Optionally, email of new use","check if email exists","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","get user email","get a user’s password","hashed password of new use","hashed password","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","map postgres errors to ServiceError types","map custom row not found error to DB error","","","","","","new email address of the user","","","","","register a new user","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","update a user’s email","update user’s password","update username","","username of new user","username of the user","username","check if username exists","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","","","","Account not found","","when the value passed contains blacklisted words see …","","registration failure, server is is closed for registration","","","when the a Repository URL configured for a page is already …","Email is taken","","","","","All non-specific errors are grouped under this category","The value you entered for url is not url“","The value you entered for email is not an email“","password too long","password too short","passwords don’t match","when the a path configured for a page is already taken","when the value passed contains profanity","when the a Secret configured for a page is already taken","Error data structure grouping various error subtypes","Generic result data structure","URL too long, maximum length can’t be greater then 2048 …","","when the value passed contains characters not present in …","Username is taken","website not found","wrong password","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns the argument unchanged.","","","","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Deprecated represent non-executable files with the group …","Dir represent a Directory.","Empty is used as the GitFileMode of tree elements when …","Executable represents executable files.","","A FileMode represents the kind of tree entries used by …","Regular represent non-executable files.","Submodule represents git submodules. This mode has no …","Symlink represents symbolic links to files.","","Unsupported file mode","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","Please note that this method expects path to not contain …","","","","","","","","","","","","","","","","","","","","","","","Health check return datatype","","","","","","","","","emits build details of the binary","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","checks all components of the system","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","","","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","","","","","","","Returns the argument unchanged.","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Get random string of specific length"],"i":[0,0,0,0,0,1,0,0,0,1,0,0,0,2,0,3,3,1,1,3,1,3,1,3,0,2,0,2,0,0,3,1,3,1,3,1,0,0,0,1,3,1,3,3,0,0,0,2,0,0,0,0,2,0,0,2,3,1,3,1,3,1,3,1,3,1,0,3,1,0,0,0,0,0,4,4,4,4,0,4,4,0,0,4,4,4,4,0,0,0,0,5,6,7,8,9,10,11,12,13,5,6,7,8,9,10,11,12,13,5,6,7,5,6,7,0,5,6,7,6,0,5,6,7,5,6,7,8,9,10,11,12,13,5,6,7,8,9,10,11,12,13,8,9,10,11,12,13,5,6,7,0,0,0,5,6,7,5,6,7,8,9,10,11,12,13,5,6,7,8,9,10,11,12,13,5,6,7,8,9,10,11,12,13,0,7,0,5,5,6,7,8,9,10,11,12,13,14,15,16,14,15,16,14,15,16,14,15,16,0,0,14,15,16,0,0,14,15,16,14,15,16,14,15,16,14,15,16,0,0,0,0,17,17,18,19,17,18,19,17,19,17,19,18,19,17,17,18,19,17,18,18,17,18,19,17,18,17,18,19,17,18,19,17,18,19,17,19,19,19,19,18,19,17,0,0,0,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,0,0,0,0,0,0,21,22,21,22,21,22,21,22,22,21,22,21,21,22,21,22,21,22,22,22,21,22,21,22,21,22,21,22,21,22,21,22,0,0,0,23,24,25,23,24,25,23,24,25,23,24,25,23,23,24,25,23,23,24,25,23,24,25,23,24,25,24,23,24,25,23,24,25,23,24,25,23,24,25,23,24,25,23,24,25,23,23,24,25,26,0,0,0,27,28,0,28,0,0,0,0,27,28,26,29,30,31,32,27,33,28,26,29,30,31,32,27,33,30,31,32,27,33,30,31,32,27,33,28,30,31,32,27,33,29,31,30,31,32,27,33,31,32,27,33,31,32,27,33,28,26,29,30,31,32,27,33,0,30,30,31,33,28,26,29,30,31,32,27,33,0,0,30,31,32,27,33,32,0,30,30,29,30,31,32,27,33,30,31,32,27,33,28,26,29,30,31,32,27,33,28,26,29,30,31,32,27,33,28,26,29,30,31,32,27,33,30,30,30,29,31,32,33,30,28,26,29,30,31,32,27,33,34,35,36,37,0,0,0,38,39,40,41,42,38,39,40,41,42,38,38,40,41,38,40,41,41,0,38,40,41,40,41,40,41,0,38,40,41,38,39,40,41,42,41,41,38,39,40,41,42,40,41,39,42,41,0,38,40,38,40,41,0,38,40,41,38,39,40,41,42,38,39,40,41,42,38,39,40,41,42,0,38,39,40,41,42,0,43,43,43,43,43,43,43,43,43,43,43,44,45,46,46,46,46,46,0,46,46,46,0,0,46,46,46,46,46,46,46,46,46,46,46,0,0,46,46,46,46,46,46,44,45,46,47,44,45,46,47,47,44,45,46,47,46,44,44,45,45,46,46,47,44,45,46,46,46,46,46,46,47,44,45,46,47,46,47,44,45,46,46,44,45,46,44,45,46,47,44,45,46,47,44,45,46,47,44,45,46,47,48,49,50,51,52,53,54,55,56,48,49,50,57,0,58,58,58,58,0,0,58,58,58,57,58,58,59,57,58,59,57,57,58,59,57,58,59,57,59,57,58,59,57,58,59,57,59,58,59,57,58,58,58,58,59,57,57,58,58,59,57,59,59,57,0,0,0,57,58,59,57,58,59,57,58,58,59,57,58,59,57,58,59,57,60,61,0,0,62,63,64,65,62,63,64,65,0,62,64,62,64,64,62,64,62,64,62,63,64,65,62,0,62,63,64,65,63,65,0,62,64,0,62,62,64,62,63,64,65,62,63,64,65,62,63,64,65,62,62,63,64,65,0,66,66,66,66,66,66,66,66,66,66,66,0,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,0,68,68,68,68,68,68,68,68,68,68,68,68,68,68,0,0,69,69,0,69,0,69,69,0,0,69,69,69,69,0,70,70,70,70,70,70,70,70,70,70,0,0,71,0,0,2,72,71,73,2,72,71,73,2,2,72,71,73,2,72,71,73,2,72,2,73,2,72,71,73,2,72,71,71,72,71,71,73,2,72,71,73,2,71,72,2,72,71,73,2,72,2,2,73,72,71,2,2,72,71,73,2,71,72,71,73,2,72,71,73,2,72,71,73,2,73,72,71,73,2,72,0],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["command",6]],["command",6]],[[["command",6]],["command",6]],[[["command",6]],["command",6]],[[["command",6]],["command",6]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],null,null,null,null,null,null,null,[[]],[[]],[[["argmatches",3]],["result",4,[["cli",3],["error",3]]]],[[["argmatches",3]],["result",4,[["commands",4],["error",3]]]],[[["argmatches",3]],["result",4,[["cli",3],["error",3]]]],[[["argmatches",3]],["result",4,[["commands",4],["error",3]]]],[[["settings",3]],["identityservice",3,[["cookieidentitypolicy",3]]]],[[],["jsonconfig",3]],null,[[["str",0]],["bool",0]],[[]],[[]],[[],["command",6]],[[],["command",6]],[[],["result",6]],null,null,null,null,null,null,[[["settings",3],["appctx",6]],["future",8]],null,[[["serviceconfig",3]]],null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["cli",3],["argmatches",3]],["result",4,[["error",3]]]],[[["commands",4],["argmatches",3]],["result",4,[["error",3]]]],[[["cli",3],["argmatches",3]],["result",4,[["error",3]]]],[[["commands",4],["argmatches",3]],["result",4,[["error",3]]]],null,[[]],[[]],null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[],["result",4,[["redirectquery",3]]]],[[]],[[],["authentication",3,[["routes",3]]]],[[]],null,null,[[["serviceconfig",3]]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[]],null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["accountcheckpayload",3]],["accountcheckpayload",3]],[[["email",3]],["email",3]],[[["username",3]],["username",3]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],null,[[],["result",4,[["accountcheckpayload",3]]]],[[],["result",4,[["email",3]]]],[[],["result",4,[["username",3]]]],null,null,[[["accountcheckpayload",3],["formatter",3]],["result",6]],[[["email",3],["formatter",3]],["result",6]],[[["username",3],["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["set_username",3],["appservice",3]]],[[["username_exists",3],["appservice",3]]],[[["email_exists",3],["appservice",3]]],[[["set_email",3],["appservice",3]]],[[["delete_account",3],["appservice",3]]],[[["update_user_password",3],["appservice",3]]],[[["accountcheckpayload",3]],["result",4]],[[["email",3]],["result",4]],[[["username",3]],["result",4]],[[["serviceconfig",3]]],null,null,[[["",0]]],[[["",0]]],[[["",0]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,[[["register",3],["appservice",3]]],[[["login",3],["appservice",3]]],[[["signout",3],["appservice",3]]],[[["serviceconfig",3]]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[]],[[]],[[]],null,null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],null,null,null,[[]],[[]],[[]],[[["routes",3],["option",4,[["str",0]]]],["string",3]],[[]],[[]],[[]],null,null,null,[[],["auth",3]],[[],["account",3]],[[],["routes",3]],null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],null,null,null,null,[[]],[[]],[[]],null,null,null,[[["ctx",3],["str",0],["str",0]],["future",8]],[[["",0]],["",0]],[[["",0]],["",0]],[[["ctx",3],["str",0],["changepasswordreqest",3]],["future",8]],[[["ctx",3]],["ctx",3]],[[["",0],["",0]]],null,null,[[["ctx",3],["str",0],["str",0]],["future",8]],[[["ctx",3],["str",0]],["future",8]],[[]],[[],["argonconfig",3]],[[]],[[["ctx",3],["login",3]],["future",8]],[[["settings",3]],["future",8]],[[["ctx",3],["register",3]],["future",8]],[[["ctx",3],["str",0],["str",0]],["future",8]],null,[[["",0]]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["ctx",3],["str",0],["str",0]],["future",8]],[[["ctx",3],["str",0]],["future",8]],[[]],null,null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["accountcheckresp",3]],["accountcheckresp",3]],[[["changepasswordreqest",3]],["changepasswordreqest",3]],[[["",0],["",0]]],[[["",0],["",0]]],null,[[],["result",4,[["accountcheckresp",3]]]],[[],["result",4,[["changepasswordreqest",3]]]],null,[[["accountcheckresp",3],["formatter",3]],["result",6]],[[["changepasswordreqest",3],["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],null,null,[[["accountcheckresp",3]],["result",4]],[[["changepasswordreqest",3]],["result",4]],[[["",0]]],[[["",0]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[]],[[]],null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["register",3]],["register",3]],[[["login",3]],["login",3]],[[["password",3]],["password",3]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],null,[[],["result",4,[["register",3]]]],[[],["result",4,[["login",3]]]],[[],["result",4,[["password",3]]]],null,[[["register",3],["formatter",3]],["result",6]],[[["login",3],["formatter",3]],["result",6]],[[["password",3],["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,[[["register",3]],["result",4]],[[["login",3]],["result",4]],[[["password",3]],["result",4]],[[["",0]]],[[["",0]]],[[["",0]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],null,[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["database",3]],["database",3]],[[["register",3]],["register",3]],[[["updateemail",3]],["updateemail",3]],[[["login",4]],["login",4]],[[["namehash",3]],["namehash",3]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[["connectionoptions",4]],["future",8]],[[["database",3],["str",0]],["future",8]],[[],["result",4,[["register",3]]]],[[],["result",4,[["updateemail",3]]]],[[],["result",4,[["login",4]]]],[[],["result",4,[["namehash",3]]]],null,null,[[["database",3],["str",0]],["future",8]],[[["register",3],["register",3]],["bool",0]],[[["updateemail",3],["updateemail",3]],["bool",0]],[[["login",4],["login",4]],["bool",0]],[[["namehash",3],["namehash",3]],["bool",0]],[[["",0],["",0]],["bool",0]],[[["",0],["",0]],["bool",0]],[[["",0],["",0]],["bool",0]],[[["",0],["",0]],["bool",0]],[[["register",3],["formatter",3]],["result",6]],[[["updateemail",3],["formatter",3]],["result",6]],[[["login",4],["formatter",3]],["result",6]],[[["namehash",3],["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["settings",3]],["future",8]],[[["database",3],["str",0]],["future",8]],[[["database",3],["login",4]],["future",8]],null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["error",4]],["serviceerror",4]],[[["error",4],["serviceerror",4]],["serviceerror",4]],[[["database",3]],["future",8]],[[["register",3],["register",3]],["bool",0]],[[["updateemail",3],["updateemail",3]],["bool",0]],[[["login",4],["login",4]],["bool",0]],[[["namehash",3],["namehash",3]],["bool",0]],null,[[],["offsetdatetime",3]],[[["database",3]],["future",8]],null,null,[[["database",3],["register",3]],["future",8]],[[["register",3]],["result",4]],[[["updateemail",3]],["result",4]],[[["login",4]],["result",4]],[[["namehash",3]],["result",4]],[[["",0]]],[[["",0]]],[[["",0]]],[[["",0]]],[[["",0]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["database",3],["updateemail",3]],["future",8]],[[["database",3],["namehash",3]],["future",8]],[[["database",3],["str",0],["str",0]],["future",8]],null,null,null,null,[[["database",3],["str",0]],["future",8]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],null,[[["deployevent",3]],["deployevent",3]],[[["deploysecret",3]],["deploysecret",3]],[[["deployinfo",3]],["deployinfo",3]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],null,null,[[],["result",4,[["deployevent",3]]]],[[],["result",4,[["deploysecret",3]]]],[[],["result",4,[["deployinfo",3]]]],[[["deploysecret",3],["deploysecret",3]],["bool",0]],[[["deployinfo",3],["deployinfo",3]],["bool",0]],[[["",0],["",0]],["bool",0]],[[["",0],["",0]],["bool",0]],[[["str",0],["appctx",6]],["option",4,[["page",3]]]],[[["deployevent",3],["formatter",3]],["result",6]],[[["deploysecret",3],["formatter",3]],["result",6]],[[["deployinfo",3],["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[["page",3]],["result",4,[["deployinfo",3],["serviceerror",4]]]],null,[[]],[[]],[[]],[[]],[[]],[[["deploysecret",3],["deploysecret",3]],["bool",0]],[[["deployinfo",3],["deployinfo",3]],["bool",0]],[[["update",3],["appservice",3]]],[[["deploy_info",3],["appservice",3]]],null,null,null,null,[[["deployevent",3]],["result",4]],[[["deploysecret",3]],["result",4]],[[["deployinfo",3]],["result",4]],[[["serviceconfig",3]]],[[["",0]]],[[["",0]]],[[["",0]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],null,[[]],[[]],[[]],[[]],[[]],null,[[["",0]],["",0]],[[["",0]],["",0]],[[]],null,[[]],[[],["deploy",3]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],null,[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[],["result",4,[["errortoresponse",3]]]],[[["fserror",3],["fserror",3]],["bool",0]],[[["configerror",3],["configerror",3]],["bool",0]],[[["serviceerror",4],["serviceerror",4]],["bool",0]],null,[[["serviceerror",4]],["httpresponse",3]],[[["fserror",3],["formatter",3]],["result",6]],[[["fserror",3],["formatter",3]],["result",6]],[[["configerror",3],["formatter",3]],["result",6]],[[["configerror",3],["formatter",3]],["result",6]],[[["serviceerror",4],["formatter",3]],["result",6]],[[["serviceerror",4],["formatter",3]],["result",6]],[[["errortoresponse",3],["formatter",3]],["result",6]],[[]],[[]],[[["configerrorinner",4]],["serviceerror",4]],[[["fserrorinner",3]],["serviceerror",4]],[[]],[[["parseerror",4]],["serviceerror",4]],[[["giterror",3]],["serviceerror",4]],[[["credserror",4]],["serviceerror",4]],[[]],[[]],[[]],[[]],[[]],[[["serviceerror",4],["serviceerror",4]],["bool",0]],[[["errortoresponse",3]],["result",4]],[[["fserror",3]],["option",4,[["error",8]]]],[[["configerror",3]],["option",4,[["error",8]]]],[[["serviceerror",4]],["option",4,[["error",8]]]],[[["serviceerror",4]],["statuscode",3]],[[["",0]],["string",3]],[[["",0]],["string",3]],[[["",0]],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["contenttype",4]],["vec",3,[["u8",0]]]],[[["gitfilemode",4]],["gitfilemode",4]],[[["fileinfo",3]],["fileinfo",3]],[[["contenttype",4]],["contenttype",4]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],null,[[],["result",4,[["contenttype",4]]]],[[["gitfilemode",4],["gitfilemode",4]],["bool",0]],[[["fileinfo",3],["fileinfo",3]],["bool",0]],[[["contenttype",4],["contenttype",4]],["bool",0]],[[["",0],["",0]],["bool",0]],[[["",0],["",0]],["bool",0]],[[["",0],["",0]],["bool",0]],null,[[["gitfilemode",4],["formatter",3]],["result",6]],[[["fileinfo",3],["formatter",3]],["result",6]],[[["contenttype",4],["formatter",3]],["result",6]],[[["isize",0]],["gitfilemode",4]],[[["treeentry",3]],["gitfilemode",4]],[[]],[[["treeentry",3]],["gitfilemode",4]],[[]],[[]],[[["blob",3]],["contenttype",4]],[[],["gitfilemode",4]],[[]],[[]],[[]],null,[[["fileinfo",3],["fileinfo",3]],["bool",0]],[[["contenttype",4],["contenttype",4]],["bool",0]],[[["str",0],["str",0]],["result",4,[["fileinfo",3],["serviceerror",4]]]],[[["repository",3],["str",0],["tree",3]],["result",4,[["fileinfo",3],["serviceerror",4]]]],[[["str",0],["str",0],["str",0]],["result",4,[["fileinfo",3],["serviceerror",4]]]],[[["contenttype",4]],["result",4]],[[["",0]]],[[["",0]]],[[["",0]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4,[["gitfilemode",4],["tryfromprimitiveerror",3,[["gitfilemode",4]]]]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[]],[[]],[[]],null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],null,[[["builddetails",3]],["builddetails",3]],[[["health",3]],["health",3]],[[["",0],["",0]]],[[["",0],["",0]]],null,[[],["result",4,[["builddetails",3]]]],[[],["result",4,[["health",3]]]],[[["builddetails",3],["formatter",3]],["result",6]],[[["health",3],["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],null,null,[[]],[[]],[[]],[[]],[[["build_details",3],["appservice",3]]],[[["health",3],["appservice",3]]],null,[[["builddetails",3]],["result",4]],[[["health",3]],["result",4]],[[["serviceconfig",3]]],null,[[["",0]]],[[["",0]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],null,[[]],[[]],[[]],[[]],null,[[["",0]],["",0]],[[["",0]],["",0]],null,[[]],null,[[]],[[],["meta",3]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[]],null,[[["page",3],["repository",3],["str",0]],["result",4,[["serviceerror",4]]]],[[["",0]],["",0]],[[["",0]],["",0]],null,[[["page",3]],["page",3]],[[["",0],["",0]]],[[["page",3]],["result",4,[["repository",3],["serviceerror",4]]]],[[["page",3],["repository",3]],["result",4,[["serviceerror",4]]]],[[],["result",4,[["page",3]]]],null,[[["page",3],["page",3]],["bool",0]],[[["",0],["",0]],["bool",0]],[[["repository",3],["reference",3],["annotatedcommit",3]],["result",4,[["serviceerror",4]]]],[[["page",3],["repository",3],["str",0]],["result",4,[["annotatedcommit",3],["serviceerror",4]]]],[[["page",3],["formatter",3]],["result",6]],[[]],[[["page",3],["repository",3]],["result",4,[["string",3],["serviceerror",4]]]],[[["repository",3]],["result",4,[["oid",3],["serviceerror",4]]]],[[["repository",3]],["result",4,[["remote",3],["serviceerror",4]]]],[[]],[[["page",3],["repository",3],["annotatedcommit",3],["str",0]],["result",4,[["serviceerror",4]]]],[[["page",3],["page",3]],["bool",0]],[[["repository",3],["annotatedcommit",3],["annotatedcommit",3]],["result",4,[["error",3]]]],[[["page",3]],["result",4,[["repository",3],["serviceerror",4]]]],null,null,null,[[["",0]]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["page",3],["str",0]],["result",4,[["serviceerror",4]]]],[[]],null,null,[[["",0]],["",0]],[[["",0]],["",0]],null,[[["preview",3],["str",0]],["option",4,[["str",0]]]],[[]],[[["preview",3],["usize",0]],["string",3]],[[]],[[["appctx",6]],["preview",3]],null,[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[]],null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["str",0],["appctx",6]],["option",4,[["page",3]]]],[[]],null,[[]],[[["index",3],["appservice",3]]],null,[[["serviceconfig",3]]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[]],null,[[["",0]],["",0]],[[["",0]],["",0]],null,[[]],[[]],[[],["serve",3]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[]],null,null,null,null,null,null,[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["",0]],["",0]],[[["settings",3]]],[[["server",3]],["server",3]],[[["dbtype",4]],["dbtype",4]],[[["database",3]],["database",3]],[[["settings",3]],["settings",3]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],[[["",0],["",0]]],null,null,null,null,[[],["result",4,[["server",3]]]],[[],["result",4,[["dbtype",4]]]],[[],["result",4,[["database",3]]]],[[],["result",4,[["settings",3]]]],null,[[["dbtype",4],["dbtype",4]],["bool",0]],[[["",0],["",0]],["bool",0]],[[["server",3],["formatter",3]],["result",6]],[[["dbtype",4],["formatter",3]],["result",6]],[[["dbtype",4],["formatter",3]],["result",6]],[[["database",3],["formatter",3]],["result",6]],[[["settings",3],["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[["url",3]],["result",4,[["dbtype",4],["configerror",4]]]],[[["server",3]],["string",3]],[[["settings",3]]],[[]],[[]],[[]],[[]],null,[[],["result",4,[["settings",3],["serviceerror",4]]]],null,null,null,[[["dbtype",4]],["result",4]],null,null,[[["",0]]],[[["",0]]],[[["",0]]],[[["",0]]],[[["",0]],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],[[["",0]],["typeid",3]],null,[[]],[[]],[[]],[[]],null,[[["usize",0]],["string",3]]],"p":[[4,"Commands"],[3,"Settings"],[3,"Cli"],[3,"RedirectQuery"],[3,"AccountCheckPayload"],[3,"Email"],[3,"Username"],[3,"set_username"],[3,"username_exists"],[3,"email_exists"],[3,"set_email"],[3,"delete_account"],[3,"update_user_password"],[3,"register"],[3,"login"],[3,"signout"],[3,"Routes"],[3,"Auth"],[3,"Account"],[3,"Ctx"],[3,"AccountCheckResp"],[3,"ChangePasswordReqest"],[3,"Register"],[3,"Login"],[3,"Password"],[3,"Conn"],[4,"Login"],[4,"ConnectionOptions"],[3,"Fresh"],[3,"Database"],[3,"Register"],[3,"UpdateEmail"],[3,"NameHash"],[13,"Fresh"],[13,"Existing"],[13,"Username"],[13,"Email"],[3,"DeployEvent"],[3,"update"],[3,"DeploySecret"],[3,"DeployInfo"],[3,"deploy_info"],[3,"Deploy"],[3,"FSError"],[3,"ConfigError"],[4,"ServiceError"],[3,"ErrorToResponse"],[13,"PathTaken"],[13,"SecretTaken"],[13,"DuplicateRepositoryURL"],[13,"FSError"],[13,"UnauthorizedOperation"],[13,"BadRequest"],[13,"ConfigError"],[13,"GitError"],[13,"BranchNotFound"],[4,"ContentType"],[4,"GitFileMode"],[3,"FileInfo"],[13,"Binary"],[13,"Text"],[3,"BuildDetails"],[3,"build_details"],[3,"Health"],[3,"health"],[3,"Meta"],[3,"Page"],[3,"Preview"],[3,"index"],[3,"Serve"],[4,"DBType"],[3,"Server"],[3,"Database"]]}\ }'); if (typeof window !== 'undefined' && window.initSearch) {window.initSearch(searchIndex)}; if (typeof exports !== 'undefined') {exports.searchIndex = searchIndex}; diff --git a/source-files.js b/source-files.js index 04e0b8e..c732fce 100644 --- a/source-files.js +++ b/source-files.js @@ -1,3 +1,3 @@ var sourcesIndex = {}; -sourcesIndex["pages"] = {"name":"","files":["ctx.rs","deploy.rs","errors.rs","main.rs","meta.rs","page.rs","routes.rs","settings.rs"]}; +sourcesIndex["pages"] = {"name":"","dirs":[{"name":"api","dirs":[{"name":"v1","dirs":[{"name":"account","files":["mod.rs"]}],"files":["auth.rs","mod.rs","routes.rs"]}],"files":["mod.rs"]},{"name":"ctx","dirs":[{"name":"api","dirs":[{"name":"v1","files":["account.rs","auth.rs","mod.rs"]}],"files":["mod.rs"]}],"files":["mod.rs"]}],"files":["db.rs","deploy.rs","errors.rs","git.rs","main.rs","meta.rs","page.rs","preview.rs","routes.rs","serve.rs","settings.rs","utils.rs"]}; createSourceSidebar(); diff --git a/src/pages/api/mod.rs.html b/src/pages/api/mod.rs.html new file mode 100644 index 0000000..be2d643 --- /dev/null +++ b/src/pages/api/mod.rs.html @@ -0,0 +1,43 @@ +mod.rs - source +
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+
/*
+ * Copyright (C) 2022  Aravinth Manivannan <realaravinth@batsense.net>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+pub mod v1;
+
+
+ \ No newline at end of file diff --git a/src/pages/api/v1/account/mod.rs.html b/src/pages/api/v1/account/mod.rs.html new file mode 100644 index 0000000..a1dfe48 --- /dev/null +++ b/src/pages/api/v1/account/mod.rs.html @@ -0,0 +1,285 @@ +mod.rs - source +
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+
/*
+ * Copyright (C) 2021  Aravinth Manivannan <realaravinth@batsense.net>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+
+use actix_identity::Identity;
+use actix_web::{web, HttpResponse, Responder};
+use serde::{Deserialize, Serialize};
+
+use crate::ctx::api::v1::account::*;
+use crate::ctx::api::v1::auth::Password;
+use crate::errors::*;
+use crate::AppCtx;
+
+#[cfg(test)]
+pub mod test;
+
+pub use super::auth;
+
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct AccountCheckPayload {
+    pub val: String,
+}
+
+pub fn services(cfg: &mut actix_web::web::ServiceConfig) {
+    cfg.service(username_exists);
+    cfg.service(set_username);
+    cfg.service(email_exists);
+    cfg.service(set_email);
+    cfg.service(delete_account);
+    cfg.service(update_user_password);
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct Email {
+    pub email: String,
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct Username {
+    pub username: String,
+}
+
+/// update username
+#[actix_web_codegen_const_routes::post(
+    path = "crate::V1_API_ROUTES.account.update_username",
+    wrap = "super::get_auth_middleware()"
+)]
+async fn set_username(
+    id: Identity,
+    payload: web::Json<Username>,
+    ctx: AppCtx,
+) -> ServiceResult<impl Responder> {
+    let username = id.identity().unwrap();
+
+    let new_name = ctx.update_username(&username, &payload.username).await?;
+
+    id.forget();
+    id.remember(new_name);
+
+    Ok(HttpResponse::Ok())
+}
+
+#[actix_web_codegen_const_routes::post(path = "crate::V1_API_ROUTES.account.username_exists")]
+async fn username_exists(
+    payload: web::Json<AccountCheckPayload>,
+    ctx: AppCtx,
+) -> ServiceResult<impl Responder> {
+    Ok(HttpResponse::Ok().json(ctx.username_exists(&payload.val).await?))
+}
+
+#[actix_web_codegen_const_routes::post(path = "crate::V1_API_ROUTES.account.email_exists")]
+pub async fn email_exists(
+    payload: web::Json<AccountCheckPayload>,
+    ctx: AppCtx,
+) -> ServiceResult<impl Responder> {
+    Ok(HttpResponse::Ok().json(ctx.email_exists(&payload.val).await?))
+}
+
+/// update email
+#[actix_web_codegen_const_routes::post(
+    path = "crate::V1_API_ROUTES.account.update_email",
+    wrap = "super::get_auth_middleware()"
+)]
+async fn set_email(
+    id: Identity,
+    payload: web::Json<Email>,
+    ctx: AppCtx,
+) -> ServiceResult<impl Responder> {
+    let username = id.identity().unwrap();
+    ctx.set_email(&username, &payload.email).await?;
+    Ok(HttpResponse::Ok())
+}
+
+#[actix_web_codegen_const_routes::post(
+    path = "crate::V1_API_ROUTES.account.delete",
+    wrap = "super::get_auth_middleware()"
+)]
+async fn delete_account(
+    id: Identity,
+    payload: web::Json<Password>,
+    ctx: AppCtx,
+) -> ServiceResult<impl Responder> {
+    let username = id.identity().unwrap();
+
+    ctx.delete_user(&username, &payload.password).await?;
+    id.forget();
+    Ok(HttpResponse::Ok())
+}
+
+#[actix_web_codegen_const_routes::post(
+    path = "crate::V1_API_ROUTES.account.update_password",
+    wrap = "super::get_auth_middleware()"
+)]
+async fn update_user_password(
+    id: Identity,
+    ctx: AppCtx,
+
+    payload: web::Json<ChangePasswordReqest>,
+) -> ServiceResult<impl Responder> {
+    let username = id.identity().unwrap();
+    let payload = payload.into_inner();
+    ctx.change_password(&username, &payload).await?;
+
+    Ok(HttpResponse::Ok())
+}
+
+
+ \ No newline at end of file diff --git a/src/pages/api/v1/auth.rs.html b/src/pages/api/v1/auth.rs.html new file mode 100644 index 0000000..54e239e --- /dev/null +++ b/src/pages/api/v1/auth.rs.html @@ -0,0 +1,151 @@ +auth.rs - source +
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+
/*
+ * Copyright (C) 2022  Aravinth Manivannan <realaravinth@batsense.net>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+
+use crate::ctx::api::v1::auth::{Login, Register};
+use actix_identity::Identity;
+use actix_web::http::header;
+use actix_web::{web, HttpResponse, Responder};
+
+use super::RedirectQuery;
+use crate::errors::*;
+use crate::AppCtx;
+
+pub fn services(cfg: &mut web::ServiceConfig) {
+    cfg.service(register);
+    cfg.service(login);
+    cfg.service(signout);
+}
+#[actix_web_codegen_const_routes::post(path = "crate::V1_API_ROUTES.auth.register")]
+async fn register(payload: web::Json<Register>, ctx: AppCtx) -> ServiceResult<impl Responder> {
+    ctx.register(&payload).await?;
+    Ok(HttpResponse::Ok())
+}
+
+#[actix_web_codegen_const_routes::post(path = "crate::V1_API_ROUTES.auth.login")]
+async fn login(
+    id: Identity,
+    payload: web::Json<Login>,
+    query: web::Query<RedirectQuery>,
+    ctx: AppCtx,
+) -> ServiceResult<impl Responder> {
+    let payload = payload.into_inner();
+    let username = ctx.login(&payload).await?;
+    id.remember(username);
+    let query = query.into_inner();
+    if let Some(redirect_to) = query.redirect_to {
+        Ok(HttpResponse::Found()
+            .insert_header((header::LOCATION, redirect_to))
+            .finish())
+    } else {
+        Ok(HttpResponse::Ok().into())
+    }
+}
+
+#[actix_web_codegen_const_routes::get(
+    path = "crate::V1_API_ROUTES.auth.logout",
+    wrap = "super::get_auth_middleware()"
+)]
+async fn signout(id: Identity) -> impl Responder {
+    use actix_auth_middleware::GetLoginRoute;
+
+    if id.identity().is_some() {
+        id.forget();
+    }
+    HttpResponse::Found()
+        .append_header((header::LOCATION, crate::V1_API_ROUTES.get_login_route(None)))
+        .finish()
+}
+
+
+ \ No newline at end of file diff --git a/src/pages/api/v1/mod.rs.html b/src/pages/api/v1/mod.rs.html new file mode 100644 index 0000000..5d1e3b7 --- /dev/null +++ b/src/pages/api/v1/mod.rs.html @@ -0,0 +1,99 @@ +mod.rs - source +
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+
/*
+ * Copyright (C) 2022  Aravinth Manivannan <realaravinth@batsense.net>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+use actix_auth_middleware::Authentication;
+use actix_web::web::ServiceConfig;
+use serde::Deserialize;
+
+pub mod account;
+pub mod auth;
+pub mod routes;
+
+pub use routes::ROUTES;
+
+pub fn services(cfg: &mut ServiceConfig) {
+    auth::services(cfg);
+    account::services(cfg);
+    crate::meta::services(cfg);
+    crate::deploy::services(cfg);
+    crate::serve::services(cfg);
+}
+
+#[derive(Deserialize)]
+pub struct RedirectQuery {
+    pub redirect_to: Option<String>,
+}
+
+pub fn get_auth_middleware() -> Authentication<routes::Routes> {
+    Authentication::with_identity(ROUTES)
+}
+
+#[cfg(test)]
+mod tests;
+
+
+ \ No newline at end of file diff --git a/src/pages/api/v1/routes.rs.html b/src/pages/api/v1/routes.rs.html new file mode 100644 index 0000000..084e907 --- /dev/null +++ b/src/pages/api/v1/routes.rs.html @@ -0,0 +1,255 @@ +routes.rs - source +
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+
/*
+* Copyright (C) 2022  Aravinth Manivannan <realaravinth@batsense.net>
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Affero General Public License as
+* published by the Free Software Foundation, either version 3 of the
+* License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU Affero General Public License for more details.
+*
+* You should have received a copy of the GNU Affero General Public License
+* along with this program.  If not, see <https://www.gnu.org/licenses/>.
+*/
+//! V1 API Routes
+use actix_auth_middleware::GetLoginRoute;
+
+use crate::deploy::routes::Deploy;
+use crate::meta::routes::Meta;
+use crate::serve::routes::Serve;
+
+/// constant [Routes](Routes) instance
+pub const ROUTES: Routes = Routes::new();
+
+/// Authentication routes
+pub struct Auth {
+    /// logout route
+    pub logout: &'static str,
+    /// login route
+    pub login: &'static str,
+    /// registration route
+    pub register: &'static str,
+}
+impl Auth {
+    /// create new instance of Authentication route
+    pub const fn new() -> Auth {
+        let login = "/api/v1/signin";
+        let logout = "/api/v1/logout";
+        let register = "/api/v1/signup";
+        Auth {
+            logout,
+            login,
+            register,
+        }
+    }
+}
+
+/// Account management routes
+pub struct Account {
+    /// delete account route
+    pub delete: &'static str,
+    /// route to check if an email exists
+    pub email_exists: &'static str,
+    /// route to update a user's email
+    pub update_email: &'static str,
+    ///    route to update password
+    pub update_password: &'static str,
+    ///    route to check if a username is already registered
+    pub username_exists: &'static str,
+    ///    route to change username
+    pub update_username: &'static str,
+}
+
+impl Account {
+    /// create a new instance of [Account][Account] routes
+    pub const fn new() -> Account {
+        let delete = "/api/v1/account/delete";
+        let email_exists = "/api/v1/account/email/exists";
+        let username_exists = "/api/v1/account/username/exists";
+        let update_username = "/api/v1/account/username/update";
+        let update_email = "/api/v1/account/email/update";
+        let update_password = "/api/v1/account/password/update";
+        Account {
+            delete,
+            email_exists,
+            update_email,
+            update_password,
+            username_exists,
+            update_username,
+        }
+    }
+}
+
+/// Top-level routes data structure for V1 AP1
+pub struct Routes {
+    /// Authentication routes
+    pub auth: Auth,
+    /// Account routes
+    pub account: Account,
+    /// Meta routes
+    pub meta: Meta,
+    pub deploy: Deploy,
+    pub serve: Serve,
+}
+
+impl Routes {
+    /// create new instance of Routes
+    const fn new() -> Routes {
+        Routes {
+            auth: Auth::new(),
+            account: Account::new(),
+            meta: Meta::new(),
+            deploy: Deploy::new(),
+            serve: Serve::new(),
+        }
+    }
+}
+
+impl GetLoginRoute for Routes {
+    fn get_login_route(&self, src: Option<&str>) -> String {
+        if let Some(redirect_to) = src {
+            format!(
+                "{}?redirect_to={}",
+                self.auth.login,
+                urlencoding::encode(redirect_to)
+            )
+        } else {
+            self.auth.register.to_string()
+        }
+    }
+}
+
+
+ \ No newline at end of file diff --git a/src/pages/ctx.rs.html b/src/pages/ctx.rs.html deleted file mode 100644 index a36e0d4..0000000 --- a/src/pages/ctx.rs.html +++ /dev/null @@ -1,69 +0,0 @@ -ctx.rs - source -
1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-
/*
- * Copyright (C) 2022  Aravinth Manivannan <realaravinth@batsense.net>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <https://www.gnu.org/licenses/>.
- */
-use std::sync::Arc;
-
-use crate::settings::Settings;
-
-#[derive(Clone)]
-pub struct Ctx {
-    pub settings: Settings,
-}
-
-impl Ctx {
-    pub fn new(settings: Settings) -> Arc<Self> {
-        Arc::new(Self { settings })
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/pages/ctx/api/mod.rs.html b/src/pages/ctx/api/mod.rs.html new file mode 100644 index 0000000..df54bfb --- /dev/null +++ b/src/pages/ctx/api/mod.rs.html @@ -0,0 +1,43 @@ +mod.rs - source +
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+
/*
+ * Copyright (C) 2022  Aravinth Manivannan <realaravinth@batsense.net>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+pub mod v1;
+
+
+ \ No newline at end of file diff --git a/src/pages/ctx/api/v1/account.rs.html b/src/pages/ctx/api/v1/account.rs.html new file mode 100644 index 0000000..2df78a1 --- /dev/null +++ b/src/pages/ctx/api/v1/account.rs.html @@ -0,0 +1,281 @@ +account.rs - source +
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+
/*
+ * Copyright (C) 2022  Aravinth Manivannan <realaravinth@batsense.net>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+//! Account management utility datastructures and methods
+use serde::{Deserialize, Serialize};
+
+pub use super::auth;
+use crate::ctx::Ctx;
+use crate::db;
+use crate::errors::*;
+
+#[derive(Clone, Debug, Deserialize, Serialize)]
+/// Data structure used in `*_exists` methods
+pub struct AccountCheckResp {
+    /// set to true if the attribute in question exists
+    pub exists: bool,
+}
+
+/// Data structure used to change password of a registered user
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct ChangePasswordReqest {
+    /// current password
+    pub password: String,
+    /// new password
+    pub new_password: String,
+    /// new password confirmation
+    pub confirm_new_password: String,
+}
+
+impl Ctx {
+    /// check if email exists on database
+    pub async fn email_exists(&self, email: &str) -> ServiceResult<AccountCheckResp> {
+        let resp = AccountCheckResp {
+            exists: self.db.email_exists(email).await?,
+        };
+
+        Ok(resp)
+    }
+
+    /// update email
+    pub async fn set_email(&self, username: &str, new_email: &str) -> ServiceResult<()> {
+        self.creds.email(new_email)?;
+
+        let username = self.creds.username(username)?;
+
+        let payload = db::UpdateEmail {
+            username: &username,
+            new_email,
+        };
+        self.db.update_email(&payload).await?;
+        Ok(())
+    }
+
+    /// check if email exists in database
+    pub async fn username_exists(&self, username: &str) -> ServiceResult<AccountCheckResp> {
+        let processed_uname = self.creds.username(username)?;
+        let resp = AccountCheckResp {
+            exists: self.db.username_exists(&processed_uname).await?,
+        };
+        Ok(resp)
+    }
+
+    /// update username of a registered user
+    pub async fn update_username(
+        &self,
+        current_username: &str,
+        new_username: &str,
+    ) -> ServiceResult<String> {
+        let processed_uname = self.creds.username(new_username)?;
+
+        self.db
+            .update_username(current_username, &processed_uname)
+            .await?;
+
+        Ok(processed_uname)
+    }
+
+    // returns Ok(()) upon successful authentication
+    async fn authenticate(&self, username: &str, password: &str) -> ServiceResult<()> {
+        use argon2_creds::Config;
+        let username = self.creds.username(username)?;
+        let resp = self
+            .db
+            .get_password(&db::Login::Username(&username))
+            .await?;
+        if Config::verify(&resp.hash, password)? {
+            Ok(())
+        } else {
+            Err(ServiceError::WrongPassword)
+        }
+    }
+
+    /// delete user
+    pub async fn delete_user(&self, username: &str, password: &str) -> ServiceResult<()> {
+        let username = self.creds.username(username)?;
+        self.authenticate(&username, password).await?;
+        self.db.delete_user(&username).await?;
+        Ok(())
+    }
+
+    /// change password
+    pub async fn change_password(
+        &self,
+
+        username: &str,
+        payload: &ChangePasswordReqest,
+    ) -> ServiceResult<()> {
+        if payload.new_password != payload.confirm_new_password {
+            return Err(ServiceError::PasswordsDontMatch);
+        }
+
+        self.authenticate(username, &payload.password).await?;
+
+        let hash = self.creds.password(&payload.new_password)?;
+
+        let username = self.creds.username(username)?;
+        let db_payload = db::NameHash { username, hash };
+
+        self.db.update_password(&db_payload).await?;
+
+        Ok(())
+    }
+}
+
+
+ \ No newline at end of file diff --git a/src/pages/ctx/api/v1/auth.rs.html b/src/pages/ctx/api/v1/auth.rs.html new file mode 100644 index 0000000..f1b2711 --- /dev/null +++ b/src/pages/ctx/api/v1/auth.rs.html @@ -0,0 +1,217 @@ +auth.rs - source +
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+
/*
+ * Copyright (C) 2022  Aravinth Manivannan <realaravinth@batsense.net>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+//! Authentication helper methods and data structures
+use serde::{Deserialize, Serialize};
+
+use crate::ctx::Ctx;
+use crate::db;
+use crate::errors::*;
+
+/// Register payload
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct Register {
+    /// username
+    pub username: String,
+    /// password
+    pub password: String,
+    /// password confirmation: `password` and `confirm_password` must match
+    pub confirm_password: String,
+    pub email: String,
+}
+
+/// Login payload
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct Login {
+    // login accepts both username and email under "username field"
+    // TODO update all instances where login is used
+    /// user identifier: either username or email
+    /// an email is detected by checkinf for the existence of `@` character
+    pub login: String,
+    /// password
+    pub password: String,
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize)]
+/// struct used to represent password
+pub struct Password {
+    /// password
+    pub password: String,
+}
+
+impl Ctx {
+    /// Log in method. Returns `Ok(())` when user is authenticated and errors when authentication
+    /// fails
+    pub async fn login(&self, payload: &Login) -> ServiceResult<String> {
+        use argon2_creds::Config;
+
+        let verify = |stored: &str, received: &str| {
+            if Config::verify(stored, received)? {
+                Ok(())
+            } else {
+                Err(ServiceError::WrongPassword)
+            }
+        };
+
+        let creds = if payload.login.contains('@') {
+            self.db
+                .get_password(&db::Login::Email(&payload.login))
+                .await?
+        } else {
+            self.db
+                .get_password(&db::Login::Username(&payload.login))
+                .await?
+        };
+        verify(&creds.hash, &payload.password)?;
+        Ok(creds.username)
+    }
+
+    /// register new user
+    pub async fn register(&self, payload: &Register) -> ServiceResult<()> {
+        if !self.settings.allow_registration {
+            return Err(ServiceError::ClosedForRegistration);
+        }
+
+        if payload.password != payload.confirm_password {
+            return Err(ServiceError::PasswordsDontMatch);
+        }
+        let username = self.creds.username(&payload.username)?;
+        let hash = self.creds.password(&payload.password)?;
+
+        self.creds.email(&payload.email)?;
+
+        let db_payload = db::Register {
+            username: &username,
+            hash: &hash,
+            email: &payload.email,
+        };
+
+        self.db.register(&db_payload).await
+    }
+}
+
+
+ \ No newline at end of file diff --git a/src/pages/ctx/api/v1/mod.rs.html b/src/pages/ctx/api/v1/mod.rs.html new file mode 100644 index 0000000..a521218 --- /dev/null +++ b/src/pages/ctx/api/v1/mod.rs.html @@ -0,0 +1,51 @@ +mod.rs - source +
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+
/*
+ * Copyright (C) 2022  Aravinth Manivannan <realaravinth@batsense.net>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+pub mod account;
+pub mod auth;
+
+#[cfg(test)]
+mod tests;
+
+
+ \ No newline at end of file diff --git a/src/pages/ctx/mod.rs.html b/src/pages/ctx/mod.rs.html new file mode 100644 index 0000000..0644d77 --- /dev/null +++ b/src/pages/ctx/mod.rs.html @@ -0,0 +1,147 @@ +mod.rs - source +
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+
/*
+ * Copyright (C) 2022  Aravinth Manivannan <realaravinth@batsense.net>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+use std::sync::Arc;
+use std::thread;
+
+use crate::db::*;
+use crate::settings::Settings;
+use argon2_creds::{Config as ArgonConfig, ConfigBuilder as ArgonConfigBuilder, PasswordPolicy};
+
+pub mod api;
+
+pub type ArcCtx = Arc<Ctx>;
+
+#[derive(Clone)]
+pub struct Ctx {
+    pub settings: Settings,
+    pub db: Database,
+    /// credential-procession policy
+    pub creds: ArgonConfig,
+}
+
+impl Ctx {
+    /// Get credential-processing policy
+    pub fn get_creds() -> ArgonConfig {
+        ArgonConfigBuilder::default()
+            .username_case_mapped(true)
+            .profanity(true)
+            .blacklist(true)
+            .password_policy(PasswordPolicy::default())
+            .build()
+            .unwrap()
+    }
+
+    pub async fn new(settings: Settings) -> Arc<Self> {
+        let creds = Self::get_creds();
+        let c = creds.clone();
+
+        #[allow(unused_variables)]
+        let init = thread::spawn(move || {
+            log::info!("Initializing credential manager");
+            c.init();
+            log::info!("Initialized credential manager");
+        });
+        let db = get_db(&settings).await;
+
+        #[cfg(not(debug_assertions))]
+        init.join();
+
+        Arc::new(Self {
+            settings,
+            db,
+            creds,
+        })
+    }
+}
+
+
+ \ No newline at end of file diff --git a/src/pages/db.rs.html b/src/pages/db.rs.html new file mode 100644 index 0000000..ba656af --- /dev/null +++ b/src/pages/db.rs.html @@ -0,0 +1,923 @@ +db.rs - source +
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+
/*
+ * Copyright (C) 2022  Aravinth Manivannan <realaravinth@batsense.net>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+use std::str::FromStr;
+
+use serde::{Deserialize, Serialize};
+use sqlx::postgres::PgPoolOptions;
+use sqlx::types::time::OffsetDateTime;
+//use sqlx::types::Json;
+use sqlx::ConnectOptions;
+use sqlx::PgPool;
+
+use crate::errors::*;
+
+/// Connect to databse
+pub enum ConnectionOptions {
+    /// fresh connection
+    Fresh(Fresh),
+    /// existing connection
+    Existing(Conn),
+}
+
+/// Use an existing database pool
+pub struct Conn(pub PgPool);
+
+pub struct Fresh {
+    pub pool_options: PgPoolOptions,
+    pub disable_logging: bool,
+    pub url: String,
+}
+
+impl ConnectionOptions {
+    async fn connect(self) -> ServiceResult<Database> {
+        let pool = match self {
+            Self::Fresh(fresh) => {
+                let mut connect_options =
+                    sqlx::postgres::PgConnectOptions::from_str(&fresh.url).unwrap();
+                if fresh.disable_logging {
+                    connect_options.disable_statement_logging();
+                }
+                sqlx::postgres::PgConnectOptions::from_str(&fresh.url)
+                    .unwrap()
+                    .disable_statement_logging();
+                fresh
+                    .pool_options
+                    .connect_with(connect_options)
+                    .await
+                    .unwrap()
+                //.map_err(|e| ServiceError::ServiceError(Box::new(e)))?
+            }
+
+            Self::Existing(conn) => conn.0,
+        };
+        Ok(Database { pool })
+    }
+}
+
+#[derive(Clone)]
+pub struct Database {
+    pub pool: PgPool,
+}
+
+impl Database {
+    pub async fn migrate(&self) -> ServiceResult<()> {
+        sqlx::migrate!("./migrations/")
+            .run(&self.pool)
+            .await
+            .unwrap();
+        //.map_err(|e| ServiceError::ServiceError(Box::new(e)))?;
+        Ok(())
+    }
+
+    pub async fn ping(&self) -> bool {
+        use sqlx::Connection;
+
+        if let Ok(mut con) = self.pool.acquire().await {
+            con.ping().await.is_ok()
+        } else {
+            false
+        }
+    }
+
+    /// register a new user
+    pub async fn register(&self, p: &Register<'_>) -> ServiceResult<()> {
+        sqlx::query!(
+            "insert into librepages_users
+            (name , password, email) values ($1, $2, $3)",
+            &p.username,
+            &p.hash,
+            &p.email,
+        )
+        .execute(&self.pool)
+        .await
+        .map_err(map_register_err)?;
+        Ok(())
+    }
+
+    /// delete a user
+    pub async fn delete_user(&self, username: &str) -> ServiceResult<()> {
+        sqlx::query!("DELETE FROM librepages_users WHERE name = ($1)", username)
+            .execute(&self.pool)
+            .await
+            .map_err(|e| map_row_not_found_err(e, ServiceError::AccountNotFound))?;
+        Ok(())
+    }
+
+    /// check if username exists
+    pub async fn username_exists(&self, username: &str) -> ServiceResult<bool> {
+        let res = sqlx::query!(
+            "SELECT EXISTS (SELECT 1 from librepages_users WHERE name = $1)",
+            username,
+        )
+        .fetch_one(&self.pool)
+        .await
+        .map_err(map_register_err)?;
+
+        let mut resp = false;
+        if let Some(x) = res.exists {
+            resp = x;
+        }
+
+        Ok(resp)
+    }
+
+    /// get user email
+    pub async fn get_email(&self, username: &str) -> ServiceResult<String> {
+        struct Email {
+            email: String,
+        }
+
+        let res = sqlx::query_as!(
+            Email,
+            "SELECT email FROM librepages_users WHERE name = $1",
+            username
+        )
+        .fetch_one(&self.pool)
+        .await
+        .map_err(|e| map_row_not_found_err(e, ServiceError::AccountNotFound))?;
+        Ok(res.email)
+    }
+
+    /// check if email exists
+    pub async fn email_exists(&self, email: &str) -> ServiceResult<bool> {
+        let res = sqlx::query!(
+            "SELECT EXISTS (SELECT 1 from librepages_users WHERE email = $1)",
+            email
+        )
+        .fetch_one(&self.pool)
+        .await
+        .map_err(map_register_err)?;
+
+        let mut resp = false;
+        if let Some(x) = res.exists {
+            resp = x;
+        }
+
+        Ok(resp)
+    }
+
+    /// update a user's email
+    pub async fn update_email(&self, p: &UpdateEmail<'_>) -> ServiceResult<()> {
+        sqlx::query!(
+            "UPDATE librepages_users set email = $1
+            WHERE name = $2",
+            &p.new_email,
+            &p.username,
+        )
+        .execute(&self.pool)
+        .await
+        .map_err(|e| map_row_not_found_err(e, ServiceError::AccountNotFound))?;
+
+        Ok(())
+    }
+
+    /// get a user's password
+    pub async fn get_password(&self, l: &Login<'_>) -> ServiceResult<NameHash> {
+        struct Password {
+            name: String,
+            password: String,
+        }
+
+        let rec = match l {
+            Login::Username(u) => sqlx::query_as!(
+                Password,
+                r#"SELECT name, password  FROM librepages_users WHERE name = ($1)"#,
+                u,
+            )
+            .fetch_one(&self.pool)
+            .await
+            .map_err(|e| map_row_not_found_err(e, ServiceError::AccountNotFound))?,
+            Login::Email(e) => sqlx::query_as!(
+                Password,
+                r#"SELECT name, password  FROM librepages_users WHERE email = ($1)"#,
+                e,
+            )
+            .fetch_one(&self.pool)
+            .await
+            .map_err(|e| map_row_not_found_err(e, ServiceError::AccountNotFound))?,
+        };
+
+        let res = NameHash {
+            hash: rec.password,
+            username: rec.name,
+        };
+
+        Ok(res)
+    }
+
+    /// update user's password
+    pub async fn update_password(&self, p: &NameHash) -> ServiceResult<()> {
+        sqlx::query!(
+            "UPDATE librepages_users set password = $1
+            WHERE name = $2",
+            &p.hash,
+            &p.username,
+        )
+        .execute(&self.pool)
+        .await
+        .map_err(|e| map_row_not_found_err(e, ServiceError::AccountNotFound))?;
+
+        Ok(())
+    }
+
+    /// update username
+    pub async fn update_username(&self, current: &str, new: &str) -> ServiceResult<()> {
+        sqlx::query!(
+            "UPDATE librepages_users set name = $1
+            WHERE name = $2",
+            new,
+            current,
+        )
+        .execute(&self.pool)
+        .await
+        .map_err(|e| map_row_not_found_err(e, ServiceError::AccountNotFound))?;
+
+        Ok(())
+    }
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
+/// Data required to register a new user
+pub struct Register<'a> {
+    /// username of new user
+    pub username: &'a str,
+    /// hashed password of new use
+    pub hash: &'a str,
+    /// Optionally, email of new use
+    pub email: &'a str,
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
+/// data required to update them email of a user
+pub struct UpdateEmail<'a> {
+    /// username of the user
+    pub username: &'a str,
+    /// new email address of the user
+    pub new_email: &'a str,
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
+/// types of credentials used as identifiers during login
+pub enum Login<'a> {
+    /// username as login
+    Username(&'a str),
+    /// email as login
+    Email(&'a str),
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
+/// type encapsulating username and hashed password of a user
+pub struct NameHash {
+    /// username
+    pub username: String,
+    /// hashed password
+    pub hash: String,
+}
+
+fn now_unix_time_stamp() -> OffsetDateTime {
+    OffsetDateTime::now_utc()
+}
+
+pub async fn get_db(settings: &crate::settings::Settings) -> Database {
+    let pool_options = PgPoolOptions::new().max_connections(settings.database.pool);
+    ConnectionOptions::Fresh(Fresh {
+        pool_options,
+        url: settings.database.url.clone(),
+        disable_logging: !settings.debug,
+    })
+    .connect()
+    .await
+    .unwrap()
+}
+
+/// map custom row not found error to DB error
+pub fn map_row_not_found_err(e: sqlx::Error, row_not_found: ServiceError) -> ServiceError {
+    if let sqlx::Error::RowNotFound = e {
+        row_not_found
+    } else {
+        map_register_err(e)
+    }
+}
+
+/// map postgres errors to [ServiceError](ServiceError) types
+fn map_register_err(e: sqlx::Error) -> ServiceError {
+    use sqlx::Error;
+    use std::borrow::Cow;
+
+    if let Error::Database(err) = e {
+        if err.code() == Some(Cow::from("23505")) {
+            let msg = err.message();
+            println!("{}", msg);
+            if msg.contains("librepages_users_name_key") {
+                ServiceError::UsernameTaken
+            } else if msg.contains("librepages_users_email_key") {
+                ServiceError::EmailTaken
+            } else {
+                log::error!("{}", msg);
+                ServiceError::InternalServerError
+            }
+        } else {
+            ServiceError::InternalServerError
+        }
+    } else {
+        ServiceError::InternalServerError
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use crate::settings::Settings;
+
+    #[actix_rt::test]
+    async fn db_works() {
+        let settings = Settings::new().unwrap();
+        let pool_options = PgPoolOptions::new().max_connections(1);
+        let db = ConnectionOptions::Fresh(Fresh {
+            pool_options,
+            url: settings.database.url.clone(),
+            disable_logging: !settings.debug,
+        })
+        .connect()
+        .await
+        .unwrap();
+        assert!(db.ping().await);
+
+        const EMAIL: &str = "postgresuser@foo.com";
+        const EMAIL2: &str = "postgresuser2@foo.com";
+        const NAME: &str = "postgresuser";
+        const PASSWORD: &str = "pasdfasdfasdfadf";
+
+        db.migrate().await.unwrap();
+        let p = super::Register {
+            username: NAME,
+            email: EMAIL,
+            hash: PASSWORD,
+        };
+
+        if db.username_exists(p.username).await.unwrap() {
+            db.delete_user(p.username).await.unwrap();
+            assert!(
+                !db.username_exists(p.username).await.unwrap(),
+                "user is deleted so username shouldn't exist"
+            );
+        }
+
+        db.register(&p).await.unwrap();
+
+        assert!(matches!(
+            db.register(&p).await,
+            Err(ServiceError::UsernameTaken)
+        ));
+
+        // testing get_password
+
+        // with username
+        let name_hash = db.get_password(&Login::Username(p.username)).await.unwrap();
+        assert_eq!(name_hash.hash, p.hash, "user password matches");
+
+        assert_eq!(name_hash.username, p.username, "username matches");
+
+        // with email
+        let mut name_hash = db.get_password(&Login::Email(p.email)).await.unwrap();
+        assert_eq!(name_hash.hash, p.hash, "user password matches");
+        assert_eq!(name_hash.username, p.username, "username matches");
+
+        // testing get_email
+        assert_eq!(db.get_email(p.username).await.unwrap(), p.email);
+
+        // testing email exists
+        assert!(
+            db.email_exists(p.email).await.unwrap(),
+            "user is registered so email should exist"
+        );
+        assert!(
+            db.username_exists(p.username).await.unwrap(),
+            "user is registered so username should exist"
+        );
+
+        // update password test. setting password = username
+        name_hash.hash = name_hash.username.clone();
+        db.update_password(&name_hash).await.unwrap();
+
+        let name_hash = db.get_password(&Login::Username(p.username)).await.unwrap();
+        assert_eq!(
+            name_hash.hash, p.username,
+            "user password matches with changed value"
+        );
+        assert_eq!(name_hash.username, p.username, "username matches");
+
+        // update username to p.email
+        assert!(
+            !db.username_exists(p.email).await.unwrap(),
+            "user with p.email doesn't exist. pre-check to update username to p.email"
+        );
+        db.update_username(p.username, p.email).await.unwrap();
+        assert!(
+            db.username_exists(p.email).await.unwrap(),
+            "user with p.email exist post-update"
+        );
+
+        // testing update email
+        let update_email = UpdateEmail {
+            username: p.username,
+            new_email: EMAIL2,
+        };
+        db.update_email(&update_email).await.unwrap();
+        println!(
+            "null user email: {}",
+            db.email_exists(p.email).await.unwrap()
+        );
+        assert!(
+            db.email_exists(p.email).await.unwrap(),
+            "user was with empty email but email is set; so email should exist"
+        );
+
+        // deleting user
+        db.delete_user(p.email).await.unwrap();
+        assert!(
+            !db.username_exists(p.email).await.unwrap(),
+            "user is deleted so username shouldn't exist"
+        );
+    }
+}
+
+
+ \ No newline at end of file diff --git a/src/pages/deploy.rs.html b/src/pages/deploy.rs.html index b1085c9..7559403 100644 --- a/src/pages/deploy.rs.html +++ b/src/pages/deploy.rs.html @@ -241,7 +241,7 @@ pub branch: String, } -fn find_page<'a>(secret: &str, ctx: &'a AppCtx) -> Option<&'a Page> { +pub fn find_page<'a>(secret: &str, ctx: &'a AppCtx) -> Option<&'a Page> { for page in ctx.settings.pages.iter() { if page.secret == secret { return Some(page); @@ -250,13 +250,13 @@ None } -#[my_codegen::post(path = "crate::V1_API_ROUTES.deploy.update")] +#[actix_web_codegen_const_routes::post(path = "crate::V1_API_ROUTES.deploy.update")] async fn update(payload: web::Json<DeployEvent>, ctx: AppCtx) -> ServiceResult<impl Responder> { if let Some(page) = find_page(&payload.secret, &ctx) { let (tx, rx) = oneshot::channel(); let page = page.clone(); web::block(move || { - tx.send(page.update()).unwrap(); + tx.send(page.update(&payload.branch)).unwrap(); }) .await .unwrap(); @@ -267,12 +267,12 @@ } } -#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)] +#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)] pub struct DeploySecret { pub secret: String, } -#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)] +#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)] pub struct DeployInfo { pub head: String, pub remote: String, @@ -295,7 +295,7 @@ } } -#[my_codegen::post(path = "crate::V1_API_ROUTES.deploy.info")] +#[actix_web_codegen_const_routes::post(path = "crate::V1_API_ROUTES.deploy.info")] async fn deploy_info( payload: web::Json<DeploySecret>, ctx: AppCtx, @@ -324,7 +324,7 @@ #[actix_rt::test] async fn deploy_update_works() { - let (_dir, ctx) = tests::get_data().await; + let (_dir, ctx) = tests::get_ctx().await; println!("[log] test configuration {:#?}", ctx.settings); let app = get_app!(ctx).await; let page = ctx.settings.pages.get(0); @@ -354,7 +354,7 @@ #[actix_rt::test] async fn deploy_info_works() { - let (_dir, ctx) = tests::get_data().await; + let (_dir, ctx) = tests::get_ctx().await; println!("[log] test configuration {:#?}", ctx.settings); let page = ctx.settings.pages.get(0); let page = page.unwrap(); diff --git a/src/pages/errors.rs.html b/src/pages/errors.rs.html index 218f28d..c268d9b 100644 --- a/src/pages/errors.rs.html +++ b/src/pages/errors.rs.html @@ -193,6 +193,84 @@ 187 188 189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267
/*
  * Copyright (C) 2022  Aravinth Manivannan <realaravinth@batsense.net>
  *
@@ -209,7 +287,7 @@
  * You should have received a copy of the GNU Affero General Public License
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
-//! represents all the ways a trait can fail using this crate
+//! Represents all the ways a trait can fail using this crate
 use std::convert::From;
 use std::io::Error as FSErrorInner;
 use std::sync::Arc;
@@ -219,6 +297,7 @@
     http::{header, StatusCode},
     HttpResponse, HttpResponseBuilder,
 };
+use argon2_creds::errors::CredsError;
 use config::ConfigError as ConfigErrorInner;
 use derive_more::{Display, Error};
 use git2::Error as GitError;
@@ -321,6 +400,53 @@
 
     #[display(fmt = "Branch {} not found", _0)]
     BranchNotFound(#[error(not(source))] String),
+
+    /// Username is taken
+    #[display(fmt = "Username is taken")]
+    UsernameTaken,
+    /// Email is taken
+    #[display(fmt = "Email is taken")]
+    EmailTaken,
+    /// Account not found
+    #[display(fmt = "Account not found")]
+    AccountNotFound,
+
+    #[display(
+        fmt = "This server is is closed for registration. Contact admin if this is unexpecter"
+    )]
+    /// registration failure, server is is closed for registration
+    ClosedForRegistration,
+
+    #[display(fmt = "The value you entered for email is not an email")] //405j
+    /// The value you entered for email is not an email"
+    NotAnEmail,
+
+    #[display(fmt = "Wrong password")]
+    /// wrong password
+    WrongPassword,
+
+    /// when the value passed contains profanity
+    #[display(fmt = "Can't allow profanity in usernames")]
+    ProfanityError,
+    /// when the value passed contains blacklisted words
+    /// see [blacklist](https://github.com/shuttlecraft/The-Big-Username-Blacklist)
+    #[display(fmt = "Username contains blacklisted words")]
+    BlacklistError,
+    /// when the value passed contains characters not present
+    /// in [UsernameCaseMapped](https://tools.ietf.org/html/rfc8265#page-7)
+    /// profile
+    #[display(fmt = "username_case_mapped violation")]
+    UsernameCaseMappedError,
+
+    #[display(fmt = "Passsword too short")]
+    /// password too short
+    PasswordTooShort,
+    #[display(fmt = "password too long")]
+    /// password too long
+    PasswordTooLong,
+    #[display(fmt = "Passwords don't match")]
+    /// passwords don't match
+    PasswordsDontMatch,
 }
 
 impl From<ParseError> for ServiceError {
@@ -379,6 +505,36 @@
             ServiceError::BadRequest(_) => StatusCode::BAD_REQUEST,
             ServiceError::GitError(_) => StatusCode::BAD_REQUEST,
             ServiceError::BranchNotFound(_) => StatusCode::CONFLICT,
+
+            ServiceError::EmailTaken => StatusCode::BAD_REQUEST,
+            ServiceError::UsernameTaken => StatusCode::BAD_REQUEST,
+            ServiceError::AccountNotFound => StatusCode::NOT_FOUND,
+
+            ServiceError::ProfanityError => StatusCode::BAD_REQUEST, //BADREQUEST,
+            ServiceError::BlacklistError => StatusCode::BAD_REQUEST, //BADREQUEST,
+            ServiceError::UsernameCaseMappedError => StatusCode::BAD_REQUEST, //BADREQUEST,
+
+            ServiceError::PasswordTooShort => StatusCode::BAD_REQUEST, //BADREQUEST,
+            ServiceError::PasswordTooLong => StatusCode::BAD_REQUEST,  //BADREQUEST,
+            ServiceError::PasswordsDontMatch => StatusCode::BAD_REQUEST, //BADREQUEST,
+            ServiceError::ClosedForRegistration => StatusCode::FORBIDDEN, //FORBIDDEN,
+            ServiceError::NotAnEmail => StatusCode::BAD_REQUEST,       //BADREQUEST,
+            ServiceError::WrongPassword => StatusCode::UNAUTHORIZED,   //UNAUTHORIZED,
+        }
+    }
+}
+
+impl From<CredsError> for ServiceError {
+    #[cfg(not(tarpaulin_include))]
+    fn from(e: CredsError) -> ServiceError {
+        match e {
+            CredsError::UsernameCaseMappedError => ServiceError::UsernameCaseMappedError,
+            CredsError::ProfainityError => ServiceError::ProfanityError,
+            CredsError::BlacklistError => ServiceError::BlacklistError,
+            CredsError::NotAnEmail => ServiceError::NotAnEmail,
+            CredsError::Argon2Error(_) => ServiceError::InternalServerError,
+            CredsError::PasswordTooLong => ServiceError::PasswordTooLong,
+            CredsError::PasswordTooShort => ServiceError::PasswordTooShort,
         }
     }
 }
diff --git a/src/pages/git.rs.html b/src/pages/git.rs.html
new file mode 100644
index 0000000..a858355
--- /dev/null
+++ b/src/pages/git.rs.html
@@ -0,0 +1,593 @@
+git.rs - source
+    
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+
/*
+ * Copyright (C) 2022  Aravinth Manivannan <realaravinth@batsense.net>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+use std::path::Path;
+
+use git2::*;
+use mime_guess::MimeGuess;
+use num_enum::FromPrimitive;
+use serde::{Deserialize, Serialize};
+
+use crate::errors::*;
+
+/// A FileMode represents the kind of tree entries used by git. It
+/// resembles regular file systems modes, although FileModes are
+/// considerably simpler (there are not so many), and there are some,
+/// like Submodule that has no file system equivalent.
+// Adapted from https://github.com/go-git/go-git/blob/master/plumbing/filemode/filemode.go(Apache-2.0 License)
+#[derive(Debug, PartialEq, Eq, Clone, FromPrimitive)]
+#[repr(isize)]
+pub enum GitFileMode {
+    /// Empty is used as the GitFileMode of tree elements when comparing
+    /// trees in the following situations:
+    ///
+    /// - the mode of tree elements before their creation.  
+    /// - the mode of tree elements after their deletion.  
+    /// - the mode of unmerged elements when checking the index.
+    ///
+    /// Empty has no file system equivalent.  As Empty is the zero value
+    /// of [GitFileMode]
+    Empty = 0,
+    /// Regular represent non-executable files.
+    Regular = 0o100644,
+    /// Dir represent a Directory.
+    Dir = 0o40000,
+    /// Deprecated represent non-executable files with the group writable bit set.  This mode was
+    /// supported by the first versions of git, but it has been deprecated nowadays.  This
+    /// library(github.com/go-git/go-git uses it, not realaravinth/gitpad at the moment) uses them
+    /// internally, so you can read old packfiles, but will treat them as Regulars when interfacing
+    /// with the outside world.  This is the standard git behaviour.
+    Deprecated = 0o100664,
+    /// Executable represents executable files.
+    Executable = 0o100755,
+    /// Symlink represents symbolic links to files.
+    Symlink = 0o120000,
+    /// Submodule represents git submodules.  This mode has no file system
+    /// equivalent.
+    Submodule = 0o160000,
+
+    /// Unsupported file mode
+    #[num_enum(default)]
+    Unsupported = -1,
+}
+
+impl From<&'_ TreeEntry<'_>> for GitFileMode {
+    fn from(t: &TreeEntry) -> Self {
+        GitFileMode::from(t.filemode() as isize)
+    }
+}
+
+impl From<TreeEntry<'_>> for GitFileMode {
+    fn from(t: TreeEntry) -> Self {
+        GitFileMode::from(t.filemode() as isize)
+    }
+}
+
+#[derive(Debug, Clone, Eq, PartialEq)]
+pub struct FileInfo {
+    pub filename: String,
+    pub content: ContentType,
+    pub mime: MimeGuess,
+}
+
+#[derive(Serialize, Eq, PartialEq, Clone, Debug, Deserialize)]
+#[serde(rename_all = "lowercase")]
+pub enum ContentType {
+    Binary(Vec<u8>),
+    Text(String),
+}
+
+impl ContentType {
+    pub fn bytes(self) -> Vec<u8> {
+        match self {
+            Self::Text(text) => text.into(),
+            Self::Binary(bin) => bin,
+        }
+    }
+
+    pub fn from_blob(blob: &git2::Blob) -> Self {
+        if blob.is_binary() {
+            Self::Binary(blob.content().to_vec())
+        } else {
+            Self::Text(String::from_utf8_lossy(blob.content()).to_string())
+        }
+    }
+}
+
+/// Please note that this method expects path to not contain any spaces
+/// Use [escape_spaces] before calling this method
+///
+/// For example, a read request for "foo bar.md" will fail even if that file is present
+/// in the repository. However, it will succeed if the output of [escape_spaces] is
+/// used in the request.
+pub fn read_file(repo_path: &str, path: &str) -> ServiceResult<FileInfo> {
+    let repo = git2::Repository::open(repo_path).unwrap();
+    let head = repo.head().unwrap();
+    let tree = head.peel_to_tree().unwrap();
+    read_file_inner(&repo, path, &tree)
+}
+
+pub fn read_preview_file(
+    repo_path: &str,
+    preview_name: &str,
+    path: &str,
+) -> ServiceResult<FileInfo> {
+    let repo = git2::Repository::open(repo_path).unwrap();
+    let branch = repo
+        .find_branch(preview_name, git2::BranchType::Local)
+        .unwrap();
+    //    let tree = head.peel_to_tree().unwrap();
+    let branch = branch.into_reference();
+    let tree = branch.peel_to_tree().unwrap();
+    read_file_inner(&repo, path, &tree)
+}
+
+fn read_file_inner(
+    repo: &git2::Repository,
+    path: &str,
+    tree: &git2::Tree,
+) -> ServiceResult<FileInfo> {
+    fn read_file(id: Oid, repo: &git2::Repository) -> ContentType {
+        let blob = repo.find_blob(id).unwrap();
+        ContentType::from_blob(&blob)
+    }
+
+    fn get_index_file(id: Oid, repo: &Repository) -> ContentType {
+        let tree = repo.find_tree(id).unwrap();
+        const INDEX_FILES: [&str; 7] = [
+            "index.html",
+            "index.md",
+            "INDEX.md",
+            "README.md",
+            "README",
+            "readme.txt",
+            "readme",
+        ];
+
+        let content = if let Some(index_file) = tree.iter().find(|x| {
+            if let Some(name) = x.name() {
+                INDEX_FILES.iter().any(|index_name| *index_name == name)
+            } else {
+                false
+            }
+        }) {
+            read_file(index_file.id(), repo)
+        } else {
+            unimplemented!("Index file not found");
+        };
+        content
+    }
+
+    let inner = |repo: &git2::Repository, tree: &git2::Tree| -> ServiceResult<FileInfo> {
+        //        let head = repo.head().unwrap();
+        //        let tree = head.peel_to_tree().unwrap();
+        let mut path = path;
+        if path == "/" {
+            let content = get_index_file(tree.id(), repo);
+            return Ok(FileInfo {
+                filename: "/".into(),
+                content,
+                mime: mime_guess::from_path("index.html"),
+            });
+        }
+        if path.starts_with('/') {
+            path = path.trim_start_matches('/');
+        }
+        let entry = tree.get_path(Path::new(path)).unwrap();
+        //FileType::Dir(items)
+
+        let mode: GitFileMode = entry.clone().into();
+        if let Some(name) = entry.name() {
+            let file = match mode {
+                GitFileMode::Dir => get_index_file(entry.id(), repo),
+                GitFileMode::Submodule => unimplemented!(),
+                GitFileMode::Empty => unimplemented!(),
+                GitFileMode::Deprecated => unimplemented!(),
+                GitFileMode::Unsupported => unimplemented!(),
+                GitFileMode::Symlink => unimplemented!(),
+                GitFileMode::Executable => read_file(entry.id(), repo),
+                GitFileMode::Regular => read_file(entry.id(), repo),
+            };
+            Ok(FileInfo {
+                filename: name.to_string(),
+                mime: mime_guess::from_path(path),
+                content: file,
+            })
+        } else {
+            unimplemented!();
+        }
+    };
+
+    //let repo = git2::Repository::open(repo_path).unwrap();
+    inner(repo, tree)
+}
+
+#[cfg(test)]
+pub mod tests {
+    use super::*;
+
+    const FILE_CONTENT: &str = "foobar";
+
+    fn write_file_util(path: &str) {
+        // TODO change updated in DB
+        let inner = |repo: &mut Repository| -> ServiceResult<()> {
+            let mut tree_builder = match repo.head() {
+                Err(_) => repo.treebuilder(None).unwrap(),
+
+                Ok(h) => repo.treebuilder(Some(&h.peel_to_tree().unwrap())).unwrap(),
+            };
+
+            let odb = repo.odb().unwrap();
+
+            let obj = odb
+                .write(ObjectType::Blob, FILE_CONTENT.as_bytes())
+                .unwrap();
+            tree_builder.insert("README.txt", obj, 0o100644).unwrap();
+            let tree_hash = tree_builder.write().unwrap();
+            let author = Signature::now("librepages", "admin@librepages.org").unwrap();
+            let committer = Signature::now("librepages", "admin@librepages.org").unwrap();
+
+            let commit_tree = repo.find_tree(tree_hash).unwrap();
+            let msg = "";
+            if let Err(e) = repo.head() {
+                if e.code() == ErrorCode::UnbornBranch && e.class() == ErrorClass::Reference {
+                    // fisrt commit ever; set parent commit(s) to empty array
+                    repo.commit(Some("HEAD"), &author, &committer, msg, &commit_tree, &[])
+                        .unwrap();
+                } else {
+                    panic!("{:?}", e);
+                }
+            } else {
+                let head_ref = repo.head().unwrap();
+                let head_commit = head_ref.peel_to_commit().unwrap();
+                repo.commit(
+                    Some("HEAD"),
+                    &author,
+                    &committer,
+                    msg,
+                    &commit_tree,
+                    &[&head_commit],
+                )
+                .unwrap();
+            };
+
+            Ok(())
+        };
+
+        if Repository::open(path).is_err() {
+            let _ = Repository::init(path);
+        }
+        let mut repo = Repository::open(path).unwrap();
+        let _ = inner(&mut repo);
+    }
+
+    #[test]
+    fn test_git_write_read_works() {
+        const PATH: &str = "/tmp/librepges/test_git_write_read_works";
+
+        write_file_util(PATH);
+        let resp = read_file(PATH, "README.txt").unwrap();
+        assert_eq!(resp.filename, "README.txt");
+        assert_eq!(resp.content.bytes(), FILE_CONTENT.as_bytes());
+        assert_eq!(resp.mime.first().unwrap(), "text/plain");
+
+        let resp = read_preview_file(PATH, "master", "README.txt").unwrap();
+        assert_eq!(resp.filename, "README.txt");
+        assert_eq!(resp.content.bytes(), FILE_CONTENT.as_bytes());
+        assert_eq!(resp.mime.first().unwrap(), "text/plain");
+    }
+}
+
+
+ \ No newline at end of file diff --git a/src/pages/main.rs.html b/src/pages/main.rs.html index b96ab71..1e495d7 100644 --- a/src/pages/main.rs.html +++ b/src/pages/main.rs.html @@ -107,6 +107,75 @@ 101 102 103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172
/*
  * Copyright (C) 2022  Aravinth Manivannan <realaravinth@batsense.net>
  *
@@ -124,24 +193,32 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
 use std::env;
-use std::sync::Arc;
 
+use actix_identity::{CookieIdentityPolicy, IdentityService};
 use actix_web::{
     error::InternalError, http::StatusCode, middleware as actix_middleware, web::Data as WebData,
     web::JsonConfig, App, HttpServer,
 };
+use clap::{Parser, Subcommand};
 use log::info;
 
+mod api;
 mod ctx;
+mod db;
 mod deploy;
 mod errors;
+mod git;
 mod meta;
 mod page;
+mod preview;
 mod routes;
+mod serve;
 mod settings;
 #[cfg(test)]
 mod tests;
+mod utils;
 
+use ctx::Ctx;
 pub use routes::ROUTES as V1_API_ROUTES;
 pub use settings::Settings;
 
@@ -153,30 +230,77 @@
 pub const PKG_DESCRIPTION: &str = env!("CARGO_PKG_DESCRIPTION");
 pub const PKG_HOMEPAGE: &str = env!("CARGO_PKG_HOMEPAGE");
 
-pub type AppCtx = WebData<Arc<ctx::Ctx>>;
+pub type AppCtx = WebData<ctx::ArcCtx>;
+
+//#[cfg(not(tarpaulin_include))]
+//#[actix_web::main]
+//async fn main() -> std::io::Result<()> {
+//    {
+//        const LOG_VAR: &str = "RUST_LOG";
+//        if env::var(LOG_VAR).is_err() {
+//            env::set_var("RUST_LOG", "info");
+//        }
+//    }
+//
+//    let settings = Settings::new().unwrap();
+//    let ctx = WebData::new(ctx::Ctx::new(settings.clone()));
+//
+//    pretty_env_logger::init();
+//
+//    info!(
+//        "{}: {}.\nFor more information, see: {}\nBuild info:\nVersion: {} commit: {}",
+//        PKG_NAME, PKG_DESCRIPTION, PKG_HOMEPAGE, VERSION, GIT_COMMIT_HASH
+//    );
+//
+//
+//}
+
+#[derive(Parser)]
+#[clap(author, version, about, long_about = None)]
+struct Cli {
+    #[clap(subcommand)]
+    command: Commands,
+}
+
+#[derive(Subcommand)]
+enum Commands {
+    /// run database migrations
+    Migrate,
+
+    /// run server
+    Serve,
+}
 
-#[cfg(not(tarpaulin_include))]
 #[actix_web::main]
+#[cfg(not(tarpaulin_include))]
 async fn main() -> std::io::Result<()> {
-    {
-        const LOG_VAR: &str = "RUST_LOG";
-        if env::var(LOG_VAR).is_err() {
-            env::set_var("RUST_LOG", "info");
-        }
-    }
-
-    let settings = Settings::new().unwrap();
-    let ctx = WebData::new(ctx::Ctx::new(settings.clone()));
+    env::set_var("RUST_LOG", "info");
 
     pretty_env_logger::init();
 
+    let cli = Cli::parse();
+
     info!(
         "{}: {}.\nFor more information, see: {}\nBuild info:\nVersion: {} commit: {}",
         PKG_NAME, PKG_DESCRIPTION, PKG_HOMEPAGE, VERSION, GIT_COMMIT_HASH
     );
 
-    info!("Starting server on: http://{}", settings.server.get_ip());
+    let settings = Settings::new().unwrap();
+    settings.init();
+    let ctx = Ctx::new(settings.clone()).await;
+    let ctx = actix_web::web::Data::new(ctx);
 
+    match &cli.command {
+        Commands::Migrate => ctx.db.migrate().await.unwrap(),
+        Commands::Serve => serve(settings, ctx).await.unwrap(),
+    }
+    Ok(())
+}
+
+async fn serve(settings: Settings, ctx: AppCtx) -> std::io::Result<()> {
+    let ip = settings.server.get_ip();
+
+    info!("Starting server on: http://{}", ip);
     HttpServer::new(move || {
         App::new()
             .wrap(actix_middleware::Logger::default())
@@ -193,7 +317,7 @@
             .configure(services)
     })
     .workers(settings.server.workers.unwrap_or_else(num_cpus::get))
-    .bind(settings.server.get_ip())
+    .bind(ip)
     .unwrap()
     .run()
     .await
@@ -207,6 +331,20 @@
     })
 }
 
+#[cfg(not(tarpaulin_include))]
+pub fn get_identity_service(settings: &Settings) -> IdentityService<CookieIdentityPolicy> {
+    let cookie_secret = &settings.server.cookie_secret;
+    IdentityService::new(
+        CookieIdentityPolicy::new(cookie_secret.as_bytes())
+            .path("/")
+            .name("Authorization")
+            //TODO change cookie age
+            .max_age_secs(216000)
+            .domain(&settings.server.domain)
+            .secure(false),
+    )
+}
+
 pub fn services(cfg: &mut actix_web::web::ServiceConfig) {
     routes::services(cfg);
 }
diff --git a/src/pages/meta.rs.html b/src/pages/meta.rs.html
index 3b3d05a..1515d19 100644
--- a/src/pages/meta.rs.html
+++ b/src/pages/meta.rs.html
@@ -79,6 +79,43 @@
 73
 74
 75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
 
/*
  * Copyright (C) 2022  Aravinth Manivannan <realaravinth@batsense.net>
  *
@@ -123,8 +160,8 @@
     }
 }
 
-/// emmits build details of the bninary
-#[my_codegen::get(path = "crate::V1_API_ROUTES.meta.build_details")]
+/// emits build details of the binary
+#[actix_web_codegen_const_routes::get(path = "crate::V1_API_ROUTES.meta.build_details")]
 async fn build_details(ctx: AppCtx) -> impl Responder {
     let build = BuildDetails {
         version: VERSION,
@@ -134,8 +171,25 @@
     HttpResponse::Ok().json(build)
 }
 
+#[derive(Clone, Debug, Deserialize, Serialize)]
+/// Health check return datatype
+pub struct Health {
+    db: bool,
+}
+
+/// checks all components of the system
+#[actix_web_codegen_const_routes::get(path = "crate::V1_API_ROUTES.meta.health")]
+async fn health(ctx: crate::AppCtx) -> impl Responder {
+    let res = Health {
+        db: ctx.db.ping().await,
+    };
+
+    HttpResponse::Ok().json(res)
+}
+
 pub fn services(cfg: &mut web::ServiceConfig) {
     cfg.service(build_details);
+    cfg.service(health);
 }
 
 #[cfg(test)]
@@ -146,13 +200,33 @@
 
     #[actix_rt::test]
     async fn build_details_works() {
-        let (_dir, ctx) = tests::get_data().await;
+        let (_dir, ctx) = tests::get_ctx().await;
         println!("[log] test configuration {:#?}", ctx.settings);
         let app = get_app!(ctx).await;
 
         let resp = get_request!(app, V1_API_ROUTES.meta.build_details);
         check_status!(resp, StatusCode::OK);
     }
+
+    #[actix_rt::test]
+    async fn health_works() {
+        use actix_web::test;
+
+        let (_dir, ctx) = tests::get_ctx().await;
+        let app = get_app!(ctx).await;
+
+        let resp = test::call_service(
+            &app,
+            test::TestRequest::get()
+                .uri(crate::V1_API_ROUTES.meta.health)
+                .to_request(),
+        )
+        .await;
+        assert_eq!(resp.status(), StatusCode::OK);
+
+        let health_resp: super::Health = test::read_body_json(resp).await;
+        assert!(health_resp.db);
+    }
 }
 
diff --git a/src/pages/page.rs.html b/src/pages/page.rs.html index d673d7a..3bb3cd5 100644 --- a/src/pages/page.rs.html +++ b/src/pages/page.rs.html @@ -288,6 +288,10 @@ 282 283 284 +285 +286 +287 +288
/*
  * Copyright (C) 2022  Aravinth Manivannan <realaravinth@batsense.net>
  *
@@ -305,12 +309,9 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
 
-use git2::{
-    build::CheckoutBuilder, Branch, BranchType, Direction, ObjectType, Oid, Remote, Repository,
-};
+use git2::{build::CheckoutBuilder, BranchType, Direction, Oid, Remote, Repository};
 #[cfg(not(test))]
 use log::info;
-use std::io::{self, Write};
 
 #[cfg(test)]
 use std::println as info;
@@ -319,12 +320,13 @@
 
 use crate::errors::*;
 
-#[derive(Debug, Clone, PartialEq, Deserialize)]
+#[derive(Debug, Clone, Eq, PartialEq, Deserialize)]
 pub struct Page {
     pub secret: String,
     pub repo: String,
     pub path: String,
     pub branch: String,
+    pub domain: String,
 }
 
 impl Page {
@@ -365,10 +367,14 @@
         Ok(())
     }
 
-    fn fetch<'a>(&self, repo: &'a git2::Repository) -> ServiceResult<git2::AnnotatedCommit<'a>> {
+    fn fetch<'a>(
+        &self,
+        repo: &'a git2::Repository,
+        branch: &str,
+    ) -> ServiceResult<git2::AnnotatedCommit<'a>> {
         let mut remote = repo.find_remote("origin")?;
         log::info!("Fetching {} for repo", remote.name().unwrap());
-        remote.fetch(&[&self.branch], None, None)?;
+        remote.fetch(&[branch], None, None)?;
         let fetch_head = repo.find_reference("FETCH_HEAD")?;
         Ok(repo.reference_to_annotated_commit(&fetch_head)?)
     }
@@ -377,6 +383,7 @@
         &self,
         repo: &'a Repository,
         fetch_commit: git2::AnnotatedCommit<'a>,
+        branch: &str,
     ) -> ServiceResult<()> {
         // 1. do a merge analysis
         let analysis = repo.merge_analysis(&[&fetch_commit])?;
@@ -386,7 +393,7 @@
             //log::debug!("Doing a fast forward");
             log::debug!("Doing a fast forward");
             // do a fast forward
-            let refname = format!("refs/heads/{}", &self.branch);
+            let refname = format!("refs/heads/{}", branch);
             match repo.find_reference(&refname) {
                 Ok(mut r) => {
                     log::debug!("fast forwarding");
@@ -401,7 +408,7 @@
                         &refname,
                         fetch_commit.id(),
                         true,
-                        &format!("Setting {} to {}", &self.branch, fetch_commit.id()),
+                        &format!("Setting {} to {}", branch, fetch_commit.id()),
                     )
                     .unwrap();
                     repo.set_head(&refname).unwrap();
@@ -420,7 +427,7 @@
             let head_commit = repo
                 .reference_to_annotated_commit(&repo.head().unwrap())
                 .unwrap();
-            Self::normal_merge(&repo, &head_commit, &fetch_commit).unwrap();
+            Self::normal_merge(repo, &head_commit, &fetch_commit).unwrap();
         } else {
             log::info!("Nothing to do...");
         }
@@ -501,10 +508,10 @@
         Ok(())
     }
 
-    pub fn update(&self) -> ServiceResult<()> {
+    pub fn update(&self, branch: &str) -> ServiceResult<()> {
         let repo = self.create_repo()?;
-        let fetch_commit = self.fetch(&repo)?;
-        self.merge(&repo, fetch_commit)?;
+        let fetch_commit = self.fetch(&repo, branch)?;
+        self.merge(&repo, fetch_commit, branch)?;
         Ok(())
     }
 
@@ -544,6 +551,7 @@
             repo: "https://github.com/mcaptcha/website".to_owned(),
             path: tmp_dir.to_str().unwrap().to_string(),
             branch: "gh-pages".to_string(),
+            domain: "mcaptcha.org".into(),
         };
 
         assert!(
@@ -562,7 +570,7 @@
         let gh_pages = page.get_deploy_branch(&repo).unwrap();
         assert_eq!(gh_pages, "gh-pages");
         page.branch = "master".to_string();
-        page.update().unwrap();
+        page.update(&page.branch).unwrap();
         let master = page.get_deploy_branch(&repo).unwrap();
         assert_eq!(master, "master");
 
diff --git a/src/pages/preview.rs.html b/src/pages/preview.rs.html
new file mode 100644
index 0000000..f8226a0
--- /dev/null
+++ b/src/pages/preview.rs.html
@@ -0,0 +1,241 @@
+preview.rs - source
+    
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+
/*
+ * Copyright (C) 2022  Aravinth Manivannan <realaravinth@batsense.net>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+use crate::AppCtx;
+
+pub struct Preview<'a> {
+    pub base: &'a str,
+    pub delimiter: &'static str,
+    pub prefix: &'static str,
+}
+
+impl<'a> Preview<'a> {
+    pub fn new(ctx: &'a AppCtx) -> Self {
+        Self {
+            base: &ctx.settings.server.domain,
+            delimiter: ".",
+            prefix: "deploy-preview-",
+        }
+    }
+    pub fn get_name(&self, preview_number: usize) -> String {
+        format!(
+            "{}{preview_number}{}{}",
+            self.prefix, self.delimiter, self.base
+        )
+    }
+
+    pub fn extract(&self, hostname: &'a str) -> Option<&'a str> {
+        if !hostname.contains(&self.delimiter)
+            || !hostname.contains(&self.prefix)
+            || !hostname.contains(&self.base)
+        {
+            return None;
+        }
+
+        let d = format!("{}{}", self.delimiter, self.base);
+
+        if hostname.split(&d).count() == 2 {
+            return hostname.split(&d).next();
+        }
+        None
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    #[test]
+    fn preview_extract_generate_works() {
+        const BASE_DOMAIN: &str = "librepages.site";
+        const PREVIEW_DELIMITER: &str = ".";
+        const PREVIEW_PREFIX: &str = "deploy-preview-";
+        const PREVIEW_NUMBER: usize = 1666;
+
+        let preview_hostname =
+            format!("{PREVIEW_PREFIX}{PREVIEW_NUMBER}{PREVIEW_DELIMITER}{BASE_DOMAIN}");
+
+        let bad_hostname = BASE_DOMAIN.to_string();
+
+        let extractor = Preview {
+            base: BASE_DOMAIN,
+            prefix: PREVIEW_PREFIX,
+            delimiter: PREVIEW_DELIMITER,
+        };
+
+        assert_eq!(extractor.get_name(PREVIEW_NUMBER), preview_hostname);
+
+        assert_eq!(extractor.extract(&bad_hostname), None);
+
+        assert_eq!(
+            extractor.extract(&format!(
+                "{PREVIEW_PREFIX}{PREVIEW_NUMBER}{PREVIEW_DELIMITER}no_base_domain"
+            )),
+            None
+        );
+
+        assert_eq!(
+            extractor.extract(&format!(
+                "{PREVIEW_PREFIX}{PREVIEW_NUMBER}no-delimiter{BASE_DOMAIN}"
+            )),
+            None
+        );
+
+        assert_eq!(
+            extractor.extract(&format!(
+                "{PREVIEW_PREFIX}{PREVIEW_NUMBER}no-delimiter{BASE_DOMAIN}"
+            )),
+            None
+        );
+
+        assert_eq!(
+            extractor.extract(&format!(
+                "noprefix{PREVIEW_NUMBER}{PREVIEW_DELIMITER}{BASE_DOMAIN}"
+            )),
+            None
+        );
+
+        assert_eq!(
+            extractor.extract(&preview_hostname),
+            Some(format!("{PREVIEW_PREFIX}{PREVIEW_NUMBER}").as_str())
+        );
+    }
+}
+
+
+ \ No newline at end of file diff --git a/src/pages/routes.rs.html b/src/pages/routes.rs.html index 27825d6..3a21304 100644 --- a/src/pages/routes.rs.html +++ b/src/pages/routes.rs.html @@ -21,30 +21,6 @@ 15 16 17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41
/*
  * Copyright (C) 2022  Aravinth Manivannan <realaravinth@batsense.net>
  *
@@ -61,31 +37,7 @@
  * You should have received a copy of the GNU Affero General Public License
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
-use actix_web::web;
-
-use crate::deploy::routes::Deploy;
-use crate::meta::routes::Meta;
-
-pub const ROUTES: Routes = Routes::new();
-
-pub struct Routes {
-    pub meta: Meta,
-    pub deploy: Deploy,
-}
-
-impl Routes {
-    pub const fn new() -> Self {
-        Self {
-            meta: Meta::new(),
-            deploy: Deploy::new(),
-        }
-    }
-}
-
-pub fn services(cfg: &mut web::ServiceConfig) {
-    crate::meta::services(cfg);
-    crate::deploy::services(cfg);
-}
+pub use crate::api::v1::{routes::ROUTES, services};
 
\ No newline at end of file diff --git a/src/pages/serve.rs.html b/src/pages/serve.rs.html new file mode 100644 index 0000000..87c92c6 --- /dev/null +++ b/src/pages/serve.rs.html @@ -0,0 +1,241 @@ +serve.rs - source +
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+
/*
+ * Copyright (C) 2022  Aravinth Manivannan <realaravinth@batsense.net>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+use actix_web::{http::header::ContentType, web, HttpRequest, HttpResponse, Responder};
+
+use crate::errors::*;
+use crate::page::Page;
+use crate::AppCtx;
+
+pub mod routes {
+    pub struct Serve {
+        pub catch_all: &'static str,
+    }
+
+    impl Serve {
+        pub const fn new() -> Self {
+            Self {
+                catch_all: "/{path:.*}",
+            }
+        }
+    }
+}
+
+pub fn find_page<'a>(domain: &str, ctx: &'a AppCtx) -> Option<&'a Page> {
+    log::info!("looking for {domain}");
+    for page in ctx.settings.pages.iter() {
+        log::debug!("configured domains: {}", page.domain);
+        log::debug!("{}", page.domain.trim() == domain.trim());
+        if page.domain.trim() == domain.trim() {
+            log::debug!("found configured domains: {}", page.domain);
+            return Some(page);
+        }
+    }
+    None
+}
+
+#[actix_web_codegen_const_routes::get(path = "crate::V1_API_ROUTES.serve.catch_all")]
+async fn index(req: HttpRequest, ctx: AppCtx) -> ServiceResult<impl Responder> {
+    let c = req.connection_info();
+    let mut host = c.host();
+    if host.contains(':') {
+        host = host.split(':').next().unwrap();
+    }
+
+    if host == ctx.settings.server.domain || host == "localhost" {
+        return Ok(HttpResponse::Ok()
+            .content_type(ContentType::html())
+            .body("Welcome to Librepages!"));
+    }
+
+    if host.contains(&ctx.settings.server.domain) {
+        let extractor = crate::preview::Preview::new(&ctx);
+        if let Some(preview_branch) = extractor.extract(host) {
+            unimplemented!(
+                "map a local subdomain on settings.server.domain and use it to fetch page"
+            );
+            let res = match find_page(host, &ctx) {
+                Some(page) => {
+                    log::debug!("Page found");
+                    let content = crate::git::read_preview_file(
+                        &page.path,
+                        preview_branch,
+                        req.uri().path(),
+                    )?;
+                    let mime = if let Some(mime) = content.mime.first_raw() {
+                        mime
+                    } else {
+                        "text/html; charset=utf-8"
+                    };
+
+                    Ok(HttpResponse::Ok()
+                        //.content_type(ContentType::html())
+                        .content_type(mime)
+                        .body(content.content.bytes()))
+                }
+                None => Err(ServiceError::WebsiteNotFound),
+            };
+            return res;
+        }
+    }
+
+    match find_page(host, &ctx) {
+        Some(page) => {
+            log::debug!("Page found");
+            let content = crate::git::read_file(&page.path, req.uri().path())?;
+            let mime = if let Some(mime) = content.mime.first_raw() {
+                mime
+            } else {
+                "text/html; charset=utf-8"
+            };
+
+            Ok(HttpResponse::Ok()
+                //.content_type(ContentType::html())
+                .content_type(mime)
+                .body(content.content.bytes()))
+        }
+        None => Err(ServiceError::WebsiteNotFound),
+    }
+}
+
+pub fn services(cfg: &mut web::ServiceConfig) {
+    cfg.service(index);
+}
+
+
+ \ No newline at end of file diff --git a/src/pages/settings.rs.html b/src/pages/settings.rs.html index 7dfa5f7..09651dd 100644 --- a/src/pages/settings.rs.html +++ b/src/pages/settings.rs.html @@ -140,6 +140,79 @@ 134 135 136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209
/*
  * Copyright (C) 2022  Aravinth Manivannan <realaravinth@batsense.net>
  *
@@ -160,7 +233,8 @@
 use std::path::Path;
 use std::sync::Arc;
 
-use config::{Config, Environment, File};
+use config::{Config, ConfigError, Environment, File};
+use derive_more::Display;
 #[cfg(not(test))]
 use log::{error, warn};
 
@@ -168,6 +242,7 @@
 use std::{println as warn, println as error};
 
 use serde::Deserialize;
+use serde::Serialize;
 use url::Url;
 
 use crate::errors::*;
@@ -178,6 +253,8 @@
     pub port: u32,
     pub ip: String,
     pub workers: Option<usize>,
+    pub cookie_secret: String,
+    pub domain: String,
 }
 
 impl Server {
@@ -187,11 +264,40 @@
     }
 }
 
+#[derive(Deserialize, Serialize, Display, Eq, PartialEq, Clone, Debug)]
+#[serde(rename_all = "lowercase")]
+pub enum DBType {
+    #[display(fmt = "postgres")]
+    Postgres,
+    //    #[display(fmt = "maria")]
+    //    Maria,
+}
+
+impl DBType {
+    fn from_url(url: &Url) -> Result<Self, ConfigError> {
+        match url.scheme() {
+            //        "mysql" => Ok(Self::Maria),
+            "postgres" => Ok(Self::Postgres),
+            _ => Err(ConfigError::Message("Unknown database type".into())),
+        }
+    }
+}
+
+#[derive(Debug, Clone, Deserialize)]
+pub struct Database {
+    pub url: String,
+    pub pool: u32,
+    pub database_type: DBType,
+}
+
 #[derive(Debug, Clone, Deserialize)]
 pub struct Settings {
+    pub allow_registration: bool,
+    pub debug: bool,
     pub server: Server,
     pub source_code: String,
     pub pages: Vec<Arc<Page>>,
+    pub database: Database,
 }
 
 #[cfg(not(tarpaulin_include))]
@@ -225,16 +331,56 @@
 
         s = s.add_source(Environment::with_prefix("PAGES").separator("__"));
 
-        let mut settings = s.build()?.try_deserialize::<Settings>()?;
-        settings.check_url();
         match env::var("PORT") {
             Ok(val) => {
-                settings.server.port = val.parse().unwrap();
+                s = s.set_override("server.port", val).unwrap();
+                //settings.server.port = val.parse().unwrap();
             }
             Err(e) => warn!("couldn't interpret PORT: {}", e),
         }
 
-        settings.init();
+        if let Ok(val) = env::var("DATABASE_URL") {
+            //        match env::var("DATABASE_URL") {
+            //           Ok(val) => {
+            let url = Url::parse(&val).expect("couldn't parse Database URL");
+            s = s.set_override("database.url", url.to_string()).unwrap();
+            let database_type = DBType::from_url(&url).unwrap();
+            s = s
+                .set_override("database.database_type", database_type.to_string())
+                .unwrap();
+        }
+
+        //    Err(_e) => {
+        //    }
+
+        let intermediate_config = s.build_cloned().unwrap();
+
+        s = s
+            .set_override(
+                "database.url",
+                format!(
+                    r"postgres://{}:{}@{}:{}/{}",
+                    intermediate_config
+                        .get::<String>("database.username")
+                        .expect("Couldn't access database username"),
+                    intermediate_config
+                        .get::<String>("database.password")
+                        .expect("Couldn't access database password"),
+                    intermediate_config
+                        .get::<String>("database.hostname")
+                        .expect("Couldn't access database hostname"),
+                    intermediate_config
+                        .get::<String>("database.port")
+                        .expect("Couldn't access database port"),
+                    intermediate_config
+                        .get::<String>("database.name")
+                        .expect("Couldn't access database name")
+                ),
+            )
+            .expect("Couldn't set database url");
+
+        let settings = s.build()?.try_deserialize::<Settings>()?;
+        settings.check_url();
 
         Ok(settings)
     }
@@ -265,7 +411,7 @@
                     error!("{}", ServiceError::PathTaken(page.clone(), page2.clone()));
                 }
             }
-            if let Err(e) = page.update() {
+            if let Err(e) = page.update(&page.branch) {
                 error!("{e}");
             }
         }
diff --git a/src/pages/utils.rs.html b/src/pages/utils.rs.html
new file mode 100644
index 0000000..e1dda1d
--- /dev/null
+++ b/src/pages/utils.rs.html
@@ -0,0 +1,67 @@
+utils.rs - source
+    
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+
/*
+ * Copyright (C) 2022  Aravinth Manivannan <realaravinth@batsense.net>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+/// Get random string of specific length
+pub(crate) fn get_random(len: usize) -> String {
+    use rand::{distributions::Alphanumeric, rngs::ThreadRng, thread_rng, Rng};
+    use std::iter;
+
+    let mut rng: ThreadRng = thread_rng();
+
+    iter::repeat(())
+        .map(|()| rng.sample(Alphanumeric))
+        .map(char::from)
+        .take(len)
+        .collect::<String>()
+}
+
+
+ \ No newline at end of file