Improve claim user UX

This commit is contained in:
rubenwardy
2020-12-22 10:58:43 +00:00
parent d7d9131de8
commit 60362abef1
8 changed files with 156 additions and 148 deletions

View File

@@ -27,8 +27,14 @@ def check_username(username):
return username is not None and len(username) >= 2 and re.match("^[A-Za-z0-9._-]*$", username)
@bp.route("/user/claim/", methods=["GET", "POST"])
def claim():
return render_template("users/claim.html")
@bp.route("/user/claim-forums/", methods=["GET", "POST"])
def claim_forums():
username = request.args.get("username")
if username is None:
username = ""
@@ -37,26 +43,23 @@ def claim():
if not check_username(username):
flash("Invalid username - must only contain A-Za-z0-9._. Consider contacting an admin", "danger")
return redirect(url_for("users.claim"))
return redirect(url_for("users.claim_forums"))
user = User.query.filter_by(forums_username=username).first()
if user and user.rank.atLeast(UserRank.NEW_MEMBER):
flash("User has already been claimed", "danger")
return redirect(url_for("users.claim"))
return redirect(url_for("users.claim_forums"))
elif method == "github":
if user is None or user.github_username is None:
flash("Unable to get Github username for user", "danger")
return redirect(url_for("users.claim", username=username))
flash("Unable to get GitHub username for user", "danger")
return redirect(url_for("users.claim_forums", username=username))
else:
return redirect(url_for("github.start"))
elif user is None and request.method == "POST":
flash("Unable to find user", "danger")
return redirect(url_for("users.claim"))
if "forum_token" in session:
token = session["forum_token"]
else:
token = randomString(32)
token = randomString(12)
session["forum_token"] = token
if request.method == "POST":
@@ -67,12 +70,12 @@ def claim():
flash("Invalid username - must only contain A-Za-z0-9._. Consider contacting an admin", "danger")
elif ctype == "github":
task = checkForumAccount.delay(username)
return redirect(url_for("tasks.check", id=task.id, r=url_for("users.claim", username=username, method="github")))
return redirect(url_for("tasks.check", id=task.id, r=url_for("users.claim_forums", username=username, method="github")))
elif ctype == "forum":
user = User.query.filter_by(forums_username=username).first()
if user is not None and user.rank.atLeast(UserRank.NEW_MEMBER):
flash("That user has already been claimed!", "danger")
return redirect(url_for("users.claim"))
return redirect(url_for("users.claim_forums"))
# Get signature
sig = None
@@ -86,11 +89,11 @@ def claim():
message = str(e)
flash("Error whilst attempting to access forums: " + message, "danger")
return redirect(url_for("users.claim", username=username))
return redirect(url_for("users.claim_forums", username=username))
if profile is None:
flash("Unable to get forum signature - does the user exist?", "danger")
return redirect(url_for("users.claim", username=username))
return redirect(url_for("users.claim_forums", username=username))
# Look for key
if sig and token in sig:
@@ -106,12 +109,12 @@ def claim():
return redirect(url_for("users.set_password"))
else:
flash("Unable to login as user", "danger")
return redirect(url_for("users.claim", username=username))
return redirect(url_for("users.claim_forums", username=username))
else:
flash("Could not find the key in your signature!", "danger")
return redirect(url_for("users.claim", username=username))
return redirect(url_for("users.claim_forums", username=username))
else:
flash("Unknown claim type", "danger")
return render_template("users/claim.html", username=username, key="cdb_" + token)
return render_template("users/claim_forums.html", username=username, key="cdb_" + token)