Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 3 additions & 24 deletions libs/ferriskey-cli-client/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -523,29 +523,6 @@ impl FerriskeyClient {
self.get_list(&self.endpoint(&format!("realms/{realm}/clients/{client_uuid}/roles")))
}

pub fn delete_client_role(
&self,
realm: &str,
client_uuid: &str,
role_id: &str,
) -> Result<(), FerriskeyClientError> {
let response = self
.http
.delete(self.endpoint(&format!(
"realms/{realm}/clients/{client_uuid}/roles/{role_id}"
)))
.bearer_auth(&self.token)
.send()?;

if !response.status().is_success() {
let status = response.status();
let body = response.text().unwrap_or_default();
return Err(FerriskeyClientError::Api { status, body });
}

Ok(())
}

pub fn create_client_role(
&self,
realm: &str,
Expand All @@ -565,7 +542,9 @@ impl FerriskeyClient {
return Err(FerriskeyClientError::Api { status, body });
}

self.extract_envelope(response)
// Unlike `create_role`, this endpoint returns the created role as a
// bare object, not wrapped in a `{"data": ...}` envelope.
Ok(response.json::<CreatedRole>()?)
}

pub fn add_client_redirect(
Expand Down
18 changes: 4 additions & 14 deletions libs/ferriskey-cli-core/src/realm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -323,23 +323,13 @@ fn delete_role(
let context = resolve_context(context_override, inline_context)?;
let realm = resolve_realm(&context, args.realm)?;
let client = auth_client(&context)?;
let client_uuid = args
.client
.as_deref()
.map(|client_id| resolve_client_uuid(&client, &realm, client_id))
.transpose()?;
let roles = match &client_uuid {
Some(uuid) => client.list_client_roles(&realm, uuid)?,
None => client.list_realm_roles(&realm)?,
};
let role = roles
let role = list_roles_in_scope(&client, &realm, args.client.as_deref())?
.into_iter()
.find(|r| r.name == args.name)
.ok_or_else(|| RealmCommandError::RoleNotFound(args.name.clone()))?;
match &client_uuid {
Some(uuid) => client.delete_client_role(&realm, uuid, &role.id)?,
None => client.delete_role(&realm, &role.id)?,
}
// A role id is unique across both realm and client scopes, so deletion
// doesn't need to be scoped the way create/list do.
client.delete_role(&realm, &role.id)?;
render_message(output_format, &format!("role '{}' deleted", args.name))
}

Expand Down
Loading