예제 #1
0
async def unset_roles_image_data(db_name: str, task_name: Union[str, None],
                                 permissions: Union[str,
                                                    List[str]], user: UserDB):
    if isinstance(permissions, str):
        permissions = [permissions]
    for permission in permissions:
        assert permission in [
            'can_get', 'can_edit', 'can_edit_protected', 'can_add',
            'can_delete'
        ], "Unknown permission"
        roles_image_data = user.roles_image_data.get(db_name, {})
        if len(roles_image_data) > 0:
            if task_name is not None:
                task_names = [task_name]
            else:
                task_names = roles_image_data.keys()
            for task_name in task_names:
                task_roles = roles_image_data.get(task_name, None)
                if task_roles is not None:
                    task_roles = remove_from_list(task_roles, permission)
                    if len(task_roles) > 0:
                        user.roles_image_data[db_name][task_name] = task_roles
                    else:
                        user.roles_image_data[db_name].pop(task_name, None)
    roles_image_data = user.roles_image_data.get(db_name, {})
    if len(roles_image_data) == 0:
        user.roles_image_data.pop(db_name, None)

    updated_user = await user_db.update(user)
    return updated_user
예제 #2
0
async def delete_task(db_name: str, task_name: str) -> bool:
    """
    :param db_name:
    :param task_name:
    :return:
    """
    assert task_name not in system_task_names, "Can't delete task with this name"
    assert db_name not in system_db_names, "Can't add db with system name"
    db_names = await get_dbs()
    assert db_name in db_names, "DB not exist"
    data_db = client[db_name]
    task_names = await data_db.list_collection_names()
    assert task_name in task_names, "task doesn't exist"
    async for user in users_collection.find():
        user = UserDB(**user)
        await unset_roles_image_data(
            db_name=db_name,
            task_name=task_name,
            permissions=[
                'can_get',
                'can_add',
                'can_edit',
                'can_edit_protected',
                'can_delete'
            ],
            user=user
        )
    result = await data_db.drop_collection(task_name)
    if result:
        return True
    else:
        return False
예제 #3
0
async def delete_db(db_name: str) -> bool:
    """
    :param db_name:
    :return:
    """
    assert db_name not in system_db_names, "Can't delete system db"
    db_names = await get_dbs()
    assert db_name in db_names, "DB doesn't exist"
    async for user in users_collection.find():
        user = UserDB(**user)
        await unset_roles_classes(db_name=db_name, permissions=['can_get', 'can_set'], user=user)
        await unset_roles_tasks(db_name=db_name, permissions=['can_add', 'can_delete'], user=user)

        await unset_roles_image_data(
            db_name=db_name,
            task_name=None,
            permissions=[
                'can_get',
                'can_add',
                'can_edit',
                'can_edit_protected',
                'can_delete'
            ],
            user=user
        )
    result = await client.drop_database(db_name)
    return True
예제 #4
0
async def unset_roles_db(permissions: Union[str, List[str]], user: UserDB):
    if isinstance(permissions, str):
        permissions = [permissions]

    for permission in permissions:
        assert permission in ['can_add', 'can_delete'], "Unknown permission"
        user.roles_db = remove_from_list(user.roles_db, permission)
    updated_user = await user_db.update(user)
    return updated_user
예제 #5
0
async def set_roles_classes(db_name: str, permissions: Union[str, List[str]],
                            user: UserDB):
    if isinstance(permissions, str):
        permissions = [permissions]
    for permission in permissions:
        assert permission in ['can_get', 'can_set'], "Unknown permission"
        user.roles_classes[db_name] = add_to_list(
            user.roles_classes.get(db_name, []), permission)
    updated_user = await user_db.update(user)
    return updated_user
예제 #6
0
async def _update_user(
    user: UserDB, update_dict: Dict[str, Any], request: Request
):
    #TODO: implement changing roles
    for field in update_dict:
        if field == "password":
            hashed_password = get_password_hash(update_dict[field])
            user.hashed_password = hashed_password
        else:
            setattr(user, field, update_dict[field])
    updated_user = await user_db.update(user)
    return updated_user
예제 #7
0
async def unset_roles_classes(db_name: str, permissions: Union[str, List[str]],
                              user: UserDB):
    print(user)
    if isinstance(permissions, str):
        permissions = [permissions]
    for permission in permissions:
        assert permission in ['can_get', 'can_set'], "Unknown permission"
        roles_classes = remove_from_list(user.roles_classes.get(db_name, []),
                                         permission)
        if len(roles_classes) > 0:
            user.roles_classes[db_name] = roles_classes
        else:
            user.roles_classes.pop(db_name, None)
    updated_user = await user_db.update(user)
    return updated_user
예제 #8
0
async def set_roles_image_data(db_name: str, task_name: str,
                               permissions: Union[str,
                                                  List[str]], user: UserDB):
    if isinstance(permissions, str):
        permissions = [permissions]
    for permission in permissions:
        assert permission in [
            'can_get', 'can_edit', 'can_edit_protected', 'can_add',
            'can_delete'
        ], "Unknown permission"
        roles_image_data = user.roles_image_data.get(db_name, {})
        roles_image_data_task = add_to_list(
            roles_image_data.get(task_name, []), permission)
        roles_image_data[task_name] = roles_image_data_task
        user.roles_image_data[db_name] = roles_image_data
    updated_user = await user_db.update(user)
    return updated_user
예제 #9
0
async def create_first_admin() -> bool:
    try:
        session = Session()
        count = session.query(UserTable).filter_by(is_superuser=True).count()
        if count == 0:
            user = UserCreate(email=os.getenv('API_ADMIN_EMAIL',
                                              '*****@*****.**'),
                              password=os.getenv('API_ADMIN_PASSWORD',
                                                 'adminpassword'))

            hashed_password = get_password_hash(user.password)
            db_user = UserDB(**user.create_update_dict(),
                             hashed_password=hashed_password)
            created_user = await user_db.create(db_user)
            if created_user:
                created_user.is_superuser = True
                updated_user = await user_db.update(created_user)
        session.commit()
        session.close()
        return True
    except Exception as e:
        return False