Skip to content

Commit

Permalink
Refactored /players page to use ResolverService
Browse files Browse the repository at this point in the history
- Changed all css, js and png requests on player page to use relative address.
- Changed the export accordingly

Deprecated a lot of the old response factory methods
  • Loading branch information
AuroraLS3 committed Feb 14, 2020
1 parent f784d18 commit 5354312
Show file tree
Hide file tree
Showing 8 changed files with 183 additions and 129 deletions.
Expand Up @@ -134,48 +134,50 @@ private Response_old getJSONResponse(String resource) {
private void exportRequiredResources(Path toDirectory) throws IOException {
// Style
exportResources(toDirectory,
"img/Flaticon_circle.png",
"css/sb-admin-2.css",
"css/style.css",
"vendor/jquery/jquery.min.js",
"vendor/bootstrap/js/bootstrap.bundle.min.js",
"vendor/jquery-easing/jquery.easing.min.js",
"vendor/datatables/jquery.dataTables.min.js",
"vendor/datatables/dataTables.bootstrap4.min.js",
"vendor/highcharts/highstock.js",
"vendor/highcharts/map.js",
"vendor/highcharts/world.js",
"vendor/highcharts/drilldown.js",
"vendor/highcharts/highcharts-more.js",
"vendor/highcharts/no-data-to-display.js",
"vendor/fullcalendar/fullcalendar.min.css",
"vendor/momentjs/moment.js",
"vendor/fullcalendar/fullcalendar.min.js",
"vendor/fontawesome-free/css/all.min.css",
"vendor/fontawesome-free/webfonts/fa-brands-400.eot",
"vendor/fontawesome-free/webfonts/fa-brands-400.ttf",
"vendor/fontawesome-free/webfonts/fa-brands-400.woff",
"vendor/fontawesome-free/webfonts/fa-brands-400.woff2",
"vendor/fontawesome-free/webfonts/fa-regular-400.eot",
"vendor/fontawesome-free/webfonts/fa-regular-400.ttf",
"vendor/fontawesome-free/webfonts/fa-regular-400.woff",
"vendor/fontawesome-free/webfonts/fa-regular-400.woff2",
"vendor/fontawesome-free/webfonts/fa-solid-900.eot",
"vendor/fontawesome-free/webfonts/fa-solid-900.ttf",
"vendor/fontawesome-free/webfonts/fa-solid-900.woff",
"vendor/fontawesome-free/webfonts/fa-solid-900.woff2",
"js/sb-admin-2.js",
"js/xmlhttprequests.js",
"js/color-selector.js",
"js/sessionAccordion.js",
"js/graphs.js",
"js/player-values.js"
"../img/Flaticon_circle.png",
"../css/sb-admin-2.css",
"../css/style.css",
"../vendor/jquery/jquery.min.js",
"../vendor/bootstrap/js/bootstrap.bundle.min.js",
"../vendor/jquery-easing/jquery.easing.min.js",
"../vendor/datatables/jquery.dataTables.min.js",
"../vendor/datatables/dataTables.bootstrap4.min.js",
"../vendor/highcharts/highstock.js",
"../vendor/highcharts/map.js",
"../vendor/highcharts/world.js",
"../vendor/highcharts/drilldown.js",
"../vendor/highcharts/highcharts-more.js",
"../vendor/highcharts/no-data-to-display.js",
"../vendor/fullcalendar/fullcalendar.min.css",
"../vendor/momentjs/moment.js",
"../vendor/fullcalendar/fullcalendar.min.js",
"../vendor/fontawesome-free/css/all.min.css",
"../vendor/fontawesome-free/webfonts/fa-brands-400.eot",
"../vendor/fontawesome-free/webfonts/fa-brands-400.ttf",
"../vendor/fontawesome-free/webfonts/fa-brands-400.woff",
"../vendor/fontawesome-free/webfonts/fa-brands-400.woff2",
"../vendor/fontawesome-free/webfonts/fa-regular-400.eot",
"../vendor/fontawesome-free/webfonts/fa-regular-400.ttf",
"../vendor/fontawesome-free/webfonts/fa-regular-400.woff",
"../vendor/fontawesome-free/webfonts/fa-regular-400.woff2",
"../vendor/fontawesome-free/webfonts/fa-solid-900.eot",
"../vendor/fontawesome-free/webfonts/fa-solid-900.ttf",
"../vendor/fontawesome-free/webfonts/fa-solid-900.woff",
"../vendor/fontawesome-free/webfonts/fa-solid-900.woff2",
"../js/sb-admin-2.js",
"../js/xmlhttprequests.js",
"../js/color-selector.js",
"../js/sessionAccordion.js",
"../js/graphs.js",
"../js/player-values.js"
);
}

private void exportResources(Path toDirectory, String... resourceNames) throws IOException {
for (String resourceName : resourceNames) {
exportResource(toDirectory, resourceName);
String nonRelativePath = toNonRelativePath(resourceName);
exportResource(toDirectory, nonRelativePath);
exportPaths.put(resourceName, toRelativePathFromRoot(nonRelativePath));
}
}

Expand All @@ -190,8 +192,6 @@ private void exportResource(Path toDirectory, String resourceName) throws IOExce
} else {
export(to, resource);
}

