mirror of
https://github.com/HangarMC/Hangar.git
synced 2025-02-23 15:12:52 +08:00
move downloads from UI to the cdn
This commit is contained in:
parent
5100beb755
commit
ebe04a3dd5
@ -38,14 +38,7 @@ const props = withDefaults(
|
||||
);
|
||||
|
||||
function downloadLink(platform: Platform, version: DownloadableVersion) {
|
||||
if (version && version.downloads[platform]?.externalUrl) {
|
||||
return version.downloads[platform].externalUrl;
|
||||
}
|
||||
|
||||
const versionString = version.name;
|
||||
//TODO as normal path then using the api
|
||||
const path = `/api/v1/projects/${props.project.namespace.owner}/${props.project.namespace.slug}/versions/${versionString}/${platform.toLowerCase()}/download`;
|
||||
return import.meta.env.SSR ? path : `${window.location.protocol}//${window.location.host}${path}`;
|
||||
return version && version.downloads[platform]?.externalUrl ? version.downloads[platform].externalUrl : version.downloads[platform].downloadUrl;
|
||||
}
|
||||
|
||||
const external = computed(() => false);
|
||||
|
@ -23,6 +23,7 @@ public class StorageConfig {
|
||||
private String secretKey;
|
||||
private String bucket;
|
||||
private String objectStorageEndpoint;
|
||||
private String cdnEndpoint;
|
||||
|
||||
@Bean
|
||||
public StaticCredentialsProvider credProvider() {
|
||||
@ -81,4 +82,12 @@ public class StorageConfig {
|
||||
public void setBucket(String bucket) {
|
||||
this.bucket = bucket;
|
||||
}
|
||||
|
||||
public String getCdnEndpoint() {
|
||||
return cdnEndpoint;
|
||||
}
|
||||
|
||||
public void setCdnEndpoint(String cdnEndpoint) {
|
||||
this.cdnEndpoint = cdnEndpoint;
|
||||
}
|
||||
}
|
||||
|
@ -2,5 +2,5 @@ package io.papermc.hangar.model.api.project.version;
|
||||
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public record PlatformVersionDownload(@Nullable FileInfo fileInfo, @Nullable String externalUrl) {
|
||||
public record PlatformVersionDownload(@Nullable FileInfo fileInfo, @Nullable String externalUrl, @Nullable String downloadUrl) {
|
||||
}
|
||||
|
@ -38,7 +38,7 @@ public class VersionsApiService extends HangarComponent {
|
||||
if (version == null) {
|
||||
throw new HangarApiException(HttpStatus.NOT_FOUND);
|
||||
}
|
||||
versionDependencyService.addDownloadsAndDependencies(version.getKey(), version.getValue());
|
||||
versionDependencyService.addDownloadsAndDependencies(author, slug, versionString, version.getKey(), version.getValue());
|
||||
return version.getValue();
|
||||
}
|
||||
|
||||
@ -46,7 +46,7 @@ public class VersionsApiService extends HangarComponent {
|
||||
public PaginatedResult<Version> getVersions(String author, String slug, RequestPagination pagination) {
|
||||
boolean canSeeHidden = getGlobalPermissions().has(Permission.SeeHidden);
|
||||
List<Version> versions = versionsApiDAO.getVersions(author, slug, canSeeHidden, getHangarUserId(), pagination).entrySet().stream()
|
||||
.map(entry -> versionDependencyService.addDownloadsAndDependencies(entry.getKey(), entry.getValue()))
|
||||
.map(entry -> versionDependencyService.addDownloadsAndDependencies(author, slug, entry.getValue().getName(), entry.getKey(), entry.getValue()))
|
||||
.sorted((v1, v2) -> v2.getCreatedAt().compareTo(v1.getCreatedAt()))
|
||||
.collect(Collectors.toList());
|
||||
Long versionCount = versionsApiDAO.getVersionCount(author, slug, canSeeHidden, getHangarUserId(), pagination);
|
||||
|
@ -3,6 +3,7 @@ package io.papermc.hangar.service.internal.file;
|
||||
import org.springframework.core.io.Resource;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import io.papermc.hangar.model.common.Platform;
|
||||
|
||||
public interface FileService {
|
||||
|
||||
@ -25,4 +26,6 @@ public interface FileService {
|
||||
String resolve(String path, String fileName);
|
||||
|
||||
String getRoot();
|
||||
|
||||
String getDownloadUrl(String user, String project, String version, Platform platform, String fileName);
|
||||
}
|
||||
|
@ -1,6 +1,8 @@
|
||||
package io.papermc.hangar.service.internal.file;
|
||||
|
||||
import io.papermc.hangar.config.hangar.HangarConfig;
|
||||
import io.papermc.hangar.config.hangar.StorageConfig;
|
||||
import io.papermc.hangar.model.common.Platform;
|
||||
import io.papermc.hangar.util.FileUtils;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
@ -17,9 +19,11 @@ import org.springframework.stereotype.Service;
|
||||
public class LocalStorageFileService implements FileService {
|
||||
|
||||
private final StorageConfig config;
|
||||
private final HangarConfig hangarConfig;
|
||||
|
||||
public LocalStorageFileService(StorageConfig config) {
|
||||
public LocalStorageFileService(StorageConfig config, HangarConfig hangarConfig) {
|
||||
this.config = config;
|
||||
this.hangarConfig = hangarConfig;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -89,4 +93,9 @@ public class LocalStorageFileService implements FileService {
|
||||
public String getRoot() {
|
||||
return config.getPluginUploadDir();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDownloadUrl(String user, String project, String version, Platform platform, String fileName) {
|
||||
return hangarConfig.getBaseUrl() + "/api/v1/projects/" + user + "/" + project + "/versions/" + version + "/" + platform.name() + "/download";
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package io.papermc.hangar.service.internal.file;
|
||||
import io.awspring.cloud.s3.S3Resource;
|
||||
import io.awspring.cloud.s3.S3Template;
|
||||
import io.papermc.hangar.config.hangar.StorageConfig;
|
||||
import io.papermc.hangar.model.common.Platform;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
@ -88,4 +89,9 @@ public class S3FileService implements FileService {
|
||||
public String getRoot() {
|
||||
return "s3://" + config.getBucket() + "/";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDownloadUrl(String user, String project, String version, Platform platform, String fileName) {
|
||||
return config.getCdnEndpoint() + "/" + config.getBucket() + "/plugins/" + user + "/" + project + "/versions/" + version + "/" + platform.name() + "/" + fileName;
|
||||
}
|
||||
}
|
||||
|
@ -137,7 +137,7 @@ public class ProjectService extends HangarComponent {
|
||||
}
|
||||
HangarProjectInfo info = hangarProjectsDAO.getHangarProjectInfo(project.getLeft());
|
||||
Map<Long, HangarProjectPage> pages = projectPageService.getProjectPages(project.getLeft());
|
||||
final List<HangarProject.PinnedVersion> pinnedVersions = this.pinnedVersionService.getPinnedVersions(project.getLeft());
|
||||
final List<HangarProject.PinnedVersion> pinnedVersions = this.pinnedVersionService.getPinnedVersions(project.getRight().getNamespace().getOwner(), project.getRight().getNamespace().getSlug(), project.getLeft());
|
||||
|
||||
final Map<Platform, HangarVersion> mainChannelVersions = new EnumMap<>(Platform.class);
|
||||
for (final Platform platform : Platform.getValues()) {
|
||||
@ -149,7 +149,7 @@ public class ProjectService extends HangarComponent {
|
||||
for (final Map.Entry<Platform, SortedSet<String>> entry : platformDependencies.entrySet()) {
|
||||
version.getPlatformDependenciesFormatted().put(entry.getKey(), io.papermc.hangar.util.StringUtils.formatVersionNumbers(new ArrayList<>(entry.getValue())));
|
||||
}
|
||||
downloadService.addDownloads(version.getId(), version.getDownloads());
|
||||
downloadService.addDownloads(project.getRight().getNamespace().getOwner(), project.getRight().getNamespace().getSlug(), version.getName(), version.getId(), version.getDownloads());
|
||||
}
|
||||
|
||||
mainChannelVersions.put(platform, version);
|
||||
|
@ -174,7 +174,7 @@ public class DownloadService extends HangarComponent {
|
||||
return true;
|
||||
}
|
||||
|
||||
public void addDownloads(long versionId, Map<Platform, PlatformVersionDownload> versionDownloadsMap) {
|
||||
public void addDownloads(String user, String project, String version, long versionId, Map<Platform, PlatformVersionDownload> versionDownloadsMap) {
|
||||
// TODO into one query
|
||||
final List<ProjectVersionDownloadTable> versionDownloads = downloadsDAO.getDownloads(versionId);
|
||||
final List<ProjectVersionPlatformDownloadTable> platformDownloads = downloadsDAO.getPlatformDownloads(versionId);
|
||||
@ -188,7 +188,7 @@ public class DownloadService extends HangarComponent {
|
||||
|
||||
final ProjectVersionDownloadTable downloadTable = versionDownloads.stream().filter(table -> table.getId() == platformDownload.getDownloadId()).findAny().orElseThrow(NullPointerException::new);
|
||||
final FileInfo fileInfo = downloadTable.getFileName() != null ? new FileInfo(downloadTable.getFileName(), downloadTable.getFileSize(), downloadTable.getHash()) : null;
|
||||
download = new PlatformVersionDownload(fileInfo, downloadTable.getExternalUrl());
|
||||
download = new PlatformVersionDownload(fileInfo, downloadTable.getExternalUrl(), fileService.getDownloadUrl(user, project, version, platformDownload.getPlatform(), fileInfo != null ? fileInfo.getName() : null));
|
||||
downloads.put(platformDownload.getDownloadId(), download);
|
||||
versionDownloadsMap.put(platformDownload.getPlatform(), download);
|
||||
}
|
||||
|
@ -42,14 +42,14 @@ public class PinnedVersionService extends HangarComponent {
|
||||
this.pinnedProjectVersionsDAO.deleteVersion(projectId, versionId);
|
||||
}
|
||||
|
||||
public List<HangarProject.PinnedVersion> getPinnedVersions(final long projectId) {
|
||||
public List<HangarProject.PinnedVersion> getPinnedVersions(final String user, final String project, final long projectId) {
|
||||
final List<HangarProject.PinnedVersion> versions = this.hangarVersionsDAO.getPinnedVersions(projectId);
|
||||
for (final HangarProject.PinnedVersion version : versions) {
|
||||
final Map<Platform, SortedSet<String>> platformDependencies = versionsApiDAO.getPlatformDependencies(version.getVersionId());
|
||||
for (final Map.Entry<Platform, SortedSet<String>> entry : platformDependencies.entrySet()) {
|
||||
version.getPlatformDependenciesFormatted().put(entry.getKey(), StringUtils.formatVersionNumbers(new ArrayList<>(entry.getValue())));
|
||||
}
|
||||
downloadService.addDownloads(version.getVersionId(), version.getDownloads());
|
||||
downloadService.addDownloads(user, project, version.getName(), version.getVersionId(), version.getDownloads());
|
||||
}
|
||||
return versions;
|
||||
}
|
||||
|
@ -63,7 +63,7 @@ public class VersionDependencyService extends HangarComponent {
|
||||
return projectVersionPlatformDependenciesDAO.getForVersion(versionId);
|
||||
}
|
||||
|
||||
public <T extends Version> T addDownloadsAndDependencies(final long versionId, final T version) {
|
||||
public <T extends Version> T addDownloadsAndDependencies(final String user, final String project, final String versionName, final long versionId, final T version) {
|
||||
final Map<Platform, SortedSet<String>> platformDependencies = versionsApiDAO.getPlatformDependencies(versionId);
|
||||
version.getPlatformDependencies().putAll(platformDependencies);
|
||||
for (final Map.Entry<Platform, SortedSet<String>> entry : platformDependencies.entrySet()) {
|
||||
@ -78,7 +78,7 @@ public class VersionDependencyService extends HangarComponent {
|
||||
}
|
||||
}
|
||||
|
||||
downloadService.addDownloads(versionId, version.getDownloads());
|
||||
downloadService.addDownloads(user, project, versionName, versionId, version.getDownloads());
|
||||
return version;
|
||||
}
|
||||
|
||||
|
@ -74,7 +74,7 @@ public class VersionService extends HangarComponent {
|
||||
throw new HangarApiException(HttpStatus.NOT_FOUND);
|
||||
}
|
||||
|
||||
versionDependencyService.addDownloadsAndDependencies(version.getId(), version);
|
||||
versionDependencyService.addDownloadsAndDependencies(author, slug, versionString, version.getId(), version);
|
||||
return version;
|
||||
}
|
||||
|
||||
|
@ -192,6 +192,7 @@ hangar:
|
||||
secret-key: "toOBAwlz3ZC6c4dvbFh7Ywk8Y2J4b3kS"
|
||||
bucket: "test"
|
||||
object-storage-endpoint: "http://127.0.0.1:9000"
|
||||
cdn-endpoint: "http://127.0.0.1:9000"
|
||||
|
||||
#################
|
||||
# Debug Logging #
|
||||
|
Loading…
Reference in New Issue
Block a user