2016-01-21 17:29:24 +00:00
|
|
|
import random
|
|
|
|
|
from datetime import (datetime, timedelta)
|
2016-01-07 17:31:17 +00:00
|
|
|
|
2016-05-20 13:43:31 +01:00
|
|
|
from sqlalchemy import func
|
|
|
|
|
|
2016-01-07 17:31:17 +00:00
|
|
|
from app import db
|
2016-01-21 17:29:24 +00:00
|
|
|
from app.models import (User, VerifyCode)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def create_secret_code():
|
|
|
|
|
return ''.join(map(str, random.sample(range(9), 5)))
|
2016-01-07 17:31:17 +00:00
|
|
|
|
|
|
|
|
|
2016-01-28 11:41:21 +00:00
|
|
|
def save_model_user(usr, update_dict={}, pwd=None):
|
|
|
|
|
if pwd:
|
|
|
|
|
usr.password = pwd
|
2016-05-11 10:56:24 +01:00
|
|
|
usr.password_changed_at = datetime.utcnow()
|
2016-01-11 17:19:06 +00:00
|
|
|
if update_dict:
|
2016-01-19 11:38:29 +00:00
|
|
|
if update_dict.get('id'):
|
|
|
|
|
del update_dict['id']
|
2016-03-08 14:33:06 +00:00
|
|
|
update_dict.pop('password_changed_at')
|
2016-01-11 17:19:06 +00:00
|
|
|
db.session.query(User).filter_by(id=usr.id).update(update_dict)
|
|
|
|
|
else:
|
|
|
|
|
db.session.add(usr)
|
2016-01-07 17:31:17 +00:00
|
|
|
db.session.commit()
|
|
|
|
|
|
|
|
|
|
|
2016-01-21 17:29:24 +00:00
|
|
|
def create_user_code(user, code, code_type):
|
|
|
|
|
verify_code = VerifyCode(code_type=code_type,
|
2016-05-11 10:56:24 +01:00
|
|
|
expiry_datetime=datetime.utcnow() + timedelta(hours=1),
|
2016-01-21 17:29:24 +00:00
|
|
|
user=user)
|
|
|
|
|
verify_code.code = code
|
|
|
|
|
db.session.add(verify_code)
|
|
|
|
|
db.session.commit()
|
|
|
|
|
return verify_code
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_user_code(user, code, code_type):
|
|
|
|
|
# Get the most recent codes to try and reduce the
|
|
|
|
|
# time searching for the correct code.
|
|
|
|
|
codes = VerifyCode.query.filter_by(
|
|
|
|
|
user=user, code_type=code_type).order_by(
|
|
|
|
|
VerifyCode.created_at.desc())
|
|
|
|
|
retval = None
|
|
|
|
|
for x in codes:
|
|
|
|
|
if x.check_code(code):
|
|
|
|
|
retval = x
|
|
|
|
|
break
|
|
|
|
|
return retval
|
|
|
|
|
|
|
|
|
|
|
2016-03-09 17:46:01 +00:00
|
|
|
def delete_codes_older_created_more_than_a_day_ago():
|
|
|
|
|
deleted = db.session.query(VerifyCode).filter(
|
|
|
|
|
VerifyCode.created_at < datetime.utcnow() - timedelta(hours=24)
|
|
|
|
|
).delete()
|
|
|
|
|
db.session.commit()
|
|
|
|
|
return deleted
|
|
|
|
|
|
|
|
|
|
|
2016-01-21 17:29:24 +00:00
|
|
|
def use_user_code(id):
|
|
|
|
|
verify_code = VerifyCode.query.get(id)
|
|
|
|
|
verify_code.code_used = True
|
|
|
|
|
db.session.add(verify_code)
|
|
|
|
|
db.session.commit()
|
|
|
|
|
|
|
|
|
|
|
2016-01-12 10:39:49 +00:00
|
|
|
def delete_model_user(user):
|
|
|
|
|
db.session.delete(user)
|
|
|
|
|
db.session.commit()
|
|
|
|
|
|
|
|
|
|
|
2016-05-06 11:07:11 +01:00
|
|
|
def delete_user_verify_codes(user):
|
|
|
|
|
VerifyCode.query.filter_by(user=user).delete()
|
|
|
|
|
db.session.commit()
|
|
|
|
|
|
|
|
|
|
|
2016-01-11 15:07:13 +00:00
|
|
|
def get_model_users(user_id=None):
|
2016-01-07 17:31:17 +00:00
|
|
|
if user_id:
|
2016-03-11 12:39:55 +00:00
|
|
|
return User.query.filter_by(id=user_id).one()
|
2016-01-07 17:31:17 +00:00
|
|
|
return User.query.filter_by().all()
|
2016-01-25 11:14:23 +00:00
|
|
|
|
|
|
|
|
|
2016-02-23 11:03:59 +00:00
|
|
|
def get_user_by_email(email):
|
2016-05-20 13:43:31 +01:00
|
|
|
return User.query.filter(func.lower(User.email_address) == func.lower(email)).one()
|
2016-02-23 11:03:59 +00:00
|
|
|
|
|
|
|
|
|
2016-01-25 11:14:23 +00:00
|
|
|
def increment_failed_login_count(user):
|
|
|
|
|
user.failed_login_count += 1
|
|
|
|
|
db.session.add(user)
|
|
|
|
|
db.session.commit()
|
2016-01-28 11:32:46 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def reset_failed_login_count(user):
|
|
|
|
|
if user.failed_login_count > 0:
|
|
|
|
|
user.failed_login_count = 0
|
|
|
|
|
db.session.add(user)
|
|
|
|
|
db.session.commit()
|