Skip to content

Commit 43bf8ce

Browse files
authored
fix: broken user creation when password expire set (#22284) (#22300)
1 parent cb1fb73 commit 43bf8ce

3 files changed

Lines changed: 18 additions & 1 deletion

File tree

dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/DefaultUserService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -613,6 +613,10 @@ public int getActiveUsersCount(Date since) {
613613
@Override
614614
@Transactional(readOnly = true)
615615
public boolean userNonExpired(User user) {
616+
if (user == null) {
617+
return true;
618+
}
619+
616620
int credentialsExpires = systemSettingManager.credentialsExpires();
617621

618622
if (credentialsExpires == 0) {

dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/user/PasswordHistoryValidationRule.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public PasswordValidationResult validate(CredentialsInfo credentials) {
7878
private boolean isRuleApplicable(CredentialsInfo credentials) {
7979
User user = userService.getUserByUsername(credentials.getUsername());
8080

81-
if (!userService.userNonExpired(user)) {
81+
if (user != null && !userService.userNonExpired(user)) {
8282
return true;
8383
}
8484

dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/user/PasswordValidationRuleTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import org.hisp.dhis.setting.SystemSettingManager;
3939
import org.junit.jupiter.api.Assertions;
4040
import org.junit.jupiter.api.BeforeEach;
41+
import org.junit.jupiter.api.DisplayName;
4142
import org.junit.jupiter.api.Test;
4243
import org.junit.jupiter.api.extension.ExtendWith;
4344
import org.mockito.ArgumentCaptor;
@@ -273,4 +274,16 @@ void testPasswordHistoryValidationRule() {
273274
Assertions.assertEquals(23, userArgumentCaptor.getValue().getPreviousPasswords().size());
274275
assertFalse(userArgumentCaptor.getValue().getPreviousPasswords().contains(STRONG_PASSWORD));
275276
}
277+
278+
@Test
279+
@DisplayName("PasswordHistoryValidationRule with new user and credentials expires")
280+
void testPasswordHistoryValidationRuleWithNewUserAndCredentialsExpires() {
281+
// The user does not exist yet, so getUserByUsername returns null
282+
CredentialsInfo credentialsInfo = new CredentialsInfo(USERNAME, STRONG_PASSWORD, EMAIL, true);
283+
284+
// This should not throw NullPointerException
285+
PasswordValidationResult result = historyValidationRule.validate(credentialsInfo);
286+
287+
assertThat(result.isValid(), is(true));
288+
}
276289
}

0 commit comments

Comments
 (0)