Reformatted code using IntelliJ
This commit is contained in:
@@ -52,6 +52,7 @@ public abstract class ProtocolClient extends DefaultMethodsOverrider {
|
||||
|
||||
/**
|
||||
* Initializes the ProtocolClient, setting up certificate folders and the DNS client connection.
|
||||
*
|
||||
* @throws CertificateException if there are issues with the certificates.
|
||||
* @throws IOException if there are I/O issues during initialization.
|
||||
*/
|
||||
@@ -69,6 +70,7 @@ public abstract class ProtocolClient extends DefaultMethodsOverrider {
|
||||
|
||||
/**
|
||||
* Gets the DNS connection client.
|
||||
*
|
||||
* @return the NetworkClient handling the DNS connection.
|
||||
*/
|
||||
public final NetworkClient getClientDNSConnection() {
|
||||
@@ -77,9 +79,10 @@ public abstract class ProtocolClient extends DefaultMethodsOverrider {
|
||||
|
||||
/**
|
||||
* Creates a web connection to the specified domain and ports.
|
||||
* @param domain the target domain for the web connection.
|
||||
*
|
||||
* @param domain the target domain for the web connection.
|
||||
* @param pipelinePort the port used for the pipeline connection.
|
||||
* @param webPort the port used for the web connection.
|
||||
* @param webPort the port used for the web connection.
|
||||
* @throws Exception if there are issues creating the web connection or if the protocol is unsupported.
|
||||
*/
|
||||
public final void createWebConnection(Domain domain, int pipelinePort, int webPort) throws Exception {
|
||||
@@ -103,6 +106,7 @@ public abstract class ProtocolClient extends DefaultMethodsOverrider {
|
||||
|
||||
/**
|
||||
* Checks if the required certificate files exist in the specified folder.
|
||||
*
|
||||
* @param folder the folder to check for certificate files.
|
||||
* @param prefix the prefix of the certificate files.
|
||||
* @param extension the extension of the certificate files.
|
||||
@@ -136,6 +140,7 @@ public abstract class ProtocolClient extends DefaultMethodsOverrider {
|
||||
|
||||
/**
|
||||
* Gets the protocol version of the connected server.
|
||||
*
|
||||
* @return the ProtocolVersion of the server, or PV_1_0_0_CLASSIC if not set.
|
||||
*/
|
||||
public final ProtocolVersion getServerVersion() {
|
||||
@@ -144,6 +149,7 @@ public abstract class ProtocolClient extends DefaultMethodsOverrider {
|
||||
|
||||
/**
|
||||
* Sets the protocol version of the connected server.
|
||||
*
|
||||
* @param serverVersion the ProtocolVersion to set for the server.
|
||||
*/
|
||||
public final void setServerVersion(ProtocolVersion serverVersion) {
|
||||
@@ -152,6 +158,7 @@ public abstract class ProtocolClient extends DefaultMethodsOverrider {
|
||||
|
||||
/**
|
||||
* Handles DNS disconnection events, resetting the server version and closing the web client connection if necessary.
|
||||
*
|
||||
* @param event the ClientDisconnectedEvent triggered on DNS disconnection.
|
||||
*/
|
||||
public final void onDNSDisconnect(ClientDisconnectedEvent event) {
|
||||
@@ -170,6 +177,7 @@ public abstract class ProtocolClient extends DefaultMethodsOverrider {
|
||||
|
||||
/**
|
||||
* Checks if the connected server is a stable server.
|
||||
*
|
||||
* @return true if the server is stable, false otherwise.
|
||||
*/
|
||||
public final boolean isStableServer() {
|
||||
@@ -179,6 +187,7 @@ public abstract class ProtocolClient extends DefaultMethodsOverrider {
|
||||
|
||||
/**
|
||||
* Checks if the connected server or its compatible versions support stable protocol.
|
||||
*
|
||||
* @return true if stable protocol is supported, false otherwise.
|
||||
*/
|
||||
public final boolean supportServerStable() {
|
||||
@@ -195,6 +204,7 @@ public abstract class ProtocolClient extends DefaultMethodsOverrider {
|
||||
|
||||
/**
|
||||
* Checks if the connected server is a beta server.
|
||||
*
|
||||
* @return true if the server is beta, false otherwise.
|
||||
*/
|
||||
public final boolean isBetaServer() {
|
||||
@@ -204,6 +214,7 @@ public abstract class ProtocolClient extends DefaultMethodsOverrider {
|
||||
|
||||
/**
|
||||
* Checks if the connected server or its compatible versions support beta protocol.
|
||||
*
|
||||
* @return true if beta protocol is supported, false otherwise.
|
||||
*/
|
||||
public final boolean supportServerBeta() {
|
||||
@@ -220,6 +231,7 @@ public abstract class ProtocolClient extends DefaultMethodsOverrider {
|
||||
|
||||
/**
|
||||
* Checks if the connected server is a classic server.
|
||||
*
|
||||
* @return true if the server is classic, false otherwise.
|
||||
*/
|
||||
public final boolean isClassicServer() {
|
||||
@@ -229,6 +241,7 @@ public abstract class ProtocolClient extends DefaultMethodsOverrider {
|
||||
|
||||
/**
|
||||
* Checks if the connected server or its compatible versions support classic protocol.
|
||||
*
|
||||
* @return true if classic protocol is supported, false otherwise.
|
||||
*/
|
||||
public final boolean supportServerClassic() {
|
||||
@@ -245,6 +258,7 @@ public abstract class ProtocolClient extends DefaultMethodsOverrider {
|
||||
|
||||
/**
|
||||
* Checks if the connected server supports the protocol version of the given packet.
|
||||
*
|
||||
* @param packet the OACPacket to check against the server's supported protocol version.
|
||||
* @return true if the server supports the packet's protocol version, false otherwise.
|
||||
*/
|
||||
@@ -255,6 +269,7 @@ public abstract class ProtocolClient extends DefaultMethodsOverrider {
|
||||
|
||||
/**
|
||||
* Checks if the connected server or its compatible versions support the specified protocol version.
|
||||
*
|
||||
* @param targetVersion the ProtocolVersion to check for support.
|
||||
* @return true if the server or its compatible versions support the target version, false otherwise.
|
||||
*/
|
||||
@@ -265,6 +280,7 @@ public abstract class ProtocolClient extends DefaultMethodsOverrider {
|
||||
|
||||
/**
|
||||
* Checks if the connected server or its compatible versions support the specified protocol.
|
||||
*
|
||||
* @param protocol the Protocol to check for support.
|
||||
* @return true if the server or its compatible versions support the protocol, false otherwise.
|
||||
*/
|
||||
@@ -282,6 +298,7 @@ public abstract class ProtocolClient extends DefaultMethodsOverrider {
|
||||
|
||||
/**
|
||||
* Validates the specified domain by sending a validation request to the DNS server.
|
||||
*
|
||||
* @param domain the Domain to validate.
|
||||
* @throws IOException if there are I/O issues during the validation process.
|
||||
* @throws ClassNotFoundException if there are issues with class loading during packet handling.
|
||||
@@ -297,6 +314,7 @@ public abstract class ProtocolClient extends DefaultMethodsOverrider {
|
||||
|
||||
/**
|
||||
* Requests the destination for the specified domain from the DNS server.
|
||||
*
|
||||
* @param domain the Domain for which to request the destination.
|
||||
* @param responseCode the expected DNSResponseCode for the request.
|
||||
* @throws IOException if there are I/O issues during the request process.
|
||||
@@ -313,6 +331,7 @@ public abstract class ProtocolClient extends DefaultMethodsOverrider {
|
||||
|
||||
/**
|
||||
* Callback method invoked when domain validation is completed.
|
||||
*
|
||||
* @param domain the Domain that was validated.
|
||||
* @param responseCode the DNSResponseCode resulting from the validation.
|
||||
*/
|
||||
@@ -320,6 +339,7 @@ public abstract class ProtocolClient extends DefaultMethodsOverrider {
|
||||
|
||||
/**
|
||||
* Callback method invoked when the destination retrieval is completed.
|
||||
*
|
||||
* @param domain the Domain for which the destination was requested.
|
||||
* @param destination the retrieved destination as a string.
|
||||
* @param validationResponse the DNSResponseCode resulting from the destination retrieval.
|
||||
|
||||
@@ -42,13 +42,9 @@ public final class WebClient {
|
||||
*/
|
||||
private ObjectInputStream inputStream;
|
||||
|
||||
/**
|
||||
* Thread for receiving data from the web server.
|
||||
*/
|
||||
private final Thread receiveThread = new Thread(this::receive);
|
||||
|
||||
/**
|
||||
* Constructs a WebClient instance and establishes a secure connection to the web server.
|
||||
*
|
||||
* @param domain The domain information for the web server.
|
||||
* @param pipelinePort The port for the pipeline connection.
|
||||
* @param webPort The port for the web server connection.
|
||||
@@ -58,26 +54,26 @@ public final class WebClient {
|
||||
// Initialize and connect the pipeline client
|
||||
clientToWebPipeline = new NetworkClient.ClientBuilder().
|
||||
// Set logger from ProtocolBridge
|
||||
setLogger(ProtocolBridge.getInstance().getLogger()).
|
||||
setLogger(ProtocolBridge.getInstance().getLogger()).
|
||||
// Set the destination and port for the pipeline connection
|
||||
setHost(domain.getDestination()).setPort(pipelinePort).
|
||||
setHost(domain.getDestination()).setPort(pipelinePort).
|
||||
|
||||
// Configure packet handler and event manager
|
||||
setPacketHandler(ProtocolBridge.getInstance().getProtocolSettings().packetHandler).
|
||||
setPacketHandler(ProtocolBridge.getInstance().getProtocolSettings().packetHandler).
|
||||
setEventManager(ProtocolBridge.getInstance().getProtocolSettings().eventManager).
|
||||
|
||||
// Set proxy and ssl parameters from DNS connection settings
|
||||
setProxy(ProtocolBridge.getInstance().getProtocolClient().getClientDNSConnection().getProxy()).
|
||||
setProxy(ProtocolBridge.getInstance().getProtocolClient().getClientDNSConnection().getProxy()).
|
||||
setSSLParameters(ProtocolBridge.getInstance().getProtocolClient().getClientDNSConnection().getSocket().getSSLParameters()).
|
||||
|
||||
// Set certificates and folders for SSL
|
||||
setRootCAFolder(ProtocolBridge.getInstance().getProtocolClient().getFolderStructure().publicCAFolder).
|
||||
setRootCAFolder(ProtocolBridge.getInstance().getProtocolClient().getFolderStructure().publicCAFolder).
|
||||
setClientCertificatesFolder(ProtocolBridge.getInstance().getProtocolClient().getFolderStructure().publicClientFolder,
|
||||
ProtocolBridge.getInstance().getProtocolClient().getFolderStructure().privateClientFolder).
|
||||
|
||||
|
||||
// Finalize the client setup
|
||||
build();
|
||||
build();
|
||||
|
||||
// Connect to the pipeline
|
||||
clientToWebPipeline.connect();
|
||||
@@ -139,10 +135,14 @@ public final class WebClient {
|
||||
// Start the receive thread
|
||||
this.receiveThread.start();
|
||||
}
|
||||
}
|
||||
} /**
|
||||
* Thread for receiving data from the web server.
|
||||
*/
|
||||
private final Thread receiveThread = new Thread(this::receive);
|
||||
|
||||
/**
|
||||
* Gets the NetworkClient used for the pipeline connection to the web server.
|
||||
*
|
||||
* @return The NetworkClient connected to the web server pipeline.
|
||||
*/
|
||||
public NetworkClient getClientPipelineConnection() {
|
||||
@@ -151,6 +151,7 @@ public final class WebClient {
|
||||
|
||||
/**
|
||||
* Gets the SSLSocket used for communication with the web server.
|
||||
*
|
||||
* @return The SSLSocket connected to the web server.
|
||||
*/
|
||||
public SSLSocket getClientWebConnection() {
|
||||
@@ -159,6 +160,7 @@ public final class WebClient {
|
||||
|
||||
/**
|
||||
* Checks if the WebClient is currently connected to the web server.
|
||||
*
|
||||
* @return true if connected, false otherwise.
|
||||
*/
|
||||
public boolean isConnected() {
|
||||
@@ -188,6 +190,7 @@ public final class WebClient {
|
||||
|
||||
/**
|
||||
* Closes the connection to the web server and releases resources.
|
||||
*
|
||||
* @return true if the connection was successfully closed, false if it was already closed.
|
||||
* @throws IOException If an I/O error occurs during closure.
|
||||
*/
|
||||
@@ -225,4 +228,6 @@ public final class WebClient {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -30,6 +30,7 @@ public final class ConnectedProtocolClient {
|
||||
/**
|
||||
* Gets the protocol version of the connected client.
|
||||
* Defaults to PV_1_0_0_CLASSIC if not set.
|
||||
*
|
||||
* @return The protocol version of the client.
|
||||
*/
|
||||
public ProtocolVersion getClientVersion() {
|
||||
@@ -38,6 +39,7 @@ public final class ConnectedProtocolClient {
|
||||
|
||||
/**
|
||||
* Sets the protocol version of the connected client.
|
||||
*
|
||||
* @param clientVersion The protocol version to set.
|
||||
*/
|
||||
public void setClientVersion(ProtocolVersion clientVersion) {
|
||||
@@ -46,6 +48,7 @@ public final class ConnectedProtocolClient {
|
||||
|
||||
/**
|
||||
* Checks if the connected client is a stable client.
|
||||
*
|
||||
* @return True if the client is stable, false otherwise.
|
||||
*/
|
||||
public boolean isStableClient() {
|
||||
@@ -55,6 +58,7 @@ public final class ConnectedProtocolClient {
|
||||
|
||||
/**
|
||||
* Checks if the connected client supports stable protocol versions.
|
||||
*
|
||||
* @return True if the client supports stable versions, false otherwise.
|
||||
*/
|
||||
public boolean supportClientStable() {
|
||||
@@ -71,6 +75,7 @@ public final class ConnectedProtocolClient {
|
||||
|
||||
/**
|
||||
* Checks if the connected client is a beta client.
|
||||
*
|
||||
* @return True if the client is beta, false otherwise.
|
||||
*/
|
||||
public boolean isBetaClient() {
|
||||
@@ -80,6 +85,7 @@ public final class ConnectedProtocolClient {
|
||||
|
||||
/**
|
||||
* Checks if the connected client supports beta protocol versions.
|
||||
*
|
||||
* @return True if the client supports beta versions, false otherwise.
|
||||
*/
|
||||
public boolean supportClientBeta() {
|
||||
@@ -96,6 +102,7 @@ public final class ConnectedProtocolClient {
|
||||
|
||||
/**
|
||||
* Checks if the connected client is a classic client.
|
||||
*
|
||||
* @return True if the client is classic, false otherwise.
|
||||
*/
|
||||
public boolean isClassicClient() {
|
||||
@@ -106,6 +113,7 @@ public final class ConnectedProtocolClient {
|
||||
|
||||
/**
|
||||
* Checks if the connected client supports classic protocol versions.
|
||||
*
|
||||
* @return True if the client supports classic versions, false otherwise.
|
||||
*/
|
||||
public boolean supportClientClassic() {
|
||||
@@ -122,6 +130,7 @@ public final class ConnectedProtocolClient {
|
||||
|
||||
/**
|
||||
* Checks if the connected client supports the given packet's protocol version.
|
||||
*
|
||||
* @param packet The packet to check.
|
||||
* @return True if the client supports the packet's protocol version, false otherwise.
|
||||
*/
|
||||
@@ -131,6 +140,7 @@ public final class ConnectedProtocolClient {
|
||||
|
||||
/**
|
||||
* Checks if the connected client supports the given protocol version.
|
||||
*
|
||||
* @param targetVersion The protocol version to check.
|
||||
* @return True if the client supports the target version, false otherwise.
|
||||
*/
|
||||
@@ -141,6 +151,7 @@ public final class ConnectedProtocolClient {
|
||||
|
||||
/**
|
||||
* Checks if the connected client supports the given protocol.
|
||||
*
|
||||
* @param protocol The protocol to check.
|
||||
* @return True if the client supports the protocol, false otherwise.
|
||||
*/
|
||||
|
||||
@@ -104,6 +104,7 @@ public abstract class ProtocolDNSServer extends DefaultMethodsOverrider {
|
||||
|
||||
/**
|
||||
* Checks if the required certificate files exist in the specified folder.
|
||||
*
|
||||
* @param folder The folder to check for certificate files.
|
||||
* @param prefix The prefix of the certificate files.
|
||||
* @param extension The extension of the certificate files.
|
||||
@@ -138,6 +139,7 @@ public abstract class ProtocolDNSServer extends DefaultMethodsOverrider {
|
||||
|
||||
/**
|
||||
* Retrieves a connected protocol client by its client ID.
|
||||
*
|
||||
* @param clientID The ID of the client to retrieve.
|
||||
* @return The ConnectedProtocolClient with the specified ID, or null if not found.
|
||||
*/
|
||||
@@ -149,6 +151,7 @@ public abstract class ProtocolDNSServer extends DefaultMethodsOverrider {
|
||||
|
||||
/**
|
||||
* Gets the DNS information site URL from the configuration.
|
||||
*
|
||||
* @return The DNS information site URL.
|
||||
*/
|
||||
public final String getDNSInfoSite() {
|
||||
@@ -157,6 +160,7 @@ public abstract class ProtocolDNSServer extends DefaultMethodsOverrider {
|
||||
|
||||
/**
|
||||
* Gets the DNS registration site URL from the configuration.
|
||||
*
|
||||
* @return The DNS registration site URL.
|
||||
*/
|
||||
public final String getDNSRegisterSite() {
|
||||
@@ -165,37 +169,39 @@ public abstract class ProtocolDNSServer extends DefaultMethodsOverrider {
|
||||
|
||||
/**
|
||||
* Abstract method to retrieve the list of domains managed by the DNS server.
|
||||
*
|
||||
* @return A list of Domain objects.
|
||||
*/
|
||||
public abstract List<Domain> getDomains();
|
||||
|
||||
/**
|
||||
* @see Domain#getDestination()
|
||||
* Abstract method to get the destination for a given domain.
|
||||
* @param domain The domain to look up.
|
||||
* @return The destination associated with the domain.
|
||||
* @see Domain#getDestination()
|
||||
* Abstract method to get the destination for a given domain.
|
||||
*/
|
||||
public abstract String getDomainDestination(Domain domain);
|
||||
|
||||
/**
|
||||
* @see Domain#getDestination()
|
||||
* Abstract method to get the destination for a given subname under a specific domain.
|
||||
* @param domain The parent domain.
|
||||
* @param domain The parent domain.
|
||||
* @param subname The subname to look up.
|
||||
* @return The destination associated with the subname.
|
||||
* @see Domain#getDestination()
|
||||
* Abstract method to get the destination for a given subname under a specific domain.
|
||||
*/
|
||||
public abstract String getSubnameDestination(Domain domain, String subname);
|
||||
|
||||
/**
|
||||
* @see Domain#getDestination()
|
||||
* Abstract method to get the top-level domain information site URL.
|
||||
* @param topLevelName The top-level domain name.
|
||||
* @return The information site URL for the specified top-level domain.
|
||||
* @see Domain#getDestination()
|
||||
* Abstract method to get the top-level domain information site URL.
|
||||
*/
|
||||
public abstract String getTLNInfoSite(String topLevelName);
|
||||
|
||||
/**
|
||||
* Abstract method to validate a requested domain.
|
||||
*
|
||||
* @param requestedDomain The domain to validate.
|
||||
* @return A DNSResponseCode indicating the result of the validation.
|
||||
*/
|
||||
@@ -203,18 +209,20 @@ public abstract class ProtocolDNSServer extends DefaultMethodsOverrider {
|
||||
|
||||
/**
|
||||
* Abstract method called when a validation packet fails to send.
|
||||
* @param domain The domain associated with the validation.
|
||||
* @param client The connected protocol client.
|
||||
*
|
||||
* @param domain The domain associated with the validation.
|
||||
* @param client The connected protocol client.
|
||||
* @param exception The exception that occurred during sending.
|
||||
*/
|
||||
public abstract void validationPacketSendFailed(Domain domain, ConnectedProtocolClient client, Exception exception);
|
||||
|
||||
/**
|
||||
* Abstract method called when a domain destination packet fails to send.
|
||||
* @param client The connected protocol client.
|
||||
* @param domain The domain associated with the packet.
|
||||
*
|
||||
* @param client The connected protocol client.
|
||||
* @param domain The domain associated with the packet.
|
||||
* @param validationResponse The DNS response code from validation.
|
||||
* @param exception The exception that occurred during sending.
|
||||
* @param exception The exception that occurred during sending.
|
||||
*/
|
||||
public abstract void domainDestinationPacketFailedSend(ConnectedProtocolClient client, Domain domain, DNSResponseCode validationResponse, Exception exception);
|
||||
|
||||
@@ -234,6 +242,7 @@ public abstract class ProtocolDNSServer extends DefaultMethodsOverrider {
|
||||
public final File publicServerFolder;
|
||||
public final String caPrefix = "ca_dns_";
|
||||
public final String certPrefix = "cert_dns_";
|
||||
|
||||
public ServerCertificateFolderStructure() {
|
||||
certificatesFolder = new File("certificates");
|
||||
|
||||
|
||||
@@ -51,20 +51,18 @@ public final class ConnectedWebClient {
|
||||
* The protocol version of the connected client.
|
||||
*/
|
||||
private ProtocolVersion clientVersion = null;
|
||||
|
||||
/**
|
||||
* Indicates if the client version has been loaded.
|
||||
*/
|
||||
@Getter
|
||||
private boolean clientVersionLoaded = false; /**
|
||||
* Thread for receiving data from the client.
|
||||
*/
|
||||
private final Thread receiveThread = new Thread(this::receive);
|
||||
|
||||
/**
|
||||
* Indicates if the client version has been loaded.
|
||||
*/
|
||||
@Getter
|
||||
private boolean clientVersionLoaded = false;
|
||||
|
||||
/**
|
||||
* Constructs a ConnectedWebClient with the given connection handler.
|
||||
*
|
||||
* @param pipelineConnection The connection handler for the web client.
|
||||
*/
|
||||
public ConnectedWebClient(ConnectionHandler pipelineConnection) {
|
||||
@@ -73,9 +71,10 @@ public final class ConnectedWebClient {
|
||||
|
||||
/**
|
||||
* Sends an HTTP redirect response to the client.
|
||||
* @param out The output stream to send the response to.
|
||||
*
|
||||
* @param out The output stream to send the response to.
|
||||
* @param location The URL to redirect to.
|
||||
* @param cookies Optional cookies to set in the response.
|
||||
* @param cookies Optional cookies to set in the response.
|
||||
* @throws IOException If an I/O error occurs.
|
||||
*/
|
||||
private static void sendRedirect(OutputStream out, String location, Map<String, String> cookies) throws IOException {
|
||||
@@ -97,6 +96,7 @@ public final class ConnectedWebClient {
|
||||
|
||||
/**
|
||||
* Parses POST parameters from the input stream.
|
||||
*
|
||||
* @param in The input stream to read from.
|
||||
* @return A map of POST parameter names to values.
|
||||
* @throws IOException If an I/O error occurs.
|
||||
@@ -124,6 +124,7 @@ public final class ConnectedWebClient {
|
||||
|
||||
/**
|
||||
* Normalizes a file path to prevent directory traversal attacks.
|
||||
*
|
||||
* @param path The raw file path.
|
||||
* @return The normalized file path.
|
||||
*/
|
||||
@@ -141,6 +142,7 @@ public final class ConnectedWebClient {
|
||||
|
||||
/**
|
||||
* Parses query parameters from a raw URL path.
|
||||
*
|
||||
* @param rawPath The raw URL path containing query parameters.
|
||||
* @return A map of query parameter names to values.
|
||||
*/
|
||||
@@ -161,6 +163,7 @@ public final class ConnectedWebClient {
|
||||
|
||||
/**
|
||||
* Checks if the request is a multipart/form-data request.
|
||||
*
|
||||
* @param headers The HTTP headers of the request.
|
||||
* @return True if the request is multipart/form-data, false otherwise.
|
||||
*/
|
||||
@@ -171,8 +174,9 @@ public final class ConnectedWebClient {
|
||||
|
||||
/**
|
||||
* Handles a multipart/form-data request, saving uploaded files to the specified directory.
|
||||
* @param in The input stream to read the request body from.
|
||||
* @param headers The HTTP headers of the request.
|
||||
*
|
||||
* @param in The input stream to read the request body from.
|
||||
* @param headers The HTTP headers of the request.
|
||||
* @param uploadDir The directory to save uploaded files to.
|
||||
* @throws IOException If an I/O error occurs.
|
||||
*/
|
||||
@@ -232,6 +236,7 @@ public final class ConnectedWebClient {
|
||||
|
||||
/**
|
||||
* Sends an response to the client.
|
||||
*
|
||||
* @param out
|
||||
* @param code
|
||||
* @param file
|
||||
@@ -245,7 +250,8 @@ public final class ConnectedWebClient {
|
||||
|
||||
/**
|
||||
* Sends an response to the client.
|
||||
* @param out The output stream to send the response to.
|
||||
*
|
||||
* @param out The output stream to send the response to.
|
||||
* @param code The HTTP status code.
|
||||
* @param file The file to read the response body from.
|
||||
* @throws IOException If an I/O error occurs.
|
||||
@@ -256,9 +262,10 @@ public final class ConnectedWebClient {
|
||||
|
||||
/**
|
||||
* Sends an response to the client.
|
||||
* @param out The output stream to send the response to.
|
||||
* @param code The HTTP status code.
|
||||
* @param body The response body as a string.
|
||||
*
|
||||
* @param out The output stream to send the response to.
|
||||
* @param code The HTTP status code.
|
||||
* @param body The response body as a string.
|
||||
* @param contentType The content type of the response.
|
||||
* @throws IOException If an I/O error occurs.
|
||||
*/
|
||||
@@ -268,9 +275,10 @@ public final class ConnectedWebClient {
|
||||
|
||||
/**
|
||||
* Sends an response to the client.
|
||||
* @param out The output stream to send the response to.
|
||||
* @param code The HTTP status code.
|
||||
* @param file The file to read the response body from.
|
||||
*
|
||||
* @param out The output stream to send the response to.
|
||||
* @param code The HTTP status code.
|
||||
* @param file The file to read the response body from.
|
||||
* @param contentType The content type of the response.
|
||||
* @throws IOException If an I/O error occurs.
|
||||
*/
|
||||
@@ -281,11 +289,12 @@ public final class ConnectedWebClient {
|
||||
|
||||
/**
|
||||
* Sends an response to the client.
|
||||
* @param out The output stream to send the response to.
|
||||
* @param code The HTTP status code.
|
||||
* @param body The response body as a byte array.
|
||||
*
|
||||
* @param out The output stream to send the response to.
|
||||
* @param code The HTTP status code.
|
||||
* @param body The response body as a byte array.
|
||||
* @param contentType The content type of the response.
|
||||
* @param headers Additional headers to include in the response.
|
||||
* @param headers Additional headers to include in the response.
|
||||
* @throws IOException If an I/O error occurs.
|
||||
*/
|
||||
private static void sendResponse(OutputStream out, int code, byte[] body, String contentType, Map<String, String> headers) throws IOException {
|
||||
@@ -310,6 +319,7 @@ public final class ConnectedWebClient {
|
||||
|
||||
/**
|
||||
* Returns the standard status text for a given status code.
|
||||
*
|
||||
* @param code The status code.
|
||||
* @return The corresponding status text.
|
||||
*/
|
||||
@@ -329,6 +339,7 @@ public final class ConnectedWebClient {
|
||||
|
||||
/**
|
||||
* Returns the content type based on the file extension.
|
||||
*
|
||||
* @param name The file name.
|
||||
* @return The corresponding content type.
|
||||
*/
|
||||
@@ -350,9 +361,10 @@ public final class ConnectedWebClient {
|
||||
|
||||
/**
|
||||
* Renders a PHP file by executing it with the PHP interpreter and captures cookies.
|
||||
*
|
||||
* @param file The PHP file to render.
|
||||
* @return A PHPResponse containing the output and cookies.
|
||||
* @throws IOException If an I/O error occurs.
|
||||
* @throws IOException If an I/O error occurs.
|
||||
* @throws InterruptedException If the process is interrupted.
|
||||
*/
|
||||
private static PHPResponse renderPHPWithCookies(File file) throws IOException, InterruptedException {
|
||||
@@ -402,6 +414,7 @@ public final class ConnectedWebClient {
|
||||
|
||||
/**
|
||||
* Sets the SSL socket for the web client and starts the receive thread.
|
||||
*
|
||||
* @param webSocket The SSL socket to set.
|
||||
*/
|
||||
public void setWebSocket(SSLSocket webSocket) {
|
||||
@@ -411,6 +424,7 @@ public final class ConnectedWebClient {
|
||||
|
||||
/**
|
||||
* Checks if the web client is currently connected.
|
||||
*
|
||||
* @return True if connected, false otherwise.
|
||||
*/
|
||||
public boolean isConnected() {
|
||||
@@ -419,6 +433,7 @@ public final class ConnectedWebClient {
|
||||
|
||||
/**
|
||||
* Disconnects the web client, closing streams and the socket.
|
||||
*
|
||||
* @return True if disconnection was successful, false if already disconnected.
|
||||
*/
|
||||
public synchronized boolean disconnect() {
|
||||
@@ -452,6 +467,7 @@ public final class ConnectedWebClient {
|
||||
|
||||
/**
|
||||
* Gets the protocol version of the connected client.
|
||||
*
|
||||
* @return The protocol version of the client, defaults to PV_1_0_0_CLASSIC if not set.
|
||||
*/
|
||||
public ProtocolVersion getClientVersion() {
|
||||
@@ -460,6 +476,7 @@ public final class ConnectedWebClient {
|
||||
|
||||
/**
|
||||
* Sets the protocol version of the connected client.
|
||||
*
|
||||
* @param clientVersion The protocol version to set.
|
||||
*/
|
||||
public void setClientVersion(ProtocolVersion clientVersion) {
|
||||
@@ -469,6 +486,7 @@ public final class ConnectedWebClient {
|
||||
|
||||
/**
|
||||
* Checks if the connected client is a stable client.
|
||||
*
|
||||
* @return True if the client is stable, false otherwise.
|
||||
*/
|
||||
public boolean isStableClient() {
|
||||
@@ -478,6 +496,7 @@ public final class ConnectedWebClient {
|
||||
|
||||
/**
|
||||
* Checks if the connected client supports stable protocol versions.
|
||||
*
|
||||
* @return True if the client supports stable versions, false otherwise.
|
||||
*/
|
||||
public boolean supportClientStable() {
|
||||
@@ -494,6 +513,7 @@ public final class ConnectedWebClient {
|
||||
|
||||
/**
|
||||
* Checks if the connected client is a beta client.
|
||||
*
|
||||
* @return True if the client is beta, false otherwise.
|
||||
*/
|
||||
public boolean isBetaClient() {
|
||||
@@ -503,6 +523,7 @@ public final class ConnectedWebClient {
|
||||
|
||||
/**
|
||||
* Checks if the connected client supports beta protocol versions.
|
||||
*
|
||||
* @return True if the client supports beta versions, false otherwise.
|
||||
*/
|
||||
public boolean supportClientBeta() {
|
||||
@@ -519,6 +540,7 @@ public final class ConnectedWebClient {
|
||||
|
||||
/**
|
||||
* Checks if the connected client is a classic client.
|
||||
*
|
||||
* @return True if the client is classic, false otherwise.
|
||||
*/
|
||||
public boolean isClassicClient() {
|
||||
@@ -527,6 +549,7 @@ public final class ConnectedWebClient {
|
||||
|
||||
/**
|
||||
* Checks if the connected client supports classic protocol versions.
|
||||
*
|
||||
* @return True if the client supports classic versions, false otherwise.
|
||||
*/
|
||||
public boolean supportClientClassic() {
|
||||
@@ -543,6 +566,7 @@ public final class ConnectedWebClient {
|
||||
|
||||
/**
|
||||
* Checks if the connected client supports the protocol version of the given packet.
|
||||
*
|
||||
* @param packet The packet to check support for.
|
||||
* @return True if the client supports the packet's protocol version, false otherwise.
|
||||
*/
|
||||
@@ -552,6 +576,7 @@ public final class ConnectedWebClient {
|
||||
|
||||
/**
|
||||
* Checks if the connected client supports the given protocol version.
|
||||
*
|
||||
* @param targetVersion The protocol version to check support for.
|
||||
* @return True if the client supports the target version, false otherwise.
|
||||
*/
|
||||
@@ -562,6 +587,7 @@ public final class ConnectedWebClient {
|
||||
|
||||
/**
|
||||
* Checks if the connected client supports the given protocol.
|
||||
*
|
||||
* @param protocol The protocol to check support for.
|
||||
* @return True if the client supports the protocol, false otherwise.
|
||||
*/
|
||||
@@ -689,4 +715,6 @@ public final class ConnectedWebClient {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -58,31 +58,25 @@ public final class ProtocolWebServer {
|
||||
* Certificate files for SSL.
|
||||
*/
|
||||
private final File keyFile;
|
||||
|
||||
|
||||
/**
|
||||
* The configuration file for the web server.
|
||||
*/
|
||||
private final File configFile;
|
||||
/**
|
||||
* The network server handling pipeline connections.
|
||||
*/
|
||||
@Getter
|
||||
private NetworkServer pipelineServer;
|
||||
|
||||
/**
|
||||
* The SSL server socket for web connections.
|
||||
*/
|
||||
@Getter
|
||||
private SSLServerSocket webServer;
|
||||
|
||||
/**
|
||||
* List of connected web clients.
|
||||
*/
|
||||
@Getter
|
||||
private List<ConnectedWebClient> clients;
|
||||
|
||||
/**
|
||||
* The configuration file for the web server.
|
||||
*/
|
||||
private final File configFile;
|
||||
|
||||
/**
|
||||
* A unique secret for session management.
|
||||
*/
|
||||
@@ -91,9 +85,10 @@ public final class ProtocolWebServer {
|
||||
|
||||
/**
|
||||
* Initializes the web server with the given configuration, authentication, and rules files.
|
||||
*
|
||||
* @param configFile The configuration file.
|
||||
* @param authFile The authentication file.
|
||||
* @param rulesFile The rules file.
|
||||
* @param authFile The authentication file.
|
||||
* @param rulesFile The rules file.
|
||||
* @throws Exception If an error occurs during initialization.
|
||||
*/
|
||||
public ProtocolWebServer(File configFile, File authFile, File rulesFile) throws Exception {
|
||||
@@ -172,10 +167,11 @@ public final class ProtocolWebServer {
|
||||
|
||||
/**
|
||||
* Retrieves a connected web client by its client ID.
|
||||
*
|
||||
* @param clientID The client ID to search for.
|
||||
* @return The connected web client with the specified ID, or null if not found.
|
||||
*/
|
||||
public final ConnectedWebClient getClientByID(int clientID) {
|
||||
public ConnectedWebClient getClientByID(int clientID) {
|
||||
for (ConnectedWebClient client : clients)
|
||||
if (client.getPipelineConnection().getClientID() == clientID) return client;
|
||||
return null;
|
||||
@@ -183,9 +179,10 @@ public final class ProtocolWebServer {
|
||||
|
||||
/**
|
||||
* Starts the web server to accept and handle client connections.
|
||||
*
|
||||
* @throws Exception If an error occurs while starting the server.
|
||||
*/
|
||||
public final void startWebServer() throws Exception {
|
||||
public void startWebServer() throws Exception {
|
||||
// Start the pipeline server
|
||||
pipelineServer.start();
|
||||
|
||||
@@ -215,7 +212,8 @@ public final class ProtocolWebServer {
|
||||
try {
|
||||
// Sleep for a while before checking again
|
||||
Thread.sleep(1000);
|
||||
} catch (InterruptedException ignored) {}
|
||||
} catch (InterruptedException ignored) {
|
||||
}
|
||||
}
|
||||
}).start();
|
||||
|
||||
@@ -241,6 +239,7 @@ public final class ProtocolWebServer {
|
||||
|
||||
/**
|
||||
* Handles the shutdown of the web server when the pipeline server stops.
|
||||
*
|
||||
* @throws IOException If an I/O error occurs while closing the web server.
|
||||
*/
|
||||
private void onPipelineStop() throws IOException {
|
||||
@@ -249,11 +248,12 @@ public final class ProtocolWebServer {
|
||||
|
||||
/**
|
||||
* Checks if the required certificate files exist in the specified folder.
|
||||
* @param folder The folder to check for certificate files.
|
||||
* @param prefix The prefix of the certificate files.
|
||||
*
|
||||
* @param folder The folder to check for certificate files.
|
||||
* @param prefix The prefix of the certificate files.
|
||||
* @param extension The extension of the certificate files.
|
||||
* @throws CertificateException If a required certificate file is missing or invalid.
|
||||
* @throws IOException If an I/O error occurs while checking the files.
|
||||
* @throws IOException If an I/O error occurs while checking the files.
|
||||
*/
|
||||
private void checkFileExists(File folder, String prefix, String extension) throws CertificateException, IOException {
|
||||
boolean found = false;
|
||||
@@ -281,15 +281,17 @@ public final class ProtocolWebServer {
|
||||
|
||||
/**
|
||||
* Retrieves the configuration manager for the web server.
|
||||
*
|
||||
* @return The configuration manager.
|
||||
* @throws IOException If an I/O error occurs while loading or saving the configuration.
|
||||
*/
|
||||
public final ConfigurationManager getConfigurationManager() throws IOException {
|
||||
public ConfigurationManager getConfigurationManager() throws IOException {
|
||||
return getConfigurationManager(configFile);
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads and initializes the configuration manager with default settings if necessary.
|
||||
*
|
||||
* @param configFile The configuration file to load.
|
||||
* @return The initialized configuration manager.
|
||||
* @throws IOException If an I/O error occurs while loading or saving the configuration.
|
||||
@@ -339,6 +341,7 @@ public final class ProtocolWebServer {
|
||||
public final File publicServerFolder;
|
||||
public final String caPrefix = "ca_server_";
|
||||
public final String certPrefix = "cert_server_";
|
||||
|
||||
public ServerCertificateFolderStructure() {
|
||||
certificatesFolder = new File("certificates");
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ public final class AuthManager {
|
||||
* Loads the authentication file and populates the users map.
|
||||
* The file should contain lines in the format: username:hashed_password
|
||||
* Lines starting with '#' are treated as comments and ignored.
|
||||
*
|
||||
* @param authFile The authentication file to load.
|
||||
* @throws IOException If an I/O error occurs reading from the file.
|
||||
*/
|
||||
@@ -48,7 +49,8 @@ public final class AuthManager {
|
||||
|
||||
/**
|
||||
* Checks if the provided login and password are valid.
|
||||
* @param login The username to check.
|
||||
*
|
||||
* @param login The username to check.
|
||||
* @param password The password to verify.
|
||||
* @return True if the credentials are valid, false otherwise.
|
||||
*/
|
||||
@@ -64,6 +66,7 @@ public final class AuthManager {
|
||||
|
||||
/**
|
||||
* Computes the SHA-256 hash of the given input string.
|
||||
*
|
||||
* @param input The input string to hash.
|
||||
* @return The hexadecimal representation of the SHA-256 hash.
|
||||
*/
|
||||
|
||||
@@ -35,17 +35,19 @@ public final class RuleManager {
|
||||
* Loads rules from a JSON file.
|
||||
* The JSON should have the structure:
|
||||
* {
|
||||
* "allow": ["pattern1", "pattern2", ...],
|
||||
* "deny": ["pattern1", "pattern2", ...],
|
||||
* "auth": ["pattern1", "pattern2", ...]
|
||||
* "allow": ["pattern1", "pattern2", ...],
|
||||
* "deny": ["pattern1", "pattern2", ...],
|
||||
* "auth": ["pattern1", "pattern2", ...]
|
||||
* }
|
||||
*
|
||||
* @param rulesFile The JSON file containing the rules.
|
||||
* @throws Exception If an error occurs reading the file or parsing JSON.
|
||||
*/
|
||||
public static void loadRules(File rulesFile) throws Exception {
|
||||
// Load and parse the JSON file
|
||||
String json = new String(Files.readAllBytes(rulesFile.toPath()));
|
||||
Map<String, List<String>> map = new Gson().fromJson(json, new TypeToken<Map<String, List<String>>>() {}.getType());
|
||||
Map<String, List<String>> map = new Gson().fromJson(json, new TypeToken<Map<String, List<String>>>() {
|
||||
}.getType());
|
||||
|
||||
// Default to empty lists if keys are missing
|
||||
allow = map.getOrDefault("allow", List.of());
|
||||
@@ -53,7 +55,9 @@ public final class RuleManager {
|
||||
auth = map.getOrDefault("auth", List.of());
|
||||
}
|
||||
|
||||
/** Checks if the given path is allowed based on the allow rules.
|
||||
/**
|
||||
* Checks if the given path is allowed based on the allow rules.
|
||||
*
|
||||
* @param path The path to check.
|
||||
* @return True if the path is allowed, false otherwise.
|
||||
*/
|
||||
@@ -61,7 +65,9 @@ public final class RuleManager {
|
||||
return allow.stream().anyMatch(p -> pathMatches(path, p));
|
||||
}
|
||||
|
||||
/** Checks if the given path is denied based on the deny rules.
|
||||
/**
|
||||
* Checks if the given path is denied based on the deny rules.
|
||||
*
|
||||
* @param path The path to check.
|
||||
* @return True if the path is denied, false otherwise.
|
||||
*/
|
||||
@@ -69,7 +75,9 @@ public final class RuleManager {
|
||||
return deny.stream().anyMatch(p -> pathMatches(path, p));
|
||||
}
|
||||
|
||||
/** Checks if the given path requires authentication based on the auth rules.
|
||||
/**
|
||||
* Checks if the given path requires authentication based on the auth rules.
|
||||
*
|
||||
* @param path The path to check.
|
||||
* @return True if the path requires authentication, false otherwise.
|
||||
*/
|
||||
@@ -77,9 +85,11 @@ public final class RuleManager {
|
||||
return auth.stream().anyMatch(p -> pathMatches(path, p));
|
||||
}
|
||||
|
||||
/** Helper method to check if a path matches a pattern.
|
||||
/**
|
||||
* Helper method to check if a path matches a pattern.
|
||||
* Patterns can include '*' as a wildcard.
|
||||
* @param path The path to check.
|
||||
*
|
||||
* @param path The path to check.
|
||||
* @param pattern The pattern to match against.
|
||||
* @return True if the path matches the pattern, false otherwise.
|
||||
*/
|
||||
|
||||
@@ -30,8 +30,9 @@ public final class SessionManager {
|
||||
|
||||
/**
|
||||
* Creates a new session for the given user.
|
||||
* @param login The username associated with the session.
|
||||
* @param ip The IP address of the client.
|
||||
*
|
||||
* @param login The username associated with the session.
|
||||
* @param ip The IP address of the client.
|
||||
* @param userAgent The User-Agent string of the client.
|
||||
* @return The generated session ID.
|
||||
* @throws IOException If an I/O error occurs.
|
||||
@@ -51,8 +52,9 @@ public final class SessionManager {
|
||||
|
||||
/**
|
||||
* Validates a session ID against the provided IP and User-Agent.
|
||||
*
|
||||
* @param sessionId The session ID to validate.
|
||||
* @param ip The IP address of the client.
|
||||
* @param ip The IP address of the client.
|
||||
* @param userAgent The User-Agent string of the client.
|
||||
* @return True if the session is valid, false otherwise.
|
||||
* @throws IOException If an I/O error occurs.
|
||||
@@ -74,6 +76,7 @@ public final class SessionManager {
|
||||
|
||||
/**
|
||||
* Invalidates a session, removing it from the active sessions.
|
||||
*
|
||||
* @param sessionId The session ID to invalidate.
|
||||
*/
|
||||
public static void invalidate(String sessionId) {
|
||||
@@ -82,6 +85,7 @@ public final class SessionManager {
|
||||
|
||||
/**
|
||||
* Retrieves the username associated with a valid session ID.
|
||||
*
|
||||
* @param sessionId The session ID to look up.
|
||||
* @return The username if the session is valid, null otherwise.
|
||||
*/
|
||||
@@ -127,6 +131,7 @@ public final class SessionManager {
|
||||
|
||||
/**
|
||||
* Checks if the session has expired.
|
||||
*
|
||||
* @return True if the session is expired, false otherwise.
|
||||
*/
|
||||
boolean isExpired() {
|
||||
@@ -135,7 +140,8 @@ public final class SessionManager {
|
||||
|
||||
/**
|
||||
* Checks if the session matches the given IP and User-Agent.
|
||||
* @param ip The IP address to check.
|
||||
*
|
||||
* @param ip The IP address to check.
|
||||
* @param userAgent The User-Agent string to check.
|
||||
* @return True if both match, false otherwise.
|
||||
*/
|
||||
@@ -145,6 +151,7 @@ public final class SessionManager {
|
||||
|
||||
/**
|
||||
* Refreshes the session's expiration time.
|
||||
*
|
||||
* @throws IOException If an I/O error occurs.
|
||||
*/
|
||||
void refresh() throws IOException {
|
||||
|
||||
Reference in New Issue
Block a user