Admin sends a messagae on account creation

This commit is contained in:
Chris Proctor 2024-05-20 10:02:16 -04:00
parent 0ff6bb784a
commit 7d988186a0
4 changed files with 27 additions and 6 deletions

1
.gitignore vendored
View File

@ -1,3 +1,4 @@
**/__pycache__/*
server/app/migrations
server/database.sqlite
*.pem

View File

@ -95,9 +95,15 @@ class SubRosaUI:
def main():
from argparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument("username")
parser.add_argument("-k", "--key", default="subrosa_private_key.pem")
parser.add_argument("-s", "--server-url", default="http://127.0.0.1:5000")
parser.add_argument("username", help="Existing or new username.")
parser.add_argument("-k", "--key",
default="subrosa_private_key.pem",
help="Private key file. Will be created if it does not exist."
)
parser.add_argument("-s", "--server-url",
default="http://subrosa.makingwithcode.org",
help='Server URL. Use "http://127.0.0.1:5000" for a local server.'
)
args = parser.parse_args()
ui = SubRosaUI(args.key, args.server_url)
ui.run(args.username)

View File

@ -4,7 +4,6 @@ version = "0.1.0"
description = ""
authors = ["Chris Proctor <chris@chrisproctor.net>"]
readme = "README.md"
packages = [{include = "lab_subrosa"}]
[tool.poetry.dependencies]
python = "^3.10"
@ -12,7 +11,6 @@ django-banjo = "^0.5.1"
cryptography = "^42.0.7"
requests = "^2.31.0"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

View File

@ -7,16 +7,32 @@ import sys
sys.path.insert(0, "..")
from encryption import PrivateKey, PublicKey
def get_or_create_admin():
if not User.objects.filter(name='subrosa_admin').exists():
private_key = PrivateKey.generate()
public_key = private_key.get_public_key()
admin = User(name='subrosa_admin', public_key=str(public_key))
admin.save()
return User.objects.get(name='subrosa_admin')
@route_post("users/new", args={'name': str, 'public_key': str})
def create_user(params):
"Creates a new user"
admin = get_or_create_admin()
try:
PublicKey.load(params['public_key'])
public_key = PublicKey.load(params['public_key'])
except (ValueError, FileNotFoundError):
raise NotAllowed("Invalid public key")
try:
new_user = User.from_dict(params)
new_user.save()
welcome = "Welcome to SubRosa! Please be a good community member."
message = Message(
sender=admin,
recipient=new_user,
ciphertext=public_key.encrypt(welcome)
)
message.save()
return new_user.to_dict()
except:
raise NotAllowed(f"Username {params['name']} is already in use.")