Skip to content

Commit f29c8ce

Browse files
committed
Add create device authorization response method
This method calls the server's create_device_authorization_response method (https://datatracker.ietf.org/doc/html/rfc8628#section-3.2) and is returns to the caller the information adhering to the rfc
1 parent 019cfcd commit f29c8ce

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

oauth2_provider/oauth2_backends.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,16 @@ def create_authorization_response(self, request, scopes, credentials, allow):
151151
except oauth2.OAuth2Error as error:
152152
raise OAuthToolkitError(error=error, redirect_uri=credentials["redirect_uri"])
153153

154+
def create_device_authorization_response(self, request: HttpRequest):
155+
uri, http_method, body, headers = self._extract_params(request)
156+
try:
157+
headers, body, status = self.server.create_device_authorization_response(
158+
uri, http_method, body, headers
159+
)
160+
return headers, body, status
161+
except OAuth2Error as exc:
162+
return exc.headers, exc.json, exc.status_code
163+
154164
def create_token_response(self, request):
155165
"""
156166
A wrapper method that calls create_token_response on `server_class` instance.

oauth2_provider/views/mixins.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from django.conf import settings
44
from django.core.exceptions import ImproperlyConfigured, SuspiciousOperation
5-
from django.http import HttpResponseForbidden, HttpResponseNotFound
5+
from django.http import HttpRequest, HttpResponseForbidden, HttpResponseNotFound
66

77
from ..exceptions import FatalClientError
88
from ..scopes import get_scopes_backend
@@ -114,6 +114,20 @@ def create_authorization_response(self, request, scopes, credentials, allow):
114114
core = self.get_oauthlib_core()
115115
return core.create_authorization_response(request, scopes, credentials, allow)
116116

117+
def create_device_authorization_response(self, request: HttpRequest):
118+
"""
119+
A wrapper method that calls create_device_authorization_response on `server_class`
120+
instance.
121+
:param request: The current django.http.HttpRequest object
122+
"""
123+
oauth2_settings.EXTRA_SERVER_KWARGS = {
124+
"verification_uri": oauth2_settings.OAUTH_DEVICE_VERIFICATION_URI,
125+
"interval": oauth2_settings.DEVICE_FLOW_INTERVAL,
126+
"user_code_generator": oauth2_settings.OAUTH_DEVICE_USER_CODE_GENERATOR,
127+
}
128+
core = self.get_oauthlib_core()
129+
return core.create_device_authorization_response(request)
130+
117131
def create_token_response(self, request):
118132
"""
119133
A wrapper method that calls create_token_response on `server_class` instance.

0 commit comments

Comments
 (0)