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      private final ApplicationProperties applicationProperties;
22  
23      public SeraphLoginUriProvider(ApplicationProperties applicationProperties) {
24          this.applicationProperties = applicationProperties;
25      }
26  
27      public URI getLoginUri(final URI returnUri) {
28          return getLoginUri(returnUri, PageCapabilities.empty());
29      }
30  
31      @Override
32      public URI getLoginUri(final URI returnUri, final EnumSet<PageCapability> pageCaps) {
33          return getLoginUriForRole(returnUri, UserRole.USER, pageCaps);
34      }
35  
36      @Override
37      public URI getLoginUriForRole(final URI returnUri, final UserRole role) {
38          return getLoginUriForRole(returnUri, role, PageCapabilities.empty());
39      }
40  
41      @Override
42      public URI getLoginUriForRole(final URI returnUri, final UserRole role, final EnumSet<PageCapability> pageCaps) {
43          final String loginURL = SecurityConfigFactory.getInstance().getLoginURL(true, true);
44          try {
45              final String newUrl = loginURL
46                      .replace("${originalurl}", URLEncoder.encode(returnUri.toString(), "UTF-8"))
47                      .replace("${userRole}", role.toString())
48                      .replace("${pageCaps}", PageCapabilities.toString(pageCaps));
49              return new URI(applicationProperties.getBaseUrl(UrlMode.AUTO) + newUrl);
50          } catch (final URISyntaxException e) {
51              throw new RuntimeException("Error getting login uri. LoginUrl = " + loginURL + ", ReturnUri = " + returnUri, e);
52          } catch (final UnsupportedEncodingException e) {
53              throw new RuntimeException("Error getting login uri. LoginUrl = " + loginURL + ", ReturnUri = " + returnUri, e);
54          }
55      }
56  }