From 5bff398b174c289233c28163cf6e5cdbf3cfb12a Mon Sep 17 00:00:00 2001 From: mcramer <m.cramer@pixcept.de> Date: Fri, 06 Sep 2013 13:56:07 -0400 Subject: [PATCH] This is a big change, so please be cautious --- interface/lib/classes/remoting.inc.php | 97 +++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 79 insertions(+), 18 deletions(-) diff --git a/interface/lib/classes/remoting.inc.php b/interface/lib/classes/remoting.inc.php index ec5e82b..a6a6ddc 100644 --- a/interface/lib/classes/remoting.inc.php +++ b/interface/lib/classes/remoting.inc.php @@ -59,14 +59,15 @@ $app->uses('remoting_lib'); $this->_methods = $methods; - /* + + /* $this->app = $app; $this->conf = $conf; */ } //* remote login function - public function login($username, $password) + public function login($username, $password, $client_login = false) { global $app, $conf; @@ -95,24 +96,74 @@ $username = $app->db->quote($username); $password = $app->db->quote($password); - $sql = "SELECT * FROM remote_user WHERE remote_username = '$username' and remote_password = md5('$password')"; - $remote_user = $app->db->queryOneRecord($sql); - if($remote_user['remote_userid'] > 0) { - //* Create a remote user session - srand ((double)microtime()*1000000); - $remote_session = md5(rand()); - $remote_userid = $remote_user['remote_userid']; - $remote_functions = $remote_user['remote_functions']; - $tstamp = time() + $this->session_timeout; - $sql = 'INSERT INTO remote_session (remote_session,remote_userid,remote_functions,tstamp' + if($client_login == true) { + $sql = "SELECT * FROM sys_user WHERE USERNAME = '$username'"; + $user = $app->db->queryOneRecord($sql); + if($user) { + $saved_password = stripslashes($user['passwort']); + + if(substr($saved_password,0,3) == '$1$') { + //* The password is crypt-md5 encrypted + $salt = '$1$'.substr($saved_password,3,8).'$'; + + if(crypt(stripslashes($password),$salt) != $saved_password) { + throw new SoapFault('client_login_failed', 'The login failed. Username or password wrong.'); + return false; + } + } else { + //* The password is md5 encrypted + if(md5($password) != $saved_password) { + throw new SoapFault('client_login_failed', 'The login failed. Username or password wrong.'); + return false; + } + } + } else { + throw new SoapFault('client_login_failed', 'The login failed. Username or password wrong.'); + return false; + } + if($user['active'] != 1) { + throw new SoapFault('client_login_failed', 'The login failed. User is blocked.'); + return false; + } + + // now we need the client data + $client = $app->db->queryOneRecord("SELECT client.can_use_api FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = " . $app->functions->intval($user['default_group'])); + if(!$client || $client['can_use_api'] != 'y') { + throw new SoapFault('client_login_failed', 'The login failed. Client may not use api.'); + return false; + } + + //* Create a remote user session + //srand ((double)microtime()*1000000); + $remote_session = md5(mt_rand().uniqid('ispco')); + $remote_userid = $user['userid']; + $remote_functions = ''; + $tstamp = time() + $this->session_timeout; + $sql = 'INSERT INTO remote_session (remote_session,remote_userid,remote_functions,client_login,tstamp' .') VALUES (' - ." '$remote_session',$remote_userid,'$remote_functions',$tstamp)"; - $app->db->query($sql); - return $remote_session; + ." '$remote_session',$remote_userid,'$remote_functions',1,$tstamp)"; + $app->db->query($sql); + return $remote_session; } else { - throw new SoapFault('login_failed', 'The login failed. Username or password wrong.'); - return false; - } + $sql = "SELECT * FROM remote_user WHERE remote_username = '$username' and remote_password = md5('$password')"; + $remote_user = $app->db->queryOneRecord($sql); + if($remote_user['remote_userid'] > 0) { + //* Create a remote user session + //srand ((double)microtime()*1000000); + $remote_session = md5(mt_rand().uniqid('ispco')); + $remote_userid = $remote_user['remote_userid']; + $remote_functions = $remote_user['remote_functions']; + $tstamp = time() + $this->session_timeout; + $sql = 'INSERT INTO remote_session (remote_session,remote_userid,remote_functions,tstamp' + .') VALUES (' + ." '$remote_session',$remote_userid,'$remote_functions',$tstamp)"; + $app->db->query($sql); + return $remote_session; + } else { + throw new SoapFault('login_failed', 'The login failed. Username or password wrong.'); + return false; + } + } } @@ -389,6 +440,16 @@ return false; } + $_SESSION['client_login'] = $session['client_login']; + if($session['client_login'] == 1) { + // permissions are checked at an other place + $_SESSION['client_sys_userid'] = $session['remote_userid']; + $app->remoting_lib->loadUserProfile(); // load the profile - we ALWAYS need this on client logins! + return true; + } else { + $_SESSION['client_sys_userid'] = 0; + } + $dobre= str_replace(';',',',$session['remote_functions']); $check = in_array($function_name, explode(',', $dobre) ); if(!$check) { -- Gitblit v1.9.1