Beispiel #1
0
def do(data, resource):
    body = {}
    params = data['params']
    user = data['user']
    access_token = params.get('access_token')
    data['params']['login_method'] = 'facebook_login'
    login_conf = get_login_method.do(data, resource)['body']['item']
    default_group_name = login_conf['default_group_name']
    register_policy_code = login_conf.get('register_policy_code', None)

    enabled = login_conf['enabled']
    if enabled == 'true':
        enabled = True
    elif enabled == 'false':
        enabled = False

    if not enabled:
        body['error'] = error.EMAIL_LOGIN_INVALID
        return Response(body)

    extra_fb_response = get_facebook_response(access_token, ['id', 'email'])
    fb_user_id = extra_fb_response['id']
    fb_user_email = extra_fb_response['email']

    if not data.get('admin', False):
        if not match_policy(register_policy_code, extra_fb_response, None):
            body['error'] = error.REGISTER_POLICY_VIOLATION
            return Response(body)

    instructions = [
        (None, ('fb_user_id', 'eq', fb_user_id)),
        ('and', ('login_method', 'eq', 'facebook_login')),
    ]
    items, end_key = resource.db_query('user', instructions)
    if items:
        session_id = create_session(resource, items[0])
        body['session_id'] = session_id
        return Response(body)
    else:  # Create new user and create session also.
        item = {
            'email': fb_user_email,
            'groups': [default_group_name],
            'login_method': 'facebook_login',
            'fb_user_id': fb_user_id,
        }
        # Put extra value in the item
        for key in extra_fb_response:
            if key not in item:
                item[key] = extra_fb_response[key]
        resource.db_put_item('user', item)
        session_id = create_session(resource, item)
        body['session_id'] = session_id
        return Response(body)
def do(data, resource):
    body = {}
    params = data['params']
    user = data['user']
    id_token = params.get('id_token')
    data['params']['login_method'] = 'google_login'
    login_conf = get_login_method.do(data, resource)['item']
    default_group_name = login_conf['default_group_name']
    register_policy_code = login_conf.get('register_policy_code', None)

    enabled = login_conf['enabled']
    if enabled == 'true':
        enabled = True
    elif enabled == 'false':
        enabled = False

    if not enabled:
        body['error'] = error.GOOGLE_LOGIN_INVALID
        return body

    extra_response = get_google_profile_response(id_token)
    google_user_id = extra_response['sub']
    google_user_email = extra_response['email']

    if not data.get('admin', False):
        if not match_policy(register_policy_code, extra_response, None):
            body['error'] = error.REGISTER_POLICY_VIOLATION
            return body

    instructions = [
        (None, ('google_user_id', 'eq', google_user_id)),
        ('and', ('login_method', 'eq', 'google_login')),
    ]
    items, end_key = resource.db_query('user', instructions)
    if items:
        session_id = create_session(resource, items[0], data)
        body['session_id'] = session_id
        body['user_id'] = items[0]['id']
        body['is_first_login'] = False
        return body
    elif not already_has_account_email(
            google_user_email,
            resource):  # Create new user and create session also.
        item = {
            'id': uuid(),
            'email': google_user_email,
            'groups': [default_group_name],
            'login_method': 'google_login',
            'google_user_id': google_user_id,
        }
        # Put extra value in the item
        key_map = {'name': 'name', 'picture': 'profile_image'}
        for key in extra_response:
            if key not in item:
                if key in key_map:
                    item[key_map[key]] = extra_response[key]
                else:
                    item[key] = extra_response[key]
        resource.db_put_item('user', item, item.get('id'))
        session_id = create_session(resource, item, data)
        body['session_id'] = session_id
        body['is_first_login'] = True
        body['user_id'] = item['id']
        return body
    else:
        body['error'] = error.EXISTING_ACCOUNT_VIA_OTHER_LOGIN_METHOD
        return body