78 lines
2.4 KiB
Text
78 lines
2.4 KiB
Text
# User management commands for the NATS admin bus.
|
|
#
|
|
# Sends structured requests to the `admin.users` NATS subject. The server-side
|
|
# subscriber must handle this subject with access to the auth repository.
|
|
#
|
|
# Request envelope: { "op": "list" | "get" | "disable" | "reset_sessions", ...fields }
|
|
# Response envelope: { "ok": bool, "data": any, "error": string | null }
|
|
|
|
use ./common.nu [build-admin-subject, nats-admin-request]
|
|
|
|
# Internal: send a users operation and unwrap the data payload.
|
|
def users-request [payload: record, --url: string = "", --creds: string = ""] {
|
|
let subject = build-admin-subject "admin.users"
|
|
let json_payload = $payload | to json --raw
|
|
|
|
let response = nats-admin-request $subject $json_payload --url $url --creds $creds --timeout "15s"
|
|
| from json
|
|
|
|
if not ($response.ok? | default false) {
|
|
let msg = $response.error? | default "unknown error from admin.users"
|
|
error make { msg: $"admin.users error: ($msg)" }
|
|
}
|
|
|
|
$response.data? | default {}
|
|
}
|
|
|
|
# List all registered users.
|
|
#
|
|
# Returns a table with: id, email, display_name, roles, created_at, is_active
|
|
#
|
|
# Examples:
|
|
# nats-admin users list
|
|
# nats-admin users list | where { |u| "admin" in $u.roles }
|
|
# nats-admin users list | length # total user count
|
|
export def "nats-admin users list" [
|
|
--url: string = ""
|
|
--creds: string = ""
|
|
] {
|
|
users-request { op: "list" } --url $url --creds $creds
|
|
}
|
|
|
|
# Get a single user by email address.
|
|
#
|
|
# Examples:
|
|
# nats-admin users get admin@example.com
|
|
export def "nats-admin users get" [
|
|
email: string # User email address
|
|
--url: string = ""
|
|
--creds: string = ""
|
|
] {
|
|
users-request { op: "get", email: $email } --url $url --creds $creds
|
|
}
|
|
|
|
# Disable a user account (sets is_active = false, does not delete).
|
|
#
|
|
# Examples:
|
|
# nats-admin users disable spammer@example.com
|
|
export def "nats-admin users disable" [
|
|
email: string
|
|
--url: string = ""
|
|
--creds: string = ""
|
|
] {
|
|
users-request { op: "disable", email: $email } --url $url --creds $creds
|
|
print $"User ($email) disabled."
|
|
}
|
|
|
|
# Invalidate all active sessions for a user, forcing re-login.
|
|
#
|
|
# Examples:
|
|
# nats-admin users reset-sessions user@example.com
|
|
export def "nats-admin users reset-sessions" [
|
|
email: string
|
|
--url: string = ""
|
|
--creds: string = ""
|
|
] {
|
|
users-request { op: "reset_sessions", email: $email } --url $url --creds $creds
|
|
print $"Sessions reset for ($email)."
|
|
}
|