Full Code of pterodactyl-china/panel for AI

1.0-develop 10e87436709a cached
1414 files
5.4 MB
1.5M tokens
4743 symbols
1 requests
Download .txt
Showing preview only (6,011K chars total). Download the full file or copy to clipboard to get everything.
Repository: pterodactyl-china/panel
Branch: 1.0-develop
Commit: 10e87436709a
Files: 1414
Total size: 5.4 MB

Directory structure:
gitextract_7le1g290/

├── .editorconfig
├── .eslintignore
├── .eslintrc.js
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── 1-bug-report.yml
│   │   ├── 2-approved.yml
│   │   └── config.yml
│   ├── docker/
│   │   ├── README.md
│   │   ├── default.conf
│   │   ├── default_ssl.conf
│   │   ├── entrypoint.sh
│   │   ├── supervisord.conf
│   │   └── www.conf
│   └── workflows/
│       ├── build.yaml
│       ├── ci.yaml
│       ├── docker.yaml
│       └── release.yaml
├── .gitignore
├── .php-cs-fixer.dist.php
├── .prettierrc.json
├── BUILDING.md
├── CHANGELOG.md
├── CONTRIBUTING.md
├── Dockerfile
├── LICENSE.md
├── README.md
├── SECURITY.md
├── app/
│   ├── Console/
│   │   ├── Commands/
│   │   │   ├── Environment/
│   │   │   │   ├── AppSettingsCommand.php
│   │   │   │   ├── DatabaseSettingsCommand.php
│   │   │   │   └── EmailSettingsCommand.php
│   │   │   ├── InfoCommand.php
│   │   │   ├── Location/
│   │   │   │   ├── DeleteLocationCommand.php
│   │   │   │   └── MakeLocationCommand.php
│   │   │   ├── Maintenance/
│   │   │   │   ├── CleanServiceBackupFilesCommand.php
│   │   │   │   └── PruneOrphanedBackupsCommand.php
│   │   │   ├── Node/
│   │   │   │   ├── MakeNodeCommand.php
│   │   │   │   ├── NodeConfigurationCommand.php
│   │   │   │   └── NodeListCommand.php
│   │   │   ├── Overrides/
│   │   │   │   ├── KeyGenerateCommand.php
│   │   │   │   ├── SeedCommand.php
│   │   │   │   └── UpCommand.php
│   │   │   ├── Schedule/
│   │   │   │   └── ProcessRunnableCommand.php
│   │   │   ├── Server/
│   │   │   │   └── BulkPowerActionCommand.php
│   │   │   ├── TelemetryCommand.php
│   │   │   ├── UpgradeCommand.php
│   │   │   └── User/
│   │   │       ├── DeleteUserCommand.php
│   │   │       ├── DisableTwoFactorCommand.php
│   │   │       └── MakeUserCommand.php
│   │   ├── Kernel.php
│   │   └── RequiresDatabaseMigrations.php
│   ├── Contracts/
│   │   ├── Core/
│   │   │   └── ReceivesEvents.php
│   │   ├── Criteria/
│   │   │   └── CriteriaInterface.php
│   │   ├── Extensions/
│   │   │   └── HashidsInterface.php
│   │   ├── Http/
│   │   │   └── ClientPermissionsRequest.php
│   │   ├── Models/
│   │   │   └── Identifiable.php
│   │   └── Repository/
│   │       ├── AllocationRepositoryInterface.php
│   │       ├── ApiKeyRepositoryInterface.php
│   │       ├── ApiPermissionRepositoryInterface.php
│   │       ├── DatabaseHostRepositoryInterface.php
│   │       ├── DatabaseRepositoryInterface.php
│   │       ├── EggRepositoryInterface.php
│   │       ├── EggVariableRepositoryInterface.php
│   │       ├── LocationRepositoryInterface.php
│   │       ├── NestRepositoryInterface.php
│   │       ├── NodeRepositoryInterface.php
│   │       ├── PermissionRepositoryInterface.php
│   │       ├── RepositoryInterface.php
│   │       ├── ScheduleRepositoryInterface.php
│   │       ├── ServerRepositoryInterface.php
│   │       ├── ServerVariableRepositoryInterface.php
│   │       ├── SessionRepositoryInterface.php
│   │       ├── SettingsRepositoryInterface.php
│   │       ├── SubuserRepositoryInterface.php
│   │       ├── TaskRepositoryInterface.php
│   │       └── UserRepositoryInterface.php
│   ├── Enum/
│   │   └── ResourceLimit.php
│   ├── Events/
│   │   ├── ActivityLogged.php
│   │   ├── Auth/
│   │   │   ├── DirectLogin.php
│   │   │   ├── FailedCaptcha.php
│   │   │   ├── FailedPasswordReset.php
│   │   │   └── ProvidedAuthenticationToken.php
│   │   ├── Event.php
│   │   ├── Server/
│   │   │   ├── Created.php
│   │   │   ├── Creating.php
│   │   │   ├── Deleted.php
│   │   │   ├── Deleting.php
│   │   │   ├── Installed.php
│   │   │   ├── Saved.php
│   │   │   ├── Saving.php
│   │   │   ├── Updated.php
│   │   │   └── Updating.php
│   │   ├── Subuser/
│   │   │   ├── Created.php
│   │   │   ├── Creating.php
│   │   │   ├── Deleted.php
│   │   │   └── Deleting.php
│   │   └── User/
│   │       ├── Created.php
│   │       ├── Creating.php
│   │       ├── Deleted.php
│   │       ├── Deleting.php
│   │       └── PasswordChanged.php
│   ├── Exceptions/
│   │   ├── AccountNotFoundException.php
│   │   ├── AutoDeploymentException.php
│   │   ├── DisplayException.php
│   │   ├── Handler.php
│   │   ├── Http/
│   │   │   ├── Base/
│   │   │   │   └── InvalidPasswordProvidedException.php
│   │   │   ├── Connection/
│   │   │   │   └── DaemonConnectionException.php
│   │   │   ├── HttpForbiddenException.php
│   │   │   ├── Server/
│   │   │   │   ├── FileSizeTooLargeException.php
│   │   │   │   ├── FileTypeNotEditableException.php
│   │   │   │   └── ServerStateConflictException.php
│   │   │   └── TwoFactorAuthRequiredException.php
│   │   ├── ManifestDoesNotExistException.php
│   │   ├── Model/
│   │   │   └── DataValidationException.php
│   │   ├── PterodactylException.php
│   │   ├── Repository/
│   │   │   ├── Daemon/
│   │   │   │   └── InvalidPowerSignalException.php
│   │   │   ├── DuplicateDatabaseNameException.php
│   │   │   ├── RecordNotFoundException.php
│   │   │   └── RepositoryException.php
│   │   ├── Service/
│   │   │   ├── Allocation/
│   │   │   │   ├── AllocationDoesNotBelongToServerException.php
│   │   │   │   ├── AutoAllocationNotEnabledException.php
│   │   │   │   ├── CidrOutOfRangeException.php
│   │   │   │   ├── InvalidPortMappingException.php
│   │   │   │   ├── NoAutoAllocationSpaceAvailableException.php
│   │   │   │   ├── PortOutOfRangeException.php
│   │   │   │   ├── ServerUsingAllocationException.php
│   │   │   │   └── TooManyPortsInRangeException.php
│   │   │   ├── Backup/
│   │   │   │   ├── BackupLockedException.php
│   │   │   │   └── TooManyBackupsException.php
│   │   │   ├── Database/
│   │   │   │   ├── DatabaseClientFeatureNotEnabledException.php
│   │   │   │   ├── NoSuitableDatabaseHostException.php
│   │   │   │   └── TooManyDatabasesException.php
│   │   │   ├── Deployment/
│   │   │   │   ├── NoViableAllocationException.php
│   │   │   │   └── NoViableNodeException.php
│   │   │   ├── Egg/
│   │   │   │   ├── BadJsonFormatException.php
│   │   │   │   ├── HasChildrenException.php
│   │   │   │   ├── InvalidCopyFromException.php
│   │   │   │   ├── NoParentConfigurationFoundException.php
│   │   │   │   └── Variable/
│   │   │   │       ├── BadValidationRuleException.php
│   │   │   │       └── ReservedVariableNameException.php
│   │   │   ├── HasActiveServersException.php
│   │   │   ├── Helper/
│   │   │   │   └── CdnVersionFetchingException.php
│   │   │   ├── InvalidFileUploadException.php
│   │   │   ├── Location/
│   │   │   │   └── HasActiveNodesException.php
│   │   │   ├── Node/
│   │   │   │   └── ConfigurationNotPersistedException.php
│   │   │   ├── Schedule/
│   │   │   │   └── Task/
│   │   │   │       └── TaskIntervalTooLongException.php
│   │   │   ├── Server/
│   │   │   │   └── RequiredVariableMissingException.php
│   │   │   ├── ServiceLimitExceededException.php
│   │   │   ├── Subuser/
│   │   │   │   ├── ServerSubuserExistsException.php
│   │   │   │   └── UserIsServerOwnerException.php
│   │   │   └── User/
│   │   │       └── TwoFactorAuthenticationTokenInvalid.php
│   │   ├── Solutions/
│   │   │   └── ManifestDoesNotExistSolution.php
│   │   └── Transformer/
│   │       └── InvalidTransformerLevelException.php
│   ├── Extensions/
│   │   ├── Backups/
│   │   │   └── BackupManager.php
│   │   ├── DynamicDatabaseConnection.php
│   │   ├── Facades/
│   │   │   └── Theme.php
│   │   ├── Filesystem/
│   │   │   └── S3Filesystem.php
│   │   ├── Hashids.php
│   │   ├── Illuminate/
│   │   │   ├── Database/
│   │   │   │   └── Eloquent/
│   │   │   │       └── Builder.php
│   │   │   └── Events/
│   │   │       └── Contracts/
│   │   │           └── SubscribesToEvents.php
│   │   ├── Laravel/
│   │   │   └── Sanctum/
│   │   │       └── NewAccessToken.php
│   │   ├── Lcobucci/
│   │   │   └── JWT/
│   │   │       └── Encoding/
│   │   │           └── TimestampDates.php
│   │   ├── League/
│   │   │   └── Fractal/
│   │   │       └── Serializers/
│   │   │           └── PterodactylSerializer.php
│   │   ├── Spatie/
│   │   │   └── Fractalistic/
│   │   │       └── Fractal.php
│   │   └── Themes/
│   │       └── Theme.php
│   ├── Facades/
│   │   ├── Activity.php
│   │   ├── LogBatch.php
│   │   └── LogTarget.php
│   ├── Helpers/
│   │   ├── Time.php
│   │   └── Utilities.php
│   ├── Http/
│   │   ├── Controllers/
│   │   │   ├── Admin/
│   │   │   │   ├── ApiController.php
│   │   │   │   ├── BaseController.php
│   │   │   │   ├── DatabaseController.php
│   │   │   │   ├── LocationController.php
│   │   │   │   ├── MountController.php
│   │   │   │   ├── Nests/
│   │   │   │   │   ├── EggController.php
│   │   │   │   │   ├── EggScriptController.php
│   │   │   │   │   ├── EggShareController.php
│   │   │   │   │   ├── EggVariableController.php
│   │   │   │   │   └── NestController.php
│   │   │   │   ├── NodeAutoDeployController.php
│   │   │   │   ├── Nodes/
│   │   │   │   │   ├── NodeController.php
│   │   │   │   │   ├── NodeViewController.php
│   │   │   │   │   └── SystemInformationController.php
│   │   │   │   ├── NodesController.php
│   │   │   │   ├── Servers/
│   │   │   │   │   ├── CreateServerController.php
│   │   │   │   │   ├── ServerController.php
│   │   │   │   │   ├── ServerTransferController.php
│   │   │   │   │   └── ServerViewController.php
│   │   │   │   ├── ServersController.php
│   │   │   │   ├── Settings/
│   │   │   │   │   ├── AdvancedController.php
│   │   │   │   │   ├── IndexController.php
│   │   │   │   │   └── MailController.php
│   │   │   │   └── UserController.php
│   │   │   ├── Api/
│   │   │   │   ├── Application/
│   │   │   │   │   ├── ApplicationApiController.php
│   │   │   │   │   ├── Locations/
│   │   │   │   │   │   └── LocationController.php
│   │   │   │   │   ├── Nests/
│   │   │   │   │   │   ├── EggController.php
│   │   │   │   │   │   └── NestController.php
│   │   │   │   │   ├── Nodes/
│   │   │   │   │   │   ├── AllocationController.php
│   │   │   │   │   │   ├── NodeConfigurationController.php
│   │   │   │   │   │   ├── NodeController.php
│   │   │   │   │   │   └── NodeDeploymentController.php
│   │   │   │   │   ├── Servers/
│   │   │   │   │   │   ├── DatabaseController.php
│   │   │   │   │   │   ├── ExternalServerController.php
│   │   │   │   │   │   ├── ServerController.php
│   │   │   │   │   │   ├── ServerDetailsController.php
│   │   │   │   │   │   ├── ServerManagementController.php
│   │   │   │   │   │   └── StartupController.php
│   │   │   │   │   └── Users/
│   │   │   │   │       ├── ExternalUserController.php
│   │   │   │   │       └── UserController.php
│   │   │   │   ├── Client/
│   │   │   │   │   ├── AccountController.php
│   │   │   │   │   ├── ActivityLogController.php
│   │   │   │   │   ├── ApiKeyController.php
│   │   │   │   │   ├── ClientApiController.php
│   │   │   │   │   ├── ClientController.php
│   │   │   │   │   ├── SSHKeyController.php
│   │   │   │   │   ├── Servers/
│   │   │   │   │   │   ├── ActivityLogController.php
│   │   │   │   │   │   ├── BackupController.php
│   │   │   │   │   │   ├── CommandController.php
│   │   │   │   │   │   ├── DatabaseController.php
│   │   │   │   │   │   ├── FileController.php
│   │   │   │   │   │   ├── FileUploadController.php
│   │   │   │   │   │   ├── NetworkAllocationController.php
│   │   │   │   │   │   ├── PowerController.php
│   │   │   │   │   │   ├── ResourceUtilizationController.php
│   │   │   │   │   │   ├── ScheduleController.php
│   │   │   │   │   │   ├── ScheduleTaskController.php
│   │   │   │   │   │   ├── ServerController.php
│   │   │   │   │   │   ├── SettingsController.php
│   │   │   │   │   │   ├── StartupController.php
│   │   │   │   │   │   ├── SubuserController.php
│   │   │   │   │   │   └── WebsocketController.php
│   │   │   │   │   └── TwoFactorController.php
│   │   │   │   └── Remote/
│   │   │   │       ├── ActivityProcessingController.php
│   │   │   │       ├── Backups/
│   │   │   │       │   ├── BackupRemoteUploadController.php
│   │   │   │       │   └── BackupStatusController.php
│   │   │   │       ├── EggInstallController.php
│   │   │   │       ├── Servers/
│   │   │   │       │   ├── ServerDetailsController.php
│   │   │   │       │   ├── ServerInstallController.php
│   │   │   │       │   └── ServerTransferController.php
│   │   │   │       └── SftpAuthenticationController.php
│   │   │   ├── Auth/
│   │   │   │   ├── AbstractLoginController.php
│   │   │   │   ├── ForgotPasswordController.php
│   │   │   │   ├── LoginCheckpointController.php
│   │   │   │   ├── LoginController.php
│   │   │   │   └── ResetPasswordController.php
│   │   │   ├── Base/
│   │   │   │   ├── IndexController.php
│   │   │   │   └── LocaleController.php
│   │   │   └── Controller.php
│   │   ├── Kernel.php
│   │   ├── Middleware/
│   │   │   ├── Activity/
│   │   │   │   ├── AccountSubject.php
│   │   │   │   ├── ServerSubject.php
│   │   │   │   └── TrackAPIKey.php
│   │   │   ├── Admin/
│   │   │   │   └── Servers/
│   │   │   │       └── ServerInstalled.php
│   │   │   ├── AdminAuthenticate.php
│   │   │   ├── Api/
│   │   │   │   ├── Application/
│   │   │   │   │   └── AuthenticateApplicationUser.php
│   │   │   │   ├── AuthenticateIPAccess.php
│   │   │   │   ├── Client/
│   │   │   │   │   ├── RequireClientApiKey.php
│   │   │   │   │   ├── Server/
│   │   │   │   │   │   ├── AuthenticateServerAccess.php
│   │   │   │   │   │   └── ResourceBelongsToServer.php
│   │   │   │   │   └── SubstituteClientBindings.php
│   │   │   │   ├── Daemon/
│   │   │   │   │   └── DaemonAuthenticate.php
│   │   │   │   └── IsValidJson.php
│   │   │   ├── EncryptCookies.php
│   │   │   ├── EnsureStatefulRequests.php
│   │   │   ├── LanguageMiddleware.php
│   │   │   ├── MaintenanceMiddleware.php
│   │   │   ├── RedirectIfAuthenticated.php
│   │   │   ├── RequireTwoFactorAuthentication.php
│   │   │   ├── SetSecurityHeaders.php
│   │   │   ├── TrimStrings.php
│   │   │   ├── VerifyCsrfToken.php
│   │   │   └── VerifyReCaptcha.php
│   │   ├── Requests/
│   │   │   ├── Admin/
│   │   │   │   ├── AdminFormRequest.php
│   │   │   │   ├── Api/
│   │   │   │   │   └── StoreApplicationApiKeyRequest.php
│   │   │   │   ├── BaseFormRequest.php
│   │   │   │   ├── DatabaseHostFormRequest.php
│   │   │   │   ├── Egg/
│   │   │   │   │   ├── EggFormRequest.php
│   │   │   │   │   ├── EggImportFormRequest.php
│   │   │   │   │   ├── EggScriptFormRequest.php
│   │   │   │   │   └── EggVariableFormRequest.php
│   │   │   │   ├── LocationFormRequest.php
│   │   │   │   ├── MountFormRequest.php
│   │   │   │   ├── Nest/
│   │   │   │   │   └── StoreNestFormRequest.php
│   │   │   │   ├── NewUserFormRequest.php
│   │   │   │   ├── Node/
│   │   │   │   │   ├── AllocationAliasFormRequest.php
│   │   │   │   │   ├── AllocationFormRequest.php
│   │   │   │   │   └── NodeFormRequest.php
│   │   │   │   ├── ServerFormRequest.php
│   │   │   │   ├── Servers/
│   │   │   │   │   └── Databases/
│   │   │   │   │       └── StoreServerDatabaseRequest.php
│   │   │   │   ├── Settings/
│   │   │   │   │   ├── AdvancedSettingsFormRequest.php
│   │   │   │   │   ├── BaseSettingsFormRequest.php
│   │   │   │   │   └── MailSettingsFormRequest.php
│   │   │   │   └── UserFormRequest.php
│   │   │   ├── Api/
│   │   │   │   ├── Application/
│   │   │   │   │   ├── Allocations/
│   │   │   │   │   │   ├── DeleteAllocationRequest.php
│   │   │   │   │   │   ├── GetAllocationsRequest.php
│   │   │   │   │   │   └── StoreAllocationRequest.php
│   │   │   │   │   ├── ApplicationApiRequest.php
│   │   │   │   │   ├── Locations/
│   │   │   │   │   │   ├── DeleteLocationRequest.php
│   │   │   │   │   │   ├── GetLocationRequest.php
│   │   │   │   │   │   ├── GetLocationsRequest.php
│   │   │   │   │   │   ├── StoreLocationRequest.php
│   │   │   │   │   │   └── UpdateLocationRequest.php
│   │   │   │   │   ├── Nests/
│   │   │   │   │   │   ├── Eggs/
│   │   │   │   │   │   │   ├── GetEggRequest.php
│   │   │   │   │   │   │   └── GetEggsRequest.php
│   │   │   │   │   │   └── GetNestsRequest.php
│   │   │   │   │   ├── Nodes/
│   │   │   │   │   │   ├── DeleteNodeRequest.php
│   │   │   │   │   │   ├── GetDeployableNodesRequest.php
│   │   │   │   │   │   ├── GetNodeRequest.php
│   │   │   │   │   │   ├── GetNodesRequest.php
│   │   │   │   │   │   ├── StoreNodeRequest.php
│   │   │   │   │   │   └── UpdateNodeRequest.php
│   │   │   │   │   ├── Servers/
│   │   │   │   │   │   ├── Databases/
│   │   │   │   │   │   │   ├── GetServerDatabaseRequest.php
│   │   │   │   │   │   │   ├── GetServerDatabasesRequest.php
│   │   │   │   │   │   │   ├── ServerDatabaseWriteRequest.php
│   │   │   │   │   │   │   └── StoreServerDatabaseRequest.php
│   │   │   │   │   │   ├── GetExternalServerRequest.php
│   │   │   │   │   │   ├── GetServerRequest.php
│   │   │   │   │   │   ├── GetServersRequest.php
│   │   │   │   │   │   ├── ServerWriteRequest.php
│   │   │   │   │   │   ├── StoreServerRequest.php
│   │   │   │   │   │   ├── UpdateServerBuildConfigurationRequest.php
│   │   │   │   │   │   ├── UpdateServerDetailsRequest.php
│   │   │   │   │   │   └── UpdateServerStartupRequest.php
│   │   │   │   │   └── Users/
│   │   │   │   │       ├── DeleteUserRequest.php
│   │   │   │   │       ├── GetExternalUserRequest.php
│   │   │   │   │       ├── GetUsersRequest.php
│   │   │   │   │       ├── StoreUserRequest.php
│   │   │   │   │       └── UpdateUserRequest.php
│   │   │   │   ├── Client/
│   │   │   │   │   ├── Account/
│   │   │   │   │   │   ├── StoreApiKeyRequest.php
│   │   │   │   │   │   ├── StoreSSHKeyRequest.php
│   │   │   │   │   │   ├── UpdateEmailRequest.php
│   │   │   │   │   │   └── UpdatePasswordRequest.php
│   │   │   │   │   ├── ClientApiRequest.php
│   │   │   │   │   ├── GetServersRequest.php
│   │   │   │   │   └── Servers/
│   │   │   │   │       ├── Backups/
│   │   │   │   │       │   ├── RestoreBackupRequest.php
│   │   │   │   │       │   └── StoreBackupRequest.php
│   │   │   │   │       ├── Databases/
│   │   │   │   │       │   ├── DeleteDatabaseRequest.php
│   │   │   │   │       │   ├── GetDatabasesRequest.php
│   │   │   │   │       │   ├── RotatePasswordRequest.php
│   │   │   │   │       │   └── StoreDatabaseRequest.php
│   │   │   │   │       ├── Files/
│   │   │   │   │       │   ├── ChmodFilesRequest.php
│   │   │   │   │       │   ├── CompressFilesRequest.php
│   │   │   │   │       │   ├── CopyFileRequest.php
│   │   │   │   │       │   ├── CreateFolderRequest.php
│   │   │   │   │       │   ├── DecompressFilesRequest.php
│   │   │   │   │       │   ├── DeleteFileRequest.php
│   │   │   │   │       │   ├── DownloadFileRequest.php
│   │   │   │   │       │   ├── GetFileContentsRequest.php
│   │   │   │   │       │   ├── ListFilesRequest.php
│   │   │   │   │       │   ├── PullFileRequest.php
│   │   │   │   │       │   ├── RenameFileRequest.php
│   │   │   │   │       │   ├── UploadFileRequest.php
│   │   │   │   │       │   └── WriteFileContentRequest.php
│   │   │   │   │       ├── GetServerRequest.php
│   │   │   │   │       ├── Network/
│   │   │   │   │       │   ├── DeleteAllocationRequest.php
│   │   │   │   │       │   ├── GetNetworkRequest.php
│   │   │   │   │       │   ├── NewAllocationRequest.php
│   │   │   │   │       │   ├── SetPrimaryAllocationRequest.php
│   │   │   │   │       │   └── UpdateAllocationRequest.php
│   │   │   │   │       ├── Schedules/
│   │   │   │   │       │   ├── DeleteScheduleRequest.php
│   │   │   │   │       │   ├── StoreScheduleRequest.php
│   │   │   │   │       │   ├── StoreTaskRequest.php
│   │   │   │   │       │   ├── TriggerScheduleRequest.php
│   │   │   │   │       │   ├── UpdateScheduleRequest.php
│   │   │   │   │       │   └── ViewScheduleRequest.php
│   │   │   │   │       ├── SendCommandRequest.php
│   │   │   │   │       ├── SendPowerRequest.php
│   │   │   │   │       ├── Settings/
│   │   │   │   │       │   ├── ReinstallServerRequest.php
│   │   │   │   │       │   ├── RenameServerRequest.php
│   │   │   │   │       │   └── SetDockerImageRequest.php
│   │   │   │   │       ├── Startup/
│   │   │   │   │       │   ├── GetStartupRequest.php
│   │   │   │   │       │   ├── UpdateEggRequest.php
│   │   │   │   │       │   └── UpdateStartupVariableRequest.php
│   │   │   │   │       └── Subusers/
│   │   │   │   │           ├── DeleteSubuserRequest.php
│   │   │   │   │           ├── GetSubuserRequest.php
│   │   │   │   │           ├── StoreSubuserRequest.php
│   │   │   │   │           ├── SubuserRequest.php
│   │   │   │   │           └── UpdateSubuserRequest.php
│   │   │   │   └── Remote/
│   │   │   │       ├── ActivityEventRequest.php
│   │   │   │       ├── AuthenticateWebsocketDetailsRequest.php
│   │   │   │       ├── InstallationDataRequest.php
│   │   │   │       ├── ReportBackupCompleteRequest.php
│   │   │   │       └── SftpAuthenticationFormRequest.php
│   │   │   ├── Auth/
│   │   │   │   ├── LoginCheckpointRequest.php
│   │   │   │   ├── LoginRequest.php
│   │   │   │   └── ResetPasswordRequest.php
│   │   │   ├── Base/
│   │   │   │   └── LocaleRequest.php
│   │   │   └── FrontendUserFormRequest.php
│   │   ├── Resources/
│   │   │   └── Wings/
│   │   │       └── ServerConfigurationCollection.php
│   │   └── ViewComposers/
│   │       └── AssetComposer.php
│   ├── Jobs/
│   │   ├── RevokeSftpAccessJob.php
│   │   └── Schedule/
│   │       └── RunTaskJob.php
│   ├── Listeners/
│   │   ├── AuthenticationListener.php
│   │   ├── RevocationListener.php
│   │   └── TwoFactorListener.php
│   ├── Models/
│   │   ├── APILog.php
│   │   ├── ActivityLog.php
│   │   ├── ActivityLogSubject.php
│   │   ├── Allocation.php
│   │   ├── ApiKey.php
│   │   ├── Attributes/
│   │   │   └── Identifiable.php
│   │   ├── AuditLog.php
│   │   ├── Backup.php
│   │   ├── Database.php
│   │   ├── DatabaseHost.php
│   │   ├── Egg.php
│   │   ├── EggMount.php
│   │   ├── EggVariable.php
│   │   ├── Filters/
│   │   │   ├── AdminServerFilter.php
│   │   │   └── MultiFieldServerFilter.php
│   │   ├── Location.php
│   │   ├── Model.php
│   │   ├── Mount.php
│   │   ├── MountNode.php
│   │   ├── MountServer.php
│   │   ├── Nest.php
│   │   ├── Node.php
│   │   ├── Objects/
│   │   │   └── DeploymentObject.php
│   │   ├── Permission.php
│   │   ├── RecoveryToken.php
│   │   ├── Schedule.php
│   │   ├── Server.php
│   │   ├── ServerTransfer.php
│   │   ├── ServerVariable.php
│   │   ├── Session.php
│   │   ├── Setting.php
│   │   ├── Subuser.php
│   │   ├── Task.php
│   │   ├── TaskLog.php
│   │   ├── Traits/
│   │   │   ├── HasAccessTokens.php
│   │   │   └── HasRealtimeIdentifier.php
│   │   ├── User.php
│   │   └── UserSSHKey.php
│   ├── Notifications/
│   │   ├── AccountCreated.php
│   │   ├── AddedToServer.php
│   │   ├── MailTested.php
│   │   ├── RemovedFromServer.php
│   │   ├── SendPasswordReset.php
│   │   └── ServerInstalled.php
│   ├── Observers/
│   │   ├── EggVariableObserver.php
│   │   ├── ServerObserver.php
│   │   ├── SubuserObserver.php
│   │   └── UserObserver.php
│   ├── Policies/
│   │   ├── .gitkeep
│   │   └── ServerPolicy.php
│   ├── Providers/
│   │   ├── ActivityLogServiceProvider.php
│   │   ├── AppServiceProvider.php
│   │   ├── AuthServiceProvider.php
│   │   ├── BackupsServiceProvider.php
│   │   ├── BladeServiceProvider.php
│   │   ├── BroadcastServiceProvider.php
│   │   ├── EventServiceProvider.php
│   │   ├── HashidsServiceProvider.php
│   │   ├── RepositoryServiceProvider.php
│   │   ├── RouteServiceProvider.php
│   │   ├── SettingsServiceProvider.php
│   │   └── ViewComposerServiceProvider.php
│   ├── Repositories/
│   │   ├── Eloquent/
│   │   │   ├── AllocationRepository.php
│   │   │   ├── ApiKeyRepository.php
│   │   │   ├── BackupRepository.php
│   │   │   ├── DatabaseHostRepository.php
│   │   │   ├── DatabaseRepository.php
│   │   │   ├── EggRepository.php
│   │   │   ├── EggVariableRepository.php
│   │   │   ├── EloquentRepository.php
│   │   │   ├── LocationRepository.php
│   │   │   ├── MountRepository.php
│   │   │   ├── NestRepository.php
│   │   │   ├── NodeRepository.php
│   │   │   ├── PermissionRepository.php
│   │   │   ├── RecoveryTokenRepository.php
│   │   │   ├── ScheduleRepository.php
│   │   │   ├── ServerRepository.php
│   │   │   ├── ServerVariableRepository.php
│   │   │   ├── SessionRepository.php
│   │   │   ├── SettingsRepository.php
│   │   │   ├── SubuserRepository.php
│   │   │   ├── TaskRepository.php
│   │   │   └── UserRepository.php
│   │   ├── Repository.php
│   │   └── Wings/
│   │       ├── DaemonBackupRepository.php
│   │       ├── DaemonCommandRepository.php
│   │       ├── DaemonConfigurationRepository.php
│   │       ├── DaemonFileRepository.php
│   │       ├── DaemonPowerRepository.php
│   │       ├── DaemonRepository.php
│   │       ├── DaemonRevocationRepository.php
│   │       ├── DaemonServerRepository.php
│   │       └── DaemonTransferRepository.php
│   ├── Rules/
│   │   ├── Fqdn.php
│   │   └── Username.php
│   ├── Services/
│   │   ├── Acl/
│   │   │   └── Api/
│   │   │       └── AdminAcl.php
│   │   ├── Activity/
│   │   │   ├── ActivityLogBatchService.php
│   │   │   ├── ActivityLogService.php
│   │   │   └── ActivityLogTargetableService.php
│   │   ├── Allocations/
│   │   │   ├── AllocationDeletionService.php
│   │   │   ├── AssignmentService.php
│   │   │   └── FindAssignableAllocationService.php
│   │   ├── Api/
│   │   │   └── KeyCreationService.php
│   │   ├── Backups/
│   │   │   ├── DeleteBackupService.php
│   │   │   ├── DownloadLinkService.php
│   │   │   └── InitiateBackupService.php
│   │   ├── Databases/
│   │   │   ├── DatabaseManagementService.php
│   │   │   ├── DatabasePasswordService.php
│   │   │   ├── DeployServerDatabaseService.php
│   │   │   └── Hosts/
│   │   │       ├── HostCreationService.php
│   │   │       ├── HostDeletionService.php
│   │   │       └── HostUpdateService.php
│   │   ├── Deployment/
│   │   │   ├── AllocationSelectionService.php
│   │   │   └── FindViableNodesService.php
│   │   ├── Eggs/
│   │   │   ├── EggConfigurationService.php
│   │   │   ├── EggCreationService.php
│   │   │   ├── EggDeletionService.php
│   │   │   ├── EggParserService.php
│   │   │   ├── EggUpdateService.php
│   │   │   ├── Scripts/
│   │   │   │   └── InstallScriptService.php
│   │   │   ├── Sharing/
│   │   │   │   ├── EggExporterService.php
│   │   │   │   ├── EggImporterService.php
│   │   │   │   └── EggUpdateImporterService.php
│   │   │   └── Variables/
│   │   │       ├── VariableCreationService.php
│   │   │       └── VariableUpdateService.php
│   │   ├── Helpers/
│   │   │   ├── AssetHashService.php
│   │   │   └── SoftwareVersionService.php
│   │   ├── Locations/
│   │   │   ├── LocationCreationService.php
│   │   │   ├── LocationDeletionService.php
│   │   │   └── LocationUpdateService.php
│   │   ├── Nests/
│   │   │   ├── NestCreationService.php
│   │   │   ├── NestDeletionService.php
│   │   │   └── NestUpdateService.php
│   │   ├── Nodes/
│   │   │   ├── NodeCreationService.php
│   │   │   ├── NodeDeletionService.php
│   │   │   ├── NodeJWTService.php
│   │   │   └── NodeUpdateService.php
│   │   ├── Schedules/
│   │   │   └── ProcessScheduleService.php
│   │   ├── Servers/
│   │   │   ├── BuildModificationService.php
│   │   │   ├── DetailsModificationService.php
│   │   │   ├── EnvironmentService.php
│   │   │   ├── GetUserPermissionsService.php
│   │   │   ├── ReinstallServerService.php
│   │   │   ├── ServerConfigurationStructureService.php
│   │   │   ├── ServerCreationService.php
│   │   │   ├── ServerDeletionService.php
│   │   │   ├── StartupCommandService.php
│   │   │   ├── StartupModificationService.php
│   │   │   ├── SuspensionService.php
│   │   │   └── VariableValidatorService.php
│   │   ├── Subusers/
│   │   │   └── SubuserCreationService.php
│   │   ├── Telemetry/
│   │   │   └── TelemetryCollectionService.php
│   │   └── Users/
│   │       ├── ToggleTwoFactorService.php
│   │       ├── TwoFactorSetupService.php
│   │       ├── UserCreationService.php
│   │       ├── UserDeletionService.php
│   │       └── UserUpdateService.php
│   ├── Traits/
│   │   ├── Commands/
│   │   │   └── EnvironmentWriterTrait.php
│   │   ├── Controllers/
│   │   │   └── JavascriptInjection.php
│   │   ├── Helpers/
│   │   │   └── AvailableLanguages.php
│   │   └── Services/
│   │       ├── HasUserLevels.php
│   │       ├── ReturnsUpdatedModels.php
│   │       └── ValidatesValidationRules.php
│   ├── Transformers/
│   │   └── Api/
│   │       ├── Application/
│   │       │   ├── AllocationTransformer.php
│   │       │   ├── BaseTransformer.php
│   │       │   ├── DatabaseHostTransformer.php
│   │       │   ├── EggTransformer.php
│   │       │   ├── EggVariableTransformer.php
│   │       │   ├── LocationTransformer.php
│   │       │   ├── NestTransformer.php
│   │       │   ├── NodeTransformer.php
│   │       │   ├── ServerDatabaseTransformer.php
│   │       │   ├── ServerTransformer.php
│   │       │   ├── ServerVariableTransformer.php
│   │       │   ├── SubuserTransformer.php
│   │       │   └── UserTransformer.php
│   │       └── Client/
│   │           ├── AccountTransformer.php
│   │           ├── ActivityLogTransformer.php
│   │           ├── AllocationTransformer.php
│   │           ├── ApiKeyTransformer.php
│   │           ├── BackupTransformer.php
│   │           ├── BaseClientTransformer.php
│   │           ├── DatabaseTransformer.php
│   │           ├── EggTransformer.php
│   │           ├── EggVariableTransformer.php
│   │           ├── FileObjectTransformer.php
│   │           ├── ScheduleTransformer.php
│   │           ├── ServerTransformer.php
│   │           ├── StatsTransformer.php
│   │           ├── SubuserTransformer.php
│   │           ├── TaskTransformer.php
│   │           ├── UserSSHKeyTransformer.php
│   │           └── UserTransformer.php
│   └── helpers.php
├── artisan
├── babel.config.js
├── bootstrap/
│   ├── app.php
│   ├── cache/
│   │   └── .gitignore
│   └── tests.php
├── composer.json
├── config/
│   ├── activity.php
│   ├── app.php
│   ├── auth.php
│   ├── backups.php
│   ├── broadcasting.php
│   ├── cache.php
│   ├── compile.php
│   ├── cors.php
│   ├── database.php
│   ├── egg_features/
│   │   └── eula.php
│   ├── filesystems.php
│   ├── fractal.php
│   ├── hashids.php
│   ├── hashing.php
│   ├── http.php
│   ├── icp.php
│   ├── ide-helper.php
│   ├── javascript.php
│   ├── logging.php
│   ├── logo.php
│   ├── mail.php
│   ├── prologue/
│   │   └── alerts.php
│   ├── pterodactyl.php
│   ├── queue.php
│   ├── recaptcha.php
│   ├── sanctum.php
│   ├── services.php
│   ├── session.php
│   ├── trustedproxy.php
│   └── view.php
├── database/
│   ├── .gitignore
│   ├── Factories/
│   │   ├── AllocationFactory.php
│   │   ├── ApiKeyFactory.php
│   │   ├── BackupFactory.php
│   │   ├── DatabaseFactory.php
│   │   ├── DatabaseHostFactory.php
│   │   ├── EggFactory.php
│   │   ├── EggVariableFactory.php
│   │   ├── LocationFactory.php
│   │   ├── NestFactory.php
│   │   ├── NodeFactory.php
│   │   ├── ScheduleFactory.php
│   │   ├── ServerFactory.php
│   │   ├── ServerTransferFactory.php
│   │   ├── SubuserFactory.php
│   │   ├── TaskFactory.php
│   │   ├── UserFactory.php
│   │   └── UserSSHKeyFactory.php
│   ├── Seeders/
│   │   ├── .gitkeep
│   │   ├── DatabaseSeeder.php
│   │   ├── EggSeeder.php
│   │   ├── NestSeeder.php
│   │   └── eggs/
│   │       ├── minecraft/
│   │       │   ├── egg-bungeecord.json
│   │       │   ├── egg-forge-minecraft.json
│   │       │   ├── egg-paper.json
│   │       │   ├── egg-sponge--sponge-vanilla.json
│   │       │   └── egg-vanilla-minecraft.json
│   │       ├── rust/
│   │       │   └── egg-rust.json
│   │       ├── source-engine/
│   │       │   ├── egg-ark--survival-evolved.json
│   │       │   ├── egg-counter--strike--global-offensive.json
│   │       │   ├── egg-custom-source-engine-game.json
│   │       │   ├── egg-garrys-mod.json
│   │       │   ├── egg-insurgency.json
│   │       │   └── egg-team-fortress2.json
│   │       └── voice-servers/
│   │           ├── egg-mumble-server.json
│   │           └── egg-teamspeak3-server.json
│   ├── migrations/
│   │   ├── 2016_01_23_195641_add_allocations_table.php
│   │   ├── 2016_01_23_195851_add_api_keys.php
│   │   ├── 2016_01_23_200044_add_api_permissions.php
│   │   ├── 2016_01_23_200159_add_downloads.php
│   │   ├── 2016_01_23_200421_create_failed_jobs_table.php
│   │   ├── 2016_01_23_200440_create_jobs_table.php
│   │   ├── 2016_01_23_200528_add_locations.php
│   │   ├── 2016_01_23_200648_add_nodes.php
│   │   ├── 2016_01_23_201433_add_password_resets.php
│   │   ├── 2016_01_23_201531_add_permissions.php
│   │   ├── 2016_01_23_201649_add_server_variables.php
│   │   ├── 2016_01_23_201748_add_servers.php
│   │   ├── 2016_01_23_202544_add_service_options.php
│   │   ├── 2016_01_23_202731_add_service_varibles.php
│   │   ├── 2016_01_23_202943_add_services.php
│   │   ├── 2016_01_23_203119_create_settings_table.php
│   │   ├── 2016_01_23_203150_add_subusers.php
│   │   ├── 2016_01_23_203159_add_users.php
│   │   ├── 2016_01_23_203947_create_sessions_table.php
│   │   ├── 2016_01_25_234418_rename_permissions_column.php
│   │   ├── 2016_02_07_172148_add_databases_tables.php
│   │   ├── 2016_02_07_181319_add_database_servers_table.php
│   │   ├── 2016_02_13_154306_add_service_option_default_startup.php
│   │   ├── 2016_02_20_155318_add_unique_service_field.php
│   │   ├── 2016_02_27_163411_add_tasks_table.php
│   │   ├── 2016_02_27_163447_add_tasks_log_table.php
│   │   ├── 2016_03_18_155649_add_nullable_field_lastrun.php
│   │   ├── 2016_08_30_212718_add_ip_alias.php
│   │   ├── 2016_08_30_213301_modify_ip_storage_method.php
│   │   ├── 2016_09_01_193520_add_suspension_for_servers.php
│   │   ├── 2016_09_01_211924_remove_active_column.php
│   │   ├── 2016_09_02_190647_add_sftp_password_storage.php
│   │   ├── 2016_09_04_171338_update_jobs_tables.php
│   │   ├── 2016_09_04_172028_update_failed_jobs_table.php
│   │   ├── 2016_09_04_182835_create_notifications_table.php
│   │   ├── 2016_09_07_163017_add_unique_identifier.php
│   │   ├── 2016_09_14_145945_allow_longer_regex_field.php
│   │   ├── 2016_09_17_194246_add_docker_image_column.php
│   │   ├── 2016_09_21_165554_update_servers_column_name.php
│   │   ├── 2016_09_29_213518_rename_double_insurgency.php
│   │   ├── 2016_10_07_152117_build_api_log_table.php
│   │   ├── 2016_10_14_164802_update_api_keys.php
│   │   ├── 2016_10_23_181719_update_misnamed_bungee.php
│   │   ├── 2016_10_23_193810_add_foreign_keys_servers.php
│   │   ├── 2016_10_23_201624_add_foreign_allocations.php
│   │   ├── 2016_10_23_202222_add_foreign_api_keys.php
│   │   ├── 2016_10_23_202703_add_foreign_api_permissions.php
│   │   ├── 2016_10_23_202953_add_foreign_database_servers.php
│   │   ├── 2016_10_23_203105_add_foreign_databases.php
│   │   ├── 2016_10_23_203335_add_foreign_nodes.php
│   │   ├── 2016_10_23_203522_add_foreign_permissions.php
│   │   ├── 2016_10_23_203857_add_foreign_server_variables.php
│   │   ├── 2016_10_23_204157_add_foreign_service_options.php
│   │   ├── 2016_10_23_204321_add_foreign_service_variables.php
│   │   ├── 2016_10_23_204454_add_foreign_subusers.php
│   │   ├── 2016_10_23_204610_add_foreign_tasks.php
│   │   ├── 2016_11_04_000949_add_ark_service_option_fixed.php
│   │   ├── 2016_11_11_220649_add_pack_support.php
│   │   ├── 2016_11_11_231731_set_service_name_unique.php
│   │   ├── 2016_11_27_142519_add_pack_column.php
│   │   ├── 2016_12_01_173018_add_configurable_upload_limit.php
│   │   ├── 2016_12_02_185206_correct_service_variables.php
│   │   ├── 2017_01_03_150436_fix_misnamed_option_tag.php
│   │   ├── 2017_01_07_154228_create_node_configuration_tokens_table.php
│   │   ├── 2017_01_12_135449_add_more_user_data.php
│   │   ├── 2017_02_02_175548_UpdateColumnNames.php
│   │   ├── 2017_02_03_140948_UpdateNodesTable.php
│   │   ├── 2017_02_03_155554_RenameColumns.php
│   │   ├── 2017_02_05_164123_AdjustColumnNames.php
│   │   ├── 2017_02_05_164516_AdjustColumnNamesForServicePacks.php
│   │   ├── 2017_02_09_174834_SetupPermissionsPivotTable.php
│   │   ├── 2017_02_10_171858_UpdateAPIKeyColumnNames.php
│   │   ├── 2017_03_03_224254_UpdateNodeConfigTokensColumns.php
│   │   ├── 2017_03_05_212803_DeleteServiceExecutableOption.php
│   │   ├── 2017_03_10_162934_AddNewServiceOptionsColumns.php
│   │   ├── 2017_03_10_173607_MigrateToNewServiceSystem.php
│   │   ├── 2017_03_11_215455_ChangeServiceVariablesValidationRules.php
│   │   ├── 2017_03_12_150648_MoveFunctionsFromFileToDatabase.php
│   │   ├── 2017_03_14_175631_RenameServicePacksToSingluarPacks.php
│   │   ├── 2017_03_14_200326_AddLockedStatusToTable.php
│   │   ├── 2017_03_16_181109_ReOrganizeDatabaseServersToDatabaseHost.php
│   │   ├── 2017_03_16_181515_CleanupDatabasesDatabase.php
│   │   ├── 2017_03_18_204953_AddForeignKeyToPacks.php
│   │   ├── 2017_03_31_221948_AddServerDescriptionColumn.php
│   │   ├── 2017_04_02_163232_DropDeletedAtColumnFromServers.php
│   │   ├── 2017_04_15_125021_UpgradeTaskSystem.php
│   │   ├── 2017_04_20_171943_AddScriptsToServiceOptions.php
│   │   ├── 2017_04_21_151432_AddServiceScriptTrackingToServers.php
│   │   ├── 2017_04_27_145300_AddCopyScriptFromColumn.php
│   │   ├── 2017_04_27_223629_AddAbilityToDefineConnectionOverSSLWithDaemonBehindProxy.php
│   │   ├── 2017_05_01_141528_DeleteDownloadTable.php
│   │   ├── 2017_05_01_141559_DeleteNodeConfigurationTable.php
│   │   ├── 2017_06_10_152951_add_external_id_to_users.php
│   │   ├── 2017_06_25_133923_ChangeForeignKeyToBeOnCascadeDelete.php
│   │   ├── 2017_07_08_152806_ChangeUserPermissionsToDeleteOnUserDeletion.php
│   │   ├── 2017_07_08_154416_SetAllocationToReferenceNullOnServerDelete.php
│   │   ├── 2017_07_08_154650_CascadeDeletionWhenAServerOrVariableIsDeleted.php
│   │   ├── 2017_07_24_194433_DeleteTaskWhenParentServerIsDeleted.php
│   │   ├── 2017_08_05_115800_CascadeNullValuesForDatabaseHostWhenNodeIsDeleted.php
│   │   ├── 2017_08_05_144104_AllowNegativeValuesForOverallocation.php
│   │   ├── 2017_08_05_174811_SetAllocationUnqiueUsingMultipleFields.php
│   │   ├── 2017_08_15_214555_CascadeDeletionWhenAParentServiceIsDeleted.php
│   │   ├── 2017_08_18_215428_RemovePackWhenParentServiceOptionIsDeleted.php
│   │   ├── 2017_09_10_225749_RenameTasksTableForStructureRefactor.php
│   │   ├── 2017_09_10_225941_CreateSchedulesTable.php
│   │   ├── 2017_09_10_230309_CreateNewTasksTableForSchedules.php
│   │   ├── 2017_09_11_002938_TransferOldTasksToNewScheduler.php
│   │   ├── 2017_09_13_211810_UpdateOldPermissionsToPointToNewScheduleSystem.php
│   │   ├── 2017_09_23_170933_CreateDaemonKeysTable.php
│   │   ├── 2017_09_23_173628_RemoveDaemonSecretFromServersTable.php
│   │   ├── 2017_09_23_185022_RemoveDaemonSecretFromSubusersTable.php
│   │   ├── 2017_10_02_202000_ChangeServicesToUseAMoreUniqueIdentifier.php
│   │   ├── 2017_10_02_202007_ChangeToABetterUniqueServiceConfiguration.php
│   │   ├── 2017_10_03_233202_CascadeDeletionWhenServiceOptionIsDeleted.php
│   │   ├── 2017_10_06_214026_ServicesToNestsConversion.php
│   │   ├── 2017_10_06_214053_ServiceOptionsToEggsConversion.php
│   │   ├── 2017_10_06_215741_ServiceVariablesToEggVariablesConversion.php
│   │   ├── 2017_10_24_222238_RemoveLegacySFTPInformation.php
│   │   ├── 2017_11_11_161922_Add2FaLastAuthorizationTimeColumn.php
│   │   ├── 2017_11_19_122708_MigratePubPrivFormatToSingleKey.php
│   │   ├── 2017_12_04_184012_DropAllocationsWhenNodeIsDeleted.php
│   │   ├── 2017_12_12_220426_MigrateSettingsTableToNewFormat.php
│   │   ├── 2018_01_01_122821_AllowNegativeValuesForServerSwap.php
│   │   ├── 2018_01_11_213943_AddApiKeyPermissionColumns.php
│   │   ├── 2018_01_13_142012_SetupTableForKeyEncryption.php
│   │   ├── 2018_01_13_145209_AddLastUsedAtColumn.php
│   │   ├── 2018_02_04_145617_AllowTextInUserExternalId.php
│   │   ├── 2018_02_10_151150_remove_unique_index_on_external_id_column.php
│   │   ├── 2018_02_17_134254_ensure_unique_allocation_id_on_servers_table.php
│   │   ├── 2018_02_24_112356_add_external_id_column_to_servers_table.php
│   │   ├── 2018_02_25_160152_remove_default_null_value_on_table.php
│   │   ├── 2018_02_25_160604_define_unique_index_on_users_external_id.php
│   │   ├── 2018_03_01_192831_add_database_and_port_limit_columns_to_servers_table.php
│   │   ├── 2018_03_15_124536_add_description_to_nodes.php
│   │   ├── 2018_05_04_123826_add_maintenance_to_nodes.php
│   │   ├── 2018_09_03_143756_allow_egg_variables_to_have_longer_values.php
│   │   ├── 2018_09_03_144005_allow_server_variables_to_have_longer_values.php
│   │   ├── 2019_03_02_142328_set_allocation_limit_default_null.php
│   │   ├── 2019_03_02_151321_fix_unique_index_to_account_for_host.php
│   │   ├── 2020_03_22_163911_merge_permissions_table_into_subusers.php
│   │   ├── 2020_03_22_164814_drop_permissions_table.php
│   │   ├── 2020_04_03_203624_add_threads_column_to_servers_table.php
│   │   ├── 2020_04_03_230614_create_backups_table.php
│   │   ├── 2020_04_04_131016_add_table_server_transfers.php
│   │   ├── 2020_04_10_141024_store_node_tokens_as_encrypted_value.php
│   │   ├── 2020_04_17_203438_allow_nullable_descriptions.php
│   │   ├── 2020_04_22_055500_add_max_connections_column.php
│   │   ├── 2020_04_26_111208_add_backup_limit_to_servers.php
│   │   ├── 2020_05_20_234655_add_mounts_table.php
│   │   ├── 2020_05_21_192756_add_mount_server_table.php
│   │   ├── 2020_07_02_213612_create_user_recovery_tokens_table.php
│   │   ├── 2020_07_09_201845_add_notes_column_for_allocations.php
│   │   ├── 2020_08_20_205533_add_backup_state_column_to_backups.php
│   │   ├── 2020_08_22_132500_update_bytes_to_unsigned_bigint.php
│   │   ├── 2020_08_23_175331_modify_checksums_column_for_backups.php
│   │   ├── 2020_09_13_110007_drop_packs_from_servers.php
│   │   ├── 2020_09_13_110021_drop_packs_from_api_key_permissions.php
│   │   ├── 2020_09_13_110047_drop_packs_table.php
│   │   ├── 2020_09_13_113503_drop_daemon_key_table.php
│   │   ├── 2020_10_10_165437_change_unique_database_name_to_account_for_server.php
│   │   ├── 2020_10_26_194904_remove_nullable_from_schedule_name_field.php
│   │   ├── 2020_11_02_201014_add_features_column_to_eggs.php
│   │   ├── 2020_12_12_102435_support_multiple_docker_images_and_updates.php
│   │   ├── 2020_12_14_013707_make_successful_nullable_in_server_transfers.php
│   │   ├── 2020_12_17_014330_add_archived_field_to_server_transfers_table.php
│   │   ├── 2020_12_24_092449_make_allocation_fields_json.php
│   │   ├── 2020_12_26_184914_add_upload_id_column_to_backups_table.php
│   │   ├── 2021_01_10_153937_add_file_denylist_to_egg_configs.php
│   │   ├── 2021_01_13_013420_add_cron_month.php
│   │   ├── 2021_01_17_102401_create_audit_logs_table.php
│   │   ├── 2021_01_17_152623_add_generic_server_status_column.php
│   │   ├── 2021_01_26_210502_update_file_denylist_to_json.php
│   │   ├── 2021_02_23_205021_add_index_for_server_and_action.php
│   │   ├── 2021_02_23_212657_make_sftp_port_unsigned_int.php
│   │   ├── 2021_03_21_104718_force_cron_month_field_to_have_value_if_missing.php
│   │   ├── 2021_05_01_092457_add_continue_on_failure_option_to_tasks.php
│   │   ├── 2021_05_01_092523_add_only_run_when_server_online_option_to_schedules.php
│   │   ├── 2021_05_03_201016_add_support_for_locking_a_backup.php
│   │   ├── 2021_07_12_013420_remove_userinteraction.php
│   │   ├── 2021_07_17_211512_create_user_ssh_keys_table.php
│   │   ├── 2021_08_03_210600_change_successful_field_to_default_to_false_on_backups_table.php
│   │   ├── 2021_08_21_175111_add_foreign_keys_to_mount_node_table.php
│   │   ├── 2021_08_21_175118_add_foreign_keys_to_mount_server_table.php
│   │   ├── 2021_08_21_180921_add_foreign_keys_to_egg_mount_table.php
│   │   ├── 2022_01_25_030847_drop_google_analytics.php
│   │   ├── 2022_05_07_165334_migrate_egg_images_array_to_new_format.php
│   │   ├── 2022_05_28_135717_create_activity_logs_table.php
│   │   ├── 2022_05_29_140349_create_activity_log_actors_table.php
│   │   ├── 2022_06_18_112822_track_api_key_usage_for_activity_events.php
│   │   ├── 2022_08_16_214400_add_force_outgoing_ip_column_to_eggs_table.php
│   │   ├── 2022_08_16_230204_add_installed_at_column_to_servers_table.php
│   │   ├── 2022_12_12_213937_update_mail_settings_to_new_format.php
│   │   ├── 2023_01_24_210051_add_uuid_column_to_failed_jobs_table.php
│   │   ├── 2023_02_23_191004_add_expires_at_column_to_api_keys_table.php
│   │   └── 2024_07_13_091852_clear_unused_allocation_notes.php
│   └── schema/
│       └── mysql-schema.sql
├── docker-compose.example.yml
├── flake.nix
├── index.html
├── jest.config.js
├── package.json
├── phpstan.neon
├── phpunit.xml
├── postcss.config.js
├── public/
│   ├── .gitignore
│   ├── .htaccess
│   ├── favicons/
│   │   ├── browserconfig.xml
│   │   └── manifest.json
│   ├── index.php
│   ├── js/
│   │   ├── autocomplete.js
│   │   ├── keyboard.polyfill.js
│   │   └── laroute.js
│   ├── robots.txt
│   └── themes/
│       └── pterodactyl/
│           ├── css/
│           │   ├── checkbox.css
│           │   ├── pterodactyl.css
│           │   └── terminal.css
│           ├── js/
│           │   ├── admin/
│           │   │   ├── functions.js
│           │   │   ├── new-server.js
│           │   │   └── server/
│           │   │       └── transfer.js
│           │   └── plugins/
│           │       └── minecraft/
│           │           └── eula.js
│           └── vendor/
│               ├── ace/
│               │   ├── ace.js
│               │   ├── ext-elastic_tabstops_lite.js
│               │   ├── ext-error_marker.js
│               │   ├── ext-linking.js
│               │   ├── ext-modelist.js
│               │   ├── ext-old_ie.js
│               │   ├── ext-searchbox.js
│               │   ├── ext-settings_menu.js
│               │   ├── ext-spellcheck.js
│               │   ├── ext-split.js
│               │   ├── ext-static_highlight.js
│               │   ├── ext-textarea.js
│               │   ├── ext-themelist.js
│               │   ├── ext-whitespace.js
│               │   ├── keybinding-emacs.js
│               │   ├── keybinding-vim.js
│               │   ├── mode-assembly_x86.js
│               │   ├── mode-c_cpp.js
│               │   ├── mode-coffee.js
│               │   ├── mode-csharp.js
│               │   ├── mode-css.js
│               │   ├── mode-golang.js
│               │   ├── mode-haml.js
│               │   ├── mode-html.js
│               │   ├── mode-ini.js
│               │   ├── mode-java.js
│               │   ├── mode-javascript.js
│               │   ├── mode-json.js
│               │   ├── mode-kotlin.js
│               │   ├── mode-lua.js
│               │   ├── mode-markdown.js
│               │   ├── mode-mysql.js
│               │   ├── mode-objectivec.js
│               │   ├── mode-perl.js
│               │   ├── mode-php.js
│               │   ├── mode-plain_text.js
│               │   ├── mode-properties.js
│               │   ├── mode-python.js
│               │   ├── mode-ruby.js
│               │   ├── mode-rust.js
│               │   ├── mode-sh.js
│               │   ├── mode-smarty.js
│               │   ├── mode-sql.js
│               │   ├── mode-xml.js
│               │   ├── mode-yaml.js
│               │   ├── theme-chrome.js
│               │   ├── worker-css.js
│               │   ├── worker-html.js
│               │   ├── worker-javascript.js
│               │   ├── worker-json.js
│               │   ├── worker-lua.js
│               │   ├── worker-php.js
│               │   └── worker-xml.js
│               ├── ansi/
│               │   └── ansi_up.js
│               ├── jquery/
│               │   └── jquery.js
│               ├── lodash/
│               │   └── lodash.js
│               ├── mousewheel/
│               │   └── jquery.mousewheel-min.js
│               └── particlesjs/
│                   └── particles.json
├── resources/
│   ├── lang/
│   │   ├── en/
│   │   │   ├── activity.php
│   │   │   ├── admin/
│   │   │   │   ├── nests.php
│   │   │   │   ├── node.php
│   │   │   │   ├── server.php
│   │   │   │   └── user.php
│   │   │   ├── auth.php
│   │   │   ├── command/
│   │   │   │   └── messages.php
│   │   │   ├── dashboard/
│   │   │   │   ├── account.php
│   │   │   │   └── index.php
│   │   │   ├── exceptions.php
│   │   │   ├── pagination.php
│   │   │   ├── passwords.php
│   │   │   ├── server/
│   │   │   │   └── users.php
│   │   │   ├── strings.php
│   │   │   └── validation.php
│   │   └── zh/
│   │       ├── activity.php
│   │       ├── admin/
│   │       │   ├── nests.php
│   │       │   ├── node.php
│   │       │   ├── server.php
│   │       │   └── user.php
│   │       ├── auth.php
│   │       ├── command/
│   │       │   └── messages.php
│   │       ├── dashboard/
│   │       │   ├── account.php
│   │       │   └── index.php
│   │       ├── exceptions.php
│   │       ├── pagination.php
│   │       ├── passwords.php
│   │       ├── server/
│   │       │   └── users.php
│   │       ├── strings.php
│   │       └── validation.php
│   ├── scripts/
│   │   ├── TransitionRouter.tsx
│   │   ├── __mocks__/
│   │   │   └── file.ts
│   │   ├── api/
│   │   │   ├── account/
│   │   │   │   ├── activity.ts
│   │   │   │   ├── createApiKey.ts
│   │   │   │   ├── deleteApiKey.ts
│   │   │   │   ├── disableAccountTwoFactor.ts
│   │   │   │   ├── enableAccountTwoFactor.ts
│   │   │   │   ├── getApiKeys.ts
│   │   │   │   ├── getTwoFactorTokenData.ts
│   │   │   │   ├── ssh-keys.ts
│   │   │   │   ├── updateAccountEmail.ts
│   │   │   │   └── updateAccountPassword.ts
│   │   │   ├── auth/
│   │   │   │   ├── login.ts
│   │   │   │   ├── loginCheckpoint.ts
│   │   │   │   ├── performPasswordReset.ts
│   │   │   │   └── requestPasswordResetEmail.ts
│   │   │   ├── definitions/
│   │   │   │   ├── helpers.ts
│   │   │   │   ├── index.d.ts
│   │   │   │   └── user/
│   │   │   │       ├── index.ts
│   │   │   │       ├── models.d.ts
│   │   │   │       └── transformers.ts
│   │   │   ├── getServers.ts
│   │   │   ├── getSystemPermissions.ts
│   │   │   ├── http.ts
│   │   │   ├── interceptors.ts
│   │   │   ├── server/
│   │   │   │   ├── activity.ts
│   │   │   │   ├── backups/
│   │   │   │   │   ├── createServerBackup.ts
│   │   │   │   │   ├── deleteBackup.ts
│   │   │   │   │   ├── getBackupDownloadUrl.ts
│   │   │   │   │   └── index.ts
│   │   │   │   ├── databases/
│   │   │   │   │   ├── createServerDatabase.ts
│   │   │   │   │   ├── deleteServerDatabase.ts
│   │   │   │   │   ├── getServerDatabases.ts
│   │   │   │   │   └── rotateDatabasePassword.ts
│   │   │   │   ├── files/
│   │   │   │   │   ├── chmodFiles.ts
│   │   │   │   │   ├── compressFiles.ts
│   │   │   │   │   ├── copyFile.ts
│   │   │   │   │   ├── createDirectory.ts
│   │   │   │   │   ├── decompressFiles.ts
│   │   │   │   │   ├── deleteFiles.ts
│   │   │   │   │   ├── getFileContents.ts
│   │   │   │   │   ├── getFileDownloadUrl.ts
│   │   │   │   │   ├── getFileUploadUrl.ts
│   │   │   │   │   ├── loadDirectory.ts
│   │   │   │   │   ├── renameFiles.ts
│   │   │   │   │   └── saveFileContents.ts
│   │   │   │   ├── getServer.ts
│   │   │   │   ├── getServerResourceUsage.ts
│   │   │   │   ├── getWebsocketToken.ts
│   │   │   │   ├── network/
│   │   │   │   │   ├── createServerAllocation.ts
│   │   │   │   │   ├── deleteServerAllocation.ts
│   │   │   │   │   ├── setPrimaryServerAllocation.ts
│   │   │   │   │   └── setServerAllocationNotes.ts
│   │   │   │   ├── reinstallServer.ts
│   │   │   │   ├── renameServer.ts
│   │   │   │   ├── schedules/
│   │   │   │   │   ├── createOrUpdateSchedule.ts
│   │   │   │   │   ├── createOrUpdateScheduleTask.ts
│   │   │   │   │   ├── deleteSchedule.ts
│   │   │   │   │   ├── deleteScheduleTask.ts
│   │   │   │   │   ├── getServerSchedule.ts
│   │   │   │   │   ├── getServerSchedules.ts
│   │   │   │   │   └── triggerScheduleExecution.ts
│   │   │   │   ├── setSelectedDockerImage.ts
│   │   │   │   ├── types.d.ts
│   │   │   │   ├── updateStartupEgg.ts
│   │   │   │   ├── updateStartupVariable.ts
│   │   │   │   └── users/
│   │   │   │       ├── createOrUpdateSubuser.ts
│   │   │   │       ├── deleteSubuser.ts
│   │   │   │       └── getServerSubusers.ts
│   │   │   ├── swr/
│   │   │   │   ├── getServerAllocations.ts
│   │   │   │   ├── getServerBackups.ts
│   │   │   │   └── getServerStartup.ts
│   │   │   └── transformers.ts
│   │   ├── assets/
│   │   │   ├── css/
│   │   │   │   └── GlobalStylesheet.ts
│   │   │   └── tailwind.css
│   │   ├── components/
│   │   │   ├── App.tsx
│   │   │   ├── Avatar.tsx
│   │   │   ├── FlashMessageRender.tsx
│   │   │   ├── MessageBox.tsx
│   │   │   ├── NavigationBar.tsx
│   │   │   ├── auth/
│   │   │   │   ├── ForgotPasswordContainer.tsx
│   │   │   │   ├── LoginCheckpointContainer.tsx
│   │   │   │   ├── LoginContainer.tsx
│   │   │   │   ├── LoginFormContainer.tsx
│   │   │   │   └── ResetPasswordContainer.tsx
│   │   │   ├── dashboard/
│   │   │   │   ├── AccountApiContainer.tsx
│   │   │   │   ├── AccountOverviewContainer.tsx
│   │   │   │   ├── ApiKeyModal.tsx
│   │   │   │   ├── DashboardContainer.tsx
│   │   │   │   ├── ServerRow.tsx
│   │   │   │   ├── activity/
│   │   │   │   │   └── ActivityLogContainer.tsx
│   │   │   │   ├── forms/
│   │   │   │   │   ├── ConfigureTwoFactorForm.tsx
│   │   │   │   │   ├── CreateApiKeyForm.tsx
│   │   │   │   │   ├── DisableTOTPDialog.tsx
│   │   │   │   │   ├── RecoveryTokensDialog.tsx
│   │   │   │   │   ├── SetupTOTPDialog.tsx
│   │   │   │   │   ├── UpdateEmailAddressForm.tsx
│   │   │   │   │   └── UpdatePasswordForm.tsx
│   │   │   │   ├── search/
│   │   │   │   │   ├── SearchContainer.tsx
│   │   │   │   │   └── SearchModal.tsx
│   │   │   │   └── ssh/
│   │   │   │       ├── AccountSSHContainer.tsx
│   │   │   │       ├── CreateSSHKeyForm.tsx
│   │   │   │       └── DeleteSSHKeyButton.tsx
│   │   │   ├── elements/
│   │   │   │   ├── AuthenticatedRoute.tsx
│   │   │   │   ├── Button.tsx
│   │   │   │   ├── Can.tsx
│   │   │   │   ├── Checkbox.tsx
│   │   │   │   ├── Code.tsx
│   │   │   │   ├── CodemirrorEditor.tsx
│   │   │   │   ├── ConfirmationModal.tsx
│   │   │   │   ├── ContentBox.tsx
│   │   │   │   ├── ContentContainer.tsx
│   │   │   │   ├── CopyOnClick.tsx
│   │   │   │   ├── DropdownMenu.tsx
│   │   │   │   ├── ErrorBoundary.tsx
│   │   │   │   ├── Fade.tsx
│   │   │   │   ├── Field.tsx
│   │   │   │   ├── FormikFieldWrapper.tsx
│   │   │   │   ├── FormikSwitch.tsx
│   │   │   │   ├── GreyRowBox.tsx
│   │   │   │   ├── Icon.tsx
│   │   │   │   ├── Input.tsx
│   │   │   │   ├── InputError.tsx
│   │   │   │   ├── InputSpinner.tsx
│   │   │   │   ├── Label.tsx
│   │   │   │   ├── Modal.tsx
│   │   │   │   ├── PageContentBlock.tsx
│   │   │   │   ├── Pagination.tsx
│   │   │   │   ├── PermissionRoute.tsx
│   │   │   │   ├── Portal.tsx
│   │   │   │   ├── ProgressBar.tsx
│   │   │   │   ├── ScreenBlock.tsx
│   │   │   │   ├── Select.tsx
│   │   │   │   ├── ServerContentBlock.tsx
│   │   │   │   ├── Spinner.tsx
│   │   │   │   ├── SpinnerOverlay.tsx
│   │   │   │   ├── SubNavigation.tsx
│   │   │   │   ├── Switch.tsx
│   │   │   │   ├── TitledGreyBox.tsx
│   │   │   │   ├── Translate.tsx
│   │   │   │   ├── activity/
│   │   │   │   │   ├── ActivityLogEntry.tsx
│   │   │   │   │   ├── ActivityLogMetaButton.tsx
│   │   │   │   │   └── style.module.css
│   │   │   │   ├── alert/
│   │   │   │   │   ├── Alert.tsx
│   │   │   │   │   └── index.ts
│   │   │   │   ├── button/
│   │   │   │   │   ├── Button.tsx
│   │   │   │   │   ├── index.ts
│   │   │   │   │   ├── style.module.css
│   │   │   │   │   └── types.ts
│   │   │   │   ├── dialog/
│   │   │   │   │   ├── ConfirmationDialog.tsx
│   │   │   │   │   ├── Dialog.tsx
│   │   │   │   │   ├── DialogFooter.tsx
│   │   │   │   │   ├── DialogIcon.tsx
│   │   │   │   │   ├── context.ts
│   │   │   │   │   ├── index.ts
│   │   │   │   │   ├── style.module.css
│   │   │   │   │   └── types.d.ts
│   │   │   │   ├── dropdown/
│   │   │   │   │   ├── Dropdown.tsx
│   │   │   │   │   ├── DropdownButton.tsx
│   │   │   │   │   ├── DropdownItem.tsx
│   │   │   │   │   ├── index.ts
│   │   │   │   │   └── style.module.css
│   │   │   │   ├── inputs/
│   │   │   │   │   ├── Checkbox.tsx
│   │   │   │   │   ├── InputField.tsx
│   │   │   │   │   ├── index.ts
│   │   │   │   │   └── styles.module.css
│   │   │   │   ├── table/
│   │   │   │   │   └── PaginationFooter.tsx
│   │   │   │   ├── tooltip/
│   │   │   │   │   └── Tooltip.tsx
│   │   │   │   └── transitions/
│   │   │   │       ├── FadeTransition.tsx
│   │   │   │       └── index.ts
│   │   │   ├── history.ts
│   │   │   ├── server/
│   │   │   │   ├── ConflictStateRenderer.tsx
│   │   │   │   ├── InstallListener.tsx
│   │   │   │   ├── ServerActivityLogContainer.tsx
│   │   │   │   ├── TransferListener.tsx
│   │   │   │   ├── UptimeDuration.tsx
│   │   │   │   ├── WebsocketHandler.tsx
│   │   │   │   ├── backups/
│   │   │   │   │   ├── BackupContainer.tsx
│   │   │   │   │   ├── BackupContextMenu.tsx
│   │   │   │   │   ├── BackupRow.tsx
│   │   │   │   │   └── CreateBackupButton.tsx
│   │   │   │   ├── console/
│   │   │   │   │   ├── ChartBlock.tsx
│   │   │   │   │   ├── Console.tsx
│   │   │   │   │   ├── PowerButtons.tsx
│   │   │   │   │   ├── ServerConsoleContainer.tsx
│   │   │   │   │   ├── ServerDetailsBlock.tsx
│   │   │   │   │   ├── StatBlock.tsx
│   │   │   │   │   ├── StatGraphs.tsx
│   │   │   │   │   ├── chart.ts
│   │   │   │   │   └── style.module.css
│   │   │   │   ├── databases/
│   │   │   │   │   ├── CreateDatabaseButton.tsx
│   │   │   │   │   ├── DatabaseRow.tsx
│   │   │   │   │   ├── DatabasesContainer.tsx
│   │   │   │   │   └── RotatePasswordButton.tsx
│   │   │   │   ├── events.ts
│   │   │   │   ├── features/
│   │   │   │   │   ├── Features.tsx
│   │   │   │   │   ├── GSLTokenModalFeature.tsx
│   │   │   │   │   ├── HytaleOauthRequireFeature.tsx
│   │   │   │   │   ├── JavaVersionModalFeature.tsx
│   │   │   │   │   ├── PIDLimitModalFeature.tsx
│   │   │   │   │   ├── SteamDiskSpaceFeature.tsx
│   │   │   │   │   ├── eula/
│   │   │   │   │   │   └── EulaModalFeature.tsx
│   │   │   │   │   └── index.ts
│   │   │   │   ├── files/
│   │   │   │   │   ├── ChmodFileModal.tsx
│   │   │   │   │   ├── FileDropdownMenu.tsx
│   │   │   │   │   ├── FileEditContainer.tsx
│   │   │   │   │   ├── FileManagerBreadcrumbs.tsx
│   │   │   │   │   ├── FileManagerContainer.tsx
│   │   │   │   │   ├── FileManagerStatus.tsx
│   │   │   │   │   ├── FileNameModal.tsx
│   │   │   │   │   ├── FileObjectRow.tsx
│   │   │   │   │   ├── MassActionsBar.tsx
│   │   │   │   │   ├── NewDirectoryButton.tsx
│   │   │   │   │   ├── RenameFileModal.tsx
│   │   │   │   │   ├── SelectFileCheckbox.tsx
│   │   │   │   │   ├── UploadButton.tsx
│   │   │   │   │   └── style.module.css
│   │   │   │   ├── network/
│   │   │   │   │   ├── AllocationRow.tsx
│   │   │   │   │   ├── DeleteAllocationButton.tsx
│   │   │   │   │   └── NetworkContainer.tsx
│   │   │   │   ├── schedules/
│   │   │   │   │   ├── DeleteScheduleButton.tsx
│   │   │   │   │   ├── EditScheduleModal.tsx
│   │   │   │   │   ├── NewTaskButton.tsx
│   │   │   │   │   ├── RunScheduleButton.tsx
│   │   │   │   │   ├── ScheduleCheatsheetCards.tsx
│   │   │   │   │   ├── ScheduleContainer.tsx
│   │   │   │   │   ├── ScheduleCronRow.tsx
│   │   │   │   │   ├── ScheduleEditContainer.tsx
│   │   │   │   │   ├── ScheduleRow.tsx
│   │   │   │   │   ├── ScheduleSimpleForm.tsx
│   │   │   │   │   ├── ScheduleTaskRow.tsx
│   │   │   │   │   └── TaskDetailsModal.tsx
│   │   │   │   ├── settings/
│   │   │   │   │   ├── ReinstallServerBox.tsx
│   │   │   │   │   ├── RenameServerBox.tsx
│   │   │   │   │   └── SettingsContainer.tsx
│   │   │   │   ├── startup/
│   │   │   │   │   ├── StartupContainer.tsx
│   │   │   │   │   └── VariableBox.tsx
│   │   │   │   └── users/
│   │   │   │       ├── AddSubuserButton.tsx
│   │   │   │       ├── EditSubuserModal.tsx
│   │   │   │       ├── PermissionRow.tsx
│   │   │   │       ├── PermissionTitleBox.tsx
│   │   │   │       ├── RemoveSubuserButton.tsx
│   │   │   │       ├── UserRow.tsx
│   │   │   │       └── UsersContainer.tsx
│   │   │   └── types.ts
│   │   ├── context/
│   │   │   └── ModalContext.ts
│   │   ├── easy-peasy.d.ts
│   │   ├── globals.d.ts
│   │   ├── helpers.ts
│   │   ├── hoc/
│   │   │   ├── RequireServerPermission.tsx
│   │   │   ├── asDialog.tsx
│   │   │   └── asModal.tsx
│   │   ├── i18n.ts
│   │   ├── index.tsx
│   │   ├── lib/
│   │   │   ├── formatters.spec.ts
│   │   │   ├── formatters.ts
│   │   │   ├── helpers.spec.ts
│   │   │   ├── helpers.ts
│   │   │   ├── objects.spec.ts
│   │   │   ├── objects.ts
│   │   │   ├── strings.spec.ts
│   │   │   └── strings.ts
│   │   ├── macros.d.ts
│   │   ├── modes.ts
│   │   ├── plugins/
│   │   │   ├── Websocket.ts
│   │   │   ├── XtermScrollDownHelperAddon.ts
│   │   │   ├── useDeepCompareEffect.ts
│   │   │   ├── useDeepCompareMemo.ts
│   │   │   ├── useDeepMemoize.ts
│   │   │   ├── useEventListener.ts
│   │   │   ├── useFileManagerSwr.ts
│   │   │   ├── useFilteredObject.ts
│   │   │   ├── useFlash.ts
│   │   │   ├── useLocationHash.ts
│   │   │   ├── usePermissions.ts
│   │   │   ├── usePersistedState.ts
│   │   │   ├── useSWRKey.ts
│   │   │   └── useWebsocketEvent.ts
│   │   ├── routers/
│   │   │   ├── AuthenticationRouter.tsx
│   │   │   ├── DashboardRouter.tsx
│   │   │   ├── ServerRouter.tsx
│   │   │   └── routes.ts
│   │   ├── setup-tests.ts
│   │   ├── state/
│   │   │   ├── flashes.ts
│   │   │   ├── hooks.ts
│   │   │   ├── index.ts
│   │   │   ├── permissions.ts
│   │   │   ├── progress.ts
│   │   │   ├── server/
│   │   │   │   ├── databases.ts
│   │   │   │   ├── files.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── schedules.ts
│   │   │   │   ├── socket.ts
│   │   │   │   └── subusers.ts
│   │   │   ├── settings.ts
│   │   │   └── user.ts
│   │   └── theme.ts
│   └── views/
│       ├── admin/
│       │   ├── api/
│       │   │   ├── index.blade.php
│       │   │   └── new.blade.php
│       │   ├── databases/
│       │   │   ├── index.blade.php
│       │   │   └── view.blade.php
│       │   ├── eggs/
│       │   │   ├── new.blade.php
│       │   │   ├── scripts.blade.php
│       │   │   ├── variables.blade.php
│       │   │   └── view.blade.php
│       │   ├── index.blade.php
│       │   ├── locations/
│       │   │   ├── index.blade.php
│       │   │   └── view.blade.php
│       │   ├── mounts/
│       │   │   ├── index.blade.php
│       │   │   └── view.blade.php
│       │   ├── nests/
│       │   │   ├── index.blade.php
│       │   │   ├── new.blade.php
│       │   │   └── view.blade.php
│       │   ├── nodes/
│       │   │   ├── index.blade.php
│       │   │   ├── new.blade.php
│       │   │   └── view/
│       │   │       ├── allocation.blade.php
│       │   │       ├── configuration.blade.php
│       │   │       ├── index.blade.php
│       │   │       ├── servers.blade.php
│       │   │       └── settings.blade.php
│       │   ├── servers/
│       │   │   ├── index.blade.php
│       │   │   ├── new.blade.php
│       │   │   ├── partials/
│       │   │   │   └── navigation.blade.php
│       │   │   └── view/
│       │   │       ├── build.blade.php
│       │   │       ├── database.blade.php
│       │   │       ├── delete.blade.php
│       │   │       ├── details.blade.php
│       │   │       ├── index.blade.php
│       │   │       ├── manage.blade.php
│       │   │       ├── mounts.blade.php
│       │   │       └── startup.blade.php
│       │   ├── settings/
│       │   │   ├── advanced.blade.php
│       │   │   ├── index.blade.php
│       │   │   └── mail.blade.php
│       │   └── users/
│       │       ├── index.blade.php
│       │       ├── new.blade.php
│       │       └── view.blade.php
│       ├── layouts/
│       │   ├── admin.blade.php
│       │   └── scripts.blade.php
│       ├── partials/
│       │   ├── admin/
│       │   │   └── settings/
│       │   │       ├── nav.blade.php
│       │   │       └── notice.blade.php
│       │   └── schedules/
│       │       └── task-template.blade.php
│       ├── templates/
│       │   ├── auth/
│       │   │   └── core.blade.php
│       │   ├── base/
│       │   │   └── core.blade.php
│       │   └── wrapper.blade.php
│       └── vendor/
│           ├── notifications/
│           │   ├── email-plain.blade.php
│           │   └── email.blade.php
│           └── pagination/
│               └── default.blade.php
├── routes/
│   ├── admin.php
│   ├── api-application.php
│   ├── api-client.php
│   ├── api-remote.php
│   ├── auth.php
│   └── base.php
├── shell.nix
├── storage/
│   ├── app/
│   │   └── .gitignore
│   ├── clockwork/
│   │   └── .gitignore
│   └── logs/
│       └── .gitignore
├── tailwind.config.js
├── tests/
│   ├── Assertions/
│   │   ├── AssertsActivityLogged.php
│   │   └── MiddlewareAttributeAssertionsTrait.php
│   ├── Integration/
│   │   ├── Api/
│   │   │   ├── Application/
│   │   │   │   ├── ApplicationApiIntegrationTestCase.php
│   │   │   │   ├── Location/
│   │   │   │   │   └── LocationControllerTest.php
│   │   │   │   ├── Nests/
│   │   │   │   │   ├── EggControllerTest.php
│   │   │   │   │   └── NestControllerTest.php
│   │   │   │   ├── Nodes/
│   │   │   │   │   └── NodeController/
│   │   │   │   │       └── UpdateNodeTest.php
│   │   │   │   └── Users/
│   │   │   │       ├── ExternalUserControllerTest.php
│   │   │   │       └── UserControllerTest.php
│   │   │   ├── Client/
│   │   │   │   ├── AccountControllerTest.php
│   │   │   │   ├── ApiKeyControllerTest.php
│   │   │   │   ├── ClientApiIntegrationTestCase.php
│   │   │   │   ├── ClientControllerTest.php
│   │   │   │   ├── SSHKeyControllerTest.php
│   │   │   │   ├── Server/
│   │   │   │   │   ├── Allocation/
│   │   │   │   │   │   ├── AllocationAuthorizationTest.php
│   │   │   │   │   │   ├── CreateNewAllocationTest.php
│   │   │   │   │   │   └── DeleteAllocationTest.php
│   │   │   │   │   ├── Backup/
│   │   │   │   │   │   ├── BackupAuthorizationTest.php
│   │   │   │   │   │   └── DeleteBackupTest.php
│   │   │   │   │   ├── CommandControllerTest.php
│   │   │   │   │   ├── Database/
│   │   │   │   │   │   └── DatabaseAuthorizationTest.php
│   │   │   │   │   ├── Files/
│   │   │   │   │   │   └── CompressFilesTest.php
│   │   │   │   │   ├── NetworkAllocationControllerTest.php
│   │   │   │   │   ├── PowerControllerTest.php
│   │   │   │   │   ├── ResourceUtilizationControllerTest.php
│   │   │   │   │   ├── Schedule/
│   │   │   │   │   │   ├── CreateServerScheduleTest.php
│   │   │   │   │   │   ├── DeleteServerScheduleTest.php
│   │   │   │   │   │   ├── ExecuteScheduleTest.php
│   │   │   │   │   │   ├── GetServerSchedulesTest.php
│   │   │   │   │   │   ├── ScheduleAuthorizationTest.php
│   │   │   │   │   │   └── UpdateServerScheduleTest.php
│   │   │   │   │   ├── ScheduleTask/
│   │   │   │   │   │   ├── CreateServerScheduleTaskTest.php
│   │   │   │   │   │   └── DeleteScheduleTaskTest.php
│   │   │   │   │   ├── SettingsControllerTest.php
│   │   │   │   │   ├── Startup/
│   │   │   │   │   │   ├── GetStartupAndVariablesTest.php
│   │   │   │   │   │   └── UpdateStartupVariableTest.php
│   │   │   │   │   ├── Subuser/
│   │   │   │   │   │   ├── CreateServerSubuserTest.php
│   │   │   │   │   │   ├── DeleteSubuserTest.php
│   │   │   │   │   │   ├── SubuserAuthorizationTest.php
│   │   │   │   │   │   └── UpdateSubuserTest.php
│   │   │   │   │   └── WebsocketControllerTest.php
│   │   │   │   └── TwoFactorControllerTest.php
│   │   │   └── Remote/
│   │   │       ├── ServerTransferControllerTest.php
│   │   │       └── SftpAuthenticationControllerTest.php
│   │   ├── Http/
│   │   │   ├── Controllers/
│   │   │   │   ├── Admin/
│   │   │   │   │   └── UserController/
│   │   │   │   │       └── DeleteUserTest.php
│   │   │   │   └── Auth/
│   │   │   │       └── LoginCheckpointControllerTest.php
│   │   │   └── HttpTestCase.php
│   │   ├── IntegrationTestCase.php
│   │   ├── Jobs/
│   │   │   ├── RevokeSftpAccessJobTest.php
│   │   │   └── Schedule/
│   │   │       └── RunTaskJobTest.php
│   │   ├── Services/
│   │   │   ├── Allocations/
│   │   │   │   └── FindAssignableAllocationServiceTest.php
│   │   │   ├── Backups/
│   │   │   │   └── DeleteBackupServiceTest.php
│   │   │   ├── Databases/
│   │   │   │   ├── DatabaseManagementServiceTest.php
│   │   │   │   └── DeployServerDatabaseServiceTest.php
│   │   │   ├── Deployment/
│   │   │   │   └── FindViableNodesServiceTest.php
│   │   │   ├── Schedules/
│   │   │   │   └── ProcessScheduleServiceTest.php
│   │   │   ├── Servers/
│   │   │   │   ├── BuildModificationServiceTest.php
│   │   │   │   ├── ServerCreationServiceTest.php
│   │   │   │   ├── ServerDeletionServiceTest.php
│   │   │   │   ├── StartupModificationServiceTest.php
│   │   │   │   ├── SuspensionServiceTest.php
│   │   │   │   └── VariableValidatorServiceTest.php
│   │   │   └── Users/
│   │   │       └── UserDeletionServiceTest.php
│   │   └── TestResponse.php
│   ├── TestCase.php
│   ├── Traits/
│   │   ├── Http/
│   │   │   ├── IntegrationJsonRequestAssertions.php
│   │   │   ├── MocksMiddlewareClosure.php
│   │   │   └── RequestMockHelpers.php
│   │   ├── Integration/
│   │   │   └── CreatesTestModels.php
│   │   ├── MocksPdoConnection.php
│   │   ├── MocksRequestException.php
│   │   └── MocksUuids.php
│   └── Unit/
│       ├── Helpers/
│       │   ├── EnvironmentWriterTraitTest.php
│       │   └── IsDigitTest.php
│       ├── Http/
│       │   └── Middleware/
│       │       ├── AdminAuthenticateTest.php
│       │       ├── Api/
│       │       │   ├── Application/
│       │       │   │   └── AuthenticateUserTest.php
│       │       │   └── Daemon/
│       │       │       └── DaemonAuthenticateTest.php
│       │       ├── LanguageMiddlewareTest.php
│       │       ├── MaintenanceMiddlewareTest.php
│       │       ├── MiddlewareTestCase.php
│       │       └── RedirectIfAuthenticatedTest.php
│       ├── Rules/
│       │   └── UsernameTest.php
│       └── Services/
│           └── Acl/
│               └── Api/
│                   └── AdminAclTest.php
├── tsconfig.json
└── webpack.config.js

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
root = true

[*]
indent_style = space
indent_size = 4
tab_width = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.md]
trim_trailing_whitespace = false

[*.{md,nix,yml,yaml}]
indent_size = 2
tab_width = 2


================================================
FILE: .eslintignore
================================================
public
node_modules
resources/views
babel.config.js
tailwind.config.js
webpack.config.js


================================================
FILE: .eslintrc.js
================================================
/** @type {import('eslint').Linter.Config} */
module.exports = {
    parser: '@typescript-eslint/parser',
    parserOptions: {
        ecmaVersion: 6,
        ecmaFeatures: {
            jsx: true,
        },
        project: './tsconfig.json',
        tsconfigRootDir: './',
    },
    settings: {
        react: {
            pragma: 'React',
            version: 'detect',
        },
        linkComponents: [
            { name: 'Link', linkAttribute: 'to' },
            { name: 'NavLink', linkAttribute: 'to' },
        ],
    },
    env: {
        browser: true,
        es6: true,
    },
    plugins: ['react', 'react-hooks', 'prettier', '@typescript-eslint'],
    extends: [
        // 'standard',
        'eslint:recommended',
        'plugin:react/recommended',
        'plugin:@typescript-eslint/recommended',
        'plugin:jest-dom/recommended',
    ],
    rules: {
        eqeqeq: 'error',
        'prettier/prettier': ['error', {}, { usePrettierrc: true }],
        // TypeScript can infer this significantly better than eslint ever can.
        'react/prop-types': 0,
        'react/display-name': 0,
        '@typescript-eslint/no-explicit-any': 0,
        '@typescript-eslint/no-non-null-assertion': 0,
        // This setup is required to avoid a spam of errors when running eslint about React being
        // used before it is defined.
        //
        // @see https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/no-use-before-define.md#how-to-use
        'no-use-before-define': 0,
        '@typescript-eslint/no-use-before-define': 'warn',
        '@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }],
        '@typescript-eslint/ban-ts-comment': ['error', { 'ts-expect-error': 'allow-with-description' }],
        'react/no-unknown-property': ['error', { ignore: ['css'] }],
    },
};


================================================
FILE: .github/FUNDING.yml
================================================
github: [vlssu]
custom: ["https://afdian.com/a/vlssu"]


================================================
FILE: .github/ISSUE_TEMPLATE/1-bug-report.yml
================================================
name: Bug Reports
description: For reporting known and reproducible issues with the software.
body:
  - type: markdown
    attributes:
      value: |
        Bug reports should only be used for reporting issues with how the software works. For assistance installing this software, as well as debugging issues with dependencies, please use our [Discord server](https://discord.gg/pterodactyl).

  - type: textarea
    attributes:
      label: Current Behavior
      description: Please provide a clear & concise description of the issue.
    validations:
      required: true

  - type: textarea
    attributes:
      label: Expected Behavior
      description: Please describe what you expected to happen.
    validations:
      required: true

  - type: textarea
    attributes:
      label: Steps to Reproduce
      description: Please be as detailed as possible when providing steps to reproduce, failure to provide steps will result in this issue being closed.
    validations:
      required: true

  - type: input
    id: panel-version
    attributes:
      label: Panel Version
      description: Version number of your Panel (latest is not a version)
      placeholder: 1.4.0
    validations:
      required: true

  - type: input
    id: wings-version
    attributes:
      label: Wings Version
      description: Version number of your Wings (latest is not a version)
      placeholder: 1.4.2
    validations:
      required: true

  - type: input
    id: egg-details
    attributes:
      label: Games and/or Eggs Affected
      description: Please include the specific game(s) or egg(s) you are running into this bug with.
      placeholder: Minecraft (Paper), Minecraft (Forge)

  - type: input
    id: docker-image
    attributes:
      label: Docker Image
      description: The specific Docker image you are using for the game(s) above.
      placeholder: ghcr.io/pterodactyl/yolks:java_17

  - type: textarea
    id: panel-logs
    attributes:
      label: Error Logs
      description: |
        Run the following command to collect logs on your system.

        Wings: `sudo wings diagnostics`
        Panel: `tail -n 150 /var/www/pterodactyl/storage/logs/laravel-$(date +%F).log | nc pteropaste.com 99`
      placeholder: "https://pteropaste.com/a1h6z"
      render: bash
    validations:
      required: false

  - type: checkboxes
    attributes:
      label: Is there an existing issue for this?
      description: Please [search here](https://github.com/pterodactyl/panel/issues) to see if an issue already exists for your problem.
      options:
        - label: I have searched the existing issues before opening this issue. I understand that maintainers may close this issue without communication if I have not provided sufficient information.
          required: true


================================================
FILE: .github/ISSUE_TEMPLATE/2-approved.yml
================================================
name: Pre-Discussed and Approved Topics
description: For topics already previously discussed and approved in the GitHub Discussions section.
body:
  - type: markdown
    attributes:
      value: |
        **DO NOT** open a new issue for feature requests _without prior maintainer approval_ and corresponding
        thread in the discussions section. You MUST link to the corresponding discussion thread when opening
        this feature request issue or it will be closed without further consideration.
  - type: textarea
    attributes:
      label: The Feature Request
  - type: input
    attributes:
      label: GitHub Discussion Link
      description: Link to the GitHub Discussions thread where the feature was previously discussed and approved.
    validations:
      required: true


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
  - name: 安装帮助
    url: https://discord.gg/pterodactyl
    about: 请访问翼龙的 Discord 来获取安装帮助。
  - name: 基础问题
    url: https://discord.gg/pterodactyl
    about: 有关翼龙的基础问题,请访问翼龙的 Discord。
  - name: 翼龙中国社区
    url: https://bbs.pterodactyl.top
    about: 有关常见问题和问题反馈
  - name: 中文翻译问题
    url: https://kook.top/0Grsf5
    about: 有关中文翻译等一些问题,请访问翼龙中国的 KOOK 来获取帮助。


================================================
FILE: .github/docker/README.md
================================================
# 翼龙面板 - Docker 镜像
这是一个将面板所需环境等全部准备好的 docker 镜像。

## 要求
此 docker 镜像需要一些额外的软件来运作。这些软件既可以在其他容器中提供(见 [docker-compose.yml](https://github.com/pterodactyl-china/panel/blob/develop/docker-compose.example.yml) 为例),也可以作为现有的实例。

需要一个 mysql 数据库。如果你喜欢在 docker 容器中运行它,我们推荐使用 [MariaDB Image](https://hub.docker.com/_/mariadb/) 镜像。作为一个非容器化的选择,我们推荐 mariadb。

还需要一个缓存软件。我们推荐使用 [Redis Image](https://hub.docker.com/_/redis/) 镜像。你可以选择任何一个[支持的选项](#缓存驱动程序)。

你可以使用自定义的 `.env` 文件或在 docker-compose 文件中设置适当的环境变量来提供额外的设置。

## 设置

启动 docker 容器和所需的依赖项(可以提供现有的依赖项,也可以同时启动容器,参见 [docker-compose.yml](https://github.com/pterodactyl-china/panel/blob/develop/docker-compose.example.yml) 文件为例。

启动完成后,您需要创建一个用户。
如果您在没有 docker-compose 的情况下运行 docker 容器,请使用:
```
docker exec -it <container id> php artisan p:user:make
```
如果您使用的是 docker compose,请使用
```
docker-compose exec panel php artisan p:user:make
```

## 环境变量
当您不提供自己的 `.env` 文件时,有多个环境变量可以配置面板,有关每个可用选项的详细信息,请参见下表。

注意:如果您的 `APP_URL` 以 `https://` 开头,您还需要提供 `LE_EMAIL` 以便生成证书。

| 变量               | 描述                           | 必需项 |
|------------------|------------------------------|-----|
| `APP_URL`        | 可以访问面板的 URL(包括协议)            | 是   |
| `APP_TIMEZONE`   | 面板所使用的时区                     | 是   |
| `LE_EMAIL`       | 用于生成 letsencrypt 证书的邮箱       | 是   |
| `DB_HOST`        | MySQL 主机                     | 是   |
| `DB_PORT`        | MySQL 端口                     | 是   |
| `DB_DATABASE`    | MySQL 数据库名称                  | 是   |
| `DB_USERNAME`    | MySQL 用户名                    | 是   |
| `DB_PASSWORD`    | 指定用户的 MySQL 密码               | 是   |
| `CACHE_DRIVER`   | 缓存驱动程序(详见[缓存驱动程序](#缓存驱动程序))。 | 是   |
| `SESSION_DRIVER` |                              | 是   |
| `QUEUE_DRIVER`   |                              | 是   |
| `REDIS_HOST`     | Redis 数据库的主机名或IP地址            | 是   |
| `REDIS_PASSWORD` | 用于保护 redis 数据库的密码            | 可选  |
| `REDIS_PORT`     | Redis 数据库端口                | 可选  |
| `MAIL_DRIVER`    | 邮件驱动程序(详见 [邮件驱动程序](#邮件驱动程序)) | 是   |
| `MAIL_FROM`      | 发件邮箱                         | 是   |
| `MAIL_HOST`      | 邮件驱动主机                       | 可选  |
| `MAIL_PORT`      | 邮件驱动端口                       | 可选  |
| `MAIL_USERNAME`  | 邮件驱动用户名                     | 可选  |
| `MAIL_PASSWORD`  | 邮件驱动密码                       | 可选  |

### 缓存驱动程序
您可以根据自己的喜好选择不同的缓存驱动程序。
我们推荐在使用 docker 时使用 redis,因为它可以在容器中轻松启动。

| 驱动程序   | 描述                                 | 所需变量                                               |
| -------- | ------------------------------------ | ------------------------------------------------------ |
| redis    | redis 运行的主机          | `REDIS_HOST`                                           |
| redis    | redis 运行的端口             | `REDIS_PORT`                                           |
| redis    | redis 数据库密码              | `REDIS_PASSWORD`                                       |

### 邮件驱动程序
你可以根据你的需要选择不同的邮件驱动。
每个驱动程序都需要设置 `MAIL_FROM`。

| 驱动程序   | 描述                                 | 所需变量                                                       |
| -------- | ------------------------------------ | ------------------------------------------------------------- |
| mail     | 使用已安装的php邮件                   |                                                               |
| mandrill | [Mandrill](http://www.mandrill.com/) | `MAIL_USERNAME`                                               |
| postmark | [Postmark](https://postmarkapp.com/) | `MAIL_USERNAME`                                               |
| mailgun  | [Mailgun](https://www.mailgun.com/)  | `MAIL_USERNAME`, `MAIL_HOST`                                  |
| smtp     | 任何SMTP服务器都可以配置               | `MAIL_USERNAME`, `MAIL_HOST`, `MAIL_PASSWORD`, `MAIL_PORT`    |


================================================
FILE: .github/docker/default.conf
================================================
# If using Ubuntu this file should be placed in:
# 			/etc/nginx/sites-available/
#
# If using CentOS this file should be placed in:
#				 /etc/nginx/conf.d/
#
server {
    listen 80;
    server_name _;
    
    root /app/public;
    index index.html index.htm index.php;
    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    access_log off;
    error_log  /var/log/nginx/pterodactyl.app-error.log error;

    # allow larger file uploads and longer script runtimes
    client_max_body_size 100m;
    client_body_timeout 120s;
  
    sendfile off;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        # the fastcgi_pass path needs to be changed accordingly when using CentOS
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param PHP_VALUE "upload_max_filesize = 100M \n post_max_size=100M";
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTP_PROXY "";
        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
    }

    location ~ /\.ht {
        deny all;
    }
}


================================================
FILE: .github/docker/default_ssl.conf
================================================
# If using Ubuntu this file should be placed in: 
# 			/etc/nginx/sites-available/
#
server {
    listen 80;
    server_name <domain>;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name <domain>;

    root /app/public;
    index index.php;

    access_log /var/log/nginx/pterodactyl.app-access.log;
    error_log  /var/log/nginx/pterodactyl.app-error.log error;

    # allow larger file uploads and longer script runtimes
    client_max_body_size 100m;
    client_body_timeout 120s;
    
    sendfile off;

    # strengthen ssl security
    ssl_certificate /etc/letsencrypt/live/<domain>/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/<domain>/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
    
    # See the link below for more SSL information:
    #     https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
    #
    # ssl_dhparam /etc/ssl/certs/dhparam.pem;

    # Add headers to serve security related headers
    add_header Strict-Transport-Security "max-age=15768000; preload;";
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header Content-Security-Policy "frame-ancestors 'self'";

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param PHP_VALUE "upload_max_filesize = 100M \n post_max_size=100M";
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTP_PROXY "";
        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
        include /etc/nginx/fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}

================================================
FILE: .github/docker/entrypoint.sh
================================================
#!/bin/ash -e
cd /app

mkdir -p /var/log/panel/logs/ /var/log/supervisord/ /var/log/nginx/ /var/log/php7/ \
  && chmod 777 /var/log/panel/logs/ \
  && ln -s /app/storage/logs/ /var/log/panel/

## 检查 .env 文件并在缺少时生成应用程序密钥
if [ -f /app/var/.env ]; then
  echo "存在外部变量."
  rm -rf /app/.env
  ln -s /app/var/.env /app/
else
  echo "不存在外部变量."
  rm -rf /app/.env
  touch /app/var/.env

  ## 由于 key generate --force 失败,手动生成密钥
  if [ -z $APP_KEY ]; then
     echo -e "生成密钥."
     APP_KEY=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)
     echo -e "生成的应用程序密钥:$APP_KEY"
     echo -e "APP_KEY=$APP_KEY" > /app/var/.env
  else
    echo -e "APP_KEY 存在于环境中,已使用它."
    echo -e "APP_KEY=$APP_KEY" > /app/var/.env
  fi

  ## 如果未提供,则为哈希 ID 生成随机盐值。
  if [ -z $HASHIDS_SALT ]; then
     echo -e "生成哈希值盐。"
     HASHIDS_SALT=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9!@#$%^&*()_+?><~' | fold -w 20 | head -n 1)
     echo -e "生成的哈希值盐: $HASHIDS_SALT"
     echo -e "HASHIDS_SALT=$HASHIDS_SALT" >> /app/var/.env
  else
    echo -e "使用在环境中的 HASHIDS_SALT 值。"
    echo -e "HASHIDS_SALT=$HASHIDS_SALT" >> /app/var/.env
  fi

  ln -s /app/var/.env /app/
fi

echo "正在检查是否需要 https."
if [ -f /etc/nginx/http.d/panel.conf ]; then
  echo "nginx 配置已经就位."
  if [ $LE_EMAIL ]; then
    echo "正在检查证书更新"
    certbot certonly -d $(echo $APP_URL | sed 's~http[s]*://~~g')  --standalone -m $LE_EMAIL --agree-tos -n
  else
    echo "未设置 Letsencrypt 电子邮箱"
  fi
else
  echo "正在检查是否设置了 letsencrypt 电子邮箱."
  if [ -z $LE_EMAIL ]; then
    echo "http 配置文件中没有设置 letencrypt 电子邮箱."
    cp .github/docker/default.conf /etc/nginx/http.d/panel.conf
  else
    echo "编写 ssl 配置"
    cp .github/docker/default_ssl.conf /etc/nginx/http.d/panel.conf
    echo "正在更新域名的 ssl 配置"
    sed -i "s|<domain>|$(echo $APP_URL | sed 's~http[s]*://~~g')|g" /etc/nginx/http.d/panel.conf
    echo "生成证书"
    certbot certonly -d $(echo $APP_URL | sed 's~http[s]*://~~g')  --standalone -m $LE_EMAIL --agree-tos -n
  fi
  echo "删除默认的 nginx 配置"
  rm -rf /etc/nginx/http.d/default.conf
fi

if [[ -z $DB_PORT ]]; then
  echo -e "未指定 DB_PORT,默认为 3306"
  DB_PORT=3306
fi

## 检查日志文件夹权限
echo "修复日志文件夹权限。"
if [ "$(stat -c %U:%G /app/storage/logs)" != "nginx" ]; then
  echo "修复日志文件夹权限。"
  chown -R nginx: /app/storage/logs/
fi

## 在启动面板之前检查数据库
echo "正在检查数据库状态。"
until nc -z -v -w30 $DB_HOST $DB_PORT
do
  echo "正在等待数据库连接..."
  # 等待 1 秒再检查
  sleep 1
done

## 确保数据库已设置
echo -e "迁移或生成数据库"
php artisan migrate --seed --force

## 启动队列的 cronjobs
echo -e "正在启动 cron 作业."
crond -L /var/log/crond -l 5

echo -e "正在启动 supervisord."
exec "$@"


================================================
FILE: .github/docker/supervisord.conf
================================================
[unix_http_server]
file=/tmp/supervisor.sock                       ; path to your socket file

[supervisord]
logfile=/var/log/supervisord/supervisord.log    ; supervisord log file
logfile_maxbytes=50MB                           ; maximum size of logfile before rotation
logfile_backups=2                               ; number of backed up logfiles
loglevel=error                                  ; info, debug, warn, trace
pidfile=/var/run/supervisord.pid                ; pidfile location
nodaemon=false                                  ; run supervisord as a daemon
minfds=1024                                     ; number of startup file descriptors
minprocs=200                                    ; number of process descriptors
user=root                                       ; default user
childlogdir=/var/log/supervisord/               ; where child log files will live

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock         ; use a unix:// URL  for a unix socket

[program:php-fpm]
command=/usr/local/sbin/php-fpm -F
autostart=true
autorestart=true

[program:queue-worker]
command=/usr/local/bin/php /app/artisan queue:work --queue=high,standard,low --sleep=3 --tries=3
user=nginx
autostart=true
autorestart=true

[program:nginx]
command=/usr/sbin/nginx -g 'daemon off;'
autostart=true
autorestart=true
priority=10
stdout_events_enabled=true
stderr_events_enabled=true

================================================
FILE: .github/docker/www.conf
================================================
[www]

user = nginx
group = nginx

listen = 127.0.0.1:9000
listen.owner = nginx
listen.group = nginx
listen.mode = 0750

pm = ondemand
pm.max_children = 9
pm.process_idle_timeout = 10s
pm.max_requests = 200

clear_env = no

================================================
FILE: .github/workflows/build.yaml
================================================
name: Build

on:
  push:
    branches:
      - 1.0-develop
  pull_request:
    branches:
      - "1.0-develop"

jobs:
  ui:
    name: UI
    runs-on: ubuntu-24.04
    permissions:
      contents: read
    strategy:
      fail-fast: false
      matrix:
        node-version: [ 22 ]
    steps:
      - name: Code Checkout
        uses: actions/checkout@v4

      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}
          cache: yarn

      - name: Install dependencies
        run: yarn install --frozen-lockfile
      - run: yarn tsc
      - run: yarn lint
      - run: yarn build:production


================================================
FILE: .github/workflows/ci.yaml
================================================
name: Tests

on:
  push:
    branches:
      - 1.0-develop
  pull_request:
    branches:
      - "1.0-develop"

jobs:
  tests:
    name: Tests
    runs-on: ubuntu-24.04
    permissions:
      contents: read
    strategy:
      fail-fast: false
      matrix:
        php:
          - 8.2
          - 8.3
        database:
          - mariadb:10
          - mariadb:11
          - mysql:8
          - mysql:9
    services:
      database:
        image: ${{ matrix.database }}
        env:
          MYSQL_ALLOW_EMPTY_PASSWORD: yes
          MYSQL_DATABASE: testing
        ports:
          - 3306
    steps:
      - uses: actions/checkout@v4
      - id: composer-cache
        run: |
          echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
      - uses: actions/cache@v4
        with:
          path: ${{ steps.composer-cache.outputs.dir }}
          key: ${{ runner.os }}-composer-${{ matrix.php }}-${{ hashFiles('**/composer.lock') }}
          restore-keys: |
            ${{ runner.os }}-composer-${{ matrix.php }}-
      - uses: shivammathur/setup-php@v2
        with:
          php-version: ${{ matrix.php }}
          extensions: bcmath, cli, curl, gd, mbstring, mysql, openssl, pdo, tokenizer, xml, zip
          tools: composer:v2
          coverage: none
      - run: cp .env.ci .env
      - run: composer install --no-interaction --no-progress --no-suggest --prefer-dist
      - run: vendor/bin/php-cs-fixer fix --dry-run --diff
      - run: vendor/bin/phpunit --bootstrap vendor/autoload.php tests/Unit
        env:
          DB_HOST: UNIT_NO_DB
      - run: vendor/bin/phpunit tests/Integration
        env:
          DB_PORT: ${{ job.services.database.ports[3306] }}
          DB_USERNAME: root


================================================
FILE: .github/workflows/docker.yaml
================================================
name: Docker

on:
  push:
    branches:
      - 1.0-develop
  release:
    types:
      - published

jobs:
  push:
    name: Push
    runs-on: ubuntu-24.04
    if: "!contains(github.event.head_commit.message, 'skip docker') && !contains(github.event.head_commit.message, 'docker skip')"
    permissions:
      contents: read
      packages: write
    steps:
      - name: Code checkout
        uses: actions/checkout@v4

      - name: Docker metadata (multi-registry)
        id: docker_meta
        uses: docker/metadata-action@v5
        with:
          images: |
            ghcr.io/pterodactyl-china/panel
            pterodactylchina/panel
            ${{ secrets.ALIYUN_ACR_REGISTRY }}/pterodactyl-china/panel
          flavor: |
            latest=false
          tags: |
            type=raw,value=latest,enable=${{ github.event_name == 'release' && github.event.action == 'published' && github.event.release.prerelease == false }}
            type=ref,event=tag
            type=ref,event=branch

      - name: Setup QEMU
        uses: docker/setup-qemu-action@v3

      - name: Setup Docker buildx
        uses: docker/setup-buildx-action@v3

      # 登录 GHCR
      - name: Login to GitHub Container Registry
        if: github.event_name != 'pull_request'
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GITHUB_TOKEN }}

      # 登录 Docker Hub
      - name: Login to Docker Hub
        if: github.event_name != 'pull_request'
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      # 登录阿里云 ACR
      - name: Login to Aliyun ACR
        if: github.event_name != 'pull_request'
        uses: docker/login-action@v3
        with:
          registry: ${{ secrets.ALIYUN_ACR_REGISTRY }}  # e.g., registry.cn-hangzhou.aliyuncs.com
          username: ${{ secrets.ALIYUN_ACR_ACCESS_KEY_ID }}
          password: ${{ secrets.ALIYUN_ACR_ACCESS_KEY_SECRET }}

      - name: Update version
        if: "github.event_name == 'release' && github.event.action == 'published'"
        env:
          REF: ${{ github.event.release.tag_name }}
        run: |
          sed -i "s/    'version' => 'canary',/    'version' => '${REF:1}',/" config/app.php

      - name: Build and Push to all registries
        uses: docker/build-push-action@v6
        with:
          context: .
          file: ./Dockerfile
          push: ${{ github.event_name != 'pull_request' }}
          platforms: linux/amd64,linux/arm64
          labels: ${{ steps.docker_meta.outputs.labels }}
          tags: ${{ steps.docker_meta.outputs.tags }}
          cache-from: type=gha
          cache-to: type=gha,mode=max


================================================
FILE: .github/workflows/release.yaml
================================================
name: Release
on:
  push:
    tags:
      - "v*"
jobs:
  release:
    name: Release
    runs-on: ubuntu-latest
    permissions:
      contents: write
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: yarn
      - run: yarn install --frozen-lockfile
      - run: yarn tsc
      - run: yarn build:production
      - name: create release branch and bump version
        env:
          VERSION: ${{ github.ref_name }}
        run: |
          BRANCH=release/${{ env.VERSION }}
          git config --local user.email 'ci@pterodactyl.io'
          git config --local user.name 'Pterodactyl CI'
          git checkout -b "$BRANCH"
          git push -u origin "$BRANCH"
          sed -i "s/'canary'/'${VERSION:1}'/" config/app.php
          git add config/app.php
          git commit -m 'ci(release): bump version'
          git push
      - name: create release archive
        run: |
          rm -rf node_modules tests CONTRIBUTING.md flake.lock flake.nix phpunit.xml shell.nix
          tar -czf panel.tar.gz * .editorconfig .env.example .eslintignore .eslintrc.js .gitignore .prettierrc.json
      - name: write changelog
        run: |
          sed -n "/^## ${{ github.ref_name }}/,/^## /{/^## /b;p}" CHANGELOG.md > ./RELEASE_CHANGELOG
      - uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          draft: true
          prerelease: ${{ contains(github.ref_name, 'rc') || contains(github.ref_name, 'beta') || contains(github.ref_name, 'alpha') }}
          body_path: ./RELEASE_CHANGELOG
          files: |
            panel.tar.gz


================================================
FILE: .gitignore
================================================
/vendor
*.DS_Store*
!.env.ci
!.env.example
.env*
.vagrant/*
.vscode/*
storage/framework/*
/.idea
/nbproject
/.direnv

node_modules
*.log
_ide_helper.php
_ide_helper_models.php
.phpstorm.meta.php
.yarn
public/assets/manifest.json

# For local development with docker
# Remove if we ever put the Dockerfile in the repo
.dockerignore
docker-compose.*
!docker-compose.example.yml
!docker-compose.example.yaml

# for image related files
misc
.php-cs-fixer.cache
coverage.xml
resources/lang/locales.js
.phpunit.result.cache

/public/build
/public/hot
result


================================================
FILE: .php-cs-fixer.dist.php
================================================
<?php

use PhpCsFixer\Config;
use PhpCsFixer\Finder;
use PhpCsFixer\Runner\Parallel\ParallelConfigFactory;

$finder = (new Finder())
    ->name('*.php')
    ->ignoreVCSIgnored(true)
    ->exclude([__DIR__ . '/bootstrap/cache'])
    ->in([
        __DIR__ . '/app',
        __DIR__ . '/bootstrap',
        __DIR__ . '/config',
        __DIR__ . '/database',
        __DIR__ . '/routes',
        __DIR__ . '/tests',
    ]);

return (new Config())
    ->setFinder($finder)
    ->setUsingCache(true)
    ->setParallelConfig(ParallelConfigFactory::detect())
    ->setRules([
        '@Symfony' => true,
        '@PSR1' => true,
        '@PSR2' => true,
        '@PSR12' => true,
        'align_multiline_comment' => ['comment_type' => 'phpdocs_like'],
        'combine_consecutive_unsets' => true,
        'concat_space' => ['spacing' => 'one'],
        'heredoc_to_nowdoc' => true,
        // 'no_alias_functions' => true,
        // 'no_unreachable_default_argument_value' => true,
        'no_useless_return' => true,
        'ordered_imports' => [
            'sort_algorithm' => 'length',
        ],
        'phpdoc_align' => [
            'align' => 'left',
            'tags' => [
                'param',
                'property',
                'return',
                'throws',
                'type',
                'var',
            ],
        ],
        'phpdoc_no_alias_tag' => false,
        // 'random_api_migration' => true,
        'ternary_to_null_coalescing' => true,
        'yoda_style' => [
            'equal' => false,
            'identical' => false,
            'less_and_greater' => false,
        ],
    ]);


================================================
FILE: .prettierrc.json
================================================
{
	"printWidth": 120,
	"tabWidth": 4,
	"useTabs": false,
	"semi": true,
	"singleQuote": true,
	"jsxSingleQuote": true,
	"endOfLine": "lf"
}


================================================
FILE: BUILDING.md
================================================
# 本地开发
翼龙现在由React、Typescript和Tailwindcss驱动,其核心是使用webpack来生成编译资源。
翼龙的发布版本将包括预编译、压缩和哈希的资源,你可以随时使用。

然而,如果你有兴趣运行自定义主题或对React文件进行修改,你将需要一个构建系统来生成这些编译资源。要设置好你的环境,你至少需要。

* [Node.js](https://nodejs.org/en/) v14.x.x
* [Yarn](https://classic.yarnpkg.com/lang/en/) v1.x.x
* [Go](https://golang.org/) 1.17.x

### 安装依赖项
```bash
yarn install
```

上面的命令将下载所有必要的依赖,以使翼龙资源构建。在这之后,它就像运行下面的命令一样简单,在你开发时生成资源。在你运行这个命令至少一次之前,你可能会在面板上看到一个500错误,即缺少`manifest.json`文件。这是由下面的命令生成的。

```bash
# 构建用于开发的编译资源集。
yarn run build

# 当资源被改变时自动构建。这使你可以刷新页面并立即看到变化。
yarn run watch
```

### 模块热加载
对于更高级的用户,我们还支持 '模块热重载',让你快速查看你对 Vue 模板文件所做的修改,而不必重新加载你所在的页面。要使用它你只需要运行下面的命令。

```bash
PUBLIC_PATH=http://192.168.1.1:8080 yarn run serve --host 192.168.1.1
```

这个命令有两个非常重要的部分需要注意,并根据你的具体环境进行修改。第一个是 `--host` 参数,这是必须的,应该指向服务器将运行 `webpack-serve` 的机器。
第二个是 `PUBLIC_PATH` 环境变量,它是指向 HMR 服务器的 URL,并被附加到翼龙中使用的所有资源 URL 上。

#### 开发环境
如果你使用 [`pterodactyl-china/development`](https://github.com/pterodactyl-china/development) 环境,强烈推荐你可以直接运行 `yarn run serve` 来运行 HMR 服务器,它不需要额外配置。

### 为生产环境构建
一旦你有了你的文件,并准备好上线服务器,你将需要生成预编译、压缩和哈希的资源来推送上线。要做到这一点,请运行下面的命令。

```bash
yarn run build:production
```

这将生成一个生产 JS 包和相关资源,都位于 `public/assets/` 中,需要上传到你的服务器或CDN供客户使用。

### 运行 Wings
要在开发中运行 `wings`,你需要做的就是在添加新节点时正常设置配置文件,然后你可以通过在 Wings 代码目录中执行 `make debug` 来构建和运行本地版本的 Wings。这必须在某些 Linux 虚拟机上运行,你不能在 MacOS 或 Windows 上本地运行。


================================================
FILE: CHANGELOG.md
================================================
# Changelog
This file is a running track of new features and fixes to each version of the panel released starting with `v0.4.0`.

This project follows [Semantic Versioning](http://semver.org) guidelines.

## v1.12.2
### Fixed
* Fixes task execution jobs to correctly dispatch the next job in the chain.
* Fixes dropdown menu not appearing correctly inside modal when transferring a server.
* Fixes startup variables logging as changed in the activity log even when no change was actually made.
* Fixes multiple issues with the docker image.
* Fixes server transfers getting stuck due to incorrect permission checks in the API.

## v1.12.1
### Fixed
* [CVE-2026-26016](https://github.com/pterodactyl/panel/security/advisories/GHSA-g7vw-f8p5-c728)
* [GHSA-hr7j-63v7-vj7g](https://github.com/pterodactyl/panel/security/advisories/GHSA-hr7j-63v7-vj7g)
* Fixes bug where presigned URLs would 
* Fixes issue where certain input values would cause the activity log screen to stop rendering properly due to improper element encoding.
* Fixes improper display of unicode characters in console output.
* Fixes page number not resetting when toggling between "Show My Servers" and "Show All Servers" on the dashboard.

### Changed
* SFTP sessions are now revoked on nodes when a user changes their password or their account is deleted.
* Remote node access tokens are now scoped to only allow access to servers that belong to the same node. Previously a node could access information and control the installation status for any server in the system.
* The default rate limit for the client API was bumped from `128` to `256` requests per minute.

### Added
* HTTP responses now include default security headers if not otherwise set.
* Adds modal popup when running a Hytale server that requires additional auth.
* Adds support for administrators to view any application API key that has been created, regardless of the owning account.

## v1.12.0
### Fixed

* [CVE-2025-68954](https://github.com/pterodactyl/panel/security/advisories/GHSA-8c39-xppg-479c)
* [CVE-2025-69197](https://github.com/pterodactyl/panel/security/advisories/GHSA-rgmp-4873-r683)
* [CVE-2025-69198](https://github.com/pterodactyl/panel/security/advisories/GHSA-jw2v-cq5x-q68g)
* Fixes a self-XSS issue when entering random data into boxes while creating a new database host.
* Fixes missing `HttpForbiddenException` import in the backup status controller.
* Fixes issue where scheduled tasks would execute every minute regardless of their configured cron syntax.
* Pressing `Ctrl+Z` to undo while editing a file no longer deletes the initial file content.
* Fixed incorrect error message being returned when attempting to delete your own account as an admin.
* Fixes node description not being settable via the API.
* Fixes 0-bytes files returning an error when attempting to upload.
* Fixes nodes displaying the first available location even when that field was not edited and the node has a different value set.
* Fixes allocation notes not being reset when a server is deleted. ([#5157](https://github.com/pterodactyl/panel/pull/5157))

### Changed
* Minimum NodeJS version updated to 22 for building.
* Updated all JS and PHP dependencies to their latest versions (where feasible).
* The endpoint for disabling 2FA on an account using the client API changed from `DELETE /api/client/account/two-factor` to `POST /api/client/account/two-factor/disable`
* `^C` in an egg's stop configuration no longer rewrites itself into the default stop configuration.
* `IBM Plex Sans` font is now bundled with the local assets instead of loading from Google CDNs.
* Upload size on nodes is no longer restricted to a max of 1024MB, any positive integer value can be used.
* Administrators are now listed first when viewing a list of all users on the system.
* Websocket no longer endlessly polls when connection issues are encountered, or when Wings disconnects the user for a reason that should not be re-attempted.

## v1.11.10
### Fixed
* Update Laravel to address [CVE-2024-52301](https://github.com/advisories/GHSA-gv7v-rgg6-548h)

### Changed
* Minimum PHP version is now 8.2 due to Laravel upgrade!

## v1.11.9
### Fixed
* Fixed issue with CI not pushing Docker image

## v1.11.8
### Fixed
* Fixed an issue where a `DELETE` request was used instead of a `POST`, potentially logging user passwords in plain text if they disable 2FA.

## v1.11.7
### Added
* Java 21 to Minecraft eggs

### Changed
* Updated Minecraft EULA link

### Fixed
* Fixed backups not ever being marked as completed (#5088)
* Fixed `.7z` files not being detected as a compressed file (#5016)

## v1.11.6
### Changed
* Better node ownership checks for internal backup endpoints
* Improved validation rules on `docker_image` fields to prevent invalid inputs

### Fixed
* Multiple XSS vulnerabilities in the admin area ([GHSA-384w-wffr-x63q](https://github.com/pterodactyl/panel/security/advisories/GHSA-384w-wffr-x63q))

## v1.11.5
### Fixed
* Rust egg using the wrong Docker image, breaking Rust modding frameworks.

## v1.11.4
### Added
* Added support for the `server.queryport` option on the Rust egg.
* Added support for the Carbon modding framework to the Rust egg.

### Changed
* Upgraded to Laravel 10.
* Sensitive data is no longer shown in the CopyOnClick toast notification.

### Fixed
* Allow SVGs to be edited in the server's file manager.
* Properly validate the request body when creating a backup.
* Fixed issue with schedules running at the wrong time when the panel utilized a timezone with non-hour offsets (such as `Australia/Darwin`).
* Fixes the log directory when running the Panel in a container.
* Fixes the permission name used to check if a user has permission to read files/folders.
* Fixes the ability to unset a server's description through the client API.
* Fixed the MassActionBar on the server's file manager blocking elements below it, preventing them from being interacted with.

## v1.11.3
### Changed
* When updating a server's description through the client API, if no value is specified, the description will now remain unchanged.
* When installing the Panel for the first time, the queue driver will now all default to `redis` instead of `sync`.

### Fixed
* `php artisan p:environment:mail` not correctly setting the right variable for `MAIL_FROM_ADDRESS`.
* Fixed the conflict state rendering on the UI for a server showing `reinstall_failed` as `restoring_backup`.
* Fixed the unknown column `uuid` error when jobs fail, causing them not to get stored correctly.
* Fixed the server task endpoints in the client API not allowing `sequence_id` and `continue_on_failure` to be set.

## v1.11.2
### Changed
* Telemetry no longer sends a map of Egg and Nest UUIDs to the number of servers using them.
* Increased the timeout for the decompress files endpoint in the client API from 15 seconds to 15 minutes.

### Fixed
* Fixed Panel Docker image having a `v` prefix in the version displayed in the admin area.
* Fixed emails using the wrong queue name, causing them to not be sent.
* Fixed the settings keys used for configuring SMTP settings, causing settings to not save properly.
* Fixed the `MAIL_EHLO_DOMAIN` environment variable not being properly backwards compatible with the old `SERVER_NAME` variable.

## v1.11.1
### Fixed
* Fixed Panel Docker image showing `canary` as it's version.

## v1.11.0
### Changed (since 1.10.4)
* Changed minimum PHP version requirement from `7.4` to `8.0`.
* Upgraded from Laravel 8 to Laravel 9.
* This release requires Wings v1.11.x in order for Server Transfers to work.
* `MB` byte suffixes are now displayed as `MiB` to more accurately reflect the actual value.
* Server re-installation failures are tracked independently of the initial installation process.

### Fixed (since 1.10.4)
* Node maintenance mode now properly blocks access to servers.
* Fixed the length validation on the Minecraft Forge egg.
* Fixed the password in the JDBC string not being properly URL encoded.
* Fixed an issue where Wings would throw a validation error while attempting to upload activity logs.
* Properly handle a missing `Content-Length` header in the response from the daemon.
* Ensure activity log properties are always returned as an object instead of an empty array.

### Added (since 1.10.4)
* Added the `server:settings.description` activity log event for when a server description is changed.
* Added the ability to cancel file uploads in the file manager for a server.
* Added a telemetry service to collect anonymous metrics from the panel, this feature is *enabled* by default and can be toggled using the `PTERODACTYL_TELEMETRY_ENABLED` environment variable.

## v1.11.0-rc.2
### Changed
* `MB` byte suffixes are now displayed as `MiB` to more accurately reflect the actual value.
* Server re-installation failures are tracked independently of the initial installation process.

### Fixed
* Properly handle a missing `Content-Length` header in the response from the daemon.
* Ensure activity log properties are always returned as an object instead of an empty array.

### Added
* Added the `server:settings.description` activity log event for when a server description is changed.
* Added the ability to cancel file uploads in the file manager for a server.
* Added a telemetry service to collect anonymous metrics from the panel, this feature is disabled by default and can be toggled using the `PTERODACTYL_TELEMETRY_ENABLED` environment variable.

## v1.11.0-rc.1
### Changed
* Changed minimum PHP version requirement from `7.4` to `8.0`.
* Upgraded from Laravel 8 to Laravel 9.
* This release requires Wings v1.11.x in order for Server Transfers to work.

### Fixed
* Node maintenance mode now properly blocks access to servers.
* Fixed the length validation on the Minecraft Forge egg.
* Fixed the password in the JDBC string not being properly URL encoded.
* Fixed an issue where Wings would throw a validation error while attempting to upload activity logs.

## v1.10.4
### Fixed
* Fixed an issue where subusers could be given permissions that are not actually registered or used.
* Fixed an issue where node FQDNs could not just be IP addresses.

### Changed
* Change maximum number of API keys per user from `10` to `25`.
* Change byte unit prefix from `B` to `iB` to better reflect our usage of base 2 (multiples of 1024).

## v1.10.3
### Fixed
* S3 Backup driver now supports Cloudflare R2.
* Node FQDNs can now be used with AAAA records with no A records present.
* Server transfers can no longer be initiated if the server is being installed, transferred, or restoring a backup.
* Fixed an issue relating to the use of arrays in the `config_files` field with eggs.
* Fixed `oom_disabled` not being mapped in the Application API when creating a new server.

### Added
* File manager now supports selecting multiple files for upload (when using the upload button).
* Added a configuration option for specifying the S3 storage class for backups.

### Changed
* Servers will now show the current uptime when the server is starting rather than only showing when the server is marked as online.

## v1.10.2
### Fixed
* Fixes a rendering issue with egg descriptions in the admin area
* Fixes the page title on the SSH Keys page

### Changed
* Additional validation rules will now show a toggle switch rather than an input when editing server variables
* The eggs endpoint will now always return an empty JSON object for the `config_files` field, even if the field is completely empty

### Added
* Adds a `Force Outgoing IP` option for eggs that can be used to ensure servers making outgoing connections use their allocation IP rather than the node's primary ip
* Adds options to configure sending of email (re)install notifications
* Add an option to configure the part size for backups uploaded to S3

## v1.10.1
### 修复
* 修复了一个 `clock()` 函数,该函数用于调试并且不应该进入发行版。这导致面板和 Wings 之间的活动事件无法正确同步。

## v1.10.0
### 修复
* 修复了前端缓存键命名不当导致服务器活动日志在服务器页面视图中重复的问题。
* 修复了内部内容过长时对话框的溢出问题。
* 修复了控制台上的微调器覆盖不正确地占用整个页面,从而无法使用导航控件。
* 修复了动态口令认证的二维码背景太暗导致某些手机无法正确扫描的问题。
* 如果用户尝试上传文件夹而不是文件,文件管理器现在会正确显示错误消息。
* 修复了“创建目录”对话框在重新打开时会保留先前输入的值。

### 更新
* 现在,无论管理员是否拥有服务器,活动日志中的 IP 地址都会始终显示给管理员。
* 控制台上的向下滚动指示器已更改为向下箭头,以便更清晰。
* Docker 构建已更新为使用 `PHP 8.1`。
* Recaptcha 验证域现在可以使用 `RECAPTCHA_DOMAIN` 环境变量进行配置(默认域中国可用)。
* 文件管理器上的拖放覆盖已经过调整,使其与前端样式更加一致,并且更易于阅读。

### 新增
* 在所有生成的 JWT 上添加对 `user_uuid` 声明支持,这允许 Wings 正确识别执行每个操作的用户。
* 添加了对从 Wings 实例接收外部活动日志事件(电源状态、命令、SFTP 和上传)的支持。
* 添加了对跟踪基于密码的 SFTP 登录失败的日志支持。
* 服务器名称和描述现在传递给 Wings,使它们可以在预设变量中进行解析和包含。
* 添加了对在文件管理器中显示所有活动文件上传的支持。

## v1.9.2
### 修复
* 修复了图表侧边栏里的 CPU 使用率中渲染过多的零导致的问题。
* 修复了 Java 版本选择器模式,最初选择了错误的默认值。
* 修复了 Safari 中的控制台渲染导致控制台过度调整大小和图形覆盖内容。
* 修复服务器正常运行时间块中缺少 "正在启动" / "停止中" 的状态显示。
* 修复查看某些文件操作时活动日志格式不正确的问题。

### 调整
* 更新了帐户动态口令认证授权设置的 UI,以使用新的对话框 UI,并为新用户提供更好更容易理解。

### 新增
* 在模板输出中添加了缺少的 `<DOCTYPE html>` 标签,以避免在浏览器中进入怪异模式。
* 在账户上启用 TOTP 时添加密码要求。
----
### Fixed
* Fixes rouding in sidebar of CPU usage graph that was causing an excessive number of zeros to be rendered.
* Fixes the Java Version selector modal having the wrong default value selected initially.
* Fixes console rendering in Safari that was causing the console to resize excessively and graphs to overlay content.
* Fixes missing "Starting"/"Stopping" status display in the server uptime block.
* Fixes incorrect formatting of activity log when viewing certain file actions.

### Changed
* Updated the UI for the two-step authorization setup on accounts to use new Dialog UI and provide better clarity to new users.

### Added
* Added missing `<DOCTYPE html>` tag to template output to avoid entering quirks mode in browsers.
* Added password requirement when enabling TOTP on an account.

## v1.9.1
### Fixed
* Fixes missing "Click to Copy" for server address on the console data blocks.
* Fixes data points on the graphs not being properly rounded to two decimal places.
* Returns byte formatting logic to use `1024` as the base value, rather than `1000`.
* Fixes permission error occurring when a server is marked as installing and an admin navigates to the console screen.
* Fixes improper display of install/transfer warning on the server console page.
* Fixes permission matching for the server settings page to correctly allow access when a user has _any_ of the needed permissions.

### Changed
* Moves the server data blocks to the right-hand side of the console, rather than the left.
* Rather than defaulting graph values at `0` when resetting or refreshing the page, their values are now hidden entirely.
* **[security]** Hides IP addresses from all activity log entries that are not directly associated with the currently signed in user.

### Added
* Adds the current resource limits for a server next to each data block on the console screen.

## v1.9.0
### Added
* Added support for using Tailwind classes inside components using `className={}` rather than having to use `twin.macro` with the `css={}` prop.
* Added HeadlessUI and Heroicons packages.
* Added new `Tooltip.tsx` component to support displaying tooltips within the Panel.
* Adds a new activity log view for both user accounts and individual servers. This builds upon data collected in previous releases.
* Added a new column `api_key_id` to the `activity_logs` table to indicate if the user performed the action while using an API key.
* Adds initial support for language translations on the front-end. The underlying implementation details are working, however work has not yet begun on actually translating all of the strings yet. Expect this to continue in future releases.
* Improved accessibility for navigation icons by adding a tooltip on hover to indicate what each one does.
* Adds logging for API keys that are blocked from performing an API action due to IP address limiting.
* Adds support for `?filter[description]=foo` when querying servers on both the client and application API.

### Changed
* Updated how release assets are generated to perform more logical bundle splitting. This should help reduce the amount of data users have to download at once in order to render the UI.
* Upgraded From TailwindCSS 2 to 3 — for most people this should have minimal if any impact.
* Chart.js updated from v2 to v3.
* Reduced the number of custom colors in use — by default we now use Tailwind's default color pallet, with the exception of a custom gray scheme.
* **[deprecated]** The use of `neutral` and `primary` have been deprecated in class names, prefer `gray` and `blue` respectively.
* Begins the process of dropping the use of Gravatars for user avatars and replaces them with dynamically generated SVG images.
* Improved front-end route definitions to make it easier for external modifications to inject their routes and components into the codebase without having to modify as many core files.
* Redesigned the server console screen to better display data users might be looking for, and increase the height of the console itself.
* Merged the two network data graphs into a single dual-line graph to better display incoming and outgoing data volumes.
* Updated all byte formatting logic to use `1000` as the divisor rather than `1024` to be more consistent with what users most likely expect.
* Changed the underlying `eslint` rules applied to the front-end codebase to simplify them dramatically. We now utilize `prettier` in combination with some basic default rulesets to make it easier to understand the expected formatting.

### Fixed
* Fixes a bug causing a 404 error when attempting to delete a database from a server in the admin control panel.
* Fixes console input auto-capitalizing and auto-correcting when entering text on some mobile devices.
* Fixes SES service configuration using a hard-coded `us-east-1` region.
* Fixes a bug causing a 404 error when attempting to delete an SSH key from your account when the SHA256 hash includes a slash.
* Fixes mobile keyboards automatically attempting to capitalize and spellcheck typing on the server console.
* Fixes improper support for IP address CIDR ranges when creating API keys for the client area.
* Fixes a bug preventing additional included details from being returned from the application API when utilizing a client API key as an administrator.

## v1.8.1
### Fixed
* Fixes a bug causing mounts to return a 404 error when adding them to a server.
* Fixes a bug causing the Egg Image dropdown to not display properly when creating a new server.
* Fixes a bug causing an error when attemping to create a new server via the API.

## v1.8.0
**Important:** this version updates the `version` field on generated Eggs to be `PTDL_v2` due to formatting changes. This
should be completely seamless for most installations as the Panel is able to convert between the two. Custom solutions
using these eggs should be updated to account for the new format.

This release also changes API key behavior — "client" keys belonging to admin users can now be used to access
the `/api/application` endpoints in their entirety. Existing "application" keys generated in the admin area should
be considered deprecated, but will continue to work. Application keys _will not_ work with the client API.

### Fixed
* Schedules are no longer run when a server is suspended or marked as installing.
* The remote field when creating a database is no longer limited to an IP address and `%` wildcard — all expected MySQL remote host values are allowed.
* Allocations cannot be deleted from a server by a user if the server is configured with an `allocation_limit` set to `0`.
* The Java Version modal no longer shows a dropdown and update option to users that do not have permission to make those changes.
* The Java Version modal now correctly returns only the images available to the server's selected Egg.
* Fixes leading and trailing spaces being removed from variable values on file manager endpoints, causing errors when trying to perform actions against certain files and folders.

### Changed
* Forces HTTPS on URLs when the `APP_URL` value is set and includes `https://` within the URL. This addresses proxy misconfiguration issues that would cause URLs to be generated incorrectly.
* Lowers the default timeout values for requests to Wings instances from 10 seconds to 5 seconds.
* Additional permissions (`CREATE TEMPORARY TABLES`, `CREATE VIEW`, `SHOW VIEW`, `EVENT`, and `TRIGGER`) are granted to users when creating new databases for servers.
* development: removed Laravel Debugbar in favor of Clockwork for debugging.
* The 2FA input field when logging in is now correctly identified as `one-time-password` to help browser autofill capabilities.
* Changed API authentication mechanisms to make use of Laravel Sanctum to significantly clean up our internal handling of sessions.
* API keys generated by the system now set a prefix to identify them as Pterodactyl API keys, and if they are client or application keys. This prefix looks like `ptlc_` for client keys, and `ptla_` for application keys. Existing API keys are unaffected by this change.

### Added
* Added support for PHP 8.1 in addition to PHP 8.0 and 7.4.
* Adds more support for catching potential PID exhaustion errors in different games.
* It is now possible to create a new node on the Panel using an artisan command.
* A new cron cheatsheet has been added which appears when creating a schedule.
* Adds support for filtering the `/api/application/nodes/:id/allocations` endpoint using `?filter[server_id]=0` to only return allocations that are not currently assigned to a server on that node.
* Adds support for naming docker image values in an Egg to improve front-end display capabilities.
* Adds command to return the configuration for a specific node in both YAML and JSON format (`php artisan p:node:configuration`).
* Adds command to return a list of all nodes available on the Panel in both table and JSON format (`php artisan p:node:list`).
* Adds server network (inbound/outbound) usage graphs to the console screen.
* Adds support for configuring CORS on the API by setting the `APP_CORS_ALLOWED_ORIGINS=example.com,dashboard.example.com` environment variable. By default all instances are configured with this set to `*` which allows any origin.
* Adds proper activity logging for the following areas of the Panel: authentication, user account modifications, server modification. This is an initial test implementation before further roll-out in the software. Events are logged into the database but are not currently exposed in the UI — they will be displayed in a future update.

### Removed
* Removes Google Analytics from the front end code.
* Removes multiple middleware that were previously used for configuring API access and controlling model fetching. This has all been replaced with Laravel Sanctum and standard Laravel API tooling. This should make codebase discovery significantly more simple.
* **DEPRECATED**: The use of `Pterodactyl\Models\AuditLog` is deprecated and all references to this model have been removed from the codebase. In the next major release this model and table will be fully dropped.

## v1.7.0
### Fixed
* Fixes typo in message shown to user when deleting a database.
* Fixes formatting of IPv6 addresses when displaying allocations to users.
* Fixes an exception thrown while trying to return error messages from API endpoints that inproperly masked the true underlying error.
* Fixes SSL certificate path generation for Let's Encrypt by ensuring they are always transformed to lowercase.
* Removes duplicate entries when creating a nested folder in the file manager.
* Fixes missing validation of Egg Author email addresses during the setup process that could cause unexpected failures later on.
* Fixes font rendering issues of the console on Firefox due to an outdated version of xterm.js being used.
* Fixes display overlap issues of the two-factor configuration form in a user's settings.
* **[security]** When authenticating using an API key a user session is now only persisted for the duration of the request before being destroyed.

### Changed
* CPU graph changed to show the maximum amount of CPU available to a server to better match how the memory graph is displayed.

### Added
* Adds support for `DB_PORT` environment variable in the Docker enterpoint for the Panel image.
* Adds suport for ARM environments in the Docker image.
* Adds a new warning modal for Steam servers shown when an invalid Game Server Login Token (GSL Token) is detected.
* Adds a new warning modal for Steam servers shown when the installation process runs out of available disk space.
* Adds a new warning modal for Minecraft servers shown when a server exceeds the maximum number of child processes.
* Adds support for displaying certain server variable fields as a checkbox when they're detected as using `boolean` or `in:0,1` validation rules.
* Adds support for Pug and Jade in the file editor.
* Adds an entry to the `robots.txt` file to correctly disallow all bot indexing.


## v1.6.6
### Fixed
* **[security]** Fixes a CSRF vulnerability for both the administrative test email endpoint and node auto-deployment token generation endpoint. [GHSA-wwgq-9jhf-qgw6](https://github.com/pterodactyl/panel/security/advisories/GHSA-wwgq-9jhf-qgw6)

### Changed
* Updates Minecraft eggs to include latest Java 17 yolk by default.

## v1.6.5
### Fixed
* Fixes broken application API endpoints due to changes introduced with session management in 1.6.4.

## v1.6.4
_This release should not be used, please use `1.6.5`. It has been pulled from our releases._

### Fixed
* Fixes a session management bug that would cause a user who signs out of one browser to be unintentionally logged out of other browser sessions when using the client API.

## v1.6.3
### Fixed
* **[Security]** Changes logout endpoint to be a POST request with CSRF-token validation to prevent a malicious actor from triggering a user logout.
* Fixes Wings receiving the wrong server suspension state when syncing servers.

### Added
* Adds additional throttling to login and password reset endpoints.
* Adds server uptime display when viewing a server console.

## v1.6.2
### Fixed
* **[Security]** Fixes an authentication bypass vulerability that could allow a malicious actor to login as another user in the Panel without knowing that user's email or password.

## v1.6.1
### Fixed
* Fixes server build modifications not being properly persisted to the database when edited.
* Correctly exposes the `oom_disabled` field in the `build` limits block for a server build so that Wings can pick it up.
* 
## v1.6.0
### Fixed
* Fixes array merging logic for server transfers that would cause a 500 error to occur in some scenarios.
* Fixes user password updates not correctly logging the user out and returning a failure message even upon successful update.
* Fixes the count of used backups when browsing a paginated backup list for a server.
* Fixes an error being triggered when API endpoints are called with no `User-Agent` header and an audit log is generated for the action.
* Fixes state management on the frontend not properly resetting the loading indicator when adding subusers to a server.
* Fixes extraneous API calls being made to Wings for the server file listing when not on a file manager screen.

### Added
* Adds foreign key relationship on the `mount_node`, `mount_server` and `egg_mount` tables.
* Adds environment variable `PER_SCHEDULE_TASK_LIMIT` to allow manual overrides for the number of tasks that can exist on a single schedule. This is currently defaulted to `10`.
* OOM killer can now be configured at the time of server creation.

### Changed
* Server updates are not dependent on a successful call to Wings occurring — if the API call fails internally the error will be logged but the server update will still be persisted.

### Removed
* Removed `WingsServerRepository::update()` function — if you were previously using this to modify server elements on Wings please replace calls to it with `::sync()` after updating Wings.

## v1.5.1
### Fixed
* Fixes Docker image 404ing instead of being able to access the Panel.
* Fixes Java version feature being only loaded when the `eula` feature is specified.
* Fixes `php artisan p:upgrade` not forcing and seeding while running migrations.
* Fixes spinner overlays overlapping on the server console page.
* Fixes Wings being unable to update backup statuses.

## v1.5.0
### Fixed
* Fixes deleting a locked backup that has also been marked as failed to allow deletion rather than returning an error about being locked.
* Fixes server creation process not correctly sending `start_on_completion` to Wings instance.
* Fixes `z-index` on file mass delete modal so it is displayed on top of all elements, rather than hidden under some.
* Supports re-sending requests to the Panel API for backups that are currently marked as failed, allowing a previously failed backup to be marked as successful.
* Minor updates to multiple default eggs for improved error handling and more accurate field-level validation.

### Updated
* Updates help text for CPU limiting when creating a new server to properly indicate virtual threads are included, rather than only physical threads.
* Updates all of the default eggs shipped with the Panel to reference new [`ghcr.io` yolks repository](https://github.com/pterodactyl/yolks).
* When adding 2FA to an account the key used to generate the token is now displayed to the user allowing them to manually input into their app if necessary.

### Added
* Adds SSL/TLS options for MySQL and Redis in line with most recent Laravel updates.
* New users created for server MySQL instances will now have the correct permissions for creating foreign keys on tables.
* Adds new automatic popup feature to allow users to quickly update their Minecraft servers to the latest Java® eggs as necessary if unsupported versions are detected.

### Removed
* Removes legacy `userInteraction` key from eggs which was unused.

## v1.4.2
### Fixed
* Fixes logic to disallow creating a backup schedule if the server's backup limit is set to 0.
* Fixes bug preventing a database host from being updated if the linked node is set to "none".
* Fixes files and menus under the "Mass Actions Bar" being unclickable when it is visible.
* Fixes issues with the Teamspeak and Mumble eggs causing installs to fail.
* Fixes automated query to avoid pruning backups that are still running unintentionally.
* Fixes "Delete Server" confirmation modal on the admin screen to actually show up when deleting rather than immediately deleting the server.

### Added
* Adds support for locking individual server backups to prevent deletion by users or automated backup processes.
* List of files to be deleted is now shown on the delete file confirmation modal.
* Adds support for using `IF` statements in database queries when a database user is created through the Panel.
* Adds support for using a custom mailgun API endpoint rather than only the US based endpoint.
* Adds CPU limit display next to the current CPU usage to match disk and memory usage reporting.
* Adds a "Scroll to Bottom" helper element to the server console when not scrolled to the bottom currently.
* Adds support for querying the API for servers by using the `uuidShort` field rather than only the `uuid` field.

### Changed
* Updates codebase to use TypeScript 4.
* **[security]**: removes the external dependency for loading QRCode images. They're now generated directly on the frontend using JavaScript.

## v1.4.1
### Added
* Adds support for only running a schedule if the server is currently in an online state.
* Adds support for ignoring errors during task execution and continuing on to the next item in the sequence. For example, continuing to a server restart even if sending a command beforehand failed.
* Adds the ability to specify the group to use for file permissions when using the `p:upgrade` command.
* Adds the ability to manually run a schedule even if it is currently disabled.

## v1.4.0
### Fixed
* Removes the use of tagging when storing server resource usage in the cache. This addresses errors encountered when using the `file` driver.
* Fixes Wings response handling if Wings returns an error response with a 200-level status code that would improperly be passed back to the client as a successful request.
* Fixes use of JSON specific functions in SQL queries to better support MariaDB users.
* Fixes a migration that could fail on some MySQL/MariaDB setups when trying to encrypt node token values.

### Changed
* Increases the maximum length allowed for a server name using the Rust egg.
* Updated server resource utilization API call to Wings to use new API response format used by `Wings@1.4.0`.

## v1.3.2
### Fixed
* Fixes self-upgrade incorrectly executing the command to un-tar downloaded archives.
* Fixes the checkbox to delete all files when restoring a backup not actually passing that along in the API call. Files will now properly be deleted when restoring if selected.
* Fixes some keybindings not working correctly in the server console on Windows machines.
* Fixes mobile UI incorrectly squishing the Docker image selector on the server settings page.
* Fixes recovery tokens not having a `created_at` value set on them properly when they are created.
* Fixes flawed migration that would not correctly set the month value into schedule crons.
* Fixes incorrect mounting for Docker compose file that would cause error logs to be missing.

### Changed
* Server resource lookups are now cached on the Panel for 20 seconds at a time to reduce the load from multiple clients requesting the same server's stats.
* Bungeecord egg no longer force-enables the query listener.
* Adds page to the dashboard URL to allow easy loading of a specific pagination page rather than resetting back to the first page when refreshing.
* All application API endpoints now correctly support the `?per_page=N` query parameter to specify how many resources to return at once.

## v1.3.1
### Fixed
* Fixes the Rust egg not properly seeding during the upgrade & installation process.
* Fixes backups not being downloadable via the frontend.
* Fixes backup listing showing the wrong number of existing backups based on the current page you're on.

## v1.3.0
### Fixed
* Fixes administrator "Other Servers" toggle being persisted wrongly when signing out and signing into a non-administrator account on the server dashboard.
* Fixes composer failing to run properly in local environments where there is no database connection available once configured.
* Fixes SQL exception caused by the Panel attempting to store null values in the database.
* Fixes validation errors caused by improper defaults when trying to edit system settings in the admin area.
* Fixes console overflow when using smaller-than-default font sizes in Firefox.
* Fixes console text input field having a white background when manually building new assets from the release build due to a missing `babel-macros` definition file.
* Fixes database improperly using a signed `smallint` field rather than an unsigned field which restricted SFTP ports to 32767 or less.
* Fixes server console resize handler to no longer encounter an exception at random that breaks the entire UI.
* Fixes unhandled error caused by entering an invalid IP address or FQDN when creating a new node allocation.
* Fixes unhandled error when Wings would fetch a server configuration from the Panel that uses an Egg with invalid JSON data for the configuration fields.
* Fixes email not being sent to a user when their server is done installing.

### Added
* Adds support for automatically copying SFTP connection details when clicking into the text field.
* Messaging about a node not having any allocations available for deployment has been adjusted to be more understandable by users.
* Adds automated self-upgrade process for Pterodactyl Panel once this version is installed on servers. This allows users to update by using a single command.
* Adds support for specifying a month when creating or modifying a server schedule.
* Adds support for restoring backups (including those in S3 buckets) to a server and optionally deleting all existing files when doing so.
* Adds underlying support for audit logging on servers. Currently this is only used by some internal functionality but will be slowly expanded as time permits to allow more robust logging.
* Adds logic to automatically reset failed server states when Wings is rebooted. This will kick servers out of "installing" and "restoring from backup" states automatically.

### Changed
* Updated to `Laravel 8` and bumped minimum PHP version from `7.3` to `7.4` with PHP `8.0` being the recommended.
* Server state is now stored in a single `status` column within the database rather than multiple different `tinyint` columns.

## v1.2.2
### Fixed
* **[security]** Fixes authentication bypass allowing a user to take control of specific server actions such as executing schedules, rotating database passwords, and viewing or deleting a backup.

## v1.2.1
### Fixed
* Fixes URL-encoding of filenames when working in the filemanager to fix issues when moving, renaming, or deleting files.
* Fixes URL-encoding of email addresses when requesting a password reset.

### Added
* Adds the ability for users to select a base Java Docker image for most Minecraft specific eggs shipped as defaults.

## v1.2.0
### Fixed
* Fixes newest backup being deleted when creating a new one using the schedule tasks, rather than the oldest backup.
* Fixes multiple encoding issues when handling file names in the manager.
* Fixes database password not properly being copied to the clipboard when clicked.
* Fixes failed transfers unintentionally locking a server into a failed state and not properly releasing allocations that were reserved.
* Fixes error box on server pages having an oval refresh button rather than a perfect circle.
* Fixes a bunch of errors and usage issues relating to backups especially when uploading to S3-based systems.
* Fixes HMR breaking navigation in development modes on the frontend.

### Changed
* Updated Paper egg to default to Java 11 as the base docker image.
* Removes the file mode display from the File Manager row listing.
* Updated input UI elements to have thicker borders and more consistent highlighting when active.
* Changed searchbar toggle from `"k"` to `Cmd/Ctrl + "/"` to avoid accidental toggles and be more consistent with other sites.
* Upgrades TailwindCSS to `v2`.

### Added
* Adds support for eggs to define multiple Docker images that can be selected by users (e.g. Java 8 & 11 images for a single egg).
* Adds support for configuring the default interval for failed backups to be pruned from the system to avoid long running backups being incorrectly cleared.
* Adds server transfer output logging to the server console allowing admins to see how a transfer is progressing directly in the UI.
* Adds client API endpoint to download a file from a remote souce. This functionality is not currently expressed in the UI.

## v1.1.3
### Fixed
* Server bulk power actions command will no longer attempt to run commands against installing or suspended servers.
* Fixes the application API throwing an error when attempting to return variables for a server.
* Fixes an error when attempting to install Panel dependencies without specifying an `.env` file due to an unset default timezone.
* Fixes a null value flip in the database migrations.
* Fixes password change endpoint for users allowing a blank value to be provided (even if nothing actually happened).
* Fixes database IP addresses not allowing a `0` in the first octet field.
* Fixes node information being impossible to update if there was a network error during the process. Any errors encountered communicating with Wings are now reported but will not block the actual saving of the changes.
* **[Security]** When 2FA is required on an account the client API endpoints will now properly return an error and the UI will redirect the user to setup 2FA.
* **[Security]** When changing the owner of a server the old owner's JWT is now properly invalidated on Wings.
* Fixes a server error when requesting database information for a server as a subuser and the account is not granted `view_password` permissions.

### Added
* Adds support for basic backup rotation on a server when creating scheduled backup tasks.
* Makes URLs present in the console clickable.
* Adds `chmod` support to the file manager so that users can manually make modifications to file permissions as they need.

### Changed
* UI will no longer show a delete button to users when they're editing themselves.
* Updated logic for bulk power actions to no longer run actions against suspended or installing servers.

## v1.1.2
### Fixed
* Fixes an exception thrown while trying to validate IP access for the client API.
* Fixes command history scrolling not putting the cursor at the end of the line.
* Fixes file manager rows triggering a 404 when middle-clicked to open in a new tab.

## v1.1.1
### Fixed
* Fixes allocation permissions checking on the frontend checking the wrong permission therefore leading to the item never showing up.
* Fixes allocations not updating correctly when added or deleted and switching between pages.

## v1.1.0
This release **requires** `Wings@1.1.0` in order to work properly due to breaking internal API changes.

### Fixed
* Fixes subuser creation/edit modal not submitting correctly when attemping to make modifications.
* Fixes a few remaining issues with multiple egg install scripts.
* Removes the ability for a schedule to have a null name and replaces any existing null names with a randomly generated name.
* Fixes schedules aborting the entire run process if a single schedule encountered an exception. This resolves batches of schedules never running correctly if they occur after a broken schedule.
* Fixes schedules not properly resetting themselves if an exception was encountered during the run.
* Fixes numerous N+1 query run-aways when loading multiple servers via the API.
* Fixes numerous issues with displaying directory and file names in the file manager if they included special characters that could not be decoded properly.
* Fixes CPU pinning not being properly passed along to Wings when updated (this also fixes memory/CPU/disk not passing along correctly as well).
* Fixes spinner not displaying properly when displayed over a modal.

### Added
* Adds ability for users to generate their own additional server allocations via the frontend if enabled.
* Adds the ability for a user to remove un-needed allocations from their server (as long as it is not the primary allocation).
* Adds support for tracking the last 32 sent console commands for a server. Access the history by using the arrow keys when the command field is active.
* Adds S3 specific environment variables allowing for backups to use any S3 compatiable system, not just AWS.
* Adds support for copying a server allocation address to the clipboard when clicked.
* Adds information about the next schedule run time when viewing an individual schedule.
* Adds link to view a server in the admin control panel to the frontend server view when logged in as a root admin.
* Adds support for egg-specific frontend/backend functionality. This is a beta feature meant for internal features at this time.
* Adds back the EULA warning popup when starting a Minecraft server without an accepted EULA.
* Adds missing descriptions for some user permissions on the frontend UI.

### Changed
* Adds Save/Invite button to top of subuser edit/creation modal to reduce the need for scrolling.
* Updated language for server transfers and mounts to be less confusing.
* Wings API endpoint for fetching all servers on a node is now properly paginated to reduce system load when returning hundreds or thousands of servers at once.
* Removes unnecessary Wings API calls when adding/editing/deleting mounts.
* Primary allocation for a server is now always returned, even if the subuser does not have permission to view all of the server allocations.
* Google Analytics frontend code is now only loaded when a valid key is provided.

## v1.0.3
### Fixed
* Fixes bug causing subusers to not be creatable or editable via the frontend for servers.
* Fixes system timezone not being passed along properly to the MySQL connection causing scheduled tasks to run every minute when the MySQL instance and Panel timezone did not line up.
* Fixes listing servers owned by a user in the admin area to actually list their servers.

### Changed
* Adds SameSite `lax` attribute for cookies generated by the Panel.
* Adds better filtering for searching servers in the admin area to better key off name, uuid, or owner username/email.

## v1.0.2
### Added
* Adds support for searching inside the file editor.
* Adds support for manually executing a schedule regardless of if it is currently queued or not.
* Adds an indicator to the schedule UI to show when a schedule is currently processing.
* Adds support for setting the `backup_limit` of a server via the API.
* **[Security]** Adds login throttling to the 2FA verification endpoint.

### Fixed
* Fixes subuser page title missing server name.
* Fixes schedule task `sequence_id` not properly being reset when a schedule's task is deleted.
* Fixes misc. UI bugs throughout the frontend when long text overflows its bounds.
* Fixes user deletion command to properly handle email & ID searching.
* Fixes color issues in the terminal causing certain text & background combinations to be illegible.
* Fixes reCAPTCHA not properly resetting on login failure.
* Fixes error messages not properly resetting between login screens.
* Fixes a UI crash when attempting to create or view a directory or file that contained the `%` somewhere in the name.

### Changed
* Updated the search modal to close itself when the ESC key is pressed.
* Updates the schedule view and editing UI to better display information to users.
* Changed logic powering server searching on the frontend to return more accurate results and return all servers when executing the query as an admin.
* Admin CP link no longer opens in a new tab.
* Mounts will no longer allow a user to mount certain directory combinations. This blocks mounting one server's files into another server, and blocks using the server data directory as a mount destination.
* Cleaned up assorted server build modification code.
* Updates default eggs to have improved install scripts and more consistent container usage.

## v1.0.1
### Fixed
* Fixes 500 error when mounting a mount to a server, and other related errors when handling mounts.
* Ensures that `server_transfers` database is deleted if it already exists to avoid unnecessary error.
* Fixes servers getting marked as "not installed" when modifying their startup arguments.
* Fixes filemanager breadcrumbs being set incorrectly when navigating between files and folders.

### Changed
* Change the requests per minute from 240 to 720 for the client API to avoid unecessarily displaying
"Too Many Requests" errors.
* Added error output to certain commands that will output and terminate the command execution if the database
migrations have not been run correctly for the instance.

## v1.0.0
Pterodactyl 1.0 represents the culmination of over two years of work, almost 2,000 commits, endless bug and feature requests, and a dream that
has been in the making since 2013. 🎉

Due to the sheer size and timeline of this release I've massively truncated the listing below. There are numerous smaller
bug fixes and changes that would simply be too difficult to keep track of here. Please feel free to browse through the releases
tab for this repository to see more specific changes that have been made.

### Added
* Adds a new client-facing API allowing a user to control all aspects of their individual servers, or servers
which they have been granted access to as a subuser.
* Adds the ability for backups to be created for a server both manually and via a scheduled task.
* Adds the ability for users to modify their server allocations on the fly and include notes for each allocation.
* Adds the ability for users to generate recovery tokens for 2FA protected logins which can be used in place of
a code should their device be inaccessible.
* Adds support for transfering servers between Nodes via the Panel.
* Adds the ability to assign specific CPU cores to a server (CPU Pinning) process.
* Server owners can now reinstall their assigned server egg automatically with a button on the frontend.

### Changed
* The entire user frontend has been replaced with a responsive, React backed design implemented using Tailwind CSS.
* Replaces a large amount of complex daemon authentication logic by funneling most API calls through the Panel, and using
JSON Web Tokens where necessary to handle one-time direct authentication with Wings.
* Frontend server listing now includes a toggle to show or hide servers which an administrator has access to, rather
than always showing all servers on the system when logged into an admin account.
* We've replaced Ace Editor on the frontend with a better solution to allow lighter builds and more end-user functionality.
* Server permissions have been overhauled to be both easier to understand in the codebase, and allows plugins to better
hook into the permission system.

### Removed
* Removes large swaths of code complexity and confusing interface designs that caused a lot of pain to new developers
trying to jump into the codebase. We've simplified this to stick to more established Laravel design standards to make
it easy to parse through the project and make contributions.

## v0.7.19 (Derelict Dermodactylus)
### Fixed
* **[Security]** Fixes XSS in the admin area's server owner selection.

## v0.7.18 (Derelict Dermodactylus)
### Fixed
* **[Security]** Re-addressed missed endpoint that would not properly limit a user account to 5 API keys.
* **[Security]** Addresses a Client API vulnerability that would allow a user to list all servers on the system ([`GHSA-6888-7f3w-92jx`](https://github.com/pterodactyl/panel/security/advisories/GHSA-6888-7f3w-92jx))

## v0.7.17 (Derelict Dermodactylus)
### Fixed
* Limited accounts to 5 API keys at a time.
* Fixes database passwords not being generated with the proper requirements for some MySQL setups.
* Hostnames that are not FQDNs/IP addresses can now be used for connecting to a MySQL host.

## v0.7.16 (Derelict Dermodactylus)
### Fixed
* Fixed the /api/application/servers endpoint erroring when including subusers or egg
* Fixed bug in migration files causing failures when using MySQL 8.
* Fixed missing redirect return when an error occurs while modifying database information.
* Fixes bug in login attempt tracking.
* Fixes a bug where certain URL encoded files would not be editable in the file manager.

### Added
* The application API now includes the egg's name in the egg model's response.
* The /api/application/servers endpoint can now include server's databases and subusers.

## v0.7.15 (Derelict Dermodactylus)
### Fixed
* Fixes support for PHP 7.3 when running `composer install` commands due to a dependency that needed updating.
* Automatic allocation field when creating a new node (or updating one) should now properly remeber its old
value when showing an error state.
* Mass deleting files now executes properly and doesn't result in a JS console error.
* Scrolling on email settings page now works.
* Database host management will now properly display an error message to the user when there is any type of MySQL related
error encountered during creation or update.
* Two-factor tokens generated when a company name has a space in it will now properly be parsed on iOS authenticator devices.
* Fixed 500 error when trying to request subuser's from a server in the application API.
* Creating a node allocation via the API no longer requires an alias field be passed through in the request.
* Bulk power management for servers via the CLI no longer fails when servers span multiple nodes.

### Added
* Server listing view now displays the total used disk space for each server.
* Client API endpoint to list all servers now supports an additional `?filter=subuser-of|all|admin|owner` parameter to
return different groupings of servers. The default value is `subuser-of` which will include all of the user's servers
that they are the owner of, as well as all servers they're a subuser of.
* Added back ability to toggle OOM killer status on a per-server basis.
* Added `LOCK TABLES` permission for generated database users.

### Changed
* Updated Paper egg to not download `server.properties` each time. [parkervcp/eggs#260](https://github.com/parkervcp/eggs/issues/260)
* Insurgency egg now uses the proper dedicated server ID.
* Teamspeak egg updated with improved installation process and grabbing latest versions.
* OOM killer disabled by default on all new servers.
* Passwords generated for MySQL now include special characters and are 24 characters in length.

## v0.7.14 (Derelict Dermodactylus)
### Fixed
* **[SECURITY]** Fixes an XSS vulnerability when performing certain actions in the file manager.
* **[SECURITY]** Attempting to login as a user who has 2FA enabled will no longer request the 2FA token before validating
that their password is correct. This closes a user existence leak that would expose that an account exists if
it had 2FA enabled.

### Changed
* Support for setting a node to listen on ports lower than 1024.
* QR code URLs are now generated without the use of an external library to reduce the dependency tree.
* Regenerated database passwords now respect the same settings that were used when initially created.
* Cleaned up 2FA QR code generation to use a more up-to-date library and API.
* Console charts now properly start at 0 and scale based on server configuration. No more crazy spikes that
are due to a change of one unit.

## v0.7.13 (Derelict Dermodactylus)
### Fixed
* Fixes a bug with the location update API endpoint throwing an error due to an unexected response value.
* Fixes bug where node creation API endpoint was not correctly requiring the `disk_overallocate` key.
* Prevents an exception from being thrown when a database with the same name is created on two different hosts.
* Fixes the redis password not saving correctly when setting up the environment from the command line.
* Fixes a bug with transaction handling in many areas of the application that would cause validation error messages
and other session data to not be persisted properly when using the database as the session driver.
* Fix a bug introduced at some point in the past that causes internal data integrity exceptions to not bubble up to
the user correctly, leading to extraneous and confusing exception messages.
* Fixes a bug causing servers to not be marked as having failed installation in some cases.

### Changed
* `allocation_limit` for servers now defaults to a null value, and is not required in PATCH/POST requests when adding
a server through the API.
* The `PATCH` endpoint for `/api/applications/servers/{server}/build` now accepts an array called `limits` to match
the response from the server `GET` endpoint.

### Added
* The server listing for a node is now paginated to 25 servers per page to improve performance on large nodes.

## v0.7.12 (Derelict Dermodactylus)
### Fixed
* Fixes an issue with the locations API endpoint referencing an invalid namespace.
* Fixes the `store()` function on the locations API not working due to an incorrect return typehint.
* Fixes daemon secrets not being able to be reset on a Node.
* Fixes an issue where files were not editable due to missing URL encoding in the file manager.
* Fixed checking of language changes
* Fixed Spigot egg not building versions other than `latest`.
* Fixed the Forge egg install script.
* Fixes a bug that would ignore the `skip_scripts` setting when creating or editing a server.

### Updated
* Upgraded core to use Laravel `5.7.14`.
* Updated Simplified Chinese translation pack.

### Added
* Added support for opening and editing Python files through the web editor.
* Adds Russian translation.

## v0.7.11 (Derelict Dermodactylus)
### Fixed
* Fixes an issue with certain systems not handling an API folder that was named `API` but referenced as `Api` in the namespace.
* TS3 egg updated to use CLI arguments correctly and have a more minimalistic installation script.
* Terminal was not properly displaying longer lines leading to some visual inconsistency.
* Assorted translation updates.
* Pagination for server listing now properly respects configuration setting.
* Client API now properly respects permissions that are set and allows subusers to access their assigned servers.

### Changed
* Removed PhraseApp integration from Panel code as it is no longer used.
* SFTP login endpoint now returns the permissions for that user rather than requiring additional queries to get that data.

### Added
* You can now test your mail settings from the Admin CP without waiting to see if things are working correctly.

## v0.7.10 (Derelict Dermodactylus)
### Fixed
* Scheduled tasks triggered manually no longer improperly change the `next_run_at` time and do not run twice in a row anymore.
* Changing the maximum web-based file upload size for a node now properly validates and updates.
* Changing configuration values for a node now correctly updates them on the daemon on the first request, rather than requiring a second request to set them.

### Changed
* Egg and server variable values are no longer limited to 191 characters. Turns out some games require a large number of characters in these fields.

### Added
* Users can now select their preferred language in their account settings.

## v0.7.9 (Derelict Dermodactylus)
### Fixed
* Fixes a two-factor authentication bypass present in the password reset process for an account.

## v0.7.8 (Derelict Dermodactylus)
### Added
* Nodes can now be put into maintenance mode to deny access to servers temporarily.
* Basic statistics about your panel are now available in the Admin CP.
* Added support for using a MySQL socket location for connections rather than a TCP connection. Set a `DB_SOCKET` variable in your `.env` file to use this.

### Fixed
* Hitting Ctrl+Z when editing a file on the web now works as expected.
* Logo now links to the correct location on all pages.
* Permissions checking to determine if a user can see the task management page now works correctly.
* Fixed `pterodactyl.environment_variables` to be used correctly for global environment variables. The wrong config variable name was being using previously.
* Fixes tokens being sent to users when their account is created to actually work. Implements Laravel's internal token creation mechanisms rather than trying to do it custom.
* Updates some eggs to ensure they have the correct data and will continue working down the road. Fixes autoupdating on some source servers and MC related download links.
* Emails should send properly now when a server is marked as installed to let the owner know it is ready for action.
* Cancelling a file manager operation should cancel correctly across all browsers now.

### Changed
* Attempting to upload a folder via the web file manager will now display a warning telling the user to use SFTP.
* Changing your account password will now log out all other sessions that currently exist for that user.
* Subusers with no permissions selected can be created.

## v0.7.7 (Derelict Dermodactylus)
### Fixed
* Fixes an issue with the sidebar logo not working correctly in some browsers due to the CSS being assigned.
* Fixes a bunch of typos through the code base.
* Fixes a bug when attempting to load the dropdown menu for server owner in some cases.
* Fixes an exception thrown when the database connection address was not filled out correctly while adding a database to a server.
* Fixes some mistakes in the German translation of the panel.

### Added
* Added a new client API endpoint for gathering the utilization stats for servers including disk, cpu, and memory. `GET /api/client/servers/<id>/utilization`
* Added validation to variable validation rules to validate that the validation rules are valid because we heard you like validating your validation.
* Added German translations for many previously untranslated parts of the panel.

### Changed
* Updated core framework from Laravel 5.5 to Laravel 5.6.
* Improved support for Windows based environments.
* Spigot Egg now builds spigot for you rather than requiring a download location be specified.

## v0.7.6 (Derelict Dermodactylus)
### Fixed
* Fixes a UI error when attempting to change the default Nest and Egg for an existing server.
* Correct permissions check in UI to allow subusers with permission to `view-allocations` the ability to actually see the sidebar link.
* Fixes improper behavior when marking an egg as copying the configuration from another.
* Debug bar is only checked when the app is set to debug mode in the API session handler, rather than when it is in local mode to match the plugin settings.
* Added validation to port allocations to prevent allocation of restricted or invalid ports.
* Fix data integrity exception thrown when attempting to store updated server egg variables.
* Added missing permissions check on 'SFTP Configuration' page to ensure user has permission to access a server's SFTP server before showing a user credentials.

### Added
* Added ability for end users to change the name of their server through the UI. This option is only open to the server owner or an admin.
* Added giant warning message if you attempt to change an encryption key once one has been set.

### Changed
* Panel now throws proper 504: Gateway Timeout errors on server listing when daemon is offline.
* Sessions handled through redis now use a separate database (default `1`) to store session database to avoid logging users out when flushing the cache.
* File manager UI improved to be clearer with buttons and cleaner on mobile.
* reCAPTCHA's secret key position swapped with website key in advanced panel settings to be consistent with Google's reCAPTCHA dashboard.
* Changed DisplayException to handle its own logging correctly and check if the previous exception is marked as one that should not be logged.
* Changed 'New Folder' modal in file manager to include a trailing slash.

## v0.7.5 (Derelict Dermodactylus)
### Fixed
* Fixes application API keys being created as a client API key.
* Search term is now passed through when using paginated result sets.
* Reduces the number of SQL queries executed when rendering the server listing to increase performance.
* Fixes exceptions being thrown for non-existent subuser permissions.
* Fixes exception caused when trying to revoke admin privileges from a user account due to a bad endpoint.

### Changed
* Databases are now properly paginated when viewing a database host.
* No more loading daemon keys for every server model being loaded, some of us value our databases.
* Changed behavior of the subuser middleware to add a daemon access key if one is missing from the database for some reason.
* Server short-codes are now based on the UUID as they were in previous versions of Pterodactyl.

## v0.7.4-h1 (Derelict Dermodactylus)
### Fixed
* Being able to create servers is kind of a core aspect of the software, pushing releases late at night is not a great idea.

## v0.7.4 (Derelict Dermodactylus)
### Fixed
* Fixes a bug when reinstalling a server that would not mark the server as installing, resulting in some UI issues.
* Handle 404 errors from missing models in the application API bindings correctly.
* Fix validation error returned when no environment variables are passed, even if there are no variables required.
* Fix improper permissions on `PATCH /api/servers/<id>/startup` endpoint which was preventing editing any start variables.
* Should fix migration issues from 0.6 when there are more than API key in the database.

### Changed
* Changes order that validation of resource existence occurs in API requests to not try and use a non-existent model when validating data.

### Added
* Adds back client API for sending commands or power toggles to a server though the Panel API: `/api/client/servers/<identifier>`
* Added proper transformer for Packs and re-enabled missing includes on server.
* Added support for using Filesystem as a caching driver, although not recommended.
* Added support for user management of server databases.
* **Added bulk power management CLI interface to send start, stop, kill, restart actions to servers across configurable nodes.**

## v0.7.3 (Derelict Dermodactylus)
### Fixed
* Fixes server creation API endpoint not passing the provided `external_id` to the creation service.
* Fixes a bug causing users to be un-editable on new installations once more than one user exists.
* Fixes default order of buttons in certain parts of the panel that would default to 'Delete' rather than 'Save' when pressing enter.

### Added
* Adds ability to modify the external ID for a server through the API.

## v0.7.2 (Derelict Dermodactylus)
### Fixed
* Fixes an exception thrown when trying to access the `/nests/:id/eggs/:id` API endpoint.
* Fixes search on server listing page.
* Schedules with no names are now clickable to allow editing.
* Fixes broken permissions check that would deny access to API keys that did in fact have permission.

### Added
* Adds ability to include egg variables on an API request.
* Added `external_id` column to servers that allows for easier linking with external services such as WHMCS.
* Added back the sidebar when viewing servers that allows for quick-switching to a different server.
* Added API endpoint to get a server by external ID.

## v0.7.1 (Derelict Dermodactylus)
### Fixed
* Fixes an exception when no token is entered on the 2-Factor enable/disable page and the form is submitted.
* Fixes an exception when trying to perform actions against a User model due to a validator that could not be cast to a string correctly.
* Allow FQDNs in database host creation UI correctly.
* Fixes database naming scheme using `d###_` rather than `s###_` when creating server databases.
* Fix exception thrown when attempting to update an existing database host.

### Changed
* Adjusted exception handler behavior to log more stack information for PDO exceptions while not exposing credentials.

### Added
* Very basic cache busting until asset management can be changed to make use of better systems.

## v0.7.0 (Derelict Dermodactylus)
### Fixed
* `[rc.2]` — Fixes bad API behavior on `/user` routes.
* `[rc.2]` — Fixes Admin CP user editing resetting a password on users unintentionally.
* `[rc.2]` — Fixes bug with server creation API endpoint that would fail to validate `allocation.default` correctly.
* `[rc.2]` — Fix data integrity exception occurring due to invalid data being passed to server creation service on the API.
* `[rc.2]` — Fix data integrity exception that could occur when an email containing non-username characters was passed.
* `[rc.2]` — Fix data integrity exception occurring when no default value is provided for an egg variable.
* `[rc.2]` — Fixes a bug that would cause non-editable variables on the front-end to throw a validation error.
* `[rc.2]` — Fixes a data integrity exception occurring when saving egg variables with no value.
* Fixes a design bug in the database that prevented the storage of negative numbers, thus preventing a server from being assigned unlimited swap.
* Fixes a bug where the 'Assign New Allocations' box would only show IPs that were present in the current pagination block.
* Unable to change the daemon secret for a server via the Admin CP.
* Using default value in rules when creating a new variable if the rules is empty.
* Fixes a design-flaw in the allocation management part of nodes that would run a MySQL query for each port being allocated. This behavior is now changed to only execute one query to add multiple ports at once.
* Attempting to create a server when no nodes are configured now redirects to the node creation page.
* Fixes missing library issue for teamspeak when used with mariadb.
* Fixes inability to change the default port on front-end when viewing a server.
* Fixes bug preventing deletion of nests that have other nests referencing them as children.
* Fixes console sometimes not loading properly on slow connections

### Added
* Added ability to search the following API endpoints: list users, list servers, and list locations.
* Add support for finding a user by external ID using `/api/application/users/external/<id>` or by passing it as the search term when listing all users.
* Added a unique key to the servers table to data integrity issues where an allocation would be assigned to more than one server at once.
* Added support for editing an existing schedule.
* Added support for editing symlinked files on the Panel.
* Added new application specific API to Panel with endpoints at `/api/application`. Includes new Admin CP interface for managing keys and an easier permissions system.
* Nest and Egg listings now show the associated ID in order to make API requests easier.
* Added star indicators to user listing in Admin CP to indicate users who are set as a root admin.
* Creating a new node will now requires a SSL connection if the Panel is configured to use SSL as well.
* Socketio error messages due to permissions are now rendered correctly in the UI rather than causing a silent failure.
* File manager now supports mass deletion option for files and folders.
* Support for CS:GO as a default service option selection.
* Support for GMOD as a default service option selection.
* Added test suite for core aspects of the project (Services, Repositories, Commands, etc.) to lessen the chances for bugs to escape into releases.
* New CLI command to disabled 2-Factor Authentication on an account if necessary.
* Ability to delete users and locations via the CLI.
* You can now require 2FA for all users, admins only, or at will using a simple configuration in the Admin CP.
* **Added ability to export and import service options and their associated settings and environment variables via the Admin CP.**
* Default allocation for a server can be changed on the front-end by users. This includes two new subuser permissions as well.
* Significant improvements to environment variable control for servers. Now ships with built-in abilities to define extra variables in the Panel's configuration file, or in-code for those heavily modifying the Panel.
* Quick link to server edit view in ACP on frontend when viewing servers.
* Databases created in the Panel now include `EXECUTE` privilege.

### Changed
* PHP 7.2 is now the minimum required version for this software.
* Egg variable default values are no longer validated against the ruleset when configuring them. Validation of those rules will only occur when editing or creating a server.
* Changed logger to skip reporting stack-traces on PDO exceptions due to sensitive information being contained within.
* Changed behavior of allocation IP Address/Ports box to automatically store the value entered if a user unfocuses the field without hitting space.
* Changed order in which allocations are displayed to prioritize those with servers attached (in ascending IP & port order) followed by ascending IP & port order where no server is attached.
* Revoking the administrative status for an admin will revoke all authentication tokens currently assigned to their account.
* Updated core framework to Laravel 5.5. This includes many dependency updates.
* Certain AWS specific environment keys were changed, this should have minimal impact on users unless you specifically enabled AWS specific features. The renames are: `AWS_KEY -> AWS_ACCESS_KEY_ID`, `AWS_SECRET -> AWS_SECRET_ACCESS_KEY`, `AWS_REGION -> AWS_DEFAULT_REGION`
* API keys have been changed to only use a single public key passed in a bearer token. All existing keys can continue being used, however only the first 32 characters should be sent.
* Moved Docker image setting to be on the startup management page for a server rather than the details page. This value changes based on the Nest and Egg that are selected.
* Two-Factor authentication tokens are now 32 bytes in length, and are stored encrypted at rest in the database.
* Login page UI has been improved to be more sleek and welcoming to users.
* Changed 2FA login process to be more secure. Previously authentication checking happened on the 2FA post page, now it happens prior and is passed along to the 2FA page to avoid storing any credentials.
* **Services renamed to Nests. Service Options renamed to Eggs.** 🥚
* Theme colors and login pages updated to give a more unique feel to the project.
* Massive overhaul to the backend code that allows for much easier updating of core functionality as well as support for better testing. This overhaul also reduces complex code logic, and allows for faster response times in the application.
* CLI commands updated to be easier to type, now stored in the `p:` namespace.
* Logout icon is now more universal and not just a power icon.
* Administrative logout notice now uses SWAL rather than a generic javascript popup.
* Server creation page now only asks for a node to deploy to, rather than requiring a location and then a node.
* Database passwords are now hidden by default and will only show if clicked on. In addition, database view in ACP now indicates that passwords must be viewed on the front-end.
* Localhost cannot be used as a connection address in the environment configuration script. `127.0.0.1` is allowed.
* Application locale can now be quickly set using an environment variable `APP_LOCALE` rather than having to edit core files.

### Removed
* OOM exceptions can no longer be disabled on servers due to a startling number of users that were using it to avoid allocating proper amounts of resources to servers.
* SFTP settings page now only displays connection address and username. Password setting was removed as it is no longer necessary with Daemon changes.

## v0.7.0-rc.2 (Derelict Dermodactylus)
### Fixed
* `[rc.1]` — Fixes exception thrown when revoking user sessions.
* `[rc.1]` — Fixes exception that would occur when trying to delete allocations from a node.
* `[rc.1]` — Fixes exception thrown when attempting to adjust mail settings as well as a validation error thrown afterwards.
* `[rc.1]` — Fixes bug preventing modification of the default value for an Egg variable.
* `[rc.1]` — Fixed a bug that would occur when attempting to reset the daemon secret for a node.
* `[rc.1]` — Fix exception thrown when attempting to modify an existing database host.
* `[rc.1]` — Fix an auto deployment bug causing a node to be ignored if it had no servers already attached to it.

### Changed
* Changed logger to skip reporting stack-traces on PDO exceptions due to sensitive information being contained within.

### Added
* Added support for editing an existing schedule.

## v0.7.0-rc.1 (Derelict Dermodactylus)
### Fixed
* `[beta.4]` — Fixes some bad search and replace action that happened previously and was throwing errors when validating user permissions.
* `[beta.4]` — Fixes behavior of variable validation to not break the page when no rules are provided.
* `[beta.4]` — Fix bug preventing the editing of files in the file manager.

### Added
* Added support for editing symlinked files on the Panel.
* Added new application specific API to Panel with endpoints at `/api/application`. Includes new Admin CP interface for managing keys and an easier permissions system.

## v0.7.0-beta.4 (Derelict Dermodactylus)
### Fixed
* `[beta.3]` — Fixes a bug with the default environment file that was causing an inability to perform a fresh install when running package discovery.
* `[beta.3]` — Fixes an edge case caused by the Laravel 5.5 upgrade that would try to perform an in_array check against a null value.
* `[beta.3]` — Fixes a bug that would cause an error when attempting to create a new user on the Panel.
* `[beta.3]` — Fixes error handling of the settings service provider when no migrations have been run.
* `[beta.3]` — Fixes validation error when trying to use 'None' as the 'Copy Script From' option for an egg script.
* Fixes a design bug in the database that prevented the storage of negative numbers, thus preventing a server from being assigned unlimited swap.
* Fixes a bug where the 'Assign New Allocations' box would only show IPs that were present in the current pagination block.

### Added
* Nest and Egg listings now show the associated ID in order to make API requests easier.

### Changed
* Changed behavior of allocation IP Address/Ports box to automatically store the value entered if a user unfocuses the field without hitting space.
* Changed order in which allocations are displayed to prioritize those with servers attached (in ascending IP & port order) followed by ascending IP & port order where no server is attached.

### Removed
* OOM exceptions can no longer be disabled on servers due to a startling number of users that were using it to avoid allocating proper amounts of resources to servers.

## v0.7.0-beta.3 (Derelict Dermodactylus)
### Fixed
* `[beta.2]` — Fixes a bug that would cause an endless exception message stream in the console when attempting to setup environment settings in certain instances.
* `[beta.2]` — Fixes a bug causing the dropdown menu for a server's egg to display the wrong selected value.
* `[beta.2]` — Fixes a bug that would throw a red page of death when submitting an invalid egg variable value for a server in the Admin CP.
* `[beta.2]` — Someone found a `@todo` that I never `@todid` and thus database hosts could not be created without being linked to a node. This is fixed...
* `[beta.2]` — Fixes bug that caused incorrect rendering of CPU usage on server graphs due to missing variable.
* `[beta.2]` — Fixes bug causing schedules to be un-deletable.
* `[beta.2]` — Fixes bug that prevented the deletion of nodes due to an allocation deletion cascade issue with the SQL schema.
* `[beta.2]` — Fixes a bug causing eggs not extending other eggs to fail validation.

### Changed
* Revoking the administrative status for an admin will revoke all authentication tokens currently assigned to their account.
* Updated core framework to Laravel 5.5. This includes many dependency updates.
* Certain AWS specific environment keys were changed, this should have minimal impact on users unless you specifically enabled AWS specific features. The renames are: `AWS_KEY -> AWS_ACCESS_KEY_ID`, `AWS_SECRET -> AWS_SECRET_ACCESS_KEY`, `AWS_REGION -> AWS_DEFAULT_REGION`
* API keys have been changed to only use a single public key passed in a bearer token. All existing keys can continue being used, however only the first 32 characters should be sent.

### Added
* Added star indicators to user listing in Admin CP to indicate users who are set as a root admin.
* Creating a new node will now requires a SSL connection if the Panel is configured to use SSL as well.

## v0.7.0-beta.2 (Derelict Dermodactylus)
### Fixed
* `[beta.1]` — Fixes a CORS header issue due to a wrong API endpoint being provided in the administrative node listing.
* `[beta.1]` — Fixes bug that would prevent root admins from accessing servers they were not set as the owner of.
* `[beta.1]` — Fixes wrong URL redirect being provided when creating a subuser.
* `[beta.1]` — Fixes missing check in environment setup that would leave the Hashids salt empty.
* `[beta.1]` — Fixes bug preventing loading of allocations when trying to create a new server.
* `[beta.1]` — Fixes bug causing inability to create new servers on the Panel.
* `[beta.1]` — Fixes bug causing inability to delete an allocation due to misconfigured JS.
* `[beta.1]` — Fixes bug causing inability to set the IP alias for an allocation to an empty value.
* `[beta.1]` — Fixes bug that caused startup changes to not propagate to the server correctly on the first save.
* `[beta.1]` — Fixes bug that prevented subusers from accessing anything over socketio due to a missing permission.

### Changed
* Moved Docker image setting to be on the startup management page for a server rather than the details page. This value changes based on the Nest and Egg that are selected.
* Two-Factor authentication tokens are now 32 bytes in length, and are stored encrypted at rest in the database.
* Login page UI has been improved to be more sleek and welcoming to users.
* Changed 2FA login process to be more secure. Previously authentication checking happened on the 2FA post page, now it happens prior and is passed along to the 2FA page to avoid storing any credentials.

### Added
* Socketio error messages due to permissions are now rendered correctly in the UI rather than causing a silent failure.

## v0.7.0-beta.1 (Derelict Dermodactylus)
### Added
* File manager now supports mass deletion option for files and folders.
* Support for CS:GO as a default service option selection.
* Support for GMOD as a default service option selection.
* Added test suite for core aspects of the project (Services, Repositories, Commands, etc.) to lessen the chances for bugs to escape into releases.
* New CLI command to disabled 2-Factor Authentication on an account if necessary.
* Ability to delete users and locations via the CLI.
* You can now require 2FA for all users, admins only, or at will using a simple configuration in the Admin CP.
* **Added ability to export and import service options and their associated settings and environment variables via the Admin CP.**
* Default allocation for a server can be changed on the front-end by users. This includes two new subuser permissions as well.
* Significant improvements to environment variable control for servers. Now ships with built-in abilities to define extra variables in the Panel's configuration file, or in-code for those heavily modifying the Panel.
* Quick link to server edit view in ACP on frontend when viewing servers.
* Databases created in the Panel now include `EXECUTE` privilege.

### Changed
* **Services renamed to Nests. Service Options renamed to Eggs.** 🥚
* Theme colors and login pages updated to give a more unique feel to the project.
* Massive overhaul to the backend code that allows for much easier updating of core functionality as well as support for better testing. This overhaul also reduces complex code logic, and allows for faster response times in the application.
* CLI commands updated to be easier to type, now stored in the `p:` namespace.
* Logout icon is now more universal and not just a power icon.
* Administrative logout notice now uses SWAL rather than a generic javascript popup.
* Server creation page now only asks for a node to deploy to, rather than requiring a location and then a node.
* Database passwords are now hidden by default and will only show if clicked on. In addition, database view in ACP now indicates that passwords must be viewed on the front-end.
* Localhost cannot be used as a connection address in the environment configuration script. `127.0.0.1` is allowed.
* Application locale can now be quickly set using an environment variable `APP_LOCALE` rather than having to edit core files.

### Fixed
* Unable to change the daemon secret for a server via the Admin CP.
* Using default value in rules when creating a new variable if the rules is empty.
* Fixes a design-flaw in the allocation management part of nodes that would run a MySQL query for each port being allocated. This behavior is now changed to only execute one query to add multiple ports at once.
* Attempting to create a server when no nodes are configured now redirects to the node creation page.
* Fixes missing library issue for teamspeak when used with mariadb.
* Fixes inability to change the default port on front-end when viewing a server.
* Fixes bug preventing deletion of nests that have other nests referencing them as children.
* Fixes console sometimes not loading properly on slow connections

### Removed
* SFTP settings page now only displays connection address and username. Password setting was removed as it is no longer necessary with Daemon changes.

## v0.6.4 (Courageous Carniadactylus)
### Fixed
* Fixed the console rendering on page load, I guess people don't like watching it load line-by-line for 10 minutes. Who would have guessed...
* Re-added support for up/down arrows loading previous commands in the console window.

### Changed
* Panel API for Daemon now responds with a `HTTP/401 Unauthorized` error when unable to locate a node with a given authentication token, rather than a `HTTP/404 Not Found` response.
* Added better colors and styling for the terminal that can be adjusted per-theme.
* Session timeout adjusted to be 7 days by default.

## v0.6.3 (Courageous Carniadactylus)
### Fixed
* **[Security]** — Addresses an oversight in how the terminal rendered information sent from the server feed which allowed a malicious user to execute arbitrary commands on the game-server process itself by using a specifically crafted in-game command.

### Changed
* Removed `jquery.terminal` and replaced it with an in-house developed terminal with less potential for security issues.

## v0.6.2 (Courageous Carniadactylus)
### Fixed
* Fixes a few typos throughout the panel, there are more don't worry.
* Fixes bug when disabling 2FA due to a misnamed route.
* API now returns a 404 error when deleting a user that doesn't exist, rather than saying it was successful.
* Service variables that allow empty input now allow you to empty out the assigned value and set it back to blank.
* Fixes a bug where changing the default allocation for a server would not actually apply that allocation as the default on the daemon.
* Newly created service variables are now backfilled and assigned to existing servers properly.

### Added
* Added a `Vagrantfile` to the repository to help speed up development and testing for those who don't want to do a full dedicated install.
* Added a confirmation dialog to the logout button for admins to prevent misguided clickers from accidentally logging out when they wanted to switch to Admin or Server views.

### Changed
* Blocked out the `Reinstall` button for servers that have failed installation to avoid confusion and bugs causing the daemon to break.
* Updated dependencies, listed below.
```
aws/aws-sdk-php (3.26.5 => 3.29.7)       
laravel/framework (v5.4.21 => v5.4.27)        
barryvdh/laravel-debugbar (v2.3.2 => v2.4.0)     
fideloper/proxy (3.3.0 => 3.3.3)
igaster/laravel-theme (v1.14 => v1.16)    
laravel/tinker (v1.0.0 => v1.0.1)  
spatie/laravel-fractal (4.0.0 => 4.0.1)
```

## v0.6.1 (Courageous Carniadactylus)
### Fixed
* Fixes a bug preventing the use of services that have no variables attached to them.
* Fixes 'Remember Me' checkbox being ignored when using 2FA on an account.
* API now returns a useful error displaying what went wrong rather than an obscure 'An Error was Encountered' message when API issues arise.
* Fixes bug preventing the creation of new files in the file manager due to a missing JS dependency on page load.
* Prevent using a service option tag that contains special characters that are not valid. Now only allows alpha-numeric, no spaces or underscores.
* Fix unhandled exception due to missing `Log` class when using the API and causing an error.

### Changed
* Renamed session cookies from `laravel_session` to `pterodactyl_session`.
* Sessions are now encrypted before being stored as an additional layer of security.
* It is now possible to clear out a server description and have it be blank, rather than throwing an error about the field being required.

## v0.6.0 (Courageous Carniadactylus)
### Fixed
* Bug causing error logs to be spammed if someone timed out on an ajax based page.
* Fixes edge case where specific server names could cause daemon errors due to an invalid SFTP username being created by the panel.
* Fixes sessions being removed on browser close, and set sessions to idle for up to 3 hours before being marked as expired.
* Emails sending with 'Pterodactyl Panel' as the from name. Now configurable by using `php artisan pterodactyl:mail` to update.
* Fixes potential bug with invalid CIDR notation (ex: `192.168.1.1/z`) when adding allocations that could cause over 4 million records to be created at once.
* Fixes bug where daemon was unable to register that certain games had fully booted and were ready to play on.
* Fixes bug causing MySQL user accounts to be corrupted when resetting a password via the panel.
* Fixes remote timing attack vulnerability due to hmac comparison in API middleware.
* `[rc.1]` — Server deletion is fixed, caused by removed download table.
* `[rc.1]` — Server status indication on front-end no longer shows `Error` when server is marked as installing or suspended.
* `[rc.1]` — Fixes issues with SteamCMD not registering and installing games properly.

### Changed
* Admin API and base routes for user management now define the fields that should be passed to repositories rather than passing all fields.
* User model now defines mass assignment fields using `$fillable` rather than `$guarded`.
* 2FA checkpoint on login is now its own page, and not an AJAX based call. Improves security on that front.
* Updated Server model code to be more efficient, as well as make life easier for backend changes and work.
* Reduced the number of database queries being executed when viewing a specific server. This is done by caching the query for up to 15 minutes in memcached.
* User creation emails include more information and are sent by the event listener rather than the repository.
* Account password reset emails now auto-fill the email when clicking the link.
* New theme applied to Admin CP. Many graphical changes were made, some data was moved around and some display data changed. Too much was changed to feasibly log it all in here. Major breaking changes or notable new features will be logged.
* New server creation page now makes significantly less AJAX calls and is much quicker to respond.
* Server and Node view pages wee modified to split tabs into individual pages to make re-themeing and modifications significantly easier, and reduce MySQL query loads on page.
* Most of the backend `UnhandledException` display errors now include a clearer error that directs admins to the program's logs.
* Table seeders for services now can be run during upgrades and will attempt to locate and update, or create new if not found in the database.
* Many structural changes to the database and `Pterodactyl\Models` classes that would flood this changelog if they were all included. All required migrations included to handle database changes.
* Clarified details for database hosts to prevent users entering invalid account details, as well as renamed tables and columns relating to it to keep things clearer.
* Updated all code to be Laravel compliant when using `env()` and moved to using `config()` throughout non `config/*.php` files.
* Subuser permissions are now stored in `Permission::listPermissions()` to make views way cleaner and make adding to views significantly cleaner.
* Attempting to reset a password for an account that does not exist no longer returns an error, rather it displays a success message. Failed resets trigger a `Pterodactyl\Events\Auth\FailedPasswordReset` event that can be caught if needed to perform other actions.
* Servers are no longer queued for deletion due to the general hassle and extra logic required.
* Updated all panel components to run on Laravel v5.4 rather than 5.3 which is EOL.
* Routes are now handled in the `routes/` folder, and use a significantly cleaner syntax. Controller names and methods have been updated as well to be clearer as well as avoid conflicts with PHP reserved keywords.
* API has been completely overhauled to use new permissions system. **Any old API keys will immediately become invalid and fail to operate properly anymore. You will need to generate new keys.**
* Cleaned up dynamic database connection setting to use a single function call from the host model.
* Deleting a server safely now continues even if the daemon reports a `HTTP/404` missing server error (requires `Daemon@0.4.0-beta.2.1`)
* Changed behavior when modifying server allocation information. You can now remove the default allocation assuming you are passing a new allocation at the same time. Reduces the number of steps to change the default allocation for a server.
* Environment setting commands now attempt to auto-quote strings with spaces in them, as well as comment lines that are edited to avoid manual changes being overwritten.
* Version in footer of panel now displays correctly if panel is installed using Git rather than a download from source.
* Mobile views are now more... viewable. Fixes `col-xs-6` usage throughout the Admin CP where it was intended to be `col-md-6`.
* Node Configuration tokens and Download tokens are stored using the cache helpers rather than a database to speed up functions and make use of auto-expiration/deletion functions.
* Old daemon routes using `/remote` have been changed to use `/daemon`, panel changes now reflect this.
* Only display servers that a user is owner of or subuser of in the Admin CP rather than all servers if the user is marked as an admin.
* Panel now sends all non-default allocations as `ALLOC_#__IP` and `ALLOC_#__PORT` to the daemon, as well as the location.

### Added
* Remote routes for daemon to contact in order to allow Daemon to retrieve updated service configuration files on boot. Centralizes services to the panel rather than to each daemon.
* Basic service pack implementation to allow assignment of modpacks or software to a server to pre-install applications and allow users to update.
* Users can now have a username as well as client name assigned to their account.
* Ability to create a node through the CLI using `pterodactyl:node` as well as locations via `pterodactyl:location`.
* New theme (AdminLTE) for front-end with tweaks to backend files to work properly with it.
* Add support for PhraseApp's in-context editor
* Notifications when a user is added or removed as a subuser for a server.
* New cache policy for ServerPolicy to avoid making 15+ queries per page load when confirming if a user has permission to perform an action.
* Ability to assign multiple allocations at once when creating a new server.
* New `humanReadable` macro on `File` facade that accepts a file path and returns a human readable size. (`File::humanReadable(path, precision)`)
* Added ability to edit database host details after creation on the system.
* Login attempts and password reset requests are now protected by invisible ReCaptcha. This feature can be disabled with a `.env` variable.
* Server listing for individual users is now searchable on the front-end.
* Servers that a user is associated with as a subuser are now displayed in addition to owned servers when listing users in the Admin CP.
* Ability to launch the console in a new window as an individual unit. https://s3.kelp.in/IrTyE.png
* Server listing and view in Admin CP now shows the SFTP username/Docker container name.
* Administrative server view includes link in navigation to go to server console/frontend management.
* Added new scripts for service options that allows installation of software in a privileged Docker container on the node prior to marking a server as installed.
* Added ability to reinstall a server using the currently assigned service and option.
* Added ability to change a server's service and service option, as well as change pack assignments and other management services in that regard.
* Added support for using a proxy such as Cloudflare with a node connection. Previously there was no way to tell the panel to connect over SSL without marking the Daemon as also using SSL.

### Removed
* Removed all old theme JS and CSS folders to cleanup and avoid confusion in the future.
* Old API calls to `Server::create` will fail due to changed data structure.
* Many old routes were modified to reflect new standards in panel, and many of the controller functions being called were also modified. This shouldn't really impact anyone unless you have been digging into the code and modifying things.
* `Server::getUserDaemonSecret(Server $server)` was removed and replaced with `User::daemonSecret(Server $server)` in order to clean up models.
* `Server::getByUUID()` was replaced with `Server::byUuid()` as well as various other functions through-out the Server model.
* `Server::getHeaders()` was removed and replaced with `Server::getClient()` which returns a Guzzle Client with the correct headers already assigned.

## v0.6.0-rc.1
### Fixed
* `[beta.2.1]` — Fixed a bug preventing the deletion of a server.
* It is now possible to modify a server's disk limits after the server is created.
* `[beta.2.1]` — Fixes a bug causing login issues and password reset failures when reCAPTCHA is enabled.
* Fixes remote timing attack vulnerability due to hmac comparison in API middleware.
* `[beta.2.1]` — Fixes bug requiring docker image field to be filled out when adding a service option.
* `[beta.2.1]` — Fixes inability to mark a user as a non-admin once they were assigned the role.

### Added
* Added new scripts for service options that allows installation of software in a privileged Docker container on the node prior to marking a server as installed.
* Added ability to reinstall a server using the currently assigned service and option.
* Added ability to change a server's service and service option, as well as change pack assignments and other management services in that regard.
* Added support for using a proxy such as Cloudflare with a node connection. Previously there was no way to tell the panel to connect over SSL without marking the Daemon as also using SSL.

### Changed
* Environment setting commands now attempt to auto-quote strings with spaces in them, as well as comment lines that are edited to avoid manual changes being overwritten.
* Version in footer of panel now displays correctly if panel is installed using Git rather than a download from source.
* Mobile views are now more... viewable. Fixes `col-xs-6` usage throughout the Admin CP where it was intended to be `col-md-6`.
* Node Configuration tokens and Download tokens are stored using the cache helpers rather than a database to speed up functions and make use of auto-expiration/deletion functions.
* Old daemon routes using `/remote` have been changed to use `/daemon`, panel changes now reflect this.
* Only display servers that a user is owner of or subuser of in the Admin CP rather than all servers if the user is marked as an admin.

## v0.6.0-beta.2.1
### Fixed
* `[beta.2]` — Suspended servers now show as suspended.
* `[beta.2]` — Corrected the information when a task has not run yet.
* `[beta.2]` — Fixes filemanager 404 when editing a file within a directory.
* `[beta.2]` — Fixes exception in tasks when deleting a server.
* `[beta.2]` — Fixes bug with Terarria and Voice servers reporting a `TypeError: Service is not a constructor` in the daemon due to a missing service configuration.
* `[beta.2]` — Fixes password reset form throwing a MethodNotAllowed error when accessed.
* `[beta.2]` — Fixes invalid password bug when attempting to change account email address.
* `[beta.2]` — New attempt at fixing the issues when rendering files in the browser file editor on certain browsers.
* `[beta.2]` — Fixes broken auto-deploy time checking causing no tokens to work.
* `[beta.2]` — Fixes display of subusers after creation.
* `[beta.2]` — Fixes bug throwing model not found exception when editing an existing subuser.

### Changed
* Deleting a server safely now continues even if the daemon reports a `HTTP/404` missing server error (requires `Daemon@0.4.0-beta.2.1`)
* Changed behavior when modifying server allocation information. You can now remove the default allocation assuming you are passing a new allocation at the same time. Reduces the number of steps to change the default allocation for a server.

### Added
* Server listing and view in Admin CP now shows the SFTP username/Docker container name.
* Administrative server view includes link in navigation to go to server console/frontend management.

## v0.6.0-beta.2
### Fixed
* `[beta.1]` — Fixes task management system not running correctly.
* `[beta.1]` — Fixes API endpoint for command sending missing the required class definition.
* `[beta.1]` — Fixes panel looking for an old compiled classfile that is no longer used. This was causing errors relating to `missing class DingoAPI` when trying to upgrade the panel.
* `[beta.1]` — Should fix render issues when trying to edit some files via the panel file editor.

### Added
* Ability to launch the console in a new window as an individual unit. https://s3.kelp.in/IrTyE.png

## v0.6.0-beta.1
### Fixed
* `[pre.7]` — Fixes bug with subuser checkbox display.
* `[pre.7]` — Fixes bug with injected JS that was causing `<!DOCTYPE html>` to be ignored in templates.
* `[pre.7]` — Fixes exception thrown when trying to delete a node due to a misnamed model.
* `[pre.7]` — Fixes username vanishing on failed login attempts.
* `[pre.7]` — Terminal is now fixed to actually output all lines, rather than leaving one hanging in neverland until the browser is resized.

### Added
* Login attempts and password reset requests are now protected by invisible ReCaptcha. This feature can be disabled with a `.env` variable.
* Server listing for individual users is now searchable on the front-end.
* Servers that a user is associated with as a subuser are now displayed in addition to owned servers when listing users in the Admin CP.

### Changed
* Subuser permissions are now stored in `Permission::listPermissions()` to make views way cleaner and make adding to views significantly cleaner.
* `[pre.7]` — Sidebar for file manager now is a single link rather than a dropdown.
* Attempting to reset a password for an account that does not exist no longer returns an error, rather it displays a success message. Failed resets trigger a `Pterodactyl\Events\Auth\FailedPasswordReset` event that can be caught if needed to perform other actions.
* Servers are no longer queued for deletion due to the general hassle and extra logic required.
* Updated all panel components to run on Laravel v5.4 rather than 5.3 which is EOL.
* Routes are now handled in the `routes/` folder, and use a significantly cleaner syntax. Controller names and methods have been updated as well to be clearer as well as avoid conflicts with PHP reserved keywords.
* API has been completely overhauled to use new permissions system. **Any old API keys will immediately become invalid and fail to operate properly anymore. You will need to generate new keys.**
* Cleaned up dynamic database connection setting to use a single function call from the host model.
* `[pre.7]` — Corrected a config option for spigot servers to set a boolean value as boolean, and not as a string.

## v0.6.0-pre.7
### Fixed
* `[pre.6]` — Addresses misconfigured console queue that was still sending data way to quickly thus causing the console to explode on some devices when large amounts of data were sent.
* `[pre.6]` — Fixes bug in allocation parsing for a node that prevented adding new allocations.
* `[pre.6]` — Fixes typo in migrations that wouldn't save custom regex for non-required variables.
* `[pre.6]` — Fixes auto-deploy checkbox on server creation causing validation error.

## v0.6.0-pre.6
### Fixed
* `[pre.5]` — Console based server rebuild tool now actually rebuilds the servers with the correct information.
* `[pre.5]` — Fixes typo and wrong docker container for certain applications.

### Changed
* Removed all old theme JS and CSS folders to cleanup and avoid confusion in the future.

### Added
* `[pre.5]` — Added foreign key to `pack_id` to ensure nothing eds up breaking there.

## v0.6.0-pre.5
### Changed
* New theme applied to Admin CP. Many graphical changes were made, some data was moved around and some display data changed. Too much was changed to feasibly log it all in here. Major breaking changes or notable new features will be logged.
* New server creation page now makes significantly less AJAX calls and is much quicker to respond.
* Server and Node view pages wee modified to split tabs into individual pages to make re-themeing and modifications significantly easier, and reduce MySQL query loads on page.
* `[pre.4]` — Service and Pack management overhauled to be faster, cleaner, and more extensible in the future.
* Most of the backend `UnhandledException` display errors now include a clearer error that directs admins to the program's logs.
* Table seeders for services now can be run during upgrades and will attempt to locate and update, or create new if not found in the database.
* Many structural changes to the database and `Pterodactyl\Models` classes that would flood this changelog if they were all included. All required migrations included to handle database changes.
* `[pre.4]` — Service pack files are now stored in the database rather than on the host system to make updates easier.
* Clarified details for database hosts to prevent users entering invalid account details, as well as renamed tables and columns relating to it to keep things clearer.
* Updated all code to be Laravel compliant when using `env()` and moved to using `config()` throughout non `config/*.php` files.

### Fixed
* Fixes potential bug with invalid CIDR notation (ex: `192.168.1.1/z`) when adding allocations that could cause over 4 million records to be created at once.
* `[pre.4]` — Fixes bug preventing server updates from occurring by the system due to undefined `Auth::user()` in the event listener.
* `[pre.4]` — Fixes `Server::byUuid()` caching to actually clear the cache for *all* users, rather than the logged in user by using cache tags.
* `[pre.4]` — Fixes server listing on frontend not displaying a page selector when more than 10 servers exist.
* `[pre.4]` — Fixes non-admin users being unable to create personal API keys.
* Fixes bug where daemon was unable to register that certain games had fully booted and were ready to play on.
* Fixes bug causing MySQL user accounts to be corrupted when resetting a password via the panel.
* `[pre.4]` — Multiple clients refreshing the console no longer clears the console for all parties involved... sorry about that.
* `[pre.4]` — Fixes bug in environment setting script that would not remember defaults and try to re-assign values.

### Added
* Ability to assign multiple allocations at once when creating a new server.
* New `humanReadable` macro on `File` facade that accepts a file path and returns a human readable size. (`File::humanReadable(path, precision)`)
* Added ability to edit database host details after creation on the system.

### Deprecated
* Old API calls to `Server::create` will fail due to changed data structure.
* Many old routes were modified to reflect new standards in panel, and many of the controller functions being called were also modified. This shouldn't really impact anyone unless you have been digging into the code and modifying things.

## v0.6.0-pre.4
### Fixed
* `[pre.3]` — Fixes bug in cache handler that doesn't cache against the user making the request. Would have allowed for users to access servers not belonging to themselves in production.
* `[pre.3]` — Fixes misnamed MySQL column that was causing the inability to delete certain port ranges from the database.
* `[pre.3]` — Fixes bug preventing rebuilding server containers through the Admin CP.

### Added
* New cache policy for ServerPolicy to avoid making 15+ queries per page load when confirming if a user has permission to perform an action.

## v0.6.0-pre.3
### Fixed
* `[pre.2]` — Fixes bug where servers could not be manually deployed to nodes due to a broken SQL call.
* `[pre.2]` — Fixes inability to edit a server due to owner_id issues.
* `[pre.2]` — Fixes bug when trying to add new subusers.
* Emails sending with 'Pterodactyl Panel' as the from name. Now configurable by using `php artisan pterodactyl:mail` to update.
* `[pre.2]` — Fixes inability to delete accounts due to SQL changes.
* `[pre.2]` — Fixes bug with checking power-permissions that showed the wrong buttons. Also adds check back to sidebar to only show options a user can use.
* `[pre.2]` — Fixes allocation listing on node allocations tab as well as bug preventing deletion of port.
* `[pre.2]` — Fixes bug in services that prevented saving updated settings or creating new services.

### Changed
* `[pre.2]` — File Manager now displays relevant information on all screen sizes, and includes better button clicking mechanics for dropdown menu.
* Reduced the number of database queries being executed when viewing a specific server. This is done by caching the query for up to 60 minutes in memcached.
* User creation emails include more information and are sent by the event listener rather than the repository.
* Account password reset emails now auto-fill the email when clicking the link.

### Added
* Notifications when a user is added or removed as a subuser for a server.

## v0.6.0-pre.2
### Fixed
* `[pre.1]` — Fixes bug with database seeders that prevented correctly installing the panel.

### Changed
* `[pre.1]` — Moved around navigation bar on fronted to make it more obvious where logout and admin buttons were, as well as use the right icon for server listing.

## v0.6.0-pre.1
### Added
* Remote routes for daemon to contact in order to allow Daemon to retrieve updated service configuration files on boot. Centralizes services to the panel rather than to each daemon.
* Basic service pack implementation to allow assignment of modpacks or software to a server to pre-install applications and allow users to update.
* Users can now have a username as well as client name assigned to their account.
* Ability to create a node through the CLI using `pterodactyl:node` as well as locations via `pterodactyl:location`.
* New theme (AdminLTE) for front-end with tweaks to backend files to work properly with it.
* Add support for PhraseApp's in-context editor

### Fixed
* Bug causing error logs to be spammed if someone timed out on an ajax based page.
* Fixes edge case where specific server names could cause daemon errors due to an invalid SFTP username being created by the panel.
* Fixes sessions being removed on browser close, and set sessions to idle for up to 3 hours before being marked as expired.

### Changed
* Admin API and base routes for user management now define the fields that should be passed to repositories rather than passing all fields.
* User model now defines mass assignment fields using `$fillable` rather than `$guarded`.
* 2FA checkpoint on login is now its own page, and not an AJAX based call. Improves security on that front.
* Updated Server model code to be more efficient, as well as make life easier for backend changes and work.

### Deprecated
* `Server::getUserDaemonSecret(Server $server)` was removed and replaced with `User::daemonSecret(Server $server)` in order to clean up models.
* `Server::getByUUID()` was replaced with `Server::byUuid()` as well as various other functions through-out the Server model.
* `Server::getHeaders()` was removed and replaced with `Server::getClient()` which returns a Guzzle Client with the correct headers already assigned.

## v0.5.6 (Bodacious Boreopterus)
### Added
* Added the following languages: Estonian `et`, Dutch `nl`, Norwegian `nb` (partial), Romanian `ro`, and Russian `ru`. Interested in helping us translate the panel into more languages, or improving existing translations? Contact us on Discord and let us know.
* Added missing `strings.password` to language file for English.
* Allow listing of users from the API by passing either the user ID or their email.

### Fixed
* Fixes bug where assigning a variable a default value (or valid value) of `0` would cause the panel to reject the value thinking it did not exist.
* Addresses potential for crash by limiting total ports that can be assigned per-range to 2000.
* Fixes server names requiring at minimum 4 characters. Name can now be 1 to 200 characters long. :pencil2:
* Fixes bug that would allow adding the owner of a server as a subuser for that same server.
* Fixes bug that would allow creating multiple subusers with the same email address.
* Fixes bug where Sponge servers were improperly tagged as a spigot server in the daemon causing issues when booting or modifying configuration files.
* Use transpiled ES6 -> ES5 filemanager code in browsers.
* Fixes service option name displaying the name of a newly added variable after the variable is added and until the page is refreshed. (see #208)

### Changed
* Filemanager and EULA checking javascript is now written in pure ES6 code rather than as a blade-syntax template. This allows the use of babel to transpile into ES5 as a minified version.

## v0.5.5 (Bodacious Boreopterus)
### Added
* New API route to return allocations given a server ID. This adds support for a community-driven WHMCS module :rocket: available [here](https://github.com/hammerdawn/Pterodactyl-WHMCS).

### Fixed
* Fixes subuser display when trying to edit an existing subuser.

## v0.5.4 (Bodacious Boreopterus)
### Added
* Changing node configuration values now automatically makes a call to the daemon and updates the configuration there. Changing daemon tokens now does not require any intervention, and takes effect immediately. SSL & Port configurations will still require a daemon reboot.
* New button in file manager that triggers the right click menu to enable support on mobile devices and those who cannot right click (blessed be them).
* Support for filtering users when listing all users on the system.
* Container ID and User ID on the daemon are now shown when viewing a server in the panel.

### Changed
* File uploads now account for a maximum file size that is assigned for the daemon, and gives cleaner errors when that limit is reached.
* File upload limit can now be controlled from the panel.
* Updates regex and default values for some Minecraft services to reflect current technology.

### Fixed
* Fixes potential for generated password to not meet own validation requirements.
* Fixes some regex checking issues with newer versions of Minecraft.

## v0.5.3 (Bodacious Boreopterus)
### Fixed
* Fixed an error that occurred when viewing a node listing when no nodes were created yet due to a mis-declared variable. Also fixes a bug that would have all nodes trying to connect to the daemon using the same secret token on the node listing, causing only the last node to display properly.
* Fixes a bug that displayed the panel version rather than the daemon version when viewing a node.
* Fixes a multiplicator being applied to an overallocation field rather than a storage space field when adding a node.

### Changed
* Added a few new configuration variables for nodes to the default config, as well as a variable that will be used in future versions of the daemon.

## v0.5.2 (Bodacious Boreopterus)
### Fixed
* Time axis on server graphs is corrected to show the minutes rather than the current month.
* Node deletion now works correctly and deletes allocations as well.
* Fixes a bug that would leave orphaned databases on the system if there was an error during creation.
* Fixes an issue that could occur if a UUID contained `#e#` formatting within it when it comes to creating databases.
* Fixed node status display to account for updated daemon security changes.
* Fixes default language being selected as German (defaults to English now).
* Fixes bug preventing the deletion of database servers.

### Changed
* Using `node:<name>` when filtering servers now properly filters the servers by node name, rather than looking for the node ID.
* Using `owner:<email>` when filtering servers now properly filters by the owner's email rather than ID.
* Added some quick help buttons to the admin index page for getting support or checking the documentation.
* Panel now displays `Pterodactyl Panel` as the company name if one is not set.

### Added
* Added basic information about the daemon when viewing a node, including the host OS and version, CPU count, and the daemon version.
* Added version checking for the daemon and panel that alerts admins when daemons or the panel is out of date.
* Added multiplicator support to certain memory and disk fields that allow users to enter `10g` and have it converted to MB automatically.

## v0.5.1 (Bodacious Boreopterus)
### Fixed
* Fixes a bug that allowed a user to bypass 2FA authentication if using the correct username and password for an account.

## v0.5.0 (Bodacious Boreopterus)
After nearly a month in the works, version `v0.5.0` is finally here! 🎉

### Added
* Foreign keys are now enabled on all tables that the panel makes use of to prevent accidental data deletion when associated with other tables.
* Javascript changes to prevent crashing browsers when large quantities of data are sent over the websocket to the console. Includes a small popover message on the console to alert users that it is being throttled.
* Support for 'ARK: Survival Evolved' servers through the panel.
* Support for filtering servers within Admin CP to narrow down results by name, email, allocation, or defined fields.
* Setup scripts (user, mail, env) now support argument flags for use in containers and other non-terminal environments.
* New API endpoints for individual users to control their servers with at `/api/me/*`.
* Typeahead support for owner email when adding a new server.
* Scheduled command to clear out task log every month (configurable timespan).
* Support for allocating a FQDN as an allocation (panel will convert to IP and assign the FQDN as the alias automatically).
* Refresh files button in file manager to reload file listing without full page refresh.
* Added support for file copying through the file manager. [#127](https://github.com/Pterodactyl/Panel/issues/127)
* Creating new files and folders directly from the right-click dropdown menu in the file manager.
* Support for setting custom `user_id` when using the API to create users.
* Support for creating a new server through the API by passing a user ID rather than an email.
* Passing `?daemon=true` flag to [`/api/servers/:id`](https://pterodactyl.readme.io/v0.5.0/reference#single-server) will return the daemon stats as well as the `daemon_token` if using HTTPS.
* Small check for current node status that shows up to the left of the name when viewing a listing of all nodes.
* Support for creating server without having to assign a node and allocation manually. Simply select the checkbox or pass `auto_deploy=true` to the API to auto-select a node and allocation given a location.
* Support for setting IP Aliases through the panel on the node overview page. Also cleaned up allocation removal.
* Support for renaming files through the panel's file manager.

### Changed
* Servers are now queued for deletion to allow for cancellation of deletion, as well as run in the background to speed up page loading.
* Switched to new graphing library to make graphs less... broken.
* Rebuild triggers are only sent to the node if there is actually something changed that requires a rebuild.
* Dependencies are now hard-coded into the `composer.json` file to prevent users installing slightly different versions with different features or bugs.
* Server related tasks now use the lowest priority queue to prevent clogging the pipes when there are more important tasks to be run by the panel.
* Dates displayed in the file manager are now more user friendly.
* Creating a user, server, or node now returns `HTTP/1.1 200` and a JSON element with the user/server/node's ID.
* Environment setting script is much more user friendly and does not require an excessive amount of clicking and typing.
* File upload method switched from BinaryJS to Socket.io implementation to fix bugs as well as be a little speedier and allow upload throttling.
* `Server::getbyUUID()` now accepts either the `uuidShort` or full-length `uuid` for server identification.
* API keys are tied to individual users and no longer created through the Admin CP.
* **ALL** API routes previously returning paginated result sets, or result sets nested inside a descriptive block (e.g. `servers:`) have been changed to return a single array of all associated items. Please see the [updated documentation](https://pterodactyl.readme.io/v0.5.0/reference) for how this change might effect your API use.
* API route for [`/api/users/:id`](https://pterodactyl.readme.io/v0.5.0/reference#single-user) now includes an array of all servers the user is set as the owner of.
* Prevent clicking server start button until server is completely off, not just stopping.
* Upon successful creation of a node it will redirect to the allocation tab and display a clearer message to add allocations.
* Trying to add a new node if no location exists redirects user to location management page and alerts them to add a location first.
* `Server\AjaxController@postSetConnection` is now `Server\AjaxController@postSetPrimary` and accepts one post parameter of `allocation` rather than a combined `ip:port` value.
* Port allocations on server view are now cleaner and should make more sense.
* Improved File Manager
  * Rewritten Javascript to load, rename, and handle other file actions.
  * Uses Ace Editor for editing files rather than a non-formatted textarea
  * File actions that were previously icons to the right are now contained in a menu that appears when right-clicking a file or folder.

### Fixed
* Fixes bug where resetting a user password through the login form would not hold passwords to the same requirements as the rest of the panel (mixed case and at least one numeric character).
* Fixes bug where no error would be displayed when adding a new server with an invalid owner email.
* Fixes a bug that could allow an admin to delete the default allocation for a server causing all sorts of issues.
* Databases assigned to a server are now actually deleted when a server is removed.
* Server overview listing the location short-code as the name of the node.
* Server task manager only sending commands every 5 minutes at the quickest.
* Fixes additional port allocation from removing the wrong row when clicking 'x'.
* Updated Socket.io client file to version `1.5.0` to match the latest release. Correlates with setting hard dependencies in the Daemon.
* Team Fortress named 'Insurgency' in panel in database seeder. ([#96](https://github.com/Pterodactyl/Panel/issues/96), PR by [@MeltedLux](https://github.com/MeltedLux))
* Server allocation listing display now showing the connection IP unless an alias was assigned.
* Fixed bug where node allocation would appear to be successful but actual encounter an error. Made it cleared how to enter ports.
* Fixes display where an extra space was added to the end of SFTP passwords when they were copied from the panel. [#116](https://github.com/Pterodactyl/Panel/issues/116), thanks [@OrangeJuiced](https://github.com/OrangeJuiced)
* Fixes a bug that prevented viewing database servers if not assigned to a node.
* Checkboxes previously not displayed checkmarks are now fixed.

### Fixed (bugs from v0.5.0-rc.2)
* Fixes a bug causing password resets to fail for server databases.
* Fixes a bug during installation that would prevent the 'Ark: Survival Evolved' service option from being added to the panel unless it was an update.
* Fixes constant scrolling to bottom of console; console now only scrolls to the bottom on new data.

### Removed
* Removed active session management table displaying the last location of a session.
* Removed online player listing due to inconsistency in query library and an assortment of query related bugs. This will return in future versions when we get it working correctly.

## v0.5.0-rc.2 (Bodacious Boreopterus)

### Fixed
* Fixes a bug that would cause MySQL errors when attempting to install the panel rather than upgrading.

## v0.5.0-rc.1 (Bodacious Boreopterus)

### Added
* Foreign keys are now enabled on all tables that the panel makes use of to prevent accidental data deletion when associated with other tables.
* Javascript changes to prevent crashing browsers when large quantities of data are sent over the websocket to the console. Includes a small popover message on the console to alert users that it is being throttled.
* Support for 'ARK: Survival Evolved' servers through the panel.

### Fixed
* Fixes bug where resetting a user password through the login form would not hold passwords to the same requirements as the rest of the panel (mixed case and at least one numeric character).
* Fixes misnamed environment variable for Bungeecord Servers (`BUNGE_VERSION` -> `BUNGEE_VERSION`).
* Fixes bug where no error would be displayed when adding a new server with an invalid owner email.
* Fixes a bug that could allow an admin to delete the default allocation for a server causing all sorts of issues.
* Databases assigned to a server are now actually deleted when a server is removed.
* Fixes file uploads being improperly throttled.

### Changed
* Servers are now queued for deletion to allow for cancellation of deletion, as well as run in the background to speed up page loading.
* Switched to new graphing library to make graphs less... broken.
* Rebuild triggers are only sent to the node if there is actually something changed that requires a rebuild.
* Dependencies are now hard-coded into the `composer.json` file to prevent users installing slightly different versions with different features or bugs.
* Server related tasks now use the lowest priority queue to prevent clogging the pipes when there are more important tasks to be run by the panel.
* Decompressing files now shows a pop-over box that does not dismiss until it is complete.
* Dates displayed in the file manager are now more user friendly.

### Removed
* Removed online player listing due to inconsistency in query library and an assortment of query related bugs. This will return in future versions when we get it working correctly.

## v0.5.0-pre.3 (Bodacious Boreopterus)

### Added
* Return node configuration from remote API by using `/api/nodes/{id}/config` endpoint. Only accepts SSL connections.
* Support for filtering servers within Admin CP to narrow down results by name, email, allocation, or defined fields.
* Setup scripts (user, mail, env) now support argument flags for use in containers and other non-terminal environments.
* New API endpoints for individual users to control their servers with at `/api/me/*`.
* Typeahead support for owner email when adding a new server.
* Scheduled command to clear out task log every month (configurable timespan).
* Support for allocating a FQDN as an allocation (panel will convert to IP and assign the FQDN as the alias automatically).
* Refresh files button in file manager to reload file listing without full page refresh.

### Changed
* Creating a user, server, or node now returns `HTTP/1.1 200` and a JSON element with the user/server/node's ID.
* Environment setting script is much more user friendly and does not require an excessive amount of clicking and typing.
* File upload method switched from BinaryJS to Socket.io implementation to fix bugs as well as be a little speedier and allow upload throttling.
* `Server::getbyUUID()` now accepts either the `uuidShort` or full-length `uuid` for server identification.
* API keys are tied to individual users and no longer created through the Admin CP.

### Fixed
* Server overview listing the location short-code as the name of the node.
* Server task manager only sending commands every 5 minutes at the quickest.
* Fixes additional port allocation from removing the wrong row when clicking 'x'.

## v0.5.0-pre.2 (Bodacious Boreopterus)

### Added
* Added support for file copying through the file manager. [#127](https://github.com/Pterodactyl/Panel/issues/127)
* Creating new files and folders directly from the right-click dropdown menu in the file manager.
* Support for setting custom `user_id` when using the API to create users.
* Support for creating a new server through the API by passing a user ID rather than an email.
* Passing `?daemon=true` flag to [`/api/servers/:id`](https://pterodactyl.readme.io/v0.5.0/reference#single-server) will return the daemon stats as well as the `daemon_token` if using HTTPS.
* Small check for current node status that shows up to the left of the name when viewing a listing of all nodes.

### Changed
* Support for sub-folders within the `getJavascript()` route for servers.
* **ALL** API routes previously returning paginated result sets, or result sets nested inside a descriptive block (e.g. `servers:`) have been changed to return a single array of all associated items. Please see the [updated documentation](https://pterodactyl.readme.io/v0.5.0/reference) for how this change might effect your API use.
* API route for [`/api/users/:id`](https://pterodactyl.readme.io/v0.5.0/reference#single-user) now includes an array of all servers the user is set as the owner of.

### Fixed
* File manager would do multiple up-down-up-down loading actions if you escaped renaming a file. Fixed the binding issue. [#122](https://github.com/Pterodactyl/Panel/issues/122)
* File manager actions would not trigger properly if text in a row was used to right-click from.
* File manager rename field would not disappear when pressing the escape key in chrome. [#121](https://github.com/Pterodactyl/Panel/issues/121)
* Fixes bug where server image assigned was not being saved to the database.
* Fixes instances where selecting auto-deploy would not hide the node selection dropdown.
* Fixes bug in auto-deployment that would throw a `ModelNotFoundException` if the location passed was not valid. Not normally an issue in the panel, but caused display issues for the API.
* Updated Socket.io client file to version `1.5.0` to match the latest release. Correlates with setting hard dependencies in the Daemon.

## v0.5.0-pre.1 (Bodacious Boreopterus)

### Added
* Support for creating server without having to assign a node and allocation manually. Simply select the checkbox or pass `auto_deploy=true` to the API to auto-select a node and allocation given a location.
* Support for setting IP Aliases through the panel on the node overview page. Also cleaned up allocation removal.
* Support for renaming files through the panel's file manager.

### Changed
* Prevent clicking server start button until server is completely off, not just stopping.
* Upon successful creation of a node it will redirect to the allocation tab and display a clearer message to add allocations.
* Trying to add a new node if no location exists redirects user to location management page and alerts them to add a location first.
* `Server\AjaxController@postSetConnection` is now `Server\AjaxController@postSetPrimary` and accepts one post parameter of `allocation` rather than a combined `ip:port` value.
* Port allocations on server view are now cleaner and should make more sense.
* Improved File Manager
  * Rewritten Javascript to load, rename, and handle other file actions.
  * Uses Ace Editor for editing files rather than a non-formatted textarea
  * File actions that were previously icons to the right are now contained in a menu that appears when right-clicking a file or folder.

### Fixed
* Team Fortress named 'Insurgency' in panel in database seeder. ([#96](https://github.com/Pterodactyl/Panel/issues/96), PR by [@MeltedLux](https://github.com/MeltedLux))
* Server allocation listing display now showing the connection IP unless an alias was assigned.
* Fixed bug where node allocation would appear to be successful but actual encounter an error. Made it cleared how to enter ports.
* Fixes display where an extra space was added to the end of SFTP passwords when they were copied from the panel. [#116](https://github.com/Pterodactyl/Panel/issues/116), thanks [@OrangeJuiced](https://github.com/OrangeJuiced)

### Removed
* Removed active session management table displaying the last location of a session.

## v0.4.1 (Articulate Aerotitan)

### Changed
* Overallocate fields are now auto-filled with a value of `0`

### Fixed
* Wrong error highlighting of overallocate fields on Node creation ([#90](https://github.com/Pterodactyl/Panel/issues/90), thanks [@schrej](https://github.com/schrej))
* Server link in navbar directed to 404 link (PR by [@Randomfish132](https://github.com/Randomfish132))
* Composer fails to finish ([#92](https://github.com/Pterodactyl/Panel/issues/92), PR by [@schrej](https://github.com/schrej), thanks [@parkervcp](https://github.com/parkervcp))

## v0.4.0 (Arty Aerodactylus)

### Added
* Task scheduler supporting customized CRON syntax or dropdown selected options. (currently only support command and power options)
* Adds support for changing per-server database passwords from the panel.
* Allows for use of IP rather than a FQDN if the node is not using SSL
* Adds support for IP Aliases on display pages for users. This makes it possible to use GRE tunnels and still show the user what IP they should be connecting to.
* Adds support for suspending servers
* Adds support for viewing SFTP password within the panel ([#74](https://github.com/Pterodactyl/Panel/issues/74), thanks [@ET-Bent](https://github.com/ET-Bent))
* Improved API with support for server suspension and build modification.
* Improved service management and setup on first install.
* New terminal that supports ANSI color codes as well as cleaner output. You can also simply type `start` or `boot` to start your server rather than having to use the start button.

### Fixed
* Fixes password auto-generation on 'Manage Server' page. ([#67](https://github.com/Pterodactyl/Panel/issues/67), thanks [@ET-Bent](https://github.com/ET-Bent))
* Fixes some overly verbose user output when an error occurs
* Prevent calling daemon until database call has been confirmed when changing default connection.
* Fixes a few display issues relating to subusers and database management.
* Fixes the server name in the header not linking to the server correctly. ([#79](https://github.com/Pterodactyl/Panel/issues/79), thanks [@xX1bumblebee1Xx](https://github.com/xX1bumblebee1Xx))
* Fixes bug where non-admins could not see command box on servers. ([#83](https://github.com/Pterodactyl/Panel/issues/83), thanks [@xX1bumblebee1Xx](https://github.com/xX1bumblebee1Xx))
* Fixes bug where files could not be uploaded through the "click and select" system, only through "drag and drop." ([#82](https://github.com/Pterodactyl/Panel/issues/83), thanks [@xX1bumblebee1Xx](https://github.com/xX1bumblebee1Xx))
* Fixes a bug where new files could not be created through the panel for a server. ([#85](https://github.com/Pterodactyl/Panel/issues/85), thanks [@xX1bumblebee1Xx](https://github.com/xX1bumblebee1Xx))
* Fixes the exception handler to properly display and log exceptions that might occur rather than leaving a vague error. ([#81](https://github.com/Pterodactyl/Panel/issues/83))

### Changed
* Update Laravel to version `5.3` and update dependencies.

### Deprecated
* Requires Pterodactyl Daemon `v0.2.*`

### Security
* Fixes listing of server variables for server. Previously a bug made it possible to view settings for all servers, even if the user didn't own that server. ([#69](https://github.com/Pterodactyl/Panel/issues/69))


================================================
FILE: CONTRIBUTING.md
================================================
# 贡献

**关于新功能的拉取请求**  
翼龙(Pterodactyl)项目**不接受未经项目维护者在 GitHub discussions 中事先批准的新功能**拉取请求。由于这类复杂的拉取请求往往需要投入大量时间和精力进行审查,为保障项目质量,我们将新功能的工作范围限定在核心项目团队内部完成。

对于修复现有缺陷或改进**已在问题跟踪器中创建对应工单**的功能的拉取请求,我们仍会接受并审核。这类请求的范围通常更加明确,且仅针对现有逻辑进行优化。

## 关于人工智能辅助

若您在为翼龙项目进行开发时使用任何形式的人工智能辅助工具,**必须在相关审查的拉取请求中明确声明**,并说明具体用途。所有与社区的互动内容必须由人工撰写。**禁止使用人工智能撰写任何拉取请求的标题、描述或评论**,也不得使用人工智能参与 GitHub Discussions 社区的交流。

## 负责任的安全披露

本项目结构复杂,涉及众多动态组件。我们致力于保障系统安全,并欢迎您自行审查项目代码。但请您体谅其他软件使用者,切勿公开披露安全问题。请查阅 [`SECURITY.md`](/SECURITY.md) 了解如何向团队报告安全问题。

## 联系我们

您可以通过以下渠道找到我们:  
- 主要在 GitHub 平台活跃,如遇程序错误或其他问题,请在此提交工单
- 功能请求、常规咨询或软件帮助请使用 [GitHub Discussions](https://github.com/orgs/pterodactyl/discussions/categories/feature-requests)
- 也可通过 [Discord](https://discord.gg/pterodactyl) 与我们交流

**此内容为翼龙官方,与翼龙中国无关,所以在询问他们时用英语交流**


================================================
FILE: Dockerfile
================================================
# Stage 0:
# Build the assets that are needed for the frontend. This build stage is then discarded
# since we won't need NodeJS anymore in the future. This Docker image ships a final production
# level distribution of Pterodactyl.
FROM --platform=$TARGETOS/$TARGETARCH node:22-alpine
WORKDIR /app
COPY . ./
RUN yarn install --frozen-lockfile \
    && yarn run build:production

# Stage 1:
# Build the actual container with all of the needed PHP dependencies that will run the application.
FROM --platform=$TARGETOS/$TARGETARCH php:8.3-fpm-alpine
WORKDIR /app
COPY . ./
COPY --from=0 /app/public/assets ./public/assets
RUN apk add --no-cache --update ca-certificates dcron curl git supervisor tar unzip nginx libpng-dev libxml2-dev libzip-dev certbot certbot-nginx mysql-client \
    && docker-php-ext-configure zip \
    && docker-php-ext-install bcmath gd pdo_mysql zip \
    && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
    && cp .env.example .env \
    && mkdir -p bootstrap/cache/ storage/logs storage/framework/sessions storage/framework/views storage/framework/cache \
    && chmod 777 -R bootstrap storage \
    && composer install --no-dev --optimize-autoloader \
    && rm -rf .env bootstrap/cache/*.php \
    && mkdir -p /app/storage/logs/ \
    && chown -R nginx:nginx .

RUN rm /usr/local/etc/php-fpm.conf \
    && echo "* * * * * /usr/local/bin/php /app/artisan schedule:run >> /dev/null 2>&1" >> /var/spool/cron/crontabs/root \
    && echo "0 23 * * * certbot renew --nginx --quiet" >> /var/spool/cron/crontabs/root \
    && sed -i s/ssl_session_cache/#ssl_session_cache/g /etc/nginx/nginx.conf \
    && mkdir -p /var/run/php /var/run/nginx

COPY .github/docker/default.conf /etc/nginx/http.d/default.conf
COPY .github/docker/www.conf /usr/local/etc/php-fpm.conf
COPY .github/docker/supervisord.conf /etc/supervisord.conf

EXPOSE 80 443
ENTRYPOINT [ "/bin/ash", ".github/docker/entrypoint.sh" ]
CMD [ "supervisord", "-n", "-c", "/etc/supervisord.conf" ]


================================================
FILE: LICENSE.md
================================================
# The MIT License (MIT)

```
Pterodactyl®
Copyright © Dane Everitt <dane@daneeveritt.com> and contributors

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```


================================================
FILE: README.md
================================================
[![Logo Image](https://api.pterodactyl.top/logos/new/pterodactyl_china_logo.png)](https://pterodactyl.top)

![GitHub Stars](https://img.shields.io/github/stars/pterodactyl-china/panel?style=for-the-badge&logo=appveyor)
![GitHub Releases](https://img.shields.io/github/v/release/pterodactyl-china/panel?style=for-the-badge&logo=appveyor)
![GitHub Releases](https://img.shields.io/github/downloads/pterodactyl-china/panel/total?style=for-the-badge)
![GitHub Releases Latest](https://img.shields.io/github/downloads/pterodactyl-china/panel/latest/total?style=for-the-badge)
![Alt](https://repobeats.axiom.co/api/embed/9e3f7d2c6db2f248adf85b55e7ebd4a3a4911bdf.svg "Repobeats analytics image")

# 翼龙面板

Pterodactyl® 是一个免费的开源游戏服务器管理面板,使用 PHP、React 和 Go 构建。Pterodactyl 在设计时考虑了安全性,在隔离的 Docker 容器中运行所有游戏服务器,同时向最终用户展示了美观直观的 UI。

不要再安于现状了。让该面板成为您游戏服务器是上上之选。

**此仓库将实时同步上游进行汉化 , 发布的 Releases 均通过 Github Actions 的构建测试,并在发布前会经过本地环境测试。**

![Image](https://cdn.pterodactyl.io/site-assets/pterodactyl_v1_demo.gif)

## 翼龙中国文档

* [Panel 文档](https://pterodactyl.top/panel/1.0/getting_started.html)
* [Wings 文档](https://pterodactyl.top/wings/1.0/installing.html)
* [社区指南文档](https://pterodactyl.top/community/about.html)
* 或者,[通过 腾讯频道](https://pd.qq.com/s/2schz3it0) 或 [通过 翼龙中国社区](https://bbs.pterodactyl.top) 来获得更多帮助

## 赞助商

衷心感谢以下赞助商为翼龙中国的发展提供资金支持。
[有兴趣成为赞助商吗?](https://afdian.com/a/vlssu)

| 公司/个人 | 关于 |
| ------- | ----- |
| [**VLssu公益服**](https://vlssu.cn) | 一个热衷于美好社区的我的世界服务器。 |
| [**速特互联**](https://www.suteidc.com) | 我的世界服务器出租,支持一键安装MOD插件 |
| [**裕米云计算**](https://comcorn.cn) | COMCORN公共服务平台,提供优质项目云资源支持 |

### 支持的游戏

我们通过使用 Docker 容器隔离每个实例来支持各种游戏,为您提供强大的功能
在全球范围内托管您的游戏,而不必让每台物理机器都因安装额外的依赖而变得臃肿。

我们支持的一些核心游戏包括:

* Minecraft(我的世界) — 包括 Paper, Sponge, Bungeecord, Waterfall, 等....
* Rust (腐蚀)
* Terraria (泰拉瑞亚)
* Teamspeak
* Mumble
* Team Fortress 2 (军团要塞2)
* Counter Strike: Global Offensive (反恐精英:全球攻势)
* Garry's Mod (盖瑞的模组)
* ARK: Survival Evolved (方舟:生存进化)

除了我们支持的标准游戏预设外,我们的社区还在不断突破这个软件的极限
社区提供的游戏还有很多。其中一些游戏包括:

* Factorio (异星工厂)
* San Andreas: MP
* Pocketmine MP
* Squad (战术小队)
* FiveM
* Xonotic
* Starmade
* Discord ATLBot, and most other Node.js/Python discord bots
* [更多...](https://pterodactyleggs.com)

## 开源协议

Pterodactyl® Copyright © 2015 - 2022 Dane Everitt and contributors.     
Code released under the [MIT License](./LICENSE.md).

此本地化项目同样遵循 翼龙开源协议 与 MIT 开源协议   
引用资源文件/汉化文本请注意作者署名。


================================================
FILE: SECURITY.md
================================================
此内容为翼龙官方,与翼龙中国无关
# 安全策略

## 支持的版本

翼龙(Pterodactyl)仅为面板(Panel)和翼(Wings)软件的最新 `major.minor` 主次版本提供安全支持。
如果在旧版本中发现安全漏洞,但无法在受支持的版本中复现,该漏洞将不被受理。
此外,在未发布的代码中发现的安全问题将会被处理,但通常不会为此单独发布安全公告。

例如,如果面板(Panel)的最新版本是 `1.2.5`,那么我们仅接受发生在版本 `>= 1.2.x`(即大于等于1.2.x版本)的面板软件上的安全漏洞报告。面板与翼(Wings)拥有各自的版本号,但它们的版本通常互相匹配。

## 漏洞报告

请使用我们的 GitHub 安全报告机制,以便在您发现任何安全问题时快速通知团队,
或发送电子邮件至 `security@pterodactyl.io` (请使用英文)并附上您报告的详细信息。

我们会尽最大努力尽快响应,但由于需要内部同步并评估报告的严重性及影响范围,可能需要一至两天时间。
**请注意**:报告敏感的安全问题时,切勿使用公开渠道或 GitHub Issues。

根据我们的处理流程,我们将为受影响的版本创建安全公告,并通常在发布修复版本后的**两至四周内**进行公开披露。


================================================
FILE: app/Console/Commands/Environment/AppSettingsCommand.php
================================================
<?php

namespace Pterodactyl\Console\Commands\Environment;

use Illuminate\Console\Command;
use Illuminate\Contracts\Console\Kernel;
use Pterodactyl\Traits\Commands\EnvironmentWriterTrait;

class AppSettingsCommand extends Command
{
    use EnvironmentWriterTrait;

    public const CACHE_DRIVERS = [
        'redis' => 'Redis (推荐)',
        'memcached' => 'Memcached',
        'file' => 'Filesystem',
    ];

    public const SESSION_DRIVERS = [
        'redis' => 'Redis (推荐)',
        'memcached' => 'Memcached',
        'database' => 'MySQL 数据库',
        'file' => 'Filesystem',
        'cookie' => 'Cookie',
    ];

    public const QUEUE_DRIVERS = [
        'redis' => 'Redis (推荐)',
        'database' => 'MySQL 数据库',
        'sync' => 'Sync',
    ];

    protected $description = '进行面板的基本环境配置.';

    protected $signature = 'p:environment:setup
                            {--new-salt : 是否为 HashIDs 生成新 Salt,若生成新 Salt 当前用户所有密码验证都会失效,需要重设密码.}
                            {--author= : 在此实例上创建的服务应链接到的电子邮箱.}
                            {--url= : 运行此面板的 URL 例如 https://pterodactyl.cn}
                            {--timezone= : 用于面板时间的时区 北京时区为 Asia/Shanghai.}
                            {--cache= : 要使用的缓存驱动程序后端 不懂就用默认值.}
                            {--session= : 要使用的会话驱动程序后端 不懂就用默认值.}
                            {--queue= : 要使用的队列驱动程序后端 不懂就用默认值.}
                            {--redis-host= : 用于连接的 Redis 主机.}
                            {--redis-pass= : 用于连接 Redis 的密码.}
                            {--redis-port= : 连接到 Redis 的端口.}
                            {--settings-ui= : 启用或禁用设置 UI.}
                            {--telemetry= : 启用或禁用匿名遥测.}';

    protected array $variables = [];

    /**
     * AppSettingsCommand constructor.
     */
    public function __construct(private Kernel $console)
    {
        parent::__construct();
    }

    /**
     * Handle command execution.
     *
     * @throws \Pterodactyl\Exceptions\PterodactylException
     */
    public function handle(): int
    {
        if (empty(config('hashids.salt')) || $this->option('new-salt')) {
            $this->variables['HASHIDS_SALT'] = str_random(20);
        }

        $this->output->comment('提供预设导出中作者使用的电子邮箱地址.');
        $this->variables['APP_SERVICE_AUTHOR'] = $this->option('author') ?? $this->ask(
            '预设作者邮箱',
            config('pterodactyl.service.author', 'unknown@unknown.com')
        );

        if (!filter_var($this->variables['APP_SERVICE_AUTHOR'], FILTER_VALIDATE_EMAIL)) {
            $this->output->error('提供的邮箱地址无效.');

            return 1;
        }

        $this->output->comment('面板 URL 取决于是否使用 SSL 安全连接必须以 https:// 或 http:// 开头. 如果此处填写错误,您的电子邮箱和其他内容将被链接到错误的地址.');
        $this->variables['APP_URL'] = $this->option('url') ?? $this->ask(
            '应用 URL',
            config('app.url', 'https://example.com')
        );

        $this->output->comment('时区应与 PHP 支持的时区之一匹配 北京时区是 Asia/Shanghai。如果不确定,请参考 https://php.net/manual/zh/timezones.php.');
        $this->variables['APP_TIMEZONE'] = $this->option('timezone') ?? $this->anticipate(
            '应用时区',
            \DateTimeZone::listIdentifiers(),
            config('app.timezone')
        );

        $selected = config('cache.default', 'redis');
        $this->variables['CACHE_DRIVER'] = $this->option('cache') ?? $this->choice(
            'Cache 缓存驱动程序 不懂你就按回车',
            self::CACHE_DRIVERS,
            array_key_exists($selected, self::CACHE_DRIVERS) ? $selected : null
        );

        $selected = config('session.driver', 'redis');
        $this->variables['SESSION_DRIVER'] = $this->option('session') ?? $this->choice(
            'Session 会话驱动程序 不懂你就按回车',
            self::SESSION_DRIVERS,
            array_key_exists($selected, self::SESSION_DRIVERS) ? $selected : null
        );

        $selected = config('queue.default', 'redis');
        $this->variables['QUEUE_CONNECTION'] = $this->option('queue') ?? $this->choice(
            'Queue 队列驱动程序 不懂你就按回车',
            self::QUEUE_DRIVERS,
            array_key_exists($selected, self::QUEUE_DRIVERS) ? $selected : null
        );

        if (!is_null($this->option('settings-ui'))) {
            $this->variables['APP_ENVIRONMENT_ONLY'] = $this->option('settings-ui') == 'true' ? 'false' : 'true';
        } else {
            $this->variables['APP_ENVIRONMENT_ONLY'] = $this->confirm('启用基于 UI 的设置编辑器?', true) ? 'false' : 'true';
        }

        $this->output->comment('有关遥测数据和收集的更多详细信息,请参考 https://pterodactyl.top/panel/1.0/additional_configuration.html#telemetry。');
        $this->variables['PTERODACTYL_TELEMETRY_ENABLED'] = $this->option('telemetry') ?? $this->confirm(
            '允许发送匿名遥测数据?',
            config('pterodactyl.telemetry.enabled', true)
        ) ? 'true' : 'false';

        // Make sure session cookies are set as "secure" when using HTTPS
        if (str_starts_with($this->variables['APP_URL'], 'https://')) {
            $this->variables['SESSION_SECURE_COOKIE'] = 'true';
        }

        $this->checkForRedis();
        $this->writeToEnvironment($this->variables);

        $this->info($this->console->output());

        return 0;
    }

    /**
     * Check if redis is selected, if so, request connection details and verify them.
     */
    private function checkForRedis()
    {
        $items = collect($this->variables)->filter(function ($item) {
            return $item === 'redis';
        });

        // Redis was not selected, no need to continue.
        if (count($items) === 0) {
            return;
        }

        $this->output->note('您为一个或多个选项选择了 Redis 驱动程序,请在下面提供有效的连接信息。在大多数情况下,您可以使用提供的默认值,除非您修改了 Redis 主机设置.');
        $this->variables['REDIS_HOST'] = $this->option('redis-host') ?? $this->ask(
            'Redis 主机',
            config('database.redis.default.host')
        );

        $askForRedisPassword = true;
        if (!empty(config('database.redis.default.password'))) {
            $this->variables['REDIS_PASSWORD'] = config('database.redis.default.password');
            $askForRedisPassword = $this->confirm('似乎已经为 Redis 定义了密码,您要更改吗?');
        }

        if ($askForRedisPassword) {
            $this->output->comment('默认情况下,Redis 服务器连接无需密码,因为它在本地运行并且不允许外部访问。在这种情况下,阁下只需直接按回车键表示留空.');
            $this->variables['REDIS_PASSWORD'] = $this->option('redis-pass') ?? $this->output->askHidden(
                'Redis 密码'
            );
        }

        if (empty($this->variables['REDIS_PASSWORD'])) {
            $this->variables['REDIS_PASSWORD'] = 'null';
        }

        $this->variables['REDIS_PORT'] = $this->option('redis-port') ?? $this->ask(
            'Redis 端口',
            config('database.redis.default.port')
        );
    }
}


================================================
FILE: app/Console/Commands/Environment/DatabaseSettingsCommand.php
================================================
<?php

namespace Pterodactyl\Console\Commands\Environment;

use Illuminate\Console\Command;
use Illuminate\Contracts\Console\Kernel;
use Illuminate\Database\DatabaseManager;
use Pterodactyl\Traits\Commands\EnvironmentWriterTrait;

class DatabaseSettingsCommand extends Command
{
    use EnvironmentWriterTrait;

    protected $description = '为面板配置数据库设置.';

    protected $signature = 'p:environment:database
                            {--host= : MySQL服务器的连接地址.}
                            {--port= : MySQL服务器的连接端口.}
                            {--database= : 要使用的数据库.}
                            {--username= : 连接数据库时使用的用户名.}
                            {--password= : 用于连接此数据库的密码.}';

    protected array $variables = [];

    /**
     * DatabaseSettingsCommand constructor.
     */
    public function __construct(private DatabaseManager $database, private Kernel $console)
    {
        parent::__construct();
    }

    /**
     * Handle command execution.
     *
     * @throws \Pterodactyl\Exceptions\PterodactylException
     */
    public function handle(): int
    {
        $this->output->note('强烈建议不要使用"localhost"作为您的数据库主机,因为我们已经看到频繁的套接字连接问题。如果你想使用本地连接,你应该使用“127.0.0.1”.');
        $this->variables['DB_HOST'] = $this->option('host') ?? $this->ask(
            '数据库地址',
            config('database.connections.mysql.host', '127.0.0.1')
        );

        $this->variables['DB_PORT'] = $this->option('port') ?? $this->ask(
            '数据库端口',
            config('database.connections.mysql.port', 3306)
        );

        $this->variables['DB_DATABASE'] = $this->option('database') ?? $this->ask(
            '数据库名称',
            config('database.connections.mysql.database', 'panel')
        );

        $this->output->note('使用“root”帐户进行 MySQL 连接不仅非常不被推荐,而且此应用程序也不允许这样做。您需要专门为此软件创建一个有权限的 MySQL 用户.');
        $this->variables['DB_USERNAME'] = $this->option('username') ?? $this->ask(
            '数据库用户名',
            config('database.connections.mysql.username', 'pterodactyl')
        );

        $askForMySQLPassword = true;
        if (!empty(config('database.connections.mysql.password')) && $this->input->isInteractive()) {
            $this->variables['DB_PASSWORD'] = config('database.connections.mysql.password');
            $askForMySQLPassword = $this->confirm('您似乎已经定义了 MySQL 连接密码,您想更改它吗?');
        }

        if ($askForMySQLPassword) {
            $this->variables['DB_PASSWORD'] = $this->option('password') ?? $this->secret('数据库密码');
        }

        try {
            $this->testMySQLConnection();
        } catch (\PDOException $exception) {
            $this->output->error(sprintf('无法使用提供的凭证连接到 MySQL 服务器。返回的错误是 "%s".', $exception->getMessage()));
            $this->output->error('您的连接凭证尚未保存。在继续之前,您需要提供有效的连接信息.');

            if ($this->confirm('回去再试一次?')) {
                $this->database->disconnect('_pterodactyl_command_test');

                return $this->handle();
            }

            return 1;
        }

        $this->writeToEnvironment($this->variables);

        $this->info($this->console->output());

        return 0;
    }

    /**
     * Test that we can connect to the provided MySQL instance and perform a selection.
     */
    private function testMySQLConnection()
    {
        config()->set('database.connections._pterodactyl_command_test', [
            'driver' => 'mysql',
            'host' => $this->variables['DB_HOST'],
            'port' => $this->variables['DB_PORT'],
            'database' => $this->variables['DB_DATABASE'],
            'username' => $this->variables['DB_USERNAME'],
            'password' => $this->variables['DB_PASSWORD'],
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'strict' => true,
        ]);

        $this->database->connection('_pterodactyl_command_test')->getPdo();
    }
}


================================================
FILE: app/Console/Commands/Environment/EmailSettingsCommand.php
================================================
<?php

namespace Pterodactyl\Console\Commands\Environment;

use Illuminate\Console\Command;
use Pterodactyl\Traits\Commands\EnvironmentWriterTrait;
use Illuminate\Contracts\Config\Repository as ConfigRepository;

class EmailSettingsCommand extends Command
{
    use EnvironmentWriterTrait;

    protected $description = '设置或更新面板前端的电子邮件发送配置.';

    protected $signature = 'p:environment:mail
                            {--driver= : 要使用的邮件驱动程序.}
                            {--email= : 邮件地址.}
                            {--from= : 发件人地址.}
                            {--encryption=}
                            {--host=}
                            {--port=}
                            {--endpoint=}
                            {--username=}
                            {--password=}';

    protected array $variables = [];

    /**
     * EmailSettingsCommand constructor.
     */
    public function __construct(private ConfigRepository $config)
    {
        parent::__construct();
    }

    /**
     * Handle command execution.
     *
     * @throws \Pterodactyl\Exceptions\PterodactylException
     */
    public function handle()
    {
        $this->variables['MAIL_DRIVER'] = $this->option('driver') ?? $this->choice(
            trans('command/messages.environment.mail.ask_driver'),
            [
                'smtp' => 'SMTP 服务器',
                'sendmail' => 'sendmail 二进制文件',
                'mailgun' => 'Mailgun 交易电子邮件',
                'mandrill' => 'Mandrill 交易电子邮件',
                'postmark' => 'Postmark 交易电子邮件',
            ],
            $this->config->get('mail.default', 'smtp')
        );

        $method = 'setup' . studly_case($this->variables['MAIL_DRIVER']) . '驱动程序设置';
        if (method_exists($this, $method)) {
            $this->{$method}();
        }

        $this->variables['MAIL_FROM_ADDRESS'] = $this->option('email') ?? $this->ask(
            trans('command/messages.environment.mail.ask_mail_from'),
            $this->config->get('mail.from.address')
        );

        $this->variables['MAIL_FROM_NAME'] = $this->option('from') ?? $this->ask(
            trans('command/messages.environment.mail.ask_mail_name'),
            $this->config->get('mail.from.name')
        );

        $this->writeToEnvironment($this->variables);

        $this->line('正在更新本地环境配置文件.');
        $this->line('');
    }

    /**
     * Handle variables for SMTP driver.
     */
    private function setupSmtpDriverVariables()
    {
        $this->variables['MAIL_HOST'] = $this->option('host') ?? $this->ask(
            trans('command/messages.environment.mail.ask_smtp_host'),
            $this->config->get('mail.mailers.smtp.host')
        );

        $this->variables['MAIL_PORT'] = $this->option('port') ?? $this->ask(
            trans('command/messages.environment.mail.ask_smtp_port'),
            $this->config->get('mail.mailers.smtp.port')
        );

        $this->variables['MAIL_USERNAME'] = $this->option('username') ?? $this->ask(
            trans('command/messages.environment.mail.ask_smtp_username'),
            $this->config->get('mail.mailers.smtp.username')
        );

        $this->variables['MAIL_PASSWORD'] = $this->option('password') ?? $this->secret(
            trans('command/messages.environment.mail.ask_smtp_password')
        );

        $this->variables['MAIL_ENCRYPTION'] = $this->option('encryption') ?? $this->choice(
            trans('command/messages.environment.mail.ask_encryption'),
            ['tls' => 'TLS', 'ssl' => 'SSL', '' => 'None'],
            $this->config->get('mail.mailers.smtp.encryption', 'tls')
        );
    }

    /**
     * Handle variables for mailgun driver.
     */
    private function setupMailgunDriverVariables()
    {
        $this->variables['MAILGUN_DOMAIN'] = $this->option('host') ?? $this->ask(
            trans('command/messages.environment.mail.ask_mailgun_domain'),
            $this->config->get('services.mailgun.domain')
        );

        $this->variables['MAILGUN_SECRET'] = $this->option('password') ?? $this->ask(
            trans('command/messages.environment.mail.ask_mailgun_secret'),
            $this->config->get('services.mailgun.secret')
        );

        $this->variables['MAILGUN_ENDPOINT'] = $this->option('endpoint') ?? $this->ask(
            trans('command/messages.environment.mail.ask_mailgun_endpoint'),
            $this->config->get('services.mailgun.endpoint')
        );
    }

    /**
     * Handle variables for mandrill driver.
     */
    private function setupMandrillDriverVariables()
    {
        $this->variables['MANDRILL_SECRET'] = $this->option('password') ?? $this->ask(
            trans('command/messages.environment.mail.ask_mandrill_secret'),
            $this->config->get('services.mandrill.secret')
        );
    }

    /**
     * Handle variables for postmark driver.
     */
    private function setupPostmarkDriverVariables()
    {
        $this->variables['MAIL_DRIVER'] = 'smtp';
        $this->variables['MAIL_HOST'] = 'smtp.postmarkapp.com';
        $this->variables['MAIL_PORT'] = 587;
        $this->variables['MAIL_USERNAME'] = $this->variables['MAIL_PASSWORD'] = $this->option('username') ?? $this->ask(
            trans('command/messages.environment.mail.ask_postmark_username'),
            $this->config->get('mail.username')
        );
    }
}


================================================
FILE: app/Console/Commands/InfoCommand.php
================================================
<?php

namespace Pterodactyl\Console\Commands;

use Illuminate\Console\Command;
use Pterodactyl\Services\Helpers\SoftwareVersionService;
use Illuminate\Contracts\Config\Repository as ConfigRepository;

class InfoCommand extends Command
{
    protected $description = '显示应用程序、数据库和电子邮件配置以及面板版本。';

    protected $signature = 'p:info';

    /**
     * VersionCommand constructor.
     */
    public function __construct(private ConfigRepository $config, private SoftwareVersionService $versionService)
    {
        parent::__construct();
    }

    /**
     * Handle execution of command.
     */
    public function handle()
    {
        $this->output->title('版本信息');
        $this->table([], [
            ['面板版本', $this->config->get('app.version')],
            ['最新版本', $this->versionService->getPanel()],
            ['是否为最新版', $this->versionService->isLatestPanel() ? '是' : $this->formatText('否', 'bg=red')],
            ['服务作者', $this->config->get('pterodactyl.service.author')],
        ], 'compact');

        $this->output->title('应用配置');
        $this->table([], [
            ['环境', $this->formatText($this->config->get('app.env'), $this->config->get('app.env') === '生产' ?: 'bg=red')],
            ['是否处于调试模式', $this->formatText($this->config->get('app.debug') ? '是' : '否', !$this->config->get('app.debug') ?: 'bg=red')],
            ['安装 URL', $this->config->get('app.url')],
            ['安装路径', base_path()],
            ['时区', $this->config->get('app.timezone')],
            ['Cache 缓存驱动器', $this->config->get('cache.default')],
            ['Queue 队列驱动器', $this->config->get('queue.default')],
            ['Session 会话驱动器', $this->config->get('session.driver')],
            ['Filesystem 文件系统驱动器', $this->config->get('filesystems.default')],
            ['默认主题', $this->config->get('themes.active')],
            ['代理', $this->config->get('trustedproxies.proxies')],
        ], 'compact');

        $this->output->title('数据库配置');
        $driver = $this->config->get('database.default');
        $this->table([], [
            ['驱动器', $driver],
            ['主机', $this->config->get("database.connections.$driver.host")],
            ['端口', $this->config->get("database.connections.$driver.port")],
            ['数据库', $this->config->get("database.connections.$driver.database")],
            ['用户名', $this->config->get("database.connections.$driver.username")],
        ], 'compact');

        // TODO: Update this to handle other mail drivers
        $this->output->title('邮件发件配置');
        $this->table([], [
            ['驱动器', $this->config->get('mail.default')],
            ['主机', $this->config->get('mail.mailers.smtp.host')],
            ['端口', $this->config->get('mail.mailers.smtp.port')],
            ['用户名', $this->config->get('mail.mailers.smtp.username')],
            ['发件地址', $this->config->get('mail.from.address')],
            ['发件人', $this->config->get('mail.from.name')],
            ['加密方式', $this->config->get('mail.mailers.smtp.encryption')],
        ], 'compact');
    }

    /**
     * Format output in a Name: Value manner.
     */
    private function formatText(string $value, string $opts = ''): string
    {
        return sprintf('<%s>%s</>', $opts, $value);
    }
}


================================================
FILE: app/Console/Commands/Location/DeleteLocationCommand.php
================================================
<?php

namespace Pterodactyl\Console\Commands\Location;

use Illuminate\Console\Command;
use Illuminate\Support\Collection;
use Pterodactyl\Services\Locations\LocationDeletionService;
use Pterodactyl\Contracts\Repository\LocationRepositoryInterface;

class DeleteLocationCommand extends Command
{
    protected $description = 'Deletes a location from the Panel.';

    protected $signature = 'p:location:delete {--short= : The short code of the location to delete.}';

    protected Collection $locations;

    /**
     * DeleteLocationCommand constructor.
     */
    public function __construct(
        private LocationDeletionService $deletionService,
        private LocationRepositoryInterface $repository,
    ) {
        parent::__construct();
    }

    /**
     * Respond to the command request.
     *
     * @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
     * @throws \Pterodactyl\Exceptions\Service\Location\HasActiveNodesException
     */
    public function handle()
    {
        $this->locations = $this->locations ?? $this->repository->all();
        $short = $this->option('short') ?? $this->anticipate(
            trans('command/messages.location.ask_short'),
            $this->locations->pluck('short')->toArray()
        );

        $location = $this->locations->where('short', $short)->first();
        if (is_null($location)) {
            $this->error(trans('command/messages.location.no_location_found'));
            if ($this->input->isInteractive()) {
                $this->handle();
            }

            return;
        }

        $this->deletionService->handle($location->id);
        $this->line(trans('command/messages.location.deleted'));
    }
}


================================================
FILE: app/Console/Commands/Location/MakeLocationCommand.php
================================================
<?php

namespace Pterodactyl\Console\Commands\Location;

use Illuminate\Console\Command;
use Pterodactyl\Services\Locations\LocationCreationService;

class MakeLocationCommand extends Command
{
    protected $signature = 'p:location:make
                            {--short= : The shortcode name of this location (ex. us1).}
                            {--long= : A longer description of this location.}';

    protected $description = 'Creates a new location on the system via the CLI.';

    /**
     * Create a new command instance.
     */
    public function __construct(private LocationCreationService $creationService)
    {
        parent::__construct();
    }

    /**
     * Handle the command execution process.
     *
     * @throws \Pterodactyl\Exceptions\Model\DataValidationException
     */
    public function handle()
    {
        $short = $this->option('short') ?? $this->ask(trans('command/messages.location.ask_short'));
        $long = $this->option('long') ?? $this->ask(trans('command/messages.location.ask_long'));

        $location = $this->creationService->handle(compact('short', 'long'));
        $this->line(trans('command/messages.location.created', [
            'name' => $location->short,
            'id' => $location->id,
        ]));
    }
}


================================================
FILE: app/Console/Commands/Maintenance/CleanServiceBackupFilesCommand.php
================================================
<?php

namespace Pterodactyl\Console\Commands\Maintenance;

use Carbon\Carbon;
use Illuminate\Console\Command;
use Illuminate\Contracts\Filesystem\Filesystem;
use Illuminate\Contracts\Filesystem\Factory as FilesystemFactory;

class CleanServiceBackupFilesCommand extends Command
{
    public const BACKUP_THRESHOLD_MINUTES = 5;

    protected $description = 'Clean orphaned .bak files created when modifying services.';

    protected $signature = 'p:maintenance:clean-service-backups';

    protected Filesystem $disk;

    /**
     * CleanServiceBackupFilesCommand constructor.
     */
    public function __construct(FilesystemFactory $filesystem)
    {
        parent::__construct();

        $this->disk = $filesystem->disk();
    }

    /**
     * Handle command execution.
     */
    public function handle()
    {
        $files = $this->disk->files('services/.bak');

        collect($files)->each(function (\SplFileInfo $file) {
            $lastModified = Carbon::createFromTimestamp($this->disk->lastModified($file->getPath()));
            if ((int) $lastModified->diffInMinutes(Carbon::now()) > self::BACKUP_THRESHOLD_MINUTES) {
                $this->disk->delete($file->getPath());
                $this->info(trans('command/messages.maintenance.deleting_service_backup', ['file' => $file->getFilename()]));
            }
        });
    }
}


================================================
FILE: app/Console/Commands/Maintenance/PruneOrphanedBackupsCommand.php
================================================
<?php

namespace Pterodactyl\Console\Commands\Maintenance;

use Carbon\CarbonImmutable;
use Illuminate\Console\Command;
use Pterodactyl\Repositories\Eloquent\BackupRepository;

class PruneOrphanedBackupsCommand extends Command
{
    protected
Download .txt
gitextract_7le1g290/

├── .editorconfig
├── .eslintignore
├── .eslintrc.js
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── 1-bug-report.yml
│   │   ├── 2-approved.yml
│   │   └── config.yml
│   ├── docker/
│   │   ├── README.md
│   │   ├── default.conf
│   │   ├── default_ssl.conf
│   │   ├── entrypoint.sh
│   │   ├── supervisord.conf
│   │   └── www.conf
│   └── workflows/
│       ├── build.yaml
│       ├── ci.yaml
│       ├── docker.yaml
│       └── release.yaml
├── .gitignore
├── .php-cs-fixer.dist.php
├── .prettierrc.json
├── BUILDING.md
├── CHANGELOG.md
├── CONTRIBUTING.md
├── Dockerfile
├── LICENSE.md
├── README.md
├── SECURITY.md
├── app/
│   ├── Console/
│   │   ├── Commands/
│   │   │   ├── Environment/
│   │   │   │   ├── AppSettingsCommand.php
│   │   │   │   ├── DatabaseSettingsCommand.php
│   │   │   │   └── EmailSettingsCommand.php
│   │   │   ├── InfoCommand.php
│   │   │   ├── Location/
│   │   │   │   ├── DeleteLocationCommand.php
│   │   │   │   └── MakeLocationCommand.php
│   │   │   ├── Maintenance/
│   │   │   │   ├── CleanServiceBackupFilesCommand.php
│   │   │   │   └── PruneOrphanedBackupsCommand.php
│   │   │   ├── Node/
│   │   │   │   ├── MakeNodeCommand.php
│   │   │   │   ├── NodeConfigurationCommand.php
│   │   │   │   └── NodeListCommand.php
│   │   │   ├── Overrides/
│   │   │   │   ├── KeyGenerateCommand.php
│   │   │   │   ├── SeedCommand.php
│   │   │   │   └── UpCommand.php
│   │   │   ├── Schedule/
│   │   │   │   └── ProcessRunnableCommand.php
│   │   │   ├── Server/
│   │   │   │   └── BulkPowerActionCommand.php
│   │   │   ├── TelemetryCommand.php
│   │   │   ├── UpgradeCommand.php
│   │   │   └── User/
│   │   │       ├── DeleteUserCommand.php
│   │   │       ├── DisableTwoFactorCommand.php
│   │   │       └── MakeUserCommand.php
│   │   ├── Kernel.php
│   │   └── RequiresDatabaseMigrations.php
│   ├── Contracts/
│   │   ├── Core/
│   │   │   └── ReceivesEvents.php
│   │   ├── Criteria/
│   │   │   └── CriteriaInterface.php
│   │   ├── Extensions/
│   │   │   └── HashidsInterface.php
│   │   ├── Http/
│   │   │   └── ClientPermissionsRequest.php
│   │   ├── Models/
│   │   │   └── Identifiable.php
│   │   └── Repository/
│   │       ├── AllocationRepositoryInterface.php
│   │       ├── ApiKeyRepositoryInterface.php
│   │       ├── ApiPermissionRepositoryInterface.php
│   │       ├── DatabaseHostRepositoryInterface.php
│   │       ├── DatabaseRepositoryInterface.php
│   │       ├── EggRepositoryInterface.php
│   │       ├── EggVariableRepositoryInterface.php
│   │       ├── LocationRepositoryInterface.php
│   │       ├── NestRepositoryInterface.php
│   │       ├── NodeRepositoryInterface.php
│   │       ├── PermissionRepositoryInterface.php
│   │       ├── RepositoryInterface.php
│   │       ├── ScheduleRepositoryInterface.php
│   │       ├── ServerRepositoryInterface.php
│   │       ├── ServerVariableRepositoryInterface.php
│   │       ├── SessionRepositoryInterface.php
│   │       ├── SettingsRepositoryInterface.php
│   │       ├── SubuserRepositoryInterface.php
│   │       ├── TaskRepositoryInterface.php
│   │       └── UserRepositoryInterface.php
│   ├── Enum/
│   │   └── ResourceLimit.php
│   ├── Events/
│   │   ├── ActivityLogged.php
│   │   ├── Auth/
│   │   │   ├── DirectLogin.php
│   │   │   ├── FailedCaptcha.php
│   │   │   ├── FailedPasswordReset.php
│   │   │   └── ProvidedAuthenticationToken.php
│   │   ├── Event.php
│   │   ├── Server/
│   │   │   ├── Created.php
│   │   │   ├── Creating.php
│   │   │   ├── Deleted.php
│   │   │   ├── Deleting.php
│   │   │   ├── Installed.php
│   │   │   ├── Saved.php
│   │   │   ├── Saving.php
│   │   │   ├── Updated.php
│   │   │   └── Updating.php
│   │   ├── Subuser/
│   │   │   ├── Created.php
│   │   │   ├── Creating.php
│   │   │   ├── Deleted.php
│   │   │   └── Deleting.php
│   │   └── User/
│   │       ├── Created.php
│   │       ├── Creating.php
│   │       ├── Deleted.php
│   │       ├── Deleting.php
│   │       └── PasswordChanged.php
│   ├── Exceptions/
│   │   ├── AccountNotFoundException.php
│   │   ├── AutoDeploymentException.php
│   │   ├── DisplayException.php
│   │   ├── Handler.php
│   │   ├── Http/
│   │   │   ├── Base/
│   │   │   │   └── InvalidPasswordProvidedException.php
│   │   │   ├── Connection/
│   │   │   │   └── DaemonConnectionException.php
│   │   │   ├── HttpForbiddenException.php
│   │   │   ├── Server/
│   │   │   │   ├── FileSizeTooLargeException.php
│   │   │   │   ├── FileTypeNotEditableException.php
│   │   │   │   └── ServerStateConflictException.php
│   │   │   └── TwoFactorAuthRequiredException.php
│   │   ├── ManifestDoesNotExistException.php
│   │   ├── Model/
│   │   │   └── DataValidationException.php
│   │   ├── PterodactylException.php
│   │   ├── Repository/
│   │   │   ├── Daemon/
│   │   │   │   └── InvalidPowerSignalException.php
│   │   │   ├── DuplicateDatabaseNameException.php
│   │   │   ├── RecordNotFoundException.php
│   │   │   └── RepositoryException.php
│   │   ├── Service/
│   │   │   ├── Allocation/
│   │   │   │   ├── AllocationDoesNotBelongToServerException.php
│   │   │   │   ├── AutoAllocationNotEnabledException.php
│   │   │   │   ├── CidrOutOfRangeException.php
│   │   │   │   ├── InvalidPortMappingException.php
│   │   │   │   ├── NoAutoAllocationSpaceAvailableException.php
│   │   │   │   ├── PortOutOfRangeException.php
│   │   │   │   ├── ServerUsingAllocationException.php
│   │   │   │   └── TooManyPortsInRangeException.php
│   │   │   ├── Backup/
│   │   │   │   ├── BackupLockedException.php
│   │   │   │   └── TooManyBackupsException.php
│   │   │   ├── Database/
│   │   │   │   ├── DatabaseClientFeatureNotEnabledException.php
│   │   │   │   ├── NoSuitableDatabaseHostException.php
│   │   │   │   └── TooManyDatabasesException.php
│   │   │   ├── Deployment/
│   │   │   │   ├── NoViableAllocationException.php
│   │   │   │   └── NoViableNodeException.php
│   │   │   ├── Egg/
│   │   │   │   ├── BadJsonFormatException.php
│   │   │   │   ├── HasChildrenException.php
│   │   │   │   ├── InvalidCopyFromException.php
│   │   │   │   ├── NoParentConfigurationFoundException.php
│   │   │   │   └── Variable/
│   │   │   │       ├── BadValidationRuleException.php
│   │   │   │       └── ReservedVariableNameException.php
│   │   │   ├── HasActiveServersException.php
│   │   │   ├── Helper/
│   │   │   │   └── CdnVersionFetchingException.php
│   │   │   ├── InvalidFileUploadException.php
│   │   │   ├── Location/
│   │   │   │   └── HasActiveNodesException.php
│   │   │   ├── Node/
│   │   │   │   └── ConfigurationNotPersistedException.php
│   │   │   ├── Schedule/
│   │   │   │   └── Task/
│   │   │   │       └── TaskIntervalTooLongException.php
│   │   │   ├── Server/
│   │   │   │   └── RequiredVariableMissingException.php
│   │   │   ├── ServiceLimitExceededException.php
│   │   │   ├── Subuser/
│   │   │   │   ├── ServerSubuserExistsException.php
│   │   │   │   └── UserIsServerOwnerException.php
│   │   │   └── User/
│   │   │       └── TwoFactorAuthenticationTokenInvalid.php
│   │   ├── Solutions/
│   │   │   └── ManifestDoesNotExistSolution.php
│   │   └── Transformer/
│   │       └── InvalidTransformerLevelException.php
│   ├── Extensions/
│   │   ├── Backups/
│   │   │   └── BackupManager.php
│   │   ├── DynamicDatabaseConnection.php
│   │   ├── Facades/
│   │   │   └── Theme.php
│   │   ├── Filesystem/
│   │   │   └── S3Filesystem.php
│   │   ├── Hashids.php
│   │   ├── Illuminate/
│   │   │   ├── Database/
│   │   │   │   └── Eloquent/
│   │   │   │       └── Builder.php
│   │   │   └── Events/
│   │   │       └── Contracts/
│   │   │           └── SubscribesToEvents.php
│   │   ├── Laravel/
│   │   │   └── Sanctum/
│   │   │       └── NewAccessToken.php
│   │   ├── Lcobucci/
│   │   │   └── JWT/
│   │   │       └── Encoding/
│   │   │           └── TimestampDates.php
│   │   ├── League/
│   │   │   └── Fractal/
│   │   │       └── Serializers/
│   │   │           └── PterodactylSerializer.php
│   │   ├── Spatie/
│   │   │   └── Fractalistic/
│   │   │       └── Fractal.php
│   │   └── Themes/
│   │       └── Theme.php
│   ├── Facades/
│   │   ├── Activity.php
│   │   ├── LogBatch.php
│   │   └── LogTarget.php
│   ├── Helpers/
│   │   ├── Time.php
│   │   └── Utilities.php
│   ├── Http/
│   │   ├── Controllers/
│   │   │   ├── Admin/
│   │   │   │   ├── ApiController.php
│   │   │   │   ├── BaseController.php
│   │   │   │   ├── DatabaseController.php
│   │   │   │   ├── LocationController.php
│   │   │   │   ├── MountController.php
│   │   │   │   ├── Nests/
│   │   │   │   │   ├── EggController.php
│   │   │   │   │   ├── EggScriptController.php
│   │   │   │   │   ├── EggShareController.php
│   │   │   │   │   ├── EggVariableController.php
│   │   │   │   │   └── NestController.php
│   │   │   │   ├── NodeAutoDeployController.php
│   │   │   │   ├── Nodes/
│   │   │   │   │   ├── NodeController.php
│   │   │   │   │   ├── NodeViewController.php
│   │   │   │   │   └── SystemInformationController.php
│   │   │   │   ├── NodesController.php
│   │   │   │   ├── Servers/
│   │   │   │   │   ├── CreateServerController.php
│   │   │   │   │   ├── ServerController.php
│   │   │   │   │   ├── ServerTransferController.php
│   │   │   │   │   └── ServerViewController.php
│   │   │   │   ├── ServersController.php
│   │   │   │   ├── Settings/
│   │   │   │   │   ├── AdvancedController.php
│   │   │   │   │   ├── IndexController.php
│   │   │   │   │   └── MailController.php
│   │   │   │   └── UserController.php
│   │   │   ├── Api/
│   │   │   │   ├── Application/
│   │   │   │   │   ├── ApplicationApiController.php
│   │   │   │   │   ├── Locations/
│   │   │   │   │   │   └── LocationController.php
│   │   │   │   │   ├── Nests/
│   │   │   │   │   │   ├── EggController.php
│   │   │   │   │   │   └── NestController.php
│   │   │   │   │   ├── Nodes/
│   │   │   │   │   │   ├── AllocationController.php
│   │   │   │   │   │   ├── NodeConfigurationController.php
│   │   │   │   │   │   ├── NodeController.php
│   │   │   │   │   │   └── NodeDeploymentController.php
│   │   │   │   │   ├── Servers/
│   │   │   │   │   │   ├── DatabaseController.php
│   │   │   │   │   │   ├── ExternalServerController.php
│   │   │   │   │   │   ├── ServerController.php
│   │   │   │   │   │   ├── ServerDetailsController.php
│   │   │   │   │   │   ├── ServerManagementController.php
│   │   │   │   │   │   └── StartupController.php
│   │   │   │   │   └── Users/
│   │   │   │   │       ├── ExternalUserController.php
│   │   │   │   │       └── UserController.php
│   │   │   │   ├── Client/
│   │   │   │   │   ├── AccountController.php
│   │   │   │   │   ├── ActivityLogController.php
│   │   │   │   │   ├── ApiKeyController.php
│   │   │   │   │   ├── ClientApiController.php
│   │   │   │   │   ├── ClientController.php
│   │   │   │   │   ├── SSHKeyController.php
│   │   │   │   │   ├── Servers/
│   │   │   │   │   │   ├── ActivityLogController.php
│   │   │   │   │   │   ├── BackupController.php
│   │   │   │   │   │   ├── CommandController.php
│   │   │   │   │   │   ├── DatabaseController.php
│   │   │   │   │   │   ├── FileController.php
│   │   │   │   │   │   ├── FileUploadController.php
│   │   │   │   │   │   ├── NetworkAllocationController.php
│   │   │   │   │   │   ├── PowerController.php
│   │   │   │   │   │   ├── ResourceUtilizationController.php
│   │   │   │   │   │   ├── ScheduleController.php
│   │   │   │   │   │   ├── ScheduleTaskController.php
│   │   │   │   │   │   ├── ServerController.php
│   │   │   │   │   │   ├── SettingsController.php
│   │   │   │   │   │   ├── StartupController.php
│   │   │   │   │   │   ├── SubuserController.php
│   │   │   │   │   │   └── WebsocketController.php
│   │   │   │   │   └── TwoFactorController.php
│   │   │   │   └── Remote/
│   │   │   │       ├── ActivityProcessingController.php
│   │   │   │       ├── Backups/
│   │   │   │       │   ├── BackupRemoteUploadController.php
│   │   │   │       │   └── BackupStatusController.php
│   │   │   │       ├── EggInstallController.php
│   │   │   │       ├── Servers/
│   │   │   │       │   ├── ServerDetailsController.php
│   │   │   │       │   ├── ServerInstallController.php
│   │   │   │       │   └── ServerTransferController.php
│   │   │   │       └── SftpAuthenticationController.php
│   │   │   ├── Auth/
│   │   │   │   ├── AbstractLoginController.php
│   │   │   │   ├── ForgotPasswordController.php
│   │   │   │   ├── LoginCheckpointController.php
│   │   │   │   ├── LoginController.php
│   │   │   │   └── ResetPasswordController.php
│   │   │   ├── Base/
│   │   │   │   ├── IndexController.php
│   │   │   │   └── LocaleController.php
│   │   │   └── Controller.php
│   │   ├── Kernel.php
│   │   ├── Middleware/
│   │   │   ├── Activity/
│   │   │   │   ├── AccountSubject.php
│   │   │   │   ├── ServerSubject.php
│   │   │   │   └── TrackAPIKey.php
│   │   │   ├── Admin/
│   │   │   │   └── Servers/
│   │   │   │       └── ServerInstalled.php
│   │   │   ├── AdminAuthenticate.php
│   │   │   ├── Api/
│   │   │   │   ├── Application/
│   │   │   │   │   └── AuthenticateApplicationUser.php
│   │   │   │   ├── AuthenticateIPAccess.php
│   │   │   │   ├── Client/
│   │   │   │   │   ├── RequireClientApiKey.php
│   │   │   │   │   ├── Server/
│   │   │   │   │   │   ├── AuthenticateServerAccess.php
│   │   │   │   │   │   └── ResourceBelongsToServer.php
│   │   │   │   │   └── SubstituteClientBindings.php
│   │   │   │   ├── Daemon/
│   │   │   │   │   └── DaemonAuthenticate.php
│   │   │   │   └── IsValidJson.php
│   │   │   ├── EncryptCookies.php
│   │   │   ├── EnsureStatefulRequests.php
│   │   │   ├── LanguageMiddleware.php
│   │   │   ├── MaintenanceMiddleware.php
│   │   │   ├── RedirectIfAuthenticated.php
│   │   │   ├── RequireTwoFactorAuthentication.php
│   │   │   ├── SetSecurityHeaders.php
│   │   │   ├── TrimStrings.php
│   │   │   ├── VerifyCsrfToken.php
│   │   │   └── VerifyReCaptcha.php
│   │   ├── Requests/
│   │   │   ├── Admin/
│   │   │   │   ├── AdminFormRequest.php
│   │   │   │   ├── Api/
│   │   │   │   │   └── StoreApplicationApiKeyRequest.php
│   │   │   │   ├── BaseFormRequest.php
│   │   │   │   ├── DatabaseHostFormRequest.php
│   │   │   │   ├── Egg/
│   │   │   │   │   ├── EggFormRequest.php
│   │   │   │   │   ├── EggImportFormRequest.php
│   │   │   │   │   ├── EggScriptFormRequest.php
│   │   │   │   │   └── EggVariableFormRequest.php
│   │   │   │   ├── LocationFormRequest.php
│   │   │   │   ├── MountFormRequest.php
│   │   │   │   ├── Nest/
│   │   │   │   │   └── StoreNestFormRequest.php
│   │   │   │   ├── NewUserFormRequest.php
│   │   │   │   ├── Node/
│   │   │   │   │   ├── AllocationAliasFormRequest.php
│   │   │   │   │   ├── AllocationFormRequest.php
│   │   │   │   │   └── NodeFormRequest.php
│   │   │   │   ├── ServerFormRequest.php
│   │   │   │   ├── Servers/
│   │   │   │   │   └── Databases/
│   │   │   │   │       └── StoreServerDatabaseRequest.php
│   │   │   │   ├── Settings/
│   │   │   │   │   ├── AdvancedSettingsFormRequest.php
│   │   │   │   │   ├── BaseSettingsFormRequest.php
│   │   │   │   │   └── MailSettingsFormRequest.php
│   │   │   │   └── UserFormRequest.php
│   │   │   ├── Api/
│   │   │   │   ├── Application/
│   │   │   │   │   ├── Allocations/
│   │   │   │   │   │   ├── DeleteAllocationRequest.php
│   │   │   │   │   │   ├── GetAllocationsRequest.php
│   │   │   │   │   │   └── StoreAllocationRequest.php
│   │   │   │   │   ├── ApplicationApiRequest.php
│   │   │   │   │   ├── Locations/
│   │   │   │   │   │   ├── DeleteLocationRequest.php
│   │   │   │   │   │   ├── GetLocationRequest.php
│   │   │   │   │   │   ├── GetLocationsRequest.php
│   │   │   │   │   │   ├── StoreLocationRequest.php
│   │   │   │   │   │   └── UpdateLocationRequest.php
│   │   │   │   │   ├── Nests/
│   │   │   │   │   │   ├── Eggs/
│   │   │   │   │   │   │   ├── GetEggRequest.php
│   │   │   │   │   │   │   └── GetEggsRequest.php
│   │   │   │   │   │   └── GetNestsRequest.php
│   │   │   │   │   ├── Nodes/
│   │   │   │   │   │   ├── DeleteNodeRequest.php
│   │   │   │   │   │   ├── GetDeployableNodesRequest.php
│   │   │   │   │   │   ├── GetNodeRequest.php
│   │   │   │   │   │   ├── GetNodesRequest.php
│   │   │   │   │   │   ├── StoreNodeRequest.php
│   │   │   │   │   │   └── UpdateNodeRequest.php
│   │   │   │   │   ├── Servers/
│   │   │   │   │   │   ├── Databases/
│   │   │   │   │   │   │   ├── GetServerDatabaseRequest.php
│   │   │   │   │   │   │   ├── GetServerDatabasesRequest.php
│   │   │   │   │   │   │   ├── ServerDatabaseWriteRequest.php
│   │   │   │   │   │   │   └── StoreServerDatabaseRequest.php
│   │   │   │   │   │   ├── GetExternalServerRequest.php
│   │   │   │   │   │   ├── GetServerRequest.php
│   │   │   │   │   │   ├── GetServersRequest.php
│   │   │   │   │   │   ├── ServerWriteRequest.php
│   │   │   │   │   │   ├── StoreServerRequest.php
│   │   │   │   │   │   ├── UpdateServerBuildConfigurationRequest.php
│   │   │   │   │   │   ├── UpdateServerDetailsRequest.php
│   │   │   │   │   │   └── UpdateServerStartupRequest.php
│   │   │   │   │   └── Users/
│   │   │   │   │       ├── DeleteUserRequest.php
│   │   │   │   │       ├── GetExternalUserRequest.php
│   │   │   │   │       ├── GetUsersRequest.php
│   │   │   │   │       ├── StoreUserRequest.php
│   │   │   │   │       └── UpdateUserRequest.php
│   │   │   │   ├── Client/
│   │   │   │   │   ├── Account/
│   │   │   │   │   │   ├── StoreApiKeyRequest.php
│   │   │   │   │   │   ├── StoreSSHKeyRequest.php
│   │   │   │   │   │   ├── UpdateEmailRequest.php
│   │   │   │   │   │   └── UpdatePasswordRequest.php
│   │   │   │   │   ├── ClientApiRequest.php
│   │   │   │   │   ├── GetServersRequest.php
│   │   │   │   │   └── Servers/
│   │   │   │   │       ├── Backups/
│   │   │   │   │       │   ├── RestoreBackupRequest.php
│   │   │   │   │       │   └── StoreBackupRequest.php
│   │   │   │   │       ├── Databases/
│   │   │   │   │       │   ├── DeleteDatabaseRequest.php
│   │   │   │   │       │   ├── GetDatabasesRequest.php
│   │   │   │   │       │   ├── RotatePasswordRequest.php
│   │   │   │   │       │   └── StoreDatabaseRequest.php
│   │   │   │   │       ├── Files/
│   │   │   │   │       │   ├── ChmodFilesRequest.php
│   │   │   │   │       │   ├── CompressFilesRequest.php
│   │   │   │   │       │   ├── CopyFileRequest.php
│   │   │   │   │       │   ├── CreateFolderRequest.php
│   │   │   │   │       │   ├── DecompressFilesRequest.php
│   │   │   │   │       │   ├── DeleteFileRequest.php
│   │   │   │   │       │   ├── DownloadFileRequest.php
│   │   │   │   │       │   ├── GetFileContentsRequest.php
│   │   │   │   │       │   ├── ListFilesRequest.php
│   │   │   │   │       │   ├── PullFileRequest.php
│   │   │   │   │       │   ├── RenameFileRequest.php
│   │   │   │   │       │   ├── UploadFileRequest.php
│   │   │   │   │       │   └── WriteFileContentRequest.php
│   │   │   │   │       ├── GetServerRequest.php
│   │   │   │   │       ├── Network/
│   │   │   │   │       │   ├── DeleteAllocationRequest.php
│   │   │   │   │       │   ├── GetNetworkRequest.php
│   │   │   │   │       │   ├── NewAllocationRequest.php
│   │   │   │   │       │   ├── SetPrimaryAllocationRequest.php
│   │   │   │   │       │   └── UpdateAllocationRequest.php
│   │   │   │   │       ├── Schedules/
│   │   │   │   │       │   ├── DeleteScheduleRequest.php
│   │   │   │   │       │   ├── StoreScheduleRequest.php
│   │   │   │   │       │   ├── StoreTaskRequest.php
│   │   │   │   │       │   ├── TriggerScheduleRequest.php
│   │   │   │   │       │   ├── UpdateScheduleRequest.php
│   │   │   │   │       │   └── ViewScheduleRequest.php
│   │   │   │   │       ├── SendCommandRequest.php
│   │   │   │   │       ├── SendPowerRequest.php
│   │   │   │   │       ├── Settings/
│   │   │   │   │       │   ├── ReinstallServerRequest.php
│   │   │   │   │       │   ├── RenameServerRequest.php
│   │   │   │   │       │   └── SetDockerImageRequest.php
│   │   │   │   │       ├── Startup/
│   │   │   │   │       │   ├── GetStartupRequest.php
│   │   │   │   │       │   ├── UpdateEggRequest.php
│   │   │   │   │       │   └── UpdateStartupVariableRequest.php
│   │   │   │   │       └── Subusers/
│   │   │   │   │           ├── DeleteSubuserRequest.php
│   │   │   │   │           ├── GetSubuserRequest.php
│   │   │   │   │           ├── StoreSubuserRequest.php
│   │   │   │   │           ├── SubuserRequest.php
│   │   │   │   │           └── UpdateSubuserRequest.php
│   │   │   │   └── Remote/
│   │   │   │       ├── ActivityEventRequest.php
│   │   │   │       ├── AuthenticateWebsocketDetailsRequest.php
│   │   │   │       ├── InstallationDataRequest.php
│   │   │   │       ├── ReportBackupCompleteRequest.php
│   │   │   │       └── SftpAuthenticationFormRequest.php
│   │   │   ├── Auth/
│   │   │   │   ├── LoginCheckpointRequest.php
│   │   │   │   ├── LoginRequest.php
│   │   │   │   └── ResetPasswordRequest.php
│   │   │   ├── Base/
│   │   │   │   └── LocaleRequest.php
│   │   │   └── FrontendUserFormRequest.php
│   │   ├── Resources/
│   │   │   └── Wings/
│   │   │       └── ServerConfigurationCollection.php
│   │   └── ViewComposers/
│   │       └── AssetComposer.php
│   ├── Jobs/
│   │   ├── RevokeSftpAccessJob.php
│   │   └── Schedule/
│   │       └── RunTaskJob.php
│   ├── Listeners/
│   │   ├── AuthenticationListener.php
│   │   ├── RevocationListener.php
│   │   └── TwoFactorListener.php
│   ├── Models/
│   │   ├── APILog.php
│   │   ├── ActivityLog.php
│   │   ├── ActivityLogSubject.php
│   │   ├── Allocation.php
│   │   ├── ApiKey.php
│   │   ├── Attributes/
│   │   │   └── Identifiable.php
│   │   ├── AuditLog.php
│   │   ├── Backup.php
│   │   ├── Database.php
│   │   ├── DatabaseHost.php
│   │   ├── Egg.php
│   │   ├── EggMount.php
│   │   ├── EggVariable.php
│   │   ├── Filters/
│   │   │   ├── AdminServerFilter.php
│   │   │   └── MultiFieldServerFilter.php
│   │   ├── Location.php
│   │   ├── Model.php
│   │   ├── Mount.php
│   │   ├── MountNode.php
│   │   ├── MountServer.php
│   │   ├── Nest.php
│   │   ├── Node.php
│   │   ├── Objects/
│   │   │   └── DeploymentObject.php
│   │   ├── Permission.php
│   │   ├── RecoveryToken.php
│   │   ├── Schedule.php
│   │   ├── Server.php
│   │   ├── ServerTransfer.php
│   │   ├── ServerVariable.php
│   │   ├── Session.php
│   │   ├── Setting.php
│   │   ├── Subuser.php
│   │   ├── Task.php
│   │   ├── TaskLog.php
│   │   ├── Traits/
│   │   │   ├── HasAccessTokens.php
│   │   │   └── HasRealtimeIdentifier.php
│   │   ├── User.php
│   │   └── UserSSHKey.php
│   ├── Notifications/
│   │   ├── AccountCreated.php
│   │   ├── AddedToServer.php
│   │   ├── MailTested.php
│   │   ├── RemovedFromServer.php
│   │   ├── SendPasswordReset.php
│   │   └── ServerInstalled.php
│   ├── Observers/
│   │   ├── EggVariableObserver.php
│   │   ├── ServerObserver.php
│   │   ├── SubuserObserver.php
│   │   └── UserObserver.php
│   ├── Policies/
│   │   ├── .gitkeep
│   │   └── ServerPolicy.php
│   ├── Providers/
│   │   ├── ActivityLogServiceProvider.php
│   │   ├── AppServiceProvider.php
│   │   ├── AuthServiceProvider.php
│   │   ├── BackupsServiceProvider.php
│   │   ├── BladeServiceProvider.php
│   │   ├── BroadcastServiceProvider.php
│   │   ├── EventServiceProvider.php
│   │   ├── HashidsServiceProvider.php
│   │   ├── RepositoryServiceProvider.php
│   │   ├── RouteServiceProvider.php
│   │   ├── SettingsServiceProvider.php
│   │   └── ViewComposerServiceProvider.php
│   ├── Repositories/
│   │   ├── Eloquent/
│   │   │   ├── AllocationRepository.php
│   │   │   ├── ApiKeyRepository.php
│   │   │   ├── BackupRepository.php
│   │   │   ├── DatabaseHostRepository.php
│   │   │   ├── DatabaseRepository.php
│   │   │   ├── EggRepository.php
│   │   │   ├── EggVariableRepository.php
│   │   │   ├── EloquentRepository.php
│   │   │   ├── LocationRepository.php
│   │   │   ├── MountRepository.php
│   │   │   ├── NestRepository.php
│   │   │   ├── NodeRepository.php
│   │   │   ├── PermissionRepository.php
│   │   │   ├── RecoveryTokenRepository.php
│   │   │   ├── ScheduleRepository.php
│   │   │   ├── ServerRepository.php
│   │   │   ├── ServerVariableRepository.php
│   │   │   ├── SessionRepository.php
│   │   │   ├── SettingsRepository.php
│   │   │   ├── SubuserRepository.php
│   │   │   ├── TaskRepository.php
│   │   │   └── UserRepository.php
│   │   ├── Repository.php
│   │   └── Wings/
│   │       ├── DaemonBackupRepository.php
│   │       ├── DaemonCommandRepository.php
│   │       ├── DaemonConfigurationRepository.php
│   │       ├── DaemonFileRepository.php
│   │       ├── DaemonPowerRepository.php
│   │       ├── DaemonRepository.php
│   │       ├── DaemonRevocationRepository.php
│   │       ├── DaemonServerRepository.php
│   │       └── DaemonTransferRepository.php
│   ├── Rules/
│   │   ├── Fqdn.php
│   │   └── Username.php
│   ├── Services/
│   │   ├── Acl/
│   │   │   └── Api/
│   │   │       └── AdminAcl.php
│   │   ├── Activity/
│   │   │   ├── ActivityLogBatchService.php
│   │   │   ├── ActivityLogService.php
│   │   │   └── ActivityLogTargetableService.php
│   │   ├── Allocations/
│   │   │   ├── AllocationDeletionService.php
│   │   │   ├── AssignmentService.php
│   │   │   └── FindAssignableAllocationService.php
│   │   ├── Api/
│   │   │   └── KeyCreationService.php
│   │   ├── Backups/
│   │   │   ├── DeleteBackupService.php
│   │   │   ├── DownloadLinkService.php
│   │   │   └── InitiateBackupService.php
│   │   ├── Databases/
│   │   │   ├── DatabaseManagementService.php
│   │   │   ├── DatabasePasswordService.php
│   │   │   ├── DeployServerDatabaseService.php
│   │   │   └── Hosts/
│   │   │       ├── HostCreationService.php
│   │   │       ├── HostDeletionService.php
│   │   │       └── HostUpdateService.php
│   │   ├── Deployment/
│   │   │   ├── AllocationSelectionService.php
│   │   │   └── FindViableNodesService.php
│   │   ├── Eggs/
│   │   │   ├── EggConfigurationService.php
│   │   │   ├── EggCreationService.php
│   │   │   ├── EggDeletionService.php
│   │   │   ├── EggParserService.php
│   │   │   ├── EggUpdateService.php
│   │   │   ├── Scripts/
│   │   │   │   └── InstallScriptService.php
│   │   │   ├── Sharing/
│   │   │   │   ├── EggExporterService.php
│   │   │   │   ├── EggImporterService.php
│   │   │   │   └── EggUpdateImporterService.php
│   │   │   └── Variables/
│   │   │       ├── VariableCreationService.php
│   │   │       └── VariableUpdateService.php
│   │   ├── Helpers/
│   │   │   ├── AssetHashService.php
│   │   │   └── SoftwareVersionService.php
│   │   ├── Locations/
│   │   │   ├── LocationCreationService.php
│   │   │   ├── LocationDeletionService.php
│   │   │   └── LocationUpdateService.php
│   │   ├── Nests/
│   │   │   ├── NestCreationService.php
│   │   │   ├── NestDeletionService.php
│   │   │   └── NestUpdateService.php
│   │   ├── Nodes/
│   │   │   ├── NodeCreationService.php
│   │   │   ├── NodeDeletionService.php
│   │   │   ├── NodeJWTService.php
│   │   │   └── NodeUpdateService.php
│   │   ├── Schedules/
│   │   │   └── ProcessScheduleService.php
│   │   ├── Servers/
│   │   │   ├── BuildModificationService.php
│   │   │   ├── DetailsModificationService.php
│   │   │   ├── EnvironmentService.php
│   │   │   ├── GetUserPermissionsService.php
│   │   │   ├── ReinstallServerService.php
│   │   │   ├── ServerConfigurationStructureService.php
│   │   │   ├── ServerCreationService.php
│   │   │   ├── ServerDeletionService.php
│   │   │   ├── StartupCommandService.php
│   │   │   ├── StartupModificationService.php
│   │   │   ├── SuspensionService.php
│   │   │   └── VariableValidatorService.php
│   │   ├── Subusers/
│   │   │   └── SubuserCreationService.php
│   │   ├── Telemetry/
│   │   │   └── TelemetryCollectionService.php
│   │   └── Users/
│   │       ├── ToggleTwoFactorService.php
│   │       ├── TwoFactorSetupService.php
│   │       ├── UserCreationService.php
│   │       ├── UserDeletionService.php
│   │       └── UserUpdateService.php
│   ├── Traits/
│   │   ├── Commands/
│   │   │   └── EnvironmentWriterTrait.php
│   │   ├── Controllers/
│   │   │   └── JavascriptInjection.php
│   │   ├── Helpers/
│   │   │   └── AvailableLanguages.php
│   │   └── Services/
│   │       ├── HasUserLevels.php
│   │       ├── ReturnsUpdatedModels.php
│   │       └── ValidatesValidationRules.php
│   ├── Transformers/
│   │   └── Api/
│   │       ├── Application/
│   │       │   ├── AllocationTransformer.php
│   │       │   ├── BaseTransformer.php
│   │       │   ├── DatabaseHostTransformer.php
│   │       │   ├── EggTransformer.php
│   │       │   ├── EggVariableTransformer.php
│   │       │   ├── LocationTransformer.php
│   │       │   ├── NestTransformer.php
│   │       │   ├── NodeTransformer.php
│   │       │   ├── ServerDatabaseTransformer.php
│   │       │   ├── ServerTransformer.php
│   │       │   ├── ServerVariableTransformer.php
│   │       │   ├── SubuserTransformer.php
│   │       │   └── UserTransformer.php
│   │       └── Client/
│   │           ├── AccountTransformer.php
│   │           ├── ActivityLogTransformer.php
│   │           ├── AllocationTransformer.php
│   │           ├── ApiKeyTransformer.php
│   │           ├── BackupTransformer.php
│   │           ├── BaseClientTransformer.php
│   │           ├── DatabaseTransformer.php
│   │           ├── EggTransformer.php
│   │           ├── EggVariableTransformer.php
│   │           ├── FileObjectTransformer.php
│   │           ├── ScheduleTransformer.php
│   │           ├── ServerTransformer.php
│   │           ├── StatsTransformer.php
│   │           ├── SubuserTransformer.php
│   │           ├── TaskTransformer.php
│   │           ├── UserSSHKeyTransformer.php
│   │           └── UserTransformer.php
│   └── helpers.php
├── artisan
├── babel.config.js
├── bootstrap/
│   ├── app.php
│   ├── cache/
│   │   └── .gitignore
│   └── tests.php
├── composer.json
├── config/
│   ├── activity.php
│   ├── app.php
│   ├── auth.php
│   ├── backups.php
│   ├── broadcasting.php
│   ├── cache.php
│   ├── compile.php
│   ├── cors.php
│   ├── database.php
│   ├── egg_features/
│   │   └── eula.php
│   ├── filesystems.php
│   ├── fractal.php
│   ├── hashids.php
│   ├── hashing.php
│   ├── http.php
│   ├── icp.php
│   ├── ide-helper.php
│   ├── javascript.php
│   ├── logging.php
│   ├── logo.php
│   ├── mail.php
│   ├── prologue/
│   │   └── alerts.php
│   ├── pterodactyl.php
│   ├── queue.php
│   ├── recaptcha.php
│   ├── sanctum.php
│   ├── services.php
│   ├── session.php
│   ├── trustedproxy.php
│   └── view.php
├── database/
│   ├── .gitignore
│   ├── Factories/
│   │   ├── AllocationFactory.php
│   │   ├── ApiKeyFactory.php
│   │   ├── BackupFactory.php
│   │   ├── DatabaseFactory.php
│   │   ├── DatabaseHostFactory.php
│   │   ├── EggFactory.php
│   │   ├── EggVariableFactory.php
│   │   ├── LocationFactory.php
│   │   ├── NestFactory.php
│   │   ├── NodeFactory.php
│   │   ├── ScheduleFactory.php
│   │   ├── ServerFactory.php
│   │   ├── ServerTransferFactory.php
│   │   ├── SubuserFactory.php
│   │   ├── TaskFactory.php
│   │   ├── UserFactory.php
│   │   └── UserSSHKeyFactory.php
│   ├── Seeders/
│   │   ├── .gitkeep
│   │   ├── DatabaseSeeder.php
│   │   ├── EggSeeder.php
│   │   ├── NestSeeder.php
│   │   └── eggs/
│   │       ├── minecraft/
│   │       │   ├── egg-bungeecord.json
│   │       │   ├── egg-forge-minecraft.json
│   │       │   ├── egg-paper.json
│   │       │   ├── egg-sponge--sponge-vanilla.json
│   │       │   └── egg-vanilla-minecraft.json
│   │       ├── rust/
│   │       │   └── egg-rust.json
│   │       ├── source-engine/
│   │       │   ├── egg-ark--survival-evolved.json
│   │       │   ├── egg-counter--strike--global-offensive.json
│   │       │   ├── egg-custom-source-engine-game.json
│   │       │   ├── egg-garrys-mod.json
│   │       │   ├── egg-insurgency.json
│   │       │   └── egg-team-fortress2.json
│   │       └── voice-servers/
│   │           ├── egg-mumble-server.json
│   │           └── egg-teamspeak3-server.json
│   ├── migrations/
│   │   ├── 2016_01_23_195641_add_allocations_table.php
│   │   ├── 2016_01_23_195851_add_api_keys.php
│   │   ├── 2016_01_23_200044_add_api_permissions.php
│   │   ├── 2016_01_23_200159_add_downloads.php
│   │   ├── 2016_01_23_200421_create_failed_jobs_table.php
│   │   ├── 2016_01_23_200440_create_jobs_table.php
│   │   ├── 2016_01_23_200528_add_locations.php
│   │   ├── 2016_01_23_200648_add_nodes.php
│   │   ├── 2016_01_23_201433_add_password_resets.php
│   │   ├── 2016_01_23_201531_add_permissions.php
│   │   ├── 2016_01_23_201649_add_server_variables.php
│   │   ├── 2016_01_23_201748_add_servers.php
│   │   ├── 2016_01_23_202544_add_service_options.php
│   │   ├── 2016_01_23_202731_add_service_varibles.php
│   │   ├── 2016_01_23_202943_add_services.php
│   │   ├── 2016_01_23_203119_create_settings_table.php
│   │   ├── 2016_01_23_203150_add_subusers.php
│   │   ├── 2016_01_23_203159_add_users.php
│   │   ├── 2016_01_23_203947_create_sessions_table.php
│   │   ├── 2016_01_25_234418_rename_permissions_column.php
│   │   ├── 2016_02_07_172148_add_databases_tables.php
│   │   ├── 2016_02_07_181319_add_database_servers_table.php
│   │   ├── 2016_02_13_154306_add_service_option_default_startup.php
│   │   ├── 2016_02_20_155318_add_unique_service_field.php
│   │   ├── 2016_02_27_163411_add_tasks_table.php
│   │   ├── 2016_02_27_163447_add_tasks_log_table.php
│   │   ├── 2016_03_18_155649_add_nullable_field_lastrun.php
│   │   ├── 2016_08_30_212718_add_ip_alias.php
│   │   ├── 2016_08_30_213301_modify_ip_storage_method.php
│   │   ├── 2016_09_01_193520_add_suspension_for_servers.php
│   │   ├── 2016_09_01_211924_remove_active_column.php
│   │   ├── 2016_09_02_190647_add_sftp_password_storage.php
│   │   ├── 2016_09_04_171338_update_jobs_tables.php
│   │   ├── 2016_09_04_172028_update_failed_jobs_table.php
│   │   ├── 2016_09_04_182835_create_notifications_table.php
│   │   ├── 2016_09_07_163017_add_unique_identifier.php
│   │   ├── 2016_09_14_145945_allow_longer_regex_field.php
│   │   ├── 2016_09_17_194246_add_docker_image_column.php
│   │   ├── 2016_09_21_165554_update_servers_column_name.php
│   │   ├── 2016_09_29_213518_rename_double_insurgency.php
│   │   ├── 2016_10_07_152117_build_api_log_table.php
│   │   ├── 2016_10_14_164802_update_api_keys.php
│   │   ├── 2016_10_23_181719_update_misnamed_bungee.php
│   │   ├── 2016_10_23_193810_add_foreign_keys_servers.php
│   │   ├── 2016_10_23_201624_add_foreign_allocations.php
│   │   ├── 2016_10_23_202222_add_foreign_api_keys.php
│   │   ├── 2016_10_23_202703_add_foreign_api_permissions.php
│   │   ├── 2016_10_23_202953_add_foreign_database_servers.php
│   │   ├── 2016_10_23_203105_add_foreign_databases.php
│   │   ├── 2016_10_23_203335_add_foreign_nodes.php
│   │   ├── 2016_10_23_203522_add_foreign_permissions.php
│   │   ├── 2016_10_23_203857_add_foreign_server_variables.php
│   │   ├── 2016_10_23_204157_add_foreign_service_options.php
│   │   ├── 2016_10_23_204321_add_foreign_service_variables.php
│   │   ├── 2016_10_23_204454_add_foreign_subusers.php
│   │   ├── 2016_10_23_204610_add_foreign_tasks.php
│   │   ├── 2016_11_04_000949_add_ark_service_option_fixed.php
│   │   ├── 2016_11_11_220649_add_pack_support.php
│   │   ├── 2016_11_11_231731_set_service_name_unique.php
│   │   ├── 2016_11_27_142519_add_pack_column.php
│   │   ├── 2016_12_01_173018_add_configurable_upload_limit.php
│   │   ├── 2016_12_02_185206_correct_service_variables.php
│   │   ├── 2017_01_03_150436_fix_misnamed_option_tag.php
│   │   ├── 2017_01_07_154228_create_node_configuration_tokens_table.php
│   │   ├── 2017_01_12_135449_add_more_user_data.php
│   │   ├── 2017_02_02_175548_UpdateColumnNames.php
│   │   ├── 2017_02_03_140948_UpdateNodesTable.php
│   │   ├── 2017_02_03_155554_RenameColumns.php
│   │   ├── 2017_02_05_164123_AdjustColumnNames.php
│   │   ├── 2017_02_05_164516_AdjustColumnNamesForServicePacks.php
│   │   ├── 2017_02_09_174834_SetupPermissionsPivotTable.php
│   │   ├── 2017_02_10_171858_UpdateAPIKeyColumnNames.php
│   │   ├── 2017_03_03_224254_UpdateNodeConfigTokensColumns.php
│   │   ├── 2017_03_05_212803_DeleteServiceExecutableOption.php
│   │   ├── 2017_03_10_162934_AddNewServiceOptionsColumns.php
│   │   ├── 2017_03_10_173607_MigrateToNewServiceSystem.php
│   │   ├── 2017_03_11_215455_ChangeServiceVariablesValidationRules.php
│   │   ├── 2017_03_12_150648_MoveFunctionsFromFileToDatabase.php
│   │   ├── 2017_03_14_175631_RenameServicePacksToSingluarPacks.php
│   │   ├── 2017_03_14_200326_AddLockedStatusToTable.php
│   │   ├── 2017_03_16_181109_ReOrganizeDatabaseServersToDatabaseHost.php
│   │   ├── 2017_03_16_181515_CleanupDatabasesDatabase.php
│   │   ├── 2017_03_18_204953_AddForeignKeyToPacks.php
│   │   ├── 2017_03_31_221948_AddServerDescriptionColumn.php
│   │   ├── 2017_04_02_163232_DropDeletedAtColumnFromServers.php
│   │   ├── 2017_04_15_125021_UpgradeTaskSystem.php
│   │   ├── 2017_04_20_171943_AddScriptsToServiceOptions.php
│   │   ├── 2017_04_21_151432_AddServiceScriptTrackingToServers.php
│   │   ├── 2017_04_27_145300_AddCopyScriptFromColumn.php
│   │   ├── 2017_04_27_223629_AddAbilityToDefineConnectionOverSSLWithDaemonBehindProxy.php
│   │   ├── 2017_05_01_141528_DeleteDownloadTable.php
│   │   ├── 2017_05_01_141559_DeleteNodeConfigurationTable.php
│   │   ├── 2017_06_10_152951_add_external_id_to_users.php
│   │   ├── 2017_06_25_133923_ChangeForeignKeyToBeOnCascadeDelete.php
│   │   ├── 2017_07_08_152806_ChangeUserPermissionsToDeleteOnUserDeletion.php
│   │   ├── 2017_07_08_154416_SetAllocationToReferenceNullOnServerDelete.php
│   │   ├── 2017_07_08_154650_CascadeDeletionWhenAServerOrVariableIsDeleted.php
│   │   ├── 2017_07_24_194433_DeleteTaskWhenParentServerIsDeleted.php
│   │   ├── 2017_08_05_115800_CascadeNullValuesForDatabaseHostWhenNodeIsDeleted.php
│   │   ├── 2017_08_05_144104_AllowNegativeValuesForOverallocation.php
│   │   ├── 2017_08_05_174811_SetAllocationUnqiueUsingMultipleFields.php
│   │   ├── 2017_08_15_214555_CascadeDeletionWhenAParentServiceIsDeleted.php
│   │   ├── 2017_08_18_215428_RemovePackWhenParentServiceOptionIsDeleted.php
│   │   ├── 2017_09_10_225749_RenameTasksTableForStructureRefactor.php
│   │   ├── 2017_09_10_225941_CreateSchedulesTable.php
│   │   ├── 2017_09_10_230309_CreateNewTasksTableForSchedules.php
│   │   ├── 2017_09_11_002938_TransferOldTasksToNewScheduler.php
│   │   ├── 2017_09_13_211810_UpdateOldPermissionsToPointToNewScheduleSystem.php
│   │   ├── 2017_09_23_170933_CreateDaemonKeysTable.php
│   │   ├── 2017_09_23_173628_RemoveDaemonSecretFromServersTable.php
│   │   ├── 2017_09_23_185022_RemoveDaemonSecretFromSubusersTable.php
│   │   ├── 2017_10_02_202000_ChangeServicesToUseAMoreUniqueIdentifier.php
│   │   ├── 2017_10_02_202007_ChangeToABetterUniqueServiceConfiguration.php
│   │   ├── 2017_10_03_233202_CascadeDeletionWhenServiceOptionIsDeleted.php
│   │   ├── 2017_10_06_214026_ServicesToNestsConversion.php
│   │   ├── 2017_10_06_214053_ServiceOptionsToEggsConversion.php
│   │   ├── 2017_10_06_215741_ServiceVariablesToEggVariablesConversion.php
│   │   ├── 2017_10_24_222238_RemoveLegacySFTPInformation.php
│   │   ├── 2017_11_11_161922_Add2FaLastAuthorizationTimeColumn.php
│   │   ├── 2017_11_19_122708_MigratePubPrivFormatToSingleKey.php
│   │   ├── 2017_12_04_184012_DropAllocationsWhenNodeIsDeleted.php
│   │   ├── 2017_12_12_220426_MigrateSettingsTableToNewFormat.php
│   │   ├── 2018_01_01_122821_AllowNegativeValuesForServerSwap.php
│   │   ├── 2018_01_11_213943_AddApiKeyPermissionColumns.php
│   │   ├── 2018_01_13_142012_SetupTableForKeyEncryption.php
│   │   ├── 2018_01_13_145209_AddLastUsedAtColumn.php
│   │   ├── 2018_02_04_145617_AllowTextInUserExternalId.php
│   │   ├── 2018_02_10_151150_remove_unique_index_on_external_id_column.php
│   │   ├── 2018_02_17_134254_ensure_unique_allocation_id_on_servers_table.php
│   │   ├── 2018_02_24_112356_add_external_id_column_to_servers_table.php
│   │   ├── 2018_02_25_160152_remove_default_null_value_on_table.php
│   │   ├── 2018_02_25_160604_define_unique_index_on_users_external_id.php
│   │   ├── 2018_03_01_192831_add_database_and_port_limit_columns_to_servers_table.php
│   │   ├── 2018_03_15_124536_add_description_to_nodes.php
│   │   ├── 2018_05_04_123826_add_maintenance_to_nodes.php
│   │   ├── 2018_09_03_143756_allow_egg_variables_to_have_longer_values.php
│   │   ├── 2018_09_03_144005_allow_server_variables_to_have_longer_values.php
│   │   ├── 2019_03_02_142328_set_allocation_limit_default_null.php
│   │   ├── 2019_03_02_151321_fix_unique_index_to_account_for_host.php
│   │   ├── 2020_03_22_163911_merge_permissions_table_into_subusers.php
│   │   ├── 2020_03_22_164814_drop_permissions_table.php
│   │   ├── 2020_04_03_203624_add_threads_column_to_servers_table.php
│   │   ├── 2020_04_03_230614_create_backups_table.php
│   │   ├── 2020_04_04_131016_add_table_server_transfers.php
│   │   ├── 2020_04_10_141024_store_node_tokens_as_encrypted_value.php
│   │   ├── 2020_04_17_203438_allow_nullable_descriptions.php
│   │   ├── 2020_04_22_055500_add_max_connections_column.php
│   │   ├── 2020_04_26_111208_add_backup_limit_to_servers.php
│   │   ├── 2020_05_20_234655_add_mounts_table.php
│   │   ├── 2020_05_21_192756_add_mount_server_table.php
│   │   ├── 2020_07_02_213612_create_user_recovery_tokens_table.php
│   │   ├── 2020_07_09_201845_add_notes_column_for_allocations.php
│   │   ├── 2020_08_20_205533_add_backup_state_column_to_backups.php
│   │   ├── 2020_08_22_132500_update_bytes_to_unsigned_bigint.php
│   │   ├── 2020_08_23_175331_modify_checksums_column_for_backups.php
│   │   ├── 2020_09_13_110007_drop_packs_from_servers.php
│   │   ├── 2020_09_13_110021_drop_packs_from_api_key_permissions.php
│   │   ├── 2020_09_13_110047_drop_packs_table.php
│   │   ├── 2020_09_13_113503_drop_daemon_key_table.php
│   │   ├── 2020_10_10_165437_change_unique_database_name_to_account_for_server.php
│   │   ├── 2020_10_26_194904_remove_nullable_from_schedule_name_field.php
│   │   ├── 2020_11_02_201014_add_features_column_to_eggs.php
│   │   ├── 2020_12_12_102435_support_multiple_docker_images_and_updates.php
│   │   ├── 2020_12_14_013707_make_successful_nullable_in_server_transfers.php
│   │   ├── 2020_12_17_014330_add_archived_field_to_server_transfers_table.php
│   │   ├── 2020_12_24_092449_make_allocation_fields_json.php
│   │   ├── 2020_12_26_184914_add_upload_id_column_to_backups_table.php
│   │   ├── 2021_01_10_153937_add_file_denylist_to_egg_configs.php
│   │   ├── 2021_01_13_013420_add_cron_month.php
│   │   ├── 2021_01_17_102401_create_audit_logs_table.php
│   │   ├── 2021_01_17_152623_add_generic_server_status_column.php
│   │   ├── 2021_01_26_210502_update_file_denylist_to_json.php
│   │   ├── 2021_02_23_205021_add_index_for_server_and_action.php
│   │   ├── 2021_02_23_212657_make_sftp_port_unsigned_int.php
│   │   ├── 2021_03_21_104718_force_cron_month_field_to_have_value_if_missing.php
│   │   ├── 2021_05_01_092457_add_continue_on_failure_option_to_tasks.php
│   │   ├── 2021_05_01_092523_add_only_run_when_server_online_option_to_schedules.php
│   │   ├── 2021_05_03_201016_add_support_for_locking_a_backup.php
│   │   ├── 2021_07_12_013420_remove_userinteraction.php
│   │   ├── 2021_07_17_211512_create_user_ssh_keys_table.php
│   │   ├── 2021_08_03_210600_change_successful_field_to_default_to_false_on_backups_table.php
│   │   ├── 2021_08_21_175111_add_foreign_keys_to_mount_node_table.php
│   │   ├── 2021_08_21_175118_add_foreign_keys_to_mount_server_table.php
│   │   ├── 2021_08_21_180921_add_foreign_keys_to_egg_mount_table.php
│   │   ├── 2022_01_25_030847_drop_google_analytics.php
│   │   ├── 2022_05_07_165334_migrate_egg_images_array_to_new_format.php
│   │   ├── 2022_05_28_135717_create_activity_logs_table.php
│   │   ├── 2022_05_29_140349_create_activity_log_actors_table.php
│   │   ├── 2022_06_18_112822_track_api_key_usage_for_activity_events.php
│   │   ├── 2022_08_16_214400_add_force_outgoing_ip_column_to_eggs_table.php
│   │   ├── 2022_08_16_230204_add_installed_at_column_to_servers_table.php
│   │   ├── 2022_12_12_213937_update_mail_settings_to_new_format.php
│   │   ├── 2023_01_24_210051_add_uuid_column_to_failed_jobs_table.php
│   │   ├── 2023_02_23_191004_add_expires_at_column_to_api_keys_table.php
│   │   └── 2024_07_13_091852_clear_unused_allocation_notes.php
│   └── schema/
│       └── mysql-schema.sql
├── docker-compose.example.yml
├── flake.nix
├── index.html
├── jest.config.js
├── package.json
├── phpstan.neon
├── phpunit.xml
├── postcss.config.js
├── public/
│   ├── .gitignore
│   ├── .htaccess
│   ├── favicons/
│   │   ├── browserconfig.xml
│   │   └── manifest.json
│   ├── index.php
│   ├── js/
│   │   ├── autocomplete.js
│   │   ├── keyboard.polyfill.js
│   │   └── laroute.js
│   ├── robots.txt
│   └── themes/
│       └── pterodactyl/
│           ├── css/
│           │   ├── checkbox.css
│           │   ├── pterodactyl.css
│           │   └── terminal.css
│           ├── js/
│           │   ├── admin/
│           │   │   ├── functions.js
│           │   │   ├── new-server.js
│           │   │   └── server/
│           │   │       └── transfer.js
│           │   └── plugins/
│           │       └── minecraft/
│           │           └── eula.js
│           └── vendor/
│               ├── ace/
│               │   ├── ace.js
│               │   ├── ext-elastic_tabstops_lite.js
│               │   ├── ext-error_marker.js
│               │   ├── ext-linking.js
│               │   ├── ext-modelist.js
│               │   ├── ext-old_ie.js
│               │   ├── ext-searchbox.js
│               │   ├── ext-settings_menu.js
│               │   ├── ext-spellcheck.js
│               │   ├── ext-split.js
│               │   ├── ext-static_highlight.js
│               │   ├── ext-textarea.js
│               │   ├── ext-themelist.js
│               │   ├── ext-whitespace.js
│               │   ├── keybinding-emacs.js
│               │   ├── keybinding-vim.js
│               │   ├── mode-assembly_x86.js
│               │   ├── mode-c_cpp.js
│               │   ├── mode-coffee.js
│               │   ├── mode-csharp.js
│               │   ├── mode-css.js
│               │   ├── mode-golang.js
│               │   ├── mode-haml.js
│               │   ├── mode-html.js
│               │   ├── mode-ini.js
│               │   ├── mode-java.js
│               │   ├── mode-javascript.js
│               │   ├── mode-json.js
│               │   ├── mode-kotlin.js
│               │   ├── mode-lua.js
│               │   ├── mode-markdown.js
│               │   ├── mode-mysql.js
│               │   ├── mode-objectivec.js
│               │   ├── mode-perl.js
│               │   ├── mode-php.js
│               │   ├── mode-plain_text.js
│               │   ├── mode-properties.js
│               │   ├── mode-python.js
│               │   ├── mode-ruby.js
│               │   ├── mode-rust.js
│               │   ├── mode-sh.js
│               │   ├── mode-smarty.js
│               │   ├── mode-sql.js
│               │   ├── mode-xml.js
│               │   ├── mode-yaml.js
│               │   ├── theme-chrome.js
│               │   ├── worker-css.js
│               │   ├── worker-html.js
│               │   ├── worker-javascript.js
│               │   ├── worker-json.js
│               │   ├── worker-lua.js
│               │   ├── worker-php.js
│               │   └── worker-xml.js
│               ├── ansi/
│               │   └── ansi_up.js
│               ├── jquery/
│               │   └── jquery.js
│               ├── lodash/
│               │   └── lodash.js
│               ├── mousewheel/
│               │   └── jquery.mousewheel-min.js
│               └── particlesjs/
│                   └── particles.json
├── resources/
│   ├── lang/
│   │   ├── en/
│   │   │   ├── activity.php
│   │   │   ├── admin/
│   │   │   │   ├── nests.php
│   │   │   │   ├── node.php
│   │   │   │   ├── server.php
│   │   │   │   └── user.php
│   │   │   ├── auth.php
│   │   │   ├── command/
│   │   │   │   └── messages.php
│   │   │   ├── dashboard/
│   │   │   │   ├── account.php
│   │   │   │   └── index.php
│   │   │   ├── exceptions.php
│   │   │   ├── pagination.php
│   │   │   ├── passwords.php
│   │   │   ├── server/
│   │   │   │   └── users.php
│   │   │   ├── strings.php
│   │   │   └── validation.php
│   │   └── zh/
│   │       ├── activity.php
│   │       ├── admin/
│   │       │   ├── nests.php
│   │       │   ├── node.php
│   │       │   ├── server.php
│   │       │   └── user.php
│   │       ├── auth.php
│   │       ├── command/
│   │       │   └── messages.php
│   │       ├── dashboard/
│   │       │   ├── account.php
│   │       │   └── index.php
│   │       ├── exceptions.php
│   │       ├── pagination.php
│   │       ├── passwords.php
│   │       ├── server/
│   │       │   └── users.php
│   │       ├── strings.php
│   │       └── validation.php
│   ├── scripts/
│   │   ├── TransitionRouter.tsx
│   │   ├── __mocks__/
│   │   │   └── file.ts
│   │   ├── api/
│   │   │   ├── account/
│   │   │   │   ├── activity.ts
│   │   │   │   ├── createApiKey.ts
│   │   │   │   ├── deleteApiKey.ts
│   │   │   │   ├── disableAccountTwoFactor.ts
│   │   │   │   ├── enableAccountTwoFactor.ts
│   │   │   │   ├── getApiKeys.ts
│   │   │   │   ├── getTwoFactorTokenData.ts
│   │   │   │   ├── ssh-keys.ts
│   │   │   │   ├── updateAccountEmail.ts
│   │   │   │   └── updateAccountPassword.ts
│   │   │   ├── auth/
│   │   │   │   ├── login.ts
│   │   │   │   ├── loginCheckpoint.ts
│   │   │   │   ├── performPasswordReset.ts
│   │   │   │   └── requestPasswordResetEmail.ts
│   │   │   ├── definitions/
│   │   │   │   ├── helpers.ts
│   │   │   │   ├── index.d.ts
│   │   │   │   └── user/
│   │   │   │       ├── index.ts
│   │   │   │       ├── models.d.ts
│   │   │   │       └── transformers.ts
│   │   │   ├── getServers.ts
│   │   │   ├── getSystemPermissions.ts
│   │   │   ├── http.ts
│   │   │   ├── interceptors.ts
│   │   │   ├── server/
│   │   │   │   ├── activity.ts
│   │   │   │   ├── backups/
│   │   │   │   │   ├── createServerBackup.ts
│   │   │   │   │   ├── deleteBackup.ts
│   │   │   │   │   ├── getBackupDownloadUrl.ts
│   │   │   │   │   └── index.ts
│   │   │   │   ├── databases/
│   │   │   │   │   ├── createServerDatabase.ts
│   │   │   │   │   ├── deleteServerDatabase.ts
│   │   │   │   │   ├── getServerDatabases.ts
│   │   │   │   │   └── rotateDatabasePassword.ts
│   │   │   │   ├── files/
│   │   │   │   │   ├── chmodFiles.ts
│   │   │   │   │   ├── compressFiles.ts
│   │   │   │   │   ├── copyFile.ts
│   │   │   │   │   ├── createDirectory.ts
│   │   │   │   │   ├── decompressFiles.ts
│   │   │   │   │   ├── deleteFiles.ts
│   │   │   │   │   ├── getFileContents.ts
│   │   │   │   │   ├── getFileDownloadUrl.ts
│   │   │   │   │   ├── getFileUploadUrl.ts
│   │   │   │   │   ├── loadDirectory.ts
│   │   │   │   │   ├── renameFiles.ts
│   │   │   │   │   └── saveFileContents.ts
│   │   │   │   ├── getServer.ts
│   │   │   │   ├── getServerResourceUsage.ts
│   │   │   │   ├── getWebsocketToken.ts
│   │   │   │   ├── network/
│   │   │   │   │   ├── createServerAllocation.ts
│   │   │   │   │   ├── deleteServerAllocation.ts
│   │   │   │   │   ├── setPrimaryServerAllocation.ts
│   │   │   │   │   └── setServerAllocationNotes.ts
│   │   │   │   ├── reinstallServer.ts
│   │   │   │   ├── renameServer.ts
│   │   │   │   ├── schedules/
│   │   │   │   │   ├── createOrUpdateSchedule.ts
│   │   │   │   │   ├── createOrUpdateScheduleTask.ts
│   │   │   │   │   ├── deleteSchedule.ts
│   │   │   │   │   ├── deleteScheduleTask.ts
│   │   │   │   │   ├── getServerSchedule.ts
│   │   │   │   │   ├── getServerSchedules.ts
│   │   │   │   │   └── triggerScheduleExecution.ts
│   │   │   │   ├── setSelectedDockerImage.ts
│   │   │   │   ├── types.d.ts
│   │   │   │   ├── updateStartupEgg.ts
│   │   │   │   ├── updateStartupVariable.ts
│   │   │   │   └── users/
│   │   │   │       ├── createOrUpdateSubuser.ts
│   │   │   │       ├── deleteSubuser.ts
│   │   │   │       └── getServerSubusers.ts
│   │   │   ├── swr/
│   │   │   │   ├── getServerAllocations.ts
│   │   │   │   ├── getServerBackups.ts
│   │   │   │   └── getServerStartup.ts
│   │   │   └── transformers.ts
│   │   ├── assets/
│   │   │   ├── css/
│   │   │   │   └── GlobalStylesheet.ts
│   │   │   └── tailwind.css
│   │   ├── components/
│   │   │   ├── App.tsx
│   │   │   ├── Avatar.tsx
│   │   │   ├── FlashMessageRender.tsx
│   │   │   ├── MessageBox.tsx
│   │   │   ├── NavigationBar.tsx
│   │   │   ├── auth/
│   │   │   │   ├── ForgotPasswordContainer.tsx
│   │   │   │   ├── LoginCheckpointContainer.tsx
│   │   │   │   ├── LoginContainer.tsx
│   │   │   │   ├── LoginFormContainer.tsx
│   │   │   │   └── ResetPasswordContainer.tsx
│   │   │   ├── dashboard/
│   │   │   │   ├── AccountApiContainer.tsx
│   │   │   │   ├── AccountOverviewContainer.tsx
│   │   │   │   ├── ApiKeyModal.tsx
│   │   │   │   ├── DashboardContainer.tsx
│   │   │   │   ├── ServerRow.tsx
│   │   │   │   ├── activity/
│   │   │   │   │   └── ActivityLogContainer.tsx
│   │   │   │   ├── forms/
│   │   │   │   │   ├── ConfigureTwoFactorForm.tsx
│   │   │   │   │   ├── CreateApiKeyForm.tsx
│   │   │   │   │   ├── DisableTOTPDialog.tsx
│   │   │   │   │   ├── RecoveryTokensDialog.tsx
│   │   │   │   │   ├── SetupTOTPDialog.tsx
│   │   │   │   │   ├── UpdateEmailAddressForm.tsx
│   │   │   │   │   └── UpdatePasswordForm.tsx
│   │   │   │   ├── search/
│   │   │   │   │   ├── SearchContainer.tsx
│   │   │   │   │   └── SearchModal.tsx
│   │   │   │   └── ssh/
│   │   │   │       ├── AccountSSHContainer.tsx
│   │   │   │       ├── CreateSSHKeyForm.tsx
│   │   │   │       └── DeleteSSHKeyButton.tsx
│   │   │   ├── elements/
│   │   │   │   ├── AuthenticatedRoute.tsx
│   │   │   │   ├── Button.tsx
│   │   │   │   ├── Can.tsx
│   │   │   │   ├── Checkbox.tsx
│   │   │   │   ├── Code.tsx
│   │   │   │   ├── CodemirrorEditor.tsx
│   │   │   │   ├── ConfirmationModal.tsx
│   │   │   │   ├── ContentBox.tsx
│   │   │   │   ├── ContentContainer.tsx
│   │   │   │   ├── CopyOnClick.tsx
│   │   │   │   ├── DropdownMenu.tsx
│   │   │   │   ├── ErrorBoundary.tsx
│   │   │   │   ├── Fade.tsx
│   │   │   │   ├── Field.tsx
│   │   │   │   ├── FormikFieldWrapper.tsx
│   │   │   │   ├── FormikSwitch.tsx
│   │   │   │   ├── GreyRowBox.tsx
│   │   │   │   ├── Icon.tsx
│   │   │   │   ├── Input.tsx
│   │   │   │   ├── InputError.tsx
│   │   │   │   ├── InputSpinner.tsx
│   │   │   │   ├── Label.tsx
│   │   │   │   ├── Modal.tsx
│   │   │   │   ├── PageContentBlock.tsx
│   │   │   │   ├── Pagination.tsx
│   │   │   │   ├── PermissionRoute.tsx
│   │   │   │   ├── Portal.tsx
│   │   │   │   ├── ProgressBar.tsx
│   │   │   │   ├── ScreenBlock.tsx
│   │   │   │   ├── Select.tsx
│   │   │   │   ├── ServerContentBlock.tsx
│   │   │   │   ├── Spinner.tsx
│   │   │   │   ├── SpinnerOverlay.tsx
│   │   │   │   ├── SubNavigation.tsx
│   │   │   │   ├── Switch.tsx
│   │   │   │   ├── TitledGreyBox.tsx
│   │   │   │   ├── Translate.tsx
│   │   │   │   ├── activity/
│   │   │   │   │   ├── ActivityLogEntry.tsx
│   │   │   │   │   ├── ActivityLogMetaButton.tsx
│   │   │   │   │   └── style.module.css
│   │   │   │   ├── alert/
│   │   │   │   │   ├── Alert.tsx
│   │   │   │   │   └── index.ts
│   │   │   │   ├── button/
│   │   │   │   │   ├── Button.tsx
│   │   │   │   │   ├── index.ts
│   │   │   │   │   ├── style.module.css
│   │   │   │   │   └── types.ts
│   │   │   │   ├── dialog/
│   │   │   │   │   ├── ConfirmationDialog.tsx
│   │   │   │   │   ├── Dialog.tsx
│   │   │   │   │   ├── DialogFooter.tsx
│   │   │   │   │   ├── DialogIcon.tsx
│   │   │   │   │   ├── context.ts
│   │   │   │   │   ├── index.ts
│   │   │   │   │   ├── style.module.css
│   │   │   │   │   └── types.d.ts
│   │   │   │   ├── dropdown/
│   │   │   │   │   ├── Dropdown.tsx
│   │   │   │   │   ├── DropdownButton.tsx
│   │   │   │   │   ├── DropdownItem.tsx
│   │   │   │   │   ├── index.ts
│   │   │   │   │   └── style.module.css
│   │   │   │   ├── inputs/
│   │   │   │   │   ├── Checkbox.tsx
│   │   │   │   │   ├── InputField.tsx
│   │   │   │   │   ├── index.ts
│   │   │   │   │   └── styles.module.css
│   │   │   │   ├── table/
│   │   │   │   │   └── PaginationFooter.tsx
│   │   │   │   ├── tooltip/
│   │   │   │   │   └── Tooltip.tsx
│   │   │   │   └── transitions/
│   │   │   │       ├── FadeTransition.tsx
│   │   │   │       └── index.ts
│   │   │   ├── history.ts
│   │   │   ├── server/
│   │   │   │   ├── ConflictStateRenderer.tsx
│   │   │   │   ├── InstallListener.tsx
│   │   │   │   ├── ServerActivityLogContainer.tsx
│   │   │   │   ├── TransferListener.tsx
│   │   │   │   ├── UptimeDuration.tsx
│   │   │   │   ├── WebsocketHandler.tsx
│   │   │   │   ├── backups/
│   │   │   │   │   ├── BackupContainer.tsx
│   │   │   │   │   ├── BackupContextMenu.tsx
│   │   │   │   │   ├── BackupRow.tsx
│   │   │   │   │   └── CreateBackupButton.tsx
│   │   │   │   ├── console/
│   │   │   │   │   ├── ChartBlock.tsx
│   │   │   │   │   ├── Console.tsx
│   │   │   │   │   ├── PowerButtons.tsx
│   │   │   │   │   ├── ServerConsoleContainer.tsx
│   │   │   │   │   ├── ServerDetailsBlock.tsx
│   │   │   │   │   ├── StatBlock.tsx
│   │   │   │   │   ├── StatGraphs.tsx
│   │   │   │   │   ├── chart.ts
│   │   │   │   │   └── style.module.css
│   │   │   │   ├── databases/
│   │   │   │   │   ├── CreateDatabaseButton.tsx
│   │   │   │   │   ├── DatabaseRow.tsx
│   │   │   │   │   ├── DatabasesContainer.tsx
│   │   │   │   │   └── RotatePasswordButton.tsx
│   │   │   │   ├── events.ts
│   │   │   │   ├── features/
│   │   │   │   │   ├── Features.tsx
│   │   │   │   │   ├── GSLTokenModalFeature.tsx
│   │   │   │   │   ├── HytaleOauthRequireFeature.tsx
│   │   │   │   │   ├── JavaVersionModalFeature.tsx
│   │   │   │   │   ├── PIDLimitModalFeature.tsx
│   │   │   │   │   ├── SteamDiskSpaceFeature.tsx
│   │   │   │   │   ├── eula/
│   │   │   │   │   │   └── EulaModalFeature.tsx
│   │   │   │   │   └── index.ts
│   │   │   │   ├── files/
│   │   │   │   │   ├── ChmodFileModal.tsx
│   │   │   │   │   ├── FileDropdownMenu.tsx
│   │   │   │   │   ├── FileEditContainer.tsx
│   │   │   │   │   ├── FileManagerBreadcrumbs.tsx
│   │   │   │   │   ├── FileManagerContainer.tsx
│   │   │   │   │   ├── FileManagerStatus.tsx
│   │   │   │   │   ├── FileNameModal.tsx
│   │   │   │   │   ├── FileObjectRow.tsx
│   │   │   │   │   ├── MassActionsBar.tsx
│   │   │   │   │   ├── NewDirectoryButton.tsx
│   │   │   │   │   ├── RenameFileModal.tsx
│   │   │   │   │   ├── SelectFileCheckbox.tsx
│   │   │   │   │   ├── UploadButton.tsx
│   │   │   │   │   └── style.module.css
│   │   │   │   ├── network/
│   │   │   │   │   ├── AllocationRow.tsx
│   │   │   │   │   ├── DeleteAllocationButton.tsx
│   │   │   │   │   └── NetworkContainer.tsx
│   │   │   │   ├── schedules/
│   │   │   │   │   ├── DeleteScheduleButton.tsx
│   │   │   │   │   ├── EditScheduleModal.tsx
│   │   │   │   │   ├── NewTaskButton.tsx
│   │   │   │   │   ├── RunScheduleButton.tsx
│   │   │   │   │   ├── ScheduleCheatsheetCards.tsx
│   │   │   │   │   ├── ScheduleContainer.tsx
│   │   │   │   │   ├── ScheduleCronRow.tsx
│   │   │   │   │   ├── ScheduleEditContainer.tsx
│   │   │   │   │   ├── ScheduleRow.tsx
│   │   │   │   │   ├── ScheduleSimpleForm.tsx
│   │   │   │   │   ├── ScheduleTaskRow.tsx
│   │   │   │   │   └── TaskDetailsModal.tsx
│   │   │   │   ├── settings/
│   │   │   │   │   ├── ReinstallServerBox.tsx
│   │   │   │   │   ├── RenameServerBox.tsx
│   │   │   │   │   └── SettingsContainer.tsx
│   │   │   │   ├── startup/
│   │   │   │   │   ├── StartupContainer.tsx
│   │   │   │   │   └── VariableBox.tsx
│   │   │   │   └── users/
│   │   │   │       ├── AddSubuserButton.tsx
│   │   │   │       ├── EditSubuserModal.tsx
│   │   │   │       ├── PermissionRow.tsx
│   │   │   │       ├── PermissionTitleBox.tsx
│   │   │   │       ├── RemoveSubuserButton.tsx
│   │   │   │       ├── UserRow.tsx
│   │   │   │       └── UsersContainer.tsx
│   │   │   └── types.ts
│   │   ├── context/
│   │   │   └── ModalContext.ts
│   │   ├── easy-peasy.d.ts
│   │   ├── globals.d.ts
│   │   ├── helpers.ts
│   │   ├── hoc/
│   │   │   ├── RequireServerPermission.tsx
│   │   │   ├── asDialog.tsx
│   │   │   └── asModal.tsx
│   │   ├── i18n.ts
│   │   ├── index.tsx
│   │   ├── lib/
│   │   │   ├── formatters.spec.ts
│   │   │   ├── formatters.ts
│   │   │   ├── helpers.spec.ts
│   │   │   ├── helpers.ts
│   │   │   ├── objects.spec.ts
│   │   │   ├── objects.ts
│   │   │   ├── strings.spec.ts
│   │   │   └── strings.ts
│   │   ├── macros.d.ts
│   │   ├── modes.ts
│   │   ├── plugins/
│   │   │   ├── Websocket.ts
│   │   │   ├── XtermScrollDownHelperAddon.ts
│   │   │   ├── useDeepCompareEffect.ts
│   │   │   ├── useDeepCompareMemo.ts
│   │   │   ├── useDeepMemoize.ts
│   │   │   ├── useEventListener.ts
│   │   │   ├── useFileManagerSwr.ts
│   │   │   ├── useFilteredObject.ts
│   │   │   ├── useFlash.ts
│   │   │   ├── useLocationHash.ts
│   │   │   ├── usePermissions.ts
│   │   │   ├── usePersistedState.ts
│   │   │   ├── useSWRKey.ts
│   │   │   └── useWebsocketEvent.ts
│   │   ├── routers/
│   │   │   ├── AuthenticationRouter.tsx
│   │   │   ├── DashboardRouter.tsx
│   │   │   ├── ServerRouter.tsx
│   │   │   └── routes.ts
│   │   ├── setup-tests.ts
│   │   ├── state/
│   │   │   ├── flashes.ts
│   │   │   ├── hooks.ts
│   │   │   ├── index.ts
│   │   │   ├── permissions.ts
│   │   │   ├── progress.ts
│   │   │   ├── server/
│   │   │   │   ├── databases.ts
│   │   │   │   ├── files.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── schedules.ts
│   │   │   │   ├── socket.ts
│   │   │   │   └── subusers.ts
│   │   │   ├── settings.ts
│   │   │   └── user.ts
│   │   └── theme.ts
│   └── views/
│       ├── admin/
│       │   ├── api/
│       │   │   ├── index.blade.php
│       │   │   └── new.blade.php
│       │   ├── databases/
│       │   │   ├── index.blade.php
│       │   │   └── view.blade.php
│       │   ├── eggs/
│       │   │   ├── new.blade.php
│       │   │   ├── scripts.blade.php
│       │   │   ├── variables.blade.php
│       │   │   └── view.blade.php
│       │   ├── index.blade.php
│       │   ├── locations/
│       │   │   ├── index.blade.php
│       │   │   └── view.blade.php
│       │   ├── mounts/
│       │   │   ├── index.blade.php
│       │   │   └── view.blade.php
│       │   ├── nests/
│       │   │   ├── index.blade.php
│       │   │   ├── new.blade.php
│       │   │   └── view.blade.php
│       │   ├── nodes/
│       │   │   ├── index.blade.php
│       │   │   ├── new.blade.php
│       │   │   └── view/
│       │   │       ├── allocation.blade.php
│       │   │       ├── configuration.blade.php
│       │   │       ├── index.blade.php
│       │   │       ├── servers.blade.php
│       │   │       └── settings.blade.php
│       │   ├── servers/
│       │   │   ├── index.blade.php
│       │   │   ├── new.blade.php
│       │   │   ├── partials/
│       │   │   │   └── navigation.blade.php
│       │   │   └── view/
│       │   │       ├── build.blade.php
│       │   │       ├── database.blade.php
│       │   │       ├── delete.blade.php
│       │   │       ├── details.blade.php
│       │   │       ├── index.blade.php
│       │   │       ├── manage.blade.php
│       │   │       ├── mounts.blade.php
│       │   │       └── startup.blade.php
│       │   ├── settings/
│       │   │   ├── advanced.blade.php
│       │   │   ├── index.blade.php
│       │   │   └── mail.blade.php
│       │   └── users/
│       │       ├── index.blade.php
│       │       ├── new.blade.php
│       │       └── view.blade.php
│       ├── layouts/
│       │   ├── admin.blade.php
│       │   └── scripts.blade.php
│       ├── partials/
│       │   ├── admin/
│       │   │   └── settings/
│       │   │       ├── nav.blade.php
│       │   │       └── notice.blade.php
│       │   └── schedules/
│       │       └── task-template.blade.php
│       ├── templates/
│       │   ├── auth/
│       │   │   └── core.blade.php
│       │   ├── base/
│       │   │   └── core.blade.php
│       │   └── wrapper.blade.php
│       └── vendor/
│           ├── notifications/
│           │   ├── email-plain.blade.php
│           │   └── email.blade.php
│           └── pagination/
│               └── default.blade.php
├── routes/
│   ├── admin.php
│   ├── api-application.php
│   ├── api-client.php
│   ├── api-remote.php
│   ├── auth.php
│   └── base.php
├── shell.nix
├── storage/
│   ├── app/
│   │   └── .gitignore
│   ├── clockwork/
│   │   └── .gitignore
│   └── logs/
│       └── .gitignore
├── tailwind.config.js
├── tests/
│   ├── Assertions/
│   │   ├── AssertsActivityLogged.php
│   │   └── MiddlewareAttributeAssertionsTrait.php
│   ├── Integration/
│   │   ├── Api/
│   │   │   ├── Application/
│   │   │   │   ├── ApplicationApiIntegrationTestCase.php
│   │   │   │   ├── Location/
│   │   │   │   │   └── LocationControllerTest.php
│   │   │   │   ├── Nests/
│   │   │   │   │   ├── EggControllerTest.php
│   │   │   │   │   └── NestControllerTest.php
│   │   │   │   ├── Nodes/
│   │   │   │   │   └── NodeController/
│   │   │   │   │       └── UpdateNodeTest.php
│   │   │   │   └── Users/
│   │   │   │       ├── ExternalUserControllerTest.php
│   │   │   │       └── UserControllerTest.php
│   │   │   ├── Client/
│   │   │   │   ├── AccountControllerTest.php
│   │   │   │   ├── ApiKeyControllerTest.php
│   │   │   │   ├── ClientApiIntegrationTestCase.php
│   │   │   │   ├── ClientControllerTest.php
│   │   │   │   ├── SSHKeyControllerTest.php
│   │   │   │   ├── Server/
│   │   │   │   │   ├── Allocation/
│   │   │   │   │   │   ├── AllocationAuthorizationTest.php
│   │   │   │   │   │   ├── CreateNewAllocationTest.php
│   │   │   │   │   │   └── DeleteAllocationTest.php
│   │   │   │   │   ├── Backup/
│   │   │   │   │   │   ├── BackupAuthorizationTest.php
│   │   │   │   │   │   └── DeleteBackupTest.php
│   │   │   │   │   ├── CommandControllerTest.php
│   │   │   │   │   ├── Database/
│   │   │   │   │   │   └── DatabaseAuthorizationTest.php
│   │   │   │   │   ├── Files/
│   │   │   │   │   │   └── CompressFilesTest.php
│   │   │   │   │   ├── NetworkAllocationControllerTest.php
│   │   │   │   │   ├── PowerControllerTest.php
│   │   │   │   │   ├── ResourceUtilizationControllerTest.php
│   │   │   │   │   ├── Schedule/
│   │   │   │   │   │   ├── CreateServerScheduleTest.php
│   │   │   │   │   │   ├── DeleteServerScheduleTest.php
│   │   │   │   │   │   ├── ExecuteScheduleTest.php
│   │   │   │   │   │   ├── GetServerSchedulesTest.php
│   │   │   │   │   │   ├── ScheduleAuthorizationTest.php
│   │   │   │   │   │   └── UpdateServerScheduleTest.php
│   │   │   │   │   ├── ScheduleTask/
│   │   │   │   │   │   ├── CreateServerScheduleTaskTest.php
│   │   │   │   │   │   └── DeleteScheduleTaskTest.php
│   │   │   │   │   ├── SettingsControllerTest.php
│   │   │   │   │   ├── Startup/
│   │   │   │   │   │   ├── GetStartupAndVariablesTest.php
│   │   │   │   │   │   └── UpdateStartupVariableTest.php
│   │   │   │   │   ├── Subuser/
│   │   │   │   │   │   ├── CreateServerSubuserTest.php
│   │   │   │   │   │   ├── DeleteSubuserTest.php
│   │   │   │   │   │   ├── SubuserAuthorizationTest.php
│   │   │   │   │   │   └── UpdateSubuserTest.php
│   │   │   │   │   └── WebsocketControllerTest.php
│   │   │   │   └── TwoFactorControllerTest.php
│   │   │   └── Remote/
│   │   │       ├── ServerTransferControllerTest.php
│   │   │       └── SftpAuthenticationControllerTest.php
│   │   ├── Http/
│   │   │   ├── Controllers/
│   │   │   │   ├── Admin/
│   │   │   │   │   └── UserController/
│   │   │   │   │       └── DeleteUserTest.php
│   │   │   │   └── Auth/
│   │   │   │       └── LoginCheckpointControllerTest.php
│   │   │   └── HttpTestCase.php
│   │   ├── IntegrationTestCase.php
│   │   ├── Jobs/
│   │   │   ├── RevokeSftpAccessJobTest.php
│   │   │   └── Schedule/
│   │   │       └── RunTaskJobTest.php
│   │   ├── Services/
│   │   │   ├── Allocations/
│   │   │   │   └── FindAssignableAllocationServiceTest.php
│   │   │   ├── Backups/
│   │   │   │   └── DeleteBackupServiceTest.php
│   │   │   ├── Databases/
│   │   │   │   ├── DatabaseManagementServiceTest.php
│   │   │   │   └── DeployServerDatabaseServiceTest.php
│   │   │   ├── Deployment/
│   │   │   │   └── FindViableNodesServiceTest.php
│   │   │   ├── Schedules/
│   │   │   │   └── ProcessScheduleServiceTest.php
│   │   │   ├── Servers/
│   │   │   │   ├── BuildModificationServiceTest.php
│   │   │   │   ├── ServerCreationServiceTest.php
│   │   │   │   ├── ServerDeletionServiceTest.php
│   │   │   │   ├── StartupModificationServiceTest.php
│   │   │   │   ├── SuspensionServiceTest.php
│   │   │   │   └── VariableValidatorServiceTest.php
│   │   │   └── Users/
│   │   │       └── UserDeletionServiceTest.php
│   │   └── TestResponse.php
│   ├── TestCase.php
│   ├── Traits/
│   │   ├── Http/
│   │   │   ├── IntegrationJsonRequestAssertions.php
│   │   │   ├── MocksMiddlewareClosure.php
│   │   │   └── RequestMockHelpers.php
│   │   ├── Integration/
│   │   │   └── CreatesTestModels.php
│   │   ├── MocksPdoConnection.php
│   │   ├── MocksRequestException.php
│   │   └── MocksUuids.php
│   └── Unit/
│       ├── Helpers/
│       │   ├── EnvironmentWriterTraitTest.php
│       │   └── IsDigitTest.php
│       ├── Http/
│       │   └── Middleware/
│       │       ├── AdminAuthenticateTest.php
│       │       ├── Api/
│       │       │   ├── Application/
│       │       │   │   └── AuthenticateUserTest.php
│       │       │   └── Daemon/
│       │       │       └── DaemonAuthenticateTest.php
│       │       ├── LanguageMiddlewareTest.php
│       │       ├── MaintenanceMiddlewareTest.php
│       │       ├── MiddlewareTestCase.php
│       │       └── RedirectIfAuthenticatedTest.php
│       ├── Rules/
│       │   └── UsernameTest.php
│       └── Services/
│           └── Acl/
│               └── Api/
│                   └── AdminAclTest.php
├── tsconfig.json
└── webpack.config.js
Download .txt
Showing preview only (474K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (4743 symbols across 1058 files)

FILE: app/Console/Commands/Environment/AppSettingsCommand.php
  class AppSettingsCommand (line 9) | class AppSettingsCommand extends Command
    method __construct (line 54) | public function __construct(private Kernel $console)
    method handle (line 64) | public function handle(): int
    method checkForRedis (line 144) | private function checkForRedis()

FILE: app/Console/Commands/Environment/DatabaseSettingsCommand.php
  class DatabaseSettingsCommand (line 10) | class DatabaseSettingsCommand extends Command
    method __construct (line 28) | public function __construct(private DatabaseManager $database, private...
    method handle (line 38) | public function handle(): int
    method testMySQLConnection (line 97) | private function testMySQLConnection()

FILE: app/Console/Commands/Environment/EmailSettingsCommand.php
  class EmailSettingsCommand (line 9) | class EmailSettingsCommand extends Command
    method __construct (line 31) | public function __construct(private ConfigRepository $config)
    method handle (line 41) | public function handle()
    method setupSmtpDriverVariables (line 79) | private function setupSmtpDriverVariables()
    method setupMailgunDriverVariables (line 110) | private function setupMailgunDriverVariables()
    method setupMandrillDriverVariables (line 131) | private function setupMandrillDriverVariables()
    method setupPostmarkDriverVariables (line 142) | private function setupPostmarkDriverVariables()

FILE: app/Console/Commands/InfoCommand.php
  class InfoCommand (line 9) | class InfoCommand extends Command
    method __construct (line 18) | public function __construct(private ConfigRepository $config, private ...
    method handle (line 26) | public function handle()
    method formatText (line 77) | private function formatText(string $value, string $opts = ''): string

FILE: app/Console/Commands/Location/DeleteLocationCommand.php
  class DeleteLocationCommand (line 10) | class DeleteLocationCommand extends Command
    method __construct (line 21) | public function __construct(
    method handle (line 34) | public function handle()

FILE: app/Console/Commands/Location/MakeLocationCommand.php
  class MakeLocationCommand (line 8) | class MakeLocationCommand extends Command
    method __construct (line 19) | public function __construct(private LocationCreationService $creationS...
    method handle (line 29) | public function handle()

FILE: app/Console/Commands/Maintenance/CleanServiceBackupFilesCommand.php
  class CleanServiceBackupFilesCommand (line 10) | class CleanServiceBackupFilesCommand extends Command
    method __construct (line 23) | public function __construct(FilesystemFactory $filesystem)
    method handle (line 33) | public function handle()

FILE: app/Console/Commands/Maintenance/PruneOrphanedBackupsCommand.php
  class PruneOrphanedBackupsCommand (line 9) | class PruneOrphanedBackupsCommand extends Command
    method __construct (line 18) | public function __construct(private BackupRepository $backupRepository)
    method handle (line 23) | public function handle()

FILE: app/Console/Commands/Node/MakeNodeCommand.php
  class MakeNodeCommand (line 8) | class MakeNodeCommand extends Command
    method __construct (line 33) | public function __construct(private NodeCreationService $creationService)
    method handle (line 43) | public function handle()

FILE: app/Console/Commands/Node/NodeConfigurationCommand.php
  class NodeConfigurationCommand (line 8) | class NodeConfigurationCommand extends Command
    method handle (line 16) | public function handle(): int

FILE: app/Console/Commands/Node/NodeListCommand.php
  class NodeListCommand (line 8) | class NodeListCommand extends Command
    method handle (line 12) | public function handle(): int

FILE: app/Console/Commands/Overrides/KeyGenerateCommand.php
  class KeyGenerateCommand (line 7) | class KeyGenerateCommand extends BaseKeyGenerateCommand
    method handle (line 13) | public function handle()

FILE: app/Console/Commands/Overrides/SeedCommand.php
  class SeedCommand (line 8) | class SeedCommand extends BaseSeedCommand
    method handle (line 16) | public function handle(): int

FILE: app/Console/Commands/Overrides/UpCommand.php
  class UpCommand (line 8) | class UpCommand extends BaseUpCommand
    method handle (line 16) | public function handle(): int

FILE: app/Console/Commands/Schedule/ProcessRunnableCommand.php
  class ProcessRunnableCommand (line 11) | class ProcessRunnableCommand extends Command
    method handle (line 20) | public function handle(): int
    method processSchedule (line 56) | protected function processSchedule(Schedule $schedule)

FILE: app/Console/Commands/Server/BulkPowerActionCommand.php
  class BulkPowerActionCommand (line 13) | class BulkPowerActionCommand extends Command
    method __construct (line 25) | public function __construct(private DaemonPowerRepository $powerReposi...
    method handle (line 35) | public function handle()
    method getQueryBuilder (line 92) | protected function getQueryBuilder(array $servers, array $nodes): Builder

FILE: app/Console/Commands/TelemetryCommand.php
  class TelemetryCommand (line 9) | class TelemetryCommand extends Command
    method __construct (line 18) | public function __construct(private TelemetryCollectionService $teleme...
    method handle (line 28) | public function handle()

FILE: app/Console/Commands/UpgradeCommand.php
  class UpgradeCommand (line 10) | class UpgradeCommand extends Command
    method handle (line 33) | public function handle()
    method withProgress (line 179) | protected function withProgress(ProgressBar $bar, \Closure $callback)
    method getUrl (line 187) | protected function getUrl(): string

FILE: app/Console/Commands/User/DeleteUserCommand.php
  class DeleteUserCommand (line 10) | class DeleteUserCommand extends Command
    method __construct (line 19) | public function __construct(private UserDeletionService $deletionService)
    method handle (line 24) | public function handle(): int

FILE: app/Console/Commands/User/DisableTwoFactorCommand.php
  class DisableTwoFactorCommand (line 8) | class DisableTwoFactorCommand extends Command
    method __construct (line 17) | public function __construct(private UserRepositoryInterface $repository)
    method handle (line 28) | public function handle()

FILE: app/Console/Commands/User/MakeUserCommand.php
  class MakeUserCommand (line 8) | class MakeUserCommand extends Command
    method __construct (line 17) | public function __construct(private UserCreationService $creationService)
    method handle (line 28) | public function handle()

FILE: app/Console/Kernel.php
  class Kernel (line 16) | class Kernel extends ConsoleKernel
    method commands (line 21) | protected function commands(): void
    method schedule (line 29) | protected function schedule(Schedule $schedule): void
    method registerTelemetry (line 58) | private function registerTelemetry(Schedule $schedule): void

FILE: app/Console/RequiresDatabaseMigrations.php
  type RequiresDatabaseMigrations (line 8) | trait RequiresDatabaseMigrations
    method hasCompletedMigrations (line 13) | protected function hasCompletedMigrations(): bool
    method showMigrationWarning (line 36) | protected function showMigrationWarning(): void

FILE: app/Contracts/Core/ReceivesEvents.php
  type ReceivesEvents (line 7) | interface ReceivesEvents
    method handle (line 12) | public function handle(Event $notification): void;

FILE: app/Contracts/Criteria/CriteriaInterface.php
  type CriteriaInterface (line 8) | interface CriteriaInterface
    method apply (line 13) | public function apply(Model $model, Repository $repository): mixed;

FILE: app/Contracts/Extensions/HashidsInterface.php
  type HashidsInterface (line 7) | interface HashidsInterface extends VendorHashidsInterface
    method decodeFirst (line 14) | public function decodeFirst(string $encoded, ?string $default = null):...

FILE: app/Contracts/Http/ClientPermissionsRequest.php
  type ClientPermissionsRequest (line 5) | interface ClientPermissionsRequest
    method permission (line 12) | public function permission(): string;

FILE: app/Contracts/Models/Identifiable.php
  type Identifiable (line 7) | interface Identifiable
    method scopeWhereIdentifier (line 9) | public function scopeWhereIdentifier(Builder $builder, string $identif...

FILE: app/Contracts/Repository/AllocationRepositoryInterface.php
  type AllocationRepositoryInterface (line 7) | interface AllocationRepositoryInterface extends RepositoryInterface
    method getUnassignedAllocationIds (line 13) | public function getUnassignedAllocationIds(int $node): array;
    method getRandomAllocation (line 18) | public function getRandomAllocation(array $nodes, array $ports, bool $...

FILE: app/Contracts/Repository/ApiKeyRepositoryInterface.php
  type ApiKeyRepositoryInterface (line 8) | interface ApiKeyRepositoryInterface extends RepositoryInterface
    method getAccountKeys (line 13) | public function getAccountKeys(User $user): Collection;
    method deleteAccountKey (line 18) | public function deleteAccountKey(User $user, string $identifier): int;

FILE: app/Contracts/Repository/ApiPermissionRepositoryInterface.php
  type ApiPermissionRepositoryInterface (line 5) | interface ApiPermissionRepositoryInterface extends RepositoryInterface

FILE: app/Contracts/Repository/DatabaseHostRepositoryInterface.php
  type DatabaseHostRepositoryInterface (line 7) | interface DatabaseHostRepositoryInterface extends RepositoryInterface
    method getWithViewDetails (line 13) | public function getWithViewDetails(): Collection;

FILE: app/Contracts/Repository/DatabaseRepositoryInterface.php
  type DatabaseRepositoryInterface (line 8) | interface DatabaseRepositoryInterface extends RepositoryInterface
    method setConnection (line 15) | public function setConnection(string $connection): self;
    method getConnection (line 20) | public function getConnection(): string;
    method getDatabasesForServer (line 25) | public function getDatabasesForServer(int $server): Collection;
    method getDatabasesForHost (line 30) | public function getDatabasesForHost(int $host, int $count = 25): Lengt...
    method createDatabase (line 35) | public function createDatabase(string $database): bool;
    method createUser (line 40) | public function createUser(string $username, string $remote, string $p...
    method assignUserToDatabase (line 45) | public function assignUserToDatabase(string $database, string $usernam...
    method flush (line 50) | public function flush(): bool;
    method dropDatabase (line 55) | public function dropDatabase(string $database): bool;
    method dropUser (line 60) | public function dropUser(string $username, string $remote): bool;

FILE: app/Contracts/Repository/EggRepositoryInterface.php
  type EggRepositoryInterface (line 8) | interface EggRepositoryInterface extends RepositoryInterface
    method getWithVariables (line 15) | public function getWithVariables(int $id): Egg;
    method getAllWithCopyAttributes (line 20) | public function getAllWithCopyAttributes(): Collection;
    method getWithCopyAttributes (line 25) | public function getWithCopyAttributes(int|string $value, string $colum...
    method getWithExportAttributes (line 32) | public function getWithExportAttributes(int $id): Egg;
    method isCopyableScript (line 37) | public function isCopyableScript(int $copyFromId, int $service): bool;

FILE: app/Contracts/Repository/EggVariableRepositoryInterface.php
  type EggVariableRepositoryInterface (line 7) | interface EggVariableRepositoryInterface extends RepositoryInterface
    method getEditableVariables (line 13) | public function getEditableVariables(int $egg): Collection;

FILE: app/Contracts/Repository/LocationRepositoryInterface.php
  type LocationRepositoryInterface (line 8) | interface LocationRepositoryInterface extends RepositoryInterface
    method getAllWithDetails (line 13) | public function getAllWithDetails(): Collection;
    method getAllWithNodes (line 18) | public function getAllWithNodes(): Collection;
    method getWithNodes (line 25) | public function getWithNodes(int $id): Location;
    method getWithNodeCount (line 32) | public function getWithNodeCount(int $id): Location;

FILE: app/Contracts/Repository/NestRepositoryInterface.php
  type NestRepositoryInterface (line 8) | interface NestRepositoryInterface extends RepositoryInterface
    method getWithEggs (line 15) | public function getWithEggs(?int $id = null): Collection|Nest;
    method getWithCounts (line 22) | public function getWithCounts(?int $id = null): Collection|Nest;
    method getWithEggServers (line 29) | public function getWithEggServers(int $id): Nest;

FILE: app/Contracts/Repository/NodeRepositoryInterface.php
  type NodeRepositoryInterface (line 8) | interface NodeRepositoryInterface extends RepositoryInterface
    method getUsageStats (line 16) | public function getUsageStats(Node $node): array;
    method getUsageStatsRaw (line 21) | public function getUsageStatsRaw(Node $node): array;
    method loadLocationAndServerCount (line 26) | public function loadLocationAndServerCount(Node $node, bool $refresh =...
    method loadNodeAllocations (line 32) | public function loadNodeAllocations(Node $node, bool $refresh = false)...
    method getNodesForServerCreation (line 37) | public function getNodesForServerCreation(): Collection;

FILE: app/Contracts/Repository/PermissionRepositoryInterface.php
  type PermissionRepositoryInterface (line 5) | interface PermissionRepositoryInterface extends RepositoryInterface

FILE: app/Contracts/Repository/RepositoryInterface.php
  type RepositoryInterface (line 10) | interface RepositoryInterface
    method model (line 15) | public function model(): string;
    method getModel (line 20) | public function getModel(): Model;
    method getBuilder (line 25) | public function getBuilder(): Builder;
    method getColumns (line 30) | public function getColumns(): array;
    method setColumns (line 35) | public function setColumns(array|string $columns = ['*']): self;
    method withoutFreshModel (line 41) | public function withoutFreshModel(): self;
    method withFreshModel (line 46) | public function withFreshModel(): self;
    method setFreshModel (line 52) | public function setFreshModel(bool $fresh = true): self;
    method create (line 59) | public function create(array $fields, bool $validate = true, bool $for...
    method find (line 66) | public function find(int $id): mixed;
    method findWhere (line 71) | public function findWhere(array $fields): Collection;
    method findFirstWhere (line 78) | public function findFirstWhere(array $fields): mixed;
    method findCountWhere (line 83) | public function findCountWhere(array $fields): int;
    method delete (line 88) | public function delete(int $id): int;
    method deleteWhere (line 93) | public function deleteWhere(array $attributes): int;
    method update (line 101) | public function update(int $id, array $fields, bool $validate = true, ...
    method updateWhereIn (line 107) | public function updateWhereIn(string $column, array $values, array $fi...
    method updateOrCreate (line 114) | public function updateOrCreate(array $where, array $fields, bool $vali...
    method all (line 119) | public function all(): Collection;
    method paginated (line 124) | public function paginated(int $perPage): LengthAwarePaginator;
    method insert (line 130) | public function insert(array $data): bool;
    method insertIgnore (line 135) | public function insertIgnore(array $values): bool;
    method count (line 140) | public function count(): int;

FILE: app/Contracts/Repository/ScheduleRepositoryInterface.php
  type ScheduleRepositoryInterface (line 8) | interface ScheduleRepositoryInterface extends RepositoryInterface
    method findServerSchedules (line 13) | public function findServerSchedules(int $server): Collection;
    method getScheduleWithTasks (line 20) | public function getScheduleWithTasks(int $schedule): Schedule;

FILE: app/Contracts/Repository/ServerRepositoryInterface.php
  type ServerRepositoryInterface (line 9) | interface ServerRepositoryInterface extends RepositoryInterface
    method loadEggRelations (line 14) | public function loadEggRelations(Server $server, bool $refresh = false...
    method getDataForRebuild (line 19) | public function getDataForRebuild(?int $server = null, ?int $node = nu...
    method getDataForReinstall (line 24) | public function getDataForReinstall(?int $server = null, ?int $node = ...
    method findWithVariables (line 31) | public function findWithVariables(int $id): Server;
    method getPrimaryAllocation (line 38) | public function getPrimaryAllocation(Server $server, bool $refresh = f...
    method getDataForCreation (line 43) | public function getDataForCreation(Server $server, bool $refresh = fal...
    method loadDatabaseRelations (line 48) | public function loadDatabaseRelations(Server $server, bool $refresh = ...
    method getDaemonServiceData (line 55) | public function getDaemonServiceData(Server $server, bool $refresh = f...
    method getByUuid (line 62) | public function getByUuid(string $uuid): Server;
    method isUniqueUuidCombo (line 67) | public function isUniqueUuidCombo(string $uuid, string $short): bool;
    method loadAllServersForNode (line 72) | public function loadAllServersForNode(int $node, int $limit): LengthAw...

FILE: app/Contracts/Repository/ServerVariableRepositoryInterface.php
  type ServerVariableRepositoryInterface (line 5) | interface ServerVariableRepositoryInterface extends RepositoryInterface

FILE: app/Contracts/Repository/SessionRepositoryInterface.php
  type SessionRepositoryInterface (line 7) | interface SessionRepositoryInterface extends RepositoryInterface
    method getUserSessions (line 12) | public function getUserSessions(int $user): Collection;
    method deleteUserSession (line 17) | public function deleteUserSession(int $user, string $session): ?int;

FILE: app/Contracts/Repository/SettingsRepositoryInterface.php
  type SettingsRepositoryInterface (line 5) | interface SettingsRepositoryInterface extends RepositoryInterface
    method set (line 13) | public function set(string $key, ?string $value = null);
    method get (line 18) | public function get(string $key, mixed $default): mixed;
    method forget (line 23) | public function forget(string $key);

FILE: app/Contracts/Repository/SubuserRepositoryInterface.php
  type SubuserRepositoryInterface (line 7) | interface SubuserRepositoryInterface extends RepositoryInterface
    method loadServerAndUserRelations (line 12) | public function loadServerAndUserRelations(Subuser $subuser, bool $ref...
    method getWithPermissions (line 17) | public function getWithPermissions(Subuser $subuser, bool $refresh = f...
    method getWithPermissionsUsingUserAndServer (line 24) | public function getWithPermissionsUsingUserAndServer(int $user, int $s...

FILE: app/Contracts/Repository/TaskRepositoryInterface.php
  type TaskRepositoryInterface (line 7) | interface TaskRepositoryInterface extends RepositoryInterface
    method getTaskForJobProcess (line 14) | public function getTaskForJobProcess(int $id): Task;
    method getNextTask (line 19) | public function getNextTask(int $schedule, int $index): ?Task;

FILE: app/Contracts/Repository/UserRepositoryInterface.php
  type UserRepositoryInterface (line 5) | interface UserRepositoryInterface extends RepositoryInterface

FILE: app/Enum/ResourceLimit.php
  method throttleKey (line 28) | public function throttleKey(): string
  method middleware (line 38) | public function middleware(): string
  method limit (line 43) | public function limit(): Limit
  method boot (line 55) | public static function boot(): void

FILE: app/Events/ActivityLogged.php
  class ActivityLogged (line 9) | class ActivityLogged extends Event
    method __construct (line 11) | public function __construct(public ActivityLog $model)
    method is (line 15) | public function is(string $event): bool
    method actor (line 20) | public function actor(): ?Model
    method isServerEvent (line 25) | public function isServerEvent(): bool
    method isSystem (line 30) | public function isSystem(): bool

FILE: app/Events/Auth/DirectLogin.php
  class DirectLogin (line 8) | class DirectLogin extends Event
    method __construct (line 10) | public function __construct(public User $user, public bool $remember)

FILE: app/Events/Auth/FailedCaptcha.php
  class FailedCaptcha (line 8) | class FailedCaptcha extends Event
    method __construct (line 15) | public function __construct(public string $ip, public string $domain)

FILE: app/Events/Auth/FailedPasswordReset.php
  class FailedPasswordReset (line 8) | class FailedPasswordReset extends Event
    method __construct (line 15) | public function __construct(public string $ip, public string $email)

FILE: app/Events/Auth/ProvidedAuthenticationToken.php
  class ProvidedAuthenticationToken (line 8) | class ProvidedAuthenticationToken extends Event
    method __construct (line 10) | public function __construct(public User $user, public bool $recovery =...

FILE: app/Events/Event.php
  class Event (line 5) | abstract class Event

FILE: app/Events/Server/Created.php
  class Created (line 9) | class Created extends Event
    method __construct (line 16) | public function __construct(public Server $server)

FILE: app/Events/Server/Creating.php
  class Creating (line 9) | class Creating extends Event
    method __construct (line 16) | public function __construct(public Server $server)

FILE: app/Events/Server/Deleted.php
  class Deleted (line 9) | class Deleted extends Event
    method __construct (line 16) | public function __construct(public Server $server)

FILE: app/Events/Server/Deleting.php
  class Deleting (line 9) | class Deleting extends Event
    method __construct (line 16) | public function __construct(public Server $server)

FILE: app/Events/Server/Installed.php
  class Installed (line 9) | class Installed extends Event
    method __construct (line 16) | public function __construct(public Server $server)

FILE: app/Events/Server/Saved.php
  class Saved (line 9) | class Saved extends Event
    method __construct (line 16) | public function __construct(public Server $server)

FILE: app/Events/Server/Saving.php
  class Saving (line 9) | class Saving extends Event
    method __construct (line 16) | public function __construct(public Server $server)

FILE: app/Events/Server/Updated.php
  class Updated (line 9) | class Updated extends Event
    method __construct (line 16) | public function __construct(public Server $server)

FILE: app/Events/Server/Updating.php
  class Updating (line 9) | class Updating extends Event
    method __construct (line 16) | public function __construct(public Server $server)

FILE: app/Events/Subuser/Created.php
  class Created (line 9) | class Created extends Event
    method __construct (line 16) | public function __construct(public Subuser $subuser)

FILE: app/Events/Subuser/Creating.php
  class Creating (line 9) | class Creating extends Event
    method __construct (line 16) | public function __construct(public Subuser $subuser)

FILE: app/Events/Subuser/Deleted.php
  class Deleted (line 9) | class Deleted extends Event
    method __construct (line 16) | public function __construct(public Subuser $subuser)

FILE: app/Events/Subuser/Deleting.php
  class Deleting (line 9) | class Deleting extends Event
    method __construct (line 16) | public function __construct(public Subuser $subuser)

FILE: app/Events/User/Created.php
  class Created (line 9) | class Created extends Event
    method __construct (line 16) | public function __construct(public User $user)

FILE: app/Events/User/Creating.php
  class Creating (line 9) | class Creating extends Event
    method __construct (line 16) | public function __construct(public User $user)

FILE: app/Events/User/Deleted.php
  class Deleted (line 9) | class Deleted extends Event
    method __construct (line 16) | public function __construct(public User $user)

FILE: app/Events/User/Deleting.php
  class Deleting (line 9) | class Deleting extends Event
    method __construct (line 16) | public function __construct(public User $user)

FILE: app/Events/User/PasswordChanged.php
  class PasswordChanged (line 8) | final class PasswordChanged
    method __construct (line 12) | public function __construct(public readonly User $user)

FILE: app/Exceptions/AccountNotFoundException.php
  class AccountNotFoundException (line 5) | class AccountNotFoundException extends \Exception

FILE: app/Exceptions/AutoDeploymentException.php
  class AutoDeploymentException (line 5) | class AutoDeploymentException extends \Exception

FILE: app/Exceptions/DisplayException.php
  class DisplayException (line 15) | class DisplayException extends PterodactylException implements HttpExcep...
    method __construct (line 25) | public function __construct(string $message, ?\Throwable $previous = n...
    method getErrorLevel (line 30) | public function getErrorLevel(): string
    method getStatusCode (line 35) | public function getStatusCode(): int
    method getHeaders (line 40) | public function getHeaders(): array
    method render (line 50) | public function render(Request $request): JsonResponse|RedirectResponse
    method report (line 67) | public function report()

FILE: app/Exceptions/Handler.php
  class Handler (line 26) | class Handler extends ExceptionHandler
    method register (line 76) | public function register(): void
    method generateCleanedExceptionStack (line 91) | private function generateCleanedExceptionStack(\Throwable $exception):...
    method render (line 124) | public function render($request, \Throwable $e): Response
    method invalidJson (line 150) | public function invalidJson($request, ValidationException $exception):...
    method convertExceptionToArray (line 190) | protected function convertExceptionToArray(\Throwable $e, array $overr...
    method isReportable (line 236) | public static function isReportable(\Exception $exception): bool
    method unauthenticated (line 246) | protected function unauthenticated($request, AuthenticationException $...
    method extractPrevious (line 261) | protected function extractPrevious(\Throwable $e): array
    method toArray (line 279) | public static function toArray(\Throwable $e): array

FILE: app/Exceptions/Http/Base/InvalidPasswordProvidedException.php
  class InvalidPasswordProvidedException (line 7) | class InvalidPasswordProvidedException extends DisplayException

FILE: app/Exceptions/Http/Connection/DaemonConnectionException.php
  class DaemonConnectionException (line 13) | class DaemonConnectionException extends DisplayException
    method __construct (line 28) | public function __construct(GuzzleException $previous, bool $useStatus...
    method report (line 71) | public function report()
    method getStatusCode (line 81) | public function getStatusCode(): int
    method getRequestId (line 86) | public function getRequestId(): ?string

FILE: app/Exceptions/Http/HttpForbiddenException.php
  class HttpForbiddenException (line 8) | class HttpForbiddenException extends HttpException
    method __construct (line 13) | public function __construct(?string $message = null, ?\Throwable $prev...

FILE: app/Exceptions/Http/Server/FileSizeTooLargeException.php
  class FileSizeTooLargeException (line 7) | class FileSizeTooLargeException extends DisplayException
    method __construct (line 12) | public function __construct()

FILE: app/Exceptions/Http/Server/FileTypeNotEditableException.php
  class FileTypeNotEditableException (line 7) | class FileTypeNotEditableException extends DisplayException

FILE: app/Exceptions/Http/Server/ServerStateConflictException.php
  class ServerStateConflictException (line 8) | class ServerStateConflictException extends ConflictHttpException
    method __construct (line 14) | public function __construct(Server $server, ?\Throwable $previous = null)

FILE: app/Exceptions/Http/TwoFactorAuthRequiredException.php
  class TwoFactorAuthRequiredException (line 9) | class TwoFactorAuthRequiredException extends HttpException implements Ht...
    method __construct (line 14) | public function __construct(?\Throwable $previous = null)

FILE: app/Exceptions/ManifestDoesNotExistException.php
  class ManifestDoesNotExistException (line 8) | class ManifestDoesNotExistException extends \Exception implements Provid...
    method getSolution (line 10) | public function getSolution(): Solution

FILE: app/Exceptions/Model/DataValidationException.php
  class DataValidationException (line 12) | class DataValidationException extends PterodactylException implements Ht...
    method __construct (line 17) | public function __construct(protected Validator $validator, protected ...
    method getMessageBag (line 32) | public function getMessageBag(): MessageBag
    method getStatusCode (line 40) | public function getStatusCode(): int
    method getHeaders (line 45) | public function getHeaders(): array
    method getValidator (line 50) | public function getValidator(): Validator
    method getModel (line 55) | public function getModel(): Model

FILE: app/Exceptions/PterodactylException.php
  class PterodactylException (line 5) | class PterodactylException extends \Exception

FILE: app/Exceptions/Repository/Daemon/InvalidPowerSignalException.php
  class InvalidPowerSignalException (line 7) | class InvalidPowerSignalException extends RepositoryException

FILE: app/Exceptions/Repository/DuplicateDatabaseNameException.php
  class DuplicateDatabaseNameException (line 7) | class DuplicateDatabaseNameException extends DisplayException

FILE: app/Exceptions/Repository/RecordNotFoundException.php
  class RecordNotFoundException (line 8) | class RecordNotFoundException extends RepositoryException implements Htt...
    method getStatusCode (line 13) | public function getStatusCode(): int
    method getHeaders (line 21) | public function getHeaders(): array

FILE: app/Exceptions/Repository/RepositoryException.php
  class RepositoryException (line 7) | class RepositoryException extends PterodactylException

FILE: app/Exceptions/Service/Allocation/AllocationDoesNotBelongToServerException.php
  class AllocationDoesNotBelongToServerException (line 7) | class AllocationDoesNotBelongToServerException extends PterodactylException

FILE: app/Exceptions/Service/Allocation/AutoAllocationNotEnabledException.php
  class AutoAllocationNotEnabledException (line 7) | class AutoAllocationNotEnabledException extends DisplayException
    method __construct (line 12) | public function __construct()

FILE: app/Exceptions/Service/Allocation/CidrOutOfRangeException.php
  class CidrOutOfRangeException (line 7) | class CidrOutOfRangeException extends DisplayException
    method __construct (line 12) | public function __construct()

FILE: app/Exceptions/Service/Allocation/InvalidPortMappingException.php
  class InvalidPortMappingException (line 7) | class InvalidPortMappingException extends DisplayException
    method __construct (line 12) | public function __construct(mixed $port)

FILE: app/Exceptions/Service/Allocation/NoAutoAllocationSpaceAvailableException.php
  class NoAutoAllocationSpaceAvailableException (line 7) | class NoAutoAllocationSpaceAvailableException extends DisplayException
    method __construct (line 12) | public function __construct()

FILE: app/Exceptions/Service/Allocation/PortOutOfRangeException.php
  class PortOutOfRangeException (line 7) | class PortOutOfRangeException extends DisplayException
    method __construct (line 12) | public function __construct()

FILE: app/Exceptions/Service/Allocation/ServerUsingAllocationException.php
  class ServerUsingAllocationException (line 7) | class ServerUsingAllocationException extends DisplayException

FILE: app/Exceptions/Service/Allocation/TooManyPortsInRangeException.php
  class TooManyPortsInRangeException (line 7) | class TooManyPortsInRangeException extends DisplayException
    method __construct (line 12) | public function __construct()

FILE: app/Exceptions/Service/Backup/BackupLockedException.php
  class BackupLockedException (line 7) | class BackupLockedException extends DisplayException
    method __construct (line 12) | public function __construct()

FILE: app/Exceptions/Service/Backup/TooManyBackupsException.php
  class TooManyBackupsException (line 7) | class TooManyBackupsException extends DisplayException
    method __construct (line 12) | public function __construct(int $backupLimit)

FILE: app/Exceptions/Service/Database/DatabaseClientFeatureNotEnabledException.php
  class DatabaseClientFeatureNotEnabledException (line 7) | class DatabaseClientFeatureNotEnabledException extends PterodactylException
    method __construct (line 9) | public function __construct()

FILE: app/Exceptions/Service/Database/NoSuitableDatabaseHostException.php
  class NoSuitableDatabaseHostException (line 7) | class NoSuitableDatabaseHostException extends DisplayException
    method __construct (line 12) | public function __construct()

FILE: app/Exceptions/Service/Database/TooManyDatabasesException.php
  class TooManyDatabasesException (line 7) | class TooManyDatabasesException extends DisplayException
    method __construct (line 9) | public function __construct()

FILE: app/Exceptions/Service/Deployment/NoViableAllocationException.php
  class NoViableAllocationException (line 7) | class NoViableAllocationException extends DisplayException

FILE: app/Exceptions/Service/Deployment/NoViableNodeException.php
  class NoViableNodeException (line 7) | class NoViableNodeException extends DisplayException

FILE: app/Exceptions/Service/Egg/BadJsonFormatException.php
  class BadJsonFormatException (line 7) | class BadJsonFormatException extends DisplayException

FILE: app/Exceptions/Service/Egg/HasChildrenException.php
  class HasChildrenException (line 7) | class HasChildrenException extends DisplayException

FILE: app/Exceptions/Service/Egg/InvalidCopyFromException.php
  class InvalidCopyFromException (line 7) | class InvalidCopyFromException extends DisplayException

FILE: app/Exceptions/Service/Egg/NoParentConfigurationFoundException.php
  class NoParentConfigurationFoundException (line 7) | class NoParentConfigurationFoundException extends DisplayException

FILE: app/Exceptions/Service/Egg/Variable/BadValidationRuleException.php
  class BadValidationRuleException (line 7) | class BadValidationRuleException extends DisplayException

FILE: app/Exceptions/Service/Egg/Variable/ReservedVariableNameException.php
  class ReservedVariableNameException (line 7) | class ReservedVariableNameException extends DisplayException

FILE: app/Exceptions/Service/HasActiveServersException.php
  class HasActiveServersException (line 8) | class HasActiveServersException extends DisplayException
    method getStatusCode (line 10) | public function getStatusCode(): int

FILE: app/Exceptions/Service/Helper/CdnVersionFetchingException.php
  class CdnVersionFetchingException (line 5) | class CdnVersionFetchingException extends \Exception

FILE: app/Exceptions/Service/InvalidFileUploadException.php
  class InvalidFileUploadException (line 7) | class InvalidFileUploadException extends DisplayException

FILE: app/Exceptions/Service/Location/HasActiveNodesException.php
  class HasActiveNodesException (line 8) | class HasActiveNodesException extends DisplayException
    method getStatusCode (line 10) | public function getStatusCode(): int

FILE: app/Exceptions/Service/Node/ConfigurationNotPersistedException.php
  class ConfigurationNotPersistedException (line 7) | class ConfigurationNotPersistedException extends DisplayException

FILE: app/Exceptions/Service/Schedule/Task/TaskIntervalTooLongException.php
  class TaskIntervalTooLongException (line 7) | class TaskIntervalTooLongException extends DisplayException

FILE: app/Exceptions/Service/Server/RequiredVariableMissingException.php
  class RequiredVariableMissingException (line 7) | class RequiredVariableMissingException extends PterodactylException

FILE: app/Exceptions/Service/ServiceLimitExceededException.php
  class ServiceLimitExceededException (line 7) | class ServiceLimitExceededException extends DisplayException
    method __construct (line 13) | public function __construct(string $message, ?\Throwable $previous = n...

FILE: app/Exceptions/Service/Subuser/ServerSubuserExistsException.php
  class ServerSubuserExistsException (line 7) | class ServerSubuserExistsException extends DisplayException

FILE: app/Exceptions/Service/Subuser/UserIsServerOwnerException.php
  class UserIsServerOwnerException (line 7) | class UserIsServerOwnerException extends DisplayException

FILE: app/Exceptions/Service/User/TwoFactorAuthenticationTokenInvalid.php
  class TwoFactorAuthenticationTokenInvalid (line 7) | class TwoFactorAuthenticationTokenInvalid extends DisplayException
    method __construct (line 12) | public function __construct()

FILE: app/Exceptions/Solutions/ManifestDoesNotExistSolution.php
  class ManifestDoesNotExistSolution (line 7) | class ManifestDoesNotExistSolution implements Solution
    method getSolutionTitle (line 9) | public function getSolutionTitle(): string
    method getSolutionDescription (line 14) | public function getSolutionDescription(): string
    method getDocumentationLinks (line 19) | public function getDocumentationLinks(): array

FILE: app/Exceptions/Transformer/InvalidTransformerLevelException.php
  class InvalidTransformerLevelException (line 7) | class InvalidTransformerLevelException extends PterodactylException

FILE: app/Extensions/Backups/BackupManager.php
  class BackupManager (line 16) | class BackupManager
    method __construct (line 33) | public function __construct(protected Application $app)
    method adapter (line 41) | public function adapter(?string $name = null): FilesystemAdapter
    method set (line 49) | public function set(string $name, FilesystemAdapter $disk): self
    method get (line 59) | protected function get(string $name): FilesystemAdapter
    method resolve (line 67) | protected function resolve(string $name): FilesystemAdapter
    method callCustomCreator (line 96) | protected function callCustomCreator(array $config): mixed
    method createWingsAdapter (line 104) | public function createWingsAdapter(array $config): FilesystemAdapter
    method createS3Adapter (line 112) | public function createS3Adapter(array $config): FilesystemAdapter
    method getConfig (line 128) | protected function getConfig(string $name): array
    method getDefaultAdapter (line 136) | public function getDefaultAdapter(): string
    method setDefaultAdapter (line 144) | public function setDefaultAdapter(string $name): void
    method forget (line 154) | public function forget(array|string $adapter): self
    method extend (line 166) | public function extend(string $adapter, \Closure $callback): self

FILE: app/Extensions/DynamicDatabaseConnection.php
  class DynamicDatabaseConnection (line 10) | class DynamicDatabaseConnection
    method __construct (line 19) | public function __construct(
    method set (line 31) | public function set(string $connection, DatabaseHost|int $host, string...

FILE: app/Extensions/Facades/Theme.php
  class Theme (line 7) | class Theme extends Facade
    method getFacadeAccessor (line 9) | protected static function getFacadeAccessor(): string

FILE: app/Extensions/Filesystem/S3Filesystem.php
  class S3Filesystem (line 8) | class S3Filesystem extends AwsS3V3Adapter
    method __construct (line 10) | public function __construct(
    method getClient (line 26) | public function getClient(): S3ClientInterface
    method getBucket (line 31) | public function getBucket(): string

FILE: app/Extensions/Hashids.php
  class Hashids (line 9) | class Hashids extends VendorHashids implements HashidsInterface
    method decodeFirst (line 11) | public function decodeFirst(string $encoded, ?string $default = null):...

FILE: app/Extensions/Illuminate/Database/Eloquent/Builder.php
  class Builder (line 7) | class Builder extends EloquentBuilder
    method search (line 12) | public function search(): self

FILE: app/Extensions/Illuminate/Events/Contracts/SubscribesToEvents.php
  type SubscribesToEvents (line 7) | interface SubscribesToEvents
    method subscribe (line 9) | public function subscribe(Dispatcher $events): void;

FILE: app/Extensions/Laravel/Sanctum/NewAccessToken.php
  class NewAccessToken (line 11) | class NewAccessToken extends SanctumAccessToken
    method __construct (line 18) | public function __construct(ApiKey $accessToken, string $plainTextToken)

FILE: app/Extensions/Lcobucci/JWT/Encoding/TimestampDates.php
  class TimestampDates (line 8) | final class TimestampDates implements ClaimsFormatter
    method formatClaims (line 16) | public function formatClaims(array $claims): array

FILE: app/Extensions/League/Fractal/Serializers/PterodactylSerializer.php
  class PterodactylSerializer (line 7) | class PterodactylSerializer extends ArraySerializer
    method item (line 12) | public function item(?string $resourceKey, array $data): array
    method collection (line 23) | public function collection(?string $resourceKey, array $data): array
    method null (line 39) | public function null(): ?array
    method mergeIncludes (line 50) | public function mergeIncludes(array $transformedData, array $includedD...

FILE: app/Extensions/Spatie/Fractalistic/Fractal.php
  class Fractal (line 12) | class Fractal extends SpatieFractal
    method createData (line 20) | public function createData(): Scope

FILE: app/Extensions/Themes/Theme.php
  class Theme (line 5) | class Theme
    method js (line 7) | public function js($path): string
    method css (line 12) | public function css($path): string
    method getUrl (line 17) | protected function getUrl($path): string

FILE: app/Facades/Activity.php
  class Activity (line 8) | class Activity extends Facade
    method getFacadeAccessor (line 10) | protected static function getFacadeAccessor(): string

FILE: app/Facades/LogBatch.php
  class LogBatch (line 8) | class LogBatch extends Facade
    method getFacadeAccessor (line 10) | protected static function getFacadeAccessor(): string

FILE: app/Facades/LogTarget.php
  class LogTarget (line 11) | class LogTarget extends Facade
    method getFacadeAccessor (line 13) | protected static function getFacadeAccessor(): string

FILE: app/Helpers/Time.php
  class Time (line 7) | final class Time
    method getMySQLTimezoneOffset (line 16) | public static function getMySQLTimezoneOffset(string $timezone): string

FILE: app/Helpers/Utilities.php
  class Utilities (line 10) | class Utilities
    method randomStringWithSpecialCharacters (line 16) | public static function randomStringWithSpecialCharacters(int $length =...
    method getScheduleNextRunDate (line 40) | public static function getScheduleNextRunDate(string $minute, string $...
    method checked (line 47) | public static function checked(string $name, mixed $default): string

FILE: app/Http/Controllers/Admin/ApiController.php
  class ApiController (line 16) | class ApiController extends Controller
    method __construct (line 21) | public function __construct(
    method index (line 30) | public function index(Request $request): View
    method create (line 42) | public function create(): View
    method store (line 62) | public function store(StoreApplicationApiKeyRequest $request): Redirec...
    method delete (line 77) | public function delete(Request $request, string $identifier): Response

FILE: app/Http/Controllers/Admin/BaseController.php
  class BaseController (line 9) | class BaseController extends Controller
    method __construct (line 14) | public function __construct(private SoftwareVersionService $version)
    method index (line 21) | public function index(): View

FILE: app/Http/Controllers/Admin/DatabaseController.php
  class DatabaseController (line 18) | class DatabaseController extends Controller
    method __construct (line 23) | public function __construct(
    method index (line 37) | public function index(): View
    method view (line 50) | public function view(int $host): View
    method create (line 64) | public function create(DatabaseHostFormRequest $request): RedirectResp...
    method update (line 90) | public function update(DatabaseHostFormRequest $request, DatabaseHost ...
    method delete (line 119) | public function delete(int $host): RedirectResponse

FILE: app/Http/Controllers/Admin/LocationController.php
  class LocationController (line 18) | class LocationController extends Controller
    method __construct (line 23) | public function __construct(
    method index (line 36) | public function index(): View
    method view (line 48) | public function view(int $id): View
    method create (line 60) | public function create(LocationFormRequest $request): RedirectResponse
    method update (line 73) | public function update(LocationFormRequest $request, Location $locatio...
    method delete (line 91) | public function delete(Location $location): RedirectResponse

FILE: app/Http/Controllers/Admin/MountController.php
  class MountController (line 21) | class MountController extends Controller
    method __construct (line 26) | public function __construct(
    method index (line 38) | public function index(): View
    method view (line 50) | public function view(string $id): View
    method create (line 67) | public function create(MountFormRequest $request): RedirectResponse
    method update (line 85) | public function update(MountFormRequest $request, Mount $mount): Redir...
    method delete (line 103) | public function delete(Mount $mount): RedirectResponse
    method addEggs (line 113) | public function addEggs(Request $request, Mount $mount): RedirectResponse
    method addNodes (line 132) | public function addNodes(Request $request, Mount $mount): RedirectResp...
    method deleteEgg (line 149) | public function deleteEgg(Mount $mount, int $egg_id): Response
    method deleteNode (line 159) | public function deleteNode(Mount $mount, int $node_id): Response

FILE: app/Http/Controllers/Admin/Nests/EggController.php
  class EggController (line 18) | class EggController extends Controller
    method __construct (line 23) | public function __construct(
    method create (line 39) | public function create(): View
    method store (line 53) | public function store(EggFormRequest $request): RedirectResponse
    method view (line 67) | public function view(Egg $egg): View
    method update (line 86) | public function update(EggFormRequest $request, Egg $egg): RedirectRes...
    method destroy (line 103) | public function destroy(Egg $egg): RedirectResponse
    method normalizeDockerImages (line 114) | protected function normalizeDockerImages(?string $input = null): array

FILE: app/Http/Controllers/Admin/Nests/EggScriptController.php
  class EggScriptController (line 15) | class EggScriptController extends Controller
    method __construct (line 20) | public function __construct(
    method index (line 31) | public function index(int $egg): View
    method update (line 58) | public function update(EggScriptFormRequest $request, Egg $egg): Redir...

FILE: app/Http/Controllers/Admin/Nests/EggShareController.php
  class EggShareController (line 15) | class EggShareController extends Controller
    method __construct (line 20) | public function __construct(
    method export (line 31) | public function export(Egg $egg): Response
    method import (line 51) | public function import(EggImportFormRequest $request): RedirectResponse
    method update (line 67) | public function update(EggImportFormRequest $request, Egg $egg): Redir...

FILE: app/Http/Controllers/Admin/Nests/EggVariableController.php
  class EggVariableController (line 18) | class EggVariableController extends Controller
    method __construct (line 23) | public function __construct(
    method view (line 38) | public function view(int $egg): View
    method store (line 52) | public function store(EggVariableFormRequest $request, Egg $egg): Redi...
    method update (line 68) | public function update(EggVariableFormRequest $request, Egg $egg, EggV...
    method destroy (line 81) | public function destroy(int $egg, EggVariable $variable): RedirectResp...

FILE: app/Http/Controllers/Admin/Nests/NestController.php
  class NestController (line 16) | class NestController extends Controller
    method __construct (line 21) | public function __construct(
    method index (line 36) | public function index(): View
    method create (line 46) | public function create(): View
    method store (line 56) | public function store(StoreNestFormRequest $request): RedirectResponse
    method view (line 69) | public function view(int $nest): View
    method update (line 82) | public function update(StoreNestFormRequest $request, int $nest): Redi...
    method destroy (line 95) | public function destroy(int $nest): RedirectResponse

FILE: app/Http/Controllers/Admin/NodeAutoDeployController.php
  class NodeAutoDeployController (line 13) | class NodeAutoDeployController extends Controller
    method __construct (line 18) | public function __construct(
    method __invoke (line 30) | public function __invoke(Request $request, Node $node): JsonResponse

FILE: app/Http/Controllers/Admin/Nodes/NodeController.php
  class NodeController (line 11) | class NodeController extends Controller
    method index (line 16) | public function index(Request $request): View

FILE: app/Http/Controllers/Admin/Nodes/NodeViewController.php
  class NodeViewController (line 17) | class NodeViewController extends Controller
    method __construct (line 24) | public function __construct(
    method index (line 35) | public function index(Request $request, Node $node): View
    method settings (line 49) | public function settings(Request $request, Node $node): View
    method configuration (line 60) | public function configuration(Request $request, Node $node): View
    method allocations (line 68) | public function allocations(Request $request, Node $node): View
    method servers (line 86) | public function servers(Request $request, Node $node): View

FILE: app/Http/Controllers/Admin/Nodes/SystemInformationController.php
  class SystemInformationController (line 12) | class SystemInformationController extends Controller
    method __construct (line 17) | public function __construct(private DaemonConfigurationRepository $rep...
    method __invoke (line 26) | public function __invoke(Request $request, Node $node): JsonResponse

FILE: app/Http/Controllers/Admin/NodesController.php
  class NodesController (line 29) | class NodesController extends Controller
    method __construct (line 34) | public function __construct(
    method create (line 54) | public function create(): View|RedirectResponse
    method store (line 71) | public function store(NodeFormRequest $request): RedirectResponse
    method updateSettings (line 86) | public function updateSettings(NodeFormRequest $request, Node $node): ...
    method allocationRemoveSingle (line 99) | public function allocationRemoveSingle(int $node, Allocation $allocati...
    method allocationRemoveMultiple (line 111) | public function allocationRemoveMultiple(Request $request, int $node):...
    method allocationRemoveBlock (line 126) | public function allocationRemoveBlock(Request $request, int $node): Re...
    method allocationSetAlias (line 146) | public function allocationSetAlias(AllocationAliasFormRequest $request...
    method createAllocation (line 163) | public function createAllocation(AllocationFormRequest $request, Node ...
    method delete (line 176) | public function delete(int|Node $node): RedirectResponse

FILE: app/Http/Controllers/Admin/Servers/CreateServerController.php
  class CreateServerController (line 17) | class CreateServerController extends Controller
    method __construct (line 22) | public function __construct(
    method index (line 35) | public function index(): View|RedirectResponse
    method store (line 70) | public function store(ServerFormRequest $request): RedirectResponse

FILE: app/Http/Controllers/Admin/Servers/ServerController.php
  class ServerController (line 13) | class ServerController extends Controller
    method index (line 19) | public function index(Request $request): View

FILE: app/Http/Controllers/Admin/Servers/ServerTransferController.php
  class ServerTransferController (line 18) | class ServerTransferController extends Controller
    method __construct (line 23) | public function __construct(
    method transfer (line 38) | public function transfer(Request $request, Server $server): RedirectRe...
    method assignAllocationsToServer (line 97) | private function assignAllocationsToServer(Server $server, int $node_i...

FILE: app/Http/Controllers/Admin/Servers/ServerViewController.php
  class ServerViewController (line 19) | class ServerViewController extends Controller
    method __construct (line 26) | public function __construct(
    method index (line 39) | public function index(Request $request, Server $server): View
    method details (line 47) | public function details(Request $request, Server $server): View
    method build (line 55) | public function build(Request $request, Server $server): View
    method startup (line 71) | public function startup(Request $request, Server $server): View
    method database (line 92) | public function database(Request $request, Server $server): View
    method mounts (line 103) | public function mounts(Request $request, Server $server): View
    method manage (line 119) | public function manage(Request $request, Server $server): View
    method delete (line 146) | public function delete(Request $request, Server $server): View

FILE: app/Http/Controllers/Admin/ServersController.php
  class ServersController (line 37) | class ServersController extends Controller
    method __construct (line 42) | public function __construct(
    method setDetails (line 70) | public function setDetails(Request $request, Server $server): Redirect...
    method toggleInstall (line 88) | public function toggleInstall(Server $server): RedirectResponse
    method reinstallServer (line 110) | public function reinstallServer(Server $server): RedirectResponse
    method manageSuspension (line 125) | public function manageSuspension(Request $request, Server $server): Re...
    method updateBuild (line 142) | public function updateBuild(Request $request, Server $server): Redirec...
    method delete (line 165) | public function delete(Request $request, Server $server): RedirectResp...
    method saveStartup (line 178) | public function saveStartup(Request $request, Server $server): Redirec...
    method newDatabase (line 204) | public function newDatabase(StoreServerDatabaseRequest $request, Serve...
    method resetDatabasePassword (line 221) | public function resetDatabasePassword(Request $request, Server $server...
    method deleteDatabase (line 236) | public function deleteDatabase(Server $server, Database $database): Re...
    method addMount (line 248) | public function addMount(Request $request, Server $server): RedirectRe...
    method deleteMount (line 265) | public function deleteMount(Server $server, Mount $mount): RedirectRes...

FILE: app/Http/Controllers/Admin/Settings/AdvancedController.php
  class AdvancedController (line 14) | class AdvancedController extends Controller
    method __construct (line 19) | public function __construct(
    method index (line 30) | public function index(): View
    method update (line 49) | public function update(AdvancedSettingsFormRequest $request): Redirect...

FILE: app/Http/Controllers/Admin/Settings/IndexController.php
  class IndexController (line 15) | class IndexController extends Controller
    method __construct (line 22) | public function __construct(
    method index (line 33) | public function index(): View
    method update (line 47) | public function update(BaseSettingsFormRequest $request): RedirectResp...

FILE: app/Http/Controllers/Admin/Settings/MailController.php
  class MailController (line 19) | class MailController extends Controller
    method __construct (line 24) | public function __construct(
    method index (line 36) | public function index(): View
    method update (line 50) | public function update(MailSettingsFormRequest $request): Response
    method test (line 77) | public function test(Request $request): Response

FILE: app/Http/Controllers/Admin/UserController.php
  class UserController (line 25) | class UserController extends Controller
    method __construct (line 32) | public function __construct(
    method index (line 46) | public function index(Request $request): View
    method create (line 67) | public function create(): View
    method view (line 77) | public function view(User $user): View
    method delete (line 91) | public function delete(Request $request, User $user): RedirectResponse
    method store (line 108) | public function store(NewUserFormRequest $request): RedirectResponse
    method update (line 122) | public function update(UserFormRequest $request, User $user): Redirect...
    method json (line 136) | public function json(Request $request): Model|Collection

FILE: app/Http/Controllers/Api/Application/ApplicationApiController.php
  class ApplicationApiController (line 14) | abstract class ApplicationApiController extends Controller
    method __construct (line 23) | public function __construct()
    method loadDependencies (line 43) | public function loadDependencies(Fractal $fractal, Request $request)
    method getTransformer (line 60) | public function getTransformer(string $abstract)
    method returnNoContent (line 70) | protected function returnNoContent(): Response

FILE: app/Http/Controllers/Api/Application/Locations/LocationController.php
  class LocationController (line 20) | class LocationController extends ApplicationApiController
    method __construct (line 25) | public function __construct(
    method index (line 36) | public function index(GetLocationsRequest $request): array
    method view (line 51) | public function view(GetLocationRequest $request, Location $location):...
    method store (line 64) | public function store(StoreLocationRequest $request): JsonResponse
    method update (line 84) | public function update(UpdateLocationRequest $request, Location $locat...
    method delete (line 98) | public function delete(DeleteLocationRequest $request, Location $locat...

FILE: app/Http/Controllers/Api/Application/Nests/EggController.php
  class EggController (line 12) | class EggController extends ApplicationApiController
    method index (line 17) | public function index(GetEggsRequest $request, Nest $nest): array
    method view (line 27) | public function view(GetEggRequest $request, Nest $nest, Egg $egg): array

FILE: app/Http/Controllers/Api/Application/Nests/NestController.php
  class NestController (line 11) | class NestController extends ApplicationApiController
    method __construct (line 16) | public function __construct(private NestRepositoryInterface $repository)
    method index (line 24) | public function index(GetNestsRequest $request): array
    method view (line 36) | public function view(GetNestsRequest $request, Nest $nest): array

FILE: app/Http/Controllers/Api/Application/Nodes/AllocationController.php
  class AllocationController (line 19) | class AllocationController extends ApplicationApiController
    method __construct (line 24) | public function __construct(
    method index (line 34) | public function index(GetAllocationsRequest $request, Node $node): array
    method store (line 65) | public function store(StoreAllocationRequest $request, Node $node): Js...
    method delete (line 77) | public function delete(DeleteAllocationRequest $request, Node $node, A...

FILE: app/Http/Controllers/Api/Application/Nodes/NodeConfigurationController.php
  class NodeConfigurationController (line 10) | class NodeConfigurationController extends ApplicationApiController
    method __invoke (line 17) | public function __invoke(GetNodeRequest $request, Node $node): JsonRes...

FILE: app/Http/Controllers/Api/Application/Nodes/NodeController.php
  class NodeController (line 19) | class NodeController extends ApplicationApiController
    method __construct (line 24) | public function __construct(
    method index (line 35) | public function index(GetNodesRequest $request): array
    method view (line 50) | public function view(GetNodeRequest $request, Node $node): array
    method store (line 63) | public function store(StoreNodeRequest $request): JsonResponse
    method update (line 82) | public function update(UpdateNodeRequest $request, Node $node): array
    method delete (line 101) | public function delete(DeleteNodeRequest $request, Node $node): JsonRe...

FILE: app/Http/Controllers/Api/Application/Nodes/NodeDeploymentController.php
  class NodeDeploymentController (line 10) | class NodeDeploymentController extends ApplicationApiController
    method __construct (line 15) | public function __construct(private FindViableNodesService $viableNode...
    method __invoke (line 27) | public function __invoke(GetDeployableNodesRequest $request): array

FILE: app/Http/Controllers/Api/Application/Servers/DatabaseController.php
  class DatabaseController (line 18) | class DatabaseController extends ApplicationApiController
    method __construct (line 23) | public function __construct(
    method index (line 34) | public function index(GetServerDatabasesRequest $request, Server $serv...
    method view (line 44) | public function view(GetServerDatabaseRequest $request, Server $server...
    method resetPassword (line 56) | public function resetPassword(ServerDatabaseWriteRequest $request, Ser...
    method store (line 68) | public function store(StoreServerDatabaseRequest $request, Server $ser...
    method delete (line 88) | public function delete(ServerDatabaseWriteRequest $request, Server $se...

FILE: app/Http/Controllers/Api/Application/Servers/ExternalServerController.php
  class ExternalServerController (line 10) | class ExternalServerController extends ApplicationApiController
    method index (line 15) | public function index(GetExternalServerRequest $request, string $exter...

FILE: app/Http/Controllers/Api/Application/Servers/ServerController.php
  class ServerController (line 18) | class ServerController extends ApplicationApiController
    method __construct (line 23) | public function __construct(
    method index (line 33) | public function index(GetServersRequest $request): array
    method store (line 56) | public function store(StoreServerRequest $request): JsonResponse
    method view (line 68) | public function view(GetServerRequest $request, Server $server): array
    method delete (line 80) | public function delete(ServerWriteRequest $request, Server $server, st...

FILE: app/Http/Controllers/Api/Application/Servers/ServerDetailsController.php
  class ServerDetailsController (line 13) | class ServerDetailsController extends ApplicationApiController
    method __construct (line 18) | public function __construct(
    method details (line 32) | public function details(UpdateServerDetailsRequest $request, Server $s...
    method build (line 51) | public function build(UpdateServerBuildConfigurationRequest $request, ...

FILE: app/Http/Controllers/Api/Application/Servers/ServerManagementController.php
  class ServerManagementController (line 12) | class ServerManagementController extends ApplicationApiController
    method __construct (line 17) | public function __construct(
    method suspend (line 29) | public function suspend(ServerWriteRequest $request, Server $server): ...
    method unsuspend (line 41) | public function unsuspend(ServerWriteRequest $request, Server $server)...
    method reinstall (line 55) | public function reinstall(ServerWriteRequest $request, Server $server)...

FILE: app/Http/Controllers/Api/Application/Servers/StartupController.php
  class StartupController (line 12) | class StartupController extends ApplicationApiController
    method __construct (line 17) | public function __construct(private StartupModificationService $modifi...
    method index (line 30) | public function index(UpdateServerStartupRequest $request, Server $ser...

FILE: app/Http/Controllers/Api/Application/Users/ExternalUserController.php
  class ExternalUserController (line 10) | class ExternalUserController extends ApplicationApiController
    method index (line 15) | public function index(GetExternalUserRequest $request, string $externa...

FILE: app/Http/Controllers/Api/Application/Users/UserController.php
  class UserController (line 18) | class UserController extends ApplicationApiController
    method __construct (line 23) | public function __construct(
    method index (line 36) | public function index(GetUsersRequest $request): array
    method view (line 52) | public function view(GetUsersRequest $request, User $user): array
    method update (line 70) | public function update(UpdateUserRequest $request, User $user): array
    method store (line 88) | public function store(StoreUserRequest $request): JsonResponse
    method delete (line 108) | public function delete(DeleteUserRequest $request, User $user): JsonRe...

FILE: app/Http/Controllers/Api/Client/AccountController.php
  class AccountController (line 17) | class AccountController extends ClientApiController
    method __construct (line 27) | public function __construct(private AuthManager $manager, private User...
    method index (line 32) | public function index(Request $request): array
    method updateEmail (line 42) | public function updateEmail(UpdateEmailRequest $request): JsonResponse
    method updatePassword (line 72) | public function updatePassword(UpdatePasswordRequest $request): JsonRe...

FILE: app/Http/Controllers/Api/Client/ActivityLogController.php
  class ActivityLogController (line 11) | class ActivityLogController extends ClientApiController
    method __invoke (line 16) | public function __invoke(ClientApiRequest $request): array

FILE: app/Http/Controllers/Api/Client/ApiKeyController.php
  class ApiKeyController (line 13) | class ApiKeyController extends ClientApiController
    method index (line 18) | public function index(ClientApiRequest $request): array
    method store (line 30) | public function store(StoreApiKeyRequest $request): array
    method delete (line 55) | public function delete(ClientApiRequest $request, string $identifier):...

FILE: app/Http/Controllers/Api/Client/ClientApiController.php
  class ClientApiController (line 9) | abstract class ClientApiController extends ApplicationApiController
    method getIncludesForTransformer (line 14) | protected function getIncludesForTransformer(BaseClientTransformer $tr...
    method parseIncludes (line 26) | protected function parseIncludes(): array
    method getTransformer (line 50) | public function getTransformer(string $abstract)

FILE: app/Http/Controllers/Api/Client/ClientController.php
  class ClientController (line 13) | class ClientController extends ClientApiController
    method __construct (line 18) | public function __construct()
    method index (line 27) | public function index(GetServersRequest $request): array
    method permissions (line 72) | public function permissions(): array

FILE: app/Http/Controllers/Api/Client/SSHKeyController.php
  class SSHKeyController (line 11) | class SSHKeyController extends ClientApiController
    method index (line 17) | public function index(ClientApiRequest $request): array
    method store (line 27) | public function store(StoreSSHKeyRequest $request): array
    method delete (line 48) | public function delete(ClientApiRequest $request): JsonResponse

FILE: app/Http/Controllers/Api/Client/Servers/ActivityLogController.php
  class ActivityLogController (line 17) | class ActivityLogController extends ClientApiController
    method __invoke (line 22) | public function __invoke(ClientApiRequest $request, Server $server): a...

FILE: app/Http/Controllers/Api/Client/Servers/BackupController.php
  class BackupController (line 23) | class BackupController extends ClientApiController
    method __construct (line 28) | public function __construct(
    method index (line 44) | public function index(Request $request, Server $server): array
    method store (line 67) | public function store(StoreBackupRequest $request, Server $server): array
    method toggleLock (line 104) | public function toggleLock(Request $request, Server $server, Backup $b...
    method view (line 126) | public function view(Request $request, Server $server, Backup $backup)...
    method delete (line 143) | public function delete(Request $request, Server $server, Backup $backu...
    method download (line 167) | public function download(Request $request, Server $server, Backup $bac...
    method restore (line 198) | public function restore(RestoreBackupRequest $request, Server $server,...

FILE: app/Http/Controllers/Api/Client/Servers/CommandController.php
  class CommandController (line 15) | class CommandController extends ClientApiController
    method __construct (line 20) | public function __construct(private DaemonCommandRepository $repository)
    method index (line 30) | public function index(SendCommandRequest $request, Server $server): Re...

FILE: app/Http/Controllers/Api/Client/Servers/DatabaseController.php
  class DatabaseController (line 20) | class DatabaseController extends ClientApiController
    method __construct (line 25) | public function __construct(
    method index (line 36) | public function index(GetDatabasesRequest $request, Server $server): a...
    method store (line 50) | public function store(StoreDatabaseRequest $request, Server $server): ...
    method rotatePassword (line 76) | public function rotatePassword(RotatePasswordRequest $request, Server ...
    method delete (line 94) | public function delete(DeleteDatabaseRequest $request, Server $server,...

FILE: app/Http/Controllers/Api/Client/Servers/FileController.php
  class FileController (line 26) | class FileController extends ClientApiController
    method __construct (line 31) | public function __construct(
    method directory (line 43) | public function directory(ListFilesRequest $request, Server $server): ...
    method contents (line 59) | public function contents(GetFileContentsRequest $request, Server $serv...
    method download (line 77) | public function download(GetFileContentsRequest $request, Server $serv...
    method write (line 107) | public function write(WriteFileContentRequest $request, Server $server...
    method create (line 121) | public function create(CreateFolderRequest $request, Server $server): ...
    method rename (line 140) | public function rename(RenameFileRequest $request, Server $server): Js...
    method copy (line 159) | public function copy(CopyFileRequest $request, Server $server): JsonRe...
    method compress (line 173) | public function compress(CompressFilesRequest $request, Server $server...
    method decompress (line 193) | public function decompress(DecompressFilesRequest $request, Server $se...
    method delete (line 215) | public function delete(DeleteFileRequest $request, Server $server): Js...
    method chmod (line 235) | public function chmod(ChmodFilesRequest $request, Server $server): Jso...
    method pull (line 250) | public function pull(PullFileRequest $request, Server $server): JsonRe...

FILE: app/Http/Controllers/Api/Client/Servers/FileUploadController.php
  class FileUploadController (line 13) | class FileUploadController extends ClientApiController
    method __construct (line 18) | public function __construct(
    method __invoke (line 27) | public function __invoke(UploadFileRequest $request, Server $server): ...
    method getUploadUrl (line 40) | protected function getUploadUrl(Server $server, User $user): string

FILE: app/Http/Controllers/Api/Client/Servers/NetworkAllocationController.php
  class NetworkAllocationController (line 21) | class NetworkAllocationController extends ClientApiController
    method __construct (line 26) | public function __construct(
    method index (line 38) | public function index(GetNetworkRequest $request, Server $server): array
    method update (line 51) | public function update(UpdateAllocationRequest $request, Server $serve...
    method setPrimary (line 75) | public function setPrimary(SetPrimaryAllocationRequest $request, Serve...
    method store (line 95) | public function store(NewAllocationRequest $request, Server $server): ...
    method delete (line 141) | public function delete(DeleteAllocationRequest $request, Server $serve...

FILE: app/Http/Controllers/Api/Client/Servers/PowerController.php
  class PowerController (line 12) | class PowerController extends ClientApiController
    method __construct (line 17) | public function __construct(private DaemonPowerRepository $repository)
    method index (line 25) | public function index(SendPowerRequest $request, Server $server): Resp...

FILE: app/Http/Controllers/Api/Client/Servers/ResourceUtilizationController.php
  class ResourceUtilizationController (line 13) | class ResourceUtilizationController extends ClientApiController
    method __construct (line 18) | public function __construct(private Repository $cache, private DaemonS...
    method __invoke (line 30) | public function __invoke(GetServerRequest $request, Server $server): a...

FILE: app/Http/Controllers/Api/Client/Servers/ScheduleController.php
  class ScheduleController (line 25) | class ScheduleController extends ClientApiController
    method __construct (line 30) | public function __construct(private ScheduleRepository $repository, pr...
    method index (line 38) | public function index(ViewScheduleRequest $request, Server $server): a...
    method store (line 53) | public function store(StoreScheduleRequest $request, Server $server): ...
    method view (line 82) | public function view(ViewScheduleRequest $request, Server $server, Sch...
    method update (line 102) | public function update(UpdateScheduleRequest $request, Server $server,...
    method execute (line 144) | public function execute(TriggerScheduleRequest $request, Server $serve...
    method delete (line 156) | public function delete(DeleteScheduleRequest $request, Server $server,...
    method getNextRunAt (line 170) | protected function getNextRunAt(Request $request): Carbon

FILE: app/Http/Controllers/Api/Client/Servers/ScheduleTaskController.php
  class ScheduleTaskController (line 22) | class ScheduleTaskController extends ClientApiController
    method __construct (line 27) | public function __construct(
    method store (line 40) | public function store(StoreTaskRequest $request, Server $server, Sched...
    method update (line 101) | public function update(StoreTaskRequest $request, Server $server, Sche...
    method delete (line 156) | public function delete(ClientApiRequest $request, Server $server, Sche...

FILE: app/Http/Controllers/Api/Client/Servers/ServerController.php
  class ServerController (line 11) | class ServerController extends ClientApiController
    method __construct (line 16) | public function __construct(private GetUserPermissionsService $permiss...
    method index (line 25) | public function index(GetServerRequest $request, Server $server): array

FILE: app/Http/Controllers/Api/Client/Servers/SettingsController.php
  class SettingsController (line 17) | class SettingsController extends ClientApiController
    method __construct (line 22) | public function __construct(
    method rename (line 35) | public function rename(RenameServerRequest $request, Server $server): ...
    method reinstall (line 64) | public function reinstall(ReinstallServerRequest $request, Server $ser...
    method dockerImage (line 78) | public function dockerImage(SetDockerImageRequest $request, Server $se...

FILE: app/Http/Controllers/Api/Client/Servers/StartupController.php
  class StartupController (line 18) | class StartupController extends ClientApiController
    method __construct (line 23) | public function __construct(
    method index (line 33) | public function index(GetStartupRequest $request, Server $server): array
    method update (line 71) | public function update(UpdateStartupVariableRequest $request, Server $...
    method updateEgg (line 123) | public function updateEgg(UpdateEggRequest $request, Server $server): ...
    method buildNestsList (line 172) | private function buildNestsList(): array

FILE: app/Http/Controllers/Api/Client/Servers/SubuserController.php
  class SubuserController (line 21) | class SubuserController extends ClientApiController
    method __construct (line 26) | public function __construct(
    method index (line 37) | public function index(GetSubuserRequest $request, Server $server): array
    method view (line 47) | public function view(GetSubuserRequest $request): array
    method store (line 64) | public function store(StoreSubuserRequest $request, Server $server): a...
    method update (line 88) | public function update(UpdateSubuserRequest $request, Server $server):...
    method delete (line 130) | public function delete(DeleteSubuserRequest $request, Server $server):...
    method getDefaultPermissions (line 154) | protected function getDefaultPermissions(Request $request): array

FILE: app/Http/Controllers/Api/Client/Servers/WebsocketController.php
  class WebsocketController (line 15) | class WebsocketController extends ClientApiController
    method __construct (line 20) | public function __construct(
    method __invoke (line 33) | public function __invoke(ClientApiRequest $request, Server $server): J...

FILE: app/Http/Controllers/Api/Client/TwoFactorController.php
  class TwoFactorController (line 15) | class TwoFactorController extends ClientApiController
    method __construct (line 20) | public function __construct(
    method index (line 36) | public function index(Request $request): JsonResponse
    method store (line 53) | public function store(Request $request): JsonResponse
    method delete (line 83) | public function delete(Request $request): JsonResponse

FILE: app/Http/Controllers/Api/Remote/ActivityProcessingController.php
  class ActivityProcessingController (line 16) | class ActivityProcessingController extends Controller
    method __invoke (line 18) | public function __invoke(ActivityEventRequest $request)

FILE: app/Http/Controllers/Api/Remote/Backups/BackupRemoteUploadController.php
  class BackupRemoteUploadController (line 16) | class BackupRemoteUploadController extends Controller
    method __construct (line 23) | public function __construct(private BackupManager $backupManager)
    method __invoke (line 34) | public function __invoke(Request $request, string $backup): JsonResponse
    method getConfiguredMaxPartSize (line 125) | private function getConfiguredMaxPartSize(): int

FILE: app/Http/Controllers/Api/Remote/Backups/BackupStatusController.php
  class BackupStatusController (line 18) | class BackupStatusController extends Controller
    method __construct (line 23) | public function __construct(private BackupManager $backupManager)
    method index (line 32) | public function index(ReportBackupCompleteRequest $request, string $ba...
    method restore (line 93) | public function restore(Request $request, string $backup): JsonResponse
    method completeMultipartUpload (line 120) | protected function completeMultipartUpload(Backup $backup, S3Filesyste...

FILE: app/Http/Controllers/Api/Remote/EggInstallController.php
  class EggInstallController (line 11) | class EggInstallController extends Controller
    method __construct (line 16) | public function __construct(private EnvironmentService $environment, p...
    method index (line 26) | public function index(Request $request, string $uuid): JsonResponse

FILE: app/Http/Controllers/Api/Remote/Servers/ServerDetailsController.php
  class ServerDetailsController (line 19) | class ServerDetailsController extends Controller
    method __construct (line 24) | public function __construct(
    method __invoke (line 38) | public function __invoke(Request $request, string $uuid): JsonResponse
    method list (line 65) | public function list(Request $request): ServerConfigurationCollection
    method resetState (line 89) | public function resetState(Request $request): JsonResponse

FILE: app/Http/Controllers/Api/Remote/Servers/ServerInstallController.php
  class ServerInstallController (line 17) | class ServerInstallController extends Controller
    method __construct (line 22) | public function __construct(private ServerRepository $repository, priv...
    method index (line 31) | public function index(Request $request, string $uuid): JsonResponse
    method store (line 53) | public function store(InstallationDataRequest $request, string $uuid):...

FILE: app/Http/Controllers/Api/Remote/Servers/ServerTransferController.php
  class ServerTransferController (line 21) | class ServerTransferController extends Controller
    method __construct (line 26) | public function __construct(
    method failure (line 38) | public function failure(Request $request, string $uuid): JsonResponse
    method success (line 63) | public function success(Request $request, string $uuid): JsonResponse
    method processFailedTransfer (line 118) | protected function processFailedTransfer(ServerTransfer $transfer): Js...

FILE: app/Http/Controllers/Api/Remote/SftpAuthenticationController.php
  class SftpAuthenticationController (line 21) | class SftpAuthenticationController extends Controller
    method __construct (line 25) | public function __construct(protected GetUserPermissionsService $permi...
    method __invoke (line 34) | public function __invoke(SftpAuthenticationFormRequest $request): Json...
    method getServer (line 89) | protected function getServer(Request $request, string $uuid): Server
    method getUser (line 102) | protected function getUser(Request $request, string $username): User
    method parseUsername (line 114) | protected function parseUsername(string $value): array
    method reject (line 129) | protected function reject(Request $request, bool $increment = true): void
    method validateSftpAccess (line 141) | protected function validateSftpAccess(User $user, Server $server): void
    method throttleKey (line 159) | protected function throttleKey(Request $request): string

FILE: app/Http/Controllers/Auth/AbstractLoginController.php
  class AbstractLoginController (line 18) | abstract class AbstractLoginController extends Controller
    method __construct (line 42) | public function __construct()
    method sendFailedLoginResponse (line 56) | protected function sendFailedLoginResponse(Request $request, ?Authenti...
    method sendLoginResponse (line 73) | protected function sendLoginResponse(User $user, Request $request): Js...
    method getField (line 96) | protected function getField(?string $input = null): string
    method fireFailedLoginEvent (line 104) | protected function fireFailedLoginEvent(?Authenticatable $user = null,...

FILE: app/Http/Controllers/Auth/ForgotPasswordController.php
  class ForgotPasswordController (line 12) | class ForgotPasswordController extends Controller
    method sendResetLinkFailedResponse (line 19) | protected function sendResetLinkFailedResponse(Request $request, $resp...
    method sendResetLinkResponse (line 34) | protected function sendResetLinkResponse(Request $request, $response):...

FILE: app/Http/Controllers/Auth/LoginCheckpointController.php
  class LoginCheckpointController (line 18) | class LoginCheckpointController extends AbstractLoginController
    method __construct (line 25) | public function __construct(
    method __invoke (line 44) | public function __invoke(LoginCheckpointRequest $request): JsonResponse
    method isValidRecoveryToken (line 103) | protected function isValidRecoveryToken(User $user, string $value): bool
    method hasValidSessionData (line 121) | protected function hasValidSessionData(?array $data): bool

FILE: app/Http/Controllers/Auth/LoginController.php
  class LoginController (line 14) | class LoginController extends AbstractLoginController
    method index (line 21) | public function index(): View
    method login (line 32) | public function login(Request $request): JsonResponse

FILE: app/Http/Controllers/Auth/ResetPasswordController.php
  class ResetPasswordController (line 18) | class ResetPasswordController extends Controller
    method __construct (line 32) | public function __construct(
    method __invoke (line 44) | public function __invoke(ResetPasswordRequest $request): JsonResponse
    method resetPassword (line 77) | protected function resetPassword($user, $password)
    method sendResetResponse (line 99) | protected function sendResetResponse(): JsonResponse

FILE: app/Http/Controllers/Base/IndexController.php
  class IndexController (line 10) | class IndexController extends Controller
    method __construct (line 15) | public function __construct(
    method index (line 24) | public function index(): View

FILE: app/Http/Controllers/Base/LocaleController.php
  class LocaleController (line 11) | class LocaleController extends Controller
    method __construct (line 15) | public function __construct(Translator $translator)
    method __invoke (line 23) | public function __invoke(LocaleRequest $request): JsonResponse
    method i18n (line 43) | protected function i18n(array $data): array

FILE: app/Http/Controllers/Controller.php
  class Controller (line 10) | abstract class Controller extends BaseController

FILE: app/Http/Kernel.php
  class Kernel (line 38) | class Kernel extends HttpKernel

FILE: app/Http/Middleware/Activity/AccountSubject.php
  class AccountSubject (line 8) | class AccountSubject
    method handle (line 14) | public function handle(Request $request, \Closure $next)

FILE: app/Http/Middleware/Activity/ServerSubject.php
  class ServerSubject (line 9) | class ServerSubject
    method handle (line 19) | public function handle(Request $request, \Closure $next)

FILE: app/Http/Middleware/Activity/TrackAPIKey.php
  class TrackAPIKey (line 9) | class TrackAPIKey
    method handle (line 17) | public function handle(Request $request, \Closure $next): mixed

FILE: app/Http/Middleware/Admin/Servers/ServerInstalled.php
  class ServerInstalled (line 11) | class ServerInstalled
    method handle (line 16) | public function handle(Request $request, \Closure $next): mixed

FILE: app/Http/Middleware/AdminAuthenticate.php
  class AdminAuthenticate (line 8) | class AdminAuthenticate
    method handle (line 15) | public function handle(Request $request, \Closure $next): mixed

FILE: app/Http/Middleware/Api/Application/AuthenticateApplicationUser.php
  class AuthenticateApplicationUser (line 8) | class AuthenticateApplicationUser
    method handle (line 14) | public function handle(Request $request, \Closure $next): mixed

FILE: app/Http/Middleware/Api/AuthenticateIPAccess.php
  class AuthenticateIPAccess (line 12) | class AuthenticateIPAccess
    method handle (line 20) | public function handle(Request $request, \Closure $next): mixed

FILE: app/Http/Middleware/Api/Client/RequireClientApiKey.php
  class RequireClientApiKey (line 9) | class RequireClientApiKey
    method handle (line 15) | public function handle(Request $request, \Closure $next): mixed

FILE: app/Http/Middleware/Api/Client/Server/AuthenticateServerAccess.php
  class AuthenticateServerAccess (line 10) | class AuthenticateServerAccess
    method __construct (line 22) | public function __construct()
    method handle (line 29) | public function handle(Request $request, \Closure $next): mixed

FILE: app/Http/Middleware/Api/Client/Server/ResourceBelongsToServer.php
  class ResourceBelongsToServer (line 17) | class ResourceBelongsToServer
    method handle (line 27) | public function handle(Request $request, \Closure $next): mixed

FILE: app/Http/Middleware/Api/Client/SubstituteClientBindings.php
  class SubstituteClientBindings (line 8) | class SubstituteClientBindings extends SubstituteBindings
    method handle (line 13) | public function handle($request, \Closure $next): mixed

FILE: app/Http/Middleware/Api/Daemon/DaemonAuthenticate.php
  class DaemonAuthenticate (line 13) | class DaemonAuthenticate
    method __construct (line 25) | public function __construct(private Encrypter $encrypter, private Node...
    method handle (line 34) | public function handle(Request $request, \Closure $next): mixed

FILE: app/Http/Middleware/Api/IsValidJson.php
  class IsValidJson (line 8) | class IsValidJson
    method handle (line 15) | public function handle(Request $request, \Closure $next): mixed

FILE: app/Http/Middleware/EncryptCookies.php
  class EncryptCookies (line 7) | class EncryptCookies extends BaseEncrypter

FILE: app/Http/Middleware/EnsureStatefulRequests.php
  class EnsureStatefulRequests (line 7) | class EnsureStatefulRequests extends EnsureFrontendRequestsAreStateful
    method fromFrontend (line 18) | public static function fromFrontend($request)

FILE: app/Http/Middleware/LanguageMiddleware.php
  class LanguageMiddleware (line 8) | class LanguageMiddleware
    method __construct (line 13) | public function __construct(private Application $app)
    method handle (line 20) | public function handle(Request $request, \Closure $next): mixed

FILE: app/Http/Middleware/MaintenanceMiddleware.php
  class MaintenanceMiddleware (line 8) | class MaintenanceMiddleware
    method __construct (line 13) | public function __construct(private ResponseFactory $response)
    method handle (line 20) | public function handle(Request $request, \Closure $next): mixed

FILE: app/Http/Middleware/RedirectIfAuthenticated.php
  class RedirectIfAuthenticated (line 8) | class RedirectIfAuthenticated
    method __construct (line 13) | public function __construct(private AuthManager $authManager)
    method handle (line 20) | public function handle(Request $request, \Closure $next, ?string $guar...

FILE: app/Http/Middleware/RequireTwoFactorAuthentication.php
  class RequireTwoFactorAuthentication (line 10) | class RequireTwoFactorAuthentication
    method __construct (line 24) | public function __construct(private AlertsMessageBag $alert)
    method handle (line 36) | public function handle(Request $request, \Closure $next): mixed

FILE: app/Http/Middleware/SetSecurityHeaders.php
  class SetSecurityHeaders (line 7) | class SetSecurityHeaders
    method handle (line 31) | public function handle(Request $request, \Closure $next): mixed

FILE: app/Http/Middleware/TrimStrings.php
  class TrimStrings (line 7) | class TrimStrings extends BaseTrimmer

FILE: app/Http/Middleware/VerifyCsrfToken.php
  class VerifyCsrfToken (line 7) | class VerifyCsrfToken extends BaseVerifier

FILE: app/Http/Middleware/VerifyReCaptcha.php
  class VerifyReCaptcha (line 13) | class VerifyReCaptcha
    method __construct (line 18) | public function __construct(private Dispatcher $dispatcher, private Re...
    method handle (line 25) | public function handle(Request $request, \Closure $next): mixed
    method isResponseVerified (line 62) | private function isResponseVerified(\stdClass $result, Request $reques...

FILE: app/Http/Requests/Admin/AdminFormRequest.php
  class AdminFormRequest (line 7) | abstract class AdminFormRequest extends FormRequest
    method rules (line 12) | abstract public function rules(): array;
    method authorize (line 18) | public function authorize(): bool
    method normalize (line 31) | public function normalize(?array $only = null): array

FILE: app/Http/Requests/Admin/Api/StoreApplicationApiKeyRequest.php
  class StoreApplicationApiKeyRequest (line 9) | class StoreApplicationApiKeyRequest extends AdminFormRequest
    method rules (line 15) | public function rules(): array
    method attributes (line 24) | public function attributes(): array
    method getKeyPermissions (line 31) | public function getKeyPermissions(): array

FILE: app/Http/Requests/Admin/BaseFormRequest.php
  class BaseFormRequest (line 5) | class BaseFormRequest extends AdminFormRequest
    method rules (line 7) | public function rules(): array

FILE: app/Http/Requests/Admin/DatabaseHostFormRequest.php
  class DatabaseHostFormRequest (line 8) | class DatabaseHostFormRequest extends AdminFormRequest
    method rules (line 10) | public function rules(): array
    method getValidatorInstance (line 22) | protected function getValidatorInstance(): Validator

FILE: app/Http/Requests/Admin/Egg/EggFormRequest.php
  class EggFormRequest (line 7) | class EggFormRequest extends AdminFormRequest
    method rules (line 9) | public function rules(): array
    method withValidator (line 33) | public function withValidator($validator)
    method validated (line 40) | public function validated($key = null, $default = null): array

FILE: app/Http/Requests/Admin/Egg/EggImportFormRequest.php
  class EggImportFormRequest (line 7) | class EggImportFormRequest extends AdminFormRequest
    method rules (line 9) | public function rules(): array

FILE: app/Http/Requests/Admin/Egg/EggScriptFormRequest.php
  class EggScriptFormRequest (line 7) | class EggScriptFormRequest extends AdminFormRequest
    method rules (line 12) | public function rules(): array

FILE: app/Http/Requests/Admin/Egg/EggVariableFormRequest.php
  class EggVariableFormRequest (line 8) | class EggVariableFormRequest extends AdminFormRequest
    method rules (line 13) | public function rules(): array

FILE: app/Http/Requests/Admin/LocationFormRequest.php
  class LocationFormRequest (line 7) | class LocationFormRequest extends AdminFormRequest
    method rules (line 12) | public function rules(): array

FILE: app/Http/Requests/Admin/MountFormRequest.php
  class MountFormRequest (line 7) | class MountFormRequest extends AdminFormRequest
    method rules (line 12) | public function rules(): array

FILE: app/Http/Requests/Admin/Nest/StoreNestFormRequest.php
  class StoreNestFormRequest (line 7) | class StoreNestFormRequest extends AdminFormRequest
    method rules (line 9) | public function rules(): array

FILE: app/Http/Requests/Admin/NewUserFormRequest.php
  class NewUserFormRequest (line 8) | class NewUserFormRequest extends AdminFormRequest
    method rules (line 14) | public function rules(): array

FILE: app/Http/Requests/Admin/Node/AllocationAliasFormRequest.php
  class AllocationAliasFormRequest (line 7) | class AllocationAliasFormRequest extends AdminFormRequest
    method rules (line 9) | public function rules(): array

FILE: app/Http/Requests/Admin/Node/AllocationFormRequest.php
  class AllocationFormRequest (line 7) | class AllocationFormRequest extends AdminFormRequest
    method rules (line 9) | public function rules(): array

FILE: app/Http/Requests/Admin/Node/NodeFormRequest.php
  class NodeFormRequest (line 9) | class NodeFormRequest extends AdminFormRequest
    method rules (line 14) | public function rules(): array

FILE: app/Http/Requests/Admin/ServerFormRequest.php
  class ServerFormRequest (line 9) | class ServerFormRequest extends AdminFormRequest
    method rules (line 14) | public function rules(): array
    method withValidator (line 26) | public function withValidator(Validator $validator): void

FILE: app/Http/Requests/Admin/Servers/Databases/StoreServerDatabaseRequest.php
  class StoreServerDatabaseRequest (line 9) | class StoreServerDatabaseRequest extends AdminFormRequest
    method rules (line 14) | public function rules(): array

FILE: app/Http/Requests/Admin/Settings/AdvancedSettingsFormRequest.php
  class AdvancedSettingsFormRequest (line 7) | class AdvancedSettingsFormRequest extends AdminFormRequest
    method rules (line 12) | public function rules(): array
    method attributes (line 48) | public function attributes(): array

FILE: app/Http/Requests/Admin/Settings/BaseSettingsFormRequest.php
  class BaseSettingsFormRequest (line 9) | class BaseSettingsFormRequest extends AdminFormRequest
    method rules (line 13) | public function rules(): array
    method attributes (line 25) | public function attributes(): array

FILE: app/Http/Requests/Admin/Settings/MailSettingsFormRequest.php
  class MailSettingsFormRequest (line 8) | class MailSettingsFormRequest extends AdminFormRequest
    method rules (line 13) | public function rules(): array
    method normalize (line 30) | public function normalize(?array $only = null): array

FILE: app/Http/Requests/Admin/UserFormRequest.php
  class UserFormRequest (line 8) | class UserFormRequest extends AdminFormRequest
    method rules (line 14) | public function rules(): array

FILE: app/Http/Requests/Api/Application/Allocations/DeleteAllocationRequest.php
  class DeleteAllocationRequest (line 8) | class DeleteAllocationRequest extends ApplicationApiRequest

FILE: app/Http/Requests/Api/Application/Allocations/GetAllocationsRequest.php
  class GetAllocationsRequest (line 8) | class GetAllocationsRequest extends ApplicationApiRequest

FILE: app/Http/Requests/Api/Application/Allocations/StoreAllocationRequest.php
  class StoreAllocationRequest (line 8) | class StoreAllocationRequest extends ApplicationApiRequest
    method rules (line 14) | public function rules(): array
    method validated (line 24) | public function validated($key = null, $default = null): array

FILE: app/Http/Requests/Api/Application/ApplicationApiRequest.php
  class ApplicationApiRequest (line 14) | abstract class ApplicationApiRequest extends FormRequest
    method authorize (line 34) | public function authorize(): bool
    method rules (line 55) | public function rules(): array
    method withValidator (line 65) | public function withValidator(Validator $validator): void
    method parameter (line 82) | public function parameter(string $key, string $expect)

FILE: app/Http/Requests/Api/Application/Locations/DeleteLocationRequest.php
  class DeleteLocationRequest (line 8) | class DeleteLocationRequest extends ApplicationApiRequest

FILE: app/Http/Requests/Api/Application/Locations/GetLocationRequest.php
  class GetLocationRequest (line 5) | class GetLocationRequest extends GetLocationsRequest

FILE: app/Http/Requests/Api/Application/Locations/GetLocationsRequest.php
  class GetLocationsRequest (line 8) | class GetLocationsRequest extends ApplicationApiRequest

FILE: app/Http/Requests/Api/Application/Locations/StoreLocationRequest.php
  class StoreLocationRequest (line 9) | class StoreLocationRequest extends ApplicationApiRequest
    method rules (line 18) | public function rules(): array
    method attributes (line 29) | public function attributes(): array

FILE: app/Http/Requests/Api/Application/Locations/UpdateLocationRequest.php
  class UpdateLocationRequest (line 7) | class UpdateLocationRequest extends StoreLocationRequest
    method rules (line 12) | public function rules(): array

FILE: app/Http/Requests/Api/Application/Nests/Eggs/GetEggRequest.php
  class GetEggRequest (line 8) | class GetEggRequest extends ApplicationApiRequest

FILE: app/Http/Requests/Api/Application/Nests/Eggs/GetEggsRequest.php
  class GetEggsRequest (line 8) | class GetEggsRequest extends ApplicationApiRequest

FILE: app/Http/Requests/Api/Application/Nests/GetNestsRequest.php
  class GetNestsRequest (line 8) | class GetNestsRequest extends ApplicationApiRequest

FILE: app/Http/Requests/Api/Application/Nodes/DeleteNodeRequest.php
  class DeleteNodeRequest (line 8) | class DeleteNodeRequest extends ApplicationApiRequest

FILE: app/Http/Requests/Api/Application/Nodes/GetDeployableNodesRequest.php
  class GetDeployableNodesRequest (line 5) | class GetDeployableNodesRequest extends GetNodesRequest
    method rules (line 7) | public function rules(): array

FILE: app/Http/Requests/Api/Application/Nodes/GetNodeRequest.php
  class GetNodeRequest (line 5) | class GetNodeRequest extends GetNodesRequest

FILE: app/Http/Requests/Api/Application/Nodes/GetNodesRequest.php
  class GetNodesRequest (line 8) | class GetNodesRequest extends ApplicationApiRequest

FILE: app/Http/Requests/Api/Application/Nodes/StoreNodeRequest.php
  class StoreNodeRequest (line 9) | class StoreNodeRequest extends ApplicationApiRequest
    method rules (line 18) | public function rules(?array $rules = null): array
    method attributes (line 47) | public function attributes(): array
    method validated (line 61) | public function validated($key = null, $default = null): array

FILE: app/Http/Requests/Api/Application/Nodes/UpdateNodeRequest.php
  class UpdateNodeRequest (line 7) | class UpdateNodeRequest extends StoreNodeRequest
    method rules (line 13) | public function rules(?array $rules = null): array

FILE: app/Http/Requests/Api/Application/Servers/Databases/GetServerDatabaseRequest.php
  class GetServerDatabaseRequest (line 8) | class GetServerDatabaseRequest extends ApplicationApiRequest

FILE: app/Http/Requests/Api/Application/Servers/Databases/GetServerDatabasesRequest.php
  class GetServerDatabasesRequest (line 8) | class GetServerDatabasesRequest extends ApplicationApiRequest

FILE: app/Http/Requests/Api/Application/Servers/Databases/ServerDatabaseWriteRequest.php
  class ServerDatabaseWriteRequest (line 7) | class ServerDatabaseWriteRequest extends GetServerDatabasesRequest

FILE: app/Http/Requests/Api/Application/Servers/Databases/StoreServerDatabaseRequest.php
  class StoreServerDatabaseRequest (line 13) | class StoreServerDatabaseRequest extends ApplicationApiRequest
    method rules (line 22) | public function rules(): array
    method validated (line 44) | public function validated($key = null, $default = null): array
    method attributes (line 56) | public function attributes(): array
    method databaseName (line 68) | public function databaseName(): string

FILE: app/Http/Requests/Api/Application/Servers/GetExternalServerRequest.php
  class GetExternalServerRequest (line 8) | class GetExternalServerRequest extends ApplicationApiRequest

FILE: app/Http/Requests/Api/Application/Servers/GetServerRequest.php
  class GetServerRequest (line 8) | class GetServerRequest extends ApplicationApiRequest

FILE: app/Http/Requests/Api/Application/Servers/GetServersRequest.php
  class GetServersRequest (line 5) | class GetServersRequest extends GetServerRequest
    method rules (line 7) | public function rules(): array

FILE: app/Http/Requests/Api/Application/Servers/ServerWriteRequest.php
  class ServerWriteRequest (line 8) | class ServerWriteRequest extends ApplicationApiRequest

FILE: app/Http/Requests/Api/Application/Servers/StoreServerRequest.php
  class StoreServerRequest (line 12) | class StoreServerRequest extends ApplicationApiRequest
    method rules (line 21) | public function rules(): array
    method validated (line 71) | public function validated($key = null, $default = null): array
    method withValidator (line 106) | public function withValidator(Validator $validator): void
    method getDeploymentObject (line 138) | public function getDeploymentObject(): ?DeploymentObject

FILE: app/Http/Requests/Api/Application/Servers/UpdateServerBuildConfigurationRequest.php
  class UpdateServerBuildConfigurationRequest (line 8) | class UpdateServerBuildConfigurationRequest extends ServerWriteRequest
    method rules (line 13) | public function rules(): array
    method validated (line 55) | public function validated($key = null, $default = null): array
    method attributes (line 80) | public function attributes(): array
    method requiredToOptional (line 100) | protected function requiredToOptional(string $field, array $rules, boo...

FILE: app/Http/Requests/Api/Application/Servers/UpdateServerDetailsRequest.php
  class UpdateServerDetailsRequest (line 7) | class UpdateServerDetailsRequest extends ServerWriteRequest
    method rules (line 12) | public function rules(): array
    method validated (line 28) | public function validated($key = null, $default = null): array
    method attributes (line 42) | public function attributes(): array

FILE: app/Http/Requests/Api/Application/Servers/UpdateServerStartupRequest.php
  class UpdateServerStartupRequest (line 9) | class UpdateServerStartupRequest extends ApplicationApiRequest
    method rules (line 18) | public function rules(): array
    method validated (line 34) | public function validated($key = null, $default = null): array

FILE: app/Http/Requests/Api/Application/Users/DeleteUserRequest.php
  class DeleteUserRequest (line 8) | class DeleteUserRequest extends ApplicationApiRequest

FILE: app/Http/Requests/Api/Application/Users/GetExternalUserRequest.php
  class GetExternalUserRequest (line 8) | class GetExternalUserRequest extends ApplicationApiRequest

FILE: app/Http/Requests/Api/Application/Users/GetUsersRequest.php
  class GetUsersRequest (line 8) | class GetUsersRequest extends ApplicationApiRequest

FILE: app/Http/Requests/Api/Application/Users/StoreUserRequest.php
  class StoreUserRequest (line 9) | class StoreUserRequest extends ApplicationApiRequest
    method rules (line 18) | public function rules(?array $rules = null): array
    method validated (line 37) | public function validated($key = null, $default = null): array
    method attributes (line 52) | public function attributes(): array

FILE: app/Http/Requests/Api/Application/Users/UpdateUserRequest.php
  class UpdateUserRequest (line 7) | class UpdateUserRequest extends StoreUserRequest
    method rules (line 12) | public function rules(?array $rules = null): array

FILE: app/Http/Requests/Api/Client/Account/StoreApiKeyRequest.php
  class StoreApiKeyRequest (line 10) | class StoreApiKeyRequest extends ClientApiRequest
    method rules (line 12) | public function rules(): array
    method withValidator (line 26) | public function withValidator(Validator $validator): void

FILE: app/Http/Requests/Api/Client/Account/StoreSSHKeyRequest.php
  class StoreSSHKeyRequest (line 14) | class StoreSSHKeyRequest extends ClientApiRequest
    method rules (line 21) | public function rules(): array
    method withValidator (line 33) | public function withValidator(Validator $validator): void
    method getPublicKey (line 62) | public function getPublicKey(): string
    method getKeyFingerprint (line 70) | public function getKeyFingerprint(): string

FILE: app/Http/Requests/Api/Client/Account/UpdateEmailRequest.php
  class UpdateEmailRequest (line 11) | class UpdateEmailRequest extends ClientApiRequest
    method authorize (line 16) | public function authorize(): bool
    method rules (line 32) | public function rules(): array

FILE: app/Http/Requests/Api/Client/Account/UpdatePasswordRequest.php
  class UpdatePasswordRequest (line 10) | class UpdatePasswordRequest extends ClientApiRequest
    method authorize (line 15) | public function authorize(): bool
    method rules (line 31) | public function rules(): array

FILE: app/Http/Requests/Api/Client/ClientApiRequest.php
  class ClientApiRequest (line 12) | class ClientApiRequest extends ApplicationApiRequest
    method authorize (line 17) | public function authorize(): bool

FILE: app/Http/Requests/Api/Client/GetServersRequest.php
  class GetServersRequest (line 5) | class GetServersRequest extends ClientApiRequest
    method authorize (line 7) | public function authorize(): bool

FILE: app/Http/Requests/Api/Client/Servers/Backups/RestoreBackupRequest.php
  class RestoreBackupRequest (line 8) | class RestoreBackupRequest extends ClientApiRequest
    method permission (line 10) | public function permission(): string
    method rules (line 15) | public function rules(): array

FILE: app/Http/Requests/Api/Client/Servers/Backups/StoreBackupRequest.php
  class StoreBackupRequest (line 8) | class StoreBackupRequest extends ClientApiRequest
    method permission (line 10) | public function permission(): string
    method rules (line 15) | public function rules(): array

FILE: app/Http/Requests/Api/Client/Servers/Databases/DeleteDatabaseRequest.php
  class DeleteDatabaseRequest (line 9) | class DeleteDatabaseRequest extends ClientApiRequest implements ClientPe...
    method permission (line 11) | public function permission(): string

FILE: app/Http/Requests/Api/Client/Servers/Databases/GetDatabasesRequest.php
  class GetDatabasesRequest (line 9) | class GetDatabasesRequest extends ClientApiRequest implements ClientPerm...
    method permission (line 11) | public function permission(): string

FILE: app/Http/Requests/Api/Client/Servers/Databases/RotatePasswordRequest.php
  class RotatePasswordRequest (line 8) | class RotatePasswordRequest extends ClientApiRequest
    method permission (line 13) | public function permission(): string

FILE: app/Http/Requests/Api/Client/Servers/Databases/StoreDatabaseRequest.php
  class StoreDatabaseRequest (line 15) | class StoreDatabaseRequest extends ClientApiRequest implements ClientPer...
    method permission (line 17) | public function permission(): string
    method rules (line 22) | public function rules(): array
    method messages (line 46) | public function messages(): array

FILE: app/Http/Requests/Api/Client/Servers/Files/ChmodFilesRequest.php
  class ChmodFilesRequest (line 9) | class ChmodFilesRequest extends ClientApiRequest implements ClientPermis...
    method permission (line 11) | public function permission(): string
    method rules (line 16) | public function rules(): array

FILE: app/Http/Requests/Api/Client/Servers/Files/CompressFilesRequest.php
  class CompressFilesRequest (line 8) | class CompressFilesRequest extends ClientApiRequest
    method permission (line 13) | public function permission(): string
    method rules (line 18) | public function rules(): array

FILE: app/Http/Requests/Api/Client/Servers/Files/CopyFileRequest.php
  class CopyFileRequest (line 9) | class CopyFileRequest extends ClientApiRequest implements ClientPermissi...
    method permission (line 11) | public function permission(): string
    method rules (line 16) | public function rules(): array

FILE: app/Http/Requests/Api/Client/Servers/Files/CreateFolderRequest.php
  class CreateFolderRequest (line 8) | class CreateFolderRequest extends ClientApiRequest
    method permission (line 13) | public function permission(): string
    method rules (line 18) | public function rules(): array

FILE: app/Http/Requests/Api/Client/Servers/Files/DecompressFilesRequest.php
  class DecompressFilesRequest (line 8) | class DecompressFilesRequest extends ClientApiRequest
    method permission (line 15) | public function permission(): string
    method rules (line 20) | public function rules(): array

FILE: app/Http/Requests/Api/Client/Servers/Files/DeleteFileRequest.php
  class DeleteFileRequest (line 9) | class DeleteFileRequest extends ClientApiRequest implements ClientPermis...
    method permission (line 11) | public function permission(): string
    method rules (line 16) | public function rules(): array

FILE: app/Http/Requests/Api/Client/Servers/Files/DownloadFileRequest.php
  class DownloadFileRequest (line 8) | class DownloadFileRequest extends ClientApiRequest
    method authorize (line 14) | public function authorize(): bool

FILE: app/Http/Requests/Api/Client/Servers/Files/GetFileContentsRequest.php
  class GetFileContentsRequest (line 9) | class GetFileContentsRequest extends ClientApiRequest implements ClientP...
    method permission (line 16) | public function permission(): string
    method rules (line 21) | public function rules(): array

FILE: app/Http/Requests/Api/Client/Servers/Files/ListFilesRequest.php
  class ListFilesRequest (line 8) | class ListFilesRequest extends ClientApiRequest
    method permission (line 14) | public function permission(): string
    method rules (line 19) | public function rules(): array

FILE: app/Http/Requests/Api/Client/Servers/Files/PullFileRequest.php
  class PullFileRequest (line 9) | class PullFileRequest extends ClientApiRequest implements ClientPermissi...
    method permission (line 11) | public function permission(): string
    method rules (line 16) | public function rules(): array

FILE: app/Http/Requests/Api/Client/Servers/Files/RenameFileRequest.php
  class RenameFileRequest (line 9) | class RenameFileRequest extends ClientApiRequest implements ClientPermis...
    method permission (line 15) | public function permission(): string
    method rules (line 20) | public function rules(): array

FILE: app/Http/Requests/Api/Client/Servers/Files/UploadFileRequest.php
  class UploadFileRequest (line 8) | class UploadFileRequest extends ClientApiRequest
    method permission (line 10) | public function permission(): string

FILE: app/Http/Requests/Api/Client/Servers/Files/WriteFileContentRequest.php
  class WriteFileContentRequest (line 9) | class WriteFileContentRequest extends ClientApiRequest implements Client...
    method permission (line 16) | public function permission(): string
    method rules (line 26) | public function rules(): array

FILE: app/Http/Requests/Api/Client/Servers/GetServerRequest.php
  class GetServerRequest (line 7) | class GetServerRequest extends ClientApiRequest
    method authorize (line 14) | public function authorize(): bool

FILE: app/Http/Requests/Api/Client/Servers/Network/DeleteAllocationRequest.php
  class DeleteAllocationRequest (line 8) | class DeleteAllocationRequest extends ClientApiRequest
    method permission (line 10) | public function permission(): string

FILE: app/Http/Requests/Api/Client/Servers/Network/GetNetworkRequest.php
  class GetNetworkRequest (line 8) | class GetNetworkRequest extends ClientApiRequest
    method permission (line 14) | public function permission(): string

FILE: app/Http/Requests/Api/Client/Servers/Network/NewAllocationRequest.php
  class NewAllocationRequest (line 8) | class NewAllocationRequest extends ClientApiRequest
    method permission (line 10) | public function permission(): string
    method rules (line 15) | public function rules(): array

FILE: app/Http/Requests/Api/Client/Servers/Network/SetPrimaryAllocationRequest.php
  class SetPrimaryAllocationRequest (line 5) | class SetPrimaryAllocationRequest extends UpdateAllocationRequest
    method rules (line 7) | public function rules(): array

FILE: app/Http/Requests/Api/Client/Servers/Network/UpdateAllocationRequest.php
  class UpdateAllocationRequest (line 9) | class UpdateAllocationRequest extends ClientApiRequest
    method permission (line 11) | public function permission(): string
    method rules (line 16) | public function rules(): array

FILE: app/Http/Requests/Api/Client/Servers/Schedules/DeleteScheduleRequest.php
  class DeleteScheduleRequest (line 7) | class DeleteScheduleRequest extends ViewScheduleRequest
    method permission (line 9) | public function permission(): string

FILE: app/Http/Requests/Api/Client/Servers/Schedules/StoreScheduleRequest.php
  class StoreScheduleRequest (line 8) | class StoreScheduleRequest extends ViewScheduleRequest
    method permission (line 10) | public function permission(): string
    method rules (line 15) | public function rules(): array

FILE: app/Http/Requests/Api/Client/Servers/Schedules/StoreTaskRequest.php
  class StoreTaskRequest (line 7) | class StoreTaskRequest extends ViewScheduleRequest
    method permission (line 14) | public function permission(): string
    method rules (line 19) | public function rules(): array

FILE: app/Http/Requests/Api/Client/Servers/Schedules/TriggerScheduleRequest.php
  class TriggerScheduleRequest (line 8) | class TriggerScheduleRequest extends ClientApiRequest
    method permission (line 10) | public function permission(): string
    method rules (line 15) | public function rules(): array

FILE: app/Http/Requests/Api/Client/Servers/Schedules/UpdateScheduleRequest.php
  class UpdateScheduleRequest (line 7) | class UpdateScheduleRequest extends StoreScheduleRequest
    method permission (line 9) | public function permission(): string

FILE: app/Http/Requests/Api/Client/Servers/Schedules/ViewScheduleRequest.php
  class ViewScheduleRequest (line 12) | class ViewScheduleRequest extends ClientApiRequest
    method authorize (line 17) | public function authorize(): bool
    method permission (line 39) | public function permission(): string

FILE: app/Http/Requests/Api/Client/Servers/SendCommandRequest.php
  class SendCommandRequest (line 8) | class SendCommandRequest extends ClientApiRequest
    method permission (line 13) | public function permission(): string
    method rules (line 21) | public function rules(): array

FILE: app/Http/Requests/Api/Client/Servers/SendPowerRequest.php
  class SendPowerRequest (line 8) | class SendPowerRequest extends ClientApiRequest
    method permission (line 13) | public function permission(): string
    method rules (line 31) | public function rules(): array

FILE: app/Http/Requests/Api/Client/Servers/Settings/ReinstallServerRequest.php
  class ReinstallServerRequest (line 8) | class ReinstallServerRequest extends ClientApiRequest
    method permission (line 10) | public function permission(): string

FILE: app/Http/Requests/Api/Client/Servers/Settings/RenameServerRequest.php
  class RenameServerRequest (line 10) | class RenameServerRequest extends ClientApiRequest implements ClientPerm...
    method permission (line 17) | public function permission(): string
    method rules (line 25) | public function rules(): array

FILE: app/Http/Requests/Api/Client/Servers/Settings/SetDockerImageRequest.php
  class SetDockerImageRequest (line 12) | class SetDockerImageRequest extends ClientApiRequest implements ClientPe...
    method permission (line 14) | public function permission(): string
    method rules (line 19) | public function rules(): array

FILE: app/Http/Requests/Api/Client/Servers/Startup/GetStartupRequest.php
  class GetStartupRequest (line 8) | class GetStartupRequest extends ClientApiRequest
    method permission (line 10) | public function permission(): string

FILE: app/Http/Requests/Api/Client/Servers/Startup/UpdateEggRequest.php
  class UpdateEggRequest (line 8) | class UpdateEggRequest extends ClientApiRequest
    method permission (line 10) | public function permission(): string
    method rules (line 15) | public function rules(): array

FILE: app/Http/Requests/Api/Client/Servers/Startup/UpdateStartupVariableRequest.php
  class UpdateStartupVariableRequest (line 8) | class UpdateStartupVariableRequest extends ClientApiRequest
    method permission (line 10) | public function permission(): string
    method rules (line 18) | public function rules(): array

FILE: app/Http/Requests/Api/Client/Servers/Subusers/DeleteSubuserRequest.php
  class DeleteSubuserRequest (line 7) | class DeleteSubuserRequest extends SubuserRequest
    method permission (line 9) | public function permission(): string

FILE: app/Http/Requests/Api/Client/Servers/Subusers/GetSubuserRequest.php
  class GetSubuserRequest (line 7) | class GetSubuserRequest extends SubuserRequest
    method permission (line 12) | public function permission(): string

FILE: app/Http/Requests/Api/Client/Servers/Subusers/StoreSubuserRequest.php
  class StoreSubuserRequest (line 7) | class StoreSubuserRequest extends SubuserRequest
    method permission (line 9) | public function permission(): string
    method rules (line 14) | public function rules(): array

FILE: app/Http/Requests/Api/Client/Servers/Subusers/SubuserRequest.php
  class SubuserRequest (line 12) | abstract class SubuserRequest extends ClientApiRequest
    method authorize (line 21) | public function authorize(): bool
    method validatePermissionsCanBeAssigned (line 52) | protected function validatePermissionsCanBeAssigned(array $permissions)

FILE: app/Http/Requests/Api/Client/Servers/Subusers/UpdateSubuserRequest.php
  class UpdateSubuserRequest (line 7) | class UpdateSubuserRequest extends SubuserRequest
    method permission (line 9) | public function permission(): string
    method rules (line 14) | public function rules(): array

FILE: app/Http/Requests/Api/Remote/ActivityEventRequest.php
  class ActivityEventRequest (line 8) | class ActivityEventRequest extends FormRequest
    method authorize (line 10) | public function authorize(): bool
    method rules (line 15) | public function rules(): array
    method servers (line 32) | public function servers(): array
    method users (line 40) | public function users(): array

FILE: app/Http/Requests/Api/Remote/AuthenticateWebsocketDetailsRequest.php
  class AuthenticateWebsocketDetailsRequest (line 7) | class AuthenticateWebsocketDetailsRequest extends FormRequest
    method authorize (line 9) | public function authorize(): bool
    method rules (line 14) | public function rules(): array

FILE: app/Http/Requests/Api/Remote/InstallationDataRequest.php
  class InstallationDataRequest (line 7) | class InstallationDataRequest extends FormRequest
    method authorize (line 9) | public function authorize(): bool
    method rules (line 14) | public function rules(): array

FILE: app/Http/Requests/Api/Remote/ReportBackupCompleteRequest.php
  class ReportBackupCompleteRequest (line 7) | class ReportBackupCompleteRequest extends FormRequest
    method rules (line 9) | public function rules(): array

FILE: app/Http/Requests/Api/Remote/SftpAuthenticationFormRequest.php
  class SftpAuthenticationFormRequest (line 7) | class SftpAuthenticationFormRequest extends FormRequest
    method authorize (line 12) | public function authorize(): bool
    method rules (line 20) | public function rules(): array
    method normalize (line 33) | public function normalize(): array

FILE: app/Http/Requests/Auth/LoginCheckpointRequest.php
  class LoginCheckpointRequest (line 8) | class LoginCheckpointRequest extends FormRequest
    method authorize (line 13) | public function authorize(): bool
    method rules (line 21) | public function rules(): array

FILE: app/Http/Requests/Auth/LoginRequest.php
  class LoginRequest (line 7) | class LoginRequest extends FormRequest
    method authorized (line 9) | public function authorized(): bool
    method rules (line 14) | public function rules(): array

FILE: app/Http/Requests/Auth/ResetPasswordRequest.php
  class ResetPasswordRequest (line 7) | class ResetPasswordRequest extends FormRequest
    method authorize (line 9) | public function authorize(): bool
    method rules (line 14) | public function rules(): array

FILE: app/Http/Requests/Base/LocaleRequest.php
  class LocaleRequest (line 7) | class LocaleRequest extends FormRequest
    method rules (line 9) | public function rules(): array

FILE: app/Http/Requests/FrontendUserFormRequest.php
  class FrontendUserFormRequest (line 7) | abstract class FrontendUserFormRequest extends FormRequest
    method rules (line 9) | abstract public function rules(): array;
    method authorize (line 14) | public function authorize(): bool
    method normalize (line 23) | public function normalize(): array

FILE: app/Http/Resources/Wings/ServerConfigurationCollection.php
  class ServerConfigurationCollection (line 11) | class ServerConfigurationCollection extends ResourceCollection
    method toArray (line 19) | public function toArray($request): array

FILE: app/Http/ViewComposers/AssetComposer.php
  class AssetComposer (line 8) | class AssetComposer
    method __construct (line 13) | public function __construct(private AssetHashService $assetHashService)
    method compose (line 20) | public function compose(View $view): void

FILE: app/Jobs/RevokeSftpAccessJob.php
  class RevokeSftpAccessJob (line 18) | #[DeleteWhenMissingModels]
    method __construct (line 27) | public function __construct(
    method uniqueId (line 34) | public function uniqueId(): string
    method handle (line 41) | public function handle(DaemonRevocationRepository $repository): void

FILE: app/Jobs/Schedule/RunTaskJob.php
  class RunTaskJob (line 16) | class RunTaskJob implements ShouldQueue
    method __construct (line 25) | public function __construct(public Task $task, public bool $manualRun ...
    method handle (line 35) | public function handle(
    method failed (line 89) | public function failed(?\Exception $exception = null)
    method queueNextTask (line 98) | private function queueNextTask()
    method markScheduleComplete (line 120) | private function markScheduleComplete()
    method markTaskNotQueued (line 131) | private function markTaskNotQueued()

FILE: app/Listeners/AuthenticationListener.php
  class AuthenticationListener (line 12) | class AuthenticationListener implements SubscribesToEvents
    method login (line 18) | public function login(Failed|DirectLogin $event): void
    method reset (line 34) | public function reset(PasswordReset $event): void
    method subscribe (line 39) | public function subscribe(Dispatcher $events): void

FILE: app/Listeners/RevocationListener.php
  class RevocationListener (line 13) | class RevocationListener implements SubscribesToEvents
    method revoke (line 15) | public function revoke(Deleting|PasswordChanged $event): void
    method subscribe (line 28) | public function subscribe(Dispatcher $events): void

FILE: app/Listeners/TwoFactorListener.php
  class TwoFactorListener (line 10) | class TwoFactorListener implements SubscribesToEvents
    method __invoke (line 12) | public function __invoke(ProvidedAuthenticationToken $event): void
    method subscribe (line 20) | public function subscribe(Dispatcher $events): void

FILE: app/Models/APILog.php
  class APILog (line 7) | class APILog extends Model

FILE: app/Models/ActivityLog.php
  class ActivityLog (line 53) | #[Attributes\Identifiable('actl')]
    method actor (line 92) | public function actor(): MorphTo
    method subjects (line 105) | public function subjects(): HasMany
    method apiKey (line 113) | public function apiKey(): HasOne
    method scopeForEvent (line 118) | public function scopeForEvent(Builder $builder, string $action): Builder
    method scopeForActor (line 126) | public function scopeForActor(Builder $builder, IlluminateModel $actor...
    method prunable (line 136) | public function prunable()
    method boot (line 149) | protected static function boot()

FILE: app/Models/ActivityLogSubject.php
  class ActivityLogSubject (line 25) | class ActivityLogSubject extends Pivot
    method activityLog (line 37) | public function activityLog(): BelongsTo
    method subject (line 45) | public function subject(): MorphTo

FILE: app/Models/Allocation.php
  class Allocation (line 42) | class Allocation extends Model
    method getRouteKeyName (line 81) | public function getRouteKeyName(): string
    method getHashidAttribute (line 89) | public function getHashidAttribute(): string
    method getAliasAttribute (line 97) | public function getAliasAttribute(?string $value): string
    method getHasAliasAttribute (line 105) | public function getHasAliasAttribute(?string $value): bool
    method toString (line 110) | public function toString(): string
    method server (line 120) | public function server(): BelongsTo
    method node (line 130) | public function node(): BelongsTo

FILE: app/Models/ApiKey.php
  class ApiKey (line 64) | class ApiKey extends Model implements HasAbilities
    method can (line 163) | public function can($ability)
    method cant (line 170) | public function cant($ability)
    method user (line 180) | public function user(): BelongsTo
    method tokenable (line 192) | public function tokenable(): BelongsTo
    method findToken (line 200) | public static function findToken(string $token): ?self
    method getPrefixForType (line 215) | public static function getPrefixForType(int $type): string
    method generateTokenIdentifier (line 225) | public static function generateTokenIdentifier(int $type): string

FILE: app/Models/Attributes/Identifiable.php
  class Identifiable (line 5) | #[\Attribute(\Attribute::TARGET_CLASS)]
    method __construct (line 8) | public function __construct(public string $prefix, public string $colu...

FILE: app/Models/AuditLog.php
  class AuditLog (line 13) | class AuditLog extends Model
    method user (line 45) | public function user(): BelongsTo
    method server (line 53) | public function server(): BelongsTo
    method instance (line 65) | public static function instance(string $action, array $metadata, bool ...

FILE: app/Models/Backup.php
  class Backup (line 30) | #[Attributes\Identifiable('bkup')]
    method server (line 82) | public function server(): BelongsTo

FILE: app/Models/Database.php
  class Database (line 24) | class Database extends Model
    method getRouteKeyName (line 71) | public function getRouteKeyName(): string
    method resolveRouteBinding (line 84) | public function resolveRouteBinding($value, $field = null): ?\Illumina...
    method host (line 100) | public function host(): BelongsTo
    method server (line 110) | public function server(): BelongsTo

FILE: app/Models/DatabaseHost.php
  class DatabaseHost (line 21) | class DatabaseHost extends Model
    method node (line 77) | public function node(): BelongsTo
    method databases (line 87) | public function databases(): HasMany

FILE: app/Models/Egg.php
  class Egg (line 52) | #[Attributes\Identifiable('eegg')]
    method getCopyScriptInstallAttribute (line 159) | public function getCopyScriptInstallAttribute(): ?string
    method getCopyScriptEntryAttribute (line 172) | public function getCopyScriptEntryAttribute(): string
    method getCopyScriptContainerAttribute (line 185) | public function getCopyScriptContainerAttribute(): string
    method getInheritConfigFilesAttribute (line 197) | public function getInheritConfigFilesAttribute(): ?string
    method getInheritConfigStartupAttribute (line 209) | public function getInheritConfigStartupAttribute(): ?string
    method getInheritConfigLogsAttribute (line 221) | public function getInheritConfigLogsAttribute(): ?string
    method getInheritConfigStopAttribute (line 233) | public function getInheritConfigStopAttribute(): ?string
    method getInheritFeaturesAttribute (line 246) | public function getInheritFeaturesAttribute(): ?array
    method getInheritFileDenylistAttribute (line 259) | public function getInheritFileDenylistAttribute(): ?array
    method nest (line 273) | public function nest(): BelongsTo
    method servers (line 283) | public function servers(): HasMany
    method variables (line 293) | public function variables(): HasMany
    method scriptFrom (line 303) | public function scriptFrom(): BelongsTo
    method configFrom (line 313) | public function configFrom(): BelongsTo

FILE: app/Models/EggMount.php
  class EggMount (line 5) | class EggMount extends Model

FILE: app/Models/EggVariable.php
  class EggVariable (line 29) | class EggVariable extends Model
    method getRequiredAttribute (line 82) | public function getRequiredAttribute(): bool
    method egg (line 90) | public function egg(): HasOne
    method serverVariable (line 100) | public function serverVariable(): HasMany

FILE: app/Models/Filters/AdminServerFilter.php
  class AdminServerFilter (line 8) | class AdminServerFilter implements Filter
    method __invoke (line 16) | public function __invoke(Builder $query, $value, string $property)

FILE: app/Models/Filters/MultiFieldServerFilter.php
  class MultiFieldServerFilter (line 9) | class MultiFieldServerFilter implements Filter
    method __invoke (line 24) | public function __invoke(Builder $query, $value, string $property)

FILE: app/Models/Location.php
  class Location (line 18) | class Location extends Model
    method getRouteKeyName (line 47) | public function getRouteKeyName(): string
    method nodes (line 57) | public function nodes(): HasMany
    method servers (line 67) | public function servers(): HasManyThrough

FILE: app/Models/Model.php
  class Model (line 17) | abstract class Model extends IlluminateModel
    method boot (line 40) | protected static function boot()
    method getRouteKeyName (line 66) | public function getRouteKeyName(): string
    method skipValidation (line 74) | public function skipValidation(): self
    method getValidator (line 84) | public function getValidator(): \Illuminate\Validation\Validator
    method getRules (line 95) | public static function getRules(): array
    method getRulesForField (line 109) | public static function getRulesForField(string $field): array
    method getRulesForUpdate (line 118) | public static function getRulesForUpdate($model, string $column = 'id'...
    method validate (line 150) | public function validate(): void
    method asDateTime (line 175) | protected function asDateTime($value): Carbon|CarbonImmutable

FILE: app/Models/Mount.php
  class Mount (line 23) | #[Attributes\Identifiable('moun')]
    method getRules (line 69) | public static function getRules(): array
    method eggs (line 105) | public function eggs(): BelongsToMany
    method nodes (line 115) | public function nodes(): BelongsToMany
    method servers (line 125) | public function servers(): BelongsToMany

FILE: app/Models/MountNode.php
  class MountNode (line 7) | class MountNode extends Model

FILE: app/Models/MountServer.php
  class MountServer (line 7) | class MountServer extends Model

FILE: app/Models/Nest.php
  class Nest (line 19) | class Nest extends Model
    method eggs (line 54) | public function eggs(): HasMany
    method servers (line 64) | public function servers(): HasMany

FILE: app/Models/Node.php
  class Node (line 45) | #[Attributes\Identifiable('node')]
    method getConnectionAddress (line 134) | public function getConnectionAddress(): string
    method getConfiguration (line 142) | public function getConfiguration(): array
    method getYamlConfiguration (line 173) | public function getYamlConfiguration(): string
    method getJsonConfiguration (line 181) | public function getJsonConfiguration(bool $pretty = false): string
    method getDecryptedKey (line 189) | public function getDecryptedKey(): string
    method isUnderMaintenance (line 196) | public function isUnderMaintenance(): bool
    method mounts (line 204) | public function mounts(): HasManyThrough
    method location (line 214) | public function location(): BelongsTo
    method servers (line 224) | public function servers(): HasMany
    method allocations (line 234) | public function allocations(): HasMany
    method isViable (line 242) | public function isViable(int $memory, int $disk): bool

FILE: app/Models/Objects/DeploymentObject.php
  class DeploymentObject (line 5) | class DeploymentObject
    method isDedicated (line 13) | public function isDedicated(): bool
    method setDedicated (line 18) | public function setDedicated(bool $dedicated): self
    method getLocations (line 25) | public function getLocations(): array
    method setLocations (line 30) | public function setLocations(array $locations): self
    method getPorts (line 37) | public function getPorts(): array
    method setPorts (line 42) | public function setPorts(array $ports): self

FILE: app/Models/Permission.php
  class Permission (line 7) | class Permission extends Model
    method permissions (line 217) | public static function permissions(): Collection

FILE: app/Models/RecoveryToken.php
  class RecoveryToken (line 14) | class RecoveryToken extends Model
    method user (line 32) | public function user(): BelongsTo

FILE: app/Models/Schedule.php
  class Schedule (line 33) | class Schedule extends Model
    method getRouteKeyName (line 109) | public function getRouteKeyName(): string
    method getNextRunDate (line 119) | public function getNextRunDate(): CarbonImmutable
    method getHashidAttribute (line 129) | public function getHashidAttribute(): string
    method tasks (line 139) | public function tasks(): HasMany
    method server (line 149) | public function server(): BelongsTo

FILE: app/Models/Server.php
  class Server (line 108) | #[Attributes\Identifiable('serv')]
    method getAllocationMappings (line 206) | public function getAllocationMappings(): array
    method isInstalled (line 213) | public function isInstalled(): bool
    method isSuspended (line 218) | public function isSuspended(): bool
    method user (line 228) | public function user(): BelongsTo
    method subusers (line 238) | public function subusers(): HasMany
    method allocation (line 248) | public function allocation(): HasOne
    method allocations (line 258) | public function allocations(): HasMany
    method nest (line 268) | public function nest(): BelongsTo
    method egg (line 278) | public function egg(): HasOne
    method variables (line 288) | public function variables(): HasMany
    method node (line 308) | public function node(): BelongsTo
    method schedules (line 318) | public function schedules(): HasMany
    method databases (line 328) | public function databases(): HasMany
    method location (line 340) | public function location(): \Znck\Eloquent\Relations\BelongsToThrough
    method transfer (line 350) | public function transfer(): HasOne
    method backups (line 358) | public function backups(): HasMany
    method mounts (line 368) | public function mounts(): HasManyThrough
    method activity (line 378) | public function activity(): MorphToMany
    method validateCurrentState (line 390) | public function validateCurrentState()
    method validateTransferState (line 409) | public function validateTransferState()

FILE: app/Models/ServerTransfer.php
  class ServerTransfer (line 26) | class ServerTransfer extends Model
    method server (line 80) | public function server(): BelongsTo
    method oldNode (line 90) | public function oldNode(): HasOne
    method newNode (line 100) | public function newNode(): HasOne

FILE: app/Models/ServerVariable.php
  class ServerVariable (line 17) | class ServerVariable extends Model
    method server (line 47) | public function server(): BelongsTo
    method variable (line 57) | public function variable(): BelongsTo

FILE: app/Models/Session.php
  class Session (line 7) | class Session extends Model

FILE: app/Models/Setting.php
  class Setting (line 12) | class Setting extends Model

FILE: app/Models/Subuser.php
  class Subuser (line 20) | class Subuser extends Model
    method getHashidAttribute (line 61) | public function getHashidAttribute(): string
    method server (line 71) | public function server(): BelongsTo
    method user (line 81) | public function user(): BelongsTo
    method permissions (line 91) | public function permissions(): HasMany

FILE: app/Models/Task.php
  class Task (line 26) | class Task extends Model
    method getRouteKeyName (line 99) | public function getRouteKeyName(): string
    method getHashidAttribute (line 107) | public function getHashidAttribute(): string
    method schedule (line 117) | public function schedule(): BelongsTo
    method server (line 127) | public function server(): \Znck\Eloquent\Relations\BelongsToThrough

FILE: app/Models/TaskLog.php
  class TaskLog (line 7) | class TaskLog extends Model

FILE: app/Models/Traits/HasAccessTokens.php
  type HasAccessTokens (line 17) | trait HasAccessTokens
    method tokens (line 25) | public function tokens(): HasMany
    method createToken (line 30) | public function createToken(?string $memo, ?array $ips): NewAccessToken

FILE: app/Models/Traits/HasRealtimeIdentifier.php
  type HasRealtimeIdentifier (line 25) | trait HasRealtimeIdentifier
    method identifier (line 31) | protected function identifier(): Attribute
    method scopeWhereIdentifier (line 40) | public function scopeWhereIdentifier(Builder $builder, string $identif...
    method bootHasRealtimeIdentifier (line 58) | protected static function bootHasRealtimeIdentifier(): void

FILE: app/Models/User.php
  class User (line 84) | #[Attributes\Identifiable('user')]
    method getRules (line 186) | public static function getRules(): array
    method toVueObject (line 199) | public function toVueObject(): array
    method sendPasswordResetNotification (line 211) | public function sendPasswordResetNotification($token)
    method setUsernameAttribute (line 224) | public function setUsernameAttribute(string $value)
    method getNameAttribute (line 232) | public function getNameAttribute(): string
    method servers (line 242) | public function servers(): HasMany
    method apiKeys (line 250) | public function apiKeys(): HasMany
    method recoveryTokens (line 259) | public function recoveryTokens(): HasMany
    method sshKeys (line 267) | public function sshKeys(): HasMany
    method activity (line 278) | public function activity(): MorphToMany
    method accessibleServers (line 289) | public function accessibleServers(): Builder

FILE: app/Models/UserSSHKey.php
  class UserSSHKey (line 40) | class UserSSHKey extends Model
    method user (line 65) | public function user(): BelongsTo

FILE: app/Notifications/AccountCreated.php
  class AccountCreated (line 11) | class AccountCreated extends Notification implements ShouldQueue
    method __construct (line 18) | public function __construct(public User $user, public ?string $token =...
    method via (line 25) | public function via(): array
    method toMail (line 33) | public function toMail(): MailMessage

FILE: app/Notifications/AddedToServer.php
  class AddedToServer (line 10) | class AddedToServer extends Notification implements ShouldQueue
    method __construct (line 19) | public function __construct(array $server)
    method via (line 27) | public function via(): array
    method toMail (line 35) | public function toMail(): MailMessage

FILE: app/Notifications/MailTested.php
  class MailTested (line 9) | class MailTested extends Notification
    method __construct (line 11) | public function __construct(private User $user)
    method via (line 15) | public function via(): array
    method toMail (line 20) | public function toMail(): MailMessage

FILE: app/Notifications/RemovedFromServer.php
  class RemovedFromServer (line 10) | class RemovedFromServer extends Notification implements ShouldQueue
    method __construct (line 19) | public function __construct(array $server)
    method via (line 27) | public function via(): array
    method toMail (line 35) | public function toMail(): MailMessage

FILE: app/Notifications/SendPasswordReset.php
  class SendPasswordReset (line 10) | class SendPasswordReset extends Notification implements ShouldQueue
    method __construct (line 17) | public function __construct(public string $token)
    method via (line 24) | public function via(): array
    method toMail (line 32) | public function toMail(mixed $notifiable): MailMessage

FILE: app/Notifications/ServerInstalled.php
  class ServerInstalled (line 17) | class ServerInstalled extends Notification implements ShouldQueue, Recei...
    method handle (line 31) | public function handle(Event|Installed $event): void
    method via (line 46) | public function via(): array
    method toMail (line 54) | public function toMail(): MailMessage

FILE: app/Observers/EggVariableObserver.php
  class EggVariableObserver (line 7) | class EggVariableObserver
    method creating (line 9) | public function creating(EggVariable $variable): void
    method updating (line 17) | public function updating(EggVariable $variable): void

FILE: app/Observers/ServerObserver.php
  class ServerObserver (line 9) | class ServerObserver
    method creating (line 16) | public function creating(Server $server): void
    method created (line 24) | public function created(Server $server): void
    method deleting (line 32) | public function deleting(Server $server): void
    method deleted (line 40) | public function deleted(Server $server): void
    method saving (line 48) | public function saving(Server $server): void
    method saved (line 56) | public function saved(Server $server): void
    method updating (line 64) | public function updating(Server $server): void
    method updated (line 72) | public function updated(Server $server): void

FILE: app/Observers/SubuserObserver.php
  class SubuserObserver (line 10) | class SubuserObserver
    method creating (line 15) | public function creating(Subuser $subuser): void
    method created (line 23) | public function created(Subuser $subuser): void
    method deleting (line 37) | public function deleting(Subuser $subuser): void
    method deleted (line 45) | public function deleted(Subuser $subuser): void

FILE: app/Observers/UserObserver.php
  class UserObserver (line 8) | class UserObserver
    method creating (line 15) | public function creating(User $user): void
    method created (line 23) | public function created(User $user): void
    method deleting (line 31) | public function deleting(User $user): void
    method deleted (line 39) | public function deleted(User $user): void

FILE: app/Policies/ServerPolicy.php
  class ServerPolicy (line 8) | class ServerPolicy
    method checkPermission (line 13) | protected function checkPermission(User $user, Server $server, string ...
    method before (line 26) | public function before(User $user, string $ability, Server $server): bool
    method __call (line 40) | public function __call(string $name, mixed $arguments)

FILE: app/Providers/ActivityLogServiceProvider.php
  class ActivityLogServiceProvider (line 9) | class ActivityLogServiceProvider extends ServiceProvider
    method register (line 15) | public function register()

FILE: app/Providers/AppServiceProvider.php
  class AppServiceProvider (line 16) | class AppServiceProvider extends ServiceProvider
    method boot (line 21) | public function boot(): void
    method register (line 57) | public function register(): void
    method versionData (line 73) | protected function versionData(): array

FILE: app/Providers/AuthServiceProvider.php
  class AuthServiceProvider (line 11) | class AuthServiceProvider extends ServiceProvider
    method boot (line 20) | public function boot(): void

FILE: app/Providers/BackupsServiceProvider.php
  class BackupsServiceProvider (line 9) | class BackupsServiceProvider extends ServiceProvider implements Deferrab...
    method register (line 14) | public function register(): void
    method provides (line 21) | public function provides(): array

FILE: app/Providers/BladeServiceProvider.php
  class BladeServiceProvider (line 7) | class BladeServiceProvider extends ServiceProvider
    method boot (line 12) | public function boot(): void

FILE: app/Providers/BroadcastServiceProvider.php
  class BroadcastServiceProvider (line 8) | class BroadcastServiceProvider extends ServiceProvider
    method boot (line 13) | public function boot(): void

FILE: app/Providers/EventServiceProvider.php
  class EventServiceProvider (line 20) | class EventServiceProvider extends ServiceProvider
    method boot (line 40) | public function boot(): void

FILE: app/Providers/HashidsServiceProvider.php
  class HashidsServiceProvider (line 9) | class HashidsServiceProvider extends ServiceProvider
    method register (line 14) | public function register(): void

FILE: app/Providers/RepositoryServiceProvider.php
  class RepositoryServiceProvider (line 41) | class RepositoryServiceProvider extends ServiceProvider
    method register (line 46) | public function register(): void

FILE: app/Providers/RouteServiceProvider.php
  class RouteServiceProvider (line 16) | class RouteServiceProvider extends ServiceProvider
    method boot (line 23) | public function boot(): void
    method configureRateLimiting (line 72) | protected function configureRateLimiting(): void

FILE: app/Providers/SettingsServiceProvider.php
  class SettingsServiceProvider (line 13) | class SettingsServiceProvider extends ServiceProvider
    method boot (line 69) | public function boot(ConfigRepository $config, Encrypter $encrypter, L...
    method getEncryptedKeys (line 118) | public static function getEncryptedKeys(): array

FILE: app/Providers/ViewComposerServiceProvider.php
  class ViewComposerServiceProvider (line 8) | class ViewComposerServiceProvider extends ServiceProvider
    method boot (line 13) | public function boot(): void

FILE: app/Repositories/Eloquent/AllocationRepository.php
  class AllocationRepository (line 9) | class AllocationRepository extends EloquentRepository implements Allocat...
    method model (line 14) | public function model(): string
    method getUnassignedAllocationIds (line 23) | public function getUnassignedAllocationIds(int $node): array
    method getDiscardableDedicatedAllocations (line 41) | protected function getDiscardableDedicatedAllocations(array $nodes = [...
    method getRandomAllocation (line 59) | public function getRandomAllocation(array $nodes, array $ports, bool $...

FILE: app/Repositories/Eloquent/ApiKeyRepository.php
  class ApiKeyRepository (line 10) | class ApiKeyRepository extends EloquentRepository implements ApiKeyRepos...
    method model (line 15) | public function model(): string
    method getAccountKeys (line 23) | public function getAccountKeys(User $user): Collection
    method deleteAccountKey (line 33) | public function deleteAccountKey(User $user, string $identifier): int

FILE: app/Repositories/Eloquent/BackupRepository.php
  class BackupRepository (line 11) | class BackupRepository extends EloquentRepository
    method model (line 13) | public function model(): string
    method getBackupsGeneratedDuringTimespan (line 21) | public function getBackupsGeneratedDuringTimespan(int $server, int $se...
    method getNonFailedBackups (line 40) | public function getNonFailedBackups(Server $server): HasMany

FILE: app/Repositories/Eloquent/DatabaseHostRepository.php
  class DatabaseHostRepository (line 9) | class DatabaseHostRepository extends EloquentRepository implements Datab...
    method model (line 14) | public function model(): string
    method getWithViewDetails (line 23) | public function getWithViewDetails(): Collection

FILE: app/Repositories/Eloquent/DatabaseRepository.php
  class DatabaseRepository (line 12) | class DatabaseRepository extends EloquentRepository implements DatabaseR...
    method __construct (line 19) | public function __construct(Application $application, private Database...
    method model (line 27) | public function model(): string
    method getConnection (line 35) | public function getConnection(): string
    method setConnection (line 43) | public function setConnection(string $connection): self
    method getDatabasesForServer (line 53) | public function getDatabasesForServer(int $server): Collection
    method getDatabasesForHost (line 61) | public function getDatabasesForHost(int $host, int $count = 25): Lengt...
    method createDatabase (line 71) | public function createDatabase(string $database): bool
    method createUser (line 79) | public function createUser(string $username, string $remote, string $p...
    method assignUserToDatabase (line 95) | public function assignUserToDatabase(string $database, string $usernam...
    method flush (line 108) | public function flush(): bool
    method dropDatabase (line 116) | public function dropDatabase(string $database): bool
    method dropUser (line 124) | public function dropUser(string $username, string $remote): bool
    method run (line 132) | private function run(string $statement): bool

FILE: app/Repositories/Eloquent/EggRepository.php
  class EggRepository (line 12) | class EggRepository extends EloquentRepository implements EggRepositoryI...
    method model (line 17) | public function model(): string
    method getWithVariables (line 27) | public function getWithVariables(int $id): Egg
    method getAllWithCopyAttributes (line 39) | public function getAllWithCopyAttributes(): Collection
    method getWithCopyAttributes (line 51) | public function getWithCopyAttributes($value, string $column = 'id'): Egg
    method getWithExportAttributes (line 67) | public function getWithExportAttributes(int $id): Egg
    method isCopyableScript (line 79) | public function isCopyableScript(int $copyFromId, int $service): bool

FILE: app/Repositories/Eloquent/EggVariableRepository.php
  class EggVariableRepository (line 9) | class EggVariableRepository extends EloquentRepository implements EggVar...
    method model (line 14) | public function model(): string
    method getEditableVariables (line 23) | public function getEditableVariables(int $egg): Collection

FILE: app/Repositories/Eloquent/EloquentRepository.php
  class EloquentRepository (line 18) | abstract class EloquentRepository extends Repository implements Reposito...
    method usingRequestFilters (line 27) | public function usingRequestFilters(bool $usingFilters = true): self
    method request (line 37) | protected function request(): Request
    method paginate (line 45) | protected function paginate(Builder $instance, int $default = 50): Len...
    method getModel (line 58) | public function getModel(): Model
    method getBuilder (line 66) | public function getBuilder(): Builder
    method create (line 76) | public function create(array $fields, bool $validate = true, bool $for...
    method find (line 97) | public function find(int $id): Model
    method findWhere (line 109) | public function findWhere(array $fields): Collection
    method findFirstWhere (line 119) | public function findFirstWhere(array $fields): Model
    method findCountWhere (line 131) | public function findCountWhere(array $fields): int
    method delete (line 139) | public function delete(int $id, bool $destroy = false): int
    method deleteWhere (line 147) | public function deleteWhere(array $attributes, bool $force = false): int
    method update (line 160) | public function update(int $id, array $fields, bool $validate = true, ...
    method updateWhere (line 184) | public function updateWhere(array $attributes, array $values): int
    method updateWhereIn (line 193) | public function updateWhereIn(string $column, array $values, array $fi...
    method updateOrCreate (line 206) | public function updateOrCreate(array $where, array $fields, bool $vali...
    method all (line 226) | public function all(): Collection
    method paginated (line 234) | public function paginated(int $perPage): LengthAwarePaginator
    method insert (line 243) | public function insert(array $data): bool
    method insertIgnore (line 251) | public function insertIgnore(array $values): bool
    method count (line 284) | public function count(): int

FILE: app/Repositories/Eloquent/LocationRepository.php
  class LocationRepository (line 11) | class LocationRepository extends EloquentRepository implements LocationR...
    method model (line 16) | public function model(): string
    method getAllWithDetails (line 24) | public function getAllWithDetails(): Collection
    method getAllWithNodes (line 32) | public function getAllWithNodes(): Collection
    method getWithNodes (line 42) | public function getWithNodes(int $id): Location
    method getWithNodeCount (line 56) | public function getWithNodeCount(int $id): Location

FILE: app/Repositories/Eloquent/MountRepository.php
  class MountRepository (line 11) | class MountRepository extends EloquentRepository
    method model (line 16) | public function model(): string
    method getAllWithDetails (line 24) | public function getAllWithDetails(): Collection
    method getWithRelations (line 34) | public function getWithRelations(string $id): Mount
    method getMountListForServer (line 46) | public function getMountListForServer(Server $server): Collection

FILE: app/Repositories/Eloquent/NestRepository.php
  class NestRepository (line 10) | class NestRepository extends EloquentRepository implements NestRepositor...
    method model (line 15) | public function model(): string
    method getWithEggs (line 27) | public function getWithEggs(?int $id = null): Collection|Nest
    method getWithCounts (line 50) | public function getWithCounts(?int $id = null): Collection|Nest
    method getWithEggServers (line 71) | public function getWithEggServers(int $id): Nest

FILE: app/Repositories/Eloquent/NodeRepository.php
  class NodeRepository (line 9) | class NodeRepository extends EloquentRepository implements NodeRepositor...
    method model (line 14) | public function model(): string
    method getUsageStats (line 22) | public function getUsageStats(Node $node): array
    method getUsageStatsRaw (line 54) | public function getUsageStatsRaw(Node $node): array
    method loadLocationAndServerCount (line 78) | public function loadLocationAndServerCount(Node $node, bool $refresh =...
    method loadNodeAllocations (line 99) | public function loadNodeAllocations(Node $node, bool $refresh = false)...
    method getNodesForServerCreation (line 117) | public function getNodesForServerCreation(): Collection
    method getNodeWithResourceUsage (line 142) | public function getNodeWithResourceUsage(int $node_id): Node

FILE: app/Repositories/Eloquent/PermissionRepository.php
  class PermissionRepository (line 7) | class PermissionRepository extends EloquentRepository implements Permiss...
    method model (line 14) | public function model(): string

FILE: app/Repositories/Eloquent/RecoveryTokenRepository.php
  class RecoveryTokenRepository (line 7) | class RecoveryTokenRepository extends EloquentRepository
    method model (line 9) | public function model(): string

FILE: app/Repositories/Eloquent/ScheduleRepository.php
  class ScheduleRepository (line 11) | class ScheduleRepository extends EloquentRepository implements ScheduleR...
    method model (line 16) | public function model(): string
    method findServerSchedules (line 24) | public function findServerSchedules(int $server): Collection
    method getScheduleWithTasks (line 34) | public function getScheduleWithTasks(int $schedule): Schedule

FILE: app/Repositories/Eloquent/ServerRepository.php
  class ServerRepository (line 13) | class ServerRepository extends EloquentRepository implements ServerRepos...
    method model (line 18) | public function model(): string
    method loadEggRelations (line 26) | public function loadEggRelations(Server $server, bool $refresh = false...
    method getDataForRebuild (line 38) | public function getDataForRebuild(?int $server = null, ?int $node = nu...
    method getDataForReinstall (line 54) | public function getDataForReinstall(?int $server = null, ?int $node = ...
    method findWithVariables (line 72) | public function findWithVariables(int $id): Server
    method getPrimaryAllocation (line 88) | public function getPrimaryAllocation(Server $server, bool $refresh = f...
    method getDataForCreation (line 100) | public function getDataForCreation(Server $server, bool $refresh = fal...
    method loadDatabaseRelations (line 114) | public function loadDatabaseRelations(Server $server, bool $refresh = ...
    method getDaemonServiceData (line 128) | public function getDaemonServiceData(Server $server, bool $refresh = f...
    method getByUuid (line 144) | public function getByUuid(string $uuid): Server
    method isUniqueUuidCombo (line 164) | public function isUniqueUuidCombo(string $uuid, string $short): bool
    method loadAllServersForNode (line 172) | public function loadAllServersForNode(int $node, int $limit): LengthAw...

FILE: app/Repositories/Eloquent/ServerVariableRepository.php
  class ServerVariableRepository (line 8) | class ServerVariableRepository extends EloquentRepository implements Ser...
    method model (line 13) | public function model(): string

FILE: app/Repositories/Eloquent/SessionRepository.php
  class SessionRepository (line 9) | class SessionRepository extends EloquentRepository implements SessionRep...
    method model (line 14) | public function model(): string
    method getUserSessions (line 22) | public function getUserSessions(int $user): Collection
    method deleteUserSession (line 30) | public function deleteUserSession(int $user, string $session): ?int

FILE: app/Repositories/Eloquent/SettingsRepository.php
  class SettingsRepository (line 8) | class SettingsRepository extends EloquentRepository implements SettingsR...
    method model (line 17) | public function model(): string
    method set (line 27) | public function set(string $key, ?string $value = null)
    method get (line 39) | public function get(string $key, mixed $default = null): mixed
    method forget (line 62) | public function forget(string $key)
    method clearCache (line 71) | private function clearCache(string $key)

FILE: app/Repositories/Eloquent/SubuserRepository.php
  class SubuserRepository (line 9) | class SubuserRepository extends EloquentRepository implements SubuserRep...
    method model (line 14) | public function model(): string
    method loadServerAndUserRelations (line 22) | public function loadServerAndUserRelations(Subuser $subuser, bool $ref...
    method getWithPermissions (line 38) | public function getWithPermissions(Subuser $subuser, bool $refresh = f...
    method getWithPermissionsUsingUserAndServer (line 56) | public function getWithPermissionsUsingUserAndServer(int $user, int $s...

FILE: app/Repositories/Eloquent/TaskRepository.php
  class TaskRepository (line 10) | class TaskRepository extends EloquentRepository implements TaskRepositor...
    method model (line 15) | public function model(): string
    method getTaskForJobProcess (line 25) | public function getTaskForJobProcess(int $id): Task
    method getNextTask (line 37) | public function getNextTask(int $schedule, int $index): ?Task

FILE: app/Repositories/Eloquent/UserRepository.php
  class UserRepository (line 8) | class UserRepository extends EloquentRepository implements UserRepositor...
    method model (line 13) | public function model(): string

FILE: app/Repositories/Repository.php
  class Repository (line 9) | abstract class Repository implements RepositoryInterface
    method __construct (line 20) | public function __construct(protected Application $app)
    method model (line 28) | abstract public function model(): string;
    method getModel (line 33) | public function getModel(): Model
    method setColumns (line 43) | public function setColumns($columns = ['*']): self
    method getColumns (line 54) | public function getColumns(): array
    method withoutFreshModel (line 63) | public function withoutFreshModel(): self
    method withFreshModel (line 71) | public function withFreshModel(): self
    method setFreshModel (line 80) | public function setFreshModel(bool $fresh = true): self
    method initializeModel (line 91) | protected function initializeModel(string ...$model): mixed

FILE: app/Repositories/Wings/DaemonBackupRepository.php
  class DaemonBackupRepository (line 16) | class DaemonBackupRepository extends DaemonRepository
    method setBackupAdapter (line 23) | public function setBackupAdapter(string $adapter): self
    method backup (line 35) | public function backup(Backup $backup): ResponseInterface
    method restore (line 60) | public function restore(Backup $backup, ?string $url = null, bool $tru...
    method delete (line 85) | public function delete(Backup $backup): ResponseInterface

FILE: app/Repositories/Wings/DaemonCommandRepository.php
  class DaemonCommandRepository (line 15) | class DaemonCommandRepository extends DaemonRepository
    method send (line 22) | public function send(array|string $command): ResponseInterface

FILE: app/Repositories/Wings/DaemonConfigurationRepository.php
  class DaemonConfigurationRepository (line 14) | class DaemonConfigurationRepository extends DaemonRepository
    method getSystemInformation (line 21) | public function getSystemInformation(?int $version = null): array
    method update (line 39) | public function update(Node $node): ResponseInterface

FILE: app/Repositories/Wings/DaemonFileRepository.php
  class DaemonFileRepository (line 18) | class DaemonFileRepository extends DaemonRepository
    method getContent (line 29) | public function getContent(string $path, ?int $notLargerThan = null): ...
    method putContent (line 58) | public function putContent(string $path, string $content): ResponseInt...
    method getDirectory (line 80) | public function getDirectory(string $path): array
    method createDirectory (line 103) | public function createDirectory(string $name, string $path): ResponseI...
    method renameFiles (line 127) | public function renameFiles(?string $root, array $files): ResponseInte...
    method copyFile (line 151) | public function copyFile(string $location): ResponseInterface
    method deleteFiles (line 174) | public function deleteFiles(?string $root, array $files): ResponseInte...
    method compressFiles (line 198) | public function compressFiles(?string $root, array $files): array
    method decompressFile (line 227) | public function decompressFile(?string $root, string $file): ResponseI...
    method chmodFiles (line 254) | public function chmodFiles(?string $root, array $files): ResponseInter...
    method pull (line 278) | public function pull(string $url, ?string $directory, array $params = ...

FILE: app/Repositories/Wings/DaemonPowerRepository.php
  class DaemonPowerRepository (line 15) | class DaemonPowerRepository extends DaemonRepository
    method send (line 22) | public function send(string $action): ResponseInterface

FILE: app/Repositories/Wings/DaemonRepository.php
  class DaemonRepository (line 11) | abstract class DaemonRepository
    method __construct (line 20) | public function __construct(protected Application $app)
    method setServer (line 27) | public function setServer(Server $server): self
    method setNode (line 39) | public function setNode(Node $node): self
    method getHttpClient (line 49) | public function getHttpClient(array $headers = []): Client

FILE: app/Repositories/Wings/DaemonRevocationRepository.php
  class DaemonRevocationRepository (line 8) | class DaemonRevocationRepository extends DaemonRepository
    method deauthorize (line 17) | public function deauthorize(string $user, array $servers = []): void

FILE: app/Repositories/Wings/DaemonServerRepository.php
  class DaemonServerRepository (line 15) | class DaemonServerRepository extends DaemonRepository
    method getDetails (line 22) | public function getDetails(): array
    method create (line 42) | public function create(bool $startOnCompletion = true): void
    method sync (line 63) | public function sync(): void
    method delete (line 79) | public function delete(): void
    method reinstall (line 95) | public function reinstall(): void
    method requestArchive (line 115) | public function requestArchive(): void
    method revokeUserJTI (line 139) | public function revokeUserJTI(int $id): void
    method revokeJTIs (line 152) | protected function revokeJTIs(array $jtis): void

FILE: app/Repositories/Wings/DaemonTransferRepository.php
  class DaemonTransferRepository (line 14) | class DaemonTransferRepository extends DaemonRepository
    method notify (line 19) | public function notify(Node $targetNode, Plain $token): void

FILE: app/Rules/Fqdn.php
  class Fqdn (line 9) | class Fqdn implements Rule, DataAwareRule
    method setData (line 18) | public function setData($data): self
    method passes (line 31) | public function passes($attribute, $value): bool
    method message (line 65) | public function message(): string
    method make (line 73) | public static function make(?string $schemeField = null): self

FILE: app/Rules/Username.php
  class Username (line 7) | class Username implements Rule
    method passes (line 22) | public function passes($attribute, $value): bool
    method message (line 30) | public function message(): string
    method __toString (line 39) | public function __toString(): string

FILE: app/Services/Acl/Api/AdminAcl.php
  class AdminAcl (line 7) | class AdminAcl
    method can (line 40) | public static function can(int $permission, int $action = self::READ):...
    method check (line 53) | public static function check(ApiKey $key, string $resource, int $actio...
    method getResourceList (line 63) | public static function getResourceList(): array

FILE: app/Services/Activity/ActivityLogBatchService.php
  class ActivityLogBatchService (line 7) | class ActivityLogBatchService
    method uuid (line 16) | public function uuid(): ?string
    method start (line 25) | public function start(): void
    method end (line 38) | public function end(): void
    method transaction (line 51) | public function transaction(\Closure $callback): mixed

FILE: app/Services/Activity/ActivityLogService.php
  class ActivityLogService (line 16) | class ActivityLogService
    method __construct (line 22) | public function __construct(
    method anonymous (line 34) | public function anonymous(): self
    method event (line 46) | public function event(string $action): self
    method description (line 56) | public function description(?string $description): self
    method subject (line 70) | public function subject(...$subjects): self
    method actor (line 94) | public function actor(Model $actor): self
    method property (line 106) | public function property($key, $value = null): self
    method withRequestMetadata (line 119) | public function withRequestMetadata(): self
    method log (line 133) | public function log(?string $description = null): ActivityLog
    method clone (line 159) | public function clone(): self
    method transaction (line 173) | public function transaction(\Closure $callback)
    method reset (line 187) | public function reset(): void
    method getActivity (line 196) | protected function getActivity(): ActivityLog
    method save (line 227) | protected function save(): ActivityLog

FILE: app/Services/Activity/ActivityLogTargetableService.php
  class ActivityLogTargetableService (line 7) | class ActivityLogTargetableService
    method setActor (line 15) | public function setActor(Model $actor): void
    method setSubject (line 20) | public function setSubject(Model $subject): void
    method setApiKeyId (line 25) | public function setApiKeyId(?int $apiKeyId): void
    method actor (line 30) | public function actor(): ?Model
    method subject (line 35) | public function subject(): ?Model
    method apiKeyId (line 40) | public function apiKeyId(): ?int
    method reset (line 45) | public function reset(): void

FILE: app/Services/Allocations/AllocationDeletionService.php
  class AllocationDeletionService (line 9) | class AllocationDeletionService
    method __construct (line 14) | public function __construct(private AllocationRepositoryInterface $rep...
    method handle (line 24) | public function handle(Allocation $allocation): int

FILE: app/Services/Allocations/AssignmentService.php
  class AssignmentService (line 15) | class AssignmentService
    method __construct (line 27) | public function __construct(protected AllocationRepositoryInterface $r...
    method handle (line 40) | public function handle(Node $node, array $data): void

FILE: app/Services/Allocations/FindAssignableAllocationService.php
  class FindAssignableAllocationService (line 11) | class FindAssignableAllocationService
    method __construct (line 16) | public function __construct(private AssignmentService $service)
    method handle (line 31) | public function handle(Server $server): Allocation
    method handleConsecutive (line 69) | public function handleConsecutive(Server $server, int $count): array
    method createNewAllocation (line 170) | protected function createNewAllocation(Server $server): Allocation

FILE: app/Services/Api/KeyCreationService.php
  class KeyCreationService (line 9) | class KeyCreationService
    method __construct (line 16) | public function __construct(private ApiKeyRepositoryInterface $reposit...
    method setKeyType (line 24) | public function setKeyType(int $type): self
    method handle (line 38) | public function handle(array $data, array $permissions = []): ApiKey

FILE: app/Services/Backups/DeleteBackupService.php
  class DeleteBackupService (line 14) | class DeleteBackupService
    method __construct (line 16) | public function __construct(
    method handle (line 29) | public function handle(Backup $backup): void
    method deleteFromS3 (line 68) | protected function deleteFromS3(Backup $backup): void

FILE: app/Services/Backups/DownloadLinkService.php
  class DownloadLinkService (line 11) | class DownloadLinkService
    method __construct (line 16) | public function __construct(private BackupManager $backupManager, priv...
    method handle (line 24) | public function handle(Backup $backup, User $user): string
    method getS3BackupUrl (line 46) | protected function getS3BackupUrl(Backup $backup): string

FILE: app/Services/Backups/InitiateBackupService.php
  class InitiateBackupService (line 17) | class InitiateBackupService
    method __construct (line 26) | public function __construct(
    method setIsLocked (line 39) | public function setIsLocked(bool $isLocked): self
    method setIgnoredFiles (line 51) | public function setIgnoredFiles(?array $ignored): self
    method handle (line 76) | public function handle(Server $server, ?string $name = null, bool $ove...

FILE: app/Services/Databases/DatabaseManagementService.php
  class DatabaseManagementService (line 16) | class DatabaseManagementService
    method __construct (line 34) | public function __construct(
    method generateUniqueDatabaseName (line 47) | public static function generateUniqueDatabaseName(string $name, int $s...
    method setValidateDatabaseLimit (line 57) | public function setValidateDatabaseLimit(bool $validate): self
    method create (line 71) | public function create(Server $server, array $data): Database
    method delete (line 143) | public function delete(Database $database): ?bool
    method createModel (line 162) | protected function createModel(array $data): Database

FILE: app/Services/Databases/DatabasePasswordService.php
  class DatabasePasswordService (line 12) | class DatabasePasswordService
    method __construct (line 17) | public function __construct(
    method handle (line 30) | public function handle(Database|int $database): string

FILE: app/Services/Databases/DeployServerDatabaseService.php
  class DeployServerDatabaseService (line 11) | class DeployServerDatabaseService
    method __construct (line 16) | public function __construct(private DatabaseManagementService $managem...
    method handle (line 25) | public function handle(Server $server, array $data): Database

FILE: app/Services/Databases/Hosts/HostCreationService.php
  class HostCreationService (line 12) | class HostCreationService
    method __construct (line 17) | public function __construct(
    method handle (line 31) | public function handle(array $data): DatabaseHost

FILE: app/Services/Databases/Hosts/HostDeletionService.php
  class HostDeletionService (line 9) | class HostDeletionService
    method __construct (line 14) | public function __construct(
    method handle (line 26) | public function handle(int $host): int

FILE: app/Services/Databases/Hosts/HostUpdateService.php
  class HostUpdateService (line 12) | class HostUpdateService
    method __construct (line 17) | public function __construct(
    method handle (line 31) | public function handle(int $hostId, array $data): DatabaseHost

FILE: app/Services/Deployment/AllocationSelectionService.php
  class AllocationSelectionService (line 11) | class AllocationSelectionService
    method __construct (line 22) | public function __construct(private AllocationRepositoryInterface $rep...
    method setDedicated (line 31) | public function setDedicated(bool $dedicated): self
    method setNodes (line 42) | public function setNodes(array $nodes): self
    method setPorts (line 56) | public function setPorts(array $ports): self
    method handle (line 85) | public function handle(): Allocation

FILE: app/Services/Deployment/FindViableNodesService.php
  class FindViableNodesService (line 11) | class FindViableNodesService
    method setLocations (line 20) | public function setLocations(array $locations): self
    method setDisk (line 34) | public function setDisk(int $disk): self
    method setMemory (line 45) | public function setMemory(int $memory): self
    method handle (line 69) | public function handle(?int $perPage = null, ?int $page = null): Lengt...

FILE: app/Services/Eggs/EggConfigurationService.php
  class EggConfigurationService (line 10) | class EggConfigurationService
    method __construct (line 15) | public function __construct(private ServerConfigurationStructureServic...
    method handle (line 22) | public function handle(Server $server): array
    method convertStartupToNewFormat (line 39) | protected function convertStartupToNewFormat(array $startup): array
    method convertStopToNewFormat (line 57) | protected function convertStopToNewFormat(string $stop): array
    method replacePlaceholders (line 74) | protected function replacePlaceholders(Server $server, object $configs...
    method replaceLegacyModifiers (line 129) | protected function replaceLegacyModifiers(string $key, string $value):...
    method matchAndReplaceKeys (line 155) | protected function matchAndReplaceKeys(mixed $value, array $structure)...
    method iterate (line 211) | private function iterate(mixed $data, array $structure): mixed

FILE: app/Services/Eggs/EggCreationService.php
  class EggCreationService (line 12) | class EggCreationService
    method __construct (line 17) | public function __construct(private ConfigRepository $config, private ...
    method handle (line 27) | public function handle(array $data): Egg

FILE: app/Services/Eggs/EggDeletionService.php
  class EggDeletionService (line 10) | class EggDeletionService
    method __construct (line 15) | public function __construct(
    method handle (line 27) | public function handle(int $egg): int

FILE: app/Services/Eggs/EggParserService.php
  class EggParserService (line 11) | class EggParserService
    method handle (line 19) | public function handle(UploadedFile $file): array
    method fillFromParsed (line 37) | public function fillFromParsed(Egg $model, array $parsed): Egg
    method convertToV2 (line 63) | protected function convertToV2(array $parsed): array

FILE: app/Services/Eggs/EggUpdateService.php
  class EggUpdateService (line 9) | class EggUpdateService
    method __construct (line 14) | public function __construct(protected EggRepositoryInterface $repository)
    method handle (line 25) | public function handle(Egg $egg, array $data): void

FILE: app/Services/Eggs/Scripts/InstallScriptService.php
  class InstallScriptService (line 9) | class InstallScriptService
    method __construct (line 14) | public function __construct(protected EggRepositoryInterface $repository)
    method handle (line 25) | public function handle(Egg $egg, array $data): void

FILE: app/Services/Eggs/Sharing/EggExporterService.php
  class EggExporterService (line 11) | class EggExporterService
    method __construct (line 16) | public function __construct(protected EggRepositoryInterface $repository)
    method handle (line 25) | public function handle(int $egg): string

FILE: app/Services/Eggs/Sharing/EggImporterService.php
  class EggImporterService (line 14) | class EggImporterService
    method __construct (line 16) | public function __construct(protected ConnectionInterface $connection,...
    method handle (line 25) | public function handle(UploadedFile $file, int $nest): Egg

FILE: app/Services/Eggs/Sharing/EggUpdateImporterService.php
  class EggUpdateImporterService (line 12) | class EggUpdateImporterService
    method __construct (line 17) | public function __construct(protected ConnectionInterface $connection,...
    method handle (line 26) | public function handle(Egg $egg, UploadedFile $file): Egg

FILE: app/Services/Eggs/Variables/VariableCreationService.php
  class VariableCreationService (line 11) | class VariableCreationService
    method __construct (line 18) | public function __construct(private EggVariableRepositoryInterface $re...
    method getValidator (line 26) | protected function getValidator(): ValidationFactory
    method handle (line 38) | public function handle(int $egg, array $data): EggVariable

FILE: app/Services/Eggs/Variables/VariableUpdateService.php
  class VariableUpdateService (line 13) | class VariableUpdateService
    method __construct (line 20) | public function __construct(private EggVariableRepositoryInterface $re...
    method getValidator (line 28) | protected function getValidator(): ValidationFactory
    method handle (line 41) | public function handle(EggVariable $variable, array $data): mixed

FILE: app/Services/Helpers/AssetHashService.php
  class AssetHashService (line 10) | class AssetHashService
    method __construct (line 24) | public function __construct(FilesystemManager $filesystem)
    method url (line 32) | public function url(string $resource): string
    method integrity (line 43) | public function integrity(string $resource): string
    method css (line 54) | public function css(string $resource): string
    method js (line 79) | public function js(string $resource): string
    method manifest (line 101) | protected function manifest(): array

FILE: app/Services/Helpers/SoftwareVersionService.php
  class SoftwareVersionService (line 11) | class SoftwareVersionService
    method __construct (line 20) | public function __construct(
    method getPanel (line 30) | public function getPanel(): string
    method getDaemon (line 38) | public function getDaemon(): string
    method getDiscord (line 46) | public function getDiscord(): string
    method getDonations (line 54) | public function getDonations(): string
    method isLatestPanel (line 62) | public function isLatestPanel(): bool
    method isLatestDaemon (line 74) | public function isLatestDaemon(string $version): bool
    method cacheVersionData (line 86) | protected function cacheVersionData(): array

FILE: app/Services/Locations/LocationCreationService.php
  class LocationCreationService (line 8) | class LocationCreationService
    method __construct (line 13) | public function __construct(protected LocationRepositoryInterface $rep...
    method handle (line 22) | public function handle(array $data): Location

FILE: app/Services/Locations/LocationDeletionService.php
  class LocationDeletionService (line 10) | class LocationDeletionService
    method __construct (line 15) | public function __construct(
    method handle (line 26) | public function handle(Location|int $location): ?int

FILE: app/Services/Locations/LocationUpdateService.php
  class LocationUpdateService (line 8) | class LocationUpdateService
    method __construct (line 13) | public function __construct(protected LocationRepositoryInterface $rep...
    method handle (line 23) | public function handle(Location|int $location, array $data): Location

FILE: app/Services/Nests/NestCreationService.php
  class NestCreationService (line 10) | class NestCreationService
    method __construct (line 15) | public function __construct(private ConfigRepository $config, private ...
    method handle (line 24) | public function handle(array $data, ?string $author = null): Nest

FILE: app/Services/Nests/NestDeletionService.php
  class NestDeletionService (line 9) | class NestDeletionService
    method __construct (line 14) | public function __construct(
    method handle (line 25) | public function handle(int $nest): int

FILE: app/Services/Nests/NestUpdateService.php
  class NestUpdateService (line 7) | class NestUpdateService
    method __construct (line 12) | public function __construct(protected NestRepositoryInterface $reposit...
    method handle (line 22) | public function handle(int $nest, array $data): void

FILE: app/Services/Nodes/NodeCreationService.php
  class NodeCreationService (line 11) | class NodeCreationService
    method __construct (line 16) | public function __construct(protected NodeRepositoryInterface $reposit...
    method handle (line 25) | public function handle(array $data): Node

FILE: app/Services/Nodes/NodeDeletionService.php
  class NodeDeletionService (line 11) | class NodeDeletionService
    method __construct (line 16) | public function __construct(
    method handle (line 28) | public function handle(int|Node $node): int

FILE: app/Services/Nodes/NodeJWTService.php
  class NodeJWTService (line 15) | class NodeJWTService
    method setClaims (line 28) | public function setClaims(array $claims): self
    method setUser (line 39) | public function setUser(User $user): self
    method setExpiresAt (line 46) | public function setExpiresAt(\DateTimeImmutable $date): self
    method setSubject (line 53) | public function setSubject(string $subject): self
    method handle (line 63) | public function handle(Node $node, ?string $identifiedBy, string $algo...

FILE: app/Services/Nodes/NodeUpdateService.php
  class NodeUpdateService (line 15) | class NodeUpdateService
    method __construct (line 20) | public function __construct(
    method handle (line 33) | public function handle(Node $node, array $data, bool $resetToken = fal...

FILE: app/Services/Schedules/ProcessScheduleService.php
  class ProcessScheduleService (line 14) | class ProcessScheduleService
    method __construct (line 19) | public function __construct(private ConnectionInterface $connection, p...
    method handle (line 28) | public function handle(Schedule $schedule, bool $now = false): void

FILE: app/Services/Servers/BuildModificationService.php
  class BuildModificationService (line 15) | class BuildModificationService
    method __construct (line 20) | public function __construct(
    method handle (line 33) | public function handle(Server $server, array $data): Server
    method processAllocations (line 82) | private function processAllocations(Server $server, array &$data): void

FILE: app/Services/Servers/DetailsModificationService.php
  class DetailsModificationService (line 13) | class DetailsModificationService
    method __construct (line 20) | public function __construct(
    method handle (line 32) | public function handle(Server $server, array $data): Server

FILE: app/Services/Servers/EnvironmentService.php
  class EnvironmentService (line 8) | class EnvironmentService
    method setEnvironmentKey (line 16) | public function setEnvironmentKey(string $key, callable $closure): void
    method getEnvironmentKeys (line 24) | public function getEnvironmentKeys(): array
    method handle (line 33) | public function handle(Server $server): array
    method getEnvironmentMappings (line 65) | private function getEnvironmentMappings(): array

FILE: app/Services/Servers/GetUserPermissionsService.php
  class GetUserPermissionsService (line 8) | class GetUserPermissionsService
    method handle (line 15) | public function handle(Server $server, User $user): array

FILE: app/Services/Servers/ReinstallServerService.php
  class ReinstallServerService (line 9) | class ReinstallServerService
    method __construct (line 14) | public function __construct(
    method handle (line 25) | public function handle(Server $server): Server

FILE: app/Services/Servers/ServerConfigurationStructureService.php
  class ServerConfigurationStructureService (line 8) | class ServerConfigurationStructureService
    method __construct (line 13) | public function __construct(private EnvironmentService $environment)
    method handle (line 23) | public function handle(Server $server, array $override = [], bool $leg...
    method returnCurrentFormat (line 43) | protected function returnCurrentFormat(Server $server): array
    method returnLegacyFormat (line 100) | protected function returnLegacyFormat(Server $server): array

FILE: app/Services/Servers/ServerCreationService.php
  class ServerCreationService (line 22) | class ServerCreationService
    method __construct (line 27) | public function __construct(
    method handle (line 52) | public function handle(array $data, ?DeploymentObject $deployment = nu...
    method configureDeployment (line 116) | private function configureDeployment(array $data, DeploymentObject $de...
    method createModel (line 135) | private function createModel(array $data): Server
    method storeAssignedAllocations (line 173) | private function storeAssignedAllocations(Server $server, array $data)...
    method storeEggVariables (line 188) | private function storeEggVariables(Server $server, Collection $variabl...
    method generateUniqueUuidCombo (line 206) | private function generateUniqueUuidCombo(): string

FILE: app/Services/Servers/ServerDeletionService.php
  class ServerDeletionService (line 13) | class ServerDeletionService
    method __construct (line 20) | public function __construct(
    method withForce (line 30) | public function withForce(bool $bool = true): self
    method handle (line 43) | public function handle(Server $server): void

FILE: app/Services/Servers/StartupCommandService.php
  class StartupCommandService (line 7) | class StartupCommandService
    method handle (line 12) | public function handle(Server $server, bool $hideAllValues = false): s...

FILE: app/Services/Servers/StartupModificationService.php
  class StartupModificationService (line 13) | class StartupModificationService
    method __construct (line 20) | public function __construct(private ConnectionInterface $connection, p...
    method handle (line 29) | public function handle(Server $server, array $data): Server
    method updateAdministrativeSettings (line 68) | protected function updateAdministrativeSettings(array $data, Server &$...

FILE: app/Services/Servers/SuspensionService.php
  class SuspensionService (line 10) | class SuspensionService
    method __construct (line 18) | public function __construct(
    method toggle (line 28) | public function toggle(Server $server, string $action = self::ACTION_S...

FILE: app/Services/Servers/VariableValidatorService.php
  class VariableValidatorService (line 12) | class VariableValidatorService
    method __construct (line 19) | public function __construct(private ValidationFactory $validator)
    method handle (line 28) | public function handle(int $egg, array $fields = []): Collection

FILE: app/Services/Subusers/SubuserCreationService.php
  class SubuserCreationService (line 16) | class SubuserCreationService
    method __construct (line 21) | public function __construct(
    method handle (line 39) | public function handle(Server $server, string $email, array $permissio...

FILE: app/Services/Telemetry/TelemetryCollectionService.php
  class TelemetryCollectionService (line 21) | class TelemetryCollectionService
    method __construct (line 26) | public function __construct(
    method __invoke (line 35) | public function __invoke(): void
    method collect (line 51) | public function collect(): array

FILE: app/Services/Users/ToggleTwoFactorService.php
  class ToggleTwoFactorService (line 15) | class ToggleTwoFactorService
    method __construct (line 20) | public function __construct(
    method handle (line 38) | public function handle(User $user, string $token, ?bool $toggleState =...

FILE: app/Services/Users/TwoFactorSetupService.php
  class TwoFactorSetupService (line 10) | class TwoFactorSetupService
    method __construct (line 17) | public function __construct(
    method handle (line 32) | public function handle(User $user): array

FILE: app/Services/Users/UserCreationService.php
  class UserCreationService (line 13) | class UserCreationService
    method __construct (line 18) | public function __construct(
    method handle (line 32) | public function handle(array $data): User

FILE: app/Services/Users/UserDeletionService.php
  class UserDeletionService (line 9) | class UserDeletionService
    method handle (line 16) | public function handle(int|User $user): ?bool

FILE: app/Services/Users/UserUpdateService.php
  class UserUpdateService (line 10) | class UserUpdateService
    method __construct (line 17) | public function __construct(private Hasher $hasher)
    method handle (line 26) | public function handle(User $user, array $data): User

FILE: app/Traits/Commands/EnvironmentWriterTrait.php
  type EnvironmentWriterTrait (line 7) | trait EnvironmentWriterTrait
    method escapeEnvironmentValue (line 14) | public function escapeEnvironmentValue(?string $value): string
    method writeToEnvironment (line 32) | public function writeToEnvironment(array $values = []): void

FILE: app/Traits/Controllers/JavascriptInjection.php
  type JavascriptInjection (line 7) | trait JavascriptInjection
    method setRequest (line 14) | public function setRequest(Request $request): self
    method plainInject (line 24) | public function plainInject(array $args = []): string

FILE: app/Traits/Helpers/AvailableLanguages.php
  type AvailableLanguages (line 8) | trait AvailableLanguages
    method getAvailableLanguages (line 18) | public function getAvailableLanguages(bool $localize = false): array
    method getFilesystemInstance (line 31) | private function getFilesystemInstance(): Filesystem
    method getIsoInstance (line 39) | private function getIsoInstance(): ISO639

FILE: app/Traits/Services/HasUserLevels.php
  type HasUserLevels (line 7) | trait HasUserLevels
    method setUserLevel (line 14) | public function setUserLevel(int $level): self
    method getUserLevel (line 24) | public function getUserLevel(): int
    method isUserLevel (line 32) | public function isUserLevel(int $level): bool

FILE: app/Traits/Services/ReturnsUpdatedModels.php
  type ReturnsUpdatedModels (line 5) | trait ReturnsUpdatedModels
    method getUpdatedModel (line 9) | public function getUpdatedModel(): bool
    method returnUpdatedModel (line 19) | public function returnUpdatedModel(bool $toggle = true): self

FILE: app/Traits/Services/ValidatesValidationRules.php
  type ValidatesValidationRules (line 9) | trait ValidatesValidationRules
    method getValidator (line 11) | abstract protected function getValidator(): ValidationFactory;
    method validateRules (line 19) | public function validateRules(array|string $rules): void

FILE: app/Transformers/Api/Application/AllocationTransformer.php
  class AllocationTransformer (line 12) | class AllocationTransformer extends BaseTransformer
    method getResourceName (line 22) | public function getResourceName(): string
    method transform (line 30) | public function transform(Allocation $allocation): array
    method includeNode (line 47) | public function includeNode(Allocation $allocation): Item|NullResource
    method includeServer (line 65) | public function includeServer(Allocation $allocation): Item|NullResource

FILE: app/Transformers/Api/Application/BaseTransformer.php
  class BaseTransformer (line 18) | abstract class BaseTransformer extends TransformerAbstract
    method __construct (line 27) | public function __construct()
    method getResourceName (line 38) | abstract public function getResourceName(): string;
    method setRequest (line 43) | public function setRequest(Request $request): self
    method fromRequest (line 53) | public static function fromRequest(Request $request): static
    method authorize (line 65) | protected function authorize(string $resource): bool
    method makeTransformer (line 98) | protected function makeTransformer(string $abstract)
    method formatTimestamp (line 108) | protected function formatTimestamp(string $timestamp): string

FILE: app/Transformers/Api/Application/DatabaseHostTransformer.php
  class DatabaseHostTransformer (line 11) | class DatabaseHostTransformer extends BaseTransformer
    method getResourceName (line 20) | public function getResourceName(): string
    method transform (line 28) | public function transform(DatabaseHost $model): array
    method includeDatabases (line 47) | public function includeDatabases(DatabaseHost $model): Collection|Null...

FILE: app/Transformers/Api/Application/EggTransformer.php
  class EggTransformer (line 15) | class EggTransformer extends BaseTransformer
    method getResourceName (line 31) | public function getResourceName(): string
    method transform (line 42) | public function transform(Egg $model): array
    method includeNest (line 87) | public function includeNest(Egg $model): Item|NullResource
    method includeServers (line 103) | public function includeServers(Egg $model): Collection|NullResource
    method includeConfig (line 118) | public function includeConfig(Egg $model): Item|NullResource
    method includeScript (line 140) | public function includeScript(Egg $model): Item|NullResource
    method includeVariables (line 163) | public function includeVariables(Egg $model): Collection|NullResource

FILE: app/Transformers/Api/Application/EggVariableTransformer.php
  class EggVariableTransformer (line 8) | class EggVariableTransformer extends BaseTransformer
    method getResourceName (line 13) | public function getResourceName(): string
    method transform (line 18) | public function transform(EggVariable $model)

FILE: app/Transformers/Api/Application/LocationTransformer.php
  class LocationTransformer (line 10) | class LocationTransformer extends BaseTransformer
    method getResourceName (line 20) | public function getResourceName(): string
    method transform (line 28) | public function transform(Location $location): array
    method includeServers (line 44) | public function includeServers(Location $location): Collection|NullRes...
    method includeNodes (line 60) | public function includeNodes(Location $location): Collection|NullResource

FILE: app/Transformers/Api/Application/NestTransformer.php
  class NestTransformer (line 12) | class NestTransformer extends BaseTransformer
    method getResourceName (line 24) | public function getResourceName(): string
    method transform (line 33) | public function transform(Nest $model): array
    method includeEggs (line 48) | public function includeEggs(Nest $model): Collection|NullResource
    method includeServers (line 64) | public function includeServers(Nest $model): Collection|NullResource

FILE: app/Transformers/Api/Application/NodeTransformer.php
  class NodeTransformer (line 11) | class NodeTransformer extends BaseTransformer
    method getResourceName (line 21) | public function getResourceName(): string
    method transform (line 30) | public function transform(Node $node): array
    method includeAllocations (line 58) | public function includeAllocations(Node $node): Collection|NullResource
    method includeLocation (line 78) | public function includeLocation(Node $node): Item|NullResource
    method includeServers (line 98) | public function includeServers(Node $node): Collection|NullResource

FILE: app/Transformers/Api/Application/ServerDatabaseTransformer.php
  class ServerDatabaseTransformer (line 12) | class ServerDatabaseTransformer extends BaseTransformer
    method handle (line 21) | public function handle(Encrypter $encrypter)
    method getResourceName (line 29) | public function getResourceName(): string
    method transform (line 37) | public function transform(Database $model): array
    method includePassword (line 55) | public function includePassword(Database $model): Item
    method includeHost (line 69) | public function includeHost(Database $model): Item|NullResource

FILE: app/Transformers/Api/Application/ServerTransformer.php
  class ServerTransformer (line 12) | class ServerTransformer extends BaseTransformer
    method handle (line 35) | public function handle(EnvironmentService $environmentService)
    method getResourceName (line 43) | public function getResourceName(): string
    method transform (line 51) | public function transform(Server $server): array
    method includeAllocations (line 99) | public function includeAllocations(Server $server): Collection|NullRes...
    method includeSubusers (line 115) | public function includeSubusers(Server $server): Collection|NullResource
    method includeUser (line 131) | public function includeUser(Server $server): Item|NullResource
    method includeNest (line 147) | public function includeNest(Server $server): Item|NullResource
    method includeEgg (line 163) | public function includeEgg(Server $server): Item|NullResource
    method includeVariables (line 179) | public function includeVariables(Server $server): Collection|NullResource
    method includeLocation (line 195) | public function includeLocation(Server $server)
Condensed preview — 1414 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (6,054K chars).
[
  {
    "path": ".editorconfig",
    "chars": 255,
    "preview": "root = true\n\n[*]\nindent_style = space\nindent_size = 4\ntab_width = 4\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_white"
  },
  {
    "path": ".eslintignore",
    "chars": 89,
    "preview": "public\nnode_modules\nresources/views\nbabel.config.js\ntailwind.config.js\nwebpack.config.js\n"
  },
  {
    "path": ".eslintrc.js",
    "chars": 1909,
    "preview": "/** @type {import('eslint').Linter.Config} */\nmodule.exports = {\n    parser: '@typescript-eslint/parser',\n    parserOpti"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 55,
    "preview": "github: [vlssu]\ncustom: [\"https://afdian.com/a/vlssu\"]\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/1-bug-report.yml",
    "chars": 2796,
    "preview": "name: Bug Reports\ndescription: For reporting known and reproducible issues with the software.\nbody:\n  - type: markdown\n "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/2-approved.yml",
    "chars": 792,
    "preview": "name: Pre-Discussed and Approved Topics\ndescription: For topics already previously discussed and approved in the GitHub "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 396,
    "preview": "blank_issues_enabled: false\ncontact_links:\n  - name: 安装帮助\n    url: https://discord.gg/pterodactyl\n    about: 请访问翼龙的 Disc"
  },
  {
    "path": ".github/docker/README.md",
    "chars": 3691,
    "preview": "# 翼龙面板 - Docker 镜像\n这是一个将面板所需环境等全部准备好的 docker 镜像。\n\n## 要求\n此 docker 镜像需要一些额外的软件来运作。这些软件既可以在其他容器中提供(见 [docker-compose.yml](h"
  },
  {
    "path": ".github/docker/default.conf",
    "chars": 1448,
    "preview": "# If using Ubuntu this file should be placed in:\n# \t\t\t/etc/nginx/sites-available/\n#\n# If using CentOS this file should b"
  },
  {
    "path": ".github/docker/default_ssl.conf",
    "chars": 2631,
    "preview": "# If using Ubuntu this file should be placed in: \n# \t\t\t/etc/nginx/sites-available/\n#\nserver {\n    listen 80;\n    server_"
  },
  {
    "path": ".github/docker/entrypoint.sh",
    "chars": 2559,
    "preview": "#!/bin/ash -e\ncd /app\n\nmkdir -p /var/log/panel/logs/ /var/log/supervisord/ /var/log/nginx/ /var/log/php7/ \\\n  && chmod 7"
  },
  {
    "path": ".github/docker/supervisord.conf",
    "chars": 1494,
    "preview": "[unix_http_server]\nfile=/tmp/supervisor.sock                       ; path to your socket file\n\n[supervisord]\nlogfile=/va"
  },
  {
    "path": ".github/docker/www.conf",
    "chars": 222,
    "preview": "[www]\n\nuser = nginx\ngroup = nginx\n\nlisten = 127.0.0.1:9000\nlisten.owner = nginx\nlisten.group = nginx\nlisten.mode = 0750\n"
  },
  {
    "path": ".github/workflows/build.yaml",
    "chars": 663,
    "preview": "name: Build\n\non:\n  push:\n    branches:\n      - 1.0-develop\n  pull_request:\n    branches:\n      - \"1.0-develop\"\n\njobs:\n  "
  },
  {
    "path": ".github/workflows/ci.yaml",
    "chars": 1726,
    "preview": "name: Tests\n\non:\n  push:\n    branches:\n      - 1.0-develop\n  pull_request:\n    branches:\n      - \"1.0-develop\"\n\njobs:\n  "
  },
  {
    "path": ".github/workflows/docker.yaml",
    "chars": 2804,
    "preview": "name: Docker\n\non:\n  push:\n    branches:\n      - 1.0-develop\n  release:\n    types:\n      - published\n\njobs:\n  push:\n    n"
  },
  {
    "path": ".github/workflows/release.yaml",
    "chars": 1732,
    "preview": "name: Release\non:\n  push:\n    tags:\n      - \"v*\"\njobs:\n  release:\n    name: Release\n    runs-on: ubuntu-latest\n    permi"
  },
  {
    "path": ".gitignore",
    "chars": 552,
    "preview": "/vendor\n*.DS_Store*\n!.env.ci\n!.env.example\n.env*\n.vagrant/*\n.vscode/*\nstorage/framework/*\n/.idea\n/nbproject\n/.direnv\n\nno"
  },
  {
    "path": ".php-cs-fixer.dist.php",
    "chars": 1640,
    "preview": "<?php\n\nuse PhpCsFixer\\Config;\nuse PhpCsFixer\\Finder;\nuse PhpCsFixer\\Runner\\Parallel\\ParallelConfigFactory;\n\n$finder = (n"
  },
  {
    "path": ".prettierrc.json",
    "chars": 140,
    "preview": "{\n\t\"printWidth\": 120,\n\t\"tabWidth\": 4,\n\t\"useTabs\": false,\n\t\"semi\": true,\n\t\"singleQuote\": true,\n\t\"jsxSingleQuote\": true,\n\t"
  },
  {
    "path": "BUILDING.md",
    "chars": 1361,
    "preview": "# 本地开发\n翼龙现在由React、Typescript和Tailwindcss驱动,其核心是使用webpack来生成编译资源。\n翼龙的发布版本将包括预编译、压缩和哈希的资源,你可以随时使用。\n\n然而,如果你有兴趣运行自定义主题或对Reac"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 135710,
    "preview": "# Changelog\nThis file is a running track of new features and fixes to each version of the panel released starting with `"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 791,
    "preview": "# 贡献\n\n**关于新功能的拉取请求**  \n翼龙(Pterodactyl)项目**不接受未经项目维护者在 GitHub discussions 中事先批准的新功能**拉取请求。由于这类复杂的拉取请求往往需要投入大量时间和精力进行审查,为保"
  },
  {
    "path": "Dockerfile",
    "chars": 2029,
    "preview": "# Stage 0:\n# Build the assets that are needed for the frontend. This build stage is then discarded\n# since we won't need"
  },
  {
    "path": "LICENSE.md",
    "chars": 1135,
    "preview": "# The MIT License (MIT)\n\n```\nPterodactyl®\nCopyright © Dane Everitt <dane@daneeveritt.com> and contributors\n\nPermission i"
  },
  {
    "path": "README.md",
    "chars": 2391,
    "preview": "[![Logo Image](https://api.pterodactyl.top/logos/new/pterodactyl_china_logo.png)](https://pterodactyl.top)\n\n![GitHub Sta"
  },
  {
    "path": "SECURITY.md",
    "chars": 554,
    "preview": "此内容为翼龙官方,与翼龙中国无关\n# 安全策略\n\n## 支持的版本\n\n翼龙(Pterodactyl)仅为面板(Panel)和翼(Wings)软件的最新 `major.minor` 主次版本提供安全支持。\n如果在旧版本中发现安全漏洞,但无法在"
  },
  {
    "path": "app/Console/Commands/Environment/AppSettingsCommand.php",
    "chars": 6689,
    "preview": "<?php\n\nnamespace Pterodactyl\\Console\\Commands\\Environment;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Contracts\\Con"
  },
  {
    "path": "app/Console/Commands/Environment/DatabaseSettingsCommand.php",
    "chars": 3844,
    "preview": "<?php\n\nnamespace Pterodactyl\\Console\\Commands\\Environment;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Contracts\\Con"
  },
  {
    "path": "app/Console/Commands/Environment/EmailSettingsCommand.php",
    "chars": 5332,
    "preview": "<?php\n\nnamespace Pterodactyl\\Console\\Commands\\Environment;\n\nuse Illuminate\\Console\\Command;\nuse Pterodactyl\\Traits\\Comma"
  },
  {
    "path": "app/Console/Commands/InfoCommand.php",
    "chars": 3217,
    "preview": "<?php\n\nnamespace Pterodactyl\\Console\\Commands;\n\nuse Illuminate\\Console\\Command;\nuse Pterodactyl\\Services\\Helpers\\Softwar"
  },
  {
    "path": "app/Console/Commands/Location/DeleteLocationCommand.php",
    "chars": 1712,
    "preview": "<?php\n\nnamespace Pterodactyl\\Console\\Commands\\Location;\n\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Support\\Collecti"
  },
  {
    "path": "app/Console/Commands/Location/MakeLocationCommand.php",
    "chars": 1282,
    "preview": "<?php\n\nnamespace Pterodactyl\\Console\\Commands\\Location;\n\nuse Illuminate\\Console\\Command;\nuse Pterodactyl\\Services\\Locati"
  },
  {
    "path": "app/Console/Commands/Maintenance/CleanServiceBackupFilesCommand.php",
    "chars": 1359,
    "preview": "<?php\n\nnamespace Pterodactyl\\Console\\Commands\\Maintenance;\n\nuse Carbon\\Carbon;\nuse Illuminate\\Console\\Command;\nuse Illum"
  },
  {
    "path": "app/Console/Commands/Maintenance/PruneOrphanedBackupsCommand.php",
    "chars": 1378,
    "preview": "<?php\n\nnamespace Pterodactyl\\Console\\Commands\\Maintenance;\n\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Console\\Command;\n"
  },
  {
    "path": "app/Console/Commands/Node/MakeNodeCommand.php",
    "chars": 3718,
    "preview": "<?php\n\nnamespace Pterodactyl\\Console\\Commands\\Node;\n\nuse Illuminate\\Console\\Command;\nuse Pterodactyl\\Services\\Nodes\\Node"
  },
  {
    "path": "app/Console/Commands/Node/NodeConfigurationCommand.php",
    "chars": 1323,
    "preview": "<?php\n\nnamespace Pterodactyl\\Console\\Commands\\Node;\n\nuse Pterodactyl\\Models\\Node;\nuse Illuminate\\Console\\Command;\n\nclass"
  },
  {
    "path": "app/Console/Commands/Node/NodeListCommand.php",
    "chars": 974,
    "preview": "<?php\n\nnamespace Pterodactyl\\Console\\Commands\\Node;\n\nuse Pterodactyl\\Models\\Node;\nuse Illuminate\\Console\\Command;\n\nclass"
  },
  {
    "path": "app/Console/Commands/Overrides/KeyGenerateCommand.php",
    "chars": 858,
    "preview": "<?php\n\nnamespace Pterodactyl\\Console\\Commands\\Overrides;\n\nuse Illuminate\\Foundation\\Console\\KeyGenerateCommand as BaseKe"
  },
  {
    "path": "app/Console/Commands/Overrides/SeedCommand.php",
    "chars": 593,
    "preview": "<?php\n\nnamespace Pterodactyl\\Console\\Commands\\Overrides;\n\nuse Pterodactyl\\Console\\RequiresDatabaseMigrations;\nuse Illumi"
  },
  {
    "path": "app/Console/Commands/Overrides/UpCommand.php",
    "chars": 579,
    "preview": "<?php\n\nnamespace Pterodactyl\\Console\\Commands\\Overrides;\n\nuse Pterodactyl\\Console\\RequiresDatabaseMigrations;\nuse Illumi"
  },
  {
    "path": "app/Console/Commands/Schedule/ProcessRunnableCommand.php",
    "chars": 2305,
    "preview": "<?php\n\nnamespace Pterodactyl\\Console\\Commands\\Schedule;\n\nuse Illuminate\\Console\\Command;\nuse Pterodactyl\\Models\\Schedule"
  },
  {
    "path": "app/Console/Commands/Server/BulkPowerActionCommand.php",
    "chars": 3819,
    "preview": "<?php\n\nnamespace Pterodactyl\\Console\\Commands\\Server;\n\nuse Pterodactyl\\Models\\Server;\nuse Illuminate\\Console\\Command;\nus"
  },
  {
    "path": "app/Console/Commands/TelemetryCommand.php",
    "chars": 830,
    "preview": "<?php\n\nnamespace Pterodactyl\\Console\\Commands;\n\nuse Illuminate\\Console\\Command;\nuse Symfony\\Component\\VarDumper\\VarDumpe"
  },
  {
    "path": "app/Console/Commands/UpgradeCommand.php",
    "chars": 7032,
    "preview": "<?php\n\nnamespace Pterodactyl\\Console\\Commands;\n\nuse Illuminate\\Console\\Command;\nuse Pterodactyl\\Console\\Kernel;\nuse Symf"
  },
  {
    "path": "app/Console/Commands/User/DeleteUserCommand.php",
    "chars": 2183,
    "preview": "<?php\n\nnamespace Pterodactyl\\Console\\Commands\\User;\n\nuse Pterodactyl\\Models\\User;\nuse Webmozart\\Assert\\Assert;\nuse Illum"
  },
  {
    "path": "app/Console/Commands/User/DisableTwoFactorCommand.php",
    "chars": 1342,
    "preview": "<?php\n\nnamespace Pterodactyl\\Console\\Commands\\User;\n\nuse Illuminate\\Console\\Command;\nuse Pterodactyl\\Contracts\\Repositor"
  },
  {
    "path": "app/Console/Commands/User/MakeUserCommand.php",
    "chars": 1999,
    "preview": "<?php\n\nnamespace Pterodactyl\\Console\\Commands\\User;\n\nuse Illuminate\\Console\\Command;\nuse Pterodactyl\\Services\\Users\\User"
  },
  {
    "path": "app/Console/Kernel.php",
    "chars": 2827,
    "preview": "<?php\n\nnamespace Pterodactyl\\Console;\n\nuse Ramsey\\Uuid\\Uuid;\nuse Pterodactyl\\Models\\ActivityLog;\nuse Illuminate\\Console\\"
  },
  {
    "path": "app/Console/RequiresDatabaseMigrations.php",
    "chars": 1649,
    "preview": "<?php\n\nnamespace Pterodactyl\\Console;\n\n/**\n * @mixin \\Illuminate\\Console\\Command\n */\ntrait RequiresDatabaseMigrations\n{\n"
  },
  {
    "path": "app/Contracts/Core/ReceivesEvents.php",
    "chars": 233,
    "preview": "<?php\n\nnamespace Pterodactyl\\Contracts\\Core;\n\nuse Pterodactyl\\Events\\Event;\n\ninterface ReceivesEvents\n{\n    /**\n     * H"
  },
  {
    "path": "app/Contracts/Criteria/CriteriaInterface.php",
    "chars": 305,
    "preview": "<?php\n\nnamespace Pterodactyl\\Contracts\\Criteria;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Pterodactyl\\Repositories\\R"
  },
  {
    "path": "app/Contracts/Extensions/HashidsInterface.php",
    "chars": 378,
    "preview": "<?php\n\nnamespace Pterodactyl\\Contracts\\Extensions;\n\nuse Hashids\\HashidsInterface as VendorHashidsInterface;\n\ninterface H"
  },
  {
    "path": "app/Contracts/Http/ClientPermissionsRequest.php",
    "chars": 353,
    "preview": "<?php\n\nnamespace Pterodactyl\\Contracts\\Http;\n\ninterface ClientPermissionsRequest\n{\n    /**\n     * Returns the permission"
  },
  {
    "path": "app/Contracts/Models/Identifiable.php",
    "chars": 204,
    "preview": "<?php\n\nnamespace Pterodactyl\\Contracts\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Builder;\n\ninterface Identifiable\n{\n    "
  },
  {
    "path": "app/Contracts/Repository/AllocationRepositoryInterface.php",
    "chars": 534,
    "preview": "<?php\n\nnamespace Pterodactyl\\Contracts\\Repository;\n\nuse Pterodactyl\\Models\\Allocation;\n\ninterface AllocationRepositoryIn"
  },
  {
    "path": "app/Contracts/Repository/ApiKeyRepositoryInterface.php",
    "chars": 490,
    "preview": "<?php\n\nnamespace Pterodactyl\\Contracts\\Repository;\n\nuse Pterodactyl\\Models\\User;\nuse Illuminate\\Support\\Collection;\n\nint"
  },
  {
    "path": "app/Contracts/Repository/ApiPermissionRepositoryInterface.php",
    "chars": 127,
    "preview": "<?php\n\nnamespace Pterodactyl\\Contracts\\Repository;\n\ninterface ApiPermissionRepositoryInterface extends RepositoryInterfa"
  },
  {
    "path": "app/Contracts/Repository/DatabaseHostRepositoryInterface.php",
    "chars": 345,
    "preview": "<?php\n\nnamespace Pterodactyl\\Contracts\\Repository;\n\nuse Illuminate\\Support\\Collection;\n\ninterface DatabaseHostRepository"
  },
  {
    "path": "app/Contracts/Repository/DatabaseRepositoryInterface.php",
    "chars": 1727,
    "preview": "<?php\n\nnamespace Pterodactyl\\Contracts\\Repository;\n\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Contracts\\Paginati"
  },
  {
    "path": "app/Contracts/Repository/EggRepositoryInterface.php",
    "chars": 1133,
    "preview": "<?php\n\nnamespace Pterodactyl\\Contracts\\Repository;\n\nuse Pterodactyl\\Models\\Egg;\nuse Illuminate\\Database\\Eloquent\\Collect"
  },
  {
    "path": "app/Contracts/Repository/EggVariableRepositoryInterface.php",
    "chars": 389,
    "preview": "<?php\n\nnamespace Pterodactyl\\Contracts\\Repository;\n\nuse Illuminate\\Support\\Collection;\n\ninterface EggVariableRepositoryI"
  },
  {
    "path": "app/Contracts/Repository/LocationRepositoryInterface.php",
    "chars": 932,
    "preview": "<?php\n\nnamespace Pterodactyl\\Contracts\\Repository;\n\nuse Pterodactyl\\Models\\Location;\nuse Illuminate\\Support\\Collection;\n"
  },
  {
    "path": "app/Contracts/Repository/NestRepositoryInterface.php",
    "chars": 927,
    "preview": "<?php\n\nnamespace Pterodactyl\\Contracts\\Repository;\n\nuse Pterodactyl\\Models\\Nest;\nuse Illuminate\\Database\\Eloquent\\Collec"
  },
  {
    "path": "app/Contracts/Repository/NodeRepositoryInterface.php",
    "chars": 1092,
    "preview": "<?php\n\nnamespace Pterodactyl\\Contracts\\Repository;\n\nuse Pterodactyl\\Models\\Node;\nuse Illuminate\\Support\\Collection;\n\nint"
  },
  {
    "path": "app/Contracts/Repository/PermissionRepositoryInterface.php",
    "chars": 124,
    "preview": "<?php\n\nnamespace Pterodactyl\\Contracts\\Repository;\n\ninterface PermissionRepositoryInterface extends RepositoryInterface\n"
  },
  {
    "path": "app/Contracts/Repository/RepositoryInterface.php",
    "chars": 4094,
    "preview": "<?php\n\nnamespace Pterodactyl\\Contracts\\Repository;\n\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Database\\Eloquent\\"
  },
  {
    "path": "app/Contracts/Repository/ScheduleRepositoryInterface.php",
    "chars": 570,
    "preview": "<?php\n\nnamespace Pterodactyl\\Contracts\\Repository;\n\nuse Pterodactyl\\Models\\Schedule;\nuse Illuminate\\Support\\Collection;\n"
  },
  {
    "path": "app/Contracts/Repository/ServerRepositoryInterface.php",
    "chars": 2541,
    "preview": "<?php\n\nnamespace Pterodactyl\\Contracts\\Repository;\n\nuse Pterodactyl\\Models\\Server;\nuse Illuminate\\Support\\Collection;\nus"
  },
  {
    "path": "app/Contracts/Repository/ServerVariableRepositoryInterface.php",
    "chars": 128,
    "preview": "<?php\n\nnamespace Pterodactyl\\Contracts\\Repository;\n\ninterface ServerVariableRepositoryInterface extends RepositoryInterf"
  },
  {
    "path": "app/Contracts/Repository/SessionRepositoryInterface.php",
    "chars": 415,
    "preview": "<?php\n\nnamespace Pterodactyl\\Contracts\\Repository;\n\nuse Illuminate\\Support\\Collection;\n\ninterface SessionRepositoryInter"
  },
  {
    "path": "app/Contracts/Repository/SettingsRepositoryInterface.php",
    "chars": 641,
    "preview": "<?php\n\nnamespace Pterodactyl\\Contracts\\Repository;\n\ninterface SettingsRepositoryInterface extends RepositoryInterface\n{\n"
  },
  {
    "path": "app/Contracts/Repository/SubuserRepositoryInterface.php",
    "chars": 781,
    "preview": "<?php\n\nnamespace Pterodactyl\\Contracts\\Repository;\n\nuse Pterodactyl\\Models\\Subuser;\n\ninterface SubuserRepositoryInterfac"
  },
  {
    "path": "app/Contracts/Repository/TaskRepositoryInterface.php",
    "chars": 491,
    "preview": "<?php\n\nnamespace Pterodactyl\\Contracts\\Repository;\n\nuse Pterodactyl\\Models\\Task;\n\ninterface TaskRepositoryInterface exte"
  },
  {
    "path": "app/Contracts/Repository/UserRepositoryInterface.php",
    "chars": 118,
    "preview": "<?php\n\nnamespace Pterodactyl\\Contracts\\Repository;\n\ninterface UserRepositoryInterface extends RepositoryInterface\n{\n}\n"
  },
  {
    "path": "app/Enum/ResourceLimit.php",
    "chars": 1995,
    "preview": "<?php\n\nnamespace Pterodactyl\\Enum;\n\nuse Illuminate\\Http\\Request;\nuse Webmozart\\Assert\\Assert;\nuse Pterodactyl\\Models\\Ser"
  },
  {
    "path": "app/Events/ActivityLogged.php",
    "chars": 686,
    "preview": "<?php\n\nnamespace Pterodactyl\\Events;\n\nuse Illuminate\\Support\\Str;\nuse Pterodactyl\\Models\\ActivityLog;\nuse Illuminate\\Dat"
  },
  {
    "path": "app/Events/Auth/DirectLogin.php",
    "chars": 225,
    "preview": "<?php\n\nnamespace Pterodactyl\\Events\\Auth;\n\nuse Pterodactyl\\Models\\User;\nuse Pterodactyl\\Events\\Event;\n\nclass DirectLogin"
  },
  {
    "path": "app/Events/Auth/FailedCaptcha.php",
    "chars": 316,
    "preview": "<?php\n\nnamespace Pterodactyl\\Events\\Auth;\n\nuse Pterodactyl\\Events\\Event;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass F"
  },
  {
    "path": "app/Events/Auth/FailedPasswordReset.php",
    "chars": 321,
    "preview": "<?php\n\nnamespace Pterodactyl\\Events\\Auth;\n\nuse Pterodactyl\\Events\\Event;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass F"
  },
  {
    "path": "app/Events/Auth/ProvidedAuthenticationToken.php",
    "chars": 249,
    "preview": "<?php\n\nnamespace Pterodactyl\\Events\\Auth;\n\nuse Pterodactyl\\Models\\User;\nuse Pterodactyl\\Events\\Event;\n\nclass ProvidedAut"
  },
  {
    "path": "app/Events/Event.php",
    "chars": 63,
    "preview": "<?php\n\nnamespace Pterodactyl\\Events;\n\nabstract class Event\n{\n}\n"
  },
  {
    "path": "app/Events/Server/Created.php",
    "chars": 324,
    "preview": "<?php\n\nnamespace Pterodactyl\\Events\\Server;\n\nuse Pterodactyl\\Events\\Event;\nuse Pterodactyl\\Models\\Server;\nuse Illuminate"
  },
  {
    "path": "app/Events/Server/Creating.php",
    "chars": 325,
    "preview": "<?php\n\nnamespace Pterodactyl\\Events\\Server;\n\nuse Pterodactyl\\Events\\Event;\nuse Pterodactyl\\Models\\Server;\nuse Illuminate"
  },
  {
    "path": "app/Events/Server/Deleted.php",
    "chars": 324,
    "preview": "<?php\n\nnamespace Pterodactyl\\Events\\Server;\n\nuse Pterodactyl\\Events\\Event;\nuse Pterodactyl\\Models\\Server;\nuse Illuminate"
  },
  {
    "path": "app/Events/Server/Deleting.php",
    "chars": 325,
    "preview": "<?php\n\nnamespace Pterodactyl\\Events\\Server;\n\nuse Pterodactyl\\Events\\Event;\nuse Pterodactyl\\Models\\Server;\nuse Illuminate"
  },
  {
    "path": "app/Events/Server/Installed.php",
    "chars": 326,
    "preview": "<?php\n\nnamespace Pterodactyl\\Events\\Server;\n\nuse Pterodactyl\\Events\\Event;\nuse Pterodactyl\\Models\\Server;\nuse Illuminate"
  },
  {
    "path": "app/Events/Server/Saved.php",
    "chars": 322,
    "preview": "<?php\n\nnamespace Pterodactyl\\Events\\Server;\n\nuse Pterodactyl\\Events\\Event;\nuse Pterodactyl\\Models\\Server;\nuse Illuminate"
  },
  {
    "path": "app/Events/Server/Saving.php",
    "chars": 323,
    "preview": "<?php\n\nnamespace Pterodactyl\\Events\\Server;\n\nuse Pterodactyl\\Events\\Event;\nuse Pterodactyl\\Models\\Server;\nuse Illuminate"
  },
  {
    "path": "app/Events/Server/Updated.php",
    "chars": 324,
    "preview": "<?php\n\nnamespace Pterodactyl\\Events\\Server;\n\nuse Pterodactyl\\Events\\Event;\nuse Pterodactyl\\Models\\Server;\nuse Illuminate"
  },
  {
    "path": "app/Events/Server/Updating.php",
    "chars": 325,
    "preview": "<?php\n\nnamespace Pterodactyl\\Events\\Server;\n\nuse Pterodactyl\\Events\\Event;\nuse Pterodactyl\\Models\\Server;\nuse Illuminate"
  },
  {
    "path": "app/Events/Subuser/Created.php",
    "chars": 328,
    "preview": "<?php\n\nnamespace Pterodactyl\\Events\\Subuser;\n\nuse Pterodactyl\\Events\\Event;\nuse Pterodactyl\\Models\\Subuser;\nuse Illumina"
  },
  {
    "path": "app/Events/Subuser/Creating.php",
    "chars": 329,
    "preview": "<?php\n\nnamespace Pterodactyl\\Events\\Subuser;\n\nuse Pterodactyl\\Events\\Event;\nuse Pterodactyl\\Models\\Subuser;\nuse Illumina"
  },
  {
    "path": "app/Events/Subuser/Deleted.php",
    "chars": 328,
    "preview": "<?php\n\nnamespace Pterodactyl\\Events\\Subuser;\n\nuse Pterodactyl\\Events\\Event;\nuse Pterodactyl\\Models\\Subuser;\nuse Illumina"
  },
  {
    "path": "app/Events/Subuser/Deleting.php",
    "chars": 329,
    "preview": "<?php\n\nnamespace Pterodactyl\\Events\\Subuser;\n\nuse Pterodactyl\\Events\\Event;\nuse Pterodactyl\\Models\\Subuser;\nuse Illumina"
  },
  {
    "path": "app/Events/User/Created.php",
    "chars": 316,
    "preview": "<?php\n\nnamespace Pterodactyl\\Events\\User;\n\nuse Pterodactyl\\Models\\User;\nuse Pterodactyl\\Events\\Event;\nuse Illuminate\\Que"
  },
  {
    "path": "app/Events/User/Creating.php",
    "chars": 317,
    "preview": "<?php\n\nnamespace Pterodactyl\\Events\\User;\n\nuse Pterodactyl\\Models\\User;\nuse Pterodactyl\\Events\\Event;\nuse Illuminate\\Que"
  },
  {
    "path": "app/Events/User/Deleted.php",
    "chars": 316,
    "preview": "<?php\n\nnamespace Pterodactyl\\Events\\User;\n\nuse Pterodactyl\\Models\\User;\nuse Pterodactyl\\Events\\Event;\nuse Illuminate\\Que"
  },
  {
    "path": "app/Events/User/Deleting.php",
    "chars": 317,
    "preview": "<?php\n\nnamespace Pterodactyl\\Events\\User;\n\nuse Pterodactyl\\Models\\User;\nuse Pterodactyl\\Events\\Event;\nuse Illuminate\\Que"
  },
  {
    "path": "app/Events/User/PasswordChanged.php",
    "chars": 247,
    "preview": "<?php\n\nnamespace Pterodactyl\\Events\\User;\n\nuse Pterodactyl\\Models\\User;\nuse Illuminate\\Foundation\\Events\\Dispatchable;\n\n"
  },
  {
    "path": "app/Exceptions/AccountNotFoundException.php",
    "chars": 96,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions;\n\nclass AccountNotFoundException extends \\Exception\n{\n}\n"
  },
  {
    "path": "app/Exceptions/AutoDeploymentException.php",
    "chars": 95,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions;\n\nclass AutoDeploymentException extends \\Exception\n{\n}\n"
  },
  {
    "path": "app/Exceptions/DisplayException.php",
    "chars": 2353,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions;\n\nuse Exception;\nuse Illuminate\\Http\\Request;\nuse Psr\\Log\\LoggerInterface;\nuse I"
  },
  {
    "path": "app/Exceptions/Handler.php",
    "chars": 9892,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions;\n\nuse Exception;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Str;\nuse Ill"
  },
  {
    "path": "app/Exceptions/Http/Base/InvalidPasswordProvidedException.php",
    "chars": 166,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Http\\Base;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass InvalidPasswordP"
  },
  {
    "path": "app/Exceptions/Http/Connection/DaemonConnectionException.php",
    "chars": 3358,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Http\\Connection;\n\nuse Illuminate\\Http\\Response;\nuse Illuminate\\Support\\Facades\\L"
  },
  {
    "path": "app/Exceptions/Http/HttpForbiddenException.php",
    "chars": 425,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Http;\n\nuse Illuminate\\Http\\Response;\nuse Symfony\\Component\\HttpKernel\\Exception\\"
  },
  {
    "path": "app/Exceptions/Http/Server/FileSizeTooLargeException.php",
    "chars": 325,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Http\\Server;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass FileSizeTooLar"
  },
  {
    "path": "app/Exceptions/Http/Server/FileTypeNotEditableException.php",
    "chars": 164,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Http\\Server;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass FileTypeNotEdi"
  },
  {
    "path": "app/Exceptions/Http/Server/ServerStateConflictException.php",
    "chars": 1066,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Http\\Server;\n\nuse Pterodactyl\\Models\\Server;\nuse Symfony\\Component\\HttpKernel\\Ex"
  },
  {
    "path": "app/Exceptions/Http/TwoFactorAuthRequiredException.php",
    "chars": 532,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Http;\n\nuse Illuminate\\Http\\Response;\nuse Symfony\\Component\\HttpKernel\\Exception\\"
  },
  {
    "path": "app/Exceptions/ManifestDoesNotExistException.php",
    "chars": 335,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions;\n\nuse Spatie\\Ignition\\Contracts\\Solution;\nuse Spatie\\Ignition\\Contracts\\Provides"
  },
  {
    "path": "app/Exceptions/Model/DataValidationException.php",
    "chars": 1376,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Model;\n\nuse Illuminate\\Support\\MessageBag;\nuse Illuminate\\Database\\Eloquent\\Mode"
  },
  {
    "path": "app/Exceptions/PterodactylException.php",
    "chars": 92,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions;\n\nclass PterodactylException extends \\Exception\n{\n}\n"
  },
  {
    "path": "app/Exceptions/Repository/Daemon/InvalidPowerSignalException.php",
    "chars": 186,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Repository\\Daemon;\n\nuse Pterodactyl\\Exceptions\\Repository\\RepositoryException;\n\n"
  },
  {
    "path": "app/Exceptions/Repository/DuplicateDatabaseNameException.php",
    "chars": 165,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Repository;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass DuplicateDataba"
  },
  {
    "path": "app/Exceptions/Repository/RecordNotFoundException.php",
    "chars": 510,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Repository;\n\nuse Illuminate\\Http\\Response;\nuse Symfony\\Component\\HttpKernel\\Exce"
  },
  {
    "path": "app/Exceptions/Repository/RepositoryException.php",
    "chars": 162,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Repository;\n\nuse Pterodactyl\\Exceptions\\PterodactylException;\n\nclass RepositoryE"
  },
  {
    "path": "app/Exceptions/Service/Allocation/AllocationDoesNotBelongToServerException.php",
    "chars": 191,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service\\Allocation;\n\nuse Pterodactyl\\Exceptions\\PterodactylException;\n\nclass All"
  },
  {
    "path": "app/Exceptions/Service/Allocation/AutoAllocationNotEnabledException.php",
    "chars": 363,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service\\Allocation;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass AutoAll"
  },
  {
    "path": "app/Exceptions/Service/Allocation/CidrOutOfRangeException.php",
    "chars": 352,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service\\Allocation;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass CidrOut"
  },
  {
    "path": "app/Exceptions/Service/Allocation/InvalidPortMappingException.php",
    "chars": 388,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service\\Allocation;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass Invalid"
  },
  {
    "path": "app/Exceptions/Service/Allocation/NoAutoAllocationSpaceAvailableException.php",
    "chars": 378,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service\\Allocation;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass NoAutoA"
  },
  {
    "path": "app/Exceptions/Service/Allocation/PortOutOfRangeException.php",
    "chars": 352,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service\\Allocation;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass PortOut"
  },
  {
    "path": "app/Exceptions/Service/Allocation/ServerUsingAllocationException.php",
    "chars": 173,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service\\Allocation;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass ServerU"
  },
  {
    "path": "app/Exceptions/Service/Allocation/TooManyPortsInRangeException.php",
    "chars": 359,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service\\Allocation;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass TooMany"
  },
  {
    "path": "app/Exceptions/Service/Backup/BackupLockedException.php",
    "chars": 312,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service\\Backup;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass BackupLocke"
  },
  {
    "path": "app/Exceptions/Service/Backup/TooManyBackupsException.php",
    "chars": 388,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service\\Backup;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass TooManyBack"
  },
  {
    "path": "app/Exceptions/Service/Database/DatabaseClientFeatureNotEnabledException.php",
    "chars": 284,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service\\Database;\n\nuse Pterodactyl\\Exceptions\\PterodactylException;\n\nclass Datab"
  },
  {
    "path": "app/Exceptions/Service/Database/NoSuitableDatabaseHostException.php",
    "chars": 337,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service\\Database;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass NoSuitabl"
  },
  {
    "path": "app/Exceptions/Service/Database/TooManyDatabasesException.php",
    "chars": 270,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service\\Database;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass TooManyDa"
  },
  {
    "path": "app/Exceptions/Service/Deployment/NoViableAllocationException.php",
    "chars": 170,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service\\Deployment;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass NoViabl"
  },
  {
    "path": "app/Exceptions/Service/Deployment/NoViableNodeException.php",
    "chars": 164,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service\\Deployment;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass NoViabl"
  },
  {
    "path": "app/Exceptions/Service/Egg/BadJsonFormatException.php",
    "chars": 158,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service\\Egg;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass BadJsonFormatE"
  },
  {
    "path": "app/Exceptions/Service/Egg/HasChildrenException.php",
    "chars": 156,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service\\Egg;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass HasChildrenExc"
  },
  {
    "path": "app/Exceptions/Service/Egg/InvalidCopyFromException.php",
    "chars": 160,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service\\Egg;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass InvalidCopyFro"
  },
  {
    "path": "app/Exceptions/Service/Egg/NoParentConfigurationFoundException.php",
    "chars": 171,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service\\Egg;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass NoParentConfig"
  },
  {
    "path": "app/Exceptions/Service/Egg/Variable/BadValidationRuleException.php",
    "chars": 171,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service\\Egg\\Variable;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass BadVa"
  },
  {
    "path": "app/Exceptions/Service/Egg/Variable/ReservedVariableNameException.php",
    "chars": 174,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service\\Egg\\Variable;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass Reser"
  },
  {
    "path": "app/Exceptions/Service/HasActiveServersException.php",
    "chars": 283,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service;\n\nuse Illuminate\\Http\\Response;\nuse Pterodactyl\\Exceptions\\DisplayExcept"
  },
  {
    "path": "app/Exceptions/Service/Helper/CdnVersionFetchingException.php",
    "chars": 114,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service\\Helper;\n\nclass CdnVersionFetchingException extends \\Exception\n{\n}\n"
  },
  {
    "path": "app/Exceptions/Service/InvalidFileUploadException.php",
    "chars": 158,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass InvalidFileUploadE"
  },
  {
    "path": "app/Exceptions/Service/Location/HasActiveNodesException.php",
    "chars": 290,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service\\Location;\n\nuse Illuminate\\Http\\Response;\nuse Pterodactyl\\Exceptions\\Disp"
  },
  {
    "path": "app/Exceptions/Service/Node/ConfigurationNotPersistedException.php",
    "chars": 171,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service\\Node;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass Configuration"
  },
  {
    "path": "app/Exceptions/Service/Schedule/Task/TaskIntervalTooLongException.php",
    "chars": 174,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service\\Schedule\\Task;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass Task"
  },
  {
    "path": "app/Exceptions/Service/Server/RequiredVariableMissingException.php",
    "chars": 179,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service\\Server;\n\nuse Pterodactyl\\Exceptions\\PterodactylException;\n\nclass Require"
  },
  {
    "path": "app/Exceptions/Service/ServiceLimitExceededException.php",
    "chars": 460,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass ServiceLimitExceed"
  },
  {
    "path": "app/Exceptions/Service/Subuser/ServerSubuserExistsException.php",
    "chars": 168,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service\\Subuser;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass ServerSubu"
  },
  {
    "path": "app/Exceptions/Service/Subuser/UserIsServerOwnerException.php",
    "chars": 166,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service\\Subuser;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass UserIsServ"
  },
  {
    "path": "app/Exceptions/Service/User/TwoFactorAuthenticationTokenInvalid.php",
    "chars": 333,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Service\\User;\n\nuse Pterodactyl\\Exceptions\\DisplayException;\n\nclass TwoFactorAuth"
  },
  {
    "path": "app/Exceptions/Solutions/ManifestDoesNotExistSolution.php",
    "chars": 558,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Solutions;\n\nuse Spatie\\Ignition\\Contracts\\Solution;\n\nclass ManifestDoesNotExistS"
  },
  {
    "path": "app/Exceptions/Transformer/InvalidTransformerLevelException.php",
    "chars": 176,
    "preview": "<?php\n\nnamespace Pterodactyl\\Exceptions\\Transformer;\n\nuse Pterodactyl\\Exceptions\\PterodactylException;\n\nclass InvalidTra"
  },
  {
    "path": "app/Extensions/Backups/BackupManager.php",
    "chars": 4293,
    "preview": "<?php\n\nnamespace Pterodactyl\\Extensions\\Backups;\n\nuse Closure;\nuse Aws\\S3\\S3Client;\nuse Illuminate\\Support\\Arr;\nuse Illu"
  },
  {
    "path": "app/Extensions/DynamicDatabaseConnection.php",
    "chars": 1494,
    "preview": "<?php\n\nnamespace Pterodactyl\\Extensions;\n\nuse Pterodactyl\\Models\\DatabaseHost;\nuse Illuminate\\Contracts\\Encryption\\Encry"
  },
  {
    "path": "app/Extensions/Facades/Theme.php",
    "chars": 227,
    "preview": "<?php\n\nnamespace Pterodactyl\\Extensions\\Facades;\n\nuse Illuminate\\Support\\Facades\\Facade;\n\nclass Theme extends Facade\n{\n "
  },
  {
    "path": "app/Extensions/Filesystem/S3Filesystem.php",
    "chars": 693,
    "preview": "<?php\n\nnamespace Pterodactyl\\Extensions\\Filesystem;\n\nuse Aws\\S3\\S3ClientInterface;\nuse League\\Flysystem\\AwsS3V3\\AwsS3V3A"
  },
  {
    "path": "app/Extensions/Hashids.php",
    "chars": 421,
    "preview": "<?php\n\nnamespace Pterodactyl\\Extensions;\n\nuse Illuminate\\Support\\Arr;\nuse Hashids\\Hashids as VendorHashids;\nuse Pterodac"
  },
  {
    "path": "app/Extensions/Illuminate/Database/Eloquent/Builder.php",
    "chars": 279,
    "preview": "<?php\n\nnamespace Pterodactyl\\Extensions\\Illuminate\\Database\\Eloquent;\n\nuse Illuminate\\Database\\Eloquent\\Builder as Eloqu"
  },
  {
    "path": "app/Extensions/Illuminate/Events/Contracts/SubscribesToEvents.php",
    "chars": 205,
    "preview": "<?php\n\nnamespace Pterodactyl\\Extensions\\Illuminate\\Events\\Contracts;\n\nuse Illuminate\\Contracts\\Events\\Dispatcher;\n\ninter"
  },
  {
    "path": "app/Extensions/Laravel/Sanctum/NewAccessToken.php",
    "chars": 539,
    "preview": "<?php\n\nnamespace Pterodactyl\\Extensions\\Laravel\\Sanctum;\n\nuse Pterodactyl\\Models\\ApiKey;\nuse Laravel\\Sanctum\\NewAccessTo"
  },
  {
    "path": "app/Extensions/Lcobucci/JWT/Encoding/TimestampDates.php",
    "chars": 909,
    "preview": "<?php\n\nnamespace Pterodactyl\\Extensions\\Lcobucci\\JWT\\Encoding;\n\nuse Lcobucci\\JWT\\ClaimsFormatter;\nuse Lcobucci\\JWT\\Token"
  },
  {
    "path": "app/Extensions/League/Fractal/Serializers/PterodactylSerializer.php",
    "chars": 1306,
    "preview": "<?php\n\nnamespace Pterodactyl\\Extensions\\League\\Fractal\\Serializers;\n\nuse League\\Fractal\\Serializer\\ArraySerializer;\n\ncla"
  },
  {
    "path": "app/Extensions/Spatie/Fractalistic/Fractal.php",
    "chars": 1554,
    "preview": "<?php\n\nnamespace Pterodactyl\\Extensions\\Spatie\\Fractalistic;\n\nuse League\\Fractal\\Scope;\nuse League\\Fractal\\TransformerAb"
  },
  {
    "path": "app/Extensions/Themes/Theme.php",
    "chars": 492,
    "preview": "<?php\n\nnamespace Pterodactyl\\Extensions\\Themes;\n\nclass Theme\n{\n    public function js($path): string\n    {\n        retur"
  },
  {
    "path": "app/Facades/Activity.php",
    "chars": 279,
    "preview": "<?php\n\nnamespace Pterodactyl\\Facades;\n\nuse Illuminate\\Support\\Facades\\Facade;\nuse Pterodactyl\\Services\\Activity\\Activity"
  },
  {
    "path": "app/Facades/LogBatch.php",
    "chars": 289,
    "preview": "<?php\n\nnamespace Pterodactyl\\Facades;\n\nuse Illuminate\\Support\\Facades\\Facade;\nuse Pterodactyl\\Services\\Activity\\Activity"
  },
  {
    "path": "app/Facades/LogTarget.php",
    "chars": 378,
    "preview": "<?php\n\nnamespace Pterodactyl\\Facades;\n\nuse Illuminate\\Support\\Facades\\Facade;\nuse Pterodactyl\\Services\\Activity\\Activity"
  },
  {
    "path": "app/Helpers/Time.php",
    "chars": 593,
    "preview": "<?php\n\nnamespace Pterodactyl\\Helpers;\n\nuse Carbon\\CarbonImmutable;\n\nfinal class Time\n{\n    /**\n     * Gets the time offs"
  },
  {
    "path": "app/Helpers/Utilities.php",
    "chars": 1866,
    "preview": "<?php\n\nnamespace Pterodactyl\\Helpers;\n\nuse Carbon\\Carbon;\nuse Cron\\CronExpression;\nuse Illuminate\\Support\\Facades\\Log;\nu"
  },
  {
    "path": "app/Http/Controllers/Admin/ApiController.php",
    "chars": 2474,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Admin;\n\nuse Illuminate\\View\\View;\nuse Illuminate\\Http\\Request;\nuse Illumin"
  },
  {
    "path": "app/Http/Controllers/Admin/BaseController.php",
    "chars": 529,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Admin;\n\nuse Illuminate\\View\\View;\nuse Pterodactyl\\Http\\Controllers\\Control"
  },
  {
    "path": "app/Http/Controllers/Admin/DatabaseController.php",
    "chars": 4337,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Admin;\n\nuse Illuminate\\View\\View;\nuse Pterodactyl\\Models\\DatabaseHost;\nuse"
  },
  {
    "path": "app/Http/Controllers/Admin/LocationController.php",
    "chars": 3054,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Admin;\n\nuse Illuminate\\View\\View;\nuse Pterodactyl\\Models\\Location;\nuse Ill"
  },
  {
    "path": "app/Http/Controllers/Admin/MountController.php",
    "chars": 4469,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Admin;\n\nuse Ramsey\\Uuid\\Uuid;\nuse Illuminate\\View\\View;\nuse Illuminate\\Htt"
  },
  {
    "path": "app/Http/Controllers/Admin/Nests/EggController.php",
    "chars": 4381,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Admin\\Nests;\n\nuse Illuminate\\View\\View;\nuse Pterodactyl\\Models\\Egg;\nuse Il"
  },
  {
    "path": "app/Http/Controllers/Admin/Nests/EggScriptController.php",
    "chars": 2104,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Admin\\Nests;\n\nuse Illuminate\\View\\View;\nuse Pterodactyl\\Models\\Egg;\nuse Il"
  },
  {
    "path": "app/Http/Controllers/Admin/Nests/EggShareController.php",
    "chars": 2889,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Admin\\Nests;\n\nuse Pterodactyl\\Models\\Egg;\nuse Illuminate\\Http\\RedirectResp"
  },
  {
    "path": "app/Http/Controllers/Admin/Nests/EggVariableController.php",
    "chars": 3412,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Admin\\Nests;\n\nuse Illuminate\\View\\View;\nuse Pterodactyl\\Models\\Egg;\nuse Pt"
  },
  {
    "path": "app/Http/Controllers/Admin/Nests/NestController.php",
    "chars": 3151,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Admin\\Nests;\n\nuse Illuminate\\View\\View;\nuse Illuminate\\Http\\RedirectRespon"
  },
  {
    "path": "app/Http/Controllers/Admin/NodeAutoDeployController.php",
    "chars": 1690,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Admin;\n\nuse Illuminate\\Http\\Request;\nuse Pterodactyl\\Models\\Node;\nuse Pter"
  },
  {
    "path": "app/Http/Controllers/Admin/Nodes/NodeController.php",
    "chars": 685,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Admin\\Nodes;\n\nuse Illuminate\\View\\View;\nuse Illuminate\\Http\\Request;\nuse P"
  },
  {
    "path": "app/Http/Controllers/Admin/Nodes/NodeViewController.php",
    "chars": 3044,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Admin\\Nodes;\n\nuse Illuminate\\View\\View;\nuse Illuminate\\Http\\Request;\nuse P"
  },
  {
    "path": "app/Http/Controllers/Admin/Nodes/SystemInformationController.php",
    "chars": 1195,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Admin\\Nodes;\n\nuse Illuminate\\Support\\Str;\nuse Illuminate\\Http\\Request;\nuse"
  },
  {
    "path": "app/Http/Controllers/Admin/NodesController.php",
    "chars": 6854,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Admin;\n\nuse Illuminate\\View\\View;\nuse Illuminate\\Http\\Request;\nuse Pteroda"
  },
  {
    "path": "app/Http/Controllers/Admin/Servers/CreateServerController.php",
    "chars": 2700,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Admin\\Servers;\n\nuse Illuminate\\View\\View;\nuse Pterodactyl\\Models\\Nest;\nuse"
  },
  {
    "path": "app/Http/Controllers/Admin/Servers/ServerController.php",
    "chars": 1028,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Admin\\Servers;\n\nuse Illuminate\\View\\View;\nuse Illuminate\\Http\\Request;\nuse"
  },
  {
    "path": "app/Http/Controllers/Admin/Servers/ServerTransferController.php",
    "chars": 4616,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Admin\\Servers;\n\nuse Carbon\\CarbonImmutable;\nuse Illuminate\\Http\\Request;\nu"
  },
  {
    "path": "app/Http/Controllers/Admin/Servers/ServerViewController.php",
    "chars": 4708,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Admin\\Servers;\n\nuse Illuminate\\View\\View;\nuse Illuminate\\Http\\Request;\nuse"
  },
  {
    "path": "app/Http/Controllers/Admin/ServersController.php",
    "chars": 10089,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Admin;\n\nuse Illuminate\\Http\\Request;\nuse Pterodactyl\\Models\\User;\nuse Illu"
  },
  {
    "path": "app/Http/Controllers/Admin/Settings/AdvancedController.php",
    "chars": 1915,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Admin\\Settings;\n\nuse Illuminate\\View\\View;\nuse Illuminate\\Http\\RedirectRes"
  },
  {
    "path": "app/Http/Controllers/Admin/Settings/IndexController.php",
    "chars": 1725,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Admin\\Settings;\n\nuse Illuminate\\View\\View;\nuse Illuminate\\Http\\RedirectRes"
  },
  {
    "path": "app/Http/Controllers/Admin/Settings/MailController.php",
    "chars": 2753,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Admin\\Settings;\n\nuse Illuminate\\View\\View;\nuse Illuminate\\Http\\Request;\nus"
  },
  {
    "path": "app/Http/Controllers/Admin/UserController.php",
    "chars": 4818,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Admin;\n\nuse Illuminate\\View\\View;\nuse Illuminate\\Http\\Request;\nuse Pteroda"
  },
  {
    "path": "app/Http/Controllers/Api/Application/ApplicationApiController.php",
    "chars": 2151,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Api\\Application;\n\nuse Illuminate\\Http\\Request;\nuse Webmozart\\Assert\\Assert"
  },
  {
    "path": "app/Http/Controllers/Api/Application/Locations/LocationController.php",
    "chars": 3712,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Api\\Application\\Locations;\n\nuse Illuminate\\Http\\Response;\nuse Pterodactyl\\"
  },
  {
    "path": "app/Http/Controllers/Api/Application/Nests/EggController.php",
    "chars": 1080,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Api\\Application\\Nests;\n\nuse Pterodactyl\\Models\\Egg;\nuse Pterodactyl\\Models"
  },
  {
    "path": "app/Http/Controllers/Api/Application/Nests/NestController.php",
    "chars": 1262,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Api\\Application\\Nests;\n\nuse Pterodactyl\\Models\\Nest;\nuse Pterodactyl\\Contr"
  },
  {
    "path": "app/Http/Controllers/Api/Application/Nodes/AllocationController.php",
    "chars": 3197,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Api\\Application\\Nodes;\n\nuse Pterodactyl\\Models\\Node;\nuse Illuminate\\Http\\J"
  },
  {
    "path": "app/Http/Controllers/Api/Application/Nodes/NodeConfigurationController.php",
    "chars": 742,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Api\\Application\\Nodes;\n\nuse Pterodactyl\\Models\\Node;\nuse Illuminate\\Http\\J"
  },
  {
    "path": "app/Http/Controllers/Api/Application/Nodes/NodeController.php",
    "chars": 3571,
    "preview": "<?php\n\nnamespace Pterodactyl\\Http\\Controllers\\Api\\Application\\Nodes;\n\nuse Pterodactyl\\Models\\Node;\nuse Illuminate\\Http\\J"
  }
]

// ... and 1214 more files (download for full content)

About this extraction

This page contains the full source code of the pterodactyl-china/panel GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1414 files (5.4 MB), approximately 1.5M tokens, and a symbol index with 4743 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!