Subversion Repositories oidplus

Rev

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

Rev Author Line No. Line
139 daniel-mar 1
<?php
2
 
3
/*
4
 * OIDplus 2.0
5
 * Copyright 2019 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
 
256 daniel-mar 20
class OIDplusPageAdminRegistration extends OIDplusPagePluginAdmin {
139 daniel-mar 21
 
269 daniel-mar 22
        /*private*/ const QUERY_REGISTER_V1 =         '1.3.6.1.4.1.37476.2.5.2.1.1.1';
23
        /*private*/ const QUERY_UNREGISTER_V1 =       '1.3.6.1.4.1.37476.2.5.2.1.2.1';
24
        /*private*/ const QUERY_LISTALLSYSTEMIDS_V1 = '1.3.6.1.4.1.37476.2.5.2.1.3.1';
25
        /*private*/ const QUERY_LIVESTATUS_V1 =       '1.3.6.1.4.1.37476.2.5.2.1.4.1';
256 daniel-mar 26
 
139 daniel-mar 27
        public function gui($id, &$out, &$handled) {
141 daniel-mar 28
                if ($id === 'oidplus:srv_registration') {
139 daniel-mar 29
                        $handled = true;
360 daniel-mar 30
                        $out['title'] = _L('System registration settings');
241 daniel-mar 31
                        $out['icon'] = file_exists(__DIR__.'/icon_big.png') ? OIDplus::webpath(__DIR__).'icon_big.png' : '';
139 daniel-mar 32
 
33
                        if (!OIDplus::authUtils()::isAdminLoggedIn()) {
34
                                $out['icon'] = 'img/error_big.png';
360 daniel-mar 35
                                $out['text'] = '<p>'._L('You need to <a %1>log in</a> as administrator.',OIDplus::gui()->link('oidplus:login')).'</p>';
281 daniel-mar 36
                                return;
37
                        }
38
 
362 daniel-mar 39
                        if (file_exists(__DIR__ . '/info$'.OIDplus::getCurrentLang().'.html')) {
40
                                $info = file_get_contents(__DIR__ . '/info$'.OIDplus::getCurrentLang().'.html');
41
                        } else {
42
                                $info = file_get_contents(__DIR__ . '/info.html');
43
                        }
386 daniel-mar 44
 
45
                        list($html, $js, $css) = extractHtmlContents($info);
46
                        $info = '';
47
                        if (!empty($js))  $info .= "<script>\n$js\n</script>";
48
                        if (!empty($css)) $info .= "<style>\n$css\n</style>";
49
                        $info .= $html;
281 daniel-mar 50
 
362 daniel-mar 51
                        $out['text'] = $info;
52
 
281 daniel-mar 53
                        if (!OIDplus::getPkiStatus()) {
360 daniel-mar 54
                                $out['text'] .= '<p><font color="red">'._L('Error: Your system could not generate a private/public key pair. (OpenSSL is probably missing on your system). Therefore, you cannot register/unregister your OIDplus instance.').'</font></p>';
139 daniel-mar 55
                        } else {
360 daniel-mar 56
                                $out['text'] .= '<p><input type="button" onclick="openOidInPanel(\'oidplus:srvreg_status\');" value="'._L('Check status of the registration and collected data').'"></p>';
277 daniel-mar 57
 
281 daniel-mar 58
                                if (OIDplus::baseConfig()->getValue('REGISTRATION_HIDE_SYSTEM', false)) {
360 daniel-mar 59
                                        $out['text'] .= '<p><font color="red"><b>'._L('Attention!').'</b> '._L('<code>REGISTRATION_HIDE_SYSTEM</code> is set in the local configuration file! Therefore, this system will not register itself, despite of the settings below.').'</font></p>';
281 daniel-mar 60
                                }
139 daniel-mar 61
 
360 daniel-mar 62
                                $out['text'] .= '<p>'._L('You can adjust your privacy level here').':</p><p><select name="reg_privacy" id="reg_privacy">';
227 daniel-mar 63
 
281 daniel-mar 64
                                # ---
139 daniel-mar 65
 
281 daniel-mar 66
                                $out['text'] .= '<option value="0"';
67
                                if (OIDplus::config()->getValue('reg_privacy') == 0) {
68
                                        $out['text'] .= ' selected';
69
                                } else {
70
                                        $out['text'] .= '';
71
                                }
360 daniel-mar 72
                                $out['text'] .= '>'._L('0 = Register to directory service and automatically publish RA/OID data at oid-info.com').'</option>';
139 daniel-mar 73
 
281 daniel-mar 74
                                # ---
139 daniel-mar 75
 
281 daniel-mar 76
                                $out['text'] .= '<option value="1"';
77
                                if (OIDplus::config()->getValue('reg_privacy') == 1) {
78
                                        $out['text'] .= ' selected';
79
                                } else {
80
                                        $out['text'] .= '';
81
                                }
360 daniel-mar 82
                                $out['text'] .= '>'._L('1 = Only register to directory service').'</option>';
139 daniel-mar 83
 
281 daniel-mar 84
                                # ---
139 daniel-mar 85
 
281 daniel-mar 86
                                $out['text'] .= '<option value="2"';
87
                                if (OIDplus::config()->getValue('reg_privacy') == 2) {
88
                                        $out['text'] .= ' selected';
89
                                } else {
90
                                        $out['text'] .= '';
91
                                }
360 daniel-mar 92
                                $out['text'] .= '>'._L('2 = Hide system').'</option>';
139 daniel-mar 93
 
281 daniel-mar 94
                                # ---
139 daniel-mar 95
 
360 daniel-mar 96
                                $out['text'] .= '</select> <input type="button" value="'._L('Change').'" onclick="crudActionRegPrivacyUpdate()"></p>';
139 daniel-mar 97
 
360 daniel-mar 98
                                $out['text'] .= '<p>'._L('After clicking "change", your OIDplus system will contact the ViaThinkSoft server to adjust (add or remove information) your privacy setting. This may take a few minutes.').'</p>';
139 daniel-mar 99
 
360 daniel-mar 100
                                $out['text'] .= '<p>'._L('<i>Privacy information:</i> Please note that removing your system from the directory does not automatically delete information about OIDs which are already published at oid-info.com. To remove already submitted OIDs at oid-info.com, please contact the <a href="mailto:admin@oid-info.com">OID Repository Webmaster</a>.').'</p>';
139 daniel-mar 101
                        }
102
                }
141 daniel-mar 103
                if ($id === 'oidplus:srvreg_status') {
104
                        $handled = true;
105
 
256 daniel-mar 106
                        $query = self::QUERY_LIVESTATUS_V1;
141 daniel-mar 107
 
108
                        $payload = array(
109
                                "query" => $query, // we must repeat the query because we want to sign it
227 daniel-mar 110
                                "system_id" => OIDplus::getSystemId(false)
141 daniel-mar 111
                        );
112
 
113
                        $signature = '';
239 daniel-mar 114
                        if (!@openssl_sign(json_encode($payload), $signature, OIDplus::config()->getValue('oidplus_private_key'))) {
360 daniel-mar 115
                                throw new OIDplusException(_L('Signature failed'));
239 daniel-mar 116
                        }
141 daniel-mar 117
 
118
                        $data = array(
119
                                "payload" => $payload,
120
                                "signature" => base64_encode($signature)
121
                        );
122
 
123
                        $ch = curl_init();
124
                        curl_setopt($ch, CURLOPT_URL, 'https://oidplus.viathinksoft.com/reg2/query.php');
125
                        curl_setopt($ch, CURLOPT_POST, 1);
126
                        curl_setopt($ch, CURLOPT_POSTFIELDS, "query=$query&data=".base64_encode(json_encode($data)));
127
                        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
128
                        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
129
                        curl_setopt($ch, CURLOPT_AUTOREFERER, true);
239 daniel-mar 130
                        if (!($res = @curl_exec($ch))) {
360 daniel-mar 131
                                throw new OIDplusException(_L('Communication with ViaThinkSoft server failed: %1',curl_error($ch)));
239 daniel-mar 132
                        }
141 daniel-mar 133
                        curl_close($ch);
134
 
370 daniel-mar 135
                        $json = @json_decode($res, true);
136
 
137
                        if (!$json) {
138
                                $out['icon'] = 'img/error_big.png';
139
                                $out['text'] = _L('JSON reply from ViaThinkSoft decoding error: %1',$res);
140
                                return;
141
                        }
142
 
381 daniel-mar 143
                        if (isset($json['error']) || ($json['status'] < 0)) {
370 daniel-mar 144
                                $out['icon'] = 'img/error_big.png';
145
                                if (isset($json['error'])) {
146
                                        $out['text'] = _L('Received error status code: %1',$json['error']);
147
                                } else {
148
                                        $out['text'] = _L('Received error status code: %1',$json['status']);
149
                                }
150
                                return;
151
                        }
152
 
360 daniel-mar 153
                        $out['title'] = _L('Registration live status');
366 daniel-mar 154
                        $out['text']  = '<p><a '.OIDplus::gui()->link('oidplus:srv_registration').'><img src="img/arrow_back.png" width="16" alt="'._L('Go back').'"> '._L('Go back to registration settings').'</a></p>' .
372 daniel-mar 155
                                        $json['content'];
141 daniel-mar 156
                }
139 daniel-mar 157
        }
