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)])
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)
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])
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)
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"])