summaryrefslogtreecommitdiff
path: root/initial
diff options
context:
space:
mode:
authorMinteck <contact@minteck.org>2022-05-22 18:16:34 +0200
committerMinteck <contact@minteck.org>2022-05-22 18:16:34 +0200
commitbc4d21ddbc50a4295ad1be0f4797b09895a65fea (patch)
treef915c08fba577daf766628657558ce480790b06f /initial
downloadmultisocial-mane.tar.gz
multisocial-mane.tar.bz2
multisocial-mane.zip
Initial commitHEADmane
Diffstat (limited to 'initial')
-rw-r--r--initial/index.php395
1 files changed, 395 insertions, 0 deletions
diff --git a/initial/index.php b/initial/index.php
new file mode 100644
index 0000000..e7c3fb1
--- /dev/null
+++ b/initial/index.php
@@ -0,0 +1,395 @@
+<?php
+
+require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.locked.initial.php"; global $_PROFILE;
+
+if (isset($_GET['s']) && is_numeric($_GET['s']) && $_GET['s'] > -1 && $_GET['s'] < 6) {
+ $step = (int)$_GET['s'];
+} else {
+ header("Location: ?s=0");
+ die();
+}
+
+switch ($_GET['s']) {
+ case "0":
+ $title = "initial";
+ break;
+ case "1":
+ $title = "initial.1";
+ break;
+ case "2":
+ $title = "initial.2";
+ break;
+ case "3":
+ $title = "initial.3";
+ break;
+ case "4":
+ $title = "initial.4";
+ break;
+ default:
+ break;
+}
+
+if ($step >= 3) {
+ if (!isset($_GET['s2-display']) || !is_string($_GET['s2-display']) || trim($_GET['s2-display']) === "") header("Location: ?s=2") and die;
+ if (!isset($_GET['s2-username']) || !is_string($_GET['s2-username']) || trim($_GET['s2-username']) === "") header("Location: ?s=2") and die;
+ if (!isset($_GET['s2-plural']) || trim($_GET['s2-plural']) === "" || !is_numeric($_GET['s2-plural'])) header("Location: ?s=2") and die;
+
+ $display = substr(str_replace("\"", "''", strip_tags($_GET['s2-display'])), 0, 30);
+ $username = preg_replace("/\.+/mi", ".", preg_replace("/[^a-z\d]+/mi", ".", substr(str_replace("\"", "''", strip_tags($_GET['s2-username'])), 0, 30)));
+ $plural = (int)$_GET['s2-plural'];
+
+ if ($username === ".") header("Location: ?s=2") and die;
+ if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/" . $username) || $username === "system" || $username === "users.json" || str_contains($username, "multisocial")) header("Location: ?s=2&s2-display=" . urlencode($display) . "&s2-username=" . urlencode($username) . "&s3-taken" . ($plural === 1 ? "&s2-plural=1" : "")) and die;
+
+ if ($plural === 0 && $step === 3) {
+ header("Location: ?s=4&s2-display=" . urlencode($display) . "&s2-username=" . urlencode($username) . "&s2-plural=0&s3-members[0]=&s3-pluralkit=&s2-plural=0") and die;
+ }
+
+ if ($step >= 4) {
+ if (!isset($_GET['s3-members']) || !is_array($_GET['s3-members'])) header("Location: ?s=3&s2-display=" . urlencode($display) . "&s2-username=" . urlencode($username) . ($plural === 1 ? "&s2-plural=1" : "")) and die;
+ if (!isset($_GET['s3-pluralkit']) || !is_string($_GET['s3-pluralkit'])) header("Location: ?s=3&s2-display=" . urlencode($display) . "&s2-username=" . urlencode($username) . ($plural === 1 ? "&s2-plural=1" : "")) and die;
+
+ if ($plural === 1) {
+ if (trim($_GET['s3-members'][0]) === "" && strlen(trim($_GET['s3-pluralkit'])) !== 5 && strlen(trim($_GET['s3-pluralkit'])) !== 18) header("Location: ?s=3&s2-display=" . urlencode($display) . "&s2-username=" . urlencode($username) . "&s2-plural=1") and die;
+ }
+ }
+
+ if ($step === 5) {
+ if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/" . $username)) mkdir($_SERVER['DOCUMENT_ROOT'] . "/data/" . $username);
+ if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/" . $username . "/posts")) mkdir($_SERVER['DOCUMENT_ROOT'] . "/data/" . $username . "/posts");
+ if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/" . $username . "/settings")) mkdir($_SERVER['DOCUMENT_ROOT'] . "/data/" . $username . "/settings");
+
+ $members = [];
+ foreach ($_GET['s3-members'] as $member) {
+ $members[] = [
+ 'fronting' => false,
+ 'name' => substr(str_replace("\"", "''", strip_tags($member)), 0, 30),
+ 'picture' => null,
+ 'proxy' => []
+ ];
+ }
+
+ if (trim($_GET['s3-pluralkit']) !== "") {
+ $system = json_decode(file_get_contents("https://api.pluralkit.me/v2/systems/" . $_GET['s3-pluralkit']), true);
+ $sysmembers = json_decode(file_get_contents("https://api.pluralkit.me/v2/systems/" . $_GET['s3-pluralkit'] . "/members"), true);
+ $sysfronters = json_decode(file_get_contents("https://api.pluralkit.me/v2/systems/" . $_GET['s3-pluralkit'] . "/fronters"), true);
+
+ $fronters = [];
+ foreach ($sysfronters['members'] as $fronter) {
+ $fronters[] = $fronter['id'];
+ }
+
+ $members = [];
+ foreach ($sysmembers as $member) {
+ $members[] = [
+ 'fronting' => in_array($member['id'], $fronters),
+ 'name' => substr(str_replace("\"", "''", strip_tags($member["display_name"] ?? $member["name"])), 0, 30),
+ 'picture' => $member["avatar_url"],
+ 'proxy' => $member["proxy_tags"]
+ ];
+ }
+ }
+
+ file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/" . $username . "/settings/plurality.json", json_encode([
+ "plural" => $plural === 1,
+ "picture" => trim($_GET['s3-pluralkit']) !== "" ? ($system['avatar_url'] ?? null) : null,
+ "displayname" => trim($_GET['s3-pluralkit']) !== "" ? ($system['name'] ?? $display) : $display,
+ "pluralkit" => trim($_GET['s3-pluralkit']) !== "" ? $_GET['s3-pluralkit'] : null,
+ "members" => count($members) > 0 ? $members : null
+ ]));
+ $users = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/users.json"), true);
+ $users[$_PROFILE['id']] = $username;
+ file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/users.json", json_encode($users));
+ header("Location: /") and die();
+ }
+}
+
+require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/gui/header.initial.php"; global $lang; global $_PROFILE; global $Parsedown;
+
+?>
+
+<?php if ($step === 0): ?>
+<div class="container text-center">
+ <br>
+ <h1><?= $lang["intro"]["s0"]["title"] ?></h1>
+ <h3><?= $lang["intro"]["s0"]["tagline"] ?></h3>
+
+ <?php $users = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/users.json"), true);
+ if (in_array($_PROFILE['id'], array_keys($users)) && file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/" . $users[$_PROFILE['id']])): ?>
+ <div class="alert alert-warning">
+ <?= $lang['intro']['already'] ?>
+ </div>
+ <?php endif; ?>
+
+ <p><?= $lang["intro"]["s0"]["step"] ?></p>
+ <p>
+ <a href="?s=1" class="btn btn-primary"><?= $lang["intro"]["s0"]["start"] ?></a>
+ </p>
+ <p class="small text-muted"><?= $lang["intro"]["s0"]["disclaimer"] ?></p>
+</div>
+<?php elseif ($step === 1): ?>
+ <div class="container text-center">
+ <br>
+ <h1><?= $lang["intro"]["s1"]["title"] ?></h1>
+ <p><?= $lang["intro"]["s1"]["step"] ?></p>
+ <div class="tos text-left">
+ <?php
+
+ global $langp;
+ global $Parsedown;
+
+ if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/includes/terms' . $langp . '.md')) {
+ echo($Parsedown->text(file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/includes/terms/' . $langp . '.md')));
+ } else {
+ echo($Parsedown->text(file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/includes/terms/en.md')));
+ }
+
+ ?>
+ </div>
+ <br>
+ <p>
+ <a href="?s=2" class="btn btn-primary"><?= $lang["intro"]["s1"]["start"] ?></a>
+ </p>
+ <p class="small text-muted"><?= $lang["intro"]["s1"]["disclaimer"] ?></p>
+ </div>
+<?php elseif ($step === 2): ?>
+ <div class="container text-center">
+ <br>
+ <h1><?= $lang["intro"]["s2"]["title"] ?></h1>
+ <p><?= $lang["intro"]["s2"]["step"] ?></p>
+
+ <div class="plural-on">
+ <div class="alert alert-warning text-left">
+ <b><?= $lang["intro"]["s2"]["plural-disclaimer"] ?></b><br>
+ <?= str_replace("%1", "<a target='_blank' href='https://pluralkit.me'>PluralKit</a>", $lang["intro"]["s2"]["system"]) ?>
+ </div>
+ </div>
+
+ <?php if (isset($_GET['s3-taken']) && isset($_GET['s2-username'])): ?>
+ <div class="alert alert-danger text-left">
+ <?= str_replace("%1", strip_tags($_GET['s2-username']), $lang["intro"]["s2"]["taken"]) ?>
+ </div>
+ <?php endif; ?>
+
+ <form action="">
+ <input maxlength="30" class="form-control" type="text" autocomplete="off" name="s2-display" onblur="autofillUsername();" onchange="autofillUsername();" placeholder="<?= $lang["intro"]["s2"]["display"] ?>"
+ <?php if (isset($_GET['s2-display'])): ?>
+ value="<?= str_replace('"', "\\\"", strip_tags($_GET['s2-display'])) ?>"
+ <?php endif; ?>><br>
+ <input maxlength="30" type="text" autocomplete="off" name="s2-username" onclick="correctUsername();" onkeyup="correctUsername();" onkeydown="correctUsername();" class="form-control" placeholder="<?= $lang["intro"]["s2"]["username"] ?>"
+ <?php if (isset($_GET['s2-username'])): ?>
+ value="<?= str_replace('"', "\\\"", strip_tags($_GET['s2-username'])) ?>"
+ <?php endif; ?>>
+ <input type="hidden" autocomplete="off" name="s2-plural" value="0">
+ <input type="hidden" autocomplete="off" name="s" value="3">
+
+ <br>
+ <p>
+ <input type="submit" id="submit" class="btn btn-primary disabled" value="<?= $lang["intro"]["s2"]["start"] ?>">
+ </p>
+ </form>
+ <p class="small text-muted">
+ <span class="plural-off"><a href="#" onclick="enablePlural();"><?= $lang["intro"]["s2"]["plural1"] ?></a> <?= $lang["intro"]["s2"]["plural2"] ?></span>
+ <a href="#" class="plural-on" onclick="disablePlural();"><?= $lang["intro"]["s2"]["plural3"] ?></a><br>
+ <?= str_replace("%1", $_PROFILE['profile']['email']['email'], $lang["intro"]["s2"]["disclaimer"]) ?>
+ </p>
+ </div>
+
+ <script>
+ function autofillUsername() {
+ if (document.getElementsByName("s2-username")[0].value.trim() === "") {
+ disp = document.getElementsByName("s2-display")[0].value;
+ document.getElementsByName("s2-username")[0].value = disp.toLowerCase().replace(/[^a-z0-9]+/gmi, ".").replace(/\.+/gmi, ".").replace(/([a-z.]+)\.$/gmi, "$1");
+ }
+ checkIfButtonCanBeEnabled();
+ }
+
+ function correctUsername() {
+ document.getElementsByName("s2-username")[0].value = document.getElementsByName("s2-username")[0].value.toLowerCase().replace(/[^a-z0-9]+/gmi, ".").replace(/\.+/gmi, ".");
+ checkIfButtonCanBeEnabled();
+ }
+
+ function enablePlural() {
+ document.getElementsByName("s2-plural")[0].value = "1";
+ Array.from(document.getElementsByClassName("plural-off")).forEach((i) => {
+ i.style.display = "none";
+ });
+ Array.from(document.getElementsByClassName("plural-on")).forEach((i) => {
+ i.style.display = "initial";
+ });
+ }
+
+ function checkIfButtonCanBeEnabled() {
+ if (document.getElementsByName("s2-username")[0].value.trim().length > 0 && document.getElementsByName("s2-display")[0].value.trim().length > 0) {
+ document.getElementById("submit").classList.remove("disabled");
+ } else {
+ document.getElementById("submit").classList.add("disabled");
+ }
+ }
+
+ function disablePlural() {
+ document.getElementsByName("s2-plural")[0].value = "0";
+ Array.from(document.getElementsByClassName("plural-off")).forEach((i) => {
+ i.style.display = "initial";
+ });
+ Array.from(document.getElementsByClassName("plural-on")).forEach((i) => {
+ i.style.display = "none";
+ });
+ }
+
+ checkIfButtonCanBeEnabled();
+ <?php if (isset($_GET['s2-plural']) && $_GET['s2-plural'] === "1"): ?>
+ enablePlural();
+ <?php endif; ?>
+ </script>
+<?php elseif ($step === 3): ?>
+ <div class="container text-center">
+ <br>
+ <h1><?= $lang["intro"]["s3"]["title"] ?></h1>
+ <p><?= $lang["intro"]["s3"]["step"] ?></p>
+ <p class="text-muted small">
+ <?= str_replace("%1", '<a href="' . "?s=4&s2-display=" . urlencode($display) . "&s2-username=" . urlencode($username) . "&s2-plural=0&s3-members[0]=&s3-pluralkit=&s2-plural=0" . '">' . $lang['intro']['s3']['back-action'] . '</a>', $lang['intro']['s3']['back']) ?>
+ </p>
+ <form action="">
+ <h3><?= $lang["intro"]["s3"]["pluralkit"] ?></h3>
+ <p><?= $lang["intro"]["s3"]["pk-instructions"] ?></p>
+ <input maxlength="18" type="text" autocomplete="off" onchange="displayPluralKit();" onkeydown="pluralkitIdCheck();" onkeyup="pluralkitIdCheck();" name="s3-pluralkit" class="form-control" placeholder="<?= $lang["intro"]["s3"]["pk-system"] ?>"
+ <?php if (isset($_GET['s3-pluralkit'])): ?>
+ value="<?= str_replace('"', "\\\"", strip_tags($_GET['s3-pluralkit'])) ?>"
+ <?php endif; ?>>
+ <div id="pk-system-info" class="small text-left" style="text-align:left !important;"><?= $lang["intro"]["s3"]["pk-refresh-intro"] ?></div>
+ <br>
+
+ <h3><?= $lang["intro"]["s3"]["manual"] ?></h3>
+ <p><?= $lang["intro"]["s3"]["manual-or-pk"] ?></p>
+ <div id="system-members">
+ <input onkeydown="systemMembersList();" onkeyup="systemMembersList();" maxlength="30" type="text" autocomplete="off" name="s3-members[0]" data-system-member="0" class="form-control" placeholder="<?= $lang["intro"]["s3"]["manual-system"] ?>">
+ </div>
+ <br>
+
+ <input type="hidden" autocomplete="off" name="s" value="4">
+ <input type="hidden" autocomplete="off" name="s2-username" value="<?= $_GET['s2-username'] ?>">
+ <input type="hidden" autocomplete="off" name="s2-display" value="<?= $_GET['s2-display'] ?>">
+ <input type="hidden" autocomplete="off" name="s2-plural" value="1">
+
+ <p>
+ <input type="submit" id="submit" class="btn btn-primary disabled" value="<?= $lang["intro"]["s2"]["start"] ?>">
+ </p>
+ </form>
+ </div>
+
+<script>
+ pluralkitOkay = false;
+
+ function pluralkitIdCheck() {
+ let el = document.getElementsByName("s3-pluralkit")[0];
+ el.value = el.value.toLowerCase().replace(/(([a-z]{1,5}).*|(\d{1,18}).*)/gm, "$2$3")
+ }
+
+ function systemMembersList() {
+ try {
+ if (document.querySelector("#system-members *:nth-last-child(1)").value === "") {
+ if (document.querySelector("#system-members *:nth-last-child(2)").value === "") {
+ document.querySelector("#system-members *:nth-last-child(1)").outerHTML = "";
+ }
+ } else {
+ let id = document.querySelector("#system-members *:nth-last-child(1)").getAttribute("data-system-member") - 1 + 2;
+ document.querySelector("#system-members").insertAdjacentHTML('beforeend', '<input onkeydown="systemMembersList();" onkeyup="systemMembersList();" maxlength="30" type="text" autocomplete="off" name="s3-members[' + id + ']" data-system-member="' + id + '" class="form-control" placeholder="<?= $lang["intro"]["s3"]["manual-system"] ?>">');
+ }
+ checkIfButtonCanBeEnabled();
+ } catch (e) {}
+ }
+
+ function checkIfButtonCanBeEnabled() {
+ if (document.getElementsByName("s3-members[0]")[0].value.trim().length > 0 || pluralkitOkay) {
+ document.getElementById("submit").classList.remove("disabled");
+ } else {
+ document.getElementById("submit").classList.add("disabled");
+ }
+ }
+
+ function displayPluralKit() {
+ pluralkitOkay = false;
+
+ if (document.getElementsByName("s3-pluralkit")[0].value.trim().length === 5 || document.getElementsByName("s3-pluralkit")[0].value.trim().length === 18) {
+ document.getElementById("pk-system-info").classList.remove("text-danger");
+ document.getElementById("pk-system-info").classList.remove("text-muted");
+ document.getElementById("pk-system-info").classList.add("text-muted");
+ document.getElementById("pk-system-info").innerText = "<?= $lang["intro"]["s3"]["pk-refresh-loading"] ?>";
+ window.fetch("https://api.pluralkit.me/v2/systems/" + document.getElementsByName("s3-pluralkit")[0].value).then((a) => {
+ a.text().then((b) => {
+ data = JSON.parse(b);
+ window.fetch("https://api.pluralkit.me/v2/systems/" + document.getElementsByName("s3-pluralkit")[0].value + "/members").then((a) => {
+ a.text().then((b) => {
+ members = JSON.parse(b);
+ if (data.code) {
+ document.getElementById("pk-system-info").classList.remove("text-danger");
+ document.getElementById("pk-system-info").classList.remove("text-muted");
+ document.getElementById("pk-system-info").classList.add("text-danger");
+ document.getElementById("pk-system-info").innerText = "<?= $lang["intro"]["s3"]["pk-refresh-notfound"] ?>";
+ } else {
+ name = data.name !== null ? data.name.replaceAll("<", "&lt;").replaceAll(">", "&gt;") : "";
+ document.getElementById("pk-system-info").classList.remove("text-danger");
+ document.getElementById("pk-system-info").classList.remove("text-muted");
+ pluralkitOkay = true;
+ checkIfButtonCanBeEnabled();
+ if (name.trim() !== "") {
+ if (members.length > 1) {
+ document.getElementById("pk-system-info").innerHTML = "<?= $lang["intro"]["s3"]["pk-refresh-found"] ?> " + name + " (<code>" + data.id + "</code>), " + members.length + " <?= $lang['intro']['s3']['pk-refresh-multiple'] ?>";
+ } else {
+ document.getElementById("pk-system-info").innerHTML = "<?= $lang["intro"]["s3"]["pk-refresh-found"] ?> " + name + " (<code>" + data.id + "</code>), " + members.length + " <?= $lang['intro']['s3']['pk-refresh-single'] ?>";
+ }
+ } else {
+ if (members.length > 1) {
+ document.getElementById("pk-system-info").innerHTML = "<?= $lang["intro"]["s3"]["pk-refresh-found"] ?> <code>" + data.id + "</code>, " + members.length + " <?= $lang['intro']['s3']['pk-refresh-multiple'] ?>";
+ } else {
+ document.getElementById("pk-system-info").innerHTML = "<?= $lang["intro"]["s3"]["pk-refresh-found"] ?> <code>" + data.id + "</code>, " + members.length + " <?= $lang['intro']['s3']['pk-refresh-multiple'] ?>";
+ }
+ }
+ }
+ })
+ }).catch(() => {
+ document.getElementById("pk-system-info").classList.remove("text-danger");
+ document.getElementById("pk-system-info").classList.remove("text-muted");
+ document.getElementById("pk-system-info").classList.add("text-danger");
+ document.getElementById("pk-system-info").innerText = "<?= $lang["intro"]["s3"]["pk-refresh-error"] ?>";
+ });
+ });
+ }).catch(() => {
+ document.getElementById("pk-system-info").classList.remove("text-danger");
+ document.getElementById("pk-system-info").classList.remove("text-muted");
+ document.getElementById("pk-system-info").classList.add("text-danger");
+ document.getElementById("pk-system-info").innerText = "<?= $lang["intro"]["s3"]["pk-refresh-error"] ?>";
+ });
+ } else {
+ document.getElementById("pk-system-info").classList.remove("text-danger");
+ document.getElementById("pk-system-info").classList.remove("text-muted");
+ document.getElementById("pk-system-info").innerText = "<?= $lang["intro"]["s3"]["pk-refresh-intro"] ?>";
+ }
+
+ checkIfButtonCanBeEnabled();
+ }
+
+ checkIfButtonCanBeEnabled();
+ pluralkitIdCheck();
+ displayPluralKit();
+</script>
+<?php elseif ($step === 4): ?>
+ <div class="container text-center">
+ <br>
+ <h1><?= $lang["intro"]["s4"]["title"] ?></h1>
+ <p><?= $lang["intro"]["s4"]["step"] ?></p>
+ <p>
+ <?php
+
+ $sys = "";
+ foreach ($_GET['s3-members'] as $id => $member) {
+ $sys .= "&s3-members[$id]=$member";
+ }
+
+ ?>
+ <a href="?s=5&s2-username=<?= $_GET['s2-username'] ?>&s2-display=<?= $_GET['s2-display'] ?>&s2-plural=<?= $_GET['s2-plural'] ?>&s3-pluralkit=<?= $_GET['s3-pluralkit'] . $sys ?>" class="btn btn-primary"><?= $lang["intro"]["s4"]["start"] ?></a>
+ </p>
+ <p class="small text-muted"><?= $lang["intro"]["s4"]["disclaimer"] ?></p>
+ </div>
+<?php endif; ?> \ No newline at end of file