Jelajahi Sumber

rustfmt pass.

Kestrel 1 tahun lalu
induk
melakukan
222fa0409d
7 mengubah file dengan 121 tambahan dan 51 penghapusan
  1. 40 13
      src/cli.rs
  2. 31 10
      src/group_management.rs
  3. 1 4
      src/jwt.rs
  4. 5 5
      src/key.rs
  5. 12 4
      src/scope_management.rs
  6. 5 3
      src/token.rs
  7. 27 12
      src/token_management.rs

+ 40 - 13
src/cli.rs

@@ -1,7 +1,7 @@
 use crate::{
     client_management, config, group_management, key,
     schema::{self, RealmID},
-    server, token, token_management, user_management, UIDCError, scope_management,
+    scope_management, server, token, token_management, user_management, UIDCError,
 };
 use clap::{Parser, Subcommand};
 use microrm::prelude::*;
@@ -295,13 +295,22 @@ impl GroupArgs {
     }
 }
 
-
 #[derive(Debug, Subcommand)]
 enum ScopeCommand {
-    AttachRole { scope_name: String, role_name: String },
-    Create { scope_name: String },
-    DetachRole { scope_name: String, role_name: String },
-    Inspect { scope_name: String },
+    AttachRole {
+        scope_name: String,
+        role_name: String,
+    },
+    Create {
+        scope_name: String,
+    },
+    DetachRole {
+        scope_name: String,
+        role_name: String,
+    },
+    Inspect {
+        scope_name: String,
+    },
     List,
 }
 
@@ -315,10 +324,25 @@ impl ScopeArgs {
     async fn run(&self, args: RunArgs) -> Result<(), UIDCError> {
         let qi = args.db.query_interface();
         match &self.command {
-            ScopeCommand::AttachRole { scope_name, role_name } => scope_management::attach_role(&qi, args.realm_id, scope_name.as_str(), role_name.as_str()),
-            ScopeCommand::Create { scope_name } => scope_management::create_scope(&qi, args.realm_id, scope_name.as_str()),
-            ScopeCommand::DetachRole { scope_name, role_name } => todo!(),
-            ScopeCommand::Inspect { scope_name } => scope_management::inspect_scope(&qi, args.realm_id, scope_name.as_str()),
+            ScopeCommand::AttachRole {
+                scope_name,
+                role_name,
+            } => scope_management::attach_role(
+                &qi,
+                args.realm_id,
+                scope_name.as_str(),
+                role_name.as_str(),
+            ),
+            ScopeCommand::Create { scope_name } => {
+                scope_management::create_scope(&qi, args.realm_id, scope_name.as_str())
+            }
+            ScopeCommand::DetachRole {
+                scope_name,
+                role_name,
+            } => todo!(),
+            ScopeCommand::Inspect { scope_name } => {
+                scope_management::inspect_scope(&qi, args.realm_id, scope_name.as_str())
+            }
             ScopeCommand::List => scope_management::list_scopes(&qi, args.realm_id),
         }
     }
@@ -403,9 +427,12 @@ impl TokenArgs {
                 println!("{}", token);
                 Ok(())
             }
-            TokenCommand::Inspect { token } => {
-                token_management::inspect_token(&qi, &config, args.realm_id, token.as_ref().map(|s| s.as_str()))
-            }
+            TokenCommand::Inspect { token } => token_management::inspect_token(
+                &qi,
+                &config,
+                args.realm_id,
+                token.as_ref().map(|s| s.as_str()),
+            ),
         }
     }
 }

+ 31 - 10
src/group_management.rs

