Exemplo n.º 1
0
def _process_request(request: flask.Request, method: str,
                     encrypt_request: bool,
                     require_verified_email: bool) -> dict[str, typing.Any]:
    """Handle authentication and encryption."""
    if method in ('GET', 'DELETE'):
        data = dict(request.args)
    elif method in ('POST', 'PATCH'):
        if encrypt_request:
            data = _decrypt_request(request.get_data())
        else:
            data = request.get_json(force=True, silent=True)
        if not isinstance(data, dict):
            raise utils.RequestError(3113)
    session_id = None
    session_token = None
    if 'session_id' in data:
        session_id = data.pop('session_id')
    if 'session_token' in data:
        session_token = data.pop('session_token')
    if bool(session_id) ^ bool(session_token):
        raise utils.RequestError(1303)
    if session_id and session_token:
        session = models.Session.validate_session_key(session_id,
                                                      session_token)
        request.session = session
        user = session.user
        if require_verified_email and not user.email_verified:
            raise utils.RequestError(1307)
        data['user'] = user
    else:
        request.session = None
    return data