1<?php 2/** 3 * DokuWiki Plugin oauth (Auth Component) 4 * 5 * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 6 * @author Andreas Gohr <andi@splitbrain.org> 7 */ 8 9// must be run within Dokuwiki 10if(!defined('DOKU_INC')) die(); 11 12class auth_plugin_oauth extends auth_plugin_authplain { 13 14 public function __construct() { 15 parent::__construct(); 16 17 18 $this->cando['external'] = true; 19 } 20 21 22 function trustExternal($user, $pass, $sticky = false) { 23 global $INPUT; 24 global $conf; 25 global $USERINFO; 26 27 $servicename = $INPUT->str('oa'); 28 29 // check session for existing oAuth login data 30 $session = $_SESSION[DOKU_COOKIE]['auth']; 31 if(!$servicename && isset($session['oauth'])) { 32 $servicename = $session['oauth']; 33 // check if session data is still considered valid 34 if( ($session['time'] >= time() - $conf['auth_security_timeout']) && 35 ($session['buid'] == auth_browseruid())) { 36 37 $_SERVER['REMOTE_USER'] = $session['user']; 38 $USERINFO = $session['info']; 39 return true; 40 } 41 } 42 43 // either we're in oauth login or a previous log needs to be rechecked 44 if($servicename) { 45 /** @var helper_plugin_oauth $hlp */ 46 $hlp = plugin_load('helper', 'oauth'); 47 $service = $hlp->loadService($servicename); 48 if(is_null($service)) return false; 49 50 // get the token 51 if($service->checkToken()) { 52 $uinfo = $service->getUser(); 53 $this->setUserSession($uinfo, $servicename); 54 return true; 55 } 56 57 return false; // something went wrong during oAuth login 58 } 59 60 61 // do the "normal" plain auth login via form 62 return auth_login($user, $pass, $sticky); 63 } 64 65 /** 66 * @param array $data 67 * @param string $service 68 */ 69 protected function setUserSession($data, $service) { 70 global $USERINFO; 71 global $conf; 72 73 // set up groups 74 if(!is_array($data['grps'])) { 75 $data['grps'] = array(); 76 } 77 $data['grps'][] = $conf['defaultgroup']; 78 $data['grps'][] = $this->cleanGroup($service); 79 80 $USERINFO = $data; 81 $_SERVER['REMOTE_USER'] = $data['user']; 82 $_SESSION[DOKU_COOKIE]['auth']['user'] = $data['user']; 83 $_SESSION[DOKU_COOKIE]['auth']['pass'] = $data['pass']; 84 $_SESSION[DOKU_COOKIE]['auth']['info'] = $USERINFO; 85 $_SESSION[DOKU_COOKIE]['auth']['buid'] = auth_browseruid(); 86 $_SESSION[DOKU_COOKIE]['auth']['time'] = time(); 87 $_SESSION[DOKU_COOKIE]['auth']['oauth'] = $service; 88 } 89 90} 91 92// vim:ts=4:sw=4:et: