work around osx anti-automation measures

Former-commit-id: 7d4e53b82c
Former-commit-id: 8b79c9cf398a93a4fe42a3446ef856c9d5cee351
This commit is contained in:
idk
2022-10-01 17:26:19 -04:00
parent 417255b22f
commit 564139b02e
4 changed files with 82 additions and 28 deletions

View File

@ -25,7 +25,7 @@
</target> </target>
<property name="javac.compilerargs" value="" /> <property name="javac.compilerargs" value="" />
<property name="javac.version" value="1.7" /> <property name="javac.version" value="1.8" />
<target name="compile"> <target name="compile">
<mkdir dir="./build" /> <mkdir dir="./build" />

View File

@ -1,8 +1,12 @@
package net.i2p.i2pfirefox; package net.i2p.i2pfirefox;
import java.io.File; import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.stream.Stream;
/** /**
* I2PChromium.java * I2PChromium.java
@ -507,19 +511,39 @@ public class I2PChromium extends I2PCommonBrowser {
} }
} }
if (isOSX()) { if (isOSX()) {
String argString = String argString = join(Arrays.copyOfRange(newArgs, 1, newArgs.length));
join(Arrays.copyOfRange(newArgs, 1, newArgs.length)); String[] fg = {""};
String[] finalArgs = {"open", newArgs[0], "--args", argString}; String[] lastArgs =
return new ProcessBuilder(finalArgs).directory( Stream.concat(Arrays.stream(newArgs), Arrays.stream(fg))
I2PChromiumProfileBuilder.runtimeDirectory(true)); .toArray(String[] ::new);
// String[] finalArgs = Stream.concat(Arrays.stream(initArgs),
// Arrays.stream(lastArgs)).toArray(String[]::new);
File bashScript = new File("i2pchromium.sh");
if (bashScript.exists()) {
bashScript.delete();
}
try {
FileWriter bWriter = new FileWriter(bashScript);
PrintWriter bpWriter = new PrintWriter(bWriter);
bpWriter.println("#! /usr/bin/env sh");
bpWriter.println(join(lastArgs));
bpWriter.close();
bWriter.close();
if (!bashScript.canExecute()) {
bashScript.setExecutable(true);
}
return new ProcessBuilder(bashScript.getAbsolutePath())
.directory(I2PFirefoxProfileBuilder.runtimeDirectory(true));
} catch (IOException e) {
logger.warning(e.toString());
}
} else { } else {
return new ProcessBuilder(newArgs).directory( return new ProcessBuilder(newArgs).directory(
I2PChromiumProfileBuilder.runtimeDirectory(true)); I2PChromiumProfileBuilder.runtimeDirectory(true));
} }
} else {
logger.info("No Chromium found.");
return new ProcessBuilder(args);
} }
logger.info("No Chromium found.");
return new ProcessBuilder(args);
} }
public Process launchAndDetatch(boolean privateWindow, String[] url) { public Process launchAndDetatch(boolean privateWindow, String[] url) {

View File

@ -418,11 +418,11 @@ public class I2PCommonBrowser {
public void setProxyTimeoutTime(int time) { CONFIGURED_TIMEOUT = time; } public void setProxyTimeoutTime(int time) { CONFIGURED_TIMEOUT = time; }
/** /**
* *
*/ */
protected static String join(String[] arr){ protected static String join(String[] arr) {
StringBuilder val = new StringBuilder(""); StringBuilder val = new StringBuilder("");
for (int x = 0; x < arr.length; x++){ for (int x = 0; x < arr.length; x++) {
val.append(" "); val.append(" ");
val.append(arr[x]); val.append(arr[x]);
} }

View File

@ -1,10 +1,13 @@
package net.i2p.i2pfirefox; package net.i2p.i2pfirefox;
import java.io.File; import java.io.File;
import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.Stream;
/** /**
* I2PFirefox.java * I2PFirefox.java
@ -58,14 +61,18 @@ public class I2PFirefox extends I2PCommonBrowser {
return exePath; return exePath;
} }
private static String[] FIND_FIREFOX_SEARCH_PATHS_OSX() { private static String[] FIND_FIREFOX_SEARCH_PATHS_OSX() {
String[] path = String[] path = new String[] {"/Applications/Firefox.app/Contents/MacOS",
new String[] {"/Applications/Firefox.app", "/Applications/Waterfox.app", "/Applications/Waterfox.app/Contents/MacOS",
"/Applications/Librewolf.app"}; "/Applications/Librewolf.app/Contents/MacOS"};
String[] exePath = new String[path.length]; String[] exes = new String[] {"firefox", "firefox-bin", "firefox-esr",
"waterfox", "waterfox-bin", "librewolf"};
String[] exePath = new String[path.length * exes.length];
int i = 0; int i = 0;
for (String s : path) { for (String s : path) {
exePath[i] = s; for (String exe : exes) {
i++; exePath[i] = s + "/" + exe;
i++;
}
} }
return exePath; return exePath;
} }
@ -439,20 +446,43 @@ public class I2PFirefox extends I2PCommonBrowser {
} }
} }
if (isOSX()) { if (isOSX()) {
String argString = String argString = join(Arrays.copyOfRange(newArgs, 1, newArgs.length));
join(Arrays.copyOfRange(newArgs, 1, newArgs.length)); String[] fg = {""};
String[] finalArgs = {"open", newArgs[0], "--args", argString}; String[] lastArgs =
return new ProcessBuilder(finalArgs).directory( Stream.concat(Arrays.stream(newArgs), Arrays.stream(fg))
I2PFirefoxProfileBuilder.runtimeDirectory(true)); .toArray(String[] ::new);
// String[] finalArgs = Stream.concat(Arrays.stream(initArgs),
// Arrays.stream(lastArgs)).toArray(String[]::new);
File bashScript = new File("i2pfirefox.sh");
if (bashScript.exists()) {
bashScript.delete();
}
try {
FileWriter bWriter = new FileWriter(bashScript);
PrintWriter bpWriter = new PrintWriter(bWriter);
bpWriter.println("#! /usr/bin/env sh");
bpWriter.println(join(lastArgs));
bpWriter.close();
bWriter.close();
if (!bashScript.canExecute()) {
bashScript.setExecutable(true);
}
return new ProcessBuilder(bashScript.getAbsolutePath())
.directory(I2PFirefoxProfileBuilder.runtimeDirectory(true));
} catch (IOException e) {
logger.warning(e.toString());
}
return null;
} else { } else {
return new ProcessBuilder(newArgs).directory( return new ProcessBuilder(newArgs).directory(
I2PFirefoxProfileBuilder.runtimeDirectory(true)); I2PFirefoxProfileBuilder.runtimeDirectory(true));
} }
} else { } // else {
logger.info("No Firefox found."); logger.info("No Firefox found.");
return new ProcessBuilder(args); return new ProcessBuilder(args);
} //}
// return null;
} }
private String usabilityMode() { private String usabilityMode() {
@ -489,7 +519,7 @@ public class I2PFirefox extends I2PCommonBrowser {
} }
} }
if (validateProfileFirstRun(profileDirectory)) { if (validateProfileFirstRun(profileDirectory)) {
if (isWindows() || isOSX()) { if (isWindows()) {
ProcessBuilder hpb = headlessProcessBuilder(url); ProcessBuilder hpb = headlessProcessBuilder(url);
try { try {
Process hp = hpb.start(); Process hp = hpb.start();