summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/views/other.py4
-rw-r--r--parsers/people.py4
-rw-r--r--parsers/users.py37
3 files changed, 29 insertions, 16 deletions
diff --git a/core/views/other.py b/core/views/other.py
index ce6c182..b97ea9a 100644
--- a/core/views/other.py
+++ b/core/views/other.py
@@ -59,6 +59,8 @@ def todos(request, module):
from troggle.parsers.drawings import todo as parsersdrawings
from troggle.parsers.locations import todo as parserslocations
from troggle.parsers.logbooks import todo as parserslogbooks
+ from troggle.parsers.people import todo as parserspeople
+ from troggle.parsers.users import todo as parsersusers
from troggle.parsers.survex import todo as parserssurvex
from troggle.urls import todo as todourls
@@ -81,6 +83,8 @@ def todos(request, module):
"parsers/drawings": parsersdrawings,
"parsers/locations": parserslocations,
"parsers/logbooks": parserslogbooks,
+ "parsers/people": parserspeople,
+ "parsers/users": parsersusers,
"parsers/survex": parserssurvex,
"urls": todourls,
}
diff --git a/parsers/people.py b/parsers/people.py
index 8f043d4..96bda41 100644
--- a/parsers/people.py
+++ b/parsers/people.py
@@ -17,6 +17,10 @@ The standalone script needs to be renedred defucnt, and all the parsing needs to
or they should use the same code by importing a module.
"""
+todo = """
+- [copy these from paper notes]
+"""
+
def parse_blurb(personline, header, person):
"""create mugshot Photo instance
Would be better if all this was done before the Person object was created in the db, then it would not
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