mirror of
https://github.com/HMCL-dev/HMCL.git
synced 2025-09-18 16:26:05 -04:00
load authlib-injector server from external file
This commit is contained in:
parent
5eba896e6d
commit
cf1a66e858
@ -20,6 +20,9 @@ package org.jackhuang.hmcl;
|
|||||||
import javafx.application.Application;
|
import javafx.application.Application;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
|
import org.jackhuang.hmcl.auth.authlibinjector.AuthlibInjectorServer;
|
||||||
|
import org.jackhuang.hmcl.setting.Accounts;
|
||||||
|
import org.jackhuang.hmcl.setting.AuthlibInjectorServers;
|
||||||
import org.jackhuang.hmcl.setting.ConfigHolder;
|
import org.jackhuang.hmcl.setting.ConfigHolder;
|
||||||
import org.jackhuang.hmcl.task.Schedulers;
|
import org.jackhuang.hmcl.task.Schedulers;
|
||||||
import org.jackhuang.hmcl.task.TaskExecutor;
|
import org.jackhuang.hmcl.task.TaskExecutor;
|
||||||
@ -41,6 +44,7 @@ import java.util.LinkedList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import static org.jackhuang.hmcl.setting.ConfigHolder.config;
|
||||||
import static org.jackhuang.hmcl.ui.FXUtils.runInFX;
|
import static org.jackhuang.hmcl.ui.FXUtils.runInFX;
|
||||||
import static org.jackhuang.hmcl.util.Logging.LOG;
|
import static org.jackhuang.hmcl.util.Logging.LOG;
|
||||||
import static org.jackhuang.hmcl.util.i18n.I18n.i18n;
|
import static org.jackhuang.hmcl.util.i18n.I18n.i18n;
|
||||||
@ -54,6 +58,14 @@ public final class Launcher extends Application {
|
|||||||
try {
|
try {
|
||||||
try {
|
try {
|
||||||
ConfigHolder.init();
|
ConfigHolder.init();
|
||||||
|
AuthlibInjectorServers.init();
|
||||||
|
|
||||||
|
if (ConfigHolder.isNewlyCreated() && !AuthlibInjectorServers.getConfigInstance().getUrls().isEmpty()) {
|
||||||
|
config().setPreferredLoginType(Accounts.getLoginType(Accounts.FACTORY_AUTHLIB_INJECTOR));
|
||||||
|
AuthlibInjectorServers.getConfigInstance().getUrls().stream()
|
||||||
|
.map(AuthlibInjectorServer::new)
|
||||||
|
.forEach(config().getAuthlibInjectorServers()::add);
|
||||||
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
Main.showErrorAndExit(i18n("fatal.config_loading_failure", Paths.get("").toAbsolutePath().normalize()));
|
Main.showErrorAndExit(i18n("fatal.config_loading_failure", Paths.get("").toAbsolutePath().normalize()));
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,78 @@
|
|||||||
|
/*
|
||||||
|
* Hello Minecraft! Launcher
|
||||||
|
* Copyright (C) 2019 huangyuhui <huanghongxun2008@126.com> and contributors
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.jackhuang.hmcl.setting;
|
||||||
|
|
||||||
|
import com.google.gson.JsonParseException;
|
||||||
|
import org.jackhuang.hmcl.util.gson.JsonUtils;
|
||||||
|
import org.jackhuang.hmcl.util.gson.Validation;
|
||||||
|
import org.jackhuang.hmcl.util.io.FileUtils;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
import static org.jackhuang.hmcl.util.Logging.LOG;
|
||||||
|
|
||||||
|
public class AuthlibInjectorServers implements Validation {
|
||||||
|
|
||||||
|
public static final String CONFIG_FILENAME = "authlib-injectors.json";
|
||||||
|
|
||||||
|
private final List<String> urls;
|
||||||
|
|
||||||
|
public AuthlibInjectorServers(List<String> urls) {
|
||||||
|
this.urls = urls;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getUrls() {
|
||||||
|
return urls;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void validate() throws JsonParseException {
|
||||||
|
if (urls == null)
|
||||||
|
throw new JsonParseException("authlib-injectors.json -> urls cannot be null");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final Path configLocation = Paths.get(CONFIG_FILENAME);
|
||||||
|
private static AuthlibInjectorServers configInstance;
|
||||||
|
|
||||||
|
public synchronized static void init() {
|
||||||
|
if (configInstance != null) {
|
||||||
|
throw new IllegalStateException("AuthlibInjectorServers is already loaded");
|
||||||
|
}
|
||||||
|
|
||||||
|
configInstance = new AuthlibInjectorServers(Collections.emptyList());
|
||||||
|
|
||||||
|
if (Files.exists(configLocation)) {
|
||||||
|
try {
|
||||||
|
String content = FileUtils.readText(configLocation);
|
||||||
|
configInstance = JsonUtils.GSON.fromJson(content, AuthlibInjectorServers.class);
|
||||||
|
} catch (IOException | JsonParseException e) {
|
||||||
|
LOG.log(Level.WARNING, "Malformed authlib-injectors.json", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static AuthlibInjectorServers getConfigInstance() {
|
||||||
|
return configInstance;
|
||||||
|
}
|
||||||
|
}
|
@ -52,6 +52,10 @@ public final class ConfigHolder {
|
|||||||
return configInstance;
|
return configInstance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isNewlyCreated() {
|
||||||
|
return newlyCreated;
|
||||||
|
}
|
||||||
|
|
||||||
public synchronized static void init() throws IOException {
|
public synchronized static void init() throws IOException {
|
||||||
if (configInstance != null) {
|
if (configInstance != null) {
|
||||||
throw new IllegalStateException("Configuration is already loaded");
|
throw new IllegalStateException("Configuration is already loaded");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user