diff --git a/README.MD b/README.MD index f1f0d9f..1b145d0 100644 --- a/README.MD +++ b/README.MD @@ -1,51 +1,18 @@ -# Open Autonomous Connection Protocol +# Open Autonomous Connection DNS-System -This is the Protocol for our Open Autonomous Connection project.
-You can easily implement this Protocol via Maven.
-Feel free to join our Discord. +> [!IMPORTANT] +> This is the classic version! +> Classic version is not longer maintained or supported please switch the Branch to master +> The new INS has a Backwards compatibility and is supporting the classic Version + +This is the old DNS-System for our Open Autonomous Connection project.
+If you want to host your own DNS-System for the OAC-Web and you have some problems,
+feel free to join our Discord and ask for help. +

-## License Notice - -This project (OAC) is licensed under the [Open Autonomous Public License (OAPL)](https://repo.open-autonomous-connection.org/open-autonomous-connection/OAPL/). - -**Third-party components:** -- *UnlegitLibrary* is authored by the same copyright holder and is used here under a special agreement: - While [UnlegitLibrary](https://repo.unlegitdqrk.dev/UnlegitDqrk/unlegitlibrary/) is generally distributed under the [GNU GPLv3](https://repo.unlegitdqrk.dev/UnlegitDqrk/unlegitlibrary/src/branch/master/LICENSE), - it is additionally licensed under OAPL **exclusively for the OAC project**. - Therefore, within OAC, the OAPL terms apply to UnlegitLibrary as well. - # Bugs/Problems +- Update check does not work # In progress # TODO - -## Certificate generation for NetworkSystem -### Creating Root-CA: -```` -openssl genrsa -out myCA.key 4096 -openssl req -x509 -new -nodes -key myCA.key -sha256 -days 3650 -out myCA.pem - -myCA.key = private Key for CA (keep secret) -myCA.pem = public Root-Certificate for signing server and client certificates -```` -### Creating (DNS-/Web-)Server Certificate based on Root-CA: -```` -openssl genrsa -out server.key 2048 -openssl req -new -key server.key -out server.csr -openssl x509 -req -in server.csr -CA myCA.pem -CAkey myCA.key -CAcreateserial -out server.crt -days 825 -sha256 - -server.key = private Key for Server -server.crt = Server-Certificate signed by Root-CA -```` -### Optional: Creating Client Certificate based on Root-CA: -```` -openssl genrsa -out client.key 2048 -openssl req -new -key client.key -out client.csr -openssl x509 -req -in client.csr -CA myCA.pem -CAkey myCA.key -CAcreateserial -out client.crt -days 825 -sha256 - -client.key = private Key for Client -client.crt = Client-Certificate signed by Root-CA -```` - -> [!NOTE] -> All certificate registrars require the Root CA to issue a server/client certificate \ No newline at end of file +- Subdomains \ No newline at end of file diff --git a/frontend/auth/index.php b/frontend/auth/index.php new file mode 100644 index 0000000..024a321 --- /dev/null +++ b/frontend/auth/index.php @@ -0,0 +1,11 @@ + + + diff --git a/frontend/auth/login.php b/frontend/auth/login.php new file mode 100644 index 0000000..4485e76 --- /dev/null +++ b/frontend/auth/login.php @@ -0,0 +1,69 @@ + + + + + + + Open Autonomous Connection - Management/Login + + + + + + + +
+

Login

+
+ + + +
+ + Register +
+ + + + + diff --git a/frontend/auth/register.php b/frontend/auth/register.php new file mode 100644 index 0000000..a64cb72 --- /dev/null +++ b/frontend/auth/register.php @@ -0,0 +1,67 @@ + + + + + + + Open Autonomous Connection - Management/Register + + + + + + + +
+

Register

+
+ + + +
+ + Login +
+ + + diff --git a/frontend/config.php b/frontend/config.php new file mode 100644 index 0000000..6d8242d --- /dev/null +++ b/frontend/config.php @@ -0,0 +1,17 @@ + + + diff --git a/frontend/dashboard.php b/frontend/dashboard.php new file mode 100644 index 0000000..ebde91b --- /dev/null +++ b/frontend/dashboard.php @@ -0,0 +1,197 @@ + + + + + + Open Autonomous Connection - Management/Dashboard + + + + + +

Welcome,

+ +

Your Domains

+ + + + + + + + + + + + + + + + + +
NameTop Level DomainDestinationAccess KeyAction
+
+ + + + +
+
+ +

Your Top Level Domains

+ + + + + + + + + + + + + + + +
NameInfo SiteAccess KeyAction
+
+ + + +
+
+ +

Your API Keys

+ + + + + + + + + + + + + +
ApplicationAPI KeyAction
+
+ + + +
+
+ +

Create Domain

+
+ + + + + + + +
+ +

Create Top Level Domain

+
+ + + + + +
+ +

Create API Key

+
+ + + +
+ +

Delete Account

