1   package com.atlassian.plugins.rest.module.security;
2   
3   import com.atlassian.plugins.rest.common.security.AuthenticationContext;
4   import com.atlassian.plugins.rest.module.servlet.ServletUtils;
5   import com.atlassian.sal.api.user.UserManager;
6   import com.google.common.base.Preconditions;
7   
8   import java.security.Principal;
9   
10  /**
11   * SAL implementation of the {@link AuthenticationContext}
12   * @since 1.0
13   */
14  public class SalAuthenticationContext implements AuthenticationContext
15  {
16      private final UserManager userManager;
17  
18      public SalAuthenticationContext(final UserManager userManager)
19      {
20          this.userManager = Preconditions.checkNotNull(userManager);
21      }
22  
23      public Principal getPrincipal()
24      {
25          final String userName = getUserName();
26          return userName != null ? new SalPrincipal(userName) : null;
27      }
28  
29      public boolean isAuthenticated()
30      {
31          return getUserName() != null;
32      }
33  
34      private String getUserName()
35      {
36          return userManager.getRemoteUsername(ServletUtils.getHttpServletRequest());
37      }
38  
39      private static class SalPrincipal implements Principal
40      {
41          private final String userName;
42  
43          SalPrincipal(String userName)
44          {
45              this.userName = Preconditions.checkNotNull(userName);
46          }
47  
48          public String getName()
49          {
50              return userName;
51          }
52  
53          @Override
54          public int hashCode()
55          {
56              return userName.hashCode();
57          }
58  
59          @Override
60          public boolean equals(Object obj)
61          {
62              return obj != null && (obj instanceof SalPrincipal) && ((SalPrincipal) obj).userName.equals(userName);
63          }
64  
65          @Override
66          public String toString()
67          {
68              return userName;
69          }
70      }
71  }