From 76c5c202b11e4f703ffe54fd37f9237684e25ff3 Mon Sep 17 00:00:00 2001 From: ReAnzu Date: Fri, 2 Mar 2018 22:47:22 -0600 Subject: [PATCH] Updated migration * Modified migration to do an in place update of the password revision based on the hash length --- ...pdate_user_table_for_hardened_passwords.py | 49 ++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/server/szurubooru/migrations/versions/9ef1a1643c2a_update_user_table_for_hardened_passwords.py b/server/szurubooru/migrations/versions/9ef1a1643c2a_update_user_table_for_hardened_passwords.py index 4ae9bf2b..ce3b2e95 100644 --- a/server/szurubooru/migrations/versions/9ef1a1643c2a_update_user_table_for_hardened_passwords.py +++ b/server/szurubooru/migrations/versions/9ef1a1643c2a_update_user_table_for_hardened_passwords.py @@ -7,6 +7,8 @@ Created at: 2018-02-24 23:00:32.848575 ''' import sqlalchemy as sa +import sqlalchemy.ext.declarative +import sqlalchemy.orm.session from alembic import op @@ -15,6 +17,34 @@ down_revision = '02ef5f73f4ab' branch_labels = None depends_on = None +Base = sa.ext.declarative.declarative_base() + + +class User(Base): + __tablename__ = 'user' + + AVATAR_GRAVATAR = 'gravatar' + + user_id = sa.Column('id', sa.Integer, primary_key=True) + creation_time = sa.Column('creation_time', sa.DateTime, nullable=False) + last_login_time = sa.Column('last_login_time', sa.DateTime) + version = sa.Column('version', sa.Integer, default=1, nullable=False) + name = sa.Column('name', sa.Unicode(50), nullable=False, unique=True) + password_hash = sa.Column('password_hash', sa.Unicode(128), nullable=False) + password_salt = sa.Column('password_salt', sa.Unicode(32)) + password_revision = sa.Column('password_revision', sa.SmallInteger, + default=0, nullable=False) + email = sa.Column('email', sa.Unicode(64), nullable=True) + rank = sa.Column('rank', sa.Unicode(32), nullable=False) + avatar_style = sa.Column( + 'avatar_style', sa.Unicode(32), nullable=False, + default=AVATAR_GRAVATAR) + + __mapper_args__ = { + 'version_id_col': version, + 'version_id_generator': False, + } + def upgrade(): op.alter_column('user', 'password_hash', @@ -23,7 +53,24 @@ def upgrade(): existing_nullable=False) op.add_column('user', sa.Column('password_revision', sa.SmallInteger(), - nullable=False)) + nullable=True, + default=0)) + + session = sa.orm.session.Session(bind=op.get_bind()) + if session.query(User).count() >= 0: + for user in session.query(User).all(): + password_hash_length = len(user.password_hash) + if password_hash_length == 40: + user.password_revision = 1 + elif password_hash_length == 64: + user.password_revision = 2 + else: + user.password_revision = 3 + session.flush() + session.commit() + + op.alter_column('user', 'password_revision', + existing_nullable=True, nullable=False) def downgrade():