Skip to content

Commit 56e3d1e

Browse files
author
Anders Breid
authored
Enable multi user logged in to multiple back ends in multiple tabs (#183)
* Back gui sends back-end-name as prameter to bridge * Enable multi user logged in to multiple back ends in multiple tabs * A user may browse EI front end gui same or different back end without interference from other tab. * A user logging in and or out from a back end will be logged in or out on all tabs for specified back end. * Selected back end is defined for current tab. * a new parameter has been enabled in bridge "backendname" that selects a back end instance based on its name in the back end instance list.
1 parent 09cab83 commit 56e3d1e

17 files changed

+408
-557
lines changed

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@
232232
</goals>
233233
<configuration>
234234
<sources>
235+
<source>src/test/resources</source>
235236
<source>src/functionaltest/java</source>
236237
<source>src/functionaltest/resources</source>
237238
<source>src/integrationtest/java</source>

src/functionaltest/java/com/ericsson/ei/frontend/TestRulesFunctionality.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public void testJourneyToFindAggregatedObjectButton() throws Exception {
5252
int portServer = mockServer.getLocalPort();
5353
backEndInstancesUtils.setDefaultBackEndInstanceToNull();
5454
backEndInstancesUtils.setDefaultBackEndInstance("new_instance_default", "localhost", portServer, "", true);
55-
JavascriptExecutor js = (JavascriptExecutor) driver;
55+
JavascriptExecutor js = driver;
5656

5757
// Open indexpage and verify that it is opened
5858
IndexPage indexPageObject = new IndexPage(null, driver, baseUrl);
@@ -137,7 +137,6 @@ public static void setUpMocks() throws IOException {
137137
@AfterClass
138138
public static void tearDownMocks() throws IOException {
139139
mockClient.stop();
140-
mockServer.stop();
141140
}
142141

143142
}

src/main/java/com/ericsson/ei/frontend/utils/BackEndInformationControllerUtils.java

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package com.ericsson.ei.frontend.utils;
1818

1919
import java.net.URI;
20-
import java.util.NoSuchElementException;
2120
import java.util.stream.Collectors;
2221

2322
import javax.servlet.http.HttpServletRequest;
@@ -32,7 +31,6 @@
3231
import org.springframework.stereotype.Component;
3332

3433
import com.google.gson.JsonArray;
35-
import com.google.gson.JsonElement;
3634
import com.google.gson.JsonObject;
3735
import com.google.gson.JsonParser;
3836

@@ -54,13 +52,7 @@ public class BackEndInformationControllerUtils {
5452
*/
5553
public ResponseEntity<String> handleRequestForInstances(HttpServletRequest request) {
5654
try {
57-
String activeInstance = null;
58-
if (request.getSession().getAttribute("backEndInstanceName") != null) {
59-
activeInstance = request.getSession().getAttribute("backEndInstanceName").toString();
60-
}
61-
6255
JsonArray allAvailableInstances = backEndInstancesUtils.getBackEndsAsJsonArray();
63-
allAvailableInstances = setActiveInstance(allAvailableInstances, activeInstance);
6456

6557
return new ResponseEntity<>(
6658
allAvailableInstances.toString(),
@@ -206,21 +198,4 @@ private HttpHeaders getHeaders() {
206198
return httpHeaders;
207199
}
208200

209-
private JsonArray setActiveInstance(JsonArray allAvailableInstances, String activeInstance) {
210-
if (allAvailableInstances.size() == 0) {
211-
throw new NoSuchElementException ("No Available instances, back end instance list is empty!");
212-
}
213-
for (JsonElement element : allAvailableInstances) {
214-
if (activeInstance == null && element.getAsJsonObject().get("defaultBackend").getAsBoolean()) {
215-
element.getAsJsonObject().addProperty("active", true);
216-
} else if (activeInstance != null
217-
&& element.getAsJsonObject().get("name").getAsString().equals(activeInstance)) {
218-
element.getAsJsonObject().addProperty("active", true);
219-
} else {
220-
element.getAsJsonObject().addProperty("active", false);
221-
}
222-
}
223-
return allAvailableInstances;
224-
}
225-
226201
}

src/main/java/com/ericsson/ei/frontend/utils/EIRequestsControllerUtils.java

Lines changed: 62 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,12 @@
1717
package com.ericsson.ei.frontend.utils;
1818

1919
import java.io.IOException;
20+
import java.io.UnsupportedEncodingException;
2021
import java.net.URI;
2122
import java.net.URISyntaxException;
23+
import java.net.URLDecoder;
2224
import java.nio.charset.Charset;
2325
import java.util.ArrayList;
24-
import java.util.Arrays;
2526
import java.util.List;
2627

2728
import javax.servlet.http.HttpServletRequest;
@@ -44,16 +45,16 @@ public class EIRequestsControllerUtils {
4445

4546
private static final Logger LOG = LoggerFactory.getLogger(EIRequestsControllerUtils.class);
4647

47-
private static final List<String> REQUESTS_WITH_QUERY_PARAM = new ArrayList<>(Arrays.asList("/queryAggregatedObject", "/queryMissedNotifications", "/query"));
48-
private static final String BACKEND_KEY_NAME = "backendurl";
48+
private static final String BACKEND_URL_KEY_NAME = "backendurl";
49+
private static final String BACKEND_NAME_KEY_NAME = "backendname";
4950

5051
@Autowired
5152
private BackEndInstancesUtils backEndInstancesUtils;
5253

5354
/**
54-
* Processes an HttpServletRequest and extract the URL parameters from it and reformats
55-
* the requests and removes EI Front End specific parameters if any and builds a new URL
56-
* to be used to call the requested, selected or default EI back end.
55+
* Processes an HttpServletRequest and extract the URL parameters from it and reformats the requests and removes EI
56+
* Front End specific parameters if any and builds a new URL to be used to call the requested, selected or default
57+
* EI back end.
5758
*
5859
* @param request
5960
* @return String
@@ -62,38 +63,42 @@ public class EIRequestsControllerUtils {
6263
public String getEIRequestURL(HttpServletRequest request) {
6364
String eiBackendAddressSuffix = request.getServletPath();
6465
String requestQuery = request.getQueryString();
65-
String requestUrl = null;
6666

67-
if (requestQuery != null && requestQuery.contains(BACKEND_KEY_NAME)) {
68-
// Selecting back end from user input as parameter.
69-
List<NameValuePair> params = getParameters(requestQuery);
70-
requestUrl = extractUrlFromParameters(params);
71-
requestQuery = removeBackendDataFromQueryString(params);
72-
LOG.debug(BACKEND_KEY_NAME + " key detected, forwarding request to url '" + requestUrl + "'.");
73-
} else {
74-
BackEndInformation backEndInformation = getEIBackendInformation(request);
75-
requestUrl = backEndInformation.getUrlAsString();
76-
}
67+
String requestUrl = getBackEndUrl(requestQuery);
68+
requestQuery = removeBackendDataFromQueryString(requestQuery);
7769

78-
if(REQUESTS_WITH_QUERY_PARAM.contains(eiBackendAddressSuffix)) {
79-
String query = (requestQuery != null && !requestQuery.isEmpty()) ? "?" + requestQuery : "";
70+
if (!requestQuery.isEmpty()) {
71+
String query = "?" + requestQuery;
8072
requestUrl = requestUrl + eiBackendAddressSuffix + query;
8173
} else {
8274
requestUrl = requestUrl + eiBackendAddressSuffix;
8375
}
76+
8477
LOG.debug("Got HTTP Request with method " + request.getMethod() + "\nUrlSuffix: " + eiBackendAddressSuffix
8578
+ "\nForwarding Request to EI Backend with url: " + requestUrl);
79+
8680
return requestUrl;
8781
}
8882

89-
private BackEndInformation getEIBackendInformation(HttpServletRequest request) {
90-
String backEndInstanceName = null;
83+
private String getBackEndUrl(String requestQuery) {
84+
String requestUrl = null;
9185

92-
if (request.getSession().getAttribute("backEndInstanceName") != null) {
93-
backEndInstanceName = request.getSession().getAttribute("backEndInstanceName").toString();
86+
if (requestQuery != null) {
87+
List<NameValuePair> params = getParameters(requestQuery);
88+
if (requestQuery.contains(BACKEND_URL_KEY_NAME)) {
89+
requestUrl = extractUrlFromParameters(params);
90+
} else {
91+
String backEndName = extractBackEndNameFromParameters(params);
92+
BackEndInformation backEndInformation = backEndInstancesUtils.getBackEndInformationByName(backEndName);
93+
requestUrl = backEndInformation.getUrlAsString();
94+
}
95+
} else {
96+
BackEndInformation backEndInformation = backEndInstancesUtils.getBackEndInformationByName(null);
97+
requestUrl = backEndInformation.getUrlAsString();
9498
}
9599

96-
return backEndInstancesUtils.getBackEndInformationByName(backEndInstanceName);
100+
LOG.debug("Forwarding request to url '" + requestUrl + "'.");
101+
return requestUrl;
97102
}
98103

99104
private List<NameValuePair> getParameters(String requestQuery) {
@@ -104,31 +109,58 @@ private List<NameValuePair> getParameters(String requestQuery) {
104109
} catch (URISyntaxException e) {
105110
LOG.error("Error while encoding URL parameters: " + e);
106111
}
112+
107113
return params;
108114
}
109115

110116
private String extractUrlFromParameters(List<NameValuePair> params) {
111117
String urlFromParams = null;
118+
112119
for (NameValuePair param : params) {
113-
if (param.getName().equals(BACKEND_KEY_NAME)) {
114-
urlFromParams = param.getValue();
120+
if (param.getName()
121+
.equals(BACKEND_URL_KEY_NAME)) {
122+
try {
123+
urlFromParams = URLDecoder.decode(param.getValue(), "UTF-8");
124+
} catch (UnsupportedEncodingException e) {
125+
LOG.error("Failed to decode back-end url");
126+
}
115127
}
116128
}
129+
117130
return urlFromParams;
118131
}
119132

120-
private String removeBackendDataFromQueryString(List<NameValuePair> params) {
133+
private String extractBackEndNameFromParameters(List<NameValuePair> params) {
134+
String backendName = null;
135+
136+
for (NameValuePair param : params) {
137+
if (param.getName()
138+
.equals(BACKEND_NAME_KEY_NAME)) {
139+
try {
140+
backendName = URLDecoder.decode(param.getValue(), "UTF-8");
141+
} catch (UnsupportedEncodingException e) {
142+
LOG.error("Failed to decode back-end name");
143+
}
144+
}
145+
}
146+
147+
return backendName;
148+
}
149+
150+
private String removeBackendDataFromQueryString(String requestQuery) {
151+
List<NameValuePair> params = getParameters(requestQuery);
121152
List<NameValuePair> processedParams = new ArrayList<>();
122153
for (NameValuePair param : params) {
123154
String name = param.getName(), value = param.getValue();
124-
if (name.equals(BACKEND_KEY_NAME)) {
155+
if (name == null || value == null || name.equals(BACKEND_URL_KEY_NAME) || name.equals(BACKEND_NAME_KEY_NAME)) {
125156
continue;
126157
}
127158
processedParams.add(new BasicNameValuePair(name, value));
128159
}
129160

130-
if (processedParams.size() == 0)
131-
return null;
161+
if (processedParams.size() == 0) {
162+
return "";
163+
}
132164

133165
return URLEncodedUtils.format(processedParams, "UTF8");
134166
}

0 commit comments

Comments
 (0)