password reset online test
This commit is contained in:
@@ -2,7 +2,7 @@ from flask import Blueprint, jsonify, request, current_app, make_response, flash
|
||||
from functools import wraps
|
||||
from models import (
|
||||
KeyValueSettings, User, Room, Conversation, RoomFile,
|
||||
SiteSettings, DocuPulseSettings, Event, Mail, ManagementAPIKey
|
||||
SiteSettings, DocuPulseSettings, Event, Mail, ManagementAPIKey, PasswordSetupToken, PasswordResetToken
|
||||
)
|
||||
from extensions import db, csrf
|
||||
from datetime import datetime, timedelta
|
||||
@@ -526,4 +526,37 @@ def resend_setup_mail(current_user, user_id):
|
||||
db.session.add(mail)
|
||||
|
||||
db.session.commit()
|
||||
return jsonify({'message': 'Setup mail queued for resending'})
|
||||
return jsonify({'message': 'Setup mail queued for resending'})
|
||||
|
||||
# Generate Password Reset Token
|
||||
@admin_api.route('/generate-password-reset/<int:user_id>', methods=['POST'])
|
||||
@csrf.exempt
|
||||
@token_required
|
||||
def generate_password_reset_token(current_user, user_id):
|
||||
user = User.query.get(user_id)
|
||||
if not user:
|
||||
return jsonify({'message': 'User not found'}), 404
|
||||
|
||||
# Generate a secure token for password reset
|
||||
token = secrets.token_urlsafe(32)
|
||||
|
||||
# Create password reset token
|
||||
reset_token = PasswordResetToken(
|
||||
user_id=user.id,
|
||||
token=token,
|
||||
expires_at=datetime.utcnow() + timedelta(hours=24), # 24 hour expiration
|
||||
ip_address=request.remote_addr
|
||||
)
|
||||
db.session.add(reset_token)
|
||||
db.session.commit()
|
||||
|
||||
# Return the token and reset URL
|
||||
reset_url = f"{request.host_url.rstrip('/')}/reset-password/{token}"
|
||||
|
||||
return jsonify({
|
||||
'message': 'Password reset token generated successfully',
|
||||
'token': token,
|
||||
'reset_url': reset_url,
|
||||
'expires_at': reset_token.expires_at.isoformat(),
|
||||
'user_email': user.email
|
||||
})
|
||||
Reference in New Issue
Block a user