Admin sends a messagae on account creation
This commit is contained in:
parent
0ff6bb784a
commit
7d988186a0
|
@ -1,3 +1,4 @@
|
|||
**/__pycache__/*
|
||||
server/app/migrations
|
||||
server/database.sqlite
|
||||
*.pem
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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.")
|
||||
|
|
Loading…
Reference in New Issue