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

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

"""Subscribes users to the EFF newsletter.""" 

import logging 

 

import requests 

import zope.component 

 

from certbot import constants 

from certbot import interfaces 

 

 

logger = logging.getLogger(__name__) 

 

 

def handle_subscription(config): 

"""High level function to take care of EFF newsletter subscriptions. 

 

The user may be asked if they want to sign up for the newsletter if 

they have not already specified. 

 

:param .IConfig config: Client configuration. 

 

""" 

if config.email is None: 

if config.eff_email: 

_report_failure("you didn't provide an e-mail address") 

return 

if config.eff_email is None: 

config.eff_email = _want_subscription() 

if config.eff_email: 

subscribe(config.email) 

 

 

def _want_subscription(): 

"""Does the user want to be subscribed to the EFF newsletter? 

 

:returns: True if we should subscribe the user, otherwise, False 

:rtype: bool 

 

""" 

prompt = ( 

'Would you be willing to share your email address with the ' 

"Electronic Frontier Foundation, a founding partner of the Let's " 

'Encrypt project and the non-profit organization that develops ' 

"Certbot? We'd like to send you email about our work encrypting " 

"the web, EFF news, campaigns, and ways to support digital freedom. ") 

display = zope.component.getUtility(interfaces.IDisplay) 

return display.yesno(prompt, default=False) 

 

 

def subscribe(email): 

"""Subscribe the user to the EFF mailing list. 

 

:param str email: the e-mail address to subscribe 

 

""" 

url = constants.EFF_SUBSCRIBE_URI 

data = {'data_type': 'json', 

'email': email, 

'form_id': 'eff_supporters_library_subscribe_form'} 

logger.debug('Sending POST request to %s:\n%s', url, data) 

_check_response(requests.post(url, data=data)) 

 

 

def _check_response(response): 

"""Check for errors in the server's response. 

 

If an error occurred, it will be reported to the user. 

 

:param requests.Response response: the server's response to the 

subscription request 

 

""" 

logger.debug('Received response:\n%s', response.content) 

try: 

response.raise_for_status() 

if response.json()['status'] == False: 

_report_failure('your e-mail address appears to be invalid') 

except requests.exceptions.HTTPError: 

_report_failure() 

except (ValueError, KeyError): 

_report_failure('there was a problem with the server response') 

 

 

def _report_failure(reason=None): 

"""Notify the user of failing to sign them up for the newsletter. 

 

:param reason: a phrase describing what the problem was 

beginning with a lowercase letter and no closing punctuation 

:type reason: `str` or `None` 

 

""" 

msg = ['We were unable to subscribe you the EFF mailing list'] 

if reason is not None: 

msg.append(' because ') 

msg.append(reason) 

msg.append('. You can try again later by visiting https://act.eff.org.') 

reporter = zope.component.getUtility(interfaces.IReporter) 

reporter.add_message(''.join(msg), reporter.LOW_PRIORITY)