Ejemplo n.º 1
0
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
    }
Ejemplo n.º 2
0
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}
Ejemplo n.º 3
0
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
    }
Ejemplo n.º 4
0
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,
    }
Ejemplo n.º 5
0
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()
Ejemplo n.º 6
0
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))
Ejemplo n.º 7
0
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}")