Skip to content

Commit 56b816f

Browse files
committed
Remove image urls from data
1 parent 44c94dc commit 56b816f

File tree

8 files changed

+73
-27
lines changed

8 files changed

+73
-27
lines changed

common/src/main/java/net/modfest/platform/pojo/SubmissionData.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ public record SubmissionData(@NonNull String id,
1515
@NonNull String description,
1616
@NonNull Set<String> authors,
1717
SubmissionData.@NonNull AssociatedData platform,
18-
SubmissionResponseData.@NonNull Images images,
1918
@Nullable String source,
2019
@NonNull Awards awards
2120
) implements Data {

common/src/main/java/net/modfest/platform/pojo/SubmissionResponseData.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,15 @@ public record SubmissionResponseData(@NonNull String id,
2121
public record Images(@Nullable String icon, @Nullable String screenshot) {
2222
}
2323

24-
public static SubmissionResponseData fromData(SubmissionData data) {
24+
public static SubmissionResponseData fromData(SubmissionData data, Images images) {
2525
return new SubmissionResponseData(
2626
data.id(),
2727
data.event(),
2828
data.name(),
2929
data.description(),
3030
data.authors(),
3131
data.platform(),
32-
data.images(),
32+
images,
3333
data.source(),
3434
data.awards()
3535
);

platform_api/src/main/java/net/modfest/platform/controller/EventController.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.modfest.platform.controller;
22

3+
import jakarta.servlet.http.HttpServletRequest;
34
import net.modfest.platform.pojo.*;
45
import net.modfest.platform.security.PermissionUtils;
56
import net.modfest.platform.security.Permissions;
@@ -80,17 +81,17 @@ public void setRegistration(@PathVariable String id, @RequestBody String userId,
8081
}
8182

8283
@GetMapping("/event/{eventId}/submissions")
83-
public List<SubmissionResponseData> getSubmissions(@PathVariable String eventId) {
84+
public List<SubmissionResponseData> getSubmissions(HttpServletRequest request, @PathVariable String eventId) {
8485
var event = getEvent(eventId);
8586
return service
8687
.getSubmissionsFromEvent(event)
87-
.map(SubmissionResponseData::fromData)
88+
.map(s -> service.addResponseInfo(request, s))
8889
.toList();
8990
}
9091

9192
@PostMapping(value = "/event/{eventId}/submissions", params = "type=other")
9293
@RequiresPermissions(Permissions.Event.SUBMIT)
93-
public SubmissionResponseData makeSubmissionOther(@PathVariable String eventId, @RequestBody SubmitRequestOther submission) {
94+
public SubmissionResponseData makeSubmissionOther(HttpServletRequest request, @PathVariable String eventId, @RequestBody SubmitRequestOther submission) {
9495
var event = getEvent(eventId);
9596
var subject = SecurityUtils.getSubject();
9697
var bypass = subject.isPermitted(Permissions.Event.SUBMIT_BYPASS);
@@ -110,12 +111,12 @@ public SubmissionResponseData makeSubmissionOther(@PathVariable String eventId,
110111
"You don't have permissions to submit for people other than yourself");
111112
}
112113

113-
return SubmissionResponseData.fromData(service.makeSubmissionOther(event, authors, submission));
114+
return service.addResponseInfo(request, service.makeSubmissionOther(event, authors, submission));
114115
}
115116

116-
@PostMapping(value = "/event/{eventId}/submissions", params = "type=modrinth")
117+
@PostMapping(value = "/event/{eventId}/submissions", params = "type=modrinth")
117118
@RequiresPermissions(Permissions.Event.SUBMIT)
118-
public SubmissionResponseData makeSubmissionModrinth(@PathVariable String eventId, @RequestBody SubmitRequestModrinth submission) {
119+
public SubmissionResponseData makeSubmissionModrinth(HttpServletRequest request, @PathVariable String eventId, @RequestBody SubmitRequestModrinth submission) {
119120
var event = getEvent(eventId);
120121
var subject = SecurityUtils.getSubject();
121122
var bypass = subject.isPermitted(Permissions.Event.SUBMIT_BYPASS);
@@ -137,7 +138,7 @@ public SubmissionResponseData makeSubmissionModrinth(@PathVariable String eventI
137138
"You don't have permissions to submit for people other than yourself");
138139
}
139140

140-
return SubmissionResponseData.fromData(service.makeSubmissionModrinth(eventId, submission.modrinthProject()));
141+
return service.addResponseInfo(request, service.makeSubmissionModrinth(eventId, submission.modrinthProject()));
141142
}
142143

143144
@PatchMapping("/event/{eventId}/submission/{subId}")

platform_api/src/main/java/net/modfest/platform/controller/ImageCdn.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22

33
import net.modfest.platform.repository.ImageRepository;
44
import org.springframework.beans.factory.annotation.Autowired;
5-
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
5+
import org.springframework.context.annotation.Condition;
6+
import org.springframework.context.annotation.ConditionContext;
7+
import org.springframework.context.annotation.Conditional;
68
import org.springframework.core.io.FileSystemResource;
9+
import org.springframework.core.type.AnnotatedTypeMetadata;
710
import org.springframework.http.MediaType;
811
import org.springframework.http.ResponseEntity;
912
import org.springframework.web.bind.annotation.GetMapping;
@@ -14,7 +17,7 @@
1417

1518
// This controller will only be active if no image cdn was specified.
1619
// In prod, you should specify an image cdn
17-
@ConditionalOnProperty(name = "platform.image-cdn-url", matchIfMissing = true)
20+
@Conditional(ImageCdn.ImageCdnCondition.class)
1821
@RestController
1922
public class ImageCdn {
2023
@Autowired
@@ -50,4 +53,13 @@ public ResponseEntity<FileSystemResource> getImage(@PathVariable String path) {
5053
}
5154
return response.body(new FileSystemResource(resolvedPath));
5255
}
56+
57+
static class ImageCdnCondition implements Condition {
58+
@Override
59+
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
60+
System.out.println("eee "+context.getEnvironment().containsProperty("platform.imagecdnurl"));
61+
System.out.println("fff "+context.getEnvironment().containsProperty("platform.image-cdn-url"));
62+
return !context.getEnvironment().containsProperty("platform.imagecdnurl");
63+
}
64+
}
5365
}

platform_api/src/main/java/net/modfest/platform/controller/UserController.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.modfest.platform.controller;
22

3+
import jakarta.servlet.http.HttpServletRequest;
34
import net.modfest.platform.misc.EventSource;
45
import net.modfest.platform.misc.ModrinthIdUtils;
56
import net.modfest.platform.misc.PlatformStandardException;
@@ -126,7 +127,7 @@ public UserData getSingleUser(@PathVariable String id) {
126127
}
127128

128129
@GetMapping("/user/{id}/submissions")
129-
public List<SubmissionResponseData> getUserSubmissions(@PathVariable String id, @RequestParam(required = false) String eventFilter) {
130+
public List<SubmissionResponseData> getUserSubmissions(HttpServletRequest request, @PathVariable String id, @RequestParam(required = false) String eventFilter) {
130131
var user = getSingleUser(id);
131132
EventData filter = null;
132133
if (eventFilter != null) {
@@ -135,7 +136,7 @@ public List<SubmissionResponseData> getUserSubmissions(@PathVariable String id,
135136
}
136137
return submissionService
137138
.getSubmissionsFromUser(user, filter)
138-
.map(SubmissionResponseData::fromData)
139+
.map(s -> submissionService.addResponseInfo(request, s))
139140
.toList();
140141
}
141142

platform_api/src/main/java/net/modfest/platform/migrations/Migrator.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
* Contains ad-hoc migrations to our json format
2020
*/
2121
public record Migrator(JsonUtil json, Path root) {
22-
static final int CURRENT_VERSION = 6;
22+
static final int CURRENT_VERSION = 7;
2323
static final Map<Integer,MigrationManager.Migration> MIGRATIONS = new HashMap<>();
2424

2525
static {
@@ -29,6 +29,7 @@ public record Migrator(JsonUtil json, Path root) {
2929
MIGRATIONS.put(4, Migrator::migrateTo4);
3030
MIGRATIONS.put(5, Migrator::migrateTo5);
3131
MIGRATIONS.put(6, Migrator::migrateTo6);
32+
MIGRATIONS.put(7, Migrator::migrateTo7);
3233
}
3334

3435

@@ -287,6 +288,22 @@ public void migrateTo6() {
287288
}
288289
});
289290
});
291+
}
290292

293+
/**
294+
* V7
295+
* Images are now stored directly inside platform instead of storing links to the images.
296+
* Unfortunately a lot of links are dead, so this migration makes no attempt at retrieving them.
297+
* Please get a list of images beforehand.
298+
*/
299+
public void migrateTo7() {
300+
var submissions = root.resolve("submissions");
301+
MigratorUtils.executeForAllFiles(submissions, eventDir -> {
302+
MigratorUtils.executeForAllFiles(eventDir, submissionFile -> {
303+
var submission = json.readJson(submissionFile, JsonObject.class);
304+
submission.remove("images");
305+
json.writeJson(submissionFile, submission);
306+
});
307+
});
291308
}
292309
}

platform_api/src/main/java/net/modfest/platform/service/ImageService.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,8 @@ public String getImageUrl(HttpServletRequest request, SubmissionRepository.Submi
3434
String imageCdn = config.getImageCdnUrl();
3535
if (imageCdn == null) {
3636
// Platform will be acting as the cdn
37-
var baseUrl = request.getRequestURL().toString();
38-
if (baseUrl.endsWith("/")) {
39-
baseUrl = baseUrl.substring(0, baseUrl.length()-1);
40-
}
41-
imageCdn = baseUrl+"/imagecdn";
37+
var baseUrl = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort();
38+
imageCdn = baseUrl+"/imagecdn/";
4239
}
4340
return imageCdn+getImageLocationKey(subKey, type)+"."+imageInfo.extension();
4441
}

platform_api/src/main/java/net/modfest/platform/service/SubmissionService.java

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.modfest.platform.service;
22

3+
import jakarta.servlet.http.HttpServletRequest;
34
import net.modfest.platform.pojo.*;
45
import net.modfest.platform.repository.SubmissionRepository;
56
import nl.theepicblock.dukerinth.ModrinthApi;
@@ -114,7 +115,6 @@ public SubmissionData makeSubmissionOther(EventData event, Set<UserData> authors
114115
submitData.downloadUrl()
115116
)
116117
),
117-
new SubmissionResponseData.Images(null, null),
118118
submitData.sourceUrl(),
119119
new SubmissionData.Awards(
120120
Set.of(),
@@ -143,6 +143,10 @@ public SubmissionData makeSubmissionModrinth(String eventId, String mrProjectId)
143143
}
144144

