22
33define ('NO_AUTH_REQUIRED ' ,true );
44
5-
65// Main include
76include ($ _SERVER ['DOCUMENT_ROOT ' ]."/inc/main.php " );
87
9-
10- $ TAB = 'LOGIN ' ;
8+ $ TAB = 'login ' ;
119
1210// Logout
1311if (isset ($ _GET ['logout ' ])) {
1412 session_destroy ();
1513}
1614
15+
16+
1717// Login as someone else
1818if (isset ($ _SESSION ['user ' ])) {
1919 if ($ _SESSION ['user ' ] == 'admin ' && !empty ($ _GET ['loginas ' ])) {
3333 exit ;
3434}
3535
36- // Basic auth
37- if (isset ($ _POST ['user ' ]) && isset ($ _POST ['password ' ])) {
36+ function authenticate_user (){
3837 if (isset ($ _SESSION ['token ' ]) && isset ($ _POST ['token ' ]) && $ _POST ['token ' ] == $ _SESSION ['token ' ]) {
39- $ v_user = escapeshellarg ($ _POST ['user ' ]);
40- $ v_ip = escapeshellarg ($ _SERVER ['REMOTE_ADDR ' ]);
41- if (isset ($ _SERVER ['HTTP_CF_CONNECTING_IP ' ])){
42- if (!empty ($ _SERVER ['HTTP_CF_CONNECTING_IP ' ])){
43- $ v_ip = escapeshellarg ($ _SERVER ['HTTP_CF_CONNECTING_IP ' ]);
44- }
38+ $ v_user = escapeshellarg ($ _POST ['user ' ]);
39+ $ v_ip = escapeshellarg ($ _SERVER ['REMOTE_ADDR ' ]);
40+ if (isset ($ _SERVER ['HTTP_CF_CONNECTING_IP ' ])){
41+ if (!empty ($ _SERVER ['HTTP_CF_CONNECTING_IP ' ])){
42+ $ v_ip = escapeshellarg ($ _SERVER ['HTTP_CF_CONNECTING_IP ' ]);
4543 }
46- if ( isset ( $ _POST [ ' twofa ' ])) {
47- $ v_twofa = escapeshellarg ( $ _POST [ ' twofa ' ]);
48- }
49-
50- // Get user's salt
51- $ output = '' ;
52- exec ( HESTIA_CMD . " v-get-user-salt " . $ v_user . " " . $ v_ip . " json " , $ output , $ return_var );
53- $ pam = json_decode ( implode ( '' , $ output ), true );
54- if ( $ return_var > 0 ) {
55- sleep ( 5 ) ;
56- $ ERROR = " <a class= \" error \" > " . __ ( ' Invalid username or password ' ). " </a> " ;
44+ }
45+ // Get user's salt
46+ $ output = '' ;
47+ exec ( HESTIA_CMD . " v-get-user-salt " . $ v_user . " " . $ v_ip . " json " , $ output , $ return_var );
48+ $ pam = json_decode ( implode ( '' , $ output ), true );
49+ if ( $ return_var > 0 ) {
50+ sleep ( 2 );
51+ unset( $ _POST [ ' password ' ] );
52+ unset( $ _POST [ ' user ' ]);
53+ $ error = " <a class= \" error \" > " . __ ( ' Invalid username or password ' ). " </a> " ;
54+ return $ error ;
5755 } else {
5856 $ user = $ _POST ['user ' ];
5957 $ password = $ _POST ['password ' ];
8684
8785 // Check API answer
8886 if ( $ return_var > 0 ) {
89- sleep (5 );
90- $ ERROR = "<a class= \"error \"> " .__ ('Invalid username or password ' )."</a> " ;
87+ sleep (2 );
88+ unset($ _POST ['password ' ]);
89+ $ error = "<a class= \"error \"> " .__ ('Invalid username or password ' )."</a> " ;
90+ return $ error ;
9191 } else {
9292
9393 // Make root admin user
9999
100100 // Check if 2FA is active
101101 if ($ data [$ _POST ['user ' ]]['TWOFA ' ] != '' ) {
102- if (isset ($ v_twofa )){
103- $ v_twofa = str_replace (' ' , '' , $ v_twofa );
102+ if (empty ($ _POST ['twofa ' ])){
103+ return false ;
104+ }else {
105+ $ v_twofa = $ _POST ['twofa ' ];
104106 exec (HESTIA_CMD ."v-check-user-2fa " .$ v_user ." " .$ v_twofa , $ output , $ return_var );
105107 unset($ output );
106108 if ( $ return_var > 0 ) {
107- sleep (1 );
108- $ ERROR = "<a class= \"error \"> " .__ ('Invalid or missing 2FA token ' )."</a> " ;
109+ sleep (2 );
110+ $ error = "<a class= \"error \"> " .__ ('Invalid or missing 2FA token ' )."</a> " ;
111+ return $ error ;
112+ unset($ _POST ['twofa ' ]);
109113 }
110- } else {
111- sleep (1 );
112- $ ERROR = "<a class= \"error \"> " .__ ('Invalid or missing 2FA token ' )."</a> " ;
113- }
114+ }
115+ }
116+ // Define session user
117+ $ _SESSION ['user ' ] = key ($ data );
118+ $ v_user = $ _SESSION ['user ' ];
119+
120+ // Define language
121+ $ output = '' ;
122+ exec (HESTIA_CMD ."v-list-sys-languages json " , $ output , $ return_var );
123+ $ languages = json_decode (implode ('' , $ output ), true );
124+ if (in_array ($ data [$ v_user ]['LANGUAGE ' ], $ languages )){
125+ $ _SESSION ['language ' ] = $ data [$ v_user ]['LANGUAGE ' ];
126+ } else {
127+ $ _SESSION ['language ' ] = 'en ' ;
114128 }
115129
116- // Check if 2FA was successfully
117- if ( ! isset ($ v_twofa ) || $ ERROR == '' ) {
118- // Define session user
119- $ _SESSION ['user ' ] = key ($ data );
120- $ v_user = $ _SESSION ['user ' ];
121-
122- // Get user favorites
123- get_favourites ();
124-
125- // Define language
126- $ output = '' ;
127- exec (HESTIA_CMD ."v-list-sys-languages json " , $ output , $ return_var );
128- $ languages = json_decode (implode ('' , $ output ), true );
129- if (in_array ($ data [$ v_user ]['LANGUAGE ' ], $ languages )){
130- $ _SESSION ['language ' ] = $ data [$ v_user ]['LANGUAGE ' ];
131- } else {
132- $ _SESSION ['language ' ] = 'en ' ;
133- }
134-
135- // Regenerate session id to prevent session fixation
136- session_regenerate_id ();
137-
138- // Redirect request to control panel interface
139- if (!empty ($ _SESSION ['request_uri ' ])) {
140- header ("Location: " .$ _SESSION ['request_uri ' ]);
141- unset($ _SESSION ['request_uri ' ]);
142- exit ;
130+ // Regenerate session id to prevent session fixation
131+ session_regenerate_id ();
132+
133+ // Redirect request to control panel interface
134+ if (!empty ($ _SESSION ['request_uri ' ])) {
135+ header ("Location: " .$ _SESSION ['request_uri ' ]);
136+ unset($ _SESSION ['request_uri ' ]);
137+ exit ;
138+ } else {
139+ if ($ v_user == 'admin ' ) {
140+ header ("Location: /list/user/ " );
143141 } else {
144- if ($ v_user == 'admin ' ) {
145- header ("Location: /list/user/ " );
146- } else {
147- header ("Location: /list/web/ " );
148- }
149- exit ;
142+ header ("Location: /list/web/ " );
150143 }
144+ exit ;
151145 }
152146 }
153147 }
154- } else {
155- sleep (1 );
156- $ ERROR = "<a class= \"error \"> " .__ ('Invalid or missing token ' )."</a> " ;
157148 }
158149}
159150
151+ if (!empty ($ _POST ['user ' ]) && !empty ($ _POST ['password ' ]) && !empty ($ _POST ['twofa ' ])){
152+ $ error = authenticate_user ();
153+ } else if (!empty ($ _POST ['user ' ]) && !empty ($ _POST ['password ' ])) {
154+ $ error = authenticate_user ();
155+ }
160156// Check system configuration
161157load_hestia_config ();
162158
180176
181177// Generate CSRF token
182178$ _SESSION ['token ' ] = md5 (uniqid (mt_rand (), true ));
183-
184179require_once ($ _SERVER ['DOCUMENT_ROOT ' ].'/inc/i18n/ ' .$ _SESSION ['language ' ].'.php ' );
185180require_once ('../templates/header.html ' );
186- require_once ('../templates/login.html ' );
181+ if (empty ($ _POST ['user ' ])) {
182+ require_once ('../templates/login.html ' );
183+ }else if (empty ($ _POST ['password ' ])) {
184+ require_once ('../templates/login_1.html ' );
185+ }else if (empty ($ _POST ['twofa ' ])) {
186+ require_once ('../templates/login_2.html ' );
187+ } else {
188+ require_once ('../templates/login.html ' );
189+ }
190+ ?>
0 commit comments