diff --git a/src/main/java/io/jenkins/plugins/folderauth/roles/AbstractRole.java b/src/main/java/io/jenkins/plugins/folderauth/roles/AbstractRole.java index 0e407c7..bb07a64 100644 --- a/src/main/java/io/jenkins/plugins/folderauth/roles/AbstractRole.java +++ b/src/main/java/io/jenkins/plugins/folderauth/roles/AbstractRole.java @@ -1,8 +1,13 @@ package io.jenkins.plugins.folderauth.roles; +import hudson.model.User; +import hudson.security.SecurityRealm; import io.jenkins.plugins.folderauth.misc.PermissionWrapper; +import jenkins.model.Jenkins; +import org.acegisecurity.userdetails.UsernameNotFoundException; import org.kohsuke.accmod.Restricted; import org.kohsuke.accmod.restrictions.NoExternalUse; +import org.springframework.dao.DataAccessException; import javax.annotation.Nonnull; import java.util.Collections; @@ -113,7 +118,21 @@ public Set getSids() { @Nonnull @SuppressWarnings("unused") // used by index.jelly public String getSidsCommaSeparated() { - String string = new TreeSet<>(sids).toString(); - return string.substring(1, string.length() - 1); + Jenkins jenkinsInstance = Jenkins.get(); + SecurityRealm sr = jenkinsInstance.getSecurityRealm(); + StringBuilder sb = new StringBuilder(); + for (String sid: new TreeSet<>(sids)) { + try { + sr.loadUserByUsername(sid); + User u = User.getById(sid, false); + String fullName = u.getFullName(); + sb.append(sid).append("(").append(fullName).append("), "); + } catch (UsernameNotFoundException | DataAccessException | NullPointerException e) { + // on any exception just add the sid + // this could happen either because SID lookup error or no FullName set + sb.append(sid).append(", "); + } + } + return sb.length()==0?"":sb.substring(0,sb.length()-2); } } diff --git a/src/test/java/io/jenkins/plugins/folderauth/FolderBasedAuthorizationStrategyTest.java b/src/test/java/io/jenkins/plugins/folderauth/FolderBasedAuthorizationStrategyTest.java index 88aecc1..b214d98 100644 --- a/src/test/java/io/jenkins/plugins/folderauth/FolderBasedAuthorizationStrategyTest.java +++ b/src/test/java/io/jenkins/plugins/folderauth/FolderBasedAuthorizationStrategyTest.java @@ -7,6 +7,7 @@ import hudson.model.User; import hudson.security.ACL; import hudson.security.ACLContext; +import hudson.security.AuthorizationStrategy; import hudson.security.Permission; import hudson.security.PermissionGroup; import io.jenkins.plugins.folderauth.roles.FolderRole; @@ -21,6 +22,7 @@ import java.util.HashSet; import static io.jenkins.plugins.folderauth.misc.PermissionWrapper.wrapPermissions; +import static junit.framework.TestCase.assertEquals; import static junit.framework.TestCase.assertFalse; import static junit.framework.TestCase.assertTrue; @@ -65,6 +67,7 @@ public void setUp() throws Exception { ImmutableSet.of("root"))); FolderAuthorizationStrategyAPI.assignSidToFolderRole("user1", "folderRole1"); FolderAuthorizationStrategyAPI.assignSidToFolderRole("user2", "folderRole1"); + FolderAuthorizationStrategyAPI.assignSidToFolderRole("anonymous", "folderRole1"); FolderAuthorizationStrategyAPI.addFolderRole(new FolderRole("folderRole2", wrapPermissions(Item.CONFIGURE, Item.DELETE), ImmutableSet.of("root/child1"))); @@ -93,6 +96,7 @@ public void setUp() throws Exception { admin = User.getById("admin", true); user1 = User.getById("user1", true); user2 = User.getById("user2", true); + user2.setFullName("Test User2"); } @Test @@ -127,4 +131,19 @@ public void permissionTest() { assertFalse(job1.hasPermission(Item.CONFIGURE)); } } + + @Test + public void SIDToFullNameLookupTest() { + Jenkins jenkins = jenkinsRule.jenkins; + + AuthorizationStrategy strategy = jenkins.getAuthorizationStrategy(); + if (strategy instanceof FolderBasedAuthorizationStrategy) { + FolderBasedAuthorizationStrategy actualStrategy = (FolderBasedAuthorizationStrategy) strategy; + for (FolderRole role: actualStrategy.getFolderRoles()) { + if (role.getName().equals("folderRole1")) { + assertEquals("anonymous, user1(user1), user2(Test User2)",role.getSidsCommaSeparated()); + } + } + } + } }