Пример #1
0
def get_info(request):
    user = oauth_server.authorize(request.META.get('HTTP_AUTHORIZATION'))

    if user is None:
        return HttpResponse(None)

    return HttpResponse(json.dumps({'user_id': urlsafe_base64_encode(user.id.bytes)}))
Пример #2
0
def token(request):
    # 验证应用端合法性
    client = oauth_server.authorize(request.META.get('HTTP_AUTHORIZATION'))
    if not client:
        response = HttpResponse('401 Unauthorized', status=401)
        response['WWW-Authenticate'] = 'Basic realm="Please provide your client_id and client_secret."'
        return response

    # 验证是否为令牌表单
    form = TokenForm(request.POST)
    if not form.is_valid():
        return error_response('invalid_request')

    grant_type = form.cleaned_data['grant_type']
    code = form.cleaned_data['code']
    redirect_uri = form.cleaned_data['redirect_uri']

    # 处理authorization_code请求
    if grant_type == 'authorization_code':
        try:
            code = AuthorizationCode.objects.filter(expire_time__gte=datetime.datetime.now()).get(client=client, code=UUID(bytes=urlsafe_base64_decode(code)), redirect_uri=redirect_uri)
        except AuthorizationCode.DoesNotExist:
            return error_response('invalid_grant')

        try:
            token = AccessToken(client=client, user=code.user, code=code.code, expire_time=datetime.datetime.now() + datetime.timedelta(hours=1))
            token.save()
        except IntegrityError:
            AccessToken.objects.get(code=code.code).delete()
            code.delete()
            return error_response('invalid_grant')

        return success_response(urlsafe_base64_encode(token.token.bytes))
    else:
        return error_response('unsupported_grant_type')
Пример #3
0
def get_privacy(request):
    user = oauth_server.authorize(request.META.get('HTTP_AUTHORIZATION'))

    if user is None:
        return HttpResponse(None)

    return HttpResponse(json.dumps({'email': user.user.email}))
Пример #4
0
def token(request):
    # 验证应用端合法性
    client = oauth_server.authorize(request.META.get('HTTP_AUTHORIZATION'))
    if not client:
        response = HttpResponse('401 Unauthorized', status=401)
        response[
            'WWW-Authenticate'] = 'Basic realm="Please provide your client_id and client_secret."'
        return response

    # 验证是否为令牌表单
    form = TokenForm(request.POST)
    if not form.is_valid():
        return error_response('invalid_request')

    grant_type = form.cleaned_data['grant_type']
    code = form.cleaned_data['code']
    redirect_uri = form.cleaned_data['redirect_uri']

    # 处理authorization_code请求
    if grant_type == 'authorization_code':
        try:
            code = AuthorizationCode.objects.filter(
                expire_time__gte=datetime.datetime.now()).get(
                    client=client,
                    code=UUID(bytes=urlsafe_base64_decode(code)),
                    redirect_uri=redirect_uri)
        except AuthorizationCode.DoesNotExist:
            return error_response('invalid_grant')

        try:
            token = AccessToken(client=client,
                                user=code.user,
                                code=code.code,
                                expire_time=datetime.datetime.now() +
                                datetime.timedelta(hours=1))
            token.save()
        except IntegrityError:
            AccessToken.objects.get(code=code.code).delete()
            code.delete()
            return error_response('invalid_grant')

        return success_response(urlsafe_base64_encode(token.token.bytes))
    else:
        return error_response('unsupported_grant_type')