From 6e81222f3b7c0cf456b5e17bd26d582dbf449f5f Mon Sep 17 00:00:00 2001 From: Bastian Leicht <50463419+bastianleicht@users.noreply.github.com> Date: Mon, 8 Nov 2021 11:39:31 +0100 Subject: [PATCH 01/28] Auth: Fixed POST Variables --- app/manager/customer/auth/login.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/manager/customer/auth/login.php b/app/manager/customer/auth/login.php index 0f8ad62..cff4bb6 100755 --- a/app/manager/customer/auth/login.php +++ b/app/manager/customer/auth/login.php @@ -96,8 +96,8 @@ function accpept() {
- - + +
"; } From b6592180311025bc360fd6684fc2fece0aab952e Mon Sep 17 00:00:00 2001 From: Bastian Leicht <50463419+bastianleicht@users.noreply.github.com> Date: Mon, 8 Nov 2021 11:45:58 +0100 Subject: [PATCH 02/28] Main: Replaced old URL's --- .env | 4 ++++ resources/additional/header.php | 8 ++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.env b/.env index 9484040..b67e967 100755 --- a/.env +++ b/.env @@ -18,6 +18,10 @@ URL="https://cp.red-host.eu/" CDN_URL="${URL}assets/style/" PIC_URL="${URL}assets/images/" +URL_STATUS="" +URL_TWITTER="https://twitter.com/" +URL_DISCORD="https://discord.gg/xxxxxxxx" + PAYPAL_EMAIL="payment@red-host.eu" DISCORD_WEBHOOK_URL="" diff --git a/resources/additional/header.php b/resources/additional/header.php index b85da71..199fbc0 100755 --- a/resources/additional/header.php +++ b/resources/additional/header.php @@ -20,7 +20,7 @@ $SQL->execute(array(":user_id" => $userid)); if ($SQL->rowCount() != 0) { ?> -
+
@@ -28,21 +28,21 @@
-
+
-
+
-
+
From 5343a7b74782eff696ee94ae737874ca36e68250 Mon Sep 17 00:00:00 2001 From: Bastian Leicht <50463419+bastianleicht@users.noreply.github.com> Date: Mon, 8 Nov 2021 11:57:52 +0100 Subject: [PATCH 03/28] Main: Replaced URL's --- resources/additional/footer.php | 10 +++++----- resources/additional/head.php | 4 ++-- resources/customer/accounting/charge.php | 4 ++-- resources/customer/accounting/donate.php | 4 ++-- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/resources/additional/footer.php b/resources/additional/footer.php index 42068b0..01a8230 100755 --- a/resources/additional/footer.php +++ b/resources/additional/footer.php @@ -3,12 +3,12 @@ Support bis zum 03.01. eingeschränkt! Mehr dazu im Dashboard. Wir wünschen einen Guten Rutsch ins Jahr 2021 @@ -388,4 +388,4 @@ function number_format (number, decimals, dec_point, thousands_sep) { - \ No newline at end of file + diff --git a/resources/additional/head.php b/resources/additional/head.php index b35d9f9..1b6c560 100755 --- a/resources/additional/head.php +++ b/resources/additional/head.php @@ -119,7 +119,7 @@ - + @@ -165,4 +165,4 @@ - \ No newline at end of file + diff --git a/resources/customer/accounting/charge.php b/resources/customer/accounting/charge.php index 8424fdd..b7d40c4 100755 --- a/resources/customer/accounting/charge.php +++ b/resources/customer/accounting/charge.php @@ -46,7 +46,7 @@ Hinweis: Es ist kein Abo. Der Betrag wird nur einmalig fällig,
es entstehen keine weiteren Kosten. Keine Kündigung notwendig!
Mit dieser Zahlung wird nur das Guthaben des Kundenkontos aufgeladen.
- Guthaben kann nicht wieder ausgezahlt werden. (siehe AGBs §3.3) + Guthaben kann nicht wieder ausgezahlt werden. (siehe AGBs §3.3)

@@ -106,4 +106,4 @@ function update() {
-
\ No newline at end of file +
diff --git a/resources/customer/accounting/donate.php b/resources/customer/accounting/donate.php index 223281e..2a012d0 100755 --- a/resources/customer/accounting/donate.php +++ b/resources/customer/accounting/donate.php @@ -78,7 +78,7 @@ Hinweis: Es ist kein Abo. Der Betrag wird nur einmalig fällig,
es entstehen keine weiteren Kosten. Keine Kündigung notwendig!
Mit dieser Zahlung wird nur das Guthaben des Kundenkontos aufgeladen.
- Guthaben kann nicht wieder ausgezahlt werden. (siehe AGBs §3.3) + Guthaben kann nicht wieder ausgezahlt werden. (siehe AGBs §3.3)

@@ -91,4 +91,4 @@
- \ No newline at end of file + From a492ded292df9035e8b5ecd29cceee65ed485ce4 Mon Sep 17 00:00:00 2001 From: Bastian Leicht <50463419+bastianleicht@users.noreply.github.com> Date: Mon, 8 Nov 2021 12:08:36 +0100 Subject: [PATCH 04/28] Main: Replaced URL's --- app/crone/WORKER/gameserver_order.php | 4 ++-- app/notifications/mail_templates/mail_style.php | 4 ++-- resources/additional/FRONT/a_side.php | 4 ++-- resources/additional/a_side.php | 4 ++-- resources/additional/head.php | 2 +- resources/customer/vserver/order_custom.php | 2 +- resources/customer/vserver/order_game.php | 4 ++-- resources/customer/vserver/order_packs.php | 4 ++-- 8 files changed, 14 insertions(+), 14 deletions(-) diff --git a/app/crone/WORKER/gameserver_order.php b/app/crone/WORKER/gameserver_order.php index 57bb388..5213542 100755 --- a/app/crone/WORKER/gameserver_order.php +++ b/app/crone/WORKER/gameserver_order.php @@ -36,7 +36,7 @@ 'databases' => 1, 'allocations' => 1 ]; -$response = $pterodactyl->create('GameServer by RED-Host.EU', $user->getDataById($userid, 'pterodactyl_id'),5, $limits, $feature_limits); +$response = $pterodactyl->create('GameServer by ' . env('APP_NAME'), $user->getDataById($userid, 'pterodactyl_id'),5, $limits, $feature_limits); if(!is_numeric($response->id)){ $update = $db->prepare("UPDATE `queue` SET `retries` = :retries, `error_log` = :error_log WHERE `id` = :id"); @@ -52,4 +52,4 @@ $SQL = $db->prepare("INSERT INTO `pterodactyl_servers`(`user_id`, `service_id`, `uuid`, `identifier`, `memory`, `cpu`, `disk`, `allocation_id`, `price`, `state`, `expire_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?)"); $SQL->execute(array($userid, $response_data->id, $response_data->uuid, $response_data->identifier, $memory, $cpu, $disk, $response_data->allocation, $db_price, 'active', $expire_at)); -} \ No newline at end of file +} diff --git a/app/notifications/mail_templates/mail_style.php b/app/notifications/mail_templates/mail_style.php index e6fa9b5..117e261 100755 --- a/app/notifications/mail_templates/mail_style.php +++ b/app/notifications/mail_templates/mail_style.php @@ -108,7 +108,7 @@ @@ -118,4 +118,4 @@ -'; \ No newline at end of file +'; diff --git a/resources/additional/FRONT/a_side.php b/resources/additional/FRONT/a_side.php index 275e450..f8e2591 100755 --- a/resources/additional/FRONT/a_side.php +++ b/resources/additional/FRONT/a_side.php @@ -35,7 +35,7 @@ diff --git a/app/notifications/mail_templates_12/mail_style.php b/app/notifications/mail_templates_12/mail_style.php index 6ff130b..f350f06 100755 --- a/app/notifications/mail_templates_12/mail_style.php +++ b/app/notifications/mail_templates_12/mail_style.php @@ -16,7 +16,7 @@ width: 100%; } body{ - font-family: 'Nunito', sans-serif; + font-family: \'Nunito\', sans-serif; padding: 0; margin: 0; } @@ -105,7 +105,7 @@ test test test
- © 2020 REDHost + © 2020 '. env("app_name") .' @@ -114,4 +114,4 @@ -'; \ No newline at end of file +'; diff --git a/app/notifications/mail_templates_oldd/mail_style.php b/app/notifications/mail_templates_oldd/mail_style.php index 060870e..f614591 100755 --- a/app/notifications/mail_templates_oldd/mail_style.php +++ b/app/notifications/mail_templates_oldd/mail_style.php @@ -1,11 +1,5 @@  From 9646f1793fdc3ae54acfcf331a91573550e62d5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schleyer?= Date: Fri, 31 Dec 2021 11:41:00 +0100 Subject: [PATCH 12/28] Update .env --- .env | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/.env b/.env index 3ef34a3..61ff939 100755 --- a/.env +++ b/.env @@ -1,33 +1,33 @@ -DEBUG=false +DEBUG=false # set up the debug mode -APP_NAME="hosting" -APP_DOMAIN="cp.hosting.de" -VERSION_DATE="1.9.4 (07.01.2021)" +APP_NAME="hosting" # project name +APP_DOMAIN="cp.hosting.de" # project domain for frontend design +VERSION_DATE="1.9.4 (07.01.2021)" # version date -DB_HOST="localhost" -DB_NAME="" -DB_USER="" -DB_PASS="" +DB_HOST="localhost" # datebase host +DB_NAME="" # database name +DB_USER="" # databse username +DB_PASS="" # database password -FRONT_URL="hosting.de" -URL="http://localhost/" -CDN_URL="${URL}assets/style/" -PIC_URL="${URL}assets/images/" +FRONT_URL="hosting.de" # domain for frontend design +URL="http://localhost/" # url from the website +CDN_URL="${URL}assets/style/" # nothing to change +PIC_URL="${URL}assets/images/" # nothing to change -URL_STATUS="" +URL_STATUS="" URL_TWITTER="https://twitter.com/" URL_DISCORD="https://discord.gg/xxxxxxxx" SUPPORT_EMAIL="support@hosting.de" PAYPAL_EMAIL="payment@hosting.de" -CRONE_KEY="" -GLOBAL_API_KEY="" +CRONE_KEY="" # key for cronjobs +GLOBAL_API_KEY="" # api key for the included discord api -DISCORD_WEBHOOK_URL="" -DISCORD_AVATAR_URL="" -DISCORD_NAME="" +DISCORD_WEBHOOK_URL="" # webhook url for notifications into discord +DISCORD_AVATAR_URL="" # avatar url +DISCORD_NAME="" # name for the notifications H_CAPTCHA_SITE_KEY="" H_CAPTCHA_SECRET_KEY="" @@ -49,6 +49,6 @@ TEAMSPEAK_BANNER_LINK="" TEAMSPEAK_BANNER_INTERVAL="60" TEAMSPEAK_BANNER_MODE="0x02" -PTERODACTYL_USER_URL="" -PTERODACTYL_BASE_URL="" -PTERODACTYL_API_KEY="" \ No newline at end of file +PTERODACTYL_USER_URL="" # url to pterodactyl +PTERODACTYL_BASE_URL="" # url to pterodactyl +PTERODACTYL_API_KEY="" # key From c35959a8eb301946784a884215df2550882ef231 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schleyer?= Date: Sun, 6 Mar 2022 13:53:03 +0100 Subject: [PATCH 13/28] Fix XSS --- app/functions/Helper.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/functions/Helper.php b/app/functions/Helper.php index de1cf63..a1ea9a5 100755 --- a/app/functions/Helper.php +++ b/app/functions/Helper.php @@ -7,7 +7,8 @@ class helper extends Controller public function protect($string) { - $protection = htmlspecialchars(trim($string), ENT_QUOTES); + $protection = htmlspecialchars(trim($string), ENT_HTML401); + return $protection; } @@ -30,6 +31,7 @@ public function nl2br2($string) { $string = $this->xssFix($string); $string = str_replace(array("\r\n", "\r", "\n"), "
", $string); + return $string; } @@ -81,4 +83,4 @@ public function isa_convert_bytes_to_specified($bytes, $to, $decimal_places = 1) } } -?> \ No newline at end of file +?> From efa1ecca3568acf1b3056346143b56a39abbba63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schleyer?= Date: Tue, 17 May 2022 09:20:23 +0200 Subject: [PATCH 14/28] Update README.md --- README.md | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 2d97a7b..d5f9c1b 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,5 @@ # RED-Host Panel -Daher damit der Tobias B. der Meinung ist, dieses Panel an tausenden Menschen zu verkaufen oder sogar kostenlos weiterzugeben - veröffentliche ich dieses Panel nun hier. Dann hat wenigstens jeder etwas davon. +Hier wurde das originale RED-Host Panel veröffentlicht. Bisher wurden schon einige Neuerungen veröffentlicht, die einige Konfigurationen, Sicherheitsaspekte und weiteres beinhalten. -### Hinweis: -Bei Bedarf kann durch mich oder dem Team, der Schleyer-EDV eine Weiterenwicklung des Panels kostengünstig veranlasst werden. -Zudem übernehmen wir bzw. ich keine Haftung für dieses Panel und werde auch keinen Support leisten. - -## Update 18.04.2021 - 18:51 Uhr -Dadurch damit das Panel mit vollständigen Funktionen und Co. weitergeschickt wird. Poste ich dieses Update, wie es im originalen Zustand war. -Im Gegensatz zu der von mir veröffentlichten Version, beinhaltet dieses Update alle Funktionen, Features und Co. - - -### Nochmal als Link: https://dl.bschleyer.de/cp.red-host.eu.zip - -# KEIN SUPPORT! +Wir, die Schleyer-EDV, arbeiten bereits schon an einem riesigen Update für das Panel. Ein Release wird unter einer neuen Branch oder Release-Version signalisiert, welcher bis Ende des Jahres geplant ist. From 7d6fd293432ed1397ad81465bbafc81f999b8dfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schleyer?= Date: Sat, 21 May 2022 13:31:08 +0200 Subject: [PATCH 15/28] Update register.php --- app/manager/customer/auth/register.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/manager/customer/auth/register.php b/app/manager/customer/auth/register.php index e51a5d5..8f90c66 100755 --- a/app/manager/customer/auth/register.php +++ b/app/manager/customer/auth/register.php @@ -63,8 +63,6 @@ //$discord->callWebhook('Soeben hat sich ein neuer Benutzer Registriert: '.$_POST['username']); - $user->renewSupportPin($user_id); - $SQL = $db->prepare("UPDATE `users` SET `verify_code` = :verify_code WHERE `id` = :user_id"); $SQL->execute(array(":verify_code" => $verify_code, ":user_id" => $user_id)); @@ -76,4 +74,4 @@ } else { echo sendError($error); } -} \ No newline at end of file +} From 459b63680ec991ab4ccd47e327b62ce175094efa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schleyer?= Date: Sat, 21 May 2022 13:32:51 +0200 Subject: [PATCH 16/28] Update dashboard.php --- resources/customer/dashboard.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/resources/customer/dashboard.php b/resources/customer/dashboard.php index 34fb8e5..7bf9763 100755 --- a/resources/customer/dashboard.php +++ b/resources/customer/dashboard.php @@ -9,6 +9,10 @@ echo sendSuccess('Support Pin wurde erneuert'); } +if(is_null($s_pin) || empty($s_pin)) { + $user->renewSupportPin($userid); +} + //echo sendSweetInfo('test'); ?> @@ -278,4 +282,4 @@ function renew() { - \ No newline at end of file + From 9170f833a80acf7a467d35da411dc54c8cc7d6f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schleyer?= Date: Sat, 21 May 2022 13:35:46 +0200 Subject: [PATCH 17/28] Update Helper.php --- app/functions/Helper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/functions/Helper.php b/app/functions/Helper.php index a1ea9a5..f3f332e 100755 --- a/app/functions/Helper.php +++ b/app/functions/Helper.php @@ -2,7 +2,7 @@ $helper = new Helper(); -class helper extends Controller +class Helper extends Controller { public function protect($string) From f72275e946484794c8f55c0a54b8f1b50d9598dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schleyer?= Date: Sat, 21 May 2022 13:39:49 +0200 Subject: [PATCH 18/28] Update register.php --- app/manager/customer/auth/register.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/manager/customer/auth/register.php b/app/manager/customer/auth/register.php index 8f90c66..99bfc29 100755 --- a/app/manager/customer/auth/register.php +++ b/app/manager/customer/auth/register.php @@ -62,6 +62,8 @@ $user_id = $user->create($helper->xssFix($_POST['username']), $helper->xssFix($_POST['email']), $_POST['password'],'pending','customer'); //$discord->callWebhook('Soeben hat sich ein neuer Benutzer Registriert: '.$_POST['username']); + + $user->renewSupportPin($user_id); $SQL = $db->prepare("UPDATE `users` SET `verify_code` = :verify_code WHERE `id` = :user_id"); $SQL->execute(array(":verify_code" => $verify_code, ":user_id" => $user_id)); From 16c97f3bb9c79fe296861026ae840caffdcce19b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schleyer?= Date: Sat, 21 May 2022 13:40:46 +0200 Subject: [PATCH 19/28] Update User.php --- app/functions/User.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/functions/User.php b/app/functions/User.php index 1dac418..bcb7989 100755 --- a/app/functions/User.php +++ b/app/functions/User.php @@ -330,7 +330,7 @@ public function getDataByAffiliateId($id, $data) public function renewSupportPin($userid, $token = null) { if(is_null($token)){ - $token = Helper::generateRandomString(5,'1234567890'); + $token = (new Helper)->generateRandomString(5,'1234567890'); } $SQL = self::db()->prepare("UPDATE `users` SET `s_pin` = :s_pin WHERE `id` = :id"); @@ -357,4 +357,4 @@ public function logLogin($user_id, $user_addr, $user_agent) $SQL->execute(array($user_id, $user_addr, $user_agent)); } -} \ No newline at end of file +} From 76fa7522347ad445974a557c2b5867eb1b9186f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schleyer?= Date: Sat, 21 May 2022 13:41:18 +0200 Subject: [PATCH 20/28] Update User.php --- app/functions/User.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/functions/User.php b/app/functions/User.php index bcb7989..a7f4855 100755 --- a/app/functions/User.php +++ b/app/functions/User.php @@ -59,7 +59,7 @@ public function verifyLogin($data, $password) public function generateSessionToken($data) { - $session_token = helper::generateRandomString(30); + $session_token = (new Helper)->generateRandomString(30); $SQL = self::db()->prepare("UPDATE `users` SET `session_token` = :session_token WHERE `email` = :email OR `username` = :username"); $SQL->execute(array(":session_token" => $session_token, ":email" => $data, ":username" => $data)); From a95be1a3a5a09ece0ebee7fd7122caf20c83b013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schleyer?= Date: Sat, 21 May 2022 14:07:21 +0200 Subject: [PATCH 21/28] Update setDiscordID.php --- resources/api/discord/setDiscordID.php | 32 +++++++++++++++++++++----- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/resources/api/discord/setDiscordID.php b/resources/api/discord/setDiscordID.php index 95a6e5e..5ca9bc7 100755 --- a/resources/api/discord/setDiscordID.php +++ b/resources/api/discord/setDiscordID.php @@ -1,10 +1,30 @@ protect($_POST['support_pin']); +$post = json_decode(file_get_contents("php://input"), true); +$support_pin = $post['support_pin']; +$discord_id = $post['discord_id']; -$SQL = $db->prepare("UPDATE `users` SET `discord_id` = :discord_id WHERE `s_pin` = :s_pin"); -$SQL->execute(array(":discord_id" => $_POST['discord_id'], ":s_pin" => $support_pin)); +$SQL = $db->prepare("SELECT * FROM `users` WHERE `s_pin` = :support_pin"); +$SQL->execute(array(":support_pin" => $support_pin)); +if($SQL->rowCount() == 1) { + $row = $SQL->fetch(PDO::FETCH_ASSOC); -$res->data->discord_id = $_POST['discord_id']; \ No newline at end of file + array_push($success, 'Discord ID wurde gesetzt'); + $state = 'success'; + + $SQL2 = $db->prepare("UPDATE `users` SET `discord_id` = :discord_id WHERE `s_pin` = :s_pin"); + $SQL2->execute(array(":discord_id" => $discord_id, ":s_pin" => $support_pin)); + + $user->renewSupportPin($row['id']); + + $res->data->productCount = $user->serviceCount($row['id']); + $res->data->support_pin_used = $support_pin; + $res->data->discord_id_used = $discord_id; + $res->data->username = $row['username']; +} else { + array_push($error, 'Kein Benutzer gefunden.'); + $state = 'error'; + + $res->data->support_pin_used = $support_pin; + $res->data->discord_id_used = $discord_id; +} From 7e4b87d970dc9c90c3eb3e0c3002544b0815aeed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schleyer?= Date: Sat, 21 May 2022 14:07:59 +0200 Subject: [PATCH 22/28] Update getUserProducts.php --- resources/api/discord/getUserProducts.php | 27 +++++++++++++++++------ 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/resources/api/discord/getUserProducts.php b/resources/api/discord/getUserProducts.php index 1f9ef91..0ef033f 100755 --- a/resources/api/discord/getUserProducts.php +++ b/resources/api/discord/getUserProducts.php @@ -1,11 +1,24 @@ protect($_POST['support_pin']); +$post = json_decode(file_get_contents("php://input"),true); +$discord_id = $post['discord_id']; -$SQL = $db->prepare("SELECT * FROM `users` WHERE `s_pin` = :s_pin"); -$SQL->execute(array(":s_pin" => $support_pin)); -$userInfos = $SQL->fetch(PDO::FETCH_ASSOC); +$SQL = $db->prepare("SELECT * FROM `users` WHERE `discord_id` = :discord_id"); +$SQL->execute(array(":discord_id" => $discord_id)); +if($SQL->rowCount() == 1) { + $row = $SQL->fetch(PDO::FETCH_ASSOC); -$res->data->productCount = $user->serviceCount($userInfos['id']); \ No newline at end of file + array_push($success, 'Produkte wurden geladen'); + $state = 'success'; + + $user->renewSupportPin($row['id']); + + $res->data->productCount = $user->activeProducts($userInfos['id']); + $res->data->discord_id_used = $discord_id; + $res->data->username = $row['username']; +} else { + array_push($error, 'Kein Benutzer gefunden.'); + $state = 'error'; + + $res->data->discord_id_used = $discord_id; +} From 26ccb145a33e2c6ea95cb4a2bad3704b9373ef56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schleyer?= Date: Sat, 21 May 2022 14:10:31 +0200 Subject: [PATCH 23/28] Update User.php --- app/functions/User.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/app/functions/User.php b/app/functions/User.php index a7f4855..a79da5c 100755 --- a/app/functions/User.php +++ b/app/functions/User.php @@ -258,6 +258,25 @@ public function serviceCount($user_id) return $count; } + + public function activeCount($user_id) + { + $count = 0; + + $SQL = self::db()->prepare("SELECT * FROM `teamspeaks` WHERE `user_id` = :user_id AND `deleted_at` IS NULL AND `state` = 'ACTIVE'"); + $SQL->execute(array(":user_id" => $user_id)); + $count = $count + $SQL->rowCount(); + + $SQL = self::db()->prepare("SELECT * FROM `vm_servers` WHERE `user_id` = :user_id AND `deleted_at` IS NULL' AND `state` = 'active'"); + $SQL->execute(array(":user_id" => $user_id)); + $count = $count + $SQL->rowCount(); + + $SQL = self::db()->prepare("SELECT * FROM `webspace` WHERE `user_id` = :user_id AND `deleted_at` IS NULL AND `state` = 'active'"); + $SQL->execute(array(":user_id" => $user_id)); + $count = $count + $SQL->rowCount(); + + return $count; + } public function teamspeakCount($user_id) { From 1510c28e8087101933172bacff9d7b766f15770b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Schleyer?= Date: Mon, 17 Oct 2022 11:16:28 +0200 Subject: [PATCH 24/28] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index d5f9c1b..a412d30 100644 --- a/README.md +++ b/README.md @@ -3,3 +3,6 @@ Hier wurde das originale RED-Host Panel veröffentlicht. Bisher wurden schon einige Neuerungen veröffentlicht, die einige Konfigurationen, Sicherheitsaspekte und weiteres beinhalten. Wir, die Schleyer-EDV, arbeiten bereits schon an einem riesigen Update für das Panel. Ein Release wird unter einer neuen Branch oder Release-Version signalisiert, welcher bis Ende des Jahres geplant ist. + +Es gibt nun einen Discord, wo wir eine Kategorie nur für das RED-Host Panel eingerichtet haben. Alle neuesten Informationen können dort abgerufen werden. Zusätzlich sind wir für Vorschläge jederzeit offen, auch diese können dort gepostet werden. +Link: https://discord.gg/nvR2F4uZWS From 3430d78ee34641da7a8217702fe5186e5cb170d7 Mon Sep 17 00:00:00 2001 From: Bastian Leicht Date: Fri, 4 Nov 2022 17:22:29 +0100 Subject: [PATCH 25/28] Changed Avatar API --- resources/additional/footer.php | 2 +- resources/additional/header.php | 2 +- resources/team/user/user.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/additional/footer.php b/resources/additional/footer.php index 01a8230..b287ecb 100755 --- a/resources/additional/footer.php +++ b/resources/additional/footer.php @@ -61,7 +61,7 @@
-
style="background-image:url('https://api.cookiemc.de/200/.png?ssl=1')">
+
style="background-image:url('https://api.multiavatar.com/.svg')">
diff --git a/resources/additional/header.php b/resources/additional/header.php index 199fbc0..a1e1a6b 100755 --- a/resources/additional/header.php +++ b/resources/additional/header.php @@ -56,7 +56,7 @@ - +
diff --git a/resources/team/user/user.php b/resources/team/user/user.php index 53bf107..5fcb4fd 100755 --- a/resources/team/user/user.php +++ b/resources/team/user/user.php @@ -274,7 +274,7 @@
-
+
From 6de26f736c2871806bab3fe32b04cf1dc528b093 Mon Sep 17 00:00:00 2001 From: Darius <79771942+dariusaurich@users.noreply.github.com> Date: Tue, 8 Nov 2022 18:31:27 +0100 Subject: [PATCH 26/28] Fix: remove "s" in Teamspeak order --- resources/customer/teamspeak/order.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/customer/teamspeak/order.php b/resources/customer/teamspeak/order.php index 708477d..20fb1b5 100755 --- a/resources/customer/teamspeak/order.php +++ b/resources/customer/teamspeak/order.php @@ -1,4 +1,4 @@ -s
-
\ No newline at end of file +
From 77ae7ed3cb9fba6e09983873b349fac4a772b407 Mon Sep 17 00:00:00 2001 From: EDV Network Group Date: Sun, 17 Sep 2023 21:18:06 +0200 Subject: [PATCH 27/28] Update User.php add getBrowser function --- app/functions/User.php | 119 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) diff --git a/app/functions/User.php b/app/functions/User.php index a79da5c..a945920 100755 --- a/app/functions/User.php +++ b/app/functions/User.php @@ -195,6 +195,125 @@ public function getOS($user_agent) return $os_platform; } + public function getBrowser($user_agent): string + { + $browser = "Unbekannt"; + + $browser_array = array( + '/msie/i' => 'Internet Explorer', + '/trident/i' => 'Internet Explorer', + '/edge/i' => 'Microsoft Edge', + '/firefox/i' => 'Firefox', + '/safari/i' => 'Safari', + '/chrome/i' => 'Chrome', + '/opera/i' => 'Opera', + '/netscape/i' => 'Netscape', + '/maxthon/i' => 'Maxthon', + '/konqueror/i' => 'Konqueror', + '/mobile/i' => 'Handy-Browser', + '/brave/i' => 'Brave', + '/epiphany/i' => 'Epiphany', + '/ucbrowser/i' => 'UC Browser', + '/yabrowser/i' => 'Yandex Browser', + '/waterfox/i' => 'Waterfox', + '/sleipnir/i' => 'Sleipnir', + '/lunascape/i' => 'Lunascape', + '/avant/i' => 'Avant Browser', + '/webpositive/i'=> 'WebPositive', + '/aol/i' => 'AOL Browser', + '/k-meleon/i' => 'K-Meleon', + '/seamonkey/i' => 'SeaMonkey', + '/galeon/i' => 'Galeon', + '/iron/i' => 'SRWare Iron', + '/comodo/i' => 'Comodo Dragon', + '/rockmelt/i' => 'RockMelt', + '/slimboat/i' => 'SlimBrowser', + '/flock/i' => 'Flock', + '/netsurf/i' => 'NetSurf', + '/epic/i' => 'Epic Browser', + '/dolphin/i' => 'Dolphin', + '/qupzilla/i' => 'QupZilla', + '/silk/i' => 'Amazon Silk', + '/otter/i' => 'Otter Browser', + '/gnome\-web/i'=> 'Epiphany (GNOME Web)', + '/tizen/i' => 'Tizen Browser', + '/slimjet/i' => 'Slimjet', + '/cyberfox/i' => 'Cyberfox', + '/icedragon/i' => 'Comodo IceDragon', + '/vivaldi/i' => 'Vivaldi', + '/coc_coc/i' => 'Coc Coc', + '/sogou/i' => 'Sogou Browser', + '/qihoo/i' => '360 Secure Browser', + '/huohou/i' => 'Huohou Browser', + '/miui/i' => 'Mi Browser', + '/huawei/i' => 'Huawei Browser', + '/oneplus/i' => 'OnePlus Browser', + '/meizu/i' => 'Meizu Browser', + '/nokia/i' => 'Nokia Browser', + '/lenovo/i' => 'Lenovo Browser', + '/zte/i' => 'ZTE Browser', + '/leeco/i' => 'LeEco Browser', + '/realme/i' => 'Realme Browser', + '/tecent/i' => 'Tencent QQ Browser', + '/baidu/i' => 'Baidu Browser', + '/vivo/i' => 'Vivo Browser', + '/mxios/i' => 'Maxthon for iOS', + '/baidubox/i' => 'Baidu Box App', + '/qqlive/i' => 'Tencent QQ Live App', + '/weibo/i' => 'Sina Weibo App', + '/wechat/i' => 'WeChat App', + '/alipay/i' => 'Alipay Mini Program', + '/taobao/i' => 'Taobao Mini Program', + '/palemoon/i' => 'Pale Moon', + '/odo/i' => 'Opera Neon', + '/midori/i' => 'Midori', + '/rekonq/i' => 'Rekonq', + '/uzbl/i' => 'Uzbl', + '/whale/i' => 'Naver Whale', + '/yandexsearch/i' => 'Yandex Search App', + '/qqbrowser/i' => 'QQ Browser', + '/baidubrowser/i' => 'Baidu Browser', + '/liebaofast/i' => 'Liebao Browser (LBBrowser)', + '/liebaomini/i' => 'Liebao Mini Browser', + '/duckduckgo/i' => 'DuckDuckGo Browser', + '/bb10/i' => 'BlackBerry 10 Browser', + '/edgeios/i' => 'Microsoft Edge (iOS)', + '/edgeandroid/i' => 'Microsoft Edge (Android)', + '/focus/i' => 'Firefox Focus', + '/focusios/i' => 'Firefox Focus (iOS)', + '/adobeair/i' => 'Adobe AIR Application', + '/kindle/i' => 'Amazon Kindle', + '/iridium/i' => 'Iridium Browser', + '/vewd/i' => 'Vewd (formerly Opera TV)', + '/viera/i' => 'Panasonic Viera TV Browser', + '/snapchat/i' => 'Snapchat App', + '/puffin/i' => 'Puffin Browser', + '/webos/i' => 'webOS Browser', + '/maemo/i' => 'Maemo Browser (Nokia N900)', + '/meego/i' => 'MeeGo Browser', + '/wii/i' => 'Nintendo Wii Browser', + '/psp/i' => 'PlayStation Portable Browser', + '/camino/i' => 'Camino', + '/kazehakase/i'=> 'Kazehakase', + '/gobrowser/i' => 'GO Browser', + '/tor/i' => 'TOR (The Onion Router)', + // Browser, die von Regierungsbehörden oder militärischen Organisationen verwendet werden + '/usgcb/i' => 'U.S. Government Web Browser', + '/qubes/i' => 'Qubes OS Secure Browser', + '/swb/i' => 'Secure Web Browser (SWB)', + '/iceweasel/i' => 'IceWeasel', + '/gsb/i' => 'Government Secure Browser (GSB)' + ); + + foreach ($browser_array as $regex => $value) { + if (preg_match($regex, $user_agent)) { + $browser = $value; + } + } + + return $browser; + } + public function getIP() { foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key){ From 4fd19be538a3c61330564aaf36c6bca5ff58ce32 Mon Sep 17 00:00:00 2001 From: EDV Network Group Date: Sun, 17 Sep 2023 21:20:36 +0200 Subject: [PATCH 28/28] Update User.php --- app/functions/User.php | 270 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 247 insertions(+), 23 deletions(-) diff --git a/app/functions/User.php b/app/functions/User.php index a945920..3ccb73b 100755 --- a/app/functions/User.php +++ b/app/functions/User.php @@ -163,29 +163,253 @@ public function getOS($user_agent) $os_platform = "Unbekannt"; $os_array = array( - '/windows nt 10/i' => 'Windows 10', - '/windows nt 6.3/i' => 'Windows 8.1', - '/windows nt 6.2/i' => 'Windows 8', - '/windows nt 6.1/i' => 'Windows 7', - '/windows nt 6.0/i' => 'Windows Vista', - '/windows nt 5.2/i' => 'Windows Server 2003/XP x64', - '/windows nt 5.1/i' => 'Windows XP', - '/windows xp/i' => 'Windows XP', - '/windows nt 5.0/i' => 'Windows 2000', - '/windows me/i' => 'Windows ME', - '/win98/i' => 'Windows 98', - '/win95/i' => 'Windows 95', - '/win16/i' => 'Windows 3.11', - '/macintosh|mac os x/i' => 'Mac OS X', - '/mac_powerpc/i' => 'Mac OS 9', - '/linux/i' => 'Linux', - '/ubuntu/i' => 'Ubuntu', - '/iphone/i' => 'iPhone', - '/ipod/i' => 'iPod', - '/ipad/i' => 'iPad', - '/android/i' => 'Android', - '/blackberry/i' => 'BlackBerry', - '/webos/i' => 'Mobile' + // Windows 11 Versionen + '/windows nt 11\.0/i' => 'Windows 11', + '/windows nt 11\.1/i' => 'Windows 11 Home', + '/windows nt 11\.2/i' => 'Windows 11 Pro', + '/windows nt 11\.3/i' => 'Windows 11 Enterprise', + '/windows nt 11\.4/i' => 'Windows 11 Education', + '/windows nt 11\.5/i' => 'Windows 11 IoT Enterprise', + '/windows nt 11\.6/i' => 'Windows 11 IoT Enterprise (Evaluation)', + '/windows nt 11\.7/i' => 'Windows 11 IoT Enterprise (LTSB)', + '/windows nt 11\.8/i' => 'Windows 11 IoT Enterprise (LTSC)', + '/windows nt 11\.9/i' => 'Windows 11 IoT Core', + + // Windows 10 Versionen + '/windows nt 10\.0/i' => 'Windows 10', + '/windows nt 10\.1/i' => 'Windows 10 Home', + '/windows nt 10\.2/i' => 'Windows 10 Pro', + '/windows nt 10\.3/i' => 'Windows 10 Enterprise', + '/windows nt 10\.4/i' => 'Windows 10 Education', + '/windows nt 10\.5/i' => 'Windows 10 IoT Enterprise', + '/windows nt 10\.6/i' => 'Windows 10 IoT Enterprise (Evaluation)', + '/windows nt 10\.7/i' => 'Windows 10 IoT Enterprise (LTSB)', + '/windows nt 10\.8/i' => 'Windows 10 IoT Enterprise (LTSC)', + '/windows nt 10\.9/i' => 'Windows 10 IoT Core', + '/windows nt 10\.10/i' => 'Windows 10 S', + '/windows nt 10\.11/i' => 'Windows 10 (Version 20H2)', + '/windows nt 10\.12/i' => 'Windows 10 (Version 21H1)', + '/windows nt 10\.13/i' => 'Windows 10 (Version 21H2)', + '/windows nt 10\.14/i' => 'Windows 10 (Version 22H1)', + '/windows nt 10\.15/i' => 'Windows 10 (Version 22H2)', + '/windows nt 10\.16/i' => 'Windows 10 (Version 23H1)', + '/windows nt 10\.17/i' => 'Windows 10 (Version 23H2)', + '/windows nt 10\.18/i' => 'Windows 10 (Version 24H1)', + '/windows nt 10\.19/i' => 'Windows 10 (Version 24H2)', + '/windows nt 10\.20/i' => 'Windows 10 (Version 25H1)', + '/windows nt 10\.21/i' => 'Windows 10 (Version 25H2)', + '/windows nt 10\.22/i' => 'Windows 10 (Version 26H1)', + + // Mac OS Versionen + '/macintosh|mac os x 10_15/i' => 'Mac OS X 10.15 Catalina', + '/macintosh|mac os x 10_14/i' => 'Mac OS X 10.14 Mojave', + '/macintosh|mac os x 10_13/i' => 'Mac OS X 10.13 High Sierra', + '/macintosh|mac os x 10_12/i' => 'Mac OS X 10.12 Sierra', + '/macintosh|mac os x 10_11/i' => 'Mac OS X 10.11 El Capitan', + '/macintosh|mac os x 10_10/i' => 'Mac OS X 10.10 Yosemite', + '/macintosh|mac os x 10_9/i' => 'Mac OS X 10.9 Mavericks', + '/macintosh|mac os x 10_8/i' => 'Mac OS X 10.8 Mountain Lion', + '/macintosh|mac os x 10_7/i' => 'Mac OS X 10.7 Lion', + '/macintosh|mac os x 10_6/i' => 'Mac OS X 10.6 Snow Leopard', + '/macintosh|mac os x 10_5/i' => 'Mac OS X 10.5 Leopard', + '/macintosh|mac os x 10_4/i' => 'Mac OS X 10.4 Tiger', + '/macintosh|mac os x 10_3/i' => 'Mac OS X 10.3 Panther', + '/macintosh|mac os x 10_2/i' => 'Mac OS X 10.2 Jaguar', + '/macintosh|mac os x 10_1/i' => 'Mac OS X 10.1 Puma', + '/macintosh|mac os x/i' => 'Mac OS X', + + // Linux Versionen + '/ubuntu/i' => 'Ubuntu', + '/debian/i' => 'Debian 9', + '/debian\/10/i' => 'Debian 10', + '/fedora/i' => 'Fedora', + '/redhat/i' => 'Red Hat', + '/redhat\/8/i' => 'Red Hat 8', + '/redhat\/9/i' => 'Red Hat 9', + '/redhat\/10/i' => 'Red Hat 10', + '/centos/i' => 'CentOS', + '/centos\/7/i' => 'CentOS 7', + '/centos\/8/i' => 'CentOS 8', + '/centos\/9/i' => 'CentOS 9', + '/suse/i' => 'openSUSE', + '/suse\/15/i' => 'openSUSE 15', + '/suse\/16/i' => 'openSUSE 16', + '/slackware/i' => 'Slackware', + '/slackware\/14/i' => 'Slackware 14', + '/slackware\/15/i' => 'Slackware 15', + '/gentoo/i' => 'Gentoo', + '/gentoo\/3/i' => 'Gentoo 3', + '/linux mint/i' => 'Linux Mint', + '/linux mint\/20/i' => 'Linux Mint 20', + '/linux mint\/21/i' => 'Linux Mint 21', + '/mageia/i' => 'Mageia', + '/mageia\/8/i' => 'Mageia 8', + '/elementary os/i' => 'Elementary OS', + '/elementary os\/6/i'=> 'Elementary OS 6', + '/zorin os/i' => 'Zorin OS', + '/zorin os\/16/i' => 'Zorin OS 16', + '/manjaro/i' => 'Manjaro', + '/manjaro\/21/i' => 'Manjaro 21', + '/arch/i' => 'Arch Linux', + '/arch\/2021/i' => 'Arch Linux 2021', + '/alpine/i' => 'Alpine Linux', + '/alpine\/3/i' => 'Alpine Linux 3', + '/void/i' => 'Void Linux', + '/void\/2022/i' => 'Void Linux 2022', + '/deepin/i' => 'Deepin', + '/deepin\/20/i' => 'Deepin 20', + '/mx linux/i' => 'MX Linux', + '/mx linux\/21/i' => 'MX Linux 21', + '/kali linux/i' => 'Kali Linux', + '/kali linux\/2021/i'=> 'Kali Linux 2021', + '/xubuntu/i' => 'Xubuntu', + '/xubuntu\/20/i' => 'Xubuntu 20', + '/lubuntu/i' => 'Lubuntu', + '/lubuntu\/20/i' => 'Lubuntu 20', + '/kubuntu/i' => 'Kubuntu', + '/kubuntu\/20/i' => 'Kubuntu 20', + '/pop!_os/i' => 'Pop!_OS', + '/pop!_os\/21/i' => 'Pop!_OS 21', + '/solus/i' => 'Solus', + '/solus\/4/i' => 'Solus 4', + '/freebsd/i' => 'FreeBSD', + '/freebsd\/12/i' => 'FreeBSD 12', + '/openbsd/i' => 'OpenBSD', + '/openbsd\/7/i' => 'OpenBSD 7', + '/netbsd/i' => 'NetBSD', + '/netbsd\/10/i' => 'NetBSD 10', + '/sabayon/i' => 'Sabayon', + '/sabayon\/20/i' => 'Sabayon 20', + '/tux/i' => 'Tux', + '/tux\/2/i' => 'Tux 2', + '/linux/i' => 'Linux', + '/linux\/5/i' => 'Linux 5', + + // Mobile Betriebssysteme + '/android 1/i' => 'Android 1', + '/android 2/i' => 'Android 2', + '/android 3/i' => 'Android 3', + '/android 4/i' => 'Android 4', + '/android 5/i' => 'Android 5', + '/android 6/i' => 'Android 6', + '/android 7/i' => 'Android 7', + '/android 8/i' => 'Android 8', + '/android 9/i' => 'Android 9', + '/android 10/i' => 'Android 10', + '/android 11/i' => 'Android 11', + '/android 12/i' => 'Android 12', + '/iphone OS 1/i' => 'iOS 1', + '/iphone OS 2/i' => 'iOS 2', + '/iphone OS 3/i' => 'iOS 3', + '/iphone OS 4/i' => 'iOS 4', + '/iphone OS 5/i' => 'iOS 5', + '/iphone OS 6/i' => 'iOS 6', + '/iphone OS 7/i' => 'iOS 7', + '/iphone OS 8/i' => 'iOS 8', + '/iphone OS 9/i' => 'iOS 9', + '/iphone OS 10/i' => 'iOS 10', + '/iphone OS 11/i' => 'iOS 11', + '/iphone OS 12/i' => 'iOS 12', + '/iphone OS 13/i' => 'iOS 13', + '/iphone OS 14/i' => 'iOS 14', + '/iphone OS 15/i' => 'iOS 15', + '/ipad OS 1/i' => 'iPad OS 1', + '/ipad OS 2/i' => 'iPad OS 2', + '/ipad OS 3/i' => 'iPad OS 3', + '/ipad OS 4/i' => 'iPad OS 4', + '/ipad OS 5/i' => 'iPad OS 5', + '/ipad OS 6/i' => 'iPad OS 6', + '/ipad OS 7/i' => 'iPad OS 7', + '/ipad OS 8/i' => 'iPad OS 8', + '/ipad OS 9/i' => 'iPad OS 9', + '/ipad OS 10/i' => 'iPad OS 10', + '/ipad OS 11/i' => 'iPad OS 11', + '/ipad OS 12/i' => 'iPad OS 12', + '/ipad OS 13/i' => 'iPad OS 13', + '/ipad OS 14/i' => 'iPad OS 14', + '/ipad OS 15/i' => 'iPad OS 15', + '/blackberry 1/i' => 'BlackBerry 1', + '/blackberry 2/i' => 'BlackBerry 2', + '/blackberry 3/i' => 'BlackBerry 3', + '/blackberry 4/i' => 'BlackBerry 4', + '/blackberry 5/i' => 'BlackBerry 5', + '/blackberry 6/i' => 'BlackBerry 6', + '/blackberry 7/i' => 'BlackBerry 7', + '/blackberry 10/i' => 'BlackBerry 10', + '/webos 1/i' => 'webOS 1', + '/webos 2/i' => 'webOS 2', + '/webos 3/i' => 'webOS 3', + '/webos 4/i' => 'webOS 4', + '/webos 5/i' => 'webOS 5', + + // Spielkonsolen + '/playstation 3/i' => 'PlayStation 3', + '/playstation 4/i' => 'PlayStation 4', + '/playstation 5/i' => 'PlayStation 5', + '/xbox/i' => 'Xbox', + '/xbox 360/i' => 'Xbox 360', + '/xbox one/i' => 'Xbox One', + '/xbox series x/i' => 'Xbox Series X', + + // Tragbare Geräte + '/psp/i' => 'PSP', + '/nintendo 3ds/i' => 'Nintendo 3DS', + '/nintendo ds/i' => 'Nintendo DS', + '/nintendo switch/i' => 'Nintendo Switch', + '/smartwatch/i' => 'Smartwatch', + '/apple watch/i' => 'Apple Watch', + '/fitbit/i' => 'Fitbit', + '/garmin/i' => 'Garmin', + + // Smart-Home-Geräte + '/alexa/i' => 'Amazon Alexa', + '/google home/i' => 'Google Home', + '/amazon echo/i' => 'Amazon Echo', + '/apple homepod/i' => 'Apple HomePod', + + // Andere Betriebssysteme + '/beos/i' => 'BeOS', + '/haiku/i' => 'Haiku', + '/plan 9/i' => 'Plan 9 from Bell Labs', + '/reactos/i' => 'ReactOS', + '/syllable/i' => 'Syllable', + '/unix/i' => 'Unix', + '/openvms/i' => 'OpenVMS', + '/os\/2/i' => 'OS/2', + '/symbian/i' => 'Symbian', + '/z\/os/i' => 'z/OS', + '/nintendo/i' => 'Nintendo OS', + '/amigaos/i' => 'AmigaOS', + '/morphos/i' => 'MorphOS', + '/risc os/i' => 'RISC OS', + '/palm os/i' => 'Palm OS', + '/webtv/i' => 'WebTV OS', + '/hurd/i' => 'GNU Hurd', + '/vru/i' => 'VRU OS', + '/midnight/i' => 'Midnight OS', + '/honeycomb/i' => 'Honeycomb OS', + '/newton/i' => 'Newton OS', + '/microsoft/i' => 'Microsoft Research OS', + '/riscix/i' => 'RISCiX OS', + '/morphix/i' => 'Morphix OS', + '/steam os/i' => 'Steam OS', + '/vxworks/i' => 'VxWorks', + '/qnx/i' => 'QNX', + '/tizen/i' => 'Tizen', + '/raspbian/i' => 'Raspbian', + '/oracle solaris/i' => 'Oracle Solaris', + '/tails/i' => 'Tails', + '/remix os/i' => 'Remix OS', + '/fuchsia/i' => 'Fuchsia', + '/harmonyos/i' => 'HarmonyOS', + '/solaris/i' => 'Solaris', + '/aix/i' => 'AIX', + '/hp-ux/i' => 'HP-UX', + '/ibm i/i' => 'IBM i (AS/400)', + '/windows phone/i' => 'Windows Phone', + '/windows mobile/i' => 'Windows Mobile', + '/embedded/i' => 'Embedded OS', + '/other-os/i' => 'Anderes Betriebssystem', ); foreach ($os_array as $regex => $value)