getHeader('Origin'); $allowedOrigins = self::getAllowedOrigins($request); if (!($origin == '' || preg_match('/https?:\/\/localhost/', $origin) === 1 || in_array($origin, $allowedOrigins))) { // Don't allow CORS from other domains to prevent XSS. Logging::error("request origin '{$origin}' is not in allowed '" . implode(', ', $allowedOrigins) . "'!"); throw new Zend_Controller_Action_Exception('Forbidden', 403); } // Allow AJAX requests from configured websites. We use this to allow other pages to use LibreTimes API. if ($origin) { $response = $response->setHeader('Access-Control-Allow-Origin', $origin); } } /** * Get all allowed origins. * * @param Request $request request object */ public static function getAllowedOrigins($request) { $config = Config::getConfig(); return array_merge( $config['allowedCorsOrigins'], self::getDatabaseAllowedOrigins() ); } /** * Get database allowed origins. * * @return array */ private static function getDatabaseAllowedOrigins() { return array_map( 'trim', explode( PHP_EOL, Application_Model_Preference::GetAllowedCorsUrls() ) ); } }