not manx
2a5ac4b592
|
4 years ago | |
---|---|---|
env | 5 years ago | |
src | 4 years ago | |
.gitignore | 4 years ago | |
LICENSE | 5 years ago | |
README.org | 4 years ago | |
bantflags.meta.js | 4 years ago | |
bantflags.user.js | 4 years ago |
README.org
BantFlags
A user script and backend enabling user created flags on bant, originally based on extraflags.
Userscript
The userscript uses of GM_xmlhttpRequest
to get and post flags
with the backend . A user's flags are stored between pages using
GM_setValue
and GM_getValue
, or their GreaseMonkey4
equivalents.
Old versions of GreaseMonkey will be able to recieve updates to the
script through the @updateURL
and @downloadURL
directives,
though these were depricated sometime in GreaseMonkey 3.x and
updates are only checked from the location the script was
downloaded from so be careful where you upload links.
On self hosting, changing back_end
to your domain should be all
you need to do, but don't take this as fact.
The userscript has been designed specifically to target ECMAScript 2015 (ES6), making liberal use of arrow functions, and const/let declarations. Update your hecking browser.
Backend
Prerequisites
- I use SBCL
- Some mysql, I use Mariadb
- Quicklisp
Dependancies
- hunchentoot
- hunchenhelpers, my hunchentoot helper library (yes I'm proud of the name)
- clsql
- jonathan, the JSON encoder/decoder
- cl-ppcre
Setup
- clone the project
- Symlink src/ to your ~/quicklisp/local-projects
- Move
src/config.example.org
tosrc/config.org
and change it to whatever your settings are. - Initialise the database by doing something like
mysql << env/database.sql
, This will create all the tables you will need, plus an entry for the`empty flag`
- Type the following into your repl:
(ql:quickload :bantflags)
(bantflags:main)
- To use bantflags as a Systemd service, I have included an
example service and an
init.el
file for the service to run, since Systemd will automatically kill it if you just evalbantflags:main
.
You will almost certainly have several issues building clsql, the database connector used. I've written a blog post on some of the issues I've encountered personally, but there's no guarantee it'll work. Piece of shit.
Database
Tables look like this:
posts
id | post_nr | board |
1 | 12345 | bant |
2 | 56789 | bant |
flags
id | flag |
1 | patchouli |
2 | chen |
postflags
id | post_nr | flag |
1 | 1 | 1 |
2 | 1 | 2 |
2 | 2 | 2 |
where post_nr
and flag
in postflags are the id fields in their
respective tables.
API
The backend exposes three endpoints for the userscript to get and
post flags. Flags themselves are hosted from flags/
which is
www-root/flags/
from config.lisp
on the filesystem
route | purpse |
---|---|
/api/get | Get flags using post numbers in the thread |
/api/post | Add flags to the database |
/api/flags | List the flags we support |
/flags/* | The flag images |
Notes
You will get an error like =Recursive lock attempt #<SB-THREAD:MUTEX "global-message-log-lock" owner: #<SB-THREAD:THREAD "hunchentoot-worker-127.0.0.1:54454" RUNNING {1001DED5E3}>>.= if you try and log to a file that doesn't exist / you don't have permissions to read/write.