158
 
370 daniel-mar 159
        protected function areWeRegistered() {
160
                // To check if we are registered. Check it "anonymously" (i.e. without revealing our system ID)
161
                $res = file_get_contents('https://oidplus.viathinksoft.com/reg2/query.php?query='.self::QUERY_LISTALLSYSTEMIDS_V1);
162
 
163
                $json = @json_decode($res, true);
164
 
165
                if (!$json) {
166
                        return false; // throw new OIDplusException(_L('JSON reply from ViaThinkSoft decoding error: %1',$res));
167
                }
168
 
381 daniel-mar 169
                if (isset($json['error']) || ($json['status'] < 0)) {
370 daniel-mar 170
                        if (isset($json['error'])) {
171
                                return false; // throw new OIDplusException(_L('Received error status code: %1',$json['error']));
172
                        } else {
173
                                return false; // throw new OIDplusException(_L('Received error status code: %1',$json['status']));
174
                        }
175
                }
176
 
177
                $list = $json['list'];
178
 
179
                return in_array(OIDplus::getSystemId(false), $list);
180
        }
181
 
140 daniel-mar 182
        public function sendRegistrationQuery($privacy_level=null) {
183
                if (is_null($privacy_level)) {
184
                        $privacy_level = OIDplus::config()->getValue('reg_privacy');
185
                }
139 daniel-mar 186
 
227 daniel-mar 187
                $system_url = OIDplus::getSystemUrl();
139 daniel-mar 188
 
175 daniel-mar 189
                // It is very important that we set the ping time NOW, because ViaThinkSoft might contact us during the ping,
190
                // and this would cause an endless loop!
191
                OIDplus::config()->setValue('reg_last_ping', time());
277 daniel-mar 192
 
239 daniel-mar 193
                if (!OIDplus::getPkiStatus()) return false;
175 daniel-mar 194
 
139 daniel-mar 195
                if ($privacy_level == 2) {
370 daniel-mar 196
                        // The user wants to unregister,  but we only unregister if we are registered
197
                        if ($this->areWeRegistered()) {
256 daniel-mar 198
                                $query = self::QUERY_UNREGISTER_V1;
139 daniel-mar 199
 
200
                                $payload = array(
201
                                        "query" => $query, // we must repeat the query because we want to sign it
227 daniel-mar 202
                                        "system_id" => OIDplus::getSystemId(false)
139 daniel-mar 203
                                );
204
 
205
                                $signature = '';
239 daniel-mar 206
                                if (!@openssl_sign(json_encode($payload), $signature, OIDplus::config()->getValue('oidplus_private_key'))) {
360 daniel-mar 207
                                        return false; // throw new OIDplusException(_L('Signature failed'));
239 daniel-mar 208
                                }
139 daniel-mar 209
 
210
                                $data = array(
211
                                        "payload" => $payload,
212
                                        "signature" => base64_encode($signature)
213
                                );
214
 
215
                                $ch = curl_init();
216
                                curl_setopt($ch, CURLOPT_URL, 'https://oidplus.viathinksoft.com/reg2/query.php');
217
                                curl_setopt($ch, CURLOPT_POST, 1);
218
                                curl_setopt($ch, CURLOPT_POSTFIELDS, "query=$query&data=".base64_encode(json_encode($data)));
219
                                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
220
                                curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
221
                                curl_setopt($ch, CURLOPT_AUTOREFERER, true);
239 daniel-mar 222
                                if (!($res = @curl_exec($ch))) {
360 daniel-mar 223
                                        return false; // throw new OIDplusException(_L('Communication with ViaThinkSoft server failed: %1',curl_error($ch)));
239 daniel-mar 224
                                }
139 daniel-mar 225
                                curl_close($ch);
370 daniel-mar 226
 
227
                                $json = @json_decode($res, true);
228
 
229
                                if (!$json) {
230
                                        return false; // throw new OIDplusException(_L('JSON reply from ViaThinkSoft decoding error: %1',$res));
231
                                }
232
 
381 daniel-mar 233
                                if (isset($json['error']) || ($json['status'] < 0)) {
370 daniel-mar 234
                                        if (isset($json['error'])) {
235
                                                return false; // throw new OIDplusException(_L('Received error status code: %1',$json['error']));
236
                                        } else {
237
                                                return false; // throw new OIDplusException(_L('Received error status code: %1',$json['status']));
238
                                        }
239
                                }
139 daniel-mar 240
                        }
241
                } else {
242
                        if ($privacy_level == 0) {
380 daniel-mar 243
                                $adminExportPlugin = OIDplus::getPluginByOid('1.3.6.1.4.1.37476.2.5.2.4.3.400'); // OIDplusPageAdminOIDInfoExport
244
                                if (!is_null($adminExportPlugin)) {
139 daniel-mar 245
                                        ob_start();
246
                                        OIDplusPageAdminOIDInfoExport::outputXML(false); // no online check, because the query should be short (since the query is done while a visitor waits for the response)
247
                                        $oidinfo_xml = ob_get_contents();
248
                                        ob_end_clean();
249
                                } else {
250
                                        $oidinfo_xml = false;
251
                                }
252
                        } else {
253
                                $oidinfo_xml = false;
254
                        }
255
 
256 daniel-mar 256
                        $query = self::QUERY_REGISTER_V1;
139 daniel-mar 257
 
258
                        $root_oids = array();
227 daniel-mar 259
                        foreach (OIDplus::getEnabledObjectTypes() as $ot) {
139 daniel-mar 260
                                if ($ot::ns() == 'oid') {
261 daniel-mar 261
                                        $res = OIDplus::db()->query("select id from ###objects where " .
139 daniel-mar 262
                                                                    "parent = 'oid:' " .
263
                                                                    "order by ".OIDplus::db()->natOrder('id'));
236 daniel-mar 264
                                        while ($row = $res->fetch_array()) {
139 daniel-mar 265
                                                $root_oids[] = substr($row['id'],strlen('oid:'));
266
                                        }
267
                                }
268
                        }
269
                        $payload = array(
270
                                "query" => $query, // we must repeat the query because we want to sign it
271
                                "privacy_level" => $privacy_level,
227 daniel-mar 272
                                "system_id" => OIDplus::getSystemId(false),
139 daniel-mar 273
                                "public_key" => OIDplus::config()->getValue('oidplus_public_key'),
274
                                "system_url" => $system_url,
275
                                "hide_system_url" => 0,
276
                                "hide_public_key" => 0,
277
                                "admin_email" => OIDplus::config()->getValue('admin_email'),
257 daniel-mar 278
                                "system_title" => OIDplus::config()->getValue('system_title'),
139 daniel-mar 279
                                "oidinfo_xml" => @base64_encode($oidinfo_xml),
170 daniel-mar 280
                                "root_oids" => $root_oids,
281
                                "system_version" => OIDplus::getVersion(),
282
                                "system_install_type" => OIDplus::getInstallType()
139 daniel-mar 283
                        );
284
 
285
                        $signature = '';
239 daniel-mar 286
                        if (!@openssl_sign(json_encode($payload), $signature, OIDplus::config()->getValue('oidplus_private_key'))) {
360 daniel-mar 287
                                        return false; // throw new OIDplusException(_L('Signature failed'));
239 daniel-mar 288
                        }
139 daniel-mar 289
 
290
                        $data = array(
291
                                "payload" => $payload,
292
                                "signature" => base64_encode($signature)
293
                        );
294
 
295
                        $ch = curl_init();
296
                        curl_setopt($ch, CURLOPT_URL, 'https://oidplus.viathinksoft.com/reg2/query.php');
297
                        curl_setopt($ch, CURLOPT_POST, 1);
298
                        curl_setopt($ch, CURLOPT_POSTFIELDS, "query=$query&data=".base64_encode(json_encode($data)));
299
                        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
300
                        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
301
                        curl_setopt($ch, CURLOPT_AUTOREFERER, true);
239 daniel-mar 302
                        if (!($res = @curl_exec($ch))) {
360 daniel-mar 303
                                return false; // throw new OIDplusException(_L('Communication with ViaThinkSoft server failed: %1',curl_error($ch)));
239 daniel-mar 304
                        }
139 daniel-mar 305
                        curl_close($ch);
206 daniel-mar 306
 
370 daniel-mar 307
                        $json = @json_decode($res, true);
308
 
309
                        if (!$json) {
310
                                return false; // throw new OIDplusException(_L('JSON reply from ViaThinkSoft decoding error: %1',$res));
311
                        }
312
 
381 daniel-mar 313
                        if (isset($json['error']) || ($json['status'] < 0)) {
314
                                if (isset($json['error'])) {
315
                                        return false; // throw new OIDplusException(_L('Received error status code: %1',$json['error']));
316
                                } else {
317
                                        return false; // throw new OIDplusException(_L('Received error status code: %1',$json['status']));
318
                                }
319
                        } else if ($json['status'] == 99/*Hash conflict*/) {
288 daniel-mar 320
                                OIDplus::logger()->log("[WARN]A!", "Removing SystemID and key pair because there is a hash conflict with another OIDplus system!");
206 daniel-mar 321
 
322
                                // Delete the system ID since we have a conflict with the 31-bit hash!
323
                                OIDplus::config()->setValue('oidplus_private_key', '');
324
                                OIDplus::config()->setValue('oidplus_public_key', '');
325
 
326
                                // Try to generate a new system ID
227 daniel-mar 327
                                OIDplus::getPkiStatus(true);
206 daniel-mar 328
 
370 daniel-mar 329
                                // Enforce a new registration attempt at the next page visit
206 daniel-mar 330
                                // We will not try again here, because that might lead to an endless loop if the VTS server would always return 'HASH_CONFLCIT'
331
                                OIDplus::config()->setValue('reg_last_ping', 0);
332
                        }
139 daniel-mar 333
                }
334
        }
