*/ // must be run within Dokuwiki if(!defined('DOKU_INC')) die(); require_once 'vendor/autoload.php'; global $conf; // define cookie and session id, append server port when securecookie is configured if (!defined('AUTHSKAUTIS_COOKIE')){ define('AUTHSKAUTIS_COOKIE', 'SPGG'.md5(DOKU_REL.(($conf['securecookie'])?$_SERVER['SERVER_PORT']:''))); } class auth_plugin_authskautis extends auth_plugin_authplain { /** * Constructor. */ public function __construct() { global $config_cascade; parent::__construct(); // for compatibility $this->url = Skautis\Config::URL_PRODUCTION . '/Login/?appid='; $this->testUrl = Skautis\Config::URL_TEST . '/Login/?appid='; $this->success = true; $this->cando['addUser'] = true; // can Users be created? $this->cando['external'] = true; // does the module do external auth checking? $this->cando['logout'] = true; // can the user logout again? (eg. not possible with HTTP auth) } /** * Do all authentication [ OPTIONAL ] * * @param string $user Username * @param string $pass Cleartext Password * @param bool $sticky Cookie should not expire * @return bool true on successful auth */ public function trustExternal($user, $pass, $sticky = false) { global $USERINFO; //get user info in session if (!empty($_SESSION[DOKU_COOKIE]['authskautis']['info'])) { $USERINFO['name'] = $_SESSION[DOKU_COOKIE]['authskautis']['info']['name']; $USERINFO['mail'] = $_SESSION[DOKU_COOKIE]['authskautis']['info']['mail']; $USERINFO['grps'] = $_SESSION[DOKU_COOKIE]['authskautis']['info']['grps']; $USERINFO['is_skautis'] = $_SESSION[DOKU_COOKIE]['authskautis']['info']['is_skautis']; $_SERVER['REMOTE_USER'] = $_SESSION[DOKU_COOKIE]['authskautis']['user']; return true; } //get form login info if(!empty($user)){ //var_dump($user,$pass);die; if($this->checkPass($user,$pass)){ $uinfo = $this->getUserData($user); //set user info $USERINFO['name'] = $uinfo['name']; $USERINFO['mail'] = $uinfo['email']; $USERINFO['grps'] = $uinfo['grps']; $USERINFO['pass'] = $pass; //save data in session $_SERVER['REMOTE_USER'] = $uinfo['name']; $_SESSION[DOKU_COOKIE]['authskautis']['user'] = $uinfo['name']; $_SESSION[DOKU_COOKIE]['authskautis']['info'] = $USERINFO; return true; }else{ //invalid credentials - log off msg($this->getLang('badlogin'),-1); return false; } } //$sticky ? $sticky = true : $sticky = false; //sanity check if (!empty($_POST)){ $skautIsAppId = $this->getConf('skautis_app_id'); $skautIsTestmode = $this->getConf('skautis_test_mode'); $skautIsAllowedAddUser = $this->getConf('skautis_allowed_add_user'); $skautIs = Skautis\Skautis::getInstance($skautIsAppId,$skautIsTestmode); $skautIs->setLoginData($_POST); $skautIsUser = $skautIs->getUser(); if ($skautIsUser->isLoggedIn(true)) { $userData = $skautIs->user->userDetail(); $token = $skautIs->getUser()->getLoginId(); $person = $skautIs->org->PersonDetail(['ID_Login' => $token, 'ID' => $userData->ID_Person]); $skautIsEmail = $person->Email; $skautIsUsername = $person->FirstName . ' ' . $person->LastName; $login = 'skautis'.$userData->ID; $udata = $this->getUserData($login); //create and update user in base if($skautIsAllowedAddUser){ if (!$udata) { //default groups $grps = null; if ($this->getConf('default_groups')){ $grps = explode(' ', $this->getConf('default_groups')); } //create user $this->createUser($login, md5(rand().$login), $skautIsUsername, $skautIsEmail, $grps); $udata = $this->getUserData($login); } elseif ($udata['name'] != $skautIsUsername || $udata['email'] != $skautIsEmail) { //update user $this->modifyUser($login, ['name'=>$skautIsUsername, 'email'=>$skautIsEmail]); } } if ($this->isUserValid($login)){ //set user info $USERINFO['pass'] = ""; $USERINFO['name'] = $skautIsUsername; $USERINFO['mail'] = $skautIsEmail; $USERINFO['grps'] = $udata['grps']; $USERINFO['is_skautis'] = true; $_SERVER['REMOTE_USER'] = $skautIsUsername; //save user info in session $_SESSION[DOKU_COOKIE]['authskautis']['user'] = $_SERVER['REMOTE_USER']; $_SESSION[DOKU_COOKIE]['authskautis']['info'] = $USERINFO; //if login page - redirect to main page if (isset($_GET['do']) && $_GET['do']=='login'){ header("Location: ".wl('start', '', true)); } return true; } else { msg($this->getLang('nouser'),-1); $this->logOff(); return false; } } else { msg($this->getLang('badskautis'),-1); $this->logOff(); return false; } } else { //return false; } return false; } function logOff(){ unset($_SESSION[DOKU_COOKIE]['authskautis']['user']); unset($_SESSION[DOKU_COOKIE]['authskautis']['info']); } function isUserValid($login){ return isset($this->users[$login]) ? true : false; } }