Verified Commit fc83fca6 authored by Peter Stanko's avatar Peter Stanko
Browse files

Gitlab username little improvements

parent 85656293
Loading
Loading
Loading
Loading
Loading
+3 −2
Original line number Original line Diff line number Diff line
@@ -104,9 +104,10 @@ USERS
@click.option('-p', '--password', help='Users password', prompt=True, hide_input=True,
@click.option('-p', '--password', help='Users password', prompt=True, hide_input=True,
              confirmation_prompt=True)
              confirmation_prompt=True)
@click.option('-s', '--secret', help="User's secret")
@click.option('-s', '--secret', help="User's secret")
def cli_users_create(name, password, secret):
@click.option('-G', '--gitlab', help="Gitlab username")
def cli_users_create(name, password, secret, gitlab):
    log.info(f"[CMD] Create User: {name}")
    log.info(f"[CMD] Create User: {name}")
    manager.create_admin_user(name, password, secret)
    manager.create_admin_user(name, password, secret, gitlab)




@users_cli.command('set-password', help='Sets password for the user')
@users_cli.command('set-password', help='Sets password for the user')
+2 −1
Original line number Original line Diff line number Diff line
@@ -17,6 +17,7 @@ ENVIRONMENT="${ENVIRONMENT:-dev}"
ADMIN_USER="${ADMIN_USER:-admin}"
ADMIN_USER="${ADMIN_USER:-admin}"
ADMIN_PASSWORD="${ADMIN_PASSWORD:-789789}"
ADMIN_PASSWORD="${ADMIN_PASSWORD:-789789}"
ADMIN_SECRET="${ADMIN_SECRET:-devel-admin-secret}"
ADMIN_SECRET="${ADMIN_SECRET:-devel-admin-secret}"
ADMIN_GITLAB="${ADMIN_GITLAB}"


# INIT
# INIT
echo "[INIT] Initializing the database"
echo "[INIT] Initializing the database"
@@ -24,7 +25,7 @@ flask db upgrade
echo "[INIT] Initializing data for env: $ENVIRONMENT"
echo "[INIT] Initializing data for env: $ENVIRONMENT"
flask data init ${ENVIRONMENT}
flask data init ${ENVIRONMENT}
echo "[INIT] Initializing admin user: ${ADMIN_USER}"
echo "[INIT] Initializing admin user: ${ADMIN_USER}"
flask users create ${ADMIN_USER} --password ${ADMIN_PASSWORD} --secret ${ADMIN_SECRET}
flask users create ${ADMIN_USER} --password ${ADMIN_PASSWORD} --secret ${ADMIN_SECRET} --gitlab ${ADMIN_GITLAB}


if [ "$DATASETS" != "" ]; then
if [ "$DATASETS" != "" ]; then
    echo "[INIT] Additional datasets: $DATASETS"
    echo "[INIT] Additional datasets: $DATASETS"
+4 −2
Original line number Original line Diff line number Diff line
@@ -13,8 +13,8 @@ from management.data.data_dev import init_dev_data
from management.data.data_prod import init_prod_data
from management.data.data_prod import init_prod_data
from management.data.data_test import init_test_data
from management.data.data_test import init_test_data
from portal import logger
from portal import logger
from portal.database.models import Course, Role, Secret, Submission, User
from portal.database import SubmissionState
from portal.database import SubmissionState
from portal.database.models import Course, Role, Secret, Submission, User
from portal.service.find import FindService
from portal.service.find import FindService
from portal.service.users import UserService
from portal.service.users import UserService
from portal.tools import time
from portal.tools import time
@@ -94,7 +94,8 @@ class DataManagement:
            log.debug(f"[DATA] User's password updated: {user.log_name}")
            log.debug(f"[DATA] User's password updated: {user.log_name}")
            return user
            return user


    def create_admin_user(self, name: str, password: str, secret: str = None) -> User:
    def create_admin_user(self, name: str, password: str, secret: str = None, gitlab: str = None) \
            -> User:
        """Creates new admin user with username
        """Creates new admin user with username
        Args:
        Args:
            name(str): Username of the user
            name(str): Username of the user
@@ -107,6 +108,7 @@ class DataManagement:
                username=name,
                username=name,
                name=name,
                name=name,
                admin=True,
                admin=True,
                gitlab_username=gitlab,
                password=password)
                password=password)
            if secret:
            if secret:
                user.secrets.append(Secret(name='admin-secret', value=secret))
                user.secrets.append(Secret(name='admin-secret', value=secret))
