aboutsummaryrefslogtreecommitdiff
path: root/src/handlers/auth.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/handlers/auth.rs')
-rw-r--r--src/handlers/auth.rs34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/handlers/auth.rs b/src/handlers/auth.rs
new file mode 100644
index 0000000..a9ac394
--- /dev/null
+++ b/src/handlers/auth.rs
@@ -0,0 +1,34 @@
+use std::collections::HashMap;
+
+use axum::{extract::Query, Extension};
+use axum_macros::debug_handler;
+use pasetors::{claims::Claims, keys::{AsymmetricKeyPair, Generate}, version4::V4};
+use uuid::Uuid;
+
+use crate::{errors::{NoneResult, ServiceError}, State};
+
+
+/**
+ * Takes in a request to create a new token with a secret key that gets printed
+ * to stdout and, if it matches, returns a valid PASETO token that can be used
+ * for future authentication
+ */
+#[debug_handler]
+pub async fn begin(Query(params): Query<HashMap<String, String>>, Extension(state): Extension<State>) -> NoneResult {
+ if let Some(k) = params.get("key") {
+ if k == &state.gen_key {
+ let mut claims = Claims::new()?;
+ claims.non_expiring();
+ claims.audience("solard")?;
+ claims.add_additional("uuid", Uuid::new_v4().to_string())?;
+
+ let kp = AsymmetricKeyPair::<V4>::generate()?;
+ } else {
+ return Err(ServiceError::NotAuthorized);
+ }
+ } else {
+ return Err(ServiceError::Generic("No key supplied".to_string()));
+ }
+
+ Ok(())
+}