prijava = '_login'; } // Url-ji za podstrani $urls_array = [ // Preusmerimo če reCaptcha ni vključena in je robot izpolnil registracijo 'page_robot_redirect' => $url, 'page_main' => $url, // Osnovna stran 'page_main_login' => $url.'prijava/', // Vrnemo na osnovne spletno stran za prijavo 'page_login' => $url.'?a=login', // Stran namenjena logiranju 'page_login_login' => $url.'prijava/?a=login', // Stran namenjena logiranju 'page_login_noEmail' => $url.'?a=login_noEmail', // Stran na katero preusmerimo ce pri loginu vnese napacen oz. neobstojec email 'page_login_noEmail_login' => $url.'prijava/index.php?a=login_noEmail', //Preusmei na stran, kje je obrazec za prijavo //Google 2FA 'page_login_2fa' => $url.'?a=login_2fa', // Če je uporabnik bannan 'page_user_ban' => $url.'?a=user_ban', 'page_user_ban_login' => $url.'prijava/index.php?a=user_ban', // Registracija 'page_register' => $url.'registracija/?', // 1. korak registracije - stran s formo za registracijo 'page_register_confirm' => $url.'registracija/confirm/?', // 2. korak registracije - stran kamor je preusmerjen uporabnik po vnosu podatkov za registracijo (kjer pregleda vnešene podatke če so vsi ok) 'page_register_emailSend' => $url.'registracija/send/?', // 3 .korak registracije - stran kamor je preusmerjen ko potrdi podatke - izpiše se mu obvestilo, da bo prejel potrditveni mail 'page_register_activate' => $site_url.'admin/survey/', // 4. korak registracije - stran kamor ga preusmeri, ko klikne na url za potrditev registracije v mailu (opcijsko - lahko se ga preusmeri tudi na osnovno stran) 'page_add_second_email' => $url.'?a=add_second_email', 'page_reset_password' => $url.'obnovitev-gesla/?a=reset_password', // Sprememba gesla 'page_reset_password_activate' => $url.'?a=reset_password_activate' // Potrditev spremembe gesla ]; } else { // Simple $urls_array = [ 'page_main' => $site_url.'index.php', // Osnovna stran 'page_login' => $site_url.'index.php?a=login', // Stran namenjena logiranju 'page_login_noEmail' => $site_url.'index.php?a=login_noEmail', //Google 2FA 'page_login_2fa' => $site_url.'index.php?a=login_2fa', // Stran na katero preusmerimo ce pri loginu vnese napacen oz. neobstojec email 'page_user_ban' => $site_url.'index.php?a=user_ban', 'page_register' => $site_url.'index.php?a=register', // 1. korak registracije - stran s formo za registracijo 'page_register_confirm' => $site_url.'index.php?a=register_confirm', // 2. korak registracije - stran kamor je preusmerjen uporabnik po vnosu podatkov za registracijo (kjer pregleda vnešene podatke če so vsi ok) 'page_register_emailSend' => $site_url.'index.php?a=register_email', // 3 .korak registracije - stran kamor je preusmerjen ko potrdi podatke - izpiše se mu obvestilo, da bo prejel potrditveni mail 'page_register_activate' => $site_url.'index.php', // 4. korak registracije - stran kamor ga preusmeri, ko klikne na url za potrditev registracije v mailu (opcijsko - lahko se ga preusmeri tudi na osnovno stran) 'page_add_second_email' => $site_url.'index.php?a=add_second_email', 'page_unregister' => $site_url.'index.php?a=unregister', // Stran namenjena "odregistraciji uporabnika 'page_unregister_confirm' => $site_url.'index.php?a=unregister_confirm', // Potrditev odregistracije 'page_reset_password' => $site_url.'index.php?a=reset_password', // Sprememba gesla 'page_reset_password_activate' => $site_url.'index.php?a=reset_password_activate' // Potrditev spremembe gesla ]; } // Nastavimo url-je $this->setUrls($urls_array); // Preverimo ce smo logirani (in ustrezno nastavimo piskotke) $admin_type = $this->checkLogin(); } // Nastavimo vse podstrani potrebne za delovanje (registracija, login, odregistracija, pozabljeno geslo...) - public function setUrls($urls_array) { $this->page_urls = $urls_array; } // Izvedemo akcijo public function checkLogin() { global $admin_type; // tip admina: 0:admin, 1:manager, 2:clan, 3:user global $global_user_id; global $mysql_database_name; global $pass_salt; global $cookie_domain; $global_user_id = 0; $admin_type = 3; $cookie_pass = isset($_COOKIE['secret']) ? $_COOKIE['secret'] : ''; // najprej testiram meto, potem sele userje. if (isset ($_COOKIE['uid']) && !empty($_COOKIE['g2fa'])) { $user_email = base64_decode($_COOKIE['uid']); $result = sisplet_query("SELECT pass, id, type FROM users WHERE email='$user_email'"); if (!$result || mysqli_num_rows($result) == 0) { // najprej poradiraij cookije! setcookie('uid', "", time() - 3600, $cookie_domain); setcookie('secret', "", time() - 3600, $cookie_domain); if (substr_count($cookie_domain, ".") > 1) { $nd = substr($cookie_domain,strpos($cookie_domain, ".") + 1); setcookie('uid', "", time() - 3600, $nd); setcookie('secret', "", time() - 3600, $nd); } return -1; } else { $r = mysqli_fetch_row($result); if ($cookie_pass != $r[0]) { // najprej poradiraij cookije! setcookie('uid', "", time() - 3600, $cookie_domain); setcookie('secret', "", time() - 3600, $cookie_domain); if (substr_count($cookie_domain, ".") > 1) { $nd = substr($cookie_domain, strpos($cookie_domain, ".") + 1); setcookie('uid', "", time() - 3600, $nd); setcookie('secret', "", time() - 3600, $nd); } return -1; } else { $admin_type = $r[2]; $global_user_id = $r[1]; return $r[2]; } } } // Ni prijavljen else { $admin_type = -1; return -1; } } // Preveri ce je user ze logiran v 1ko in nastavi globalne spremenljivke in cookie (kopirano iz function.php) public function executeAction($params, $data, $method='') { global $site_url; global $global_user_id; global $lang; global $cookie_domain; // Nastavimo prejete podatke if (isset($data['ime'])) { $this->ime = $data['ime']; } if (isset($data['priimek'])) { $this->priimek = $data['priimek']; } if (isset($data['email'])) { $this->email = trim($data['email']); } if (isset($data['pass'])) { $this->pass = $data['pass']; } if (isset($data['method'])){ $this->method = $data['method']; } if (isset($data)){ $this->data = $data; } if (!isset($params['action'])) { $response = 'Napaka! Manjkajo parametri!'; } else { switch ($params['action']) { // Login userja case 'login': $response = $this->userLogin(); break; // Login userja case 'login_2fa': $response = $this->userLogin2fa(); break; // Login userja z google racunom case 'login_google': if(!empty($_POST['remember']) && $_POST['remember'] == 1) { setcookie('remember-me', '1', time() + 31536000, '/', $cookie_domain); } $response = $this->userLoginGoogle(); break; // Login userja s FB racunom case 'login_facebook': if(!empty($_POST['remember']) && $_POST['remember'] == 1) { setcookie('remember-me', '1', time() + 31536000, '/', $cookie_domain); } $response = $this->userLoginFacebook(); break; // Login userja z AAI racunom case 'login_AAI': if(!empty($_POST['remember']) && $_POST['remember'] == 1) { setcookie('remember-me', '1', time() + 31536000, '/', $cookie_domain); } $response = $this->userLoginAAI(); break; // Logout userja case 'logout': $response = $this->userLogout(); break; // Registracija userja - prvi vnos podatkov s preverjanjem case 'register': $response = $this->userRegister(); break; // Registracija userja - potrditev podatkov in posiljanje potrditvenega maila case 'register_confirm': $response = $this->userRegisterConfirm(); break; // Registracija userja - potrditev registracije (aktivacija) po prejetju potrditvenega maila case 'register_activate': $response = $this->userRegisterActivate(); break; // Dodajanje alternativnega emaila case 'activate_second_email': $response = $this->userActivateAlternativEmail(); break; // Odregistracija userja - potrditev in dejanska odjava case 'unregister_confirm': $response = $this->userUnregisterConfirm(); break; // Reset passworda userja case 'reset_password': $response = $this->userResetPassword(); break; // Potrditev reseta passworda userja case 'reset_password_activate': $response = $this->userResetPasswordActivate(); break; default: $response = 'Napaka! Manjkajo parametri!'; break; } } echo $response; } // Prijavi userja v 1ko - (kopirano iz ProfileClass.php) private function userLogin() { global $mysql_database_name; global $site_url; global $pass_salt; global $cookie_domain; global $originating_domain; global $keep_domain; $piskotek = []; $error = []; $language = 1; if(isset($this->data['language'])){ $language = $this->data['language']; } elseif(isset($this->data['jezik'])){ $language = ($this->data['jezik'] == 'en' ? 2 : 1); } if(is_numeric($language)){ include('../../lang/'.$language.'.php'); } // Ce imamo vklopljeno blokiranje dostopa do admina glede na ip $admin_allow_only_ip = AppSettings::getInstance()->getSetting('app_limits-admin_allow_only_ip'); if($admin_allow_only_ip !== false && !empty($admin_allow_only_ip)){ $ip = $_SERVER['REMOTE_ADDR']; // Preverimo ip - ce se ne ujema ne pustimo logina if(!in_array($ip, $admin_allow_only_ip)){ if($this->method == 'AJAX'){ return $this->ajaxResponse('error', 'Napaka pri prijavi.'); }else { header('location: '.$this->page_urls['page_login'.$this->prijava]); die(); } } } $mini = $this->email.$this->pass; for ($Stevec = 0; $Stevec < strlen($mini); $Stevec++) { $mini = str_replace("'", "", $mini); } $result = sisplet_query("SELECT value FROM misc WHERE what='CookieLife'"); $row = mysqli_fetch_row($result); $LifeTime = $row[0]; // Cookie "remember-me" nastavimo pri FB, Google in AAi prijavi in tukaj preverjamo, če je nastavljena ta opcija if ( (isset($_POST['remember']) && $_POST['remember'] == "1") || (isset($_COOKIE['remember-me']) && $_COOKIE['remember-me'] == 1) || (isset($this->data['remember']) && $this->data['remember'] == 1) ) { $LifeTime = 3600 * 24 * 365; } else { $LifeTime = $LifeTime; } // Preverimo ce obstaja uporabnik s tem emailom $user_id = User::findByEmail($this->email); if (!empty($user_id)) { $sql = sisplet_query("SELECT type, pass, status, id, name, surname, email FROM users WHERE id='".$user_id."'"); $r = mysqli_fetch_assoc($sql); // BAN if ($r['status'] == 0) { if($this->method == 'AJAX'){ return $this->ajaxResponse('error', $lang['cms_error_user_ban']); }else { header('Location: '.$this->page_urls['page_user_ban'.$this->prijava].'&error=user_ban&email='.$this->email); die(); } } $user_lang = 1; if (!empty($_POST['jezik']) && $_POST['jezik'] == 'en') { $user_lang = 2; } // Preverimo ce je password ok if (base64_encode((hash('SHA256', $this->pass.$pass_salt))) == $r['pass'] || $this->EncPass == $r['pass']) { // Zabelezimo datum prijave sisplet_query("UPDATE users SET last_login=NOW(), lang='".$user_lang."' WHERE id='".$r['id']."'"); // določi še, od kje se je prijavil $hostname = ""; $headers = apache_request_headers(); if (array_key_exists('X-Forwarded-For', $headers)) { $hostname = $headers['X-Forwarded-For']; } else { $hostname = $_SERVER["REMOTE_ADDR"]; } sisplet_query("INSERT INTO user_login_tracker (uid, IP, kdaj) VALUES ('".$r['id']."', '".$hostname."', NOW())"); // Ustvarimo login cookie if($this->method == 'AJAX') { $piskotek['uid'] = [ 'ime' => 'uid', 'vrednost' => base64_encode($r['email']), 'opcije' => [ 'expires' => time() + $LifeTime, 'path' => '/', 'domain' => $cookie_domain, //'secure' => true ] ]; } else { setcookie("uid", base64_encode($r['email']), time() + $LifeTime, '/', $cookie_domain); } //Preverimo če gre za Google 2FA $user_2fa_enabled = User::option($r['id'], 'google-2fa-validation'); if(!empty($user_2fa_enabled) && $user_2fa_enabled != 'NOT'){ // TODO - 2fa v drupalu - pootrebno narediti, zaenkrat ugasnjeno if($this->method == 'AJAX'){ $piskotek['g2fa'] = [ 'ime' => 'g2fa', 'vrednost' => base64_encode($user_2fa_enabled), 'opcije' => [ 'expires' => time() + $LifeTime, 'path' => '/', 'domain' => $cookie_domain, //'secure' => true ] ]; return $this->ajaxResponse('success', [ 'google_2fa' => true, 'piskotek' => $this->cookieEncode($piskotek) ]); } else{ setcookie("g2fa", base64_encode($user_2fa_enabled), time() + $LifeTime, '/', $cookie_domain); header('location: '.$this->page_urls['page_login_2fa']); die(); } } // Ustvarimo piškotek še z imenom in geslom if($this->method == 'AJAX'){ $piskotek['unam'] = [ 'ime' => 'unam', 'vrednost' => base64_encode($r['name'].' '.$r['surname']), 'opcije' => [ 'expires' => time() + $LifeTime, 'path' => '/', 'domain' => $cookie_domain, //'secure' => true ] ]; $piskotek['secret'] = [ 'ime' => 'secret', 'vrednost' => $r['pass'], 'opcije' => [ 'expires' => time() + $LifeTime, 'path' => '/', 'domain' => $cookie_domain, //'secure' => true ] ]; } else { setcookie("unam", base64_encode($r['name'].' '.$r['surname']),time() + $LifeTime, '/', $cookie_domain); setcookie("secret", $r['pass'], time() + $LifeTime, '/', $cookie_domain); } // Ce imamo v aplikaciji vklopljeno potrjevanje adminov if (AppSettings::getInstance()->getSetting('confirm_registration') === true){ if ($r['status'] == "2" || $r['status'] == "6") { if($this->method == 'AJAX'){ $piskotek['P'] = [ 'ime' => 'P', 'vrednost' => time(), 'opcije' => [ 'expires' => time() + $LifeTime, 'path' => '/', 'domain' => $cookie_domain, 'secure' => true ] ]; $error['password'] = $lang['cms_error_password']; return $this->ajaxResponse('error', [ 'piskotek' => $this->cookieEncode($piskotek), 'error' => $error ]); } else{ setcookie("P", time(), time() + $LifeTime, '/', $cookie_domain); header('location: '.$this->page_urls['page_login'.$this->prijava].'&email='.$this->email.'&error=password'); die(); } } } } else { // Password prompt if($this->method == 'AJAX'){ return $this->ajaxResponse('error', $lang['cms_error_password']); }else{ header('location: '.$this->page_urls['page_login'.$this->prijava].'&email='.$this->email.'&error=password'); die(); } } } else { // Preverimo, če je sploh vpisal email if (validEmail($this->email)) { if($this->method == 'AJAX'){ return $this->ajaxResponse('error', $lang['cms_error_email_or_password_doesnt_exist']); }else{ // Emaila ni v bazi header('location: '.$this->page_urls['page_login_noEmail'.$this->prijava].'&email='.$this->email); } } else { if($this->method == 'AJAX'){ return $this->ajaxResponse('error', $lang['cms_error_email']); }else{ // Ni vpisana prava oblika maila header('location: '.$this->page_urls['page_login_noEmail'.$this->prijava].'&email='.$this->email); } } die(); } //Vkolikor smo ga prijavili in želi kupip paket, vrnemo nazaj na Drupal if(isset($_COOKIE['nakup'])){ if($user_lang == 1){ header('location: '.$site_url.'d/izvedi-nakup/'.$_COOKIE['paket'].'/podatki'); } else{ header('location: '.$site_url.'d/en/purchase/'.$_COOKIE['paket'].'/package'); } die(); } // Vse je ok - prijavljenega preusmerimo na moje ankete if($this->method == 'AJAX'){ return $this->ajaxResponse('success', [ 'url' => $site_url.'admin/survey/index.php?lang='.$user_lang, 'piskotek' => $this->cookieEncode($piskotek) ]); } header('location: '.$site_url.'admin/survey/index.php?lang='.$user_lang); die(); } // Prijava z Google 2 FA private function userLogin2fa() { global $site_url, $cookie_domain, $lang; $email = null; if(!empty($_COOKIE['uid'])){ $email = base64_decode($_COOKIE['uid']); }elseif(empty($email) && !empty($this->data['uid'])){ $email = base64_decode($this->data['uid']); } $user_id = User::findByEmail($email); $user= sisplet_query("SELECT type, pass, status, name, surname, email FROM users WHERE id='".$user_id."'", "obj"); $secret = User::option($user_id, 'google-2fa-secret'); $google2fa_number = $_POST['google_2fa_number']; if(empty($google2fa_number)){ $google2fa_number = $this->data['google_2fa_number']; } if(!empty($secret) && $google2fa_number){ $google2fa = new \Sonata\GoogleAuthenticator\GoogleAuthenticator(); $user_lang = 1; if (!empty($_POST['jezik']) && $_POST['jezik'] == 'en' || !empty($this->data['jezik']) && $this->data['jezik'] == 'en') { $user_lang = 2; } // 2FA je bila uspešna if ($google2fa->checkCode($secret, $google2fa_number)) { $result = sisplet_query("SELECT value FROM misc WHERE what='CookieLife'", "obj"); $LifeTime = $result->value; $piskotek = []; if($this->method == 'AJAX') { $piskotek['unam'] = [ 'ime' => 'unam', 'vrednost' => base64_encode($user->name.' '.$user->surname), 'opcije' => [ 'expires' => time() + $LifeTime, 'path' => '/', 'domain' => $cookie_domain, //'secure' => true ] ]; $piskotek['secret'] = [ 'ime' => 'secret', 'vrednost' => $user->pass, 'opcije' => [ 'expires' => time() + $LifeTime, 'path' => '/', 'domain' => $cookie_domain, //'secure' => true ] ]; } else { // Ustvarimo piškotek še z imenom in geslom setcookie("unam", base64_encode($user->name.' '.$user->surname),time() + $LifeTime, '/', $cookie_domain); setcookie("secret", $user->pass, time() + $LifeTime, '/', $cookie_domain); } // Zabelezimo datum prijave sisplet_query("UPDATE users SET last_login=NOW() WHERE id='".$user_id."'"); // določi še, od kje se je prijavil $hostname = ""; $headers = apache_request_headers(); if (array_key_exists('X-Forwarded-For', $headers)) { $hostname = $headers['X-Forwarded-For']; } else { $hostname = $_SERVER["REMOTE_ADDR"]; } sisplet_query("INSERT INTO user_login_tracker (uid, IP, kdaj) VALUES ('".$user_id."', '".$hostname."', NOW())"); if($this->method == 'AJAX'){ return $this->ajaxResponse('success', [ 'url' => $site_url.'admin/survey/index.php?lang='.$user_lang, 'piskotek' => $this->cookieEncode($piskotek) ]); } // Vse je ok - prijavljenega preusmerimo na moje ankete header('location: '.$site_url.'admin/survey/index.php?lang='.$user_lang); die(); } if($this->method == 'AJAX'){ return $this->ajaxResponse('error', $lang['google_2fa_user_error_code']); } // Vse neuspešne poskuse ali napačen email header('location: '. $this->page_urls['page_login_2fa'].'&error=2fa'); die(); } // Vse je ok - prijavljenega preusmerimo na moje ankete header('location: '.$site_url); die(); } // Prijavi userja v 1ko z Google racunom (kopirano iz ProfileClass.php) - PRETESTIRATI private function userLoginGoogle() { require_once('../../function/JWT.php'); global $site_url; global $proxy; $language = 1; if(isset($this->data['language'])){ $language = $this->data['language']; } elseif(isset($this->data['jezik'])){ $language = ($this->data['jezik'] == 'en' ? 2 : 1); } if(is_numeric($language)){ include('../../lang/'.$language.'.php'); } $oauth2_code = $_GET['code']; $discovery = json_decode(file_get_contents('https://accounts.google.com/.well-known/openid-configuration')); if ($proxy != "") { $ctx = stream_context_create([ 'http' => [ 'header' => "Content-type: application/x-www-form-urlencoded\r\n", 'method' => 'POST', 'content' => http_build_query([ 'client_id' => AppSettings::getInstance()->getSetting('google-login_client_id'), 'client_secret' => AppSettings::getInstance()->getSetting('google-login_client_secret'), 'code' => $oauth2_code, 'grant_type' => 'authorization_code', 'redirect_uri' => $site_url.'frontend/api/google-oauth2.php', 'openid.realm' => $site_url, ]), 'proxy' => 'tcp://'.$proxy, ], ]); } else { $ctx = stream_context_create([ 'http' => [ 'header' => "Content-type: application/x-www-form-urlencoded\r\n", 'method' => 'POST', 'content' => http_build_query([ 'client_id' => AppSettings::getInstance()->getSetting('google-login_client_id'), 'client_secret' => AppSettings::getInstance()->getSetting('google-login_client_secret'), 'code' => $oauth2_code, 'grant_type' => 'authorization_code', 'redirect_uri' => $site_url.'frontend/api/google-oauth2.php', 'openid.realm' => $site_url, ]), ], ]); } $resp = file_get_contents($discovery->token_endpoint, false, $ctx); if (!$resp) { // $http_response_header here got magically populated by file_get_contents(), surprise echo '

