aboutsummaryrefslogtreecommitdiff
path: root/gn3/auth/authorisation
diff options
context:
space:
mode:
Diffstat (limited to 'gn3/auth/authorisation')
-rw-r--r--gn3/auth/authorisation/views.py38
1 files changed, 29 insertions, 9 deletions
diff --git a/gn3/auth/authorisation/views.py b/gn3/auth/authorisation/views.py
index 73d39d2..6ac3be0 100644
--- a/gn3/auth/authorisation/views.py
+++ b/gn3/auth/authorisation/views.py
@@ -8,7 +8,9 @@ from gn3.auth.blueprint import oauth2
from .groups import user_group
from .errors import UserRegistrationError
from .roles import user_roles as _user_roles
+
from ..authentication.oauth2.resource_server import require_oauth
+from ..authentication.users import User, save_user, set_user_password
from ..authentication.oauth2.models.oauth2token import token_by_access_token
@oauth2.route("/user", methods=["GET"])
@@ -41,6 +43,8 @@ def __email_valid__(email: str) -> Tuple[bool, Optional[str]]:
return False, "Empty email address"
## Check that the address is a valid email address
+ ## Review use of `email-validator` or `pyIsEmail` python packages for
+ ## validating the emails, if it turns out this is important.
## Success
return True, None
@@ -54,6 +58,12 @@ def __password_valid__(password, confirm_password) -> Tuple[bool, Optional[str]]
return True, None
+def __user_name_valid__(name: str) -> Tuple[bool, Optional[str]]:
+ if name == "":
+ return False, "User's name not provided."
+
+ return True, None
+
def __assert_not_logged_in__(conn: db.DbConnection):
bearer = request.headers.get('Authorization')
if bearer:
@@ -70,17 +80,27 @@ def register_user():
__assert_not_logged_in__(conn)
form = request.form
+ email = form.get("email", "")
+ password = form.get("password", "")
+ user_name = form.get("user_name", "")
errors = tuple(
error[1] for error in
- [__email_valid__(form.get("email", "")),
- __password_valid__(form.get("password", ""),
- form.get("confirm_password", ""))]
+ [__email_valid__(email),
+ __password_valid__(password, form.get("confirm_password", "")),
+ __user_name_valid__(user_name)]
if error[0])
if len(errors) > 0:
raise UserRegistrationError(*errors)
- # Provide default privileges
- return jsonify(
- {
- "error": "not_implemented",
- "error_description": "Feature not implemented"
- }), 500
+
+ with db.cursor(conn) as cursor:
+ user, _hashed_password = set_user_password(
+ cursor, save_user(cursor, email, user_name), password)
+ return jsonify(
+ {
+ "user_id": user.user_id,
+ "email": user.email,
+ "name": user.name
+ }), 200
+
+ raise Exception(
+ "unknown_error", "The system experienced an unexpected error.")