def test_rec_token2(self):
        token1 = achallenges.RecoveryToken(challb=None, domain="0")
        token2 = achallenges.RecoveryToken(challb=None, domain="1")

        self.auth.cleanup([token1, token2])

        self.assertEqual(
            self.mock_cleanup.call_args_list,
            [mock.call(token1), mock.call(token2)])
示例#2
0
    def test_perform_not_stored(self, mock_input):
        mock_input().input.side_effect = [(0, "555"), (1, "000")]
        response = self.rec_token.perform(
            achallenges.RecoveryToken(chall=None, domain="example5.com"))
        self.assertEqual(response,
                         challenges.RecoveryTokenResponse(token="555"))

        response = self.rec_token.perform(
            achallenges.RecoveryToken(chall=None, domain="example6.com"))
        self.assertTrue(response is None)
示例#3
0
    def test_perform_stored(self):
        self.rec_token.store_token("example4.com", 444)
        response = self.rec_token.perform(
            achallenges.RecoveryToken(chall=None, domain="example4.com"))

        self.assertEqual(response,
                         challenges.RecoveryTokenResponse(token="444"))
    def test_unexpected(self):
        token = achallenges.RecoveryToken(challb=None, domain="0")
        unexpected = achallenges.DVSNI(challb=None,
                                       domain="0",
                                       key="dummy_key")

        self.assertRaises(errors.LetsEncryptContAuthError, self.auth.cleanup,
                          [token, unexpected])
示例#5
0
    def test_cleanup(self):
        self.rec_token.store_token("example3.com", 333)
        self.assertFalse(self.rec_token.requires_human("example3.com"))

        self.rec_token.cleanup(
            achallenges.RecoveryToken(chall=None, domain="example3.com"))
        self.assertTrue(self.rec_token.requires_human("example3.com"))

        # Shouldn't throw an error
        self.rec_token.cleanup(
            achallenges.RecoveryToken(chall=None, domain="example4.com"))

        # SHOULD throw an error (OSError other than nonexistent file)
        self.assertRaises(
            OSError, self.rec_token.cleanup,
            achallenges.RecoveryToken(chall=None,
                                      domain="a" + "r" * 10000 + ".com"))
    def _challenge_factory(self, domain, path):
        """Construct Namedtuple Challenges

        :param str domain: domain of the enrollee

        :param list path: List of indices from `challenges`.

        :returns: dv_chall, list of DVChallenge type
            :class:`letsencrypt.client.achallenges.Indexed`
            cont_chall, list of ContinuityChallenge type
            :class:`letsencrypt.client.achallenges.Indexed`
        :rtype: tuple

        :raises errors.LetsEncryptClientError: If Challenge type is not
            recognized

        """
        dv_chall = []
        cont_chall = []

        for index in path:
            chall = self.msgs[domain].challenges[index]

            if isinstance(chall, challenges.DVSNI):
                logging.info("  DVSNI challenge for %s.", domain)
                achall = achallenges.DVSNI(
                    chall=chall, domain=domain, key=self.authkey[domain])
            elif isinstance(chall, challenges.SimpleHTTPS):
                logging.info("  SimpleHTTPS challenge for %s.", domain)
                achall = achallenges.SimpleHTTPS(
                    chall=chall, domain=domain, key=self.authkey[domain])
            elif isinstance(chall, challenges.DNS):
                logging.info("  DNS challenge for %s.", domain)
                achall = achallenges.DNS(chall=chall, domain=domain)

            elif isinstance(chall, challenges.RecoveryToken):
                logging.info("  Recovery Token Challenge for %s.", domain)
                achall = achallenges.RecoveryToken(chall=chall, domain=domain)
            elif isinstance(chall, challenges.RecoveryContact):
                logging.info("  Recovery Contact Challenge for %s.", domain)
                achall = achallenges.RecoveryContact(chall=chall, domain=domain)
            elif isinstance(chall, challenges.ProofOfPossession):
                logging.info("  Proof-of-Possession Challenge for %s", domain)
                achall = achallenges.ProofOfPossession(
                    chall=chall, domain=domain)

            else:
                raise errors.LetsEncryptClientError(
                    "Received unsupported challenge of type: %s", chall.typ)

            ichall = achallenges.Indexed(achall=achall, index=index)

            if isinstance(chall, challenges.ContinuityChallenge):
                cont_chall.append(ichall)
            elif isinstance(chall, challenges.DVChallenge):
                dv_chall.append(ichall)

        return dv_chall, cont_chall
    def test_rec_token5(self):
        tokens = []
        for i in xrange(5):
            tokens.append(achallenges.RecoveryToken(chall=None, domain=str(i)))

        responses = self.auth.perform(tokens)

        self.assertEqual(len(responses), 5)
        for i in xrange(5):
            self.assertEqual(responses[i], "RecoveryToken%d" % i)
示例#8
0
def challb_to_achall(challb, key, domain):
    """Converts a ChallengeBody object to an AnnotatedChallenge.

    :param challb: ChallengeBody
    :type challb: :class:`letsencrypt.acme.messages2.ChallengeBody`

    :param key: Key
    :type key: :class:`letsencrypt.client.le_util.Key`

    :param str domain: Domain of the challb

    :returns: Appropriate AnnotatedChallenge
    :rtype: :class:`letsencrypt.client.achallenges.AnnotatedChallenge`

    """
    chall = challb.chall

    if isinstance(chall, challenges.DVSNI):
        logging.info("  DVSNI challenge for %s.", domain)
        return achallenges.DVSNI(
            challb=challb, domain=domain, key=key)
    elif isinstance(chall, challenges.SimpleHTTPS):
        logging.info("  SimpleHTTPS challenge for %s.", domain)
        return achallenges.SimpleHTTPS(
            challb=challb, domain=domain, key=key)
    elif isinstance(chall, challenges.DNS):
        logging.info("  DNS challenge for %s.", domain)
        return achallenges.DNS(challb=challb, domain=domain)

    elif isinstance(chall, challenges.RecoveryToken):
        logging.info("  Recovery Token Challenge for %s.", domain)
        return achallenges.RecoveryToken(challb=challb, domain=domain)
    elif isinstance(chall, challenges.RecoveryContact):
        logging.info("  Recovery Contact Challenge for %s.", domain)
        return achallenges.RecoveryContact(
            challb=challb, domain=domain)
    elif isinstance(chall, challenges.ProofOfPossession):
        logging.info("  Proof-of-Possession Challenge for %s", domain)
        return achallenges.ProofOfPossession(
            challb=challb, domain=domain)

    else:
        raise errors.LetsEncryptClientError(
            "Received unsupported challenge of type: %s",
            chall.typ)
 def test_rec_token1(self):
     token = achallenges.RecoveryToken(challb=None, domain="0")
     responses = self.auth.perform([token])
     self.assertEqual(responses, ["RecoveryToken0"])