@@ -214,22 +214,32 @@ def _load_application(self, client_id, request):
214214 If request.client was not set, load application instance for given
215215 client_id and store it in request.client
216216 """
217-
218- # we want to be sure that request has the client attribute!
219- assert hasattr (request , "client" ), '"request" instance has no "client" attribute'
220-
221- try :
217+ if request .client :
218+ """ check for cached client, to save the db hit if this has alredy been loaded """
222219 if not isinstance (request .client , Application ):
223- log .debug ("invalid client type, Loading application for client_id %r" , client_id )
224- request .client = Application .objects .get (client_id = client_id )
225- # Check that the application can be used (defaults to always True)
226- if not request .client .is_usable (request ):
227- log .debug ("Failed body authentication: Application %r is disabled" % (client_id ))
220+ log .debug ("request.client is not an Application, something else set request.client erroroneously, resetting request.client." )
221+ request .client = None
222+ elif request .client .client_id != client_id :
223+ log .debug ("request.client client_id does not match the given client_id, resetting request.client." )
224+ request .client = None
225+ elif not request .client .is_usable (request ):
226+ log .debug ("request.client is a valid Application, but is not usable, resetting request.client." )
227+ request .client = None
228+ else :
229+ log .debug ("request.client is a valid Application, reusing it." )
230+ return request .client
231+ try :
232+ """ cache wasn't hit, load from db """
233+ log .debug ("cache not hit, Loading application from database for client_id %r" , client_id )
234+ client = Application .objects .get (client_id = client_id )
235+ if not client .is_usable (request ):
236+ log .debug ("Failed to load application: Application %r is not usable" % (client_id ))
228237 return None
238+ log .debug ("Loaded application %r from database" , client )
239+ request .client = client
229240 return request .client
230241 except Application .DoesNotExist :
231- log .debug ("Failed body authentication: Application %r does not exist" % (client_id ))
232- request .client = None
242+ log .debug ("Failed to load application: Application %r does not exist" % (client_id ))
233243 return None
234244
235245 def _set_oauth2_error_on_request (self , request , access_token , scopes ):
0 commit comments