summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilip Sargent <philip.sargent@gmail.com>2025-01-21 11:29:20 +0000
committerPhilip Sargent <philip.sargent@gmail.com>2025-01-21 11:29:20 +0000
commit65cdeb4994b333f2facb6ef34fe7690e33deab76 (patch)
tree3708ccca63c3ba99c09adc7dac6129b94ca9f43b
parent01afb09a6e9bdc5b4b45168e63918037e0d34f0e (diff)
downloadtroggle-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.py8
-rw-r--r--parsers/users.py36
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)