Refactoring
This commit is contained in:
6
.idea/GitLink.xml
generated
Normal file
6
.idea/GitLink.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="uk.co.ben_gibson.git.link.SettingsState">
|
||||||
|
<option name="host" value="e0f86390-1091-4871-8aeb-f534fbc99cf0" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
@@ -29,109 +29,8 @@ import java.util.concurrent.ExecutorService;
|
|||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
|
|
||||||
public class Main {
|
public class Main {
|
||||||
@Getter
|
|
||||||
private static NetworkServer pipelineServer;
|
|
||||||
private static File contentFolder;
|
|
||||||
private static File errorsFolder;
|
|
||||||
|
|
||||||
public static final class ServerCertificateFolderStructure {
|
|
||||||
public final File certificatesFolder;
|
|
||||||
|
|
||||||
public final File publicFolder;
|
|
||||||
public final File privateFolder;
|
|
||||||
|
|
||||||
public final File privateCAFolder;
|
|
||||||
public final File privateServerFolder;
|
|
||||||
|
|
||||||
public final File publicCAFolder;
|
|
||||||
public final File publicServerFolder;
|
|
||||||
|
|
||||||
public ServerCertificateFolderStructure() {
|
|
||||||
certificatesFolder = new File("certificates");
|
|
||||||
|
|
||||||
publicFolder = new File(certificatesFolder, "public");
|
|
||||||
privateFolder = new File(certificatesFolder, "private");
|
|
||||||
|
|
||||||
privateCAFolder = new File(privateFolder, "ca");
|
|
||||||
privateServerFolder = new File(privateFolder, "server");
|
|
||||||
|
|
||||||
publicCAFolder = new File(publicFolder, "ca");
|
|
||||||
publicServerFolder = new File(publicFolder, "server");
|
|
||||||
|
|
||||||
if (!certificatesFolder.exists()) certificatesFolder.mkdirs();
|
|
||||||
|
|
||||||
if (!publicFolder.exists()) publicFolder.mkdirs();
|
|
||||||
if (!privateFolder.exists()) privateFolder.mkdirs();
|
|
||||||
|
|
||||||
if (!privateCAFolder.exists()) privateCAFolder.mkdirs();
|
|
||||||
if (!privateServerFolder.exists()) privateServerFolder.mkdirs();
|
|
||||||
|
|
||||||
if (!publicCAFolder.exists()) publicCAFolder.mkdirs();
|
|
||||||
if (!publicServerFolder.exists()) publicServerFolder.mkdirs();
|
|
||||||
}
|
|
||||||
|
|
||||||
public final String caPrefix = "ca_server_";
|
|
||||||
public final String certPrefix = "cert_server_";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
private static ServerCertificateFolderStructure folderStructure;
|
|
||||||
|
|
||||||
private static ExecutorService threadPool;
|
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception {
|
public static void main(String[] args) throws Exception {
|
||||||
|
|
||||||
folderStructure = new ServerCertificateFolderStructure();
|
|
||||||
threadPool = Executors.newCachedThreadPool();
|
|
||||||
|
|
||||||
ConfigurationManager configurationManager = getConfigurationManager();
|
|
||||||
|
|
||||||
File certificatesFolder = new File("certificates");
|
|
||||||
if (!certificatesFolder.exists()) certificatesFolder.mkdir();
|
|
||||||
|
|
||||||
contentFolder = new File("content");
|
|
||||||
errorsFolder = new File("errors");
|
|
||||||
|
|
||||||
if (!contentFolder.exists()) contentFolder.mkdir();
|
|
||||||
if (!errorsFolder.exists()) errorsFolder.mkdir();
|
|
||||||
|
|
||||||
File certFile = new File(folderStructure.publicServerFolder, folderStructure.certPrefix + NetworkUtils.getPublicIPAddress() + ".crt");
|
|
||||||
File keyFile = new File(folderStructure.privateServerFolder, folderStructure.certPrefix + NetworkUtils.getPublicIPAddress() + ".key");
|
|
||||||
|
|
||||||
checkFileExists(folderStructure.publicServerFolder, folderStructure.certPrefix, ".crt");
|
|
||||||
checkFileExists(folderStructure.privateServerFolder, folderStructure.certPrefix, ".key");
|
|
||||||
|
|
||||||
File authFile = new File("auth.pwd");
|
|
||||||
File rulesFile = new File("rules.json");
|
|
||||||
|
|
||||||
if (!authFile.exists()) {
|
|
||||||
authFile.createNewFile();
|
|
||||||
FileUtils.writeFile(authFile, """
|
|
||||||
admin:5e884898da28047151d0e56f8dc6292773603d0d6aabbddab8f91d8e5f99f6c7
|
|
||||||
user:e99a18c428cb38d5f260853678922e03abd8335f
|
|
||||||
""");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!rulesFile.exists()) {
|
|
||||||
rulesFile.createNewFile();
|
|
||||||
FileUtils.writeFile(rulesFile, """
|
|
||||||
{
|
|
||||||
"allow": [
|
|
||||||
"index.html",
|
|
||||||
"css/*",
|
|
||||||
"private/info.php"
|
|
||||||
],
|
|
||||||
"deny": [
|
|
||||||
"private/*"
|
|
||||||
],
|
|
||||||
"auth": [
|
|
||||||
"private/*",
|
|
||||||
"admin/*"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
""");
|
|
||||||
}
|
|
||||||
|
|
||||||
AuthManager.loadAuthFile(authFile);
|
AuthManager.loadAuthFile(authFile);
|
||||||
RuleManager.loadRules(rulesFile);
|
RuleManager.loadRules(rulesFile);
|
||||||
|
|
||||||
@@ -178,51 +77,6 @@ public class Main {
|
|||||||
}).start();
|
}).start();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ConfigurationManager getConfigurationManager() throws IOException {
|
|
||||||
File configFile = new File("settings.properties");
|
|
||||||
if (!configFile.exists()) configFile.createNewFile();
|
|
||||||
|
|
||||||
ConfigurationManager configurationManager = new ConfigurationManager(configFile);
|
|
||||||
configurationManager.loadProperties();
|
|
||||||
|
|
||||||
if (!configurationManager.isSet("port.webserver")) {
|
|
||||||
configurationManager.set("port.webserver", 9824);
|
|
||||||
configurationManager.saveProperties();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!configurationManager.isSet("port.pipeline")) {
|
|
||||||
configurationManager.set("port.pipeline", 9389);
|
|
||||||
configurationManager.saveProperties();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!configurationManager.isSet("filemaxuploadmb")) {
|
|
||||||
configurationManager.set("filemaxuploadmb", 1000);
|
|
||||||
configurationManager.saveProperties();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!configurationManager.isSet("sessionexpireminutes")) {
|
|
||||||
configurationManager.set("sessionexpireminutes", 60);
|
|
||||||
configurationManager.saveProperties();
|
|
||||||
}
|
|
||||||
|
|
||||||
return configurationManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void checkFileExists(File folder, String prefix, String extension) throws CertificateException, IOException {
|
|
||||||
boolean found = false;
|
|
||||||
if (folder == null) throw new FileNotFoundException("Folder does not exist");
|
|
||||||
|
|
||||||
File[] files = folder.listFiles();
|
|
||||||
if (files == null || files.length == 0) throw new FileNotFoundException("Folder " + folder.getAbsolutePath() + " is empty");
|
|
||||||
|
|
||||||
for (File file : files) {
|
|
||||||
if (!file.getName().startsWith(prefix) || !file.getName().endsWith(extension)) throw new CertificateException(file.getAbsolutePath() + " is not valid");
|
|
||||||
if (!found) found = file.getName().equalsIgnoreCase(prefix + NetworkUtils.getPublicIPAddress() + extension);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!found) throw new CertificateException("Missing " + prefix + NetworkUtils.getPublicIPAddress() + extension);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void handleBrowser(SSLSocket client) {
|
private static void handleBrowser(SSLSocket client) {
|
||||||
try (InputStream in = client.getInputStream(); OutputStream out = client.getOutputStream()) {
|
try (InputStream in = client.getInputStream(); OutputStream out = client.getOutputStream()) {
|
||||||
BufferedReader reader = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8));
|
BufferedReader reader = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8));
|
||||||
|
|||||||
Reference in New Issue
Block a user