aboutsummaryrefslogtreecommitdiff
path: root/wqflask/flask_security/passwordless.py
diff options
context:
space:
mode:
authorLei Yan2013-06-25 21:50:53 +0000
committerLei Yan2013-06-25 21:50:53 +0000
commit54ce9aec126d8d642755c709e0d6b3dc50a91d29 (patch)
treeb3df8f299215e26fd95137367955d5dbe5d8868c /wqflask/flask_security/passwordless.py
parent615b861dfd05c04df2e1a753dd135b07c1d88a94 (diff)
parenta0a1d8b70e02871328fb044c7ae190f805b0a04e (diff)
downloadgenenetwork2-54ce9aec126d8d642755c709e0d6b3dc50a91d29.tar.gz
Merge git://github.com/zsloan/genenetwork into flask
Diffstat (limited to 'wqflask/flask_security/passwordless.py')
-rw-r--r--wqflask/flask_security/passwordless.py59
1 files changed, 59 insertions, 0 deletions
diff --git a/wqflask/flask_security/passwordless.py b/wqflask/flask_security/passwordless.py
new file mode 100644
index 00000000..b0accb2c
--- /dev/null
+++ b/wqflask/flask_security/passwordless.py
@@ -0,0 +1,59 @@
+# -*- coding: utf-8 -*-
+"""
+ flask.ext.security.passwordless
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Flask-Security passwordless module
+
+ :copyright: (c) 2012 by Matt Wright.
+ :license: MIT, see LICENSE for more details.
+"""
+
+from flask import request, current_app as app
+from werkzeug.local import LocalProxy
+
+from .signals import login_instructions_sent
+from .utils import send_mail, url_for_security, get_token_status, \
+ config_value
+
+
+# Convenient references
+_security = LocalProxy(lambda: app.extensions['security'])
+
+_datastore = LocalProxy(lambda: _security.datastore)
+
+
+def send_login_instructions(user):
+ """Sends the login instructions email for the specified user.
+
+ :param user: The user to send the instructions to
+ :param token: The login token
+ """
+ token = generate_login_token(user)
+ url = url_for_security('token_login', token=token)
+ login_link = request.url_root[:-1] + url
+
+ send_mail(config_value('EMAIL_SUBJECT_PASSWORDLESS'), user.email,
+ 'login_instructions', user=user, login_link=login_link)
+
+ login_instructions_sent.send(dict(user=user, login_token=token),
+ app=app._get_current_object())
+
+
+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.id)])
+
+
+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
+ """
+ return get_token_status(token, 'login', 'LOGIN')