Skip to content

Commit

Permalink
Merge pull request #16 from jan-stanek/username
Browse files Browse the repository at this point in the history
úprava generování username
  • Loading branch information
kalich5 committed Apr 13, 2018
2 parents e91d21a + 12d7a5b commit 11d0dcc
Show file tree
Hide file tree
Showing 2 changed files with 99 additions and 85 deletions.
32 changes: 18 additions & 14 deletions action.php
@@ -1,22 +1,24 @@
<?php

// must be run within DokuWiki
if (!defined('DOKU_INC')) die();

require_once __DIR__ . '/vendor/autoload.php';


class action_plugin_authskautis extends DokuWiki_Action_Plugin {

class action_plugin_authskautis extends DokuWiki_Action_Plugin
{
/**
* Registers the event handlers.
*/
function register(Doku_Event_Handler $controller)
{
$controller->register_hook('HTML_LOGINFORM_OUTPUT', 'BEFORE', $this, 'hook_html_loginform_output', []);
$controller->register_hook('HTML_LOGINFORM_OUTPUT', 'BEFORE', $this, 'hook_html_loginform_output', []);
$controller->register_hook('HTML_UPDATEPROFILEFORM_OUTPUT', 'BEFORE', $this, 'hook_updateprofileform_output', []);
}

function hook_updateprofileform_output(&$event, $param) {
function hook_updateprofileform_output(&$event, $param)
{
global $USERINFO;

if ($USERINFO['is_skautis']) {
Expand All @@ -28,29 +30,31 @@ function hook_updateprofileform_output(&$event, $param) {
$elem['disabled'] = 'disabled';
$event->data->replaceElement(3, $elem);

$event->data->replaceElement(10, null);
$event->data->replaceElement(9, null);
$event->data->replaceElement(8, null);
$event->data->replaceElement(7, null);
$event->data->replaceElement(6, null);
$event->data->replaceElement(5, null);
$event->data->replaceElement(4, null);
$event->data->replaceElement(10, NULL);
$event->data->replaceElement(9, NULL);
$event->data->replaceElement(8, NULL);
$event->data->replaceElement(7, NULL);
$event->data->replaceElement(6, NULL);
$event->data->replaceElement(5, NULL);
$event->data->replaceElement(4, NULL);
}
}

/**
* Handles the login form rendering.
*/
function hook_html_loginform_output(&$event, $param) {
function hook_html_loginform_output(&$event, $param)
{
$skautIsAppId = $this->getConf('skautis_app_id');
$skautIsTestmode = $this->getConf('skautis_test_mode');

if($skautIsAppId!=''){
if ($skautIsAppId != '') {
$skautIs = Skautis\Skautis::getInstance($skautIsAppId, $skautIsTestmode);
$loginUrl = $skautIs->getLoginUrl();
$buttonText = $this->getLang('enter_skautis');
echo "<a href='$loginUrl' class='login-button' title='$buttonText'><span class='login-button-logo'>&#x00ac;</span> $buttonText</a>";

}
}
}

?>
152 changes: 81 additions & 71 deletions auth.php
@@ -1,40 +1,44 @@
<?php

/**
* DokuWiki Plugin skautis (Auth Component)
*
* @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
* @license GPL 3 https://www.gnu.org/licenses/gpl-3.0.en.html
* @author Jiri Dorazil <alex@skaut.cz>
*/

// must be run within Dokuwiki
if(!defined('DOKU_INC')) die();
// must be run within DokuWiki
if (!defined('DOKU_INC')) die();

require_once __DIR__ . '/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']:'')));
if (!defined('AUTHSKAUTIS_COOKIE')) {
define('AUTHSKAUTIS_COOKIE', 'SPGG' . md5(DOKU_REL . (($conf['securecookie']) ? $_SERVER['SERVER_PORT'] : '')));
}


class auth_plugin_authskautis extends auth_plugin_authplain {

/** @var \Skautis\Skautis */
class auth_plugin_authskautis extends auth_plugin_authplain
{
/**
* @var \Skautis\Skautis
*/
public $skautIs;


/**
* Constructor.
*/
public function __construct() {
global $config_cascade;
public function __construct()
{
global $conf, $config_cascade;

parent::__construct(); // for compatibility

$this->success = true;
$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)
$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)

$skautIsAppId = $this->getConf('skautis_app_id');
$skautIsTestmode = $this->getConf('skautis_test_mode');
Expand All @@ -44,119 +48,124 @@ public function __construct() {
/**
* Do all authentication [ OPTIONAL ]
*
* @param string $user Username
* @param string $pass Cleartext Password
* @param bool $sticky Cookie should not expire
* @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) {
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'];
$USERINFO = $_SESSION[DOKU_COOKIE]['authskautis']['info'];
$_SERVER['REMOTE_USER'] = $_SESSION[DOKU_COOKIE]['authskautis']['user'];
return true;
return TRUE;
}

//get form login info
if(!empty($user)){
//get authplain form login info
if (!empty($user)) {
//var_dump($user,$pass);die;
if($this->checkPass($user,$pass)){
$uinfo = $this->getUserData($user);
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;
$USERINFO['is_skautis'] = FALSE;
$USERINFO['pass'] = "";

//save data in session
$_SERVER['REMOTE_USER'] = $uinfo['name'];
$_SESSION[DOKU_COOKIE]['authskautis']['user'] = $uinfo['name'];
$_SERVER['REMOTE_USER'] = $user;
$_SESSION[DOKU_COOKIE]['authskautis']['user'] = $user;
$_SESSION[DOKU_COOKIE]['authskautis']['info'] = $USERINFO;

return true;
}else{
return TRUE;
} else {
//invalid credentials - log off
msg($this->getLang('badlogin'),-1);
return false;
msg($this->getLang('badlogin'), -1);
return FALSE;
}
}

//$sticky ? $sticky = true : $sticky = false; //sanity check
if (!empty($_POST) && isset($_POST['skautIS_Token'])){
$skautIsAllowedAddUser = $this->getConf('skautis_allowed_add_user');

if (!empty($_POST) && isset($_POST['skautIS_Token'])) {
$this->skautIs->setLoginData($_POST);
$skautIsUser = $this->skautIs->getUser();

if ($skautIsUser->isLoggedIn(true)) {
$userData = $this->skautIs->user->userDetail();
$token = $this->skautIs->getUser()->getLoginId();
$person = $this->skautIs->org->PersonDetail(['ID_Login' => $token, 'ID' => $userData->ID_Person]);
$skautIsEmail = $person->Email;
$skautIsUsername = $person->FirstName . ' ' . $person->LastName;
if ($skautIsUser->isLoggedIn(TRUE)) {
$loginId = $this->skautIs->getUser()->getLoginId();
$userDetail = $this->skautIs->usr->userDetail();
$personDetail = $this->skautIs->org->PersonDetail(['ID_Login' => $loginId, 'ID' => $userDetail->ID_Person]);

$skautIsUserName = $userDetail->UserName;
$skautIsEmail = $personDetail->Email;
$skautIsFirstName = $personDetail->FirstName;
$skautIsLastName = $personDetail->LastName;
$skautIsNickName = $personDetail->NickName;

$name = $skautIsFirstName . ' ' . $skautIsLastName . ($skautIsNickName ? ' - ' . $skautIsNickName : '');

$login = iconv('UTF-8', 'ASCII//TRANSLIT', $skautIsUserName);
$login = preg_replace('/[^a-zA-Z0-9_]/', '', $login);
$login = $login . $userDetail->ID;

$login = 'skautis'.$userData->ID;
$udata = $this->getUserData($login);

//create and update user in base
if($skautIsAllowedAddUser){
if ($this->getConf('skautis_allowed_add_user')) {
if (!$udata) {
//default groups
$grps = null;
if ($this->getConf('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);
$this->createUser($login, md5(rand() . $login), $name, $skautIsEmail, $grps);
$udata = $this->getUserData($login);
} elseif ($udata['name'] != $skautIsUsername || $udata['email'] != $skautIsEmail) {
} elseif ($udata['name'] != $name || $udata['email'] != $skautIsEmail) {
//update user
$this->modifyUser($login, ['name'=>$skautIsUsername, 'email'=>$skautIsEmail]);
$this->modifyUser($login, ['name' => $name, 'email' => $skautIsEmail]);
}
}

if ($this->isUserValid($login)){
if ($this->isUserValid($login)) {
//set user info
$USERINFO['pass'] = "";
$USERINFO['name'] = $skautIsUsername;
$USERINFO['name'] = $name;
$USERINFO['mail'] = $skautIsEmail;
$USERINFO['grps'] = $udata['grps'];
$USERINFO['is_skautis'] = true;
$_SERVER['REMOTE_USER'] = $skautIsUsername;
$USERINFO['is_skautis'] = TRUE;
$_SERVER['REMOTE_USER'] = $login;

//save user info in session
$_SESSION[DOKU_COOKIE]['authskautis']['user'] = $_SERVER['REMOTE_USER'];
$_SESSION[DOKU_COOKIE]['authskautis']['user'] = $login;
$_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));
if (isset($_GET['do']) && $_GET['do'] == 'login') {
header("Location: " . wl('start', '', TRUE));
}

return true;
return TRUE;
} else {
msg($this->getLang('nouser'),-1);
msg($this->getLang('nouser'), -1);
$this->logOff();
return false;
return FALSE;
}
} else {
msg($this->getLang('badskautis'),-1);
msg($this->getLang('badskautis'), -1);
$this->logOff();
return false;
return FALSE;
}
} else {
//return false;
}
return false;

return FALSE;
}

function logOff(){
function logOff()
{
$isSkautIs = $_SESSION[DOKU_COOKIE]['authskautis']['info']['is_skautis'];

unset($_SESSION[DOKU_COOKIE]['authskautis']['user']);
Expand All @@ -168,7 +177,8 @@ function logOff(){
}
}

function isUserValid($login){
return isset($this->users[$login]) ? true : false;
function isUserValid($login)
{
return isset($this->users[$login]) ? TRUE : FALSE;
}
}

0 comments on commit 11d0dcc

Please sign in to comment.