aboutsummaryrefslogtreecommitdiff
path: root/ihatemoney/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'ihatemoney/models.py')
-rw-r--r--ihatemoney/models.py28
1 files changed, 27 insertions, 1 deletions
diff --git a/ihatemoney/models.py b/ihatemoney/models.py
index cd896f3..c801b74 100644
--- a/ihatemoney/models.py
+++ b/ihatemoney/models.py
@@ -2,9 +2,11 @@ from collections import defaultdict
from datetime import datetime
from flask_sqlalchemy import SQLAlchemy, BaseQuery
-from flask import g
+from flask import g, current_app
from sqlalchemy import orm
+from itsdangerous import (TimedJSONWebSignatureSerializer
+ as Serializer, BadSignature, SignatureExpired)
db = SQLAlchemy()
@@ -199,6 +201,30 @@ class Project(db.Model):
db.session.delete(self)
db.session.commit()
+ def generate_token(self, expiration):
+ """Generate a timed and serialized JsonWebToken
+
+ :param expiration: Token expiration time (in seconds)
+ """
+ serializer = Serializer(current_app.config['SECRET_KEY'], expiration)
+ return serializer.dumps({'project_id': self.id}).decode('utf-8')
+
+ @staticmethod
+ def verify_token(token):
+ """Return the project id associated to the provided token,
+ None if the provided token is expired or not valid.
+
+ :param token: Serialized TimedJsonWebToken
+ """
+ serializer = Serializer(current_app.config['SECRET_KEY'])
+ try:
+ data = serializer.loads(token)
+ except SignatureExpired:
+ return None
+ except BadSignature:
+ return None
+ return data['project_id']
+
def __repr__(self):
return "<Project %s>" % self.name