@@ -15,8 +15,8 @@ pub fn create_group(
 
 pub fn list_groups(
     qi: &microrm::QueryInterface,
-    realm_id: schema::RealmID) -> Result<(), UIDCError> {
-    
+    realm_id: schema::RealmID,
+) -> Result<(), UIDCError> {
     for group in qi.get().by(schema::Group::Realm, &realm_id).all()? {
         println!("{}", group.shortname);
     }
@@ -28,11 +28,24 @@ pub fn list_members(
     realm_id: schema::RealmID,
     name: &str,
 ) -> Result<(), UIDCError> {
+    let group_id = qi
+        .get()
+        .only_ids()
+        .by(schema::Group::Realm, &realm_id)
+        .by(schema::Group::Shortname, name)
+        .one_id()?
+        .ok_or(UIDCError::Abort("no such group"))?;
 
-    let group_id = qi.get().only_ids().by(schema::Group::Realm, &realm_id).by(schema::Group::Shortname, name).one_id()?.ok_or(UIDCError::Abort("no such group"))?;
-
-    for member in qi.get().by(schema::GroupMembership::Group, &group_id).all()? {
-        let user = qi.get().by_id(&member.user).one()?.ok_or(UIDCError::Abort("no user matching GroupMembership"))?;
+    for member in qi
+        .get()
+        .by(schema::GroupMembership::Group, &group_id)
+        .all()?
+    {
+        let user = qi
+            .get()
+            .by_id(&member.user)
+            .one()?
+            .ok_or(UIDCError::Abort("no user matching GroupMembership"))?;
         println!("{}", user.username);
     }
     Ok(())
@@ -43,17 +56,25 @@ pub fn list_roles(
     realm_id: schema::RealmID,
     name: &str,
 ) -> Result<(), UIDCError> {
-
-    let group_id = qi.get().only_ids().by(schema::Group::Realm, &realm_id).by(schema::Group::Shortname, name).one_id()?.ok_or(UIDCError::Abort("no such group"))?;
+    let group_id = qi
+        .get()
+        .only_ids()
+        .by(schema::Group::Realm, &realm_id)
+        .by(schema::Group::Shortname, name)
+        .one_id()?
+        .ok_or(UIDCError::Abort("no such group"))?;
 
     for member in qi.get().by(schema::GroupRole::Group, &group_id).all()? {
-        let role = qi.get().by_id(&member.role).one()?.ok_or(UIDCError::Abort("no role matching GroupRole"))?;
+        let role = qi
+            .get()
+            .by_id(&member.role)
+            .one()?
+            .ok_or(UIDCError::Abort("no role matching GroupRole"))?;
         println!("{}", role.shortname);
     }
     Ok(())
 }
 
-
 pub fn attach_user(
     qi: &microrm::QueryInterface,
     realm_id: schema::RealmID,

+ 1 - 4
src/jwt.rs

@@ -62,10 +62,7 @@ impl JWT {
     pub fn sign(with: &ring::signature::Ed25519KeyPair, data: JWTData) -> Self {
         let header = base64::encode_config(DEFAULT_HEADER, base64::URL_SAFE_NO_PAD);
         let unencoded_data = Into::<String>::into(data);
-        let data = base64::encode_config(
-            unencoded_data.as_bytes(),
-            base64::URL_SAFE_NO_PAD,
-        );
+        let data = base64::encode_config(unencoded_data.as_bytes(), base64::URL_SAFE_NO_PAD);
 
         let mut to_sign = vec![];
         to_sign.extend(header.as_bytes());

+ 5 - 5
src/key.rs

@@ -14,18 +14,18 @@ pub struct KeyStore<'a, 'r> {
 
 impl<'a, 'r> KeyStore<'a, 'r> {
     pub fn new(qi: &'r microrm::QueryInterface<'a>) -> Self {
-        Self {
-            qi
-        }
+        Self { qi }
     }
 
     pub fn generate_in(&self, realm_id: schema::RealmID) -> Result<String, UIDCError> {
         let mut rng = ring::rand::SystemRandom::new();
-        let sign_generated = Ed25519KeyPair::generate_pkcs8(&mut rng).map_err(|_| KeyError::Plain("failed to generate key"))?;
+        let sign_generated = Ed25519KeyPair::generate_pkcs8(&mut rng)
+            .map_err(|_| KeyError::Plain("failed to generate key"))?;
 
         let keydata = sign_generated.as_ref().to_owned();
 
-        let loaded_key = Ed25519KeyPair::from_pkcs8(keydata.as_slice()).expect("couldn't load just-generated key");
+        let loaded_key = Ed25519KeyPair::from_pkcs8(keydata.as_slice())
+            .expect("couldn't load just-generated key");
         let pubkey = loaded_key.public_key();
 
         let mut key_hasher = sha2::Sha256::new();

+ 12 - 4
src/scope_management.rs

@@ -15,15 +15,19 @@ pub fn create_scope(
 
 pub fn list_scopes(
     qi: &microrm::QueryInterface,
-    realm_id: schema::RealmID) -> Result<(), UIDCError> {
-    
+    realm_id: schema::RealmID,
+) -> Result<(), UIDCError> {
     for scope in qi.get().by(schema::Scope::Realm, &realm_id).all()? {
         println!("{}", scope.shortname);
     }
     Ok(())
 }
 
-pub fn inspect_scope(qi: &microrm::QueryInterface, realm_id: schema::RealmID, scope_name: &str) -> Result<(), UIDCError> {
+pub fn inspect_scope(
+    qi: &microrm::QueryInterface,
+    realm_id: schema::RealmID,
+    scope_name: &str,
+) -> Result<(), UIDCError> {
     let scope = qi
         .get()
         .by(schema::Scope::Realm, &realm_id)
@@ -35,7 +39,11 @@ pub fn inspect_scope(qi: &microrm::QueryInterface, realm_id: schema::RealmID, sc
 
     println!("attached roles:");
     for scope_role in qi.get().by(schema::ScopeRole::Scope, &scope.id()).all()? {
-        let role = qi.get().by_id(&scope_role.role).one()?.ok_or(UIDCError::Abort("role referenced that no longer exists?"))?;
+        let role = qi
+            .get()
+            .by_id(&scope_role.role)
+            .one()?
+            .ok_or(UIDCError::Abort("role referenced that no longer exists?"))?;
         println!(" - {}", role.shortname);
     }
 

+ 5 - 3
src/token.rs

@@ -86,7 +86,8 @@ pub fn generate_auth_token<'a>(
                     .by_id(role_id)
                     .one()?
                     .ok_or(UIDCError::Abort("inconsistent role state"))?
-                    .wrapped().shortname,
+                    .wrapped()
+                    .shortname,
             ))
         });
 
@@ -98,7 +99,7 @@ pub fn generate_auth_token<'a>(
         exp: exp.duration_since(std::time::UNIX_EPOCH).unwrap().as_secs(),
         extras: [(
             "roles",
-            serde_json::Value::Array(resulting_roles.collect::<Result<Vec<_>,UIDCError>>()?),
+            serde_json::Value::Array(resulting_roles.collect::<Result<Vec<_>, UIDCError>>()?),
         )]
         .into(),
     };
@@ -108,7 +109,8 @@ pub fn generate_auth_token<'a>(
         .by(schema::Key::Realm, &realm.id())
         .one()?
         .ok_or(TokenError::InternalError("no signing key for realm"))?;
-    let kpair = ring::signature::Ed25519KeyPair::from_pkcs8(key.keydata.as_slice()).map_err(Into::<TokenError>::into)?;
+    let kpair = ring::signature::Ed25519KeyPair::from_pkcs8(key.keydata.as_slice())
+        .map_err(Into::<TokenError>::into)?;
 
     Ok(jwt::JWT::sign(&kpair, token).into_string())
 }

+ 27 - 12
src/token_management.rs

@@ -1,4 +1,4 @@
-use crate::{config::Config, schema, token, UIDCError, jwt};
+use crate::{config::Config, jwt, schema, token, UIDCError};
 use microrm::prelude::*;
 use ring::signature::KeyPair;
 
@@ -14,12 +14,14 @@ pub fn create_auth_token(
         config,
         qi,
         realm_id,
-        qi.get().only_ids()
+        qi.get()
+            .only_ids()
             .by(schema::Client::Realm, &realm_id)
             .by(schema::Client::Shortname, client)
             .one_id()?
             .ok_or(UIDCError::Abort("no such client"))?,
-        qi.get().only_ids()
+        qi.get()
+            .only_ids()
             .by(schema::User::Realm, &realm_id)
             .by(schema::User::Username, username)
             .one_id()?
@@ -40,12 +42,14 @@ pub fn create_refresh_token(
         config,
         qi,
         realm_id,
-        qi.get().only_ids()
+        qi.get()
+            .only_ids()
             .by(schema::Client::Realm, &realm_id)
             .by(schema::Client::Shortname, client)
             .one_id()?
             .ok_or(UIDCError::Abort("no such client"))?,
-        qi.get().only_ids()
+        qi.get()
+            .only_ids()
             .by(schema::User::Realm, &realm_id)
             .by(schema::User::Username, username)
             .one_id()?
@@ -54,12 +58,25 @@ pub fn create_refresh_token(
     )
 }
 
-pub fn inspect_token(qi: &microrm::QueryInterface, config: &Config, realm_id: schema::RealmID, token: Option<&str>) -> Result<(), UIDCError> {
-    let key = qi.get().by(schema::Key::Realm, &realm_id).one()?.ok_or(UIDCError::Abort("no key for realm"))?;
+pub fn inspect_token(
+    qi: &microrm::QueryInterface,
+    config: &Config,
+    realm_id: schema::RealmID,
+    token: Option<&str>,
+) -> Result<(), UIDCError> {
+    let key = qi
+        .get()
+        .by(schema::Key::Realm, &realm_id)
+        .one()?
+        .ok_or(UIDCError::Abort("no key for realm"))?;
 
-    let kpair = ring::signature::Ed25519KeyPair::from_pkcs8(key.keydata.as_slice()).map_err(|_| UIDCError::Abort("could not load key"))?;
+    let kpair = ring::signature::Ed25519KeyPair::from_pkcs8(key.keydata.as_slice())
+        .map_err(|_| UIDCError::Abort("could not load key"))?;
 
-    let pubkey = ring::signature::UnparsedPublicKey::new(&ring::signature::ED25519, kpair.public_key().as_ref());
+    let pubkey = ring::signature::UnparsedPublicKey::new(
+        &ring::signature::ED25519,
+        kpair.public_key().as_ref(),
+    );
 
     let token = match token {
         Some(token) => token.to_string(),
@@ -76,10 +93,8 @@ pub fn inspect_token(qi: &microrm::QueryInterface, config: &Config, realm_id: sc
         println!(" - expires at: {} [{}]", claims.exp, "");
         for claim in claims.extras {
             println!(" - {:10}: {}", claim.0, claim.1);
-
         }
-    }
-    else {
+    } else {
         println!("Signature validation against realm key or claim parsing failed!");
     }
     Ok(())