|
|
|
from datetime import datetime
|
|
|
|
|
|
|
|
from flask import flash, redirect, render_template, url_for
|
|
|
|
from flask_bcrypt import generate_password_hash
|
|
|
|
from flask_login import login_user
|
|
|
|
from sqlalchemy.exc import (
|
|
|
|
DatabaseError,
|
|
|
|
DataError,
|
|
|
|
IntegrityError,
|
|
|
|
InterfaceError,
|
|
|
|
InvalidRequestError,
|
|
|
|
)
|
|
|
|
from werkzeug.routing import BuildError
|
|
|
|
|
|
|
|
from app import db
|
|
|
|
from forms.resetpasswordform import ResetPasswordForm
|
|
|
|
from models.usermodel import User
|
|
|
|
from statuspengguna import statuspengguna
|
|
|
|
|
|
|
|
reset_password = Blueprint(
|
|
|
|
"reset_password",
|
|
|
|
__name__,
|
|
|
|
template_folder="templates/statuspengguna",
|
|
|
|
static_folder="static",
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
@reset_password.route("/resetpassword/<path>", methods=["GET", "POST"])
|
|
|
|
def resetpassword(path):
|
|
|
|
return ResetPassword(path)
|
|
|
|
|
|
|
|
|
|
|
|
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")
|