First stab at keycloak automation
This commit is contained in:
parent
723da48c9d
commit
e739ee8add
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
emails.txt
|
65
add-users-keycloak.py
Executable file
65
add-users-keycloak.py
Executable file
@ -0,0 +1,65 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# See https://www.keycloak.org/docs/latest/server_admin/#user-operations
|
||||
# The following command must be run beforehand to log into the keycloak:
|
||||
# /opt/jboss/keycloak/bin/kcadm.sh config credentials --server http://localhost:8080/auth --realm master --user admin
|
||||
|
||||
from os.path import exists
|
||||
from pathlib import Path
|
||||
from shlex import split
|
||||
from subprocess import run
|
||||
from sys import exit
|
||||
|
||||
KCADM = "/opt/jboss/keycloak/bin/kcadm.sh"
|
||||
REALM = "lumbung-space"
|
||||
|
||||
|
||||
def confirm():
|
||||
answer = ""
|
||||
while answer not in ["y", "n"]:
|
||||
answer = input("OK to create account [Y/N]? ").lower()
|
||||
return answer == "y"
|
||||
|
||||
|
||||
if not exists(Path("emails.txt").absolute()):
|
||||
print("Missing emails.txt!")
|
||||
exit(1)
|
||||
|
||||
with open("emails.txt") as handle:
|
||||
emails = handle.readlines()
|
||||
|
||||
for email in emails:
|
||||
username = email.split("@")[0].strip()
|
||||
|
||||
print(f"processing {email} now...")
|
||||
print(f"deriving {username} from {email} for account creation...")
|
||||
|
||||
create_command = split(
|
||||
f"""
|
||||
{KCADM} create users
|
||||
-r {REALM}
|
||||
-s enabled=true
|
||||
-s username={username}
|
||||
-s 'requiredActions=["VERIFY_EMAIL","UPDATE_PROFILE","UPDATE_PASSWORD"]'
|
||||
"""
|
||||
)
|
||||
|
||||
password_command = split(
|
||||
f"""
|
||||
{KCADM} set-password \
|
||||
-r {REALM} \
|
||||
--username {username}
|
||||
--new-password lumbung
|
||||
--temporary
|
||||
"""
|
||||
)
|
||||
|
||||
print(f"Intending to run {create_command}...")
|
||||
print(f"And then {password_command}...")
|
||||
|
||||
if not confirm():
|
||||
print("Bailing out on request...")
|
||||
exit(1)
|
||||
|
||||
run(create_command)
|
||||
run(password_command)
|
Loading…
Reference in New Issue
Block a user