]>
Commit | Line | Data |
---|---|---|
7df5e532 IB |
1 | <?php |
2 | ||
3 | require(getenv("SECRETS_FILE")); | |
4 | ||
5 | $response = array( | |
6 | "status" => "ok", | |
7 | ); | |
8 | $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname, $dbport); | |
9 | ||
10 | function error_die($text, $number) { | |
11 | http_response_code("500"); | |
12 | $message = array( | |
13 | "status" => "error", | |
14 | "message" => $text, | |
15 | "code" => $number | |
16 | ); | |
17 | ||
18 | die(json_encode($message)); | |
19 | } | |
20 | ||
21 | if ($mysqli->connect_errno) { | |
22 | error_die($mysqli->connect_error, $mysqli->connect_errno); | |
23 | } | |
24 | ||
25 | if (!isset($_GET['serial'])) { | |
26 | $response["domains"] = array(); | |
27 | $query = $mysqli->query("SELECT DISTINCT domain FROM `report` ORDER BY domain"); | |
28 | if ($mysqli->error) { error_die($mysqli->error, $mysqli->errno); } | |
29 | while($row = $query->fetch_assoc()) { | |
30 | $response["domains"][] = $row['domain']; | |
31 | } | |
32 | ||
33 | $response["orgs"] = array(); | |
34 | $query = $mysqli->query("SELECT DISTINCT org FROM `report` ORDER BY org"); | |
35 | if ($mysqli->error) { error_die($mysqli->error, $mysqli->errno); } | |
36 | while($row = $query->fetch_assoc()) { | |
37 | $response["orgs"][] = $row['org']; | |
38 | } | |
39 | ||
40 | $response["dates"] = array(); | |
41 | $query = $mysqli->query("SELECT DISTINCT DISTINCT year(mindate) as year, month(mindate) as month FROM `report` ORDER BY year DESC,month DESC"); | |
42 | if ($mysqli->error) { error_die($mysqli->error, $mysqli->errno); } | |
43 | while($row = $query->fetch_assoc()) { | |
44 | $response["dates"][] = sprintf( "%'.04d-%'.02d", $row['year'], $row['month'] ); | |
45 | } | |
46 | ||
47 | $response["summaries"] = array(); | |
48 | if (isset($_GET['errors_only'])) { | |
49 | $where = " WHERE (spfresult != 'pass' or dkimresult != 'pass')"; | |
50 | } else { | |
51 | $where = ""; | |
52 | } | |
53 | ||
54 | $sql = "SELECT report.* , sum(rptrecord.rcount) AS rcount, MIN(rptrecord.dkimresult) AS dkimresult, MIN(rptrecord.spfresult) AS spfresult FROM report LEFT JOIN (SELECT rcount, COALESCE(dkimresult, 'neutral') AS dkimresult, COALESCE(spfresult, 'neutral') AS spfresult, serial FROM rptrecord) AS rptrecord ON report.serial = rptrecord.serial$where GROUP BY serial ORDER BY mindate ASC, maxdate ASC, org"; | |
55 | $query = $mysqli->query($sql); | |
56 | if ($mysqli->error) { error_die($mysqli->error, $mysqli->errno); } | |
57 | while($row = $query->fetch_assoc()) { | |
58 | unset($row["raw_xml"]); | |
59 | $response["summaries"][] = $row; | |
60 | } | |
61 | } else { | |
62 | $response["rptrecord"] = []; | |
63 | $sql = $mysqli->prepare("SELECT * FROM rptrecord where serial = ?"); | |
64 | $sql->bind_param("s", $_GET["serial"]); | |
65 | $sql->execute(); | |
66 | $query = $sql->get_result(); | |
67 | if ($mysqli->error) { error_die($mysqli->error, $mysqli->errno); } | |
68 | while($row = $query->fetch_assoc()) { | |
69 | if ($row['ip']) { | |
70 | $ip = long2ip($row['ip']); | |
71 | $host = gethostbyaddr($ip); | |
72 | } elseif ( $row['ip6'] ) { | |
73 | $ip = inet_ntop($row['ip6']); | |
74 | $host = gethostbyaddr($ip); | |
75 | } else { | |
76 | $ip = "-"; | |
77 | $host = "-"; | |
78 | } | |
79 | $row['ip'] = $ip; | |
80 | $row['host'] = $host; | |
81 | unset($row['ip6']); | |
82 | $response["rptrecord"][] = $row; | |
83 | } | |
84 | } | |
85 | ||
86 | echo json_encode($response, JSON_PRETTY_PRINT); | |
87 | ?> |