View Javadoc
1   package com.atlassian.refapp.auth.internal;
2   
3   import com.atlassian.seraph.auth.Authenticator;
4   import com.atlassian.seraph.auth.RoleMapper;
5   import com.atlassian.seraph.config.SecurityConfig;
6   import com.atlassian.user.EntityException;
7   import com.atlassian.user.Group;
8   import com.atlassian.user.GroupManager;
9   import com.atlassian.user.User;
10  import com.atlassian.user.search.page.Pager;
11  
12  import javax.servlet.http.HttpServletRequest;
13  import java.security.Principal;
14  import java.util.Collection;
15  import java.util.Collections;
16  import java.util.Iterator;
17  import java.util.LinkedList;
18  import java.util.List;
19  import java.util.Map;
20  
21  
22  public class GroupRoleMapper implements RoleMapper {
23      private final Authenticator authenticator;
24      private final GroupManager groupManager;
25  
26      public GroupRoleMapper(Authenticator authenticator, GroupManager groupManager) {
27          this.authenticator = authenticator;
28          this.groupManager = groupManager;
29          StaticDelegatingAuthenticator.setAuthenticator(authenticator);
30          StaticDelegatingRoleMapper.setRoleMapper(this);
31      }
32  
33      public void init(Map params, SecurityConfig config) {
34      }
35  
36      /**
37       * Assume that roles == groups.
38       */
39      public boolean hasRole(Principal user, HttpServletRequest request, String role) {
40          Collection<String> groups = getGroups(request);
41  
42          if (groups == null && role == null) {
43              return true;
44          } else if (groups == null) {
45              return false;
46          } else {
47              return groups.contains(role);
48          }
49      }
50  
51      public boolean canLogin(Principal user, HttpServletRequest request) {
52          return user != null;
53      }
54  
55      private Collection<String> getGroups(HttpServletRequest request) {
56          User user = (User) authenticator.getUser(request);
57          if (user == null) {
58              return Collections.emptyList();
59          }
60          try {
61              Pager groupPager = groupManager.getGroups(user);
62              List<String> groups = new LinkedList<String>();
63              for (Iterator<Group> i = groupPager.iterator(); i.hasNext(); ) {
64                  groups.add(i.next().getName());
65              }
66              return groups;
67          } catch (EntityException e) {
68              return Collections.emptyList();
69          }
70      }
71  }