diff --git a/lib/hawat/migrations/versions/432c8bc8e49b_lowercase_check.py b/lib/hawat/migrations/versions/432c8bc8e49b_lowercase_check.py new file mode 100644 index 0000000000000000000000000000000000000000..0ab6aeabbbd1df0a6db8ede6920f1c7409b933ad --- /dev/null +++ b/lib/hawat/migrations/versions/432c8bc8e49b_lowercase_check.py @@ -0,0 +1,23 @@ +"""Lowercase check constraint + +Revision ID: 432c8bc8e49b +Revises: 426e6e986b40 +Create Date: 2022-07-19 11:48:46.111909 + +""" +from alembic import op + +# revision identifiers, used by Alembic. +revision = '432c8bc8e49b' +down_revision = '426e6e986b40' +branch_labels = None +depends_on = None + + +def upgrade(): + op.execute("ALTER TABLE users ADD CONSTRAINT login_lowercase CHECK (login = lower(login))") + op.execute("ALTER TABLE users ADD CONSTRAINT email_lowercase CHECK (email = lower(email))") + +def downgrade(): + op.execute("ALTER TABLE users DROP CONSTRAINT login_lowercase") + op.execute("ALTER TABLE users DROP CONSTRAINT email_lowercase") diff --git a/lib/mentat/datatype/sqldb.py b/lib/mentat/datatype/sqldb.py index 40f9083b1f43f9a4c43dbfb7fd9127108a4a1037..6735983e2ca74fa882da8ab66b9c32ecd03dc3fc 100644 --- a/lib/mentat/datatype/sqldb.py +++ b/lib/mentat/datatype/sqldb.py @@ -188,9 +188,9 @@ class UserModel(MODEL): """ __tablename__ = 'users' - login = sqlalchemy.Column(sqlalchemy.String(50), unique = True, index = True) + login = sqlalchemy.Column(sqlalchemy.String(50), sqlalchemy.CheckConstraint('login = lower(login)', name='login_lowercase'), unique = True, index = True) fullname = sqlalchemy.Column(sqlalchemy.String(100), nullable = False) - email = sqlalchemy.Column(sqlalchemy.String(250), nullable = False) + email = sqlalchemy.Column(sqlalchemy.String(250), sqlalchemy.CheckConstraint('email = lower(email)', name='email_lowercase'), nullable = False) organization = sqlalchemy.Column(sqlalchemy.String(250), nullable = False) roles = sqlalchemy.Column(sqlalchemy.dialects.postgresql.ARRAY(sqlalchemy.String(20), dimensions = 1), nullable = False, default = []) password = sqlalchemy.Column(sqlalchemy.String)