예제 #1
0
파일: app.py 프로젝트: tikki-fi/tikki
def put_event():
    try:
        utils.flask_validate_request_is_json(request)
        now = datetime.datetime.now()
        uuid = str(utils.generate_uuid())
        user = get_jwt_identity()
        row = utils.get_args(
            received=request.json,
            required={
                'name': str,
                'description': str,
                'address': str,
                'postal_code': str,
                'event_at': datetime.datetime
            },
            defaultable={
                'id': uuid,
                'created_at': now,
                'updated_at': now,
                'payload': {},
                'organization_id': 0,
                'user_id': user
            },
        )

        filters = {'id': row.pop('id', None)}
        event = db_api.update_row(Event, filters, row)
        return utils.flask_return_success(event.json_dict)
    except Exception as e:
        return utils.flask_handle_exception(e)
예제 #2
0
파일: app.py 프로젝트: tikki-fi/tikki
def post_user():
    try:
        utils.flask_validate_request_is_json(request)
        payload = utils.get_auth0_payload(app, request)
        now = datetime.datetime.now()
        uuid = str(utils.generate_uuid())
        in_user = utils.get_args(
            received=request.json,
            defaultable={
                'id': uuid,
                'created_at': now,
                'updated_at': now,
                'payload': {}
            },
            constant={'type_id': 1},
        )
        in_user['username'] = payload['sub']
        user = db_api.add_row(User, in_user)
        identity = utils.create_jwt_identity(user, payload)
        return utils.flask_return_success({
            'jwt': create_jwt(identity),
            'user': user.json_dict
        })
    except Exception as e:
        return utils.flask_handle_exception(e)
예제 #3
0
 def test_get_args_all(self):
     expected = {'a': 2, 'c': 2, 'b': 'c'}
     self.assertDictEqual(
         utils.get_args(self.received,
                        required=self.required,
                        defaultable=self.defaultable,
                        optional=self.optional,
                        constant=self.constant), expected)
예제 #4
0
파일: app.py 프로젝트: tikki-fi/tikki
def put_record():
    try:
        utils.flask_validate_request_is_json(request)
        now = datetime.datetime.now()
        uuid = str(utils.generate_uuid())
        user = get_jwt_identity()
        row = utils.get_args(
            received=request.json,
            defaultable={
                'id': uuid,
                'created_at': now,
                'updated_at': now,
                'payload': {},
                'type_id': 0,
                'user_id': user
            },
            optional={'event_id': str},
        )
        filters = {'id': row.pop('id', None)}

        # Add created_user which defaults to the user_id, merging it with the
        # main row object.
        created_user = utils.get_args(
            received=request.json,
            defaultable={'created_user': user},
        )
        row.update(created_user)

        # And finally add details of who validated the record and when if provided.
        validated = utils.get_args(
            received=request.json,
            defaultable={'validated_at': now},
            optional={'validated_user_id': str},
        )
        if validated.get('validated_user_id') is not None:
            row.update(validated)

        record = db_api.update_row(Record, filters, row)
        return utils.flask_return_success(record.json_dict)
    except Exception as e:
        return utils.flask_handle_exception(e)
예제 #5
0
파일: app.py 프로젝트: tikki-fi/tikki
def post_record():
    try:
        utils.flask_validate_request_is_json(request)
        now = datetime.datetime.now()
        uuid = str(utils.generate_uuid())
        row = utils.get_args(received=request.json,
                             optional={'event_id': str},
                             constant={
                                 'user_id': get_jwt_identity(),
                             },
                             defaultable={
                                 'id': uuid,
                                 'created_at': now,
                                 'updated_at': now,
                                 'payload': {},
                                 'type_id': 0,
                             })

        # Add created_user which defaults to the user_id, merging it with the
        # main row object.
        user_id = row['user_id']
        created_user = utils.get_args(
            received=request.json,
            defaultable={'created_user_id': user_id},
        )
        row.update(created_user)

        # And finally add details of who validated the record and when if provided.
        validated = utils.get_args(
            received=request.json,
            defaultable={'validated_at': now},
            optional={'validated_user_id': str},
        )
        if 'validated_user_id' in validated:
            row.update(validated)

        record = db_api.add_row(Record, row)
        return utils.flask_return_success(record.json_dict)
    except Exception as e:
        return utils.flask_handle_exception(e)
