summaryrefslogtreecommitdiffstats
path: root/parsers/users.py
diff options
context:
space:
mode:
authorPhilip Sargent <philip.sargent@gmail.com>2025-01-20 15:30:15 +0000
committerPhilip Sargent <philip.sargent@gmail.com>2025-01-20 15:30:15 +0000
commit1fcb2c520385209e0e90ac7e4a89a9057a25b1c2 (patch)
treee2d0d45bde0e1e6eaa51706a39930a0ff1ed0df5 /parsers/users.py
parent960958c9227b6b58399cf15cc5ecbfe6611649a3 (diff)
downloadtroggle-1fcb2c520385209e0e90ac7e4a89a9057a25b1c2.tar.gz
troggle-1fcb2c520385209e0e90ac7e4a89a9057a25b1c2.tar.bz2
troggle-1fcb2c520385209e0e90ac7e4a89a9057a25b1c2.zip
generated to-do lists updated
Diffstat (limited to 'parsers/users.py')
-rw-r--r--parsers/users.py37
1 files changed, 21 insertions, 16 deletions
diff --git a/parsers/users.py b/parsers/users.py
index 2544ed1..6a14f5b 100644
--- a/parsers/users.py
+++ b/parsers/users.py
@@ -10,12 +10,17 @@ from django.db import models
from troggle.core.models.troggle import DataIssue, Expedition, Person, PersonExpedition
-"""These functions do not match how the stand-alone folk script works. So the script produces an HTML file which has
-href links to pages in troggle which troggle does not think are right.
-The standalone script needs to be renedred defucnt, and all the parsing needs to be in troggle. Either that,
-or they should use the same code by importing a module.
+"""This imports the registered troggle users, who are nearly-all, but not quite, Persons.
+exceptions are "expo" and "expoadmin" which are created by the databaseReset.py import program.
+
+This imports unencrypted email addresses but never exports them.
+
+Passwords are only ever stored as hashes using the standard Django functions.
"""
+todo = """
+- [copy these from paper notes]
+"""
USERS_FILE = "users_e.json"
ENCRYPTED_DIR = "encrypted"
@@ -28,8 +33,6 @@ def load_users():
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)
@@ -57,27 +60,29 @@ def load_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":
+ if userdata["username"] in [ "expo", "expoadmin" ]:
continue
+ if "encrypted" not in userdata:
+ userdata["encrypted"] = True
try:
u = userdata["username"]
- e_email = userdata["email"]
- email = f.decrypt(e_email).decode()
+ email = userdata["email"]
+ 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" # stores hash not password
+ 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}>\nusers in db: {len(User.objects.all())}\n{User.objects.all()}")
+ print(f"Exception <{e}>\n{len(User.objects.all())} users now in db:\n{User.objects.all()}")
formatted_json = json.dumps(userdata, indent=4)
print(formatted_json)
+ raise
return None
else:
print(f" - user: BAD username for {userdata} ")
@@ -94,8 +99,8 @@ def load_users():
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)
+ ru.append({"username":u.username, "email": e_email, "password": u.password, "encrypted": True})
+ # print(u.username, e_email)
original = f.decrypt(e_email).decode()
print(u.username, original)
@@ -103,5 +108,5 @@ def load_users():
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 True