Sentinel | License Management Solution v2.3.0

Self-hosted license management that protects your software from unauthorized redistribution.
• Implemented proper Discord role tracking based on license connections. Customer and (new) sub-customer product roles are now properly synced and should be added/removed/updated when Discord connections are added/removed/updated from a license (or when a license is created/deleted with Discord connections).
• Added a new license sub-users feature (see below for more information). Sub-users are provided alongside other license information via the API under the "subUsers" JSON key. See wiki for example format.
• Renamed the "Edit Connections" option in the Discord bot to "Edit Connections and Sub-Users" to reflect the new Sub-Users field in the modal.
• Added the Discord command /addsubuser to quickly assign a Discord user as a sub-user of another Discord user's license. This command is simply a shortcut for convenience.
• Added the ability to assign a Discord role to Discord-based sub-users.

"Sub-users" of a license are designed for informational purposes only and do not serve any function in Sentinel itself. The sub-users system allows you to maintain a record of individuals/connections that are indirectly associated with a license. This can be particularly useful for tracking and identifying support needs.

For instance, consider a Minecraft server where the server owner holds the primary license. If a developer or administrator on the server requires customer support, you can add their Discord account as a sub-user to the owner's license. This helps in easily identifying and providing assistance to the relevant individual, even though they are not the primary license holder.

Configuration Changes
⚠️The following changes are mandatory if you are upgrading from an older version of Sentinel!

bot.yml
Add this section.
YAML:
# The role to give for each product when a Discord sub-user is added to a license.
# You can use the role name or role ID.
sub-user-product-roles:
  Example: "Sub-Customer"
Then, set the config-version value to 3.
• Added a "Search Licenses" option in Discord's user context menu. You can now instantly search for a Discord user's license by right-clicking their profile, going to Apps, and selecting Search Licenses.

1718139914013.png
• Added console, Discord, and file-based action logs for licenses. All license changes along with the executor (API or Discord user) will now be recorded.
• Added log files with daily rollover (new file every day).
• Fixed the API response from the licenses list endpoint potentially being inconsistent/unstable. The JSON format for this endpoint has changed (page information is now under the "page" object). Ensure that you update any wrappers to account for this.
• Improved the style of console logs (better aesthetics, less irrelevant information).
• Added a new log filter to remove several misleading/irrelevant console logs.
• Updated an external library.
• Added a "shutting down" log when the stop command is executed.

Configuration Changes
⚠️The following changes are mandatory if you are upgrading from an older version of Sentinel!

bots.yml
Add this section. The old "log-channel" option can be deleted.
YAML:
# Channels for license logs. You can use the channel name or the channel ID.
log-channels:
  # The channel for authentication-related logs.
  # You may want to separate this from other logs to prevent spam.
  auth: "license-auth-logs"
  # The channel for all other action logs.
  actions: "license-action-logs"
Then, set the config-version value at the top of the file to 2.

sentinel-java-wrapper v1.4.0
• Updated the Page deserialization method to account for the new JSON format.
• Added the ability to automatically remove inactive servers and IP addresses from a license upon authentication. This aims to prevent "dead" servers from taking up server/IP slots on a customer's license, reducing how often you need to "reset" licenses. This feature is disabled by default.
• Updated Spring.

⚠️ If you are upgrading from a lower Sentinel version, add the following section to your config.yml:
YAML:
# The threshold, in minutes since last use, at which a server/IP is considered "inactive".
# Inactive servers and IP addresses are removed from a license upon authentication.
# This prevents "dead" servers from taking up server/IP slots on a customer's license.
# The feature is disabled by default. However, a suggested value would be 129600 (90 days).
# A value of 129600 would mean that servers/IPs that have not been used in 90 days are purged.
inactive-thresholds:
  # The threshold for servers.
  servers: -1
  # The threshold for IP addresses.
  ip-addresses: -1
• Added a highly efficient endpoint capable of returning thousands of licenses for any given product. Click here to learn more.
• Licenses for a product can now be listed in paginated menus via the Discord bot using /listlicenses.
• Added the LIST_LICENSES (plural) permission to restrict the new license listing feature.
• Updated all dependencies to the latest version for improved performance and security.

More about License Listing
When a list of licenses for a product is requested, the licenses will be returned in "pages" to ensure rapid responses and low server load. By default, the API will return 100 licenses per page (customizable) and the Discord bot will show 10 licenses per page. The Discord bot also shows a small warning icon beside licenses that have been blacklisted and has a select menu so you can quickly view more information about any license on the page. Try it out! The command is disabled for non-admin members by default.

⚠️ License listing requires the LIST_LICENSES API permission. Ensure that you add it under relevant API keys in config.yml if you are upgrading to v1.6.0.

