kinda working safe point

This commit is contained in:
pika 2025-03-23 03:29:05 +01:00
parent b9a82af12f
commit 6dda02141e
31 changed files with 4302 additions and 2937 deletions

View file

@ -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)