335
 
336
        public function init($html=true) {
263 daniel-mar 337
                OIDplus::config()->prepareConfigKey('reg_privacy', '2=Hide your system, 1=Register your system to the ViaThinkSoft directory and oid-info.com, 0=Publish your system to ViaThinkSoft directory and all public contents (RA/OID) to oid-info.com', '0', OIDplusConfig::PROTECTION_EDITABLE, function($value) {
338
                        if (($value != '0') && ($value != '1') && ($value != '2')) {
360 daniel-mar 339
                                throw new OIDplusException(_L('Please enter either 0, 1 or 2.'));
263 daniel-mar 340
                        }
341
                        // Now do a recheck and notify the ViaThinkSoft server
316 daniel-mar 342
                        if (($value == 2) || !OIDplus::baseConfig()->getValue('REGISTRATION_HIDE_SYSTEM', false)) {
343
                                OIDplus::config()->setValue('reg_last_ping', 0);
344
                                $this->sendRegistrationQuery($value);
345
                        }
263 daniel-mar 346
                });
347
                OIDplus::config()->prepareConfigKey('reg_ping_interval', 'Registration ping interval (in seconds)', '3600', OIDplusConfig::PROTECTION_HIDDEN, function($value) {
277 daniel-mar 348
 
263 daniel-mar 349
                });
350
                OIDplus::config()->prepareConfigKey('reg_last_ping', 'Last ping to ViaThinkSoft directory services', '0', OIDplusConfig::PROTECTION_HIDDEN, function($value) {
277 daniel-mar 351
 
263 daniel-mar 352
                });
362 daniel-mar 353
                OIDplus::config()->prepareConfigKey('oobe_registration_done', '"Out Of Box Experience" wizard for OIDplusPageAdminRegistration done once?', '0', OIDplusConfig::PROTECTION_HIDDEN, function($value) {});
277 daniel-mar 354
 
292 daniel-mar 355
                // Is it time to register / renew the directory entry?
294 daniel-mar 356
                // Note: REGISTRATION_HIDE_SYSTEM is an undocumented constant that can be put in the userdata/baseconfig/config.inc.php files of a test system accessing the same database as the productive system that is registered.
292 daniel-mar 357
                // This avoids that the URL of a productive system is overridden with the URL of a cloned test system (since they use the same database, they also have the same system ID)
277 daniel-mar 358
 
292 daniel-mar 359
                if (!OIDplus::baseConfig()->getValue('REGISTRATION_HIDE_SYSTEM', false)) {
360
                        $privacy_level = OIDplus::config()->getValue('reg_privacy');
139 daniel-mar 361
 
316 daniel-mar 362
                        if (php_sapi_name() !== 'cli') { // don't register when called from CLI, otherwise the oidinfo XML can't convert relative links into absolute links
292 daniel-mar 363
                                if ((time()-OIDplus::config()->getValue('reg_last_ping') >= OIDplus::config()->getValue('reg_ping_interval'))) {
364
                                        $this->sendRegistrationQuery();
139 daniel-mar 365
                                }
366
                        }
367
                }
368
        }
