~homeworkprod/byceps

ref: 90357856fb25b54d9e60125d1b658be3514449ae byceps/scripts/grant_board_access.py -rwxr-xr-x 1.3 KiB
90357856 — Jochen Kupperschmidt Prepare login-based test with frozen time for Flask v2.x, Werkzeug v2.x 5 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/usr/bin/env python

"""Grant access to a board to a user.

:Copyright: 2006-2021 Jochen Kupperschmidt
:License: Revised BSD (see `LICENSE` file for details)
"""

import click

from byceps.services.board import access_control_service, board_service
from byceps.services.board.transfer.models import Board

from _util import call_with_app_context
from _validators import validate_user_screen_name


def validate_board(ctx, param, board_id: str) -> Board:
    board = board_service.find_board(board_id)

    if not board:
        raise click.BadParameter(f'Unknown board ID "{board_id}".')

    return board


@click.command()
@click.argument('board', metavar='BOARD_ID', callback=validate_board)
@click.argument(
    'user', metavar='USER_SCREEN_NAME', callback=validate_user_screen_name
)
def execute(board, user):
    if access_control_service.has_user_access_to_board(user.id, board.id):
        click.secho(
            f'User "{user.screen_name}" already has access '
            f'to board "{board.id}".',
            fg='yellow',
        )
        return

    access_control_service.grant_access_to_board(board.id, user.id)

    click.secho(
        f'Access to board "{board.id}" granted '
        f'to user "{user.screen_name}".',
        fg='green',
    )


if __name__ == '__main__':
    call_with_app_context(execute)