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