]>
git.immae.eu Git - perso/Immae/Config/Nix.git/blob - modules/private/websites/tools/tools/dmarc_reports/api.php
3 require ( getenv ( "SECRETS_FILE" ));
8 $mysqli = new mysqli ( $dbhost , $dbuser , $dbpass , $dbname , $dbport );
10 function error_die ( $text , $number ) {
11 http_response_code ( "500" );
18 die ( json_encode ( $message ));
21 if ( $mysqli- > connect_errno
) {
22 error_die ( $mysqli- > connect_error
, $mysqli- > connect_errno
);
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' ];
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' ];
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' ] );
47 $response [ "summaries" ] = array ();
48 if ( isset ( $_GET [ 'errors_only' ])) {
49 $where = " WHERE (spfresult != 'pass' or dkimresult != 'pass')" ;
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 ;
62 $response [ "rptrecord" ] = [];
63 $sql = $mysqli- > prepare ( "SELECT * FROM rptrecord where serial = ?" );
64 $sql- > bind_param ( "s" , $_GET [ "serial" ]);
66 $query = $sql- > get_result ();
67 if ( $mysqli- > error
) { error_die ( $mysqli
-> error
, $mysqli
-> errno
); }
68 while ( $row = $query- > fetch_assoc ()) {
70 $ip = long2ip ( $row [ 'ip' ]);
71 $host = gethostbyaddr ( $ip );
72 } elseif ( $row [ 'ip6' ] ) {
73 $ip = inet_ntop ( $row [ 'ip6' ]);
74 $host = gethostbyaddr ( $ip );
82 $response [ "rptrecord" ][] = $row ;
86 echo json_encode ( $response , JSON_PRETTY_PRINT
);