/ letsencrypt / continuity_auth.py
continuity_auth.py
 1  """Continuity Authenticator"""
 2  import zope.interface
 3  
 4  from acme import challenges
 5  
 6  from letsencrypt import achallenges
 7  from letsencrypt import errors
 8  from letsencrypt import interfaces
 9  from letsencrypt import proof_of_possession
10  
11  
12  class ContinuityAuthenticator(object):
13      """IAuthenticator for
14      :const:`~acme.challenges.ContinuityChallenge` class challenges.
15  
16      :ivar proof_of_pos: Performs "proofOfPossession" challenges.
17      :type proof_of_pos:
18          :class:`letsencrypt.proof_of_possession.Proof_of_Possession`
19  
20      """
21      zope.interface.implements(interfaces.IAuthenticator)
22  
23      # This will have an installer soon for get_key/cert purposes
24      def __init__(self, config, installer):  # pylint: disable=unused-argument
25          """Initialize Client Authenticator.
26  
27          :param config: Configuration.
28          :type config: :class:`letsencrypt.interfaces.IConfig`
29  
30          :param installer: Let's Encrypt Installer.
31          :type installer: :class:`letsencrypt.interfaces.IInstaller`
32  
33          """
34          self.proof_of_pos = proof_of_possession.ProofOfPossession(installer)
35  
36      def get_chall_pref(self, unused_domain):  # pylint: disable=no-self-use
37          """Return list of challenge preferences."""
38          return [challenges.ProofOfPossession]
39  
40      def perform(self, achalls):
41          """Perform client specific challenges for IAuthenticator"""
42          responses = []
43          for achall in achalls:
44              if isinstance(achall, achallenges.ProofOfPossession):
45                  responses.append(self.proof_of_pos.perform(achall))
46              else:
47                  raise errors.ContAuthError("Unexpected Challenge")
48          return responses
49  
50      def cleanup(self, achalls):  # pylint: disable=no-self-use
51          """Cleanup call for IAuthenticator."""
52          for achall in achalls:
53              if not isinstance(achall, achallenges.ProofOfPossession):
54                  raise errors.ContAuthError("Unexpected Challenge")