136 lines
4.7 KiB
PHP
136 lines
4.7 KiB
PHP
<?php
|
||
|
||
$AUTHORITIES = [
|
||
'AT-BIO-301' => [
|
||
'id' => 'AT-BIO-301', 'countryCode' => 'AT', 'handle' => 'ABG',
|
||
'name' => 'Austria Bio Garantie GmbH', 'website' => 'https://www.bio-garantie.at/', 'apis' => ['easy-cert']
|
||
],
|
||
'AT-BIO-302' => [
|
||
'id' => 'AT-BIO-302', 'countryCode' => 'AT', 'handle' => 'ABG-LW',
|
||
'name' => 'Austria Bio Garantie – Landwirtschaft GmbH', 'website' => 'https://www.bio-garantie.at/', 'apis' => ['easy-cert']
|
||
],
|
||
'AT-BIO-401' => [
|
||
'id' => 'AT-BIO-401', 'countryCode' => 'AT', 'handle' => 'BIOS',
|
||
'name' => 'BIOS – Biokontrollservice Österreich GmbH', 'website' => 'https://www.bios-kontrolle.at/', 'apis' => ['bioqs']
|
||
],
|
||
'AT-BIO-402' => [
|
||
'id' => 'AT-BIO-402', 'countryCode' => 'AT', 'handle' => 'LACON',
|
||
'name' => 'LACON GmbH ', 'website' => 'https://www.lacon-institut.com/', 'apis' => ['easy-cert']
|
||
],
|
||
'AT-BIO-501' => [
|
||
'id' => 'AT-BIO-501', 'countryCode' => 'AT', 'handle' => 'SLK',
|
||
'name' => 'SLK GesmbH', 'website' => 'https://slk.at/', 'apis' => ['bioc']
|
||
],
|
||
'AT-BIO-901' => [
|
||
'id' => 'AT-BIO-901', 'countryCode' => 'AT', 'handle' => 'LVA',
|
||
'name' => 'LVA GmbH', 'website' => 'https://www.lva.at/', 'apis' => []
|
||
],
|
||
'AT-BIO-902' => [
|
||
'id' => 'AT-BIO-902', 'countryCode' => 'AT', 'handle' => 'SGS',
|
||
'name' => 'SGS Austria Controll-Co. Ges.m.b.H.', 'website' => 'https://www.sgs.com/de-at ', 'apis' => ['bioc']
|
||
],
|
||
'AT-BIO-903' => [
|
||
'id' => 'AT-BIO-903', 'countryCode' => 'AT', 'handle' => 'LKV',
|
||
'name' => 'LKV Austria Gemeinnützige GmbH', 'website' => 'https://www.lkv.at/', 'apis' => ['bioc', 'lkv']
|
||
],
|
||
];
|
||
|
||
header('Access-Control-Allow-Origin: *');
|
||
|
||
function jenc($data): string {
|
||
return json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
|
||
}
|
||
|
||
if ($_SERVER['REQUEST_METHOD'] !== 'GET' && $_SERVER['REQUEST_METHOD'] !== 'HEAD') {
|
||
header('Content-Type: application/json; charset=UTF-8');
|
||
header('Status: 405');
|
||
header('Content-Length: 56');
|
||
header('Allow: GET, HEAD');
|
||
echo "{\"error\":\"method not allowed\",\"allow\":[\"GET\",\"HEAD\"]}\n";
|
||
exit;
|
||
}
|
||
|
||
$info = $_SERVER['PATH_INFO'];
|
||
if ($info !== '/' && str_ends_with($info, '/')) {
|
||
header('Status: 303');
|
||
header('Location: /organic/' . substr($info, 0, -1));
|
||
exit;
|
||
}
|
||
|
||
$parts = explode('/', $info);
|
||
if (str_starts_with($info, '/certificates/')) {
|
||
$id = $parts[2];
|
||
if (str_ends_with($id, '.txt')) {
|
||
$id = substr($id, 0, -4);
|
||
}
|
||
if (str_contains($id, '/') || !file_exists("certificates/$id.pdf")) {
|
||
header('Content-Type: application/json; charset=UTF-8');
|
||
header('Status: 404');
|
||
header('Content-Length: 22');
|
||
echo "{\"error\":\"not found\"}\n";
|
||
exit;
|
||
}
|
||
if (str_ends_with($parts[2], '.txt')) {
|
||
$mode = '-layout';
|
||
if (isset($_GET['raw']) && strtolower($_GET['raw']) === 'true') {
|
||
$mode = '-raw';
|
||
}
|
||
header('Content-Type: text/plain; charset=UTF-8');
|
||
system("pdftotext $mode 'certificates/$id.pdf' -");
|
||
exit;
|
||
}
|
||
|
||
if (str_ends_with($id, '.appendix')) {
|
||
header('Status: 303');
|
||
header('Location: ' . substr($id, 0, -9));;
|
||
exit;
|
||
}
|
||
|
||
$cert = shell_exec("pdftotext -raw 'certificates/$id.pdf' -");
|
||
$appendix = shell_exec("pdftotext -raw 'certificates/$id.appendix.pdf' -");
|
||
|
||
$p1 = strpos($cert, "\nI.3 ");
|
||
$p2 = strpos($cert, "\nI.4 ");
|
||
echo substr($cert, $p1 + 5, $p2 - $p1 - 5);
|
||
|
||
exit;
|
||
} else if ($info === '/authorities') {
|
||
header('Content-Type: application/json; charset=UTF-8');
|
||
echo "{\"data\":[\n";
|
||
$first = true;
|
||
foreach ($AUTHORITIES as $auth) {
|
||
if (!$first) echo ",\n";
|
||
echo " " . jenc($auth);
|
||
$first = false;
|
||
}
|
||
echo "\n]}\n";
|
||
exit;
|
||
} else if (str_starts_with($info, '/authorities/')) {
|
||
$code = $parts[2];
|
||
header('Content-Type: application/json; charset=UTF-8');
|
||
if (array_key_exists($code, $AUTHORITIES)) {
|
||
echo jenc($AUTHORITIES[$code]);
|
||
echo "\n";
|
||
} else {
|
||
header('Status: 404');
|
||
header('Content-Length: 22');
|
||
echo "{\"error\":\"not found\"}\n";
|
||
}
|
||
exit;
|
||
} else if ($info === '/operators') {
|
||
header('Content-Type: application/json; charset=UTF-8');
|
||
header('Status: 501');
|
||
header('Content-Length: 27');
|
||
echo "{\"error\":\"not implemented\"}\n";
|
||
exit;
|
||
} else if (str_starts_with($info, '/operators/')) {
|
||
$ooid = $parts[2];
|
||
header('Content-Type: text/plain; charset=UTF-8');
|
||
echo "Organic Operator Id: $ooid\n";
|
||
exit;
|
||
}
|
||
|
||
header('Status: 404');
|
||
header('Content-Length: 22');
|
||
echo "{\"error\":\"not found\"}\n";
|