Continued:
[core.git] / framework / main / classes / filter / change / class_PasswordChangeFilter.php
1 <?php
2 // Own namespace
3 namespace Org\Mxchange\CoreFramework\Filter\Change\Password;
4
5 // Import framework stuff
6 use Org\Mxchange\CoreFramework\Filter\BaseFilter;
7 use Org\Mxchange\CoreFramework\Filter\Chain\FilterChainException;
8 use Org\Mxchange\CoreFramework\Filter\Filterable;
9 use Org\Mxchange\CoreFramework\Middleware\Debug\DebugMiddleware;
10 use Org\Mxchange\CoreFramework\Registry\Object\ObjectRegistry;
11 use Org\Mxchange\CoreFramework\Request\Requestable;
12 use Org\Mxchange\CoreFramework\Response\Responseable;
13
14 /**
15  * A filter for password change detection
16  *
17  * @author              Roland Haeder <webmaster@shipsimu.org>
18  * @version             0.0.0
19  * @copyright   Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2023 Core Developer Team
20  * @license             GNU GPL 3.0 or any newer version
21  * @link                http://www.shipsimu.org
22  *
23  * This program is free software: you can redistribute it and/or modify
24  * it under the terms of the GNU General Public License as published by
25  * the Free Software Foundation, either version 3 of the License, or
26  * (at your option) any later version.
27  *
28  * This program is distributed in the hope that it will be useful,
29  * but WITHOUT ANY WARRANTY; without even the implied warranty of
30  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
31  * GNU General Public License for more details.
32  *
33  * You should have received a copy of the GNU General Public License
34  * along with this program. If not, see <http://www.gnu.org/licenses/>.
35  */
36 class PasswordChangeFilter extends BaseFilter implements Filterable {
37         /**
38          * Protected constructor
39          *
40          * @return      void
41          */
42         private function __construct () {
43                 // Call parent constructor
44                 parent::__construct(__CLASS__);
45         }
46
47         /**
48          * Creates an instance of this filter class
49          *
50          * @param       $controllerInstance             An instance of a controller class
51          * @return      $filterInstance                 An instance of this filter class
52          */
53         public static final function createPasswordChangeFilter () {
54                 // Get a new instance
55                 $filterInstance = new PasswordChangeFilter();
56
57                 // Return the instance
58                 return $filterInstance;
59         }
60
61         /**
62          * Executes the filter with given request and response objects
63          *
64          * @param       $requestInstance        An instance of a class with an Requestable interface
65          * @param       $responseInstance       An instance of a class with an Responseable interface
66          * @return      void
67          * @todo        Finished updating user password hash here. HINT: Use the User class again.
68          * @throws      FilterChainException    If this filter fails to operate
69          */
70         public function execute (Requestable $requestInstance, Responseable $responseInstance) {
71                 // Get both passwords
72                 $pass1 = $requestInstance->getRequestElement('pass1');
73                 $pass2 = $requestInstance->getRequestElement('pass2');
74
75                 // Is only first email set?
76                 if ((!empty($pass1)) && (empty($pass2))) {
77                         // Request is invalid!
78                         $requestInstance->setIsRequestValid(FALSE);
79
80                         // Email 2 is empty
81                         $responseInstance->addFatalMessage('pass2_empty');
82
83                         // Stop processing here
84                         throw new FilterChainException($this, self::EXCEPTION_FILTER_CHAIN_INTERCEPTED);
85                 }
86
87                 // Is only second pass set?
88                 if ((empty($pass1)) && (!empty($pass2))) {
89                         // Request is invalid!
90                         $requestInstance->setIsRequestValid(FALSE);
91
92                         // Email 1 is empty
93                         $responseInstance->addFatalMessage('pass1_empty');
94
95                         // Stop processing here
96                         throw new FilterChainException($this, self::EXCEPTION_FILTER_CHAIN_INTERCEPTED);
97                 }
98
99                 // Are password and confirmation empty?
100                 if ((empty($pass1)) && (empty($pass2))) {
101                         // Don't change password here
102                         return true;
103                 }
104
105                 // Do both match?
106                 if ($pass1 != $pass2) {
107                         // Request is invalid!
108                         $requestInstance->setIsRequestValid(FALSE);
109
110                         // Emails are mismatching
111                         $responseInstance->addFatalMessage('pass_mismatch');
112
113                         // Stop processing here
114                         throw new FilterChainException($this, self::EXCEPTION_FILTER_CHAIN_INTERCEPTED);
115                 }
116
117                 // Now, get a user instance for comparison
118                 $userInstance = ObjectRegistry::getRegistry('generic')->getInstance('user');
119
120                 // Update the "password" field
121                 DebugMiddleware::getSelfInstance()->partialStub('Unfinished part.');
122         }
123
124 }