From 4df33e8808bac0b6ecae5caa93fa39ebcb1eb5f6 Mon Sep 17 00:00:00 2001 From: Cayo Puigdefabregas Date: Tue, 8 Nov 2022 13:32:29 +0100 Subject: [PATCH] remove user_registration --- .../versions/abba37ff5c80_user_validation.py | 60 ------ ereuse_devicehub/register/__init__.py | 0 ereuse_devicehub/register/forms.py | 114 ------------ .../registration/email_admin_new_user.txt | 4 - .../registration/email_validation.html | 9 - .../registration/email_validation.txt | 7 - .../registration/user_registration.html | 172 ------------------ .../registration/user_validation.html | 68 ------- ereuse_devicehub/register/views.py | 50 ----- ereuse_devicehub/resources/user/models.py | 16 -- 10 files changed, 500 deletions(-) delete mode 100644 ereuse_devicehub/migrations/versions/abba37ff5c80_user_validation.py delete mode 100644 ereuse_devicehub/register/__init__.py delete mode 100644 ereuse_devicehub/register/forms.py delete mode 100644 ereuse_devicehub/register/templates/registration/email_admin_new_user.txt delete mode 100644 ereuse_devicehub/register/templates/registration/email_validation.html delete mode 100644 ereuse_devicehub/register/templates/registration/email_validation.txt delete mode 100644 ereuse_devicehub/register/templates/registration/user_registration.html delete mode 100644 ereuse_devicehub/register/templates/registration/user_validation.html delete mode 100644 ereuse_devicehub/register/views.py diff --git a/ereuse_devicehub/migrations/versions/abba37ff5c80_user_validation.py b/ereuse_devicehub/migrations/versions/abba37ff5c80_user_validation.py deleted file mode 100644 index 3b738257..00000000 --- a/ereuse_devicehub/migrations/versions/abba37ff5c80_user_validation.py +++ /dev/null @@ -1,60 +0,0 @@ -"""user validation - -Revision ID: abba37ff5c80 -Revises: d65745749e34 -Create Date: 2022-09-30 10:01:19.761864 - -""" -import sqlalchemy as sa -from alembic import context, op -from sqlalchemy.dialects import postgresql - -# revision identifiers, used by Alembic. -revision = 'abba37ff5c80' -down_revision = 'd65745749e34' -branch_labels = None -depends_on = None - - -def get_inv(): - INV = context.get_x_argument(as_dictionary=True).get('inventory') - if not INV: - raise ValueError("Inventory value is not specified") - return INV - - -def upgrade(): - op.create_table( - 'user_validation', - sa.Column('id', sa.BigInteger(), nullable=False), - sa.Column( - 'updated', - sa.TIMESTAMP(timezone=True), - server_default=sa.text('CURRENT_TIMESTAMP'), - nullable=False, - ), - sa.Column( - 'created', - sa.TIMESTAMP(timezone=True), - server_default=sa.text('CURRENT_TIMESTAMP'), - nullable=False, - ), - sa.Column('joined_at', sa.TIMESTAMP(timezone=True), nullable=True), - sa.Column('expired', sa.BigInteger(), nullable=False), - sa.Column('token', postgresql.UUID(as_uuid=True), nullable=False), - sa.Column('user_id', postgresql.UUID(as_uuid=True), nullable=False), - sa.PrimaryKeyConstraint('id'), - sa.ForeignKeyConstraint( - ['user_id'], - ['common.user.id'], - ), - sa.UniqueConstraint('token'), - schema=f'{get_inv()}', - ) - - op.execute(f"CREATE SEQUENCE {get_inv()}.user_validation_seq;") - - -def downgrade(): - op.drop_table('user_validation', schema=f'{get_inv()}') - op.execute(f"DROP SEQUENCE {get_inv()}.user_validation_seq;") diff --git a/ereuse_devicehub/register/__init__.py b/ereuse_devicehub/register/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ereuse_devicehub/register/forms.py b/ereuse_devicehub/register/forms.py deleted file mode 100644 index 28b47ee6..00000000 --- a/ereuse_devicehub/register/forms.py +++ /dev/null @@ -1,114 +0,0 @@ -from flask import current_app as app -from flask import render_template -from flask_wtf import FlaskForm -from wtforms import EmailField, PasswordField, StringField, validators - -from ereuse_devicehub.db import db -from ereuse_devicehub.mail.sender import send_email -from ereuse_devicehub.resources.agent.models import Person -from ereuse_devicehub.resources.user.models import User, UserValidation - - -class UserNewRegisterForm(FlaskForm): - email = EmailField( - 'Email Address', [validators.DataRequired(), validators.Length(min=6, max=35)] - ) - password = PasswordField( - 'Password', [validators.DataRequired(), validators.Length(min=6, max=35)] - ) - password2 = PasswordField( - 'Password', [validators.DataRequired(), validators.Length(min=6, max=35)] - ) - name = StringField( - 'Name', [validators.DataRequired(), validators.Length(min=3, max=35)] - ) - - error_messages = { - 'invalid_login': ( - "Please enter a correct email and password. Note that both " - "fields may be case-sensitive." - ), - 'inactive': "This account is inactive.", - } - - def validate(self, extra_validators=None): - is_valid = super().validate(extra_validators) - - if not is_valid: - return False - - email = self.email.data - password = self.password.data - password2 = self.password2.data - if password != password2: - self.form_errors.append('The passwords are not equal.') - return False - - txt = 'This email are in use.' - email = self.email.data - if User.query.filter_by(email=email).first(): - self.form_errors.append(txt) - return False - - self.email.data = self.email.data.strip() - self.password.data = self.password.data.strip() - - return True - - def save(self, commit=True): - user_validation = self.new_user() - if commit: - db.session.commit() - - self._token = user_validation.token - self.send_mail() - self.send_mail_admin(user_validation.user) - - def new_user(self): - user = User(email=self.email.data, password=self.password.data, active=False) - - person = Person( - email=self.email.data, - name=self.name.data, - ) - - user.individuals.add(person) - db.session.add(user) - - user_validation = UserValidation( - user=user, - ) - db.session.add(user_validation) - - return user_validation - - def send_mail(self): - host = app.config.get('HOST') - token = self._token - url = f'https://{ host }/validate_user/{ token }' - template = 'registration/email_validation.txt' - template_html = 'registration/email_validation.html' - context = { - 'name': self.name.data, - 'host': host, - 'url': url, - } - subject = "Please activate your Usody account" - message = render_template(template, **context) - message_html = render_template(template_html, **context) - - send_email(subject, [self.email.data], message, html_body=message_html) - - def send_mail_admin(self, user): - person = next(iter(user.individuals)) - context = { - 'email': person.email, - 'name': person.name, - } - template = 'registration/email_admin_new_user.txt' - message = render_template(template, **context) - subject = "New Register" - - email_admin = app.config.get("EMAIL_ADMIN") - if email_admin: - send_email(subject, [email_admin], message) diff --git a/ereuse_devicehub/register/templates/registration/email_admin_new_user.txt b/ereuse_devicehub/register/templates/registration/email_admin_new_user.txt deleted file mode 100644 index 4b6344a2..00000000 --- a/ereuse_devicehub/register/templates/registration/email_admin_new_user.txt +++ /dev/null @@ -1,4 +0,0 @@ -A new user has been registered: - -Name: {{ name }} -Email: {{ email }} diff --git a/ereuse_devicehub/register/templates/registration/email_validation.html b/ereuse_devicehub/register/templates/registration/email_validation.html deleted file mode 100644 index 3779df3b..00000000 --- a/ereuse_devicehub/register/templates/registration/email_validation.html +++ /dev/null @@ -1,9 +0,0 @@ -Welcome to Usody.com, {{ name }}!
-
-Please confirm your account by clicking on the following link:
-{{ url }}
-
- -
-Plaça Eusebi Güell 6-7, Edifici Vèrtex (UPC), planta 0, Barcelona 08034, Spain
-Associació Pangea – Coordinadora Comunicació per a la Cooperació - NIF: G-60437761 diff --git a/ereuse_devicehub/register/templates/registration/email_validation.txt b/ereuse_devicehub/register/templates/registration/email_validation.txt deleted file mode 100644 index 760a1878..00000000 --- a/ereuse_devicehub/register/templates/registration/email_validation.txt +++ /dev/null @@ -1,7 +0,0 @@ -Welcome to Usody.com, {{ name }}! - -Please confirm your account by clicking on the following link: {{ url }} - --- -Plaça Eusebi Güell 6-7, Edifici Vèrtex (UPC), planta 0, Barcelona 08034, Spain -Associació Pangea – Coordinadora Comunicació per a la Cooperació - NIF: G-60437761 diff --git a/ereuse_devicehub/register/templates/registration/user_registration.html b/ereuse_devicehub/register/templates/registration/user_registration.html deleted file mode 100644 index 74df13a4..00000000 --- a/ereuse_devicehub/register/templates/registration/user_registration.html +++ /dev/null @@ -1,172 +0,0 @@ -{% extends "ereuse_devicehub/base.html" %} - -{% block page_title %}Create your account{% endblock %} - -{% block body %} -
-
- -
-
-
-
- -
- - - -
- -
- -
- -
-
Create your account
- {% if not form._token %} - {% if form.form_errors %} -

