mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-22 21:55:39 +00:00
bug5899: require LEADERBOARD:PREMIUM_LEADERBOARD_INFORMATION for expensive REST API properties
This commit is contained in:
@@ -18,7 +18,8 @@ Require-Bundle: com.sap.sailing.domain.common,
|
||||
com.sap.sse.replication,
|
||||
com.sap.sailing.shared.server,
|
||||
com.sap.sse.shared.android,
|
||||
com.sap.sailing.server.gateway.interfaces
|
||||
com.sap.sailing.server.gateway.interfaces,
|
||||
org.apache.shiro.core;bundle-version="1.7.1"
|
||||
Export-Package: com.sap.sailing.server.gateway.deserialization.impl,
|
||||
com.sap.sailing.server.gateway.dto,
|
||||
com.sap.sailing.server.gateway.serialization,
|
||||
|
||||
+7
-1
@@ -10,6 +10,7 @@ import java.util.NavigableSet;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
|
||||
import org.apache.shiro.SecurityUtils;
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
@@ -19,6 +20,8 @@ import com.sap.sailing.domain.base.Course;
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.domain.base.RaceColumn;
|
||||
import com.sap.sailing.domain.base.Waypoint;
|
||||
import com.sap.sailing.domain.common.security.SecuredDomainType;
|
||||
import com.sap.sailing.domain.common.security.SecuredDomainType.LeaderboardActions;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.caching.LeaderboardDTOCalculationReuseCache;
|
||||
import com.sap.sailing.domain.tracking.MarkPassing;
|
||||
@@ -106,6 +109,8 @@ public class MarkPassingsJsonSerializer extends AbstractTrackedRaceDataJsonSeria
|
||||
final NavigableSet<MarkPassing> markPassingsForCompetitor = trackedRace.getMarkPassings(competitor);
|
||||
JSONArray markPassingsForCompetitorJson = new JSONArray();
|
||||
forCompetitorJson.put(MARKPASSINGS, markPassingsForCompetitorJson);
|
||||
final boolean leaderboardValidAndSubjectMaySeePremiumInformation = leaderboard != null &&
|
||||
SecurityUtils.getSubject().isPermitted(SecuredDomainType.LEADERBOARD.getStringPermissionForObject(LeaderboardActions.PREMIUM_LEADERBOARD_INFORMATION, leaderboard));
|
||||
trackedRace.lockForRead(markPassingsForCompetitor);
|
||||
try {
|
||||
for (MarkPassing markPassing : markPassingsForCompetitor) {
|
||||
@@ -124,7 +129,8 @@ public class MarkPassingsJsonSerializer extends AbstractTrackedRaceDataJsonSeria
|
||||
}
|
||||
markPassingJson.put(TRACKED_RANK_AT_MARK_PASSING, rank);
|
||||
markPassingJson.put(ONE_BASED_PASSING_ORDER, passingOrder);
|
||||
if (leaderboard != null) {
|
||||
// the following expensive-to-compute metrics will be delivered only to our valued "premium" customers:
|
||||
if (leaderboardValidAndSubjectMaySeePremiumInformation) {
|
||||
final Pair<RaceColumn, Fleet> raceColumnAndFleet = leaderboard.getRaceColumnAndFleet(trackedRace);
|
||||
if (raceColumnAndFleet != null) {
|
||||
final Double totalPoints = leaderboard.getScoreCorrection().getCorrectedScore(() -> passingOrder,
|
||||
|
||||
Reference in New Issue
Block a user