From c000adcf06b8764276aa6b35bb080d1183cb6a54 Mon Sep 17 00:00:00 2001 From: Paul Date: Mon, 25 Jan 2021 12:56:05 +0000 Subject: [PATCH] Add option struct and README --- README.md | 1 + Rocket.toml | 2 ++ banner.png | Bin 0 -> 6052 bytes examples/main.rs | 5 ++++- src/auth.rs | 6 ++++-- src/lib.rs | 1 + src/options.rs | 27 +++++++++++++++++++++++++++ src/routes.rs | 6 ++++-- 8 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 README.md create mode 100644 Rocket.toml create mode 100644 banner.png create mode 100644 src/options.rs diff --git a/README.md b/README.md new file mode 100644 index 0000000..94f3def --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +![rAuth](./banner.png) diff --git a/Rocket.toml b/Rocket.toml new file mode 100644 index 0000000..95a9c13 --- /dev/null +++ b/Rocket.toml @@ -0,0 +1,2 @@ +[debug] +port = 11111 \ No newline at end of file diff --git a/banner.png b/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..4a4d343b18ae7d141355b87090d7a3dbdb7299d4 GIT binary patch literal 6052 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 literal 0 HcmV?d00001 diff --git a/examples/main.rs b/examples/main.rs index 5659a02..da790b7 100644 --- a/examples/main.rs +++ b/examples/main.rs @@ -7,8 +7,11 @@ async fn main() { let client = Client::with_uri_str("mongodb://localhost:27017/") .await .unwrap(); + let col = client.database("rauth").collection("accounts"); - let auth = rauth::auth::Auth::new(col); + let options = rauth::options::Options::new(); + + let auth = rauth::auth::Auth::new(col, options); rauth::routes::mount(rocket::ignite(), "/", auth) .launch() .await diff --git a/src/auth.rs b/src/auth.rs index 8221009..c046536 100644 --- a/src/auth.rs +++ b/src/auth.rs @@ -1,3 +1,4 @@ +use super::options::Options; use super::db::AccountShort; use super::util::{Error, Result}; @@ -14,6 +15,7 @@ use validator::Validate; pub struct Auth { collection: Collection, + pub options: Options } lazy_static! { @@ -61,8 +63,8 @@ pub struct Login { } impl Auth { - pub fn new(collection: Collection) -> Auth { - Auth { collection } + pub fn new(collection: Collection, options: Options) -> Auth { + Auth { collection, options } } pub async fn create_account(&self, data: Create) -> Result { diff --git a/src/lib.rs b/src/lib.rs index 5243a37..bce08fd 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -10,3 +10,4 @@ pub mod auth; pub mod db; pub mod routes; pub mod util; +pub mod options; diff --git a/src/options.rs b/src/options.rs new file mode 100644 index 0000000..69ec015 --- /dev/null +++ b/src/options.rs @@ -0,0 +1,27 @@ +pub struct Options { + pub verified_uri: String, + pub base_url: String +} + +impl Options { + pub fn new() -> Options { + Options { + verified_uri: "https://example.com".to_string(), + base_url: "https://example.com".to_string() + } + } + + pub fn verified_uri(self, verified_uri: String) -> Options { + Options { + verified_uri, + ..self + } + } + + pub fn base_url(self, base_url: String) -> Options { + Options { + base_url, + ..self + } + } +} diff --git a/src/routes.rs b/src/routes.rs index 319fa84..ed083bd 100644 --- a/src/routes.rs +++ b/src/routes.rs @@ -1,5 +1,7 @@ use super::auth::{Auth, Create, Login, Session, Verify}; + use rocket::{Rocket, State}; +use rocket::response::Redirect; use rocket_contrib::json::{Json, JsonValue}; #[post("/create", data = "")] @@ -10,9 +12,9 @@ async fn create(auth: State<'_, Auth>, data: Json) -> super::util::Resul } #[get("/verify/")] -async fn verify(auth: State<'_, Auth>, code: String) -> super::util::Result<()> { +async fn verify(auth: State<'_, Auth>, code: String) -> super::util::Result { auth.inner().verify_account(Verify { code }).await?; - unimplemented!() + Ok(Redirect::to(auth.options.verified_uri.clone())) } #[post("/login", data = "")]