From 8f6f9ab77c4c9820656ffa8ecd01bc3e68f1ca95 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Sun, 15 Jun 2008 22:03:19 +0000 Subject: [PATCH] Login failed page added --- .gitattributes | 3 + application/ship-simu/config.php | 3 + .../templates/de/code/login_failed.ctp | 23 ++++ .../web/class_WebLoginFailedCommand.php | 115 ++++++++++++++++++ .../default/class_WebDefaultController.php | 2 +- .../class_WebLoginFailedController.php | 81 ++++++++++++ .../login/class_WebLoginAreaController.php | 10 +- 7 files changed, 234 insertions(+), 3 deletions(-) create mode 100644 application/ship-simu/templates/de/code/login_failed.ctp create mode 100644 inc/classes/main/commands/web/class_WebLoginFailedCommand.php create mode 100644 inc/classes/main/controller/default/class_WebLoginFailedController.php diff --git a/.gitattributes b/.gitattributes index bff812f..50e64d5 100644 --- a/.gitattributes +++ b/.gitattributes @@ -129,6 +129,7 @@ application/ship-simu/templates/de/.htaccess -text application/ship-simu/templates/de/code/footer.ctp -text application/ship-simu/templates/de/code/header.ctp -text application/ship-simu/templates/de/code/home.ctp -text +application/ship-simu/templates/de/code/login_failed.ctp -text application/ship-simu/templates/de/code/register.ctp -text application/ship-simu/templates/de/code/shipsimu_main.ctp -text application/ship-simu/templates/de/html/.htaccess -text @@ -320,6 +321,7 @@ inc/classes/main/commands/web/.htaccess -text inc/classes/main/commands/web/class_WebDoFormCommand.php -text inc/classes/main/commands/web/class_WebHomeCommand.php -text inc/classes/main/commands/web/class_WebLoginAreaCommand.php -text +inc/classes/main/commands/web/class_WebLoginFailedCommand.php -text inc/classes/main/commands/web/class_WebRegisterCommand.php -text inc/classes/main/compressor/.htaccess -text inc/classes/main/compressor/class_Bzip2Compressor.php -text @@ -333,6 +335,7 @@ inc/classes/main/controller/class_BaseController.php -text inc/classes/main/controller/default/.htaccess -text inc/classes/main/controller/default/class_WebDefaultController.php -text inc/classes/main/controller/default/class_WebDefaultNewsController.php -text +inc/classes/main/controller/default/class_WebLoginFailedController.php -text inc/classes/main/controller/form/.htaccess -text inc/classes/main/controller/form/class_WebDoFormController.php -text inc/classes/main/controller/login/.htaccess -text diff --git a/application/ship-simu/config.php b/application/ship-simu/config.php index d5f7a48..1e1604e 100644 --- a/application/ship-simu/config.php +++ b/application/ship-simu/config.php @@ -85,6 +85,9 @@ $cfg->setConfigEntry('auth_method_class', "CookieAuth"); // CFG: APP-LOGIN-URL $cfg->setConfigEntry('app_login_url', "index.php?app=ship-simu&page=login_area"); +// CFG: LOGIN-FAILED-URL +$cfg->setConfigEntry('login_failed_url', "index.php?app=ship-simu&page=login_failed"); + // CFG: LOGIN-DEFAULT-ACTION $cfg->setConfigEntry('login_default_action', "welcome"); diff --git a/application/ship-simu/templates/de/code/login_failed.ctp b/application/ship-simu/templates/de/code/login_failed.ctp new file mode 100644 index 0000000..5ed3cbb --- /dev/null +++ b/application/ship-simu/templates/de/code/login_failed.ctp @@ -0,0 +1,23 @@ +
+ Du bist nicht mehr im Spiel eingeloggt! +
+ +
+ Du bist nicht mehr in Ship-Simu eingeloggt. Dies kann verschiedene Gründe haben: +
    +
  1. Dein Browser nimmt keine Cookies an.
  2. +
  3. Du hast den Loginbereich aus deinen Bookmarks/Favoriten aufgerufen + und die Cookies sind gelöscht.
  4. +
  5. Es besteht ein Problem mit Server, wofür du meistens nichts + kannst. Bitte kontaktiere den Support, falls dieses Problem + weiterhin besteht.
  6. +
