From: Roland Haeder Date: Mon, 23 Mar 2015 02:17:22 +0000 (+0100) Subject: HttpRequest and HttpResponse were to generic as they were only used for HTML X-Git-Url: https://git.mxchange.org/?p=core.git;a=commitdiff_plain;h=bb1e3a7f36ad3f7fa235c7601586d0caebd71ed1 HttpRequest and HttpResponse were to generic as they were only used for HTML responses. Later on this framework will also handle other protocols or formats that are based on HTTP (such as RSS). So by using Http as class prefix but actually responding with HTML will exclude such other response types which is not a good idea. Signed-off-by: Roland Häder --- diff --git a/inc/classes/main/class_BaseFrameworkSystem.php b/inc/classes/main/class_BaseFrameworkSystem.php index c3bb447f..88fdae37 100644 --- a/inc/classes/main/class_BaseFrameworkSystem.php +++ b/inc/classes/main/class_BaseFrameworkSystem.php @@ -2229,8 +2229,11 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // Is 'HTTP_HOST' set? if (isset($_SERVER['HTTP_HOST'])) { - // Then it is a HTTP response/request - $responseType = 'http'; + /* + * Then it is a HTML response/request as RSS and so on may be + * transfered over HTTP as well. + */ + $responseType = 'html'; } // END - if // Return it diff --git a/inc/classes/main/request/html/.htaccess b/inc/classes/main/request/html/.htaccess new file mode 100644 index 00000000..3a428827 --- /dev/null +++ b/inc/classes/main/request/html/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/inc/classes/main/request/html/class_HtmlRequest.php b/inc/classes/main/request/html/class_HtmlRequest.php new file mode 100644 index 00000000..63ccd826 --- /dev/null +++ b/inc/classes/main/request/html/class_HtmlRequest.php @@ -0,0 +1,117 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Core Developer Team + * @license GNU GPL 3.0 or any newer version + * @link http://www.shipsimu.org + * @todo Move out the cookie part to a seperate class, e.g. Cookie + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +class HtmlRequest extends BaseRequest implements Requestable { + /** + * Protected constructor + * + * @return void + */ + protected function __construct () { + // Call parent constructor + parent::__construct(__CLASS__); + } + + /** + * Creates an instance of this class and prepares it a little + * + * @return $requestInstance An instance of this class + */ + public static final function createHtmlRequest () { + // Create an instance + $requestInstance = new HtmlRequest(); + + // Prepare the HTML request data for usage + $requestInstance->prepareRequestData(); + + // Return the prepared instance + return $requestInstance; + } + + /** + * Prepares the HTML request data for usage by currently copying + * $_REQUEST into a private attribute. Later on we can add more + * things for initialization here. + * + * @return void + */ + public function prepareRequestData () { + // Copy GET then POST data + $this->setRequestData(array_merge($_GET, $_POST)); + } + + /** + * Getter for a header element or 'null' if header was not found + * + * @param $headerName Name of the header + * @return $headerValue Value of the header or 'null' if not found + */ + public function getHeaderElement ($headerName) { + // Default return value on error + $headerValue = NULL; + + // Construct the name + $name = 'HTTP_' . strtoupper($this->convertDashesToUnderscores($headerName)); + + // Does this header exist? + if (isset($_SERVER[$name])) { + $headerValue = $_SERVER[$name]; + } // END - if + + // Return the value + return $headerValue; + } + + /** + * Getter for request method. This getter might be useful for security filters + * + * @return $requestMethod Used request method + */ + public final function getRequestMethod () { + return $_SERVER['REQUEST_METHOD']; + } + + /** + * Reads a cookie and returns it's value or null if not found + * + * @param $cookieName Name of cookie we shall read + * @return $cookieValue Value of cookie or null if not found + */ + public final function readCookie ($cookieName) { + // Default is no cookie with that name found + $cookieValue = NULL; + + // Is the cookie set? + if (isset($_COOKIE[$cookieName])) { + // Then get it + $cookieValue = $_COOKIE[$cookieName]; + } // END - if + + // Return the value + return $cookieValue; + } +} + +// [EOF] +?> diff --git a/inc/classes/main/request/web/.htaccess b/inc/classes/main/request/web/.htaccess deleted file mode 100644 index 3a428827..00000000 --- a/inc/classes/main/request/web/.htaccess +++ /dev/null @@ -1 +0,0 @@ -Deny from all diff --git a/inc/classes/main/request/web/class_HttpRequest.php b/inc/classes/main/request/web/class_HttpRequest.php deleted file mode 100644 index 37628136..00000000 --- a/inc/classes/main/request/web/class_HttpRequest.php +++ /dev/null @@ -1,117 +0,0 @@ - - * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Core Developer Team - * @license GNU GPL 3.0 or any newer version - * @link http://www.shipsimu.org - * @todo Move out the cookie part to a seperate class, e.g. Cookie - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -class HttpRequest extends BaseRequest implements Requestable { - /** - * Protected constructor - * - * @return void - */ - protected function __construct () { - // Call parent constructor - parent::__construct(__CLASS__); - } - - /** - * Creates an instance of this class and prepares it a little - * - * @return $httpInstance An instance of this class - */ - public static final function createHttpRequest () { - // Create an instance - $httpInstance = new HttpRequest(); - - // Prepare the HTTP request data for usage - $httpInstance->prepareRequestData(); - - // Return the prepared instance - return $httpInstance; - } - - /** - * Prepares the HTTP request data for usage by currently copying - * $_REQUEST into a private attribute. Later on we can add more - * things for initialization here. - * - * @return void - */ - public function prepareRequestData () { - // Copy GET then POST data - $this->setRequestData(array_merge($_GET, $_POST)); - } - - /** - * Getter for a header element or 'null' if header was not found - * - * @param $headerName Name of the header - * @return $headerValue Value of the header or 'null' if not found - */ - public function getHeaderElement ($headerName) { - // Default return value on error - $headerValue = NULL; - - // Construct the name - $name = 'HTTP_' . strtoupper($this->convertDashesToUnderscores($headerName)); - - // Does this header exist? - if (isset($_SERVER[$name])) { - $headerValue = $_SERVER[$name]; - } // END - if - - // Return the value - return $headerValue; - } - - /** - * Getter for request method. This getter might be useful for security filters - * - * @return $requestMethod Used request method - */ - public final function getRequestMethod () { - return $_SERVER['REQUEST_METHOD']; - } - - /** - * Reads a cookie and returns it's value or null if not found - * - * @param $cookieName Name of cookie we shall read - * @return $cookieValue Value of cookie or null if not found - */ - public final function readCookie ($cookieName) { - // Default is no cookie with that name found - $cookieValue = NULL; - - // Is the cookie set? - if (isset($_COOKIE[$cookieName])) { - // Then get it - $cookieValue = $_COOKIE[$cookieName]; - } // END - if - - // Return the value - return $cookieValue; - } -} - -// [EOF] -?> diff --git a/inc/classes/main/response/html/.htaccess b/inc/classes/main/response/html/.htaccess new file mode 100644 index 00000000..3a428827 --- /dev/null +++ b/inc/classes/main/response/html/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/inc/classes/main/response/html/class_HtmlResponse.php b/inc/classes/main/response/html/class_HtmlResponse.php new file mode 100644 index 00000000..80b50e88 --- /dev/null +++ b/inc/classes/main/response/html/class_HtmlResponse.php @@ -0,0 +1,218 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Core Developer Team + * @license GNU GPL 3.0 or any newer version + * @link http://www.shipsimu.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * The extended headers are taken from phpMyAdmin setup tool, written by + * Michal Cihar , licensed under GNU GPL 2.0. + */ +class HtmlResponse extends BaseResponse implements Responseable { + /** + * Protected constructor + * + * @return void + */ + protected function __construct () { + // Call parent constructor + parent::__construct(__CLASS__); + } + + /** + * Creates an object of this class + * + * @param $applicationInstance An instance of a manageable application + * @return $responseInstance A prepared instance of this class + */ + public static final function createHtmlResponse (ManageableApplication $applicationInstance) { + // Get a new instance + $responseInstance = new HtmlResponse(); + + // Set the application instance + $responseInstance->setApplicationInstance($applicationInstance); + + // Initialize the template engine here + $responseInstance->initTemplateEngine($applicationInstance); + + // Init web output instance + $responseInstance->initWebOutputInstance(); + + // Return the prepared instance + return $responseInstance; + } + + /** + * Initializes the template engine instance + * + * @param $applicationInstance An instance of a manageable application + * @return void + */ + public final function initTemplateEngine (ManageableApplication $applicationInstance) { + $this->setTemplateInstance($this->prepareTemplateInstance($applicationInstance)); + } + + /** + * Adds a cookie to the response + * + * @param $cookieName Cookie's name + * @param $cookieValue Value to store in the cookie + * @param $encrypted Do some extra encryption on the value + * @param $expires Timestamp of expiration (default: configured) + * @return void + * @throws ResponseHeadersAlreadySentException If headers are already sent + * @todo Encryption of cookie data not yet supported. + * @todo Why are these parameters conflicting? + * @todo If the return statement is removed and setcookie() commented out, + * @todo this will send only one cookie out, the first one. + */ + public function addCookie ($cookieName, $cookieValue, $encrypted = FALSE, $expires = NULL) { + //* DEBUG: */ echo $cookieName.'='.$cookieValue."
\n"; + // Are headers already sent? + if (headers_sent()) { + // Throw an exception here + //* DEBUG: */ return; + throw new ResponseHeadersAlreadySentException($this, self::EXCEPTION_HEADERS_ALREADY_SENT); + } // END - if + + // Shall we encrypt the cookie? + if ($encrypted === TRUE) { + // Unsupported at the moment + $this->partialStub('Encryption is unsupported at the moment.'); + } // END - if + + // For slow browsers set the cookie array element first + $_COOKIE[$cookieName] = $cookieValue; + + // Get all config entries + if (is_null($expires)) { + $expires = (time() + $this->getConfigInstance()->getConfigEntry('cookie_expire')); + } // END - if + + $path = $this->getConfigInstance()->getConfigEntry('cookie_path'); + $domain = $this->getConfigInstance()->getConfigEntry('cookie_domain'); + + setcookie($cookieName, $cookieValue, $expires); + //, $path, $domain, (isset($_SERVER['HTTPS'])) + return; + + // Now construct the full header + $cookieString = $cookieName . '=' . $cookieValue . '; '; + $cookieString .= 'expires=' . date('D, d-F-Y H:i:s', $expires) . ' GMT'; + // $cookieString .= "; path=".$path."; domain=".$domain; + + // Set the cookie as a header + $this->cookies[$cookieName] = $cookieString; + } + + /** + * Redirect to a configured URL. The URL can be absolute or relative. In + * case of relative URL it will be extended automatically. + * + * @param $configEntry The configuration entry which holds our URL + * @return void + * @throws ResponseHeadersAlreadySentException If headers are already sent + */ + public function redirectToConfiguredUrl ($configEntry) { + // Is the header not yet sent? + if (headers_sent()) { + // Throw an exception here + throw new ResponseHeadersAlreadySentException($this, self::EXCEPTION_HEADERS_ALREADY_SENT); + } // END - if + + // Assign application data + $this->getTemplateInstance()->assignApplicationData($this->getApplicationInstance()); + + // Get the url from config + $url = $this->getConfigInstance()->getConfigEntry($configEntry . '_url'); + + // Compile the URL + $url = $this->getTemplateInstance()->compileRawCode($url); + + // Do we have a 'http' in front of the URL? + if (substr(strtolower($url), 0, 4) != 'http') { + // Is there a / in front of the relative URL? + if (substr($url, 0, 1) == '/') { + $url = substr($url, 1); + } // END - if + + // No, then extend it with our base URL + $url = $this->getConfigInstance()->getConfigEntry('base_url') . '/' . $url; + } // END - if + + // Add redirect header + $this->addHeader('Location', str_replace('&', '&', $url)); + + // Set correct response status + $this->setResponseStatus('301 Moved Permanently'); + + // Clear the body + $this->setResponseBody(''); + + // Flush the result + $this->flushBuffer(); + + // All done here... + exit(); + } + + /** + * Expires the given cookie if it is set + * + * @param $cookieName Cookie to expire + * @return void + */ + public function expireCookie ($cookieName) { + // Is the cookie there? + if (isset($_COOKIE[$cookieName])) { + // Then expire it with 20 minutes past + $this->addCookie($cookieName, '', FALSE, (time() - 1200)); + + // Remove it from array + unset($_COOKIE[$cookieName]); + } // END - if + } + + /** + * Refreshs a given cookie. This will make the cookie live longer + * + * @param $cookieName Cookie to refresh + * @return void + */ + public function refreshCookie ($cookieName) { + // Only update existing cookies + if (isset($_COOKIE[$cookieName])) { + // Update the cookie + $this->addCookie($cookieName, $_COOKIE[$cookieName], FALSE); + } // END - if + } + + /** + * Getter for default command + * + * @return $defaultCommand Default command for this response + */ + public function getDefaultCommand () { + $defaultCommand = $this->getConfigInstance()->getConfigEntry('default_web_command'); + return $defaultCommand; + } +} + +// [EOF] +?> diff --git a/inc/classes/main/response/http/.htaccess b/inc/classes/main/response/http/.htaccess deleted file mode 100644 index 3a428827..00000000 --- a/inc/classes/main/response/http/.htaccess +++ /dev/null @@ -1 +0,0 @@ -Deny from all diff --git a/inc/classes/main/response/http/class_HttpResponse.php b/inc/classes/main/response/http/class_HttpResponse.php deleted file mode 100644 index d26b33bc..00000000 --- a/inc/classes/main/response/http/class_HttpResponse.php +++ /dev/null @@ -1,216 +0,0 @@ - - * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Core Developer Team - * @license GNU GPL 3.0 or any newer version - * @link http://www.shipsimu.org - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * The extended headers are taken from phpMyAdmin setup tool, written by - * Michal Cihar , licensed under GNU GPL 2.0. - */ -class HttpResponse extends BaseResponse implements Responseable { - /** - * Protected constructor - * - * @return void - */ - protected function __construct () { - // Call parent constructor - parent::__construct(__CLASS__); - } - - /** - * Creates an object of this class - * - * @param $applicationInstance An instance of a manageable application - * @return $responseInstance A prepared instance of this class - */ - public static final function createHttpResponse (ManageableApplication $applicationInstance) { - // Get a new instance - $responseInstance = new HttpResponse(); - - // Set the application instance - $responseInstance->setApplicationInstance($applicationInstance); - - // Initialize the template engine here - $responseInstance->initTemplateEngine($applicationInstance); - - // Init web output instance - $responseInstance->initWebOutputInstance(); - - // Return the prepared instance - return $responseInstance; - } - - /** - * Initializes the template engine instance - * - * @param $applicationInstance An instance of a manageable application - * @return void - */ - public final function initTemplateEngine (ManageableApplication $applicationInstance) { - $this->setTemplateInstance($this->prepareTemplateInstance($applicationInstance)); - } - - /** - * Adds a cookie to the response - * - * @param $cookieName Cookie's name - * @param $cookieValue Value to store in the cookie - * @param $encrypted Do some extra encryption on the value - * @param $expires Timestamp of expiration (default: configured) - * @return void - * @throws ResponseHeadersAlreadySentException If headers are already sent - * @todo Encryption of cookie data not yet supported. - * @todo Why are these parameters conflicting? - * @todo If the return statement is removed and setcookie() commented out, - * @todo this will send only one cookie out, the first one. - */ - public function addCookie ($cookieName, $cookieValue, $encrypted = FALSE, $expires = NULL) { - //* DEBUG: */ echo $cookieName.'='.$cookieValue."
\n"; - // Are headers already sent? - if (headers_sent()) { - // Throw an exception here - //* DEBUG: */ return; - throw new ResponseHeadersAlreadySentException($this, self::EXCEPTION_HEADERS_ALREADY_SENT); - } // END - if - - // Shall we encrypt the cookie? - if ($encrypted === TRUE) { - // Unsupported at the moment - $this->partialStub('Encryption is unsupported at the moment.'); - } // END - if - - // For slow browsers set the cookie array element first - $_COOKIE[$cookieName] = $cookieValue; - - // Get all config entries - if (is_null($expires)) { - $expires = (time() + $this->getConfigInstance()->getConfigEntry('cookie_expire')); - } // END - if - - $path = $this->getConfigInstance()->getConfigEntry('cookie_path'); - $domain = $this->getConfigInstance()->getConfigEntry('cookie_domain'); - - setcookie($cookieName, $cookieValue, $expires); - //, $path, $domain, (isset($_SERVER['HTTPS'])) - return; - - // Now construct the full header - $cookieString = $cookieName . '=' . $cookieValue . '; '; - $cookieString .= 'expires=' . date('D, d-F-Y H:i:s', $expires) . ' GMT'; - // $cookieString .= "; path=".$path."; domain=".$domain; - - // Set the cookie as a header - $this->cookies[$cookieName] = $cookieString; - } - - /** - * Redirect to a configured URL. The URL can be absolute or relative. In - * case of relative URL it will be extended automatically. - * - * @param $configEntry The configuration entry which holds our URL - * @return void - * @throws ResponseHeadersAlreadySentException If headers are already sent - */ - public function redirectToConfiguredUrl ($configEntry) { - // Is the header not yet sent? - if (headers_sent()) { - // Throw an exception here - throw new ResponseHeadersAlreadySentException($this, self::EXCEPTION_HEADERS_ALREADY_SENT); - } // END - if - - // Assign application data - $this->getTemplateInstance()->assignApplicationData($this->getApplicationInstance()); - - // Get the url from config - $url = $this->getConfigInstance()->getConfigEntry($configEntry . '_url'); - - // Compile the URL - $url = $this->getTemplateInstance()->compileRawCode($url); - - // Do we have a 'http' in front of the URL? - if (substr(strtolower($url), 0, 4) != 'http') { - // Is there a / in front of the relative URL? - if (substr($url, 0, 1) == '/') $url = substr($url, 1); - - // No, then extend it with our base URL - $url = $this->getConfigInstance()->getConfigEntry('base_url') . '/' . $url; - } // END - if - - // Add redirect header - $this->addHeader('Location', str_replace('&', '&', $url)); - - // Set correct response status - $this->setResponseStatus('301 Moved Permanently'); - - // Clear the body - $this->setResponseBody(''); - - // Flush the result - $this->flushBuffer(); - - // All done here... - exit(); - } - - /** - * Expires the given cookie if it is set - * - * @param $cookieName Cookie to expire - * @return void - */ - public function expireCookie ($cookieName) { - // Is the cookie there? - if (isset($_COOKIE[$cookieName])) { - // Then expire it with 20 minutes past - $this->addCookie($cookieName, '', FALSE, (time() - 1200)); - - // Remove it from array - unset($_COOKIE[$cookieName]); - } // END - if - } - - /** - * Refreshs a given cookie. This will make the cookie live longer - * - * @param $cookieName Cookie to refresh - * @return void - */ - public function refreshCookie ($cookieName) { - // Only update existing cookies - if (isset($_COOKIE[$cookieName])) { - // Update the cookie - $this->addCookie($cookieName, $_COOKIE[$cookieName], FALSE); - } // END - if - } - - /** - * Getter for default command - * - * @return $defaultCommand Default command for this response - */ - public function getDefaultCommand () { - $defaultCommand = $this->getConfigInstance()->getConfigEntry('default_web_command'); - return $defaultCommand; - } -} - -// [EOF] -?>