Redirect on an invalid server address

This commit is contained in:
Rsl1122 2019-10-02 09:37:40 +03:00
parent aebf6c0b25
commit d90273da50
2 changed files with 20 additions and 15 deletions

View File

@ -60,13 +60,18 @@ public class ServerPageHandler implements PageHandler {
@Override @Override
public Response getResponse(Request request, RequestTarget target) throws WebException { public Response getResponse(Request request, RequestTarget target) throws WebException {
UUID serverUUID = getServerUUID(target); Optional<UUID> serverUUID = getServerUUID(target);
boolean proxy = serverInfo.getServer().isProxy();
checkDBState(); if (serverUUID.isPresent()) {
if (serverInfo.getServer().isProxy() && serverInfo.getServerUUID().equals(serverUUID)) { checkDBState();
return responseFactory.networkPageResponse(); if (proxy && serverInfo.getServerUUID().equals(serverUUID.get())) {
return responseFactory.networkPageResponse();
}
return responseFactory.serverPageResponse(serverUUID.get());
} else {
// Redirect to base server page.
return responseFactory.redirectResponse(proxy ? "/network" : "/server");
} }
return responseFactory.serverPageResponse(serverUUID);
} }
private void checkDBState() throws ForbiddenException { private void checkDBState() throws ForbiddenException {
@ -76,24 +81,18 @@ public class ServerPageHandler implements PageHandler {
} }
} }
private UUID getServerUUID(RequestTarget target) { private Optional<UUID> getServerUUID(RequestTarget target) {
// Default to current server's page
UUID serverUUID = serverInfo.getServerUUID();
if (!target.isEmpty()) { if (!target.isEmpty()) {
try { try {
String serverName = target.get(0); String serverName = target.get(0);
Optional<UUID> serverUUIDOptional = dbSystem.getDatabase() return dbSystem.getDatabase()
.query(ServerQueries.fetchServerMatchingIdentifier(serverName)) .query(ServerQueries.fetchServerMatchingIdentifier(serverName))
.map(Server::getUuid); .map(Server::getUuid);
if (serverUUIDOptional.isPresent()) {
serverUUID = serverUUIDOptional.get();
}
} catch (IllegalArgumentException ignore) { } catch (IllegalArgumentException ignore) {
/*ignored*/ /*ignored*/
} }
} }
return serverUUID; return Optional.empty();
} }
@Override @Override

View File

@ -134,6 +134,12 @@ public class ResponseFactory {
return new ByteResponse(ResponseType.IMAGE, FileResponse.format(fileName), files); return new ByteResponse(ResponseType.IMAGE, FileResponse.format(fileName), files);
} }
/**
* Redirect somewhere
*
* @param location Starts with '/'
* @return Redirection response.
*/
public Response redirectResponse(String location) { public Response redirectResponse(String location) {
return new RedirectResponse(location); return new RedirectResponse(location);
} }