Example #1
0
    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")
Example #2
0
    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
Example #3
0
    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]
Example #4
0
    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")
Example #5
0
    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")
Example #6
0
    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]
Example #7
0
    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
Example #8
0
    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()
Example #9
0
    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())
Example #10
0
    def get(t_id):
        if t_id not in TokenList.token_dict:
            raise errors.TokenFailure("Not found")

        return TokenList.token_dict[t_id]
Example #11
0
    def validity_checks(self):
        self.timedelta_check()

        if self.remaining_uses <= 0:
            raise errors.TokenFailure("Token is no more valid.")
Example #12
0
    def get(self, key):
        ret = TempDict.get(self, key)
        if ret is None:
            raise errors.TokenFailure("Not found")

        return ret
Example #13
0
 def decrement(self):
     self.remaining_uses -= 1
     if self.remaining_uses < 0:
         raise errors.TokenFailure("Token is no longer valid.")