def users_test_data(dbsession, transact): del transact from c2cgeoportal_commons.models.static import User from c2cgeoportal_commons.models.main import Role roles = [] for i in range(0, 4): roles.append(Role('secretary_{}'.format(i))) dbsession.add(roles[i]) users = [] for i in range(0, 23): user = User('babar_{}'.format(i), email='mail{}@valid.net'.format(i), role=roles[i % 4]) user.password = '******' user.is_password_changed = i % 2 == 1 users.append(user) dbsession.add(user) dbsession.flush() yield { 'roles': roles, 'users': users }
def users_test_data(dbsession, transact): del transact from c2cgeoportal_commons.models.main import Role from c2cgeoportal_commons.models.static import User roles = [] for i in range(0, 4): roles.append(Role("secretary_{}".format(i))) dbsession.add(roles[i]) users = [] for i in range(0, 23): user = User( "babar_{}".format(i), email="mail{}@valid.net".format(i), settings_role=roles[i % 4], roles=[roles[i % 4]], ) user.password = "******" user.is_password_changed = i % 2 == 1 users.append(user) dbsession.add(user) dbsession.flush() yield {"roles": roles, "users": users}
def roles_test_data(dbsession, transact): del transact from c2cgeoportal_commons.models.main import Role, Functionality, RestrictionArea from c2cgeoportal_commons.models.static import User functionalities = {} for name in ('default_basemap', 'location'): functionalities[name] = [] for v in range(0, 4): functionality = Functionality( name=name, value='value_{}'.format(v)) dbsession.add(functionality) functionalities[name].append(functionality) restrictionareas = [] for i in range(0, 5): restrictionarea = RestrictionArea( name='restrictionarea_{}'.format(i)) dbsession.add(restrictionarea) restrictionareas.append(restrictionarea) roles = [] for i in range(0, 23): role = Role('secretary_' + str(i)) role.functionalities = [ functionalities['default_basemap'][0], functionalities['location'][0], functionalities['location'][1]] role.restrictionareas = [ restrictionareas[0], restrictionareas[1]] role.extent = from_shape(box(485869.5728, 76443.1884, 837076.5648, 299941.7864), srid=21781) dbsession.add(role) roles.append(role) # Users roles must not be broken with role name changes users = [] for i in range(0, 23): user = User("babar_" + str(i), email='mail' + str(i), settings_role=roles[i], roles=[roles[i]]) user.password = '******' user.is_password_changed = i % 2 == 1 users.append(user) dbsession.add(user) dbsession.flush() yield { 'functionalities': functionalities, 'restrictionareas': restrictionareas, 'users': users, 'roles': roles }
def roles_test_data(dbsession, transact): del transact from c2cgeoportal_commons.models.main import Functionality, RestrictionArea, Role from c2cgeoportal_commons.models.static import User # Note that "default_basemap" is not relevant for roles functionalities = {} for name in ("default_basemap", "default_theme", "print_template"): functionalities[name] = [] for v in range(0, 4): functionality = Functionality(name=name, value=f"value_{v}") dbsession.add(functionality) functionalities[name].append(functionality) restrictionareas = [] for i in range(0, 5): restrictionarea = RestrictionArea(name=f"restrictionarea_{i}") dbsession.add(restrictionarea) restrictionareas.append(restrictionarea) roles = [] for i in range(0, 23): role = Role("secretary_" + str(i)) role.functionalities = [ functionalities["default_theme"][0], functionalities["print_template"][0], functionalities["print_template"][1], ] role.restrictionareas = [restrictionareas[0], restrictionareas[1]] role.extent = from_shape(box(485869.5728, 76443.1884, 837076.5648, 299941.7864), srid=21781) dbsession.add(role) roles.append(role) # Users roles must not be broken with role name changes users = [] for i in range(0, 23): user = User("babar_" + str(i), email="mail" + str(i), settings_role=roles[i], roles=[roles[i]]) user.password = "******" user.is_password_changed = i % 2 == 1 users.append(user) dbsession.add(user) dbsession.flush() yield { "functionalities": functionalities, "restrictionareas": restrictionareas, "users": users, "roles": roles, }
def users_test_data(dbsession): from c2cgeoportal_commons.models.static import User from c2cgeoportal_commons.models.main import Role dbsession.begin_nested() roles = [] for i in range(0, 4): roles.append(Role("secretary_" + str(i))) dbsession.add(roles[i]) users = [] for i in range(0, 23): user = User("babar_" + str(i), email='mail' + str(i), role=roles[i % 4]) user.password = '******' user.is_password_changed = i % 2 == 1 users.append(user) dbsession.add(user) dbsession.flush() yield { 'roles': roles, 'users': users} dbsession.rollback()
def main() -> None: """ Emergency user create and password reset script example, reset toto password to foobar: docker-compose exec geoportal manage-users --password=foobar toto example, create user foo with password bar and role admin: docker-compose exec geoportal manage-users --create --rolename=role_admin --password=bar foo to get the options list, do: docker-compose exec geoportal manage-users --help """ usage = """Usage: %prog [options] USERNAME Reset a user password. The username is used as password if the password is not provided with the corresponding option. User can be created if it does not exist yet.""" parser = argparse.ArgumentParser(description=usage) fill_arguments(parser) parser.add_argument( "--password", "-p", help="Set password (if not set, username is used as password") parser.add_argument("--create", "-c", action="store_true", default=False, help="Create user if it does not already exist") parser.add_argument("--rolename", "-r", default="role_admin", help="The role name which must exist in the database") parser.add_argument("--email", "-e", default=None, help="The user email") parser.add_argument("user", help="The user") options = parser.parse_args() username = options.user settings = get_appsettings(options) with transaction.manager: sess = get_session(settings, transaction.manager) # Must be done only once we have loaded the project config from c2cgeoportal_commons.models.main import Role # pylint: disable=import-outside-toplevel from c2cgeoportal_commons.models.static import User # pylint: disable=import-outside-toplevel print("\n") # Check that user exists query = sess.query(User).filter_by(username=username) result = query.count() if result == 0: if not options.create: # If doesn't exist and no -c option, throw error print("User {} does not exist in database".format(username)) sys.exit(1) else: if options.password is None: parser.error("The password is mandatory on user creation") if options.email is None: parser.error("The email is mandatory on user creation") # Get roles query_role = sess.query(Role).filter( Role.name == options.rolename) if query_role.count() == 0: # Role not found in db? print("Role matching {} does not exist in database".format( options.rolename)) sys.exit(1) role = query_role.first() user = User( username=username, password=options.password, email=options.email, settings_role=role, roles=[role], ) sess.add(user) print(("User {} created with password {} and role {}".format( username, options.password, options.rolename))) else: # If user exists (assuming username are unique) user = query.first() if options.password is not None: print("Password set to: {}".format(options.password)) user.password = "******".format(options.password) if options.email is not None: user.email = options.email sess.add(user) print("Password reset for user {}".format(username))
def main() -> None: """ Emergency user create and password reset script example. Reset toto password to foobar: docker-compose exec geoportal manage-users --password=foobar toto example, create user foo with password bar and role admin: docker-compose exec geoportal manage-users --create --rolename=role_admin --password=bar foo. to get the options list, do: docker-compose exec geoportal manage-users --help """ parser = get_argparser() options = parser.parse_args() username = options.user settings = get_appsettings(options) with transaction.manager: session = get_session(settings, transaction.manager) # Must be done only once we have loaded the project config from c2cgeoportal_commons.models.main import Role # pylint: disable=import-outside-toplevel from c2cgeoportal_commons.models.static import User # pylint: disable=import-outside-toplevel print("\n") # Check that user exists query = session.query(User).filter_by(username=username) result = query.count() if result == 0: if not options.create: # If doesn't exist and no -c option, throw error print(f"User {username} does not exist in database") sys.exit(1) else: if options.password is None: parser.error("The password is mandatory on user creation") if options.email is None: parser.error("The email is mandatory on user creation") # Get roles query_role = session.query(Role).filter( Role.name == options.rolename) if query_role.count() == 0: # Role not found in db? print( f"Role matching {options.rolename} does not exist in database" ) sys.exit(1) role = query_role.first() user = User( username=username, password=cast(str, options.password), email=cast(str, options.email), settings_role=role, roles=[role], ) session.add(user) print( f"User {username} created with password {options.password} and role {options.rolename}" ) else: # If user exists (assuming username are unique) user = query.first() if options.password is not None: print(f"Password set to: {options.password}") user.password = f"{options.password}" if options.email is not None: user.email = options.email session.add(user) print(f"Password reset for user {username}")