Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

"""Client annotated ACME challenges. 

 

Please use names such as ``achall`` to distinguish from variables "of type" 

:class:`acme.challenges.Challenge` (denoted by ``chall``) 

and :class:`.ChallengeBody` (denoted by ``challb``):: 

 

from acme import challenges 

from acme import messages 

from certbot import achallenges 

 

chall = challenges.DNS(token='foo') 

challb = messages.ChallengeBody(chall=chall) 

achall = achallenges.DNS(chall=challb, domain='example.com') 

 

Note, that all annotated challenges act as a proxy objects:: 

 

achall.token == challb.token 

 

""" 

import logging 

 

import josepy as jose 

 

from acme import challenges 

 

 

logger = logging.getLogger(__name__) 

 

 

# pylint: disable=too-few-public-methods 

 

class AnnotatedChallenge(jose.ImmutableMap): 

"""Client annotated challenge. 

 

Wraps around server provided challenge and annotates with data 

useful for the client. 

 

:ivar challb: Wrapped `~.ChallengeBody`. 

 

""" 

__slots__ = ('challb',) 

acme_type = NotImplemented 

 

def __getattr__(self, name): 

return getattr(self.challb, name) 

 

 

class KeyAuthorizationAnnotatedChallenge(AnnotatedChallenge): 

"""Client annotated `KeyAuthorizationChallenge` challenge.""" 

__slots__ = ('challb', 'domain', 'account_key') 

 

def response_and_validation(self, *args, **kwargs): 

"""Generate response and validation.""" 

return self.challb.chall.response_and_validation( 

self.account_key, *args, **kwargs) 

 

 

class DNS(AnnotatedChallenge): 

"""Client annotated "dns" ACME challenge.""" 

__slots__ = ('challb', 'domain') 

acme_type = challenges.DNS