From c9ef821d2b374525616cc57ae021f6a2814576fe Mon Sep 17 00:00:00 2001
From: Philippe Loctaux
Date: Sun, 19 Mar 2023 00:25:35 +0100
Subject: [PATCH] ezidam: request guards: jwt admin, jwt user, verify jwt
---
crates/ezidam/src/guards.rs | 2 +
crates/ezidam/src/guards/jwt.rs | 126 ++++++++++++++++++++++
crates/ezidam/src/guards/jwt/admin.rs | 20 ++++
crates/ezidam/src/guards/jwt/user.rs | 20 ++++
crates/ezidam/src/guards/refresh_token.rs | 2 +-
crates/ezidam/src/routes/oauth.rs | 4 +-
crates/ezidam/src/routes/root.rs | 29 ++++-
crates/jwt/src/error.rs | 3 +
crates/jwt/src/key/private.rs | 19 +++-
crates/jwt/src/lib.rs | 1 +
10 files changed, 219 insertions(+), 7 deletions(-)
create mode 100644 crates/ezidam/src/guards/jwt.rs
create mode 100644 crates/ezidam/src/guards/jwt/admin.rs
create mode 100644 crates/ezidam/src/guards/jwt/user.rs
diff --git a/crates/ezidam/src/guards.rs b/crates/ezidam/src/guards.rs
index d59cbb2..f4cbe90 100644
--- a/crates/ezidam/src/guards.rs
+++ b/crates/ezidam/src/guards.rs
@@ -1,7 +1,9 @@
mod completed_setup;
+mod jwt;
mod need_setup;
mod refresh_token;
+pub use self::jwt::*;
pub use completed_setup::CompletedSetup;
pub use need_setup::NeedSetup;
pub use refresh_token::RefreshToken;
diff --git a/crates/ezidam/src/guards/jwt.rs b/crates/ezidam/src/guards/jwt.rs
new file mode 100644
index 0000000..12fb4d8
--- /dev/null
+++ b/crates/ezidam/src/guards/jwt.rs
@@ -0,0 +1,126 @@
+use crate::database::Database;
+use jwt::database::Key;
+use jwt::{JwtClaims, PrivateKey};
+use rocket::http::Status;
+use rocket::request::Outcome;
+use rocket::tokio::task;
+use rocket::Request;
+
+mod admin;
+mod user;
+
+pub use admin::JwtAdmin;
+use id::KeyID;
+pub use user::JwtUser;
+
+#[derive(Debug)]
+pub enum Error {
+ GetDatabase,
+ Keys(jwt::Error),
+ JwtParsing(jwt::Error),
+ NoSigningKey,
+ NonExistentKey(String),
+ RevokedKey(KeyID),
+ ImportKey(jwt::Error),
+ JwtValidation(jwt::Error),
+ BlockingTask(String),
+}
+
+pub async fn get_jwt(
+ request: &Request<'_>,
+ get_admin: Option,
+) -> Result