2022-08-30 11:34:32 -04:00
|
|
|
package net.i2p.i2pfirefox;
|
|
|
|
|
|
|
|
import java.io.File;
|
2022-08-30 14:22:47 -04:00
|
|
|
import java.io.InputStream;
|
|
|
|
import java.nio.file.Files;
|
|
|
|
import java.nio.file.StandardCopyOption;
|
|
|
|
import java.util.zip.ZipEntry;
|
|
|
|
import java.util.zip.ZipInputStream;
|
2022-08-30 11:34:32 -04:00
|
|
|
|
|
|
|
public class I2PCommonBrowser {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* get the runtime directory, creating it if create=true
|
|
|
|
*
|
|
|
|
* @param create if true, create the runtime directory if it does not exist
|
|
|
|
* @return the runtime directory, or null if it could not be created
|
|
|
|
* @since 0.0.1
|
|
|
|
*/
|
|
|
|
public static File runtimeDirectory(boolean create, String override) {
|
|
|
|
String rtd = runtimeDirectory(override);
|
|
|
|
File rtdFile = new File(rtd);
|
|
|
|
if (create) {
|
|
|
|
if (!rtdFile.exists()) {
|
|
|
|
rtdFile.mkdir();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return new File(rtd);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* get the correct runtime directory
|
|
|
|
*
|
|
|
|
* @return the runtime directory, or null if it could not be created or found
|
|
|
|
* @since 0.0.1
|
|
|
|
*/
|
|
|
|
public static String runtimeDirectory(String override) {
|
|
|
|
// get the I2P_FIREFOX_DIR environment variable
|
|
|
|
String rtd = System.getenv(override);
|
|
|
|
// if it is not null and not empty
|
|
|
|
if (rtd != null && !rtd.isEmpty()) {
|
|
|
|
// check if the file exists
|
|
|
|
File rtdFile = new File(rtd);
|
|
|
|
if (rtdFile.exists()) {
|
|
|
|
// if it does, return it
|
|
|
|
return rtd;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// obtain the PLUGIN environment variable
|
|
|
|
String plugin = System.getenv("PLUGIN");
|
|
|
|
if (plugin != null && !plugin.isEmpty()) {
|
|
|
|
File pluginDir = new File(plugin);
|
|
|
|
if (pluginDir.exists()) {
|
|
|
|
return pluginDir.toString();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
String userDir = System.getProperty("user.dir");
|
|
|
|
if (userDir != null && !userDir.isEmpty()) {
|
|
|
|
File userDir1 = new File(userDir);
|
|
|
|
if (userDir1.exists()) {
|
|
|
|
return userDir1.toString();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
String homeDir = System.getProperty("user.home");
|
|
|
|
if (homeDir != null && !homeDir.isEmpty()) {
|
|
|
|
File homeDir1 = new File(homeDir+"/.i2p");
|
|
|
|
if (homeDir1.exists()) {
|
|
|
|
return homeDir.toString();
|
|
|
|
}
|
|
|
|
File homeDir2 = new File(homeDir+"/i2p");
|
|
|
|
if (homeDir2.exists()) {
|
|
|
|
return homeDir2.toString();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return "";
|
|
|
|
}
|
2022-08-30 14:22:47 -04:00
|
|
|
|
|
|
|
public boolean unpackProfile(String profileDirectory, String browser, String base) {
|
|
|
|
System.out.println("Unpacking base profile to " + profileDirectory);
|
|
|
|
try {
|
|
|
|
final InputStream resources = this.getClass().getClassLoader().getResourceAsStream("i2p."+browser+"."+base+".profile.zip");
|
|
|
|
if (resources == null) {
|
|
|
|
System.out.println("Could not find resources");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
System.out.println(resources.toString());
|
|
|
|
// InputStream corresponds to a zip file. Unzip it.
|
|
|
|
//Files.copy(r, new File(profileDirectory).toPath(), StandardCopyOption.REPLACE_EXISTING);
|
|
|
|
ZipInputStream zis = new ZipInputStream(resources);
|
|
|
|
ZipEntry entry;
|
|
|
|
// while there are entries I process them
|
|
|
|
while ((entry = zis.getNextEntry()) != null)
|
|
|
|
{
|
|
|
|
System.out.println("entry: " + entry.getName() + ", " + entry.getSize());
|
|
|
|
// consume all the data from this entry
|
|
|
|
if (entry.isDirectory()) {
|
|
|
|
System.out.println("Creating directory: " + entry.getName());
|
|
|
|
File dir = new File(profileDirectory + "/" + entry.getName());
|
|
|
|
dir.mkdirs();
|
|
|
|
} else {
|
|
|
|
System.out.println("Creating file: " + entry.getName());
|
|
|
|
File file = new File(profileDirectory + "/" + entry.getName());
|
|
|
|
file.createNewFile();
|
|
|
|
Files.copy(zis, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
|
|
|
|
}
|
|
|
|
while (zis.available() > 0)
|
|
|
|
zis.read();
|
|
|
|
// I could close the entry, but getNextEntry does it automatically
|
|
|
|
// zis.closeEntry()
|
|
|
|
}
|
|
|
|
// loop through the Enumeration
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
System.out.println("Error copying profile files: " + e.getMessage());
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
2022-08-30 11:34:32 -04:00
|
|
|
}
|