369
 
370
        public function tree(&$json, $ra_email=null, $nonjs=false, $req_goto='') {
281 daniel-mar 371
                if (!OIDplus::authUtils()::isAdminLoggedIn()) return false;
292 daniel-mar 372
 
139 daniel-mar 373
                if (file_exists(__DIR__.'/treeicon.png')) {
241 daniel-mar 374
                        $tree_icon = OIDplus::webpath(__DIR__).'treeicon.png';
139 daniel-mar 375
                } else {
376
                        $tree_icon = null; // default icon (folder)
377
                }
378
 
379
                $json[] = array(
141 daniel-mar 380
                        'id' => 'oidplus:srv_registration',
139 daniel-mar 381
                        'icon' => $tree_icon,
360 daniel-mar 382
                        'text' => _L('System registration')
139 daniel-mar 383
                );
384
 
385
                return true;
386
        }
387
 
388
        public function tree_search($request) {
389
                return false;
390
        }
292 daniel-mar 391
 
392
        public function implementsFeature($id) {
370 daniel-mar 393
                if (strtolower($id) == '1.3.6.1.4.1.37476.2.5.2.3.1') return true; // oobeEntry, oobeRequested
292 daniel-mar 394
                return false;
395
        }
396
 
362 daniel-mar 397
        public function oobeRequested(): bool {
398
                // Interface 1.3.6.1.4.1.37476.2.5.2.3.1
370 daniel-mar 399
 
362 daniel-mar 400
                return OIDplus::config()->getValue('oobe_registration_done') == '0';
401
        }
