Compare commits

...

2 Commits
v1.2.0 ... main

Author SHA1 Message Date
Florine W. Dekker d7c2658ba6
Resolve error in default ini 2023-09-04 15:04:08 +02:00
Florine W. Dekker 2daa74b319
Make user agent customisable
And fix some instructions in the README, and put config settings between quotes where applicable.
2023-09-04 14:54:45 +02:00
8 changed files with 33 additions and 29 deletions

View File

@ -12,6 +12,7 @@ This tool regularly checks if people are still alive according to Wikipedia, and
* PHP 8.1+ (i.e. `apt install php php-cgi`) (compiled with Argon2 support) * PHP 8.1+ (i.e. `apt install php php-cgi`) (compiled with Argon2 support)
* [PHP cURL](https://www.php.net/manual/en/book.curl.php) (i.e. `apt install php-curl`) * [PHP cURL](https://www.php.net/manual/en/book.curl.php) (i.e. `apt install php-curl`)
* [PHP DOM](https://www.php.net/manual/en/book.dom.php) (i.e. `apt install php-dom`) * [PHP DOM](https://www.php.net/manual/en/book.dom.php) (i.e. `apt install php-dom`)
* [PHP mbstring](https://www.php.net/manual/en/book.mbstring.php) (i.e. `apt install php-mbstring`)
* [PHP SQLite 3](https://www.php.net/manual/en/book.sqlite3.php) (i.e. `apt install php-sqlite3`) * [PHP SQLite 3](https://www.php.net/manual/en/book.sqlite3.php) (i.e. `apt install php-sqlite3`)
* [composer](https://getcomposer.org/) (make sure `composer.phar` is on your path) * [composer](https://getcomposer.org/) (make sure `composer.phar` is on your path)
* [npm](https://www.npmjs.com/) * [npm](https://www.npmjs.com/)
@ -94,12 +95,12 @@ Inside the installation directory, create `config.ini.php` and use it to overrid
Make sure only the user that runs PHP can read/write `config.ini.php`. Make sure only the user that runs PHP can read/write `config.ini.php`.
### Cron jobs ### Cron jobs
You should run the `process-email-queue` and `update-all-trackings` actions regularly; You should run the `process-email-queue` and `update-trackings` actions regularly;
recommended is every minute and every five minutes, respectively. recommended is every minute and every five minutes, respectively.
For example, you can add the following lines to your crontab (e.g. using `sudo -u www crontab -e`): For example, you can add the following lines to your crontab (e.g. using `sudo -u www crontab -e`):
``` ```
* * * * * cd /var/www/death-notifier && php /var/www/death-notifier/api.php action=process-email-queue password=secret_password * * * * * cd /var/www/death-notifier && php /var/www/death-notifier/api.php action=process-email-queue password=secret_password
*/5 * * * * cd /var/www/death-notifier && php /var/www/death-notifier/api.php action=update-all-trackings password=secret_password */5 * * * * cd /var/www/death-notifier && php /var/www/death-notifier/api.php action=update-trackings password=secret_password
``` ```
Replace `secret_password` with the password you configured in `config.ini.php`. Replace `secret_password` with the password you configured in `config.ini.php`.

View File

@ -1,7 +1,7 @@
{ {
"name": "fwdekker/death-notifier", "name": "fwdekker/death-notifier",
"description": "Get notified when a famous person dies.", "description": "Get notified when a famous person dies.",
"version": "1.2.0", "_comment_version": "Also update version in `package.json`!", "version": "1.3.0", "_comment_version": "Also update version in `package.json`!",
"type": "project", "type": "project",
"license": "MIT", "license": "MIT",
"homepage": "https://git.fwdekker.com/tools/death-notifier", "homepage": "https://git.fwdekker.com/tools/death-notifier",

BIN
composer.lock generated

Binary file not shown.

BIN
package-lock.json generated

Binary file not shown.

View File

@ -1,6 +1,6 @@
{ {
"name": "death-notifier", "name": "death-notifier",
"version": "1.2.0", "_comment_version": "Also update version in `composer.json`!", "version": "1.3.0", "_comment_version": "Also update version in `composer.json`!",
"description": "Get notified when a famous person dies.", "description": "Get notified when a famous person dies.",
"author": "Florine W. Dekker", "author": "Florine W. Dekker",
"browser": "dist/bundle.js", "browser": "dist/bundle.js",

View File

@ -1,40 +1,37 @@
;<?php exit(); ?> ;<?php exit(); ?>
[admin] [admin]
# PHC formatted hash of password to use the CLI of `api.php`. If set to its default value, or if empty, the CLI is # PHC-formatted hash of password for the CLI of `api.php`. You can create one using PHP's `password_hash`. Escaping
# disabled. # dollar symbols is optional. If set to its default value, or if empty, the CLI is disabled.
cli_password = REPLACE THIS WITH A SECRET VALUE cli_password = "REPLACE THIS WITH A SECRET VALUE"
[database] [database]
# File to store SQLite database in. The default value assumes that you have configured your server to hide files # File to store SQLite database in.
# starting with a `.`. filename = ".death-notifier.db"
filename = .death-notifier.db
[logger] [logger]
# File to store general logs in. The default value assumes that you have configured your server to hide files starting # File to store general logs in.
# with a `.`. filename = ".death-notifier.log"
filename = .death-notifier.log
# Log level for general log events. See https://seldaek.github.io/monolog/doc/01-usage.html#log-levels # Log level for general log events. See https://seldaek.github.io/monolog/doc/01-usage.html#log-levels
level = 250 level = 250
[logger_db] [logger_db]
# File to store database logs in. The default value assumes that you have configured your server to hide files starting # File to store database logs in.
# with a `.`. filename = ".death-notifier.db.log"
filename = .death-notifier.db.log
# Log level for database log events. See https://seldaek.github.io/monolog/doc/01-usage.html#log-levels # Log level for database log events. See https://seldaek.github.io/monolog/doc/01-usage.html#log-levels
level = 250 level = 250
[mail] [mail]
# Host name of SMTP server to send mail through. # Host name of SMTP server to send mail through.
host = TODO host = "TODO"
# Port of SMTP server to send mail through. # Port of SMTP server to send mail through.
port = TODO port = TODO
# Username to authenticate with at SMTP server. # Username to authenticate with at SMTP server.
username = TODO username = "TODO"
# Password to authenticate with at SMTP server. # Password to authenticate with at SMTP server.
password = TODO password = "TODO"
# Name to show to recipient. # Name to show to recipient.
from_name = TODO from_name = "TODO"
[security] [security]
# `true` if and only if insecure file permissions for config files should be tolerated. # `true` if and only if insecure file permissions for config files should be tolerated.
@ -42,8 +39,13 @@ allow_config_insecure_permissions = false
[server] [server]
# The path to the directory containing the site's main page. # The path to the directory containing the site's main page.
base_path = https://example.com/death-notifier/ base_path = "https://example.com/death-notifier/"
# The path at which users can report bugs, or an empty string if there is no such path. # The path at which users can report bugs, or an empty string if there is no such path.
issue_path = issue_path = ""
# The message to display at the top of all pages. A blank string hides the message. # The message to display at the top of all pages. A blank string hides the message.
global_message = global_message = ""
[wikipedia]
# Contact information to include in requests to Wikipedia's API. Typically a URL and an email address separated by a
# semicolon. See also https://www.mediawiki.org/wiki/API:Etiquette.
user_agent_contact = "https://example.com/death-notifier; name@example.com"

View File

@ -89,7 +89,7 @@ class ProcessEmailQueueAction extends Action
$mailer->SMTPKeepAlive = true; $mailer->SMTPKeepAlive = true;
$mailer->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; $mailer->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
$mailer->Host = $config["host"]; $mailer->Host = $config["host"];
$mailer->Port = $config["port"]; $mailer->Port = intval($config["port"]);
$mailer->Username = $config["username"]; $mailer->Username = $config["username"];
$mailer->Password = $config["password"]; $mailer->Password = $config["password"];
try { try {

View File

@ -2,7 +2,7 @@
namespace com\fwdekker\deathnotifier\wikipedia; namespace com\fwdekker\deathnotifier\wikipedia;
use com\fwdekker\deathnotifier\LoggerUtil; use com\fwdekker\deathnotifier\Config;
use com\fwdekker\deathnotifier\Util; use com\fwdekker\deathnotifier\Util;
use JsonException; use JsonException;
@ -19,9 +19,7 @@ class Wikipedia
/** /**
* The user agent used to represent the death notifier to Wikipedia. * The user agent used to represent the death notifier to Wikipedia.
*/ */
private const USER_AGENT = private const USER_AGENT_FORMAT = "death-notifier/%%VERSION_NUMBER%% (%1\$s) %2\$s";
"death-notifier/%%VERSION_NUMBER%% " .
"(https://git.fwdekker.com/tools/death-notifier; florine@fwdekker.com)";
/** /**
* Number of articles to query per query. * Number of articles to query per query.
*/ */
@ -48,10 +46,13 @@ class Wikipedia
*/ */
private function api_fetch(array $params): mixed private function api_fetch(array $params): mixed
{ {
$curl_version = curl_version()["version"] ?? "unknown";
$user_agent = sprintf(self::USER_AGENT_FORMAT, Config::get("wikipedia")["user_agent_contact"], $curl_version);
$ch = curl_init(); $ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, self::API_URL . http_build_query($params)); curl_setopt($ch, CURLOPT_URL, self::API_URL . http_build_query($params));
curl_setopt($ch, CURLOPT_USERAGENT, self::USER_AGENT); curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
$output = curl_exec($ch); $output = curl_exec($ch);
curl_close($ch); curl_close($ch);