public static function threadViewDispatch(XenForo_Controller $controller, $response, $controllerName, $action) { if (!$response instanceof XenForo_ControllerResponse_View) { return; } if ($response->viewName != 'XenForo_ViewPublic_Thread_View' || empty($response->params['thread'])) { return; } $thread = $response->params['thread']; if ($thread['discussion_type'] != 'team' || !XenForo_Visitor::getInstance()->hasPermission('Teams', 'view')) { return; } if (!$thread['team_id']) { return; } $teamModel = $controller->getModelFromCache('Nobita_Teams_Model_Team'); $team = $teamModel->getFullTeamById($thread['team_id'], array('join' => Nobita_Teams_Model_Team::FETCH_CATEGORY)); if (!$team) { return; } if (!$teamModel->canViewTeamAndContainer($team, $team)) { return; } $team = $teamModel->prepareTeam($team, $team); //$team = $teamModel->prepareTeamCustomFields($team, $team); $response->params['team'] = $team; }
public static function updateResponseRedirect(XenForo_Controller $controller, XenForo_ControllerResponse_Redirect $controllerResponse) { $action = false; $userId = 0; if ($controller instanceof XenForo_ControllerPublic_Login) { /** @var bdApiConsumer_XenForo_ControllerPublic_Login $controller */ if (XenForo_Visitor::getUserId() > 0 && XenForo_Visitor::getUserId() != $controller->bdApiConsumer_getBeforeLoginVisitorId()) { // a successful login $action = 'login'; $userId = XenForo_Visitor::getUserId(); } } elseif ($controller instanceof XenForo_ControllerPublic_Logout) { /** @var bdApiConsumer_XenForo_ControllerPublic_Logout $controller */ if (XenForo_Visitor::getUserId() == 0) { // a successful logout $action = 'logout'; $userId = $controller->bdApiConsumer_getBeforeLogoutVisitorId(); } } if ($action !== false && $userId > 0) { $redirectTarget = $controllerResponse->redirectTarget; $originalTarget = $redirectTarget; /** @var bdApiConsumer_XenForo_Model_UserExternal $userExternalModel */ $userExternalModel = $controller->getModelFromCache('XenForo_Model_UserExternal'); $auths = $userExternalModel->bdApiConsumer_getExternalAuthAssociations($userId); if (!empty($auths)) { foreach ($auths as $auth) { $provider = bdApiConsumer_Option::getProviderByCode($auth['provider']); if (empty($provider)) { continue; } $accessToken = $userExternalModel->bdApiConsumer_getAccessTokenFromAuth($provider, $auth); if (empty($accessToken)) { continue; } $ott = bdApiConsumer_Helper_Api::generateOneTimeToken($provider, $auth['provider_key'], $accessToken); $redirectTarget = XenForo_Link::convertUriToAbsoluteUri($redirectTarget, true); switch ($action) { case 'login': $redirectTarget = bdApiConsumer_Helper_Api::getLoginLink($provider, $ott, $redirectTarget); break; case 'logout': $redirectTarget = bdApiConsumer_Helper_Api::getLogoutLink($provider, $ott, $redirectTarget); break; } } } if ($redirectTarget !== $originalTarget) { $controllerResponse->redirectTarget = $redirectTarget; } } }
public function handleManage(XenForo_Controller $controller, array $user, array $providerData) { $input = $controller->getInput(); if ($controller->isConfirmedPost()) { if ($input->filterSingle('regen', XenForo_Input::BOOLEAN)) { $newProviderData = $this->generateInitialData($user, array()); /** @var XenForo_Model_Tfa $tfaModel */ $tfaModel = XenForo_Model::create('XenForo_Model_Tfa'); $tfaModel->enableUserTfaProvider($user['user_id'], $this->_providerId, $newProviderData); return $controller->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, XenForo_Link::buildPublicLink('account/two-step/manage', null, array('provider' => $this->_providerId))); } else { return null; } } $viewParams = array('provider' => $this, 'providerId' => $this->_providerId, 'user' => $user, 'providerData' => $providerData, 'usedCodes' => $this->_formatCodesForDisplay($providerData['used']), 'availableCodes' => $this->_formatCodesForDisplay($providerData['codes'])); return $controller->responseView('XenForo_ViewPublic_Account_Tfa_BackupManage', 'account_two_step_backup_manage', $viewParams); }
public static function controllerPreDispatch(XenForo_Controller $controller, $action) { $controllerPreDispatch = new ThemeHouse_AgreeTerms_Listener_ControllerPreDispatch($controller, $action); $controllerPreDispatch->run(); $visitor = XenForo_Visitor::getInstance(); if (empty($visitor['agree_terms_th'])) { self::$redirectToTerms = false; } if ($controller instanceof XenForo_ControllerPublic_Account && strtolower($action) == 'terms') { self::$redirectToTerms = false; } if (self::$redirectToTerms && $controller instanceof XenForo_ControllerPublic_Abstract) { self::$redirectToTerms = false; $controller->getRouteMatch()->setSections('account'); throw new XenForo_ControllerResponse_Exception($controller->responseReroute('XenForo_ControllerPublic_Account', 'terms')); } }
public function handleManage(XenForo_Controller $controller, array $user, array $providerData) { $input = $controller->getInput(); $request = $controller->getRequest(); $session = XenForo_Application::getSession(); $newProviderData = null; $newTriggerData = null; $showSetup = false; if ($controller->isConfirmedPost()) { $sessionKey = 'tfaData_totp'; if ($input->filterSingle('regen', XenForo_Input::BOOLEAN)) { $newProviderData = $this->generateInitialData($user, array()); $newTriggerData = $this->triggerVerification('setup', $user, $request->getClientIp(false), $newProviderData); $session->set($sessionKey, $newProviderData); $showSetup = true; } else { if ($input->filterSingle('confirm', XenForo_Input::BOOLEAN)) { $newProviderData = $session->get($sessionKey); if (!is_array($newProviderData)) { return null; } if (!$this->verifyFromInput('setup', $input, $user, $newProviderData)) { return $controller->responseError(new XenForo_Phrase('two_step_verification_value_could_not_be_confirmed')); } /** @var XenForo_Model_Tfa $tfaModel */ $tfaModel = XenForo_Model::create('XenForo_Model_Tfa'); $tfaModel->enableUserTfaProvider($user['user_id'], $this->_providerId, $newProviderData); $session->remove($sessionKey); return null; } else { return null; } } } $viewParams = array('provider' => $this, 'providerId' => $this->_providerId, 'user' => $user, 'providerData' => $providerData, 'newProviderData' => $newProviderData, 'newTriggerData' => $newTriggerData, 'showSetup' => $showSetup); return $controller->responseView('XenForo_ViewPublic_Account_Tfa_TotpManage', 'account_two_step_totp_manage', $viewParams); }
/** * Get the data and determine if we need to change the response code to 410. * * @param XenForo_Controller $controller * @param XenForo_ControllerResponse_Abstract|false $controllerResponse * @param string $controllerName * @param string $action * * @throws XenForo_Exception */ public static final function controllerPostDispatch(XenForo_Controller $controller, $controllerResponse, $controllerName, $action) { if ($controller instanceof XenForo_ControllerPublic_Abstract && $controllerResponse instanceof XenForo_ControllerResponse_Error && $controllerResponse->responseCode == 404) { $data = array(); XenForo_CodeEvent::fire('410_gone_data', array(&$data, $controller, $controllerName, $action)); $table = $field = ''; foreach ($data as $_controllerName => $info) { if ($_controllerName == $controllerName) { list($table, $field) = $info; break; } } if (($id = $controller->getInput()->filterSingle($field, XenForo_Input::UINT)) && $table && $field) { $db = XenForo_Application::getDb(); try { if (!$db->fetchOne("SELECT {$field} FROM {$table} WHERE {$field} = ?", $id) && $db->fetchOne("SELECT COUNT(*) FROM {$table} WHERE {$field} > ?", $id) > 0) { $controllerResponse->responseCode = 410; } } catch (Throwable $e) { XenForo_Error::logException($e, false, "410 Query Failed (Field: {$field}, Table: {$table}): "); } } } }
public static function checkConfiguration(XenForo_Controller $controller, $class, $prefix, $contentType, array &$configValues, array $configDefinitions) { if ($controller->getInput()->filterSingle('_xfConfirm', XenForo_Input::UINT)) { foreach ($configValues as $name => $value) { $newValue = $controller->getInput()->filterSingle($name, XenForo_Input::STRING); if ($newValue) { $configValues[$name] = $newValue; } elseif (!$configValues[$name] && !empty($configDefinitions[$name]['required'])) { throw $controller->responseException($controller->responseError(new XenForo_Phrase('please_complete_required_fields'))); } } return true; } $methodTemplateId = $controller->getInput()->filterSingle('method_template_id', XenForo_Input::UINT); $viewParams = array('configValues' => $configValues, 'configDefinitions' => $configDefinitions, 'methodTemplateId' => $methodTemplateId, 'class' => $class, 'prefix' => $prefix, 'contentType' => $contentType); throw $controller->responseException($controller->responseView('ThemeHouse_Reflection_ViewAdmin_MethodTemplate_Config', 'th_method_template_config_reflection', $viewParams)); }
protected static function _xenMediaPhotoIndexParams($team) { $categoryModel = self::$controller->getModelFromCache('XenGallery_Model_Category'); $category = $categoryModel->getCategoryById(self::$setup->getOption('XenMediaCategoryId')); $noPermission = false; if (!$category) { $noPermission = true; } else { if (!$categoryModel->canAddMediaToCategory($category)) { $noPermission = true; } } if ($noPermission) { return array('templateName' => 'Team_photo', 'viewName' => '', 'provider' => 'XenGallery', 'noPermission' => true); } $mediaModel = self::$controller->getModelFromCache('XenGallery_Model_Media'); $albumModel = self::$controller->getModelFromCache('XenGallery_Model_Album'); $order = self::$input->filterSingle('order', XenForo_Input::STRING); $type = self::$input->filterSingle('type', XenForo_Input::STRING); $page = self::$input->filterSingle('page', XenForo_Input::UINT); $perPage = XenForo_Application::getOptions()->xengalleryMediaMaxPerPage; $visitor = XenForo_Visitor::getInstance(); $conditions = array('deleted' => $mediaModel->canViewDeletedMedia(), 'type' => $type ? $type : 'all', 'privacyUserId' => $visitor->user_id, 'viewAlbums' => $albumModel->canViewAlbums(), 'viewCategoryIds' => $mediaModel->getViewableCategoriesForVisitor($visitor->toArray()), 'newerThan' => $mediaModel->getMediaHomeCutOff(), 'social_group_id' => $team['team_id']); $fetchOptions = self::_getMediaFetchOptions() + array('order' => $order ? $order : 'media_date', 'orderDirection' => 'desc', 'page' => $page, 'perPage' => $perPage); $fetchOptions['join'] |= XenGallery_Model_Media::FETCH_PRIVACY; $media = $mediaModel->getMedia($conditions, $fetchOptions); $media = $mediaModel->prepareMediaItems($media); $inlineModOptions = $mediaModel->prepareInlineModOptions($media); $ignoredNames = array(); foreach ($media as $item) { if (!empty($item['isIgnored'])) { $ignoredNames[] = $item['username']; } } $mediaCount = $mediaModel->countMedia($conditions, $fetchOptions); self::$controller->canonicalizePageNumber($page, $perPage, $mediaCount, TEAM_ROUTE_PREFIX . '/photos', $team); self::$controller->canonicalizeRequestUrl(XenForo_Link::buildPublicLink(TEAM_ROUTE_PREFIX . '/photos', $team, array('page' => $page))); $pageNavParams = array('order' => $order, 'type' => $type); return array('templateName' => 'Team_photo', 'viewName' => '', 'provider' => 'XenGallery', 'canViewRatings' => $mediaModel->canViewRatings(), 'mediaHome' => true, 'media' => $media, 'ignoredNames' => array_unique($ignoredNames), 'mediaCount' => $mediaCount, 'page' => $page <= 1 ? '' : $page, 'perPage' => $perPage, 'pageNavParams' => $pageNavParams, 'order' => $order, 'type' => $type, 'time' => XenForo_Application::$time, 'showTypeTabs' => $albumModel->canViewAlbums(), 'inlineModOptions' => $inlineModOptions, 'userPage' => false); }
/** * * @param string $action */ protected function _upgradeAddOns() { $template = new XenForo_Template_Admin('PAGE_CONTAINER_SIMPLE', array('jQuerySource' => XenForo_Dependencies_Abstract::getJquerySource(), 'xenOptions' => XenForo_Application::get('options')->getOptions(), '_styleModifiedDate' => XenForo_Application::get('adminStyleModifiedDate'))); $template->setLanguageId(1); $template->setParam('title', 'Upgrading Add-ons...'); $addOns = array_keys(self::getUpgradeAddOns(true)); $addOnModel = XenForo_Model::create('XenForo_Model_AddOn'); $nextAddOnId = ''; if (count($addOns)) { $next = self::$_controller->getInput()->filterSingle('next', XenForo_Input::STRING); if ($next) { $addOn = $next; } else { $addOn = reset($addOns); } for ($i = 0; $i < count($addOns); $i++) { if ($addOns[$i] != $addOn) { unset($addOns[$i]); continue; } break; } $fileName = XenForo_Application::getInstance()->getRootDir() . '/install/data/addon-' . $addOn . '.xml'; try { $caches = $addOnModel->installAddOnXmlFromFile($fileName, $addOn); $template->setParam('contents', '<form action="' . XenForo_Link::buildAdminLink('add-ons/upgrade-all-from-xml') . '" class="xenForm formOverlay CacheRebuild" method="post"> <p id="ProgressText">Upgrading... <span class="RebuildMessage"></span> <span class="DetailedMessage"></span></p> <p id="ErrorText" style="display: none">' . new XenForo_Phrase('error_occurred_or_request_stopped') . '</p> <input type="submit" class="button" value="Continue Upgrading" /> <input type="hidden" name="_xfToken" value="' . XenForo_Visitor::getInstance()->get('csrf_token_page') . '" /> </form>'); } catch (Exception $e) { if (count($addOns) == 1) { $template->setParam('contents', 'Upgrade error (' . $addOn . '). Please use the <a href="' . XenForo_Link::buildAdminLink('add-ons/upgrade', array('addon_id' => $addOn)) . '">standard upgrade tool</a> and report any error messages to the developer.'); } else { unset($addOns[array_search($addOn, $addOns)]); $nextAddOnId = reset($addOns); $template->setParam('contents', '<form action="' . XenForo_Link::buildAdminLink('add-ons/upgrade-all-from-xml') . '" class="xenForm formOverlay CacheRebuild" method="post"> <p id="ProgressText">Upgrading... <span class="RebuildMessage"></span> <span class="DetailedMessage"></span></p> <p id="ErrorText" style="display: none">' . new XenForo_Phrase('error_occurred_or_request_stopped') . '</p> <input type="submit" class="button" value="Continue Upgrading" /> <input type="hidden" name="next" value="' . $nextAddOnId . '" /> <input type="hidden" name="_xfToken" value="' . XenForo_Visitor::getInstance()->get('csrf_token_page') . '" /> </form>'); } } } else { $caches = $addOnModel->rebuildAddOnCaches(); } if (!count($addOns) && (isset($caches) || XenForo_Application::$versionId > 1020000)) { if (self::$_controller->getRouteMatch()->getResponseType() == 'json') { header('Content-Type: application/json; charset=UTF-8'); echo json_encode(array('_redirectTarget' => XenForo_Link::buildAdminLink('index'))); } else { header('Location: ' . XenForo_Link::buildAdminLink('index')); } } elseif (count($addOns) == 1 && (isset($caches) || XenForo_Application::$versionId > 1020000)) { if (XenForo_Application::$versionId > 1020000) { $url = XenForo_Link::buildAdminLink('tools/run-deferred'); } else { $url = XenForo_Link::buildAdminLink('tools/cache-rebuild', null, array('caches' => json_encode($caches))); } if (self::$_controller->getRouteMatch()->getResponseType() == 'json') { header('Content-Type: application/json; charset=UTF-8'); echo json_encode(array('_redirectTarget' => $url)); } else { header('Location: ' . $url); } } else { if (self::$_controller->getRouteMatch()->getResponseType() == 'json') { echo json_encode(array('_redirectTarget' => XenForo_Link::buildAdminLink('add-ons/upgrade-all-from-xml', array(), array('next' => $nextAddOnId)))); } else { $output = $template->render(); $output = str_replace("<!--XenForo_Require:JS-->", '<script src="js/xenforo/cache_rebuild.js"></script>', $output); echo $output; } } exit; }
protected function _generateControllerResponse(XenForo_Controller $controller, OAuth2\Response $response) { if ($response->isRedirection()) { return $controller->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, $response->getHttpHeader('Location')); } $params = $response->getParameters(); $params['_statusCode'] = $response->getStatusCode(); $params['_headers'] = $response->getHttpHeaders(); if ($controller instanceof bdApi_ControllerApi_Abstract) { return $controller->responseData('bdApi_ViewApi_OAuth', $params); } else { if ($response->isClientError()) { return $controller->responseError($response->getParameter('error_description'), $response->getStatusCode()); } else { $controller->getRouteMatch()->setResponseType('json'); return $controller->responseView('bdApi_ViewPublic_OAuth', '', $params); } } }
public function doRecovery($target, $targetId, XenForo_Controller $controller) { switch ($target) { case 'facebook': $extraParams = array('publish_actions' => 1); $targetIdParsed = bdSocialShare_Helper_Common::parseTargetId($targetId); if (!empty($targetIdParsed) and !empty($targetIdParsed['type'])) { switch ($targetIdParsed['type']) { case 'page': $extraParams['manage_pages'] = 1; break; case 'group': $extraParams['user_groups'] = 1; break; } } $link = XenForo_Link::buildPublicLink('register/facebook', '', array_merge(array('reg' => 1), $extraParams)); return $controller->responseRedirect(XenForo_ControllerResponse_Redirect::RESOURCE_UPDATED, $link); break; case 'twitter': $link = XenForo_Link::buildPublicLink('register/twitter', '', array_merge(array('reg' => 1))); return $controller->responseRedirect(XenForo_ControllerResponse_Redirect::RESOURCE_UPDATED, $link); break; } return false; }