Coverage for portality / events / consumers / account_created_email.py: 100%

32 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-05-04 09:41 +0100

1# ~~ AccountCreatedEmail:Consumer ~~ 

2from portality.util import url_for 

3from portality.events.consumer import EventConsumer 

4from portality import constants 

5from portality import app_email 

6from portality import models 

7from portality.core import app 

8from portality.bll.exceptions import NoSuchPropertyException 

9from portality.ui import templates 

10 

11 

12class AccountCreatedEmail(EventConsumer): 

13 ID = "account:created:email" 

14 

15 @classmethod 

16 def should_consume(cls, event): 

17 return event.id == constants.EVENT_ACCOUNT_CREATED and event.context.get("account") is not None 

18 

19 @classmethod 

20 def consume(cls, event): 

21 context = event.context 

22 acc = models.Account(**context.get("account")) 

23 if not acc.reset_token or not acc.email: 

24 raise NoSuchPropertyException("Account {x} does not have a reset_token and/or an email address".format(x=acc.id)) 

25 cls._send_account_created_email(acc) 

26 

27 @classmethod 

28 def _send_account_created_email(cls, account: models.Account): 

29 # ~~->AccountCreated:Email~~ 

30 forgot_pw_url = app.config.get('BASE_URL', "https://doaj.org") + url_for('account.forgot') 

31 reset_url = forgot_pw_url 

32 

33 if account.reset_token is not None: 

34 reset_url = app.config.get('BASE_URL', "https://doaj.org") + url_for('account.reset', reset_token=account.reset_token) 

35 

36 password_create_timeout_seconds = int( 

37 app.config.get("PASSWORD_CREATE_TIMEOUT", app.config.get('PASSWORD_RESET_TIMEOUT', 86400) * 14)) 

38 password_create_timeout_days = int(password_create_timeout_seconds / (60 * 60 * 24)) 

39 

40 to = [account.email] 

41 fro = app.config.get('SYSTEM_EMAIL_FROM', 'helpdesk@doaj.org') 

42 subject = app.config.get("SERVICE_NAME", "") + " - account created, please verify your email address" 

43 

44 # ~~-> Email:Library ~~ 

45 app_email.send_mail(to=to, 

46 fro=fro, 

47 subject=subject, 

48 template_name=templates.EMAIL_ACCOUNT_CREATED, 

49 reset_url=reset_url, 

50 email=account.email, 

51 timeout_days=password_create_timeout_days, 

52 forgot_pw_url=forgot_pw_url 

53 )