From 9687116063f3a0679ec697bc0cc6a982f05d5274 Mon Sep 17 00:00:00 2001
From: Philippe Loctaux
Date: Sun, 26 Mar 2023 19:25:50 +0200
Subject: [PATCH] ezidam: refactor jwt and refresh token generate in "tokens"
mod
---
.../queries/keys/revoke_all_except_one.sql | 6 ++
.../queries/refresh_tokens/revoke_all.sql | 5 ++
crates/database/sqlx-data.json | 20 +++++
crates/database/src/tables/keys.rs | 13 +++
crates/database/src/tables/refresh_tokens.rs | 9 +++
crates/ezidam/src/guards/jwt.rs | 26 +++---
crates/ezidam/src/guards/refresh_token.rs | 3 +-
crates/ezidam/src/lib.rs | 1 +
crates/ezidam/src/routes/oauth/redirect.rs | 60 ++++----------
crates/ezidam/src/routes/root.rs | 5 +-
crates/ezidam/src/tokens.rs | 79 +++++++++++++++++++
crates/jwt/src/database.rs | 7 ++
crates/refresh_tokens/src/database.rs | 4 +
13 files changed, 179 insertions(+), 59 deletions(-)
create mode 100644 crates/database/queries/keys/revoke_all_except_one.sql
create mode 100644 crates/database/queries/refresh_tokens/revoke_all.sql
create mode 100644 crates/ezidam/src/tokens.rs
diff --git a/crates/database/queries/keys/revoke_all_except_one.sql b/crates/database/queries/keys/revoke_all_except_one.sql
new file mode 100644
index 0000000..0c8f96d
--- /dev/null
+++ b/crates/database/queries/keys/revoke_all_except_one.sql
@@ -0,0 +1,6 @@
+update keys
+
+set revoked_at = CURRENT_TIMESTAMP
+
+where revoked_at is null
+ and id is not (?)
diff --git a/crates/database/queries/refresh_tokens/revoke_all.sql b/crates/database/queries/refresh_tokens/revoke_all.sql
new file mode 100644
index 0000000..ad55e35
--- /dev/null
+++ b/crates/database/queries/refresh_tokens/revoke_all.sql
@@ -0,0 +1,5 @@
+update refresh_tokens
+
+set revoked_at = CURRENT_TIMESTAMP
+
+where revoked_at is null
\ No newline at end of file
diff --git a/crates/database/sqlx-data.json b/crates/database/sqlx-data.json
index f979ba4..40bc2bc 100644
--- a/crates/database/sqlx-data.json
+++ b/crates/database/sqlx-data.json
@@ -338,6 +338,16 @@
},
"query": "select id,\n created_at as \"created_at: DateTime\",\n updated_at as \"updated_at: DateTime\",\n is_admin as \"is_admin: bool\",\n username,\n name,\n email,\n password,\n password_recover,\n paper_key,\n is_archived as \"is_archived: bool\"\nfrom users\n\nwhere email is (?)\n"
},
+ "7b7f2430b2a719b3d5ce504c0a9302731b3ff82da99ba7771c2728d88aee642a": {
+ "describe": {
+ "columns": [],
+ "nullable": [],
+ "parameters": {
+ "Right": 1
+ }
+ },
+ "query": "update keys\n\nset revoked_at = CURRENT_TIMESTAMP\n\nwhere revoked_at is null\n and id is not (?)\n"
+ },
"7f26b73408318040f94fb6574d5cc25482cef1a57ba4c467fa0bc0fdf25bf39c": {
"describe": {
"columns": [],
@@ -358,6 +368,16 @@
},
"query": "update settings\n\nset url = ?\n\nwhere id is 0\n"
},
+ "9f1885c4786f73335b4d614f562bb7cad49c91bfe7f084d8c25c6c571673ab90": {
+ "describe": {
+ "columns": [],
+ "nullable": [],
+ "parameters": {
+ "Right": 0
+ }
+ },
+ "query": "update refresh_tokens\n\nset revoked_at = CURRENT_TIMESTAMP\n\nwhere revoked_at is null"
+ },
"a55b17a3a70e6445517f19536220f0dafc78a0e8b69221dee4715f84841839da": {
"describe": {
"columns": [],
diff --git a/crates/database/src/tables/keys.rs b/crates/database/src/tables/keys.rs
index fe664fa..3feb7fa 100644
--- a/crates/database/src/tables/keys.rs
+++ b/crates/database/src/tables/keys.rs
@@ -63,4 +63,17 @@ impl Keys {
}
}
}
+
+ pub async fn revoke_all_except_one(
+ conn: impl SqliteExecutor<'_>,
+ exception: &str,
+ ) -> Result