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
« 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
12class AccountCreatedEmail(EventConsumer):
13 ID = "account:created:email"
15 @classmethod
16 def should_consume(cls, event):
17 return event.id == constants.EVENT_ACCOUNT_CREATED and event.context.get("account") is not None
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)
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
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)
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))
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"
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 )