mirror of
https://github.com/Michatec/MiniFaceBook.git
synced 2026-04-01 07:56:28 +02:00
66 lines
3.2 KiB
Python
66 lines
3.2 KiB
Python
from flask import Blueprint, render_template, redirect, url_for, flash, request
|
|
from flask_login import login_required, current_user
|
|
from models import db, User, Post
|
|
from flask_babel import gettext as _
|
|
from werkzeug.security import generate_password_hash
|
|
import re
|
|
|
|
profile_bp = Blueprint('profil', __name__)
|
|
|
|
@profile_bp.route('/profile')
|
|
@login_required
|
|
def profile():
|
|
return render_template('profile.html', user=current_user)
|
|
|
|
@profile_bp.route('/my_posts')
|
|
@login_required
|
|
def my_posts():
|
|
posts = db.session.query(Post).filter_by(user_id=current_user.id).order_by(Post.created_at.desc()).all()
|
|
return render_template('my_posts.html', posts=posts)
|
|
|
|
@profile_bp.route('/edit_profile', methods=['GET', 'POST'])
|
|
@login_required
|
|
def edit_profile():
|
|
if request.method == 'POST':
|
|
new_username = request.form['username']
|
|
new_email = request.form['email']
|
|
new_password = request.form['password']
|
|
confirm_password = request.form['confirm_password']
|
|
if not current_user.username or not current_user.email:
|
|
flash(_('Username and email cannot be empty.'), 'danger')
|
|
return redirect(url_for('profile.edit_profile'))
|
|
else:
|
|
if new_username and new_username != current_user.username:
|
|
if db.session.query(User).filter_by(username=new_username).first():
|
|
flash(_('Username already taken.'), 'danger')
|
|
return redirect(url_for('profile.edit_profile'))
|
|
elif not re.match(r'^[a-zA-Z0-9_.+-]+$', new_username):
|
|
flash(_('Invalid username. Only alphanumeric characters are allowed.'), 'danger')
|
|
return redirect(url_for('profile.edit_profile'))
|
|
else:
|
|
current_user.username = new_username
|
|
elif new_email and new_email != current_user.email:
|
|
if not re.match(r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$', new_email):
|
|
flash(_('Invalid email address.'), 'danger')
|
|
return redirect(url_for('profile.edit_profile'))
|
|
elif db.session.query(User).filter_by(email=new_email).first():
|
|
flash(_('E-Mail already taken.'), 'danger')
|
|
return redirect(url_for('profile.edit_profile'))
|
|
else:
|
|
current_user.email = new_email
|
|
elif new_password:
|
|
if len(new_password) < 8:
|
|
flash(_('Password must be at least 8 characters long.'), 'danger')
|
|
return redirect(url_for('profile.edit_profile'))
|
|
elif new_password != confirm_password:
|
|
flash(_('Passwords do not match.'), 'danger')
|
|
return redirect(url_for('profile.edit_profile'))
|
|
else:
|
|
current_user.password = generate_password_hash(new_password, method='pbkdf2:sha256')
|
|
else:
|
|
flash(_('No changes made.'), 'info')
|
|
return redirect(url_for('profil.profile'))
|
|
db.session.commit()
|
|
flash(_('Profile updated.'), 'success')
|
|
return redirect(url_for('profil.profile'))
|
|
return render_template('edit_profile.html', user=current_user) |