Get notified when a famous person dies. https://fwdekker.com/tools/death-notifier/
Go to file
Florine W. Dekker d7c2658ba6
Resolve error in default ini
2023-09-04 15:04:08 +02:00
src Resolve error in default ini 2023-09-04 15:04:08 +02:00
.editorconfig Add Composer and npm to project 2022-08-09 19:20:02 +02:00
.gitattributes Add Composer and npm to project 2022-08-09 19:20:02 +02:00
.gitignore Clean up server-side by, like, a lot 2022-08-29 01:09:33 +02:00
Gruntfile.js Update dependencies and ensure Hitler is dead 2023-08-30 22:31:05 +02:00
LICENSE Add Composer and npm to project 2022-08-09 19:20:02 +02:00
README.md Make user agent customisable 2023-09-04 14:54:45 +02:00
composer.json Make user agent customisable 2023-09-04 14:54:45 +02:00
composer.lock Make user agent customisable 2023-09-04 14:54:45 +02:00
package-lock.json Make user agent customisable 2023-09-04 14:54:45 +02:00
package.json Make user agent customisable 2023-09-04 14:54:45 +02:00
phpstan.neon Add phpstan and resolve almost all issues 2022-08-14 17:47:18 +02:00
tsconfig.json Improve CSRF handling and session management 2022-08-12 17:06:21 +02:00

README.md

Death Notifier

Get notified when a famous person dies.

Wikipedia's editors are known for updating pages as soon as someone has died. Why not turn that into a service? This tool regularly checks if people are still alive according to Wikipedia, and emails you as soon as that changes.

Development

Requirements

  • PHP 8.1+ (i.e. apt install php php-cgi) (compiled with Argon2 support)
  • composer (make sure composer.phar is on your path)
  • npm

Setting up

Install the dependencies. Run this after cloning the repo, and each time after pulling new commits.

composer.phar install
npm ci

Building

  • Build the tool in dist/ for development
    npm run dev
    
  • Same as above, but automatically rebuild whenever source code is changed
    npm run dev:server
    
  • Build the tool in dist/ for deployment
    npm run deploy
    

Pre-commit

If you changed the version number or updated any dependencies, update the lock files:

composer.phar update
npm install

Static analysis and tests

Note that PHPUnit suppresses output from print. Instead, you can use fwrite(STDERR, print_r("my message", TRUE));.

  • Run static analysis

    npm run analyze
    
  • Run all tests

    npm run test
    
  • Run only select tests

    npm run test -- --test-filter="test-name file-name"
    

    Note that a test-name of '' and a file-name of . matches all tests.

    • Run all tests in package
      npm run test -- --test-filter="'' com/fwdekker/deathnotifier/wikipedia/"
      
    • Run all tests in class
      npm run test -- --test-filter="'' com/fwdekker/deathnotifier/wikipedia/WikipediaTest.php"
      
    • Run only specific test
      npm run test -- --test-filter="test_query_detects_dead_person ."
      
  • Run static analysis and tests

    npm run check
    

Deployment

Build

Build the software and move it to the right directory.

npm run deploy
mv dist/ /var/www/death-notifier/

Configuration

Inside the installation directory, create config.ini.php and use it to override values from config.default.ini.php. Make sure only the user that runs PHP can read/write config.ini.php.

Cron jobs

You should run the process-email-queue and update-trackings actions regularly; 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):

* * * * * 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-trackings password=secret_password

Replace secret_password with the password you configured in config.ini.php.

Logs

It is recommended to also use a tool such as newsyslog to manage log rotation. For example, create the file /etc/newsyslog.conf.d/death-notifier.conf with the following contents:

/var/www/death-notifier/.death-notifier.log    www:www 600 7 * @T00   JE
/var/www/death-notifier/.death-notifier.db.log www:www 600 7 * $W0D23 JpE

Initialize

Open index.html in an interactive browser to initialize the database. Make sure only the user that runs PHP can read/write .death-notifier.db.

Inspection

You can use a tool such as VisiData to manually inspect the database contents on the command line.