- {% for error in form.form_errors %} - {{ error }}
- {% endfor %} -

- {% endif %} -
- -
- {{ form.csrf_token }} - -
- - {% if form.name.errors %} -

- {% for error in form.name.errors %} - {{ error }}
- {% endfor %} -

- {% endif %} -
- -
- -
Please enter your email.
- {% if form.email.errors %} -

- {% for error in form.email.errors %} - {{ error }}
- {% endfor %} -

- {% endif %} -
- -
-
- - -
-
Please enter a password!
- {% if form.password.errors %} -

- {% for error in form.password.errors %} - {{ error }}
- {% endfor %} -

- {% endif %} -
- -
-
- - -
-
Please enter a password again!
- {% if form.password2.errors %} -

- {% for error in form.password2.errors %} - {{ error }}
- {% endfor %} -

- {% endif %} -
- -
- Password must be at least 6 characters. -
- -
- - I accept the - terms and - privacy policy - -
- -
- -
-
-

- Already have an account? Sign in -

-
-
- {% else %} -
-
- We have sent you a validation email.
- Please check your email. -
- {% endif %} - -
-
- -
- Help | - Privacy | - Terms -
- -
-
-
- - - - -
-{% endblock body %} diff --git a/ereuse_devicehub/register/templates/registration/user_validation.html b/ereuse_devicehub/register/templates/registration/user_validation.html deleted file mode 100644 index c48ac592..00000000 --- a/ereuse_devicehub/register/templates/registration/user_validation.html +++ /dev/null @@ -1,68 +0,0 @@ -{% extends "ereuse_devicehub/base.html" %} - -{% block page_title %}Login{% endblock %} - -{% block body %} -
-
- -
-
-
-
- -
- - - -
- -
- -
- - {% if is_valid %} -
-
User is valid
- -
- You have successfully activated your account!
- Sign in. -
-
- {% else %} -
-
User is Invalid
-
-
- Invalid -
-
- -
-
- Sorry, your token not exist or is expired. -
-
-
- {% endif %} - -
-
- -
- Help | - Privacy | - Terms -
- -
-
-
- -
- -
-
- -{% endblock body %} diff --git a/ereuse_devicehub/register/views.py b/ereuse_devicehub/register/views.py deleted file mode 100644 index d506ecba..00000000 --- a/ereuse_devicehub/register/views.py +++ /dev/null @@ -1,50 +0,0 @@ -import flask -from flask import Blueprint -from flask.views import View - -from ereuse_devicehub import __version__ -from ereuse_devicehub.db import db -from ereuse_devicehub.register.forms import UserNewRegisterForm -from ereuse_devicehub.resources.user.models import UserValidation - -register = Blueprint('register', __name__, template_folder='templates') - - -class UserRegistrationView(View): - methods = ['GET', 'POST'] - template_name = 'registration/user_registration.html' - - def dispatch_request(self): - form = UserNewRegisterForm() - if form.validate_on_submit(): - form.save() - context = {'form': form, 'version': __version__} - return flask.render_template(self.template_name, **context) - - -class UserValidationView(View): - methods = ['GET'] - template_name = 'registration/user_validation.html' - - def dispatch_request(self, token): - context = {'is_valid': self.is_valid(token), 'version': __version__} - return flask.render_template(self.template_name, **context) - - def is_valid(self, token): - user_valid = UserValidation.query.filter_by(token=token).first() - if not user_valid: - return False - user = user_valid.user - user.active = True - db.session.commit() - return True - - -register.add_url_rule( - '/new_register/', - view_func=UserRegistrationView.as_view('user-registration'), -) -register.add_url_rule( - '/validate_user/', - view_func=UserValidationView.as_view('user-validation'), -) diff --git a/ereuse_devicehub/resources/user/models.py b/ereuse_devicehub/resources/user/models.py index a65554ee..5eadb21d 100644 --- a/ereuse_devicehub/resources/user/models.py +++ b/ereuse_devicehub/resources/user/models.py @@ -119,19 +119,3 @@ class Session(Thing): def __str__(self) -> str: return '{0.token}'.format(self) - - -class UserValidation(Thing): - id = Column(BigInteger, Sequence('user_validation_seq'), primary_key=True) - expired = Column(BigInteger, default=0) - joined_at = db.Column(db.DateTime()) - token = Column(UUID(as_uuid=True), default=uuid4, unique=True, nullable=False) - user_id = db.Column(db.UUID(as_uuid=True), db.ForeignKey(User.id)) - user = db.relationship( - User, - backref=db.backref('user_validation', lazy=True, collection_class=set), - collection_class=set, - ) - - def __str__(self) -> str: - return '{0.token}'.format(self)