Merge branch 'dev-1.10.0' into future-notes-and-expiry

This commit is contained in:
Luke Gustafson
2025-12-19 20:39:09 -06:00
committed by GitHub
85 changed files with 19483 additions and 2727 deletions

View File

@@ -59,7 +59,6 @@
"keyTypeRSA": "RSA",
"keyTypeECDSA": "ECDSA",
"keyTypeEd25519": "Ed25519",
"updateCredential": "Update Credential",
"basicInfo": "Basic Info",
"authentication": "Authentication",
"organization": "Organization",
@@ -119,7 +118,6 @@
"credentialSecuredDescription": "All sensitive data is encrypted with AES-256",
"passwordAuthentication": "Password Authentication",
"keyAuthentication": "Key Authentication",
"keyType": "Key Type",
"securityReminder": "Security Reminder",
"securityReminderText": "Never share your credentials. All data is encrypted at rest.",
"hostsUsingCredential": "Hosts Using This Credential",
@@ -299,7 +297,7 @@
"warning": "Warning",
"info": "Info",
"success": "Success",
"loading": "Loading",
"loading": "Loading...",
"required": "Required",
"optional": "Optional",
"connect": "Connect",
@@ -315,7 +313,6 @@
"updateAvailable": "Update Available",
"sshPath": "SSH Path",
"localPath": "Local Path",
"loading": "Loading...",
"noAuthCredentials": "No authentication credentials available for this SSH host",
"noReleases": "No Releases",
"updatesAndReleases": "Updates & Releases",
@@ -330,13 +327,10 @@
"resetPassword": "Reset Password",
"resetCode": "Reset Code",
"newPassword": "New Password",
"sshPath": "SSH Path",
"localPath": "Local Path",
"folder": "Folder",
"file": "File",
"renamedSuccessfully": "renamed successfully",
"deletedSuccessfully": "deleted successfully",
"noAuthCredentials": "No authentication credentials available for this SSH host",
"noTunnelConnections": "No tunnel connections configured",
"sshTools": "SSH Tools",
"english": "English",
@@ -348,14 +342,12 @@
"login": "Login",
"logout": "Logout",
"register": "Register",
"username": "Username",
"password": "Password",
"version": "Version",
"confirmPassword": "Confirm Password",
"back": "Back",
"email": "Email",
"submit": "Submit",
"cancel": "Cancel",
"change": "Change",
"save": "Save",
"saving": "Saving...",
@@ -363,22 +355,15 @@
"edit": "Edit",
"add": "Add",
"search": "Search",
"loading": "Loading...",
"error": "Error",
"success": "Success",
"warning": "Warning",
"info": "Info",
"confirm": "Confirm",
"yes": "Yes",
"no": "No",
"ok": "OK",
"close": "Close",
"enabled": "Enabled",
"disabled": "Disabled",
"important": "Important",
"notEnabled": "Not Enabled",
"settingUp": "Setting up...",
"back": "Back",
"next": "Next",
"previous": "Previous",
"refresh": "Refresh",
@@ -402,7 +387,11 @@
"documentation": "Documentation",
"retry": "Retry",
"checking": "Checking...",
"checkingDatabase": "Checking database connection..."
"checkingDatabase": "Checking database connection...",
"actions": "Actions",
"remove": "Remove",
"revoke": "Revoke",
"create": "Create"
},
"nav": {
"home": "Home",
@@ -431,7 +420,7 @@
"userManagement": "User Management",
"makeAdmin": "Make Admin",
"removeAdmin": "Remove Admin",
"deleteUser": "Delete User",
"deleteUser": "Delete user {{username}}? This cannot be undone.",
"allowRegistration": "Allow Registration",
"oidcSettings": "OIDC Settings",
"clientId": "Client ID",
@@ -485,7 +474,6 @@
"removeAdminStatus": "Remove admin status from {{username}}?",
"adminStatusRemoved": "Admin status removed from {{username}}",
"failedToRemoveAdminStatus": "Failed to remove admin status",
"deleteUser": "Delete user {{username}}? This cannot be undone.",
"userDeletedSuccessfully": "User {{username}} deleted successfully",
"failedToDeleteUser": "Failed to delete user",
"overrideUserInfoUrl": "Override User Info URL (not required)",
@@ -563,7 +551,6 @@
"verificationCompleted": "Compatibility verification completed - no data was changed",
"verificationInProgress": "Verification completed",
"dataMigrationCompleted": "Data migration completed successfully!",
"migrationCompleted": "Migration completed",
"verificationFailed": "Compatibility verification failed",
"migrationFailed": "Migration failed",
"runningVerification": "Running compatibility verification...",
@@ -641,7 +628,8 @@
"requiresPasswordLogin": "Requires password login enabled",
"passwordLoginDisabledWarning": "Password login is disabled. Ensure OIDC is properly configured or you will not be able to log in to Termix.",
"oidcRequiredWarning": "CRITICAL: Password login is disabled. If you reset or misconfigure OIDC, you will lose all access to Termix and brick your instance. Only proceed if you are absolutely certain.",
"confirmDisableOIDCWarning": "WARNING: You are about to disable OIDC while password login is also disabled. This will brick your Termix instance and you will lose all access. Are you absolutely sure you want to proceed?"
"confirmDisableOIDCWarning": "WARNING: You are about to disable OIDC while password login is also disabled. This will brick your Termix instance and you will lose all access. Are you absolutely sure you want to proceed?",
"failedToUpdatePasswordLoginStatus": "Failed to update password login status"
},
"hosts": {
"title": "Host Manager",
@@ -652,6 +640,7 @@
"failedToLoadHosts": "Failed to load hosts",
"retry": "Retry",
"refresh": "Refresh",
"optional": "Optional",
"hostsCount": "{{count}} hosts",
"importJson": "Import JSON",
"importing": "Importing...",
@@ -903,6 +892,47 @@
"searchServers": "Search servers...",
"noServerFound": "No server found",
"jumpHostsOrder": "Connections will be made in order: Jump Host 1 → Jump Host 2 → ... → Target Server",
"socks5Proxy": "SOCKS5 Proxy",
"socks5Description": "Configure SOCKS5 proxy for SSH connection. All traffic will be routed through the specified proxy server.",
"enableSocks5": "Enable SOCKS5 Proxy",
"enableSocks5Description": "Use SOCKS5 proxy for this SSH connection",
"socks5Host": "Proxy Host",
"socks5Port": "Proxy Port",
"socks5Username": "Proxy Username",
"socks5Password": "Proxy Password",
"socks5UsernameOptional": "Optional: leave empty if proxy doesn't require authentication",
"socks5PasswordOptional": "Optional: leave empty if proxy doesn't require authentication",
"socks5ProxyChain": "Proxy Chain",
"socks5ProxyChainDescription": "Configure a chain of SOCKS proxies. Each proxy in the chain will connect through the previous one.",
"socks5ProxyMode": "Proxy Mode",
"socks5UseSingleProxy": "Use Single Proxy",
"socks5UseProxyChain": "Use Proxy Chain",
"socks5UsePreset": "Use Saved Preset",
"socks5SelectPreset": "Select Preset",
"socks5ManagePresets": "Manage Presets",
"socks5ProxyNode": "Proxy {{number}}",
"socks5AddProxy": "Add Proxy to Chain",
"socks5RemoveProxy": "Remove Proxy",
"socks5ProxyType": "Proxy Type",
"socks5SaveAsPreset": "Save as Preset",
"socks5SavePresetTitle": "Save Proxy Chain as Preset",
"socks5SavePresetDescription": "Save the current proxy chain configuration as a reusable preset",
"socks5PresetName": "Preset Name",
"socks5PresetDescription": "Description (optional)",
"socks5PresetCreated": "Proxy chain preset created",
"socks5PresetUpdated": "Proxy chain preset updated",
"socks5PresetDeleted": "Proxy chain preset deleted",
"socks5PresetSaved": "Preset \"{{name}}\" saved successfully",
"socks5PresetSaveError": "Failed to save preset",
"socks5PresetNameRequired": "Preset name is required",
"socks5EmptyChainError": "Cannot save an empty proxy chain",
"socks5ProxyChainEmpty": "Add at least one proxy to the chain",
"socks5HostDescription": "Hostname or IP address of the SOCKS proxy server",
"socks5PortDescription": "Port number of the SOCKS proxy server (default: 1080)",
"addProxyNode": "Add Proxy Node",
"noProxyNodes": "No proxy nodes configured. Click 'Add Proxy Node' to add one.",
"proxyNode": "Proxy Node",
"proxyType": "Proxy Type",
"quickActions": "Quick Actions",
"quickActionsDescription": "Quick actions allow you to create custom buttons that execute SSH snippets on this server. These buttons will appear at the top of the Server Stats page for quick access.",
"quickActionsList": "Quick Actions List",
@@ -910,7 +940,9 @@
"quickActionName": "Action name",
"noSnippetFound": "No snippet found",
"quickActionsOrder": "Quick action buttons will appear in the order listed above on the Server Stats page",
"advancedAuthSettings": "Advanced Authentication Settings"
"advancedAuthSettings": "Advanced Authentication Settings",
"sudoPasswordAutoFill": "Sudo Password Auto-Fill",
"sudoPasswordAutoFillDesc": "Automatically offer to insert SSH password when sudo prompts for password"
},
"terminal": {
"title": "Terminal",
@@ -948,7 +980,11 @@
"totpRequired": "Two-Factor Authentication Required",
"totpCodeLabel": "Verification Code",
"totpPlaceholder": "000000",
"totpVerify": "Verify"
"totpVerify": "Verify",
"sudoPasswordPopupTitle": "Insert Password?",
"sudoPasswordPopupHint": "Press Enter to insert, Esc to dismiss",
"sudoPasswordPopupConfirm": "Insert",
"sudoPasswordPopupDismiss": "Dismiss"
},
"fileManager": {
"title": "File Manager",
@@ -1050,7 +1086,6 @@
"copyPaths": "Copy Paths",
"delete": "Delete",
"properties": "Properties",
"preview": "Preview",
"refresh": "Refresh",
"downloadFiles": "Download {{count}} files to Browser",
"copyFiles": "Copy {{count}} items",
@@ -1065,18 +1100,11 @@
"failedToDeleteItem": "Failed to delete item",
"itemRenamedSuccessfully": "{{type}} renamed successfully",
"failedToRenameItem": "Failed to rename item",
"upload": "Upload",
"download": "Download",
"newFile": "New File",
"newFolder": "New Folder",
"rename": "Rename",
"delete": "Delete",
"permissions": "Permissions",
"size": "Size",
"modified": "Modified",
"path": "Path",
"fileName": "File Name",
"folderName": "Folder Name",
"confirmDelete": "Are you sure you want to delete {{name}}?",
"uploadSuccess": "File uploaded successfully",
"uploadFailed": "File upload failed",
@@ -1096,10 +1124,7 @@
"fileSavedSuccessfully": "File saved successfully",
"saveTimeout": "Save operation timed out. The file may have been saved successfully, but the operation took too long to complete. Check the Docker logs for confirmation.",
"failedToSaveFile": "Failed to save file",
"folder": "Folder",
"file": "File",
"deletedSuccessfully": "deleted successfully",
"failedToDeleteItem": "Failed to delete item",
"connectToServer": "Connect to a Server",
"selectServerToEdit": "Select a server from the sidebar to start editing files",
"fileOperations": "File Operations",
@@ -1156,10 +1181,8 @@
"unpinFile": "Unpin file",
"removeShortcut": "Remove shortcut",
"saveFilesToSystem": "Save {{count}} files as...",
"saveToSystem": "Save as...",
"pinFile": "Pin file",
"addToShortcuts": "Add to shortcuts",
"selectLocationToSave": "Select location to save",
"downloadToDefaultLocation": "Download to default location",
"pasteFailed": "Paste failed",
"noUndoableActions": "No undoable actions",
@@ -1177,7 +1200,6 @@
"editPath": "Edit path",
"confirm": "Confirm",
"cancel": "Cancel",
"folderName": "Folder name",
"find": "Find...",
"replaceWith": "Replace with...",
"replace": "Replace",
@@ -1203,23 +1225,18 @@
"outdent": "Outdent",
"autoComplete": "Auto Complete",
"imageLoadError": "Failed to load image",
"zoomIn": "Zoom In",
"zoomOut": "Zoom Out",
"rotate": "Rotate",
"originalSize": "Original Size",
"startTyping": "Start typing...",
"unknownSize": "Unknown size",
"fileIsEmpty": "File is empty",
"modified": "Modified",
"largeFileWarning": "Large File Warning",
"largeFileWarningDesc": "This file is {{size}} in size, which may cause performance issues when opened as text.",
"fileNotFoundAndRemoved": "File \"{{name}}\" not found and has been removed from recent/pinned files",
"failedToLoadFile": "Failed to load file: {{error}}",
"serverErrorOccurred": "Server error occurred. Please try again later.",
"fileSavedSuccessfully": "File saved successfully",
"autoSaveFailed": "Auto-save failed",
"fileAutoSaved": "File auto-saved",
"fileDownloadedSuccessfully": "File downloaded successfully",
"moveFileFailed": "Failed to move {{name}}",
"moveOperationFailed": "Move operation failed",
"canOnlyCompareFiles": "Can only compare two files",
@@ -1313,17 +1330,8 @@
"local": "Local",
"remote": "Remote",
"dynamic": "Dynamic",
"noSshTunnels": "No SSH Tunnels",
"createFirstTunnelMessage": "Create your first SSH tunnel to get started. Use the SSH Manager to add hosts with tunnel connections.",
"unknownConnectionStatus": "Unknown",
"connected": "Connected",
"connecting": "Connecting...",
"disconnecting": "Disconnecting...",
"disconnected": "Disconnected",
"portMapping": "Port {{sourcePort}} → {{endpointHost}}:{{endpointPort}}",
"disconnect": "Disconnect",
"connect": "Connect",
"canceling": "Canceling...",
"endpointHostNotFound": "Endpoint host not found",
"discord": "Discord",
"githubIssue": "GitHub issue",
@@ -1336,7 +1344,7 @@
"disk": "Disk",
"network": "Network",
"uptime": "Uptime",
"loadAverage": "Load Average",
"loadAverage": "Avg: {{avg1}}, {{avg5}}, {{avg15}}",
"processes": "Processes",
"connections": "Connections",
"usage": "Usage",
@@ -1352,7 +1360,6 @@
"cpuCores_one": "{{count}} CPU",
"cpuCores_other": "{{count}} CPUs",
"naCpus": "N/A CPU(s)",
"loadAverage": "Avg: {{avg1}}, {{avg5}}, {{avg15}}",
"loadAverageNA": "Avg: N/A",
"cpuUsage": "CPU Usage",
"memoryUsage": "Memory Usage",
@@ -1371,7 +1378,6 @@
"totpRequired": "TOTP Authentication Required",
"totpUnavailable": "Server Stats unavailable for TOTP-enabled servers",
"load": "Load",
"available": "Available",
"editLayout": "Edit Layout",
"cancelEdit": "Cancel",
"addWidget": "Add Widget",
@@ -1510,7 +1516,9 @@
"authenticating": "Authenticating...",
"dataLossWarning": "Resetting your password this way will delete all your saved SSH hosts, credentials, and other encrypted data. This action cannot be undone. Only use this if you have forgotten your password and are not logged in.",
"authenticationDisabled": "Authentication Disabled",
"authenticationDisabledDesc": "All authentication methods are currently disabled. Please contact your administrator."
"authenticationDisabledDesc": "All authentication methods are currently disabled. Please contact your administrator.",
"passwordResetSuccess": "Password Reset Successful",
"passwordResetSuccessDesc": "Your password has been reset successfully. You can now log in with your new password."
},
"errors": {
"notFound": "Page not found",
@@ -1588,6 +1596,8 @@
"fileColorCodingDesc": "Color-code files by type: folders (red), files (blue), symlinks (green)",
"commandAutocomplete": "Command Autocomplete",
"commandAutocompleteDesc": "Enable Tab key autocomplete suggestions for terminal commands based on your command history",
"defaultSnippetFoldersCollapsed": "Collapse Snippet Folders by Default",
"defaultSnippetFoldersCollapsedDesc": "When enabled, all snippet folders will be collapsed when you open the snippets tab",
"currentPassword": "Current Password",
"passwordChangedSuccess": "Password changed successfully! Please log in again.",
"failedToChangePassword": "Failed to change password. Please check your current password and try again."
@@ -1636,7 +1646,12 @@
"folderName": "Enter folder name",
"fullPath": "Enter full path to item",
"currentPath": "Enter current path to item",
"newName": "Enter new name"
"newName": "Enter new name",
"socks5Host": "127.0.0.1",
"socks5Username": "proxy username",
"socks5Password": "proxy password",
"socks5PresetName": "e.g., Work VPN Chain",
"socks5PresetDescription": "e.g., Proxy chain for accessing work servers"
},
"leftSidebar": {
"failedToLoadHosts": "Failed to load hosts",
@@ -1676,7 +1691,6 @@
"deleteItem": "Delete Item",
"createNewFile": "Create New File",
"createNewFolder": "Create New Folder",
"deleteItem": "Delete Item",
"renameItem": "Rename Item",
"clickToSelectFile": "Click to select a file",
"noSshHosts": "No SSH Hosts",
@@ -1806,6 +1820,172 @@
"ram": "RAM",
"notAvailable": "N/A"
},
"rbac": {
"shareHost": "Share Host",
"shareHostTitle": "Share Host Access",
"shareHostDescription": "Grant temporary or permanent access to this host",
"targetUser": "Target User",
"selectUser": "Select a user to share with",
"duration": "Duration",
"durationHours": "Duration (hours)",
"neverExpires": "Never expires",
"permissionLevel": "Permission Level",
"permissionLevels": {
"readonly": "Read-Only",
"readonlyDesc": "Can view only, no command input",
"restricted": "Restricted",
"restrictedDesc": "Blocks dangerous commands (passwd, rm -rf, etc.)",
"monitored": "Monitored",
"monitoredDesc": "Records all commands but doesn't block (Recommended)",
"full": "Full Access",
"fullDesc": "No restrictions (Not recommended)"
},
"blockedCommands": "Blocked Commands",
"blockedCommandsPlaceholder": "Enter commands to block, e.g., passwd, rm, dd",
"maxSessionDuration": "Max Session Duration (minutes)",
"createTempUser": "Create Temporary User",
"createTempUserDesc": "Creates a restricted user on the server instead of sharing your credentials. Requires sudo access. Most secure option.",
"expiresAt": "Expires At",
"expiresIn": "Expires in {{hours}} hours",
"expired": "Expired",
"grantedBy": "Granted By",
"accessLevel": "Access Level",
"lastAccessed": "Last Accessed",
"accessCount": "Access Count",
"revokeAccess": "Revoke Access",
"confirmRevokeAccess": "Are you sure you want to revoke access for {{username}}?",
"hostSharedSuccessfully": "Host shared successfully with {{username}}",
"hostAccessUpdated": "Host access updated",
"failedToShareHost": "Failed to share host",
"accessRevokedSuccessfully": "Access revoked successfully",
"failedToRevokeAccess": "Failed to revoke access",
"shared": "Shared",
"sharedHosts": "Shared Hosts",
"sharedWithMe": "Shared With Me",
"noSharedHosts": "No hosts shared with you",
"owner": "Owner",
"viewAccessList": "View Access List",
"accessList": "Access List",
"noAccessGranted": "No access has been granted for this host",
"noAccessGrantedMessage": "No users have been granted access to this host yet",
"manageAccessFor": "Manage access for",
"totalAccessRecords": "{{count}} access record(s)",
"neverAccessed": "Never",
"timesAccessed": "{{count}} time(s)",
"daysRemaining": "{{days}} day(s)",
"hoursRemaining": "{{hours}} hour(s)",
"expired": "Expired",
"failedToFetchAccessList": "Failed to fetch access list",
"currentAccess": "Current Access",
"securityWarning": "Security Warning",
"securityWarningMessage": "Sharing credentials gives the user full access to perform any operations on the server, including changing passwords and deleting files. Only share with trusted users.",
"tempUserRecommended": "We recommend enabling 'Create Temporary User' for better security.",
"roleManagement": "Role Management",
"manageRoles": "Manage Roles",
"manageRolesFor": "Manage roles for {{username}}",
"assignRole": "Assign Role",
"removeRole": "Remove Role",
"userRoles": "User Roles",
"permissions": "Permissions",
"systemRole": "System Role",
"customRole": "Custom Role",
"roleAssignedSuccessfully": "Role assigned to {{username}} successfully",
"failedToAssignRole": "Failed to assign role",
"roleRemovedSuccessfully": "Role removed from {{username}} successfully",
"failedToRemoveRole": "Failed to remove role",
"cannotRemoveSystemRole": "Cannot remove system role",
"cannotShareWithSelf": "Cannot share host with yourself",
"noCustomRolesToAssign": "No custom roles available. System roles are auto-assigned.",
"credentialSharingWarning": "Credential Authentication Not Supported for Sharing",
"credentialSharingWarningDescription": "This host uses credential-based authentication. Shared users will not be able to connect because credentials are encrypted per-user and cannot be shared. Please use password or key-based authentication for hosts you intend to share.",
"auditLogs": "Audit Logs",
"viewAuditLogs": "View Audit Logs",
"action": "Action",
"resourceType": "Resource Type",
"resourceName": "Resource Name",
"timestamp": "Timestamp",
"ipAddress": "IP Address",
"userAgent": "User Agent",
"success": "Success",
"failed": "Failed",
"details": "Details",
"noAuditLogs": "No audit logs available",
"sessionRecordings": "Session Recordings",
"viewRecording": "View Recording",
"downloadRecording": "Download Recording",
"dangerousCommand": "Dangerous Command Detected",
"commandBlocked": "Command Blocked",
"terminateSession": "Terminate Session",
"sessionTerminated": "Session terminated by host owner",
"sharedAccessExpired": "Your shared access to this host has expired",
"sharedAccessExpiresIn": "Shared access expires in {{hours}} hours",
"roles": {
"label": "Roles",
"admin": "Administrator",
"user": "User"
},
"createRole": "Create Role",
"editRole": "Edit Role",
"roleName": "Role Name",
"displayName": "Display Name",
"description": "Description",
"assignRoles": "Assign Roles",
"userRoleAssignment": "User-Role Assignment",
"selectUserPlaceholder": "Select a user",
"searchUsers": "Search users...",
"noUserFound": "No user found",
"currentRoles": "Current Roles",
"noRolesAssigned": "No roles assigned",
"assignNewRole": "Assign New Role",
"selectRolePlaceholder": "Select a role",
"searchRoles": "Search roles...",
"noRoleFound": "No role found",
"assign": "Assign",
"roleCreatedSuccessfully": "Role created successfully",
"roleUpdatedSuccessfully": "Role updated successfully",
"roleDeletedSuccessfully": "Role deleted successfully",
"failedToLoadRoles": "Failed to load roles",
"failedToSaveRole": "Failed to save role",
"failedToDeleteRole": "Failed to delete role",
"roleDisplayNameRequired": "Role display name is required",
"roleNameRequired": "Role name is required",
"roleNameHint": "Use lowercase letters, numbers, underscores, and hyphens only",
"displayNamePlaceholder": "Developer",
"descriptionPlaceholder": "Software developers and engineers",
"confirmDeleteRole": "Delete Role",
"confirmDeleteRoleDescription": "Are you sure you want to delete the role '{{name}}'? This action cannot be undone.",
"confirmRemoveRole": "Remove Role",
"confirmRemoveRoleDescription": "Are you sure you want to remove this role from the user?",
"editRoleDescription": "Update role information",
"createRoleDescription": "Create a new custom role for grouping users",
"assignRolesDescription": "Manage role assignments for users",
"noRoles": "No roles found",
"selectRole": "Select Role",
"type": "Type",
"user": "User",
"role": "Role",
"saveHostFirst": "Save Host First",
"saveHostFirstDescription": "Please save the host before configuring sharing settings.",
"shareWithUser": "Share with User",
"shareWithRole": "Share with Role",
"share": "Share",
"target": "Target",
"expires": "Expires",
"never": "Never",
"noAccessRecords": "No access records found",
"sharedSuccessfully": "Shared successfully",
"failedToShare": "Failed to share",
"confirmRevokeAccessDescription": "Are you sure you want to revoke this access?",
"hours": "hours",
"sharing": "Sharing",
"selectUserAndRole": "Please select both a user and a role",
"view": "View Only",
"viewDesc": "Can view and connect to the host in read-only mode",
"use": "Use",
"useDesc": "Can use the host normally but cannot modify host configuration",
"manage": "Manage",
"manageDesc": "Full control including modifying host configuration and sharing settings"
},
"commandPalette": {
"searchPlaceholder": "Search for hosts or quick actions...",
"recentActivity": "Recent Activity",