예제 #6
0
파일: app.py 프로젝트: tikki-fi/tikki
def get_user():
    filters = utils.get_args(
        received=request.args,
        optional={
            'id': str,
            'username': str
        },
    )
    try:
        users = db_api.get_rows(User, filters)
        return utils.flask_return_success([i.json_dict for i in users])
    except Exception as e:
        return utils.flask_handle_exception(e)
예제 #7
0
파일: app.py 프로젝트: tikki-fi/tikki
def get_user_event_link():
    filters = utils.get_args(
        received=request.args,
        optional={
            'user_id': str,
            'event_id': str
        },
    )
    try:
        rows = db_api.get_rows(UserEventLink, filters)
        return utils.flask_return_success([row.json_dict for row in rows])
    except Exception as e:
        return utils.flask_handle_exception(e)
예제 #8
0
파일: app.py 프로젝트: tikki-fi/tikki
def get_event():
    filters = utils.get_args(
        received=request.args,
        optional={
            'id': str,
            'user_id': str,
            'type_id': int
        },
    )
    try:
        rows = db_api.get_rows(Event, filters)
        return utils.flask_return_success([row.json_dict for row in rows])
    except Exception as e:
        return utils.flask_handle_exception(e)
예제 #9
0
파일: app.py 프로젝트: tikki-fi/tikki
def get_record():
    filters = utils.get_args(
        received=request.args,
        constant={'user_id': get_jwt_identity()},
        optional={
            'id': str,
            'event_id': str,
            'type_id': int
        },
    )
    try:
        rows = db_api.get_rows(Record, filters)
        return utils.flask_return_success([row.json_dict for row in rows])
    except Exception as e:
        return utils.flask_handle_exception(e)
예제 #10
0
파일: app.py 프로젝트: tikki-fi/tikki
def put_user():
    try:
        utils.flask_validate_request_is_json(request)
        now = datetime.datetime.now()
        in_user = utils.get_args(received=request.json,
                                 defaultable={
                                     'created_at': now,
                                     'updated_at': now,
                                     'payload': {}
                                 })
        filters = {'id': get_jwt_identity()}
        user = db_api.update_row(User, filters, in_user)
        return utils.flask_return_success(user.json_dict)
    except Exception as e:
        return utils.flask_handle_exception(e)
예제 #11
0
파일: app.py 프로젝트: tikki-fi/tikki
def get_uuid():
    try:
        args = utils.get_args(
            received=request.args,
            defaultable={'count': 1},
        )
        count = args['count']
        if 0 < count <= 1024:
            return utils.flask_return_success(utils.generate_uuid(count))
        else:
            return utils.flask_return_exception(
                'The count parameter cannot be below 1 '
                'or greater than 1024.', 400)
    except Exception as e:
        return utils.flask_handle_exception(e)
예제 #12
0
파일: app.py 프로젝트: tikki-fi/tikki
def test():
    try:
        args = utils.get_args(received=request.args, required={'type': str})
        if args['type'] == 'error':
            log.error(f'!! {request}')
        elif args['type'] == 'warning':
            log.warning(request)
        elif args['type'] == 'info':
            log.info(request)
        elif args['type'] == 'debug':
            log.debug(request)
        return utils.flask_return_success(args)
    except (AppException, FlaskRequestException) as e:
        log.error(request)
        return utils.flask_handle_exception(e)
