def handler(event, context):
    try:
        logger.info(event)
        data = json.loads(event['body'])
        user_id = event['pathParameters']['user_id']

        if 'email' not in data:
            return response_builder(400,
                                    {'error_message': 'emailのパラメータが足りません'})

        if users.exists_user(user_id=user_id):
            return response_builder(409, {'error_message': '既にそのユーザは存在しています'})

        users.create(
            user_id=user_id,
            email=data['email'],
        )
    except json.decoder.JSONDecodeError:
        return response_builder(400, {'error_message': 'JSONが不正です'})

    except ClientError as e:
        logger.error(e)
        return response_builder(500,
                                {'error_message': 'Internal Server Error'})

    return response_builder(201)
Exemple #2
0
def handler(event, context):
    try:
        logger.info(event)
        authlete = AuthleteSdk(api_key=os.environ['AUTHLETE_API_KEY'],
                               api_secret=os.environ['AUTHLETE_API_SECRET'])

        congito_user_pool = CognitoUserPool(
            user_pool_id=os.environ['COGNITO_USER_POOL_ID'])

        access_token = get_access_token_from_header(headers=event['headers'])
        response_content = authlete.get_user_info(access_token=access_token)
        sub = congito_user_pool.get_user_sub_value(
            username=response_content['sub'])
    except ValidationError as e:
        return response_builder(e.status_code, {'error_message': e.message})
    except AuthleteApiError as e:
        if e.status_code != 401:
            logger.error(e)
            return response_builder(500,
                                    {'error_message': 'Internal Server Error'})

        return response_builder(e.status_code, {'error_message': e.message})
    except ClientError as e:
        logger.error(e)
        return response_builder(500,
                                {'error_message': 'Internal Server Error'})
    return response_builder(200, {'sub': sub, 'name': response_content['sub']})
def handler(event, context):
    try:
        logger.info(event)
        if verify_supported_media_type(event['headers']) is False:
            return response_builder(
                415, {
                    'error_message':
                    "This API only support 'content-type: application/x-www-form-urlencoded' media type"
                })

        token = parse_qs(event['body']).get('token', None)
        if token is None:
            return response_builder(
                400, {'error_message': 'Missing token patameter'})
        authlete = AuthleteSdk(api_key=os.environ['AUTHLETE_API_KEY'],
                               api_secret=os.environ['AUTHLETE_API_SECRET'])

        result = authlete.verify_access_token(token=token[0])
    except AuthleteApiError as e:
        if e.status_code != 400:
            logger.error(e)
            return response_builder(500,
                                    {'error_message': 'Internal Server Error'})

        return response_builder(e.status_code, {'error_message': e.message})
    return response_builder(200, result)
Exemple #4
0
def mysongs_list(user_id):
    if not UserModel.find_by_id(user_id):
        raise Exception('User Not found!!')
    songs = [song() for song in SongModel.find_by_user(user_id)]
    if not songs:
        return response_builder(status_code=404, body="Empty!!")
    print(type(songs))
    return response_builder(status_code=200, body=songs)
def handler(event, context):
    try:
        logger.info(event)
        result = users.get_all()

    except ClientError as e:
        logger.error(e)
        return response_builder(500,
                                {'error_message': 'Internal Server Error'})

    return response_builder(200, result['Items'])
def handler(event, context):
    try:
        logger.info(event)
        user_id = event['pathParameters']['user_id']
        users.delete(user_id=user_id)

    except ClientError as e:
        logger.error(e)
        return response_builder(500,
                                {'error_message': 'Internal Server Error'})

    return response_builder(204)
Exemple #7
0
def handler(event, context):
    try:
        logger.info(event)
        authlete = AuthleteSdk(api_key=os.environ['AUTHLETE_API_KEY'],
                               api_secret=os.environ['AUTHLETE_API_SECRET'])

        configuration = authlete.get_openid_configuration()

    except AuthleteApiError as e:
        logger.error(e)
        return response_builder(500,
                                {'error_message': 'Internal Server Error'})

    return response_builder(200, configuration)
