case '1095': case '1142': case '1143': case '1227': case '1370': case '2002': case '2005': return new Exception\ConnectionException($message, $exception); case '1048': case '1121': case '1138': case '1171': case '1252': case '1263': case '1566': return new Exception\NotNullConstraintViolationException($message, $exception); } return new Exception\DriverException($message, $exception); } /** * {@inheritdoc} */ public function createDatabasePlatformForVersion($version) { if ( ! preg_match('/^(?P<major>\d+)(?:\.(?P<minor>\d+)(?:\.(?P<patch>\d+))?)?/', $version, $versionParts)) { throw DBALException::invalidPlatformVersionSpecified( $version, '<major_version>.<minor_version>.<patch_version>' ); } if (false !== stripos($version, 'mariadb')) { return $this->getDatabasePlatform(); } $majorVersion = $versionParts['major']; $minorVersion = isset($versionParts['minor']) ? $versionParts['minor'] : 0;
} /** * @param \Doctrine\DBAL\Driver $driver * @param \Exception $driverEx * @param string $sql * @param array $params * * @return \Doctrine\DBAL\DBALException */ public static function driverExceptionDuringQuery(Driver $driver, \Exception $driverEx, $sql, array $params = array()) { $msg = "An exception occurred while executing '".$sql."'"; if ($params) { $msg .= " with params " . self::formatParameters($params); } $msg .= ":\n\n".$driverEx->getMessage(); if ($driver instanceof ExceptionConverterDriver && $driverEx instanceof DriverException) { return $driver->convertException($msg, $driverEx); } return new self($msg, 0, $driverEx); } /** * @param \Doctrine\DBAL\Driver $driver * @param \Exception $driverEx * * @return \Doctrine\DBAL\DBALException */ public static function driverException(Driver $driver, \Exception $driverEx) { $msg = "An exception occured in driver: " . $driverEx->getMessage(); if ($driver instanceof ExceptionConverterDriver && $driverEx instanceof DriverException) { return $driver->convertException($msg, $driverEx); } return new self($msg, 0, $driverEx);
if ($logger) { $logger->startQuery($query, $params, $types); } try { if ($params) { list($query, $params, $types) = SQLParserUtils::expandListParameters($query, $params, $types); $stmt = $this->_conn->prepare($query); if ($types) { $this->_bindTypedValues($stmt, $params, $types); $stmt->execute(); } else { $stmt->execute($params); } } else { $stmt = $this->_conn->query($query); } } catch (\Exception $ex) { throw DBALException::driverExceptionDuringQuery($this->_driver, $ex, $query, $this->resolveParams($params, $types)); } $stmt->setFetchMode($this->defaultFetchMode); if ($logger) { $logger->stopQuery(); } return $stmt; } /** * Executes a caching query. * * @param string $query The SQL query to execute. * @param array $params The parameters to bind to the query, if any. * @param array $types The types the previous parameters are in. * @param \Doctrine\DBAL\Cache\QueryCacheProfile $qcp The query cache profile. * * @return \Doctrine\DBAL\Driver\ResultStatement
public function closeCursor() { try { return parent::closeCursor(); } catch (\PDOException $exception) { // Exceptions not allowed by the interface. // In case driver implementations do not adhere to the interface, silence exceptions here. return true; } } /** * {@inheritdoc} */ public function execute($params = null) { try { return parent::execute($params); } catch (\PDOException $exception) { throw new PDOException($exception); } } /** * {@inheritdoc} */ public function fetch($fetchMode = null, $cursorOrientation = null, $cursorOffset = null) { try { if ($fetchMode === null && $cursorOrientation === null && $cursorOffset === null) { return parent::fetch(); } if ($cursorOrientation === null && $cursorOffset === null) { return parent::fetch($fetchMode); } if ($cursorOffset === null) { return parent::fetch($fetchMode, $cursorOrientation); }
* {@inheritdoc} */ public function closeCursor() { try { return parent::closeCursor(); } catch (\PDOException $exception) { // Exceptions not allowed by the interface. // In case driver implementations do not adhere to the interface, silence exceptions here. return true; } } /** * {@inheritdoc} */ public function execute($params = null) { try { return parent::execute($params); } catch (\PDOException $exception) { throw new PDOException($exception); } } /** * {@inheritdoc} */ public function fetch($fetchMode = null, $cursorOrientation = null, $cursorOffset = null) { try { if ($fetchMode === null && $cursorOrientation === null && $cursorOffset === null) { return parent::fetch(); } if ($cursorOrientation === null && $cursorOffset === null) { return parent::fetch($fetchMode); } if ($cursorOffset === null) {
* {@inheritdoc} */ public function closeCursor() { try { return parent::closeCursor(); } catch (\PDOException $exception) { // Exceptions not allowed by the interface. // In case driver implementations do not adhere to the interface, silence exceptions here. return true; } } /** * {@inheritdoc} */ public function execute($params = null) { try { return parent::execute($params); } catch (\PDOException $exception) { throw new PDOException($exception); } } /** * {@inheritdoc} */ public function fetch($fetchMode = null, $cursorOrientation = null, $cursorOffset = null) { try { if ($fetchMode === null && $cursorOrientation === null && $cursorOffset === null) { return parent::fetch(); } if ($cursorOrientation === null && $cursorOffset === null) { return parent::fetch($fetchMode); } if ($cursorOffset === null) {
return $this->executeCacheQuery($query, $params, $types, $qcp); } $this->connect(); $logger = $this->_config->getSQLLogger(); if ($logger) { $logger->startQuery($query, $params, $types); } try { if ($params) { list($query, $params, $types) = SQLParserUtils::expandListParameters($query, $params, $types); $stmt = $this->_conn->prepare($query); if ($types) { $this->_bindTypedValues($stmt, $params, $types); $stmt->execute(); } else { $stmt->execute($params); } } else { $stmt = $this->_conn->query($query); } } catch (\Exception $ex) { throw DBALException::driverExceptionDuringQuery($this->_driver, $ex, $query, $this->resolveParams($params, $types)); } $stmt->setFetchMode($this->defaultFetchMode); if ($logger) { $logger->stopQuery(); } return $stmt; } /** * Executes a caching query. *
* @return void */ public function setFetchMode($fetchMode) { $this->defaultFetchMode = $fetchMode; } /** * Prepares and executes an SQL query and returns the first row of the result * as an associative array. * * @param string $statement The SQL query. * @param array $params The query parameters. * @param array $types The query parameter types. * * @return array */ public function fetchAssoc($statement, array $params = array(), array $types = array()) { return $this->executeQuery($statement, $params, $types)->fetch(PDO::FETCH_ASSOC); } /** * Prepares and executes an SQL query and returns the first row of the result * as a numerically indexed array. * * @param string $statement The SQL query to be executed. * @param array $params The prepared statement params. * @param array $types The query parameter types. * * @return array */ public function fetchArray($statement, array $params = array(), array $types = array()) { return $this->executeQuery($statement, $params, $types)->fetch(PDO::FETCH_NUM); } /** * Prepares and executes an SQL query and returns the value of a single column * of the first row of the result.
$this->cDraftTargetParentPageID = $cParentID; Section::registerPage($this); } /** * Read the data from the database. * * @param mixed $cInfo The argument of the $where condition * @param string $where The SQL 'WHERE' part * @param string|int $cvID */ protected function populatePage($cInfo, $where, $cvID) { $db = Database::connection(); $q0 = 'select Pages.cID, Pages.pkgID, Pages.siteTreeID, Pages.cPointerID, Pages.cPointerExternalLink, Pages.cIsDraft, Pages.cIsActive, Pages.cIsSystemPage, Pages.cPointerExternalLinkNewWindow, Pages.cFilename, Pages.ptID, Collections.cDateAdded, Pages.cDisplayOrder, Collections.cDateModified, cInheritPermissionsFromCID, cInheritPermissionsFrom, cOverrideTemplatePermissions, cCheckedOutUID, cIsTemplate, uID, cPath, cParentID, cChildren, cCacheFullPageContent, cCacheFullPageContentOverrideLifetime, cCacheFullPageContentLifetimeCustom from Pages inner join Collections on Pages.cID = Collections.cID left join PagePaths on (Pages.cID = PagePaths.cID and PagePaths.ppIsCanonical = 1) '; //$q2 = "select cParentID, cPointerID, cPath, Pages.cID from Pages left join PagePaths on (Pages.cID = PagePaths.cID and PagePaths.ppIsCanonical = 1) "; $row = $db->fetchAssoc($q0 . $where, [$cInfo]); if ($row !== false && $row['cPointerID'] > 0) { $originalRow = $row; $row = $db->fetchAssoc($q0 . 'where Pages.cID = ?', [$row['cPointerID']]); } else { $originalRow = null; } if ($row !== false) { foreach ($row as $key => $value) { $this->{$key} = $value; } if ($originalRow !== null) { $this->cPointerID = $originalRow['cPointerID']; $this->cIsActive = $originalRow['cIsActive']; $this->cPointerOriginalID = $originalRow['cID']; $this->cPointerOriginalSiteTreeID = $originalRow['siteTreeID']; $this->cPath = $originalRow['cPath']; $this->cParentID = $originalRow['cParentID']; $this->cDisplayOrder = $originalRow['cDisplayOrder']; }
* * Get a page given its ID. * * @param int $cID the ID of the page * @param string $version the page version ('RECENT' for the most recent version, 'ACTIVE' for the currently published version, 'SCHEDULED' for the currently scheduled version, or an integer to retrieve a specific version ID) * * @return \Concrete\Core\Page\Page */ public static function getByID($cID, $version = 'RECENT') { $class = get_called_class(); if ($cID && $version) { $c = CacheLocal::getEntry('page', $cID . '/' . $version . '/' . $class); if ($c instanceof $class) { return $c; } } $where = 'where Pages.cID = ?'; $c = new $class(); $c->populatePage($cID, $where, $version); // must use cID instead of c->getCollectionID() because cID may be the pointer to another page if ($cID && $version) { CacheLocal::set('page', $cID . '/' . $version . '/' . $class, $c); } return $c; } /** * {@inheritdoc} * * @see \Concrete\Core\Export\ExportableInterface::getExporter() * * @return \Concrete\Core\Page\Exporter */ public function getExporter() { return new Exporter(); }
} else { $db = Database::connection(); $cID = $db->fetchColumn( 'select cID from Stacks where stName = ? and stMultilingualSection = 0', [$stackName] ); } return $cID ? static::getByID($cID, $cvID) : null; } /** * @param int $cID * @param string $cvID * * @return \Concrete\Core\Page\Page|self|false */ public static function getByID($cID, $cvID = 'RECENT') { $c = parent::getByID($cID, $cvID); if (static::isValidStack($c)) { return $c; } return null; } /** * @param \Concrete\Core\Page\Stack\Stack $stack * * @return bool */ protected static function isValidStack($stack) { return $stack->getPageTypeHandle() == STACKS_PAGE_TYPE; } /** * @param \Concrete\Core\Page\Page $parent
/*if (!is_object($site)) { $site = \Core::make('site')->getSite(); } if ($site instanceof Site) { $q[] = $site->getDefaultLocale()->getSiteTree()->getSiteTreeID(); } else { $q[] = $site->getSiteTreeID(); }*/ $cID = $db->fetchColumn($sql, $q); $cache->save($item->set($cID)); } } else { $db = Database::connection(); $cID = $db->fetchColumn( 'select cID from Stacks where stName = ? and stMultilingualSection = 0', [$stackName] ); } return $cID ? static::getByID($cID, $cvID) : null; } /** * @param int $cID * @param string $cvID * * @return \Concrete\Core\Page\Page|self|false */ public static function getByID($cID, $cvID = 'RECENT') { $c = parent::getByID($cID, $cvID); if (static::isValidStack($c)) { return $c; } return null; } /**
} /** * Get the blocks contained in the all the global areas. * * @return \Concrete\Core\Block\Block[] */ public function getGlobalBlocks() { $db = Loader::db(); $v = [Stack::ST_TYPE_GLOBAL_AREA]; $rs = $db->GetCol('select stName from Stacks where Stacks.stType = ?', $v); $blocks = []; if (count($rs) > 0) { $pcp = new Permissions($this); foreach ($rs as $garHandle) { if ($pcp->canViewPageVersions()) { $s = Stack::getByName($garHandle, 'RECENT'); } else { $s = Stack::getByName($garHandle, 'ACTIVE'); } if (is_object($s)) { $blocksTmp = $s->getBlocks(STACKS_AREA_NAME); $blocks = array_merge($blocks, $blocksTmp); } } } return $blocks; } /** * List the blocks in the currently loaded collection version (or in a specific area within it). * * @param string|false $arHandle The handle if the area (or falsy to get all the blocks in the collection) * * @return \Concrete\Core\Block\Block[] */ public function getBlocks($arHandle = false) {
public function getPassThruBlockController(Block $b) { $bID = $b->getBlockID(); return isset($this->passThruBlocks[$bID]) ? $this->passThruBlocks[$bID] : null; } public function validateRequest() { if (isset($this->requestValidated)) { return $this->requestValidated; } $valid = true; if (!$this->isValidControllerTask($this->action, $this->parameters)) { $valid = false; // we check the blocks on the page. $blocks = array_merge($this->getPageObject()->getBlocks(), $this->getPageObject()->getGlobalBlocks()); foreach ($blocks as $b) { $controller = $b->getController(); list($method, $parameters) = $controller->getPassThruActionAndParameters($this->parameters); if ($controller->isValidControllerTask($method, $parameters)) { $controller->on_start(); $response = $controller->runAction($method, $parameters); if ($response instanceof Response) { return $response; } // old school blocks have already terminated at this point. They are redirecting // or exiting. But new blocks like topics, etc... can actually rely on their $set // data persisting and being passed into the view. // so if we make it down here we have to return true –so that we don't fire a 404. $valid = true; // then, we need to save the persisted data that may have been set. $controller->setPassThruBlockController($this); }
$collection->setController($controller); return $this->controller($controller); } private function collectionNotFound(Collection $collection, Request $request, array $headers) { // if we don't have a path and we're doing cID, then this automatically fires a 404. if (!$request->getPath() && $request->get('cID')) { return $this->notFound('', Response::HTTP_NOT_FOUND, $headers); } // let's test to see if this is, in fact, the home page, // and we're routing arguments onto it (which is screwing up the path.) $home = Page::getByID(Page::getHomePageID()); $request->setCurrentPage($home); $homeController = $home->getPageController(); $homeController->setupRequestActionAndParameters($request); $response = $homeController->validateRequest(); if ($response instanceof \Symfony\Component\HttpFoundation\Response) { return $response; } elseif ($response === true) { return $this->controller($homeController); } else { return $this->notFound('', Response::HTTP_NOT_FOUND, $headers); } } }
return $this->view($view, $code, $headers); } finally { $this->localization->popActiveContext(); } } /** * {@inheritdoc} */ public function collection(Collection $collection, $code = Response::HTTP_OK, $headers = []) { if (!$this->app) { throw new \RuntimeException('Cannot resolve collections without a reference to the application'); } $request = $this->request; if ($collection->isError() && $collection->getError() == COLLECTION_NOT_FOUND) { if ($response = $this->collectionNotFound($collection, $request, $headers)) { return $response; } } if ($collection->getCollectionPath() != '/page_not_found') { if (!isset($collection->cPathFetchIsCanonical) || !$collection->cPathFetchIsCanonical) { // Handle redirect URL (additional page paths) /** @var Url $url */ $url = $this->app->make('url/manager')->resolve([$collection]); $query = $url->getQuery(); $query->modify($request->getQueryString()); $url = $url->setQuery($query); return $this->redirect($url, Response::HTTP_MOVED_PERMANENTLY, $headers); } } // maintenance mode if ($collection->getCollectionPath() != '/login') {
new DispatcherDelegate($dispatcher) ); $stack->setApplication($this->app); foreach($route->getMiddlewares() as $middleware) { if (is_string($middleware->getMiddleware())) { $inflatedMiddleware = $this->app->make($middleware->getMiddleware()); } else { $inflatedMiddleware = $middleware->getMiddleware(); } $stack = $stack->withMiddleware( $inflatedMiddleware, $middleware->getPriority() ); } return $stack->process($request); } catch (ResourceNotFoundException $e) { } catch (MethodNotAllowedException $e) { } $c = \Page::getFromRequest($request); $response = $this->app->make(ResponseFactoryInterface::class)->collection($c); return $response; } /** * @param \Symfony\Component\Routing\RouteCollection $routes * @param string $path * * @return \Symfony\Component\Routing\RouteCollection */ private function filterRouteCollectionForPath(RouteCollection $routes, $path) { $result = new RouteCollection(); foreach ($routes->getResources() as $resource) { $result->addResource($resource); } foreach ($routes->all() as $name => $route) { $routePath = $route->getPath(); $p = strpos($routePath, '{'); $skip = false;
/** * @param \Symfony\Component\HttpFoundation\Request $request * * @return SymfonyResponse */ public function dispatch(SymfonyRequest $request) { $path = rawurldecode($request->getPathInfo()); if (substr($path, 0, 3) == '../' || substr($path, -3) == '/..' || strpos($path, '/../') || substr($path, 0, 3) == '..\\' || substr($path, -3) == '\\..' || strpos($path, '\\..\\')) { throw new \RuntimeException(t('Invalid path traversal. Please make this request with a valid HTTP client.')); } $response = null; if ($this->app->isInstalled()) { $response = $this->getEarlyDispatchResponse(); } if ($response === null) { $response = $this->handleDispatch($request); } return $response; } private function getEarlyDispatchResponse() { $validator = $this->app->make(SessionValidator::class); if ($validator->hasActiveSession()) { $session = $this->app['session']; if (!$session->has('uID')) { User::verifyAuthTypeCookie(); } // User may have been logged in, so lets check status again. if ($session->has('uID') && $session->get('uID') > 0 && $response = $this->validateUser()) { return $response; } } }
private $dispatcher; /** * DispatcherFrame constructor. * @param \Concrete\Core\Http\DispatcherInterface $dispatcher */ public function __construct(DispatcherInterface $dispatcher) { $this->dispatcher = $dispatcher; } /** * Dispatch the next available middleware and return the response. * * @param Request $request * @return Response */ public function next(Request $request) { return $this->dispatcher->dispatch($request); } }
->select('ac.challengeAuthorizationKey') ->from(AuthorizationChallenge::class, 'ac') ->andWhere($qb->expr()->eq('ac.challengeStarted', ':true')) ->andWhere($qb->expr()->eq('ac.challengeToken', ':challengeToken')) ->setMaxResults(1) ->setParameters(new ArrayCollection([ new Parameter('true', true), new Parameter('challengeToken', $challengeToken), ])) ; $rows = $qb->getQuery()->getScalarResult(); if ($rows !== []) { return $this->buildChallengeAuthorizationKeyResponse($rows[0]['challengeAuthorizationKey']); } if ($challengeToken === static::ACME_CHALLENGE_TOKEN_TESTINTERCEPT) { return $this->buildChallengeAuthorizationKeyResponse(sha1($this->config->get('acme::site.unique_installation_id'))); } } return $frame->next($request); } /** * @param \Symfony\Component\HttpFoundation\Request $request * * @return string */ protected function getAuthorizationChallengeToken(Request $request) { $pathInfo = $request->getRequestUri(); if (strpos($pathInfo, static::ACME_CHALLENGE_PREFIX) !== 0) { return ''; } $challengeToken = substr($pathInfo, strlen(static::ACME_CHALLENGE_PREFIX)); if ($challengeToken === '' || $challengeToken[0] === '?') { return ''; } $p = strpos($challengeToken, '?'); if ($p !== false) { $challengeToken = substr($challengeToken, 0, $p);
public function __construct( MiddlewareInterface $middleware, DelegateInterface $nextDelegate, HttpFoundationFactory $foundationFactory ) { $this->middleware = $middleware; $this->nextDelegate = $nextDelegate; $this->foundationFactory = $foundationFactory; } /** * Dispatch the next available middleware and return the response. * * @param Request $request * @return Response */ public function next(Request $request) { $response = $this->middleware->process($request, $this->nextDelegate); // Negotiate PSR7 responses if ($response instanceof ResponseInterface) { return $this->foundationFactory->createResponse($response); } return $response; } }
* @var \Concrete\Core\Config\Repository\Repository */ private $config; public function __construct(Repository $config) { $this->config = $config; } /** * Process the request and return a response. * * @param \Symfony\Component\HttpFoundation\Request $request * @param DelegateInterface $frame * * @return \Symfony\Component\HttpFoundation\Response */ public function process(Request $request, DelegateInterface $frame) { $response = $frame->next($request); if ($response && $this->app->isInstalled() && $this->config->get('concrete.misc.basic_thumbnailer_generation_strategy') == 'now') { $responseStatusCode = (int) $response->getStatusCode(); if ($responseStatusCode === 200 || $responseStatusCode === 404) { $database = $this->tryGetConnection(); if ($database !== null) { if ($responseStatusCode === 404) { $searchThumbnailPath = $request->getRequestUri(); } else { $searchThumbnailPath = null; } $thumbnail = $this->getThumbnailToGenerate($database, $searchThumbnailPath); if ($thumbnail !== null) { $this->markThumbnailAsBuilt($database, $thumbnail); if ($this->generateThumbnail($thumbnail)) { if ($this->couldBeTheRequestedThumbnail($thumbnail, $searchThumbnailPath)) { $response = $this->buildRedirectToThumbnailResponse($request); } } }
public function __construct( MiddlewareInterface $middleware, DelegateInterface $nextDelegate, HttpFoundationFactory $foundationFactory ) { $this->middleware = $middleware; $this->nextDelegate = $nextDelegate; $this->foundationFactory = $foundationFactory; } /** * Dispatch the next available middleware and return the response. * * @param Request $request * @return Response */ public function next(Request $request) { $response = $this->middleware->process($request, $this->nextDelegate); // Negotiate PSR7 responses if ($response instanceof ResponseInterface) { return $this->foundationFactory->createResponse($response); } return $response; } }
private $config; /** * @var \Concrete\Core\Utility\Service\Validation\Strings */ private $stringValidator; public function __construct(Repository $config, Strings $stringValidator) { $this->config = $config; $this->stringValidator = $stringValidator; } /** * @param \Concrete\Core\Http\Middleware\DelegateInterface $frame * @return Response */ public function process(Request $request, DelegateInterface $frame) { $response = $frame->next($request); if ($response->headers->has('X-Frame-Options') === false) { $x_frame_options = $this->config->get('concrete.security.misc.x_frame_options'); if ($this->stringValidator->notempty($x_frame_options)) { $response->headers->set('X-Frame-Options', $x_frame_options); } } return $response; } }
public function __construct( MiddlewareInterface $middleware, DelegateInterface $nextDelegate, HttpFoundationFactory $foundationFactory ) { $this->middleware = $middleware; $this->nextDelegate = $nextDelegate; $this->foundationFactory = $foundationFactory; } /** * Dispatch the next available middleware and return the response. * * @param Request $request * @return Response */ public function next(Request $request) { $response = $this->middleware->process($request, $this->nextDelegate); // Negotiate PSR7 responses if ($response instanceof ResponseInterface) { return $this->foundationFactory->createResponse($response); } return $response; } }
* @var \Concrete\Core\Cookie\ResponseCookieJar */ private $responseCookieJar; /** * @param \Concrete\Core\Cookie\ResponseCookieJar $responseCookieJar */ public function __construct(ResponseCookieJar $responseCookieJar) { $this->responseCookieJar = $responseCookieJar; } /** * {@inheritdoc} * * @see \Concrete\Core\Http\Middleware\MiddlewareInterface::process() */ public function process(Request $request, DelegateInterface $frame) { $response = $frame->next($request); $cleared = $this->responseCookieJar->getClearedCookies(); foreach ($cleared as $cookie) { $response->headers->clearCookie($cookie, DIR_REL . '/'); } $cookies = $this->responseCookieJar->getCookies(); foreach ($cookies as $cookie) { $response->headers->setCookie($cookie); } return $response; } }
public function __construct( MiddlewareInterface $middleware, DelegateInterface $nextDelegate, HttpFoundationFactory $foundationFactory ) { $this->middleware = $middleware; $this->nextDelegate = $nextDelegate; $this->foundationFactory = $foundationFactory; } /** * Dispatch the next available middleware and return the response. * * @param Request $request * @return Response */ public function next(Request $request) { $response = $this->middleware->process($request, $this->nextDelegate); // Negotiate PSR7 responses if ($response instanceof ResponseInterface) { return $this->foundationFactory->createResponse($response); } return $response; } }
* Middleware for applying state changes to the application * @package Concrete\Core\Http\Middleware */ class ApplicationMiddleware implements MiddlewareInterface, ApplicationAwareInterface { use ApplicationAwareTrait; /** * Apply the request instance to the request singleton * @param \Symfony\Component\HttpFoundation\Request $request * @param \Concrete\Core\Http\Middleware\DelegateInterface $frame * @return \Symfony\Component\HttpFoundation\Response */ public function process(Request $request, DelegateInterface $frame) { \Concrete\Core\Http\Request::setInstance($request); $this->app->instance('Concrete\Core\Http\Request', $request); return $frame->next($request); } }
public function __construct( MiddlewareInterface $middleware, DelegateInterface $nextDelegate, HttpFoundationFactory $foundationFactory ) { $this->middleware = $middleware; $this->nextDelegate = $nextDelegate; $this->foundationFactory = $foundationFactory; } /** * Dispatch the next available middleware and return the response. * * @param Request $request * @return Response */ public function next(Request $request) { $response = $this->middleware->process($request, $this->nextDelegate); // Negotiate PSR7 responses if ($response instanceof ResponseInterface) { return $this->foundationFactory->createResponse($response); } return $response; } }
public function withoutMiddleware(MiddlewareInterface $middleware) { $stack = clone $this; $stack->middleware = array_map(function($priorityGroup) use ($middleware) { return array_map(function($stackMiddleware) use ($middleware) { return $middleware === $stackMiddleware ? null : $stackMiddleware; }, $priorityGroup); }, $stack->middleware); return $stack; } /** * @inheritdoc */ public function process(Request $request) { $stack = $this->getStack(); return $stack->next($request); } /** * Reduce middleware into a stack of functions that each call the next * @return callable */ private function getStack() { $processed = []; foreach ($this->middlewareGenerator() as $middleware) { $processed[] = $middleware; } $middleware = array_reverse($processed); $stack = array_reduce($middleware, $this->getZipper(), $this->dispatcher); return $stack; }
*/ public function removeMiddleware(MiddlewareInterface $middleware) { $this->stack = $this->stack->withoutMiddleware($middleware); return $this; } /** * Take a request and pass it through middleware, then return the response * @param SymfonyRequest $request * @return SymfonyResponse */ public function handleRequest(SymfonyRequest $request) { $stack = $this->stack; if ($stack instanceof MiddlewareStack) { $stack = $stack->withDispatcher($this->app->make(DispatcherDelegate::class, [$this->dispatcher])); } return $stack->process($request); } }
'registerLegacyRoutes', // Register legacy config values 'registerLegacyConfigValues', // Handle loading permission keys 'handlePermissionKeys', // Handle eventing 'handleEventing', ]); } else { $this->initializeSystemTimezone(); } // Create the request to use $request = $this->createRequest(); if (!$response) { $response = $this->server->handleRequest($request); } // Prepare and return the response return $response->prepare($request); } /** * Define the base url if not defined * This will define `BASE_URL` to whatever is resolved from the resolver. * * @deprecated In a future major version this will be part of HTTP middleware * * @return Response|void Returns a response if an error occurs */ protected function initializeLegacyURLDefinitions() { if (!defined('BASE_URL')) { $resolver = $this->getUrlResolver(); try {
$this->status = self::STATUS_ACTIVE; } } /** * Begin the runtime. */ public function run() { switch ($this->status) { case self::STATUS_ENDED: // We've already ended, lets just return return; case self::STATUS_INACTIVE: throw new \RuntimeException('Runtime has not yet booted.'); } $runner = $this->getRunner(); $response = $runner->run(); if ($response) { $this->sendResponse($response); } return $response; } /** * The method that handles properly sending a response. * * @param \Symfony\Component\HttpFoundation\Response $response */ protected function sendResponse(Response $response) { $response->send(); // Set the status to ended $this->status = self::STATUS_ENDED; }
* Include all autoloaders. * ---------------------------------------------------------------------------- */ require __DIR__ . '/bootstrap/autoload.php'; /* * ---------------------------------------------------------------------------- * Begin concrete5 startup. * ---------------------------------------------------------------------------- */ $app = require __DIR__ . '/bootstrap/start.php'; /** @var \Concrete\Core\Application\Application $app */ /* * ---------------------------------------------------------------------------- * Run the runtime. * ---------------------------------------------------------------------------- */ $runtime = $app->getRuntime(); if ($response = $runtime->run()) { /* * ------------------------------------------------------------------------ * Shut it down. * ------------------------------------------------------------------------ */ $app->shutdown(); } else { return $app; }
<?php require 'concrete/dispatcher.php'; ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);
Key | Value |
Version | 8.6.0a3 |
Installed Version | 8.6.0a3 |
Key | Value |
concrete.version | 8.6.0a3 |
concrete.version_installed | 8.6.0a3 |
concrete.version_db | 20190708000000 |
concrete.installed | true |
concrete.locale | en_US |
concrete.charset | UTF-8 |
concrete.charset_bom | |
concrete.maintenance_mode | false |
concrete.debug.display_errors | true |
concrete.debug.detail | debug |
concrete.debug.error_reporting | null |
concrete.proxy.host | null |
concrete.proxy.port | null |
concrete.proxy.user | null |
concrete.proxy.password | null |
concrete.upload.extensions | *.flv;*.jpg;*.gif;*.jpeg;*.ico;*.docx;*.xla;*.png;*.psd;*.swf;*.doc;*.txt;*.xls;*.xlsx;*.csv;*.pdf;*.tiff;*.rtf;*.m4a;*.mov;*.wmv;*.mpeg;*.mpg;*.wav;*.3gp;*.avi;*.m4v;*.mp4;*.mp3;*.qt;*.ppt;*.pptx;*.kml;*.xml;*.svg;*.webm;*.ogg;*.ogv |
concrete.upload.chunking.enabled | true |
concrete.upload.chunking.chunkSize | null |
concrete.export.csv.include_bom | false |
concrete.interface.panel.page_relations | false |
concrete.mail.method | smtp |
concrete.mail.methods.smtp.server | in-v3.mailjet.com |
concrete.mail.methods.smtp.port | 587 |
concrete.mail.methods.smtp.username | 9cd0fa8588fb0768161cd29f2388f89f |
concrete.mail.methods.smtp.password | 805ccfbeb4b443f853a69dca76704517 |
concrete.mail.methods.smtp.encryption | TLS |
concrete.mail.methods.smtp.messages_per_connection | null |
concrete.cache.enabled | true |
concrete.cache.lifetime | 21600 |
concrete.cache.overrides | true |
concrete.cache.blocks | false |
concrete.cache.assets | false |
concrete.cache.theme_css | true |
concrete.cache.pages | 0 |
concrete.cache.doctrine_dev_mode | true |
concrete.cache.full_page_lifetime | default |
concrete.cache.full_page_lifetime_value | null |
concrete.cache.full_contents_assets_hash | false |
concrete.cache.directory | /var/www/html/concrete/application/files/cache |
concrete.cache.directory_relative | null |
concrete.cache.page.directory | /var/www/html/concrete/application/files/cache/pages |
concrete.cache.page.adapter | file |
concrete.cache.levels.overrides.drivers.core_ephemeral.class | \Stash\Driver\Ephemeral |
concrete.cache.levels.overrides.drivers.core_filesystem.class | Concrete\Core\Cache\Driver\FileSystemStashDriver |
concrete.cache.levels.overrides.drivers.core_filesystem.options.path | /var/www/html/concrete/application/files/cache/overrides |
concrete.cache.levels.overrides.drivers.core_filesystem.options.dirPermissions | 509 |
concrete.cache.levels.overrides.drivers.core_filesystem.options.filePermissions | 436 |
concrete.cache.levels.overrides.drivers.redis.class | Concrete\Core\Cache\Driver\RedisStashDriver |
concrete.cache.levels.overrides.drivers.redis.options.prefix | c5_overrides |
concrete.cache.levels.overrides.drivers.redis.options.database | 0 |
concrete.cache.levels.overrides.preferred_driver | core_filesystem |
concrete.cache.levels.expensive.drivers.core_ephemeral.class | \Stash\Driver\Ephemeral |
concrete.cache.levels.expensive.drivers.core_filesystem.class | Concrete\Core\Cache\Driver\FileSystemStashDriver |
concrete.cache.levels.expensive.drivers.core_filesystem.options.path | /var/www/html/concrete/application/files/cache/expensive |
concrete.cache.levels.expensive.drivers.core_filesystem.options.dirPermissions | 509 |
concrete.cache.levels.expensive.drivers.core_filesystem.options.filePermissions | 436 |
concrete.cache.levels.expensive.drivers.redis.class | Concrete\Core\Cache\Driver\RedisStashDriver |
concrete.cache.levels.expensive.drivers.redis.options.prefix | c5_expensive |
concrete.cache.levels.expensive.drivers.redis.options.database | 0 |
concrete.cache.levels.expensive.preferred_driver | core_filesystem |
concrete.cache.levels.object.drivers.core_ephemeral.class | \Stash\Driver\Ephemeral |
concrete.cache.levels.object.drivers.redis.class | Concrete\Core\Cache\Driver\RedisStashDriver |
concrete.cache.levels.object.drivers.redis.options.prefix | c5_object |
concrete.cache.levels.object.drivers.redis.options.database | 0 |
concrete.cache.levels.object.preferred_driver | core_ephemeral |
concrete.cache.clear.thumbnails | true |
concrete.design.enable_custom | true |
concrete.design.enable_layouts | true |
concrete.log.emails | 1 |
concrete.log.errors | 1 |
concrete.log.spam | false |
concrete.log.enable_dashboard_report | true |
concrete.log.configuration.mode | advanced |
concrete.log.configuration.simple.core_logging_level | NOTICE |
concrete.log.configuration.simple.handler | database |
concrete.log.configuration.simple.file.file | |
concrete.jobs.enable_scheduling | true |
concrete.filesystem.temp_directory | null |
concrete.filesystem.permissions.file | 436 |
concrete.filesystem.permissions.directory | 509 |
concrete.email.enabled | true |
concrete.email.default.address | concrete5@silo.lib.ia.us |
concrete.email.default.name | |
concrete.email.form_block.address | concrete5@silo.lib.ia.us |
concrete.email.forgot_password.address | concrete5@silo.lib.ia.us |
concrete.email.forgot_password.name | |
concrete.email.validate_registration.address | concrete5@silo.lib.ia.us |
concrete.email.validate_registration.name | |
concrete.email.workflow_notification.address | concrete5@silo.lib.ia.us |
concrete.email.workflow_notification.name | |
concrete.email.register_notification.address | concrete5@silo.lib.ia.us |
concrete.form.store_form_submissions | auto |
concrete.marketplace.enabled | true |
concrete.marketplace.request_timeout | 30 |
concrete.marketplace.token | null |
concrete.marketplace.site_token | null |
concrete.marketplace.intelligent_search | true |
concrete.marketplace.log_requests | false |
concrete.external.intelligent_search_help | true |
concrete.external.news | true |
concrete.misc.user_timezones | false |
concrete.misc.package_backup_directory | /var/www/html/concrete/application/files/trash |
concrete.misc.enable_progressive_page_reindex | true |
concrete.misc.mobile_theme_id | 0 |
concrete.misc.sitemap_approve_immediately | true |
concrete.misc.enable_translate_locale_en_us | false |
concrete.misc.page_search_index_lifetime | 259200 |
concrete.misc.enable_trash_can | true |
concrete.misc.app_version_display_in_header | true |
concrete.misc.default_jpeg_image_compression | 80 |
concrete.misc.default_png_image_compression | 9 |
concrete.misc.default_thumbnail_format | auto |
concrete.misc.inplace_image_operations_limit | 4194304 |
concrete.misc.basic_thumbnailer_generation_strategy | now |
concrete.misc.help_overlay | true |
concrete.misc.require_version_comments | false |
concrete.misc.enable_move_blocktypes_across_sets | false |
concrete.misc.image_editor_cors_policy.enable_cross_origin | false |
concrete.misc.image_editor_cors_policy.anonymous_request | true |
concrete.misc.generator_tag_display_in_header | true |
concrete.misc.login_redirect | DESKTOP |
concrete.misc.access_entity_updated | 1637095576 |
concrete.misc.latest_version | 8.6.0a3 |
concrete.misc.do_page_reindex_check | false |
concrete.theme.compress_preprocessor_output | true |
concrete.theme.generate_less_sourcemap | false |
concrete.updates.enable_auto_update_packages | false |
concrete.updates.enable_permissions_protection | true |
concrete.updates.check_threshold | 172800 |
concrete.updates.services.get_available_updates | http://www.concrete5.org/tools/update_core |
concrete.updates.services.inspect_update | http://www.concrete5.org/tools/inspect_update |
concrete.updates.skip_core | false |
concrete.paths.trash | /!trash |
concrete.paths.drafts | /!drafts |
concrete.icons.page_template.width | 120 |
concrete.icons.page_template.height | 90 |
concrete.icons.theme_thumbnail.width | 120 |
concrete.icons.theme_thumbnail.height | 90 |
concrete.icons.file_manager_listing.handle | file_manager_listing |
concrete.icons.file_manager_listing.width | 60 |
concrete.icons.file_manager_listing.height | 60 |
concrete.icons.file_manager_detail.handle | file_manager_detail |
concrete.icons.file_manager_detail.width | 400 |
concrete.icons.file_manager_detail.height | 400 |
concrete.icons.user_avatar.width | 80 |
concrete.icons.user_avatar.height | 80 |
concrete.icons.user_avatar.default | /concrete/images/avatar_none.png |
concrete.file_manager.images.use_exif_data_to_rotate_images | false |
concrete.file_manager.images.manipulation_library | gd |
concrete.file_manager.images.create_high_dpi_thumbnails | true |
concrete.file_manager.images.preview_image_size | small |
concrete.file_manager.images.preview_image_popover | true |
concrete.file_manager.images.svg_sanitization.action | sanitize |
concrete.file_manager.images.svg_sanitization.allowed_tags | |
concrete.file_manager.images.svg_sanitization.allowed_attributes | |
concrete.file_manager.images.image_editor_save_area_background_color | |
concrete.file_manager.items_per_page_options.0 | 10 |
concrete.file_manager.items_per_page_options.1 | 25 |
concrete.file_manager.items_per_page_options.2 | 50 |
concrete.file_manager.items_per_page_options.3 | 100 |
concrete.file_manager.items_per_page_options.4 | 250 |
concrete.file_manager.results | 10 |
concrete.search_users.results | 10 |
concrete.sitemap_xml.file | sitemap.xml |
concrete.sitemap_xml.frequency | weekly |
concrete.sitemap_xml.priority | 0.5 |
concrete.accessibility.toolbar_titles | true |
concrete.accessibility.toolbar_large_font | false |
concrete.accessibility.display_help_system | true |
concrete.accessibility.toolbar_tooltips | true |
concrete.i18n.choose_language_login | false |
concrete.i18n.auto_install_package_languages | true |
concrete.i18n.community_translation.entry_point | http://translate.concrete5.org/api |
concrete.i18n.community_translation.api_token | |
concrete.i18n.community_translation.progress_limit | 60 |
concrete.i18n.community_translation.cache_lifetime | 3600 |
concrete.i18n.community_translation.package_url | https://translate.concrete5.org/translate/package |
concrete.urls.concrete5 | http://www.concrete5.org |
concrete.urls.concrete5_secure | https://www.concrete5.org |
concrete.urls.newsflow | http://newsflow.concrete5.org |
concrete.urls.background_feed | //backgroundimages.concrete5.org/wallpaper |
concrete.urls.privacy_policy | //www.concrete5.org/legal/privacy-policy |
concrete.urls.background_feed_secure | https://backgroundimages.concrete5.org/wallpaper |
concrete.urls.background_info | http://backgroundimages.concrete5.org/get_image_data.php |
concrete.urls.videos | https://www.youtube.com/user/concrete5cms/videos |
concrete.urls.help.developer | http://documentation.concrete5.org/developers |
concrete.urls.help.user | http://documentation.concrete5.org/editors |
concrete.urls.help.forum | http://www.concrete5.org/community/forums |
concrete.urls.help.slack | https://www.concrete5.org/slack |
concrete.urls.paths.menu_help_service | /tools/get_remote_help_list/ |
concrete.urls.paths.site_page | /private/sites |
concrete.urls.paths.newsflow_slot_content | /tools/slot_content/ |
concrete.urls.paths.marketplace.connect | /marketplace/connect |
concrete.urls.paths.marketplace.connect_success | /marketplace/connect/-/connected |
concrete.urls.paths.marketplace.connect_validate | /marketplace/connect/-/validate |
concrete.urls.paths.marketplace.connect_new_token | /marketplace/connect/-/generate_token |
concrete.urls.paths.marketplace.checkout | /cart/-/add |
concrete.urls.paths.marketplace.purchases | /marketplace/connect/-/get_available_licenses |
concrete.urls.paths.marketplace.item_information | /marketplace/connect/-/get_item_information |
concrete.urls.paths.marketplace.item_free_license | /marketplace/connect/-/enable_free_license |
concrete.urls.paths.marketplace.remote_item_list | /marketplace/ |
concrete.white_label.logo | false |
concrete.white_label.name | false |
concrete.white_label.background_image | null |
concrete.session.name | CONCRETE5 |
concrete.session.handler | file |
concrete.session.redis.database | 1 |
concrete.session.save_path | null |
concrete.session.max_lifetime | 7200 |
concrete.session.cookie.cookie_path | false |
concrete.session.cookie.cookie_lifetime | 0 |
concrete.session.cookie.cookie_domain | false |
concrete.session.cookie.cookie_secure | false |
concrete.session.cookie.cookie_httponly | true |
concrete.session.remember_me.lifetime | 1209600 |
concrete.user.registration.enabled | false |
concrete.user.registration.type | disabled |
concrete.user.registration.captcha | true |
concrete.user.registration.email_registration | false |
concrete.user.registration.display_username_field | true |
concrete.user.registration.display_confirm_password_field | true |
concrete.user.registration.validate_email | false |
concrete.user.registration.approval | false |
concrete.user.registration.notification | false |
concrete.user.group.badge.default_point_value | 50 |
concrete.user.username.maximum | 64 |
concrete.user.username.minimum | 3 |
concrete.user.username.allowed_characters.boundary | A-Za-z0-9 |
concrete.user.username.allowed_characters.middle | A-Za-z0-9_\. |
concrete.user.username.allowed_characters.requirement_string | A username may only contain letters, numbers, dots (not at the beginning/end), and underscores (not at the beginning/end). |
concrete.user.username.allowed_characters.error_string | A username may only contain letters, numbers, dots (not at the beginning/end), and underscores (not at the beginning/end). |
concrete.user.password.maximum | 128 |
concrete.user.password.minimum | 5 |
concrete.user.password.required_special_characters | 0 |
concrete.user.password.required_lower_case | 0 |
concrete.user.password.required_upper_case | 0 |
concrete.user.password.reuse | 0 |
concrete.user.password.hash_portable | false |
concrete.user.password.hash_cost_log2 | 12 |
concrete.user.password.legacy_salt | |
concrete.user.email.test_mx_record | false |
concrete.user.email.strict | true |
concrete.user.private_messages.throttle_max | 20 |
concrete.user.private_messages.throttle_max_timespan | 15 |
concrete.user.deactivation.enable_login_threshold_deactivation | false |
concrete.user.deactivation.login.threshold | 120 |
concrete.user.deactivation.authentication_failure.enabled | false |
concrete.user.deactivation.authentication_failure.amount | 5 |
concrete.user.deactivation.authentication_failure.duration | 300 |
concrete.user.deactivation.message | This user is inactive. Please contact us regarding this account. |
concrete.spam.whitelist_group | 0 |
concrete.spam.notify_email | concrete5@silo.lib.ia.us |
concrete.calendar.colors.text | #ffffff |
concrete.calendar.colors.background | #3A87AD |
concrete.calendar.topic_attribute | event_categories |
concrete.security.session.invalidate_on_user_agent_mismatch | true |
concrete.security.session.invalidate_on_ip_mismatch | true |
concrete.security.session.invalidate_inactive_users.enabled | false |
concrete.security.session.invalidate_inactive_users.time | 300 |
concrete.security.misc.x_frame_options | SAMEORIGIN |
concrete.permissions.forward_to_login | true |
concrete.permissions.model | advanced |
concrete.seo.exclude_words | a, an, as, at, before, but, by, for, from, is, in, into, like, of, off, on, onto, per, since, than, the, this, that, to, up, via, with |
concrete.seo.url_rewriting | true |
concrete.seo.url_rewriting_all | false |
concrete.seo.redirect_to_canonical_url | 1 |
concrete.seo.canonical_url | null |
concrete.seo.canonical_url_alternative | null |
concrete.seo.trailing_slash | false |
concrete.seo.title_format | %2$s :: %1$s |
concrete.seo.title_segment_separator | :: |
concrete.seo.page_path_separator | - |
concrete.seo.group_name_separator | / |
concrete.seo.segment_max_length | 128 |
concrete.seo.paging_string | ccm_paging_p |
concrete.statistics.track_downloads | true |
concrete.limits.sitemap_pages | 100 |
concrete.limits.delete_pages | 100 |
concrete.limits.copy_pages | 10 |
concrete.limits.page_search_index_batch | 200 |
concrete.limits.job_queue_batch | 10 |
concrete.limits.style_customizer.size_min | -50 |
concrete.limits.style_customizer.size_max | 200 |
concrete.page.search.always_reindex | false |
concrete.composer.idle_timeout | 1 |
concrete.api.enabled | true |
concrete.api.grant_types.client_credentials | true |
concrete.api.grant_types.authorization_code | true |
concrete.api.grant_types.password_credentials | false |
concrete.mutex.semaphore.priority | 100 |
concrete.mutex.semaphore.class | Concrete\Core\System\Mutex\SemaphoreMutex |
concrete.mutex.file_lock.priority | 50 |
concrete.mutex.file_lock.class | Concrete\Core\System\Mutex\FileLockMutex |
concrete.version_db_installed | 20190708000000 |
concrete.multisite.enabled | true |
concrete.maintenance.version_job_page_num | 0 |
concrete.site | Nevada Public Library |
Key | Value |
list: | |
amp:list | |
sort_on | sortable_title |
Type | Event |
start_range:record | max |
start_query:date:list:record | 2018/06/13 23:59:59 GMT-5 |
review_state | published |
end_range:record | min |
end_query:date:list:record | 2018/06/13 00:00:00 GMT-5 |
advanced_search | True |
Key | Value |
USER | apache |
HOME | /usr/share/httpd |
SCRIPT_NAME | /index.php |
REQUEST_URI | /@@search?list%3A=&:list=&:list=&sort_on=sortable_title&Type=Event&start.range:record=max&start.query:date:list:record=2018/06/13%2023%3A59%3A59%20GMT-5&review_state=published&end.range:record=min&end.query:date:list:record=2018/06/13%2000%3A00%3A00%20GMT-5&advanced_search=True |
QUERY_STRING | list%3A=&:list=&:list=&sort_on=sortable_title&Type=Event&start.range:record=max&start.query:date:list:record=2018/06/13%2023%3A59%3A59%20GMT-5&review_state=published&end.range:record=min&end.query:date:list:record=2018/06/13%2000%3A00%3A00%20GMT-5&advanced_search=True |
REQUEST_METHOD | GET |
SERVER_PROTOCOL | HTTP/1.1 |
GATEWAY_INTERFACE | CGI/1.1 |
REDIRECT_QUERY_STRING | list%3A=&:list=&:list=&sort_on=sortable_title&Type=Event&start.range:record=max&start.query:date:list:record=2018/06/13%2023%3A59%3A59%20GMT-5&review_state=published&end.range:record=min&end.query:date:list:record=2018/06/13%2000%3A00%3A00%20GMT-5&advanced_search=True |
REDIRECT_URL | /@@search |
REMOTE_PORT | 44534 |
SCRIPT_FILENAME | /var/www/html/concrete/index.php |
SERVER_ADMIN | helpdesk@silo.lib.ia.us |
CONTEXT_DOCUMENT_ROOT | /var/www/html/concrete |
CONTEXT_PREFIX | |
REQUEST_SCHEME | https |
DOCUMENT_ROOT | /var/www/html/concrete |
REMOTE_ADDR | 52.86.117.142 |
SERVER_PORT | 443 |
SERVER_ADDR | 10.192.241.84 |
SERVER_NAME | www.nevada.lib.ia.us |
SERVER_SOFTWARE | Apache/2.4.37 (Red Hat Enterprise Linux) OpenSSL/1.1.1k |
SERVER_SIGNATURE | |
PATH | /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin |
HTTP_HOST | www.nevada.lib.ia.us |
HTTP_USER_AGENT | claudebot |
HTTP_ACCEPT | */* |
proxy-nokeepalive | 1 |
SSL_TLS_SNI | www.nevada.lib.ia.us |
HTTPS | on |
SCRIPT_URI | https://www.nevada.lib.ia.us/@@search |
SCRIPT_URL | /@@search |
UNIQUE_ID | ZgZ-UHMstfmaqdswPxaTkQAAAIM |
REDIRECT_STATUS | 200 |
REDIRECT_SSL_TLS_SNI | www.nevada.lib.ia.us |
REDIRECT_HTTPS | on |
REDIRECT_SCRIPT_URI | https://www.nevada.lib.ia.us/@@search |
REDIRECT_SCRIPT_URL | /@@search |
REDIRECT_UNIQUE_ID | ZgZ-UHMstfmaqdswPxaTkQAAAIM |
FCGI_ROLE | RESPONDER |
PHP_SELF | /index.php |
REQUEST_TIME_FLOAT | 1711701840.6597 |
REQUEST_TIME | 1711701840 |