'.$lang['oid_auth_rejected'].'

'; echo '

'.$lang['google_auth_rejected'].'

'; echo ''; } $resp = json_decode($resp); $access_token = $resp->access_token; $id_token = $resp->id_token; // Skip JWT verification: we got it directly from Google via https, nothing could go wrong. $id_payload = JWT::decode($resp->id_token, null, false); if (!$id_payload->sub) { echo '

'.$lang['oid_auth_rejected'].'

'; echo '

'.$lang['google_auth_rejected'].'

'; echo ''; } $user_id = 'google+'.$id_payload->sub; $user_email = $id_payload->email; if ($user_email != '' && $user_id != '') { $this->email = $user_email; $user_id_1ka = User::findByEmail($user_email); // Je noter, ga samo prijavim... if (!empty($user_id_1ka)) { $res = sisplet_query("SELECT pass FROM users WHERE id='".$user_id_1ka."'"); $r = mysqli_fetch_row($res); $this->EncPass = $r[0]; $this->userLogin(); } // Ni se registriran, ga je potrebno dodati na prijavno formo else { // geslo med 00000 in zzzzz $this->pass = base_convert(mt_rand(0x19A100, 0x39AA3FF), 10, 36); $this->EncPass = base64_encode((hash('SHA256', $this->pass.$pass_salt))); $this->email = $user_email; $fn = explode("@", $user_email); sisplet_query("INSERT INTO users (name, surname, email, pass, lang, when_reg) VALUES ('".$fn[0]."', '', '".$user_email."', '".$this->EncPass."', '".(isset ($_GET['regFromEnglish']) && $_GET['regFromEnglish'] == "1" ? '2' : '1')."', NOW())"); $uid = mysqli_insert_id($GLOBALS['connect_db']); sisplet_query("INSERT INTO oid_users (uid) VALUES ('$uid')"); // Piškotek za cca. 10 let, da mu naslednjić ponudimo prijavno global $cookie_domain; setcookie('external-login', '1', time()+280000000, '/', $cookie_domain); // prijavi $this->userLogin(); } } } // Prijavi userja v 1ko z FB racunom (kopirano iz ProfileClass.php) - PRETESTIRATI private function userLoginFacebook() { global $cookie_path; if ($r = file_get_contents("https://graph.facebook.com/v2.9/oauth/access_token?client_id=".AppSettings::getInstance()->getSetting('facebook-appid')."&redirect_uri=https://www.1ka.si/frontend/api/fb_login.php&client_secret=".AppSettings::getInstance()->getSetting('facebook-appsecret')."&code=".$_GET['code'])) { $at = json_decode($r); $user = json_decode(file_get_contents('https://graph.facebook.com/me?fields=email,first_name,last_name&access_token='.$at->{'access_token'})); if (!isset ($user->email) && isset ($user->name)) { $user->email = str_replace(" ", ".", $user->first_name.".".$user->last_name)."@facebook.com"; } $old_email = str_replace(" ", ".", $user->first_name.".".$user->last_name)."@facebook.com"; $old_email = str_replace([" ", "č", "ć", "Č", "Ć", "ž", "Ž", "š", "Š", "đ", "Đ"], [".", "c", "c", "C", "C", "z", "Z", "s", "S", "d", "D"], $old_email); // preveri email, ce ga imas v bazi: if (isset ($user->email) && $user->email != '') { $obstaja_user_id = User::findByEmail(str_replace("'",'', $user->email)); $result = sisplet_query("select u.name, u.surname, f.id, u.id, u.pass FROM users u, fb_users f WHERE u.id=f.uid AND u.id='".$obstaja_user_id."'"); if (mysqli_num_rows($result) == 0) { $obstaja_user_id_old_email = User::findByEmail(str_replace("'",'', $old_email)); $result2 = sisplet_query("select u.id FROM users u LEFT JOIN fb_users f on (u.id=f.uid) where u.id='".$obstaja_user_id_old_email."'"); if (mysqli_num_rows($result2) > 0) { $r2 = mysqli_fetch_row($result2); $real_id = User::findByEmail($user->email); if (!empty($real_id)) { // moramo popravljati IDje in jebat ježa // iz "pravega" skopiram geslo na "fb", "fb" popravim v pravega in pravega dizejblam. In iz pravega vse srv_dpstop popravim na "fb" sisplet_query("UPDATE users a, users b SET a.pass=b.pass WHERE a.email='".str_replace("'", '', $old_email)."' AND b.email='".str_replace("'", '', $user->email)."'"); sisplet_query("UPDATE users SET email=CONCAT('D3LMD-' , email) WHERE email='".str_replace("'", '', $user->email)."'"); if ($real_id[0] > 0 && $r2[0] > 0) { sisplet_query("UPDATE srv_dostop SET uid=".$r2[0]." WHERE uid=".$real_id[0]); } } sisplet_query("UPDATE users SET email='".str_replace("'", '', $user->email)."' WHERE id='".$r2[0]."'"); } } $result = sisplet_query("select u.name, u.surname, IF(ISNULL(f.id),'0',f.id), u.id, u.pass FROM users u LEFT JOIN fb_users f on (u.id=f.uid) where u.id='".$obstaja_user_id."'"); // je noter, preveri ce je v FB (podatki, podatki!) if (mysqli_num_rows($result) > 0) { $r = mysqli_fetch_row($result); if ($r[2] != '0') { // samo prijavi $this->EncPass = $r[4]; $this->email = str_replace(" ", ".", $user->email); $this->userLogin(); } else { // dodaj FB podatke in prijavi if (isset ($user->first_name)) { $fn = $user->first_name; } else { $fn = $r[0]; } if (isset ($user->last_name)) { $ln = $user->last_name; } else { $ln = $r[1]; } if (isset ($user->gender)) { $gn = $user->gender; } else { $gn = ''; } if (isset ($user->profile_link)) { $pl = $user->profile_link; } else { $pl = ''; } if (isset ($user->timezone)) { $tz = $user->timezone; } else { $tz = ''; } sisplet_query("INSERT INTO fb_users (uid, first_name, last_name, gender, timezone, profile_link) VALUES ('".$r[3]."', '".$fn."', '".$ln."', '".$gn."', '".$tz."', '".$pl."')"); // Prijaviga :) $this->EncPass = $r[4]; $this->email = $user->email; $this->userLogin(); } } else { // registriraj, dodaj FB podatke in prijavi // dodaj FB podatke in prijavi if (isset ($user->first_name)) { $fn = $user->first_name; } else { $fn = str_replace(" ", ".", $r[0]); } if (isset ($user->last_name)) { $ln = $user->last_name; } else { $ln = $r[1]; } if (isset ($user->gender)) { $gn = $user->gender; } else { $gn = ''; } if (isset ($user->profile_link)) { $pl = $user->profile_link; } else { $pl = ''; } if (isset ($user->timezone)) { $tz = $user->timezone; } else { $tz = ''; } // geslo med 00000 in zzzzz $this->pass = base_convert(mt_rand(0x19A100, 0x39AA3FF), 10, 36); $this->EncPass = base64_encode((hash('SHA256', $this->pass.$pass_salt))); $this->email = str_replace([" ", "č", "ć", "Č", "Ć", "ž", "Ž", "š", "Š", "đ", "Đ"], [".", "c", "c", "C", "C", "z", "Z", "s", "S", "d", "D"], $user->email); sisplet_query("INSERT INTO users (name, surname, email, pass, when_reg) VALUES ('".$fn."', '".$ln."', '".iconv('utf-8', 'iso-8859-2//TRANSLIT', $this->email)."', '".$this->EncPass."', NOW())"); $uid = mysqli_insert_id($GLOBALS['connect_db']); sisplet_query("INSERT INTO fb_users (uid, first_name, last_name, gender, timezone, profile_link) VALUES ('".$uid."', '".$fn."', '".$ln."', '".$gn."', '".$tz."', '".$pl."')"); // Piškotek za cca. 10 let, da mu naslednjić ponudimo prijavno global $cookie_domain; setcookie('external-login', '1', time()+280000000, '/', $cookie_domain); // prijavi $this->userLogin(); } } } } // Prijavi userja v 1ko preko AAI racuna (kopirano iz ProfileClass.php - eduroamAnotherServerLogin()) - PRETESTIRATI function userLoginAAI() { global $pass_salt; global $cookie_domain; global $site_url; // Popravimo string iz geta, ker ima nekje + namesto space $repaired_string = str_replace(' ', '+', $_GET['s']); // malo manj varno, ampak bo OK. $klobasa = base64_decode($repaired_string); // Dobimo array parametrov iz get-a $data = explode("|", $klobasa); // Pridobimo maile - mozno da jih je vec, potem vzamemo prvega $mails = explode(";", $data[0]); sort($mails); $mail = $mails[0]; // Pridobimo aai (shibboleth) "uuid" $aai_id = $data[1]; $ime = $data[2]; $priimek = $data[3]; $njegova = $data[4]; $moja = $data[5]; // Preverimo ce ima veljaven token (najprej pobrisemo stare) sisplet_query("DELETE FROM aai_prenosi WHERE timestamp < (UNIX_TIMESTAMP() - 600);"); $res = sisplet_query("SELECT * FROM aai_prenosi WHERE moja='".$moja."' AND njegova='".$njegova."'"); if (mysqli_num_rows($res) > 0) { $pass = base64_encode((hash('SHA256', "e5zhbWRTEGW&u375ejsznrtztjhdtz%WZ&".$pass_salt))); // Preverimo ce obstaja user v bazi $user_id_1ka = User::findByEmail_AAI($mail, $aai_id); if (empty($user_id_1ka)) { // Nastavimo pass $pass = base64_encode(hash('SHA256', "e5zhbWRTEGW&u375ejsznrtztjhdtz%WZ&".$pass_salt)); // dodaj ga v bazo sisplet_query("INSERT INTO users (email, aai_id, name, surname, type, pass, eduroam, when_reg) VALUES ('$mail', '$aai_id', '$ime', '$priimek', '3', '".$pass."', '1', NOW())"); // Pridobimo id dodanega userja $user_id = mysqli_insert_id($GLOBALS['connect_db']); } else { // potegni geslo in mu daj kuki $result = sisplet_query("SELECT pass, email FROM users WHERE id='".$user_id_1ka."'"); $r = mysqli_fetch_row($result); $pass = $r[0]; $mail = $r[1]; $user_id = $user_id_1ka; } $result = sisplet_query("SELECT value FROM misc WHERE what='CookieLife'"); $row = mysqli_fetch_row($result); $LifeTime = $row[0]; // Zlogiramo login sisplet_query("UPDATE users SET last_login=NOW() WHERE id='".$user_id."'"); // določi še, od kje se je prijavil $hostname = ""; $headers = apache_request_headers(); if (array_key_exists('X-Forwarded-For', $headers)) { $hostname = $headers['X-Forwarded-For']; } else { $hostname = $_SERVER["REMOTE_ADDR"]; } sisplet_query("INSERT INTO user_login_tracker (uid, IP, kdaj) VALUES ('".$user_id."', '".$hostname."', NOW())"); setcookie("uid", base64_encode($mail), time() + $LifeTime, '/', $cookie_domain); setcookie("secret", $pass, time() + $LifeTime, '/', $cookie_domain); setcookie("unam", base64_encode($ime.' '.$priimek),time() + $LifeTime, '/', $cookie_domain); // moram vedeti, da je AAI! setcookie("aai", '1', time() + $LifeTime, '/', $cookie_domain); // Piškotek za cca. 10 let, da mu naslednjić ponudimo prijavno setcookie('external-login', '1', time()+280000000, '/', $cookie_domain); // Vse je ok - prijavljenega preusmerimo na moje ankete header('location: '.$site_url.'admin/survey/index.php?l=1'); die(); } else { header('location: '.$site_url); die(); } } // Odjavi userja iz 1ke (kopirano iz ProfileClass.php) private function userLogout(){ global $site_url; global $cookie_domain; global $global_user_id; if($this->method == 'AJAX') { $domene[] = $cookie_domain; if(substr_count($cookie_domain, '.') > 1){ $domene[] = substr($cookie_domain, strpos($cookie_domain, '.') + 1); } foreach($domene as $key => $domena) { $piskotek['uid_'.$key] = [ 'ime' => 'uid', 'vrednost' => '', 'opcije' => [ 'expires' => time() - 3600, 'path' => '/', 'domain' => $domena ] ]; $piskotek['unam_'.$key] = [ 'ime' => 'unam', 'vrednost' => '', 'opcije' => [ 'expires' => time() - 3600, 'path' => '/', 'domain' => $domena ] ]; $piskotek['secret_'.$key] = [ 'ime' => 'secret', 'vrednost' => '', 'opcije' => [ 'expires' => time() - 3600, 'path' => '/', 'domain' => $domena ] ]; } return $this->ajaxResponse('success', [ 'url' => $site_url, 'piskotek' => $this->cookieEncode($piskotek) ]); } setcookie('uid', '', time() - 3600, '/', $cookie_domain); setcookie('unam', '', time() - 3600, '/', $cookie_domain); setcookie('secret', '', time() - 3600, '/', $cookie_domain); setcookie('ME', '', time() - 3600, '/', $cookie_domain); setcookie('P', '', time() - 3600, '/', $cookie_domain); setcookie("AN", '', time() - 3600, '/', $cookie_domain); setcookie("AS", '', time() - 3600, '/', $cookie_domain); setcookie("AT", '', time() - 3600, '/', $cookie_domain); setcookie("DP", $p, time() - 3600 * 24 * 365, "/", $cookie_domain); setcookie("DC", $p, time() - 3600 * 24 * 365, "/", $cookie_domain); setcookie("DI", $p, time() - 3600 * 24 * 365, "/", $cookie_domain); setcookie("SO", $p, time() - 3600 * 24 * 365, "/", $cookie_domain); setcookie("SPO", $p, time() - 3600 * 24 * 365, "/", $cookie_domain); setcookie("SL", $p, time() - 3600 * 24 * 365, "/", $cookie_domain); // pobrisi se naddomeno! (www.1ka.si naj pobrise se 1ka.si) if (substr_count($cookie_domain, ".") > 1) { $nd = substr($cookie_domain, strpos($cookie_domain, ".") + 1); setcookie('uid', '', time() - 3600, '/', $nd); setcookie('unam', '', time() - 3600, '/', $nd); setcookie('secret', '', time() - 3600, '/', $nd); setcookie('ME', '', time() - 3600, '/', $nd); setcookie('P', '', time() - 3600, '/', $nd); setcookie("AN", '', time() - 3600, '/', $nd); setcookie("AS", '', time() - 3600, '/', $nd); setcookie("AT", '', time() - 3600, '/', $nd); setcookie("DP", $p, time() - 3600 * 24 * 365, "/", $nd); setcookie("DC", $p, time() - 3600 * 24 * 365, "/", $nd); setcookie("DI", $p, time() - 3600 * 24 * 365, "/", $nd); setcookie("SO", $p, time() - 3600 * 24 * 365, "/", $nd); setcookie("SPO", $p, time() - 3600 * 24 * 365, "/", $nd); setcookie("SL", $p, time() - 3600 * 24 * 365, "/", $nd); } // Ce gre za arnes aai odjavo odjavimo posebej if (isAAI()){ setcookie("aai", '', time() - 3600, '/', $cookie_domain); header('location: '.$site_url.'/logout_AAI.php?return='.$site_url); die(); } header('Location:'.$site_url); } // Registrira userja v 1ko - vnos podatkov private function userRegister() { $error = []; $email = (isset($this->data['email'])) ? $this->data['email'] : ''; $ime = (isset($this->data['ime'])) ? $this->data['ime'] : ''; $geslo = (isset($this->data['geslo'])) ? $this->data['geslo'] : ''; $geslo2 = (isset($this->data['geslo2'])) ? $this->data['geslo2'] : ''; $agree = (isset($this->data['agree'])) ? $this->data['agree'] : '0'; $gdprAgree = (isset($this->data['gdpr-agree'])) ? $this->data['gdpr-agree'] : '0'; $ajaxKlic = (isset($this->data['ajax'])) ? $this->data['ajax'] : '0'; // Če izvajamo registracjo preko drupala, ker se pošlje post request preko ajaxa $varnostno_polje = (isset($this->data['varnostno-polje'])) ? $this->data['varnostno-polje'] : false; if (!empty($varnostno_polje)) { if($this->method == 'AJAX'){ return $this->ajaxResponse('error', [ 'url' => $this->page_urls['page_robot_redirect'], 'message' => 'Robot' ]); } else { header('Location: ' . $this->page_urls['page_robot_redirect']); die(); } } // Preverimo ReCaptcha if (AppSettings::getInstance()->getSetting('google-secret_captcha') !== false) { $recaptchaResponse = $this->data['g-recaptcha-response']; $requestReCaptcha = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret=' . AppSettings::getInstance()->getSetting('google-secret_captcha') . '&response=' . $recaptchaResponse); if (!strstr($requestReCaptcha, 'true')) { $error['invalid_recaptcha'] = '1'; } } // Preverimo ce imamo vse podatke if ($email == '') { $error['missing_email'] = '1'; } if ($ime == '') { $error['missing_ime'] = '1'; } if ($agree == '0') { $error['missing_agree'] = '1'; } // Preverimo ce je email ok if (!validEmail($email)) { $error['invalid_email'] = '1'; } // Preverimo ce sta gesla enaka if ($geslo != $geslo2) { $error['pass_mismatch'] = '1'; } // Preverimo ce je geslo dovolj kompleksno if (!complexPassword($geslo)) { $error['pass_complex'] = '1'; } // Preverimo ce ze obstaja ime in vrnemo predlog za novo $sql = sisplet_query("SELECT * from users WHERE name='".$ime."'"); if (mysqli_num_rows($sql) > 0) { $error['existing_ime'] = '1'; $najdu = 0; $add = 0; if($ime != ''){ do { $add++; $sqln = sisplet_query("SELECT * from users WHERE name='".str_replace("'","", $ime).$add."'"); if (mysqli_num_rows($sqln) == 0) { $najdu = 1; } } while ($najdu == 0); // Novo ime ki ga predlagamo $ime = $ime.$add; $error['new_username'] = $ime; } } // Preverimo ce ze obstaja email if (!unikatenEmail($email)) { $error['existing_email'] = '1'; } // Nekaj ni ok - posljemo na isto stran z errorji v GET-u if (!empty($error)) { if($ajaxKlic){ return $this->ajaxResponse('error', $this->preveriNapake($error)); } // Ime in email posljemo nazaj v urlju $params = 'email='.$email.'&ime='.$ime.'&gdpr='.$gdprAgree.'&'; // Errorje tudi posljemo preko GET-a foreach ($error as $key => $val) { $params .= $key.'='.$val.'&'; } $params = substr($params, 0, -1); header('Location: '.$this->page_urls['page_register'].'&'.$params); die(); } // Vse je ok - preusmerimo na potrditveno stran else { if($ajaxKlic || $this->method == 'AJAX'){ return $this->ajaxResponse('success'); } // Hidden form, ki ga z js potem postamo naprej (da prenesemo vnesene podatke na naslednjo stran) echo '
'; echo ' '; echo ' '; echo ' '; //echo ' '; echo ' '; echo '
'; // Z js potem postamo na naslednjo stran echo ''; /*header('Location: '.$this->page_urls['page_register_confirm']); @smalc.s;*/ } } private function preveriNapake($parametri) { // Nastavimo jezik $language = 1; if(isset($this->data['language'])){ $language = $this->data['language']; } elseif(isset($this->data['jezik'])){ $language = ($this->data['jezik'] == 'en' ? 2 : 1); } if(is_numeric($language)){ include('../../lang/'.$language.'.php'); } $napaka = []; // Napaka pri emailu in opozorilo $error_email = FALSE; if (!empty($parametri['missing_email']) && $parametri['missing_email'] == 1) { $error_email = TRUE; $napaka[] = $lang['cms_error_missing_email']; } elseif (!empty($parametri['invalid_email']) && $parametri['invalid_email'] == 1) { $error_email = TRUE; $napaka[] = $lang['cms_error_email']; } elseif (!empty($parametri['existing_email']) && $parametri['existing_email'] == 1) { $error_email = TRUE; $napaka[] = str_replace("RESTORE_PASSWORD", "/frontend/api/api.php?action=reset_password&email=" . $parametri['email'], $lang['cms_error_email_took']); } // Napaka pri imenu $error_ime = FALSE; if (!empty($parametri['missing_ime']) && $parametri['missing_ime'] == 1) { $error_ime = TRUE; $napaka[] = $lang['cms_error_user_field_empty']; } elseif (!empty($parametri['existing_ime']) && $parametri['existing_ime'] == 1) { $error_ime = TRUE; $napaka[] = $lang['cms_error_user_took']; $new_username = $parametri['new_username']; } // Recaptcha error $error_recaptcha = FALSE; if (!empty($parametri['invalid_recaptcha']) && $parametri['invalid_recaptcha'] == 1) { $error_recaptcha = TRUE; $napaka[] = $lang['cms_error_recaptcha']; } // Napaka pri napačno vpisanih geslih $error_geslo = FALSE; if (!empty($parametri['pass_mismatch']) && $parametri['pass_mismatch'] == 1) { $error_geslo = TRUE; $napaka[] = $lang['cms_error_password_incorrect']; } // Geslo ni dovolj kompleksno if (!$error_geslo && !empty($parametri['pass_complex']) && $parametri['pass_complex'] == 1) { $error_geslo = TRUE; $napaka[] = $lang['password_err_complex']; } return [ 'napaka' => $napaka, 'error_geslo' => $error_geslo, 'error_ime' => $error_ime, 'error_email' => $error_email, 'error_recaptcha' => $error_recaptcha, 'new_username' => $new_username ?? '' ]; } // Registrira userja v 1ko - potrditev podatkov za registracijo (vnos userja v bazo v tabelo users_to_be) in posiljanje potrditvenega maila private function userRegisterConfirm() { global $site_url; global $site_path; global $site_domain; global $pass_salt; $email = (isset($this->data['email']) ? $this->data['email'] : ''); $ime = (isset($this->data['ime']) ? $this->data['ime'] : ''); //$geslo = (isset($this->data['geslo']) ? base64_decode($this->data['geslo']) : ''); $geslo = (isset($this->data['geslo']) ? $this->data['geslo'] : ''); $gdprAgree = (isset($this->data['gdpr-agree']) ? $this->data['gdpr-agree'] : 0); $ajax = (isset($this->data['ajax']) ? $this->data['ajax'] : 0); // če je Drupal ajax request // Nastavimo jezik $language = 1; if(isset($this->data['language'])){ $language = $this->data['language']; } elseif(isset($this->data['jezik'])){ $language = ($this->data['jezik'] == 'en' ? 2 : 1); } if(is_numeric($language)){ include('../../lang/'.$language.'.php'); } $kdaj = date('Y-m-d'); $g = base64_encode($geslo); if (strlen($ime) < 1) { $afna = strpos($email, "@"); $ime = substr($email, 0, $afna); } $priimek = ''; // Ce imamo vklopljeno potrjevanje urednika aplikacije ga potrdi admin if (AppSettings::getInstance()->getSetting('confirm_registration') === true) $status = 2; else $status = 1; // Zakaj je bilo prej vedno status 2? Ker to pomeni, da ni aktiviran in se ne more prijaviti! //$status = 2; // Email potrjevanje - vedno aktivirano // naredi link za aktivacijo $code = base64_encode((hash('SHA256', time().$pass_salt.$email.$ime))); // Dodatno preverimo ce imamo vse podatke da ne morejo spamati - dodatno varnostno if ($email == '' || !validEmail($email) || $ime == '' || $g == '') { die(); } // Vstavimo novega userja v users_to_be kjer caka na aktivacijo $result = sisplet_query("INSERT INTO users_to_be (type, email, name, surname, pass, status, gdpr_agree, when_reg, came_from, timecode, code, lang) VALUES ('3', '".$email."', '".$ime."', '".$priimek."', '".$g."', '".$status."', '".$gdprAgree."','".$kdaj."', '0', '".time()."', '".$code."', '".$language."') "); $id = mysqli_insert_id($GLOBALS['connect_db']); // Sestavimo mail z aktivacijsko kodo $Content = $lang['confirm_user_mail']; // Podpis $signature = Common::getEmailSignature(); $Content .= $signature; // Text ignorirajte sporocilo $Content .= $lang['confirm_user_mail_ignore']; // Ce gre slucajno za virutalko $Subject = (isVirtual()) ? $lang['confirm_user_mail_subject_virtual'] : $lang['confirm_user_mail_subject']; // Ce mora admin potrditi dobi email admin in ne uporabnik! if(AppSettings::getInstance()->getSetting('confirm_registration') === true){ // Popravimo besedilo emaila $Content = $lang['confirm_user_mail_admin']; } $PageName = AppSettings::getInstance()->getSetting('app_settings-app_name'); $ZaMail = ''.' '.$Subject.''; // Besedilo v lang dilu je potrebno popravit, ker nimamo vec cel kup parametrov $Content = str_replace("SFMAIL", $email, $Content); $Content = str_replace("SFNAME", $ime.' '.$priimek, $Content); $Content = str_replace("SFPASS", "( ".strtolower($lang['srv_hidden_text'])." )", $Content); $Content = str_replace("SFPAGENAME", $PageName, $Content); $Content = str_replace("SFACTIVATEIN", '', $Content); $Content = str_replace("SFACTIVATEOUT", '', $Content); $Content = str_replace("SFEND", '', $Content); $Subject = str_replace("SFPAGENAME", $PageName, $Subject); // Ce gre slucajno za virutalko if(isVirtual()) $Subject = str_replace("SFVIRTUALNAME", $site_domain, $Subject); $ZaMail .= $Content; $ZaMail .= ""; // Za testiranje brez posiljanja maila if(isDebug()) { return $this->ajaxResponse('success',['mail' => $ZaMail, 'code' => $code]); echo $ZaMail; die(); } // Posljemo mail z linkom za aktivacijo racuna try{ $MA = new MailAdapter(null, 'account'); // Ce mora admin potrditi, posljemo njemu mail if(AppSettings::getInstance()->getSetting('confirm_registration') === true){ $confirm_registration_admin = AppSettings::getInstance()->getSetting('confirm_registration_admin'); if(is_array($confirm_registration_admin)){ // Mail posljemo vsem nastavljenim adminom foreach($confirm_registration_admin as $admin_email){ $MA->addRecipients($admin_email); $result = $MA->sendMail($ZaMail, $Subject); } } else{ $MA->addRecipients($confirm_registration_admin); $result = $MA->sendMail($ZaMail, $Subject); } } else{ $MA->addRecipients($email); $result = $MA->sendMail($ZaMail, $Subject); } } catch (Exception $e){ } if($ajax || $this->method == 'AJAX'){ return $this->ajaxResponse('success'); } // Preko GET parametra pošljemo email za prikaz sporočilo, kam je bil poslan email za aktivacijo registracije $email = urlencode(base64_encode($email)); // redirect po uspešni registraciji in poslanem emailu header('location: '.$this->page_urls['page_register_emailSend'].'&e='.$email); } // Po poslanem mailu po registraciji, user klikne na url in ga aktiviramo (kopiramo iz tabele users_to_be v tabelo users) private function userRegisterActivate() { global $site_url; global $site_path; global $site_domain; global $pass_salt; global $cookie_domain; $language = 1; if(isset($this->data['language'])){ $language = $this->data['language']; } elseif(isset($this->data['jezik'])){ $language = ($this->data['jezik'] == 'en' ? 2 : 1); } if(is_numeric($language)){ include('../../lang/'.$language.'.php'); } if (!isset ($_GET['code'])) { echo $lang['reg_confirm_error']; } else { $code = $_GET['code']; $id = $_GET['id']; $result = sisplet_query("SELECT type, email, name, surname, pass, status, gdpr_agree, when_reg, came_from, lang FROM users_to_be WHERE code='".$code."' AND id='".$id."'"); if (mysqli_num_rows($result) > 0) { $r = mysqli_fetch_assoc($result); $geslo2 = base64_decode($r['pass']); $g = base64_encode((hash('SHA256', base64_decode($r['pass']).$pass_salt))); sisplet_query("INSERT INTO users (type, email, name, surname, pass, status, gdpr_agree, when_reg, came_from, lang) VALUES ('".$r['type']."', '".$r['email']."', '".$r['name']."', '".$r['surname']."', '".$g."', '".$r['status']."', '".$r['gdpr_agree']."', '".$r['when_reg']."', '".$r['came_from']."', '".$r['lang']."')"); sisplet_query("DELETE FROM users_to_be WHERE id='$id'"); $email = $r['email']; $pass = $r['pass']; $ime = $r['name']; $PageName = AppSettings::getInstance()->getSetting('app_settings-app_name'); include_once('../../lang/'.$r['lang'].'.php'); $Content = $lang['confirm_user_content']; $Subject = $lang['confirm_user_subject']; // Ce je ga moramo po registraciji odobriti dobi drugacno sporocilo if (AppSettings::getInstance()->getSetting('confirm_registration') === true){ $UserContent = $lang['register_user_banned_content']; } else{ $UserContent = $lang['register_user_content']; } // Podpis $signature = Common::getEmailSignature(); $UserContent .= $signature; $UserContent .= $lang['register_user_content_edit']; $change = ''; $out = ''; // Ce gre slucajno za virtualko $Subject = (isVirtual()) ? $lang['register_user_subject_virtual'] : $lang['register_user_subject']; $UserContent = str_replace("SFNAME", $ime, $UserContent); $UserContent = str_replace("SFMAIL", $email, $UserContent); $UserContent = str_replace("SFWITH", $email, $UserContent); $UserContent = str_replace("SFPAGENAME", $PageName, $UserContent); $UserContent = str_replace("SFCHANGE", $change, $UserContent); $UserContent = str_replace("SFOUT", $out, $UserContent); $UserContent = str_replace("SFEND", '', $UserContent); $Subject = str_replace("SFPAGENAME", $PageName, $Subject); // Ce gre slucajno za virtualko if(isVirtual()) $Subject = str_replace("SFVIRTUALNAME", $site_domain, $Subject); if ($geslo2 == "") { $UserContent = str_replace("SFPASS", "( ".$lang['without']." ) ", $UserContent); } else { $UserContent = str_replace("SFPASS", "( ".strtolower($lang['srv_hidden_text'])." )", $UserContent); } if ($ime == "") { $UserContent = str_replace("SFNAME", $lang['mr_or_mrs'], $UserContent); } else { $UserContent = str_replace("SFNAME", $ime, $UserContent); } $UserContent = str_replace("SFWITH", $emailZaNaprej, $UserContent); $ZaMail = ''.''.$Subject.''; $ZaMail .= $UserContent; if(isDebug()){ echo $ZaMail; die(); } if (strpos($email, "@") && strpos($email, "@") != 0) { try{ $MA = new MailAdapter(null, 'account'); $MA->addRecipients($email); $result = $MA->sendMail($ZaMail, $Subject); } catch (Exception $e){ } } // Ce imamo vklopljeno potrjevanje urednika aplikacije je to izvedel admin in ne prijavljamo if (AppSettings::getInstance()->getSetting('confirm_registration') !== true){ // določi še, od kje se je prijavil $hostname = ""; $headers = apache_request_headers(); if (array_key_exists('X-Forwarded-For', $headers)) { $hostname = $headers['X-Forwarded-For']; } else { $hostname = $_SERVER["REMOTE_ADDR"]; } // Dobimo id userja s tem emailom $user_id = User::findByEmail($email); // Zabelezimo datum prijave sisplet_query("INSERT INTO user_login_tracker (uid, IP, kdaj) VALUES ('".$user_id."', '".$hostname."', NOW())"); sisplet_query("UPDATE users SET last_login=NOW() WHERE id='".$user_id."'"); setcookie('uid', base64_encode($email), time() + 360000000, '/', $cookie_domain); setcookie("unam", base64_encode($r['name'].' '.$r['surname']),time() + 360000000, '/', $cookie_domain); setcookie('secret', $g, time() + 360000000, '/', $cookie_domain); // redirect po potrditvi maila. header('location: '.$this->page_urls['page_register_activate']); } else{ echo $lang['user_confirm_p_admin_success']; } } } } private function userActivateAlternativEmail() { $language = 1; if(isset($this->data['language'])){ $language = $this->data['language']; } elseif(isset($this->data['jezik'])){ $language = ($this->data['jezik'] == 'en' ? 2 : 1); } if(is_numeric($language)){ include('../../lang/'.$language.'.php'); } if (!isset ($_GET['enc'])) { echo $lang['alternative_email_confirm_error']; } else { parse_str(base64_decode($_GET['enc']), $param); $poizvedba = "SELECT email, user_id FROM users_to_be WHERE code='".$param['code']."' AND id='".$param['id']."'"; global $global_user_id; if(!empty($global_user_id)) $poizvedba .= " AND user_id='".$global_user_id."'"; $result = sisplet_query($poizvedba, "obj"); if (!empty($result) && validEmail($result->email)) { $vpis = User::getInstance($result->user_id)->insertAlternativeEmail($result->email); if($vpis) { sisplet_query("DELETE FROM users_to_be WHERE id='".$param['id']."'"); $uporabnik = sisplet_query("SELECT email, pass FROM users WHERE id='".$result->user_id."'", "obj"); setcookie('uid', base64_encode($uporabnik->email), time() + 360000000, '/', $cookie_domain); setcookie('secret', $uporabnik->pass, time() + 360000000, '/', $cookie_domain); } header('location: '.$this->page_urls['page_register_activate']); }else { header('location: '.$this->page_urls['page_main']); } } } // Po kliku na odjava v mailu uporabnika odregistriramo - PRETESTIRATI private function userUnregisterConfirm() { global $site_url; global $site_path; global $lang; global $global_user_id; global $cookie_domain; $email = $global_user_id; if (isset($_GET['email'])) { $email = strtolower($_GET['email']); if (is_numeric($email)) { $result = sisplet_query("SELECT email FROM users WHERE id='$email'"); $r = mysqli_fetch_row($result); $email = $r[0]; } } $ByeEmail = '