Exemple #8
0
def check_task_status(task_id):
    try:
        from models.task import get_status
        task = get_status(task_id)
        print("TASK", task)
        if task:
            if task.status == "SUCCESS":
                return response_builder(status_code=201,
                                        body='Your Song is Ready to Play')
            else:
                return response_builder(status_code=500,
                                        body='Internal Server Error')
        return response_builder(status_code=200, body='On-Progress')
    except:
        return response_builder(status_code=400, body='Bad Request')
Exemple #9
0
def handler(event, context):
    try:
        logger.info(event)
        user_id = event['pathParameters']['user_id']

        if not users.exists_user(user_id=user_id):
            return response_builder(404, {'error_message': 'そのユーザは存在しません'})

        result = users.get(user_id=user_id)

    except ClientError as e:
        logger.error(e)
        return response_builder(500,
                                {'error_message': 'Internal Server Error'})

    return response_builder(200, result['Item'])
Exemple #10
0
def add_song(req, task_id='existed_101'):

    # : Validate url
    url = url_helper(req['url'])
    if url is None:
        return {'msg': "Invalid URL. Please check again!"}, 400

    if SongModel.check_duplication(req['posted_by'], req['url']):
        return response_builder(status_code=400, body="Song Exists")

    try:
        # Save song info into DB
        new_song = SongModel(task_id, req['title'], req['posted_by'],
                             req['genre_id'], url)
        new_song.save_to_db()
        return new_song(), 201
    except:
        return "Error on SongModel Instance", 500
def handler(event, context):
    # 初期化処理
    token = {}
    authlete = None
    try:
        if verify_supported_media_type(event['headers']) is False:
            return response_builder(
                415, {
                    'error_message':
                    "This API only support 'content-type: application/x-www-form-urlencoded' media type"
                })

        authlete = AuthleteSdk(api_key=os.environ['AUTHLETE_API_KEY'],
                               api_secret=os.environ['AUTHLETE_API_SECRET'])
    except Exception as e:
        logger.error(e)
        return response_builder(500,
                                {'error_message': 'Internal Server Error'})

    # トークン取得処理
    try:
        grant_type = authlete.get_grant_type(body=event['body'])

        data = authlete.get_clientid_and_clientsecret(headers=event['headers'],
                                                      body=event['body'])

        if grant_type == 'authorization_code':
            if data.get('client_secret') is None:
                token = authlete.get_access_token_from_code(
                    body=event['body'], client_id=data['client_id'])
            else:
                token = authlete.get_access_token_from_code(
                    body=event['body'],
                    client_id=data['client_id'],
                    client_secret=data['client_secret'])
        elif grant_type == 'refresh_token':
            if data.get('client_secret') is None:
                token = authlete.get_access_token_from_refresh_token(
                    body=event['body'], client_id=data['client_id'])
            else:
                token = authlete.get_access_token_from_refresh_token(
                    body=event['body'],
                    client_id=data['client_id'],
                    client_secret=data['client_secret'])
        else:
            return response_builder(400,
                                    {'error_message': 'invalid grant_type'})
    except ValidationError as e:
        logger.error(e)
        return response_builder(e.status_code, {'error_message': e.message})
    except AuthleteApiError as e:
        logger.error(e)
        if e.status_code != 500:
            return response_builder(e.status_code,
                                    {'error_message': e.message})
        return response_builder(500,
                                {'error_message': 'Internal Server Error'})

    try:
        congito_user_pool = CognitoUserPool(
            user_pool_id=os.environ['COGNITO_USER_POOL_ID'])

        access_token = token.get('access_token')
        response_content = authlete.get_user_info(access_token=access_token)
        attributes = congito_user_pool.get_user_attributes(
            username=response_content['sub'])
        phone_number_verified = 'false'

        for attribute in attributes:
            if attribute['Name'] == 'phone_number_verified':
                phone_number_verified = attribute['Value']

        if phone_number_verified == 'true':
            return response_builder(200, token)
        else:
            return response_builder(
                403, {'error_message': 'phone_number must be verified'})

    except Exception as e:
        logger.error(e)
        return response_builder(500,
                                {'error_message': 'Internal Server Error'})