sentinel-java-wrapper v1.3.0
• Added the LicenseController#list(String, int, int) method.
• Added a token-based intervaled rate limit system to prevent API abuse. Each API key can now be limited to a customizable number of requests per a customizable duration. See below for more information!
• Made all error responses follow the standard API response format to maintain consistency. Previously, user-related errors (i.e. missing authentication header) were in one format while Sentinel-related responses were in another. This has been fixed.
• Added custom error handling for more errors (i.e. 404 not found). These errors should now return proper API responses instead of a random "Whitelabel Error Page".
• Implemented a nice Sentinel landing page for the default path (usually /api/v1) since the "Whitelabel Error Page" was confusing.
• Added a "Change Selection" option to the "license edit" select menu for accessibility.
• Limited the "user's licenses" select menu to 25 options to fix an error that would occur if the number of options exceed that (Discord limitation).
• Removed the useless/unused Spring documentation dependencies (spring-docs and swagger).
• Updated dependencies.

⚠️IMPORTANT CONFIGURATION UPDATES⚠️
The # Misc section in application.yml should look like the following to take full advantage of this update:
YAML:
# Misc
spring.application.name: "Sentinel"
server.servlet.context-path: "/api/v1"
spring.mvc.throw-exception-if-no-handler-found: true
spring.web.resources.add-mappings: false
There is a GENEROUS default rate limit of 200 requests per 1 minute for all existing and new users/keys that do not have the rate-limit and rate-limit-period options exemplified below (config.yml).
YAML:
# Example "users" section (you already have this!).
users:
  ExampleUser:
    api-key: ""
    # NEW: The number of requests allowed per 'rate-limit-period' minutes using this API key.
    rate-limit: 50
    # NEW: The period, in minutes, at which the rate limit is reset.
    # Ex. If 'rate-limit' is 100 and the period is 60, then the limit is 100 requests per hour.
    rate-limit-period: 1
    permissions: []
• Added a connection mismatch check verifying if a provided connection platform's value matches the one set on the license (for authentication). If the provided connection value does not match the one on record, a 403 Forbidden response with the type "CONNECTION_MISMATCH" will be returned.

sentinel-java-wrapper 1.2.0
• Added a ConnectionMismatchException that may be thrown on authentication if the provided connection value does not match the one on record.
• Due to unforeseen issues with the recent Spring Boot 3.1.0 upgrade, we're reverting to version 3.0.6. This should address the majority of MongoDB-related errors that have popped up without any significant impact on the performance or security of the application.
Buy a license now
$29.99
EULA
Standard EULA
Use on any projects you own with attribution
Support
Standard
Includes:
Download the resource
Access new updates
Support from the creator
Enhanced
+ $12.00
Includes Standard support plus:
Installation & setup
Support duration
Lifetime
Extras
Source Code
+ $199.00
Share and earn
Refer this resource and earn a 15% commission.
21,500 Views
136 Purchases
148 Downloads
Apr 16, 2023 Published
Jun 29, 2026 Updated
5.00 star(s)
Average rating (8)
85.2 MB File size
Open source
  1. No
DRM-free
  1. No
Unobfuscated
  1. No
Type
  1. Business
  1. License management
Supported languages
  1. English
Creator
Owner
Recommended for you
Quick and flawless permission management, done through stunning GUI menus! (Permissons Plugin Addon)
5.00 star(s) 24 ratings
236 purchases
Self-hosted Discord Bot for managing advanced embed messages through YAML files.
5.00 star(s) 11 ratings
35 purchases
Free Tebex Plus, Forum, Store, Blog, Support, Leaderboards, Wiki, Shared Hosting Support and more!
5.00 star(s) 5 ratings
594 purchases
Unlock your potential with a sellix.io website template!
5.00 star(s) 10 ratings
324 purchases
Your self-hosted donation store for Minecraft server (Tebex/CraftingStore analogue).
5.00 star(s) 63 ratings
214 purchases
Share and earn
Refer this resource and earn a 15% commission.
21,500 Views
136 Purchases
148 Downloads
Apr 16, 2023 Published
Jun 29, 2026 Updated
5.00 star(s)
Average rating (8)
85.2 MB File size
Open source
  1. No
DRM-free
  1. No
Unobfuscated
  1. No
Type
  1. Business
  1. License management
Supported languages
  1. English
Creator
Owner
Recommended for you
Quick and flawless permission management, done through stunning GUI menus! (Permissons Plugin Addon)
5.00 star(s) 24 ratings
236 purchases
Self-hosted Discord Bot for managing advanced embed messages through YAML files.
5.00 star(s) 11 ratings
35 purchases
Free Tebex Plus, Forum, Store, Blog, Support, Leaderboards, Wiki, Shared Hosting Support and more!
5.00 star(s) 5 ratings
594 purchases
Unlock your potential with a sellix.io website template!
5.00 star(s) 10 ratings
324 purchases
Your self-hosted donation store for Minecraft server (Tebex/CraftingStore analogue).
5.00 star(s) 63 ratings
214 purchases
Top