Wildcard [1.8 - latest] icon

Wildcard [1.8 - latest] -----

Token based Whitelist to give away "Keys" to join your server




Wildcard

What is Wildcard?
Wildcard is a small Whitelist plugin which adds the ability to either whitelist people on normal fashion with a command or to just give away keys which can be used on a fully customizable Web Interface.

Web Interface
The web interface consists of a folder called webpage in the plugin's data directory. You can change everything related to the interface there.
The interface is handled internal by custom code and everything depending on structure / design is handled by the files in the webpage folder. You are able to include any css / html / javascript files in there.
Placeholder and template support is only available in html files tho.
LoginPage.png
SuccessPage.png

Getting started
Using this plugin is mostly just drag and drop.
Put it into your plugins folder and start the server.
The plugin will be useable directly from the start up.

I would still encourage to change some settings like the Web Interface host name. If you don't change the host name then the Web Interface will be hosted at localhost meaning only the device itself can access it.
If you want SSL for that side I would recommend using a reverse Proxy as I've no plans on adding SSL support at the moment as the HttpServer was self written and I've no clue how you actually do that x)

Database

This plugin currently only supports SQL databases.
Right now there are two drivers which are supported.
- MySQL
- SQLite (default)

MySQL does not just mean MySQL, it should also work with PostgreSQL; MariaDB and any other SQL database which is similar to MySQL.

Config

The config (settings.json) is a JSON file and therefore follows the normal JSON Syntax rules.
The default config file looks like this:

Code (Text):
{
    "#web": {
        "host": "localhost",
        "port": 80
    },
    "#database": {
        "type": "sqlite",
        "sqlite.table.token": "WildcardTokens",
        "sqlite.table.history": "WildcardHistory",
        "sqlite.timeout.connection": 7500,
        "sqlite.pool.max": 4,
        "sqlite.pool.min": 1,
        "mysql.table.token": "WildcardTokens",
        "mysql.table.history": "WildcardHistory",
        "mysql.timeout.connection": 7500,
        "mysql.pool.max": 8,
        "mysql.pool.min": 1,
        "mysql.host": "localhost",
        "mysql.port": 3306,
        "mysql.database": "root",
        "mysql.username": "root",
        "mysql.password": "password"
    },
    "#plugin": {
        "language": "en-uk",
        "cache.uuid.time": 600,
        "cache.token.time": 3600,
        "cache.wildcard.time": 1800,
        "cache.history.time": 300,
        "cache.message.time": 900,
        "cache.name.time": 300
    }
}

Translation
The plugin supports two languages by default
- [en-uk] English (United Kingdom)
- [de-de] Deutsch (Deutschland)


