From 60bc75010dd4d9496da9719e65ceadb867c1c1e2 Mon Sep 17 00:00:00 2001 From: Josako Date: Tue, 23 Apr 2024 08:55:08 +0200 Subject: [PATCH] User registration v1 added --- eveai_app/models/user.py | 2 ++ eveai_app/templates/base.html | 8 +++++ eveai_app/templates/user/user.html | 53 ++++++++++++++++++++++++++++++ eveai_app/views/user_forms.py | 5 +-- eveai_app/views/user_views.py | 22 +++++++++---- 5 files changed, 81 insertions(+), 9 deletions(-) create mode 100644 eveai_app/templates/user/user.html diff --git a/eveai_app/models/user.py b/eveai_app/models/user.py index bc99def..51aabc3 100644 --- a/eveai_app/models/user.py +++ b/eveai_app/models/user.py @@ -48,6 +48,8 @@ class User(db.Model): is_active = db.Column(db.Boolean, default=True) is_tester = db.Column(db.Boolean, default=False) is_admin = db.Column(db.Boolean, default=False) + is_super = db.Column(db.Boolean, default=False) + confirmed_at = db.Column(db.DateTime, nullable=True) valid_to = db.Column(db.Date, nullable=True) # Login Information diff --git a/eveai_app/templates/base.html b/eveai_app/templates/base.html index 6781a93..bc94efd 100644 --- a/eveai_app/templates/base.html +++ b/eveai_app/templates/base.html @@ -14,6 +14,14 @@
Register
Login

+ {% with messages = get_flashed_messages()%} + {% if messages%} + {% for message in messages%} +

{{message}}

+ {%endfor%} + {%endif%} + {%endwith%} +
{% block content %}{% endblock %} diff --git a/eveai_app/templates/user/user.html b/eveai_app/templates/user/user.html new file mode 100644 index 0000000..ab6cd8e --- /dev/null +++ b/eveai_app/templates/user/user.html @@ -0,0 +1,53 @@ +{% extends 'base.html' %} + +{% block title %}User Details{% endblock %} + +{% block content %} +
+

+ {{ form.user_name.label }}
+ {{ form.user_name(size=80) }} +

+

+ {{ form.email.label }}
+ {{ form.email(size=80) }} +

+

+ {{ form.password.label }}
+ {{ form.password(size=80) }} +

+

+ {{ form.first_name.label }}
+ {{ form.first_name(size=80) }} +

+

+ {{ form.last_name.label }}
+ {{ form.last_name(size=80) }} +

+

+ {{ form.is_active.label }}
+ {{ form.is_active() }} +

+

+ {{ form.is_tester.label }}
+ {{ form.is_tester() }} +

+

+ {{ form.is_admin.label }}
+ {{ form.is_admin() }} +

+

+ {{ form.is_super.label }}
+ {{ form.is_super() }} +

+

+ {{ form.valid_to.label }}
+ {{ form.valid_to() }} +

+

+ {{ form.tenant_id.label }}
+ {{ form.tenant_id() }} +

+

{{ form.submit() }}

+
+{% endblock %} diff --git a/eveai_app/views/user_forms.py b/eveai_app/views/user_forms.py index 7abae40..208d9ba 100644 --- a/eveai_app/views/user_forms.py +++ b/eveai_app/views/user_forms.py @@ -21,6 +21,7 @@ class UserForm(FlaskForm): is_active = BooleanField('Is Active') is_tester = BooleanField('Is Tester') is_admin = BooleanField('Is Administrator') - valid_to: DateField('Valid To', id='datepicker') - tenant = IntegerField('Tenant ID', validators=[NumberRange(min=0)]) + is_super = BooleanField('Is Super User') + valid_to = DateField('Valid to', id='datepicker') + tenant_id = IntegerField('Tenant ID', validators=[NumberRange(min=0)]) submit = SubmitField('Submit') diff --git a/eveai_app/views/user_views.py b/eveai_app/views/user_views.py index 6265a5a..1b697d9 100644 --- a/eveai_app/views/user_views.py +++ b/eveai_app/views/user_views.py @@ -2,7 +2,7 @@ from datetime import datetime as dt, timezone as tz from flask import request, redirect, url_for, flash, render_template, Blueprint from ..models.user import User, Tenant -from ..extensions import db +from ..extensions import db, bcrypt from .user_forms import TenantForm, UserForm user_bp = Blueprint('user_bp', __name__, url_prefix='/user') @@ -60,7 +60,7 @@ def tenant(): def user(): if request.method == 'POST': # Handle the required attributes - username = request.form.get('username') + username = request.form.get('user_name') email = request.form.get('email') password = request.form.get('password') first_name = request.form.get('first_name') @@ -78,12 +78,16 @@ def user(): elif not last_name: error = 'Last name is required.' if error is None: - new_user = User(username=username, email=email, password=password, first_name=first_name, last_name=last_name) + password_hash = bcrypt.generate_password_hash(password).decode('utf-8') + + # Create new user if there is no error + new_user = User(user_name=username, email=email, password=password_hash, first_name=first_name, last_name=last_name) # Handle optional attributes - new_user.is_active = request.form.get('is_active') - new_user.is_tester = request.form.get('is_tester') - new_user.is_admin = request.form.get('is_admin') + new_user.is_active = bool(request.form.get('is_active')) + new_user.is_tester = bool(request.form.get('is_tester')) + new_user.is_admin = bool(request.form.get('is_admin')) + new_user.is_super = bool(request.form.get('is_super')) new_user.valid_to = request.form.get('valid_to') # Handle Timestamps @@ -92,7 +96,11 @@ def user(): new_user.updated_at = timestamp # Handle the relations - new_user.tenant_id = request.form.get('tenant_id') + tenant_id = request.form.get('tenant_id') + the_tenant = Tenant.query.get(tenant_id) + new_user.tenant = the_tenant + + # Add the new user to the database and commit the changes try: db.session.add(new_user)