diff options
author | Philip Sargent <philip.sargent@gmail.com> | 2025-01-21 11:29:20 +0000 |
---|---|---|
committer | Philip Sargent <philip.sargent@gmail.com> | 2025-01-21 11:29:20 +0000 |
commit | 65cdeb4994b333f2facb6ef34fe7690e33deab76 (patch) | |
tree | 3708ccca63c3ba99c09adc7dac6129b94ca9f43b | |
parent | 01afb09a6e9bdc5b4b45168e63918037e0d34f0e (diff) | |
download | troggle-65cdeb4994b333f2facb6ef34fe7690e33deab76.tar.gz troggle-65cdeb4994b333f2facb6ef34fe7690e33deab76.tar.bz2 troggle-65cdeb4994b333f2facb6ef34fe7690e33deab76.zip |
Loads and resaves same file. Round trip working.
-rw-r--r-- | core/views/user_registration.py | 8 | ||||
-rw-r--r-- | parsers/users.py | 36 |
2 files changed, 29 insertions, 15 deletions
diff --git a/core/views/user_registration.py b/core/views/user_registration.py index 72df989..0648a28 100644 --- a/core/views/user_registration.py +++ b/core/views/user_registration.py @@ -5,7 +5,7 @@ from django.core.exceptions import ValidationError from django.contrib.auth.models import User
from troggle.core.models.troggle import DataIssue, Person
-from troggle.parsers.users import register_user
+from troggle.parsers.users import register_user, save_users
"""
This is the new individual user login registration, instead of everyone signing
@@ -32,8 +32,10 @@ def register(request, username=None): if current_user != form_user:
print(f"## UNAUTHORIZED Password reset ## {current_user} {form_user}")
return render(request, "login/register.html", {"form": form, "unauthorized": True})
- # create User in the system and refresh stored encrypted user list and git commit it.
- register_user(un, email, password=pw, pwhash=None)
+ # create User in the system and refresh stored encrypted user list and git commit it:
+ updated_user = register_user(un, email, password=pw, pwhash=None)
+ save_users()
+ # to do, login automatically, and redirect to control panel ?
return HttpResponseRedirect("/accounts/login/")
else:
if current_user:
diff --git a/parsers/users.py b/parsers/users.py index 75145eb..4bcc4fb 100644 --- a/parsers/users.py +++ b/parsers/users.py @@ -22,7 +22,7 @@ todo = """ - [copy these from paper notes] """ -USERS_FILE = "users_e.json" +USERS_FILE = "users.json" ENCRYPTED_DIR = "encrypted" def register_user(u, email, password=None, pwhash=None): @@ -46,16 +46,22 @@ def register_user(u, email, password=None, pwhash=None): except Exception as e: print(f"Exception <{e}>\n{len(User.objects.all())} users now in db:\n{User.objects.all()}") raise + return user +def get_key(): + key = settings.LONGTERM_SECRET_KEY # Django generated + k = base64.urlsafe_b64encode(key.encode("utf8")[:32]) # make Fernet compatible + f = Fernet(k) + return f + + def load_users(): """These are the previously registered users of the troggle system. """ PARSER_USERS = "_users" DataIssue.objects.filter(parser=PARSER_USERS).delete() - key = settings.LONGTERM_SECRET_KEY # Django generated - k = base64.urlsafe_b64encode(key.encode("utf8")[:32]) # make Fernet compatible - f = Fernet(k) + f = get_key() jsonfile = settings.EXPOWEB / ENCRYPTED_DIR / USERS_FILE jsonurl = "/" + str(Path(ENCRYPTED_DIR) / USERS_FILE) @@ -83,7 +89,12 @@ def load_users(): print(f" - {len(users_list)} users read from JSON") for userdata in users_list: - if userdata["username"]: + if not userdata["username"]: + message = f"! user: BAD username for {userdata} in {jsonfile}" + print(message) + DataIssue.objects.update_or_create(parser=PARSER_USERS, message=message, url=jsonurl) + continue + else: if userdata["username"] in [ "expo", "expoadmin" ]: continue if "encrypted" not in userdata: @@ -102,14 +113,15 @@ def load_users(): return None if "pwhash" in userdata: pwhash = userdata["pwhash"] - register_user(u, email, pwhash=pwhash) + new_user = register_user(u, email, pwhash=pwhash) else: - register_user(u, email) - else: - print(f" - user: BAD username for {userdata} ") - + new_user = register_user(u, email) + save_users() + +def save_users(): + f = get_key() ru = [] - print(f"\n + Exporting users, encrypted emails, and password hashes") + print(f"\n + Saving users, encrypted emails, and password hashes") for u in User.objects.all(): if u.username in ["expo", "expoadmin"]: continue @@ -120,7 +132,7 @@ def load_users(): print(f" - {u.username} - {original}") jsondict = { "registered_users": ru } - encryptedfile = settings.EXPOWEB / ENCRYPTED_DIR / "encrypt.json" + encryptedfile = settings.EXPOWEB / ENCRYPTED_DIR / USERS_FILE if settings.DEVSERVER: with open(encryptedfile, 'w', encoding='utf-8') as json_f: json.dump(jsondict, json_f, indent=1) |