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
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 }