1 <?php
2 /**
3  * Federated Login for DokuWiki - helper class
4  *
5  * Enables your DokuWiki to provide users with
6  * Hybrid OAuth + OpenId federated login.
7  *
8  * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
9  * @link       http://www.dokuwiki.org/plugin:fedauth
10  * @author     Aoi Karasu <aoikarasu@gmail.com>
11  */
12 
13 // must be run within Dokuwiki
14 if (!defined('DOKU_INC')) die();
15 
16 if (!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN', DOKU_INC . 'lib/plugins/');
17 if (!defined('FEDAUTH_PLUGIN')) define ('FEDAUTH_PLUGIN', DOKU_PLUGIN . 'fedauth/');
18 if (!defined('ADMIN_CMD_SCOPE')) define('ADMIN_CMD_SCOPE', 'adm');
19 
20 require_once(DOKU_PLUGIN . 'admin.php');
21 require_once(FEDAUTH_PLUGIN . 'common.php');
22 require_once(FEDAUTH_PLUGIN . "classes/fa_base.class.php");
23 require_once(FEDAUTH_PLUGIN . "classes/adm/fa_manage.adm.class.php");
24 
25 class admin_plugin_fedauth extends DokuWiki_Admin_Plugin {
26 
27     var $provid = '';
28     var $cmd = '';
29     var $handler = null;
30 
31     var $providers = null;
32 
33     var $functions = array('details','movedn','moveup','remove','uselarge','usesmall'); // require a provider id
34     var $commands = array('add','manage','restore','toggle'); // don't require a provider id
35 
36     var $msg = '';
37     var $err = '';
38 
39     /**
40      * Returns the plugin meta information.
41      */
42     function getInfo() {
43         return array(
44             'author' => 'Aoi Karasu',
45             'email'  => 'aoikarasu@gmail.com',
46             'date'   => '2012-06-09',
47             'name'   => 'Federated Login Plugin',
48             'desc'   => 'Functions to configure authorization providers',
49             'url'    => 'http://www.dokuwiki.org/plugin:fedauth',
50         );
51     }
52 
53     /**
54      * Restricts the access to admins only.
55      */
56     function forAdminOnly() {
57         return $this->getConf('adminsonly');
58     }
59 
60     /**
61      * Handles configuration page requests.
62      */
63     function handle() {
64         // enable direct access to language strings
65         $this->setupLocale();
66 
67         $fa = $_REQUEST['fa'];
68         if (is_array($fa)) {
69             $this->cmd = key($fa);
70             $this->provid = is_array($fa[$this->cmd]) ? key($fa[$this->cmd]) : null;
71         } else {
72             $this->cmd = $fa;
73             $this->provid = null;
74         }
75 
76         // load helper plugin
77         if ($helper =& plugin_load('helper', 'fedauth')) {
78             $this->providers = $helper->getProviders();
79         }
80 
81         // verify $_REQUEST vars
82         if (in_array($this->cmd, $this->commands)) {
83             $this->provid = '';
84         } else if (!in_array($this->cmd, $this->functions) || !$this->providers->get($this->provid)) {
85             $this->cmd = 'manage';
86             $this->provid = '';
87         }
88 
89         if(($this->cmd != 'manage' || $this->provid != '') && !checkSecurityToken()){
90             $this->cmd = 'manage';
91             $this->provid = '';
92         }
93 
94         // load command class and process the command
95         $this->handler =& load_handler_class($this, $this->cmd, ADMIN_CMD_SCOPE, $this->provid, 'manage');
96         $result = $this->handler->process();
97         if (is_array($result) && empty($_REQUEST['ajax'])) {
98             msg($result['msg'], $result['code']);
99         }
100     }
101 
102     /**
103      * Outputs data for AJAX call.
104      */
105     function ajax() {
106         if (!$this->getConf('useajax')) return;
107 
108         // enable direct access to language strings
109         $this->setupLocale();
110 
111         if ($this->handler === NULL) $this->handler = new fa_manage($this, $this->cmd, $this->provid);
112 
113         if (!$this->handler->ajax()) {
114             print "Unrecognized ajax call: " . $this->cmd;
115         }
116     }
117 
118     /**
119      * Outputs configuration page.
120      */
121     function html() {
122         // enable direct access to language strings
123         $this->setupLocale();
124 
125         if ($this->handler === NULL) $this->handler = new fa_manage($this, $this->provid);
126 
127         ptln('<div id="fedauth__manager">');
128         if ($this->getConf('useajax')) {
129             print plugin_script_block('admin');
130         }
131         $this->handler->html();
132         ptln('</div><!-- #fedauth__manager -->');
133     }
134 
135 } /* admin_plugin_federate */
136 
137 /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
138