Get notified when a famous person dies. https://fwdekker.com/tools/death-notifier/
Go to file
Florine W. Dekker 6a1be5ac2f
Use Argon2 instead of bcrypt
Passwords currently stored under bcrypt are not automatically converted. Argon2 is only used for new passwords from this moment on.
2023-08-30 22:35:35 +02:00
src Use Argon2 instead of bcrypt 2023-08-30 22:35:35 +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 Use Argon2 instead of bcrypt 2023-08-30 22:35:35 +02:00
composer.json Use Argon2 instead of bcrypt 2023-08-30 22:35:35 +02:00
composer.lock Use Argon2 instead of bcrypt 2023-08-30 22:35:35 +02:00
package-lock.json Use Argon2 instead of bcrypt 2023-08-30 22:35:35 +02:00
package.json Use Argon2 instead of bcrypt 2023-08-30 22:35:35 +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-all-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-all-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.