@@ -202,65 +202,77 @@ function validate_and_fetch_user(app $app, $username, $password, $loginAs, $conf
202202{
203203 if ($ loginAs ) {
204204 $ sql = "SELECT * FROM sys_user WHERE USERNAME = ? and PASSWORT = ? " ;
205- $ user = $ app ->db ->queryOneRecord ($ sql , (string )$ username , (string )$ password );
206- } else {
207- if (stristr ($ username , '@ ' )) {
208- //* mailuser login
209- $ sql = "SELECT * FROM mail_user WHERE login = ? or email = ? " ;
210- $ mailuser = $ app ->db ->queryOneRecord ($ sql , (string )$ username , $ app ->functions ->idn_encode ($ username ));
211- $ user = false ;
212- if ($ mailuser ) {
213- $ saved_password = stripslashes ($ mailuser ['password ' ]);
214- //* Check if mailuser password is correct
215- if (crypt (stripslashes ($ password ), $ saved_password ) == $ saved_password ) {
216- //* Get the sys_user language of the client of the mailuser
217- $ sys_user_lang = $ app ->db ->queryOneRecord ("SELECT language FROM sys_user WHERE default_group = ? " , $ mailuser ['sys_groupid ' ]);
218-
219- //* we build a fake user here which has access to the mailuser module only and userid 0
220- $ user = array ();
221- $ user ['userid ' ] = 0 ;
222- $ user ['active ' ] = 1 ;
223- $ user ['startmodule ' ] = 'mailuser ' ;
224- $ user ['modules ' ] = 'mailuser ' ;
225- $ user ['typ ' ] = 'user ' ;
226- $ user ['email ' ] = $ mailuser ['email ' ];
227- $ user ['username ' ] = $ username ;
228- if (is_array ($ sys_user_lang ) && $ sys_user_lang ['language ' ] != '' ) {
229- $ user ['language ' ] = $ sys_user_lang ['language ' ];
230- } else {
231- $ user ['language ' ] = $ conf ['language ' ];
232- }
233- $ user ['theme ' ] = $ conf ['theme ' ];
234- $ user ['app_theme ' ] = $ conf ['theme ' ];
235- $ user ['mailuser_id ' ] = $ mailuser ['mailuser_id ' ];
236- $ user ['default_group ' ] = $ mailuser ['sys_groupid ' ];
237- }
238- }
205+ return $ app ->db ->queryOneRecord ($ sql , (string )$ username , (string )$ password );
206+ }
207+
208+ if (stristr ($ username , '@ ' )) {
209+ //* mailuser login
210+ $ sql = "SELECT * FROM mail_user WHERE login = ? or email = ? " ;
211+ $ mailuser = $ app ->db ->queryOneRecord ($ sql , (string )$ username , $ app ->functions ->idn_encode ($ username ));
212+
213+ return $ mailuser
214+ ? build_fake_user ($ app , $ username , $ password , $ mailuser , $ conf )
215+ : false ;
216+ }
217+
218+ //* normal cp user login
219+ $ sql = "SELECT * FROM sys_user WHERE USERNAME = ? " ;
220+ $ user = $ app ->db ->queryOneRecord ($ sql , (string )$ username );
221+ if (!$ user ) return false ;
222+
223+ $ saved_password = stripslashes ($ user ['passwort ' ]);
224+ if (substr ($ saved_password , 0 , 1 ) == '$ ' ) {
225+ //* The password is encrypted with crypt
226+ return crypt (stripslashes ($ password ), $ saved_password ) == $ saved_password
227+ ? $ user
228+ : false ;
229+ }
230+
231+ //* The password is md5 encrypted
232+ if (md5 ($ password ) != $ saved_password ) return false ;
233+
234+ // update password with secure algo
235+ $ sql = 'UPDATE `sys_user` SET `passwort` = ? WHERE `username` = ? ' ;
236+ $ app ->db ->query ($ sql , $ app ->auth ->crypt_password ($ password ), (string )$ username );
237+
238+ return $ user ;
239+ }
240+
241+ /**
242+ * @param app $app
243+ * @param $username
244+ * @param $password
245+ * @param array $mailuser
246+ * @param array $user
247+ * @param $conf
248+ * @return array
249+ */
250+ function build_fake_user (app $ app , $ username , $ password , array $ mailuser , $ conf )
251+ {
252+ $ saved_password = stripslashes ($ mailuser ['password ' ]);
253+ //* Check if mailuser password is correct
254+ if (crypt (stripslashes ($ password ), $ saved_password ) == $ saved_password ) {
255+ //* Get the sys_user language of the client of the mailuser
256+ $ sys_user_lang = $ app ->db ->queryOneRecord ("SELECT language FROM sys_user WHERE default_group = ? " , $ mailuser ['sys_groupid ' ]);
257+
258+ //* we build a fake user here which has access to the mailuser module only and userid 0
259+ $ user = array ();
260+ $ user ['userid ' ] = 0 ;
261+ $ user ['active ' ] = 1 ;
262+ $ user ['startmodule ' ] = 'mailuser ' ;
263+ $ user ['modules ' ] = 'mailuser ' ;
264+ $ user ['typ ' ] = 'user ' ;
265+ $ user ['email ' ] = $ mailuser ['email ' ];
266+ $ user ['username ' ] = $ username ;
267+ if (is_array ($ sys_user_lang ) && $ sys_user_lang ['language ' ] != '' ) {
268+ $ user ['language ' ] = $ sys_user_lang ['language ' ];
239269 } else {
240- //* normal cp user login
241- $ sql = "SELECT * FROM sys_user WHERE USERNAME = ? " ;
242- $ user = $ app ->db ->queryOneRecord ($ sql , (string )$ username );
243- if ($ user ) {
244- $ saved_password = stripslashes ($ user ['passwort ' ]);
245- if (substr ($ saved_password , 0 , 1 ) == '$ ' ) {
246- //* The password is encrypted with crypt
247- if (crypt (stripslashes ($ password ), $ saved_password ) != $ saved_password ) {
248- $ user = false ;
249- }
250- } else {
251- //* The password is md5 encrypted
252- if (md5 ($ password ) != $ saved_password ) {
253- $ user = false ;
254- } else {
255- // update password with secure algo
256- $ sql = 'UPDATE `sys_user` SET `passwort` = ? WHERE `username` = ? ' ;
257- $ app ->db ->query ($ sql , $ app ->auth ->crypt_password ($ password ), (string )$ username );
258- }
259- }
260- } else {
261- $ user = false ;
262- }
270+ $ user ['language ' ] = $ conf ['language ' ];
263271 }
272+ $ user ['theme ' ] = $ conf ['theme ' ];
273+ $ user ['app_theme ' ] = $ conf ['theme ' ];
274+ $ user ['mailuser_id ' ] = $ mailuser ['mailuser_id ' ];
275+ $ user ['default_group ' ] = $ mailuser ['sys_groupid ' ];
264276 }
265277
266278 return $ user ;
0 commit comments