parent
4214c213e3
commit
a31d24c28d
@ -1 +1,2 @@
|
|||||||
src/config.lisp
|
src/config.lisp
|
||||||
|
\#*#
|
@ -1,117 +1,83 @@
|
|||||||
* BantFlags
|
* BantFlags
|
||||||
A user script and backend enabling user created flags on [[https://boards.4chan.org/bant][/bant/]],
|
A user script and backend enabling user created flags on [[https://boards.4chan.org/bant][/bant/]],
|
||||||
originally based on [[https://github.com/flaghunters/Extra-Flags-for-4chan][extraflags]].
|
originally based on [[https://github.com/flaghunters/Extra-Flags-for-4chan][extraflags]].
|
||||||
|
|
||||||
[[https://flags.plum.moe/bantflags.user.js][Install bantflags]]
|
[[https://flags.plum.moe/bantflags.user.js][Install bantflags]]
|
||||||
|
|
||||||
** Userscript
|
** Userscript
|
||||||
The userscript uses of ~GM_xmlhttpRequest~ to get and post flags with
|
The userscript uses of ~GM_xmlhttpRequest~ to get and post flags with
|
||||||
the backend . A user's flags are stored between pages using
|
the backend . A user's flags are stored between pages using
|
||||||
~GM_setValue~ and ~GM_getValue~.
|
~GM_setValue~ and ~GM_getValue~.
|
||||||
|
|
||||||
Old versions of GreaseMonkey will be able to recieve updates to the
|
Old versions of GreaseMonkey will be able to recieve updates to the
|
||||||
script through the ~@updateURL~ and ~@downloadURL~ directives, though
|
script through the ~@updateURL~ and ~@downloadURL~ directives, though
|
||||||
these were depricated sometime in GreaseMonkey 3.x and updates are
|
these were depricated sometime in GreaseMonkey 3.x and updates are
|
||||||
only checked from the location the script was downloaded from so be
|
only checked from the location the script was downloaded from so be
|
||||||
careful where you upload links.
|
careful where you upload links.
|
||||||
|
|
||||||
On self hosting, changing ~back_end~ to your domain /should/ be all
|
On self hosting, changing ~back_end~ to your domain /should/ be all
|
||||||
you need to do, but don't take this as fact. I haven't tested the
|
you need to do, but don't take this as fact. I haven't tested the
|
||||||
example nginx config.
|
example nginx config.
|
||||||
|
|
||||||
The userscript has been designed specifically to target ECMAScript
|
The userscript has been designed specifically to target ECMAScript
|
||||||
2015 (ES6), making liberal use of arrow functions, and const/let
|
2015 (ES6), making liberal use of arrow functions, and const/let
|
||||||
declarations. Update your hecking browser.
|
declarations. Update your hecking browser.
|
||||||
|
|
||||||
** Backend
|
** Backend
|
||||||
*** Prerequisites
|
*** Prerequisites
|
||||||
- .NET Core 3.1
|
- I use SBCL
|
||||||
- MariaDB / MySQL
|
*** Dependancies
|
||||||
|
- hunchentoot
|
||||||
*** .NET dependancies
|
- [[https://github.com/C-xC-c/hunchenhelpers][hunchenhelpers]], my hunchentoot helper library
|
||||||
- Nito.AsyncEX
|
- clsql
|
||||||
- Newtonsoft.Json
|
- jonathan, the JSON encoder/decoder
|
||||||
- MySql.Data
|
- cl-ppcre
|
||||||
- Microsoft.AspNetCore.Mvc.NewtonsoftJson
|
|
||||||
- Microsoft.AspNetCore.StaticFiles
|
|
||||||
- Microsoft.AspNetCore.Razor
|
|
||||||
- Microsoft.EntityFrameworkCore.SqlServer
|
|
||||||
- Microsoft.EntityFrameworkCore.Tools
|
|
||||||
- Magick.NET-Q8-AnyCPU
|
|
||||||
|
|
||||||
*** Setup
|
*** Setup
|
||||||
1) [[https://dotnet.microsoft.com/download/dotnet-core][Install .NET Core]]
|
1. clone the project
|
||||||
2) Clone and build the BantFlags solution.
|
2. Symlink src/ to your ~/quicklisp/local-projects
|
||||||
3) Create the database using [[https://github.com/C-xC-c/BantFlags/blob/master/Environment/database.sql][database.sql]].
|
3. Move ~src/config.example.org~ to ~src/config.org~ and change it
|
||||||
- *Change the password*.
|
to whatever your settings are.
|
||||||
4) configure ~BantFlags/appsettings.example.json~ with your connection
|
4. Type the following into your repl:
|
||||||
string and webroot (where you'll serve the flags from *without a
|
#+BEGIN_SRC lisp
|
||||||
trailing slash*) and rename it to ~appsettings.json~
|
(ql:quickload :bantflags)
|
||||||
- [[./BantFlags/appsettings.example.json][example appsettings.json]]
|
(bantflags:main)
|
||||||
- ASP.NET Core applications look for a folder called ~wwwroot~ in
|
#+END_SRC
|
||||||
the same directory as the application for static files. However
|
You will almost certainly have several issues building clsql, the
|
||||||
you can choose to logically seperate these by providing a vaild
|
database connector used. I've [[https://plum.moe/words/bludgeoning-clsql-and-mariadb.html][written a blog post]] on some of the
|
||||||
directory to ~webroot~.
|
issues I've encountered personally, but there's no guarantee it'll
|
||||||
- That is to say, if the bantflags application is in
|
work. Piece of shit.
|
||||||
~/var/www/bantflags/BantFlags.dll~, the program will look for
|
|
||||||
the folder ~/var/www/bantflags/wwwroot/~ to host static content,
|
|
||||||
or whatever directory is provided to ~wwwroot~.
|
|
||||||
5) If you're hosting on your GNU/Linux distribution of choice, Create a
|
|
||||||
folder called ~keys~ in the same directory as the bantflags
|
|
||||||
executable.
|
|
||||||
- E.G. ~/var/www/bantflags/keys/~
|
|
||||||
- This is because ASP.NET Core uses some cryptic bullshit anti
|
|
||||||
forgery token when processing HTML forms, and it's unable to
|
|
||||||
persistantly store the decryption keys in memory on
|
|
||||||
GNU/Linux. This directory will store said keys when you or
|
|
||||||
users upload flags to /upload. The path uses
|
|
||||||
~AppDomain.CurrentDomain.BaseDirectory~ internally,
|
|
||||||
I.E. wherever the program is.
|
|
||||||
6) Add flags to the backend by uploading them to the flag console (/Upload).
|
|
||||||
- Flags must be 16x11 pixels and under 15kb. Their names must not
|
|
||||||
exceed 100 characters and cannot contain either "||" or ",".
|
|
||||||
7) Configure your webserver of choice to forward requests to kestral
|
|
||||||
- [[https://github.com/C-xC-c/BantFlags/blob/master/Environment/nginx.conf][Example nginx config.]]
|
|
||||||
8) Run with ~dotnet BantFlags.dll~ or create a service to run it as a
|
|
||||||
daemon.
|
|
||||||
- [[https://github.com/C-xC-c/BantFlags/blob/master/Environment/bantflags.service][Example systemd service.]]
|
|
||||||
9) ???
|
|
||||||
10) profit.
|
|
||||||
|
|
||||||
*** Database
|
*** Database
|
||||||
Tables look like this:
|
Tables look like this:
|
||||||
|
|
||||||
*posts*
|
*posts*
|
||||||
| id | post_nr | board |
|
| id | post_nr | board |
|
||||||
| 1 | 12345 | bant |
|
| 1 | 12345 | bant |
|
||||||
| 2 | 56789 | bant |
|
| 2 | 56789 | bant |
|
||||||
*flags*
|
*flags*
|
||||||
| id | flag |
|
| id | flag |
|
||||||
| 1 | patchouli |
|
| 1 | patchouli |
|
||||||
| 2 | chen |
|
| 2 | chen |
|
||||||
*postflags*
|
*postflags*
|
||||||
| id | post_nr | flag |
|
| id | post_nr | flag |
|
||||||
| 1 | 1 | 1 |
|
| 1 | 1 | 1 |
|
||||||
| 2 | 1 | 2 |
|
| 2 | 1 | 2 |
|
||||||
| 2 | 2 | 2 |
|
| 2 | 2 | 2 |
|
||||||
where ~post_nr~ and ~flag~ in *postflags* are the id fields in their
|
where ~post_nr~ and ~flag~ in *postflags* are the id fields in their
|
||||||
respective tables.
|
respective tables.
|
||||||
*** API
|
*** API
|
||||||
The backend exposes three endpoints for the userscript to get and post
|
The backend exposes three endpoints for the userscript to get and
|
||||||
flags. Flags themselves are hosted from the ~flags/~ directory. This
|
post flags. Flags themselves are hosted from ~flags/~ which is
|
||||||
will be whatever value you gave to ~webroot~ (or
|
~www-root/flags/~ from ~config.lisp~ on the filesystem
|
||||||
~/path/to/bantflags/wwwroot/~ if no value is provided) + ~flags/~.
|
|
||||||
|
|
||||||
| 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 |
|
|
||||||
|
|
||||||
** Backwards Compatibility
|
| route | purpse |
|
||||||
The API is 1:1 compatable with all previous versions of
|
|------------+--------------------------------------------|
|
||||||
bantflags. Further improvements are achieved by encoding a ~version~
|
| /api/get | Get flags using post numbers in the thread |
|
||||||
variable when poking endpoints which allows for breaking changes in
|
| /api/post | Add flags to the database |
|
||||||
the script and backend while guaranteeing data can be parsed on both
|
| /api/flags | List the flags we support |
|
||||||
ends. See [[https://github.com/C-xC-c/BantFlags/tree/master/Docs/][Docs/{endpoint}]] for changes and compatibility.
|
| /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.
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
(defpackage #:bantflags
|
||||||
|
(:use #:cl)
|
||||||
|
(:export :init))
|
Loading…
Reference in new issue