From f6447d49e02de379298e918e9892f148472b74e8 Mon Sep 17 00:00:00 2001 From: tomdds Date: Fri, 9 Aug 2019 16:01:32 -0400 Subject: [PATCH 1/2] Allow creation of new users in dev mode --- atst/domain/auth.py | 1 + atst/routes/dev.py | 84 +++++++++++++++++++++++++++++++++++---------- 2 files changed, 66 insertions(+), 19 deletions(-) diff --git a/atst/domain/auth.py b/atst/domain/auth.py index 1737763f..0f99af09 100644 --- a/atst/domain/auth.py +++ b/atst/domain/auth.py @@ -6,6 +6,7 @@ from atst.domain.users import Users UNPROTECTED_ROUTES = [ "atst.root", "dev.login_dev", + "dev.dev_new_user", "atst.login_redirect", "atst.logout", "atst.unauthorized", diff --git a/atst/routes/dev.py b/atst/routes/dev.py index ed7adc43..4f6903d1 100644 --- a/atst/routes/dev.py +++ b/atst/routes/dev.py @@ -11,12 +11,14 @@ from flask import ( import pendulum from . import redirect_after_login_url, current_user_setup +from atst.domain.exceptions import AlreadyExistsError, NotFoundError from atst.domain.users import Users from atst.domain.permission_sets import PermissionSets from atst.forms.data import SERVICE_BRANCHES from atst.queue import queue from atst.utils import pick + bp = Blueprint("dev", __name__) _ALL_PERMS = [ @@ -110,31 +112,75 @@ _DEV_USERS = { } +class IncompleteInfoError(Exception): + @property + def message(self): + return "You must provide each of: first_name, last_name and dod_id" + + @bp.route("/login-dev") def login_dev(): - role = request.args.get("username", "amanda") - user_data = _DEV_USERS[role] - user = Users.get_or_create_by_dod_id( - user_data["dod_id"], - **pick( - [ - "permission_sets", - "first_name", - "last_name", - "email", - "service_branch", - "phone_number", - "citizenship", - "designation", - "date_latest_training", - ], - user_data, - ), - ) + dod_id = request.args.get("dod_id", None) + + if dod_id is not None: + user = Users.get_by_dod_id(dod_id) + else: + role = request.args.get("username", "amanda") + user_data = _DEV_USERS[role] + user = Users.get_or_create_by_dod_id( + user_data["dod_id"], + **pick( + [ + "permission_sets", + "first_name", + "last_name", + "email", + "service_branch", + "phone_number", + "citizenship", + "designation", + "date_latest_training", + ], + user_data, + ), + ) + current_user_setup(user) return redirect(redirect_after_login_url()) +@bp.route("/dev-new-user") +def dev_new_user(): + first_name = request.args.get("first_name", None) + last_name = request.args.get("last_name", None) + dod_id = request.args.get("dod_id", None) + + if None in [first_name, last_name, dod_id]: + raise IncompleteInfoError() + + try: + Users.get_by_dod_id(dod_id) + raise AlreadyExistsError("User with dod_id {}".format(dod_id)) + except NotFoundError: + pass + + new_user = { + "first_name": first_name, + "last_name": last_name, + "email": "{}@example.com".format(first_name), + "service_branch": random_service_branch(), + "phone_number": "1234567890", + "citizenship": "United States", + "designation": "Military", + "date_latest_training": pendulum.date(2018, 1, 1), + } + + created_user = Users.create(dod_id, **new_user) + + current_user_setup(created_user) + return redirect(redirect_after_login_url()) + + @bp.route("/test-email") def test_email(): queue.send_mail( From 59f43c69ee11fde9b93b15420dd27518e6c02022 Mon Sep 17 00:00:00 2001 From: tomdds Date: Mon, 12 Aug 2019 10:14:49 -0400 Subject: [PATCH 2/2] Only populate passed info when creating new user --- atst/routes/dev.py | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/atst/routes/dev.py b/atst/routes/dev.py index 4f6903d1..74c3a943 100644 --- a/atst/routes/dev.py +++ b/atst/routes/dev.py @@ -164,16 +164,7 @@ def dev_new_user(): except NotFoundError: pass - new_user = { - "first_name": first_name, - "last_name": last_name, - "email": "{}@example.com".format(first_name), - "service_branch": random_service_branch(), - "phone_number": "1234567890", - "citizenship": "United States", - "designation": "Military", - "date_latest_training": pendulum.date(2018, 1, 1), - } + new_user = {"first_name": first_name, "last_name": last_name} created_user = Users.create(dod_id, **new_user)