From 12171ecba71f2884dfad02e06022bd9a934569b0 Mon Sep 17 00:00:00 2001 From: nat Date: Sun, 10 Mar 2024 10:47:38 -0700 Subject: [PATCH] Update repo meta files --- README.md | 27 +++++++++++++++++++++++---- meta/screenshot.jpg | Bin 0 -> 42805 bytes 2 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 meta/screenshot.jpg diff --git a/README.md b/README.md index 25e897f..93659ef 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # guestbook.php -This is a drop-in guestbook system using PHP and SQLite3, meant to be simple enough to fit into one file and be configurable by hand with ease. +This is a guestbook system for personal websites! Its gimick is that it's simple enough to fit in one file (the SQLite database is technically another file, but `guestbook.php` will generate and handle it all on its own). ## Setup @@ -12,22 +12,41 @@ Assuming you have PHP installed on your server, setting up this guestbook should $ sudo apt install php8.2-sqlite3 ``` -I've tested this using PHP 8.2. It seems like the Debian package `php8.3-sqlite3` so some additional setup may be required to get it working with PHP 8.3 if you're on Debian. +I've tested this using PHP 8.2. It seems like the Debian package `php8.3-sqlite3` is still experimental as of writing (2024-03-10) so some additional setup may be required to get it working with PHP 8.3 if you're on Debian. + +If you just want to test it out without installing something like Nginx, you can use some built in PHP utilities to run a simple server. Run this in the directory where you downloaded `guestbook.php` + +``` +php -S localhost:8080 +``` + +Then, navigate to `http://localhost:8080/guestbook.php` in your browser. + ## Configuring -Several constants are defined using the PHP `define` function, which works as follows: +Several constants are defined at the very top of `guestbook.php` using the PHP `define` function, which works as follows: ```php define('[name of constant]', [PHP expression]); ``` -You can change these constants according to your need. You can also search the file for references to them to see where they're used. +You can change these constants according to your need. You can also search the file for references to them to see where they're used: +* `GUESTBOOK_NAME` - The name of your guestbook! Used as the page title +* `GUESTBOOK_PAGE_SIZE` - The maximum number of guestbook entries to display on a single page. Additional entries will be moved to the next page, reachable by clicking the navigation buttons at the bottom of the document +* `GUESTBOOK_RATE_LIMIT_SECONDS` - The number of seconds between allowable submissions to the guestbook (i.e. for a rate limit of N seconds, users can only publish an entry every N seconds). Used as a spam prevention mechanism. +* `GUESTBOOK_SQLITE_LOCATION` - The location of the database. If the database isn't found at the location, a new one will be created. Make sure your server has the ability to write to this location! +* `CHALLENGE_QUESTION` - An additional question added to the form as a spam prevention mechanism. The default is "What month is it?" which will trip up LLM-enabled spam bots 11 out of 12 times. If a user doesn't answer correctly, their submission will be quietly ignored +* `CHALLENGE_ANSWER_REGEX` - A regex matching all correct answers to the challenge question +* `SHADOWBAN_REGEX` - If any of the fields (except the challenge question) match this regex, they will be quietly ignored. You may want to use this to block certain keywords you don't want showing up in your guestbook. Beneath the PHP script at the top of the file, there's the complete HTML page for the guestbook, including the style sheet in the head tag, that you can adjust to your needs. [1]: https://www.php.net/manual/en/install.php +## Screenshots +![A screenshot of the guestbook. The header reads "Sign the guestbook". Beneath it, a smaller notice indicates that the user has successfully submitted an entry. A boxed form allows the user to input their name, website and message, along with an answer to a challenge question. Below the box, guestbook entries are listed. At the very bottom, a privacy statement describes how the user's IP address is stored as a hash to prevent spam](meta/screenshot.jpg) + ## "License" This software is a gift from me to you. By accepting this gift, we're forming a relationship, and with that comes certain expectations. Namely: diff --git a/meta/screenshot.jpg b/meta/screenshot.jpg new file mode 100644 index 0000000000000000000000000000000000000000..666120d0589d8981842b2306dbcf0f72db6879f8 GIT binary patch literal 42805 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 literal 0 HcmV?d00001