password reset

This commit is contained in:
CHIEFSOFT\ameye
2025-09-05 21:23:59 -04:00
parent 78dd6fec6e
commit f7ba53a230
3 changed files with 59 additions and 9 deletions
+47 -1
View File
@@ -105,6 +105,44 @@ class BaseService:
support@mermsemr.com
"""
html_body = f"""\
<html>
<head></head>
<body style="font-size:14px;line-height:1.5;">
<table width="550px" border="0" cellpadding="3" cellspacing="3" background-color="#F0F8FF" style="font-size:16px">
<tr>
<td style="text-align:center">
<img style="width:150px; height:auto;" src="mermsemr.com/images/logo-pink.png" />
</td>
</tr>
<tr>
<td>
Hello <b>{firstname}!</b>
</td>
</tr>
<tr>
<td>
You received this message for account reset password<br>
</td>
</tr>
<tr>
<td>
Follow the link: <a href="{link_url}">link</a> to reset your password.<br>
</td>
</tr>
<tr>
<td>
For any support<br>
Reach Out<br>
support@mermsemr.com<br>
https://www.mermsemr.com/
</td>
</tr>
</table>
</body>
</html>
"""
sender_email = BaseService.SEND_EMAIL_FROM
sender_password = BaseService.SEND_EMAIL_PASS
receiver_email = signup_email
@@ -115,7 +153,7 @@ class BaseService:
msg['Subject'] = subject
msg['From'] = sender_email
msg['To'] = receiver_email
msg.attach(MIMEText(body, 'plain')) # or 'html' for HTML content
msg.attach(MIMEText(html_body, 'html')) # or 'html' for HTML content
try:
# For Gmail, use 'smtp.gmail.com' and port 587 (TLS) or 465 (SSL)
@@ -191,6 +229,14 @@ class BaseService:
Follow the link: <a href="{link_url}">link</a> to complete the verification process.<br>
</td>
</tr>
<tr>
<td>
For any support<br>
Reach Out<br>
support@mermsemr.com<br>
https://www.mermsemr.com/
</td>
</tr>
</table>
</body>
</html>
+9 -5
View File
@@ -137,7 +137,7 @@ class LoginService(BaseService):
reset_uid = validated_data.get('reset_uid')
new_password = validated_data.get('new_password')
logger.error("GOT HERE 000001 ")
logger.info("GOT HERE 000001 ")
data ={}
if not reset_token:
return jsonify({'message': 'Error - missing reset_token '}), 403
@@ -145,7 +145,7 @@ class LoginService(BaseService):
data = jwt.decode(reset_token, LoginService.JWT_SECRET_KEY, algorithms=["HS256"])
except:
return jsonify({'status': 'INVALID2', 'message': 'Link is invalid'}), 403
logger.error("GOT HERE 000002 ")
logger.info("GOT HERE 000002 ")
if not data:
invalid_data = {
"error_message": "The link is invalid please try again later",
@@ -155,11 +155,15 @@ class LoginService(BaseService):
return ResponseHelper.success(data=invalid_data)
user_data = data["user"]
logger.info(f"GOT HERE USER03 {user_data} ")
reset_data = PasswordReset.get_rest_with_uid(user_data["pending_uid"])
logger.info(f"GOT HERE RESET {reset_data} ")
logger.info(f"GOT HERE RESET DATA id = {reset_data.id}")
PasswordReset.update_status(reset_data.id, reset_data.status + 1)
logger.error(f"GOT HERE 000003 {reset_data} id = {reset_data.id}")
username = user_data["username"]
username = reset_data.username
member = Members.get_member_by_username(username)
if not member:
invalid_data = {
@@ -170,7 +174,7 @@ class LoginService(BaseService):
return ResponseHelper.success(data=invalid_data)
encrypted_pass = generate_password_hash(new_password)
Members.update_user_password(reset_data.id, member["uid"], member["id"], encrypted_pass)
Members.update_user_password(reset_data.id, member.uid, member.id, encrypted_pass)
# update_user_passowrd(cls, reset_id, member_uid, member_id, new_passwprd_hash)
BaseService.send_completepass_mail(member.email, str(reset_data.uid), reset_data.id, member.firstname,
member.lastname) # pending_uid, pending_id, firstname, lastname
+3 -3
View File
@@ -28,13 +28,13 @@ class PasswordReset(db.Model):
}
@classmethod
def get_rest_with_uid(cls, pening_uid):
def get_rest_with_uid(cls, pending_uid):
"""
Return all offers in dictionary format.
"""
pass_reset = cls.query.filter_by(uid = pening_uid).first()
pass_reset = cls.query.filter_by(uid = pending_uid).first()
if not pass_reset:
raise ValueError(f"Password Reset with UID {pening_uid} does not exist.")
raise ValueError(f"Password Reset with UID {pending_uid} does not exist.")
return pass_reset
@classmethod