Skip to content

Commit 180ebb3

Browse files
author
James Leigh
authored
Merge pull request #811 from jamesrdf/issues/#681-server-password
Fix #681: Encode server password in base64 over the network
2 parents db4aac2 + 2c009dc commit 180ebb3

13 files changed

Lines changed: 85 additions & 17 deletions

File tree

core/http/workbench/src/main/java/org/eclipse/rdf4j/workbench/base/AbstractServlet.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,14 @@ public abstract class AbstractServlet implements Servlet {
3838

3939
protected final Logger log = LoggerFactory.getLogger(this.getClass());
4040

41+
@Deprecated
4142
protected static final String SERVER_USER = "server-user";
4243

44+
@Deprecated
4345
protected static final String SERVER_PASSWORD = "server-password";
4446

47+
protected static final String SERVER_USER_PASSWORD = "server-user-password";
48+
4549
protected static final String ACCEPT = "Accept";
4650

4751
/**

core/http/workbench/src/main/java/org/eclipse/rdf4j/workbench/proxy/WorkbenchGateway.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -178,10 +178,8 @@ private void changeServer(final HttpServletRequest req, final HttpServletRespons
178178
// Valid server was submitted by form. Set cookie and redirect to
179179
// repository selection page.
180180
this.cookies.addNewCookie(req, resp, SERVER_COOKIE, server);
181-
final String user = getOptionalParameter(req, SERVER_USER);
182-
this.cookies.addNewCookie(req, resp, SERVER_USER, user);
183-
final String password = getOptionalParameter(req, SERVER_PASSWORD);
184-
this.cookies.addNewCookie(req, resp, SERVER_PASSWORD, password);
181+
final String user_password = getOptionalParameter(req, SERVER_USER_PASSWORD);
182+
this.cookies.addNewCookie(req, resp, SERVER_USER_PASSWORD, user_password);
185183
final StringBuilder uri = new StringBuilder(req.getRequestURI());
186184
uri.setLength(uri.length() - req.getPathInfo().length());
187185
resetCache();

core/http/workbench/src/main/java/org/eclipse/rdf4j/workbench/proxy/WorkbenchServlet.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import java.net.MalformedURLException;
1414
import java.net.URL;
1515
import java.net.URLDecoder;
16+
import java.util.Base64;
1617
import java.util.concurrent.ConcurrentHashMap;
1718
import java.util.concurrent.ConcurrentMap;
1819

@@ -255,10 +256,21 @@ private void setCredentials(final HttpServletRequest req, final HttpServletRespo
255256
final RemoteRepositoryManager rrm = (RemoteRepositoryManager)manager;
256257
LOGGER.info("RemoteRepositoryManager URL: {}", rrm.getLocation());
257258
final CookieHandler cookies = new CookieHandler(config);
258-
final String user = cookies.getCookieNullIfEmpty(req, resp, WorkbenchGateway.SERVER_USER);
259-
final String password = cookies.getCookieNullIfEmpty(req, resp, WorkbenchGateway.SERVER_PASSWORD);
260-
LOGGER.info("Setting user '{}' and password '{}'.", user, password);
261-
rrm.setUsernameAndPassword(user, password);
259+
final String user_password = cookies.getCookieNullIfEmpty(req, resp, WorkbenchGateway.SERVER_USER_PASSWORD);
260+
if (user_password == null) {
261+
rrm.setUsernameAndPassword(null, null);
262+
} else {
263+
String decoded;
264+
try {
265+
decoded = new String(Base64.getDecoder().decode(user_password));
266+
} catch(IllegalArgumentException e) {
267+
decoded = user_password; // older browsers
268+
}
269+
final String user = decoded.substring(0, decoded.indexOf(':'));
270+
final String password = decoded.substring(decoded.indexOf(':')+1);
271+
LOGGER.info("Setting user '{}' and their password.", user);
272+
rrm.setUsernameAndPassword(user, password);
273+
}
262274
// initialize() required to push credentials to internal HTTP
263275
// client.
264276
rrm.initialize();

core/http/workbench/src/main/webapp/scripts/saved-queries.js

Lines changed: 3 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

core/http/workbench/src/main/webapp/scripts/saved-queries.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

core/http/workbench/src/main/webapp/scripts/server.js

Lines changed: 21 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

core/http/workbench/src/main/webapp/scripts/server.js.map

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

core/http/workbench/src/main/webapp/scripts/template.js

Lines changed: 4 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

core/http/workbench/src/main/webapp/scripts/template.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

core/http/workbench/src/main/webapp/scripts/ts/saved-queries.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ module workbench {
1212
declare var YASQE: any;
1313

1414
export function deleteQuery(savedBy: string, name: string, urn: string) {
15-
var currentUser = workbench.getCookie("server-user");
15+
var encoded = workbench.getCookie("server-user-password");
16+
var decoded = encoded && window.atob ? window.atob(encoded) : encoded;
17+
var currentUser = decoded && decoded.substring(0, decoded.indexOf(':'));
1618
if ((!savedBy || currentUser == savedBy)) {
1719
if (confirm("'"
1820
+ name

0 commit comments

Comments
 (0)