This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/causeway.git


The following commit(s) were added to refs/heads/master by this push:
     new 017e12daeb CAUSEWAY-3404: Change logic in 
PrincipalForApplicationUser#isLocked to consider th null case also as locked
017e12daeb is described below

commit 017e12daeb0def3cfd20fa3703ddcebbe0bee3de
Author: Andi Huber <[email protected]>
AuthorDate: Thu May 11 19:22:49 2023 +0200

    CAUSEWAY-3404: Change logic in PrincipalForApplicationUser#isLocked to
    consider th null case also as locked
---
 .../user/dom/ApplicationUserRepositoryAbstract.java    |  4 ++--
 .../secman/applib/user/dom/ApplicationUserStatus.java  | 18 ++++++++++++++++--
 .../applib/user/dom/mixins/ApplicationUser_lock.java   |  4 +++-
 .../applib/user/dom/mixins/ApplicationUser_unlock.java |  4 +++-
 .../shiro/realm/CausewayModuleExtSecmanShiroRealm.java |  3 ++-
 .../shiro/realm/PrincipalForApplicationUser.java       |  2 +-
 6 files changed, 27 insertions(+), 8 deletions(-)

diff --git 
a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/ApplicationUserRepositoryAbstract.java
 
b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/ApplicationUserRepositoryAbstract.java
index a3cb4d3592..d653a7c38a 100644
--- 
a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/ApplicationUserRepositoryAbstract.java
+++ 
b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/ApplicationUserRepositoryAbstract.java
@@ -187,7 +187,7 @@ implements ApplicationUserRepository {
 
     @Override
     public void enable(final ApplicationUser user) {
-        if(user.getStatus() != ApplicationUserStatus.UNLOCKED) {
+        if(ApplicationUserStatus.canUnlock(user.getStatus())) {
              factoryService.mixin(ApplicationUser_unlock.class, user)
              .act();
         }
@@ -195,7 +195,7 @@ implements ApplicationUserRepository {
 
     @Override
     public void disable(final ApplicationUser user) {
-        if(user.getStatus() != ApplicationUserStatus.LOCKED) {
+        if(ApplicationUserStatus.canLock(user.getStatus())) {
             factoryService.mixin(ApplicationUser_lock.class, user)
             .act();
         }
diff --git 
a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/ApplicationUserStatus.java
 
b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/ApplicationUserStatus.java
index 0740035027..ab7eba0de4 100644
--- 
a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/ApplicationUserStatus.java
+++ 
b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/ApplicationUserStatus.java
@@ -40,8 +40,22 @@ public enum ApplicationUserStatus {
         return _Strings.capitalize(name());
     }
 
-    public static boolean isUnlocked(final @Nullable ApplicationUserStatus 
applicationUserStatus) {
-        return applicationUserStatus == UNLOCKED;
+    public static boolean isUnlocked(final @Nullable ApplicationUserStatus 
status) {
+        return status == UNLOCKED;
+    }
+
+    public static boolean isLockedOrUnspecified(final @Nullable 
ApplicationUserStatus status) {
+        return !isUnlocked(status);
+    }
+
+    /** Whether can transition to state LOCKED. That is, YES if not already at 
that state. */
+    public static boolean canLock(final @Nullable ApplicationUserStatus 
status) {
+        return status != ApplicationUserStatus.LOCKED;
+    }
+
+    /** Whether can transition to state UNLOCKED. That is, YES if not already 
at that state. */
+    public static boolean canUnlock(final @Nullable ApplicationUserStatus 
status) {
+        return status != ApplicationUserStatus.UNLOCKED;
     }
 
 }
diff --git 
a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/mixins/ApplicationUser_lock.java
 
b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/mixins/ApplicationUser_lock.java
index a643e729d1..00df0c71bc 100644
--- 
a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/mixins/ApplicationUser_lock.java
+++ 
b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/mixins/ApplicationUser_lock.java
@@ -66,7 +66,9 @@ public class ApplicationUser_lock {
         if(applicationUserRepository.isAdminUser(target)) {
             return String.format("Cannot lock the '%s' user.", 
config.getExtensions().getSecman().getSeed().getAdmin().getUserName());
         }
-        return target.getStatus() == ApplicationUserStatus.LOCKED ? "Status is 
already set to LOCKED": null;
+        return ApplicationUserStatus.canLock(target.getStatus())
+                ? "Status is already set to LOCKED"
+                : null;
     }
 
 }
diff --git 
a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/mixins/ApplicationUser_unlock.java
 
b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/mixins/ApplicationUser_unlock.java
index aeeabe7908..73c43386b6 100644
--- 
a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/mixins/ApplicationUser_unlock.java
+++ 
b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/mixins/ApplicationUser_unlock.java
@@ -56,7 +56,9 @@ public class ApplicationUser_unlock {
     }
 
     @MemberSupport public String disableAct() {
-        return target.getStatus() == ApplicationUserStatus.UNLOCKED ? "Status 
is already set to UNLOCKED": null;
+        return ApplicationUserStatus.canUnlock(target.getStatus())
+                ? "Status is already set to UNLOCKED"
+                : null;
     }
 
 }
diff --git 
a/extensions/security/secman/delegated-shiro/src/main/java/org/apache/causeway/extensions/secman/delegated/shiro/realm/CausewayModuleExtSecmanShiroRealm.java
 
b/extensions/security/secman/delegated-shiro/src/main/java/org/apache/causeway/extensions/secman/delegated/shiro/realm/CausewayModuleExtSecmanShiroRealm.java
index 2eaef92550..7157ef45ef 100644
--- 
a/extensions/security/secman/delegated-shiro/src/main/java/org/apache/causeway/extensions/secman/delegated/shiro/realm/CausewayModuleExtSecmanShiroRealm.java
+++ 
b/extensions/security/secman/delegated-shiro/src/main/java/org/apache/causeway/extensions/secman/delegated/shiro/realm/CausewayModuleExtSecmanShiroRealm.java
@@ -128,7 +128,8 @@ public class CausewayModuleExtSecmanShiroRealm extends 
AuthorizingRealm {
             if(isAutoUnlockIfDelegatedAndAuthenticated) {
                 principal = newPrincipal;
             } else {
-                _Assert.assertTrue(newPrincipal.isLocked(), "As configured in 
" + SECMAN_UNLOCK_DELEGATED_USERS + ", auto-created user accounts are initially 
locked!");
+                _Assert.assertTrue(newPrincipal.isLocked(),
+                        ()->"As configured in " + 
SECMAN_UNLOCK_DELEGATED_USERS + ", auto-created user accounts are initially 
locked!");
                 throw disabledAccountException(username); // default behavior 
after user auto-creation
             }
         }
diff --git 
a/extensions/security/secman/delegated-shiro/src/main/java/org/apache/causeway/extensions/secman/delegated/shiro/realm/PrincipalForApplicationUser.java
 
b/extensions/security/secman/delegated-shiro/src/main/java/org/apache/causeway/extensions/secman/delegated/shiro/realm/PrincipalForApplicationUser.java
index 38196e132e..cd9c47a273 100644
--- 
a/extensions/security/secman/delegated-shiro/src/main/java/org/apache/causeway/extensions/secman/delegated/shiro/realm/PrincipalForApplicationUser.java
+++ 
b/extensions/security/secman/delegated-shiro/src/main/java/org/apache/causeway/extensions/secman/delegated/shiro/realm/PrincipalForApplicationUser.java
@@ -89,7 +89,7 @@ class PrincipalForApplicationUser implements 
AuthorizationInfo {
     @Getter(value = AccessLevel.PACKAGE) private final 
ApplicationPermissionValueSet permissionSet;
 
     public boolean isLocked() {
-        return getStatus() == ApplicationUserStatus.LOCKED;
+        return ApplicationUserStatus.isLockedOrUnspecified(getStatus());
     }
 
     @Override

Reply via email to