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