+3 −2
Original line number Original line Diff line number Diff line
@@ -101,11 +101,12 @@ class DataFactory:
        return self._db.session
        return self._db.session


    def create_user(self, username: str, uco=0, name=None, password=None,
    def create_user(self, username: str, uco=0, name=None, password=None,
                    email=None, admin=False) -> User:
                    email=None, admin=False, gitlab_username: str = None) -> User:
        email = email or f"{username}@example.com"
        email = email or f"{username}@example.com"
        password = password or "123456"
        password = password or "123456"
        user = self.__create_entity(
        user = self.__create_entity(
            User, uco=uco, username=username, is_admin=admin, email=email)
            User, uco=uco, username=username, is_admin=admin, email=email,
            gitlab_username=gitlab_username)
        user.name = name or f"{username.capitalize()} User"
        user.name = name or f"{username.capitalize()} User"
        user.set_password(password=password)
        user.set_password(password=password)
        return user
        return user
+17 −8
Original line number Original line Diff line number Diff line
@@ -118,10 +118,9 @@ class Secret(db.Model, EntityBase):
    value = db.Column(db.String(120))
    value = db.Column(db.String(120))
    expires_at = db.Column(db.TIMESTAMP, nullable=True)
    expires_at = db.Column(db.TIMESTAMP, nullable=True)


    client_id = db.Column(db.String(36), db.ForeignKey(
    client_id = db.Column(db.String(36),
        'client.id', ondelete='cascade'), nullable=False)
                          db.ForeignKey('client.id', ondelete='cascade'), nullable=False)
    client = db.relationship(
    client = db.relationship("Client", back_populates="secrets", uselist=False)
        "Client", back_populates="secrets", uselist=False)


    def __init__(self, name: str, value: str = None, expires_at=None):
    def __init__(self, name: str, value: str = None, expires_at=None):
        # TODO: check date/timestamp
        # TODO: check date/timestamp
@@ -164,6 +163,7 @@ class User(Client, EntityBase):
    """
    """
    UPDATABLE = ['name', 'email', 'uco', 'gitlab_username', 'managed']
    UPDATABLE = ['name', 'email', 'uco', 'gitlab_username', 'managed']
    BASE_PARAMS = ['username', 'codename', 'is_admin', *UPDATABLE, 'managed', 'id']
    BASE_PARAMS = ['username', 'codename', 'is_admin', *UPDATABLE, 'managed', 'id']
    LISTABLE = ['username', 'gitlab_username']
    __tablename__ = 'user'
    __tablename__ = 'user'
    id = db.Column(db.String(length=36), db.ForeignKey('client.id'),
    id = db.Column(db.String(length=36), db.ForeignKey('client.id'),
                   default=lambda: str(uuid.uuid4()), primary_key=True)
                   default=lambda: str(uuid.uuid4()), primary_key=True)
@@ -174,7 +174,7 @@ class User(Client, EntityBase):
    # optional - after password change
    # optional - after password change
    password_hash = db.Column(db.String(120), default=None)
    password_hash = db.Column(db.String(120), default=None)


    gitlab_username = db.Column(db.String(50), nullable=True)
    _gitlab_username = db.Column('gitlab_username', db.String(50), nullable=True)
    managed = db.Column(db.Boolean, default=False)
    managed = db.Column(db.Boolean, default=False)
    submissions = db.relationship("Submission", back_populates="user", cascade="all, delete-orphan",
    submissions = db.relationship("Submission", back_populates="user", cascade="all, delete-orphan",
                                  passive_deletes=True)
                                  passive_deletes=True)
@@ -185,11 +185,19 @@ class User(Client, EntityBase):
    }
    }


    @hybrid_property
    @hybrid_property
    def username(self):
    def username(self) -> str:
        return self.codename
        return self.codename


    @hybrid_property
    def gitlab_username(self) -> str:
        return self._gitlab_username or self.username

    @gitlab_username.setter
    def gitlab_username(self, value: str):
        self._gitlab_username = value

    @username.setter
    @username.setter
    def username(self, value):
    def username(self, value: str):
        self.codename = value
        self.codename = value


    def is_self(self, eid):
    def is_self(self, eid):
@@ -276,7 +284,7 @@ class User(Client, EntityBase):
        return self.query_projects_by_course(course=course).all()
        return self.query_projects_by_course(course=course).all()


    def __init__(self, uco: int = None, email: str = None, username: str = None,
    def __init__(self, uco: int = None, email: str = None, username: str = None,
                 is_admin: bool = False, **kwargs) -> None:
                 is_admin: bool = False, gitlab_username: str = None, **kwargs) -> None:
        """Creates user instance
        """Creates user instance
        Args:
        Args:
            uco(int): User's UCO (school identifier)
            uco(int): User's UCO (school identifier)
@@ -288,6 +296,7 @@ class User(Client, EntityBase):
        self.email = email
        self.email = email
        self.username = username
        self.username = username
        self.is_admin = is_admin
        self.is_admin = is_admin
        self.gitlab_username = gitlab_username
        super().__init__(ClientType.USER, **kwargs)
        super().__init__(ClientType.USER, **kwargs)


    def __eq__(self, other):
    def __eq__(self, other):
Loading