1
1
from __future__ import absolute_import , print_function
2
2
3
+ import logging
3
4
import six
4
5
5
6
from django .conf import settings
13
14
)
14
15
from sentry .web .frontend .auth_login import AuthLoginView
15
16
17
+ logger = logging .getLogger ('sentry.api' )
18
+
16
19
17
20
class OAuthAuthorizeView (AuthLoginView ):
18
21
auth_required = False
@@ -37,7 +40,13 @@ def redirect_response(self, response_type, redirect_uri, params):
37
40
parts [4 ] = urlencode (query )
38
41
return self .redirect (urlunparse (parts ))
39
42
40
- def error (self , response_type , redirect_uri , name , state = None ):
43
+ def error (self , request , response_type , redirect_uri , name , state = None , client_id = None ):
44
+ logging .error ('oauth.authorize-error' , extra = {
45
+ 'error_name' : name ,
46
+ 'response_type' : response_type ,
47
+ 'client_id' : client_id ,
48
+ 'redirect_uri' : redirect_uri ,
49
+ })
41
50
return self .redirect_response (
42
51
response_type , redirect_uri , {
43
52
'error' : name ,
@@ -58,6 +67,12 @@ def get(self, request):
58
67
force_prompt = request .GET .get ('force_prompt' )
59
68
60
69
if not client_id :
70
+ logging .error ('oauth.authorize-error' , extra = {
71
+ 'error_name' : 'unauthorized_client' ,
72
+ 'response_type' : response_type ,
73
+ 'client_id' : client_id ,
74
+ 'redirect_uri' : redirect_uri ,
75
+ })
61
76
return self .respond (
62
77
'sentry/oauth-error.html' , {
63
78
'error' : mark_safe ('Missing or invalid <em>client_id</em> parameter.' ),
@@ -70,6 +85,12 @@ def get(self, request):
70
85
status = ApiApplicationStatus .active ,
71
86
)
72
87
except ApiApplication .DoesNotExist :
88
+ logging .error ('oauth.authorize-error' , extra = {
89
+ 'error_name' : 'unauthorized_client' ,
90
+ 'response_type' : response_type ,
91
+ 'client_id' : client_id ,
92
+ 'redirect_uri' : redirect_uri ,
93
+ })
73
94
return self .respond (
74
95
'sentry/oauth-error.html' , {
75
96
'error' : mark_safe ('Missing or invalid <em>client_id</em> parameter.' ),
@@ -79,6 +100,12 @@ def get(self, request):
79
100
if not redirect_uri :
80
101
redirect_uri = application .get_default_redirect_uri ()
81
102
elif not application .is_valid_redirect_uri (redirect_uri ):
103
+ logging .error ('oauth.authorize-error' , extra = {
104
+ 'error_name' : 'invalid_request' ,
105
+ 'response_type' : response_type ,
106
+ 'client_id' : client_id ,
107
+ 'redirect_uri' : redirect_uri ,
108
+ })
82
109
return self .respond (
83
110
'sentry/oauth-error.html' , {
84
111
'error' : mark_safe ('Missing or invalid <em>redirect_uri</em> parameter.' ),
@@ -87,6 +114,8 @@ def get(self, request):
87
114
88
115
if not application .is_allowed_response_type (response_type ):
89
116
return self .error (
117
+ request = request ,
118
+ client_id = client_id ,
90
119
response_type = response_type ,
91
120
redirect_uri = redirect_uri ,
92
121
name = 'unsupported_response_type' ,
@@ -98,6 +127,8 @@ def get(self, request):
98
127
for scope in scopes :
99
128
if scope not in settings .SENTRY_SCOPES :
100
129
return self .error (
130
+ request = request ,
131
+ client_id = client_id ,
101
132
response_type = response_type ,
102
133
redirect_uri = redirect_uri ,
103
134
name = 'invalid_scope' ,
@@ -232,6 +263,8 @@ def post(self, request):
232
263
233
264
elif op == 'deny' :
234
265
return self .error (
266
+ request = request ,
267
+ client_id = payload ['cid' ],
235
268
response_type = response_type ,
236
269
redirect_uri = redirect_uri ,
237
270
name = 'access_denied' ,
0 commit comments