def authenticate(self, request): api_key_header = self.header_canonical(self.API_KEY_HEADER) api_key = request.META.get(api_key_header) if not api_key: return None nonce = request.META.get(self.header_canonical("nonce")) if not nonce: raise exceptions.AuthenticationFailed('No nonce provided') ts = request.META.get(self.header_canonical("timestamp")) if not ts: raise exceptions.AuthenticationFailed('No timestamp provided') ts_diff = int(time.time()) - int(ts) if abs(ts_diff) > self.TIME_BACK: raise exceptions.AuthenticationFailed( 'Timestamp is more than %s minutes different from the server.' % TIME_BACK) try: nonce = Nonce(nonce=nonce, timestamp=ts) nonce.save(force_insert=True) except: raise exceptions.AuthenticationFailed('Nonce check failed') return SignatureAuthentication.authenticate(self, request)