Add 12 more plugins (Events, Tickets, Bans, VPN, Permissions, Teams, RCON, Audit, Email, Maintenance, Rooms, Translations)
Local Build and Deploy / deploy (push) Successful in 1m10s

Total: 24 plugins now registered and visible in the Plugins hub admin panel.
This commit is contained in:
openhands committed 2026-07-18 14:26:03 +02:00
1 parent b40cac775c
commit bbdc94870a
13 files changed
+254

No files matched your search

+24
View File
@@ -11,6 +11,18 @@ import socialPlugin from "@/plugins/social";
import seoPlugin from "@/plugins/seo";
import securityPlugin from "@/plugins/security";
import apiPlugin from "@/plugins/api";
import eventsPlugin from "@/plugins/events";
import ticketsPlugin from "@/plugins/tickets";
import bansPlugin from "@/plugins/bans";
import vpnPlugin from "@/plugins/vpn";
import permissionsPlugin from "@/plugins/permissions";
import teamsPlugin from "@/plugins/teams";
import rconPlugin from "@/plugins/rcon";
import auditPlugin from "@/plugins/audit";
import emailPlugin from "@/plugins/email";
import maintenancePlugin from "@/plugins/maintenance";
import roomsPlugin from "@/plugins/rooms";
import translationsPlugin from "@/plugins/translations";
pluginRegistry.register(gamesPlugin);
pluginRegistry.register(radioPlugin);
@@ -24,6 +36,18 @@ pluginRegistry.register(socialPlugin);
pluginRegistry.register(seoPlugin);
pluginRegistry.register(securityPlugin);
pluginRegistry.register(apiPlugin);
pluginRegistry.register(eventsPlugin);
pluginRegistry.register(ticketsPlugin);
pluginRegistry.register(bansPlugin);
pluginRegistry.register(vpnPlugin);
pluginRegistry.register(permissionsPlugin);
pluginRegistry.register(teamsPlugin);
pluginRegistry.register(rconPlugin);
pluginRegistry.register(auditPlugin);
pluginRegistry.register(emailPlugin);
pluginRegistry.register(maintenancePlugin);
pluginRegistry.register(roomsPlugin);
pluginRegistry.register(translationsPlugin);
export function ensurePluginsLoaded(): void {
// Plugins registered at import time
+20
View File
@@ -0,0 +1,20 @@
import { ClipboardList } from "lucide-react";
import type { PluginDefinition } from "@/lib/plugins";
const plugin: PluginDefinition = {
id: "audit",
name: "Audit & Housekeeping",
description: "Audit logs, staff action logging, trade logs, chat logs and command logs",
version: "1.0.0",
enabled: true,
configFields: [
{ key: "log_staff_actions", label: "Log staff actions", type: "boolean", default: true },
{ key: "log_trades", label: "Log trades", type: "boolean", default: true },
{ key: "log_chat", label: "Log room chat", type: "boolean", default: true },
{ key: "log_commands", label: "Log player commands", type: "boolean", default: true },
{ key: "retention_days", label: "Log retention (days)", type: "text", default: "90" },
{ key: "min_rank_to_view_logs", label: "Min rank to view logs", type: "text", default: "6" },
],
};
export default plugin;
+19
View File
@@ -0,0 +1,19 @@
import { Ban } from "lucide-react";
import type { PluginDefinition } from "@/lib/plugins";
const plugin: PluginDefinition = {
id: "bans",
name: "Bans & IP Management",
description: "User bans, IP bans, machine bans and IP address management",
version: "1.0.0",
enabled: true,
configFields: [
{ key: "enable_ip_bans", label: "Enable IP bans", type: "boolean", default: true },
{ key: "enable_machine_bans", label: "Enable machine (HWID) bans", type: "boolean", default: true },
{ key: "ban_appeal_enabled", label: "Enable ban appeals", type: "boolean", default: false },
{ key: "max_bans_per_ip", label: "Max bans before permanent", type: "text", default: "3" },
{ key: "auto_ban_duration_days", label: "Auto-ban duration (days)", type: "text", default: "7" },
],
};
export default plugin;
+20
View File
@@ -0,0 +1,20 @@
import { Mail } from "lucide-react";
import type { PluginDefinition } from "@/lib/plugins";
const plugin: PluginDefinition = {
id: "email",
name: "Email & Templates",
description: "Email templates, SMTP configuration, password reset emails and notifications",
version: "1.0.0",
enabled: true,
configFields: [
{ key: "enable_email", label: "Enable email system", type: "boolean", default: true },
{ key: "smtp_host", label: "SMTP host", type: "text", default: "" },
{ key: "smtp_port", label: "SMTP port", type: "text", default: "587" },
{ key: "smtp_encryption", label: "SMTP encryption", type: "select", options: [{ label: "TLS", value: "tls" }, { label: "SSL", value: "ssl" }, { label: "None", value: "none" }], default: "tls" },
{ key: "from_address", label: "From address", type: "text", default: "[email protected]" },
{ key: "enable_password_reset", label: "Enable password reset emails", type: "boolean", default: true },
],
};
export default plugin;
+19
View File
@@ -0,0 +1,19 @@
import { Calendar } from "lucide-react";
import type { PluginDefinition } from "@/lib/plugins";
const plugin: PluginDefinition = {
id: "events",
name: "Events & Polls",
description: "Hotel events, calendar, polls and giveaways",
version: "1.0.0",
enabled: true,
configFields: [
{ key: "enable_events", label: "Enable hotel events", type: "boolean", default: true },
{ key: "enable_polls", label: "Enable polls", type: "boolean", default: true },
{ key: "enable_calendar", label: "Enable calendar", type: "boolean", default: true },
{ key: "auto_approve_events", label: "Auto-approve user-submitted events", type: "boolean", default: false },
{ key: "max_events_per_page", label: "Events per page", type: "text", default: "12" },
],
};
export default plugin;
+19
View File
@@ -0,0 +1,19 @@
import { Wrench } from "lucide-react";
import type { PluginDefinition } from "@/lib/plugins";
const plugin: PluginDefinition = {
id: "maintenance",
name: "Maintenance & System",
description: "Maintenance mode, favicon, emulator config sync and system health",
version: "1.0.0",
enabled: true,
configFields: [
{ key: "enable_maintenance", label: "Enable maintenance mode toggle", type: "boolean", default: true },
{ key: "enable_favicon", label: "Enable favicon manager", type: "boolean", default: true },
{ key: "enable_emulator_sync", label: "Enable emulator config sync", type: "boolean", default: true },
{ key: "maintenance_message", label: "Default maintenance message", type: "text", default: "We are currently undergoing maintenance. Check back soon!" },
{ key: "allowed_ips_during_maintenance", label: "Allowed IPs during maintenance", type: "text", default: "" },
],
};
export default plugin;
+18
View File
@@ -0,0 +1,18 @@
import { Key } from "lucide-react";
import type { PluginDefinition } from "@/lib/plugins";
const plugin: PluginDefinition = {
id: "permissions",
name: "Permissions & Ranks",
description: "Rank management, permission ACLs, staff levels and role-based access control",
version: "1.0.0",
enabled: true,
configFields: [
{ key: "enable_custom_ranks", label: "Enable custom rank creation", type: "boolean", default: true },
{ key: "log_permission_changes", label: "Log permission changes", type: "boolean", default: true },
{ key: "min_rank_to_manage_perms", label: "Minimum rank to manage permissions", type: "text", default: "7" },
{ key: "enable_rank_inheritance", label: "Enable rank permission inheritance", type: "boolean", default: true },
],
};
export default plugin;
+19
View File
@@ -0,0 +1,19 @@
import { Terminal } from "lucide-react";
import type { PluginDefinition } from "@/lib/plugins";
const plugin: PluginDefinition = {
id: "rcon",
name: "RCON Command Center",
description: "Remote console, emulator commands, room management and server tools",
version: "1.0.0",
enabled: true,
configFields: [
{ key: "enable_rcon", label: "Enable RCON", type: "boolean", default: true },
{ key: "enable_command_center", label: "Enable command center UI", type: "boolean", default: true },
{ key: "log_commands", label: "Log all RCON commands", type: "boolean", default: true },
{ key: "min_rank_to_use", label: "Minimum rank to use RCON", type: "text", default: "7" },
{ key: "command_timeout_ms", label: "Command timeout (ms)", type: "text", default: "5000" },
],
};
export default plugin;
+19
View File
@@ -0,0 +1,19 @@
import { DoorOpen } from "lucide-react";
import type { PluginDefinition } from "@/lib/plugins";
const plugin: PluginDefinition = {
id: "rooms",
name: "Room Management",
description: "Room listing, room search, room moderation and room import/export",
version: "1.0.0",
enabled: true,
configFields: [
{ key: "enable_room_listing", label: "Enable room listing page", type: "boolean", default: true },
{ key: "enable_room_search", label: "Enable room search", type: "boolean", default: true },
{ key: "enable_room_moderation", label: "Enable room moderation tools", type: "boolean", default: true },
{ key: "rooms_per_page", label: "Rooms per page", type: "text", default: "20" },
{ key: "min_rank_to_moderate_rooms", label: "Min rank to moderate rooms", type: "text", default: "5" },
],
};
export default plugin;
+19
View File
@@ -0,0 +1,19 @@
import { Users } from "lucide-react";
import type { PluginDefinition } from "@/lib/plugins";
const plugin: PluginDefinition = {
id: "teams",
name: "Applications & Teams",
description: "Staff applications, team management and recruitment system",
version: "1.0.0",
enabled: true,
configFields: [
{ key: "enable_applications", label: "Enable staff applications", type: "boolean", default: true },
{ key: "enable_teams", label: "Enable team pages", type: "boolean", default: true },
{ key: "min_age_days", label: "Minimum account age to apply (days)", type: "text", default: "30" },
{ key: "auto_reject_after_days", label: "Auto-reject after (days)", type: "text", default: "14" },
{ key: "max_open_applications", label: "Max open applications per user", type: "text", default: "1" },
],
};
export default plugin;
+19
View File
@@ -0,0 +1,19 @@
import { Ticket } from "lucide-react";
import type { PluginDefinition } from "@/lib/plugins";
const plugin: PluginDefinition = {
id: "tickets",
name: "Support Tickets",
description: "Help center, support tickets, FAQ and contact forms",
version: "1.0.0",
enabled: true,
configFields: [
{ key: "enable_tickets", label: "Enable support tickets", type: "boolean", default: true },
{ key: "enable_faq", label: "Enable FAQ/help center", type: "boolean", default: true },
{ key: "auto_assign", label: "Auto-assign tickets to staff", type: "boolean", default: true },
{ key: "max_tickets_per_user", label: "Max open tickets per user", type: "text", default: "5" },
{ key: "response_timeout_hours", label: "Response timeout (hours)", type: "text", default: "72" },
],
};
export default plugin;
+19
View File
@@ -0,0 +1,19 @@
import { Languages } from "lucide-react";
import type { PluginDefinition } from "@/lib/plugins";
const plugin: PluginDefinition = {
id: "translations",
name: "Translation Tools",
description: "Multi-language CMS translations, import/export and i18n management",
version: "1.0.0",
enabled: true,
configFields: [
{ key: "enable_translations", label: "Enable translation editor", type: "boolean", default: true },
{ key: "enable_import_export", label: "Enable translation import/export", type: "boolean", default: true },
{ key: "default_language", label: "Default language", type: "text", default: "en" },
{ key: "supported_languages", label: "Supported languages (comma-separated)", type: "text", default: "en,nl,fr,de,es" },
{ key: "enable_auto_translate", label: "Enable auto-translate suggestions", type: "boolean", default: false },
],
};
export default plugin;
+20
View File
@@ -0,0 +1,20 @@
import { ShieldAlert } from "lucide-react";
import type { PluginDefinition } from "@/lib/plugins";
const plugin: PluginDefinition = {
id: "vpn",
name: "VPN & Proxy Detection",
description: "VPN, proxy and TOR detection for registration and login security",
version: "1.0.0",
enabled: true,
configFields: [
{ key: "block_vpn", label: "Block VPN registrations", type: "boolean", default: true },
{ key: "block_proxy", label: "Block proxy registrations", type: "boolean", default: true },
{ key: "block_tor", label: "Block TOR exit nodes", type: "boolean", default: true },
{ key: "block_on_login", label: "Block VPN users on login", type: "boolean", default: false },
{ key: "api_key", label: "Detection API key", type: "text", default: "" },
{ key: "cache_results_minutes", label: "Cache results (minutes)", type: "text", default: "60" },
],
};
export default plugin;