From 9f2841220aa1e5e2b614d62f946842374a2ea405 Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 11 Sep 2023 03:38:21 +0300 Subject: [PATCH] redirect user to welcome / access level page on first visit #1 --- src/public/action.php | 55 ++++++++ src/public/download.php | 289 +++++++++++++++++++++------------------- src/public/edit.php | 8 ++ src/public/faq.php | 15 +++ src/public/index.php | 8 ++ src/public/magnet.php | 8 ++ src/public/node.php | 15 +++ src/public/welcome.php | 4 +- 8 files changed, 263 insertions(+), 139 deletions(-) diff --git a/src/public/action.php b/src/public/action.php index 8a53db0..82e8414 100644 --- a/src/public/action.php +++ b/src/public/action.php @@ -55,6 +55,14 @@ switch (isset($_GET['target']) ? urldecode($_GET['target']) : false) $response->message = _('Could not init user info'); } + // On first visit, redirect user to the welcome page with access level question + else if (is_null($user->public)) + { + header( + sprintf('Location: %s/welcome.php', WEBSITE_URL) + ); + } + // Render icon else { @@ -105,6 +113,14 @@ switch (isset($_GET['target']) ? urldecode($_GET['target']) : false) $response->message = _('Could not init user info'); } + // On first visit, redirect user to the welcome page with access level question + else if (is_null($user->public)) + { + header( + sprintf('Location: %s/welcome.php', WEBSITE_URL) + ); + } + // Magnet comment exists else if (!$magnetComment = $db->getMagnetComment(isset($_GET['magnetCommentId']) && $_GET['magnetCommentId'] > 0 ? (int) $_GET['magnetCommentId'] : 0)) { @@ -186,6 +202,14 @@ switch (isset($_GET['target']) ? urldecode($_GET['target']) : false) $response->message = _('Could not init user info'); } + // On first visit, redirect user to the welcome page with access level question + else if (is_null($user->public)) + { + header( + sprintf('Location: %s/welcome.php', WEBSITE_URL) + ); + } + // Magnet comment exists else if (!$magnetComment = $db->getMagnetComment(isset($_GET['magnetCommentId']) && $_GET['magnetCommentId'] > 0 ? (int) $_GET['magnetCommentId'] : 0)) { @@ -256,6 +280,14 @@ switch (isset($_GET['target']) ? urldecode($_GET['target']) : false) $response->message = _('Could not init user info'); } + // On first visit, redirect user to the welcome page with access level question + else if (is_null($user->public)) + { + header( + sprintf('Location: %s/welcome.php', WEBSITE_URL) + ); + } + // Magnet exists else if (!$magnet = $db->getMagnet(isset($_GET['magnetId']) && $_GET['magnetId'] > 0 ? (int) $_GET['magnetId'] : 0)) { @@ -342,6 +374,21 @@ switch (isset($_GET['target']) ? urldecode($_GET['target']) : false) $response->message = _('Could not init user session'); } + // Get user + else if (!$user = $db->getUser($userId)) + { + $response->success = false; + $response->message = _('Could not init user info'); + } + + // On first visit, redirect user to the welcome page with access level question + else if (is_null($user->public)) + { + header( + sprintf('Location: %s/welcome.php', WEBSITE_URL) + ); + } + // Magnet exists else if (!$magnet = $db->getMagnet(isset($_GET['magnetId']) && $_GET['magnetId'] > 0 ? (int) $_GET['magnetId'] : 0)) { @@ -415,6 +462,14 @@ switch (isset($_GET['target']) ? urldecode($_GET['target']) : false) $response->message = _('Could not init user info'); } + // On first visit, redirect user to the welcome page with access level question + else if (is_null($user->public)) + { + header( + sprintf('Location: %s/welcome.php', WEBSITE_URL) + ); + } + // Validate link if (empty($_GET['magnet'])) { diff --git a/src/public/download.php b/src/public/download.php index 347f13c..bc8663e 100644 --- a/src/public/download.php +++ b/src/public/download.php @@ -30,183 +30,198 @@ $response = (object) ] ]; - // Yggdrasil connections only - if (!preg_match(YGGDRASIL_HOST_REGEX, $_SERVER['REMOTE_ADDR'])) - { - $response->success = false; - $response->message = _('Yggdrasil connection required for this action'); - } +// Yggdrasil connections only +if (!preg_match(YGGDRASIL_HOST_REGEX, $_SERVER['REMOTE_ADDR'])) +{ + $response->success = false; + $response->message = _('Yggdrasil connection required for this action'); +} - // Init session - else if (!$userId = $db->initUserId($_SERVER['REMOTE_ADDR'], USER_DEFAULT_APPROVED, time())) - { - $response->success = false; - $response->message = _('Could not init user session'); - } +// Init session +else if (!$userId = $db->initUserId($_SERVER['REMOTE_ADDR'], USER_DEFAULT_APPROVED, time())) +{ + $response->success = false; + $response->message = _('Could not init user session'); +} - // Magnet exists - else if (!$magnet = $db->getMagnet(isset($_GET['magnetId']) && $_GET['magnetId'] > 0 ? (int) $_GET['magnetId'] : 0)) - { - $response->success = false; - $response->message = _('Requested magnet not found'); - } +// Magnet exists +else if (!$magnet = $db->getMagnet(isset($_GET['magnetId']) && $_GET['magnetId'] > 0 ? (int) $_GET['magnetId'] : 0)) +{ + $response->success = false; + $response->message = _('Requested magnet not found'); +} - // Access allowed - else if (!($_SERVER['REMOTE_ADDR'] == $db->getUser($magnet->userId)->address || in_array($_SERVER['REMOTE_ADDR'], MODERATOR_IP_LIST) || ($magnet->public && $magnet->approved))) { +// Access allowed +else if (!($_SERVER['REMOTE_ADDR'] == $db->getUser($magnet->userId)->address || in_array($_SERVER['REMOTE_ADDR'], MODERATOR_IP_LIST) || ($magnet->public && $magnet->approved))) { - $response->success = false; - $response->message = _('Magnet not available for this action'); - } + $response->success = false; + $response->message = _('Magnet not available for this action'); +} - // Request valid - else - { - // Update download stats - $db->addMagnetDownload($magnet->magnetId, $userId, time()); +// Get user +else if (!$user = $db->getUser($userId)) +{ + $response->success = false; + $response->message = _('Could not init user info'); +} - // Build magnet link - $link = (object) - [ - 'magnet' => [], - 'direct' => [], - ]; +// On first visit, redirect user to the welcome page with access level question +else if (is_null($user->public)) +{ + header( + sprintf('Location: %s/welcome.php', WEBSITE_URL) + ); +} + +// Request valid +else +{ + // Update download stats + $db->addMagnetDownload($magnet->magnetId, $userId, time()); + + // Build magnet link + $link = (object) + [ + 'magnet' => [], + 'direct' => [], + ]; - /// Exact Topic - $xt = []; + /// Exact Topic + $xt = []; - foreach ($db->findMagnetToInfoHashByMagnetId($magnet->magnetId) as $result) + foreach ($db->findMagnetToInfoHashByMagnetId($magnet->magnetId) as $result) + { + if ($infoHash = $db->getInfoHash($result->infoHashId)) { - if ($infoHash = $db->getInfoHash($result->infoHashId)) + switch ($infoHash->version) { - switch ($infoHash->version) - { - case 1: + case 1: - $xt[] = sprintf('xt=urn:btih:%s', $infoHash->value); + $xt[] = sprintf('xt=urn:btih:%s', $infoHash->value); - break; + break; - case 2: + case 2: - $xt[] = sprintf('xt=urn:btmh:1220%s', $infoHash->value); + $xt[] = sprintf('xt=urn:btmh:1220%s', $infoHash->value); - break; - } + break; } } + } - $link->magnet[] = sprintf('magnet:?%s', implode('&', $xt)); - - /// Display Name - $link->magnet[] = sprintf('dn=%s', urlencode($magnet->dn)); - - // Keyword Topic - $kt = []; + $link->magnet[] = sprintf('magnet:?%s', implode('&', $xt)); - foreach ($db->findKeywordTopicByMagnetId($magnet->magnetId) as $result) - { - $kt[] = urlencode($db->getKeywordTopic($result->keywordTopicId)->value); - } + /// Display Name + $link->magnet[] = sprintf('dn=%s', urlencode($magnet->dn)); - $link->magnet[] = sprintf('kt=%s', implode('+', $kt)); + // Keyword Topic + $kt = []; - /// Address Tracker - foreach ($db->findAddressTrackerByMagnetId($magnet->magnetId) as $result) - { - $addressTracker = $db->getAddressTracker($result->addressTrackerId); + foreach ($db->findKeywordTopicByMagnetId($magnet->magnetId) as $result) + { + $kt[] = urlencode($db->getKeywordTopic($result->keywordTopicId)->value); + } - $scheme = $db->getScheme($addressTracker->schemeId); - $host = $db->getHost($addressTracker->hostId); - $port = $db->getPort($addressTracker->portId); - $uri = $db->getUri($addressTracker->uriId); + $link->magnet[] = sprintf('kt=%s', implode('+', $kt)); - // Yggdrasil host only - if (!preg_match(YGGDRASIL_HOST_REGEX, str_replace(['[',']'], false, $host->value))) - { - continue; - } + /// Address Tracker + foreach ($db->findAddressTrackerByMagnetId($magnet->magnetId) as $result) + { + $addressTracker = $db->getAddressTracker($result->addressTrackerId); - $link->magnet[] = sprintf('tr=%s', urlencode($port->value ? sprintf('%s://%s:%s%s', $scheme->value, - $host->value, - $port->value, - $uri->value) : sprintf('%s://%s%s', $scheme->value, - $host->value, - $uri->value))); - } + $scheme = $db->getScheme($addressTracker->schemeId); + $host = $db->getHost($addressTracker->hostId); + $port = $db->getPort($addressTracker->portId); + $uri = $db->getUri($addressTracker->uriId); - // Append trackers.json - foreach (json_decode(file_get_contents(__DIR__ . '/../config/trackers.json')) as $tracker) + // Yggdrasil host only + if (!preg_match(YGGDRASIL_HOST_REGEX, str_replace(['[',']'], false, $host->value))) { - $link->magnet[] = sprintf('tr=%s', urlencode($tracker->announce)); + continue; } - /// Acceptable Source - foreach ($db->findAcceptableSourceByMagnetId($magnet->magnetId) as $result) - { - $acceptableSource = $db->getAcceptableSource($result->acceptableSourceId); + $link->magnet[] = sprintf('tr=%s', urlencode($port->value ? sprintf('%s://%s:%s%s', $scheme->value, + $host->value, + $port->value, + $uri->value) : sprintf('%s://%s%s', $scheme->value, + $host->value, + $uri->value))); + } - $scheme = $db->getScheme($acceptableSource->schemeId); - $host = $db->getHost($acceptableSource->hostId); - $port = $db->getPort($acceptableSource->portId); - $uri = $db->getUri($acceptableSource->uriId); + // Append trackers.json + foreach (json_decode(file_get_contents(__DIR__ . '/../config/trackers.json')) as $tracker) + { + $link->magnet[] = sprintf('tr=%s', urlencode($tracker->announce)); + } - // Yggdrasil host only - if (!preg_match(YGGDRASIL_HOST_REGEX, str_replace(['[',']'], false, $host->value))) - { - continue; - } + /// Acceptable Source + foreach ($db->findAcceptableSourceByMagnetId($magnet->magnetId) as $result) + { + $acceptableSource = $db->getAcceptableSource($result->acceptableSourceId); - $link->magnet[] = sprintf('as=%s', urlencode($port->value ? sprintf('%s://%s:%s%s', $scheme->value, - $host->value, - $port->value, - $uri->value) : sprintf('%s://%s%s', $scheme->value, - $host->value, - $uri->value))); - $link->direct[] = $port->value ? sprintf('%s://%s:%s%s', $scheme->value, - $host->value, - $port->value, - $uri->value) : sprintf('%s://%s%s', $scheme->value, - $host->value, - $uri->value); - } + $scheme = $db->getScheme($acceptableSource->schemeId); + $host = $db->getHost($acceptableSource->hostId); + $port = $db->getPort($acceptableSource->portId); + $uri = $db->getUri($acceptableSource->uriId); - /// Exact Source - foreach ($db->findExactSourceByMagnetId($magnet->magnetId) as $result) + // Yggdrasil host only + if (!preg_match(YGGDRASIL_HOST_REGEX, str_replace(['[',']'], false, $host->value))) { - $eXactSource = $db->getExactSource($result->eXactSourceId); + continue; + } - $scheme = $db->getScheme($eXactSource->schemeId); - $host = $db->getHost($eXactSource->hostId); - $port = $db->getPort($eXactSource->portId); - $uri = $db->getUri($eXactSource->uriId); + $link->magnet[] = sprintf('as=%s', urlencode($port->value ? sprintf('%s://%s:%s%s', $scheme->value, + $host->value, + $port->value, + $uri->value) : sprintf('%s://%s%s', $scheme->value, + $host->value, + $uri->value))); + $link->direct[] = $port->value ? sprintf('%s://%s:%s%s', $scheme->value, + $host->value, + $port->value, + $uri->value) : sprintf('%s://%s%s', $scheme->value, + $host->value, + $uri->value); + } - // Yggdrasil host only - if (!preg_match(YGGDRASIL_HOST_REGEX, str_replace(['[',']'], false, $host->value))) - { - continue; - } + /// Exact Source + foreach ($db->findExactSourceByMagnetId($magnet->magnetId) as $result) + { + $eXactSource = $db->getExactSource($result->eXactSourceId); - $link->magnet[] = sprintf('xs=%s', urlencode($port->value ? sprintf('%s://%s:%s%s', $scheme->value, - $host->value, - $port->value, - $uri->value) : sprintf('%s://%s%s', $scheme->value, - $host->value, - $uri->value))); + $scheme = $db->getScheme($eXactSource->schemeId); + $host = $db->getHost($eXactSource->hostId); + $port = $db->getPort($eXactSource->portId); + $uri = $db->getUri($eXactSource->uriId); + + // Yggdrasil host only + if (!preg_match(YGGDRASIL_HOST_REGEX, str_replace(['[',']'], false, $host->value))) + { + continue; } - // Return html - $response->html->title = sprintf( - _('%s - Download - %s'), - htmlentities($magnet->metaTitle), - WEBSITE_NAME - ); + $link->magnet[] = sprintf('xs=%s', urlencode($port->value ? sprintf('%s://%s:%s%s', $scheme->value, + $host->value, + $port->value, + $uri->value) : sprintf('%s://%s%s', $scheme->value, + $host->value, + $uri->value))); + } + + // Return html + $response->html->title = sprintf( + _('%s - Download - %s'), + htmlentities($magnet->metaTitle), + WEBSITE_NAME + ); - $response->html->h1 = htmlentities($magnet->metaTitle); + $response->html->h1 = htmlentities($magnet->metaTitle); - // @TODO implement .bittorrent, separated v1/v2 magnet links - $response->html->link->magnet = implode('&', array_unique($link->magnet)); - $response->html->link->direct = $link->direct; - } + // @TODO implement .bittorrent, separated v1/v2 magnet links + $response->html->link->magnet = implode('&', array_unique($link->magnet)); + $response->html->link->direct = $link->direct; +} ?> diff --git a/src/public/edit.php b/src/public/edit.php index 06fa63d..4eb73dc 100644 --- a/src/public/edit.php +++ b/src/public/edit.php @@ -174,6 +174,14 @@ else if (!($user->address == $db->getUser($magnet->userId)->address || in_array( $response->message = _('You have no permissions to edit this magnet!'); } +// On first visit, redirect user to the welcome page with access level question +else if (is_null($user->public)) +{ + header( + sprintf('Location: %s/welcome.php', WEBSITE_URL) + ); +} + // Process form else { diff --git a/src/public/faq.php b/src/public/faq.php index 56d81a9..3e3004e 100644 --- a/src/public/faq.php +++ b/src/public/faq.php @@ -39,6 +39,21 @@ else if (!$userId = $db->initUserId($_SERVER['REMOTE_ADDR'], USER_DEFAULT_APPROV $response->message = _('Could not init user session'); } +// Get user +else if (!$user = $db->getUser($userId)) +{ + $response->success = false; + $response->message = _('Could not init user info'); +} + +// On first visit, redirect user to the welcome page with access level question +else if (is_null($user->public)) +{ + header( + sprintf('Location: %s/welcome.php', WEBSITE_URL) + ); +} + ?> diff --git a/src/public/index.php b/src/public/index.php index 7a4b326..3b22ed2 100644 --- a/src/public/index.php +++ b/src/public/index.php @@ -71,6 +71,14 @@ else if (!$user = $db->getUser($userId)) $response->message = _('Could not init user info'); } +// On first visit, redirect user to the welcome page with access level question +else if (is_null($user->public)) +{ + header( + sprintf('Location: %s/welcome.php', WEBSITE_URL) + ); +} + // Request valid else { diff --git a/src/public/magnet.php b/src/public/magnet.php index c449f96..4a63b50 100644 --- a/src/public/magnet.php +++ b/src/public/magnet.php @@ -68,6 +68,14 @@ else if (!$magnet = $db->getMagnet(isset($_GET['magnetId']) ? (int) $_GET['magne $response->message = _('Magnet not found! Submit new magnet link by sending address to the search field.'); } +// On first visit, redirect user to the welcome page with access level question +else if (is_null($user->public)) +{ + header( + sprintf('Location: %s/welcome.php', WEBSITE_URL) + ); +} + // Request valid else { diff --git a/src/public/node.php b/src/public/node.php index cf62b75..3c8368e 100644 --- a/src/public/node.php +++ b/src/public/node.php @@ -39,6 +39,21 @@ else if (!$userId = $db->initUserId($_SERVER['REMOTE_ADDR'], USER_DEFAULT_APPROV $response->message = _('Could not init user session'); } +// Get user +else if (!$user = $db->getUser($userId)) +{ + $response->success = false; + $response->message = _('Could not init user info'); +} + +// On first visit, redirect user to the welcome page with access level question +else if (is_null($user->public)) +{ + header( + sprintf('Location: %s/welcome.php', WEBSITE_URL) + ); +} + ?> diff --git a/src/public/welcome.php b/src/public/welcome.php index 37be5f1..81ca0a2 100644 --- a/src/public/welcome.php +++ b/src/public/welcome.php @@ -102,14 +102,14 @@ else if (isset($_POST['public']))

-

+

address ?>