+ Wenn du den Support kontaktierst, halte bitte sämtliche relevante + Informationen - nicht aber dein Passwort + - bereit. Du kannst auch einen Screenshot dieser Seite anfertigen und dem + Support diesen senden! +
+ + diff --git a/inc/classes/main/commands/web/class_WebLoginFailedCommand.php b/inc/classes/main/commands/web/class_WebLoginFailedCommand.php new file mode 100644 index 0000000..34a1970 --- /dev/null +++ b/inc/classes/main/commands/web/class_WebLoginFailedCommand.php @@ -0,0 +1,115 @@ + + * @version 0.0.0 + * @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software + * @license GNU GPL 3.0 or any newer version + * @link http://www.ship-simu.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 . + */ +class WebLoginFailedCommand extends BaseCommand implements Commandable { + /** + * Protected constructor + * + * @return void + */ + protected function __construct () { + // Call parent constructor + parent::__construct(__CLASS__); + + // Set special description + $this->setObjectDescription("Command for the "home" page"); + + // Create unique ID number + $this->generateUniqueId(); + + // Clean up a little + $this->removeSystemArray(); + } + + /** + * Creates an instance of this class + * + * @param $resolverInstance An instance of a command resolver class + * @return $commandInstance An instance a prepared command class + */ + public final static function createWebLoginFailedCommand (CommandResolver $resolverInstance) { + // Get new instance + $commandInstance = new WebLoginFailedCommand(); + + // Set the application instance + $commandInstance->setResolverInstance($resolverInstance); + + // Return the prepared instance + return $commandInstance; + } + + /** + * Executes the given command with given request and response objects + * + * @param $requestInstance An instance of a class with an Requestable interface + * @param $responseInstance An instance of a class with an Responseable interface + * @return void + */ + public function execute (Requestable $requestInstance, Responseable $responseInstance) { + // Get the application instance + $appInstance = $this->getResolverInstance()->getApplicationInstance(); + + // Prepare a template instance + $templateInstance = $this->prepareTemplateEngine($appInstance); + + // Load the master template + $masterTemplate = $appInstance->getMasterTemplate(); + + // Load header template + $templateInstance->loadCodeTemplate("header"); + + // Compile and assign it with a variable + $templateInstance->compileTemplate(); + $templateInstance->assignTemplateWithVariable("header", "header"); + + // Load footer template + $templateInstance->loadCodeTemplate("footer"); + + // Compile and assign it with a variable + $templateInstance->compileTemplate(); + $templateInstance->assignTemplateWithVariable("footer", "footer"); + + // Load the login_failed template + $templateInstance->loadCodeTemplate("login_failed"); + + // Assign the login_failed template with the master template as a content ... ;) + $templateInstance->assignTemplateWithVariable("login_failed", "content"); + + // Load the master template + $templateInstance->loadCodeTemplate($masterTemplate); + + // Set title + $templateInstance->assignVariable('title', $this->getLanguageInstance()->getMessage('login_failed_title')); + + // ... and all variables. This should be merged together in a pattern + // to make things easier. A cache mechanism should be added between + // these two calls to cache compiled templates. + $templateInstance->compileVariables(); + + // Get the content back from the template engine and put it in the response class + $templateInstance->transferToResponse($responseInstance); + } +} + +// [EOF] +?> diff --git a/inc/classes/main/controller/default/class_WebDefaultController.php b/inc/classes/main/controller/default/class_WebDefaultController.php index ec56fdd..60ddfed 100644 --- a/inc/classes/main/controller/default/class_WebDefaultController.php +++ b/inc/classes/main/controller/default/class_WebDefaultController.php @@ -21,7 +21,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -class WebWebDefaultController extends BaseController implements Controller { +class WebDefaultController extends BaseController implements Controller { /** * Protected constructor * diff --git a/inc/classes/main/controller/default/class_WebLoginFailedController.php b/inc/classes/main/controller/default/class_WebLoginFailedController.php new file mode 100644 index 0000000..f3a7ce4 --- /dev/null +++ b/inc/classes/main/controller/default/class_WebLoginFailedController.php @@ -0,0 +1,81 @@ + + * @version 0.0.0 + * @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software + * @license GNU GPL 3.0 or any newer version + * @link http://www.ship-simu.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 . + */ +class WebLoginFailedController extends BaseController implements Controller { + /** + * Protected constructor + * + * @return void + */ + protected function __construct () { + // Call parent constructor + parent::__construct(__CLASS__); + + // Set part description + $this->setObjectDescription("Login failed controller"); + + // Create unique ID number + $this->generateUniqueId(); + } + + /** + * Creates an instance of this class + * + * @param $resolverInstance An instance of a command resolver class + * @return $controllerInstance A prepared instance of this class + */ + public final static function createWebLoginFailedController (CommandResolver $resolverInstance) { + // Create the instance + $controllerInstance = new WebLoginFailedController(); + + // Set the command resolver + $controllerInstance->setResolverInstance($resolverInstance); + + // Return the prepared instance + return $controllerInstance; + } + + /** + * Handles the given request and response + * + * @param $requestInstance An instance of a request class + * @param $responseInstance An instance of a response class + * @return void + */ + public function handleRequest (Requestable $requestInstance, Responseable $responseInstance) { + // Get the command instance + $commandInstance = $this->getResolverInstance()->resolvCommandByRequest($requestInstance); + + // This request was valid! :-D + $requestInstance->requestIsValid(); + + // Execute the command + $commandInstance->execute($requestInstance, $responseInstance); + + // Flush the response out + $responseInstance->flushBuffer(); + } +} + +// [EOF] +?> diff --git a/inc/classes/main/controller/login/class_WebLoginAreaController.php b/inc/classes/main/controller/login/class_WebLoginAreaController.php index 34893a1..883cfca 100644 --- a/inc/classes/main/controller/login/class_WebLoginAreaController.php +++ b/inc/classes/main/controller/login/class_WebLoginAreaController.php @@ -68,8 +68,14 @@ class WebLoginAreaController extends BaseController implements Controller { * @return void */ public function handleRequest (Requestable $requestInstance, Responseable $responseInstance) { - // Run the pre filters - $this->executePreFilters($requestInstance, $responseInstance); + // Try to run the pre filters, if auth exceptions come through redirect here + try { + // Run the pre filters + $this->executePreFilters($requestInstance, $responseInstance); + } catch (UserAuthorizationException $e) { + // Redirect to main page + $responseInstance->redirectToConfiguredUrl('login_failed_url'); + } // Get the command instance from the resolver by sending a request instance to the resolver $commandInstance = $this->getResolverInstance()->resolvCommandByRequest($requestInstance); -- 2.39.2