diff --git a/src/main/java/org/oscwii/repositorymanager/model/app/OSCMeta.java b/src/main/java/org/oscwii/repositorymanager/model/app/OSCMeta.java index ed3f345..9ad8297 100644 --- a/src/main/java/org/oscwii/repositorymanager/model/app/OSCMeta.java +++ b/src/main/java/org/oscwii/repositorymanager/model/app/OSCMeta.java @@ -28,7 +28,7 @@ public record OSCMeta(String name, String author, String[] authors, String categ List peripherals, String version, EnumSet flags, Source source, List treatments) { - public record Source(String type, Format format, String url, String file, + public record Source(String type, String host, Format format, String url, String file, String userAgent, Set additionalFiles) { public enum Format diff --git a/src/main/java/org/oscwii/repositorymanager/sources/impl/GitHubSourceDownloader.java b/src/main/java/org/oscwii/repositorymanager/sources/impl/GitHubSourceDownloader.java index 2cf22b9..453974f 100644 --- a/src/main/java/org/oscwii/repositorymanager/sources/impl/GitHubSourceDownloader.java +++ b/src/main/java/org/oscwii/repositorymanager/sources/impl/GitHubSourceDownloader.java @@ -50,15 +50,20 @@ protected Request fetchFileInformation(InstalledApp app, Path archivePath, Path OSCMeta.Source source = app.getMeta().source(); Request.Builder request = new Request.Builder(); - if(!config.getGithubToken().isEmpty()) - { - logger.info(" - Authenticating with GitHub"); - request.addHeader("Authorization", "token " + config.getGithubToken()); + String apiHost = source.host() + "/api/v1"; + if (source.host() == null) { + apiHost = "https://api.github.com"; + + if(!config.getGithubToken().isEmpty()) + { + logger.info(" - Authenticating with GitHub"); + request.addHeader("Authorization", "token " + config.getGithubToken()); + } + else + logger.info(" - No valid GitHub token found, using unauthenticated requests."); } - else - logger.info(" - No valid GitHub token found, using unauthenticated requests."); - return request.url(LATEST_RELEASE.formatted(source.url())) + return request.url(LATEST_RELEASE.formatted(apiHost, source.url())) .addHeader("User-Agent", config.getUserAgent()) .build(); } @@ -106,5 +111,5 @@ protected void processFiles(InstalledApp app, Path archivePath, Path tmpDir, Req } } - private static final String LATEST_RELEASE = "https://api.github.com/repos/%s/releases/latest"; + private static final String LATEST_RELEASE = "%s/repos/%s/releases/latest"; } diff --git a/src/main/java/org/oscwii/repositorymanager/utils/serializers/SourceTypeAdapter.java b/src/main/java/org/oscwii/repositorymanager/utils/serializers/SourceTypeAdapter.java index 6324f78..5bcf42d 100644 --- a/src/main/java/org/oscwii/repositorymanager/utils/serializers/SourceTypeAdapter.java +++ b/src/main/java/org/oscwii/repositorymanager/utils/serializers/SourceTypeAdapter.java @@ -61,6 +61,7 @@ else if(type.equalsIgnoreCase("itchio")) context.deserialize(additionalFilesArr, new TypeToken<>(){}.getType()); return new OSCMeta.Source(type, + obj.has("host") ? obj.get("host").getAsString() : null, context.deserialize(obj.get("format"), OSCMeta.Source.Format.class), url, file,