2
0
mirror of https://expo.survex.com/repositories/troggle/.git synced 2025-12-17 07:37:19 +00:00

Registering existing and new users works, but is ephemeral.

This commit is contained in:
2025-01-21 01:15:13 +00:00
parent b34ad3a82b
commit 01afb09a6e
4 changed files with 93 additions and 25 deletions

View File

@@ -24,6 +24,29 @@ todo = """
USERS_FILE = "users_e.json"
ENCRYPTED_DIR = "encrypted"
def register_user(u, email, password=None, pwhash=None):
try:
if existing_user := User.objects.filter(username=u): # WALRUS
print(f" - deleting existing user '{existing_user[0]}' before importing")
existing_user[0].delete()
user = User.objects.create_user(u, email)
if pwhash:
user.password = pwhash
elif password:
user.set_password(password) # function creates hash and stores hash
print(f" # hashing provided clear-text password {password} to make pwhash for user {u}")
else:
user.set_password('secret') # function creates hash and stores hash
print(f" # hashing 'secret' password to make pwhash for user {u}")
user.is_staff = False
user.is_superuser = False
user.save()
print(f" - receated and reset user '{user}'")
except Exception as e:
print(f"Exception <{e}>\n{len(User.objects.all())} users now in db:\n{User.objects.all()}")
raise
def load_users():
"""These are the previously registered users of the troggle system.
"""
@@ -71,34 +94,30 @@ def load_users():
if userdata["encrypted"]:
email = f.decrypt(email).decode()
print(f" - user: '{u} <{email}>' ")
if existing_user := User.objects.filter(username=userdata["username"]): # WALRUS
# print(f" - deleting existing user '{existing_user[0]}' before importing")
existing_user[0].delete()
user = User.objects.create_user(userdata["username"], email, "secret")
user.set_password = "secret" # special attribute stores hash not password
user.is_staff = False
user.is_superuser = False
user.save()
except Exception as e:
print(f"Exception <{e}>\n{len(User.objects.all())} users now in db:\n{User.objects.all()}")
print(f"Exception <{e}>\n")
formatted_json = json.dumps(userdata, indent=4)
print(formatted_json)
raise
return None
if "pwhash" in userdata:
pwhash = userdata["pwhash"]
register_user(u, email, pwhash=pwhash)
else:
register_user(u, email)
else:
print(f" - user: BAD username for {userdata} ")
ru = []
print(f"\n + Exporting users, encrypted emails, and password hashes")
for u in User.objects.all():
if u.username == "expo":
continue
if u.username == "expoadmin":
if u.username in ["expo", "expoadmin"]:
continue
e_email = f.encrypt(u.email.encode("utf8")).decode()
ru.append({"username":u.username, "email": e_email, "password": u.password, "encrypted": True})
ru.append({"username":u.username, "email": e_email, "pwhash": u.password, "encrypted": True})
# print(u.username, e_email)
original = f.decrypt(e_email).decode()
print(u.username, original)
print(f" - {u.username} - {original}")
jsondict = { "registered_users": ru }
encryptedfile = settings.EXPOWEB / ENCRYPTED_DIR / "encrypt.json"