Exemple #12
0
def handler(event, context):
    try:
        logger.info(event)
        if verify_supported_media_type(event['headers']) is False:
            return response_builder(
                415, {
                    'error_message':
                    "This API only support 'content-type: application/x-www-form-urlencoded' media type"
                })

        # jwtの検証
        jwt_token = get_access_token_from_header(event['headers'])
        if not verify_jwt_token(jwt_token):
            return response_builder(401,
                                    {"error_message": "invalid jwt token"})

        # パラメーター設定
        claims = jwt.get_unverified_claims(jwt_token)
        params = urllib.parse.parse_qs(event.get('body', ''))
        params['subject'] = [claims['cognito:username']]
        params['sub'] = [claims['sub']]
        params['scope'] = params.get('scope', [''])  # scopeが無い場合は空配列で初期化
        params['scope'] = [params['scope'][0]]  # scopeが複数来たら最初だけ使う

        # scopeの検証
        if not verify_scope_parameter(params['scope'][0]):
            return response_builder(
                400, {
                    "error_message":
                    "invalid scope parameter. scope parameter must be 'openid read' or 'openid read write'"
                })

        # authrazition API
        new_params = urllib.parse.urlencode(params, doseq=True)

        if urllib.parse.parse_qs(new_params).get(
                'code_challenge_method') is None:
            return response_builder(
                400, {
                    'error_message':
                    "The authorization request does not contain 'code_challenge_method' parameter."
                })

        authlete = AuthleteSdk(api_key=os.environ['AUTHLETE_API_KEY'],
                               api_secret=os.environ['AUTHLETE_API_SECRET'])
        authrazition_response = authlete.authorization_request(new_params)
        AUTHORIZATION_ERROR_CODES = [
            AUTHLETE_AUTHORIZATION_ERROR_CLIENT_ID_IS_NOT_FOUND,
            AUTHLETE_AUTHORIZATION_ERROR_CODE_CHALLENGE_IS_INVALID,
            AUTHLETE_AUTHORIZATION_ERROR_CODE_CHALLENGE_METHOD_IS_NOT_SUPPORTED,
            AUTHLETE_AUTHORIZATION_ERROR_DOES_NOT_CONTAIN_CLIENT_ID,
            AUTHLETE_AUTHORIZATION_ERROR_DOES_NOT_CONTAIN_CODE_CHALLENGE_PARAMETER,
            AUTHLETE_AUTHORIZATION_ERROR_DOES_NOT_CONTAIN_REDIRECT_URI,
            AUTHLETE_AUTHORIZATION_ERROR_DOES_NOT_CONTAIN_RESPONSE_TYPE,
            AUTHLETE_AUTHORIZATION_ERROR_REDIRECT_URI_IS_NOT_REGISTERED,
            AUTHLETE_AUTHORIZATION_ERROR_RESPONSE_TYPE_IS_INVALID,
            AUTHLETE_AUTHORIZATION_SUCCESS_CODE
        ]
        if authrazition_response['resultCode'] in AUTHORIZATION_ERROR_CODES:
            return response_builder(
                400, {
                    'error_message':
                    strip_authlete_code(authrazition_response['resultMessage'])
                })

        # authorization issue API
        authrazition_issue_response = authlete.authorization_issue_request({
            "ticket":
            authrazition_response['ticket'],
            "subject":
            claims['cognito:username'],
            "sub":
            claims['sub']
        })
        if authrazition_issue_response[
                'resultCode'] == AUTHLETE_AUTHORIZATION_ISSUE_SUBJECT_DOES_NOT_CONTAIN:
            return response_builder(
                400, {
                    'error_message':
                    strip_authlete_code(authrazition_response['resultMessage'])
                })
        if authrazition_issue_response[
                'resultCode'] != AUTHLETE_AUTHORIZATION_SUCCESS_CODE:
            return response_builder(500,
                                    {'error_message': 'Internal Server Error'})
    except AuthleteApiError as e:
        logger.error(e)
        return response_builder(500,
                                {'error_message': 'Internal Server Error'})
    except ValidationError as e:
        return response_builder(e.status_code, {'error_message': e.message})
    return response_builder(
        200, {'redirect_uri': authrazition_issue_response['responseContent']})