82 lines
2.5 KiB
Python
82 lines
2.5 KiB
Python
|
from datetime import datetime
|
||
|
from flask import (
|
||
|
render_template,
|
||
|
redirect,
|
||
|
flash,
|
||
|
url_for,
|
||
|
)
|
||
|
from sqlalchemy.exc import (
|
||
|
IntegrityError,
|
||
|
DataError,
|
||
|
DatabaseError,
|
||
|
InterfaceError,
|
||
|
InvalidRequestError,
|
||
|
)
|
||
|
from werkzeug.routing import BuildError
|
||
|
from usermodel import User
|
||
|
from forms.resetpasswordform import ResetPasswordForm
|
||
|
from flask_login import login_user
|
||
|
from flask_bcrypt import generate_password_hash
|
||
|
from app import db
|
||
|
|
||
|
|
||
|
def ResetPassword(path):
|
||
|
linkvalid = False
|
||
|
user = User.query.filter_by(resethash=path).first()
|
||
|
if user is None:
|
||
|
return redirect(url_for("index"))
|
||
|
timepassed = datetime.now() - user.resettime
|
||
|
if timepassed.days < 1:
|
||
|
linkvalid = True
|
||
|
|
||
|
resetpasswordform = ResetPasswordForm()
|
||
|
if resetpasswordform.validate_on_submit():
|
||
|
return ResetUserPasswordInDB(user, resetpasswordform)
|
||
|
return render_template(
|
||
|
"resetpassword.html",
|
||
|
resetpasswordform=resetpasswordform,
|
||
|
path=path,
|
||
|
linkvalid=linkvalid,
|
||
|
)
|
||
|
|
||
|
|
||
|
def ResetUserPasswordInDB(user, resetpasswordform):
|
||
|
try:
|
||
|
newpassword = resetpasswordform.confirmpassword.data
|
||
|
user.password = generate_password_hash(newpassword)
|
||
|
user.resethash = None
|
||
|
user.resettime = None
|
||
|
db.session.commit()
|
||
|
flash("Password Succesfully updated", "success")
|
||
|
login_user(user)
|
||
|
return redirect(url_for("index"))
|
||
|
|
||
|
except InvalidRequestError:
|
||
|
db.session.rollback()
|
||
|
resetpasswordform.email.errors.append("Something went wrong!")
|
||
|
flash("Something went wrong!", "danger")
|
||
|
except IntegrityError:
|
||
|
db.session.rollback()
|
||
|
resetpasswordform.email.errors.append("User already exists!")
|
||
|
flash("User already exists!", "warning")
|
||
|
except DataError:
|
||
|
db.session.rollback()
|
||
|
resetpasswordform.email.errors.append("Invalid Entry")
|
||
|
flash("Invalid Entry", "warning")
|
||
|
except InterfaceError:
|
||
|
db.session.rollback()
|
||
|
resetpasswordform.email.errors.append(
|
||
|
"Error connecting to the database"
|
||
|
)
|
||
|
flash("Error connecting to the database", "danger")
|
||
|
except DatabaseError:
|
||
|
db.session.rollback()
|
||
|
resetpasswordform.email.errors.append(
|
||
|
"Error connecting to the database"
|
||
|
)
|
||
|
flash("Error connecting to the database", "danger")
|
||
|
except BuildError:
|
||
|
db.session.rollback()
|
||
|
resetpasswordform.email.errors.append("Unknown error occured!")
|
||
|
flash("An error occured !", "danger")
|