145145
imageService.downloadSubmissionImage(project.iconUrl, subKey, ImageService.SubmissionImageType.ICON);
146+
var galleryUrl = getGalleryUrl(project);
147+
if (galleryUrl != null) {
148+
imageService.downloadSubmissionImage(galleryUrl, subKey, ImageService.SubmissionImageType.SCREENSHOT);
149+
}
146150
submissionRepository.save(
147151
new SubmissionData(
148152
subId,
@@ -156,7 +160,6 @@ public SubmissionData makeSubmissionModrinth(String eventId, String mrProjectId)
156160
latest.id
157161
)
158162
),
159-
getImages(project),
160163
project.sourceUrl,
161164
new SubmissionData.Awards(
162165
Set.of(),
@@ -167,11 +170,13 @@ public SubmissionData makeSubmissionModrinth(String eventId, String mrProjectId)
167170
return submissionRepository.get(subKey);
168171
}
169172

170-
private static SubmissionResponseData.Images getImages(Project mrProject) {
171-
return new SubmissionResponseData.Images(
172-
mrProject.iconUrl,
173-
mrProject.gallery.stream().filter(item -> item.featured).map(item -> item.url).findFirst().orElse(null)
174-
);
173+
private static @Nullable String getGalleryUrl(Project mrProject) {
174+
return mrProject.gallery
175+
.stream()
176+
.filter(item -> item.featured)
177+
.map(item -> item.url)
178+
.findFirst()
179+
.orElse(null);
175180
}
176181

177182
/**
@@ -186,4 +191,18 @@ private static SubmissionResponseData.Images getImages(Project mrProject) {
186191
.max(Comparator.comparing(v -> v.datePublished))
187192
.orElse(null);
188193
}
194+
195+
/**
196+
* Adds data which is only available in the http response, but not actually stored
197+
*/
198+
public SubmissionResponseData addResponseInfo(HttpServletRequest request, SubmissionData data) {
199+
var subKey = new SubmissionRepository.SubmissionId(data.event(), data.id());
200+
return SubmissionResponseData.fromData(
201+
data,
202+
new SubmissionResponseData.Images(
203+
imageService.getImageUrl(request, subKey, ImageService.SubmissionImageType.ICON),
204+
imageService.getImageUrl(request, subKey, ImageService.SubmissionImageType.SCREENSHOT)
205+
)
206+
);
207+
}
189208
}

0 commit comments

Comments
 (0)