80 lines
2.4 KiB
Python
80 lines
2.4 KiB
Python
#!/usr/bin/env python3
|
|
"""ObsiGate CLI user management script.
|
|
|
|
Usage:
|
|
python backend/create_admin.py create <username> <password> [--role admin|user] [--vaults V1 V2...] [--display-name NAME]
|
|
python backend/create_admin.py list
|
|
python backend/create_admin.py delete <username>
|
|
|
|
Docker usage:
|
|
docker exec obsigate python backend/create_admin.py create admin MyPassword --role admin --vaults "*"
|
|
docker exec obsigate python backend/create_admin.py list
|
|
"""
|
|
|
|
import sys
|
|
import argparse
|
|
|
|
# Add parent directory to path for imports
|
|
from pathlib import Path
|
|
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
|
|
|
|
from backend.auth.user_store import create_user, get_all_users, delete_user
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description="ObsiGate user management")
|
|
subparsers = parser.add_subparsers(dest="command")
|
|
|
|
# create
|
|
create_p = subparsers.add_parser("create", help="Create a user")
|
|
create_p.add_argument("username")
|
|
create_p.add_argument("password")
|
|
create_p.add_argument("--role", default="user", choices=["admin", "user"])
|
|
create_p.add_argument("--vaults", nargs="+", default=[])
|
|
create_p.add_argument("--display-name")
|
|
|
|
# list
|
|
subparsers.add_parser("list", help="List all users")
|
|
|
|
# delete
|
|
del_p = subparsers.add_parser("delete", help="Delete a user")
|
|
del_p.add_argument("username")
|
|
|
|
args = parser.parse_args()
|
|
|
|
if args.command == "create":
|
|
try:
|
|
user = create_user(
|
|
args.username, args.password, args.role,
|
|
args.vaults, args.display_name,
|
|
)
|
|
print(f"✅ User '{user['username']}' created (role: {user['role']})")
|
|
except ValueError as e:
|
|
print(f"❌ Error: {e}", file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
elif args.command == "list":
|
|
users = get_all_users()
|
|
if not users:
|
|
print("No users found.")
|
|
return
|
|
for u in users:
|
|
vaults = ", ".join(u["vaults"]) or "none"
|
|
status = "✅" if u["active"] else "🔴"
|
|
print(f"{status} {u['username']} ({u['role']}) — Vaults: {vaults}")
|
|
|
|
elif args.command == "delete":
|
|
try:
|
|
delete_user(args.username)
|
|
print(f"✅ User '{args.username}' deleted")
|
|
except ValueError as e:
|
|
print(f"❌ Error: {e}", file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
else:
|
|
parser.print_help()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|