mirror of
https://github.com/minetest/contentdb.git
synced 2025-01-08 22:17:34 +01:00
Add post_login function, go to notifications page
This commit is contained in:
parent
4523849641
commit
4c4bddeed6
@ -69,19 +69,17 @@ def callback(oauth_token):
|
|||||||
if userByGithub is None:
|
if userByGithub is None:
|
||||||
flash("Unable to find an account for that Github user", "danger")
|
flash("Unable to find an account for that Github user", "danger")
|
||||||
return redirect(url_for("users.claim_forums"))
|
return redirect(url_for("users.claim_forums"))
|
||||||
elif login_user_set_active(userByGithub, remember=True):
|
|
||||||
addAuditLog(AuditSeverity.USER, userByGithub, "Logged in using GitHub OAuth",
|
|
||||||
url_for("users.profile", username=userByGithub.username))
|
|
||||||
db.session.commit()
|
|
||||||
|
|
||||||
if not current_user.password:
|
ret = login_user_set_active(userByGithub, remember=True)
|
||||||
return redirect(next_url or url_for("users.set_password", optional=True))
|
if ret is None:
|
||||||
else:
|
|
||||||
return redirect(next_url or url_for("homepage.home"))
|
|
||||||
else:
|
|
||||||
flash("Authorization failed [err=gh-login-failed]", "danger")
|
flash("Authorization failed [err=gh-login-failed]", "danger")
|
||||||
return redirect(url_for("users.login"))
|
return redirect(url_for("users.login"))
|
||||||
|
|
||||||
|
addAuditLog(AuditSeverity.USER, userByGithub, "Logged in using GitHub OAuth",
|
||||||
|
url_for("users.profile", username=userByGithub.username))
|
||||||
|
db.session.commit()
|
||||||
|
return ret
|
||||||
|
|
||||||
|
|
||||||
@bp.route("/github/webhook/", methods=["POST"])
|
@bp.route("/github/webhook/", methods=["POST"])
|
||||||
@csrf.exempt
|
@csrf.exempt
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
from flask import *
|
from flask import *
|
||||||
from flask_login import current_user, login_required, logout_user, login_user
|
from flask_login import current_user, login_required, logout_user, login_user
|
||||||
from flask_wtf import FlaskForm
|
from flask_wtf import FlaskForm
|
||||||
@ -24,7 +25,7 @@ from wtforms.validators import *
|
|||||||
|
|
||||||
from app.models import *
|
from app.models import *
|
||||||
from app.tasks.emails import send_verify_email, send_anon_email, send_unsubscribe_verify, send_user_email
|
from app.tasks.emails import send_verify_email, send_anon_email, send_unsubscribe_verify, send_user_email
|
||||||
from app.utils import randomString, make_flask_login_password, is_safe_url, check_password_hash, addAuditLog, nonEmptyOrNone
|
from app.utils import randomString, make_flask_login_password, is_safe_url, check_password_hash, addAuditLog, nonEmptyOrNone, post_login
|
||||||
from passlib.pwd import genphrase
|
from passlib.pwd import genphrase
|
||||||
|
|
||||||
from . import bp
|
from . import bp
|
||||||
@ -61,14 +62,11 @@ def handle_login(form):
|
|||||||
url_for("users.profile", username=user.username))
|
url_for("users.profile", username=user.username))
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
login_user(user, remember=form.remember_me.data)
|
if not login_user(user, remember=form.remember_me.data):
|
||||||
flash("Logged in successfully.", "success")
|
flash("Login failed", "danger")
|
||||||
|
return
|
||||||
|
|
||||||
next = request.args.get("next")
|
return post_login(user, request.args.get("next"))
|
||||||
if next and not is_safe_url(next):
|
|
||||||
abort(400)
|
|
||||||
|
|
||||||
return redirect(next or url_for("homepage.home"))
|
|
||||||
|
|
||||||
|
|
||||||
@bp.route("/user/login/", methods=["GET", "POST"])
|
@bp.route("/user/login/", methods=["GET", "POST"])
|
||||||
|
@ -105,12 +105,13 @@ def claim_forums():
|
|||||||
db.session.add(user)
|
db.session.add(user)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
if login_user_set_active(user, remember=True):
|
ret = login_user_set_active(user, remember=True)
|
||||||
return redirect(url_for("users.set_password"))
|
if ret is None:
|
||||||
else:
|
|
||||||
flash("Unable to login as user", "danger")
|
flash("Unable to login as user", "danger")
|
||||||
return redirect(url_for("users.claim_forums", username=username))
|
return redirect(url_for("users.claim_forums", username=username))
|
||||||
|
|
||||||
|
return ret
|
||||||
|
|
||||||
else:
|
else:
|
||||||
flash("Could not find the key in your signature!", "danger")
|
flash("Could not find the key in your signature!", "danger")
|
||||||
return redirect(url_for("users.claim_forums", username=username))
|
return redirect(url_for("users.claim_forums", username=username))
|
||||||
|
@ -19,9 +19,10 @@ from functools import wraps
|
|||||||
|
|
||||||
from flask_login import login_user, current_user
|
from flask_login import login_user, current_user
|
||||||
from passlib.handlers.bcrypt import bcrypt
|
from passlib.handlers.bcrypt import bcrypt
|
||||||
from flask import redirect, url_for, abort
|
from flask import redirect, url_for, abort, flash
|
||||||
|
|
||||||
from app.models import User, UserRank, UserNotificationPreferences, db
|
from app.models import User, UserRank, UserNotificationPreferences, db
|
||||||
|
from app.utils import is_safe_url
|
||||||
|
|
||||||
|
|
||||||
def check_password_hash(stored, given):
|
def check_password_hash(stored, given):
|
||||||
@ -35,14 +36,33 @@ def make_flask_login_password(plaintext):
|
|||||||
return bcrypt.hash(plaintext.encode("UTF-8"))
|
return bcrypt.hash(plaintext.encode("UTF-8"))
|
||||||
|
|
||||||
|
|
||||||
def login_user_set_active(user: User, *args, **kwargs):
|
def post_login(user: User, next_url):
|
||||||
|
if next_url and is_safe_url(next_url):
|
||||||
|
return redirect(next_url)
|
||||||
|
|
||||||
|
if not current_user.password:
|
||||||
|
return redirect(url_for("users.set_password", optional=True))
|
||||||
|
|
||||||
|
notif_count = len(user.notifications)
|
||||||
|
if notif_count > 0:
|
||||||
|
if notif_count >= 10:
|
||||||
|
flash("You have a lot of notifications, you should either read or clear them", "info")
|
||||||
|
return redirect(url_for("notifications.list_all"))
|
||||||
|
|
||||||
|
return redirect(url_for("homepage.home"))
|
||||||
|
|
||||||
|
|
||||||
|
def login_user_set_active(user: User, next_url: str = None, *args, **kwargs):
|
||||||
if user.rank == UserRank.NOT_JOINED and user.email is None:
|
if user.rank == UserRank.NOT_JOINED and user.email is None:
|
||||||
user.rank = UserRank.MEMBER
|
user.rank = UserRank.MEMBER
|
||||||
user.notification_preferences = UserNotificationPreferences(user)
|
user.notification_preferences = UserNotificationPreferences(user)
|
||||||
user.is_active = True
|
user.is_active = True
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
return login_user(user, *args, **kwargs)
|
if login_user(user, *args, **kwargs):
|
||||||
|
return post_login(user, next_url)
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def rank_required(rank):
|
def rank_required(rank):
|
||||||
|
Loading…
Reference in New Issue
Block a user