As of right now the plugin only uses one language at the time as I thought that would be enough, if multiple languages (basically per player languages) are needed then I can look into adding that.
The language is set in the settings.json and you can add as many languages to the plugin as you want.
To add a new language you only need to create a json file in the translation folder. I recommend using the short language code as the name of the file but that is not needed.
The content of the file is again, JSON.
Code (Text):
{
  "name": "English (United Kingdom)",
  "code": "en-uk",
  "keys": {
    "$plugin.name": "&#DB0F60Wildcard",
    "$plugin.prefix": "$plugin.name &8\u00BB&7",
    "unpermitted.join": [
      "&#DB0F60$server",
      "",
      "&#981442You are not allowed to join this server",
      "",
      "&7To get access you need to receive a Token from one of the Server members",
      "&7which you can be used on the server's register interface"
    ],
    "unpermitted.ban": [
      "&#DB0F60$server",
      "",
      "&#981442You were removed from the whitelist of the server",
      "",
      "&7You will no longer be able to join this server"
    ],
    "unpermitted.command": "$prefix You are lacking the permission '&#DB0F60$permission&7' to run this command!",
    "command.reload.start": "$prefix Reloading...",
    "command.reload.success": "$prefix &aReload executed successfully!",
    "command.reload.failed": [
      "$prefix &cReload failed!",
      "$prefix &cPlugin will now disable itself!"
    ],
    "command.database.unavailable": "$prefix Can't execute command, database is not available!",
    "command.target.invalid": "$prefix The target player '&#DB0F60$input&7' doesn't exist!",
    "command.target.specify": "$prefix Please specify a target player!",
    "command.execution.failed": "$prefix Failed to execute command '&#DB0F60$command&7'!",
    "command.execution.notfound": "$prefix The command '&#DB0F60$command&7' doesn't exist!",
    "command.deny.start": "$prefix Trying to deny '&#DB0F60$user&7'...",
    "command.deny.known": "$prefix The user '&#DB0F60$user&7' is not on the whitelist!",
    "command.deny.success": "$prefix The user '&#DB0F60$user&7' was successfully removed from the whitelist!",
    "command.deny.failed": "$prefix Failed to remove user '&#DB0F60$user&7' from the whitelist!",
    "command.allow.start": "$prefix Trying to allow '&#DB0F60$user&7'...",
    "command.allow.known": "$prefix The user '&#DB0F60$user&7' is already on the whitelist!",
    "command.allow.success": "$prefix The user '&#DB0F60$user&7' was successfully added to the whitelist!",
    "command.allow.failed": "$prefix Failed to add user '&#DB0F60$user&7' to the whitelist!",
    "command.get.other.start": "$prefix Trying to get Token of '&#DB0F60$user&7'...",
    "command.get.other.notfound": "$prefix The user '&#DB0F60$user&7' has no Token!",
    "command.get.other.found": "$prefix The Token of '&#DB0F60$user&7' has $uses Uses and expires on $expires!",
    "command.get.self.start": "$prefix Trying to get your Token...",
    "command.get.self.notfound": "$prefix You currently got no Token!",
    "command.get.self.found": "$prefix Your Token has $uses Uses and expires on $expires!",
    "command.create.other.start": "$prefix Trying to create Token for '&#DB0F60$user&7' if no Token is found...",
    "command.create.other.end": "$prefix The Token of '&#DB0F60$user&7' has $uses Uses and expires on $expires!",
    "command.create.other.notify": "$prefix Someone generated a Wildcard Token for you!",
    "command.create.self.start": "$prefix Trying to create your Token if no Token is found...",
    "command.create.self.end": "$prefix Your Token has $uses Uses and expires on $expires!",
    "command.history.get.other": "$prefix Trying to get History of '&#DB0F60$user&7'...",
    "command.history.get.self": "$prefix Trying to get your History...",
    "command.history.self": "yourself",
    "command.history.list.start": "$plugin.name &8- &7History of &#DB0F60W$name",
    "command.history.list.item.deny": [
      "&8[&#DB0F60W$idx&7] \u00BB &7",
      " $idxSize    &7Deny date: &#DB0F60W$time"
    ],
    "command.history.list.item.allow": [
      "&8[&#DB0F60W$idx&7] \u00BB &7",
      " $idxSize    &7Token owner: &#DB0F60W$ownerName &8(&7$onwerId&8)",
      " $idxSize    &7Allow date: &#DB0F60W$time"
    ],
    "command.history.list.page.next": "&7Page $page &8\u00BB",
    "command.history.list.page.info": " &8[ &7Page $page &8] ",
    "command.history.list.page.previous": "&8\u00AB &7Page $page",
    "command.history.list.end": "$plugin.name &8- &7History of &#DB0F60W$name",
    "command.action.token.copy": "&7Click to copy Token",
    "command.action.token.get": "&7Click to get Token Information",
    "command.action.page.next": "&7Click to go to the next page",
    "command.action.page.previous": "&7Click to go to the previous page",
    "webpage.title.submit": "Wildcard Submit",
    "webpage.title.success": "Wildcard Login Success",
    "webpage.header": "Wildcard System",
    "webpage.message.success": "You successfully logged into the Server Whitelist",
    "webpage.label.username": "Minecraft Username",
    "webpage.label.token": "Wildcard Token",
    "webpage.button.submit": "Submit"
  }
}
Code (Text):
{
  "name": "Deutsch (Deutschland)",
  "code": "de-de",
  "keys": {
    "$plugin.name": "&#DB0F60Wildcard",
    "$plugin.prefix": "$plugin.name &8\u00BB&7",
    "unpermitted.join": [
      "&#DB0F60$server",
      "",
      "&#981442Dir ist nicht erlaubt den Server zu betreten",
      "",
      "&7Um Zugriff auf den Server zu bekommen, musst du von einem Server Mitglied einen",
      "&7Token erhalten, den du dann in dem Registrations Panel des Servers verwenden kannst"
    ],
    "unpermitted.ban": [
      "&#DB0F60$server",
      "",
      "&#981442Du wurdest von der Gästeliste des Servers entfernt",
      "",
      "&7Du bist nun nicht mehr in der Lage dem Server beizutreten"
    ],
    "unpermitted.command": "$prefix Dir fehlt das Recht '&#DB0F60$permission&7' um diesen Befehl auszuführen!",
    "command.reload.start": "$prefix Lade neu...",
    "command.reload.success": "$prefix &aErfolgreich neugeladen!",
    "command.reload.failed": [
      "$prefix &cNeuladen fehlgeschlagen!",
      "$prefix &cDie Erweiterung wird sich nun selbst beenden!"
    ],
    "command.database.unavailable": "$prefix Dieser Befehl kann derzeit nicht ausgeführt werden, da die Datenbank nicht erreichbar ist!",
    "command.target.invalid": "$prefix Der angegebene Nutzer '&#DB0F60$input&7' existiert nicht!",
    "command.target.specify": "$prefix Bitte gebe einen Nutzer an!",
    "command.execution.failed": "$prefix Ausführen des Befehls '&#DB0F60$command&7' fehlgeschlagen!",
    "command.execution.notfound": "$prefix Der Befehl '&#DB0F60$command&7' existiert nicht!",
    "command.deny.start": "$prefix Versuche den Nutzer '&#DB0F60$user&7' zu sperren...",
    "command.deny.known": "$prefix Der Nutzer '&#DB0F60$user&7' ist nicht auf der Gästeliste!",
    "command.deny.success": "$prefix Der Nutzer '&#DB0F60$user&7' wurde erfolgreich von der Gästeliste entfernt!",
    "command.deny.failed": "$prefix Das Entfernen des Nutzers '&#DB0F60$user&7' von der Gästeliste ist fehlgeschlagen!",
    "command.allow.start": "$prefix Versuche den Nutzer '&#DB0F60$user&7' freizuschalten...",
    "command.allow.known": "$prefix Der Nutzer '&#DB0F60$user&7' ist bereits auf der Gästeliste!",
    "command.allow.success": "$prefix Der Nutzer '&#DB0F60$user&7' wurde erfolgreich zu der Gästeliste hinzugefügt!",
    "command.allow.failed": "$prefix Das Hinzufügen des Nutzers '&#DB0F60$user&7' zu der Gästeliste ist fehlgeschlagen!",
    "command.get.other.start": "$prefix Versuche den Token von dem Nutzer '&#DB0F60$user&7' abzurufen...",
    "command.get.other.notfound": "$prefix Der Nutzer '&#DB0F60$user&7' hat keinen Token!",
    "command.get.other.found": "$prefix Der Token von dem Nutzer '&#DB0F60$user&7' kann noch $uses mal benutzt werden und läuft am $expires ab!",
    "command.get.self.start": "$prefix Versuche deinen Token abzurufen...",
    "command.get.self.notfound": "$prefix Du hast derzeit keinen Token!",
    "command.get.self.found": "$prefix Dein Token kann noch $uses mal benutzt werden und läuft am $expires ab!",
    "command.create.other.start": "$prefix Versuche einen Token für den Nutzer '&#DB0F60$user&7' zu erstellen, falls er noch keinen hat...",
    "command.create.other.end": "$prefix Der Token von dem Nutzer '&#DB0F60$user&7' kann noch $uses mal benutzt werden und läuft am $expires ab!",
    "command.create.other.notify": "$prefix Jemand hat einen Wildcard Token für dich generiert!",
    "command.create.self.start": "$prefix Versuche einen Token für dich zu erstellen, falls du noch keinen hat...",
    "command.create.self.end": "$prefix Dein Token kann noch $uses mal benutzt werden und läuft am $expires ab!",
    "command.history.get.other": "$prefix Versuche den Verlauf von dem Nutzer '&#DB0F60$user&7' aufzurufen...",
    "command.history.get.self": "$prefix Versuche deinen Verlauf abzurufen...",
    "command.history.self": "dir",
    "command.history.list.start": "$plugin.name &8- &7Verlauf von &#DB0F60W$name",
    "command.history.list.item.deny": [
      "&8[&#DB0F60W$idx&7] \u00BB &7",
      " $idxSize    &7Sperr Datum: &#DB0F60W$time"
    ],
    "command.history.list.item.allow": [
      "&8[&#DB0F60W$idx&7] \u00BB &7",
      " $idxSize    &7Token Besitzer: &#DB0F60W$ownerName &8(&7$onwerId&8)",
      " $idxSize    &7Freischalt Datum: &#DB0F60W$time"
    ],
    "command.history.list.page.next": "&7Seite $page &8\\u00BB",
    "command.history.list.page.info": " &8[ &7Seite $page &8] ",
    "command.history.list.page.previous": "&8\u00AB &7Seite $page",
    "command.history.list.end": "$plugin.name &8- &7Verlauf von &#DB0F60W$name",
    "command.action.token.copy": "&7Drücke hier um den Token zu kopieren",
    "command.action.token.get": "&7Drücke hier um die Informationen des Tokens aufzurufen",
    "command.action.page.next": "&7Drücke hier um auf die nächste Seite zu kommen",
    "command.action.page.previous": "&7Drücke hier um auf die vorherige Seite zu kommen",
    "webpage.title.submit": "Wildcard Freischalten",
    "webpage.title.success": "Wildcard Freigeschaltet",
    "webpage.header": "Wildcard System",
    "webpage.message.success": "Du hast dich erfolgreich in die Gästeliste des Servers eingetragen!",
    "webpage.label.username": "Minecraft Username",
    "webpage.label.token": "Wildcard Token",
    "webpage.button.submit": "Freischalten"
  }
}
The language code is used to set the language in the config, I would recommend using the real language code but you can yeah, ignore that.
And the name is obviously the language name and again you can set it to whatever you like it doesn't really need to be set to the real language name but again I recommend doing so.

Compatibility

This plugin is compatible with Spigot and Bungeecord at the same time.
It is not required to install this plugin on both, only on one is required for it to work.

I didn't test if it works on other versions than 1.17 but it should work as well as on 1.17 as long as you got Java 11 installed.
So my target is to support 1.8 - latest with this plugin so if you run into any issues let me know on GitHub.


Other platforms
Wildcard is also available for other platforms which you can all see on our GitHub.

Reviews and Discussions
Reviews are reviews and not a place to ask for help.
If you need help then contact me over on GitHub.
I'm not opening spigot that often so it could be that I might answer quite late when it comes to reviews or posts in the discussions.

That's it, tell me if you need anything on GitHub or leave a review if you liked it / didn't liked it and maybe also include why :)
Resource Information
Author:
----------
Total Downloads: 387
First Release: Nov 29, 2021
Last Update: May 29, 2022
Category: ---------------
All-Time Rating:
1 ratings
Find more info at discord.gg...
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings