Adding Update and installer
Dieser Commit ist enthalten in:
Ursprung
e662daeffc
Commit
b636a81ec5
1
.gitignore
vendored
1
.gitignore
vendored
@ -85,3 +85,4 @@ fabric.properties
|
|||||||
.idea/caches/build_file_checksums.ser
|
.idea/caches/build_file_checksums.ser
|
||||||
/config.json
|
/config.json
|
||||||
/.idea/
|
/.idea/
|
||||||
|
/test/
|
@ -1,7 +1,7 @@
|
|||||||
package de.chaos.swlnmngr;
|
package de.chaos.swlnmngr;
|
||||||
|
|
||||||
import de.chaos.swlnmngr.config.CLIConfig;
|
import de.chaos.swlnmngr.config.CLIConfig;
|
||||||
import de.chaos.swlnmngr.config.Config;
|
import de.chaos.swlnmngr.route.Router;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.apache.logging.log4j.Level;
|
import org.apache.logging.log4j.Level;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
@ -19,12 +19,15 @@ public class Main {
|
|||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
logger.log(Level.INFO, "SteamWarLinkManager by Chaoscaot");
|
logger.log(Level.INFO, "SteamWarLinkManager by Chaoscaot");
|
||||||
allArgs = new String[args.length + Config.ADDITIONAL_ARGS.length];
|
allArgs = args;
|
||||||
System.arraycopy(args, 0, allArgs, 0, args.length);
|
|
||||||
System.arraycopy(Config.ADDITIONAL_ARGS, 0, allArgs, args.length, Config.ADDITIONAL_ARGS.length);
|
|
||||||
if(CLIConfig.IS_DEBUG) {
|
if(CLIConfig.IS_DEBUG) {
|
||||||
Configurator.setRootLevel(Level.DEBUG);
|
Configurator.setRootLevel(Level.DEBUG);
|
||||||
}
|
}
|
||||||
logger.debug("Arguments: {}", Arrays.toString(allArgs));
|
logger.debug("Arguments: {}", Arrays.toString(allArgs));
|
||||||
|
if(CLIConfig.ARGS.length > 0) {
|
||||||
|
Router.route(CLIConfig.ARGS);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,16 +3,22 @@ package de.chaos.swlnmngr.config;
|
|||||||
import de.chaos.swlnmngr.Main;
|
import de.chaos.swlnmngr.Main;
|
||||||
import org.apache.commons.cli.*;
|
import org.apache.commons.cli.*;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
public class CLIConfig {
|
public class CLIConfig {
|
||||||
|
|
||||||
public static final boolean IS_DEBUG;
|
public static final boolean IS_DEBUG;
|
||||||
public static final boolean UPDATE;
|
public static final boolean UPDATE;
|
||||||
|
public static final File CONFIG;
|
||||||
|
public static final File INSTALL_DIR;
|
||||||
public static final String[] ARGS;
|
public static final String[] ARGS;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
Options options = new Options();
|
Options options = new Options();
|
||||||
options.addOption(new Option("d", "debug", false, "Set the Log Level to Debug"));
|
options.addOption(new Option("d", "debug", false, "Set the Log Level to Debug"));
|
||||||
options.addOption(new Option("u", "update", false, "Update the Default libs"));
|
options.addOption(new Option("u", "update", false, "Update the Default libs"));
|
||||||
|
options.addOption(new Option("c", "config", true, "Use another Config File"));
|
||||||
|
options.addOption(new Option("i", "installdir", true, "Use other Install Dir"));
|
||||||
|
|
||||||
CommandLine cli = null;
|
CommandLine cli = null;
|
||||||
CommandLineParser parser = new DefaultParser();
|
CommandLineParser parser = new DefaultParser();
|
||||||
@ -29,5 +35,15 @@ public class CLIConfig {
|
|||||||
ARGS = cli.getArgs();
|
ARGS = cli.getArgs();
|
||||||
IS_DEBUG = cli.hasOption("d");
|
IS_DEBUG = cli.hasOption("d");
|
||||||
UPDATE = cli.hasOption("u");
|
UPDATE = cli.hasOption("u");
|
||||||
|
if(cli.hasOption("i")) {
|
||||||
|
INSTALL_DIR = new File(cli.getOptionValue("i"));
|
||||||
|
} else {
|
||||||
|
INSTALL_DIR = new File("~/.swlnmngr/");
|
||||||
|
}
|
||||||
|
if(cli.hasOption("c")) {
|
||||||
|
CONFIG = new File(cli.getOptionValue("c"));
|
||||||
|
} else {
|
||||||
|
CONFIG = new File(INSTALL_DIR, "config.json");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,24 +1,36 @@
|
|||||||
package de.chaos.swlnmngr.config;
|
package de.chaos.swlnmngr.config;
|
||||||
|
|
||||||
import de.chaos.swlnmngr.Main;
|
import de.chaos.swlnmngr.Main;
|
||||||
|
import org.apache.logging.log4j.Level;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
import org.json.JSONTokener;
|
import org.json.JSONTokener;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.StandardOpenOption;
|
import java.nio.file.StandardOpenOption;
|
||||||
|
|
||||||
public class Config {
|
public class Config {
|
||||||
|
|
||||||
private static final File CONFIG_FILE = new File("config.json");
|
private static final File CONFIG_FILE = new File(CLIConfig.INSTALL_DIR, "config.json");
|
||||||
|
|
||||||
public static final String[] ADDITIONAL_ARGS;
|
public static final String PROJECT_PATH;
|
||||||
|
public static final File LIB_PATH;
|
||||||
|
public static final String DEFAULTS;
|
||||||
|
public static final URI LIB_URL;
|
||||||
|
|
||||||
|
public static final String USERNAME;
|
||||||
|
public static final String PASSWORD;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
JSONObject config = null;
|
JSONObject config = null;
|
||||||
try {
|
try {
|
||||||
if(!CONFIG_FILE.exists()) {
|
if(!CONFIG_FILE.exists()) {
|
||||||
|
if(CONFIG_FILE.getParentFile().mkdir()) {
|
||||||
|
Main.getLogger().log(Level.DEBUG, "Created Config Folder");
|
||||||
|
}
|
||||||
Files.write(CONFIG_FILE.toPath(), Config.class.getResourceAsStream("/default_config.json").readAllBytes(), StandardOpenOption.CREATE_NEW);
|
Files.write(CONFIG_FILE.toPath(), Config.class.getResourceAsStream("/default_config.json").readAllBytes(), StandardOpenOption.CREATE_NEW);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -28,10 +40,19 @@ public class Config {
|
|||||||
System.exit(1);
|
System.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
ADDITIONAL_ARGS = config.getJSONArray("additionalArgs").toList().toArray(new String[0]);
|
PROJECT_PATH = config.getString("projectPath");
|
||||||
|
LIB_PATH = new File(config.getString("libPath"));
|
||||||
|
DEFAULTS = config.getString("defaultName");
|
||||||
|
try {
|
||||||
|
LIB_URL = new URI(config.getString("libUrl"));
|
||||||
|
} catch (URISyntaxException e) {
|
||||||
|
Main.getLogger().error("libUrl is not a URL", e);
|
||||||
|
System.exit(1);
|
||||||
|
throw new SecurityException(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void reset() {
|
JSONObject credentials = config.getJSONObject("credentials");
|
||||||
|
USERNAME = credentials.getString("username");
|
||||||
|
PASSWORD = credentials.getString("password");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,32 @@
|
|||||||
package de.chaos.swlnmngr.route;
|
package de.chaos.swlnmngr.route;
|
||||||
|
|
||||||
|
import de.chaos.swlnmngr.Main;
|
||||||
|
import de.chaos.swlnmngr.route.routes.InstallRoute;
|
||||||
|
import de.chaos.swlnmngr.route.routes.Route;
|
||||||
|
import de.chaos.swlnmngr.route.routes.UpdateRoute;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
public class Router {
|
public class Router {
|
||||||
|
|
||||||
|
private static final List<Route> ROUTES;
|
||||||
|
|
||||||
|
static {
|
||||||
|
ROUTES = List.of(new InstallRoute(), new UpdateRoute());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void route(String[] args) {
|
||||||
|
for (Route route : ROUTES) {
|
||||||
|
if(route.getName().equalsIgnoreCase(args[0])) {
|
||||||
|
String[] rArgs = new String[args.length - 1];
|
||||||
|
System.arraycopy(args, 1, rArgs, 0, args.length - 1);
|
||||||
|
Main.getLogger().info("Running: {}", route.getName());
|
||||||
|
if(route.route(rArgs)) {
|
||||||
|
System.exit(0);
|
||||||
|
} else {
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
53
src/main/java/de/chaos/swlnmngr/route/routes/InstallRoute.java
Normale Datei
53
src/main/java/de/chaos/swlnmngr/route/routes/InstallRoute.java
Normale Datei
@ -0,0 +1,53 @@
|
|||||||
|
package de.chaos.swlnmngr.route.routes;
|
||||||
|
|
||||||
|
import com.sun.nio.file.ExtendedCopyOption;
|
||||||
|
import de.chaos.swlnmngr.Main;
|
||||||
|
import de.chaos.swlnmngr.config.CLIConfig;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.StandardCopyOption;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public class InstallRoute implements Route {
|
||||||
|
|
||||||
|
private static final String[] defaultFiles = new String[] {"default_config.json", "default_swlnmngr.bat", "default_swlnmngr.sh"};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return "install";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean route(String[] args) {
|
||||||
|
File installDir = CLIConfig.INSTALL_DIR;
|
||||||
|
if(!installDir.exists()) {
|
||||||
|
installDir.mkdir();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (String defaultFile : defaultFiles) {
|
||||||
|
String normalName = defaultFile.replace("default_", "");
|
||||||
|
try {
|
||||||
|
Files.copy(Objects.requireNonNull(InstallRoute.class.getResourceAsStream("/" + defaultFile)), new File(CLIConfig.INSTALL_DIR, normalName).toPath(), StandardCopyOption.REPLACE_EXISTING);
|
||||||
|
} catch (IOException e) {
|
||||||
|
Main.getLogger().error("Could not create File", e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
File jar = new File(getClass().getProtectionDomain().getCodeSource().getLocation().toURI());
|
||||||
|
Main.getLogger().debug(jar);
|
||||||
|
Files.copy(jar.toPath(), new File(CLIConfig.INSTALL_DIR, "SteamWarLinkManager.jar").toPath(), StandardCopyOption.REPLACE_EXISTING);
|
||||||
|
} catch (URISyntaxException e) {
|
||||||
|
Main.getLogger().error("Could parse Jar Location", e);
|
||||||
|
return false;
|
||||||
|
} catch (IOException e) {
|
||||||
|
Main.getLogger().error("Could not Copy JarFile", e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +0,0 @@
|
|||||||
package de.chaos.swlnmngr.route.routes;
|
|
||||||
|
|
||||||
public enum Routes {
|
|
||||||
|
|
||||||
}
|
|
77
src/main/java/de/chaos/swlnmngr/route/routes/UpdateRoute.java
Normale Datei
77
src/main/java/de/chaos/swlnmngr/route/routes/UpdateRoute.java
Normale Datei
@ -0,0 +1,77 @@
|
|||||||
|
package de.chaos.swlnmngr.route.routes;
|
||||||
|
|
||||||
|
import de.chaos.swlnmngr.Main;
|
||||||
|
import de.chaos.swlnmngr.config.Config;
|
||||||
|
import org.apache.http.Header;
|
||||||
|
import org.apache.http.auth.AuthScope;
|
||||||
|
import org.apache.http.auth.UsernamePasswordCredentials;
|
||||||
|
import org.apache.http.client.CredentialsProvider;
|
||||||
|
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||||
|
import org.apache.http.client.methods.HttpGet;
|
||||||
|
import org.apache.http.impl.client.BasicCredentialsProvider;
|
||||||
|
import org.apache.http.impl.client.CloseableHttpClient;
|
||||||
|
import org.apache.http.impl.client.HttpClients;
|
||||||
|
|
||||||
|
import java.io.BufferedOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.util.zip.ZipEntry;
|
||||||
|
import java.util.zip.ZipInputStream;
|
||||||
|
|
||||||
|
public class UpdateRoute implements Route {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return "update";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean route(String[] args) {
|
||||||
|
File defaultLibs = new File(Config.LIB_PATH, Config.DEFAULTS);
|
||||||
|
if (!defaultLibs.mkdirs()) {
|
||||||
|
for (File file : defaultLibs.listFiles()) {
|
||||||
|
file.delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CredentialsProvider provider = new BasicCredentialsProvider();
|
||||||
|
provider.setCredentials(
|
||||||
|
new AuthScope(Config.LIB_URL.getHost(), Config.LIB_URL.getPort()),
|
||||||
|
new UsernamePasswordCredentials(Config.USERNAME, Config.PASSWORD));
|
||||||
|
try (CloseableHttpClient client = HttpClients.custom()
|
||||||
|
.setDefaultCredentialsProvider(provider)
|
||||||
|
.build()) {
|
||||||
|
HttpGet httpGet = new HttpGet(Config.LIB_URL);
|
||||||
|
try (CloseableHttpResponse response = client.execute(httpGet)) {
|
||||||
|
Main.getLogger().debug(response.getStatusLine().getStatusCode() + " " + response.getStatusLine().getReasonPhrase());
|
||||||
|
for (Header allHeader : response.getAllHeaders()) {
|
||||||
|
Main.getLogger().debug(allHeader.getName() + ": " + allHeader.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
Main.getLogger().info("Writing libs...");
|
||||||
|
|
||||||
|
ZipInputStream zis = new ZipInputStream(response.getEntity().getContent());
|
||||||
|
byte[] buffer = new byte[2048];
|
||||||
|
ZipEntry entry;
|
||||||
|
while ((entry = zis.getNextEntry()) != null) {
|
||||||
|
Path filePath = defaultLibs.toPath().resolve(entry.getName());
|
||||||
|
Main.getLogger().debug("Inflating {}...", entry.getName());
|
||||||
|
|
||||||
|
try (FileOutputStream fos = new FileOutputStream(filePath.toFile());
|
||||||
|
BufferedOutputStream bos = new BufferedOutputStream(fos, buffer.length)) {
|
||||||
|
|
||||||
|
int len;
|
||||||
|
while ((len = zis.read(buffer)) > 0) {
|
||||||
|
bos.write(buffer, 0, len);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
@ -3,7 +3,6 @@
|
|||||||
"libPath": "~/libs/",
|
"libPath": "~/libs/",
|
||||||
"defaultName": "default",
|
"defaultName": "default",
|
||||||
"libUrl": "https://steamwar.de/lib.php",
|
"libUrl": "https://steamwar.de/lib.php",
|
||||||
"additionalArgs": [],
|
|
||||||
"credentials": {
|
"credentials": {
|
||||||
"username": "[EnterName]",
|
"username": "[EnterName]",
|
||||||
"password": "[EnterPW]"
|
"password": "[EnterPW]"
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
java -jar ./SteamWarLinkManager.jar
|
@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
java -jar ./SteamWarLinkManager.jar
|
11
src/test/java/RunWithArgs.java
Normale Datei
11
src/test/java/RunWithArgs.java
Normale Datei
@ -0,0 +1,11 @@
|
|||||||
|
import de.chaos.swlnmngr.Main;
|
||||||
|
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
public class RunWithArgs {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Scanner scanner = new Scanner(System.in);
|
||||||
|
String arg = scanner.nextLine();
|
||||||
|
Main.main(arg.split(" "));
|
||||||
|
}
|
||||||
|
}
|
1
test.sh
Normale Datei
1
test.sh
Normale Datei
@ -0,0 +1 @@
|
|||||||
|
java -jar target/SteamWarLinkManager.jar -i /home/chaos/IdeaProjects/swlnmngr/test/ install
|
In neuem Issue referenzieren
Einen Benutzer sperren