View Javadoc

1   package com.atlassian.sal.core.auth;
2   
3   import com.atlassian.sal.api.ApplicationProperties;
4   import com.atlassian.sal.api.UrlMode;
5   import com.atlassian.sal.api.auth.LoginUriProvider;
6   import com.atlassian.sal.api.page.PageCapabilities;
7   import com.atlassian.sal.api.page.PageCapability;
8   import com.atlassian.sal.api.user.UserRole;
9   import com.atlassian.seraph.config.SecurityConfigFactory;
10  
11  import java.io.UnsupportedEncodingException;
12  import java.net.URI;
13  import java.net.URISyntaxException;
14  import java.net.URLEncoder;
15  import java.util.EnumSet;
16  
17  /**
18   * @since 2.0.2
19   */
20  public class SeraphLoginUriProvider implements LoginUriProvider
21  {
22      private final ApplicationProperties applicationProperties;
23  
24      public SeraphLoginUriProvider(ApplicationProperties applicationProperties)
25      {
26          this.applicationProperties = applicationProperties;
27      }
28  
29      public URI getLoginUri(final URI returnUri)
30      {
31          return getLoginUri(returnUri, PageCapabilities.empty());
32      }
33  
34      @Override
35      public URI getLoginUri(final URI returnUri, final EnumSet<PageCapability> pageCaps)
36      {
37          return getLoginUriForRole(returnUri, UserRole.USER, pageCaps);
38      }
39  
40      @Override
41      public URI getLoginUriForRole(final URI returnUri, final UserRole role)
42      {
43          return getLoginUriForRole(returnUri, role, PageCapabilities.empty());
44      }
45  
46      @Override
47      public URI getLoginUriForRole(final URI returnUri, final UserRole role, final EnumSet<PageCapability> pageCaps)
48      {
49          final String loginURL = SecurityConfigFactory.getInstance().getLoginURL(true, true);
50          try
51          {
52              final String newUrl = loginURL
53                      .replace("${originalurl}", URLEncoder.encode(returnUri.toString(), "UTF-8"))
54                      .replace("${userRole}", role.toString())
55                      .replace("${pageCaps}", PageCapabilities.toString(pageCaps));
56              return new URI(applicationProperties.getBaseUrl(UrlMode.AUTO) + newUrl);
57          }
58          catch (final URISyntaxException e)
59          {
60              throw new RuntimeException("Error getting login uri. LoginUrl = " + loginURL + ", ReturnUri = " + returnUri, e);
61          }
62          catch (final UnsupportedEncodingException e)
63          {
64              throw new RuntimeException("Error getting login uri. LoginUrl = " + loginURL + ", ReturnUri = " + returnUri, e);
65          }
66      }
67  }