More flags for r/banter https://flags.plum.moe
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
C-xC-c 2fb5794020
Fix Romania not shaking on Firefox.
5 years ago
BantFlags Minor code cleanup. 5 years ago
Docs Create upload.org 5 years ago
Environment Invented a new variety of spaghetti // 5 years ago
.gitattributes Initial commit 5 years ago
.gitignore Invented a new variety of spaghetti // 5 years ago
BantFlags.sln Initial commit 5 years ago
LICENSE Create LICENSE 5 years ago
README.org Update README.org 5 years ago
bantflags.gm4.meta.js Fix Romania not shaking on Firefox. 5 years ago
bantflags.gm4.user.js Fix Romania not shaking on Firefox. 5 years ago
bantflags.meta.js Fix Romania not shaking on Firefox. 5 years ago
bantflags.user.js Fix Romania not shaking on Firefox. 5 years ago

README.org

BantFlags

A user script and backend enabling user created flags on bant, originally based on extraflags.

Install bantflags

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.

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

  • .NET Core 3.1
  • MariaDB / MySQL

.NET dependancies

  • Nito.AsyncEX
  • Newtonsoft.Json
  • MySql.Data
  • Microsoft.AspNetCore.Mvc.NewtonsoftJson
  • Microsoft.AspNetCore.StaticFiles
  • Microsoft.AspNetCore.Razor
  • Microsoft.EntityFrameworkCore.SqlServer
  • Microsoft.EntityFrameworkCore.Tools
  • Magick.NET-Q8-AnyCPU

Setup

  1. Install .NET Core
  2. Clone and build the BantFlags solution.
  3. Create the database using database.sql.

    • Change the password.
  4. configure BantFlags/appsettings.example.json with your connection string and webroot (where you'll serve the flags from without a trailing slash) and rename it to appsettings.json

    • See below for an example appsettings.json.
    • ASP.NET Core applications look for a folder called wwwroot in the same directory as the application for static files. However you can choose to logically seperate these by providing a vaild directory to webroot.

      • That is to say, if the bantflags application is in /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

  8. Run with dotnet BantFlags.dll or create a service to run it as a daemon.

  9. ???
  10. profit.
Example appsettings.json
  {
    "dbconfig": {
      "connectionstring": "Server=localhost;Port=3306;User ID=user;Password=password;Database=bantflags",
      "poolsize": 2,
      "boards": [
        "bant",
        "nap",
        "srsbsn"
      ]
    },
    "webroot": "/var/www/html",
    "staging-password": "supersecretpassword"
  }

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 the flags/ directory. This will be whatever value you gave to webroot (or /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

The API is 1:1 compatable with all previous versions of bantflags. Further improvements are achieved by encoding a version variable when poking endpoints which allows for breaking changes in the script and backend while guaranteeing data can be parsed on both ends. See Docs/{endpoint} for changes and compatibility.