mirror of
https://github.com/HangarMC/Hangar.git
synced 2024-12-21 06:51:19 +08:00
make storage impl selectable
This commit is contained in:
parent
31ca777132
commit
d529b35bc7
@ -1,11 +1,9 @@
|
||||
package io.papermc.hangar.config.hangar;
|
||||
|
||||
import io.papermc.hangar.HangarApplication;
|
||||
import io.papermc.hangar.model.Announcement;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.boot.context.properties.NestedConfigurationProperty;
|
||||
import org.springframework.boot.system.ApplicationHome;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -23,7 +21,6 @@ public class HangarConfig {
|
||||
private List<Sponsor> sponsors;
|
||||
|
||||
private boolean dev = true;
|
||||
private String pluginUploadDir = new ApplicationHome(HangarApplication.class).getDir().toPath().resolve("work").toString();
|
||||
private String baseUrl;
|
||||
private String gaCode = "";
|
||||
private List<Announcement> announcements = new ArrayList<>();
|
||||
@ -56,6 +53,8 @@ public class HangarConfig {
|
||||
public DiscourseConfig discourse;
|
||||
@NestedConfigurationProperty
|
||||
public JobsConfig jobs;
|
||||
@NestedConfigurationProperty
|
||||
public StorageConfig storage;
|
||||
|
||||
@Component
|
||||
public static class Sponsor {
|
||||
@ -89,7 +88,7 @@ public class HangarConfig {
|
||||
}
|
||||
|
||||
@Autowired
|
||||
public HangarConfig(FakeUserConfig fakeUser, HomepageConfig homepage, ChannelsConfig channels, PagesConfig pages, ProjectsConfig projects, UserConfig user, OrganizationsConfig org, ApiConfig api, SSOConfig sso, HangarSecurityConfig security, QueueConfig queue, DiscourseConfig discourse, JobsConfig jobs) {
|
||||
public HangarConfig(FakeUserConfig fakeUser, HomepageConfig homepage, ChannelsConfig channels, PagesConfig pages, ProjectsConfig projects, UserConfig user, OrganizationsConfig org, ApiConfig api, SSOConfig sso, HangarSecurityConfig security, QueueConfig queue, DiscourseConfig discourse, JobsConfig jobs, StorageConfig storage) {
|
||||
this.fakeUser = fakeUser;
|
||||
this.homepage = homepage;
|
||||
this.channels = channels;
|
||||
@ -103,6 +102,7 @@ public class HangarConfig {
|
||||
this.queue = queue;
|
||||
this.discourse = discourse;
|
||||
this.jobs = jobs;
|
||||
this.storage = storage;
|
||||
}
|
||||
|
||||
public void checkDev() {
|
||||
@ -151,14 +151,6 @@ public class HangarConfig {
|
||||
this.dev = dev;
|
||||
}
|
||||
|
||||
public String getPluginUploadDir() {
|
||||
return pluginUploadDir;
|
||||
}
|
||||
|
||||
public void setPluginUploadDir(String pluginUploadDir) {
|
||||
this.pluginUploadDir = pluginUploadDir;
|
||||
}
|
||||
|
||||
public String getBaseUrl() {
|
||||
return baseUrl;
|
||||
}
|
||||
|
@ -0,0 +1,30 @@
|
||||
package io.papermc.hangar.config.hangar;
|
||||
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.boot.system.ApplicationHome;
|
||||
import org.springframework.stereotype.Component;
|
||||
import io.papermc.hangar.HangarApplication;
|
||||
|
||||
@Component
|
||||
@ConfigurationProperties(prefix = "hangar.storage")
|
||||
public class StorageConfig {
|
||||
|
||||
private String pluginUploadDir = new ApplicationHome(HangarApplication.class).getDir().toPath().resolve("work").toString();
|
||||
private String type = "local";
|
||||
|
||||
public String getPluginUploadDir() {
|
||||
return pluginUploadDir;
|
||||
}
|
||||
|
||||
public void setPluginUploadDir(String pluginUploadDir) {
|
||||
this.pluginUploadDir = pluginUploadDir;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
}
|
@ -1,15 +1,17 @@
|
||||
package io.papermc.hangar.service.internal.file;
|
||||
|
||||
import org.springframework.core.io.FileSystemResource;
|
||||
import org.springframework.stereotype.Service;
|
||||
import io.papermc.hangar.util.FileUtils;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.StandardCopyOption;
|
||||
import io.papermc.hangar.util.FileUtils;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.core.io.FileSystemResource;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
@ConditionalOnProperty(value = "hangar.storage.type", havingValue = "local", matchIfMissing = true)
|
||||
public class LocalStorageFileService implements FileService {
|
||||
@Override
|
||||
public FileSystemResource getResource(String path) {
|
||||
|
@ -1,4 +1,56 @@
|
||||
package io.papermc.hangar.service.internal.file;
|
||||
|
||||
public class S3FileService {
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.core.io.FileSystemResource;
|
||||
import org.springframework.stereotype.Service;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
@Service
|
||||
@ConditionalOnProperty(value = "hangar.storage.type", havingValue = "object")
|
||||
public class S3FileService implements FileService {
|
||||
@Override
|
||||
public FileSystemResource getResource(String path) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean exists(String path) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteDirectory(String dir) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean delete(String path) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] bytes(String path) throws IOException {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(InputStream inputStream, String path) throws IOException {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void move(String oldPath, String newPath) throws IOException {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void link(String existingPath, String newPath) throws IOException {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String resolve(String path, String fileName) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
package io.papermc.hangar.service.internal.uploads;
|
||||
|
||||
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.service.internal.file.FileService;
|
||||
import io.papermc.hangar.util.FileUtils;
|
||||
@ -12,7 +12,6 @@ import org.springframework.stereotype.Component;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.StandardCopyOption;
|
||||
|
||||
@Component
|
||||
public class ProjectFiles {
|
||||
@ -24,9 +23,9 @@ public class ProjectFiles {
|
||||
private final FileService fileService;
|
||||
|
||||
@Autowired
|
||||
public ProjectFiles(HangarConfig hangarConfig, FileService fileService) {
|
||||
public ProjectFiles(StorageConfig storageConfig, FileService fileService) {
|
||||
this.fileService = fileService;
|
||||
Path uploadsDir = Path.of(hangarConfig.getPluginUploadDir());
|
||||
Path uploadsDir = Path.of(storageConfig.getPluginUploadDir());
|
||||
pluginsDir = uploadsDir.resolve("plugins");
|
||||
tmpDir = uploadsDir.resolve("tmp");
|
||||
if (Files.exists(tmpDir)) {
|
||||
|
@ -180,6 +180,9 @@ hangar:
|
||||
not-available-timeout: 2m
|
||||
max-concurrent-jobs: 32
|
||||
|
||||
storage:
|
||||
type: "object"
|
||||
|
||||
#################
|
||||
# Debug Logging #
|
||||
#################
|
||||
|
Loading…
Reference in New Issue
Block a user