kinda working safe point
This commit is contained in:
parent
b9a82af12f
commit
6dda02141e
31 changed files with 4302 additions and 2937 deletions
|
@ -1,4 +1,4 @@
|
|||
from flask import render_template, redirect, url_for, flash, request, current_app, jsonify, session
|
||||
from flask import Blueprint, render_template, redirect, url_for, flash, request, current_app, jsonify, session
|
||||
from flask_login import login_user, logout_user, login_required, current_user
|
||||
from urllib.parse import urlparse
|
||||
from app import db
|
||||
|
@ -8,6 +8,13 @@ from flask_wtf import FlaskForm
|
|||
from wtforms import StringField, PasswordField, BooleanField, SubmitField
|
||||
from wtforms.validators import DataRequired, Length, EqualTo, ValidationError
|
||||
from werkzeug.exceptions import BadRequest
|
||||
from werkzeug.security import generate_password_hash
|
||||
import logging
|
||||
|
||||
# Setup logging
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
bp = Blueprint('auth', __name__)
|
||||
|
||||
# Login form
|
||||
class LoginForm(FlaskForm):
|
||||
|
@ -28,51 +35,77 @@ class RegistrationForm(FlaskForm):
|
|||
if user is not None:
|
||||
raise ValidationError('Please use a different username.')
|
||||
|
||||
@auth_bp.route('/login', methods=['GET', 'POST'])
|
||||
@bp.route('/login', methods=['GET', 'POST'])
|
||||
def login():
|
||||
"""User login page"""
|
||||
if current_user.is_authenticated:
|
||||
return redirect(url_for('dashboard.index'))
|
||||
|
||||
form = LoginForm()
|
||||
if form.validate_on_submit():
|
||||
user = User.query.filter_by(username=form.username.data).first()
|
||||
|
||||
if user is None or not user.check_password(form.password.data):
|
||||
if user is None or not user.verify_password(form.password.data):
|
||||
flash('Invalid username or password', 'error')
|
||||
return redirect(url_for('auth.login'))
|
||||
|
||||
login_user(user, remember=form.remember_me.data)
|
||||
|
||||
# Redirect to requested page or dashboard
|
||||
next_page = request.args.get('next')
|
||||
if not next_page or urlparse(next_page).netloc != '':
|
||||
next_page = url_for('dashboard.index')
|
||||
|
||||
|
||||
flash('Login successful!', 'success')
|
||||
return redirect(next_page)
|
||||
|
||||
return render_template('auth/login.html', title='Sign In', form=form)
|
||||
return render_template('auth/login.html', form=form)
|
||||
|
||||
@auth_bp.route('/logout')
|
||||
@bp.route('/logout')
|
||||
@login_required
|
||||
def logout():
|
||||
"""User logout"""
|
||||
logout_user()
|
||||
flash('You have been logged out', 'info')
|
||||
flash('You have been logged out.', 'info')
|
||||
return redirect(url_for('auth.login'))
|
||||
|
||||
@auth_bp.route('/register', methods=['GET', 'POST'])
|
||||
@bp.route('/register', methods=['GET', 'POST'])
|
||||
def register():
|
||||
"""User registration page"""
|
||||
if current_user.is_authenticated:
|
||||
return redirect(url_for('dashboard.index'))
|
||||
|
||||
form = RegistrationForm()
|
||||
if form.validate_on_submit():
|
||||
user = User(username=form.username.data)
|
||||
user.set_password(form.password.data)
|
||||
# Create new user
|
||||
user = User(
|
||||
username=form.username.data,
|
||||
)
|
||||
|
||||
# Try both ways to set password
|
||||
try:
|
||||
# First try with set_password method
|
||||
logger.info("Trying to set password with set_password method")
|
||||
if hasattr(user, 'set_password'):
|
||||
user.set_password(form.password.data)
|
||||
else:
|
||||
# Fall back to property setter
|
||||
logger.info("set_password not found, using password property instead")
|
||||
user.password = form.password.data
|
||||
except Exception as e:
|
||||
logger.error(f"Error setting password: {e}")
|
||||
# Ensure we set the password somehow
|
||||
user.password_hash = generate_password_hash(form.password.data)
|
||||
logger.info("Set password_hash directly")
|
||||
|
||||
# Save to database
|
||||
db.session.add(user)
|
||||
db.session.commit()
|
||||
logger.info(f"User {user.username} registered successfully")
|
||||
|
||||
flash('Registration successful! You can now log in.', 'success')
|
||||
return redirect(url_for('auth.login'))
|
||||
|
||||
return render_template('auth/register.html', title='Register', form=form)
|
||||
return render_template('auth/register.html', form=form)
|
||||
|
||||
@auth_bp.route('/update_profile', methods=['POST'])
|
||||
@login_required
|
||||
|
@ -136,12 +169,8 @@ def update_preferences():
|
|||
flash('Preferences updated successfully', 'success')
|
||||
return redirect(url_for('auth.profile'))
|
||||
|
||||
@auth_bp.route('/profile')
|
||||
@bp.route('/profile')
|
||||
@login_required
|
||||
def profile():
|
||||
# Get theme preference from session or default to system
|
||||
theme_preference = session.get('theme_preference', 'system')
|
||||
|
||||
return render_template('auth/profile.html',
|
||||
title='User Profile',
|
||||
theme_preference=theme_preference)
|
||||
"""User profile page"""
|
||||
return render_template('auth/profile.html', user=current_user)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue