true, 'message' => _('Internal server error'), 'title' => sprintf(_('Oops - %s'), WEBSITE_NAME) ]; // Begin action request switch (isset($_GET['target']) ? urldecode($_GET['target']) : false) { case 'profile': switch (isset($_GET['toggle']) ? $_GET['toggle'] : false) { case 'jidenticon': // 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'); } // 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) ); } // Render icon else { header('Cache-Control: max-age=604800'); $icon = new Jdenticon\Identicon(); $icon->setValue($user->{USER_IDENTICON_FIELD}); $icon->setSize(empty($_GET['size']) ? 100 : (int) $_GET['size']); $icon->setStyle( [ 'backgroundColor' => 'rgba(255, 255, 255, 0)', ] ); $icon->displayImage('webp'); } break; } break; case 'comment': switch (isset($_GET['toggle']) ? $_GET['toggle'] : false) { case 'approved': // 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'); } // 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 comment exists else if (!$magnetComment = $db->getMagnetComment(isset($_GET['magnetCommentId']) && $_GET['magnetCommentId'] > 0 ? (int) $_GET['magnetCommentId'] : 0)) { $response->success = false; $response->message = _('Requested magnet comment not found'); } // Access allowed else if (!in_array($user->address, MODERATOR_IP_LIST)) { $response->success = false; $response->message = _('Access denied'); } // Validate callback else if (empty($_GET['callback'])) { $response->success = false; $response->message = _('Callback required'); } // Validate base64 else if (!$callback = (string) @base64_decode($_GET['callback'])) { $response->success = false; $response->message = _('Invalid callback encoding'); } // Request valid else { if ($magnetComment->approved) { $db->updateMagnetCommentApproved($magnetComment->magnetCommentId, false); if (USER_AUTO_APPROVE_ON_COMMENT_APPROVE) { $db->updateUserApproved($magnetComment->userId, false, time()); } } else { $db->updateMagnetCommentApproved($magnetComment->magnetCommentId, true); if (USER_AUTO_APPROVE_ON_COMMENT_APPROVE) { $db->updateUserApproved($magnetComment->userId, true, time()); } } // Redirect to edit page header( sprintf('Location: %s', $callback) ); } break; case 'public': // 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'); } // 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 comment exists else if (!$magnetComment = $db->getMagnetComment(isset($_GET['magnetCommentId']) && $_GET['magnetCommentId'] > 0 ? (int) $_GET['magnetCommentId'] : 0)) { $response->success = false; $response->message = _('Requested magnet comment not found'); } // Access allowed else if (!($user->address == $db->getUser($magnetComment->userId)->address || in_array($user->address, MODERATOR_IP_LIST))) { $response->success = false; $response->message = _('Access denied'); } // Validate callback else if (empty($_GET['callback'])) { $response->success = false; $response->message = _('Callback required'); } // Validate base64 else if (!$callback = (string) @base64_decode($_GET['callback'])) { $response->success = false; $response->message = _('Invalid callback encoding'); } // Request valid else { if ($magnetComment->public) { $db->updateMagnetCommentPublic($magnetComment->magnetCommentId, false); } else{ $db->updateMagnetCommentPublic($magnetComment->magnetCommentId, true); } // Redirect to edit page header( sprintf('Location: %s', $callback) ); } break; case 'new': // 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'); } // 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)) { $response->success = false; $response->message = _('Requested magnet not found'); } // Access allowed else if (!($user->address == $db->getUser($magnet->userId)->address || in_array($user->address, MODERATOR_IP_LIST) || ($magnet->public && $magnet->approved))) { $response->success = false; $response->message = _('Magnet not available for this action'); } // Validate callback else if (empty($_GET['callback'])) { $response->success = false; $response->message = _('Callback required'); } // Validate base64 else if (!$callback = (string) @base64_decode($_GET['callback'])) { $response->success = false; $response->message = _('Invalid callback encoding'); } // Validate comment value else if (empty($_POST['comment']) || mb_strlen($_POST['comment']) < COMMENT_MIN_LENGTH || mb_strlen($_POST['comment']) > COMMENT_MAX_LENGTH) { $response->success = false; $response->message = sprintf(_('Valid comment value required, %s-%s chars allowed'), COMMENT_MIN_LENGTH, COMMENT_MAX_LENGTH); } // Request valid else { if ($magnetCommentId = $db->addMagnetComment($magnet->magnetId, $user->userId, null, // @TODO implement threads trim($_POST['comment']), $user->approved || in_array($user->address, MODERATOR_IP_LIST) ? true : COMMENT_DEFAULT_APPROVED, COMMENT_DEFAULT_PUBLIC, time())) { // Redirect to referrer page header( sprintf('Location: %s#comment-%s', $callback, $magnetCommentId) ); } } break; default: header( sprintf('Location: %s', WEBSITE_URL) ); } break; case 'magnet': switch (isset($_GET['toggle']) ? $_GET['toggle'] : false) { case 'star': // 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'); } // 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)) { $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))) { $response->success = false; $response->message = _('Magnet not available for this action'); } // Validate callback else if (empty($_GET['callback'])) { $response->success = false; $response->message = _('Callback required'); } // Validate base64 else if (!$callback = (string) @base64_decode($_GET['callback'])) { $response->success = false; $response->message = _('Invalid callback encoding'); } // Request valid else { // Star exists, trigger delete if ($db->findMagnetStarsTotalByUserId($magnet->magnetId, $userId)) { $db->deleteMagnetStarByUserId($magnet->magnetId, $userId); } else { // Star not exists, trigger add $db->addMagnetStar($magnet->magnetId, $userId, time()); } // Redirect to edit page header( sprintf('Location: %s', $callback) ); } break; case 'new': // 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'); } // 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) ); } // Validate link if (empty($_GET['magnet'])) { $response->success = false; $response->message = _('Link required'); } // Validate base64 else if (!$link = (string) @base64_decode($_GET['magnet'])) { $response->success = false; $response->message = _('Invalid link encoding'); } // Validate magnet else if (!$magnet = Yggverse\Parser\Magnet::parse($link)) { $response->success = false; $response->message = _('Invalid magnet link'); } // Request valid else { // Begin magnet registration try { $db->beginTransaction(); // Init magnet if ($magnetId = $db->addMagnet( $user->userId, $magnet->xl, $magnet->dn, $link, MAGNET_DEFAULT_PUBLIC, MAGNET_DEFAULT_COMMENTS, MAGNET_DEFAULT_SENSITIVE, $user->approved ? true : MAGNET_DEFAULT_APPROVED, time())) { foreach ($magnet as $key => $value) { switch ($key) { case 'xt': foreach ($value as $xt) { if (Yggverse\Parser\Magnet::isXTv1($xt)) { $db->addMagnetToInfoHash( $magnetId, $db->initInfoHashId( Yggverse\Parser\Magnet::filterInfoHash($xt), 1 ) ); } if (Yggverse\Parser\Magnet::isXTv2($xt)) { $db->addMagnetToInfoHash( $magnetId, $db->initInfoHashId( Yggverse\Parser\Magnet::filterInfoHash($xt), 2 ) ); } } break; case 'tr': foreach ($value as $tr) { if ($url = Yggverse\Parser\Url::parse($tr)) { if (preg_match(YGGDRASIL_HOST_REGEX, str_replace(['[',']'], false, $url->host->name))) { $db->initMagnetToAddressTrackerId( $magnetId, $db->initAddressTrackerId( $db->initSchemeId($url->host->scheme), $db->initHostId($url->host->name), $db->initPortId($url->host->port), $db->initUriId($url->page->uri) ) ); } } } break; case 'ws': foreach ($value as $ws) { // @TODO } break; case 'as': foreach ($value as $as) { if ($url = Yggverse\Parser\Url::parse($as)) { if (preg_match(YGGDRASIL_HOST_REGEX, str_replace(['[',']'], false, $url->host->name))) { $db->initMagnetToAcceptableSourceId( $magnetId, $db->initAcceptableSourceId( $db->initSchemeId($url->host->scheme), $db->initHostId($url->host->name), $db->initPortId($url->host->port), $db->initUriId($url->page->uri) ) ); } } } break; case 'xs': foreach ($value as $xs) { if ($url = Yggverse\Parser\Url::parse($xs)) { if (preg_match(YGGDRASIL_HOST_REGEX, str_replace(['[',']'], false, $url->host->name))) { $db->initMagnetToExactSourceId( $magnetId, $db->initExactSourceId( $db->initSchemeId($url->host->scheme), $db->initHostId($url->host->name), $db->initPortId($url->host->port), $db->initUriId($url->page->uri) ) ); } } } break; case 'mt': foreach ($value as $mt) { // @TODO } break; case 'x.pe': foreach ($value as $xPe) { // @TODO } break; case 'kt': foreach ($value as $kt) { $db->initMagnetToKeywordTopicId( $magnetId, $db->initKeywordTopicId(trim(mb_strtolower(strip_tags(html_entity_decode($kt))))) ); } break; } } $db->commit(); // Redirect to edit page header(sprintf('Location: %s/edit.php?magnetId=%s', trim(WEBSITE_URL, '/'), $magnetId)); } } catch (Exception $e) { var_dump($e); $db->rollBack(); } } break; } break; } ?> <?php echo $response->title ?>
message ?>