140 lines
4.6 KiB
PHP
140 lines
4.6 KiB
PHP
<?php
|
|
include "config.inc.php";
|
|
include ("$file_newsportal");
|
|
include $config_dir . "/gpg.conf";
|
|
|
|
if (! isset($CONFIG['enable_nocem']) || $CONFIG['enable_nocem'] != true) {
|
|
exit();
|
|
}
|
|
|
|
$lockfile = $lockdir . '/rslight-spoolnews.lock';
|
|
$pid = file_get_contents($lockfile);
|
|
if (posix_getsid($pid) === false || ! is_file($lockfile)) {
|
|
print "Starting nocem...\n";
|
|
file_put_contents($lockfile, getmypid()); // create lockfile
|
|
} else {
|
|
print "nocem currently running\n";
|
|
exit();
|
|
}
|
|
|
|
putenv("GNUPGHOME=" . $rslight_gpg['gnupghome']);
|
|
$res = gnupg_init();
|
|
|
|
$webserver_group = $CONFIG['webserver_user'];
|
|
$logfile = $logdir . '/nocem.log';
|
|
@mkdir($spooldir . "/nocem/processed", 0755, 'recursive');
|
|
@mkdir($spooldir . "/nocem/failed", 0755, 'recursive');
|
|
|
|
$nocem_path = $spooldir . "/nocem/";
|
|
$messages = scandir($nocem_path);
|
|
$begin = "@@BEGIN NCM BODY";
|
|
$end = "@@END NCM BODY";
|
|
|
|
foreach ($messages as $message) {
|
|
$nocem_file = $nocem_path . $message;
|
|
if (! is_file($nocem_file)) {
|
|
continue;
|
|
}
|
|
if (check_nocem_config($nocem_file) == true) {
|
|
file_put_contents($logfile, "\n" . format_log_date() . " " . $config_name . " Good Issuer and Type for: " . $message, FILE_APPEND);
|
|
} else {
|
|
file_put_contents($logfile, "\n" . format_log_date() . " " . $config_name . " Bad Issuer or Type for: " . $message, FILE_APPEND);
|
|
rename($nocem_file, $nocem_path . "failed/" . $message);
|
|
continue;
|
|
}
|
|
$signed_text = file_get_contents($nocem_file);
|
|
if (verify_gpg_signature($res, $signed_text) == 1) {
|
|
file_put_contents($logfile, "\n" . format_log_date() . " " . $config_name . " Good signature in: " . $message, FILE_APPEND);
|
|
echo "Good signature in: " . $message . "\r\n";
|
|
} else {
|
|
file_put_contents($logfile, "\n" . format_log_date() . " " . $config_name . " Bad signature in: " . $message, FILE_APPEND);
|
|
echo "Bad signature in: " . $message . "\r\n";
|
|
rename($nocem_file, $nocem_path . "failed/" . $message);
|
|
continue;
|
|
}
|
|
$nocem_list = file($nocem_file, FILE_IGNORE_NEW_LINES);
|
|
$start = 0;
|
|
|
|
// Open overview database and process list
|
|
$database = $spooldir . '/articles-overview.db3';
|
|
$overview_dbh = overview_db_open($database);
|
|
foreach ($nocem_list as $nocem_line) {
|
|
if (strpos($nocem_line, $begin) !== false) {
|
|
$start = 1;
|
|
continue;
|
|
}
|
|
if (strpos($nocem_line, $end) !== false) {
|
|
break;
|
|
}
|
|
if ($nocem_line[0] == '#') {
|
|
continue;
|
|
}
|
|
if (($nocem_line[0] == '<') && $start == 1) {
|
|
$found = preg_split("/\ |\,/", $nocem_line);
|
|
// $found = explode(' ', $nocem_line);
|
|
$i = 0;
|
|
foreach ($found as $group_item) {
|
|
if ($i == 0) {
|
|
$i ++;
|
|
continue;
|
|
}
|
|
file_put_contents($logfile, "\n" . format_log_date() . " " . $config_name . " TRYING: " . $found[0] . " IN: " . $group_item, FILE_APPEND);
|
|
delete_message($found[0], trim($group_item), $overview_dbh);
|
|
}
|
|
}
|
|
}
|
|
$overview_dbh = null;
|
|
|
|
rename($nocem_file, $nocem_path . "processed/" . $message);
|
|
prune_dir_by_days($nocem_path . "processed/", 30);
|
|
prune_dir_by_days($nocem_path . "failed/", 30);
|
|
}
|
|
unlink($lockfile);
|
|
|
|
function check_nocem_config($nocem_file)
|
|
{
|
|
global $config_dir;
|
|
$nocem_config = $config_dir . '/nocem.conf';
|
|
$name_ok = false;
|
|
$type_ok = false;
|
|
$ncmhead = '@@BEGIN NCM HEADERS';
|
|
$nocem_list = file($nocem_file, FILE_IGNORE_NEW_LINES);
|
|
$headers = 0;
|
|
foreach ($nocem_list as $nocem_line) {
|
|
if (stripos($nocem_line, $ncmhead) == 0){
|
|
$headers = 1;
|
|
}
|
|
if ($headers != 1) {
|
|
continue;
|
|
}
|
|
if (stripos($nocem_line, "Issuer: ") === 0) {
|
|
$issuer = explode(': ', $nocem_line);
|
|
$issuer = $issuer[1];
|
|
}
|
|
if (stripos($nocem_line, "Type: ") === 0) {
|
|
$type = explode(': ', $nocem_line);
|
|
$type = $type[1];
|
|
}
|
|
}
|
|
$config_val = get_config_file_value($nocem_config, $issuer);
|
|
if ($config_val === false) {
|
|
return false;
|
|
} else {
|
|
$name_ok = true;
|
|
}
|
|
$all_types = explode(',', $config_val);
|
|
foreach ($all_types as $one_type) {
|
|
if (trim($type) == trim($one_type)) {
|
|
echo $issuer . ':'.$type . " Good Type \n";
|
|
$type_ok = true;
|
|
} else {
|
|
echo $issuer . ':'.$type . ' : ' . $one_type . " Bad Type \n";
|
|
}
|
|
}
|
|
if ($type_ok && $name_ok) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|