|
@@ -1,7 +1,7 @@
|
|
|
use crate::{
|
|
|
client_management, config, group_management, key,
|
|
|
schema::{self, RealmID},
|
|
|
- server, token, token_management, user_management, UIDCError,
|
|
|
+ server, token, token_management, user_management, UIDCError, scope_management,
|
|
|
};
|
|
|
use clap::{Parser, Subcommand};
|
|
|
use microrm::prelude::*;
|
|
@@ -34,6 +34,8 @@ enum Command {
|
|
|
/// key management
|
|
|
Key(KeyArgs),
|
|
|
/// run the actual OIDC server
|
|
|
+ Scope(ScopeArgs),
|
|
|
+ /// run the actual OIDC server
|
|
|
Server(ServerArgs),
|
|
|
/// manual token generation and inspection
|
|
|
Token(TokenArgs),
|
|
@@ -73,6 +75,7 @@ impl RootArgs {
|
|
|
Command::Client(v) => v.run(ra).await,
|
|
|
Command::Group(v) => v.run(ra).await,
|
|
|
Command::Key(v) => v.run(ra).await,
|
|
|
+ Command::Scope(v) => v.run(ra).await,
|
|
|
Command::Server(v) => v.run(ra).await,
|
|
|
Command::Token(v) => v.run(ra).await,
|
|
|
Command::Role(v) => v.run(ra).await,
|
|
@@ -199,6 +202,10 @@ enum GroupCommand {
|
|
|
Members {
|
|
|
group_name: String,
|
|
|
},
|
|
|
+ Roles {
|
|
|
+ group_name: String,
|
|
|
+ },
|
|
|
+ List,
|
|
|
AttachRole {
|
|
|
group_name: String,
|
|
|
role_name: String,
|
|
@@ -233,6 +240,12 @@ impl GroupArgs {
|
|
|
GroupCommand::Members { group_name } => {
|
|
|
group_management::list_members(&qi, args.realm_id, group_name.as_str())?;
|
|
|
}
|
|
|
+ GroupCommand::Roles { group_name } => {
|
|
|
+ group_management::list_roles(&qi, args.realm_id, group_name.as_str())?;
|
|
|
+ }
|
|
|
+ GroupCommand::List => {
|
|
|
+ group_management::list_groups(&qi, args.realm_id)?;
|
|
|
+ }
|
|
|
GroupCommand::AttachRole {
|
|
|
group_name,
|
|
|
role_name,
|
|
@@ -282,6 +295,35 @@ 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 },
|
|
|
+ List,
|
|
|
+}
|
|
|
+
|
|
|
+#[derive(Debug, Parser)]
|
|
|
+struct ScopeArgs {
|
|
|
+ #[clap(subcommand)]
|
|
|
+ command: ScopeCommand,
|
|
|
+}
|
|
|
+
|
|
|
+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::List => scope_management::list_scopes(&qi, args.realm_id),
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
#[derive(Debug, Parser)]
|
|
|
struct ServerArgs {
|
|
|
#[clap(short, long)]
|
|
@@ -314,7 +356,7 @@ enum TokenCommand {
|
|
|
scopes: String,
|
|
|
},
|
|
|
Inspect {
|
|
|
- token: String,
|
|
|
+ token: Option<String>,
|
|
|
},
|
|
|
}
|
|
|
|
|
@@ -350,10 +392,19 @@ impl TokenArgs {
|
|
|
username,
|
|
|
scopes,
|
|
|
} => {
|
|
|
- todo!()
|
|
|
+ let token = token_management::create_refresh_token(
|
|
|
+ &qi,
|
|
|
+ &config,
|
|
|
+ args.realm_id,
|
|
|
+ client.as_str(),
|
|
|
+ username.as_str(),
|
|
|
+ scopes.as_str(),
|
|
|
+ )?;
|
|
|
+ println!("{}", token);
|
|
|
+ Ok(())
|
|
|
}
|
|
|
TokenCommand::Inspect { token } => {
|
|
|
- todo!()
|
|
|
+ token_management::inspect_token(&qi, &config, args.realm_id, token.as_ref().map(|s| s.as_str()))
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -375,7 +426,6 @@ struct RoleArgs {
|
|
|
impl RoleArgs {
|
|
|
async fn run(&self, args: RunArgs) -> Result<(), UIDCError> {
|
|
|
let qi = args.db.query_interface();
|
|
|
- // let config = config::Config::build_from(&qi, None);
|
|
|
match &self.command {
|
|
|
RoleCommand::List => {
|
|
|
todo!()
|
|
@@ -399,8 +449,7 @@ impl RoleArgs {
|
|
|
qi.delete()
|
|
|
.by(schema::Role::Realm, &args.realm_id)
|
|
|
.by(schema::Role::Shortname, name.as_str())
|
|
|
- .exec()
|
|
|
- .unwrap();
|
|
|
+ .exec()?;
|
|
|
}
|
|
|
}
|
|
|
Ok(())
|