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

split out users from people

This commit is contained in:
2025-01-20 14:43:31 +00:00
parent 4f9468ec66
commit df52ee9251
3 changed files with 110 additions and 94 deletions

View File

@@ -1,9 +1,6 @@
import base64
import csv
import json
import os
import re
from cryptography.fernet import Fernet
from html import unescape
from pathlib import Path
@@ -89,96 +86,7 @@ def troggle_slugify(longname):
slug = f"{slug}_{slug_cache[slug]}"
slug_cache[slug] = 1
return slug
USERS_FILE = "users_e.json"
ENCRYPTED_DIR = "encrypted"
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)
print(f)
jsonfile = settings.EXPOWEB / ENCRYPTED_DIR / USERS_FILE
jsonurl = "/" + str(Path(ENCRYPTED_DIR) / USERS_FILE)
if not (jsonfile.is_file()):
message = f" ! Users json file does not exist: '{jsonfile}'"
DataIssue.objects.create(parser=PARSER_USERS, message=message)
print(message)
return None
with open(jsonfile, 'r', encoding='utf-8') as json_f:
try:
registered_users_dict = json.load(json_f)
except FileNotFoundError:
print("File not found!")
except json.JSONDecodeError:
print("Invalid JSON format! - JSONDecodeError")
except Exception as e:
print(f"An exception occurred: {str(e)}")
message = f"! Troggle USERs. Failed to load {jsonfile} JSON file"
print(message)
DataIssue.objects.update_or_create(parser=PARSER_USERS, message=message, url=jsonurl)
return None
users_list = registered_users_dict["registered_users"]
print(f" - {len(users_list)} users read from JSON")
for userdata in users_list:
if userdata["username"]:
if userdata["username"] == "expo":
continue
if userdata["username"] == "expoadmin":
continue
try:
u = userdata["username"]
e_email = userdata["email"]
email = f.decrypt(e_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" # stores hash not password
user.is_staff = False
user.is_superuser = False
user.save()
except Exception as e:
print(f"Exception <{e}>\nusers in db: {len(User.objects.all())}\n{User.objects.all()}")
formatted_json = json.dumps(userdata, indent=4)
print(formatted_json)
return None
else:
print(f" - user: BAD username for {userdata} ")
# if userdata["date"] != "" or userdata["date"] != "None":
# message = f"! {str(self.walletname)} Date format not ISO {userdata['date']}. Failed to load from {jsonfile} JSON file"
# from troggle.core.models.troggle import DataIssue
# DataIssue.objects.update_or_create(parser="wallets", message=message, url=wurl)
ru = []
for u in User.objects.all():
if u.username == "expo":
continue
if u.username == "expoadmin":
continue
e_email = f.encrypt(u.email.encode("utf8")).decode()
ru.append({"username":u.username, "email": e_email, "password": u.password})
print(u.username, e_email)
original = f.decrypt(e_email).decode()
print(u.username, original)
jsondict = { "registered_users": ru }
encryptedfile = settings.EXPOWEB / ENCRYPTED_DIR / "encrypt.json"
# with open(encryptedfile, 'w', encoding='utf-8') as json_f:
# json.dump(jsondict, json_f, indent=1)
# return True
return slug
def load_people_expos():
"""This is where the folk.csv file is parsed to read people's names.