exportPaths.put(resourceName, toRelativePathFromRoot(resourceName));
}

private String toRelativePathFromRoot(String resourceName) {
Expand Down
Expand Up @@ -174,14 +174,10 @@ public Page internalErrorPage(String message, Throwable error) {
}
}

public Page errorPage(String title, String error) {
try {
return new ErrorMessagePage(
getResource("web/error.html"), title, error,
versionCheckSystem.get());
} catch (IOException noParse) {
return internalErrorPage("Failed to create error message page for error: '" + error + "'", noParse);
}
public Page errorPage(String title, String error) throws IOException {
return new ErrorMessagePage(
getResource("web/error.html"), title, error,
versionCheckSystem.get());
}

public String getResource(String name) throws IOException {
Expand Down
Expand Up @@ -20,9 +20,7 @@

import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Optional;
import java.util.*;
import java.util.function.Predicate;
import java.util.regex.Pattern;

Expand All @@ -34,8 +32,8 @@
@Singleton
public class ResolverSvc implements ResolverService {

private final Collection<Container> basicResolvers;
private final Collection<Container> regexResolvers;
private final List<Container> basicResolvers;
private final List<Container> regexResolvers;

@Inject
public ResolverSvc() {
Expand All @@ -49,12 +47,14 @@ public void register() {

@Override
public void registerResolver(String pluginName, String start, Resolver resolver) {
basicResolvers.add(new Container(pluginName, checking -> checking.startsWith(start), resolver));
basicResolvers.add(new Container(pluginName, checking -> checking.startsWith(start), resolver, start));
Collections.sort(basicResolvers);
}

@Override
public void registerResolverForMatches(String pluginName, Pattern pattern, Resolver resolver) {
regexResolvers.add(new Container(pluginName, pattern.asPredicate(), resolver));
regexResolvers.add(new Container(pluginName, pattern.asPredicate(), resolver, pattern.pattern()));
Collections.sort(regexResolvers);
}

@Override
Expand All @@ -78,15 +78,39 @@ public Optional<String> getPluginInChargeOf(String target) {
return Optional.empty();
}

private static class Container {
private static class Container implements Comparable<Container> {
final String plugin;
final Predicate<String> matcher;
final Resolver resolver;
final String sortBy;

public Container(String plugin, Predicate<String> matcher, Resolver resolver) {
public Container(String plugin, Predicate<String> matcher, Resolver resolver, String sortBy) {
this.plugin = plugin;
this.matcher = matcher;
this.resolver = resolver;
this.sortBy = sortBy;
}

@Override
public int compareTo(Container o) {
// Longest first
return Integer.compare(o.sortBy.length(), this.sortBy.length());
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Container)) return false;
Container container = (Container) o;
return Objects.equals(plugin, container.plugin) &&
Objects.equals(matcher, container.matcher) &&
Objects.equals(resolver, container.resolver) &&
Objects.equals(sortBy, container.sortBy);
}

@Override
public int hashCode() {
return Objects.hash(plugin, matcher, resolver, sortBy);
}
}
}
Expand Up @@ -93,7 +93,7 @@ public ResponseResolver(
public void registerPages() {
resolverService.registerResolver("Plan", "/debug", debugPageResolver);
resolverService.registerResolver("Plan", "/players", playersPageResolver);
registerPage("player", playerPageResolver);
resolverService.registerResolver("Plan", "/player", playerPageResolver);

registerPage("network", serverPageResolver);
registerPage("server", serverPageResolver);
Expand Down
Expand Up @@ -16,21 +16,13 @@
*/
package com.djrapitops.plan.delivery.webserver.pages;

import com.djrapitops.plan.delivery.domain.WebUser_old;
import com.djrapitops.plan.delivery.webserver.Request;
import com.djrapitops.plan.delivery.webserver.RequestTarget;
import com.djrapitops.plan.delivery.webserver.auth.Authentication;
import com.djrapitops.plan.delivery.web.resolver.*;
import com.djrapitops.plan.delivery.webserver.response.ResponseFactory;
import com.djrapitops.plan.delivery.webserver.response.Response_old;
import com.djrapitops.plan.exceptions.WebUserAuthException;
import com.djrapitops.plan.exceptions.connection.ForbiddenException;
import com.djrapitops.plan.exceptions.connection.WebException;
import com.djrapitops.plan.identification.UUIDUtility;
import com.djrapitops.plan.storage.database.DBSystem;
import com.djrapitops.plan.storage.database.Database;

import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.Optional;
import java.util.UUID;

/**
Expand All @@ -39,50 +31,39 @@
* @author Rsl1122
*/
@Singleton
public class PlayerPageResolver implements PageResolver {
public class PlayerPageResolver implements Resolver {

private final ResponseFactory responseFactory;
private final DBSystem dbSystem;
private final UUIDUtility uuidUtility;

@Inject
public PlayerPageResolver(
ResponseFactory responseFactory,
DBSystem dbSystem,
UUIDUtility uuidUtility
) {
this.responseFactory = responseFactory;
this.dbSystem = dbSystem;
this.uuidUtility = uuidUtility;
}

@Override
public Response_old resolve(Request request, RequestTarget target) throws WebException {
if (target.isEmpty()) {
return responseFactory.pageNotFound404_old();
}

String playerName = target.get(0);
UUID playerUUID = uuidUtility.getUUIDOf(playerName);

boolean raw = target.size() >= 2 && target.get(1).equalsIgnoreCase("raw");

if (playerUUID == null) {
return responseFactory.uuidNotFound404_old();
}
Database.State dbState = dbSystem.getDatabase().getState();
if (dbState != Database.State.OPEN) {
throw new ForbiddenException("Database is " + dbState.name() + " - Please try again later. You can check database status with /plan info");
}
if (raw) {
return responseFactory.rawPlayerPageResponse_old(playerUUID);
}
return responseFactory.playerPageResponse_old(playerUUID);
public boolean canAccess(WebUser user, URIPath target, URIQuery query) {
boolean isOwnPage = target.getPart(1).map(user.getName()::equalsIgnoreCase).orElse(true);
return user.hasPermission("page.player.other") || (user.hasPermission("page.player.self") && isOwnPage);
}

@Override
public boolean isAuthorized(Authentication auth, RequestTarget target) throws WebUserAuthException {
WebUser_old webUser = auth.getWebUser();
return webUser.getPermLevel() <= 1 || webUser.getName().equalsIgnoreCase(target.get(target.size() - 1));
public Optional<Response> resolve(URIPath target, URIQuery query) {
Optional<String> part = target.getPart(1);
if (!part.isPresent()) return Optional.empty();

String playerName = part.get();
UUID playerUUID = uuidUtility.getUUIDOf(playerName);
if (playerUUID == null) return Optional.of(responseFactory.uuidNotFound404());

boolean raw = target.getPart(2).map("raw"::equalsIgnoreCase).orElse(false);
return Optional.of(
raw ? responseFactory.rawPlayerPageResponse(playerUUID)
: responseFactory.playerPageResponse(playerUUID)
);
}
}

0 comments on commit 5354312

Please sign in to comment.