def timedelta_check(self): """ timedelta_check verifies that the current time is between the start validity time and the end validity time. """ min_delay = State.settings.submission_minimum_delay if State.settings.devel_mode: min_delay = 0 max_ttl = State.settings.submission_maximum_ttl now = datetime_now() start = (self.creation_date + timedelta(seconds=min_delay)) if not start < now: log.debug( "creation + validity (%d) = %s < now %s, still too early", min_delay, start, now) raise errors.TokenFailure("Too early to use this token") end = (self.creation_date + timedelta(max_ttl)) if now > end: log.debug("creation + end_validity (%d) = %s > now %s, too late", max_ttl, start, now) raise errors.TokenFailure("Too late to use this token")
def update(self, request): error = False if self.human_captcha is not False: if 'human_captcha_answer' in request: error |= self.human_captcha_check( request['human_captcha_answer']) else: error = True if not error and self.graph_captcha is not False: raise errors.TokenFailure( "Graphical captcha error: not yet implemented") if not error and self.proof_of_work is not False: if 'proof_of_work_answer' in request: error |= self.proof_of_work_check( request['proof_of_work_answer']) else: error = True if error: # change questions! self.generate_token_challenge() return error
def delete(t_id): """ Token can be used only once, so need to be remove after the first usage. :param t_id: :return: """ if t_id not in TokenList.token_dict: raise errors.TokenFailure("Not found") del TokenList.token_dict[t_id]
def timedelta_check(self): """ This timedelta check verify that the current time fits between the start validity time and the end validity time. """ now = datetime_now() start = (self.creation_date + timedelta(seconds=self.start_validity_secs)) if not start < now: log.debug( "creation + validity (%d) = %s < now %s, still to early" % (self.start_validity_secs, start, now)) raise errors.TokenFailure("Too early to use this token") # This will never happen after integration of self expiring objects. end = (self.creation_date + timedelta(self.end_validity_secs)) if now > end: log.debug("creation + end_validity (%d) = %s > now %s, too late" % (self.end_validity_secs, start, now)) raise errors.TokenFailure("Too late to use this token")
def use(self): try: self.decrement() self.timedelta_check() except errors.TokenFailure as e: # Unrecoverable failures so immediately delete the token. TokenList.delete(self.id) raise e if not self.human_captcha['solved'] or not self.proof_of_work['solved']: raise errors.TokenFailure("Token is not solved")
def use(self): self.validity_checks() if self.human_captcha is not False or \ self.proof_of_work is not False: raise errors.TokenFailure( "Token still requires user action to be used.") self.remaining_uses -= 1 if self.remaining_uses <= 0: del TokenList[self.id]
def update(self, request): self.validity_checks() error = False if self.human_captcha is not False: error |= self.human_captcha_check(request['human_captcha_answer']) # Raise an exception if, by mistake, we ask for something not yet supported if not error and self.graph_captcha is not False: raise errors.TokenFailure( "Graphical Captcha error! NotYetImplemented") # Raise an exception if, by mistake, we ask for something not yet supported if not error and self.proof_of_work is not False: raise errors.TokenFailure("Proof of Work error! NotYetImplemented") if error: # change questions! self.generate_token_challenge() return error
def put(self, token_id): """ Parameter: token_id Request: TokenAnswerDesc Response: TokenDesc """ request = self.validate_message(self.request.content.read(), requests.TokenAnswerDesc) token = TokenList.get(token_id) if not token.update(request): raise errors.TokenFailure('failed challenge') return token.serialize()
def put(self, token_id): """ Parameter: token_id Request: TokenAnswerDesc Response: TokenDesc """ request = self.validate_message(self.request.body, requests.TokenAnswerDesc) token = TokenList.get(token_id) if not token.update(request): raise errors.TokenFailure('failed challenge') self.set_status(202) # Updated self.write(token.serialize())
def get(t_id): if t_id not in TokenList.token_dict: raise errors.TokenFailure("Not found") return TokenList.token_dict[t_id]
def validity_checks(self): self.timedelta_check() if self.remaining_uses <= 0: raise errors.TokenFailure("Token is no more valid.")
def get(self, key): ret = TempDict.get(self, key) if ret is None: raise errors.TokenFailure("Not found") return ret
def decrement(self): self.remaining_uses -= 1 if self.remaining_uses < 0: raise errors.TokenFailure("Token is no longer valid.")