Subversion Repositories oidplus

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
226 daniel-mar 1
<?php
2
 
3
include_once __DIR__ . '/../../includes/config.inc.php';
4
 
5
if (!OIDINFO_EXPORT_ENABLED) {
6
        die('Export disabled via switch OIDINFO_EXPORT_ENABLED.');
7
}
8
 
9
header("Content-type: text/xml");
10
 
11
set_time_limit(0);
12
 
13
include_once __DIR__ . '/../../includes/oid_plus.inc.php';
14
include_once __DIR__ . '/../../includes/oid_utils.inc.php';
15
include_once __DIR__ . '/../../includes/gui.inc.php';
16
include_once __DIR__ . '/../../includes/oidinfo_api.inc.php';
17
 
18
# TODO: mehr konfigurierbar...
19
# TODO ra(1)-person etc.... ra(2)  --> regex ?
20
# URL of OID+ system
21
# Also add non-desription-fields, e.g. "whois" @freeoid
22
# exclude GenRoot (aber was ist mit UUID definitions?)
23
# Check if OID is available at oidinfo
24
# nach dem rausfiltern soll make_tabs erneut aufgerufen werden...
25
 
26
# FreeOID: versuchen, vor und nachname aufzusplitten?
27
 
28
$db = new OIDPlus(__DIR__ . '/../../db/local.conf', true);
29
$db->addDir(__DIR__ . '/../../db');
30
$x = $db->listAllOIDs('.');
31
 
32
$oa = new OIDInfoAPI();
33
 
34
if (defined('OIDINFO_EXPORT_SIMPLEPINGPROVIDER')) {
35
        $oa->addSimplePingProvider(OIDINFO_EXPORT_SIMPLEPINGPROVIDER);
36
}
37
 
38
 
39
echo $oa->xmlAddHeader(OIDINFO_EXPORT_SUBMITTER_FIRST_NAME,
40
                       OIDINFO_EXPORT_SUBMITTER_LAST_NAME,
41
                       OIDINFO_EXPORT_SUBMITTER_EMAIL);
42
 
43
$params['allow_html'] = true; // TODO: allow_whitespaces !
44
$params['allow_illegal_email'] = true;
45
$params['soft_correct_behavior'] = OIDInfoAPI::SOFT_CORRECT_BEHAVIOR_NONE;
46
$params['do_online_check'] = false; // true;
47
$params['do_illegality_check'] = true;
48
$params['do_csv_check'] = true;
49
$params['auto_extract_name'] = '';
50
$params['auto_extract_url'] = '';
51
$params['always_output_comment'] = false;
52
$params['creation_allowed_check'] = defined('OIDINFO_EXPORT_SIMPLEPINGPROVIDER');
53
 
