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)}))
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')
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}))
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')