aboutsummaryrefslogtreecommitdiff
path: root/admin
diff options
context:
space:
mode:
authorMinteck <nekostarfan@gmail.com>2021-08-08 12:04:30 +0200
committerMinteck <nekostarfan@gmail.com>2021-08-08 12:04:30 +0200
commit95112b1eb06a4be531ded59563d53a63a8d614e8 (patch)
treefd3dc676227309c87a39feab9ca458985e327907 /admin
parent87303b0d3540037fb94efdde24dbaacb2880d6cb (diff)
downloadmain-95112b1eb06a4be531ded59563d53a63a8d614e8.tar.gz
main-95112b1eb06a4be531ded59563d53a63a8d614e8.tar.bz2
main-95112b1eb06a4be531ded59563d53a63a8d614e8.zip
Opening!
Diffstat (limited to 'admin')
-rw-r--r--admin/.htpasswd1
-rw-r--r--admin/NeutronManage/index.php23
-rw-r--r--admin/api/_demo.php8
-rw-r--r--admin/api/autosave.php31
-rw-r--r--admin/api/draftvslive.php41
-rw-r--r--admin/api/getQuota.php54
-rw-r--r--admin/api/getUbuntuUpgrades.php18
-rw-r--r--admin/api/getUpdates.php50
-rw-r--r--admin/api/refreshUpdates.php6
-rw-r--r--admin/api/serverLogSummary.php14
-rw-r--r--admin/api/serverTemp.php38
-rw-r--r--admin/api/serverTime.php22
-rw-r--r--admin/api/setlive.php33
-rw-r--r--admin/api/terminateAllSessions.php66
-rw-r--r--admin/api/terminateGameSessions.php46
-rw-r--r--admin/api/terminateWebSessions.php44
-rw-r--r--admin/callback/index.php94
-rw-r--r--admin/index.php441
-rw-r--r--admin/panes/code.php43
-rw-r--r--admin/panes/disk.php81
-rw-r--r--admin/panes/editor.php591
-rw-r--r--admin/panes/files.php4
-rw-r--r--admin/panes/hardware.lshw.php4
-rw-r--r--admin/panes/hardware.php76
-rw-r--r--admin/panes/home.php267
-rw-r--r--admin/panes/kartik.php220
-rw-r--r--admin/panes/neutroning.php65
-rw-r--r--admin/panes/quotas.php56
-rw-r--r--admin/panes/telemetry.php946
-rw-r--r--admin/panes/unchained.php160
-rw-r--r--admin/panes/uptime.php172
-rw-r--r--admin/panes/version.php277
-rw-r--r--admin/private/footer.php2
-rw-r--r--admin/private/header.api.php20
-rw-r--r--admin/private/header.php54
-rw-r--r--admin/private/tokens/092748b16bc37807a0ddcb9a3061818fe57bf621f9d92d3b99cea22913483b261
-rw-r--r--admin/private/tokens/1acd958a4ae7af3dbba3b3f5c82f6a4692addd25e1391a67744991666825657c1
-rw-r--r--admin/private/tokens/54b725f6df47930897151c6ac40dfaa17a889d22ce0e5096d0f2fb13e7bea4cb1
-rw-r--r--admin/private/tokens/bbc64f86da832df652c4f2c9e61c11ddee1a94d29f4397954c89efb8c584e0821
-rw-r--r--admin/private/tokens/cfd37ab50076706e20d0f4a19673fd93c957e4c18942e21f983e261ffd05f47c1
-rw-r--r--admin/session/index.php10
41 files changed, 3108 insertions, 975 deletions
diff --git a/admin/.htpasswd b/admin/.htpasswd
new file mode 100644
index 0000000..b678dd2
--- /dev/null
+++ b/admin/.htpasswd
@@ -0,0 +1 @@
+test:$apr1$aD1qs9Kn$f1A2MaHyqhBNODYMQC7l91
diff --git a/admin/NeutronManage/index.php b/admin/NeutronManage/index.php
new file mode 100644
index 0000000..f15a43e
--- /dev/null
+++ b/admin/NeutronManage/index.php
@@ -0,0 +1,23 @@
+<?php
+
+require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.api.php";
+
+if (isset($_GET['_']) && strpos($_GET['_'], "/") === false) {
+ $arg = $_GET['_'];
+} else {
+ die();
+}
+
+$webs = scandir("/mnt/minteckrolt-cloud");
+
+if (in_array($arg, $webs)) {
+ $token = "madm-" . bin2hex(random_bytes(24));
+
+ file_put_contents("/mnt/minteckrolt-cloud/" . $arg . "/data/tokens/" . $token, "");
+ setcookie("_NEUTRON_ADMIN_TOKEN", $token, 0, "/", ".minteck.ro.lt", true, true);
+
+ header("Location: https://cloud.minteck.ro.lt/" . $arg . "/cms-special/admin/#/home");
+ die();
+}
+
+die("Unable to calculate data usage"); \ No newline at end of file
diff --git a/admin/api/_demo.php b/admin/api/_demo.php
index e4651f1..68b5ad6 100644
--- a/admin/api/_demo.php
+++ b/admin/api/_demo.php
@@ -1,5 +1,5 @@
-<?php
-
-require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.api.php";
-
+<?php
+
+require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.api.php";
+
// Do your API stuff here! \ No newline at end of file
diff --git a/admin/api/autosave.php b/admin/api/autosave.php
new file mode 100644
index 0000000..67943cb
--- /dev/null
+++ b/admin/api/autosave.php
@@ -0,0 +1,31 @@
+<?php
+
+require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.api.php";
+
+if (isset($_POST['document']) && strpos($_POST['document'], "/") === false) {
+ $doc = $_POST['document'];
+} else {
+ echo("E_ABORT: document");
+ die();
+}
+
+if (isset($_POST['article']) && strpos($_POST['article'], "/") === false) {
+ $blog = $_POST['article'];
+}
+
+if (isset($_POST['content'])) {
+ $data = $_POST['content'];
+} else {
+ echo("E_ABORT: content");
+ die();
+}
+
+echo("STEP");
+if ($_POST["document"] === "blog.en") {
+ file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/drafts/blog-" . $blog . ".json.html", $data);
+} else if ($_POST["document"] === "blog.fr") {
+ file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/drafts/blog-" . $blog . ".json.fr.html", $data);
+} else {
+ file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/drafts/" . $doc . ".html", $data);
+}
+echo("SUCCESS"); \ No newline at end of file
diff --git a/admin/api/draftvslive.php b/admin/api/draftvslive.php
new file mode 100644
index 0000000..cc5e325
--- /dev/null
+++ b/admin/api/draftvslive.php
@@ -0,0 +1,41 @@
+<?php
+
+require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.api.php";
+
+if (isset($_POST['document']) && strpos($_POST['document'], "/") === false) {
+ $doc = $_POST['document'];
+} else {
+ die();
+}
+
+if ($doc === "conduct.fr") {
+ if (file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/drafts/" . $doc . ".html") === file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/code/fr.html")) {
+ die("true");
+ } else {
+ die("false");
+ }
+}
+
+if ($doc === "conduct.en") {
+ if (file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/drafts/" . $doc . ".html") === file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/code/en.html")) {
+ die("true");
+ } else {
+ die("false");
+ }
+}
+
+if ($doc === "blog.en") {
+ if (file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/drafts/blog-{$_POST['article']}.json.html") === file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/blog/data/{$_POST['article']}.json.html")) {
+ die("true");
+ } else {
+ die("false");
+ }
+}
+
+if ($doc === "blog.fr") {
+ if (file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/drafts/blog-{$_POST['article']}.json.fr.html") === file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/blog/data/{$_POST['article']}.json.fr.html")) {
+ die("true");
+ } else {
+ die("false");
+ }
+} \ No newline at end of file
diff --git a/admin/api/getQuota.php b/admin/api/getQuota.php
new file mode 100644
index 0000000..7b4e8e9
--- /dev/null
+++ b/admin/api/getQuota.php
@@ -0,0 +1,54 @@
+<?php
+
+require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.api.php";
+
+if (isset($_GET['_']) && strpos($_GET['_'], "/") === false) {
+ $arg = $_GET['_'];
+} else {
+ die();
+}
+
+$webs = scandir("/mnt/minteckrolt-cloud");
+
+if (in_array($arg, $webs)) {
+ $tier = trim(file_get_contents("/mnt/minteckrolt-cloud/" . $arg . "/Tier"));
+
+ exec("du -hs /mnt/minteckrolt-cloud/" . $arg, $ret);
+ $parts = explode(" ", $ret[0]);
+
+ exec("du -s /mnt/minteckrolt-cloud/" . $arg, $ret2);
+ $parts2 = explode(" ", $ret2[0]);
+
+ if ($tier === "3") {
+ $perc = ($parts2[0] / 100000) * 100;
+ if ($perc > 75) {
+ die("<span class='text-danger'>Using " . $parts[0] . "/100M (" . round($perc, 2) . "%)</span>");
+ } else if ($perc > 50) {
+ die("<span class='text-warning'>Using " . $parts[0] . "/100M (" . round($perc, 2) . "%)</span>");
+ } else {
+ die("<span class='text-success'>Using " . $parts[0] . "/100M (" . round($perc, 2) . "%)</span>");
+ }
+ } else if ($tier === "5") {
+ $perc = ($parts2[0] / 250000) * 100;
+ if ($perc > 75) {
+ die("<span class='text-danger'>Using " . $parts[0] . "/250M (" . round($perc, 2) . "%)</span>");
+ } else if ($perc > 50) {
+ die("<span class='text-warning'>Using " . $parts[0] . "/250M (" . round($perc, 2) . "%)</span>");
+ } else {
+ die("<span class='text-success'>Using " . $parts[0] . "/250M (" . round($perc, 2) . "%)</span>");
+ }
+ } else if ($tier === "7") {
+ $perc = ($parts2[0] / 500000) * 100;
+ if ($perc > 75) {
+ die("<span class='text-danger'>Using " . $parts[0] . "/500M (" . round($perc, 2) . "%)</span>");
+ } else if ($perc > 50) {
+ die("<span class='text-warning'>Using " . $parts[0] . "/500M (" . round($perc, 2) . "%)</span>");
+ } else {
+ die("<span class='text-success'>Using " . $parts[0] . "/500M (" . round($perc, 2) . "%)</span>");
+ }
+ } else {
+ die("<span class='text-success'>Using " . $parts[0] . "</span>");
+ }
+}
+
+die("Unable to calculate data usage"); \ No newline at end of file
diff --git a/admin/api/getUbuntuUpgrades.php b/admin/api/getUbuntuUpgrades.php
index dcf06ce..7da6259 100644
--- a/admin/api/getUbuntuUpgrades.php
+++ b/admin/api/getUbuntuUpgrades.php
@@ -1,10 +1,10 @@
-<?php
-
-require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.api.php";
-
-exec("bash -c \"sudo do-release-upgrade -c | grep 'New release'\"", $ret);
-if (count($ret) === 1) {
- echo("<b>Ubuntu " . explode("'", $ret[0])[1] . "</b> is available, use <code>do-release-upgrade</code> to upgrade");
-} else {
- echo("This server is running the latest version of Ubuntu");
+<?php
+
+require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.api.php";
+
+exec("bash -c \"sudo do-release-upgrade -c | grep 'New release'\"", $ret);
+if (count($ret) === 1) {
+ echo("<b>Ubuntu " . explode("'", $ret[0])[1] . "</b> is available, use <code>do-release-upgrade</code> to upgrade");
+} else {
+ echo("This server is running the latest version of Ubuntu");
} \ No newline at end of file
diff --git a/admin/api/getUpdates.php b/admin/api/getUpdates.php
index 57ce275..099dd67 100644
--- a/admin/api/getUpdates.php
+++ b/admin/api/getUpdates.php
@@ -1,26 +1,26 @@
-<?php
-
-header("Content-Type: application/json");
-require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.api.php";
-
-exec("bash -c \"sudo apt-get upgrade -s| grep ^Inst\"", $ret);
-$data = [];
-$data["count"] = count($ret);
-$data["packages"] = [];
-
-foreach ($ret as $package) {
- $parts = explode(" ", trim($package));
- $pkg = [
- "name" => trim($parts[1]),
- "version" => [
- "local" => trim(explode("]", explode("[", $parts[2])[1])[0]),
- "remote" => trim(explode("(", $parts[3])[1]),
- ],
- "repos" => trim(explode(":", explode("(", explode("[", trim($package))[1])[1])[1]),
- "architecture" => trim(explode("]", explode("[", trim($package))[2])[0])
- ];
-
- $data["packages"][] = $pkg;
-}
-
+<?php
+
+header("Content-Type: application/json");
+require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.api.php";
+
+exec("bash -c \"sudo apt-get upgrade -s| grep ^Inst\"", $ret);
+$data = [];
+$data["count"] = count($ret);
+$data["packages"] = [];
+
+foreach ($ret as $package) {
+ $parts = explode(" ", trim($package));
+ $pkg = [
+ "name" => trim($parts[1]),
+ "version" => [
+ "local" => trim(explode("]", explode("[", $parts[2])[1])[0]),
+ "remote" => trim(explode("(", $parts[3])[1]),
+ ],
+ "repos" => trim(explode(":", explode("(", explode("[", trim($package))[1])[1])[1]),
+ "architecture" => trim(explode("]", explode("[", trim($package))[2])[0])
+ ];
+
+ $data["packages"][] = $pkg;
+}
+
echo(json_encode($data, JSON_PRETTY_PRINT)); \ No newline at end of file
diff --git a/admin/api/refreshUpdates.php b/admin/api/refreshUpdates.php
index ea6f991..39ac9ed 100644
--- a/admin/api/refreshUpdates.php
+++ b/admin/api/refreshUpdates.php
@@ -1,4 +1,4 @@
-<?php
-
-require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.api.php";
+<?php
+
+require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.api.php";
exec("bash -c \"sudo apt-get update", $ret); \ No newline at end of file
diff --git a/admin/api/serverLogSummary.php b/admin/api/serverLogSummary.php
index 2d90fe1..78c0a2c 100644
--- a/admin/api/serverLogSummary.php
+++ b/admin/api/serverLogSummary.php
@@ -1,8 +1,8 @@
-<?php
-
-require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.api.php";
-
-exec("journalctl -b --quiet", $ret);
-$cnt = count($ret);
-
+<?php
+
+require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.api.php";
+
+exec("journalctl -b --quiet", $ret);
+$cnt = count($ret);
+
echo("<b>" . $cnt . "</b> system log messages since last system startup"); \ No newline at end of file
diff --git a/admin/api/serverTemp.php b/admin/api/serverTemp.php
index 19e383a..55cf34b 100644
--- a/admin/api/serverTemp.php
+++ b/admin/api/serverTemp.php
@@ -1,20 +1,20 @@
-<?php
-
-require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.api.php";
-
-echo("Server running at <b>");
-exec("sensors -j", $out);
-$outp = implode("\n", $out);
-$outd = json_decode($outp, true);
-
-echo(round($outd["cpu_thermal-virtual-0"]["temp1"]["temp1_input"], 1));
-
-?>°C</b>, <?php
-
-if ($outd["cpu_thermal-virtual-0"]["temp1"]["temp1_input"] > 90) {
- echo("completely overheating!");
-} else if ($outd["cpu_thermal-virtual-0"]["temp1"]["temp1_input"] > 60) {
- echo("starting to throttle!");
-} else {
- echo("under normal temperatures");
+<?php
+
+require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.api.php";
+
+echo("Server running at <b>");
+exec("sensors -j", $out);
+$outp = implode("\n", $out);
+$outd = json_decode($outp, true);
+
+echo(round($outd["cpu_thermal-virtual-0"]["temp1"]["temp1_input"], 1));
+
+?>°C</b>, <?php
+
+if ($outd["cpu_thermal-virtual-0"]["temp1"]["temp1_input"] > 90) {
+ echo("completely overheating!");
+} else if ($outd["cpu_thermal-virtual-0"]["temp1"]["temp1_input"] > 60) {
+ echo("starting to throttle!");
+} else {
+ echo("under normal temperatures");
} \ No newline at end of file
diff --git a/admin/api/serverTime.php b/admin/api/serverTime.php
index d0db5e3..77ba321 100644
--- a/admin/api/serverTime.php
+++ b/admin/api/serverTime.php
@@ -1,12 +1,12 @@
-<?php
-
-require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.api.php";
-
-$str = file_get_contents('/proc/uptime');
-$num = floatval($str);
-$secs = fmod($num, 60); $num = intdiv($num, 60);
-$mins = $num % 60; $num = intdiv($num, 60);
-$hours = $num % 24; $num = intdiv($num, 24);
-$days = $num;
-
+<?php
+
+require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.api.php";
+
+$str = file_get_contents('/proc/uptime');
+$num = floatval($str);
+$secs = fmod($num, 60); $num = intdiv($num, 60);
+$mins = $num % 60; $num = intdiv($num, 60);
+$hours = $num % 24; $num = intdiv($num, 24);
+$days = $num;
+
echo($days . " day·s, " . $hours . " hour·s, " . $mins . " minute·s, " . ceil($secs) . " second·s"); \ No newline at end of file
diff --git a/admin/api/setlive.php b/admin/api/setlive.php
new file mode 100644
index 0000000..0ef8b94
--- /dev/null
+++ b/admin/api/setlive.php
@@ -0,0 +1,33 @@
+<?php
+
+require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.api.php";
+
+if (isset($_POST['document']) && strpos($_POST['document'], "/") === false) {
+ $doc = $_POST['document'];
+} else {
+ die();
+}
+
+if ($doc === "conduct.fr") {
+ file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/code/fr.html", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/drafts/" . $doc . ".html"));
+}
+
+if ($doc === "conduct.en") {
+ file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/code/en.html", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/drafts/" . $doc . ".html"));
+}
+
+if ($doc === "blog.en") {
+ file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/blog/data/{$_POST['article']}.json.html", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/drafts/blog-{$_POST['article']}.json.html"));
+}
+
+if ($doc === "blog.fr") {
+ file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/blog/data/{$_POST['article']}.json.fr.html", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/drafts/blog-{$_POST['article']}.json.fr.html"));
+}
+
+if ($doc === "blog.en") {
+ unlink($_SERVER['DOCUMENT_ROOT'] . "/includes/drafts/blog-{$_POST['article']}.json.html");
+} else if ($doc === "blog.fr") {
+ unlink($_SERVER['DOCUMENT_ROOT'] . "/includes/drafts/blog-{$_POST['article']}.json.fr.html");
+} else {
+ unlink($_SERVER['DOCUMENT_ROOT'] . "/includes/drafts/" . $doc . ".html");
+} \ No newline at end of file
diff --git a/admin/api/terminateAllSessions.php b/admin/api/terminateAllSessions.php
index 2aa5c5f..46c1b33 100644
--- a/admin/api/terminateAllSessions.php
+++ b/admin/api/terminateAllSessions.php
@@ -1,34 +1,34 @@
-<?php
-
-require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.api.php";
-
-if (isset($_GET['_']) && strpos($_GET['_'], "/") === false) {
- $arg = $_GET['_'];
-} else {
- die();
-}
-
-$webs = scandir("/mnt/kartik/online/private/tokens");
-
-foreach ($webs as $webt) {
- if (!is_dir("/mnt/kartik/online/private/tokens/" . $webt)) {
- $d = json_decode(file_get_contents("/mnt/kartik/online/private/tokens/" . $webt), true);
- if ($d["id"] === $arg) {
- unlink("/mnt/kartik/online/private/tokens/" . $webt);
- }
- }
-}
-
-$webs = scandir("/mnt/kartik/online/private/gametokens");
-
-foreach ($webs as $webt) {
- if (!is_dir("/mnt/kartik/online/private/gametokens/" . $webt)) {
- $d = json_decode(file_get_contents("/mnt/kartik/online/private/gametokens/" . $webt), true);
- if ($d["id"] === $arg) {
- unlink("/mnt/kartik/online/private/gametokens/" . $webt);
- }
- }
-}
-
-header("Location: /admin/panes/kartik.php");
+<?php
+
+require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.api.php";
+
+if (isset($_GET['_']) && strpos($_GET['_'], "/") === false) {
+ $arg = $_GET['_'];
+} else {
+ die();
+}
+
+$webs = scandir("/mnt/kartik/online/private/tokens");
+
+foreach ($webs as $webt) {
+ if (!is_dir("/mnt/kartik/online/private/tokens/" . $webt)) {
+ $d = json_decode(file_get_contents("/mnt/kartik/online/private/tokens/" . $webt), true);
+ if ($d["id"] === $arg) {
+ unlink("/mnt/kartik/online/private/tokens/" . $webt);
+ }
+ }
+}
+
+$webs = scandir("/mnt/kartik/online/private/gametokens");
+
+foreach ($webs as $webt) {
+ if (!is_dir("/mnt/kartik/online/private/gametokens/" . $webt)) {
+ $d = json_decode(file_get_contents("/mnt/kartik/online/private/gametokens/" . $webt), true);
+ if ($d["id"] === $arg) {
+ unlink("/mnt/kartik/online/private/gametokens/" . $webt);
+ }
+ }
+}
+
+header("Location: /admin/panes/kartik.php");
die(); \ No newline at end of file
diff --git a/admin/api/terminateGameSessions.php b/admin/api/terminateGameSessions.php
index 2f895b1..6975e81 100644
--- a/admin/api/terminateGameSessions.php
+++ b/admin/api/terminateGameSessions.php
@@ -1,23 +1,23 @@
-<?php
-
-require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.api.php";
-
-if (isset($_GET['_']) && strpos($_GET['_'], "/") === false) {
- $arg = $_GET['_'];
-} else {
- die();
-}
-
-$webs = scandir("/mnt/kartik/online/private/gametokens");
-
-foreach ($webs as $webt) {
- if (!is_dir("/mnt/kartik/online/private/gametokens/" . $webt)) {
- $d = json_decode(file_get_contents("/mnt/kartik/online/private/gametokens/" . $webt), true);
- if ($d["id"] === $arg) {
- unlink("/mnt/kartik/online/private/gametokens/" . $webt);
- }
- }
-}
-
-header("Location: /admin/panes/kartik.php");
-die();
+<?php
+
+require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.api.php";
+
+if (isset($_GET['_']) && strpos($_GET['_'], "/") === false) {
+ $arg = $_GET['_'];
+} else {
+ die();
+}
+
+$webs = scandir("/mnt/kartik/online/private/gametokens");
+
+foreach ($webs as $webt) {
+ if (!is_dir("/mnt/kartik/online/private/gametokens/" . $webt)) {
+ $d = json_decode(file_get_contents("/mnt/kartik/online/private/gametokens/" . $webt), true);
+ if ($d["id"] === $arg) {
+ unlink("/mnt/kartik/online/private/gametokens/" . $webt);
+ }
+ }
+}
+
+header("Location: /admin/panes/kartik.php");
+die();
diff --git a/admin/api/terminateWebSessions.php b/admin/api/terminateWebSessions.php
index 956782f..170f4d8 100644
--- a/admin/api/terminateWebSessions.php
+++ b/admin/api/terminateWebSessions.php
@@ -1,23 +1,23 @@
-<?php
-
-require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.api.php";
-
-if (isset($_GET['_']) && strpos($_GET['_'], "/") === false) {
- $arg = $_GET['_'];
-} else {
- die();
-}
-
-$webs = scandir("/mnt/kartik/online/private/tokens");
-
-foreach ($webs as $webt) {
- if (!is_dir("/mnt/kartik/online/private/tokens/" . $webt)) {
- $d = json_decode(file_get_contents("/mnt/kartik/online/private/tokens/" . $webt), true);
- if ($d["id"] === $arg) {
- unlink("/mnt/kartik/online/private/tokens/" . $webt);
- }
- }
-}
-
-header("Location: /admin/panes/kartik.php");
+<?php
+
+require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.api.php";
+
+if (isset($_GET['_']) && strpos($_GET['_'], "/") === false) {
+ $arg = $_GET['_'];
+} else {
+ die();
+}
+
+$webs = scandir("/mnt/kartik/online/private/tokens");
+
+foreach ($webs as $webt) {
+ if (!is_dir("/mnt/kartik/online/private/tokens/" . $webt)) {
+ $d = json_decode(file_get_contents("/mnt/kartik/online/private/tokens/" . $webt), true);
+ if ($d["id"] === $arg) {
+ unlink("/mnt/kartik/online/private/tokens/" . $webt);
+ }
+ }
+}
+
+header("Location: /admin/panes/kartik.php");
die(); \ No newline at end of file
diff --git a/admin/callback/index.php b/admin/callback/index.php
index d5462f9..8816c32 100644
--- a/admin/callback/index.php
+++ b/admin/callback/index.php
@@ -1,48 +1,48 @@
-<?php
-
-// TODO: handle errors
-
-if (!isset($_GET['code'])) {
- die();
-}
-
-$appdata = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/admin/private/app.json"), true);
-
-$crl = curl_init('https://jetbrains.minteck.ro.lt:1024/hub/hub/api/rest/oauth2/token');
-curl_setopt($crl, CURLOPT_RETURNTRANSFER, true);
-curl_setopt($crl, CURLINFO_HEADER_OUT, true);
-curl_setopt($crl, CURLOPT_POST, true);
-curl_setopt($crl, CURLOPT_HTTPHEADER, [
- "Authorization: Basic " . base64_encode($appdata["id"] . ":" . $appdata["secret"]),
- "Content-Type: application/x-www-form-urlencoded",
- "Accept: application/json"
-]);
-curl_setopt($crl, CURLOPT_POSTFIELDS, "grant_type=authorization_code&redirect_uri=" . urlencode("https://minteck.ro.lt/admin/callback") . "&code=" . $_GET['code']);
-
-$result = curl_exec($crl);
-$result = json_decode($result, true);
-
-curl_close($crl);
-
-if (isset($result["access_token"])) {
- $crl = curl_init('https://jetbrains.minteck.ro.lt:1024/hub/hub/api/rest/users/me');
- curl_setopt($crl, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($crl, CURLINFO_HEADER_OUT, true);
- curl_setopt($crl, CURLOPT_HTTPHEADER, [
- "Authorization: Bearer " . $result["access_token"],
- "Accept: application/json"
- ]);
-
- $result = curl_exec($crl);
- $result = json_decode($result, true);
-
- if ($result["id"] === "74bca7d2-4694-477c-8bc1-9003315abbee") {
- $token = bin2hex(random_bytes(32));
- file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/admin/private/tokens/" . $token, json_encode($result));
- setcookie("ADMIN_TOKEN", $token, 0, "/", ".minteck.ro.lt", true, true);
-
- header("Location: /admin");
- } else {
- header("Location: /");
- }
+<?php
+
+// TODO: handle errors
+
+if (!isset($_GET['code'])) {
+ die();
+}
+
+$appdata = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/admin/private/app.json"), true);
+
+$crl = curl_init('https://jetbrains.minteck.ro.lt:1024/hub/hub/api/rest/oauth2/token');
+curl_setopt($crl, CURLOPT_RETURNTRANSFER, true);
+curl_setopt($crl, CURLINFO_HEADER_OUT, true);
+curl_setopt($crl, CURLOPT_POST, true);
+curl_setopt($crl, CURLOPT_HTTPHEADER, [
+ "Authorization: Basic " . base64_encode($appdata["id"] . ":" . $appdata["secret"]),
+ "Content-Type: application/x-www-form-urlencoded",
+ "Accept: application/json"
+]);
+curl_setopt($crl, CURLOPT_POSTFIELDS, "grant_type=authorization_code&redirect_uri=" . urlencode("https://minteck.ro.lt/admin/callback") . "&code=" . $_GET['code']);
+
+$result = curl_exec($crl);
+$result = json_decode($result, true);
+
+curl_close($crl);
+
+if (isset($result["access_token"])) {
+ $crl = curl_init('https://jetbrains.minteck.ro.lt:1024/hub/hub/api/rest/users/me');
+ curl_setopt($crl, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($crl, CURLINFO_HEADER_OUT, true);
+ curl_setopt($crl, CURLOPT_HTTPHEADER, [
+ "Authorization: Bearer " . $result["access_token"],
+ "Accept: application/json"
+ ]);
+
+ $result = curl_exec($crl);
+ $result = json_decode($result, true);
+
+ if ($result["id"] === "74bca7d2-4694-477c-8bc1-9003315abbee") {
+ $token = bin2hex(random_bytes(32));
+ file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/admin/private/tokens/" . $token, json_encode($result));
+ setcookie("ADMIN_TOKEN", $token, 0, "/", ".minteck.ro.lt", true, true);
+
+ header("Location: /admin");
+ } else {
+ header("Location: /?admin");
+ }
} \ No newline at end of file
diff --git a/admin/index.php b/admin/index.php
index edfa596..a7b4ced 100644
--- a/admin/index.php
+++ b/admin/index.php
@@ -1,181 +1,262 @@
-<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.php"; ?>
-
-<!--suppress CssFloatPxLength -->
-<style>
- .section {
- color: gray;
- font-variant: all-petite-caps;
- font-size: 18px;
- margin: 20px 20px 5px;
- padding: 5px 7.5px 0 7.5px;
- border-top: 1px solid rgba(128, 128, 128, 0.25);
- }
-
- .item {
- cursor: pointer;
- margin: 0 20px;
- border-radius: 5px;
- padding: 2.5px 7.5px;
- color: lightgray;
- }
-
- .item:hover {
- background: rgba(255, 255, 255, .1);
- color: #c2c2c2;
- }
-
- .item:active, .item:focus, .item.selected {
- color: #e7e7e7 !important;
- background: rgba(255, 255, 255, .2) !important;
- cursor: default;
- }
-
- ::-webkit-scrollbar {
- width: 5px;
- }
-
- ::-webkit-scrollbar-track {
- border-radius: 9999px;
- background: transparent;
- }
-
- ::-webkit-scrollbar-thumb {
- border-radius: 9999px;
- background-color: rgba(136, 136, 136, 0.5);
- transition: background 200ms;
- }
-
- ::-webkit-scrollbar-thumb:hover {
- background-color: rgba(85, 85, 85, 0.75);
- }
-
- ::-webkit-scrollbar-thumb:active {
- background-color: #222;
- }
-
- .credits {
- margin: 15px 20px 0 20px;
- border-radius: 5px;
- padding: 2.5px 7.5px;
- color: lightgray;
- opacity: .25;
- font-size: 12px;
- }
-
- .reloadbtn {
- vertical-align: middle;
- float: right;
- display: none;
- opacity: 0;
- transition: opacity 200ms, transform 500ms;
- transform: rotate(0deg);
- }
-
- .item.selected .reloadbtn {
- display: inline-block;
- opacity: 1;
- }
-</style>
-
-<div style="position: fixed;inset: 0;z-index: 5;backdrop-filter:blur(10px);background:rgba(47,49,54,1);height:100%;display:grid;grid-template-columns: 256px 1fr;">
- <div id="menu" style="height:100%;overflow-y: scroll;">
- <div class="item selected" id="activity-home" style="margin-top:15vh;">
- Home
- <img alt="" src="/static/reload.png" class="reloadbtn">
- </div>
-
- <h3 class="section">System</h3>
- <div class="item" id="activity-uptime">
- Uptime
- <img alt="" src="/static/reload.png" class="reloadbtn">
- </div>
- <div class="item" id="activity-version">
- Software Versions
- <img alt="" src="/static/reload.png" class="reloadbtn">
- </div>
-
- <h3 class="section">Member Management</h3>
- <div class="item" id="activity-unchained">
- UnchainedTech
- <img alt="" src="/static/reload.png" class="reloadbtn">
- </div>
- <div class="item" id="activity-kartik">
- Kartik Online
- <img alt="" src="/static/reload.png" class="reloadbtn">
- </div>
-
- <h3 class="section">Minteck Space</h3>
- <div class="item" id="activity-blog">
- Blog
- <img alt="" src="/static/reload.png" class="reloadbtn">
- </div>
- <div class="item" id="activity-telemetry">
- Telemetry
- <img alt="" src="/static/reload.png" class="reloadbtn">
- </div>
- <div class="item" id="activity-code">
- Code of Conduct
- <img alt="" src="/static/reload.png" class="reloadbtn">
- </div>
-
- <h3 class="section">Neutron Cloud</h3>
- <div class="item" id="activity-quotas">
- Quotas
- <img alt="" src="/static/reload.png" class="reloadbtn">
- </div>
- <div class="item" id="activity-neutroning">
- Sites Map
- <img alt="" src="/static/reload.png" class="reloadbtn">
- </div>
-
- <div class="credits" style="margin-bottom:15vh;">
- Release <?= substr(md5_file($_SERVER['DOCUMENT_ROOT'] . "/admin/index.php"), 0, 7); ?><br>
- Host <?= PHP_VERSION ?><br>
- <?= php_uname('s') ?> <?= php_uname('r') ?>
- </div>
- </div>
-
- <div id="content" style="background:rgba(54,57,63,1);">
- <iframe id="content-frame" src="/admin/panes/home.php" style="background: transparent;border: none;height: 100%;width: 100%;"></iframe>
- </div>
-
- <script>
-
- function activity(id, url, target) {
- if (target.classList.contains("selected")) return;
- if (target.classList.contains("reloadbtn")) return;
-
- Array.from(document.getElementsByClassName("item")).forEach((item) => {
- item.classList.remove("selected");
- })
-
- document.getElementById(id).classList.add("selected");
- document.getElementById("content-frame").src = url;
- }
-
- document.getElementById("activity-home").addEventListener("click", (event) => { activity(event.target.id, "/admin/panes/home.php", event.target); }, true)
- document.getElementById("activity-uptime").addEventListener("click", (event) => { activity(event.target.id, "/admin/panes/uptime.php", event.target); }, true)
- document.getElementById("activity-version").addEventListener("click", (event) => { activity(event.target.id, "/admin/panes/version.php", event.target); }, true)
- document.getElementById("activity-kartik").addEventListener("click", (event) => { activity(event.target.id, "/admin/panes/kartik.php", event.target); }, true)
- document.getElementById("activity-blog").addEventListener("click", (event) => { activity(event.target.id, "/admin/panes/blog.php", event.target); }, true)
- document.getElementById("activity-code").addEventListener("click", (event) => { activity(event.target.id, "/admin/panes/code.php", event.target); }, true)
- document.getElementById("activity-quotas").addEventListener("click", (event) => { activity(event.target.id, "/admin/panes/quotas.php", event.target); }, true)
- document.getElementById("activity-neutroning").addEventListener("click", (event) => { activity(event.target.id, "/admin/panes/neutroning.php", event.target); }, true)
- document.getElementById("activity-telemetry").addEventListener("click", (event) => { activity(event.target.id, "/admin/panes/telemetry.php", event.target); }, true)
- document.getElementById("activity-unchained").addEventListener("click", (event) => { activity(event.target.id, "/admin/panes/unchained.php", event.target); }, true)
-
- Array.from(document.getElementsByClassName("reloadbtn")).forEach((item) => {
- item.addEventListener("click", (event) => {
- if (event.target.style.transform === "rotate(-360deg)") {
- event.target.style.transform = "rotate(0deg)";
- } else {
- event.target.style.transform = "rotate(-360deg)";
- }
- document.getElementById("content-frame").contentWindow.location.reload(true);
- })
- })
-
- </script>
-</div>
-
+<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.php"; ?>
+
+<div id="--loader" style="background:rgba(47,49,54,1);position:fixed;inset:0;z-index:999;display:flex;align-items:center;justify-content:center;">
+ <img src="/logo-mono.png" width="64px">
+</div>
+
+<script>
+ window.addEventListener("load", () => {
+ setTimeout(() => {
+ $("#--loader").fadeOut(200);
+ }, 2000)
+ })
+</script>
+
+<!--suppress CssFloatPxLength -->
+<style>
+ .section {
+ color: gray;
+ font-variant: all-petite-caps;
+ font-size: 18px;
+ margin: 20px 20px 5px;
+ padding: 5px 7.5px 0 7.5px;
+ border-top: 1px solid rgba(128, 128, 128, 0.25);
+ }
+
+ .item {
+ cursor: pointer;
+ margin: 0 20px;
+ border-radius: 99px;
+ padding: 2.5px 15px;
+ color: lightgray;
+ margin-right: 0;
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+ }
+
+ .item:hover {
+ background: rgba(255, 255, 255, .1);
+ color: #c2c2c2;
+ }
+
+ .item:active, .item:focus, .item.selected {
+ color: #e7e7e7 !important;
+ background: rgba(255, 255, 255, .2) !important;
+ cursor: default;
+ }
+
+ ::-webkit-scrollbar {
+ width: 5px;
+ }
+
+ ::-webkit-scrollbar-track {
+ border-radius: 9999px;
+ background: transparent;
+ }
+
+ ::-webkit-scrollbar-thumb {
+ border-radius: 9999px;
+ background-color: rgba(136, 136, 136, 0.5);
+ transition: background 200ms;
+ }
+
+ ::-webkit-scrollbar-thumb:hover {
+ background-color: rgba(85, 85, 85, 0.75);
+ }
+
+ ::-webkit-scrollbar-thumb:active {
+ background-color: #222;
+ }
+
+ .credits {
+ margin: 15px 20px 0 20px;
+ border-radius: 5px;
+ padding: 2.5px 7.5px;
+ color: lightgray;
+ opacity: .25;
+ font-size: 12px;
+ }
+
+ .reloadbtn {
+ vertical-align: middle;
+ float: right;
+ display: none;
+ opacity: 0;
+ transition: opacity 200ms, transform 500ms;
+ transform: rotate(0deg);
+ }
+
+ .item.selected .reloadbtn {
+ display: inline-block;
+ opacity: 1;
+ }
+
+ .item-text {
+ vertical-align: middle;
+ position: relative;
+ top: 2px;
+ pointer-events: none;
+ }
+
+ .item-icon {
+ vertical-align: middle;
+ width: 24px;
+ filter: invert(1);
+ pointer-events: none;
+ }
+
+ @media (max-width: 700px) {
+ .admin > div {
+ grid-template-columns: 64px 1fr !important;
+ }
+
+ .item-text, .credits {
+ display: none;
+ }
+
+ .reloadbtn {
+ display: none !important;
+ opacity: 0 !important;
+ pointer-events: none !important;
+ }
+
+ .item {
+ padding: 5px;
+ margin-left: 8px;
+ margin-right: 8px;
+ border-radius: 999px;
+ width: 48px;
+ height: 48px;
+ margin-bottom: 5px;
+ }
+
+ .item:nth-child(1) {
+ margin-top: 10px !important;
+ }
+
+ .item-icon {
+ position: relative;
+ top: 1px;
+ width: 36px;
+ left: 1px;
+ }
+ }
+</style>
+
+<div style="position: fixed;inset: 0;z-index: 5;backdrop-filter:blur(10px);background:rgba(47,49,54,1);height:100%;display:grid;grid-template-columns: 256px 1fr;">
+ <div id="menu" style="height:100%;">
+ <div class="item selected" id="activity-home" style="margin-top:15vh;">
+ <img src="/static/admin/home.svg" class="item-icon" alt="">
+ <span class="item-text">Home</span>
+ <img alt="" src="/static/reload.png" class="reloadbtn">
+ </div>
+ <div class="item" id="activity-files">
+ <img src="/static/admin/files.svg" class="item-icon" alt="">
+ <span class="item-text">Files</span>
+ <img alt="" src="/static/reload.png" class="reloadbtn">
+ </div>
+ <div class="item" id="activity-hardware">
+ <img src="/static/admin/hardware.svg" class="item-icon" alt="">
+ <span class="item-text">Hardware</span>
+ <img alt="" src="/static/reload.png" class="reloadbtn">
+ </div>
+ <div class="item" id="activity-disk">
+ <img src="/static/admin/disk.svg" class="item-icon" alt="">
+ <span class="item-text">Disk Space</span>
+ <img alt="" src="/static/reload.png" class="reloadbtn">
+ </div>
+ <div class="item" id="activity-uptime">
+ <img src="/static/admin/uptime.svg" class="item-icon" alt="">
+ <span class="item-text">Uptime</span>
+ <img alt="" src="/static/reload.png" class="reloadbtn">
+ </div>
+ <div class="item" id="activity-version">
+ <img src="/static/admin/version.svg" class="item-icon" alt="">
+ <span class="item-text">Software Versions</span>
+ <img alt="" src="/static/reload.png" class="reloadbtn">
+ </div>
+ <div class="item" id="activity-unchained">
+ <img src="/static/admin/unchained.svg" class="item-icon" alt="">
+ <span class="item-text">UnchainedTech</span>
+ <img alt="" src="/static/reload.png" class="reloadbtn">
+ </div>
+ <div class="item" id="activity-kartik">
+ <img src="/static/admin/kartik.svg" class="item-icon" alt="">
+ <span class="item-text">Kartik Online
+ <img alt="" src="/static/reload.png" class="reloadbtn">
+ </div>
+ <div class="item" id="activity-telemetry">
+ <img src="/static/admin/telemetry.svg" class="item-icon" alt="">
+ <span class="item-text">Telemetry</span>
+ <img alt="" src="/static/reload.png" class="reloadbtn">
+ </div>
+ <div class="item" id="activity-code">
+ <img src="/static/admin/code.svg" class="item-icon" alt="">
+ <span class="item-text">Code of Conduct</span>
+ <img alt="" src="/static/reload.png" class="reloadbtn">
+ </div>
+ <div class="item" id="activity-quotas">
+ <img src="/static/admin/quotas.svg" class="item-icon" alt="">
+ <span class="item-text">Quotas</span>
+ <img alt="" src="/static/reload.png" class="reloadbtn">
+ </div>
+ <div class="item" id="activity-neutroning">
+ <img src="/static/admin/neutroning.svg" class="item-icon" alt="">
+ <span class="item-text">Sites Map</span>
+ <img alt="" src="/static/reload.png" class="reloadbtn">
+ </div>
+
+ <div class="credits" style="margin-bottom:15vh;">
+ Admin <?= substr(md5_file($_SERVER['DOCUMENT_ROOT'] . "/admin/index.php"), 0, 7); ?><br>
+ Release <?= file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/version.txt") ?><br>
+ Host <?= PHP_VERSION ?><br>
+ <?= php_uname('s') ?> <?= php_uname('r') ?>
+ </div>
+ </div>
+
+ <div id="content" style="background:rgba(54,57,63,1);">
+ <iframe id="content-frame" src="/admin/panes/home.php" style="background: transparent;border: none;height: 100%;width: 100%;"></iframe>
+ </div>
+
+ <script>
+
+ function activity(id, url, target) {
+ if (target.classList.contains("selected")) return;
+ if (target.classList.contains("reloadbtn")) return;
+
+ Array.from(document.getElementsByClassName("item")).forEach((item) => {
+ item.classList.remove("selected");
+ })
+
+ document.getElementById(id).classList.add("selected");
+ document.getElementById("content-frame").src = url;
+ }
+
+ document.getElementById("activity-home").addEventListener("click", (event) => { activity(event.target.id, "/admin/panes/home.php", event.target); }, true)
+ document.getElementById("activity-files").addEventListener("click", (event) => { activity(event.target.id, "/admin/panes/files.php", event.target); }, true)
+ document.getElementById("activity-hardware").addEventListener("click", (event) => { activity(event.target.id, "/admin/panes/hardware.php", event.target); }, true)
+ document.getElementById("activity-disk").addEventListener("click", (event) => { activity(event.target.id, "/admin/panes/disk.php", event.target); }, true)
+ document.getElementById("activity-uptime").addEventListener("click", (event) => { activity(event.target.id, "/admin/panes/uptime.php", event.target); }, true)
+ document.getElementById("activity-version").addEventListener("click", (event) => { activity(event.target.id, "/admin/panes/version.php", event.target); }, true)
+ document.getElementById("activity-kartik").addEventListener("click", (event) => { activity(event.target.id, "/admin/panes/kartik.php", event.target); }, true)
+ document.getElementById("activity-code").addEventListener("click", (event) => { activity(event.target.id, "/admin/panes/code.php", event.target); }, true)
+ document.getElementById("activity-quotas").addEventListener("click", (event) => { activity(event.target.id, "/admin/panes/quotas.php", event.target); }, true)
+ document.getElementById("activity-neutroning").addEventListener("click", (event) => { activity(event.target.id, "/admin/panes/neutroning.php", event.target); }, true)
+ document.getElementById("activity-telemetry").addEventListener("click", (event) => { activity(event.target.id, "/admin/panes/telemetry.php", event.target); }, true)
+ document.getElementById("activity-unchained").addEventListener("click", (event) => { activity(event.target.id, "/admin/panes/unchained.php", event.target); }, true)
+
+ Array.from(document.getElementsByClassName("reloadbtn")).forEach((item) => {
+ item.addEventListener("click", (event) => {
+ if (event.target.style.transform === "rotate(-360deg)") {
+ event.target.style.transform = "rotate(0deg)";
+ } else {
+ event.target.style.transform = "rotate(-360deg)";
+ }
+ document.getElementById("content-frame").contentWindow.location.reload(true);
+ })
+ })
+
+ </script>
+</div>
+
<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/footer.php"; ?> \ No newline at end of file
diff --git a/admin/panes/code.php b/admin/panes/code.php
new file mode 100644
index 0000000..5c716e3
--- /dev/null
+++ b/admin/panes/code.php
@@ -0,0 +1,43 @@
+<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.php";/** @var array $_DATA */ ?>
+
+<style>
+ ::-webkit-scrollbar {
+ width: 5px;
+ }
+
+ ::-webkit-scrollbar-track {
+ border-radius: 9999px;
+ background: transparent;
+ }
+
+ ::-webkit-scrollbar-thumb {
+ border-radius: 9999px;
+ background-color: rgba(136, 136, 136, 0.5);
+ transition: background 200ms;
+ }
+
+ ::-webkit-scrollbar-thumb:hover {
+ background-color: rgba(85, 85, 85, 0.75);
+ }
+
+ ::-webkit-scrollbar-thumb:active {
+ background-color: #222;
+ }
+
+ .list-group-item {
+ background: #34373c;
+ }
+</style>
+
+<div class="container" style="color:white;padding-top:15vh;padding-bottom:15vh;">
+ <h2 style="text-align:center;">Code of Conduct</h2>
+
+ <h4 style="text-align:center;">editor powered by Neutron</h4>
+
+ <ul class="list-group" style="margin-top:20px;">
+ <li class="list-group-item">English (primary) <span style="float:right;"><a href="/admin/panes/editor.php?file=conduct.en&name=Code%20of%20Conduct%20-%20English&context=code">Edit</a> · <a href="/code-of-conduct/?en" target="_blank">View</a></span></li>
+ <li class="list-group-item">French <span style="float:right;"><a href="/admin/panes/editor.php?file=conduct.fr&name=Code%20of%20Conduct%20-%20French&context=code">Edit</a> · <a href="/code-of-conduct/?fr" target="_blank">View</a></span></li>
+ </ul>
+</div>
+
+<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/footer.php"; ?> \ No newline at end of file
diff --git a/admin/panes/disk.php b/admin/panes/disk.php
new file mode 100644
index 0000000..72d772f
--- /dev/null
+++ b/admin/panes/disk.php
@@ -0,0 +1,81 @@
+<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.php";/** @var array $_DATA */ ?>
+
+<style>
+ ::-webkit-scrollbar {
+ width: 5px;
+ }
+
+ ::-webkit-scrollbar-track {
+ border-radius: 9999px;
+ background: transparent;
+ }
+
+ ::-webkit-scrollbar-thumb {
+ border-radius: 9999px;
+ background-color: rgba(136, 136, 136, 0.5);
+ transition: background 200ms;
+ }
+
+ ::-webkit-scrollbar-thumb:hover {
+ background-color: rgba(85, 85, 85, 0.75);
+ }
+
+ ::-webkit-scrollbar-thumb:active {
+ background-color: #222;
+ }
+
+ .list-group-item {
+ background: #34373c;
+ }
+</style>
+
+<div class="container" style="color:white;padding-top:15vh;padding-bottom:15vh;">
+ <h2 style="text-align:center;">Disk Space Usage</h2>
+ <pre style="background:#111;color:white;border-radius:5px;padding: 10px;"><?php
+
+ exec("df -h -x tmpfs -x squashfs -x devtmpfs --total --output=source,fstype,size,used,avail,pcent,ipcent,iused,itotal,target", $disktotal);
+ echo(implode("\n", $disktotal));
+
+ ?>
+ </pre>
+ <ul class="list-group">
+ <li class="list-group-item">
+ <details>
+ <summary>Show all filesystems (including RAM disks and pseudo-fs)</summary>
+ <pre style="background:#111;color:white;border-radius:5px;padding: 10px;"><?php
+
+ exec("df -ha --output=source,fstype,size,used,avail,pcent,ipcent,iused,itotal,target", $disktotal2);
+ echo(implode("\n", $disktotal2));
+
+ ?>
+ </pre>
+ </details>
+ </li>
+ <li class="list-group-item">
+ <details>
+ <summary>Show filesystems mount options</summary>
+ <pre style="background:#111;color:white;border-radius:5px;padding: 10px;"><?php
+
+ exec("mount", $disktotal3);
+ echo(implode("\n", $disktotal3));
+
+ ?>
+ </pre>
+ </details>
+ </li>
+ <li class="list-group-item">
+ <details>
+ <summary>Show block devices tree</summary>
+ <pre style="background:#111;color:white;border-radius:5px;padding: 10px;"><?php
+
+ exec("lsblk -mp", $disktotal4);
+ echo(implode("\n", $disktotal4));
+
+ ?>
+ </pre>
+ </details>
+ </li>
+ </ul>
+</div>
+
+<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/footer.php"; ?> \ No newline at end of file
diff --git a/admin/panes/editor.php b/admin/panes/editor.php
new file mode 100644
index 0000000..b337060
--- /dev/null
+++ b/admin/panes/editor.php
@@ -0,0 +1,591 @@
+<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.php";/** @var array $_DATA */
+
+if (isset($_GET['file']) && strpos($_GET['file'], "/") === false) {} else {
+ die();
+}
+
+if (isset($_GET['name']) && strpos($_GET['name'], "/") === false) {} else {
+ die();
+}
+
+if (isset($_GET['context']) && strpos($_GET['context'], "/") === false) {} else {
+ die();
+}
+
+if (isset($_GET['article']) && strpos($_GET['article'], "/") === false) {} else {
+ if (isset($_GET['article'])) {
+ die();
+ }
+}
+
+?>
+
+<style>
+ ::-webkit-scrollbar {
+ width: 5px;
+ }
+
+ ::-webkit-scrollbar-track {
+ border-radius: 9999px;
+ background: transparent;
+ }
+
+ ::-webkit-scrollbar-thumb {
+ border-radius: 9999px;
+ background-color: rgba(136, 136, 136, 0.5);
+ transition: background 200ms;
+ }
+
+ ::-webkit-scrollbar-thumb:hover {
+ background-color: rgba(85, 85, 85, 0.75);
+ }
+
+ ::-webkit-scrollbar-thumb:active {
+ background-color: #222;
+ }
+
+ .list-group-item {
+ background: #34373c;
+ }
+</style>
+
+<div class="container" style="color:white;padding-top:15vh;padding-bottom:15vh;">
+ <p style="text-align: center;"><a href="/admin/panes/<?= $_GET['context'] ?>.php">← Go back</a></p>
+ <h2 style="text-align:center;"><?= strip_tags($_GET['name']) ?></h2>
+
+ <h4 id="autosave-status" style="text-align:center;transition:opacity 200ms;">Saved as draft</h4>
+
+ <textarea name="content" id="editor"><?php
+
+ if ($_GET['file'] === "conduct.fr") {
+ if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/drafts/" . $_GET['file'] . ".html")) {
+ echo(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/drafts/" . $_GET['file'] . ".html"));
+ } else {
+ echo(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/code/fr.html"));
+ }
+ }
+
+ if ($_GET['file'] === "conduct.en") {
+ if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/drafts/" . $_GET['file'] . ".html")) {
+ echo(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/drafts/" . $_GET['file'] . ".html"));
+ } else {
+ echo(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/code/en.html"));
+ }
+ }
+
+ if ($_GET['file'] === "blog.en") {
+ if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/drafts/blog-{$_GET['article']}.json.html")) {
+ echo(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/drafts/blog-{$_GET['article']}.json.html"));
+ } else {
+ echo(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/blog/data/{$_GET['article']}.json.html"));
+ }
+ }
+
+ if ($_GET['file'] === "blog.fr") {
+ if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/drafts/blog-{$_GET['article']}.json.fr.html")) {
+ echo(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/drafts/blog-{$_GET['article']}.json.fr.html"));
+ } else {
+ if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/blog/data/{$_GET['article']}.json.fr.html")) {
+ echo(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/blog/data/{$_GET['article']}.json.fr.html"));
+ } else {
+ echo(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/blog/data/{$_GET['article']}.json.html"));
+ }
+ }
+ }
+
+ ?></textarea>
+
+ <br>
+
+ <script src="/static/js/ckeditor.js"></script>
+ <script>
+ let colors = [{
+ color: 'hsl(0, 0%, 0%)',
+ },
+ {
+ color: 'hsl(0, 0%, 12.5%)',
+ },
+ {
+ color: 'hsl(0, 0%, 25%)',
+ },
+ {
+ color: 'hsl(0, 0%, 37.5%)',
+ },
+ {
+ color: 'hsl(0, 0%, 50%)',
+ },
+ {
+ color: 'hsl(0, 0%, 62.5%)',
+ },
+ {
+ color: 'hsl(0, 0%, 75%)',
+ },
+ {
+ color: 'hsl(0, 0%, 87.5%)',
+ },
+ {
+ color: 'hsl(0, 0%, 100%)',
+ hasBorder: true,
+ },
+ {
+ color: 'hsl(0, 100%, 10%)',
+ },
+ {
+ color: 'hsl(0, 100%, 12.5%)',
+ },
+ {
+ color: 'hsl(0, 100%, 25%)',
+ },
+ {
+ color: 'hsl(0, 100%, 37.5%)',
+ },
+ {
+ color: 'hsl(0, 100%, 50%)',
+ },
+ {
+ color: 'hsl(0, 100%, 62.5%)',
+ },
+ {
+ color: 'hsl(0, 100%, 75%)',
+ },
+ {
+ color: 'hsl(0, 100%, 87.5%)',
+ },
+ {
+ color: 'hsl(0, 100%, 90%)',
+ hasBorder: true,
+ },
+ {
+ color: 'hsl(30, 100%, 10%)',
+ },
+ {
+ color: 'hsl(30, 100%, 12.5%)',
+ },
+ {
+ color: 'hsl(30, 100%, 25%)',
+ },
+ {
+ color: 'hsl(30, 100%, 37.5%)',
+ },
+ {
+ color: 'hsl(30, 100%, 50%)',
+ },
+ {
+ color: 'hsl(30, 100%, 62.5%)',
+ },
+ {
+ color: 'hsl(30, 100%, 75%)',
+ },
+ {
+ color: 'hsl(30, 100%, 87.5%)',
+ },
+ {
+ color: 'hsl(30, 100%, 90%)',
+ hasBorder: true,
+ },
+ {
+ color: 'hsl(60, 100%, 10%)',
+ },
+ {
+ color: 'hsl(60, 100%, 12.5%)',
+ },
+ {
+ color: 'hsl(60, 100%, 25%)',
+ },
+ {
+ color: 'hsl(60, 100%, 37.5%)',
+ },
+ {
+ color: 'hsl(60, 100%, 50%)',
+ },
+ {
+ color: 'hsl(60, 100%, 62.5%)',
+ },
+ {
+ color: 'hsl(60, 100%, 75%)',
+ },
+ {
+ color: 'hsl(60, 100%, 87.5%)',
+ },
+ {
+ color: 'hsl(60, 100%, 90%)',
+ hasBorder: true,
+ },
+ {
+ color: 'hsl(90, 100%, 10%)',
+ },
+ {
+ color: 'hsl(90, 100%, 12.5%)',
+ },
+ {
+ color: 'hsl(90, 100%, 25%)',
+ },
+ {
+ color: 'hsl(90, 100%, 37.5%)',
+ },
+ {
+ color: 'hsl(90, 100%, 50%)',
+ },
+ {
+ color: 'hsl(90, 100%, 62.5%)',
+ },
+ {
+ color: 'hsl(90, 100%, 75%)',
+ },
+ {
+ color: 'hsl(90, 100%, 87.5%)',
+ },
+ {
+ color: 'hsl(90, 100%, 90%)',
+ hasBorder: true,
+ },
+ {
+ color: 'hsl(120, 100%, 10%)',
+ },
+ {
+ color: 'hsl(120, 100%, 12.5%)',
+ },
+ {
+ color: 'hsl(120, 100%, 25%)',
+ },
+ {
+ color: 'hsl(120, 100%, 37.5%)',
+ },
+ {
+ color: 'hsl(120, 100%, 50%)',
+ },
+ {
+ color: 'hsl(120, 100%, 62.5%)',
+ },
+ {
+ color: 'hsl(120, 100%, 75%)',
+ },
+ {
+ color: 'hsl(120, 100%, 87.5%)',
+ },
+ {
+ color: 'hsl(120, 100%, 90%)',
+ hasBorder: true,
+ },
+ {
+ color: 'hsl(150, 100%, 10%)',
+ },
+ {
+ color: 'hsl(150, 100%, 12.5%)',
+ },
+ {
+ color: 'hsl(150, 100%, 25%)',
+ },
+ {
+ color: 'hsl(150, 100%, 37.5%)',
+ },
+ {
+ color: 'hsl(150, 100%, 50%)',
+ },
+ {
+ color: 'hsl(150, 100%, 62.5%)',
+ },
+ {
+ color: 'hsl(150, 100%, 75%)',
+ },
+ {
+ color: 'hsl(150, 100%, 87.5%)',
+ },
+ {
+ color: 'hsl(150, 100%, 90%)',
+ hasBorder: true,
+ },
+ {
+ color: 'hsl(180, 100%, 10%)',
+ },
+ {
+ color: 'hsl(180, 100%, 12.5%)',
+ },
+ {
+ color: 'hsl(180, 100%, 25%)',
+ },
+ {
+ color: 'hsl(180, 100%, 37.5%)',
+ },
+ {
+ color: 'hsl(180, 100%, 50%)',
+ },
+ {
+ color: 'hsl(180, 100%, 62.5%)',
+ },
+ {
+ color: 'hsl(180, 100%, 75%)',
+ },
+ {
+ color: 'hsl(180, 100%, 87.5%)',
+ },
+ {
+ color: 'hsl(180, 100%, 90%)',
+ hasBorder: true,
+ },
+ {
+ color: 'hsl(210, 100%, 10%)',
+ },
+ {
+ color: 'hsl(210, 100%, 12.5%)',
+ },
+ {
+ color: 'hsl(210, 100%, 25%)',
+ },
+ {
+ color: 'hsl(210, 100%, 37.5%)',
+ },
+ {
+ color: 'hsl(210, 100%, 50%)',
+ },
+ {
+ color: 'hsl(210, 100%, 62.5%)',
+ },
+ {
+ color: 'hsl(210, 100%, 75%)',
+ },
+ {
+ color: 'hsl(210, 100%, 87.5%)',
+ },
+ {
+ color: 'hsl(210, 100%, 90%)',
+ hasBorder: true,
+ },
+ {
+ color: 'hsl(240, 100%, 10%)',
+ },
+ {
+ color: 'hsl(240, 100%, 12.5%)',
+ },
+ {
+ color: 'hsl(240, 100%, 25%)',
+ },
+ {
+ color: 'hsl(240, 100%, 37.5%)',
+ },
+ {
+ color: 'hsl(240, 100%, 50%)',
+ },
+ {
+ color: 'hsl(240, 100%, 62.5%)',
+ },
+ {
+ color: 'hsl(240, 100%, 75%)',
+ },
+ {
+ color: 'hsl(240, 100%, 87.5%)',
+ },
+ {
+ color: 'hsl(240, 100%, 90%)',
+ hasBorder: true,
+ },
+ {
+ color: 'hsl(270, 100%, 10%)',
+ },
+ {
+ color: 'hsl(270, 100%, 12.5%)',
+ },
+ {
+ color: 'hsl(270, 100%, 25%)',
+ },
+ {
+ color: 'hsl(270, 100%, 37.5%)',
+ },
+ {
+ color: 'hsl(270, 100%, 50%)',
+ },
+ {
+ color: 'hsl(270, 100%, 62.5%)',
+ },
+ {
+ color: 'hsl(270, 100%, 75%)',
+ },
+ {
+ color: 'hsl(270, 100%, 87.5%)',
+ },
+ {
+ color: 'hsl(270, 100%, 90%)',
+ hasBorder: true,
+ },
+ {
+ color: 'hsl(300, 100%, 10%)',
+ },
+ {
+ color: 'hsl(300, 100%, 12.5%)',
+ },
+ {
+ color: 'hsl(300, 100%, 25%)',
+ },
+ {
+ color: 'hsl(300, 100%, 37.5%)',
+ },
+ {
+ color: 'hsl(300, 100%, 50%)',
+ },
+ {
+ color: 'hsl(300, 100%, 62.5%)',
+ },
+ {
+ color: 'hsl(300, 100%, 75%)',
+ },
+ {
+ color: 'hsl(300, 100%, 87.5%)',
+ },
+ {
+ color: 'hsl(300, 100%, 90%)',
+ hasBorder: true,
+ },
+ {
+ color: 'hsl(330, 100%, 10%)',
+ },
+ {
+ color: 'hsl(330, 100%, 12.5%)',
+ },
+ {
+ color: 'hsl(330, 100%, 25%)',
+ },
+ {
+ color: 'hsl(330, 100%, 37.5%)',
+ },
+ {
+ color: 'hsl(330, 100%, 50%)',
+ },
+ {
+ color: 'hsl(330, 100%, 62.5%)',
+ },
+ {
+ color: 'hsl(330, 100%, 75%)',
+ },
+ {
+ color: 'hsl(330, 100%, 87.5%)',
+ },
+ {
+ color: 'hsl(330, 100%, 90%)',
+ hasBorder: true,
+ }];
+ let editor;
+ ClassicEditor
+ .create( document.querySelector( '#editor' ), {
+ toolbar: [
+ 'undo', 'redo', '|', 'removeFormat', '|', 'heading', '|', 'fontSize', 'fontColor', 'fontBackgroundColor', 'alignment', '|', 'bold', 'italic', 'underline', 'strikethrough', '|', 'subscript', 'superscript', '|', 'code', '|', 'outdent', 'indent', '|', 'bulletedList', 'numberedList', '|', 'link', 'imageUpload', 'mediaEmbed', 'blockQuote', 'insertTable', 'codeBlock', '|', 'horizontalLine'
+ ],
+ fontColor: {
+ colors: colors,
+ columns: 9
+ },
+ autosave: {
+ save( editor ) {
+ return saveData( editor.getData() );
+ }
+ },
+ } )
+
+ .then( newEditor => {
+ editor = newEditor;
+ } )
+ .catch( error => {
+ console.error( error );
+ } );
+ </script>
+ <!--suppress JSUnresolvedVariable, JSUnresolvedFunction, JSUnfilteredForInLoop -->
+ <script>
+ function publish() {
+ $("html, body").animate({scrollTop: 0}, 100);
+ document.getElementById("autosave-status").style.opacity = "0";
+ setTimeout(() => {
+ document.getElementById("autosave-status").innerText = "Publishing...";
+ document.getElementById("autosave-status").style.opacity = "1";
+ setTimeout(() => {
+ $.ajax("/admin/api/setlive.php", {
+ dataType: 'text',
+ type: 'post',
+ contentType: 'application/x-www-form-urlencoded',
+ data: {
+ document: "<?= $_GET['file'] ?>",
+ <?= isset($_GET['article']) ? "article: \"{$_GET['article']}\"" : "" ?>
+ },
+ success: (data) => {
+ document.getElementById("autosave-status").style.opacity = "0";
+ setTimeout(() => {
+ document.getElementById("autosave-status").innerText = "Published";
+ document.getElementById("autosave-status").style.opacity = "1";
+ }, 200)
+ document.getElementById("publish-btn").disabled = data.trim() === "false";
+ },
+ error: (e) => {
+ console.error(e);
+ document.getElementById("autosave-status").style.opacity = "0";
+ setTimeout(() => {
+ document.getElementById("autosave-status").innerText = "Unable to publish";
+ document.getElementById("autosave-status").style.opacity = "1";
+ }, 200)
+ alert("An error prevents publishing the document. You may continue editing it but your changes may not be automatically saved on the server");
+ }
+ });
+ }, 200)
+ }, 200)
+ }
+
+ function saveData(data) {
+ document.getElementById("autosave-status").style.opacity = "0";
+ setTimeout(() => {
+ document.getElementById("autosave-status").innerText = "Saving...";
+ document.getElementById("autosave-status").style.opacity = "1";
+ setTimeout(() => {
+ $.ajax("/admin/api/autosave.php", {
+ dataType: 'text',
+ type: 'post',
+ contentType: 'application/x-www-form-urlencoded',
+ data: {
+ document: "<?= $_GET['file'] ?>",
+ <?= isset($_GET['article']) ? "article: \"{$_GET['article']}\"," : "" ?>
+ content: data
+ },
+ success: (data) => {
+ $.ajax("/admin/api/draftvslive.php", {
+ dataType: 'text',
+ type: 'post',
+ contentType: 'application/x-www-form-urlencoded',
+ data: {
+ document: "<?= $_GET['file'] ?>",
+ <?= isset($_GET['article']) ? "article: \"{$_GET['article']}\"" : "" ?>
+ },
+ success: (data) => {
+ document.getElementById("autosave-status").style.opacity = "0";
+ setTimeout(() => {
+ document.getElementById("autosave-status").innerText = "Saved as draft";
+ document.getElementById("autosave-status").style.opacity = "1";
+ }, 200)
+ document.getElementById("publish-btn").disabled = data.trim() === "true";
+ },
+ error: (e) => {
+ console.error(e);
+ document.getElementById("autosave-status").style.opacity = "0";
+ setTimeout(() => {
+ document.getElementById("autosave-status").innerText = "Unable to save";
+ document.getElementById("autosave-status").style.opacity = "1";
+ }, 200)
+ alert("An error prevents saving the document. You may continue editing it but your changes won't be automatically saved on the server");
+ }
+ });
+ },
+ error: (e) => {
+ console.error(e);
+ document.getElementById("autosave-status").style.opacity = "0";
+ setTimeout(() => {
+ document.getElementById("autosave-status").innerText = "Unable to save";
+ document.getElementById("autosave-status").style.opacity = "1";
+ }, 200)
+ alert("An error prevents saving the document. You may continue editing it but your changes won't be automatically saved on the server");
+ }
+ });
+ }, 200)
+ }, 200)
+ }
+ </script>
+
+ <link rel="stylesheet" href="/static/css/editor.css">
+ <p style="text-align: center;"><button id="publish-btn" onclick="publish();" class="btn btn-primary">Publish changes</button></p>
+</div>
+
+<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/footer.php"; ?> \ No newline at end of file
diff --git a/admin/panes/files.php b/admin/panes/files.php
new file mode 100644
index 0000000..5f836de
--- /dev/null
+++ b/admin/panes/files.php
@@ -0,0 +1,4 @@
+<?php
+
+require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.api.php";
+require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/tinyfilemanager.php"; \ No newline at end of file
diff --git a/admin/panes/hardware.lshw.php b/admin/panes/hardware.lshw.php
new file mode 100644
index 0000000..f50c1ce
--- /dev/null
+++ b/admin/panes/hardware.lshw.php
@@ -0,0 +1,4 @@
+<?php
+
+exec("sudo lshw -html -quiet", $ret);
+echo(implode("\n", $ret)); \ No newline at end of file
diff --git a/admin/panes/hardware.php b/admin/panes/hardware.php
new file mode 100644
index 0000000..05c839f
--- /dev/null
+++ b/admin/panes/hardware.php
@@ -0,0 +1,76 @@
+<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.php";/** @var array $_DATA */ ?>
+
+<style>
+ ::-webkit-scrollbar {
+ width: 5px;
+ }
+
+ ::-webkit-scrollbar-track {
+ border-radius: 9999px;
+ background: transparent;
+ }
+
+ ::-webkit-scrollbar-thumb {
+ border-radius: 9999px;
+ background-color: rgba(136, 136, 136, 0.5);
+ transition: background 200ms;
+ }
+
+ ::-webkit-scrollbar-thumb:hover {
+ background-color: rgba(85, 85, 85, 0.75);
+ }
+
+ ::-webkit-scrollbar-thumb:active {
+ background-color: #222;
+ }
+
+ .list-group-item {
+ background: #34373c;
+ }
+</style><?php
+
+function command($command) {
+ $data = [];
+ exec($command, $data);
+ return implode("\n", $data);
+}
+
+?>
+
+<div class="container" style="color:white;padding-top:15vh;padding-bottom:15vh;">
+ <h2 style="text-align:center;">Hardware Information</h2>
+ <ul class="list-group">
+ <li class="list-group-item">
+ <details>
+ <summary>General system information</summary>
+ <iframe src="/admin/panes/hardware.lshw.php" style="border:none;width:100%;height:100vh;"></iframe>
+ </details>
+ </li>
+ <li class="list-group-item">
+ <details>
+ <summary>Attached PCI devices</summary>
+ <pre style="background:#111;color:white;border-radius:5px;padding: 10px;"><?= command("lspci") ?></pre>
+ </details>
+ </li>
+ <li class="list-group-item">
+ <details>
+ <summary>Attached USB devices</summary>
+ <pre style="background:#111;color:white;border-radius:5px;padding: 10px;"><?= command("lsusb -t") ?></pre>
+ </details>
+ </li>
+ <li class="list-group-item">
+ <details>
+ <summary>Attached processors</summary>
+ <pre style="background:#111;color:white;border-radius:5px;padding: 10px;"><?= command("lscpu") ?></pre>
+ </details>
+ </li>
+ <li class="list-group-item">
+ <details>
+ <summary>Loaded kernel modules</summary>
+ <pre style="background:#111;color:white;border-radius:5px;padding: 10px;"><?= command("lsmod") ?></pre>
+ </details>
+ </li>
+ </ul>
+</div>
+
+<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/footer.php"; ?> \ No newline at end of file
diff --git a/admin/panes/home.php b/admin/panes/home.php
index ac106e4..fade996 100644
--- a/admin/panes/home.php
+++ b/admin/panes/home.php
@@ -1,136 +1,133 @@
-<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.php";/** @var array $_DATA */ ?>
-
-<style>
- ::-webkit-scrollbar {
- width: 5px;
- }
-
- ::-webkit-scrollbar-track {
- border-radius: 9999px;
- background: transparent;
- }
-
- ::-webkit-scrollbar-thumb {
- border-radius: 9999px;
- background-color: rgba(136, 136, 136, 0.5);
- transition: background 200ms;
- }
-
- ::-webkit-scrollbar-thumb:hover {
- background-color: rgba(85, 85, 85, 0.75);
- }
-
- ::-webkit-scrollbar-thumb:active {
- background-color: #222;
- }
-
- .list-group-item {
- background: #34373c;
- }
-</style>
-
-<div class="container" style="color:white;padding-top:15vh;padding-bottom:15vh;">
- <h2 style="text-align:center;">Welcome back <?= $_DATA["name"] ?>!</h2>
- <ul class="list-group" style="margin-top:30px;">
- <li class="list-group-item">
- <span id="temperature">Server running at <b><?php
-
- exec("sensors -j", $out);
- $outp = implode("\n", $out);
- $outd = json_decode($outp, true);
-
- echo(round($outd["cpu_thermal-virtual-0"]["temp1"]["temp1_input"], 1));
-
- ?>°C</b>, <?php
-
- if ($outd["cpu_thermal-virtual-0"]["temp1"]["temp1_input"] > 90) {
- echo("completely overheating!");
- } else if ($outd["cpu_thermal-virtual-0"]["temp1"]["temp1_input"] > 60) {
- echo("starting to throttle!");
- } else {
- echo("under normal temperatures");
- }
-
- ?></span> <a href="#" onclick="window.parent.activity('activity-version', '/admin/panes/version.php', window.parent.document.getElementById('activity-version'));" style="float:right;">Manage...</a></li><li class="list-group-item"><b><?php
-
- $uca = scandir("/mnt/blogchain/_posts");
- $uct = [];
-
- foreach ($uca as $art) {
- if (is_file("/mnt/blogchain/_posts/" . $art) && substr($art, 0, 1) !== "." && substr($art, 0, 1) !== "_") {
- $uct[] = $art;
- }
- }
-
- echo(count($uct));
-
- ?></b> UnchainedTech article·s, <?php
-
- $uca = scandir("/mnt/blogchain/_posts/_drafts");
- $uct2 = [];
-
- foreach ($uca as $art) {
- if (is_file("/mnt/blogchain/_posts/_drafts/" . $art) && substr($art, 0, 1) !== "." && substr($art, 0, 1) !== "_") {
- $uct2[] = $art;
- }
- }
-
- echo(count($uct2));
-
- ?> draft·s <a onclick="window.parent.activity('activity-unchained', '/admin/panes/unchained.php', window.parent.document.getElementById('activity-unchained'));" href="#" style="float:right;">Manage...</a></li>
- <li class="list-group-item"><b><?php
-
- $uca = scandir("/mnt/minteckrolt-cloud");
- $uct3 = [];
-
- foreach ($uca as $art) {
- if (is_dir("/mnt/minteckrolt-cloud/" . $art) && substr($art, 0, 1) === "~") {
- $uct3[] = $art;
- }
- }
-
- echo(count($uct3));
-
- ?></b> Neutron Cloud website·s <a onclick="window.parent.activity('activity-quotas', '/admin/panes/quotas.php', window.parent.document.getElementById('activity-quotas'));" href="#" style="float:right;">Manage...</a></li>
- <li class="list-group-item"><b><?php
-
- $uca = scandir("/mnt/kartik/online/private/stats");
- $uct4 = [];
-
- foreach ($uca as $art) {
- if (is_file("/mnt/kartik/online/private/stats/" . $art)) {
- $uct4[] = $art;
- }
- }
-
- echo(count($uct4));
-
- ?></b> Kartik Online player·s <a onclick="window.parent.activity('activity-kartik', '/admin/panes/kartik.php', window.parent.document.getElementById('activity-kartik'));" href="#" style="float:right;">Manage...</a></li>
- <li class="list-group-item"><b><?php
-
- $uca = scandir("/mnt/minteckrolt-main/includes/blog/data");
- $uct5 = [];
-
- foreach ($uca as $art) {
- if (is_dir("/mnt/minteckrolt-main/includes/blog/data/" . $art)) {
- $uct4[] = $art;
- }
- }
-
- echo(count($uct4));
-
- ?></b> blog article·s <a onclick="window.parent.activity('activity-blog', '/admin/panes/blog.php', window.parent.document.getElementById('activity-blog'));" href="#" style="float:right;">Manage...</a></li>
- </ul>
- <!--suppress JSUnresolvedVariable, JSUnresolvedFunction -->
- <script>
- setInterval(() => {
- $.ajax("/admin/api/serverTemp.php", {
- success: (data) => {
- document.getElementById("temperature").innerHTML = data;
- }
- });
- }, 500)
- </script>
-</div>
-
+<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.php";/** @var array $_DATA */ ?>
+
+<style>
+ ::-webkit-scrollbar {
+ width: 5px;
+ }
+
+ ::-webkit-scrollbar-track {
+ border-radius: 9999px;
+ background: transparent;
+ }
+
+ ::-webkit-scrollbar-thumb {
+ border-radius: 9999px;
+ background-color: rgba(136, 136, 136, 0.5);
+ transition: background 200ms;
+ }
+
+ ::-webkit-scrollbar-thumb:hover {
+ background-color: rgba(85, 85, 85, 0.75);
+ }
+
+ ::-webkit-scrollbar-thumb:active {
+ background-color: #222;
+ }
+
+ .list-group-item {
+ background: #34373c;
+ }
+</style>
+
+<div class="container" style="color:white;padding-top:15vh;padding-bottom:15vh;">
+ <h2 style="text-align:center;">Welcome back <?= $_DATA["name"] ?>!</h2>
+ <ul class="list-group" style="margin-top:30px;">
+ <li class="list-group-item">
+ <span id="temperature">Server running at <b><?php
+
+ exec("sensors -j", $out);
+ $outp = implode("\n", $out);
+ $outd = json_decode($outp, true);
+
+ echo(round($outd["cpu_thermal-virtual-0"]["temp1"]["temp1_input"], 1));
+
+ ?>°C</b>, <?php
+
+ if ($outd["cpu_thermal-virtual-0"]["temp1"]["temp1_input"] > 90) {
+ echo("completely overheating!");
+ } else if ($outd["cpu_thermal-virtual-0"]["temp1"]["temp1_input"] > 60) {
+ echo("starting to throttle!");
+ } else {
+ echo("under normal temperatures");
+ }
+
+ ?></span> <a href="#" onclick="window.parent.activity('activity-version', '/admin/panes/version.php', window.parent.document.getElementById('activity-version'));" style="float:right;">Manage...</a></li><li class="list-group-item"><b><?php
+
+ $uca = scandir("/mnt/blogchain/_posts");
+ $uct = [];
+
+ foreach ($uca as $art) {
+ if (is_file("/mnt/blogchain/_posts/" . $art) && substr($art, 0, 1) !== "." && substr($art, 0, 1) !== "_") {
+ $uct[] = $art;
+ }
+ }
+
+ echo(count($uct));
+
+ ?></b> UnchainedTech article·s, <?php
+
+ $uca = scandir("/mnt/blogchain/_posts/_drafts");
+ $uct2 = [];
+
+ foreach ($uca as $art) {
+ if (is_file("/mnt/blogchain/_posts/_drafts/" . $art) && substr($art, 0, 1) !== "." && substr($art, 0, 1) !== "_") {
+ $uct2[] = $art;
+ }
+ }
+
+ echo(count($uct2));
+
+ ?> draft·s <a onclick="window.parent.activity('activity-unchained', '/admin/panes/unchained.php', window.parent.document.getElementById('activity-unchained'));" href="#" style="float:right;">Manage...</a></li>
+ <li class="list-group-item"><b><?php
+
+ $uca = scandir("/mnt/minteckrolt-cloud");
+ $uct3 = [];
+
+ foreach ($uca as $art) {
+ if (is_dir("/mnt/minteckrolt-cloud/" . $art) && substr($art, 0, 1) === "~") {
+ $uct3[] = $art;
+ }
+ }
+
+ echo(count($uct3));
+
+ ?></b> Neutron Cloud website·s <a onclick="window.parent.activity('activity-quotas', '/admin/panes/quotas.php', window.parent.document.getElementById('activity-quotas'));" href="#" style="float:right;">Manage...</a></li>
+ <li class="list-group-item"><b><?php
+
+ $uca = scandir("/mnt/kartik/online/private/stats");
+ $uct4 = [];
+
+ foreach ($uca as $art) {
+ if (is_file("/mnt/kartik/online/private/stats/" . $art)) {
+ $uct4[] = $art;
+ }
+ }
+
+ echo(count($uct4));
+
+ ?></b> Kartik Online player·s <a onclick="window.parent.activity('activity-kartik', '/admin/panes/kartik.php', window.parent.document.getElementById('activity-kartik'));" href="#" style="float:right;">Manage...</a></li>
+ <li class="list-group-item">Using <b><?php
+
+ exec("df -h -x tmpfs -x squashfs -x devtmpfs --total -P", $outdisk);
+ $outn = explode(" ", preg_replace('/\s+/', ' ', $outdisk[count($outdisk) - 1]));
+ echo($outn[2] . "/" . $outn[1]);
+
+ ?></b> on all disks, <b><?php
+
+ echo($outn[3]);
+
+ ?></b> free <a onclick="window.parent.activity('activity-disk', '/admin/panes/disk.php', window.parent.document.getElementById('activity-disk'));" href="#" style="float:right;">Manage...</a></li>
+ </ul>
+ <!--suppress JSUnresolvedVariable, JSUnresolvedFunction -->
+ <script>
+ setInterval(() => {
+ $.ajax("/admin/api/serverTemp.php", {
+ success: (data) => {
+ document.getElementById("temperature").innerHTML = data;
+ }
+ });
+ }, 500)
+ </script>
+</div>
+
<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/footer.php"; ?> \ No newline at end of file
diff --git a/admin/panes/kartik.php b/admin/panes/kartik.php
index 87a975f..10b47f5 100644
--- a/admin/panes/kartik.php
+++ b/admin/panes/kartik.php
@@ -1,111 +1,111 @@
-<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.php";/** @var array $_DATA */ ?>
-
-<style>
- ::-webkit-scrollbar {
- width: 5px;
- }
-
- ::-webkit-scrollbar-track {
- border-radius: 9999px;
- background: transparent;
- }
-
- ::-webkit-scrollbar-thumb {
- border-radius: 9999px;
- background-color: rgba(136, 136, 136, 0.5);
- transition: background 200ms;
- }
-
- ::-webkit-scrollbar-thumb:hover {
- background-color: rgba(85, 85, 85, 0.75);
- }
-
- ::-webkit-scrollbar-thumb:active {
- background-color: #222;
- }
-
- .list-group-item {
- background: #34373c;
- }
-</style>
-
-<div class="container" style="color:white;padding-top:15vh;padding-bottom:15vh;">
- <div>
- <h2 style="text-align:center;">Kartik Online</h2>
- <h4 style="text-align:center;"><?php
-
- $uca = scandir("/mnt/kartik/online/private/stats");
- $uct4 = [];
-
- foreach ($uca as $art) {
- if (is_file("/mnt/kartik/online/private/stats/" . $art)) {
- $uct4[] = $art;
- }
- }
-
- echo(count($uct4));
-
- ?> player·s</h4>
-
- <ul class="list-group">
- <?php
-
- $uca = scandir("/mnt/kartik/online/private/stats");
- $uct4 = [];
-
- foreach ($uca as $art) {
- if (is_file("/mnt/kartik/online/private/stats/" . $art)): ?>
-
- <li class="list-group-item"><?= $art ?> <?php
-
- $osession = 0;
- $gsession = 0;
- $tsession = 0;
-
- $webs = scandir("/mnt/kartik/online/private/tokens");
- $ings = scandir("/mnt/kartik/online/private/gametokens");
-
- foreach ($webs as $webt) {
- if (!is_dir("/mnt/kartik/online/private/tokens/" . $webt)) {
- $d = json_decode(file_get_contents("/mnt/kartik/online/private/tokens/" . $webt), true);
- if ($d["id"] === $art) {
- $osession++;
- }
- }
- }
-
- foreach ($ings as $webt) {
- if (!is_dir("/mnt/kartik/online/private/gametokens/" . $webt)) {
- $d = json_decode(file_get_contents("/mnt/kartik/online/private/gametokens/" . $webt), true);
- if ($d["id"] === $art) {
- $gsession++;
- }
- }
- }
-
- $tsession = $osession + $gsession;
- if ($tsession > 1) {
- $tsessions = "s";
- } else {
- $tsessions = "";
- }
-
- if ($osession > 0) {
- echo("<span class='badge text-warning border-warning' style='border:1px solid;vertical-align: middle;'>{$tsession} session{$tsessions} ({$gsession}:{$osession})</span>");
- } else if ($gsession > 0) {
- echo("<span class='badge text-success border-success' style='border:1px solid;vertical-align: middle;'>{$tsession} session{$tsessions} ({$gsession}:0)</span>");
- } else {
- echo("<span class='badge text-light border-light' style='border:1px solid;vertical-align: middle;'>Offline (0:0)</span>");
- }
-
- ?> <span style="float:right;"><a href="/admin/api/terminateWebSessions.php?_=<?= $art ?>">Terminate Web</a> · <a href="/admin/api/terminateGameSessions.php?_=<?= $art ?>">Terminate Game</a> · <a href="/admin/api/terminateAllSessions.php?_=<?= $art ?>">Terminate All</a></span></li>
-
- <?php endif;
- }
-
- ?>
- </ul>
- </div>
-</div>
-
+<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.php";/** @var array $_DATA */ ?>
+
+<style>
+ ::-webkit-scrollbar {
+ width: 5px;
+ }
+
+ ::-webkit-scrollbar-track {
+ border-radius: 9999px;
+ background: transparent;
+ }
+
+ ::-webkit-scrollbar-thumb {
+ border-radius: 9999px;
+ background-color: rgba(136, 136, 136, 0.5);
+ transition: background 200ms;
+ }
+
+ ::-webkit-scrollbar-thumb:hover {
+ background-color: rgba(85, 85, 85, 0.75);
+ }
+
+ ::-webkit-scrollbar-thumb:active {
+ background-color: #222;
+ }
+
+ .list-group-item {
+ background: #34373c;
+ }
+</style>
+
+<div class="container" style="color:white;padding-top:15vh;padding-bottom:15vh;">
+ <div>
+ <h2 style="text-align:center;">Kartik Online</h2>
+ <h4 style="text-align:center;"><?php
+
+ $uca = scandir("/mnt/kartik/online/private/stats");
+ $uct4 = [];
+
+ foreach ($uca as $art) {
+ if (is_file("/mnt/kartik/online/private/stats/" . $art)) {
+ $uct4[] = $art;
+ }
+ }
+
+ echo(count($uct4));
+
+ ?> player·s</h4>
+
+ <ul class="list-group">
+ <?php
+
+ $uca = scandir("/mnt/kartik/online/private/stats");
+ $uct4 = [];
+
+ foreach ($uca as $art) {
+ if (is_file("/mnt/kartik/online/private/stats/" . $art)): ?>
+
+ <li class="list-group-item"><?= $art ?> <?php
+
+ $osession = 0;
+ $gsession = 0;
+ $tsession = 0;
+
+ $webs = scandir("/mnt/kartik/online/private/tokens");
+ $ings = scandir("/mnt/kartik/online/private/gametokens");
+
+ foreach ($webs as $webt) {
+ if (!is_dir("/mnt/kartik/online/private/tokens/" . $webt)) {
+ $d = json_decode(file_get_contents("/mnt/kartik/online/private/tokens/" . $webt), true);
+ if ($d["id"] === $art) {
+ $osession++;
+ }
+ }
+ }
+
+ foreach ($ings as $webt) {
+ if (!is_dir("/mnt/kartik/online/private/gametokens/" . $webt)) {
+ $d = json_decode(file_get_contents("/mnt/kartik/online/private/gametokens/" . $webt), true);
+ if ($d["id"] === $art) {
+ $gsession++;
+ }
+ }
+ }
+
+ $tsession = $osession + $gsession;
+ if ($tsession > 1) {
+ $tsessions = "s";
+ } else {
+ $tsessions = "";
+ }
+
+ if ($osession > 0) {
+ echo("<span class='badge text-warning border-warning' style='border:1px solid;vertical-align: middle;'>{$tsession} session{$tsessions} ({$gsession}:{$osession})</span>");
+ } else if ($gsession > 0) {
+ echo("<span class='badge text-success border-success' style='border:1px solid;vertical-align: middle;'>{$tsession} session{$tsessions} ({$gsession}:0)</span>");
+ } else {
+ echo("<span class='badge text-light border-light' style='border:1px solid;vertical-align: middle;'>Offline (0:0)</span>");
+ }
+
+ ?> <span style="float:right;"><a href="/admin/api/terminateWebSessions.php?_=<?= $art ?>">Terminate Web</a> · <a href="/admin/api/terminateGameSessions.php?_=<?= $art ?>">Terminate Game</a> · <a href="/admin/api/terminateAllSessions.php?_=<?= $art ?>">Terminate All</a></span></li>
+
+ <?php endif;
+ }
+
+ ?>
+ </ul>
+ </div>
+</div>
+
<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/footer.php"; ?> \ No newline at end of file
diff --git a/admin/panes/neutroning.php b/admin/panes/neutroning.php
new file mode 100644
index 0000000..d8a73c5
--- /dev/null
+++ b/admin/panes/neutroning.php
@@ -0,0 +1,65 @@
+<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.php";/** @var array $_DATA */ ?>
+
+<style>
+ ::-webkit-scrollbar {
+ width: 5px;
+ }
+
+ ::-webkit-scrollbar-track {
+ border-radius: 9999px;
+ background: transparent;
+ }
+
+ ::-webkit-scrollbar-thumb {
+ border-radius: 9999px;
+ background-color: rgba(136, 136, 136, 0.5);
+ transition: background 200ms;
+ }
+
+ ::-webkit-scrollbar-thumb:hover {
+ background-color: rgba(85, 85, 85, 0.75);
+ }
+
+ ::-webkit-scrollbar-thumb:active {
+ background-color: #222;
+ }
+
+ .list-group-item {
+ background: #34373c;
+ }
+</style>
+
+<div class="container" style="color:white;padding-top:15vh;padding-bottom:15vh;">
+ <h2 style="text-align:center;">Neutron Cloud Map</h2>
+
+ <h4 style="text-align:center;">Full map of all the websites that exists in Neutron Cloud</h4>
+
+ <details open>
+ <summary>cloud.minteck.ro.lt</summary>
+ <?php $index=1;foreach (scandir("/mnt/minteckrolt-cloud") as $site): if (substr($site, 0, 1) === "~"): ?>
+ <details open style="margin-left:23px;">
+ <summary><a target="_blank" href="https://cloud.minteck.ro.lt/<?= $site ?>/?source=minteck-admin"><?= $site ?></a></summary>
+ <details open style="margin-left:23px;">
+ <summary>cms-special</summary>
+ <ul style="margin:0;">
+ <li><a target="_blank" href="https://cloud.minteck.ro.lt/<?= $site ?>/cms-special/admin">admin</a></li>
+ <li><a target="_blank" href="https://cloud.minteck.ro.lt/<?= $site ?>/cms-special/calendar">calendar</a></li>
+ <li><a target="_blank" href="https://cloud.minteck.ro.lt/<?= $site ?>/cms-special/gallery">gallery</a></li>
+ <li><a target="_blank" href="https://cloud.minteck.ro.lt/<?= $site ?>/cms-special/version">version</a></li>
+ </ul>
+ </details>
+ <ul style="margin:0;">
+ <?php foreach (scandir("/mnt/minteckrolt-cloud/" . $site . "/data/webcontent/pages") as $page): if (trim($page) !== "." && trim($page) !== ".."): ?>
+ <?php if ($page === "index"): ?>
+ <li><a target="_blank" href="https://cloud.minteck.ro.lt/<?= $site ?>"><?= $page ?>.php</a></li>
+ <?php else: ?>
+ <li><a target="_blank" href="https://cloud.minteck.ro.lt/<?= $site ?>/<?= $page ?>"><?= $page ?></a></li>
+ <?php endif; ?>
+ <?php endif;endforeach; ?>
+ </ul>
+ </details>
+ <?php $index++;endif;endforeach; ?>
+ </details>
+</div>
+
+<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/footer.php"; ?> \ No newline at end of file
diff --git a/admin/panes/quotas.php b/admin/panes/quotas.php
new file mode 100644
index 0000000..91b6899
--- /dev/null
+++ b/admin/panes/quotas.php
@@ -0,0 +1,56 @@
+<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.php";/** @var array $_DATA */ ?>
+
+<style>
+ ::-webkit-scrollbar {
+ width: 5px;
+ }
+
+ ::-webkit-scrollbar-track {
+ border-radius: 9999px;
+ background: transparent;
+ }
+
+ ::-webkit-scrollbar-thumb {
+ border-radius: 9999px;
+ background-color: rgba(136, 136, 136, 0.5);
+ transition: background 200ms;
+ }
+
+ ::-webkit-scrollbar-thumb:hover {
+ background-color: rgba(85, 85, 85, 0.75);
+ }
+
+ ::-webkit-scrollbar-thumb:active {
+ background-color: #222;
+ }
+
+ .list-group-item {
+ background: #34373c;
+ }
+</style>
+
+<div class="container" style="color:white;padding-top:15vh;padding-bottom:15vh;">
+ <h2 style="text-align:center;">Neutron Cloud Quotas</h2>
+
+ <h4 style="text-align:center;">Websites that reached their limit can be locked down</h4>
+
+ <ul class="list-group" style="margin-top:20px;">
+ <?php $index=1;foreach (scandir("/mnt/minteckrolt-cloud") as $site): if (substr($site, 0, 1) === "~"): ?>
+ <li class="list-group-item"><i><?= strip_tags(file_get_contents("/mnt/minteckrolt-cloud/" . $site . "/data/webcontent/sitename")) ?></i> (<a href="https://cloud.minteck.ro.lt/<?= $site ?>" target="_blank"><code><?= $site ?></code></a>, X<?= file_get_contents("/mnt/minteckrolt-cloud/" . $site . "/Tier") ?> Tier)<br><span class="text-muted" id="quota-<?= $index ?>">Calculating...</span><span style="float:right;"><a href="/admin/NeutronManage/?_=<?= $site ?>" target="_blank">Admin Panel</a></span><!--suppress JSUnresolvedVariable, JSUnresolvedFunction, JSUnfilteredForInLoop -->
+ <script>
+ setTimeout(() => {
+ $.ajax("/admin/api/getQuota.php?_=<?= $site ?>", {
+ async: false,
+ success: (data) => {
+ document.getElementById("quota-<?= $index ?>").innerHTML = data;
+ },
+ error: () => {
+ document.getElementById("quota-<?= $index ?>").innerText = "Unable to calculate data usage";
+ }
+ });
+ }, 1000 * <?= $index ?>)
+ </script></li>
+ <?php $index++;endif;endforeach; ?>
+</div>
+
+<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/footer.php"; ?> \ No newline at end of file
diff --git a/admin/panes/telemetry.php b/admin/panes/telemetry.php
new file mode 100644
index 0000000..e87be24
--- /dev/null
+++ b/admin/panes/telemetry.php
@@ -0,0 +1,946 @@
+<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.php";/** @var array $_DATA */
+
+function urlize($scheme) {
+ $p = explode(":", $scheme);
+
+ if ($p[0] === "space") {
+ return "https://minteck.ro.lt" . $p[1];
+ }
+
+ if ($p[0] === "unchained") {
+ return "https://unchainedtech.minteck.ro.lt" . $p[1];
+ }
+
+ if ($p[0] === "kartik") {
+ return "https://kartik.hopto.org" . $p[1];
+ }
+
+ return "about:blank";
+}
+
+?>
+
+<style>
+ ::-webkit-scrollbar {
+ width: 5px;
+ }
+
+ ::-webkit-scrollbar-track {
+ border-radius: 9999px;
+ background: transparent;
+ }
+
+ ::-webkit-scrollbar-thumb {
+ border-radius: 9999px;
+ background-color: rgba(136, 136, 136, 0.5);
+ transition: background 200ms;
+ }
+
+ ::-webkit-scrollbar-thumb:hover {
+ background-color: rgba(85, 85, 85, 0.75);
+ }
+
+ ::-webkit-scrollbar-thumb:active {
+ background-color: #222;
+ }
+
+ .list-group-item {
+ background: #34373c;
+ }
+</style>
+
+<div class="container" style="color:white;padding-top:15vh;padding-bottom:15vh;">
+ <h2 style="text-align:center;">Telemetry Information</h2>
+
+ <?php $db = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/telemetry.json")); ?>
+
+ <ul class="list-group" style="margin-top:20px;">
+ <li class="list-group-item">Lifetime Visitors <span style="float:right;"><?php
+
+ $uniques = [];
+
+ foreach ($db as $months) {
+ foreach ($months as $days) {
+ foreach ($days as $pages) {
+ foreach ($pages as $page => $visitors) {
+ foreach ($visitors as $visitor) {
+ if (!in_array($visitor, $uniques)) {
+ array_push($uniques, $visitor);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ echo (count($uniques));
+
+ ?></span></li>
+ <li class="list-group-item">Most Viewed Page <span style="float:right;"><?php
+
+ $record = 0;
+ $recname = "-";
+
+ foreach ($db as $months) {
+ foreach ($months as $days) {
+ foreach ($days as $pages) {
+ foreach ($pages as $page => $visitors) {
+ $thispage = 0;
+
+ foreach ($visitors as $visitor) {
+ $thispage++;
+ }
+
+ if ($thispage > $record) {
+ $recname = "<a href='" . urlize($page) . "' target='_blank'><code>" . $page . "</code></a>";
+ $record = $thispage;
+ }
+ }
+ }
+ }
+ }
+
+ echo ($recname);
+
+ ?></span></li>
+ <li class="list-group-item">Least Viewed Page <span style="float:right;"><?php
+
+ $record = 2;
+ $recname = "-";
+
+ foreach ($db as $months) {
+ foreach ($months as $days) {
+ foreach ($days as $pages) {
+ foreach ($pages as $page => $visitors) {
+ $thispage = 0;
+
+ foreach ($visitors as $visitor) {
+ $thispage++;
+ }
+
+ if ($thispage < $record) {
+ $recname = "<a href='" . urlize($page) . "' target='_blank'><code>" . $page . "</code></a>";
+ $record = $thispage;
+ }
+ }
+ }
+ }
+ }
+
+ echo ($recname);
+
+ ?></span></li>
+ </ul>
+
+ <ul class="list-group" style="margin-top:20px;">
+ <li class="list-group-item text-muted">Tomorrow <span style="float:right;"><?php
+
+ $uniques = [];
+ $totalDays = 0;
+
+ foreach ($db as $months) {
+ foreach ($months as $days) {
+ foreach ($days as $pages) {
+ $totalDays++;
+ $dayUniques = [];
+
+ foreach ($pages as $page => $visitors) {
+ foreach ($visitors as $visitor) {
+ if (!in_array($visitor, $dayUniques)) {
+ array_push($dayUniques, $visitor);
+ }
+ }
+ }
+
+ $uniques = array_merge($uniques, $dayUniques);
+ }
+ }
+ }
+
+ $expect = round(count($uniques) / $totalDays);
+ echo ($expect);
+
+ $uniques = [];
+
+ foreach ($db as $year => $months) {
+ if ($year === date('y')) {
+ foreach ($months as $month => $days) {
+ if ($month === date('m')) {
+ foreach ($days as $day => $pages) {
+ if ($day === date('d')) {
+ foreach ($pages as $page => $visitors) {
+ foreach ($visitors as $visitor) {
+ if (!in_array($visitor, $uniques)) {
+ array_push($uniques, $visitor);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if (substr((string)($expect - count($uniques)), 0, 1) !== "-") {
+ if ((int)($expect - count($uniques)) === 0) {
+ echo("<span style='color:orange;opacity:.5;'> (±" . ($expect - count($uniques)) . ")</span>");
+ } else {
+ echo("<span style='color:limegreen;opacity:.5;'> (+" . ($expect - count($uniques)) . ")</span>");
+ }
+ } else {
+ echo("<span style='color:red;opacity:.5;'> (" . ($expect - count($uniques)) . ")</span>");
+ }
+
+ ?></span></li>
+ <li class="list-group-item">Today <span style="float:right;"><?php
+
+ $uniques = [];
+
+ foreach ($db as $year => $months) {
+ if ($year === date('y')) {
+ foreach ($months as $month => $days) {
+ if ($month === date('m')) {
+ foreach ($days as $day => $pages) {
+ if ($day === date('d')) {
+ foreach ($pages as $page => $visitors) {
+ foreach ($visitors as $visitor) {
+ if (!in_array($visitor, $uniques)) {
+ array_push($uniques, $visitor);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ $today = count($uniques);
+ echo ($today);
+
+ $uniques = [];
+
+ foreach ($db as $year => $months) {
+ if ($year === date('y')) {
+ foreach ($months as $month => $days) {
+ if ($month === date('m')) {
+ foreach ($days as $day => $pages) {
+ if ($day === date('d', strtotime("-1 day"))) {
+ foreach ($pages as $page => $visitors) {
+ foreach ($visitors as $visitor) {
+ if (!in_array($visitor, $uniques)) {
+ array_push($uniques, $visitor);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if (substr((string)($today - count($uniques)), 0, 1) !== "-") {
+ if ((int)($today - count($uniques)) === 0) {
+ echo("<span style='color:orange;'> (±" . ($today - count($uniques)) . ")</span>");
+ } else {
+ echo("<span style='color:limegreen;'> (+" . ($today - count($uniques)) . ")</span>");
+ }
+ } else {
+ echo("<span style='color:red;'> (" . ($today - count($uniques)) . ")</span>");
+ }
+
+ ?></span></li>
+ <li class="list-group-item">Yesterday <span style="float:right;"><?php
+
+ $uniques = [];
+
+ foreach ($db as $year => $months) {
+ if ($year === date('y')) {
+ foreach ($months as $month => $days) {
+ if ($month === date('m')) {
+ foreach ($days as $day => $pages) {
+ if ($day === date('d', strtotime("-1 day"))) {
+ foreach ($pages as $page => $visitors) {
+ foreach ($visitors as $visitor) {
+ if (!in_array($visitor, $uniques)) {
+ array_push($uniques, $visitor);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ $yesterday = count($uniques);
+ echo ($yesterday);
+
+ $uniques = [];
+
+ foreach ($db as $year => $months) {
+ if ($year === date('y')) {
+ foreach ($months as $month => $days) {
+ if ($month === date('m')) {
+ foreach ($days as $day => $pages) {
+ if ($day === date('d', strtotime("-2 day"))) {
+ foreach ($pages as $page => $visitors) {
+ foreach ($visitors as $visitor) {
+ if (!in_array($visitor, $uniques)) {
+ array_push($uniques, $visitor);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if (substr((string)($yesterday - count($uniques)), 0, 1) !== "-") {
+ if ((int)($yesterday - count($uniques)) === 0) {
+ echo("<span style='color:orange;'> (±" . ($yesterday - count($uniques)) . ")</span>");
+ } else {
+ echo("<span style='color:limegreen;'> (+" . ($yesterday - count($uniques)) . ")</span>");
+ }
+ } else {
+ echo("<span style='color:red;'> (" . ($yesterday - count($uniques)) . ")</span>");
+ }
+
+ ?></span></li>
+ </ul>
+
+ <ul class="list-group" style="margin-top:20px;">
+ <li class="list-group-item text-muted"><?= date("F Y", strtotime("+1 month")) ?> <span style="float:right;"><?php
+
+ $uniques = [];
+ $totalDays = 0;
+
+ foreach ($db as $months) {
+ foreach ($months as $days) {
+ $totalDays++;
+ $dayUniques = [];
+
+ foreach ($days as $pages) {
+ foreach ($pages as $page => $visitors) {
+ foreach ($visitors as $visitor) {
+ if (!in_array($visitor, $dayUniques)) {
+ array_push($dayUniques, $visitor);
+ }
+ }
+ }
+ }
+
+ $uniques = array_merge($uniques, $dayUniques);
+ }
+ }
+
+ $expect = round(count($uniques) / $totalDays);
+ echo ($expect);
+
+ $uniques = [];
+
+ foreach ($db as $year => $months) {
+ if ($year === date('y')) {
+ foreach ($months as $month => $days) {
+ if ($month === date('m')) {
+ foreach ($days as $day => $pages) {
+ foreach ($pages as $page => $visitors) {
+ foreach ($visitors as $visitor) {
+ if (!in_array($visitor, $uniques)) {
+ array_push($uniques, $visitor);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if (substr((string)($expect - count($uniques)), 0, 1) !== "-") {
+ if ((int)($expect - count($uniques)) === 0) {
+ echo("<span style='color:orange;opacity:.5;'> (±" . ($expect - count($uniques)) . ")</span>");
+ } else {
+ echo("<span style='color:limegreen;opacity:.5;'> (+" . ($expect - count($uniques)) . ")</span>");
+ }
+ } else {
+ echo("<span style='color:red;opacity:.5;'> (" . ($expect - count($uniques)) . ")</span>");
+ }
+
+ ?></span></li>
+ <li class="list-group-item"><?= date("F Y") ?> <span style="float:right;"><?php
+
+ $uniques = [];
+
+ foreach ($db as $year => $months) {
+ if ($year === date('y')) {
+ foreach ($months as $month => $days) {
+ if ($month === date('m')) {
+ foreach ($days as $day => $pages) {
+ foreach ($pages as $page => $visitors) {
+ foreach ($visitors as $visitor) {
+ if (!in_array($visitor, $uniques)) {
+ array_push($uniques, $visitor);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ $today = count($uniques);
+ echo ($today);
+
+ $uniques = [];
+
+ foreach ($db as $year => $months) {
+ if ($year === date('y')) {
+ foreach ($months as $month => $days) {
+ if ($month === date('m', strtotime("-1 month"))) {
+ foreach ($days as $day => $pages) {
+ foreach ($pages as $page => $visitors) {
+ foreach ($visitors as $visitor) {
+ if (!in_array($visitor, $uniques)) {
+ array_push($uniques, $visitor);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if (substr((string)($today - count($uniques)), 0, 1) !== "-") {
+ if ((int)($today - count($uniques)) === 0) {
+ echo("<span style='color:orange;'> (±" . ($today - count($uniques)) . ")</span>");
+ } else {
+ echo("<span style='color:limegreen;'> (+" . ($today - count($uniques)) . ")</span>");
+ }
+ } else {
+ echo("<span style='color:red;'> (" . ($today - count($uniques)) . ")</span>");
+ }
+
+ ?></span></li>
+ <li class="list-group-item"><?= date("F Y", strtotime("-1 month")) ?> <span style="float:right;"><?php
+
+ $uniques = [];
+
+ foreach ($db as $year => $months) {
+ if ($year === date('y')) {
+ foreach ($months as $month => $days) {
+ if ($month === date('m', strtotime("-1 month"))) {
+ foreach ($days as $day => $pages) {
+ foreach ($pages as $page => $visitors) {
+ foreach ($visitors as $visitor) {
+ if (!in_array($visitor, $uniques)) {
+ array_push($uniques, $visitor);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ $today = count($uniques);
+ echo ($today);
+
+ $uniques = [];
+
+ foreach ($db as $year => $months) {
+ if ($year === date('y')) {
+ foreach ($months as $month => $days) {
+ if ($month === date('m', strtotime("-2 month"))) {
+ foreach ($days as $day => $pages) {
+ foreach ($pages as $page => $visitors) {
+ foreach ($visitors as $visitor) {
+ if (!in_array($visitor, $uniques)) {
+ array_push($uniques, $visitor);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if (substr((string)($today - count($uniques)), 0, 1) !== "-") {
+ if ((int)($today - count($uniques)) === 0) {
+ echo("<span style='color:orange;'> (±" . ($today - count($uniques)) . ")</span>");
+ } else {
+ echo("<span style='color:limegreen;'> (+" . ($today - count($uniques)) . ")</span>");
+ }
+ } else {
+ echo("<span style='color:red;'> (" . ($today - count($uniques)) . ")</span>");
+ }
+
+ ?></span></li>
+ <li class="list-group-item"><?= date("F Y", strtotime("-2 month")) ?> <span style="float:right;"><?php
+
+ $uniques = [];
+
+ foreach ($db as $year => $months) {
+ if ($year === date('y')) {
+ foreach ($months as $month => $days) {
+ if ($month === date('m', strtotime("-2 month"))) {
+ foreach ($days as $day => $pages) {
+ foreach ($pages as $page => $visitors) {
+ foreach ($visitors as $visitor) {
+ if (!in_array($visitor, $uniques)) {
+ array_push($uniques, $visitor);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ $today = count($uniques);
+ echo ($today);
+
+ $uniques = [];
+
+ foreach ($db as $year => $months) {
+ if ($year === date('y')) {
+ foreach ($months as $month => $days) {
+ if ($month === date('m', strtotime("-3 month"))) {
+ foreach ($days as $day => $pages) {
+ foreach ($pages as $page => $visitors) {
+ foreach ($visitors as $visitor) {
+ if (!in_array($visitor, $uniques)) {
+ array_push($uniques, $visitor);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if (substr((string)($today - count($uniques)), 0, 1) !== "-") {
+ if ((int)($today - count($uniques)) === 0) {
+ echo("<span style='color:orange;'> (±" . ($today - count($uniques)) . ")</span>");
+ } else {
+ echo("<span style='color:limegreen;'> (+" . ($today - count($uniques)) . ")</span>");
+ }
+ } else {
+ echo("<span style='color:red;'> (" . ($today - count($uniques)) . ")</span>");
+ }
+
+ ?></span></li><li class="list-group-item"><?= date("F Y", strtotime("-3 month")) ?> <span style="float:right;"><?php
+
+ $uniques = [];
+
+ foreach ($db as $year => $months) {
+ if ($year === date('y')) {
+ foreach ($months as $month => $days) {
+ if ($month === date('m', strtotime("-3 month"))) {
+ foreach ($days as $day => $pages) {
+ foreach ($pages as $page => $visitors) {
+ foreach ($visitors as $visitor) {
+ if (!in_array($visitor, $uniques)) {
+ array_push($uniques, $visitor);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ $today = count($uniques);
+ echo ($today);
+
+ $uniques = [];
+
+ foreach ($db as $year => $months) {
+ if ($year === date('y')) {
+ foreach ($months as $month => $days) {
+ if ($month === date('m', strtotime("-4 month"))) {
+ foreach ($days as $day => $pages) {
+ foreach ($pages as $page => $visitors) {
+ foreach ($visitors as $visitor) {
+ if (!in_array($visitor, $uniques)) {
+ array_push($uniques, $visitor);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if (substr((string)($today - count($uniques)), 0, 1) !== "-") {
+ if ((int)($today - count($uniques)) === 0) {
+ echo("<span style='color:orange;'> (±" . ($today - count($uniques)) . ")</span>");
+ } else {
+ echo("<span style='color:limegreen;'> (+" . ($today - count($uniques)) . ")</span>");
+ }
+ } else {
+ echo("<span style='color:red;'> (" . ($today - count($uniques)) . ")</span>");
+ }
+
+ ?></span></li><li class="list-group-item"><?= date("F Y", strtotime("-4 month")) ?> <span style="float:right;"><?php
+
+ $uniques = [];
+
+ foreach ($db as $year => $months) {
+ if ($year === date('y')) {
+ foreach ($months as $month => $days) {
+ if ($month === date('m', strtotime("-4 month"))) {
+ foreach ($days as $day => $pages) {
+ foreach ($pages as $page => $visitors) {
+ foreach ($visitors as $visitor) {
+ if (!in_array($visitor, $uniques)) {
+ array_push($uniques, $visitor);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ $today = count($uniques);
+ echo ($today);
+
+ $uniques = [];
+
+ foreach ($db as $year => $months) {
+ if ($year === date('y')) {
+ foreach ($months as $month => $days) {
+ if ($month === date('m', strtotime("-5 month"))) {
+ foreach ($days as $day => $pages) {
+ foreach ($pages as $page => $visitors) {
+ foreach ($visitors as $visitor) {
+ if (!in_array($visitor, $uniques)) {
+ array_push($uniques, $visitor);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if (substr((string)($today - count($uniques)), 0, 1) !== "-") {
+ if ((int)($today - count($uniques)) === 0) {
+ echo("<span style='color:orange;'> (±" . ($today - count($uniques)) . ")</span>");
+ } else {
+ echo("<span style='color:limegreen;'> (+" . ($today - count($uniques)) . ")</span>");
+ }
+ } else {
+ echo("<span style='color:red;'> (" . ($today - count($uniques)) . ")</span>");
+ }
+
+ ?></span></li><li class="list-group-item"><?= date("F Y", strtotime("-5 month")) ?> <span style="float:right;"><?php
+
+ $uniques = [];
+
+ foreach ($db as $year => $months) {
+ if ($year === date('y')) {
+ foreach ($months as $month => $days) {
+ if ($month === date('m', strtotime("-5 month"))) {
+ foreach ($days as $day => $pages) {
+ foreach ($pages as $page => $visitors) {
+ foreach ($visitors as $visitor) {
+ if (!in_array($visitor, $uniques)) {
+ array_push($uniques, $visitor);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ $today = count($uniques);
+ echo ($today);
+
+ $uniques = [];
+
+ foreach ($db as $year => $months) {
+ if ($year === date('y')) {
+ foreach ($months as $month => $days) {
+ if ($month === date('m', strtotime("-6 month"))) {
+ foreach ($days as $day => $pages) {
+ foreach ($pages as $page => $visitors) {
+ foreach ($visitors as $visitor) {
+ if (!in_array($visitor, $uniques)) {
+ array_push($uniques, $visitor);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if (substr((string)($today - count($uniques)), 0, 1) !== "-") {
+ if ((int)($today - count($uniques)) === 0) {
+ echo("<span style='color:orange;'> (±" . ($today - count($uniques)) . ")</span>");
+ } else {
+ echo("<span style='color:limegreen;'> (+" . ($today - count($uniques)) . ")</span>");
+ }
+ } else {
+ echo("<span style='color:red;'> (" . ($today - count($uniques)) . ")</span>");
+ }
+
+ ?></span></li>
+ </ul>
+
+ <ul class="list-group" style="margin-top:20px;">
+ <li class="list-group-item"><?= date("Y") ?> <span style="float:right;"><?php
+
+ $uniques = [];
+
+ foreach ($db as $year => $months) {
+ if ($year === date('y')) {
+ foreach ($months as $month => $days) {
+ foreach ($days as $day => $pages) {
+ foreach ($pages as $page => $visitors) {
+ foreach ($visitors as $visitor) {
+ if (!in_array($visitor, $uniques)) {
+ array_push($uniques, $visitor);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ $today = count($uniques);
+ echo ($today);
+
+ $uniques = [];
+
+ foreach ($db as $year => $months) {
+ if ($year === date('y', strtotime("-1 year"))) {
+ foreach ($months as $month => $days) {
+ foreach ($days as $day => $pages) {
+ foreach ($pages as $page => $visitors) {
+ foreach ($visitors as $visitor) {
+ if (!in_array($visitor, $uniques)) {
+ array_push($uniques, $visitor);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if (substr((string)($today - count($uniques)), 0, 1) !== "-") {
+ if ((int)($today - count($uniques)) === 0) {
+ echo("<span style='color:orange;'> (±" . ($today - count($uniques)) . ")</span>");
+ } else {
+ echo("<span style='color:limegreen;'> (+" . ($today - count($uniques)) . ")</span>");
+ }
+ } else {
+ echo("<span style='color:red;'> (" . ($today - count($uniques)) . ")</span>");
+ }
+
+ ?></span></li>
+ <li class="list-group-item"><?= date("Y", strtotime("-1 year")) ?> <span style="float:right;"><?php
+
+ $uniques = [];
+
+ foreach ($db as $year => $months) {
+ if ($year === date('y', strtotime("-1 year"))) {
+ foreach ($months as $month => $days) {
+ foreach ($days as $day => $pages) {
+ foreach ($pages as $page => $visitors) {
+ foreach ($visitors as $visitor) {
+ if (!in_array($visitor, $uniques)) {
+ array_push($uniques, $visitor);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ $today = count($uniques);
+ echo ($today);
+
+ $uniques = [];
+
+ foreach ($db as $year => $months) {
+ if ($year === date('y', strtotime("-2 year"))) {
+ foreach ($months as $month => $days) {
+ foreach ($days as $day => $pages) {
+ foreach ($pages as $page => $visitors) {
+ foreach ($visitors as $visitor) {
+ if (!in_array($visitor, $uniques)) {
+ array_push($uniques, $visitor);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if (substr((string)($today - count($uniques)), 0, 1) !== "-") {
+ if ((int)($today - count($uniques)) === 0) {
+ echo("<span style='color:orange;'> (±" . ($today - count($uniques)) . ")</span>");
+ } else {
+ echo("<span style='color:limegreen;'> (+" . ($today - count($uniques)) . ")</span>");
+ }
+ } else {
+ echo("<span style='color:red;'> (" . ($today - count($uniques)) . ")</span>");
+ }
+
+ ?></span></li>
+ <li class="list-group-item"><?= date("Y", strtotime("-2 year")) ?> <span style="float:right;"><?php
+
+ $uniques = [];
+
+ foreach ($db as $year => $months) {
+ if ($year === date('y', strtotime("-2 year"))) {
+ foreach ($months as $month => $days) {
+ foreach ($days as $day => $pages) {
+ foreach ($pages as $page => $visitors) {
+ foreach ($visitors as $visitor) {
+ if (!in_array($visitor, $uniques)) {
+ array_push($uniques, $visitor);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ $today = count($uniques);
+ echo ($today);
+
+ $uniques = [];
+
+ foreach ($db as $year => $months) {
+ if ($year === date('y', strtotime("-3 year"))) {
+ foreach ($months as $month => $days) {
+ foreach ($days as $day => $pages) {
+ foreach ($pages as $page => $visitors) {
+ foreach ($visitors as $visitor) {
+ if (!in_array($visitor, $uniques)) {
+ array_push($uniques, $visitor);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if (substr((string)($today - count($uniques)), 0, 1) !== "-") {
+ if ((int)($today - count($uniques)) === 0) {
+ echo("<span style='color:orange;'> (±" . ($today - count($uniques)) . ")</span>");
+ } else {
+ echo("<span style='color:limegreen;'> (+" . ($today - count($uniques)) . ")</span>");
+ }
+ } else {
+ echo("<span style='color:red;'> (" . ($today - count($uniques)) . ")</span>");
+ }
+
+ ?></span></li>
+ </ul>
+
+ <br>
+
+ <ul class="list-group">
+ <li class="list-group-item">
+ <details>
+ <summary>Kartik downloads</summary>
+ <ul class="list-group">
+ <li class="list-group-item"><b>All update channels <span style="float:right;"><?= (int)trim(file_get_contents("/mnt/kartik-cdn/stats/stable")) + (int)trim(file_get_contents("/mnt/kartik-cdn/stats/eap")) + (int)trim(file_get_contents("/mnt/kartik-cdn/stats/beta")) + (int)trim(file_get_contents("/mnt/kartik-cdn/stats/nightly")) ?> downloads</span></b></li>
+ <li class="list-group-item"><img alt="" src="https://github.com/Minteck-Projects/Kartik-Core/raw/trunk/logo/logo.png" width="24px"> Kartik Stable <span style="float:right;"><?= trim(file_get_contents("/mnt/kartik-cdn/stats/stable")) ?> downloads</span></li>
+ <li class="list-group-item"><img alt="" src="https://github.com/Minteck-Projects/Kartik-Core/raw/trunk/logo/logo-eap.png" width="24px"> Kartik EAP <span style="float:right;"><?= trim(file_get_contents("/mnt/kartik-cdn/stats/eap")) ?> downloads</span></li>
+ <li class="list-group-item"><img alt="" src="https://github.com/Minteck-Projects/Kartik-Core/raw/trunk/logo/logo-beta.png" width="24px"> Kartik Beta <span style="float:right;"><?= trim(file_get_contents("/mnt/kartik-cdn/stats/beta")) ?> downloads</span></li>
+ <li class="list-group-item"><img alt="" src="https://github.com/Minteck-Projects/Kartik-Core/raw/trunk/logo/logo-nightly.png" width="24px"> Kartik Nightly <span style="float:right;"><?= trim(file_get_contents("/mnt/kartik-cdn/stats/nightly")) ?> downloads</span></li>
+ </ul>
+ </details>
+ </li>
+ <li class="list-group-item">
+ <details>
+ <summary>Page-specific statistics</summary>
+ <p>
+ <?php
+
+ $assocs = [];
+ $spages = [];
+
+ foreach ($db as $year => $months) {
+ foreach ($months as $month => $days) {
+ foreach ($days as $day => $pages) {
+ foreach ($pages as $page => $visitors) {
+ if (substr($page, 0, 7) !== "/admin/") {
+ if (!isset($spages[$page])) {
+ $spages[$page] = 0;
+ }
+ foreach ($visitors as $visitor) {
+ if (!in_array($page . "|" . $visitor, $assocs)) {
+ $spages[$page]++;
+ array_push($assocs, $page . "|" . $visitor);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ $max = 0;
+ foreach ($spages as $visitors) {
+ if ($visitors > $max) {
+ $max = $visitors;
+ }
+ }
+
+ arsort($spages);
+
+ foreach ($spages as $page => $visitors): ?>
+ <div class="progress" style="height:25px;background:#222;margin-bottom:2px;">
+ <div class="progress-bar" style="background:#444;width:<?= ($visitors/$max)*100 ?>%;"></div>
+ <span class="progress-bar-text"><a class="text-white" href="<?= urlize($page) ?>" target="_blank"><?= $page ?></a> <span class="text-muted">(<?= $visitors ?>)</span></span>
+ </div>
+ <?php endforeach; ?>
+ </p>
+
+ <style>
+ .progress-bar-text {
+ position: absolute;
+ padding-top: 14px;
+ font-size: 14px;
+ text-align:left;
+ padding-left:10px;
+ }
+ </style>
+ </details>
+ </li>
+ </ul>
+</div>
+
+<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/footer.php"; ?> \ No newline at end of file
diff --git a/admin/panes/unchained.php b/admin/panes/unchained.php
index cab35b5..8f3133f 100644
--- a/admin/panes/unchained.php
+++ b/admin/panes/unchained.php
@@ -1,81 +1,81 @@
-<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.php";/** @var array $_DATA */ ?>
-
-<style>
- ::-webkit-scrollbar {
- width: 5px;
- }
-
- ::-webkit-scrollbar-track {
- border-radius: 9999px;
- background: transparent;
- }
-
- ::-webkit-scrollbar-thumb {
- border-radius: 9999px;
- background-color: rgba(136, 136, 136, 0.5);
- transition: background 200ms;
- }
-
- ::-webkit-scrollbar-thumb:hover {
- background-color: rgba(85, 85, 85, 0.75);
- }
-
- ::-webkit-scrollbar-thumb:active {
- background-color: #222;
- }
-
- .list-group-item {
- background: #34373c;
- }
-</style>
-
-<div class="container" style="color:white;padding-top:15vh;padding-bottom:15vh;display: flex;align-items:center;justify-content: center;height:100%;" id="main">
- <div>
- <p style="text-align: center;">
- <img src="/logo.svg" width="96px"><span class="text-muted"> ⏵⏵⏵ </span><!--suppress CheckImageSize -->
- <img src="/static/apps/unchainedtech.png" width="96px">
- </p>
- <br>
- <h2 style="text-align:center;">You already have access to UnchainedTech Admin</h2>
-
- <h4 style="text-align:center;">We automatically logged you into UnchainedTech Admin when you logged in to Minteck Admin</h4><br>
-
- <div style="text-align: center;width:max-content;margin-left:auto;margin-right:auto;">
- <p class="btn-group">
- <a href="https://unchainedtech.minteck.ro.lt/articles" target="_blank" class="btn btn-outline-light">All Articles</a>
- <a href="https://unchainedtech.minteck.ro.lt/admin" target="_blank" class="btn btn-outline-light">Admin Tasks</a>
- </p>
- </div>
-
- <small><p style="text-align: center;">
- v<?= trim(file_get_contents("/mnt/blogchain/version.txt")) ?> • <a href="#" onclick="document.getElementById('main').style.display='none';document.getElementById('secondary').style.display='';">Manage drafts</a>
- </p></small>
- </div>
-</div>
-
- <div class="container" style="color:white;padding-top:15vh;padding-bottom:15vh;display:none;" id="secondary">
- <div>
- <h2 style="text-align:center;">UnchainedTech</h2>
- <h4 style="text-align:center;">Drafts List</h4>
-
- <small><p style="text-align: center;">
- v<?= trim(file_get_contents("/mnt/blogchain/version.txt")) ?> • <a href="#" onclick="document.getElementById('main').style.display='flex';document.getElementById('secondary').style.display='none';">Hide drafts list</a>
- </p></small>
-
- <ul class="list-group">
- <?php
-
- $drafts = false;
- foreach (scandir("/mnt/blogchain/_posts/_drafts") as $draft) {
- if ($draft !== "." && $draft !== ".." && $draft !== ".gitkeep" && $draft !== "_template.md") {
- $drafts = true;
- echo('<li class="list-group-item">' . substr($draft, 0, -3) . '<span style="float:right;"><a href="https://unchainedtech.minteck.ro.lt/admin/article/' . substr($draft, 0, -3) . '" target="_blank">Preview</a> · <a href="https://github.com/Minteck/UnchainedTech-Content/edit/production/_drafts/' . $draft . '" target="_blank">Edit</a> · <a href="https://github.com/Minteck/UnchainedTech-Content/delete/production/_drafts/' . $draft . '" target="_blank">Delete</a></span></li>');
- }
- }
-
- ?>
- </ul>
- </div>
- </div>
-
+<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.php";/** @var array $_DATA */ ?>
+
+<style>
+ ::-webkit-scrollbar {
+ width: 5px;
+ }
+
+ ::-webkit-scrollbar-track {
+ border-radius: 9999px;
+ background: transparent;
+ }
+
+ ::-webkit-scrollbar-thumb {
+ border-radius: 9999px;
+ background-color: rgba(136, 136, 136, 0.5);
+ transition: background 200ms;
+ }
+
+ ::-webkit-scrollbar-thumb:hover {
+ background-color: rgba(85, 85, 85, 0.75);
+ }
+
+ ::-webkit-scrollbar-thumb:active {
+ background-color: #222;
+ }
+
+ .list-group-item {
+ background: #34373c;
+ }
+</style>
+
+<div class="container" style="color:white;padding-top:15vh;padding-bottom:15vh;display: flex;align-items:center;justify-content: center;height:100%;" id="main">
+ <div>
+ <p style="text-align: center;">
+ <img src="/logo.svg" width="96px"><span class="text-muted"> ⏵⏵⏵ </span><!--suppress CheckImageSize -->
+ <img src="/static/apps/unchainedtech.png" width="96px">
+ </p>
+ <br>
+ <h2 style="text-align:center;">You already have access to UnchainedTech Admin</h2>
+
+ <h4 style="text-align:center;">We automatically logged you into UnchainedTech Admin when you logged in to Minteck Admin</h4><br>
+
+ <div style="text-align: center;width:max-content;margin-left:auto;margin-right:auto;">
+ <p class="btn-group">
+ <a href="https://unchainedtech.minteck.ro.lt/articles" target="_blank" class="btn btn-outline-light">All Articles</a>
+ <a href="https://unchainedtech.minteck.ro.lt/admin" target="_blank" class="btn btn-outline-light">Admin Tasks</a>
+ </p>
+ </div>
+
+ <small><p style="text-align: center;">
+ v<?= trim(file_get_contents("/mnt/blogchain/version.txt")) ?> • <a href="#" onclick="document.getElementById('main').style.display='none';document.getElementById('secondary').style.display='';">Manage drafts</a>
+ </p></small>
+ </div>
+</div>
+
+ <div class="container" style="color:white;padding-top:15vh;padding-bottom:15vh;display:none;" id="secondary">
+ <div>
+ <h2 style="text-align:center;">UnchainedTech</h2>
+ <h4 style="text-align:center;">Drafts List</h4>
+
+ <small><p style="text-align: center;">
+ v<?= trim(file_get_contents("/mnt/blogchain/version.txt")) ?> • <a href="#" onclick="document.getElementById('main').style.display='flex';document.getElementById('secondary').style.display='none';">Hide drafts list</a>
+ </p></small>
+
+ <ul class="list-group">
+ <?php
+
+ $drafts = false;
+ foreach (scandir("/mnt/blogchain/_posts/_drafts") as $draft) {
+ if ($draft !== "." && $draft !== ".." && $draft !== ".gitkeep" && $draft !== "_template.md") {
+ $drafts = true;
+ echo('<li class="list-group-item">' . substr($draft, 0, -3) . '<span style="float:right;"><a href="https://unchainedtech.minteck.ro.lt/admin/article/' . substr($draft, 0, -3) . '" target="_blank">Preview</a> · <a href="https://github.com/Minteck/UnchainedTech-Content/edit/production/_drafts/' . $draft . '" target="_blank">Edit</a> · <a href="https://github.com/Minteck/UnchainedTech-Content/delete/production/_drafts/' . $draft . '" target="_blank">Delete</a></span></li>');
+ }
+ }
+
+ ?>
+ </ul>
+ </div>
+ </div>
+
<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/footer.php"; ?> \ No newline at end of file
diff --git a/admin/panes/uptime.php b/admin/panes/uptime.php
index 71a6545..bc2a43e 100644
--- a/admin/panes/uptime.php
+++ b/admin/panes/uptime.php
@@ -1,87 +1,87 @@
-<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.php";/** @var array $_DATA */ ?>
-
-<style>
- ::-webkit-scrollbar {
- width: 5px;
- }
-
- ::-webkit-scrollbar-track {
- border-radius: 9999px;
- background: transparent;
- }
-
- ::-webkit-scrollbar-thumb {
- border-radius: 9999px;
- background-color: rgba(136, 136, 136, 0.5);
- transition: background 200ms;
- }
-
- ::-webkit-scrollbar-thumb:hover {
- background-color: rgba(85, 85, 85, 0.75);
- }
-
- ::-webkit-scrollbar-thumb:active {
- background-color: #222;
- }
-
- .list-group-item {
- background: #34373c;
- }
-</style>
-
-<div class="container" style="color:white;padding-top:15vh;padding-bottom:15vh;">
- <h2 style="text-align:center;">The server has been running for</h2>
-
- <h4 style="text-align:center;" id="uptime"><?php
-
- $str = @file_get_contents('/proc/uptime');
- $num = floatval($str);
- $secs = fmod($num, 60); $num = intdiv($num, 60);
- $mins = $num % 60; $num = intdiv($num, 60);
- $hours = $num % 24; $num = intdiv($num, 24);
- $days = $num;
-
- echo($days . " day·s, " . $hours . " hour·s, " . $mins . " minute·s, " . ceil($secs) . " second·s")
-
- ?></h4>
- <!--suppress JSUnresolvedVariable, JSUnresolvedFunction -->
- <script>
- setInterval(() => {
- $.ajax("/admin/api/serverTime.php", {
- success: (data) => {
- document.getElementById("uptime").innerText = data;
- }
- });
- }, 500)
- </script>
-
- <ul class="list-group" style="margin-top:20px;">
- <li class="list-group-item">
- <b><?php
-
- exec("journalctl --disk-usage", $ret);
- $data = trim(implode("\n", $ret));
-
- $val = explode(" ", $data)[6];
- echo($val);
-
- ?></b> of data has been collected to ensure easy system maintenance and audit
- </li>
- <li class="list-group-item" id="logsummary">
- Calculating...
- </li>
- <!--suppress JSUnresolvedVariable, JSUnresolvedFunction -->
- <script>
- $.ajax("/admin/api/serverLogSummary.php", {
- success: (data) => {
- document.getElementById("logsummary").innerHTML = data;
- },
- error: () => {
- document.getElementById("logsummary").innerText = "An error occurred while loading this content";
- }
- });
- </script>
- </ul>
-</div>
-
+<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.php";/** @var array $_DATA */ ?>
+
+<style>
+ ::-webkit-scrollbar {
+ width: 5px;
+ }
+
+ ::-webkit-scrollbar-track {
+ border-radius: 9999px;
+ background: transparent;
+ }
+
+ ::-webkit-scrollbar-thumb {
+ border-radius: 9999px;
+ background-color: rgba(136, 136, 136, 0.5);
+ transition: background 200ms;
+ }
+
+ ::-webkit-scrollbar-thumb:hover {
+ background-color: rgba(85, 85, 85, 0.75);
+ }
+
+ ::-webkit-scrollbar-thumb:active {
+ background-color: #222;
+ }
+
+ .list-group-item {
+ background: #34373c;
+ }
+</style>
+
+<div class="container" style="color:white;padding-top:15vh;padding-bottom:15vh;">
+ <h2 style="text-align:center;">The server has been running for</h2>
+
+ <h4 style="text-align:center;" id="uptime"><?php
+
+ $str = @file_get_contents('/proc/uptime');
+ $num = floatval($str);
+ $secs = fmod($num, 60); $num = intdiv($num, 60);
+ $mins = $num % 60; $num = intdiv($num, 60);
+ $hours = $num % 24; $num = intdiv($num, 24);
+ $days = $num;
+
+ echo($days . " day·s, " . $hours . " hour·s, " . $mins . " minute·s, " . ceil($secs) . " second·s")
+
+ ?></h4>
+ <!--suppress JSUnresolvedVariable, JSUnresolvedFunction -->
+ <script>
+ setInterval(() => {
+ $.ajax("/admin/api/serverTime.php", {
+ success: (data) => {
+ document.getElementById("uptime").innerText = data;
+ }
+ });
+ }, 500)
+ </script>
+
+ <ul class="list-group" style="margin-top:20px;">
+ <li class="list-group-item">
+ <b><?php
+
+ exec("journalctl --disk-usage", $ret);
+ $data = trim(implode("\n", $ret));
+
+ $val = explode(" ", $data)[6];
+ echo($val);
+
+ ?></b> of data has been collected to ensure easy system maintenance and audit
+ </li>
+ <li class="list-group-item" id="logsummary">
+ Calculating...
+ </li>
+ <!--suppress JSUnresolvedVariable, JSUnresolvedFunction -->
+ <script>
+ $.ajax("/admin/api/serverLogSummary.php", {
+ success: (data) => {
+ document.getElementById("logsummary").innerHTML = data;
+ },
+ error: () => {
+ document.getElementById("logsummary").innerText = "An error occurred while loading this content";
+ }
+ });
+ </script>
+ </ul>
+</div>
+
<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/footer.php"; ?> \ No newline at end of file
diff --git a/admin/panes/version.php b/admin/panes/version.php
index 04ef136..10f1274 100644
--- a/admin/panes/version.php
+++ b/admin/panes/version.php
@@ -1,139 +1,140 @@
-<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.php";/** @var array $_DATA */ ?>
-
-<style>
- ::-webkit-scrollbar {
- width: 5px;
- }
-
- ::-webkit-scrollbar-track {
- border-radius: 9999px;
- background: transparent;
- }
-
- ::-webkit-scrollbar-thumb {
- border-radius: 9999px;
- background-color: rgba(136, 136, 136, 0.5);
- transition: background 200ms;
- }
-
- ::-webkit-scrollbar-thumb:hover {
- background-color: rgba(85, 85, 85, 0.75);
- }
-
- ::-webkit-scrollbar-thumb:active {
- background-color: #222;
- }
-
- .list-group-item {
- background: #34373c;
- }
-</style>
-
-<div class="container" style="color:white;padding-top:15vh;padding-bottom:15vh;">
- <h2 style="text-align:center;">This server is running <?= php_uname('s') ?> version</h2>
-
- <h4 style="text-align:center;"><?= php_uname('r') . " " . php_uname('v') ?></h4>
-
- <ul class="list-group" style="margin-top:20px;">
- <li class="list-group-item">PHP <?= PHP_VERSION ?></li>
- <li class="list-group-item">UnchainedTech <?= trim(file_get_contents("/mnt/blogchain/version.txt")) ?></li>
- <li class="list-group-item">Neutron Cloud <?= trim(file_get_contents("/mnt/minteckrolt-cloud/@BASE/source/api/version")) ?></li>
- <li class="list-group-item">Neutron Copper <?= trim(file_get_contents("/mnt/minteckrolt-cloud/@BASE/source/api/cyclic_version")) ?></li>
- <li class="list-group-item">Neutron Titanium <?= trim(file_get_contents("/mnt/minteckrolt-cloud/@BASE/source/api/jaw_version")) ?></li>
- <li class="list-group-item">
- <?php
-
- $osr = [];
- $lines = explode("\n", file_get_contents("/etc/os-release"));
-
- foreach ($lines as $line) {
- if (trim($line) !== "") {
- $parts = explode("=", $line);
- $osr[$parts[0]] = str_replace("\"", "", $parts[1]);
- }
- }
-
- echo($osr["NAME"] . " " . $osr["VERSION"]);
-
- ?>
- </li>
- <li class="list-group-item">Git <?php exec("git --version", $res);$p = explode(" ", $res[0]);array_shift($p);array_shift($p);echo(implode(" ", $p)) ?></li>
- <li class="list-group-item"><?php
-
- $soft = $_SERVER['SERVER_SOFTWARE'];
-
- if (strpos(strtolower($soft), "apache") !== false) {
- echo("Apache HTTP Server");
- } else {
- echo("nginx");
- }
-
- ?> <?php
-
- $soft = $_SERVER['SERVER_SOFTWARE'];
-
- if (strpos(strtolower($soft), "apache") !== false) {
- exec("apache2 -v", $res2);$p = explode(" ", $res2[0]);array_shift($p);array_shift($p);$p2 = explode("/", implode(" ", $p));array_shift($p2);echo(implode(" ", $p2));
- } else {
- exec("nginx -v", $res2);$p = explode(" ", $res2[0]);array_shift($p);array_shift($p);$p2 = explode("/", implode(" ", $p));array_shift($p2);echo(implode(" ", $p2));
- }
-
- ?></li>
- </ul>
-
- <ul class="list-group" style="margin-top:20px;">
- <li id="checking" class="list-group-item">Checking for updates...</li>
- <li id="checking2" class="list-group-item" style="display:none;"></li>
- <li id="found" class="list-group-item" style="display:none;">
- <b id="updates-count">0</b> package·s have updates available
-
- <details>
- <summary>View details</summary>
- <ul class="list-group" id="updates-list"></ul>
- </details>
- </li>
- </ul>
- <!--suppress JSUnresolvedVariable, JSUnresolvedFunction, JSUnfilteredForInLoop -->
- <script>
- $.ajax("/admin/api/refreshUpdates.php", {
- success: (data) => {
- document.getElementById("checking").innerText = "Checking for Ubuntu upgrades...";
- $.ajax("/admin/api/getUbuntuUpgrades.php", {
- success: (data) => {
- document.getElementById("checking").innerHTML = data;
- document.getElementById("checking2").style.display = "";
- document.getElementById("checking2").innerText = "Reading package lists...";
- $.ajax("/admin/api/getUpdates.php", {
- success: (data) => {
- document.getElementById("checking2").innerText = "Please wait...";
- document.getElementById("updates-count").innerText = data.count;
-
- dom = "";
- for (let index in data.packages) {
- item = data.packages[index];
- dom += `<li class="list-group-item"><b>${item.name}</b> (<span style="color: orange;">${item.version.local}</span> → <span style="color: green;">${item.version.remote}</span>)<br>Provided by: <code>${item.repos}</code>, target architecture: <code>${item.architecture}</code></li>`
- }
-
- document.getElementById("updates-list").innerHTML = dom;
-
- document.getElementById("checking2").outerHTML = "";
- document.getElementById("found").style.display = "";
- },
- error: () => {
- document.getElementById("checking2").innerText = "An error occurred while loading this content";
- }
- });
- },
- error: () => {
- document.getElementById("checking").innerText = "An error occurred while loading this content";
- }
- });
- },
- error: () => {
- document.getElementById("checking").innerText = "An error occurred while loading this content";
- }
- });
- </script>
-</div>
-
+<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/header.php";/** @var array $_DATA */ ?>
+
+<style>
+ ::-webkit-scrollbar {
+ width: 5px;
+ }
+
+ ::-webkit-scrollbar-track {
+ border-radius: 9999px;
+ background: transparent;
+ }
+
+ ::-webkit-scrollbar-thumb {
+ border-radius: 9999px;
+ background-color: rgba(136, 136, 136, 0.5);
+ transition: background 200ms;
+ }
+
+ ::-webkit-scrollbar-thumb:hover {
+ background-color: rgba(85, 85, 85, 0.75);
+ }
+
+ ::-webkit-scrollbar-thumb:active {
+ background-color: #222;
+ }
+
+ .list-group-item {
+ background: #34373c;
+ }
+</style>
+
+<div class="container" style="color:white;padding-top:15vh;padding-bottom:15vh;">
+ <h2 style="text-align:center;">This server is running <?= php_uname('s') ?> version</h2>
+
+ <h4 style="text-align:center;"><?= php_uname('r') . " " . php_uname('v') ?></h4>
+
+ <ul class="list-group" style="margin-top:20px;">
+ <li class="list-group-item">PHP <?= PHP_VERSION ?></li>
+ <li class="list-group-item">Minteck's Space <?= trim(file_get_contents($_SERVER["DOCUMENT_ROOT"] . "/version.txt")) ?></li>
+ <li class="list-group-item">UnchainedTech <?= trim(file_get_contents("/mnt/blogchain/version.txt")) ?></li>
+ <li class="list-group-item">Neutron Cloud <?= trim(file_get_contents("/mnt/minteckrolt-cloud/@BASE/source/api/version")) ?></li>
+ <li class="list-group-item">Neutron Copper <?= trim(file_get_contents("/mnt/minteckrolt-cloud/@BASE/source/api/cyclic_version")) ?></li>
+ <li class="list-group-item">Neutron Titanium <?= trim(file_get_contents("/mnt/minteckrolt-cloud/@BASE/source/api/jaw_version")) ?></li>
+ <li class="list-group-item">
+ <?php
+
+ $osr = [];
+ $lines = explode("\n", file_get_contents("/etc/os-release"));
+
+ foreach ($lines as $line) {
+ if (trim($line) !== "") {
+ $parts = explode("=", $line);
+ $osr[$parts[0]] = str_replace("\"", "", $parts[1]);
+ }
+ }
+
+ echo($osr["NAME"] . " " . $osr["VERSION"]);
+
+ ?>
+ </li>
+ <li class="list-group-item">Git <?php exec("git --version", $res);$p = explode(" ", $res[0]);array_shift($p);array_shift($p);echo(implode(" ", $p)) ?></li>
+ <li class="list-group-item"><?php
+
+ $soft = $_SERVER['SERVER_SOFTWARE'];
+
+ if (strpos(strtolower($soft), "apache") !== false) {
+ echo("Apache HTTP Server");
+ } else {
+ echo("nginx");
+ }
+
+ ?> <?php
+
+ $soft = $_SERVER['SERVER_SOFTWARE'];
+
+ if (strpos(strtolower($soft), "apache") !== false) {
+ exec("apache2 -v", $res2);$p = explode(" ", $res2[0]);array_shift($p);array_shift($p);$p2 = explode("/", implode(" ", $p));array_shift($p2);echo(implode(" ", $p2));
+ } else {
+ exec("nginx -v", $res2);$p = explode(" ", $res2[0]);array_shift($p);array_shift($p);$p2 = explode("/", implode(" ", $p));array_shift($p2);echo(implode(" ", $p2));
+ }
+
+ ?></li>
+ </ul>
+
+ <ul class="list-group" style="margin-top:20px;">
+ <li id="checking" class="list-group-item">Checking for updates...</li>
+ <li id="checking2" class="list-group-item" style="display:none;"></li>
+ <li id="found" class="list-group-item" style="display:none;">
+ <b id="updates-count">0</b> package·s have updates available
+
+ <details>
+ <summary>View details</summary>
+ <ul class="list-group" id="updates-list"></ul>
+ </details>
+ </li>
+ </ul>
+ <!--suppress JSUnresolvedVariable, JSUnresolvedFunction, JSUnfilteredForInLoop -->
+ <script>
+ $.ajax("/admin/api/refreshUpdates.php", {
+ success: (data) => {
+ document.getElementById("checking").innerText = "Checking for Ubuntu upgrades...";
+ $.ajax("/admin/api/getUbuntuUpgrades.php", {
+ success: (data) => {
+ document.getElementById("checking").innerHTML = data;
+ document.getElementById("checking2").style.display = "";
+ document.getElementById("checking2").innerText = "Reading package lists...";
+ $.ajax("/admin/api/getUpdates.php", {
+ success: (data) => {
+ document.getElementById("checking2").innerText = "Please wait...";
+ document.getElementById("updates-count").innerText = data.count;
+
+ dom = "";
+ for (let index in data.packages) {
+ item = data.packages[index];
+ dom += `<li class="list-group-item"><b>${item.name}</b> (<span style="color: orange;">${item.version.local}</span> → <span style="color: green;">${item.version.remote}</span>)<br>Provided by: <code>${item.repos}</code>, target architecture: <code>${item.architecture}</code></li>`
+ }
+
+ document.getElementById("updates-list").innerHTML = dom;
+
+ document.getElementById("checking2").outerHTML = "";
+ document.getElementById("found").style.display = "";
+ },
+ error: () => {
+ document.getElementById("checking2").innerText = "An error occurred while loading this content";
+ }
+ });
+ },
+ error: () => {
+ document.getElementById("checking").innerText = "An error occurred while loading this content";
+ }
+ });
+ },
+ error: () => {
+ document.getElementById("checking").innerText = "An error occurred while loading this content";
+ }
+ });
+ </script>
+</div>
+
<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/admin/private/footer.php"; ?> \ No newline at end of file
diff --git a/admin/private/footer.php b/admin/private/footer.php
index 691287b..d733a1f 100644
--- a/admin/private/footer.php
+++ b/admin/private/footer.php
@@ -1,2 +1,2 @@
-</body>
+</body>
</html> \ No newline at end of file
diff --git a/admin/private/header.api.php b/admin/private/header.api.php
index ce143f6..132e75f 100644
--- a/admin/private/header.api.php
+++ b/admin/private/header.api.php
@@ -1,11 +1,11 @@
-<?php
-
-if (!isset($_COOKIE["ADMIN_TOKEN"])) {
- header("Location: https://jetbrains.minteck.ro.lt:1024/hub/hub/api/rest/oauth2/auth?client_id=36245ba5-ee9f-44c1-a149-ab2006fcb226&response_type=code&redirect_uri=https://minteck.ro.lt/admin/callback&scope=hub&request_credentials=default&access_type=offline");
- die();
-} else if (ctype_xdigit($_COOKIE["ADMIN_TOKEN"]) && file_exists($_SERVER['DOCUMENT_ROOT'] . "/admin/private/tokens/" . $_COOKIE['ADMIN_TOKEN'])) {
- $_DATA = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/admin/private/tokens/" . $_COOKIE['ADMIN_TOKEN']), true);
-} else {
- header("Location: https://jetbrains.minteck.ro.lt:1024/hub/hub/api/rest/oauth2/auth?client_id=36245ba5-ee9f-44c1-a149-ab2006fcb226&response_type=code&redirect_uri=https://minteck.ro.lt/admin/callback&scope=hub&request_credentials=default&access_type=offline");
- die();
+<?php
+
+if (!isset($_COOKIE["ADMIN_TOKEN"])) {
+ header("Location: https://jetbrains.minteck.ro.lt:1024/hub/hub/api/rest/oauth2/auth?client_id=36245ba5-ee9f-44c1-a149-ab2006fcb226&response_type=code&redirect_uri=https://minteck.ro.lt/admin/callback&scope=hub&request_credentials=default&access_type=offline");
+ die();
+} else if (ctype_xdigit($_COOKIE["ADMIN_TOKEN"]) && file_exists($_SERVER['DOCUMENT_ROOT'] . "/admin/private/tokens/" . $_COOKIE['ADMIN_TOKEN'])) {
+ $_DATA = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/admin/private/tokens/" . $_COOKIE['ADMIN_TOKEN']), true);
+} else {
+ header("Location: https://jetbrains.minteck.ro.lt:1024/hub/hub/api/rest/oauth2/auth?client_id=36245ba5-ee9f-44c1-a149-ab2006fcb226&response_type=code&redirect_uri=https://minteck.ro.lt/admin/callback&scope=hub&request_credentials=default&access_type=offline");
+ die();
} \ No newline at end of file
diff --git a/admin/private/header.php b/admin/private/header.php
index 409d8d1..ddbee58 100644
--- a/admin/private/header.php
+++ b/admin/private/header.php
@@ -1,28 +1,28 @@
-<?php
-
-if (!isset($_COOKIE["ADMIN_TOKEN"])) {
- header("Location: https://jetbrains.minteck.ro.lt:1024/hub/hub/api/rest/oauth2/auth?client_id=36245ba5-ee9f-44c1-a149-ab2006fcb226&response_type=code&redirect_uri=https://minteck.ro.lt/admin/callback&scope=hub&request_credentials=default&access_type=offline");
- die();
-} else if (ctype_xdigit($_COOKIE["ADMIN_TOKEN"]) && file_exists($_SERVER['DOCUMENT_ROOT'] . "/admin/private/tokens/" . $_COOKIE['ADMIN_TOKEN'])) {
- $_DATA = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/admin/private/tokens/" . $_COOKIE['ADMIN_TOKEN']), true);
-} else {
- header("Location: https://jetbrains.minteck.ro.lt:1024/hub/hub/api/rest/oauth2/auth?client_id=36245ba5-ee9f-44c1-a149-ab2006fcb226&response_type=code&redirect_uri=https://minteck.ro.lt/admin/callback&scope=hub&request_credentials=default&access_type=offline");
- die();
-}
-
-?>
-
-<!DOCTYPE html>
-<html lang="en" style="height:100%;">
-<head>
- <meta charset="UTF-8">
- <title>Minteck Admin</title>
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <link rel="icon" href="/logo.svg">
- <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
- <link rel="stylesheet" href="/static/css/fonts">
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
- <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
- <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
-</head>
+<?php
+
+if (!isset($_COOKIE["ADMIN_TOKEN"])) {
+ header("Location: https://jetbrains.minteck.ro.lt:1024/hub/hub/api/rest/oauth2/auth?client_id=36245ba5-ee9f-44c1-a149-ab2006fcb226&response_type=code&redirect_uri=https://minteck.ro.lt/admin/callback&scope=hub&request_credentials=default&access_type=offline");
+ die();
+} else if (ctype_xdigit($_COOKIE["ADMIN_TOKEN"]) && file_exists($_SERVER['DOCUMENT_ROOT'] . "/admin/private/tokens/" . $_COOKIE['ADMIN_TOKEN'])) {
+ $_DATA = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/admin/private/tokens/" . $_COOKIE['ADMIN_TOKEN']), true);
+} else {
+ header("Location: https://jetbrains.minteck.ro.lt:1024/hub/hub/api/rest/oauth2/auth?client_id=36245ba5-ee9f-44c1-a149-ab2006fcb226&response_type=code&redirect_uri=https://minteck.ro.lt/admin/callback&scope=hub&request_credentials=default&access_type=offline");
+ die();
+}
+
+?>
+
+<!DOCTYPE html>
+<html lang="en" style="height:100%;">
+<head>
+ <meta charset="UTF-8">
+ <title>Minteck Admin</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="icon" href="/logo.svg">
+ <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
+ <link rel="stylesheet" href="/static/css/fonts">
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
+ <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
+</head>
<body class="admin" style="background-color:transparent;height:100%;"> \ No newline at end of file
diff --git a/admin/private/tokens/092748b16bc37807a0ddcb9a3061818fe57bf621f9d92d3b99cea22913483b26 b/admin/private/tokens/092748b16bc37807a0ddcb9a3061818fe57bf621f9d92d3b99cea22913483b26
new file mode 100644
index 0000000..39e06e5
--- /dev/null
+++ b/admin/private/tokens/092748b16bc37807a0ddcb9a3061818fe57bf621f9d92d3b99cea22913483b26
@@ -0,0 +1 @@
+{"type":"user","id":"a6fd71f9-d424-4a64-8321-9d7fc48c0c7d","name":"GitHub","login":"gh","banned":false,"guest":false,"avatar":{"type":"urlavatar","url":"https:\/\/jetbrains.minteck.ro.lt:1024\/hub\/hub\/api\/rest\/avatar\/a6fd71f9-d424-4a64-8321-9d7fc48c0c7d?etag=MjctNzA%3D"},"profile":{"avatar":{"type":"urlavatar","url":"https:\/\/jetbrains.minteck.ro.lt:1024\/hub\/hub\/api\/rest\/avatar\/a6fd71f9-d424-4a64-8321-9d7fc48c0c7d?etag=MjctNzA%3D"},"email":{"type":"EmailJSON","verified":true,"email":"freeziv.ytb@gmail.com"},"locale":{"name":"en","language":"en"}},"details":[{"type":"LoginuserdetailsJSON","id":"a2b2d6d5-9af7-4fbb-a9ca-6d2d434e4df2"}],"VCSUserNames":[{"name":"gh"},{"name":"freeziv.ytb@gmail.com"}],"creationTime":1625598847890,"lastAccessTime":1625600843934,"refreshTokens":[{"id":"51-5"}],"permanentTokens":[{"id":"47-0"}],"requiredTwoFactorAuthentication":false} \ No newline at end of file
diff --git a/admin/private/tokens/1acd958a4ae7af3dbba3b3f5c82f6a4692addd25e1391a67744991666825657c b/admin/private/tokens/1acd958a4ae7af3dbba3b3f5c82f6a4692addd25e1391a67744991666825657c
new file mode 100644
index 0000000..82afd37
--- /dev/null
+++ b/admin/private/tokens/1acd958a4ae7af3dbba3b3f5c82f6a4692addd25e1391a67744991666825657c
@@ -0,0 +1 @@
+{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","name":"Minteck","projectRoles":[{"type":"projectRole","id":"b4193c47-36e2-4670-92da-518143afa205","role":{"id":"6f29718b-aa71-4a29-8d58-e2cb080afd85","key":"system-admin","name":"System Admin"},"project":{"id":"0"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"e997fc29-7d13-4ef5-a3f6-b72e7715c329","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"699a1fc2-cf43-47f4-b135-dd942f483020"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"52c1b399-966a-42eb-a76b-cadaeb2c7f80","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"4a7819b7-9ad1-489c-bc34-fe25f2bfe444"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"24f6b0be-2641-4b44-853c-776446195486","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"083291e5-2555-4522-91b9-ed26300f0163"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"c6821ac9-27f6-4531-b35f-24074f60f0b4","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"6c4d8b1b-a482-4d39-816f-7632e2342219"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"a7fac0d5-05ab-4437-9f5e-b54f5b441ad0","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"4ba00747-a4c4-4cff-bf5c-4834c66543e2"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"ae1fa122-3341-44b0-a502-c3f3b719ef38","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"7de182b9-17f3-4873-96f6-5c2d6c3602ad"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"3937833a-e190-4080-a5b7-dcafede8e8a3","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"19d012a3-740c-473e-b9c6-eebdea7ef4eb"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"63d6ac8e-4089-497a-b2e8-cd74270382b5","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"f32d317d-dd12-4c8a-8046-c62a115883b5"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}}],"transitiveProjectRoles":[{"type":"projectRole","id":"3ecf236c-28fe-47fa-8e40-1c1567c036ec","role":{"id":"22d32b0e-d121-492b-a6ca-06f635a8dffe","key":"observer","name":"Observer"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"}},{"type":"projectRole","id":"b4193c47-36e2-4670-92da-518143afa205","role":{"id":"6f29718b-aa71-4a29-8d58-e2cb080afd85","key":"system-admin","name":"System Admin"},"project":{"id":"0"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"f9e5cdc3-b507-4cfc-a51e-8fa858cd932e","role":{"id":"22d32b0e-d121-492b-a6ca-06f635a8dffe","key":"observer","name":"Observer"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"}},{"type":"projectRole","id":"4efb0bb4-b1f2-4b51-a3d1-1aee7beed2c9","role":{"id":"c7a830b7-0a16-4b0c-b7e1-4a00a5e28436","key":"youtrack-issue-reader","name":"Issue Reader"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"}},{"type":"projectRole","id":"10601e43-73de-4f68-8e2f-2943f6103a6d","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"699a1fc2-cf43-47f4-b135-dd942f483020"},"owner":{"type":"userGroup","id":"f842fcc8-b3c8-4506-a0b8-95fd6bac9a99_team"}},{"type":"projectRole","id":"e997fc29-7d13-4ef5-a3f6-b72e7715c329","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"699a1fc2-cf43-47f4-b135-dd942f483020"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"401147df-43e9-4772-8a3b-7405cd20b5c4","role":{"id":"789ab258-ee38-45da-a1af-ea00a1cd9284","key":"youtrack-reporter","name":"Reporter"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"}},{"type":"projectRole","id":"a46ad04a-81f8-47a5-9733-a703a080c6bf","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"4a7819b7-9ad1-489c-bc34-fe25f2bfe444"},"owner":{"type":"userGroup","id":"6bdf22e4-9f87-4545-8f69-72938ef24fe8_team"}},{"type":"projectRole","id":"52c1b399-966a-42eb-a76b-cadaeb2c7f80","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"4a7819b7-9ad1-489c-bc34-fe25f2bfe444"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"d0e95745-7070-45b4-b852-c73a60494671","role":{"id":"789ab258-ee38-45da-a1af-ea00a1cd9284","key":"youtrack-reporter","name":"Reporter"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"}},{"type":"projectRole","id":"2381f69f-7453-4c77-a3a3-317eccefda60","role":{"id":"c7a830b7-0a16-4b0c-b7e1-4a00a5e28436","key":"youtrack-issue-reader","name":"Issue Reader"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"}},{"type":"projectRole","id":"6e29cc0f-76e0-4c60-b225-5ef3b537a996","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"083291e5-2555-4522-91b9-ed26300f0163"},"owner":{"type":"userGroup","id":"dbae3e35-4676-49fe-adf6-190e80f52f87_team"}},{"type":"projectRole","id":"24f6b0be-2641-4b44-853c-776446195486","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"083291e5-2555-4522-91b9-ed26300f0163"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"e3fc301a-2d34-447d-8a20-23479b8da39c","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"6c4d8b1b-a482-4d39-816f-7632e2342219"},"owner":{"type":"userGroup","id":"e7feeab4-eff5-45be-9047-3ec6fa55a5d6_team"}},{"type":"projectRole","id":"c6821ac9-27f6-4531-b35f-24074f60f0b4","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"6c4d8b1b-a482-4d39-816f-7632e2342219"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"1f8b31c1-c11c-4386-8ad9-12bd8d4f442c","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"4ba00747-a4c4-4cff-bf5c-4834c66543e2"},"owner":{"type":"userGroup","id":"79370bf5-0531-4b50-8407-a14536b304d6_team"}},{"type":"projectRole","id":"a7fac0d5-05ab-4437-9f5e-b54f5b441ad0","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"4ba00747-a4c4-4cff-bf5c-4834c66543e2"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"b8c1d9d9-9885-4f48-85d8-9fef53deccfe","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"7de182b9-17f3-4873-96f6-5c2d6c3602ad"},"owner":{"type":"userGroup","id":"cb84e48d-4eae-47d3-8a68-88168f479ef7_team"}},{"type":"projectRole","id":"ae1fa122-3341-44b0-a502-c3f3b719ef38","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"7de182b9-17f3-4873-96f6-5c2d6c3602ad"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"88b0026a-b537-467e-a9ea-418c6e46209c","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"19d012a3-740c-473e-b9c6-eebdea7ef4eb"},"owner":{"type":"userGroup","id":"c28131a2-4c1f-4426-8b6c-93850965354b_team"}},{"type":"projectRole","id":"3937833a-e190-4080-a5b7-dcafede8e8a3","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"19d012a3-740c-473e-b9c6-eebdea7ef4eb"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"bb6807fa-ae78-42fb-a4a3-674211b55a5e","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"f32d317d-dd12-4c8a-8046-c62a115883b5"},"owner":{"type":"userGroup","id":"8efe890f-541a-429d-977b-67e5a3bbdd65_team"}},{"type":"projectRole","id":"63d6ac8e-4089-497a-b2e8-cd74270382b5","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"f32d317d-dd12-4c8a-8046-c62a115883b5"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}}],"sourcedProjectRoles":[{"type":"sourcedProjectRole","id":"3ecf236c-28fe-47fa-8e40-1c1567c036ec","role":{"id":"22d32b0e-d121-492b-a6ca-06f635a8dffe","key":"observer","name":"Observer"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"},"sources":[{"type":"groupProjectRoleSource","group":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"}}]},{"type":"sourcedProjectRole","id":"b4193c47-36e2-4670-92da-518143afa205","role":{"id":"6f29718b-aa71-4a29-8d58-e2cb080afd85","key":"system-admin","name":"System Admin"},"project":{"id":"0"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"f9e5cdc3-b507-4cfc-a51e-8fa858cd932e","role":{"id":"22d32b0e-d121-492b-a6ca-06f635a8dffe","key":"observer","name":"Observer"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"},"sources":[{"type":"groupProjectRoleSource","group":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"}}]},{"type":"sourcedProjectRole","id":"4efb0bb4-b1f2-4b51-a3d1-1aee7beed2c9","role":{"id":"c7a830b7-0a16-4b0c-b7e1-4a00a5e28436","key":"youtrack-issue-reader","name":"Issue Reader"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"},"sources":[{"type":"groupProjectRoleSource","group":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"}}]},{"type":"sourcedProjectRole","id":"10601e43-73de-4f68-8e2f-2943f6103a6d","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"699a1fc2-cf43-47f4-b135-dd942f483020"},"owner":{"type":"userGroup","id":"f842fcc8-b3c8-4506-a0b8-95fd6bac9a99_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"f842fcc8-b3c8-4506-a0b8-95fd6bac9a99"}}]},{"type":"sourcedProjectRole","id":"e997fc29-7d13-4ef5-a3f6-b72e7715c329","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"699a1fc2-cf43-47f4-b135-dd942f483020"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"401147df-43e9-4772-8a3b-7405cd20b5c4","role":{"id":"789ab258-ee38-45da-a1af-ea00a1cd9284","key":"youtrack-reporter","name":"Reporter"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"},"sources":[{"type":"groupProjectRoleSource","group":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"}}]},{"type":"sourcedProjectRole","id":"a46ad04a-81f8-47a5-9733-a703a080c6bf","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"4a7819b7-9ad1-489c-bc34-fe25f2bfe444"},"owner":{"type":"userGroup","id":"6bdf22e4-9f87-4545-8f69-72938ef24fe8_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"6bdf22e4-9f87-4545-8f69-72938ef24fe8"}}]},{"type":"sourcedProjectRole","id":"52c1b399-966a-42eb-a76b-cadaeb2c7f80","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"4a7819b7-9ad1-489c-bc34-fe25f2bfe444"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"d0e95745-7070-45b4-b852-c73a60494671","role":{"id":"789ab258-ee38-45da-a1af-ea00a1cd9284","key":"youtrack-reporter","name":"Reporter"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"},"sources":[{"type":"groupProjectRoleSource","group":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"}}]},{"type":"sourcedProjectRole","id":"2381f69f-7453-4c77-a3a3-317eccefda60","role":{"id":"c7a830b7-0a16-4b0c-b7e1-4a00a5e28436","key":"youtrack-issue-reader","name":"Issue Reader"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"},"sources":[{"type":"groupProjectRoleSource","group":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"}}]},{"type":"sourcedProjectRole","id":"6e29cc0f-76e0-4c60-b225-5ef3b537a996","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"083291e5-2555-4522-91b9-ed26300f0163"},"owner":{"type":"userGroup","id":"dbae3e35-4676-49fe-adf6-190e80f52f87_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"dbae3e35-4676-49fe-adf6-190e80f52f87"}}]},{"type":"sourcedProjectRole","id":"24f6b0be-2641-4b44-853c-776446195486","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"083291e5-2555-4522-91b9-ed26300f0163"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"e3fc301a-2d34-447d-8a20-23479b8da39c","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"6c4d8b1b-a482-4d39-816f-7632e2342219"},"owner":{"type":"userGroup","id":"e7feeab4-eff5-45be-9047-3ec6fa55a5d6_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"e7feeab4-eff5-45be-9047-3ec6fa55a5d6"}}]},{"type":"sourcedProjectRole","id":"c6821ac9-27f6-4531-b35f-24074f60f0b4","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"6c4d8b1b-a482-4d39-816f-7632e2342219"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"1f8b31c1-c11c-4386-8ad9-12bd8d4f442c","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"4ba00747-a4c4-4cff-bf5c-4834c66543e2"},"owner":{"type":"userGroup","id":"79370bf5-0531-4b50-8407-a14536b304d6_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"79370bf5-0531-4b50-8407-a14536b304d6"}}]},{"type":"sourcedProjectRole","id":"a7fac0d5-05ab-4437-9f5e-b54f5b441ad0","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"4ba00747-a4c4-4cff-bf5c-4834c66543e2"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"b8c1d9d9-9885-4f48-85d8-9fef53deccfe","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"7de182b9-17f3-4873-96f6-5c2d6c3602ad"},"owner":{"type":"userGroup","id":"cb84e48d-4eae-47d3-8a68-88168f479ef7_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"cb84e48d-4eae-47d3-8a68-88168f479ef7"}}]},{"type":"sourcedProjectRole","id":"ae1fa122-3341-44b0-a502-c3f3b719ef38","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"7de182b9-17f3-4873-96f6-5c2d6c3602ad"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"88b0026a-b537-467e-a9ea-418c6e46209c","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"19d012a3-740c-473e-b9c6-eebdea7ef4eb"},"owner":{"type":"userGroup","id":"c28131a2-4c1f-4426-8b6c-93850965354b_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"c28131a2-4c1f-4426-8b6c-93850965354b"}}]},{"type":"sourcedProjectRole","id":"3937833a-e190-4080-a5b7-dcafede8e8a3","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"19d012a3-740c-473e-b9c6-eebdea7ef4eb"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"bb6807fa-ae78-42fb-a4a3-674211b55a5e","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"f32d317d-dd12-4c8a-8046-c62a115883b5"},"owner":{"type":"userGroup","id":"8efe890f-541a-429d-977b-67e5a3bbdd65_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"8efe890f-541a-429d-977b-67e5a3bbdd65"}}]},{"type":"sourcedProjectRole","id":"63d6ac8e-4089-497a-b2e8-cd74270382b5","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"f32d317d-dd12-4c8a-8046-c62a115883b5"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]}],"login":"Minteck","banned":false,"guest":false,"avatar":{"type":"gravatar","url":"https:\/\/jetbrains.minteck.ro.lt:1024\/hub\/hub\/api\/rest\/avatar\/74bca7d2-4694-477c-8bc1-9003315abbee"},"profile":{"avatar":{"type":"gravatar","url":"https:\/\/jetbrains.minteck.ro.lt:1024\/hub\/hub\/api\/rest\/avatar\/74bca7d2-4694-477c-8bc1-9003315abbee"},"email":{"type":"EmailJSON","verified":false,"email":"nekostarfan@gmail.com"},"locale":{"name":"fr","language":"fr"}},"groups":[{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"},{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"},{"type":"userGroup","id":"f842fcc8-b3c8-4506-a0b8-95fd6bac9a99_team"},{"type":"userGroup","id":"6bdf22e4-9f87-4545-8f69-72938ef24fe8_team"},{"type":"userGroup","id":"dbae3e35-4676-49fe-adf6-190e80f52f87_team"},{"type":"userGroup","id":"e7feeab4-eff5-45be-9047-3ec6fa55a5d6_team"},{"type":"userGroup","id":"79370bf5-0531-4b50-8407-a14536b304d6_team"},{"type":"userGroup","id":"cb84e48d-4eae-47d3-8a68-88168f479ef7_team"},{"type":"userGroup","id":"c28131a2-4c1f-4426-8b6c-93850965354b_team"},{"type":"userGroup","id":"8efe890f-541a-429d-977b-67e5a3bbdd65_team"}],"transitiveGroups":[{"type":"userGroup","id":"a14a66ed-e403-4b8a-89f0-80b34bbeb00f"},{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"},{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"},{"type":"userGroup","id":"f842fcc8-b3c8-4506-a0b8-95fd6bac9a99_team"},{"type":"userGroup","id":"6bdf22e4-9f87-4545-8f69-72938ef24fe8_team"},{"type":"userGroup","id":"dbae3e35-4676-49fe-adf6-190e80f52f87_team"},{"type":"userGroup","id":"e7feeab4-eff5-45be-9047-3ec6fa55a5d6_team"},{"type":"userGroup","id":"79370bf5-0531-4b50-8407-a14536b304d6_team"},{"type":"userGroup","id":"cb84e48d-4eae-47d3-8a68-88168f479ef7_team"},{"type":"userGroup","id":"c28131a2-4c1f-4426-8b6c-93850965354b_team"},{"type":"userGroup","id":"8efe890f-541a-429d-977b-67e5a3bbdd65_team"}],"teams":[{"type":"projectTeam","id":"f842fcc8-b3c8-4506-a0b8-95fd6bac9a99"},{"type":"projectTeam","id":"6bdf22e4-9f87-4545-8f69-72938ef24fe8"},{"type":"projectTeam","id":"dbae3e35-4676-49fe-adf6-190e80f52f87"},{"type":"projectTeam","id":"e7feeab4-eff5-45be-9047-3ec6fa55a5d6"},{"type":"projectTeam","id":"79370bf5-0531-4b50-8407-a14536b304d6"},{"type":"projectTeam","id":"cb84e48d-4eae-47d3-8a68-88168f479ef7"},{"type":"projectTeam","id":"c28131a2-4c1f-4426-8b6c-93850965354b"},{"type":"projectTeam","id":"8efe890f-541a-429d-977b-67e5a3bbdd65"}],"transitiveTeams":[{"type":"projectTeam","id":"f842fcc8-b3c8-4506-a0b8-95fd6bac9a99"},{"type":"projectTeam","id":"6bdf22e4-9f87-4545-8f69-72938ef24fe8"},{"type":"projectTeam","id":"dbae3e35-4676-49fe-adf6-190e80f52f87"},{"type":"projectTeam","id":"e7feeab4-eff5-45be-9047-3ec6fa55a5d6"},{"type":"projectTeam","id":"79370bf5-0531-4b50-8407-a14536b304d6"},{"type":"projectTeam","id":"cb84e48d-4eae-47d3-8a68-88168f479ef7"},{"type":"projectTeam","id":"c28131a2-4c1f-4426-8b6c-93850965354b"},{"type":"projectTeam","id":"8efe890f-541a-429d-977b-67e5a3bbdd65"}],"details":[{"type":"LoginuserdetailsJSON","id":"0c75d3d5-3ee4-45a8-be78-b13345c03a5e"}],"VCSUserNames":[{"name":"Minteck"},{"name":"freeziv.ytb@gmail.com"},{"name":"nekostarfan@gmail.com"}],"sshPublicKeys":[{"fingerPrint":"b6:57:40:30:2e:8e:57:0c:b9:e8:24:f1:84:0f:2c:dd"},{"fingerPrint":"e0:39:49:58:34:83:d4:63:7e:77:da:3c:c9:22:e3:6a"}],"licenses":[{"type":"license","id":"b422de3e-02ef-4cb1-bccc-4dd9c9e51061"}],"creationTime":1625598084003,"lastAccessTime":1627409358694,"refreshTokens":[{"id":"51-0"},{"id":"51-3"},{"id":"51-4"}],"approvedScopes":[{"id":"45-0"}],"favoriteProjects":[{"id":"699a1fc2-cf43-47f4-b135-dd942f483020"},{"id":"4a7819b7-9ad1-489c-bc34-fe25f2bfe444"},{"id":"083291e5-2555-4522-91b9-ed26300f0163"},{"id":"6c4d8b1b-a482-4d39-816f-7632e2342219"},{"id":"4ba00747-a4c4-4cff-bf5c-4834c66543e2"},{"id":"7de182b9-17f3-4873-96f6-5c2d6c3602ad"},{"id":"19d012a3-740c-473e-b9c6-eebdea7ef4eb"},{"id":"f32d317d-dd12-4c8a-8046-c62a115883b5"}],"requiredTwoFactorAuthentication":false} \ No newline at end of file
diff --git a/admin/private/tokens/54b725f6df47930897151c6ac40dfaa17a889d22ce0e5096d0f2fb13e7bea4cb b/admin/private/tokens/54b725f6df47930897151c6ac40dfaa17a889d22ce0e5096d0f2fb13e7bea4cb
new file mode 100644
index 0000000..82afd37
--- /dev/null
+++ b/admin/private/tokens/54b725f6df47930897151c6ac40dfaa17a889d22ce0e5096d0f2fb13e7bea4cb
@@ -0,0 +1 @@
+{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","name":"Minteck","projectRoles":[{"type":"projectRole","id":"b4193c47-36e2-4670-92da-518143afa205","role":{"id":"6f29718b-aa71-4a29-8d58-e2cb080afd85","key":"system-admin","name":"System Admin"},"project":{"id":"0"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"e997fc29-7d13-4ef5-a3f6-b72e7715c329","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"699a1fc2-cf43-47f4-b135-dd942f483020"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"52c1b399-966a-42eb-a76b-cadaeb2c7f80","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"4a7819b7-9ad1-489c-bc34-fe25f2bfe444"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"24f6b0be-2641-4b44-853c-776446195486","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"083291e5-2555-4522-91b9-ed26300f0163"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"c6821ac9-27f6-4531-b35f-24074f60f0b4","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"6c4d8b1b-a482-4d39-816f-7632e2342219"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"a7fac0d5-05ab-4437-9f5e-b54f5b441ad0","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"4ba00747-a4c4-4cff-bf5c-4834c66543e2"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"ae1fa122-3341-44b0-a502-c3f3b719ef38","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"7de182b9-17f3-4873-96f6-5c2d6c3602ad"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"3937833a-e190-4080-a5b7-dcafede8e8a3","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"19d012a3-740c-473e-b9c6-eebdea7ef4eb"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"63d6ac8e-4089-497a-b2e8-cd74270382b5","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"f32d317d-dd12-4c8a-8046-c62a115883b5"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}}],"transitiveProjectRoles":[{"type":"projectRole","id":"3ecf236c-28fe-47fa-8e40-1c1567c036ec","role":{"id":"22d32b0e-d121-492b-a6ca-06f635a8dffe","key":"observer","name":"Observer"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"}},{"type":"projectRole","id":"b4193c47-36e2-4670-92da-518143afa205","role":{"id":"6f29718b-aa71-4a29-8d58-e2cb080afd85","key":"system-admin","name":"System Admin"},"project":{"id":"0"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"f9e5cdc3-b507-4cfc-a51e-8fa858cd932e","role":{"id":"22d32b0e-d121-492b-a6ca-06f635a8dffe","key":"observer","name":"Observer"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"}},{"type":"projectRole","id":"4efb0bb4-b1f2-4b51-a3d1-1aee7beed2c9","role":{"id":"c7a830b7-0a16-4b0c-b7e1-4a00a5e28436","key":"youtrack-issue-reader","name":"Issue Reader"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"}},{"type":"projectRole","id":"10601e43-73de-4f68-8e2f-2943f6103a6d","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"699a1fc2-cf43-47f4-b135-dd942f483020"},"owner":{"type":"userGroup","id":"f842fcc8-b3c8-4506-a0b8-95fd6bac9a99_team"}},{"type":"projectRole","id":"e997fc29-7d13-4ef5-a3f6-b72e7715c329","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"699a1fc2-cf43-47f4-b135-dd942f483020"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"401147df-43e9-4772-8a3b-7405cd20b5c4","role":{"id":"789ab258-ee38-45da-a1af-ea00a1cd9284","key":"youtrack-reporter","name":"Reporter"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"}},{"type":"projectRole","id":"a46ad04a-81f8-47a5-9733-a703a080c6bf","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"4a7819b7-9ad1-489c-bc34-fe25f2bfe444"},"owner":{"type":"userGroup","id":"6bdf22e4-9f87-4545-8f69-72938ef24fe8_team"}},{"type":"projectRole","id":"52c1b399-966a-42eb-a76b-cadaeb2c7f80","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"4a7819b7-9ad1-489c-bc34-fe25f2bfe444"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"d0e95745-7070-45b4-b852-c73a60494671","role":{"id":"789ab258-ee38-45da-a1af-ea00a1cd9284","key":"youtrack-reporter","name":"Reporter"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"}},{"type":"projectRole","id":"2381f69f-7453-4c77-a3a3-317eccefda60","role":{"id":"c7a830b7-0a16-4b0c-b7e1-4a00a5e28436","key":"youtrack-issue-reader","name":"Issue Reader"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"}},{"type":"projectRole","id":"6e29cc0f-76e0-4c60-b225-5ef3b537a996","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"083291e5-2555-4522-91b9-ed26300f0163"},"owner":{"type":"userGroup","id":"dbae3e35-4676-49fe-adf6-190e80f52f87_team"}},{"type":"projectRole","id":"24f6b0be-2641-4b44-853c-776446195486","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"083291e5-2555-4522-91b9-ed26300f0163"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"e3fc301a-2d34-447d-8a20-23479b8da39c","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"6c4d8b1b-a482-4d39-816f-7632e2342219"},"owner":{"type":"userGroup","id":"e7feeab4-eff5-45be-9047-3ec6fa55a5d6_team"}},{"type":"projectRole","id":"c6821ac9-27f6-4531-b35f-24074f60f0b4","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"6c4d8b1b-a482-4d39-816f-7632e2342219"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"1f8b31c1-c11c-4386-8ad9-12bd8d4f442c","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"4ba00747-a4c4-4cff-bf5c-4834c66543e2"},"owner":{"type":"userGroup","id":"79370bf5-0531-4b50-8407-a14536b304d6_team"}},{"type":"projectRole","id":"a7fac0d5-05ab-4437-9f5e-b54f5b441ad0","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"4ba00747-a4c4-4cff-bf5c-4834c66543e2"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"b8c1d9d9-9885-4f48-85d8-9fef53deccfe","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"7de182b9-17f3-4873-96f6-5c2d6c3602ad"},"owner":{"type":"userGroup","id":"cb84e48d-4eae-47d3-8a68-88168f479ef7_team"}},{"type":"projectRole","id":"ae1fa122-3341-44b0-a502-c3f3b719ef38","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"7de182b9-17f3-4873-96f6-5c2d6c3602ad"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"88b0026a-b537-467e-a9ea-418c6e46209c","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"19d012a3-740c-473e-b9c6-eebdea7ef4eb"},"owner":{"type":"userGroup","id":"c28131a2-4c1f-4426-8b6c-93850965354b_team"}},{"type":"projectRole","id":"3937833a-e190-4080-a5b7-dcafede8e8a3","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"19d012a3-740c-473e-b9c6-eebdea7ef4eb"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"bb6807fa-ae78-42fb-a4a3-674211b55a5e","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"f32d317d-dd12-4c8a-8046-c62a115883b5"},"owner":{"type":"userGroup","id":"8efe890f-541a-429d-977b-67e5a3bbdd65_team"}},{"type":"projectRole","id":"63d6ac8e-4089-497a-b2e8-cd74270382b5","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"f32d317d-dd12-4c8a-8046-c62a115883b5"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}}],"sourcedProjectRoles":[{"type":"sourcedProjectRole","id":"3ecf236c-28fe-47fa-8e40-1c1567c036ec","role":{"id":"22d32b0e-d121-492b-a6ca-06f635a8dffe","key":"observer","name":"Observer"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"},"sources":[{"type":"groupProjectRoleSource","group":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"}}]},{"type":"sourcedProjectRole","id":"b4193c47-36e2-4670-92da-518143afa205","role":{"id":"6f29718b-aa71-4a29-8d58-e2cb080afd85","key":"system-admin","name":"System Admin"},"project":{"id":"0"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"f9e5cdc3-b507-4cfc-a51e-8fa858cd932e","role":{"id":"22d32b0e-d121-492b-a6ca-06f635a8dffe","key":"observer","name":"Observer"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"},"sources":[{"type":"groupProjectRoleSource","group":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"}}]},{"type":"sourcedProjectRole","id":"4efb0bb4-b1f2-4b51-a3d1-1aee7beed2c9","role":{"id":"c7a830b7-0a16-4b0c-b7e1-4a00a5e28436","key":"youtrack-issue-reader","name":"Issue Reader"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"},"sources":[{"type":"groupProjectRoleSource","group":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"}}]},{"type":"sourcedProjectRole","id":"10601e43-73de-4f68-8e2f-2943f6103a6d","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"699a1fc2-cf43-47f4-b135-dd942f483020"},"owner":{"type":"userGroup","id":"f842fcc8-b3c8-4506-a0b8-95fd6bac9a99_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"f842fcc8-b3c8-4506-a0b8-95fd6bac9a99"}}]},{"type":"sourcedProjectRole","id":"e997fc29-7d13-4ef5-a3f6-b72e7715c329","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"699a1fc2-cf43-47f4-b135-dd942f483020"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"401147df-43e9-4772-8a3b-7405cd20b5c4","role":{"id":"789ab258-ee38-45da-a1af-ea00a1cd9284","key":"youtrack-reporter","name":"Reporter"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"},"sources":[{"type":"groupProjectRoleSource","group":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"}}]},{"type":"sourcedProjectRole","id":"a46ad04a-81f8-47a5-9733-a703a080c6bf","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"4a7819b7-9ad1-489c-bc34-fe25f2bfe444"},"owner":{"type":"userGroup","id":"6bdf22e4-9f87-4545-8f69-72938ef24fe8_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"6bdf22e4-9f87-4545-8f69-72938ef24fe8"}}]},{"type":"sourcedProjectRole","id":"52c1b399-966a-42eb-a76b-cadaeb2c7f80","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"4a7819b7-9ad1-489c-bc34-fe25f2bfe444"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"d0e95745-7070-45b4-b852-c73a60494671","role":{"id":"789ab258-ee38-45da-a1af-ea00a1cd9284","key":"youtrack-reporter","name":"Reporter"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"},"sources":[{"type":"groupProjectRoleSource","group":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"}}]},{"type":"sourcedProjectRole","id":"2381f69f-7453-4c77-a3a3-317eccefda60","role":{"id":"c7a830b7-0a16-4b0c-b7e1-4a00a5e28436","key":"youtrack-issue-reader","name":"Issue Reader"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"},"sources":[{"type":"groupProjectRoleSource","group":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"}}]},{"type":"sourcedProjectRole","id":"6e29cc0f-76e0-4c60-b225-5ef3b537a996","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"083291e5-2555-4522-91b9-ed26300f0163"},"owner":{"type":"userGroup","id":"dbae3e35-4676-49fe-adf6-190e80f52f87_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"dbae3e35-4676-49fe-adf6-190e80f52f87"}}]},{"type":"sourcedProjectRole","id":"24f6b0be-2641-4b44-853c-776446195486","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"083291e5-2555-4522-91b9-ed26300f0163"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"e3fc301a-2d34-447d-8a20-23479b8da39c","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"6c4d8b1b-a482-4d39-816f-7632e2342219"},"owner":{"type":"userGroup","id":"e7feeab4-eff5-45be-9047-3ec6fa55a5d6_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"e7feeab4-eff5-45be-9047-3ec6fa55a5d6"}}]},{"type":"sourcedProjectRole","id":"c6821ac9-27f6-4531-b35f-24074f60f0b4","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"6c4d8b1b-a482-4d39-816f-7632e2342219"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"1f8b31c1-c11c-4386-8ad9-12bd8d4f442c","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"4ba00747-a4c4-4cff-bf5c-4834c66543e2"},"owner":{"type":"userGroup","id":"79370bf5-0531-4b50-8407-a14536b304d6_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"79370bf5-0531-4b50-8407-a14536b304d6"}}]},{"type":"sourcedProjectRole","id":"a7fac0d5-05ab-4437-9f5e-b54f5b441ad0","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"4ba00747-a4c4-4cff-bf5c-4834c66543e2"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"b8c1d9d9-9885-4f48-85d8-9fef53deccfe","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"7de182b9-17f3-4873-96f6-5c2d6c3602ad"},"owner":{"type":"userGroup","id":"cb84e48d-4eae-47d3-8a68-88168f479ef7_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"cb84e48d-4eae-47d3-8a68-88168f479ef7"}}]},{"type":"sourcedProjectRole","id":"ae1fa122-3341-44b0-a502-c3f3b719ef38","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"7de182b9-17f3-4873-96f6-5c2d6c3602ad"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"88b0026a-b537-467e-a9ea-418c6e46209c","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"19d012a3-740c-473e-b9c6-eebdea7ef4eb"},"owner":{"type":"userGroup","id":"c28131a2-4c1f-4426-8b6c-93850965354b_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"c28131a2-4c1f-4426-8b6c-93850965354b"}}]},{"type":"sourcedProjectRole","id":"3937833a-e190-4080-a5b7-dcafede8e8a3","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"19d012a3-740c-473e-b9c6-eebdea7ef4eb"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"bb6807fa-ae78-42fb-a4a3-674211b55a5e","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"f32d317d-dd12-4c8a-8046-c62a115883b5"},"owner":{"type":"userGroup","id":"8efe890f-541a-429d-977b-67e5a3bbdd65_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"8efe890f-541a-429d-977b-67e5a3bbdd65"}}]},{"type":"sourcedProjectRole","id":"63d6ac8e-4089-497a-b2e8-cd74270382b5","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"f32d317d-dd12-4c8a-8046-c62a115883b5"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]}],"login":"Minteck","banned":false,"guest":false,"avatar":{"type":"gravatar","url":"https:\/\/jetbrains.minteck.ro.lt:1024\/hub\/hub\/api\/rest\/avatar\/74bca7d2-4694-477c-8bc1-9003315abbee"},"profile":{"avatar":{"type":"gravatar","url":"https:\/\/jetbrains.minteck.ro.lt:1024\/hub\/hub\/api\/rest\/avatar\/74bca7d2-4694-477c-8bc1-9003315abbee"},"email":{"type":"EmailJSON","verified":false,"email":"nekostarfan@gmail.com"},"locale":{"name":"fr","language":"fr"}},"groups":[{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"},{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"},{"type":"userGroup","id":"f842fcc8-b3c8-4506-a0b8-95fd6bac9a99_team"},{"type":"userGroup","id":"6bdf22e4-9f87-4545-8f69-72938ef24fe8_team"},{"type":"userGroup","id":"dbae3e35-4676-49fe-adf6-190e80f52f87_team"},{"type":"userGroup","id":"e7feeab4-eff5-45be-9047-3ec6fa55a5d6_team"},{"type":"userGroup","id":"79370bf5-0531-4b50-8407-a14536b304d6_team"},{"type":"userGroup","id":"cb84e48d-4eae-47d3-8a68-88168f479ef7_team"},{"type":"userGroup","id":"c28131a2-4c1f-4426-8b6c-93850965354b_team"},{"type":"userGroup","id":"8efe890f-541a-429d-977b-67e5a3bbdd65_team"}],"transitiveGroups":[{"type":"userGroup","id":"a14a66ed-e403-4b8a-89f0-80b34bbeb00f"},{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"},{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"},{"type":"userGroup","id":"f842fcc8-b3c8-4506-a0b8-95fd6bac9a99_team"},{"type":"userGroup","id":"6bdf22e4-9f87-4545-8f69-72938ef24fe8_team"},{"type":"userGroup","id":"dbae3e35-4676-49fe-adf6-190e80f52f87_team"},{"type":"userGroup","id":"e7feeab4-eff5-45be-9047-3ec6fa55a5d6_team"},{"type":"userGroup","id":"79370bf5-0531-4b50-8407-a14536b304d6_team"},{"type":"userGroup","id":"cb84e48d-4eae-47d3-8a68-88168f479ef7_team"},{"type":"userGroup","id":"c28131a2-4c1f-4426-8b6c-93850965354b_team"},{"type":"userGroup","id":"8efe890f-541a-429d-977b-67e5a3bbdd65_team"}],"teams":[{"type":"projectTeam","id":"f842fcc8-b3c8-4506-a0b8-95fd6bac9a99"},{"type":"projectTeam","id":"6bdf22e4-9f87-4545-8f69-72938ef24fe8"},{"type":"projectTeam","id":"dbae3e35-4676-49fe-adf6-190e80f52f87"},{"type":"projectTeam","id":"e7feeab4-eff5-45be-9047-3ec6fa55a5d6"},{"type":"projectTeam","id":"79370bf5-0531-4b50-8407-a14536b304d6"},{"type":"projectTeam","id":"cb84e48d-4eae-47d3-8a68-88168f479ef7"},{"type":"projectTeam","id":"c28131a2-4c1f-4426-8b6c-93850965354b"},{"type":"projectTeam","id":"8efe890f-541a-429d-977b-67e5a3bbdd65"}],"transitiveTeams":[{"type":"projectTeam","id":"f842fcc8-b3c8-4506-a0b8-95fd6bac9a99"},{"type":"projectTeam","id":"6bdf22e4-9f87-4545-8f69-72938ef24fe8"},{"type":"projectTeam","id":"dbae3e35-4676-49fe-adf6-190e80f52f87"},{"type":"projectTeam","id":"e7feeab4-eff5-45be-9047-3ec6fa55a5d6"},{"type":"projectTeam","id":"79370bf5-0531-4b50-8407-a14536b304d6"},{"type":"projectTeam","id":"cb84e48d-4eae-47d3-8a68-88168f479ef7"},{"type":"projectTeam","id":"c28131a2-4c1f-4426-8b6c-93850965354b"},{"type":"projectTeam","id":"8efe890f-541a-429d-977b-67e5a3bbdd65"}],"details":[{"type":"LoginuserdetailsJSON","id":"0c75d3d5-3ee4-45a8-be78-b13345c03a5e"}],"VCSUserNames":[{"name":"Minteck"},{"name":"freeziv.ytb@gmail.com"},{"name":"nekostarfan@gmail.com"}],"sshPublicKeys":[{"fingerPrint":"b6:57:40:30:2e:8e:57:0c:b9:e8:24:f1:84:0f:2c:dd"},{"fingerPrint":"e0:39:49:58:34:83:d4:63:7e:77:da:3c:c9:22:e3:6a"}],"licenses":[{"type":"license","id":"b422de3e-02ef-4cb1-bccc-4dd9c9e51061"}],"creationTime":1625598084003,"lastAccessTime":1627409358694,"refreshTokens":[{"id":"51-0"},{"id":"51-3"},{"id":"51-4"}],"approvedScopes":[{"id":"45-0"}],"favoriteProjects":[{"id":"699a1fc2-cf43-47f4-b135-dd942f483020"},{"id":"4a7819b7-9ad1-489c-bc34-fe25f2bfe444"},{"id":"083291e5-2555-4522-91b9-ed26300f0163"},{"id":"6c4d8b1b-a482-4d39-816f-7632e2342219"},{"id":"4ba00747-a4c4-4cff-bf5c-4834c66543e2"},{"id":"7de182b9-17f3-4873-96f6-5c2d6c3602ad"},{"id":"19d012a3-740c-473e-b9c6-eebdea7ef4eb"},{"id":"f32d317d-dd12-4c8a-8046-c62a115883b5"}],"requiredTwoFactorAuthentication":false} \ No newline at end of file
diff --git a/admin/private/tokens/bbc64f86da832df652c4f2c9e61c11ddee1a94d29f4397954c89efb8c584e082 b/admin/private/tokens/bbc64f86da832df652c4f2c9e61c11ddee1a94d29f4397954c89efb8c584e082
new file mode 100644
index 0000000..82afd37
--- /dev/null
+++ b/admin/private/tokens/bbc64f86da832df652c4f2c9e61c11ddee1a94d29f4397954c89efb8c584e082
@@ -0,0 +1 @@
+{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","name":"Minteck","projectRoles":[{"type":"projectRole","id":"b4193c47-36e2-4670-92da-518143afa205","role":{"id":"6f29718b-aa71-4a29-8d58-e2cb080afd85","key":"system-admin","name":"System Admin"},"project":{"id":"0"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"e997fc29-7d13-4ef5-a3f6-b72e7715c329","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"699a1fc2-cf43-47f4-b135-dd942f483020"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"52c1b399-966a-42eb-a76b-cadaeb2c7f80","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"4a7819b7-9ad1-489c-bc34-fe25f2bfe444"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"24f6b0be-2641-4b44-853c-776446195486","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"083291e5-2555-4522-91b9-ed26300f0163"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"c6821ac9-27f6-4531-b35f-24074f60f0b4","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"6c4d8b1b-a482-4d39-816f-7632e2342219"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"a7fac0d5-05ab-4437-9f5e-b54f5b441ad0","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"4ba00747-a4c4-4cff-bf5c-4834c66543e2"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"ae1fa122-3341-44b0-a502-c3f3b719ef38","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"7de182b9-17f3-4873-96f6-5c2d6c3602ad"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"3937833a-e190-4080-a5b7-dcafede8e8a3","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"19d012a3-740c-473e-b9c6-eebdea7ef4eb"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"63d6ac8e-4089-497a-b2e8-cd74270382b5","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"f32d317d-dd12-4c8a-8046-c62a115883b5"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}}],"transitiveProjectRoles":[{"type":"projectRole","id":"3ecf236c-28fe-47fa-8e40-1c1567c036ec","role":{"id":"22d32b0e-d121-492b-a6ca-06f635a8dffe","key":"observer","name":"Observer"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"}},{"type":"projectRole","id":"b4193c47-36e2-4670-92da-518143afa205","role":{"id":"6f29718b-aa71-4a29-8d58-e2cb080afd85","key":"system-admin","name":"System Admin"},"project":{"id":"0"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"f9e5cdc3-b507-4cfc-a51e-8fa858cd932e","role":{"id":"22d32b0e-d121-492b-a6ca-06f635a8dffe","key":"observer","name":"Observer"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"}},{"type":"projectRole","id":"4efb0bb4-b1f2-4b51-a3d1-1aee7beed2c9","role":{"id":"c7a830b7-0a16-4b0c-b7e1-4a00a5e28436","key":"youtrack-issue-reader","name":"Issue Reader"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"}},{"type":"projectRole","id":"10601e43-73de-4f68-8e2f-2943f6103a6d","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"699a1fc2-cf43-47f4-b135-dd942f483020"},"owner":{"type":"userGroup","id":"f842fcc8-b3c8-4506-a0b8-95fd6bac9a99_team"}},{"type":"projectRole","id":"e997fc29-7d13-4ef5-a3f6-b72e7715c329","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"699a1fc2-cf43-47f4-b135-dd942f483020"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"401147df-43e9-4772-8a3b-7405cd20b5c4","role":{"id":"789ab258-ee38-45da-a1af-ea00a1cd9284","key":"youtrack-reporter","name":"Reporter"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"}},{"type":"projectRole","id":"a46ad04a-81f8-47a5-9733-a703a080c6bf","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"4a7819b7-9ad1-489c-bc34-fe25f2bfe444"},"owner":{"type":"userGroup","id":"6bdf22e4-9f87-4545-8f69-72938ef24fe8_team"}},{"type":"projectRole","id":"52c1b399-966a-42eb-a76b-cadaeb2c7f80","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"4a7819b7-9ad1-489c-bc34-fe25f2bfe444"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"d0e95745-7070-45b4-b852-c73a60494671","role":{"id":"789ab258-ee38-45da-a1af-ea00a1cd9284","key":"youtrack-reporter","name":"Reporter"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"}},{"type":"projectRole","id":"2381f69f-7453-4c77-a3a3-317eccefda60","role":{"id":"c7a830b7-0a16-4b0c-b7e1-4a00a5e28436","key":"youtrack-issue-reader","name":"Issue Reader"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"}},{"type":"projectRole","id":"6e29cc0f-76e0-4c60-b225-5ef3b537a996","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"083291e5-2555-4522-91b9-ed26300f0163"},"owner":{"type":"userGroup","id":"dbae3e35-4676-49fe-adf6-190e80f52f87_team"}},{"type":"projectRole","id":"24f6b0be-2641-4b44-853c-776446195486","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"083291e5-2555-4522-91b9-ed26300f0163"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"e3fc301a-2d34-447d-8a20-23479b8da39c","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"6c4d8b1b-a482-4d39-816f-7632e2342219"},"owner":{"type":"userGroup","id":"e7feeab4-eff5-45be-9047-3ec6fa55a5d6_team"}},{"type":"projectRole","id":"c6821ac9-27f6-4531-b35f-24074f60f0b4","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"6c4d8b1b-a482-4d39-816f-7632e2342219"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"1f8b31c1-c11c-4386-8ad9-12bd8d4f442c","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"4ba00747-a4c4-4cff-bf5c-4834c66543e2"},"owner":{"type":"userGroup","id":"79370bf5-0531-4b50-8407-a14536b304d6_team"}},{"type":"projectRole","id":"a7fac0d5-05ab-4437-9f5e-b54f5b441ad0","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"4ba00747-a4c4-4cff-bf5c-4834c66543e2"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"b8c1d9d9-9885-4f48-85d8-9fef53deccfe","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"7de182b9-17f3-4873-96f6-5c2d6c3602ad"},"owner":{"type":"userGroup","id":"cb84e48d-4eae-47d3-8a68-88168f479ef7_team"}},{"type":"projectRole","id":"ae1fa122-3341-44b0-a502-c3f3b719ef38","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"7de182b9-17f3-4873-96f6-5c2d6c3602ad"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"88b0026a-b537-467e-a9ea-418c6e46209c","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"19d012a3-740c-473e-b9c6-eebdea7ef4eb"},"owner":{"type":"userGroup","id":"c28131a2-4c1f-4426-8b6c-93850965354b_team"}},{"type":"projectRole","id":"3937833a-e190-4080-a5b7-dcafede8e8a3","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"19d012a3-740c-473e-b9c6-eebdea7ef4eb"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"bb6807fa-ae78-42fb-a4a3-674211b55a5e","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"f32d317d-dd12-4c8a-8046-c62a115883b5"},"owner":{"type":"userGroup","id":"8efe890f-541a-429d-977b-67e5a3bbdd65_team"}},{"type":"projectRole","id":"63d6ac8e-4089-497a-b2e8-cd74270382b5","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"f32d317d-dd12-4c8a-8046-c62a115883b5"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}}],"sourcedProjectRoles":[{"type":"sourcedProjectRole","id":"3ecf236c-28fe-47fa-8e40-1c1567c036ec","role":{"id":"22d32b0e-d121-492b-a6ca-06f635a8dffe","key":"observer","name":"Observer"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"},"sources":[{"type":"groupProjectRoleSource","group":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"}}]},{"type":"sourcedProjectRole","id":"b4193c47-36e2-4670-92da-518143afa205","role":{"id":"6f29718b-aa71-4a29-8d58-e2cb080afd85","key":"system-admin","name":"System Admin"},"project":{"id":"0"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"f9e5cdc3-b507-4cfc-a51e-8fa858cd932e","role":{"id":"22d32b0e-d121-492b-a6ca-06f635a8dffe","key":"observer","name":"Observer"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"},"sources":[{"type":"groupProjectRoleSource","group":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"}}]},{"type":"sourcedProjectRole","id":"4efb0bb4-b1f2-4b51-a3d1-1aee7beed2c9","role":{"id":"c7a830b7-0a16-4b0c-b7e1-4a00a5e28436","key":"youtrack-issue-reader","name":"Issue Reader"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"},"sources":[{"type":"groupProjectRoleSource","group":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"}}]},{"type":"sourcedProjectRole","id":"10601e43-73de-4f68-8e2f-2943f6103a6d","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"699a1fc2-cf43-47f4-b135-dd942f483020"},"owner":{"type":"userGroup","id":"f842fcc8-b3c8-4506-a0b8-95fd6bac9a99_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"f842fcc8-b3c8-4506-a0b8-95fd6bac9a99"}}]},{"type":"sourcedProjectRole","id":"e997fc29-7d13-4ef5-a3f6-b72e7715c329","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"699a1fc2-cf43-47f4-b135-dd942f483020"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"401147df-43e9-4772-8a3b-7405cd20b5c4","role":{"id":"789ab258-ee38-45da-a1af-ea00a1cd9284","key":"youtrack-reporter","name":"Reporter"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"},"sources":[{"type":"groupProjectRoleSource","group":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"}}]},{"type":"sourcedProjectRole","id":"a46ad04a-81f8-47a5-9733-a703a080c6bf","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"4a7819b7-9ad1-489c-bc34-fe25f2bfe444"},"owner":{"type":"userGroup","id":"6bdf22e4-9f87-4545-8f69-72938ef24fe8_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"6bdf22e4-9f87-4545-8f69-72938ef24fe8"}}]},{"type":"sourcedProjectRole","id":"52c1b399-966a-42eb-a76b-cadaeb2c7f80","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"4a7819b7-9ad1-489c-bc34-fe25f2bfe444"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"d0e95745-7070-45b4-b852-c73a60494671","role":{"id":"789ab258-ee38-45da-a1af-ea00a1cd9284","key":"youtrack-reporter","name":"Reporter"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"},"sources":[{"type":"groupProjectRoleSource","group":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"}}]},{"type":"sourcedProjectRole","id":"2381f69f-7453-4c77-a3a3-317eccefda60","role":{"id":"c7a830b7-0a16-4b0c-b7e1-4a00a5e28436","key":"youtrack-issue-reader","name":"Issue Reader"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"},"sources":[{"type":"groupProjectRoleSource","group":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"}}]},{"type":"sourcedProjectRole","id":"6e29cc0f-76e0-4c60-b225-5ef3b537a996","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"083291e5-2555-4522-91b9-ed26300f0163"},"owner":{"type":"userGroup","id":"dbae3e35-4676-49fe-adf6-190e80f52f87_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"dbae3e35-4676-49fe-adf6-190e80f52f87"}}]},{"type":"sourcedProjectRole","id":"24f6b0be-2641-4b44-853c-776446195486","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"083291e5-2555-4522-91b9-ed26300f0163"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"e3fc301a-2d34-447d-8a20-23479b8da39c","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"6c4d8b1b-a482-4d39-816f-7632e2342219"},"owner":{"type":"userGroup","id":"e7feeab4-eff5-45be-9047-3ec6fa55a5d6_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"e7feeab4-eff5-45be-9047-3ec6fa55a5d6"}}]},{"type":"sourcedProjectRole","id":"c6821ac9-27f6-4531-b35f-24074f60f0b4","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"6c4d8b1b-a482-4d39-816f-7632e2342219"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"1f8b31c1-c11c-4386-8ad9-12bd8d4f442c","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"4ba00747-a4c4-4cff-bf5c-4834c66543e2"},"owner":{"type":"userGroup","id":"79370bf5-0531-4b50-8407-a14536b304d6_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"79370bf5-0531-4b50-8407-a14536b304d6"}}]},{"type":"sourcedProjectRole","id":"a7fac0d5-05ab-4437-9f5e-b54f5b441ad0","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"4ba00747-a4c4-4cff-bf5c-4834c66543e2"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"b8c1d9d9-9885-4f48-85d8-9fef53deccfe","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"7de182b9-17f3-4873-96f6-5c2d6c3602ad"},"owner":{"type":"userGroup","id":"cb84e48d-4eae-47d3-8a68-88168f479ef7_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"cb84e48d-4eae-47d3-8a68-88168f479ef7"}}]},{"type":"sourcedProjectRole","id":"ae1fa122-3341-44b0-a502-c3f3b719ef38","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"7de182b9-17f3-4873-96f6-5c2d6c3602ad"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"88b0026a-b537-467e-a9ea-418c6e46209c","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"19d012a3-740c-473e-b9c6-eebdea7ef4eb"},"owner":{"type":"userGroup","id":"c28131a2-4c1f-4426-8b6c-93850965354b_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"c28131a2-4c1f-4426-8b6c-93850965354b"}}]},{"type":"sourcedProjectRole","id":"3937833a-e190-4080-a5b7-dcafede8e8a3","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"19d012a3-740c-473e-b9c6-eebdea7ef4eb"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"bb6807fa-ae78-42fb-a4a3-674211b55a5e","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"f32d317d-dd12-4c8a-8046-c62a115883b5"},"owner":{"type":"userGroup","id":"8efe890f-541a-429d-977b-67e5a3bbdd65_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"8efe890f-541a-429d-977b-67e5a3bbdd65"}}]},{"type":"sourcedProjectRole","id":"63d6ac8e-4089-497a-b2e8-cd74270382b5","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"f32d317d-dd12-4c8a-8046-c62a115883b5"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]}],"login":"Minteck","banned":false,"guest":false,"avatar":{"type":"gravatar","url":"https:\/\/jetbrains.minteck.ro.lt:1024\/hub\/hub\/api\/rest\/avatar\/74bca7d2-4694-477c-8bc1-9003315abbee"},"profile":{"avatar":{"type":"gravatar","url":"https:\/\/jetbrains.minteck.ro.lt:1024\/hub\/hub\/api\/rest\/avatar\/74bca7d2-4694-477c-8bc1-9003315abbee"},"email":{"type":"EmailJSON","verified":false,"email":"nekostarfan@gmail.com"},"locale":{"name":"fr","language":"fr"}},"groups":[{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"},{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"},{"type":"userGroup","id":"f842fcc8-b3c8-4506-a0b8-95fd6bac9a99_team"},{"type":"userGroup","id":"6bdf22e4-9f87-4545-8f69-72938ef24fe8_team"},{"type":"userGroup","id":"dbae3e35-4676-49fe-adf6-190e80f52f87_team"},{"type":"userGroup","id":"e7feeab4-eff5-45be-9047-3ec6fa55a5d6_team"},{"type":"userGroup","id":"79370bf5-0531-4b50-8407-a14536b304d6_team"},{"type":"userGroup","id":"cb84e48d-4eae-47d3-8a68-88168f479ef7_team"},{"type":"userGroup","id":"c28131a2-4c1f-4426-8b6c-93850965354b_team"},{"type":"userGroup","id":"8efe890f-541a-429d-977b-67e5a3bbdd65_team"}],"transitiveGroups":[{"type":"userGroup","id":"a14a66ed-e403-4b8a-89f0-80b34bbeb00f"},{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"},{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"},{"type":"userGroup","id":"f842fcc8-b3c8-4506-a0b8-95fd6bac9a99_team"},{"type":"userGroup","id":"6bdf22e4-9f87-4545-8f69-72938ef24fe8_team"},{"type":"userGroup","id":"dbae3e35-4676-49fe-adf6-190e80f52f87_team"},{"type":"userGroup","id":"e7feeab4-eff5-45be-9047-3ec6fa55a5d6_team"},{"type":"userGroup","id":"79370bf5-0531-4b50-8407-a14536b304d6_team"},{"type":"userGroup","id":"cb84e48d-4eae-47d3-8a68-88168f479ef7_team"},{"type":"userGroup","id":"c28131a2-4c1f-4426-8b6c-93850965354b_team"},{"type":"userGroup","id":"8efe890f-541a-429d-977b-67e5a3bbdd65_team"}],"teams":[{"type":"projectTeam","id":"f842fcc8-b3c8-4506-a0b8-95fd6bac9a99"},{"type":"projectTeam","id":"6bdf22e4-9f87-4545-8f69-72938ef24fe8"},{"type":"projectTeam","id":"dbae3e35-4676-49fe-adf6-190e80f52f87"},{"type":"projectTeam","id":"e7feeab4-eff5-45be-9047-3ec6fa55a5d6"},{"type":"projectTeam","id":"79370bf5-0531-4b50-8407-a14536b304d6"},{"type":"projectTeam","id":"cb84e48d-4eae-47d3-8a68-88168f479ef7"},{"type":"projectTeam","id":"c28131a2-4c1f-4426-8b6c-93850965354b"},{"type":"projectTeam","id":"8efe890f-541a-429d-977b-67e5a3bbdd65"}],"transitiveTeams":[{"type":"projectTeam","id":"f842fcc8-b3c8-4506-a0b8-95fd6bac9a99"},{"type":"projectTeam","id":"6bdf22e4-9f87-4545-8f69-72938ef24fe8"},{"type":"projectTeam","id":"dbae3e35-4676-49fe-adf6-190e80f52f87"},{"type":"projectTeam","id":"e7feeab4-eff5-45be-9047-3ec6fa55a5d6"},{"type":"projectTeam","id":"79370bf5-0531-4b50-8407-a14536b304d6"},{"type":"projectTeam","id":"cb84e48d-4eae-47d3-8a68-88168f479ef7"},{"type":"projectTeam","id":"c28131a2-4c1f-4426-8b6c-93850965354b"},{"type":"projectTeam","id":"8efe890f-541a-429d-977b-67e5a3bbdd65"}],"details":[{"type":"LoginuserdetailsJSON","id":"0c75d3d5-3ee4-45a8-be78-b13345c03a5e"}],"VCSUserNames":[{"name":"Minteck"},{"name":"freeziv.ytb@gmail.com"},{"name":"nekostarfan@gmail.com"}],"sshPublicKeys":[{"fingerPrint":"b6:57:40:30:2e:8e:57:0c:b9:e8:24:f1:84:0f:2c:dd"},{"fingerPrint":"e0:39:49:58:34:83:d4:63:7e:77:da:3c:c9:22:e3:6a"}],"licenses":[{"type":"license","id":"b422de3e-02ef-4cb1-bccc-4dd9c9e51061"}],"creationTime":1625598084003,"lastAccessTime":1627409358694,"refreshTokens":[{"id":"51-0"},{"id":"51-3"},{"id":"51-4"}],"approvedScopes":[{"id":"45-0"}],"favoriteProjects":[{"id":"699a1fc2-cf43-47f4-b135-dd942f483020"},{"id":"4a7819b7-9ad1-489c-bc34-fe25f2bfe444"},{"id":"083291e5-2555-4522-91b9-ed26300f0163"},{"id":"6c4d8b1b-a482-4d39-816f-7632e2342219"},{"id":"4ba00747-a4c4-4cff-bf5c-4834c66543e2"},{"id":"7de182b9-17f3-4873-96f6-5c2d6c3602ad"},{"id":"19d012a3-740c-473e-b9c6-eebdea7ef4eb"},{"id":"f32d317d-dd12-4c8a-8046-c62a115883b5"}],"requiredTwoFactorAuthentication":false} \ No newline at end of file
diff --git a/admin/private/tokens/cfd37ab50076706e20d0f4a19673fd93c957e4c18942e21f983e261ffd05f47c b/admin/private/tokens/cfd37ab50076706e20d0f4a19673fd93c957e4c18942e21f983e261ffd05f47c
new file mode 100644
index 0000000..82afd37
--- /dev/null
+++ b/admin/private/tokens/cfd37ab50076706e20d0f4a19673fd93c957e4c18942e21f983e261ffd05f47c
@@ -0,0 +1 @@
+{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","name":"Minteck","projectRoles":[{"type":"projectRole","id":"b4193c47-36e2-4670-92da-518143afa205","role":{"id":"6f29718b-aa71-4a29-8d58-e2cb080afd85","key":"system-admin","name":"System Admin"},"project":{"id":"0"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"e997fc29-7d13-4ef5-a3f6-b72e7715c329","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"699a1fc2-cf43-47f4-b135-dd942f483020"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"52c1b399-966a-42eb-a76b-cadaeb2c7f80","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"4a7819b7-9ad1-489c-bc34-fe25f2bfe444"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"24f6b0be-2641-4b44-853c-776446195486","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"083291e5-2555-4522-91b9-ed26300f0163"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"c6821ac9-27f6-4531-b35f-24074f60f0b4","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"6c4d8b1b-a482-4d39-816f-7632e2342219"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"a7fac0d5-05ab-4437-9f5e-b54f5b441ad0","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"4ba00747-a4c4-4cff-bf5c-4834c66543e2"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"ae1fa122-3341-44b0-a502-c3f3b719ef38","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"7de182b9-17f3-4873-96f6-5c2d6c3602ad"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"3937833a-e190-4080-a5b7-dcafede8e8a3","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"19d012a3-740c-473e-b9c6-eebdea7ef4eb"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"63d6ac8e-4089-497a-b2e8-cd74270382b5","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"f32d317d-dd12-4c8a-8046-c62a115883b5"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}}],"transitiveProjectRoles":[{"type":"projectRole","id":"3ecf236c-28fe-47fa-8e40-1c1567c036ec","role":{"id":"22d32b0e-d121-492b-a6ca-06f635a8dffe","key":"observer","name":"Observer"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"}},{"type":"projectRole","id":"b4193c47-36e2-4670-92da-518143afa205","role":{"id":"6f29718b-aa71-4a29-8d58-e2cb080afd85","key":"system-admin","name":"System Admin"},"project":{"id":"0"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"f9e5cdc3-b507-4cfc-a51e-8fa858cd932e","role":{"id":"22d32b0e-d121-492b-a6ca-06f635a8dffe","key":"observer","name":"Observer"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"}},{"type":"projectRole","id":"4efb0bb4-b1f2-4b51-a3d1-1aee7beed2c9","role":{"id":"c7a830b7-0a16-4b0c-b7e1-4a00a5e28436","key":"youtrack-issue-reader","name":"Issue Reader"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"}},{"type":"projectRole","id":"10601e43-73de-4f68-8e2f-2943f6103a6d","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"699a1fc2-cf43-47f4-b135-dd942f483020"},"owner":{"type":"userGroup","id":"f842fcc8-b3c8-4506-a0b8-95fd6bac9a99_team"}},{"type":"projectRole","id":"e997fc29-7d13-4ef5-a3f6-b72e7715c329","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"699a1fc2-cf43-47f4-b135-dd942f483020"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"401147df-43e9-4772-8a3b-7405cd20b5c4","role":{"id":"789ab258-ee38-45da-a1af-ea00a1cd9284","key":"youtrack-reporter","name":"Reporter"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"}},{"type":"projectRole","id":"a46ad04a-81f8-47a5-9733-a703a080c6bf","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"4a7819b7-9ad1-489c-bc34-fe25f2bfe444"},"owner":{"type":"userGroup","id":"6bdf22e4-9f87-4545-8f69-72938ef24fe8_team"}},{"type":"projectRole","id":"52c1b399-966a-42eb-a76b-cadaeb2c7f80","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"4a7819b7-9ad1-489c-bc34-fe25f2bfe444"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"d0e95745-7070-45b4-b852-c73a60494671","role":{"id":"789ab258-ee38-45da-a1af-ea00a1cd9284","key":"youtrack-reporter","name":"Reporter"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"}},{"type":"projectRole","id":"2381f69f-7453-4c77-a3a3-317eccefda60","role":{"id":"c7a830b7-0a16-4b0c-b7e1-4a00a5e28436","key":"youtrack-issue-reader","name":"Issue Reader"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"}},{"type":"projectRole","id":"6e29cc0f-76e0-4c60-b225-5ef3b537a996","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"083291e5-2555-4522-91b9-ed26300f0163"},"owner":{"type":"userGroup","id":"dbae3e35-4676-49fe-adf6-190e80f52f87_team"}},{"type":"projectRole","id":"24f6b0be-2641-4b44-853c-776446195486","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"083291e5-2555-4522-91b9-ed26300f0163"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"e3fc301a-2d34-447d-8a20-23479b8da39c","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"6c4d8b1b-a482-4d39-816f-7632e2342219"},"owner":{"type":"userGroup","id":"e7feeab4-eff5-45be-9047-3ec6fa55a5d6_team"}},{"type":"projectRole","id":"c6821ac9-27f6-4531-b35f-24074f60f0b4","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"6c4d8b1b-a482-4d39-816f-7632e2342219"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"1f8b31c1-c11c-4386-8ad9-12bd8d4f442c","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"4ba00747-a4c4-4cff-bf5c-4834c66543e2"},"owner":{"type":"userGroup","id":"79370bf5-0531-4b50-8407-a14536b304d6_team"}},{"type":"projectRole","id":"a7fac0d5-05ab-4437-9f5e-b54f5b441ad0","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"4ba00747-a4c4-4cff-bf5c-4834c66543e2"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"b8c1d9d9-9885-4f48-85d8-9fef53deccfe","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"7de182b9-17f3-4873-96f6-5c2d6c3602ad"},"owner":{"type":"userGroup","id":"cb84e48d-4eae-47d3-8a68-88168f479ef7_team"}},{"type":"projectRole","id":"ae1fa122-3341-44b0-a502-c3f3b719ef38","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"7de182b9-17f3-4873-96f6-5c2d6c3602ad"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"88b0026a-b537-467e-a9ea-418c6e46209c","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"19d012a3-740c-473e-b9c6-eebdea7ef4eb"},"owner":{"type":"userGroup","id":"c28131a2-4c1f-4426-8b6c-93850965354b_team"}},{"type":"projectRole","id":"3937833a-e190-4080-a5b7-dcafede8e8a3","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"19d012a3-740c-473e-b9c6-eebdea7ef4eb"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}},{"type":"projectRole","id":"bb6807fa-ae78-42fb-a4a3-674211b55a5e","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"f32d317d-dd12-4c8a-8046-c62a115883b5"},"owner":{"type":"userGroup","id":"8efe890f-541a-429d-977b-67e5a3bbdd65_team"}},{"type":"projectRole","id":"63d6ac8e-4089-497a-b2e8-cd74270382b5","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"f32d317d-dd12-4c8a-8046-c62a115883b5"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"}}],"sourcedProjectRoles":[{"type":"sourcedProjectRole","id":"3ecf236c-28fe-47fa-8e40-1c1567c036ec","role":{"id":"22d32b0e-d121-492b-a6ca-06f635a8dffe","key":"observer","name":"Observer"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"},"sources":[{"type":"groupProjectRoleSource","group":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"}}]},{"type":"sourcedProjectRole","id":"b4193c47-36e2-4670-92da-518143afa205","role":{"id":"6f29718b-aa71-4a29-8d58-e2cb080afd85","key":"system-admin","name":"System Admin"},"project":{"id":"0"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"f9e5cdc3-b507-4cfc-a51e-8fa858cd932e","role":{"id":"22d32b0e-d121-492b-a6ca-06f635a8dffe","key":"observer","name":"Observer"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"},"sources":[{"type":"groupProjectRoleSource","group":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"}}]},{"type":"sourcedProjectRole","id":"4efb0bb4-b1f2-4b51-a3d1-1aee7beed2c9","role":{"id":"c7a830b7-0a16-4b0c-b7e1-4a00a5e28436","key":"youtrack-issue-reader","name":"Issue Reader"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"},"sources":[{"type":"groupProjectRoleSource","group":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"}}]},{"type":"sourcedProjectRole","id":"10601e43-73de-4f68-8e2f-2943f6103a6d","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"699a1fc2-cf43-47f4-b135-dd942f483020"},"owner":{"type":"userGroup","id":"f842fcc8-b3c8-4506-a0b8-95fd6bac9a99_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"f842fcc8-b3c8-4506-a0b8-95fd6bac9a99"}}]},{"type":"sourcedProjectRole","id":"e997fc29-7d13-4ef5-a3f6-b72e7715c329","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"699a1fc2-cf43-47f4-b135-dd942f483020"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"401147df-43e9-4772-8a3b-7405cd20b5c4","role":{"id":"789ab258-ee38-45da-a1af-ea00a1cd9284","key":"youtrack-reporter","name":"Reporter"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"},"sources":[{"type":"groupProjectRoleSource","group":{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"}}]},{"type":"sourcedProjectRole","id":"a46ad04a-81f8-47a5-9733-a703a080c6bf","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"4a7819b7-9ad1-489c-bc34-fe25f2bfe444"},"owner":{"type":"userGroup","id":"6bdf22e4-9f87-4545-8f69-72938ef24fe8_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"6bdf22e4-9f87-4545-8f69-72938ef24fe8"}}]},{"type":"sourcedProjectRole","id":"52c1b399-966a-42eb-a76b-cadaeb2c7f80","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"4a7819b7-9ad1-489c-bc34-fe25f2bfe444"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"d0e95745-7070-45b4-b852-c73a60494671","role":{"id":"789ab258-ee38-45da-a1af-ea00a1cd9284","key":"youtrack-reporter","name":"Reporter"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"},"sources":[{"type":"groupProjectRoleSource","group":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"}}]},{"type":"sourcedProjectRole","id":"2381f69f-7453-4c77-a3a3-317eccefda60","role":{"id":"c7a830b7-0a16-4b0c-b7e1-4a00a5e28436","key":"youtrack-issue-reader","name":"Issue Reader"},"project":{"id":"0"},"owner":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"},"sources":[{"type":"groupProjectRoleSource","group":{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"}}]},{"type":"sourcedProjectRole","id":"6e29cc0f-76e0-4c60-b225-5ef3b537a996","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"083291e5-2555-4522-91b9-ed26300f0163"},"owner":{"type":"userGroup","id":"dbae3e35-4676-49fe-adf6-190e80f52f87_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"dbae3e35-4676-49fe-adf6-190e80f52f87"}}]},{"type":"sourcedProjectRole","id":"24f6b0be-2641-4b44-853c-776446195486","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"083291e5-2555-4522-91b9-ed26300f0163"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"e3fc301a-2d34-447d-8a20-23479b8da39c","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"6c4d8b1b-a482-4d39-816f-7632e2342219"},"owner":{"type":"userGroup","id":"e7feeab4-eff5-45be-9047-3ec6fa55a5d6_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"e7feeab4-eff5-45be-9047-3ec6fa55a5d6"}}]},{"type":"sourcedProjectRole","id":"c6821ac9-27f6-4531-b35f-24074f60f0b4","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"6c4d8b1b-a482-4d39-816f-7632e2342219"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"1f8b31c1-c11c-4386-8ad9-12bd8d4f442c","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"4ba00747-a4c4-4cff-bf5c-4834c66543e2"},"owner":{"type":"userGroup","id":"79370bf5-0531-4b50-8407-a14536b304d6_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"79370bf5-0531-4b50-8407-a14536b304d6"}}]},{"type":"sourcedProjectRole","id":"a7fac0d5-05ab-4437-9f5e-b54f5b441ad0","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"4ba00747-a4c4-4cff-bf5c-4834c66543e2"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"b8c1d9d9-9885-4f48-85d8-9fef53deccfe","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"7de182b9-17f3-4873-96f6-5c2d6c3602ad"},"owner":{"type":"userGroup","id":"cb84e48d-4eae-47d3-8a68-88168f479ef7_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"cb84e48d-4eae-47d3-8a68-88168f479ef7"}}]},{"type":"sourcedProjectRole","id":"ae1fa122-3341-44b0-a502-c3f3b719ef38","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"7de182b9-17f3-4873-96f6-5c2d6c3602ad"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"88b0026a-b537-467e-a9ea-418c6e46209c","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"19d012a3-740c-473e-b9c6-eebdea7ef4eb"},"owner":{"type":"userGroup","id":"c28131a2-4c1f-4426-8b6c-93850965354b_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"c28131a2-4c1f-4426-8b6c-93850965354b"}}]},{"type":"sourcedProjectRole","id":"3937833a-e190-4080-a5b7-dcafede8e8a3","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"19d012a3-740c-473e-b9c6-eebdea7ef4eb"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]},{"type":"sourcedProjectRole","id":"bb6807fa-ae78-42fb-a4a3-674211b55a5e","role":{"id":"00c3fe52-f270-4f4c-a4b3-1a75b5d809ff","key":"developer","name":"Developer"},"project":{"id":"f32d317d-dd12-4c8a-8046-c62a115883b5"},"owner":{"type":"userGroup","id":"8efe890f-541a-429d-977b-67e5a3bbdd65_team"},"sources":[{"type":"teamProjectRoleSource","team":{"type":"projectTeam","id":"8efe890f-541a-429d-977b-67e5a3bbdd65"}}]},{"type":"sourcedProjectRole","id":"63d6ac8e-4089-497a-b2e8-cd74270382b5","role":{"id":"c958f4e8-b994-4a32-8a31-f415c1e3ba20","key":"project-admin","name":"Project Admin"},"project":{"id":"f32d317d-dd12-4c8a-8046-c62a115883b5"},"owner":{"type":"user","id":"74bca7d2-4694-477c-8bc1-9003315abbee","login":"Minteck"},"sources":[{"type":"ownRoleSource"}]}],"login":"Minteck","banned":false,"guest":false,"avatar":{"type":"gravatar","url":"https:\/\/jetbrains.minteck.ro.lt:1024\/hub\/hub\/api\/rest\/avatar\/74bca7d2-4694-477c-8bc1-9003315abbee"},"profile":{"avatar":{"type":"gravatar","url":"https:\/\/jetbrains.minteck.ro.lt:1024\/hub\/hub\/api\/rest\/avatar\/74bca7d2-4694-477c-8bc1-9003315abbee"},"email":{"type":"EmailJSON","verified":false,"email":"nekostarfan@gmail.com"},"locale":{"name":"fr","language":"fr"}},"groups":[{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"},{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"},{"type":"userGroup","id":"f842fcc8-b3c8-4506-a0b8-95fd6bac9a99_team"},{"type":"userGroup","id":"6bdf22e4-9f87-4545-8f69-72938ef24fe8_team"},{"type":"userGroup","id":"dbae3e35-4676-49fe-adf6-190e80f52f87_team"},{"type":"userGroup","id":"e7feeab4-eff5-45be-9047-3ec6fa55a5d6_team"},{"type":"userGroup","id":"79370bf5-0531-4b50-8407-a14536b304d6_team"},{"type":"userGroup","id":"cb84e48d-4eae-47d3-8a68-88168f479ef7_team"},{"type":"userGroup","id":"c28131a2-4c1f-4426-8b6c-93850965354b_team"},{"type":"userGroup","id":"8efe890f-541a-429d-977b-67e5a3bbdd65_team"}],"transitiveGroups":[{"type":"userGroup","id":"a14a66ed-e403-4b8a-89f0-80b34bbeb00f"},{"type":"userGroup","id":"c04c8e8e-ea8d-46ec-aa15-e0f1054ae28c"},{"type":"userGroup","id":"a3f70725-860a-4bfd-bf7f-c9ac3825b6dc"},{"type":"userGroup","id":"f842fcc8-b3c8-4506-a0b8-95fd6bac9a99_team"},{"type":"userGroup","id":"6bdf22e4-9f87-4545-8f69-72938ef24fe8_team"},{"type":"userGroup","id":"dbae3e35-4676-49fe-adf6-190e80f52f87_team"},{"type":"userGroup","id":"e7feeab4-eff5-45be-9047-3ec6fa55a5d6_team"},{"type":"userGroup","id":"79370bf5-0531-4b50-8407-a14536b304d6_team"},{"type":"userGroup","id":"cb84e48d-4eae-47d3-8a68-88168f479ef7_team"},{"type":"userGroup","id":"c28131a2-4c1f-4426-8b6c-93850965354b_team"},{"type":"userGroup","id":"8efe890f-541a-429d-977b-67e5a3bbdd65_team"}],"teams":[{"type":"projectTeam","id":"f842fcc8-b3c8-4506-a0b8-95fd6bac9a99"},{"type":"projectTeam","id":"6bdf22e4-9f87-4545-8f69-72938ef24fe8"},{"type":"projectTeam","id":"dbae3e35-4676-49fe-adf6-190e80f52f87"},{"type":"projectTeam","id":"e7feeab4-eff5-45be-9047-3ec6fa55a5d6"},{"type":"projectTeam","id":"79370bf5-0531-4b50-8407-a14536b304d6"},{"type":"projectTeam","id":"cb84e48d-4eae-47d3-8a68-88168f479ef7"},{"type":"projectTeam","id":"c28131a2-4c1f-4426-8b6c-93850965354b"},{"type":"projectTeam","id":"8efe890f-541a-429d-977b-67e5a3bbdd65"}],"transitiveTeams":[{"type":"projectTeam","id":"f842fcc8-b3c8-4506-a0b8-95fd6bac9a99"},{"type":"projectTeam","id":"6bdf22e4-9f87-4545-8f69-72938ef24fe8"},{"type":"projectTeam","id":"dbae3e35-4676-49fe-adf6-190e80f52f87"},{"type":"projectTeam","id":"e7feeab4-eff5-45be-9047-3ec6fa55a5d6"},{"type":"projectTeam","id":"79370bf5-0531-4b50-8407-a14536b304d6"},{"type":"projectTeam","id":"cb84e48d-4eae-47d3-8a68-88168f479ef7"},{"type":"projectTeam","id":"c28131a2-4c1f-4426-8b6c-93850965354b"},{"type":"projectTeam","id":"8efe890f-541a-429d-977b-67e5a3bbdd65"}],"details":[{"type":"LoginuserdetailsJSON","id":"0c75d3d5-3ee4-45a8-be78-b13345c03a5e"}],"VCSUserNames":[{"name":"Minteck"},{"name":"freeziv.ytb@gmail.com"},{"name":"nekostarfan@gmail.com"}],"sshPublicKeys":[{"fingerPrint":"b6:57:40:30:2e:8e:57:0c:b9:e8:24:f1:84:0f:2c:dd"},{"fingerPrint":"e0:39:49:58:34:83:d4:63:7e:77:da:3c:c9:22:e3:6a"}],"licenses":[{"type":"license","id":"b422de3e-02ef-4cb1-bccc-4dd9c9e51061"}],"creationTime":1625598084003,"lastAccessTime":1627409358694,"refreshTokens":[{"id":"51-0"},{"id":"51-3"},{"id":"51-4"}],"approvedScopes":[{"id":"45-0"}],"favoriteProjects":[{"id":"699a1fc2-cf43-47f4-b135-dd942f483020"},{"id":"4a7819b7-9ad1-489c-bc34-fe25f2bfe444"},{"id":"083291e5-2555-4522-91b9-ed26300f0163"},{"id":"6c4d8b1b-a482-4d39-816f-7632e2342219"},{"id":"4ba00747-a4c4-4cff-bf5c-4834c66543e2"},{"id":"7de182b9-17f3-4873-96f6-5c2d6c3602ad"},{"id":"19d012a3-740c-473e-b9c6-eebdea7ef4eb"},{"id":"f32d317d-dd12-4c8a-8046-c62a115883b5"}],"requiredTwoFactorAuthentication":false} \ No newline at end of file
diff --git a/admin/session/index.php b/admin/session/index.php
index 3dbf45a..0f4ae89 100644
--- a/admin/session/index.php
+++ b/admin/session/index.php
@@ -1,6 +1,6 @@
-<?php
-
-var_dump($_GET);
-var_dump($_POST);
-var_dump($_SERVER);
+<?php
+
+var_dump($_GET);
+var_dump($_POST);
+var_dump($_SERVER);
die(); \ No newline at end of file