|
@@ -1,5 +1,7 @@
|
|
|
use crate::{
|
|
|
- key, client_management, config, schema::{self, RealmID}, server, token, user_management, UIDCError, group_management, token_management,
|
|
|
+ client_management, config, group_management, key,
|
|
|
+ schema::{self, RealmID},
|
|
|
+ server, token, token_management, user_management, UIDCError,
|
|
|
};
|
|
|
use clap::{Parser, Subcommand};
|
|
|
use microrm::prelude::*;
|
|
@@ -52,9 +54,16 @@ impl RootArgs {
|
|
|
return self.init().await;
|
|
|
}
|
|
|
|
|
|
- let db = microrm::DB::new(schema::schema(), &self.db, microrm::CreateMode::MustExist).map_err(|_| UIDCError::Abort("Error accessing database"))?;
|
|
|
+ let db = microrm::DB::new(schema::schema(), &self.db, microrm::CreateMode::MustExist)
|
|
|
+ .map_err(|e| UIDCError::AbortString(format!("Error accessing database: {:?}", e)))?;
|
|
|
|
|
|
- let realm_id = db.query_interface().get().by(schema::Realm::Shortname, self.realm.as_str()).one()?.ok_or(UIDCError::Abort("no such realm"))?.id();
|
|
|
+ let realm_id = db
|
|
|
+ .query_interface()
|
|
|
+ .get()
|
|
|
+ .by(schema::Realm::Shortname, self.realm.as_str())
|
|
|
+ .one()?
|
|
|
+ .ok_or(UIDCError::Abort("no such realm"))?
|
|
|
+ .id();
|
|
|
|
|
|
let ra = RunArgs { db: db, realm_id };
|
|
|
|
|
@@ -76,7 +85,9 @@ impl RootArgs {
|
|
|
let maybedb = microrm::DB::new(schema::schema(), &self.db, microrm::CreateMode::MustExist);
|
|
|
|
|
|
if maybedb.is_ok() {
|
|
|
- return Err(UIDCError::Abort("Database already initialized, not overwriting!"));
|
|
|
+ return Err(UIDCError::Abort(
|
|
|
+ "Database already initialized, not overwriting!",
|
|
|
+ ));
|
|
|
}
|
|
|
|
|
|
log::info!("Initializing!");
|
|
@@ -89,10 +100,9 @@ impl RootArgs {
|
|
|
.expect("Unable to initialize database!");
|
|
|
|
|
|
// create primary realm
|
|
|
- db.query_interface()
|
|
|
- .add(&schema::Realm {
|
|
|
- shortname: "primary".to_string(),
|
|
|
- })?;
|
|
|
+ db.query_interface().add(&schema::Realm {
|
|
|
+ shortname: "primary".to_string(),
|
|
|
+ })?;
|
|
|
Ok(())
|
|
|
}
|
|
|
}
|
|
@@ -112,12 +122,8 @@ struct KeyArgs {
|
|
|
impl KeyArgs {
|
|
|
async fn run(&self, args: RunArgs) -> Result<(), UIDCError> {
|
|
|
match &self.command {
|
|
|
- KeyCommand::Inspect => {
|
|
|
- key::inspect(&args.db, args.realm_id)
|
|
|
- }
|
|
|
- KeyCommand::Generate => {
|
|
|
- key::generate(&args.db, args.realm_id)
|
|
|
- }
|
|
|
+ KeyCommand::Inspect => key::inspect(&args.db, args.realm_id),
|
|
|
+ KeyCommand::Generate => key::generate(&args.db, args.realm_id),
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -141,7 +147,9 @@ impl ClientArgs {
|
|
|
ClientCommand::Create { name } => {
|
|
|
client_management::create(&args.db, args.realm_id, name)
|
|
|
}
|
|
|
- ClientCommand::List => { todo!() }
|
|
|
+ ClientCommand::List => {
|
|
|
+ todo!()
|
|
|
+ }
|
|
|
ClientCommand::Inspect { name } => {
|
|
|
client_management::inspect(&args.db, args.realm_id, name)
|
|
|
}
|
|
@@ -185,12 +193,28 @@ impl ConfigArgs {
|
|
|
|
|
|
#[derive(Debug, Subcommand)]
|
|
|
enum GroupCommand {
|
|
|
- Create { group_name: String },
|
|
|
- Members { group_name: String },
|
|
|
- AttachRole { group_name: String, role_name: String },
|
|
|
- DetachRole { group_name: String, role_name: String },
|
|
|
- AttachUser { group_name: String, username: String },
|
|
|
- DetachUser { group_name: String, username: String },
|
|
|
+ Create {
|
|
|
+ group_name: String,
|
|
|
+ },
|
|
|
+ Members {
|
|
|
+ group_name: String,
|
|
|
+ },
|
|
|
+ AttachRole {
|
|
|
+ group_name: String,
|
|
|
+ role_name: String,
|
|
|
+ },
|
|
|
+ DetachRole {
|
|
|
+ group_name: String,
|
|
|
+ role_name: String,
|
|
|
+ },
|
|
|
+ AttachUser {
|
|
|
+ group_name: String,
|
|
|
+ username: String,
|
|
|
+ },
|
|
|
+ DetachUser {
|
|
|
+ group_name: String,
|
|
|
+ username: String,
|
|
|
+ },
|
|
|
}
|
|
|
|
|
|
#[derive(Debug, Parser)]
|
|
@@ -205,21 +229,53 @@ impl GroupArgs {
|
|
|
match &self.command {
|
|
|
GroupCommand::Create { group_name } => {
|
|
|
group_management::create_group(&qi, args.realm_id, group_name)?;
|
|
|
- },
|
|
|
+ }
|
|
|
GroupCommand::Members { group_name } => {
|
|
|
group_management::list_members(&qi, args.realm_id, group_name.as_str())?;
|
|
|
- },
|
|
|
- GroupCommand::AttachRole { group_name, role_name } => {
|
|
|
- group_management::attach_role(&qi, args.realm_id, group_name.as_str(), role_name.as_str())?;
|
|
|
- },
|
|
|
- GroupCommand::DetachRole { group_name, role_name } => {
|
|
|
- group_management::detach_role(&qi, args.realm_id, group_name.as_str(), role_name.as_str())?;
|
|
|
- },
|
|
|
- GroupCommand::AttachUser { group_name, username } => {
|
|
|
- group_management::attach_user(&qi, args.realm_id, group_name.as_str(), username.as_str())?;
|
|
|
- },
|
|
|
- GroupCommand::DetachUser { group_name, username } => {
|
|
|
- group_management::detach_user(&qi, args.realm_id, group_name.as_str(), username.as_str())?;
|
|
|
+ }
|
|
|
+ GroupCommand::AttachRole {
|
|
|
+ group_name,
|
|
|
+ role_name,
|
|
|
+ } => {
|
|
|
+ group_management::attach_role(
|
|
|
+ &qi,
|
|
|
+ args.realm_id,
|
|
|
+ group_name.as_str(),
|
|
|
+ role_name.as_str(),
|
|
|
+ )?;
|
|
|
+ }
|
|
|
+ GroupCommand::DetachRole {
|
|
|
+ group_name,
|
|
|
+ role_name,
|
|
|
+ } => {
|
|
|
+ group_management::detach_role(
|
|
|
+ &qi,
|
|
|
+ args.realm_id,
|
|
|
+ group_name.as_str(),
|
|
|
+ role_name.as_str(),
|
|
|
+ )?;
|
|
|
+ }
|
|
|
+ GroupCommand::AttachUser {
|
|
|
+ group_name,
|
|
|
+ username,
|
|
|
+ } => {
|
|
|
+ group_management::attach_user(
|
|
|
+ &qi,
|
|
|
+ args.realm_id,
|
|
|
+ group_name.as_str(),
|
|
|
+ username.as_str(),
|
|
|
+ )?;
|
|
|
+ }
|
|
|
+ GroupCommand::DetachUser {
|
|
|
+ group_name,
|
|
|
+ username,
|
|
|
+ } => {
|
|
|
+ group_management::detach_user(
|
|
|
+ &qi,
|
|
|
+ args.realm_id,
|
|
|
+ group_name.as_str(),
|
|
|
+ username.as_str(),
|
|
|
+ )?;
|
|
|
}
|
|
|
}
|
|
|
Ok(())
|
|
@@ -278,7 +334,14 @@ impl TokenArgs {
|
|
|
username,
|
|
|
scopes,
|
|
|
} => {
|
|
|
- let token = token_management::create_auth_token(&qi, &config, args.realm_id, client.as_str(), username.as_str(), scopes.as_str())?;
|
|
|
+ let token = token_management::create_auth_token(
|
|
|
+ &qi,
|
|
|
+ &config,
|
|
|
+ args.realm_id,
|
|
|
+ client.as_str(),
|
|
|
+ username.as_str(),
|
|
|
+ scopes.as_str(),
|
|
|
+ )?;
|
|
|
println!("{}", token);
|
|
|
Ok(())
|
|
|
}
|
|
@@ -286,8 +349,12 @@ impl TokenArgs {
|
|
|
client,
|
|
|
username,
|
|
|
scopes,
|
|
|
- } => { todo!() }
|
|
|
- TokenCommand::Inspect { token } => { todo!() }
|
|
|
+ } => {
|
|
|
+ todo!()
|
|
|
+ }
|
|
|
+ TokenCommand::Inspect { token } => {
|
|
|
+ todo!()
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -312,11 +379,11 @@ impl RoleArgs {
|
|
|
match &self.command {
|
|
|
RoleCommand::List => {
|
|
|
todo!()
|
|
|
- },
|
|
|
+ }
|
|
|
RoleCommand::Create { name } => {
|
|
|
let add_result = qi.add(&schema::Role {
|
|
|
realm: args.realm_id,
|
|
|
- shortname: name.clone()
|
|
|
+ shortname: name.clone(),
|
|
|
});
|
|
|
|
|
|
match add_result {
|
|
@@ -325,12 +392,16 @@ impl RoleArgs {
|
|
|
}
|
|
|
Err(_) => {
|
|
|
println!("Failed to add role {}!", name);
|
|
|
- },
|
|
|
+ }
|
|
|
}
|
|
|
- },
|
|
|
+ }
|
|
|
RoleCommand::Delete { name } => {
|
|
|
- qi.delete().by(schema::Role::Realm, &args.realm_id).by(schema::Role::Shortname, name.as_str()).exec().unwrap();
|
|
|
- },
|
|
|
+ qi.delete()
|
|
|
+ .by(schema::Role::Realm, &args.realm_id)
|
|
|
+ .by(schema::Role::Shortname, name.as_str())
|
|
|
+ .exec()
|
|
|
+ .unwrap();
|
|
|
+ }
|
|
|
}
|
|
|
Ok(())
|
|
|
}
|
|
@@ -340,7 +411,7 @@ impl RoleArgs {
|
|
|
enum UserCommand {
|
|
|
List,
|
|
|
Create {
|
|
|
- username: String
|
|
|
+ username: String,
|
|
|
},
|
|
|
Auth {
|
|
|
username: String,
|
|
@@ -350,7 +421,7 @@ enum UserCommand {
|
|
|
},
|
|
|
Inspect {
|
|
|
username: String,
|
|
|
- }
|
|
|
+ },
|
|
|
}
|
|
|
|
|
|
#[derive(Debug, Parser)]
|
|
@@ -367,13 +438,18 @@ impl UserArgs {
|
|
|
UserCommand::Create { username } => {
|
|
|
user_management::create(&qi, args.realm_id, username.as_str())
|
|
|
}
|
|
|
- UserCommand::Auth { username, change_password } => user_management::change_auth(
|
|
|
+ UserCommand::Auth {
|
|
|
+ username,
|
|
|
+ change_password,
|
|
|
+ } => user_management::change_auth(
|
|
|
&qi,
|
|
|
args.realm_id,
|
|
|
username.as_str(),
|
|
|
*change_password > 0,
|
|
|
),
|
|
|
- UserCommand::Inspect { username } => user_management::inspect(&qi, args.realm_id, username.as_str()),
|
|
|
+ UserCommand::Inspect { username } => {
|
|
|
+ user_management::inspect(&qi, args.realm_id, username.as_str())
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|