66// Main include
77include ($ _SERVER ['DOCUMENT_ROOT ' ]."/inc/main.php " );
88
9-
10- $ TAB = 'LOGIN ' ;
9+ $ TAB = 'login ' ;
1110
1211// Logout
1312if (isset ($ _GET ['logout ' ])) {
3332 exit ;
3433}
3534
36- // Basic auth
37- if (isset ($ _POST ['user ' ]) && isset ($ _POST ['password ' ])) {
35+ if (!empty ($ _POST ['user ' ]) && !empty ($ _POST ['password ' ]) && !empty ($ _POST ['twofa ' ])){
3836 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- }
45- }
46- if (isset ($ _POST ['twofa ' ])) {
47- $ v_twofa = escapeshellarg ($ _POST ['twofa ' ]);
37+ $ v_user = escapeshellarg ($ _POST ['user ' ]);
38+ $ v_ip = escapeshellarg ($ _SERVER ['REMOTE_ADDR ' ]);
39+ if (isset ($ _SERVER ['HTTP_CF_CONNECTING_IP ' ])){
40+ if (!empty ($ _SERVER ['HTTP_CF_CONNECTING_IP ' ])){
41+ $ v_ip = escapeshellarg ($ _SERVER ['HTTP_CF_CONNECTING_IP ' ]);
4842 }
43+ }
4944
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> " ;
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 (5 );
51+ unset($ _POST ['password ' ], $ _POST ['user ' ]);
52+ $ error = "<a class= \"error \"> " .__ ('Invalid username or password ' )."</a> " ;
5753 } else {
5854 $ user = $ _POST ['user ' ];
5955 $ password = $ _POST ['password ' ];
8783 // Check API answer
8884 if ( $ return_var > 0 ) {
8985 sleep (5 );
86+ unset($ _POST ['password ' ]);
9087 $ ERROR = "<a class= \"error \"> " .__ ('Invalid username or password ' )."</a> " ;
9188 } else {
9289
9996
10097 // Check if 2FA is active
10198 if ($ data [$ _POST ['user ' ]]['TWOFA ' ] != '' ) {
102- if (isset ($ v_twofa )){
103- $ v_twofa = str_replace (' ' , '' , $ v_twofa );
104- exec (HESTIA_CMD ."v-check-user-2fa " .$ v_user ." " .$ v_twofa , $ output , $ return_var );
99+ $ v_twofa = $ _POST ['twofa ' ];
100+ exec (HESTIA_CMD ."v-check-user-2fa " .$ v_user ." " .$ v_twofa , $ output , $ return_var );
105101 unset($ output );
106102 if ( $ return_var > 0 ) {
107103 sleep (1 );
108104 $ ERROR = "<a class= \"error \"> " .__ ('Invalid or missing 2FA token ' )."</a> " ;
109105 }
106+ }
107+ // Define session user
108+ $ _SESSION ['user ' ] = key ($ data );
109+ $ v_user = $ _SESSION ['user ' ];
110+
111+ // Define language
112+ $ output = '' ;
113+ exec (HESTIA_CMD ."v-list-sys-languages json " , $ output , $ return_var );
114+ $ languages = json_decode (implode ('' , $ output ), true );
115+ if (in_array ($ data [$ v_user ]['LANGUAGE ' ], $ languages )){
116+ $ _SESSION ['language ' ] = $ data [$ v_user ]['LANGUAGE ' ];
117+ } else {
118+ $ _SESSION ['language ' ] = 'en ' ;
119+ }
120+
121+ // Regenerate session id to prevent session fixation
122+ session_regenerate_id ();
123+
124+ // Redirect request to control panel interface
125+ if (!empty ($ _SESSION ['request_uri ' ])) {
126+ header ("Location: " .$ _SESSION ['request_uri ' ]);
127+ unset($ _SESSION ['request_uri ' ]);
128+ exit ;
129+ } else {
130+ if ($ v_user == 'admin ' ) {
131+ header ("Location: /list/user/ " );
110132 } else {
111- sleep (1 );
112- $ ERROR = "<a class= \"error \"> " .__ ('Invalid or missing 2FA token ' )."</a> " ;
133+ header ("Location: /list/web/ " );
113134 }
135+ exit ;
114136 }
137+ }
138+ }
139+ }
140+ } else if (!empty ($ _POST ['user ' ]) && !empty ($ _POST ['password ' ])) {
141+ if (isset ($ _SESSION ['token ' ]) && isset ($ _POST ['token ' ]) && $ _POST ['token ' ] == $ _SESSION ['token ' ]) {
142+ $ v_user = escapeshellarg ($ _POST ['user ' ]);
143+ $ v_ip = escapeshellarg ($ _SERVER ['REMOTE_ADDR ' ]);
144+ if (isset ($ _SERVER ['HTTP_CF_CONNECTING_IP ' ])){
145+ if (!empty ($ _SERVER ['HTTP_CF_CONNECTING_IP ' ])){
146+ $ v_ip = escapeshellarg ($ _SERVER ['HTTP_CF_CONNECTING_IP ' ]);
147+ }
148+ }
115149
116- // Check if 2FA was successfully
117- if ( ! isset ($ v_twofa ) || $ ERROR == '' ) {
150+ // Get user's salt
151+ $ output = '' ;
152+ exec (HESTIA_CMD ."v-get-user-salt " .$ v_user ." " .$ v_ip ." json " , $ output , $ return_var );
153+ $ pam = json_decode (implode ('' , $ output ), true );
154+ if ( $ return_var > 0 ) {
155+ sleep (5 );
156+ unset($ _POST ['password ' ], $ _POST ['user ' ]);
157+ $ error = "<a class= \"error \"> " .__ ('Invalid username or password ' )."</a> " ;
158+ } else {
159+ $ user = $ _POST ['user ' ];
160+ $ password = $ _POST ['password ' ];
161+ $ salt = $ pam [$ user ]['SALT ' ];
162+ $ method = $ pam [$ user ]['METHOD ' ];
163+
164+ if ($ method == 'md5 ' ) {
165+ $ hash = crypt ($ password , '$1$ ' .$ salt .'$ ' );
166+ }
167+ if ($ method == 'sha-512 ' ) {
168+ $ hash = crypt ($ password , '$6$rounds=5000$ ' .$ salt .'$ ' );
169+ $ hash = str_replace ('$rounds=5000 ' ,'' ,$ hash );
170+ }
171+ if ($ method == 'des ' ) {
172+ $ hash = crypt ($ password , $ salt );
173+ }
174+
175+ // Send hash via tmp file
176+ $ v_hash = exec ('mktemp -p /tmp ' );
177+ $ fp = fopen ($ v_hash , "w " );
178+ fwrite ($ fp , $ hash ."\n" );
179+ fclose ($ fp );
180+
181+ // Check user hash
182+ exec (HESTIA_CMD ."v-check-user-hash " .$ v_user ." " .$ v_hash ." " .$ v_ip , $ output , $ return_var );
183+ unset($ output );
184+
185+ // Remove tmp file
186+ unlink ($ v_hash );
187+
188+ // Check API answer
189+ if ( $ return_var > 0 ) {
190+ sleep (5 );
191+ unset($ _POST ['password ' ]);
192+ $ ERROR = "<a class= \"error \"> " .__ ('Invalid username or password ' )."</a> " ;
193+ } else {
194+
195+ // Make root admin user
196+ if ($ _POST ['user ' ] == 'root ' ) $ v_user = 'admin ' ;
197+
198+ // Get user speciefic parameters
199+ exec (HESTIA_CMD . "v-list-user " .$ v_user ." json " , $ output , $ return_var );
200+ $ data = json_decode (implode ('' , $ output ), true );
201+
202+ // Check if 2FA is active
203+ if ($ data [$ _POST ['user ' ]]['TWOFA ' ] == '' ) {
118204 // Define session user
119205 $ _SESSION ['user ' ] = key ($ data );
120206 $ v_user = $ _SESSION ['user ' ];
121-
122- // Get user favorites
123- get_favourites ();
124-
207+
125208 // Define language
126209 $ output = '' ;
127210 exec (HESTIA_CMD ."v-list-sys-languages json " , $ output , $ return_var );
131214 } else {
132215 $ _SESSION ['language ' ] = 'en ' ;
133216 }
134-
217+
135218 // Regenerate session id to prevent session fixation
136219 session_regenerate_id ();
137-
220+
138221 // Redirect request to control panel interface
139222 if (!empty ($ _SESSION ['request_uri ' ])) {
140223 header ("Location: " .$ _SESSION ['request_uri ' ]);
151234 }
152235 }
153236 }
154- } else {
155- sleep (1 );
156- $ ERROR = "<a class= \"error \"> " .__ ('Invalid or missing token ' )."</a> " ;
157- }
237+ }
158238}
159239
240+
241+
160242// Check system configuration
161243load_hestia_config ();
162244
183265
184266require_once ($ _SERVER ['DOCUMENT_ROOT ' ].'/inc/i18n/ ' .$ _SESSION ['language ' ].'.php ' );
185267require_once ('../templates/header.html ' );
186- require_once ('../templates/login.html ' );
268+ if (empty ($ _POST ['user ' ])) {
269+ require_once ('../templates/login.html ' );
270+ }else if (empty ($ _POST ['password ' ])) {
271+ require_once ('../templates/login_1.html ' );
272+ }else if (empty ($ _POST ['twofa ' ])) {
273+ require_once ('../templates/login_2.html ' );
274+ }
275+ ?>
0 commit comments