summaryrefslogtreecommitdiff
path: root/pkgapi/pkginfo.php
blob: d9301ed3fdd7d9f92972c24553fa9ec35e25487c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php
require_once "../init.php";

include BASE . "/lib/http.php";

foreach (array('arch', 'repo', 'pkgname') as $must_have_key) {
  if (!array_key_exists($must_have_key, $_GET))
    throw_http_error(400, 'Malformed request', 'Key ' . $must_have_key . ' was not given.');
  if (!preg_match('/^[-+_.a-zA-Z0-9]+$/', $_GET[$must_have_key]))
    throw_http_error(400, 'Malformed request', 'Value for ' . $must_have_key . ' is invalid.');
}

if (($_GET['arch'] != 'i486') && ($_GET['arch'] != 'i686'))
  throw_http_error(400, 'Malformed request', 'Architecture ' . $_GET['arch'] . ' is unkown.');

$infos = trim(
  shell_exec(
    'pacinfo' .
      ' --config=' . BASE . '/pkgapi/pacman-' . $_GET['arch'] . '.conf ' . 
      $_GET['repo'] . '/' .
      $_GET['pkgname'] .
      ' | grep "^Build Date:"; ' .
    'pacinfo' .
      ' --raw' .
      ' --config=' . BASE . '/pkgapi/pacman-' . $_GET['arch'] . '.conf ' . 
      $_GET['repo'] . '/' .
      $_GET['pkgname'] .
      ' | grep -v "^Build Date:"'
  )
);

if (!isset($infos))
  throw_http_error(404, 'Package not found.');

function parse_pacinfo_line($line) {
  return preg_split('/: +/', $line, 2);
}

function extract_first($array) {
  return $array[0];
}

$infos = explode("\n", $infos);
$infos = array_map('parse_pacinfo_line', $infos);
$merged_infos = array();
foreach ($infos as $info)
  $merged_infos = array_merge_recursive($merged_infos, array($info[0] => $info[1]));

header ("Content-type: application/json");
print json_encode(
  $merged_infos,
  JSON_UNESCAPED_SLASHES
);