2
0
mirror of https://expo.survex.com/repositories/troggle/.git synced 2026-02-08 11:49:50 +00:00

now saves encrypted file after new registration.

This commit is contained in:
2025-01-21 17:59:33 +00:00
parent 157f1fcf27
commit d19b1e79ab
3 changed files with 64 additions and 32 deletions

View File

@@ -1,17 +1,28 @@
import json
from django import forms
from django.conf import settings
from django.http import HttpResponseRedirect
from django.shortcuts import render
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, save_users
from troggle.parsers.users import register_user, get_encryptor, ENCRYPTED_DIR, USERS_FILE
from troggle.core.utils import (
add_commit,
)
"""
This is the new individual user login registration, instead of everyone signing
in as "expo". This will be useful for the kanban expo organisation tool.
"""
todo = """
- Make all this work with New people who have never been on expo before
- login automatically, and redirect to control panel ?
"""
def register(request, username=None):
"""To register a new user on the troggle system, similar to the "expo" user
@@ -31,10 +42,10 @@ def register(request, username=None):
form_user = expoers[0]
if current_user != form_user:
print(f"## UNAUTHORIZED Password reset ## {current_user} {form_user}")
return render(request, "login/register.html", {"form": form, "unauthorized": True})
# 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:
updated_user = register_user(un, email, password=pw, pwhash=None)
save_users()
save_users(request, updated_user, email)
# to do, login automatically, and redirect to control panel ?
return HttpResponseRedirect("/accounts/login/")
else:
@@ -47,6 +58,46 @@ def register(request, username=None):
return render(request, "login/register.html", {"form": form})
def save_users(request, updated_user, email):
f = get_encryptor()
ru = []
print(f"\n + Saving users, encrypted emails, and password hashes")
for u in User.objects.all():
if u.username in ["expo", "expoadmin"]:
continue
e_email = f.encrypt(u.email.encode("utf8")).decode()
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(f" - {u.username} - {original}")
encryptedfile = settings.EXPOWEB / ENCRYPTED_DIR / USERS_FILE
try:
print(f"- Rewriting the entire encrypted set of registered users to disc ")
write_users(ru, encryptedfile, updated_user, email)
except:
message = f'! - Users encrypted data saving failed - \n!! Permissions failure ?! on attempting to save file "{encryptedfile}"'
print(message)
return render(request, "errors/generic.html", {"message": message})
def write_users(registered_users, encryptedfile, updated_user, email):
jsondict = { "registered_users": registered_users }
try:
if settings.DEVSERVER:
with open(encryptedfile, 'w', encoding='utf-8') as json_f:
json.dump(jsondict, json_f, indent=1)
except Exception as e:
print(f" ! Exception dumping json <{e}>")
raise
commit_msg = f"Online (re-)registration of a troggle User"
editor = f"{updated_user.username} <{email}>"
try:
add_commit(encryptedfile, commit_msg, editor)
except Exception as e:
print(f" ! Exception doing git add/commit <{e}>")
raise
return True
class register_form(forms.Form): # not a model-form, just a form-form
username = forms.CharField(strip=True, required=True,