def lookup_nonce(self, oauth_consumer, oauth_token, nonce): if oauth_token is None: return None logger.warning("!!! In GAEOAuthDataStore.lookup_nonce key_:%s, consumer_key: %s, token_key:%s"%(nonce,oauth_consumer.key_,oauth_token.key_)) nonces = Nonce.all()\ .filter('consumer_key =',oauth_consumer.key_)\ .filter('token_key =',oauth_token.key_)\ .filter('key_ =',nonce).fetch(1000) if len(nonces) == 1: nonce = nonces[0] return nonce.key_ elif len(nonces) == 0: #create a nonce nonce_obj = Nonce(consumer_key=oauth_consumer.key_, token_key=oauth_token.key_, key_=nonce) nonce_obj.put() return None else: raise Exception('More then one nonce matches consumer_key "%s", \ token_key "%s", key_ "%S"'%(oauth_consumer.key,oauth_token.key, nonce))
def save_timestamp_and_nonce(self, client_key, timestamp, nonce, request_token=None, access_token=None): client = Client.query(Client.client_key == client_key).get() if client: nonce = Nonce( nonce=nonce, timestamp=timestamp, client=client.key) if request_token: req_token = RequestToken.query( RequestToken.token == request_token).get() nonce.request_token = req_token.key if access_token: token = AccessToken.query( AccessToken.token == access_token).get() nonce.access_token = token.key nonce.put()
def save_timestamp_and_nonce(self, client_key, timestamp, nonce, request_token=None, access_token=None): client = Client.query(Client.client_key == client_key).get() if client: nonce = Nonce(nonce=nonce, timestamp=timestamp, client=client.key) if request_token: req_token = RequestToken.query( RequestToken.token == request_token).get() nonce.request_token = req_token.key if access_token: token = AccessToken.query( AccessToken.token == access_token).get() nonce.access_token = token.key nonce.put()
def post(self, code=None): response = RESPONSE.copy() if not code: desc = "There is/are missing parameters in the request." response["response"] = "MissingParameters" response["description"] = desc response["code"] = 463 if "X-Signature" in self.request.headers: c_sig = self.request.headers['X-Signature'] s_data = "&".join([ "POST", urllib.quote(self.request.uri), urllib.quote(self.request.body) ]) s_sig = generate_signature(LOGIN_KEY, s_data) logging.info("v: " + s_sig) if c_sig == s_sig: try: body = json.loads(self.request.body) except: desc = "The request body is not in a valid JSON format." response["response"] = "InvalidJSONFormat" response["description"] = desc response["code"] = 406 else: if "nonce" in body and "timestamp" in body: new = False nn = Nonce.get_by_id(body["nonce"]) if nn: expiry = datetime.datetime.now() expiry = int(time.mktime(expiry.timetuple())) expiry -= int(nn.timestamp) expiry /= 60 expiry /= 60 if expiry <= 10: new = True else: desc = "This request seems to be expired already" response["response"] = "RequestExpired" response["description"] = desc response["code"] = 464 else: n = Nonce(id=body["nonce"]) n.nonce = body["nonce"] n.timestamp = int(body["timestamp"]) n.put() new = True if new: logincode = LoginCode.get_by_id(str(code)) if logincode: s = logincode.session.get() if s.expires >= datetime.datetime.now(): user = s.owner.get() if user: t_id = generate_uuid() + generate_uuid( ) token = Token(id=t_id) token.token = t_id token.session = s.key token.token_type = "api" token.put() response = user.to_object(token=t_id) response["response"] = "Successful" response["expires"] = time.mktime( s.expires.timetuple()) response["code"] = 200 else: s.status = False s.put() response[ "response"] = "UserUnavailable" response[ "description"] = "This user seems to be unavailable" response["code"] = 404 else: response["response"] = "SessionExpired" response[ "description"] = "This session seems to be expired already" response["code"] = 465 else: response["response"] = "LoginCodeDoesNotExist" response[ "description"] = "This login code does not exist." response["code"] = 404 else: response["response"] = "MissingParameters" response[ "description"] = "There is/are missing parameters in the request." response["code"] = 463 else: response["response"] = "InvalidSignature" response[ "description"] = "The request signature is invalid or has been tampered." response["code"] = 460 else: response["response"] = "MissingParameters" response[ "description"] = "There is/are missing parameters in the request." response["code"] = 463 wrap_response(self, response)