+
+ +
+ + diff --git a/frontend/index.php b/frontend/index.php new file mode 100644 index 0000000..7425ab7 --- /dev/null +++ b/frontend/index.php @@ -0,0 +1,40 @@ + + + + + + + Open Autonomous Connection - Management + + + + + + +Register +Login + + diff --git a/frontend/utils/connection.php b/frontend/utils/connection.php new file mode 100644 index 0000000..b510c99 --- /dev/null +++ b/frontend/utils/connection.php @@ -0,0 +1,17 @@ + + + diff --git a/frontend/utils/functions.php b/frontend/utils/functions.php new file mode 100644 index 0000000..2f79874 --- /dev/null +++ b/frontend/utils/functions.php @@ -0,0 +1,449 @@ + + + 0) { + if (!login($con, $user, $pass, true)) { + logout(); + return null; + } + + $user_data = mysqli_fetch_assoc($result); + return $user_data && login($con, $user, $pass, true); + } + } + + return null; +} + +function logout() { + unset($_SESSION["user"]); + unset($_SESSION["pass"]); +} + +function list_domains($con, $username) { + $domains = []; + + // Get the infokeys for the domains associated with the user + $query = "SELECT infokey FROM accountinfos WHERE username = ? AND type = 'domain'"; + $stmt = mysqli_prepare($con, $query); + mysqli_stmt_bind_param($stmt, 's', $username); + mysqli_stmt_execute($stmt); + $result = mysqli_stmt_get_result($stmt); + + $infokeys = []; + while ($row = mysqli_fetch_assoc($result)) { + $infokeys[] = $row['infokey']; + } + + // Fetch the domains based on the infokeys + if (!empty($infokeys)) { + $placeholders = implode(',', array_fill(0, count($infokeys), '?')); + $types = str_repeat('s', count($infokeys)); + + $query = "SELECT * FROM domains WHERE accesskey IN ($placeholders)"; + $stmt = mysqli_prepare($con, $query); + + // Dynamically bind the parameters + mysqli_stmt_bind_param($stmt, $types, ...$infokeys); + mysqli_stmt_execute($stmt); + $result = mysqli_stmt_get_result($stmt); + + $domains = mysqli_fetch_all($result, MYSQLI_ASSOC); + } + + return $domains; +} + +function list_topleveldomains($con, $username) { + $query = "SELECT infokey FROM accountinfos WHERE username = ? AND type = 'tld'"; + $stmt = mysqli_prepare($con, $query); + mysqli_stmt_bind_param($stmt, 's', $username); + mysqli_stmt_execute($stmt); + $result = mysqli_stmt_get_result($stmt); + + $tlds = []; + while ($row = mysqli_fetch_assoc($result)) { + $infokey = $row['infokey']; + $query = "SELECT * FROM topleveldomains WHERE accesskey = ?"; + $stmt = mysqli_prepare($con, $query); + mysqli_stmt_bind_param($stmt, 's', $infokey); + mysqli_stmt_execute($stmt); + $result_tld = mysqli_stmt_get_result($stmt); + $tlds = array_merge($tlds, mysqli_fetch_all($result_tld, MYSQLI_ASSOC)); + } + + return $tlds; +} + +function list_apikeys($con, $username) { + $query = "SELECT infokey FROM accountinfos WHERE username = ? AND type = 'api'"; + $stmt = mysqli_prepare($con, $query); + mysqli_stmt_bind_param($stmt, 's', $username); + mysqli_stmt_execute($stmt); + $result = mysqli_stmt_get_result($stmt); + + $apikeys = []; + while ($row = mysqli_fetch_assoc($result)) { + $infokey = $row['infokey']; + $query = "SELECT * FROM apikeys WHERE keyapi = ?"; + $stmt = mysqli_prepare($con, $query); + mysqli_stmt_bind_param($stmt, 's', $infokey); + mysqli_stmt_execute($stmt); + $result_apikey = mysqli_stmt_get_result($stmt); + $apikeys = array_merge($apikeys, mysqli_fetch_all($result_apikey, MYSQLI_ASSOC)); + } + + return $apikeys; +} + +function create_domain($con, $name, $topLevelDomain, $destination, $username) { + if (!domainRegisteringAllowed($con)) return false; + if (domain_exists($con, $name, $topLevelDomain)) return false; + if (strlen($name) < 3 || strlen($name) > 20) return false; + if (!top_level_domain_exists($con, $topLevelDomain)) return false; + if (!is_valid_domain($name)) return false; + if (!is_valid_top_level_domain($topLevelDomain)) return false; + if (!username_exists($con, $username)) return false; + + $access_key = generate_key($name . "." . $topLevelDomain . "=" . $username); + $query = "INSERT INTO domains (name, topleveldomain, destination, accesskey) VALUES (?, ?, ?, ?)"; + $stmt = mysqli_prepare($con, $query); + mysqli_stmt_bind_param($stmt, 'ssss', $name, $topLevelDomain, $destination, $access_key); + $result = mysqli_stmt_execute($stmt); + + if ($result) { + $query = "INSERT INTO accountinfos (username, infokey, type) VALUES (?, ?, 'domain')"; + $stmt = mysqli_prepare($con, $query); + mysqli_stmt_bind_param($stmt, 'ss', $username, $access_key); + $result = mysqli_stmt_execute($stmt); + + return $result; + } + + return false; +} + +function create_top_level_domain($con, $name, $infoSite, $username) { + if (!topLevelDomainRegisteringAllowed($con)) return false; + if (strlen($name) < 3 || strlen($name) > 10) return false; + if (top_level_domain_exists($con, $name)) return false; + if (!is_valid_top_level_domain($name)) return false; + if (!username_exists($con, $username)) return false; + + $access_key = generate_key($infoSite . "." . $name . "=" . $username); + $query = "INSERT INTO topleveldomains (name, accesskey, info) VALUES (?, ?, ?)"; + $stmt = mysqli_prepare($con, $query); + mysqli_stmt_bind_param($stmt, 'sss', $name, $access_key, $infoSite); + $result = mysqli_stmt_execute($stmt); + + if ($result) { + $query = "INSERT INTO accountinfos (username, infokey, type) VALUES (?, ?, 'tld')"; + $stmt = mysqli_prepare($con, $query); + mysqli_stmt_bind_param($stmt, 'ss', $username, $access_key); + $result = mysqli_stmt_execute($stmt); + + return $result; + } + + return false; +} + +function create_api_key($con, $username, $application) { + if (!username_exists($con, $username)) return false; + if (has_api_key($con, $username, $application)) return false; + + $currentApiKeyCount = getCurrentApiKeyCount($con, $username); + $maxApiKeyCount = maxApiKeys($con); + + if ($maxApiKeyCount != -1 && $currentApiKeyCount >= $maxApiKeyCount) return false; + + $apikey = generate_key($username . "=" . $application); + $query = "INSERT INTO apikeys (username, application, keyapi) VALUES (?, ?, ?)"; + $stmt = mysqli_prepare($con, $query); + mysqli_stmt_bind_param($stmt, 'sss', $username, $application, $apikey); + $result = mysqli_stmt_execute($stmt); + + if ($result) { + $query = "INSERT INTO accountinfos (username, infokey, type) VALUES (?, ?, 'api')"; + $stmt = mysqli_prepare($con, $query); + mysqli_stmt_bind_param($stmt, 'ss', $username, $apikey); + $result = mysqli_stmt_execute($stmt); + + return $result; + } + + return false; +} + +function getCurrentApiKeyCount($con, $username) { + $query = "SELECT COUNT(*) as count FROM apikeys WHERE username = '$username'"; + $result = mysqli_query($con, $query); + if ($result && $row = mysqli_fetch_assoc($result)) { + return intval($row['count']); + } + + return 0; +} + +function is_valid_domain(string $name) { + global $DOMAIN_PATTERN; + return preg_match($DOMAIN_PATTERN, $name); +} + +function is_valid_top_level_domain(string $topLevelDomain) { + global $TOP_LEVEL_DOMAIN_PATTERN; + return preg_match($TOP_LEVEL_DOMAIN_PATTERN, $topLevelDomain); +} + +function validate_domain_access_key($con, $name, $topLevelDomain, $accessKey) { + $query = "SELECT * FROM domains WHERE name = '$name' AND topleveldomain = '$topLevelDomain' AND accesskey = '$accessKey'"; + $result = mysqli_query($con, $query); + + return $result && mysqli_num_rows($result) > 0; +} + +function validate_top_level_domain_access_key($con, $topLevelDomain, $accessKey) { + $query = "SELECT * FROM topleveldomains WHERE name = '$topLevelDomain' AND accesskey = '$accessKey'"; + $result = mysqli_query($con, $query); + return $result && mysqli_num_rows($result) > 0; +} + +function domain_exists($con, $name, $topLevelDomain) { + if (strcasecmp($name, "info") == 0) return true; + + $query = "SELECT * FROM domains WHERE name = '$name' AND topleveldomain = '$topLevelDomain'"; + $result = mysqli_query($con, $query); + + return $result && mysqli_num_rows($result) > 0; +} + +function top_level_domain_exists($con, $topLevelDomain) { + if (strcasecmp($topLevelDomain, "oac") == 0) return true; + $query = "SELECT * FROM topleveldomains WHERE name = '$topLevelDomain'"; + $result = mysqli_query($con, $query); + + return $result && mysqli_num_rows($result) > 0; +} + +function validate_api_key($con, $username, $application, $apikey) { + if (!username_exists($con, $username)) return false; + if (!has_api_key($con, $username, $application)) return false; + + $query = "SELECT * FROM apikeys WHERE application = '$application' AND keyapi = '$apikey' AND username = '$username'"; + $result = mysqli_query($con, $query); + + return $result && mysqli_num_rows($result) > 0; +} + +function has_api_key($con, $username, $application) { + if (!username_exists($con, $username)) return false; + + $query = "SELECT * FROM apikeys WHERE application = '$application' AND username = '$username'"; + $result = mysqli_query($con, $query); + + return $result && mysqli_num_rows($result) > 0; +} + +function username_exists($con, $username) { + $query = "SELECT * FROM accounts WHERE username = '$username'"; + $result = mysqli_query($con, $query); + + return $result && mysqli_num_rows($result) > 0; +} + +function create_account($con, $username, $password) { + if (!accountRegisteringAllowed($con)) return false; + if (username_exists($con, $username)) return false; + $pw = hash('sha512', $password); + + $query = "INSERT INTO accounts (username, password) VALUES (?, ?)"; + $stmt = mysqli_prepare($con, $query); + mysqli_stmt_bind_param($stmt, 'ss', $username, $pw); + $result = mysqli_stmt_execute($stmt); + return $result; +} + +function login($con, $username, $password, $sha = false) { + if (!username_exists($con, $username)) return false; + $pw = $password; + if (!$sha) $pw = hash('sha512', $password); + + $query = "SELECT * FROM accounts WHERE username = '$username' AND password = '$pw'"; + $result = mysqli_query($con, $query); + + return $result && mysqli_num_rows($result) > 0; +} + +function generate_key($based) { + $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; + $charactersLength = strlen($characters); + $randomString = ''; + for ($i = 0; $i < 20; $i++) $randomString .= $characters[random_int(0, $charactersLength - 1)]; + + return hash("sha512", $based . $randomString); +} + +function delete_api_key($con, $username, $application, $apiKey) { + if (!username_exists($con, $username)) return false; + if (!has_api_key($con, $username, $application)) return false; + if (!validate_api_key($con, $username, $application, $apiKey)) return false; + + $query = "DELETE FROM apikeys WHERE application = ? AND keyapi = ? AND username = ?"; + $stmt = mysqli_prepare($con, $query); + mysqli_stmt_bind_param($stmt, 'sss', $application, $apiKey, $username); + $result = mysqli_stmt_execute($stmt); + + if ($result) { + $query = "DELETE FROM accountinfos WHERE username = ? AND infokey = ? AND type = 'api'"; + $stmt = mysqli_prepare($con, $query); + mysqli_stmt_bind_param($stmt, 'ss', $username, $apiKey); + $result = mysqli_stmt_execute($stmt); + } + + return $result; +} + +function delete_domain($con, $name, $topLevelDomain, $accessKey) { + if (!validate_domain_access_key($con, $name, $topLevelDomain, $accessKey)) return false; + + $query = "DELETE FROM domains WHERE name = ? AND topleveldomain = ? AND accesskey = ?"; + $stmt = mysqli_prepare($con, $query); + mysqli_stmt_bind_param($stmt, 'sss', $name, $topLevelDomain, $accessKey); + $result = mysqli_stmt_execute($stmt); + + if ($result) { + $query = "DELETE FROM accountinfos WHERE infokey = ?"; + $stmt = mysqli_prepare($con, $query); + mysqli_stmt_bind_param($stmt, 's', $accessKey); + mysqli_stmt_execute($stmt); + } + + return $result; +} + +function delete_top_level_domain($con, $topLevelDomain, $accessKey) { + if (!validate_top_level_domain_access_key($con, $topLevelDomain, $accessKey)) return false; + + $query = "DELETE FROM topleveldomains WHERE name = ? AND accesskey = ?"; + $stmt = mysqli_prepare($con, $query); + mysqli_stmt_bind_param($stmt, 'ss', $topLevelDomain, $accessKey); + $result = mysqli_stmt_execute($stmt); + + if ($result) { + $query = "DELETE FROM accountinfos WHERE infokey = ?"; + $stmt = mysqli_prepare($con, $query); + mysqli_stmt_bind_param($stmt, 's', $accessKey); + mysqli_stmt_execute($stmt); + } + + return $result; +} + +function delete_account($con, $username) { + if (!username_exists($con, $username)) return false; + + $query = "SELECT infokey FROM accountinfos WHERE username = ? AND type = 'domain'"; + $stmt = mysqli_prepare($con, $query); + mysqli_stmt_bind_param($stmt, 's', $username); + mysqli_stmt_execute($stmt); + $result = mysqli_stmt_get_result($stmt); + + while ($row = mysqli_fetch_assoc($result)) { + $infokey = $row['infokey']; + $query = "DELETE FROM domains WHERE accesskey = ?"; + $stmt = mysqli_prepare($con, $query); + mysqli_stmt_bind_param($stmt, 's', $infokey); + mysqli_stmt_execute($stmt); + } + + $query = "SELECT infokey FROM accountinfos WHERE username = ? AND type = 'tld'"; + $stmt = mysqli_prepare($con, $query); + mysqli_stmt_bind_param($stmt, 's', $username); + mysqli_stmt_execute($stmt); + $result = mysqli_stmt_get_result($stmt); + + while ($row = mysqli_fetch_assoc($result)) { + $infokey = $row['infokey']; + $query = "DELETE FROM topleveldomains WHERE accesskey = ?"; + $stmt = mysqli_prepare($con, $query); + mysqli_stmt_bind_param($stmt, 's', $infokey); + mysqli_stmt_execute($stmt); + } + + $query = "DELETE FROM apikeys WHERE username = ?"; + $stmt = mysqli_prepare($con, $query); + mysqli_stmt_bind_param($stmt, 's', $username); + mysqli_stmt_execute($stmt); + + $query = "DELETE FROM accountinfos WHERE username = ?"; + $stmt = mysqli_prepare($con, $query); + mysqli_stmt_bind_param($stmt, 's', $username); + mysqli_stmt_execute($stmt); + + $query = "DELETE FROM accounts WHERE username = ?"; + $stmt = mysqli_prepare($con, $query); + mysqli_stmt_bind_param($stmt, 's', $username); + $result = mysqli_stmt_execute($stmt); + + return $result; +} + +function getConfigValue($con, $name) { + $query = "SELECT value FROM config WHERE name = '$name'"; + $result = mysqli_query($con, $query); + + if ($result && $row = mysqli_fetch_assoc($result)) { + return $row['value']; + } + + return null; +} + +function parseBoolean($value) { + return filter_var($value, FILTER_VALIDATE_BOOLEAN); +} + +function topLevelDomainRegisteringAllowed($con) { + $value = getConfigValue($con, 'allow_register_tld'); + return $value !== null && parseBoolean(intval($value)); +} + +function domainRegisteringAllowed($con) { + $value = getConfigValue($con, 'allow_register_domain'); + return $value !== null && parseBoolean(intval($value)); +} + +function accountRegisteringAllowed($con) { + $value = getConfigValue($con, 'allow_register_account'); + return $value !== null && parseBoolean(intval($value)); +} + +function maxApiKeys($con) { + $value = getConfigValue($con, 'max_apikeys'); + return $value !== null ? intval($value) : 0; +} + +?> diff --git a/frontend/utils/index.php b/frontend/utils/index.php new file mode 100644 index 0000000..024a321 --- /dev/null +++ b/frontend/utils/index.php @@ -0,0 +1,11 @@ + + + diff --git a/open_autonomous_connection.sql b/open_autonomous_connection.sql new file mode 100644 index 0000000..26c1f37 --- /dev/null +++ b/open_autonomous_connection.sql @@ -0,0 +1,194 @@ +-- phpMyAdmin SQL Dump +-- version 5.1.1deb5ubuntu1 +-- https://www.phpmyadmin.net/ +-- +-- Host: localhost:3306 +-- Erstellungszeit: 09. Jul 2024 um 13:40 +-- Server-Version: 10.6.18-MariaDB-0ubuntu0.22.04.1 +-- PHP-Version: 8.1.2-1ubuntu2.18 + +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +START TRANSACTION; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; + +-- +-- Datenbank: `open_autonomous_connection` +-- + +-- -------------------------------------------------------- + +-- +-- Tabellenstruktur für Tabelle `accountinfos` +-- + +CREATE TABLE `accountinfos` ( + `id` int(11) NOT NULL, + `username` varchar(255) NOT NULL, + `infokey` varchar(255) NOT NULL, + `type` varchar(255) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- -------------------------------------------------------- + +-- +-- Tabellenstruktur für Tabelle `accounts` +-- + +CREATE TABLE `accounts` ( + `id` int(11) NOT NULL, + `username` varchar(255) NOT NULL, + `password` varchar(255) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- -------------------------------------------------------- + +-- +-- Tabellenstruktur für Tabelle `apikeys` +-- + +CREATE TABLE `apikeys` ( + `id` int(11) NOT NULL, + `application` varchar(255) NOT NULL, + `keyapi` varchar(255) NOT NULL, + `username` varchar(255) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- -------------------------------------------------------- + +-- +-- Tabellenstruktur für Tabelle `config` +-- + +CREATE TABLE `config` ( + `id` int(11) NOT NULL, + `name` varchar(255) NOT NULL, + `value` varchar(255) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- +-- Daten für Tabelle `config` +-- + +INSERT INTO `config` (`id`, `name`, `value`) VALUES + (1, 'allow_register_tld', '1'), + (2, 'allow_register_domain', '1'), + (3, 'allow_register_account', '1'), + (4, 'max_apikeys', '5'); + +-- -------------------------------------------------------- + +-- +-- Tabellenstruktur für Tabelle `domains` +-- + +CREATE TABLE `domains` ( + `id` int(11) NOT NULL, + `name` varchar(255) NOT NULL, + `topleveldomain` varchar(255) NOT NULL, + `destination` varchar(255) NOT NULL, + `accesskey` varchar(255) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- -------------------------------------------------------- + +-- +-- Tabellenstruktur für Tabelle `topleveldomains` +-- + +CREATE TABLE `topleveldomains` ( + `id` int(11) NOT NULL, + `name` varchar(255) NOT NULL, + `accesskey` varchar(255) NOT NULL, + `info` varchar(255) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- +-- Indizes der exportierten Tabellen +-- + +-- +-- Indizes für die Tabelle `accountinfos` +-- +ALTER TABLE `accountinfos` + ADD PRIMARY KEY (`id`); + +-- +-- Indizes für die Tabelle `accounts` +-- +ALTER TABLE `accounts` + ADD PRIMARY KEY (`id`); + +-- +-- Indizes für die Tabelle `apikeys` +-- +ALTER TABLE `apikeys` + ADD PRIMARY KEY (`id`); + +-- +-- Indizes für die Tabelle `config` +-- +ALTER TABLE `config` + ADD PRIMARY KEY (`id`); + +-- +-- Indizes für die Tabelle `domains` +-- +ALTER TABLE `domains` + ADD PRIMARY KEY (`id`); + +-- +-- Indizes für die Tabelle `topleveldomains` +-- +ALTER TABLE `topleveldomains` + ADD PRIMARY KEY (`id`); + +-- +-- AUTO_INCREMENT für exportierte Tabellen +-- + +-- +-- AUTO_INCREMENT für Tabelle `accountinfos` +-- +ALTER TABLE `accountinfos` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9; + +-- +-- AUTO_INCREMENT für Tabelle `accounts` +-- +ALTER TABLE `accounts` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3; + +-- +-- AUTO_INCREMENT für Tabelle `apikeys` +-- +ALTER TABLE `apikeys` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4; + +-- +-- AUTO_INCREMENT für Tabelle `config` +-- +ALTER TABLE `config` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5; + +-- +-- AUTO_INCREMENT für Tabelle `domains` +-- +ALTER TABLE `domains` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7; + +-- +-- AUTO_INCREMENT für Tabelle `topleveldomains` +-- +ALTER TABLE `topleveldomains` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=18; +COMMIT; + +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/pom.xml b/pom.xml index 5047260..71d91b5 100644 --- a/pom.xml +++ b/pom.xml @@ -5,8 +5,8 @@ 4.0.0 org.openautonomousconnection - DNSServer - 1.0-SNAPSHOT + INSServer + 1.0-CLASSIC Open Autonomous Connection https://open-autonomous-connection.org/ @@ -45,13 +45,13 @@ Issue Tracker - https://repo.open-autonomous-connection.org/open-autonomous-connection/DNSServer/issues + https://repo.open-autonomous-connection.org/open-autonomous-connection/INSServer/issues Open Autonomous Public License - https://repo.open-autonomous-connection.org/Open-Autonomous-Connection/OAPL/ + https://open-autonomous-connection.org/license.html repo @@ -70,7 +70,12 @@ org.openautonomousconnection protocol - 1.0.0-BETA.7 + 1.0.0-CLASSIC + + + mysql + mysql-connector-java + 5.1.39 \ No newline at end of file diff --git a/run/certificates/private/ca/ca_dns_89.1.219.73.key b/run/certificates/private/ca/ca_dns_89.1.219.73.key deleted file mode 100644 index 197784e..0000000 --- a/run/certificates/private/ca/ca_dns_89.1.219.73.key +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -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 -c5RF/V4VtgM7jggSLlUUgO0L2/Hw5bM= ------END PRIVATE KEY----- diff --git a/run/certificates/private/server/cert_dns_89.1.219.73.key b/run/certificates/private/server/cert_dns_89.1.219.73.key deleted file mode 100644 index 144cadf..0000000 --- a/run/certificates/private/server/cert_dns_89.1.219.73.key +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCGKkc5obUKeeX8 -gDZff4YUoKIoWHMkdxNxpt2UjR7I0TcFVXbOdpEFG1jBLrlcPvTs1LaJ7exQ9657 -wma9OMzhn6Lmtp6ecahKGMpnMHSUjFUe45nRtNur6g5i5T5rYcnzaxJBaSxzcV/r -hI/KXRIbxEh+w7/X39wN3ze6EKdQWgHkv7Wsw9R5aGQBtWOQLnj+5wnveJDl3te+ -B4oQ60fokW6Dt4RRe4u/YRyu+2VvG8x3RF/OQpDz4qFZHO6hGcS+hbNRyiIkhvdB -a8Qqu1bbDyVc80bkiiPDTO/FQVCxalDMTF7N00ng80OelLs4T+cwR/KQO9NWwgzM -6gJ38aplAgMBAAECggEAEQE5ztWunxnNKyBLA/ajVWj4tJllWqlXBxApxILQdI6D -5UKsUMXZYqbRLIcSCl2WaJAbZMcJrUd/T4NXx0L0QOKdYJWj7BwmwuF6gfKzzAIv -Zb9eRySftR3w3dsFetHFqXsYML82WZl0mWLPYMxEF83cjGieH6vpdb6ljwk+U6It -4WkyxUPojBsTdhmc+T1wI8NpegeRvNy/7euXZXaoo//Rf/fBUFRfSvVfDSMcKDIq -H4dcMAFc2ZHVE2wUuwqLbNbI8L/yuBgP5CHxnHSqG5nZQNMX3hg5winnAyp/iwnR -VA072TeuxqLx68qHEMhhZqO6Te63VtgBpYPapGT4UQKBgQC6Hwq9vXeL7JWsiZqX -Suh8kj/puy/CSeuWBopJVBJkGjyP3DDKtoJqEeOeMajL8rSW3RaCUdv4FvilGfc4 -9zTuJBSZTMpoUaCpuX1k6jYOtwcMe17KdJB7Sr1bjKef3VdOpSA+pG3lElz1sH7t -sG6hdIx3mhJB/HpYKGN4A4h8GQKBgQC4iX/E1mvdDVnXcE4cFN/exSYQFmtNDBYe -o6QbLsjEqISAOxipLRTZhQjvePzSD4Y4F7jKqNcvK6LZnQiE43C6VImMT8UT7C2a -ht96l3/bDEGEls1HrzqVVepCWQGnKltkOU69HDRYXJCGJwZ5hfx66UtsXR0ICSNH -EHBoZE3qLQKBgAx4Xfjeg+79F/4qbhAq9a67ActAPm/vEfjIUWWeW2kXlO0ynJZI -ai5/KlgEDcI0bcMZ5xMuNuXFbD1rovPPJF28TyECUyFwLqqQggVL5/lObAt7DJvV -+YQ5OryyjNyaMOpVB/cKf050z4OqoqZ8Rr1MmMi+qvB+4RedBSUaX3+pAoGACwbM -R6q4T0EY+TKQuETXC6ykFZoBV109hR8qEyW8gWPAZxkg5Br5f/XfDtAf6z1aO8fP -Fuz3zq3A0Vf8xlQAzGF4xpWNpR8bqnwcpmqfDSuyToXkRkBGM94qXUSMQLzbMSXr -eolQ52bAjAOQ83n6GC4Qf60gqvZA0WI+FT7JGRECgYAi54HhK7HFogAlX58EX77h -YHL5KHBlG+l8v4amIKvD0JclYylwyLhYkmIM+T4mh8I+T1nabcNeNWit+CYoLwQ8 -A3P0ij67TkEV3Ud7KKOtYty+getkM9/hwm14LlMzfLZKay9HCsbb5E2TgmShF68F -VtECuunYyfN4wJSE0aWRPg== ------END PRIVATE KEY----- diff --git a/run/certificates/public/ca/ca_dns_89.1.219.73.pem b/run/certificates/public/ca/ca_dns_89.1.219.73.pem deleted file mode 100644 index bf6ae1b..0000000 --- a/run/certificates/public/ca/ca_dns_89.1.219.73.pem +++ /dev/null @@ -1,31 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFazCCA1OgAwIBAgIUQ67NCnk5KBqDD7fHdzKVi+AfRR8wDQYJKoZIhvcNAQEL -BQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM -GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yNTA5MjExMTU2NTlaFw0zNTA5 -MTkxMTU2NTlaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEw -HwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQC9Uu9/sNevUGr1k6LI5jdI/HAbsgaS2eFat0mdPKhD -0IrDMozhZ1zDh6w/4iOhNC6ypwy0+1l/r6cT6xL2s3x+DxoaeskMpRD4kd97cE7Y -rvxXMSwFj5exVnyps03QXFQigZryW5z26xyFJw3i6XiHkhpz1fwMKBXynkUROy5I -uZu5oTsNko+dcjZWtOI9Tnf0HqmEW8JrhpjwJnZX8HBs0Ydd+gr7/nITLF6Eq0Gd -1uRupsAOSsZfdXofqgxfVy5CsAyfK/163cnLBZ5ynKMzqyhxS/9wLQfBLq6499e8 -w5+5/WHPIZLFeVOfdunudEFmE5aQwjnNBESIEyaaYlhXQdKhTnAU2JYEg4pnp43D -XMxsPeDY/OXDoQAJbuj1ip6jFwIyt8cj6uGvdiFrY1Nqa1Ua2YrN0xRvZ6WioYyr -NO7TOkgCC90aop7gxps/ZgYTl2VsTzAtDZXYmKjc+ZNx5F+h5gLhJMNTbzQ2KweE -/7/5ghjHEwc2Z28gh5wOkmK7knuyv1mv4s5ZUfOXs+Xv0sI4fZiNKyaESoyh4zoH -PfUpTMhYPjzpa5g6PDaxs2ewq7Zr0Lvjk12p+vM6xUeO70RQAK8tftoHmTxZDfh7 -NxMCnViD1q/2qRLOlSmOyxmH+hmy/4eNkROjMn8pyDHPEC3kg0ZuvS/Zutnm+WkX -uQIDAQABo1MwUTAdBgNVHQ4EFgQUEZqY1o2roD7YNKIYE7V/odSz1uwwHwYDVR0j -BBgwFoAUEZqY1o2roD7YNKIYE7V/odSz1uwwDwYDVR0TAQH/BAUwAwEB/zANBgkq -hkiG9w0BAQsFAAOCAgEAAV1Mafun3XwC2cs4Xgq1vzJw69I24y8dXm45qFdLl5Vv -hkIecwDm2+Ongg82sPPmR1TwsRgdUytywal5nsa1aH/v70MJ7Ic5pBIXdv54kZ8v -qgaItmHF+twb+aqFz/NY0BMv7nNc2MyYEyDwbJUIGwGt+yOlQfHUIwNc+PvVL6Sn -mkm7//EIfiU3HxmusCnbYC+9kmLbeds10qDzTNIHP4ffNAFgnMgauNID8X9RoPBT -TVqLjD5WDHridLMF8n0m18cp2MqV33gXbg4pT/rYvh40p9jJuGDJbcrn5WtKvbMn -lm27oI6bcwKF2i+VHRBxW/c/DZaG0QKo4PaDCd/kF2ix1ymkFG4MtvHmu0Q3SLXi -p7fTL4WZSEUPXe/E7fUuPwof54auXLYNhSR9HJo0ZS2R0S9pursBkBEXTXyiG8T+ -iUq4VtBny1Ylr2rJ8Qr1TiaB5ud/IeEv70uDgA9XyUhikfs7t5bYrqdXjANtCvZY -j322+I3wyDdosu2Z1Lrn2w95ZyJhc/rluftc1lKnxgYwKndEJfBlhn8tpHlk2J9T -rPqAezvNhSXH1W6G7WZAvHfdfJahLDhfJ15YQcqqPK+DXEaJeOnUompV+/MEaEOE -3LwN4B78mTgVOcabMeo1NN/2nGObaOm/62t+3B9NwcUi9q1LT/oifLVBh8bEFug= ------END CERTIFICATE----- diff --git a/run/certificates/public/ca/ca_dns_89.1.219.73.srl b/run/certificates/public/ca/ca_dns_89.1.219.73.srl deleted file mode 100644 index c10dfa6..0000000 --- a/run/certificates/public/ca/ca_dns_89.1.219.73.srl +++ /dev/null @@ -1 +0,0 @@ -5FB2F5A2CA8357D37C84CC406B5F81617348EB58 diff --git a/run/certificates/public/server/cert_dns_89.1.219.73.crt b/run/certificates/public/server/cert_dns_89.1.219.73.crt deleted file mode 100644 index 75d1018..0000000 --- a/run/certificates/public/server/cert_dns_89.1.219.73.crt +++ /dev/null @@ -1,26 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIEWjCCAkKgAwIBAgIUX7L1osqDV9N8hMxAa1+BYXNI61gwDQYJKoZIhvcNAQEL -BQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM -GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yNTA5MjExMTU3MzFaFw0yNzEy -MjUxMTU3MzFaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEw -HwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggEiMA0GCSqGSIb3DQEB -AQUAA4IBDwAwggEKAoIBAQCGKkc5obUKeeX8gDZff4YUoKIoWHMkdxNxpt2UjR7I -0TcFVXbOdpEFG1jBLrlcPvTs1LaJ7exQ9657wma9OMzhn6Lmtp6ecahKGMpnMHSU -jFUe45nRtNur6g5i5T5rYcnzaxJBaSxzcV/rhI/KXRIbxEh+w7/X39wN3ze6EKdQ -WgHkv7Wsw9R5aGQBtWOQLnj+5wnveJDl3te+B4oQ60fokW6Dt4RRe4u/YRyu+2Vv -G8x3RF/OQpDz4qFZHO6hGcS+hbNRyiIkhvdBa8Qqu1bbDyVc80bkiiPDTO/FQVCx -alDMTF7N00ng80OelLs4T+cwR/KQO9NWwgzM6gJ38aplAgMBAAGjQjBAMB0GA1Ud -DgQWBBTW7Nng9W84V+q0TknoTempPZo2KjAfBgNVHSMEGDAWgBQRmpjWjaugPtg0 -ohgTtX+h1LPW7DANBgkqhkiG9w0BAQsFAAOCAgEAguDRKxW8QFV7fJlzAgzjwsBu -97Bk5IsmcIU7sOlmOFYZAG0hwqfuvzU/Tv48tuXOvGQsJtdNSfe4qybd5HnkxmTs -ZmqzCsIh9P4PL/KrKTCykEP935468wg/X9QkykBOJx2zOgBEllxo33BNG4ie6R3H -tYy/1y/hsGfi4Ma2jqBaPfblI86t9VoKiPqqKqFgGk32F4NqIJ2hMKxSypznHIC7 -IPikKx9Gt8EpwT+ytJKOnd/A7nBEiaDw5ubcR1s6pmlcGLAE1+A9TX2ncRUcvMI4 -w2M5i7X/Vz2zQiPEWmQliYDG1ZFeD1dth973muM6H6NvFyXvEzzRZl5K5DwAcgqA -uMvEKDiDPwKROBTzjq3WIHBe49fz96Fpxld5JxH3RhC2PzIYjUquU2P8Ah6SN6SZ -+Mf/61QxNInnEcxNjknGhcfiyhoqu2B+1/N5cfpXyBfgTQfVzV3HiUvAHzcza9yp -mnPrrxRodkXwncMJNJYTr36yTyZPxC0TZUycvOPwEfBQ1vESAeiJ7+QgFGFu0lgQ -1XAJVpCfHpDrkT184/pszyHHzydWvP7GcrPgJVNlXbMvpenhm2QTCaft5TUDj9+m -8quLjm+bj0OQq1Fmv/OlWvycC5fxnYA0JlRDz56QPHkEL7aZ/+apZhB6Eb77/etv -A5go7PJCZ9vnblPW/HE= ------END CERTIFICATE----- diff --git a/run/config.properties b/run/config.properties deleted file mode 100644 index 6cc7bee..0000000 --- a/run/config.properties +++ /dev/null @@ -1,3 +0,0 @@ -#Sat Oct 04 01:25:22 CEST 2025 -server.site.info=DNS-SERVER INFO SITE IP -server.site.register=SERVER IP TO DNS-FRONTENT WEBSITE diff --git a/src/main/java/org/openautonomousconnection/dns/ClassicHandler.java b/src/main/java/org/openautonomousconnection/dns/ClassicHandler.java deleted file mode 100644 index ac65573..0000000 --- a/src/main/java/org/openautonomousconnection/dns/ClassicHandler.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.openautonomousconnection.dns; - -import org.openautonomousconnection.protocol.side.dns.ConnectedProtocolClient; -import org.openautonomousconnection.protocol.versions.v1_0_0.classic.handlers.ClassicHandlerDNSServer; -import org.openautonomousconnection.protocol.versions.v1_0_0.classic.objects.Classic_Domain; -import org.openautonomousconnection.protocol.versions.v1_0_0.classic.objects.Classic_RequestDomain; -import org.openautonomousconnection.protocol.versions.v1_0_0.classic.utils.Classic_ProtocolVersion; - -import java.sql.SQLException; - -public class ClassicHandler extends ClassicHandlerDNSServer { - @Override - public void handleMessage(ConnectedProtocolClient client, String message, Classic_ProtocolVersion protocolVersion) { - - } - - @Override - public Classic_Domain getDomain(Classic_RequestDomain requestDomain) throws SQLException { - return null; - } - - @Override - public Classic_Domain ping(Classic_RequestDomain requestDomain) throws SQLException { - return null; - } - - @Override - public void unsupportedClassicPacket(String className, Object[] content, ConnectedProtocolClient client) { - - } -} diff --git a/src/main/java/org/openautonomousconnection/dns/DomainManager.java b/src/main/java/org/openautonomousconnection/dns/DomainManager.java new file mode 100644 index 0000000..a8d6773 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/dns/DomainManager.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2024 Open Autonomous Connection - All Rights Reserved + * + * You are unauthorized to remove this copyright. + * You have to give Credits to the Author in your project and link this GitHub site: https://github.com/Open-Autonomous-Connection + * See LICENSE-File if exists + */ + +/* + * Copyright (C) 2024 Open Autonomous Connection - All Rights Reserved + * + * You are unauthorized to remove this copyright. + * You have to give Credits to the Author in your project and link this GitHub site: https://github.com/Open-Autonomous-Connection + * See LICENSE-File if exists + */ + +package org.openautonomousconnection.dns; + +import org.openautonomousconnection.dns.utils.Database; +import org.openautonomousconnection.protocol.domain.Domain; +import org.openautonomousconnection.protocol.domain.RequestDomain; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +public class DomainManager { + + public static Domain getDomain(String name, String topLevelDomain) throws SQLException { + for (Domain domain : getDomains()) + if (domain.name.equalsIgnoreCase(name) && domain.topLevelDomain.equalsIgnoreCase(topLevelDomain)) + return domain; + return null; + } + + public static Domain getDomain(RequestDomain requestDomain) throws SQLException { + return getDomain(requestDomain.name, requestDomain.topLevelDomain); + } + + public static List getDomains() throws SQLException { + List domains = new ArrayList<>(); + + ResultSet result = Database.getConnection().prepareStatement("SELECT name, topleveldomain, destination FROM domains").executeQuery(); + while (result.next()) { + String name = result.getString("name"); + String topLevelDomain = result.getString("topleveldomain"); + String destination = result.getString("destination"); + domains.add(new Domain(name, topLevelDomain, destination, "")); + } + + return domains; + } + + public static List getTopLevelDomains() throws SQLException { + List topLevelDomains = new ArrayList<>(); + + ResultSet result = Database.getConnection().prepareStatement("SELECT name FROM topleveldomains").executeQuery(); + while (result.next()) topLevelDomains.add(result.getString("name")); + return topLevelDomains; + } +} diff --git a/src/main/java/org/openautonomousconnection/dns/Listener.java b/src/main/java/org/openautonomousconnection/dns/Listener.java deleted file mode 100644 index 825f007..0000000 --- a/src/main/java/org/openautonomousconnection/dns/Listener.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.openautonomousconnection.dns; - -import dev.unlegitdqrk.unlegitlibrary.command.events.CommandExecutorMissingPermissionEvent; -import dev.unlegitdqrk.unlegitlibrary.command.events.CommandNotFoundEvent; -import dev.unlegitdqrk.unlegitlibrary.event.EventListener; -import org.openautonomousconnection.protocol.ProtocolBridge; - -public class Listener extends EventListener { - - @dev.unlegitdqrk.unlegitlibrary.event.Listener - public void onCommandNotFound(CommandNotFoundEvent event) { - StringBuilder argsBuilder = new StringBuilder(); - for (String arg : event.getArgs()) argsBuilder.append(arg).append(" "); - ProtocolBridge.getInstance().getLogger().error("Command '" + event.getName() + argsBuilder.toString() + "' not found!"); - } - - @dev.unlegitdqrk.unlegitlibrary.event.Listener - public void onMissingCommandPermission(CommandExecutorMissingPermissionEvent event) { - ProtocolBridge.getInstance().getLogger().error("You do not have enough permissions to execute this command!"); - } -} diff --git a/src/main/java/org/openautonomousconnection/dns/Main.java b/src/main/java/org/openautonomousconnection/dns/Main.java index aed2689..d117956 100644 --- a/src/main/java/org/openautonomousconnection/dns/Main.java +++ b/src/main/java/org/openautonomousconnection/dns/Main.java @@ -1,35 +1,109 @@ +/* + * Copyright (C) 2024 Open Autonomous Connection - All Rights Reserved + * + * You are unauthorized to remove this copyright. + * You have to give Credits to the Author in your project and link this GitHub site: https://github.com/Open-Autonomous-Connection + * See LICENSE-File if exists + */ + package org.openautonomousconnection.dns; -import dev.unlegitdqrk.unlegitlibrary.command.CommandExecutor; -import dev.unlegitdqrk.unlegitlibrary.command.CommandManager; -import dev.unlegitdqrk.unlegitlibrary.command.CommandPermission; -import dev.unlegitdqrk.unlegitlibrary.utils.Logger; +import dev.unlegitdqrk.unlegitlibrary.addon.AddonLoader; +import dev.unlegitdqrk.unlegitlibrary.addon.impl.AddonInfo; +import org.openautonomousconnection.dns.utils.Config; +import org.openautonomousconnection.dns.utils.Database; import org.openautonomousconnection.protocol.ProtocolBridge; import org.openautonomousconnection.protocol.ProtocolSettings; -import org.openautonomousconnection.protocol.versions.ProtocolVersion; +import org.openautonomousconnection.protocol.ProtocolVersion; +import java.io.BufferedReader; import java.io.File; import java.io.IOException; -import java.security.cert.CertificateException; -import java.util.Scanner; +import java.io.InputStreamReader; +import java.lang.reflect.InvocationTargetException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.sql.SQLException; +import java.util.Objects; public class Main { - private static final CommandPermission PERMISSION_ALL = new CommandPermission("all", 1); - private static final CommandExecutor commandExecutor = new CommandExecutor("DNS", PERMISSION_ALL) {}; - private static CommandManager commandManager; + public static ProtocolBridge protocolBridge; + public static AddonLoader addonLoader; - public static void main(String[] args) throws Exception { - ProtocolSettings settings = new ProtocolSettings(); - new ProtocolBridge(new Server(), settings, ProtocolVersion.PV_1_0_0_BETA, new File("logs")); - ProtocolBridge.getInstance().setClassicHandlerDNSServer(new ClassicHandler()); - commandManager = new CommandManager(ProtocolBridge.getInstance().getProtocolSettings().eventManager); - Scanner scanner = new Scanner(System.in); + public static final File modulesFolder = new File("modules"); - while (true) { - System.out.println(commandExecutor.getName() + "> "); - String line = scanner.nextLine(); - commandManager.execute(commandExecutor, line); + public static void main(String[] args) { + try { + URL oracle = new URI("https://raw.githubusercontent.com/Open-Autonomous-Connection/dns/master/src/resources/version.txt").toURL(); + + BufferedReader in = new BufferedReader(new InputStreamReader(oracle.openStream())); + StringBuilder version = new StringBuilder(); + String inputLine; + while ((inputLine = in.readLine()) != null) version.append(inputLine); + + if (!version.toString().equalsIgnoreCase(Files.readString(Path.of(Objects.requireNonNull(Main.class.getResource("../../../version.txt")).toURI())))) { + System.out.println(); + System.out.println("======================================================"); + System.out.println("IMPORTANT: A NEW SERVER VERSION IS PUBLISHED ON GITHUB"); + System.out.println("======================================================"); + System.out.println(); + } + } catch (IOException | URISyntaxException exception) { + System.out.println(); + System.out.println("====================================================================="); + System.out.println("IMPORTANT: SERVER VERSION CHECK COULD NOT COMPLETED! VISIT OUR GITHUB"); + System.out.println(" https://github.com/Open-Autonomous-Connection "); + System.out.println("====================================================================="); + System.out.println(); } + try { + Config.init(); + Database.connect(); + } catch (SQLException | InstantiationException | ClassNotFoundException | IllegalAccessException | IOException exception) { + exception.printStackTrace(); + return; + } + + final ProtocolSettings protocolSettings = new ProtocolSettings(); + protocolSettings.port = Config.getPort(); + + try { + protocolBridge = new ProtocolBridge(ProtocolVersion.PV_1_0_0, protocolSettings, new Server()); + protocolBridge.getProtocolServer().setProtocolBridge(protocolBridge); + protocolBridge.getProtocolServer().getServer().getEventManager().registerListener(ServerEventListener.class); + protocolBridge.getProtocolServer().startServer(); + System.out.println(); + } catch (Exception exception) { + exception.printStackTrace(); + return; + } + + Runtime.getRuntime().addShutdownHook(new Thread(() -> { + try { + protocolBridge.getProtocolServer().stopServer(); + Database.close(); + } catch (SQLException | IOException exception) { + exception.printStackTrace(); + } + })); + + addonLoader = new AddonLoader(protocolSettings.eventManager, null); + + try { + addonLoader.loadAddonsFromDirectory(modulesFolder); + addonLoader.getLoadedAddons().forEach(addon -> { + if (addon.isEnabled()) return; + AddonInfo info = addon.getAddonInfo(); + System.out.println("Enabling Addon '" + info.name() + " v" + info.version() + "' by " + info.author() + "..."); + addon.enable(); + System.out.println("Addon '" + info.name() + " v" + info.version() + "' enabled."); + }); + } catch (IOException exception) { + exception.printStackTrace(); + } } } \ No newline at end of file diff --git a/src/main/java/org/openautonomousconnection/dns/Server.java b/src/main/java/org/openautonomousconnection/dns/Server.java index 47a20f5..6cc7c6c 100644 --- a/src/main/java/org/openautonomousconnection/dns/Server.java +++ b/src/main/java/org/openautonomousconnection/dns/Server.java @@ -1,64 +1,56 @@ +/* + * Copyright (C) 2024 Open Autonomous Connection - All Rights Reserved + * + * You are unauthorized to remove this copyright. + * You have to give Credits to the Author in your project and link this GitHub site: https://github.com/Open-Autonomous-Connection + * See LICENSE-File if exists + */ + package org.openautonomousconnection.dns; -import org.openautonomousconnection.protocol.ProtocolBridge; -import org.openautonomousconnection.protocol.side.dns.ConnectedProtocolClient; -import org.openautonomousconnection.protocol.side.dns.ProtocolDNSServer; -import org.openautonomousconnection.protocol.versions.v1_0_0.beta.DNSResponseCode; -import org.openautonomousconnection.protocol.versions.v1_0_0.beta.Domain; +import dev.unlegitdqrk.unlegitlibrary.network.system.server.ConnectionHandler; +import org.openautonomousconnection.dns.utils.Config; +import org.openautonomousconnection.dns.utils.Database; +import org.openautonomousconnection.protocol.domain.Domain; +import org.openautonomousconnection.protocol.side.ProtocolServer; -import java.io.File; -import java.io.IOException; -import java.security.cert.CertificateException; +import java.sql.ResultSet; +import java.sql.SQLException; import java.util.List; -public class Server extends ProtocolDNSServer { - /** - * Constructs a ProtocolDNSServer with the specified configuration file. - * - * @throws IOException If an I/O error occurs. - * @throws CertificateException If a certificate error occurs. - */ - public Server() throws IOException, CertificateException { - super(new File("config.properties")); +public class Server extends ProtocolServer { + @Override + public List getDomains() throws SQLException { + return DomainManager.getDomains(); } @Override - public List getDomains() { - return List.of(); + public List getTopLevelDomains() throws SQLException { + return DomainManager.getTopLevelDomains(); } @Override - public String getDomainDestination(Domain domain) { - return ""; + public void handleMessage(ConnectionHandler connectionHandler, String message) { + System.out.println("[MESSAGE] " + connectionHandler.getClientID() + ": " + message); } @Override - public String getSubnameDestination(Domain domain, String subname) { - return ""; + public String getInfoSite(String topLevelDomain) throws SQLException { + if (!topLevelDomainExists(topLevelDomain)) return null; + + ResultSet resultSet = Database.getConnection().prepareStatement("SELECT name, info FROM topleveldomains").executeQuery(); + while (resultSet.next()) if (resultSet.getString("name").equals(topLevelDomain)) return resultSet.getString("info"); + + return null; } @Override - public String getTLNInfoSite(String topLevelName) { - return ""; + public String getInterfaceSite() { + return Config.getInterfaceSite(); } @Override - public DNSResponseCode validateDomain(Domain requestedDomain) { - if (!requestedDomain.getProtocol().equalsIgnoreCase("oac")) return DNSResponseCode.RESPONSE_INVALID_REQUEST; - return DNSResponseCode.RESPONSE_DOMAIN_FULLY_NOT_EXIST; - } - - @Override - public void validationPacketSendFailed(Domain domain, ConnectedProtocolClient client, Exception exception) { - ProtocolBridge.getInstance().getLogger().exception("Failed to send ValidationPacket. (" + - "Domain: " + domain.getProtocol() + "." + (domain.hasSubname() ? domain.getSubname() : "") + "." + domain.getTopLevelName() + "/" + domain.getPath() + "?" + domain.getQuery() + "#" + domain.getFragment() + ";" + - ";Client: " + client.getConnectionHandler().getClientID() + ")", exception); - } - - @Override - public void domainDestinationPacketFailedSend(ConnectedProtocolClient client, Domain domain, DNSResponseCode validationResponse, Exception exception) { - ProtocolBridge.getInstance().getLogger().exception("Failed to send DomainDestinationPacket. (" + - "Domain: " + domain.getProtocol() + "." + (domain.hasSubname() ? domain.getSubname() : "") + "." + domain.getTopLevelName() + "/" + domain.getPath() + "?" + domain.getQuery() + "#" + domain.getFragment() + ";" + - "Validation response: " + validationResponse + ";Client: " + client.getConnectionHandler().getClientID() + ")", exception); + public String getDNSServerInfoSite() { + return Config.getInfoSite(); } } diff --git a/src/main/java/org/openautonomousconnection/dns/ServerEventListener.java b/src/main/java/org/openautonomousconnection/dns/ServerEventListener.java new file mode 100644 index 0000000..dd30c61 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/dns/ServerEventListener.java @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2024 Open Autonomous Connection - All Rights Reserved + * + * You are unauthorized to remove this copyright. + * You have to give Credits to the Author in your project and link this GitHub site: https://github.com/Open-Autonomous-Connection + * See LICENSE-File if exists + */ + +package org.openautonomousconnection.dns; + +import dev.unlegitdqrk.unlegitlibrary.event.EventListener; +import dev.unlegitdqrk.unlegitlibrary.event.Listener; +import dev.unlegitdqrk.unlegitlibrary.network.system.server.events.ConnectionHandlerConnectedEvent; +import dev.unlegitdqrk.unlegitlibrary.network.system.server.events.ConnectionHandlerDisconnectedEvent; +import org.openautonomousconnection.protocol.events.v1_0_0.DomainPacketReceivedEvent; +import org.openautonomousconnection.protocol.events.v1_0_0.PingPacketReceivedEvent; + +public class ServerEventListener extends EventListener { + @Listener + public void onConnect(ConnectionHandlerConnectedEvent event) { + System.out.println("New client connected. ID: " + event.getConnectionHandler().getClientID()); + System.out.println(); + } + + @Listener + public void onDisconnect(ConnectionHandlerDisconnectedEvent event) { + System.out.println("Client disconnected. ID: " + event.getConnectionHandler().getClientID()); + System.out.println(); + } + + @Listener + public void onPing(PingPacketReceivedEvent event) { + System.out.println("New Ping request:"); + System.out.println(" » From client id: " + event.clientID); + System.out.println(" » Request domain: " + event.requestDomain.toString()); + System.out.println(" » Path: " + event.requestDomain.getPath()); + System.out.println(" » Reachable: " + (event.reachable ? "Yes" : "No")); + System.out.println(" » Destination: " + (event.domain == null ? "N/A" : event.domain.parsedDestination())); + System.out.println(); + } + + @Listener + public void onExistCheck(DomainPacketReceivedEvent event) { + System.out.println("New Domain packet request:"); + System.out.println(" » From client id: " + event.clientID); + System.out.println(" » Request domain: " + event.requestDomain.toString()); + System.out.println(" » Path: " + event.requestDomain.getPath()); + System.out.println(" » Exists: " + (event.domain == null ? "No" : "Yes")); + System.out.println(" » Destination: " + (event.domain == null ? "N/A" : event.domain.parsedDestination())); + System.out.println(" "); + } +} diff --git a/src/main/java/org/openautonomousconnection/dns/utils/APIManager.java b/src/main/java/org/openautonomousconnection/dns/utils/APIManager.java new file mode 100644 index 0000000..1cdedee --- /dev/null +++ b/src/main/java/org/openautonomousconnection/dns/utils/APIManager.java @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2024 Open Autonomous Connection - All Rights Reserved + * + * You are unauthorized to remove this copyright. + * You have to give Credits to the Author in your project and link this GitHub site: https://github.com/Open-Autonomous-Connection + * See LICENSE-File if exists + */ + +package org.openautonomousconnection.dns.utils; + +import org.openautonomousconnection.protocol.utils.APIInformation; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +public class APIManager { + + public static boolean hasKey(String username, String application) throws SQLException { + PreparedStatement statement = Database.getConnection().prepareStatement("SELECT application, username FROM apikeys WHERE application = ? AND username = ?"); + statement.setString(1, application.toLowerCase()); + statement.setString(2, username); + + ResultSet result = statement.executeQuery(); + return result.next() && result.getString("application").equalsIgnoreCase(application) && result.getString("username").equalsIgnoreCase(username); + } + + public static boolean validateKey(String username, String application, String apiKey) throws SQLException { + if (!hasKey(username, application)) return false; + + PreparedStatement statement = Database.getConnection().prepareStatement("SELECT application, keyapi, username FROM apikeys WHERE application = ? AND keyapi = ? AND username = ?"); + statement.setString(1, application.toLowerCase()); + statement.setString(2, apiKey); + statement.setString(3, username); + + ResultSet result = statement.executeQuery(); + return result.next() && result.getString("application").equalsIgnoreCase(application) && result.getString("keyapi").equals(apiKey) && result.getString("username").equalsIgnoreCase(username); + } + + public static boolean validateKey(APIInformation apiInformation) throws SQLException { + return validateKey(apiInformation.username, apiInformation.apiApplication, apiInformation.apiKey); + } +} diff --git a/src/main/java/org/openautonomousconnection/dns/utils/Config.java b/src/main/java/org/openautonomousconnection/dns/utils/Config.java new file mode 100644 index 0000000..bee7971 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/dns/utils/Config.java @@ -0,0 +1,116 @@ +/* + * Copyright (C) 2024 Open Autonomous Connection - All Rights Reserved + * + * You are unauthorized to remove this copyright. + * You have to give Credits to the Author in your project and link this GitHub site: https://github.com/Open-Autonomous-Connection + * See LICENSE-File if exists + */ + +package org.openautonomousconnection.dns.utils; + +import dev.unlegitdqrk.unlegitlibrary.file.ConfigurationManager; + +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URL; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +public class Config { + + public static boolean parseBoolean(int i) { + return i != 0; + } + + public static int booleanToInt(boolean bool) { + return bool ? 1 : 0; + } + + public static boolean topLevelDomainRegisteringAllowed() throws SQLException { + PreparedStatement statement = Database.getConnection().prepareStatement("SELECT value FROM config WHERE name = ?"); + statement.setString(1, "allow_register_tld"); + ResultSet result = statement.executeQuery(); + return result.next() && parseBoolean(Integer.parseInt(result.getString("value"))); + } + + public static boolean domainRegisteringAllowed() throws SQLException { + PreparedStatement statement = Database.getConnection().prepareStatement("SELECT value FROM config WHERE name = ?"); + statement.setString(1, "allow_register_domain"); + ResultSet result = statement.executeQuery(); + return result.next() && parseBoolean(Integer.parseInt(result.getString("value"))); + } + + public static boolean accountRegisteringAllowed() throws SQLException { + PreparedStatement statement = Database.getConnection().prepareStatement("SELECT value FROM config WHERE name = ?"); + statement.setString(1, "allow_register_account"); + ResultSet result = statement.executeQuery(); + return result.next() && parseBoolean(Integer.parseInt(result.getString("value"))); + } + + public static int maxApiKeys() throws SQLException { + PreparedStatement statement = Database.getConnection().prepareStatement("SELECT value FROM config WHERE name = ?"); + statement.setString(1, "max_apikeys"); + ResultSet result = statement.executeQuery(); + if (!result.next()) return 0; + return Integer.parseInt(result.getString("value")); // -1 = Endless + } + + private static final File configFile = new File("./config.properties"); + private static ConfigurationManager config; + public static void init() throws IOException { + URL whatIsMyIp = new URL("http://checkip.amazonaws.com"); + BufferedReader in = new BufferedReader(new InputStreamReader(whatIsMyIp.openStream())); + + String ip = in.readLine(); + + if (!configFile.exists()) configFile.createNewFile(); + config = new ConfigurationManager(configFile); + config.loadProperties(); + + if (!config.isSet("port")) config.set("port", 9382); + if (!config.isSet("sites.info")) config.set("sites.info", "DNS SERVER NEED A INFO SITE!"); + if (!config.isSet("sites.interface")) config.set("sites.interface", ip); + if (!config.isSet("database.host")) config.set("database.host", "127.0.0.1"); + if (!config.isSet("database.port")) config.set("database.port", 3306); + if (!config.isSet("database.name")) config.set("database.name", "my_db"); + if (!config.isSet("database.username")) config.set("database.username", "my_username"); + if (!config.isSet("database.password")) config.set("database.password", "my_password"); + + config.saveProperties(); + } + + public static String getInfoSite() { + return config.getString("sites.info"); + } + + public static String getInterfaceSite() { + return config.getString("sites.interface"); + } + + public static int getPort() { + return config.getInt("port"); + } + + public static String getDatabaseHost() { + return config.getString("database.host"); + } + + public static int getDatabasePort() { + return config.getInt("database.port"); + } + + public static String getDatabaseName() { + return config.getString("database.name"); + } + + public static String getDatabaseUsername() { + return config.getString("database.username"); + } + + public static String getDatabasePassword() { + return config.getString("database.password"); + } +} diff --git a/src/main/java/org/openautonomousconnection/dns/utils/Database.java b/src/main/java/org/openautonomousconnection/dns/utils/Database.java new file mode 100644 index 0000000..e08852f --- /dev/null +++ b/src/main/java/org/openautonomousconnection/dns/utils/Database.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2024 Open Autonomous Connection - All Rights Reserved + * + * You are unauthorized to remove this copyright. + * You have to give Credits to the Author in your project and link this GitHub site: https://github.com/Open-Autonomous-Connection + * See LICENSE-File if exists + */ + +package org.openautonomousconnection.dns.utils; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +public class Database { + + private static Connection connection; + + public static Connection getConnection() { + return connection; + } + + public static void connect() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException { + if (isConnected()) return; + + Class.forName("com.mysql.jdbc.Driver").newInstance(); + connection = DriverManager.getConnection("jdbc:mysql://" + Config.getDatabaseHost() + ":" + Config.getDatabasePort() + "/" + + Config.getDatabaseName() + "?autoReconnect=true", Config.getDatabaseUsername(), Config.getDatabasePassword()); + } + + public static void close() throws SQLException { + if (!isConnected()) return; + + connection.close(); + connection = null; + } + + public static boolean isConnected() { + return connection != null; + } +} diff --git a/src/main/java/org/openautonomousconnection/dns/utils/Utils.java b/src/main/java/org/openautonomousconnection/dns/utils/Utils.java new file mode 100644 index 0000000..f6655a1 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/dns/utils/Utils.java @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2024 Open Autonomous Connection - All Rights Reserved + * + * You are unauthorized to remove this copyright. + * You have to give Credits to the Author in your project and link this GitHub site: https://github.com/Open-Autonomous-Connection + * See LICENSE-File if exists + */ + +package org.openautonomousconnection.dns.utils; + +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class Utils { + public static String createAccessKey(String input) { + return sha256(shuffleString(sha256(input) + getAlphaNumericString(5) + + sha256(getAlphaNumericString(5)) + + sha256(getAlphaNumericString(5)) + + sha256(getAlphaNumericString(5)))); + } + + public static String sha256(final String base) { + try { + final MessageDigest digest = MessageDigest.getInstance("SHA-256"); + final byte[] hash = digest.digest(base.getBytes(StandardCharsets.UTF_8)); + final StringBuilder hexString = new StringBuilder(); + + for (byte b : hash) { + final String hex = Integer.toHexString(0xff & b); + if (hex.length() == 1) hexString.append('0'); + hexString.append(hex); + } + + return hexString.toString(); + } catch (Exception ex) { + throw new RuntimeException(ex); + } + } + + public static String getAlphaNumericString(int length) { + String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvxyz"; + StringBuilder builder = new StringBuilder(length); + + for (int i = 0; i < length; i++) { + int index = (int) (chars.length() * Math.random()); + builder.append(chars.charAt(index)); + } + + return builder.toString(); + } + + public static String shuffleString(String input) { + List characters = new ArrayList<>(); + for (char c : input.toCharArray()) characters.add(c); + + Collections.shuffle(characters); + StringBuilder shuffledString = new StringBuilder(); + + for (char c : characters) shuffledString.append(c); + return shuffledString.toString(); + } +} diff --git a/src/main/resources/META-INF/MANIFEST.MF b/src/main/resources/META-INF/MANIFEST.MF new file mode 100644 index 0000000..a02bb75 --- /dev/null +++ b/src/main/resources/META-INF/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 +Main-Class: org.openautonomousconnection.dns.Main diff --git a/src/main/resources/version.txt b/src/main/resources/version.txt new file mode 100644 index 0000000..9f8e9b6 --- /dev/null +++ b/src/main/resources/version.txt @@ -0,0 +1 @@ +1.0 \ No newline at end of file