diff --git a/pom.xml b/pom.xml
index 4cfcb7a..e697fa0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -118,12 +118,6 @@
json
20211205
-
- org.projectlombok
- lombok
- 1.18.22
- provided
-
commons-cli
commons-cli
@@ -150,9 +144,9 @@
2.6
- com.github.vatbub
- mslinks
- 1.0.6.2
+ commons-io
+ commons-io
+ 2.11.0
org.jetbrains.kotlin
diff --git a/src/main/java/de/chaos/swlnmngr/Main.java b/src/main/java/de/chaos/swlnmngr/Main.java
index d7ce95a..75e3296 100644
--- a/src/main/java/de/chaos/swlnmngr/Main.java
+++ b/src/main/java/de/chaos/swlnmngr/Main.java
@@ -2,7 +2,6 @@ package de.chaos.swlnmngr;
import de.chaos.swlnmngr.config.CLIConfig;
import de.chaos.swlnmngr.route.Router;
-import lombok.Getter;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -13,7 +12,6 @@ import java.util.Arrays;
public class Main {
private static final Logger logger = LogManager.getLogger(Main.class);
- @Getter
private static String[] allArgs;
public static void main(String[] args) {
@@ -36,4 +34,8 @@ public class Main {
public static Logger getLogger() {
return logger;
}
+
+ public static String[] getAllArgs() {
+ return allArgs;
+ }
}
diff --git a/src/main/java/de/chaos/swlnmngr/config/CLIConfig.java b/src/main/java/de/chaos/swlnmngr/config/CLIConfig.java
index 2d164b6..058ece6 100644
--- a/src/main/java/de/chaos/swlnmngr/config/CLIConfig.java
+++ b/src/main/java/de/chaos/swlnmngr/config/CLIConfig.java
@@ -4,6 +4,8 @@ import de.chaos.swlnmngr.Main;
import org.apache.commons.cli.*;
import java.io.File;
+import java.io.IOException;
+import java.net.URISyntaxException;
public class CLIConfig {
@@ -12,6 +14,7 @@ public class CLIConfig {
public static final File CONFIG;
public static final File INSTALL_DIR;
public static final String[] ARGS;
+ public static final boolean INSTALL_DIR_IS_SET;
static {
Options options = new Options();
@@ -43,8 +46,21 @@ public class CLIConfig {
NO_UPDATE = cli.hasOption("u");
if(cli.hasOption("i")) {
INSTALL_DIR = new File(cli.getOptionValue("i"));
+ INSTALL_DIR_IS_SET = true;
} else {
- INSTALL_DIR = new File(System.getProperty("user.home"), ".swlnmngr/").toPath().normalize().toFile();
+ try {
+ INSTALL_DIR = new File(CLIConfig.class.getProtectionDomain()
+ .getCodeSource()
+ .getLocation()
+ .toURI()
+ .getPath())
+ .getCanonicalFile()
+ .getParentFile();
+ INSTALL_DIR_IS_SET = false;
+ } catch (IOException | URISyntaxException e) {
+ Main.getLogger().error(e.getMessage(), e);
+ throw new SecurityException(e);
+ }
}
if(cli.hasOption("c")) {
CONFIG = new File(cli.getOptionValue("c"));
diff --git a/src/main/java/de/chaos/swlnmngr/route/routes/InstallRoute.java b/src/main/java/de/chaos/swlnmngr/route/routes/InstallRoute.java
index cf51554..49e00ba 100644
--- a/src/main/java/de/chaos/swlnmngr/route/routes/InstallRoute.java
+++ b/src/main/java/de/chaos/swlnmngr/route/routes/InstallRoute.java
@@ -2,7 +2,6 @@ package de.chaos.swlnmngr.route.routes;
import de.chaos.swlnmngr.Main;
import de.chaos.swlnmngr.config.CLIConfig;
-import mslinks.ShellLink;
import org.apache.commons.lang.SystemUtils;
import org.json.JSONObject;
import org.json.JSONTokener;
@@ -12,16 +11,13 @@ import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
-import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.nio.file.StandardOpenOption;
-import java.nio.file.attribute.FileAttribute;
-import java.nio.file.attribute.PosixFilePermission;
import java.util.Objects;
public class InstallRoute implements Route {
- private static final String[] defaultFiles = new String[] {"default_swlnmngr.bat", "default_swlnmngr.sh"};
+ private static final String[] defaultFiles = new String[] {"default_swlnmngr.bat", "default_swlnmngr.sh", "default_swlnmngr_admin.bat"};
@Override
public String getName() {
@@ -31,9 +27,12 @@ public class InstallRoute implements Route {
@Override
public boolean route(String[] args) {
File installDir = CLIConfig.INSTALL_DIR;
+ if (!CLIConfig.INSTALL_DIR_IS_SET) {
+ installDir = new File(System.getProperty("user.home", ".swlnmngr"));
+ }
if(!installDir.exists()) {
try {
- Files.createDirectories(CLIConfig.INSTALL_DIR.toPath());
+ Files.createDirectories(installDir.toPath());
} catch (IOException e) {
Main.getLogger().error("Could not create Install Directory", e);
return false;
@@ -43,8 +42,8 @@ public class InstallRoute implements Route {
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);
- new File(CLIConfig.INSTALL_DIR, normalName).setExecutable(true, true);
+ Files.copy(Objects.requireNonNull(InstallRoute.class.getResourceAsStream("/" + defaultFile)), new File(installDir, normalName).toPath(), StandardCopyOption.REPLACE_EXISTING);
+ new File(installDir, normalName).setExecutable(true, true);
} catch (IOException e) {
Main.getLogger().error("Could not create File", e);
return false;
@@ -53,18 +52,16 @@ public class InstallRoute implements Route {
if(SystemUtils.IS_OS_UNIX) {
try {
- Files.deleteIfExists(new File(CLIConfig.INSTALL_DIR, "swlnmngr").toPath());
- Files.createSymbolicLink(new File(CLIConfig.INSTALL_DIR, "swlnmngr").toPath(), new File(CLIConfig.INSTALL_DIR, "swlnmngr.sh").toPath());
+ Files.deleteIfExists(new File(installDir, "swlnmngr").toPath());
+ Files.createSymbolicLink(new File(installDir, "swlnmngr").toPath(), new File(installDir, "swlnmngr.sh").toPath());
} catch (IOException e) {
Main.getLogger().error("Could not create SymLink", e);
return false;
}
} else if(SystemUtils.IS_OS_WINDOWS) {
try {
- ShellLink link = ShellLink.createLink(new File(CLIConfig.INSTALL_DIR, "swlnmngr.bat").getAbsolutePath(), new File(CLIConfig.INSTALL_DIR, "swlnmngr.lnk").getAbsolutePath()).setWorkingDir(CLIConfig.INSTALL_DIR.getAbsolutePath());
- link.getHeader().getLinkFlags().setRunAsUser();
- link.saveTo(new File(CLIConfig.INSTALL_DIR, "swlnmngr.lnk").getAbsolutePath());
- Files.writeString(new File(CLIConfig.INSTALL_DIR, "swlnmngr.bat").toPath(), Files.readString(new File(CLIConfig.INSTALL_DIR, "swlnmngr.bat").toPath()).replace("${iDir}", CLIConfig.INSTALL_DIR.getAbsolutePath()), StandardCharsets.UTF_8, StandardOpenOption.TRUNCATE_EXISTING);
+ Files.writeString(new File(installDir, "swlnmngr.bat").toPath(), Files.readString(new File(installDir, "swlnmngr.bat").toPath()).replace("${iDir}", installDir.getAbsolutePath()), StandardCharsets.UTF_8, StandardOpenOption.TRUNCATE_EXISTING);
+ Files.writeString(new File(installDir, "swlnmngr_admin.bat").toPath(), Files.readString(new File(installDir, "swlnmngr_admin.bat").toPath()).replace("${iDir}", installDir.getAbsolutePath()), StandardCharsets.UTF_8, StandardOpenOption.TRUNCATE_EXISTING);
} catch (IOException e) {
Main.getLogger().error("Could not create Link", e);
return false;
@@ -109,7 +106,7 @@ public class InstallRoute implements Route {
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);
+ Files.copy(jar.toPath(), new File(installDir, "SteamWarLinkManager.jar").toPath(), StandardCopyOption.REPLACE_EXISTING);
} catch (URISyntaxException e) {
Main.getLogger().error("Could parse Jar Location", e);
return false;
diff --git a/src/main/java/de/chaos/swlnmngr/route/routes/LinkRoute.java b/src/main/java/de/chaos/swlnmngr/route/routes/LinkRoute.java
index 3b2fd95..debf7e8 100644
--- a/src/main/java/de/chaos/swlnmngr/route/routes/LinkRoute.java
+++ b/src/main/java/de/chaos/swlnmngr/route/routes/LinkRoute.java
@@ -2,6 +2,7 @@ package de.chaos.swlnmngr.route.routes;
import de.chaos.swlnmngr.Main;
import de.chaos.swlnmngr.config.Config;
+import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
@@ -36,7 +37,13 @@ public class LinkRoute implements Route {
}
File link = new File(projectDir, "lib");
try {
- Files.deleteIfExists(link.toPath());
+ if(link.exists()) {
+ if(link.isDirectory()) {
+ FileUtils.deleteDirectory(link);
+ } else {
+ FileUtils.delete(link);
+ }
+ }
Main.getLogger().debug(libsFile);
Main.getLogger().debug(link);
Path linkPath = Files.createSymbolicLink(link.toPath(), libsFile.toPath());
diff --git a/src/main/resources/default_swlnmngr.bat b/src/main/resources/default_swlnmngr.bat
index eb0de03..b944970 100644
--- a/src/main/resources/default_swlnmngr.bat
+++ b/src/main/resources/default_swlnmngr.bat
@@ -1,5 +1,17 @@
+@echo off
+:: Variables
+SET JavaHome=java
+SET Home=${iDir}
+
+:: Code
+title Request Admin
+
+Net session >nul 2>&1 || (PowerShell start -verb runas '%~0' & exit)
+
+title SteamWarLinkManager
set args=--help
set /p args=Arguments:
echo %args%
-java -jar ${iDir}\SteamWarLinkManager.jar %args% %*
-pause
\ No newline at end of file
+%JavaHome% -jar ${iDir}\SteamWarLinkManager.jar %args% %* -i %Home%
+pause
+exit
\ No newline at end of file
diff --git a/src/main/resources/default_swlnmngr_admin.bat b/src/main/resources/default_swlnmngr_admin.bat
new file mode 100644
index 0000000..9dce24f
--- /dev/null
+++ b/src/main/resources/default_swlnmngr_admin.bat
@@ -0,0 +1,5 @@
+@echo off
+
+title Admin
+runas /noprofile /savecred /user:Admin ${iDir}\swlnmngr.bat
+exit
\ No newline at end of file