@@ -202,22 +202,32 @@ def _load_application(self, client_id, request):
202202 If request.client was not set, load application instance for given
203203 client_id and store it in request.client
204204 """
205-
206- # we want to be sure that request has the client attribute!
207- assert hasattr (request , "client" ), '"request" instance has no "client" attribute'
208-
209- try :
205+ if request .client :
206+ """ check for cached client, to save the db hit if this has alredy been loaded """
210207 if not isinstance (request .client , Application ):
211- log .debug ("invalid client type, Loading application for client_id %r" , client_id )
212- request .client = Application .objects .get (client_id = client_id )
213- # Check that the application can be used (defaults to always True)
214- if not request .client .is_usable (request ):
215- log .debug ("Failed body authentication: Application %r is disabled" % (client_id ))
208+ log .debug ("request.client is not an Application, something else set request.client erroroneously, resetting request.client." )
209+ request .client = None
210+ elif request .client .client_id != client_id :
211+ log .debug ("request.client client_id does not match the given client_id, resetting request.client." )
212+ request .client = None
213+ elif not request .client .is_usable (request ):
214+ log .debug ("request.client is a valid Application, but is not usable, resetting request.client." )
215+ request .client = None
216+ else :
217+ log .debug ("request.client is a valid Application, reusing it." )
218+ return request .client
219+ try :
220+ """ cache wasn't hit, load from db """
221+ log .debug ("cache not hit, Loading application from database for client_id %r" , client_id )
222+ client = Application .objects .get (client_id = client_id )
223+ if not client .is_usable (request ):
224+ log .debug ("Failed to load application: Application %r is not usable" % (client_id ))
216225 return None
226+ log .debug ("Loaded application %r from database" , client )
227+ request .client = client
217228 return request .client
218229 except Application .DoesNotExist :
219- log .debug ("Failed body authentication: Application %r does not exist" % (client_id ))
220- request .client = None
230+ log .debug ("Failed to load application: Application %r does not exist" % (client_id ))
221231 return None
222232
223233 def _set_oauth2_error_on_request (self , request , access_token , scopes ):
0 commit comments