From 0a89849157b7789f6639023f6f8bbbbd2a4f7999 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Sun, 5 Jun 2022 00:54:09 +0100 Subject: [PATCH] Improve username error messages and duplicate messages --- app/blueprints/packages/packages.py | 6 +++--- app/blueprints/users/account.py | 3 ++- app/blueprints/users/claim.py | 4 ++-- app/logic/packages.py | 4 ++-- app/logic/releases.py | 2 +- app/tests/integ/test_user.py | 2 +- 6 files changed, 11 insertions(+), 10 deletions(-) diff --git a/app/blueprints/packages/packages.py b/app/blueprints/packages/packages.py index 2011abd3..99898f61 100644 --- a/app/blueprints/packages/packages.py +++ b/app/blueprints/packages/packages.py @@ -427,7 +427,7 @@ def remove(package): if "delete" in request.form: if not package.checkPerm(current_user, Permission.DELETE_PACKAGE): - flash(gettext("You don't have permission to do that."), "danger") + flash(gettext("You don't have permission to do that"), "danger") return redirect(package.getURL("packages.view")) package.state = PackageState.DELETED @@ -443,7 +443,7 @@ def remove(package): return redirect(url) elif "unapprove" in request.form: if not package.checkPerm(current_user, Permission.UNAPPROVE_PACKAGE): - flash(gettext("You don't have permission to do that."), "danger") + flash(gettext("You don't have permission to do that"), "danger") return redirect(package.getURL("packages.view")) package.state = PackageState.WIP @@ -472,7 +472,7 @@ class PackageMaintainersForm(FlaskForm): @is_package_page def edit_maintainers(package): if not package.checkPerm(current_user, Permission.EDIT_MAINTAINERS): - flash(gettext("You do not have permission to edit maintainers"), "danger") + flash(gettext("You don't have permission to edit maintainers"), "danger") return redirect(package.getURL("packages.view")) form = PackageMaintainersForm(formdata=request.form) diff --git a/app/blueprints/users/account.py b/app/blueprints/users/account.py index 274340cf..cc060d08 100644 --- a/app/blueprints/users/account.py +++ b/app/blueprints/users/account.py @@ -102,7 +102,8 @@ def logout(): class RegisterForm(FlaskForm): display_name = StringField(lazy_gettext("Display Name"), [Optional(), Length(1, 20)], filters=[nonEmptyOrNone]) username = StringField(lazy_gettext("Username"), [InputRequired(), - Regexp("^[a-zA-Z0-9._-]+$", message=lazy_gettext("Only a-zA-Z0-9._ allowed"))]) + Regexp("^[a-zA-Z0-9._-]+$", message=lazy_gettext( + "Only alphabetic letters (A-Za-z), numbers (0-9), underscores (_), minuses (-), and periods (.) allowed"))]) email = StringField(lazy_gettext("Email"), [InputRequired(), Email()]) password = PasswordField(lazy_gettext("Password"), [InputRequired(), Length(6, 100)]) question = StringField(lazy_gettext("What is the result of the above calculation?"), [InputRequired()]) diff --git a/app/blueprints/users/claim.py b/app/blueprints/users/claim.py index a53b633a..da20cb8f 100644 --- a/app/blueprints/users/claim.py +++ b/app/blueprints/users/claim.py @@ -37,7 +37,7 @@ def claim_forums(): method = request.args.get("method") if not is_username_valid(username): - flash(gettext("Invalid username - must only contain A-Za-z0-9._. Consider contacting an admin"), "danger") + flash(gettext("Invalid username, Only alphabetic letters (A-Za-z), numbers (0-9), underscores (_), minuses (-), and periods (.) allowed. Consider contacting an admin"), "danger") return redirect(url_for("users.claim_forums")) user = User.query.filter_by(forums_username=username).first() @@ -62,7 +62,7 @@ def claim_forums(): username = request.form.get("username") if not is_username_valid(username): - flash(gettext("Invalid username - must only contain A-Za-z0-9._. Consider contacting an admin"), "danger") + flash(gettext("Invalid username, Only alphabetic letters (A-Za-z), numbers (0-9), underscores (_), minuses (-), and periods (.) allowed. 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_forums", username=username, method="github"))) diff --git a/app/logic/packages.py b/app/logic/packages.py index 4a08e4ef..b50ce6f4 100644 --- a/app/logic/packages.py +++ b/app/logic/packages.py @@ -106,11 +106,11 @@ def validate(data: dict): def do_edit_package(user: User, package: Package, was_new: bool, was_web: bool, data: dict, reason: str = None): if not package.checkPerm(user, Permission.EDIT_PACKAGE): - raise LogicError(403, lazy_gettext("You do not have permission to edit this package")) + raise LogicError(403, lazy_gettext("You don't have permission to edit this package")) if "name" in data and package.name != data["name"] and \ not package.checkPerm(user, Permission.CHANGE_NAME): - raise LogicError(403, lazy_gettext("You do not have permission to change the package name")) + raise LogicError(403, lazy_gettext("You don't have permission to change the package name")) for alias, to in ALIASES.items(): if alias in data: diff --git a/app/logic/releases.py b/app/logic/releases.py index f477b22d..f11c1a41 100644 --- a/app/logic/releases.py +++ b/app/logic/releases.py @@ -29,7 +29,7 @@ from app.utils import AuditSeverity, addAuditLog, nonEmptyOrNone def check_can_create_release(user: User, package: Package): if not package.checkPerm(user, Permission.MAKE_RELEASE): - raise LogicError(403, lazy_gettext("You do not have permission to make releases")) + raise LogicError(403, lazy_gettext("You don't have permission to make releases")) five_minutes_ago = datetime.datetime.now() - datetime.timedelta(minutes=5) count = package.releases.filter(PackageRelease.releaseDate > five_minutes_ago).count() diff --git a/app/tests/integ/test_user.py b/app/tests/integ/test_user.py index 14e63b0f..334d0d60 100644 --- a/app/tests/integ/test_user.py +++ b/app/tests/integ/test_user.py @@ -53,7 +53,7 @@ def test_register(client): rv = register(client, "££££!!!", "Test User", "password", "test@example.com", "13") assert b"invalid-feedback" in rv.data - assert b"Only a-zA-Z0-9._ allowed

" in rv.data + assert b"Only alphabetic letters (A-Za-z), numbers (0-9), underscores (_), minuses (-), and periods (.) allowed

" in rv.data def test_register_flow(client):