1 package com.atlassian.seraph.util;
2
3 import com.atlassian.seraph.config.SecurityConfig;
4 import com.atlassian.seraph.config.SecurityConfigFactory;
5 import com.atlassian.seraph.filter.SecurityFilter;
6 import com.atlassian.seraph.RequestParameterConstants;
7
8 import javax.servlet.http.HttpServletRequest;
9 import java.net.URLEncoder;
10
11
12
13
14 public class RedirectUtils
15 {
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 public static String getLoginUrl(HttpServletRequest request)
38 {
39 SecurityConfig securityConfig = SecurityConfigFactory.getInstance();
40 String loginURL = securityConfig.getLoginURL();
41 return getLoginURL(loginURL, request);
42 }
43
44
45
46
47
48
49
50
51
52 public static String getLinkLoginURL(HttpServletRequest request)
53 {
54 SecurityConfig securityConfig = SecurityConfigFactory.getInstance();
55 String loginURL = securityConfig.getLinkLoginURL();
56 return getLoginURL(loginURL, request);
57 }
58
59
60 private static String getLoginURL(String loginURL, HttpServletRequest request)
61 {
62 boolean externalLoginLink = isExternalLoginLink(loginURL);
63 loginURL = replaceOriginalURL(loginURL, request, externalLoginLink);
64 if (externalLoginLink)
65 {
66 return loginURL;
67 }
68 else
69 {
70 return request.getContextPath() + loginURL;
71 }
72 }
73
74 private static boolean isExternalLoginLink(String loginURL)
75 {
76 return (loginURL.indexOf("://") != -1);
77 }
78
79
80
81
82 private static String replaceOriginalURL(final String loginURL, final HttpServletRequest request, boolean external)
83 {
84 final int i = loginURL.indexOf("${originalurl}");
85 if (i != -1)
86 {
87 final String originalURL = getOriginalURL(request, external);
88 String osDest = request.getParameter(RequestParameterConstants.OS_DESTINATION);
89 return loginURL.substring(0, i) + ((osDest != null) ? URLEncoder.encode(osDest) : URLEncoder.encode(originalURL) )+ loginURL.substring(i + "${originalurl}".length());
90 }
91 else
92 return loginURL;
93 }
94
95
96
97
98 private static String getOriginalURL(HttpServletRequest request, boolean external)
99 {
100 String originalURL = (String) request.getAttribute(SecurityFilter.ORIGINAL_URL);
101 if (originalURL != null)
102 {
103 if (external)
104 return getServerNameAndPath(request) + originalURL;
105 else
106 return originalURL;
107 }
108
109 if (external)
110 return request.getRequestURL() + (request.getQueryString() == null ? "" : "?" + request.getQueryString());
111 else
112 return request.getServletPath() +
113 (request.getPathInfo() == null ? "" : request.getPathInfo()) +
114 (request.getQueryString() == null ? "" : "?" + request.getQueryString());
115
116 }
117
118
119
120
121 public static String getServerNameAndPath(HttpServletRequest request)
122 {
123 StringBuffer buf = new StringBuffer();
124 buf.append(request.getScheme()).
125 append("://").
126 append(request.getServerName());
127 if (! (("http".equals(request.getScheme()) && request.getServerPort() == 80) || ("https".equals(request.getScheme()) && request.getServerPort() == 443)))
128 {
129 buf.append(":").append(request.getServerPort());
130 }
131 buf.append(request.getContextPath());
132 return buf.toString();
133 }
134
135
136
137
138 public static boolean isBasicAuthentication(HttpServletRequest request, String basicAuth)
139 {
140 String queryString = request.getQueryString();
141 if (queryString == null || queryString.equals(""))
142 return false;
143
144 String authString = basicAuth + "=" + SecurityConfig.BASIC_AUTH;
145 if (queryString.indexOf(authString) != -1)
146 return true;
147 else
148 return false;
149 }
150
151
152
153
154
155
156
157
158
159
160
161
162 public static String appendPathToContext(String context, String path)
163 {
164 if (context == null) context = "";
165 if (path == null) return context;
166
167 StringBuffer result = new StringBuffer(context);
168 if (!context.endsWith("/"))
169 result.append("/");
170
171 String pathToAppend = path;
172 if (pathToAppend.startsWith("/"))
173 pathToAppend = pathToAppend.substring(1);
174
175 result.append(pathToAppend);
176 return result.toString();
177 }
178 }