Subversion Repositories oidplus

Rev

Rev 635 | Rev 801 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
635 daniel-mar 1
<?php
2
 
3
/*
4
 * OIDplus 2.0
5
 * Copyright 2019 - 2021 Daniel Marschall, ViaThinkSoft
6
 *
7
 * Licensed under the Apache License, Version 2.0 (the "License");
8
 * you may not use this file except in compliance with the License.
9
 * You may obtain a copy of the License at
10
 *
11
 *     http://www.apache.org/licenses/LICENSE-2.0
12
 *
13
 * Unless required by applicable law or agreed to in writing, software
14
 * distributed under the License is distributed on an "AS IS" BASIS,
15
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
 * See the License for the specific language governing permissions and
17
 * limitations under the License.
18
 */
19
 
20
// ATTENTION: If you change something, please make sure that the changes
21
//            are synchronous with OIDplusPageAdminAutomatedAJAXCalls
22
 
23
if (!defined('INSIDE_OIDPLUS')) die();
24
 
25
class OIDplusPageRaAutomatedAJAXCalls extends OIDplusPagePluginRa {
26
 
27
        public function action($actionID, $params) {
28
                if ($actionID == 'blacklistJWT') {
29
                        if (!OIDplus::baseConfig()->getValue('JWT_ALLOW_AJAX_USER', true)) {
30
                                throw new OIDplusException(_L('The administrator has disabled this feature. (Base configuration setting %1).','JWT_ALLOW_AJAX_USER'));
31
                        }
32
 
33
                        _CheckParamExists($params, 'user');
34
                        $ra_email = $params['user'];
35
 
36
                        if (!OIDplus::authUtils()->isRaLoggedIn($ra_email) && !OIDplus::authUtils()->isAdminLoggedIn()) {
37
                                throw new OIDplusException(_L('You need to <a %1>log in</a> as the requested RA %2 or as admin.',OIDplus::gui()->link('oidplus:login$ra$'.$ra_email),'<b>'.htmlentities($ra_email).'</b>'));
38
                        }
39
 
40
                        $gen = OIDplusAuthContentStoreJWT::JWT_GENERATOR_AJAX;
41
                        $sub = $ra_email;
42
 
43
                        OIDplusAuthContentStoreJWT::jwtBlacklist($gen, $sub);
44
 
45
                        return array("status" => 0);
46
                } else {
47
                        throw new OIDplusException(_L('Unknown action ID'));
48
                }
49
        }
50
 
51
        public function gui($id, &$out, &$handled) {
52
                if (explode('$',$id)[0] == 'oidplus:automated_ajax_information_ra') {
53
                        $handled = true;
54
 
55
                        $ra_email = explode('$',$id)[1];
56
 
57
                        $out['title'] = _L('Automated AJAX calls');
800 daniel-mar 58
                        $out['icon'] = file_exists(__DIR__.'/img/main_icon.png') ? OIDplus::webpath(__DIR__,true).'img/main_icon.png' : '';
635 daniel-mar 59
 
60
                        if (!OIDplus::authUtils()->isRaLoggedIn($ra_email) && !OIDplus::authUtils()->isAdminLoggedIn()) {
800 daniel-mar 61
                                $out['icon'] = 'img/error.png';
635 daniel-mar 62
                                $out['text'] = '<p>'._L('You need to <a %1>log in</a> as the requested RA %2 or as admin.',OIDplus::gui()->link('oidplus:login$ra$'.$ra_email),'<b>'.htmlentities($ra_email).'</b>').'</p>';
63
                                return;
64
                        }
65
 
66
                        if (!OIDplus::baseConfig()->getValue('JWT_ALLOW_AJAX_USER', true)) {
67
                                $out['text'] = '<p>'._L('The administrator has disabled this feature. (Base configuration setting %1).','JWT_ALLOW_AJAX_USER').'</p>';
68
                                return;
69
                        }
70
 
71
                        $gen = OIDplusAuthContentStoreJWT::JWT_GENERATOR_AJAX;
72
                        $sub = $ra_email;
73
 
74
                        $authSimulation = new OIDplusAuthContentStoreJWT();
75
                        $authSimulation->raLogin($ra_email);
76
                        $authSimulation->setValue('oidplus_generator', $gen);
77
                        $token = $authSimulation->getJWTToken();
78
 
79
                        $out['text'] .= '<p>'._L('You can make automated calls to your OIDplus account by calling the AJAX API.').'</p>';
80
                        $out['text'] .= '<p>'._L('The URL for the AJAX script is:').'</p>';
81
                        $out['text'] .= '<p><b>'.OIDplus::webpath(null,false).'ajax.php</b></p>';
82
                        $out['text'] .= '<p>'._L('You must at least provide following fields:').'</p>';
83
                        $out['text'] .= '<p><pre>';
84
                        $out['text'] .= 'OIDPLUS_AUTH_JWT = "'.htmlentities($token).'"'."\n";
85
                        $out['text'] .= '</pre></p>';
86
                        $out['text'] .= '<p>'._L('Please keep this information confidential!').'</p>';
87
                        $out['text'] .= '<p>'._L('The JWT-token (secret!) will automatically perform a one-time-login to fulfill the request. The other fields are the normal fields which are called during the usual operation of OIDplus.').'</p>';
88
                        $out['text'] .= '<p>'._L('Currently, there is no documentation for the AJAX calls. However, you can look at the <b>script.js</b> files of the plugins to see the field names being used. You can also enable network analysis in your web browser debugger (F12) to see the request headers sent to the server during the operation of OIDplus.').'</p>';
89
 
90
                        $out['text'] .= '<h2>'._L('Blacklisted tokens').'</h2>';
91
                        $bl_time = OIDplusAuthContentStoreJWT::jwtGetBlacklistTime($gen, $sub);
92
                        if ($bl_time == 0) {
93
                                $out['text'] .= '<p>'._L('None of the previously generated JWT tokens have been blacklisted.').'</p>';
94
                        } else {
95
                                $out['text'] .= '<p>'._L('All tokens generated before %1 have been blacklisted.',date('d F Y, H:i:s',$bl_time+1)).'</p>';
96
                        }
97
                        $out['text'] .= '<button type="button" name="btn_blacklist_jwt" id="btn_blacklist_jwt" class="btn btn-danger btn-xs" onclick="OIDplusPageRaAutomatedAJAXCalls.blacklistJWT('.js_escape($ra_email).')">'._L('Blacklist all previously generated tokens').'</button>';
98
 
99
                        $out['text'] .= '<h2>'._L('Example for adding OID 2.999.123 using JavaScript').'</h2>';
100
                        $cont = file_get_contents(__DIR__.'/examples/example_js.html');
101
                        $cont = str_replace('<url>', OIDplus::webpath(null,false).'ajax.php', $cont);
102
                        $cont = str_replace('<token>', $token, $cont);
103
                        $out['text'] .= '<pre>'.htmlentities($cont).'</pre>';
104
 
105
                        $out['text'] .= '<h2>'._L('Example for adding OID 2.999.123 using PHP (located at a foreign server)').'</h2>';
106
                        $cont = file_get_contents(__DIR__.'/examples/example_php.phps');
107
                        $cont = str_replace('<url>', OIDplus::webpath(null,false).'ajax.php', $cont);
108
                        $cont = str_replace('<token>', $token, $cont);
109
                        $out['text'] .= '<pre>'.preg_replace("@<br.*>@ismU","",highlight_string($cont,true)).'</pre>';
110
 
111
                        $out['text'] .= '<h2>'._L('Example for adding OID 2.999.123 using Python').'</h2>';
112
                        $cont = file_get_contents(__DIR__.'/examples/example_python.py');
113
                        $cont = str_replace('<url>', OIDplus::webpath(null,false).'ajax.php', $cont);
114
                        $cont = str_replace('<token>', $token, $cont);
115
                        $out['text'] .= '<pre>'.htmlentities($cont).'</pre>';
116
 
117
                        $out['text'] .= '<h2>'._L('Example for adding OID 2.999.123 using VBScript').'</h2>';
118
                        $cont = file_get_contents(__DIR__.'/examples/example_vbs.vbs');
119
                        $cont = str_replace('<url>', OIDplus::webpath(null,false).'ajax.php', $cont);
120
                        $cont = str_replace('<token>', $token, $cont);
121
                        $out['text'] .= '<pre>'.htmlentities($cont).'</pre>';
122
                }
123
        }
124
 
125
        public function tree(&$json, $ra_email=null, $nonjs=false, $req_goto='') {
126
                if (!$ra_email) return false;
127
                if (!OIDplus::authUtils()->isRaLoggedIn($ra_email) && !OIDplus::authUtils()->isAdminLoggedIn()) return false;
128
 
800 daniel-mar 129
                if (file_exists(__DIR__.'/img/main_icon16.png')) {
130
                        $tree_icon = OIDplus::webpath(__DIR__,true).'img/main_icon16.png';
635 daniel-mar 131
                } else {
132
                        $tree_icon = null; // default icon (folder)
133
                }
134
 
135
                $json[] = array(
136
                        'id' => 'oidplus:automated_ajax_information_ra$'.$ra_email,
137
                        'icon' => $tree_icon,
138
                        'text' => _L('Automated AJAX calls')
139
                );
140
 
141
                return true;
142
        }
143
 
144
        public function tree_search($request) {
145
                return false;
146
        }
147
}