From 827bba041a4b736320286f2f9c3d575adca7b06c Mon Sep 17 00:00:00 2001
From: Philippe Loctaux
Date: Sat, 18 Mar 2023 00:40:11 +0100
Subject: [PATCH] ezidam: oauth: redirect: get and check code, get user info,
mark code as used, display html template
---
crates/authorization_codes/src/database.rs | 17 ++-
crates/authorization_codes/src/lib.rs | 11 +-
.../queries/authorization_codes/get_one.sql | 9 ++
.../queries/authorization_codes/use_code.sql | 5 +
.../users/get_one_from_authorization_code.sql | 16 +++
crates/database/sqlx-data.json | 136 ++++++++++++++++++
.../src/tables/authorization_codes.rs | 17 +++
crates/database/src/tables/users.rs | 14 ++
crates/ezidam/src/page.rs | 10 +-
crates/ezidam/src/routes/oauth.rs | 9 ++
crates/ezidam/src/routes/oauth/authorize.rs | 4 +-
crates/ezidam/src/routes/oauth/redirect.rs | 56 +++++++-
.../templates/pages/oauth/redirect.html.tera | 10 +-
crates/users/src/database.rs | 9 ++
crates/users/src/lib.rs | 6 +
15 files changed, 310 insertions(+), 19 deletions(-)
create mode 100644 crates/database/queries/authorization_codes/get_one.sql
create mode 100644 crates/database/queries/authorization_codes/use_code.sql
create mode 100644 crates/database/queries/users/get_one_from_authorization_code.sql
diff --git a/crates/authorization_codes/src/database.rs b/crates/authorization_codes/src/database.rs
index 836ef0f..0a86cd2 100644
--- a/crates/authorization_codes/src/database.rs
+++ b/crates/authorization_codes/src/database.rs
@@ -1,11 +1,11 @@
use crate::error::Error;
-use crate::AuthorizationCodes;
+use crate::AuthorizationCode;
use chrono::{Duration, Utc};
use database::sqlx::SqliteExecutor;
use database::AuthorizationCodes as DatabaseAuthorizationCodes;
use id::{AppID, UserID};
-impl From for AuthorizationCodes {
+impl From for AuthorizationCode {
fn from(db: DatabaseAuthorizationCodes) -> Self {
Self {
// Info
@@ -21,7 +21,7 @@ impl From for AuthorizationCodes {
}
}
-impl AuthorizationCodes {
+impl AuthorizationCode {
pub async fn insert(
conn: impl SqliteExecutor<'_>,
code: &str,
@@ -39,4 +39,15 @@ impl AuthorizationCodes {
)
.await?)
}
+
+ pub async fn get_one(conn: impl SqliteExecutor<'_>, code: &str) -> Result
diff --git a/crates/users/src/database.rs b/crates/users/src/database.rs
index e25695c..929573a 100644
--- a/crates/users/src/database.rs
+++ b/crates/users/src/database.rs
@@ -87,4 +87,13 @@ impl User {
// Get user from username
Self::get_by_username(conn, login).await
}
+
+ pub async fn get_one_from_authorization_code(
+ conn: impl SqliteExecutor<'_>,
+ code: &str,
+ ) -> Result
, Error> {
+ Ok(DatabaseUsers::get_one_from_authorization_code(conn, code)
+ .await?
+ .map(Self::from))
+ }
}
diff --git a/crates/users/src/lib.rs b/crates/users/src/lib.rs
index 52ac11c..1ad11ec 100644
--- a/crates/users/src/lib.rs
+++ b/crates/users/src/lib.rs
@@ -31,4 +31,10 @@ impl User {
pub fn password_hashed(&self) -> Option<&str> {
self.password.as_deref()
}
+ pub fn username(&self) -> &str {
+ &self.username
+ }
+ pub fn name(&self) -> Option<&str> {
+ self.name.as_deref()
+ }
}