402
 
292 daniel-mar 403
        public function oobeEntry($step, $do_edits, &$errors_happened)/*: void*/ {
404
                // Interface 1.3.6.1.4.1.37476.2.5.2.3.1
405
 
360 daniel-mar 406
                echo '<p><u>'._L('Step %1: System registration and automatic publishing (optional)',$step).'</u></p>';
370 daniel-mar 407
 
362 daniel-mar 408
                if (file_exists(__DIR__ . '/info$'.OIDplus::getCurrentLang().'.html')) {
409
                        $info = file_get_contents(__DIR__ . '/info$'.OIDplus::getCurrentLang().'.html');
410
                } else {
411
                        $info = file_get_contents(__DIR__ . '/info.html');
412
                }
292 daniel-mar 413
 
362 daniel-mar 414
                // make sure the program works even if the user provided HTML is not UTF-8
415
                $info = iconv(mb_detect_encoding($info, mb_detect_order(), true), 'UTF-8//IGNORE', $info);
416
                $bom = pack('H*','EFBBBF');
417
                $info = preg_replace("/^$bom/", '', $info);
292 daniel-mar 418
 
362 daniel-mar 419
                echo $info;
420
 
353 daniel-mar 421
                if (!function_exists('curl_exec')) {
360 daniel-mar 422
                        echo '<p><font color="red">';
362 daniel-mar 423
                        echo _L('Note: The "CURL" PHP extension is not installed at your system. Please enable the PHP extension <code>php_curl</code>.').' ';
360 daniel-mar 424
                        echo _L('Therefore, you <b>cannot</b> register your OIDplus instance now.');
425
                        echo '</font></p>';
362 daniel-mar 426
                        if ($do_edits) {
427
                                OIDplus::config()->setValue('oobe_registration_done', '1');
428
                        }
353 daniel-mar 429
                        return;
430
                }
431
 
432
                $testurl = 'https://www.google.com/';
433
                $ch = curl_init();
434
                curl_setopt($ch, CURLOPT_URL, $testurl);
435
                curl_setopt($ch, CURLOPT_HEADER, TRUE);
436
                curl_setopt($ch, CURLOPT_NOBODY, TRUE);
437
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
438
                curl_exec($ch);
439
                $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
440
                curl_close($ch);
441
                if (!$httpCode) {
360 daniel-mar 442
                        echo '<p><font color="red">';
362 daniel-mar 443
                        echo _L('Note: The "CURL" PHP extension cannot access HTTPS webpages. Therefore, you cannot use this feature. Please download <a href="https://curl.haxx.se/ca/cacert.pem">cacert.pem</a>, place it somewhere and then adjust the setting <code>curl.cainfo</code> in PHP.ini.').' ';
360 daniel-mar 444
                        echo _L('Therefore, you <b>cannot</b> register your OIDplus instance now.');
445
                        echo '</font></p>';
362 daniel-mar 446
                        if ($do_edits) {
447
                                OIDplus::config()->setValue('oobe_registration_done', '1');
448
                        }
353 daniel-mar 449
                        return;
450
                }
451
 
292 daniel-mar 452
                $pki_status = OIDplus::getPkiStatus();
453
 
454
                if (!$pki_status) {
360 daniel-mar 455
                        echo '<p><font color="red">';
362 daniel-mar 456
                        echo _L('Note: Your system could not generate a private/public key pair. (OpenSSL is probably missing on your system).').' ';
360 daniel-mar 457
                        echo _L('Therefore, you <b>cannot</b> register your OIDplus instance now.');
458
                        echo '</font></p>';
362 daniel-mar 459
                        if ($do_edits) {
460
                                OIDplus::config()->setValue('oobe_registration_done', '1');
461
                        }
353 daniel-mar 462
                        return;
463
                }
292 daniel-mar 464
 
360 daniel-mar 465
                echo '<p>'._L('Privacy level').':</p><select name="reg_privacy" id="reg_privacy">';
292 daniel-mar 466
 
353 daniel-mar 467
                # ---
292 daniel-mar 468
 
353 daniel-mar 469
                echo '<option value="0"';
470
                if (isset($_REQUEST['sent'])) {
471
                        if (isset($_REQUEST['reg_privacy']) && ($_REQUEST['reg_privacy'] == 0)) echo ' selected';
472
                } else {
362 daniel-mar 473
                        if ((OIDplus::config()->getValue('reg_privacy') == 0) || !OIDplus::config()->getValue('oobe_registration_done')) {
353 daniel-mar 474
                                echo ' selected';
292 daniel-mar 475
                        } else {
353 daniel-mar 476
                                echo '';
292 daniel-mar 477
                        }
353 daniel-mar 478
                }
360 daniel-mar 479
                echo '>'._L('0 = Register to directory service and automatically publish RA/OID data at oid-info.com').'</option>';
292 daniel-mar 480
 
353 daniel-mar 481
                # ---
292 daniel-mar 482
 
353 daniel-mar 483
                echo '<option value="1"';
484
                if (isset($_REQUEST['sent'])) {
485
                        if (isset($_REQUEST['reg_privacy']) && ($_REQUEST['reg_privacy'] == 1)) echo ' selected';
486
                } else {
487
                        if ((OIDplus::config()->getValue('reg_privacy') == 1)) {
488
                                echo ' selected';
292 daniel-mar 489
                        } else {
353 daniel-mar 490
                                echo '';
292 daniel-mar 491
                        }
353 daniel-mar 492
                }
360 daniel-mar 493
                echo '>'._L('1 = Only register to directory service').'</option>';
292 daniel-mar 494
 
353 daniel-mar 495
                # ---
292 daniel-mar 496
 
353 daniel-mar 497
                echo '<option value="2"';
498
                if (isset($_REQUEST['sent'])) {
499
                        if (isset($_REQUEST['reg_privacy']) && ($_REQUEST['reg_privacy'] == 2)) echo ' selected';
500
                } else {
501
                        if ((OIDplus::config()->getValue('reg_privacy') == 2)) {
502
                                echo ' selected';
292 daniel-mar 503
                        } else {
353 daniel-mar 504
                                echo '';
292 daniel-mar 505
                        }
353 daniel-mar 506
                }
360 daniel-mar 507
                echo '>'._L('2 = Hide system').'</option>';
292 daniel-mar 508
 
353 daniel-mar 509
                # ---
292 daniel-mar 510
 
353 daniel-mar 511
                echo '</select>';
292 daniel-mar 512
 
353 daniel-mar 513
                $msg = '';
514
                if ($do_edits) {
515
                        try {
516
                                OIDplus::config()->setValue('reg_privacy', $_REQUEST['reg_privacy']);
362 daniel-mar 517
                                OIDplus::config()->setValue('oobe_registration_done', '1');
353 daniel-mar 518
                        } catch (Exception $e) {
519
                                $msg = $e->getMessage();
520
                                $errors_happened = true;
292 daniel-mar 521
                        }
353 daniel-mar 522
                }
523
                echo ' <font color="red"><b>'.$msg.'</b></font>';
292 daniel-mar 524
 
360 daniel-mar 525
                echo '<p>'._L('<i>Privacy information:</i> This setting can always be changed in the administrator login / control panel.').'<br>';
526
                echo _L('<a %1>Click here</a> for more information about privacy related topics.','href="../../../res/OIDplus/privacy_documentation.html" target="_blank"');
527
                echo '</p>';
292 daniel-mar 528
        }
529
 
366 daniel-mar 530
}