Spoštovani,

Uspešno ste se odjavili iz spletnega mesta www.1ka.si.

Veseli nas, da ste preizkusili orodje 1ka.

SFPAGENAME ekipa

'; $ByeEmailSubject = 'Uspešna odjava'; $result = sisplet_query("SELECT name FROM users WHERE email='$email'"); [$ime] = mysqli_fetch_row($result); $PageName = AppSettings::getInstance()->getSetting('app_settings-app_name'); $ByeEmail = str_replace("SFPAGENAME", $PageName, $ByeEmail); if (strlen($ime) > 2) { $ByeEmail = str_replace("SFNAME", $ime, $ByeEmail); } else { $ByeEmail = str_replace("SFNAME", $lang[mr_or_mrs], $ByeEmail); } $ByeEmailSubject = str_replace("SFPAGENAME", $PageName, $ByeEmailSubject); if (strlen($ime) > 2) { $ByeEmailSubject = str_replace("SFNAME", $ime, $ByeEmailSubject); } else { $ByeEmailSubject = str_replace("SFNAME", $lang['mr_or_mrs'], $ByeEmailSubject); } $result = sisplet_query("UPDATE users SET email=CONCAT('UNSU8MD-', UNIX_TIMESTAMP(), email) WHERE email='$email'"); setcookie('uid', '', time() - 3600, '/', $cookie_domain); setcookie('secret', '', time() - 3600, '/', $cookie_domain); if (substr_count($cookie_domain, ".") > 1) { $nd = substr($cookie_domain, strpos($cookie_domain, ".") + 1); setcookie('uid', '', time() - 3600, '/', $nd); setcookie('secret', '', time() - 3600, '/', $nd); } if (strpos($email, "@") && strpos($email, "@") != 0) { // Poslemo mail za uspesno odregistracijo try{ $MA = new MailAdapter(null, 'account'); $MA->addRecipients($email); $result = $MA->sendMail($ByeEmail, $ByeEmailSubject); } catch (Exception $e){ } // Se obvestilo za admina try{ $MA = new MailAdapter(null, 'account'); $MA->addRecipients($From); $ByeEmail2 = $_lang['ByeNoteToAdmin'].$PageName." ".$email; $result = $MA->sendMail($ByeEmail2, $lang['ByeNoteToAdminSubject']); } catch (Exception $e){ } // Preusmerimo na stran potrditve header('location: '.$this->page_urls['page_unregister_confirm']); } } // Resetira geslo userja (kopirano iz ProfileClass.php) - PRETESTIRATI private function userResetPassword() { global $site_url; global $pass_salt; global $site_path; global $site_domain; global $cookie_domain; $language = 1; if(isset($this->data['language'])){ $language = $this->data['language']; } elseif(isset($this->data['jezik'])){ $language = ($this->data['jezik'] == 'en' ? 2 : 1); } if(is_numeric($language)){ include('../../lang/'.$language.'.php'); } if (isset ($_GET['email']) || isset ($_POST['email']) || isset($this->email)) { if (isset ($_GET['email'])) { $email = strtolower($_GET['email']); } if (isset ($_POST['email'])) { $email = strtolower($_POST['email']); } if (isset ($this->email)) { $email = strtolower($this->email); } $email = CleanXSS($email); // Ali gre za ajax klic $ajaxKlic = false; if(!empty($_POST['ajax']) || $this->method == 'AJAX'){ $ajaxKlic = true; if($this->data['lang'] == 'en' || $this->data['jezik'] == 'en'){ include('../../lang/2.php'); } else { include('../../lang/1.php'); } } // Za simple frontend nastavimo jezik elseif(isset($_GET['lang_id']) && is_numeric($_GET['lang_id'])){ include('../../lang/'.$_GET['lang_id'].'.php'); } // Ce emaila ni v bazi $user_id_1ka = User::findByEmail($email); if (empty($user_id_1ka)) { if($ajaxKlic || $this->method == 'AJAX'){ return $this->ajaxResponse('error', ['text' => $lang['cms_error_no_email']]); }else { header('location: '.$this->page_urls['page_login_noEmail'.$this->prijava].'&email='.$email); } die(); } else { $result = sisplet_query("SELECT name, pass, surname FROM users WHERE id='".$user_id_1ka."'"); [$ime, $geslo, $priimek] = mysqli_fetch_row($result); } // Novo geslo sestavis iz dveh nakljucnih besed + stevilke include($site_path.'lang/words_'.$lang['language_short'].'.php'); // Prva črka je velika začetnica št in male črke, da je v skladu s kompleksnostjo $geslo = ucfirst(strtolower($words[rand(0, 999)].rand(0, 9).$words[rand(0, 999)])); // passhint je parameter v linku ki ga skombiniras skupaj z emailom in mu potem aktiviras novo geslo $passhint = base64_encode((hash('SHA256', time().$pass_salt))); $chk = sisplet_query("SELECT id FROm users WHERE email='$email' AND UNIX_TIMESTAMP(NOW())-LastLP>600"); if (mysqli_num_rows($chk) > 0) { $result = sisplet_query("UPDATE users SET LastLP=UNIX_TIMESTAMP(NOW()), lost_password='".base64_encode((hash('SHA256', $geslo.$pass_salt)))."', lost_password_code='$passhint' WHERE email='$email'"); // Ce gre slucajno za virtualko $Subject = (isVirtual()) ? $lang['lost_pass_subject_virtual'] : $lang['lost_pass_subject']; $Content = $lang['lost_pass_mail']; $PageName = AppSettings::getInstance()->getSetting('app_settings-app_name'); $ZaMail = ''.' '.$Subject.''; $change = ''; $out = ''; $Content = str_replace("SFMAIL", $email, $Content); $Content = str_replace("SFNAME", $ime.' '.$priimek, $Content); $Content = str_replace("SFPASS", $geslo, $Content); $Content = str_replace("SFPAGENAME", $PageName, $Content); $Content = str_replace("SFACTIVATEIN", '', $Content); $Content = str_replace("SFACTIVATEOUT", '', $Content); $Content = str_replace("SFCHANGE", $change, $Content); $Content = str_replace("SFOUT", $out, $Content); $Content = str_replace("SFEND", '', $Content); $Subject = str_replace("SFPAGENAME", $PageName, $Subject); // Ce gre slucajno za virtualko if(isVirtual()) $Subject = str_replace("SFVIRTUALNAME", $site_domain, $Subject); if ($LoginWith == 1) { $Content = str_replace("SFWITH", $email, $Content); } else { $Content = str_replace("SFWITH", $ime, $Content); } // Podpis $signature = Common::getEmailSignature(); $Content .= $signature; $ZaMail .= $Content; $ZaMail .= ""; if(isDebug()){ echo $ZaMail; die(); } try{ $MA = new MailAdapter(null, 'account'); $MA->addRecipients($email); $result = $MA->sendMail($ZaMail, $Subject); } catch (Exception $e){ } } if($ajaxKlic || $this->method == 'AJAX'){ return $this->ajaxResponse('success', ['text' => $lang['lp_sent']]); }else { // Preusmerimo na stran potrditve header('location: '.$this->page_urls['page_reset_password'].'&email='.$email); } } else { header('location: '.$this->page_urls['page_login_noEmail'.$this->prijava].'&email='.$email); } } // Aktivira resetirano geslo userja (kopirano iz ProfileClass.php) - PRETESTIRATI private function userResetPasswordActivate() { global $site_url; global $pass_salt; global $cookie_domain; $language = 1; if(isset($this->data['language'])){ $language = $this->data['language']; } elseif(isset($this->data['jezik'])){ $language = ($this->data['jezik'] == 'en' ? 2 : 1); } if(is_numeric($language)){ include('../../lang/'.$language.'.php'); } $ajaxKlic = (!empty($_POST['ajax']) ? true : false); if (isset($_POST['code']) && isset($_POST['email']) && isset($_POST['pass'])) { $code = $_POST['code']; $email = strtolower($_POST['email']); $email = CleanXSS($_POST['email']); $pass = $_POST['pass']; $pass = CleanXSS($_POST['pass']); $pass = base64_encode((hash('SHA256', $pass.$pass_salt))); $result = sisplet_query("SELECT id, name, surname FROM users WHERE email='$email' AND lost_password='$pass' AND lost_password_code='$code'"); if (mysqli_num_rows($result) > 0) { $r = mysqli_fetch_row($result); $result = sisplet_query("UPDATE users SET pass='$pass', lost_password='', lost_password_code='' WHERE id='".$r[0]."'"); // kukiji $result = sisplet_query("SELECT value FROM misc WHERE what='CookieLife'"); $row = mysqli_fetch_row($result); $LifeTime = $row[0]; setcookie("uid", base64_encode($email), time() + $LifeTime, '/', $cookie_domain); setcookie("secret", $pass, time() + $LifeTime, '/', $cookie_domain); setcookie("unam", base64_encode($r[1].' '.$r[2]),time() + $LifeTime, '/', $cookie_domain); if($ajaxKlic){ echo json_encode([ 'type' => 'success', 'text' => $lang['you_can_change_pass_anytime'], 'action' => $site_url.'/admin/survey/' ]); die(); }else { // Preusmerimo na stran zahvale za spremembo gesla header('location: ' . $this->page_urls['page_reset_password_activate'] . '&success=1'); } } else { if($ajaxKlic){ echo json_encode([ 'type' => 'error', 'text' => $lang['cms_activation_link_expired_text'] ]); die(); }else { // Preusmerimo nazaj na formo zaradi napake header('location: ' . $this->page_urls['page_reset_password_activate'] . '&error=2'); } } } else { // Preusmerimo nazaj na formo zaradi napake header('location: '.$this->page_urls['page_reset_password_activate'].'&code='.$code.'&error=1'); } } private function ajaxResponse($type, $data = []) { echo json_encode([ 'type' => $type, 'data' => $data ]); die(); } /* * Kodiramo piškotek, ki ga posredujemo preko cUrl-ja */ private function cookieEncode(array $piskotek) { return base64_encode(serialize($piskotek)); } }