fix migrations
This commit is contained in:
parent
d36008934a
commit
6357a15f01
|
@ -12,7 +12,7 @@ from wtforms import (
|
||||||
|
|
||||||
from ereuse_devicehub.db import db
|
from ereuse_devicehub.db import db
|
||||||
from ereuse_devicehub.resources.agent.models import Person
|
from ereuse_devicehub.resources.agent.models import Person
|
||||||
from ereuse_devicehub.resources.user.models import User
|
from ereuse_devicehub.resources.user.models import User, UserValidation
|
||||||
|
|
||||||
|
|
||||||
class LoginForm(FlaskForm):
|
class LoginForm(FlaskForm):
|
||||||
|
@ -152,11 +152,20 @@ class UserNewRegisterForm(FlaskForm):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def save(self, commit=True):
|
def save(self, commit=True):
|
||||||
user = User(email=self.email.data, password=self.password.data)
|
user = User(email=self.email.data, password=self.password.data, active=False)
|
||||||
|
|
||||||
person = Person(
|
person = Person(
|
||||||
email=self.email.data, name=self.name.data, telephone=self.telephone.data
|
email=self.email.data, name=self.name.data, telephone=self.telephone.data
|
||||||
)
|
)
|
||||||
|
|
||||||
user.individuals.add(person)
|
user.individuals.add(person)
|
||||||
db.session.add(user)
|
db.session.add(user)
|
||||||
|
|
||||||
|
user_validation = UserValidation(
|
||||||
|
user=user,
|
||||||
|
)
|
||||||
|
self._token = user_validation.token
|
||||||
|
db.session.add(user_validation)
|
||||||
|
|
||||||
if commit:
|
if commit:
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
"""user validation
|
||||||
|
|
||||||
|
Revision ID: abba37ff5c80
|
||||||
|
Revises: e919fe0611ff
|
||||||
|
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 = 'e919fe0611ff'
|
||||||
|
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;")
|
|
@ -119,3 +119,19 @@ class Session(Thing):
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return '{0.token}'.format(self)
|
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)
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
<div class="pt-4 pb-2">
|
<div class="pt-4 pb-2">
|
||||||
<h5 class="card-title text-center pb-0 fs-4">Register as a new User</h5>
|
<h5 class="card-title text-center pb-0 fs-4">Register as a new User</h5>
|
||||||
|
{% if not form._token %}
|
||||||
<p class="text-center small">Enter an Email & password for to do a new register.</p>
|
<p class="text-center small">Enter an Email & password for to do a new register.</p>
|
||||||
{% if form.form_errors %}
|
{% if form.form_errors %}
|
||||||
<p class="text-danger">
|
<p class="text-danger">
|
||||||
|
@ -71,6 +72,14 @@
|
||||||
<p class="small mb-0">Don't have account? <a href="#TODO" onclick="$('#exampleModal').modal('show')" data-toggle="modal" data-target="#exampleModal">Create an account</a></p>
|
<p class="small mb-0">Don't have account? <a href="#TODO" onclick="$('#exampleModal').modal('show')" data-toggle="modal" data-target="#exampleModal">Create an account</a></p>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
{% else %}
|
||||||
|
<div class="col-12">
|
||||||
|
We have sent you a validation email. Please check your email.
|
||||||
|
</div>
|
||||||
|
<div class="col-12">
|
||||||
|
{{ form._token }}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -116,8 +116,6 @@ class UserRegistrationView(View):
|
||||||
form = UserNewRegisterForm()
|
form = UserNewRegisterForm()
|
||||||
if form.validate_on_submit():
|
if form.validate_on_submit():
|
||||||
form.save()
|
form.save()
|
||||||
messages.success('User created successfully!')
|
|
||||||
return flask.redirect(flask.url_for('core.login'))
|
|
||||||
context = {'form': form, 'version': __version__}
|
context = {'form': form, 'version': __version__}
|
||||||
return flask.render_template(self.template_name, **context)
|
return flask.render_template(self.template_name, **context)
|
||||||
|
|
||||||
|
|
Reference in New Issue