Skip to content

Commit bbfe630

Browse files
bodom91php-coder
authored andcommitted
/account/activate: prohibit repeated special characters.
Fix #454
1 parent c9dfb75 commit bbfe630

File tree

5 files changed

+39
-7
lines changed

5 files changed

+39
-7
lines changed

src/main/java/ru/mystamps/web/model/ActivateAccountForm.java

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,19 @@ public class ActivateAccountForm implements ActivateAccountDto {
6262
groups = Login2Checks.class
6363
)
6464
})
65-
@Pattern(
66-
regexp = ValidationRules.LOGIN_REGEXP,
67-
message = "{login.invalid}",
68-
groups = Login3Checks.class
69-
)
70-
@UniqueLogin(groups = Login4Checks.class)
65+
@Pattern.List({
66+
@Pattern(
67+
regexp = ValidationRules.LOGIN_REGEXP,
68+
message = "{login.invalid}",
69+
groups = Login3Checks.class
70+
),
71+
@Pattern(
72+
regexp = ValidationRules.LOGIN_REPEATING_CHARS_REGEXP,
73+
message = "{login.repetition_chars}",
74+
groups = Login4Checks.class
75+
)
76+
})
77+
@UniqueLogin(groups = Login5Checks.class)
7178
private String login;
7279

7380
@Size(
@@ -120,7 +127,8 @@ public class ActivateAccountForm implements ActivateAccountDto {
120127
Login1Checks.class,
121128
Login2Checks.class,
122129
Login3Checks.class,
123-
Login4Checks.class
130+
Login4Checks.class,
131+
Login5Checks.class
124132
})
125133
public interface LoginChecks {
126134
}
@@ -137,6 +145,9 @@ public interface Login3Checks {
137145
public interface Login4Checks {
138146
}
139147

148+
public interface Login5Checks {
149+
}
150+
140151
@GroupSequence({
141152
Name1Checks.class,
142153
Name2Checks.class,

src/main/java/ru/mystamps/web/validation/ValidationRules.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public final class ValidationRules {
2424
public static final int LOGIN_MIN_LENGTH = 2;
2525
public static final int LOGIN_MAX_LENGTH = Db.User.LOGIN_LENGTH;
2626
public static final String LOGIN_REGEXP = "[-_\\.a-zA-Z0-9]+";
27+
public static final String LOGIN_REPEATING_CHARS_REGEXP = "(?!.+[-_.]{2,}).+";
2728

2829
public static final int NAME_MAX_LENGTH = Db.User.NAME_LENGTH;
2930
public static final String NAME_REGEXP = "[- \\p{L}]+";

src/main/resources/ru/mystamps/i18n/ValidationMessages.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ country-name-en.invalid = Country name must consist only latin letters, hyphen o
3333
country-name-ru.invalid = Country name must consist only Russian letters, hyphen or spaces
3434

3535
login.invalid = Login must consist only latin letters, digits, dot, hyphen or underscore
36+
login.repetition_chars = Login must not contain repetition of hyphen, dot or underscore
3637

3738
password.mismatch = Password mismatch
3839
password.login.match = Password and login must be different

src/main/resources/ru/mystamps/i18n/ValidationMessages_ru.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ country-name-en.invalid = Название страны может содерж
3333
country-name-ru.invalid = Название страны может содержать только кирилические буквы, дефис или пробел
3434

3535
login.invalid = Логин может состоять только из латинских букв, цифр, точки, дефиса или символа подчёркивания
36+
login.repetition_chars = Логин не должен содержать повторяющиеся символы дефиса, точки или символа подчёркивания
3637

3738
password.mismatch = Пароли не совпадают
3839
password.login.match = Пароль и логин не должны совпадать

src/test/java/ru/mystamps/web/tests/cases/WhenAnonymousUserActivateAccount.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,13 @@ public void loginShouldBeUnique() {
150150
.field("login")
151151
.hasError(tr("ru.mystamps.web.validation.jsr303.UniqueLogin.message"));
152152
}
153+
154+
@Test(groups = "invalid", dependsOnGroups = "std", dataProvider = "invalidLogins")
155+
public void loginShouldNotContainRepetitionSpecialCharacters(String login, Object whatever) {
156+
page.activateAccount(login, null, null, null, null);
157+
158+
assertThat(page).field("login").hasError(tr("login.repetition_chars"));
159+
}
153160

154161
@Test(groups = "misc", dependsOnGroups = "std")
155162
public void loginShouldBeStripedFromLeadingAndTrailingSpaces() {
@@ -305,5 +312,16 @@ public Object[][] getValidNames() {
305312
{"Семён Якушев", null}
306313
};
307314
}
315+
316+
@DataProvider(name = "invalidLogins")
317+
public Object[][] getInvalidLogins() {
318+
return new Object[][] {
319+
{"te__st", null},
320+
{"te--st", null},
321+
{"te..st", null},
322+
{"te_-st", null},
323+
{"te-._st", null}
324+
};
325+
}
308326

309327
}

0 commit comments

Comments
 (0)