Admin sends a messagae on account creation
This commit is contained in:
parent
0ff6bb784a
commit
7d988186a0
|
@ -1,3 +1,4 @@
|
||||||
**/__pycache__/*
|
**/__pycache__/*
|
||||||
server/app/migrations
|
server/app/migrations
|
||||||
server/database.sqlite
|
server/database.sqlite
|
||||||
|
*.pem
|
||||||
|
|
|
@ -95,9 +95,15 @@ class SubRosaUI:
|
||||||
def main():
|
def main():
|
||||||
from argparse import ArgumentParser
|
from argparse import ArgumentParser
|
||||||
parser = ArgumentParser()
|
parser = ArgumentParser()
|
||||||
parser.add_argument("username")
|
parser.add_argument("username", help="Existing or new username.")
|
||||||
parser.add_argument("-k", "--key", default="subrosa_private_key.pem")
|
parser.add_argument("-k", "--key",
|
||||||
parser.add_argument("-s", "--server-url", default="http://127.0.0.1:5000")
|
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()
|
args = parser.parse_args()
|
||||||
ui = SubRosaUI(args.key, args.server_url)
|
ui = SubRosaUI(args.key, args.server_url)
|
||||||
ui.run(args.username)
|
ui.run(args.username)
|
||||||
|
|
|
@ -4,7 +4,6 @@ version = "0.1.0"
|
||||||
description = ""
|
description = ""
|
||||||
authors = ["Chris Proctor <chris@chrisproctor.net>"]
|
authors = ["Chris Proctor <chris@chrisproctor.net>"]
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
packages = [{include = "lab_subrosa"}]
|
|
||||||
|
|
||||||
[tool.poetry.dependencies]
|
[tool.poetry.dependencies]
|
||||||
python = "^3.10"
|
python = "^3.10"
|
||||||
|
@ -12,7 +11,6 @@ django-banjo = "^0.5.1"
|
||||||
cryptography = "^42.0.7"
|
cryptography = "^42.0.7"
|
||||||
requests = "^2.31.0"
|
requests = "^2.31.0"
|
||||||
|
|
||||||
|
|
||||||
[build-system]
|
[build-system]
|
||||||
requires = ["poetry-core"]
|
requires = ["poetry-core"]
|
||||||
build-backend = "poetry.core.masonry.api"
|
build-backend = "poetry.core.masonry.api"
|
||||||
|
|
|
@ -7,16 +7,32 @@ import sys
|
||||||
sys.path.insert(0, "..")
|
sys.path.insert(0, "..")
|
||||||
from encryption import PrivateKey, PublicKey
|
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})
|
@route_post("users/new", args={'name': str, 'public_key': str})
|
||||||
def create_user(params):
|
def create_user(params):
|
||||||
"Creates a new user"
|
"Creates a new user"
|
||||||
|
admin = get_or_create_admin()
|
||||||
try:
|
try:
|
||||||
PublicKey.load(params['public_key'])
|
public_key = PublicKey.load(params['public_key'])
|
||||||
except (ValueError, FileNotFoundError):
|
except (ValueError, FileNotFoundError):
|
||||||
raise NotAllowed("Invalid public key")
|
raise NotAllowed("Invalid public key")
|
||||||
try:
|
try:
|
||||||
new_user = User.from_dict(params)
|
new_user = User.from_dict(params)
|
||||||
new_user.save()
|
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()
|
return new_user.to_dict()
|
||||||
except:
|
except:
|
||||||
raise NotAllowed(f"Username {params['name']} is already in use.")
|
raise NotAllowed(f"Username {params['name']} is already in use.")
|
||||||
|
|
Loading…
Reference in New Issue