예제 #13
0
파일: app.py 프로젝트: tikki-fi/tikki
def patch_user():
    try:
        utils.flask_validate_request_is_json(request)
        now = datetime.datetime.now()
        in_user = utils.get_args(received=request.json,
                                 required={'id': str},
                                 defaultable={'updated_at': now},
                                 optional={
                                     'created_at': datetime.datetime,
                                     'payload': dict
                                 })
        filters = {'id': in_user.pop('id', None)}
        user = db_api.update_row(User, filters, in_user)
        return utils.flask_return_success(user.json_dict)
    except Exception as e:
        return utils.flask_handle_exception(e)
예제 #14
0
파일: app.py 프로젝트: tikki-fi/tikki
def login():
    app.logger.debug(request)
    token = utils.get_args(request.json, required={'token': str})['token']
    user_payload: Dict[str, Any] = {}
    try:
        if "." not in token:
            # "new" opaque token
            response = requests.get(
                url="https://tikkifi.eu.auth0.com/userinfo",
                headers={"Authorization": f"Bearer {token}"},
            )
            body = response.json()
            if 'email' in body:
                user_payload["email"] = body["email"]
            if 'name' in body:
                user_payload["name"] = body["name"]
            username = body["sub"]
        else:
            # legacy token
            utils.flask_validate_request_is_json(request)
            payload = utils.get_auth0_payload(app, request)
            username = payload['sub']

        user = db_api.get_row(User, {'username': username})
        if not user:
            uuid = str(utils.generate_uuid())
            user_payload = {
                "id": uuid,
                "username": username,
                "payload": {},
                "type_id": 1
            }
            user = db_api.add_row(User, user_payload)

        identity = utils.create_jwt_identity(user)
        return utils.flask_return_success({
            'jwt':
            create_jwt(identity),
            'user':
            user_payload if user_payload else user.json_dict
        })
    except Exception as e:
        return utils.flask_handle_exception(e)
예제 #15
0
파일: app.py 프로젝트: tikki-fi/tikki
def post_user_event_link():
    try:
        utils.flask_validate_request_is_json(request)
        now = datetime.datetime.now()
        user = get_jwt_identity()
        row = utils.get_args(
            received=request.json,
            required={'event_id': str},
            defaultable={
                'created_at': now,
                'updated_at': now,
                'user_id': user,
                'payload': {}
            },
        )

        obj = db_api.add_row(UserEventLink, row)
        return utils.flask_return_success(obj.json_dict)
    except (AppException, FlaskRequestException) as e:
        return utils.flask_handle_exception(e)
예제 #16
0
파일: app.py 프로젝트: tikki-fi/tikki
def delete_record():
    try:
        # Check object type based on endpoint and define filters accordingly.

        obj_type = get_obj_type(request.path)
        required_args = {}
        if obj_type is UserEventLink:
            required_args['event_id'] = str
        else:
            required_args['id'] = str

        filters = utils.get_args(
            received=request.args,
            required=required_args,
        )
        filters['user_id'] = get_jwt_identity()
        db_api.delete_row(obj_type, filters)
        return utils.flask_return_success('OK')
    except Exception as e:
        return utils.flask_handle_exception(e)
예제 #17
0
 def test_get_args_required(self):
     expected = {'a': 1}
     self.assertDictEqual(
         utils.get_args(self.received, required=self.required), expected)
예제 #18
0
 def test_get_args_optional(self):
     expected = {'a': 1, 'b': 'c'}
     self.assertDictEqual(
         utils.get_args(self.received, optional=self.optional), expected)
예제 #19
0
 def test_get_args_constant(self):
     expected = {'a': 2}
     self.assertDictEqual(
         utils.get_args(self.received, constant=self.constant), expected)
예제 #20
0
 def test_get_args_defaultable(self):
     expected = {'a': 1, 'c': 2}
     self.assertDictEqual(
         utils.get_args(self.received, defaultable=self.defaultable),
         expected)