8
8
use \CarlBennett \MVC \Libraries \Template ;
9
9
use \CarlBennett \MVC \Libraries \View ;
10
10
11
+ use \BNETDocs \Libraries \CSRF ;
11
12
use \BNETDocs \Libraries \EventTypes ;
12
13
use \BNETDocs \Libraries \Exceptions \UserNotFoundException ;
13
14
use \BNETDocs \Libraries \Logger ;
@@ -37,18 +38,16 @@ public function &run( Router &$router, View &$view, array &$args ) {
37
38
$ model = new UserResetPasswordModel ();
38
39
39
40
$ model ->error = null ;
40
- $ model ->csrf_id = isset ( $ data [ 'csrf_id ' ]) ? $ data [ 'csrf_id ' ] : null ;
41
- $ model ->csrf_token = (
42
- isset ( $ data [ 'csrf_token ' ]) ? $ data [ 'csrf_token ' ] : null
43
- );
41
+ $ model ->csrf_id = mt_rand ();
42
+ $ model ->csrf_token = CSRF ::generate ( $ model ->csrf_id );
44
43
$ model ->pw1 = isset ( $ data [ 'pw1 ' ]) ? $ data [ 'pw1 ' ] : null ;
45
44
$ model ->pw2 = isset ( $ data [ 'pw2 ' ]) ? $ data [ 'pw2 ' ] : null ;
46
45
$ model ->token = isset ( $ data [ 't ' ]) ? $ data [ 't ' ] : null ;
47
46
$ model ->user = null ;
48
47
$ model ->username = isset ( $ data [ 'username ' ]) ? $ data [ 'username ' ] : null ;
49
48
50
49
if ( $ router ->getRequestMethod () == 'POST ' ) {
51
- $ ret = $ this ->doPasswordReset ( $ model );
50
+ $ ret = $ this ->doPasswordReset ( $ model, $ data );
52
51
if ( $ ret !== self ::RET_EMAIL ) {
53
52
Logger::logEvent (
54
53
EventTypes::USER_PASSWORD_RESET ,
@@ -73,9 +72,21 @@ public function &run( Router &$router, View &$view, array &$args ) {
73
72
74
73
}
75
74
76
- protected function doPasswordReset ( UserResetPasswordModel &$ model ) {
75
+ protected function doPasswordReset ( UserResetPasswordModel &$ model, & $ data ) {
77
76
$ model ->error = 'INTERNAL_ERROR ' ;
78
77
78
+ $ csrf_id = isset ( $ data [ 'csrf_id ' ]) ? $ data [ 'csrf_id ' ] : null ;
79
+ $ csrf_token = (
80
+ isset ( $ data [ 'csrf_token ' ]) ? $ data [ 'csrf_token ' ] : null
81
+ );
82
+ $ csrf_valid = CSRF ::validate ( $ csrf_id , $ csrf_token );
83
+
84
+ if ( !$ csrf_valid ) {
85
+ $ model ->error = 'INVALID_CSRF ' ;
86
+ return self ::RET_FAILURE ;
87
+ }
88
+ CSRF ::invalidate ( $ csrf_id );
89
+
79
90
if ( empty ( $ model ->username )) {
80
91
$ model ->error = 'EMPTY_USERNAME ' ;
81
92
return self ::RET_FAILURE ;
0 commit comments