54
foreach ($x as $oid) {
55
        $filtered = array();
56
 
57
        $std_oid = substr($oid, 1);
58
 
59
        if (!$db->oidDescribed($oid)) continue;
60
 
61
        $cont = $db->showSingleOID($oid, '', OIDPlus::SEG_OIDDATA, true /*false*/);
62
        $cont = $db->filterRedactedEntries($cont);
63
 
64
        $ra_person_name = _filter($cont, 'ra(1)-person-name', false, false);
65
        $ra_org_name = _filter($cont, 'ra(1)-name', false, false);
66
        $pre_addr = '';
67
        if ($ra_person_name != '') {
68
                $xry = explode(' ', $ra_person_name, 2);
69
                $prename = $xry[0];
70
                $famname = $xry[1];
71
                $pre_addr = $ra_org_name;
72
        } else {
73
                $prename = $ra_org_name;
74
                $famname = '';
75
                $pre_addr  = '';
76
        }
77
 
78
/*
79
        $a_fto_curra_name = array();
80
        _add($a_fto_curra_name, _filter($cont, 'ra(1)-name', false, false));
81
        _add($a_fto_curra_name, _filter($cont, 'ra(1)-person-name', false, false));
82
        $fto_curra_name = implode(' / ', $a_fto_curra_name);
83
*/
84
 
85
        # naja... mit dem neuen code sieht das aus, als ob die VTS RA in MEINER adresse wäre...
86
 
87
        $a_fto_curra_address_p = array();
88
        _add($a_fto_curra_address_p, _filter($cont, 'ra(1)-person-org', false, false));
89
        _add($a_fto_curra_address_p, _filter($cont, 'ra(1)-person-organisation', false, false));
90
        _add($a_fto_curra_address_p, _filter($cont, 'ra(1)-person-address', false, false));
91
        _add($a_fto_curra_address_p, _country(_filter($cont, 'ra(1)-person-country', false, false)));
92
        $a_fto_curra_address_o = array();
93
        _add($a_fto_curra_address_o, _filter($cont, 'ra(1)-org', false, false));
94
        _add($a_fto_curra_address_o, _filter($cont, 'ra(1)-organisation', false, false));
95
        _add($a_fto_curra_address_o, _filter($cont, 'ra(1)-address', false, false));
96
        _add($a_fto_curra_address_o, _country(_filter($cont, 'ra(1)-country', false, false)));
97
        if (implode("\n", $a_fto_curra_address_o) != '') {
98
                $fto_curra_address = implode("\n", $a_fto_curra_address_o);
99
        } else {
100
                $fto_curra_address = implode("\n", $a_fto_curra_address_p);
101
        }
102
        if ($pre_addr != '') $fto_curra_address = $pre_addr."\n".$fto_curra_address;
103
        $fto_curra_address = _formatHTML($fto_curra_address, false);
104
 
105
        $fto_curra_email_p = _filter($cont, 'ra(1)-person-email', false, false);
106
        $fto_curra_email_o = _filter($cont, 'ra(1)-email', false, false);
107
        if ($fto_curra_email_o != '') {
108
                $fto_curra_email = $fto_curra_email_o;
109
        } else {
110
                $fto_curra_email = $fto_curra_email_p;
111
        }
112
 
113
        $fto_curra_phone_p = _filter($cont, 'ra(1)-person-phone', false, false);
114
        $fto_curra_phone_o = _filter($cont, 'ra(1)-phone', false, false);
115
        if ($fto_curra_phone_o != '') {
116
                $fto_curra_phone = $fto_curra_phone_o;
117
        } else {
118
                $fto_curra_phone = $fto_curra_phone_p;
119
        }
120
 
121
        $fto_curra_fax_p = _filter($cont, 'ra(1)-person-fax', false, false);
122
        $fto_curra_fax_o = _filter($cont, 'ra(1)-fax', false, false);
123
        if ($fto_curra_fax_o != '') {
124
                $fto_curra_fax = $fto_curra_fax_o;
125
        } else {
126
                $fto_curra_fax = $fto_curra_fax_p;
127
        }
128
 
129
        $att_changed = _filter($cont, 'modified', false, false);
130
        if ($att_changed == '') $att_changed = _filter($cont, 'changed', false, false);
131
        $att_changed = _findDate($att_changed);
132
        if ($att_changed == '0000-00-00') $att_changed = '';
133
 
134
        $att_created = _filter($cont, 'created', false, false);
135
        if ($att_created == '') $att_created = _filter($cont, 'assigned', false, false);
136
        if ($att_created == '') $att_created = _filter($cont, 'allocated', false, false);
137
        $att_created = _findDate($att_created);
138
        if ($att_created == '0000-00-00') $att_created = '';
139
 
140
        $att_asn1_id = explode("\n", trim(_filter($cont, 'identifier', false, false)));
141
 
142
        $att_description = _filter($cont, 'description', false, false);
143
        $att_information = _filter($cont, 'information', false, false) . "\n\n" . _filter($cont, 'comment', false, false);
144
        $att_name        = _filter($cont, 'name', false, false);
145
        if (!empty($att_name)) {
146
                $fto_desc = $att_name;
147
                $fto_info = $att_description."\n\n".$att_information;
148
        } else {
149
                $fto_desc = $att_description;
150
                $fto_info = $att_information;
151
        }
152
 
153
        $xry = explode('. ', $fto_desc, 2);
154
        if (count($xry) > 1) {
155
                $fto_desc = $xry[0];
156
                $fto_info = (($xry[1] == '') ? $xry[1]."\n\n" : '').$fto_info;
157
        }
158
 
159
        if (($fto_desc == '') && isset($att_asn1_id[0])) {
160
                $fto_desc = $att_asn1_id[0];
161
        }
162
 
163
 
164
 
165
        $rawdata = array();
166
 
167
        $ary = explode("\n", $cont);
168
        foreach ($ary as $a) {
169
                $bry = explode(":", $a);
170
                $b = trim($bry[0]);
171
 
172
                if (($b == 'attribute') && (isset($bry[1]))) {
173
                        $val = strtoupper(trim($bry[1]));
174
                        if ($val == 'DRAFT') continue 2; // do not export this OID at all
175
                        if ($val == 'NOEXPORT') continue 2; // do not export this OID at all
176
                }
177
 
178
                if (isset($filtered[$b])) continue;
179
                if (substr($b, 0, 3) == 'ra(') continue;
180
 
181
                if ($b == 'index(uuid)') $a = 'UUID: '.trim($bry[1]);
182
                if ($b == 'index(doi)') $a = 'DOI: '.trim($bry[1]);
183
                if ($b == 'index(ipv4)') $a = 'IPv4: '.trim($bry[1]);
184
                if ($b == 'index(ipv6)') $a = 'IPv6: '.trim($bry[1]);
185
                if ($b == 'index(domain)') $a = 'Domain: '.trim($bry[1]);
186
                if ($b == 'unicodelabel') $a = 'Unicode label (IRI): '.trim($bry[1]);
187
                if ($b == 'attribute') $a = 'Attribute: '.ucfirst(trim($bry[1]));
188
 
189
                $a = ucfirst($a);
190
 
191
                $rawdata[] = $a;
192
        }
193
        $rawdata = implode("\n", $rawdata);
194
 
195
        $fto_info .= "\n\n$rawdata"; // TODO: test
196
 
197
 
198
 
199
        $fto_info = preg_replace('@^\n+@ism', '', $fto_info);
200
        $fto_desc = preg_replace('@^\n+@ism', '', $fto_desc);
201
 
202
        $fto_info = preg_replace('@\n+$@ism', '', $fto_info);
203
        $fto_desc = preg_replace('@\n+$@ism', '', $fto_desc);
204
 
205
        $fto_info = preg_replace('@\n{3,}$@ism', "\n\n", $fto_info);
206
        $fto_desc = preg_replace('@\n{3,}$@ism', "\n\n", $fto_desc);
207
 
208
        $use_monospace_desc = OIDINFO_EXPORT_SUBMITTER_ONLY_MONOSPACE;
209
        if (!$use_monospace_desc) {
210
                # Try to find evidence of ASCII art
211
                if (strpos($fto_desc, '----') !== false) {
212
                        $use_monospace_desc = true;
213
                }
214
        }
215
 
216
        $use_monospace_info = OIDINFO_EXPORT_SUBMITTER_ONLY_MONOSPACE;
217
        if (!$use_monospace_info) {
218
                # Try to find evidence of ASCII art
219
                if (strpos($fto_info, '----') !== false) {
220
                        $use_monospace_info = true;
221
                }
222
        }
223
 
224
        $fto_desc = _formatHTML($fto_desc, $use_monospace_desc);
225
        $fto_info = _formatHTML($fto_info, $use_monospace_info);
226
 
227
        # OID-Info does not accept <pre>.
228
        $fto_desc = str_replace('<pre>', '<code>', $fto_desc);
229
        $fto_info = str_replace('<pre>', '<code>', $fto_info);
230
        $fto_desc = str_replace('</pre>', '</code>', $fto_desc);
231
        $fto_info = str_replace('</pre>', '</code>', $fto_info);
232
 
233
        $elements = array();
234
 
235
        $elements['synonymous-identifier'] = $att_asn1_id;
236
        $elements['description'] = $fto_desc;
237
        $elements['information'] = $fto_info;
238
 
239
        $elements['first-registrant']['first-name'] = '';
240
        $elements['first-registrant']['last-name'] = '';
241
        $elements['first-registrant']['address'] = '';
242
        $elements['first-registrant']['email'] = '';
243
        $elements['first-registrant']['phone'] = '';
244
        $elements['first-registrant']['fax'] = '';
245
        $elements['first-registrant']['creation-date'] = '';
246
        if ($att_created != '') {
247
                if ($att_changed == '') { // We only save the current RA, because if the OID was changed, we do not know the old RA
248
                        $elements['first-registrant']['first-name'] = $prename;
249
                        $elements['first-registrant']['last-name'] = $famname;
250
                        $elements['first-registrant']['address'] = $fto_curra_address;
251
                        $elements['first-registrant']['email'] = $fto_curra_email;
252
                        $elements['first-registrant']['phone'] = $fto_curra_phone;
253
                        $elements['first-registrant']['fax'] = $fto_curra_fax;
254
                }
255
                $elements['first-registrant']['creation-date'] = $att_created;
256
        }
257
 
258
/*
259
        $elements['current-registrant']['first-name'] = '';
260
        $elements['current-registrant']['last-name'] = '';
261
        $elements['current-registrant']['address'] = '';
262
        $elements['current-registrant']['email'] = '';
263
        $elements['current-registrant']['phone'] = '';
264
        $elements['current-registrant']['fax'] = '';
265
        $elements['current-registrant']['modification-date'] = '';
266
        if ($att_changed != '') {
267
                $elements['current-registrant']['first-name'] = $prename;
268
                $elements['current-registrant']['last-name'] = $famname;
269
                $elements['current-registrant']['address'] = $fto_curra_address;
270
                $elements['current-registrant']['email'] = $fto_curra_email; // TODO: wieso gibt es da ein "<br />\n" , das dann zu "<br /><br />" wird ?
271
                $elements['current-registrant']['phone'] = $fto_curra_phone;
272
                $elements['current-registrant']['fax'] = $fto_curra_fax;
273
                $elements['current-registrant']['modification-date'] = $att_changed;
274
        }
275
*/
276
        $elements['current-registrant']['first-name'] = $prename;
277
        $elements['current-registrant']['last-name'] = $famname;
278
        $elements['current-registrant']['address'] = $fto_curra_address;
279
        $elements['current-registrant']['email'] = $fto_curra_email; // TODO: wieso gibt es da ein "<br />\n" , das dann zu "<br /><br />" wird ?
280
        $elements['current-registrant']['phone'] = $fto_curra_phone;
281
        $elements['current-registrant']['fax'] = $fto_curra_fax;
282
        if ($att_changed != '') {
283
                $elements['current-registrant']['modification-date'] = $att_changed;
284
        }
285
 
286
        echo $oa->createXMLEntry($std_oid, $elements, $params);
287
}
288
 
289
echo $oa->xmlAddFooter();
290
 
291
# ---
292
 
293
function _formatHTML($cont, $monospace) {
294
        global $db;
295
        return showHTML(trim($cont), $db, false, $monospace);
296
}
297
 
298
function _filter($cont, $name, $preg=false, $including_name=true) {
299
        global $filtered;
300
        $filtered[$name] = true;
301
 
302
        global $db;
303
        $res = $db->filterOutput($cont, $name, $preg, $including_name);
304
        return trim($res);
305
}
306
 
307
function _add(&$a, $c) {
308
        if ($c != '') $a[] = $c;
309
}
310
 
311
function _findDate($x) {
312
        $ary = explode(' ', $x);
313
        foreach ($ary as $v) {
314
                if (preg_match('@\\d{4}-\\d{2}-\\d{2}@', $v)) return $v;
315
        }
316
        return false;
317
}
318
 
319
function _country($country) {
320
        return Locale::getDisplayRegion('-'.$country, 'en');
321
}
322