Skip to content

Commit

Permalink
Remove http cache from /v1/player endpoint
Browse files Browse the repository at this point in the history
Affects issues:
- Fixed #3009
  • Loading branch information
AuroraLS3 committed Sep 24, 2023
1 parent 55c13d1 commit d6e90d3
Showing 1 changed file with 1 addition and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,13 @@
package com.djrapitops.plan.delivery.webserver.resolver.json;

import com.djrapitops.plan.delivery.domain.auth.WebPermission;
import com.djrapitops.plan.delivery.formatting.Formatter;
import com.djrapitops.plan.delivery.formatting.Formatters;
import com.djrapitops.plan.delivery.rendering.json.PlayerJSONCreator;
import com.djrapitops.plan.delivery.web.resolver.MimeType;
import com.djrapitops.plan.delivery.web.resolver.Resolver;
import com.djrapitops.plan.delivery.web.resolver.Response;
import com.djrapitops.plan.delivery.web.resolver.exception.BadRequestException;
import com.djrapitops.plan.delivery.web.resolver.request.Request;
import com.djrapitops.plan.delivery.web.resolver.request.WebUser;
import com.djrapitops.plan.delivery.webserver.CacheStrategy;
import com.djrapitops.plan.identification.Identifiers;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
Expand All @@ -37,7 +34,6 @@
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import org.eclipse.jetty.http.HttpHeader;

import javax.inject.Inject;
import javax.inject.Singleton;
Expand All @@ -52,14 +48,11 @@ public class PlayerJSONResolver implements Resolver {

private final Identifiers identifiers;
private final PlayerJSONCreator jsonCreator;
private final Formatter<Long> httpLastModifiedFormatter;

@Inject
public PlayerJSONResolver(Identifiers identifiers, Formatters formatters, PlayerJSONCreator jsonCreator) {
public PlayerJSONResolver(Identifiers identifiers, PlayerJSONCreator jsonCreator) {
this.identifiers = identifiers;
this.jsonCreator = jsonCreator;

httpLastModifiedFormatter = formatters.httpLastModifiedLong();
}

@Override
Expand Down Expand Up @@ -99,34 +92,13 @@ public Optional<Response> resolve(Request request) {
private Response getResponse(Request request) {
UUID playerUUID = identifiers.getPlayerUUID(request); // Can throw BadRequestException

// User needs to be taken into account due to permissions.
String userSpecific = request.getUser().map(WebUser::getUsername).orElse("");
Optional<String> etag = Identifiers.getStringEtag(request);
if (etag.isPresent()) {
long lastSeen = jsonCreator.getLastSeen(playerUUID);
if (etag.get().equals(lastSeen + userSpecific)) {
return Response.builder()
.setStatus(304)
.setContent(new byte[0])
.build();
}
}

Predicate<WebPermission> hasPermission = request.getUser()
.map(user -> (Predicate<WebPermission>) user::hasPermission)
.orElse(permission -> true); // No user means auth disabled inside resolve
Map<String, Object> jsonAsMap = jsonCreator.createJSONAsMap(playerUUID, hasPermission);
long lastSeenRawValue = Optional.ofNullable(jsonAsMap.get("info"))
.map(Map.class::cast)
.map(info -> info.get("last_seen_raw_value"))
.map(Long.class::cast)
.orElseGet(System::currentTimeMillis);
return Response.builder()
.setMimeType(MimeType.JSON)
.setJSONContent(jsonAsMap)
.setHeader(HttpHeader.CACHE_CONTROL.asString(), CacheStrategy.CHECK_ETAG_USER_SPECIFIC)
.setHeader(HttpHeader.LAST_MODIFIED.asString(), httpLastModifiedFormatter.apply(lastSeenRawValue))
.setHeader(HttpHeader.ETAG.asString(), lastSeenRawValue + userSpecific)
.build();
}
}

0 comments on commit d6e90d3

Please sign in to comment.