-
Notifications
You must be signed in to change notification settings - Fork 167
Expand file tree
/
Copy pathpasswordless.py
More file actions
71 lines (55 loc) · 1.78 KB
/
Copy pathpasswordless.py
File metadata and controls
71 lines (55 loc) · 1.78 KB
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
"""
flask_security.passwordless
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Flask-Security passwordless module
:copyright: (c) 2012 by Matt Wright.
:copyright: (c) 2021-2026 by Chris Wagner.
:license: MIT, see LICENSE for more details.
"""
from flask import current_app as app
from .proxies import _security, _datastore
from .signals import login_instructions_sent
from .utils import (
config_value as cv,
send_mail,
url_for_security,
check_and_get_token_status,
)
def send_login_instructions(user):
"""Sends the login instructions email for the specified user.
:param user: The user to send the instructions to
"""
token = generate_login_token(user)
login_link = url_for_security("token_login", token=token, _external=True)
send_mail(
cv("EMAIL_SUBJECT_PASSWORDLESS"),
user.email,
"login_instructions",
user=user,
login_link=login_link,
login_token=token,
)
login_instructions_sent.send(
app._get_current_object(),
_async_wrapper=app.ensure_sync,
user=user,
login_token=token,
)
def generate_login_token(user):
"""Generates a unique login token for the specified user.
:param user: The user the token belongs to
"""
return _security.login_serializer.dumps([str(user.fs_uniquifier)])
def login_token_status(token):
"""Returns the expired status, invalid status, and user of a login token.
For example::
expired, invalid, user = login_token_status('...')
:param token: The login token
"""
expired, invalid, data = check_and_get_token_status(
token, "login", cv("LOGIN_WITHIN")
)
if invalid or not data:
return expired, invalid, None
user = _datastore.find_user(fs_uniquifier=data[0])
return expired, invalid, user