From 72a61ff6fbd88bca9a18243d2c3bd3e45ae157db Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Tue, 7 Jul 2020 11:59:34 +0200 Subject: [PATCH 1/5] users: add column to store is_active (#42428) --- wcs/sql.py | 13 ++++++++++--- wcs/users.py | 1 + 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/wcs/sql.py b/wcs/sql.py index aa3c4481..737957b0 100644 --- a/wcs/sql.py +++ b/wcs/sql.py @@ -637,6 +637,7 @@ def do_user_table(): ascii_name varchar, email varchar, roles text[], + is_active bool, is_admin bool, anonymous bool, verified_fields text[], @@ -650,7 +651,7 @@ def do_user_table(): needed_fields = set(['id', 'name', 'email', 'roles', 'is_admin', 'anonymous', 'name_identifiers', 'verified_fields', - 'lasso_dump', 'last_seen', 'fts', 'ascii_name']) + 'lasso_dump', 'last_seen', 'fts', 'ascii_name', 'is_active']) from wcs.admin.settings import UserFieldsFormDef formdef = UserFieldsFormDef() @@ -689,6 +690,9 @@ def do_user_table(): if not 'ascii_name' in existing_fields: cur.execute('ALTER TABLE %s ADD COLUMN ascii_name varchar' % table_name) + if not 'is_active' in existing_fields: + cur.execute('ALTER TABLE %s ADD COLUMN is_active bool DEFAULT TRUE' % table_name) + # delete obsolete fields for field in (existing_fields - needed_fields): cur.execute('''ALTER TABLE %s DROP COLUMN %s''' % (table_name, field)) @@ -1840,6 +1844,7 @@ class SqlUser(SqlMixin, wcs.users.User): ('lasso_dump', 'text'), ('last_seen', 'timestamp'), ('ascii_name', 'varchar'), + ('is_active', 'bool'), ] id = None @@ -1864,6 +1869,7 @@ class SqlUser(SqlMixin, wcs.users.User): 'verified_fields': self.verified_fields, 'lasso_dump': self.lasso_dump, 'last_seen': None, + 'is_active': self.is_active, } if self.last_seen: sql_dict['last_seen'] = datetime.datetime.fromtimestamp(self.last_seen), @@ -1931,7 +1937,7 @@ class SqlUser(SqlMixin, wcs.users.User): o = cls() (o.id, o.name, o.email, o.roles, o.is_admin, o.anonymous, o.name_identifiers, o.verified_fields, o.lasso_dump, - o.last_seen, ascii_name) = [str_encode(x) for x in tuple(row[:11])] + o.last_seen, ascii_name, o.is_active) = [str_encode(x) for x in tuple(row[:12])] if o.last_seen: o.last_seen = time.mktime(o.last_seen.timetuple()) if o.roles: @@ -2584,12 +2590,13 @@ def migrate(): # 31: add user_label to formdata # 33: add anonymised field to global view migrate_views(conn, cur) - if sql_level < 21: + if sql_level < 38: # 3: introduction of _structured for user fields # 4: removal of identification_token # 12: (first part) add fts to users # 16: add verified_fields to users # 21: (first part) add ascii_name to users + # 38: add is_active to users do_user_table() if sql_level < 6: # 6: add actions_roles_array to tables and views diff --git a/wcs/users.py b/wcs/users.py index f9f2429c..e5751669 100644 --- a/wcs/users.py +++ b/wcs/users.py @@ -29,6 +29,7 @@ class User(StorableObject): name = None email = None roles = None + is_active = True is_admin = False anonymous = False form_data = None # dumping ground for custom fields -- 2.26.2