├── .github
└── workflows
│ └── deploy.yml
├── .gitignore
├── .version
├── Dockerfile
├── LICENSE
├── README.md
├── application.env
├── conf
└── dev
│ └── rocketmq
│ ├── .gitignore
│ ├── conf
│ ├── application-dashboard.yml
│ └── broker.conf
│ └── docker-compose.yml
├── docker-build.sh
├── docker-compose.yml
├── docs
└── doc
│ ├── .gitignore
│ ├── .vitepress
│ ├── cache
│ │ └── deps
│ │ │ ├── @theme_index.js
│ │ │ ├── @theme_index.js.map
│ │ │ ├── _metadata.json
│ │ │ ├── chunk-I27O6UFQ.js
│ │ │ ├── chunk-I27O6UFQ.js.map
│ │ │ ├── chunk-JCJFBXXH.js
│ │ │ ├── chunk-JCJFBXXH.js.map
│ │ │ ├── package.json
│ │ │ ├── vitepress___@vue_devtools-api.js
│ │ │ ├── vitepress___@vue_devtools-api.js.map
│ │ │ ├── vitepress___@vueuse_core.js
│ │ │ ├── vitepress___@vueuse_core.js.map
│ │ │ ├── vue.js
│ │ │ └── vue.js.map
│ ├── config.js
│ └── dist
│ │ ├── 404.html
│ │ ├── api-examples.html
│ │ ├── assets
│ │ ├── api-examples.md.w_VeVt33.js
│ │ ├── api-examples.md.w_VeVt33.lean.js
│ │ ├── app.pOfsbm1M.js
│ │ ├── chunks
│ │ │ ├── framework.jyLi0dul.js
│ │ │ └── theme.jtY-1euq.js
│ │ ├── index.md.3eaXJ-0s.js
│ │ ├── index.md.3eaXJ-0s.lean.js
│ │ ├── inter-italic-cyrillic-ext.OVycGSDq.woff2
│ │ ├── inter-italic-cyrillic.-nLMcIwj.woff2
│ │ ├── inter-italic-greek-ext.hznxWNZO.woff2
│ │ ├── inter-italic-greek.PSfer2Kc.woff2
│ │ ├── inter-italic-latin-ext.RnFly65-.woff2
│ │ ├── inter-italic-latin.27E69YJn.woff2
│ │ ├── inter-italic-vietnamese.xzQHe1q1.woff2
│ │ ├── inter-roman-cyrillic-ext.8T9wMG5w.woff2
│ │ ├── inter-roman-cyrillic.jIZ9REo5.woff2
│ │ ├── inter-roman-greek-ext.9JiNzaSO.woff2
│ │ ├── inter-roman-greek.Cb5wWeGA.woff2
│ │ ├── inter-roman-latin-ext.GZWE-KO4.woff2
│ │ ├── inter-roman-latin.bvIUbFQP.woff2
│ │ ├── inter-roman-vietnamese.paY3CzEB.woff2
│ │ ├── markdown-examples.md.Ve4083BC.js
│ │ ├── markdown-examples.md.Ve4083BC.lean.js
│ │ └── style.q3mQzx22.css
│ │ ├── hashmap.json
│ │ ├── index.html
│ │ └── markdown-examples.html
│ ├── feature.md
│ ├── images
│ ├── img.png
│ ├── img0.png
│ ├── img_1.png
│ ├── img_10.png
│ ├── img_11.png
│ ├── img_12.png
│ ├── img_13.png
│ ├── img_14.png
│ ├── img_15.png
│ ├── img_16.png
│ ├── img_17.png
│ ├── img_18.png
│ ├── img_19.png
│ ├── img_2.png
│ ├── img_20.png
│ ├── img_21.png
│ ├── img_22.png
│ ├── img_23.png
│ ├── img_24.png
│ ├── img_25.png
│ ├── img_26.png
│ ├── img_27.png
│ ├── img_28.png
│ ├── img_29.png
│ ├── img_3.png
│ ├── img_30.png
│ ├── img_31.png
│ ├── img_32.png
│ ├── img_4.png
│ ├── img_5.png
│ ├── img_6.png
│ ├── img_7.png
│ ├── img_8.png
│ ├── img_9.png
│ └── img_92.png
│ ├── index.md
│ ├── info.md
│ ├── package.json
│ ├── start.md
│ ├── termius-plus-doc.iml
│ └── yarn.lock
├── scripts
└── migration-maker.mjs
├── server
├── .env.dist
├── .gitignore
├── .mvn
│ └── wrapper
│ │ ├── maven-wrapper.jar
│ │ └── maven-wrapper.properties
├── README.md
├── docker
│ └── dockerfile
├── mvnw
├── mvnw.cmd
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── codeages
│ │ │ └── termiusplus
│ │ │ ├── TermiusPlusApplication.java
│ │ │ ├── api
│ │ │ ├── admin
│ │ │ │ ├── AIController.java
│ │ │ │ ├── AdminPublicController.java
│ │ │ │ ├── AdminSchedulerController.java
│ │ │ │ ├── AdminUserController.java
│ │ │ │ ├── ApplicationController.java
│ │ │ │ ├── ApplicationMonitorController.java
│ │ │ │ ├── ApplicationServerController.java
│ │ │ │ ├── BackUpController.java
│ │ │ │ ├── CommandController.java
│ │ │ │ ├── CommandLogController.java
│ │ │ │ ├── FileController.java
│ │ │ │ ├── PortForWardingController.java
│ │ │ │ ├── ProxyController.java
│ │ │ │ ├── QuartzController.java
│ │ │ │ ├── RoleController.java
│ │ │ │ ├── SFTPController.java
│ │ │ │ ├── ServerController.java
│ │ │ │ └── ServerServiceMonitorController.java
│ │ │ └── app
│ │ │ │ └── AppUserController.java
│ │ │ ├── biz
│ │ │ ├── ErrorCode.java
│ │ │ ├── ai
│ │ │ │ ├── AIService.java
│ │ │ │ └── dto
│ │ │ │ │ ├── Choice.java
│ │ │ │ │ ├── Ctool.java
│ │ │ │ │ └── Delta.java
│ │ │ ├── application
│ │ │ │ ├── config
│ │ │ │ │ └── ApplicationMonitorRequestConfig.java
│ │ │ │ ├── dto
│ │ │ │ │ ├── ApplicationCreateParams.java
│ │ │ │ │ ├── ApplicationDto.java
│ │ │ │ │ ├── ApplicationMonitorCreateParams.java
│ │ │ │ │ ├── ApplicationMonitorDto.java
│ │ │ │ │ ├── ApplicationMonitorExecDto.java
│ │ │ │ │ ├── ApplicationMonitorLogCountDto.java
│ │ │ │ │ ├── ApplicationMonitorLogCreateParams.java
│ │ │ │ │ ├── ApplicationMonitorLogDto.java
│ │ │ │ │ ├── ApplicationMonitorLogSearchParams.java
│ │ │ │ │ ├── ApplicationMonitorLogUpdateParams.java
│ │ │ │ │ ├── ApplicationMonitorSearchParams.java
│ │ │ │ │ ├── ApplicationMonitorUpdateParams.java
│ │ │ │ │ ├── ApplicationSearchParams.java
│ │ │ │ │ ├── ApplicationServerCreateParams.java
│ │ │ │ │ ├── ApplicationServerDto.java
│ │ │ │ │ ├── ApplicationServerSearchParams.java
│ │ │ │ │ ├── ApplicationServerUpdateParams.java
│ │ │ │ │ └── ApplicationUpdateParams.java
│ │ │ │ ├── entity
│ │ │ │ │ ├── Application.java
│ │ │ │ │ ├── ApplicationMonitor.java
│ │ │ │ │ ├── ApplicationMonitorLog.java
│ │ │ │ │ └── ApplicationServer.java
│ │ │ │ ├── enums
│ │ │ │ │ ├── ApplicationMonitorCheckTypeEnum.java
│ │ │ │ │ └── ApplicationMonitorTypeEnum.java
│ │ │ │ ├── job
│ │ │ │ │ └── MonitorJob.java
│ │ │ │ ├── listener
│ │ │ │ │ └── DeleteProxyEventApplicationListener.java
│ │ │ │ ├── mapper
│ │ │ │ │ ├── ApplicationMapper.java
│ │ │ │ │ ├── ApplicationMonitorLogMapper.java
│ │ │ │ │ ├── ApplicationMonitorMapper.java
│ │ │ │ │ └── ApplicationServerMapper.java
│ │ │ │ ├── repository
│ │ │ │ │ ├── ApplicationMonitorLogRepository.java
│ │ │ │ │ ├── ApplicationMonitorRepository.java
│ │ │ │ │ ├── ApplicationRepository.java
│ │ │ │ │ └── ApplicationServerRepository.java
│ │ │ │ ├── service
│ │ │ │ │ ├── ApplicationMonitorService.java
│ │ │ │ │ ├── ApplicationServerService.java
│ │ │ │ │ ├── ApplicationService.java
│ │ │ │ │ └── impl
│ │ │ │ │ │ ├── ApplicationMonitorServiceImpl.java
│ │ │ │ │ │ ├── ApplicationServerServiceImpl.java
│ │ │ │ │ │ └── ApplicationServiceImpl.java
│ │ │ │ └── utils
│ │ │ │ │ └── IpAddressUtil.java
│ │ │ ├── job
│ │ │ │ ├── RunMvelJob.java
│ │ │ │ ├── dto
│ │ │ │ │ └── MvelCronCreateDto.java
│ │ │ │ └── service
│ │ │ │ │ ├── QuartzService.java
│ │ │ │ │ └── impl
│ │ │ │ │ └── QuartzServiceImpl.java
│ │ │ ├── log
│ │ │ │ ├── dto
│ │ │ │ │ ├── CommandLogCreateParams.java
│ │ │ │ │ ├── CommandLogDto.java
│ │ │ │ │ ├── CommandLogSearchParams.java
│ │ │ │ │ ├── CommandLogSimpleDto.java
│ │ │ │ │ └── CommandLogUpdateParams.java
│ │ │ │ ├── entity
│ │ │ │ │ └── CommandLog.java
│ │ │ │ ├── mapper
│ │ │ │ │ └── CommandLogMapper.java
│ │ │ │ ├── repository
│ │ │ │ │ └── CommandLogRepository.java
│ │ │ │ └── service
│ │ │ │ │ ├── CommandLogService.java
│ │ │ │ │ └── impl
│ │ │ │ │ └── CommandLogServiceImpl.java
│ │ │ ├── message
│ │ │ │ ├── MessageService.java
│ │ │ │ └── impl
│ │ │ │ │ └── MessageServiceDingerImpl.java
│ │ │ ├── objectlog
│ │ │ │ ├── entity
│ │ │ │ │ └── ObjectLog.java
│ │ │ │ ├── repository
│ │ │ │ │ └── ObjectLogRepository.java
│ │ │ │ └── service
│ │ │ │ │ ├── ObjectLogService.java
│ │ │ │ │ └── impl
│ │ │ │ │ └── ObjectLogServiceImpl.java
│ │ │ ├── scheduler
│ │ │ │ ├── config
│ │ │ │ │ └── SystemSchedulerConfig.java
│ │ │ │ ├── dto
│ │ │ │ │ ├── CronJobDeclare.java
│ │ │ │ │ └── IntervalJobDeclare.java
│ │ │ │ └── service
│ │ │ │ │ ├── SchedulerService.java
│ │ │ │ │ └── impl
│ │ │ │ │ └── SchedulerServiceImpl.java
│ │ │ ├── server
│ │ │ │ ├── annotation
│ │ │ │ │ └── SftpActive.java
│ │ │ │ ├── aspect
│ │ │ │ │ └── ServerActiveAspect.java
│ │ │ │ ├── context
│ │ │ │ │ └── ServerContext.java
│ │ │ │ ├── dto
│ │ │ │ │ ├── AIChatParams.java
│ │ │ │ │ ├── AiCompletionMetadata.java
│ │ │ │ │ ├── ClashProxyDTO.java
│ │ │ │ │ ├── CompletionMetadata.java
│ │ │ │ │ ├── LsFileDto.java
│ │ │ │ │ ├── PortForwarderDto.java
│ │ │ │ │ ├── ProxyBrowserParams.java
│ │ │ │ │ ├── ProxyCreateParams.java
│ │ │ │ │ ├── ProxyDto.java
│ │ │ │ │ ├── ProxySearchParams.java
│ │ │ │ │ ├── ProxyUpdateParams.java
│ │ │ │ │ ├── SFTPBean.java
│ │ │ │ │ ├── SFTPInitParams.java
│ │ │ │ │ ├── SFTPParams.java
│ │ │ │ │ ├── SFTPServerUploadServerParams.java
│ │ │ │ │ ├── ServerCreateParams.java
│ │ │ │ │ ├── ServerDto.java
│ │ │ │ │ ├── ServerRunInfoDTO.java
│ │ │ │ │ ├── ServerRunLogCreateParams.java
│ │ │ │ │ ├── ServerRunLogDTO.java
│ │ │ │ │ ├── ServerRunLogSearchParams.java
│ │ │ │ │ ├── ServerRunLogUpdateParams.java
│ │ │ │ │ ├── ServerSearchParams.java
│ │ │ │ │ ├── ServerServiceMonitorCreateParams.java
│ │ │ │ │ ├── ServerServiceMonitorDto.java
│ │ │ │ │ ├── ServerServiceMonitorSearchParams.java
│ │ │ │ │ ├── ServerServiceMonitorUpdateParams.java
│ │ │ │ │ ├── ServerUpdateParams.java
│ │ │ │ │ └── TreeSortParams.java
│ │ │ │ ├── entity
│ │ │ │ │ ├── PortForwarding.java
│ │ │ │ │ ├── Proxy.java
│ │ │ │ │ ├── Server.java
│ │ │ │ │ ├── ServerRunLog.java
│ │ │ │ │ └── ServerServiceMonitor.java
│ │ │ │ ├── enums
│ │ │ │ │ ├── LsFileTypeEnum.java
│ │ │ │ │ ├── OSEnum.java
│ │ │ │ │ ├── PortForWardingStatusEnum.java
│ │ │ │ │ └── ProxyTypeEnum.java
│ │ │ │ ├── event
│ │ │ │ │ └── DeleteProxyEvent.java
│ │ │ │ ├── job
│ │ │ │ │ ├── ConnectTimeoutJob.java
│ │ │ │ │ ├── ProxySyncJob.java
│ │ │ │ │ └── ServerRunInfoJob.java
│ │ │ │ ├── listener
│ │ │ │ │ └── DeleteProxyEventServerListener.java
│ │ │ │ ├── mapper
│ │ │ │ │ ├── PortForwardingMapper.java
│ │ │ │ │ ├── ProxyMapper.java
│ │ │ │ │ ├── ServerMapper.java
│ │ │ │ │ ├── ServerRunLogMapper.java
│ │ │ │ │ └── ServerServiceMonitorMapper.java
│ │ │ │ ├── repository
│ │ │ │ │ ├── PortForWardingRepository.java
│ │ │ │ │ ├── ProxyRepository.java
│ │ │ │ │ ├── ServerRepository.java
│ │ │ │ │ ├── ServerRunLogRepository.java
│ │ │ │ │ └── ServerServiceMonitorRepository.java
│ │ │ │ ├── service
│ │ │ │ │ ├── PortForWardingService.java
│ │ │ │ │ ├── ProxyService.java
│ │ │ │ │ ├── SFTPService.java
│ │ │ │ │ ├── ServerService.java
│ │ │ │ │ ├── ServerServiceMonitorService.java
│ │ │ │ │ └── impl
│ │ │ │ │ │ ├── CurrentAuthKeyboardInteractive.java
│ │ │ │ │ │ ├── PortForWardingServiceImpl.java
│ │ │ │ │ │ ├── ProxyServiceImpl.java
│ │ │ │ │ │ ├── SFTPServiceImpl.java
│ │ │ │ │ │ ├── ServerServiceImpl.java
│ │ │ │ │ │ └── ServerServiceMonitorServiceImpl.java
│ │ │ │ └── sshj
│ │ │ │ │ └── TermiusPlusSSHClient.java
│ │ │ ├── snippet
│ │ │ │ ├── dto
│ │ │ │ │ ├── CommandCreateParams.java
│ │ │ │ │ ├── CommandDto.java
│ │ │ │ │ ├── CommandSearchParams.java
│ │ │ │ │ └── CommandUpdateParams.java
│ │ │ │ ├── entity
│ │ │ │ │ └── Command.java
│ │ │ │ ├── mapper
│ │ │ │ │ └── CommandMapper.java
│ │ │ │ ├── repository
│ │ │ │ │ └── CommandRepository.java
│ │ │ │ └── service
│ │ │ │ │ ├── CommandService.java
│ │ │ │ │ └── impl
│ │ │ │ │ └── CommandServiceImpl.java
│ │ │ ├── storage
│ │ │ │ ├── StorageErrorCode.java
│ │ │ │ ├── dto
│ │ │ │ │ ├── FileCreationDTO.java
│ │ │ │ │ └── FileFindInfoParams.java
│ │ │ │ ├── entity
│ │ │ │ │ └── File.java
│ │ │ │ ├── enums
│ │ │ │ │ └── FileTargetTypeEnum.java
│ │ │ │ ├── mapper
│ │ │ │ │ └── FileMapper.java
│ │ │ │ ├── repository
│ │ │ │ │ └── FileRepository.java
│ │ │ │ ├── service
│ │ │ │ │ ├── StorageService.java
│ │ │ │ │ └── impl
│ │ │ │ │ │ └── StorageServiceImpl.java
│ │ │ │ ├── utils
│ │ │ │ │ └── FileUtil.java
│ │ │ │ └── vo
│ │ │ │ │ ├── FileDto.java
│ │ │ │ │ └── FileVo.java
│ │ │ ├── user
│ │ │ │ ├── dto
│ │ │ │ │ ├── ChangePasswordParams.java
│ │ │ │ │ ├── LoginParams.java
│ │ │ │ │ ├── RoleCreateParams.java
│ │ │ │ │ ├── RoleDto.java
│ │ │ │ │ ├── RoleSearchParams.java
│ │ │ │ │ ├── RoleUpdateParams.java
│ │ │ │ │ ├── UserAuthedDto.java
│ │ │ │ │ ├── UserCreateParams.java
│ │ │ │ │ ├── UserDto.java
│ │ │ │ │ ├── UserSearchParams.java
│ │ │ │ │ ├── UserSimpleDto.java
│ │ │ │ │ ├── UserUpdateParams.java
│ │ │ │ │ └── UserWithRolesDto.java
│ │ │ │ ├── entity
│ │ │ │ │ ├── Role.java
│ │ │ │ │ ├── User.java
│ │ │ │ │ └── UserRole.java
│ │ │ │ ├── manager
│ │ │ │ │ └── UserCacheManager.java
│ │ │ │ ├── mapper
│ │ │ │ │ ├── RoleMapper.java
│ │ │ │ │ └── UserMapper.java
│ │ │ │ ├── repository
│ │ │ │ │ ├── RoleRepository.java
│ │ │ │ │ ├── UserRepository.java
│ │ │ │ │ └── UserRoleRepository.java
│ │ │ │ ├── schdule
│ │ │ │ │ ├── UserDailyReportJob.java
│ │ │ │ │ ├── UserMetricsStatsJob.java
│ │ │ │ │ └── UserSchedulerConfig.java
│ │ │ │ └── service
│ │ │ │ │ ├── RoleService.java
│ │ │ │ │ ├── UserAuthService.java
│ │ │ │ │ ├── UserService.java
│ │ │ │ │ └── impl
│ │ │ │ │ ├── RoleServiceImpl.java
│ │ │ │ │ ├── UserAuthServiceImpl.java
│ │ │ │ │ └── UserServiceImpl.java
│ │ │ └── util
│ │ │ │ ├── ExecuteCommandSSHClient.java
│ │ │ │ ├── FileSizeFormatter.java
│ │ │ │ ├── QueryUtils.java
│ │ │ │ ├── TreeUtils.java
│ │ │ │ └── command
│ │ │ │ ├── CpuUsage.java
│ │ │ │ ├── DiskUsage.java
│ │ │ │ └── NetworkUsage.java
│ │ │ ├── common
│ │ │ ├── ErrorCodeInterface.java
│ │ │ ├── IdPayload.java
│ │ │ ├── OkResponse.java
│ │ │ ├── PagerRequest.java
│ │ │ ├── PagerResponse.java
│ │ │ └── cache
│ │ │ │ ├── CacheGetCallable.java
│ │ │ │ ├── IdObject.java
│ │ │ │ └── RedisCacheManager.java
│ │ │ ├── config
│ │ │ ├── AppConfig.java
│ │ │ ├── DingerConfigSender.java
│ │ │ ├── PermissionsInitApplicationListener.java
│ │ │ ├── PortForwarderThreadPoolConfig.java
│ │ │ ├── QuartzConfig.java
│ │ │ ├── RedisConfig.java
│ │ │ ├── SchedulerConfiguration.java
│ │ │ ├── ServerSocketFactory.java
│ │ │ └── WebSocketConfig.java
│ │ │ ├── encryption
│ │ │ ├── ApiEncryptFilterConfig.java
│ │ │ ├── EncryptionFilter.java
│ │ │ ├── EncryptionReqestWrapper.java
│ │ │ ├── EncryptionResponseWrapper.java
│ │ │ └── RsaEncryptAlgorithm.java
│ │ │ ├── exception
│ │ │ ├── AppError.java
│ │ │ ├── AppErrorAttributes.java
│ │ │ ├── AppErrorConfig.java
│ │ │ ├── AppException.java
│ │ │ ├── GlobalErrorController.java
│ │ │ └── GlobalExceptionHandler.java
│ │ │ ├── security
│ │ │ ├── AuthAccessDeniedHandler.java
│ │ │ ├── AuthEntryPoint.java
│ │ │ ├── AuthTokenFilter.java
│ │ │ ├── AuthUser.java
│ │ │ ├── AuthUserLoader.java
│ │ │ ├── DefaultSecurityConfig.java
│ │ │ ├── PasswordEncoderConfig.java
│ │ │ ├── SecurityContext.java
│ │ │ └── UriConfig.java
│ │ │ └── ws
│ │ │ ├── rdp
│ │ │ ├── GuacamoleWebSocketTunnelEndpoint.java
│ │ │ └── WebSocketTunnel.java
│ │ │ └── ssh
│ │ │ ├── AuthEditSessionDto.java
│ │ │ ├── AuthKeyBoardDto.java
│ │ │ ├── AuthKeyBoardHandler.java
│ │ │ ├── EventType.java
│ │ │ ├── MessageDto.java
│ │ │ ├── RequestAuthEditSessionDto.java
│ │ │ ├── ResizeDto.java
│ │ │ ├── RollingString.java
│ │ │ ├── SftpServerUploadServerProgressDto.java
│ │ │ └── SshHandler.java
│ └── resources
│ │ ├── application.yml
│ │ └── db
│ │ └── migration
│ │ ├── V2022.0318.000000__quartz.sql
│ │ ├── V2022.0318.162736__init.sql
│ │ ├── V2022.0325.000139__ObjectLog.sql
│ │ ├── V2022.1017.162009__initEsee.sql
│ │ ├── V2023.0927.132348__init.sql
│ │ ├── V2023.1001.201443__feature.sql
│ │ ├── V2023.1001.201812__feature.sql
│ │ ├── V2023.1002.000153__feature.sql
│ │ ├── V2023.1002.002948__feature.sql
│ │ ├── V2023.1002.011801__feature.sql
│ │ ├── V2023.1003.001706__feature.sql
│ │ ├── V2023.1003.212412__feature.sql
│ │ ├── V2023.1007.142633__init.sql
│ │ ├── V2023.1201.103917__addServerRremark.sql
│ │ ├── V2023.1201.134453__addServerRremark.sql
│ │ ├── V2023.1204.110239__featureCommand.sql
│ │ ├── V2023.1205.172730__featureWindows.sql
│ │ ├── V2023.1220.110630__featureServerCommandLog.sql
│ │ ├── V2023.1227.135259__featureDBConn.sql
│ │ ├── V2023.1227.174057__featureDBConn.sql
│ │ ├── V2023.1227.174143__featureDBConn.sql
│ │ ├── V2024.0104.110016__featureRoleServer.sql
│ │ ├── V2024.0204.165101__featureLogUserId.sql
│ │ ├── V2024.0204.165530__featureLogUserId.sql
│ │ ├── V2024.0306.103404__addServerKeepAlive.sql
│ │ ├── V2024.0326.150937__commandServerIds.sql
│ │ ├── V2024.0426.210353__featureApplication.sql
│ │ ├── V2024.0427.160943__featureMonitor.sql
│ │ ├── V2024.0427.162407__featureApplication.sql
│ │ ├── V2024.0427.172905__featureApplication.sql
│ │ ├── V2024.0528.171042__feature.sql
│ │ ├── V2024.0813.132152__feature.sql
│ │ ├── V2024.0912.210353__featureApplication.sql
│ │ ├── V2024.0920.210353__featureServerRunLog.sql
│ │ ├── V2024.0923.210353__featureServerInfoTest.sql
│ │ ├── V2024.1014.114050__featureProxyOpen.sql
│ │ ├── V2024.1014.165918__featureHistoryGet.sql
│ │ ├── V2024.1020.225918__featureNginxLogPath.sql
│ │ ├── V2024.1028.225918__featureRequestMap.sql
│ │ ├── V2024.1028.225919__featureServerProxyServer.sql
│ │ ├── V2025.0302.232013__featurePortForWarding.sql
│ │ ├── V2025.0305.102003__feature.sql
│ │ ├── V2025.0331.101825__featureServerRunInfoAddDate.sql
│ │ └── V2025.0331.111434__featureServerRunInfoAddDate.sql
│ └── test
│ ├── admin-user-api-test.http
│ └── java
│ └── com
│ └── codeages
│ └── termiusplus
│ └── UnitTestConfig.java
├── settings.xml
└── web
├── admin
├── .babelrc
├── .browserslistrc
├── .env
├── .eslintrc.js
├── .gitignore
├── Dockerfile
├── README.md
├── babel.config.js
├── build-docker.sh
├── bun.lockb
├── docker
│ ├── .env.placeholder
│ ├── 99-replace-vue-env-var-placeholders.sh
│ └── nginx.conf
├── jsconfig.json
├── package.json
├── public
│ ├── favicon.ico
│ ├── index.html
│ └── static
│ │ ├── guacamole-common-js
│ │ ├── all.js
│ │ ├── all.min.js
│ │ └── modules
│ │ │ ├── ArrayBufferReader.js
│ │ │ ├── ArrayBufferWriter.js
│ │ │ ├── AudioContextFactory.js
│ │ │ ├── AudioPlayer.js
│ │ │ ├── AudioRecorder.js
│ │ │ ├── BlobReader.js
│ │ │ ├── BlobWriter.js
│ │ │ ├── Client.js
│ │ │ ├── DataURIReader.js
│ │ │ ├── Display.js
│ │ │ ├── Event.js
│ │ │ ├── InputSink.js
│ │ │ ├── InputStream.js
│ │ │ ├── IntegerPool.js
│ │ │ ├── JSONReader.js
│ │ │ ├── Keyboard.js
│ │ │ ├── Layer.js
│ │ │ ├── Mouse.js
│ │ │ ├── Namespace.js
│ │ │ ├── Object.js
│ │ │ ├── OnScreenKeyboard.js
│ │ │ ├── OutputStream.js
│ │ │ ├── Parser.js
│ │ │ ├── Position.js
│ │ │ ├── RawAudioFormat.js
│ │ │ ├── SessionRecording.js
│ │ │ ├── Status.js
│ │ │ ├── StringReader.js
│ │ │ ├── StringWriter.js
│ │ │ ├── Touch.js
│ │ │ ├── Tunnel.js
│ │ │ ├── UTF8Parser.js
│ │ │ ├── Version.js
│ │ │ └── VideoPlayer.js
│ │ └── linux-doc.json
├── src
│ ├── App.vue
│ ├── api
│ │ ├── application.js
│ │ ├── auth.js
│ │ ├── command.js
│ │ ├── db.js
│ │ ├── file.js
│ │ ├── log.js
│ │ ├── port-forwarding.js
│ │ ├── proxy.js
│ │ ├── quartz.js
│ │ ├── role.js
│ │ ├── server.js
│ │ ├── sftp.js
│ │ └── user.js
│ ├── assets
│ │ ├── file-icon
│ │ │ ├── dir.png
│ │ │ └── file.png
│ │ ├── file-type-icon
│ │ │ ├── 1.svg
│ │ │ ├── AAC.svg
│ │ │ ├── APK.svg
│ │ │ ├── ASP.svg
│ │ │ ├── ASPX.svg
│ │ │ ├── AVI.svg
│ │ │ ├── BAT.svg
│ │ │ ├── BMP.svg
│ │ │ ├── CDR.svg
│ │ │ ├── CEB.svg
│ │ │ ├── CEBX.svg
│ │ │ ├── CSV.svg
│ │ │ ├── DOC.svg
│ │ │ ├── DOCX.svg
│ │ │ ├── DOT.svg
│ │ │ ├── DPS.svg
│ │ │ ├── DPT.svg
│ │ │ ├── DWG.svg
│ │ │ ├── EPS.svg
│ │ │ ├── ET.svg
│ │ │ ├── ETT.svg
│ │ │ ├── FLV.svg
│ │ │ ├── File.svg
│ │ │ ├── GD.svg
│ │ │ ├── GIF.svg
│ │ │ ├── GIFF.svg
│ │ │ ├── ISO.svg
│ │ │ ├── JAR.svg
│ │ │ ├── JASPER.svg
│ │ │ ├── JPEG.svg
│ │ │ ├── JPG.svg
│ │ │ ├── JS.svg
│ │ │ ├── JSON.svg
│ │ │ ├── JSP.svg
│ │ │ ├── MOV.svg
│ │ │ ├── MP3.svg
│ │ │ ├── MP4.svg
│ │ │ ├── OFD.svg
│ │ │ ├── OTHER.svg
│ │ │ ├── PHP.svg
│ │ │ ├── PNG.svg
│ │ │ ├── PPT.svg
│ │ │ ├── PPTX.svg
│ │ │ ├── PS.svg
│ │ │ ├── PSD.svg
│ │ │ ├── PY.svg
│ │ │ ├── RAR.svg
│ │ │ ├── RTF.svg
│ │ │ ├── SEP.svg
│ │ │ ├── SH.svg
│ │ │ ├── TIF.svg
│ │ │ ├── TIFF.svg
│ │ │ ├── TTF.svg
│ │ │ ├── TXT.svg
│ │ │ ├── WAV.svg
│ │ │ ├── WPS.svg
│ │ │ ├── WPT.svg
│ │ │ ├── WT.svg
│ │ │ ├── XLS.svg
│ │ │ ├── XLSX.svg
│ │ │ ├── XSD.svg
│ │ │ ├── ZIP.svg
│ │ │ ├── audio.svg
│ │ │ ├── conf.svg
│ │ │ ├── config.svg
│ │ │ ├── css.svg
│ │ │ ├── dist.svg
│ │ │ ├── env.svg
│ │ │ ├── excel.svg
│ │ │ ├── exe.svg
│ │ │ ├── htm.svg
│ │ │ ├── html.svg
│ │ │ ├── image.svg
│ │ │ ├── java.svg
│ │ │ ├── lock.svg
│ │ │ ├── log.svg
│ │ │ ├── md.svg
│ │ │ ├── pdf.svg
│ │ │ ├── pem.svg
│ │ │ ├── sql.svg
│ │ │ ├── svg.svg
│ │ │ ├── twig.svg
│ │ │ ├── video.svg
│ │ │ ├── vue.svg
│ │ │ ├── word.svg
│ │ │ ├── xml.svg
│ │ │ └── yml.svg
│ │ ├── logo.png
│ │ ├── view.json
│ │ └── webfonts
│ │ │ ├── AgaveNerdFont-Bold.ttf
│ │ │ ├── AgaveNerdFont-Regular.ttf
│ │ │ ├── AgaveNerdFontMono-Bold.ttf
│ │ │ ├── AgaveNerdFontMono-Regular.ttf
│ │ │ ├── AgaveNerdFontPropo-Bold.ttf
│ │ │ ├── AgaveNerdFontPropo-Regular.ttf
│ │ │ ├── CascadiaCode.woff2
│ │ │ ├── CascadiaCodeItalic.woff2
│ │ │ ├── CascadiaCodeNF.woff2
│ │ │ ├── CascadiaCodeNFItalic.woff2
│ │ │ ├── CascadiaCodePL.woff2
│ │ │ ├── CascadiaCodePLItalic.woff2
│ │ │ ├── CascadiaMono.woff2
│ │ │ ├── CascadiaMonoItalic.woff2
│ │ │ ├── CascadiaMonoNF.woff2
│ │ │ ├── CascadiaMonoNFItalic.woff2
│ │ │ ├── CascadiaMonoPL.woff2
│ │ │ ├── CascadiaMonoPLItalic.woff2
│ │ │ ├── CommitMono-400-Italic.otf
│ │ │ ├── CommitMono-400-Regular.otf
│ │ │ ├── CommitMono-700-Italic.otf
│ │ │ ├── CommitMono-700-Regular.otf
│ │ │ ├── FiraCode-Bold.woff2
│ │ │ ├── FiraCode-Light.woff2
│ │ │ ├── FiraCode-Medium.woff2
│ │ │ ├── FiraCode-Regular.woff2
│ │ │ ├── FiraCode-SemiBold.woff2
│ │ │ ├── FiraCode-VF.woff2
│ │ │ ├── JetBrainsMono-Bold.woff2
│ │ │ ├── JetBrainsMono-BoldItalic.woff2
│ │ │ ├── JetBrainsMono-ExtraBold.woff2
│ │ │ ├── JetBrainsMono-ExtraBoldItalic.woff2
│ │ │ ├── JetBrainsMono-ExtraLight.woff2
│ │ │ ├── JetBrainsMono-ExtraLightItalic.woff2
│ │ │ ├── JetBrainsMono-Italic.woff2
│ │ │ ├── JetBrainsMono-Light.woff2
│ │ │ ├── JetBrainsMono-LightItalic.woff2
│ │ │ ├── JetBrainsMono-Medium.woff2
│ │ │ ├── JetBrainsMono-MediumItalic.woff2
│ │ │ ├── JetBrainsMono-Regular.woff2
│ │ │ ├── JetBrainsMono-SemiBold.woff2
│ │ │ ├── JetBrainsMono-SemiBoldItalic.woff2
│ │ │ ├── JetBrainsMono-Thin.woff2
│ │ │ ├── JetBrainsMono-ThinItalic.woff2
│ │ │ ├── MesloLGLDZ-Bold.ttf
│ │ │ ├── MesloLGLDZ-BoldItalic.ttf
│ │ │ ├── MesloLGLDZ-Italic.ttf
│ │ │ ├── MesloLGLDZ-Regular.ttf
│ │ │ ├── MesloLGMDZ-Bold.ttf
│ │ │ ├── MesloLGMDZ-BoldItalic.ttf
│ │ │ ├── MesloLGMDZ-Italic.ttf
│ │ │ ├── MesloLGMDZ-Regular.ttf
│ │ │ ├── MesloLGSDZ-Bold.ttf
│ │ │ ├── MesloLGSDZ-BoldItalic.ttf
│ │ │ ├── MesloLGSDZ-Italic.ttf
│ │ │ ├── MesloLGSDZ-Regular.ttf
│ │ │ ├── SourceCodePro-Black.otf
│ │ │ ├── SourceCodePro-BlackIt.otf
│ │ │ ├── SourceCodePro-Bold.otf
│ │ │ ├── SourceCodePro-BoldIt.otf
│ │ │ ├── SourceCodePro-ExtraLight.otf
│ │ │ ├── SourceCodePro-ExtraLightIt.otf
│ │ │ ├── SourceCodePro-It.otf
│ │ │ ├── SourceCodePro-Light.otf
│ │ │ ├── SourceCodePro-LightIt.otf
│ │ │ ├── SourceCodePro-Medium.otf
│ │ │ ├── SourceCodePro-MediumIt.otf
│ │ │ ├── SourceCodePro-Regular.otf
│ │ │ ├── SourceCodePro-Semibold.otf
│ │ │ └── SourceCodePro-SemiboldIt.otf
│ ├── boot
│ │ ├── bootAntDesignVue.js
│ │ ├── bootAxios.js
│ │ ├── bootEcharts.js
│ │ ├── bootFilters.js
│ │ ├── bootPinia.js
│ │ └── bootStore.js
│ ├── components
│ │ ├── MonacoEditor.vue
│ │ ├── SplitRoot.vue
│ │ ├── group-cascader.vue
│ │ ├── p-blank.vue
│ │ ├── p-cascader.vue
│ │ ├── p-code-edit.vue
│ │ ├── p-enum-select.vue
│ │ ├── p-file-tree.vue
│ │ ├── p-flip.vue
│ │ ├── p-rdp.vue
│ │ ├── p-select.vue
│ │ ├── p-sftp.vue
│ │ ├── p-split-box-tree.vue
│ │ ├── p-term-log.vue
│ │ ├── p-term.vue
│ │ ├── process.jsx
│ │ └── tinymce
│ │ │ ├── File.js
│ │ │ └── p-editor.vue
│ ├── config.js
│ ├── enums
│ │ ├── ApplicationMonitorCheckTypeEnum.js
│ │ ├── ApplicationMonitorTypeEnum.js
│ │ ├── Enum.js
│ │ ├── MethodEnum.js
│ │ ├── OsEnum.js
│ │ ├── PortForWardingStatusEnum.js
│ │ └── ProxyTypeEnum.js
│ ├── icons.js
│ ├── layouts
│ │ ├── BasicLayout.vue
│ │ ├── BlankLayout.vue
│ │ └── main.less
│ ├── main.js
│ ├── router
│ │ └── index.js
│ ├── utils
│ │ ├── File.js
│ │ ├── codeUtil.js
│ │ ├── copyUtil.js
│ │ ├── nameUtil.js
│ │ ├── treeUtil.js
│ │ └── zmodem.js
│ └── views
│ │ ├── RolePage.vue
│ │ ├── SystemLogPage.vue
│ │ ├── UserPage.vue
│ │ ├── WelcomePage.vue
│ │ ├── css
│ │ ├── dockview.css
│ │ └── termius.less
│ │ ├── editor
│ │ ├── EditorContentPage.vue
│ │ └── components
│ │ │ ├── split.vue
│ │ │ ├── trigger.vue
│ │ │ └── utils.js
│ │ ├── log
│ │ └── CommandLogPage.vue
│ │ ├── public
│ │ └── LoginPage.vue
│ │ └── server
│ │ ├── ApplicationListPage.vue
│ │ ├── CronJobPage.vue
│ │ ├── DashboardPage.vue
│ │ ├── DockviewPanel.vue
│ │ ├── Panel.js
│ │ ├── PortForwarderPage.vue
│ │ ├── ProxyListPage.vue
│ │ ├── ServerContent.vue
│ │ ├── ServerListPage.vue
│ │ ├── ServerPage.vue
│ │ ├── SettingPage.vue
│ │ └── SnippetListPage.vue
├── vue.config.js
└── yarn.lock
└── shared
├── api-client.js
├── encoded.js
├── encodedKey.js
├── filters.js
├── store
└── useAuthStore.js
└── usePaginationQuery.js
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | #忽略以下所有目录中的.idea
3 | .idea
4 | *.log
5 |
6 |
7 |
--------------------------------------------------------------------------------
/.version:
--------------------------------------------------------------------------------
1 | v2.1.5
2 |
--------------------------------------------------------------------------------
/conf/dev/rocketmq/.gitignore:
--------------------------------------------------------------------------------
1 | data/
--------------------------------------------------------------------------------
/conf/dev/rocketmq/conf/broker.conf:
--------------------------------------------------------------------------------
1 | brokerClusterName = JavaSkeletonBrokerCluster
2 | brokerName = java-skelton-broker-1
3 | brokerId = 0
4 | deleteWhen = 04
5 | fileReservedTime = 48
6 | brokerRole = ASYNC_MASTER
7 | flushDiskType = ASYNC_FLUSH
8 | brokerIP1=rmqbroker
9 | #使用可重入锁
10 | useReentrantLockWhenPutMessage=true
11 | # 发送消息线程等待时间,默认200ms
12 | # broker 每隔10ms检查send请求队列头部请求的等待时间,如果超过waitTimeMillsInSendQueue,默认200ms,拒绝当前send请求,返回流控
13 | # https://github.com/apache/rocketmq/blob/master/docs/cn/features.md#11-%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6
14 | waitTimeMillsInSendQueue=400
15 | #发送消息的最大线程数,默认1
16 | sendMessageThreadPoolNums=32
--------------------------------------------------------------------------------
/docker-build.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | # $version是版本号
4 | version=$(cat .version)
5 | if [ -z "$version" ]; then
6 | echo "请指定版本号,在文件.version中"
7 | exit 1
8 | fi
9 |
10 | echo 开始编译,版本号:$version
11 |
12 | docker buildx build --push -t registry.cn-hangzhou.aliyuncs.com/kuozhi/termius-plus:$version --platform linux/amd64,linux/arm64 .
13 |
14 |
--------------------------------------------------------------------------------
/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: "3"
2 |
3 | services:
4 | server:
5 | image: registry.cn-hangzhou.aliyuncs.com/kuozhi/termius-plus:v2.0.8
6 | restart: unless-stopped
7 | environment:
8 | - TZ=Asia/Shanghai
9 | env_file:
10 | - application.env
11 | ports:
12 | - "8989:80"
13 | volumes:
14 | - ./data:/var/www/data
15 | redis:
16 | image: registry.cn-hangzhou.aliyuncs.com/education-portal/termius-plus:redis5.0
17 | restart: always
18 | command: redis-server --appendonly yes
19 | mysql:
20 | image: registry.cn-hangzhou.aliyuncs.com/education-portal/termius-plus:mysql8
21 | command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
22 | restart: always
23 | environment:
24 | MYSQL_ALLOW_EMPTY_ROOT_PASSWORD: "yes"
25 | MYSQL_ROOT_PASSWORD: mysql.test123!@#
26 | MYSQL_DATABASE: termius_plus
27 | volumes:
28 | - ./mysql8/data:/var/lib/mysql
29 | - ./mysql8/log:/var/log/mysql
30 |
--------------------------------------------------------------------------------
/docs/doc/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 |
6 | # local env files
7 | .env.local
8 | .env.*.local
9 |
10 | # Log files
11 | npm-debug.log*
12 | yarn-debug.log*
13 | yarn-error.log*
14 | pnpm-debug.log*
15 |
16 | # Editor directories and files
17 | .idea
18 | .vscode
19 | *.suo
20 | *.ntvs*
21 | *.njsproj
22 | *.sln
23 | *.sw?
24 |
--------------------------------------------------------------------------------
/docs/doc/.vitepress/cache/deps/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "module"
3 | }
4 |
--------------------------------------------------------------------------------
/docs/doc/.vitepress/cache/deps/vitepress___@vueuse_core.js.map:
--------------------------------------------------------------------------------
1 | {
2 | "version": 3,
3 | "sources": [],
4 | "sourcesContent": [],
5 | "mappings": "",
6 | "names": []
7 | }
8 |
--------------------------------------------------------------------------------
/docs/doc/.vitepress/cache/deps/vue.js.map:
--------------------------------------------------------------------------------
1 | {
2 | "version": 3,
3 | "sources": [],
4 | "sourcesContent": [],
5 | "mappings": "",
6 | "names": []
7 | }
8 |
--------------------------------------------------------------------------------
/docs/doc/.vitepress/config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | // 应用级配置选项
3 | lang: 'en-US',
4 | title: 'Termius Plus',
5 | base: '/termius-plus/',
6 | description: '团队运维工具',
7 | themeConfig: {
8 | nav: [
9 | { text: 'gitee', link: 'https://gitee.com/zimehjl/termius-plus' },
10 | { text: 'github', link: 'https://github.com/2211898719/termius-plus' }
11 | ],
12 | sidebar: [
13 | {
14 | text: '介绍',
15 | items: [
16 | { text: '功能介绍', link: '/info' },
17 | ]
18 | },
19 | {
20 | text: '安装文档',
21 | items: [
22 | { text: 'Docker安装', link: '/start' },
23 | ]
24 | },
25 | {
26 | text: '开发文档',
27 | items: [
28 | { text: '架构', link: '/feature' },
29 | ]
30 | }
31 | ]
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/docs/doc/.vitepress/dist/assets/index.md.3eaXJ-0s.js:
--------------------------------------------------------------------------------
1 | import{_ as e,c as t,o as a}from"./chunks/framework.jyLi0dul.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"团队式","text":"高效运维工具","tagline":"易部署上手,功能强大。","actions":[{"theme":"brand","text":"快速开始","link":"/markdown-examples"},{"theme":"alt","text":"安装","link":"/api-examples"}]},"features":[{"title":"代理访问","details":"支持代理访问,支持多种代理方式,支持单独给每个服务器设置代理。"},{"title":"服务器管理","details":"团队式服务器分组管理,支持多种服务器类型,多种连接方式。"},{"title":"任务管理","details":"强大且灵活的定时任务管理,支持定时任务,结果通知,多服务器设置不同任务参数。"}]},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),n={name:"index.md"};function i(s,o,r,l,d,c){return a(),t("div")}const x=e(n,[["render",i]]);export{p as __pageData,x as default};
2 |
--------------------------------------------------------------------------------
/docs/doc/.vitepress/dist/assets/index.md.3eaXJ-0s.lean.js:
--------------------------------------------------------------------------------
1 | import{_ as e,c as t,o as a}from"./chunks/framework.jyLi0dul.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"团队式","text":"高效运维工具","tagline":"易部署上手,功能强大。","actions":[{"theme":"brand","text":"快速开始","link":"/markdown-examples"},{"theme":"alt","text":"安装","link":"/api-examples"}]},"features":[{"title":"代理访问","details":"支持代理访问,支持多种代理方式,支持单独给每个服务器设置代理。"},{"title":"服务器管理","details":"团队式服务器分组管理,支持多种服务器类型,多种连接方式。"},{"title":"任务管理","details":"强大且灵活的定时任务管理,支持定时任务,结果通知,多服务器设置不同任务参数。"}]},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),n={name:"index.md"};function i(s,o,r,l,d,c){return a(),t("div")}const x=e(n,[["render",i]]);export{p as __pageData,x as default};
2 |
--------------------------------------------------------------------------------
/docs/doc/.vitepress/dist/assets/inter-italic-cyrillic-ext.OVycGSDq.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/.vitepress/dist/assets/inter-italic-cyrillic-ext.OVycGSDq.woff2
--------------------------------------------------------------------------------
/docs/doc/.vitepress/dist/assets/inter-italic-cyrillic.-nLMcIwj.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/.vitepress/dist/assets/inter-italic-cyrillic.-nLMcIwj.woff2
--------------------------------------------------------------------------------
/docs/doc/.vitepress/dist/assets/inter-italic-greek-ext.hznxWNZO.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/.vitepress/dist/assets/inter-italic-greek-ext.hznxWNZO.woff2
--------------------------------------------------------------------------------
/docs/doc/.vitepress/dist/assets/inter-italic-greek.PSfer2Kc.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/.vitepress/dist/assets/inter-italic-greek.PSfer2Kc.woff2
--------------------------------------------------------------------------------
/docs/doc/.vitepress/dist/assets/inter-italic-latin-ext.RnFly65-.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/.vitepress/dist/assets/inter-italic-latin-ext.RnFly65-.woff2
--------------------------------------------------------------------------------
/docs/doc/.vitepress/dist/assets/inter-italic-latin.27E69YJn.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/.vitepress/dist/assets/inter-italic-latin.27E69YJn.woff2
--------------------------------------------------------------------------------
/docs/doc/.vitepress/dist/assets/inter-italic-vietnamese.xzQHe1q1.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/.vitepress/dist/assets/inter-italic-vietnamese.xzQHe1q1.woff2
--------------------------------------------------------------------------------
/docs/doc/.vitepress/dist/assets/inter-roman-cyrillic-ext.8T9wMG5w.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/.vitepress/dist/assets/inter-roman-cyrillic-ext.8T9wMG5w.woff2
--------------------------------------------------------------------------------
/docs/doc/.vitepress/dist/assets/inter-roman-cyrillic.jIZ9REo5.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/.vitepress/dist/assets/inter-roman-cyrillic.jIZ9REo5.woff2
--------------------------------------------------------------------------------
/docs/doc/.vitepress/dist/assets/inter-roman-greek-ext.9JiNzaSO.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/.vitepress/dist/assets/inter-roman-greek-ext.9JiNzaSO.woff2
--------------------------------------------------------------------------------
/docs/doc/.vitepress/dist/assets/inter-roman-greek.Cb5wWeGA.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/.vitepress/dist/assets/inter-roman-greek.Cb5wWeGA.woff2
--------------------------------------------------------------------------------
/docs/doc/.vitepress/dist/assets/inter-roman-latin-ext.GZWE-KO4.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/.vitepress/dist/assets/inter-roman-latin-ext.GZWE-KO4.woff2
--------------------------------------------------------------------------------
/docs/doc/.vitepress/dist/assets/inter-roman-latin.bvIUbFQP.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/.vitepress/dist/assets/inter-roman-latin.bvIUbFQP.woff2
--------------------------------------------------------------------------------
/docs/doc/.vitepress/dist/assets/inter-roman-vietnamese.paY3CzEB.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/.vitepress/dist/assets/inter-roman-vietnamese.paY3CzEB.woff2
--------------------------------------------------------------------------------
/docs/doc/.vitepress/dist/assets/markdown-examples.md.Ve4083BC.lean.js:
--------------------------------------------------------------------------------
1 | import{_ as s,c as a,o as i,V as n}from"./chunks/framework.jyLi0dul.js";const g=JSON.parse('{"title":"Markdown Extension Examples","description":"","frontmatter":{},"headers":[],"relativePath":"feature.md","filePath":"feature.md"}'),t={name:"markdown-examples.md"},e=n("",19),l=[e];function p(h,k,r,o,d,E){return i(),a("div",null,l)}const m=s(t,[["render",p]]);export{g as __pageData,m as default};
2 |
--------------------------------------------------------------------------------
/docs/doc/.vitepress/dist/hashmap.json:
--------------------------------------------------------------------------------
1 | {"api-examples.md":"w_VeVt33","index.md":"3eaXJ-0s","markdown-examples.md":"Ve4083BC"}
2 |
--------------------------------------------------------------------------------
/docs/doc/feature.md:
--------------------------------------------------------------------------------
1 | ---
2 | outline: deep
3 | ---
4 |
5 | # Termius Plus 采用 Spring Boot + Vue + Mysql + Redis 的技术栈
6 |
7 | ## 前端
8 | ui框架 ant-design-vue
9 |
10 | 终端部分采用 xterm.js
11 |
12 | 代码编辑器 codemirror
13 |
14 | ### 进入前端目录
15 | cd web/admin
16 | ### 安装依赖
17 | yarn install
18 | ### 启动
19 | yarn serve
20 |
21 | ## 后端
22 | 持久层框架 spring data jpa,querydsl
23 |
24 | 工具类 hutool
25 |
26 | ssh连接,sftp,端口转发等功能使用 sshj
27 |
28 | 数据库版本管理 flyway
29 |
30 | 钉钉机器人通知 dinger
31 |
32 | rdp连接 guacamole
33 |
34 | ### 运行
35 | 建立数据库,要求 mysql8.0+
36 |
37 | 复制 application-dev.properties.dist 为 application-dev.properties , 修改其中的数据库配置,启动!
--------------------------------------------------------------------------------
/docs/doc/images/img.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img.png
--------------------------------------------------------------------------------
/docs/doc/images/img0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img0.png
--------------------------------------------------------------------------------
/docs/doc/images/img_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_1.png
--------------------------------------------------------------------------------
/docs/doc/images/img_10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_10.png
--------------------------------------------------------------------------------
/docs/doc/images/img_11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_11.png
--------------------------------------------------------------------------------
/docs/doc/images/img_12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_12.png
--------------------------------------------------------------------------------
/docs/doc/images/img_13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_13.png
--------------------------------------------------------------------------------
/docs/doc/images/img_14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_14.png
--------------------------------------------------------------------------------
/docs/doc/images/img_15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_15.png
--------------------------------------------------------------------------------
/docs/doc/images/img_16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_16.png
--------------------------------------------------------------------------------
/docs/doc/images/img_17.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_17.png
--------------------------------------------------------------------------------
/docs/doc/images/img_18.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_18.png
--------------------------------------------------------------------------------
/docs/doc/images/img_19.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_19.png
--------------------------------------------------------------------------------
/docs/doc/images/img_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_2.png
--------------------------------------------------------------------------------
/docs/doc/images/img_20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_20.png
--------------------------------------------------------------------------------
/docs/doc/images/img_21.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_21.png
--------------------------------------------------------------------------------
/docs/doc/images/img_22.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_22.png
--------------------------------------------------------------------------------
/docs/doc/images/img_23.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_23.png
--------------------------------------------------------------------------------
/docs/doc/images/img_24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_24.png
--------------------------------------------------------------------------------
/docs/doc/images/img_25.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_25.png
--------------------------------------------------------------------------------
/docs/doc/images/img_26.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_26.png
--------------------------------------------------------------------------------
/docs/doc/images/img_27.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_27.png
--------------------------------------------------------------------------------
/docs/doc/images/img_28.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_28.png
--------------------------------------------------------------------------------
/docs/doc/images/img_29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_29.png
--------------------------------------------------------------------------------
/docs/doc/images/img_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_3.png
--------------------------------------------------------------------------------
/docs/doc/images/img_30.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_30.png
--------------------------------------------------------------------------------
/docs/doc/images/img_31.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_31.png
--------------------------------------------------------------------------------
/docs/doc/images/img_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_32.png
--------------------------------------------------------------------------------
/docs/doc/images/img_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_4.png
--------------------------------------------------------------------------------
/docs/doc/images/img_5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_5.png
--------------------------------------------------------------------------------
/docs/doc/images/img_6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_6.png
--------------------------------------------------------------------------------
/docs/doc/images/img_7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_7.png
--------------------------------------------------------------------------------
/docs/doc/images/img_8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_8.png
--------------------------------------------------------------------------------
/docs/doc/images/img_9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_9.png
--------------------------------------------------------------------------------
/docs/doc/images/img_92.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/docs/doc/images/img_92.png
--------------------------------------------------------------------------------
/docs/doc/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | # https://vitepress.dev/reference/default-theme-home-page
3 | layout: home
4 |
5 | hero:
6 | name: "团队式"
7 | text: "高效运维工具"
8 | tagline: 易部署上手,功能强大。
9 | actions:
10 | - theme: brand
11 | text: 快速开始
12 | link: /start
13 | - theme: alt
14 | text: 开发
15 | link: /feature
16 |
17 | features:
18 | - title: 代理访问
19 | details: 支持代理访问,支持多种代理方式,支持单独给每个服务器设置代理。
20 | link: /info.html#自定义代理
21 | - title: 服务器管理
22 | details: 团队式服务器分组管理,支持多种服务器类型,多种连接方式。
23 | link: /info.html#服务器组列表
24 | - title: 任务管理
25 | details: 强大且灵活的定时任务管理,支持定时任务,结果通知,多服务器设置不同任务参数。
26 | link: /info.html#定时任务
27 | - title: 事后审计
28 | details: 对服务器的每个连接,每个操作都有记录日志,方便事后审计。
29 | link: /info.html#日志
30 | ---
31 |
32 |
--------------------------------------------------------------------------------
/docs/doc/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "devDependencies": {
3 | "vitepress": "^1.0.0-rc.40"
4 | },
5 | "scripts": {
6 | "docs:dev": "vitepress dev",
7 | "docs:build": "vitepress build",
8 | "docs:preview": "vitepress preview"
9 | }
10 | }
--------------------------------------------------------------------------------
/docs/doc/termius-plus-doc.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/scripts/migration-maker.mjs:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env zx
2 |
3 | /**
4 | * 命令使用
5 | *
6 | * ./scripts/migration-maker.mjs VERSION_NAME
7 | */
8 |
9 | const t = new Date();
10 | const version = [
11 | t.getFullYear().toString(),
12 | (t.getMonth() + 1).toString().padStart(2, '0') + t.getDate().toString().padStart(2, '0'),
13 | t.getHours().toString().padStart(2, '0') + t.getMinutes().toString().padStart(2, '0') + t.getSeconds().toString().padStart(2, '0')
14 | ].join('.');
15 |
16 | if (argv._.length !== 2) {
17 | console.log(chalk.red('Argument invalid.'));
18 | await $`exit 1`;
19 | }
20 |
21 | const dir = await fs.promises.realpath(__dirname + '/../server/src/main/resources/db/migration');
22 | cd(dir);
23 |
24 | const filename = `V${version}__${argv._[1]}.sql`;
25 |
26 | $`touch ${filename}`;
27 |
--------------------------------------------------------------------------------
/server/.env.dist:
--------------------------------------------------------------------------------
1 | DB_HOST: localhost
2 | DB_PORT: 3307
3 | DB_NAME: termius-plus
4 | DB_USER: root
5 | DB_PASSWORD: root
6 |
7 | REDIS_DATABASE: 0
8 | REDIS_HOST: localhost
9 | REDIS_PORT: 6379
10 | CURRENT_IP: 127.0.0.1
11 |
12 | DINGTALK_SECRET: PkiCrZs1ocp2dp3vu9eqh35zhUt8wxcdH4GlfNAjday0PyzLltq5YFgoFnGVi2BH
13 | DINGTALK_TOKEN_ID: 25237a4fbf8d819aff4d5081781338e77ca594bb94d611de1253d242c04b02b4
14 |
15 | PORT_FOR_WARDING_MIN: 8200
16 | PORT_FOR_WARDING_MAX: 8500
17 | GUACAMOLE_HOST: 127.0.0.1
18 | GUACAMOLE_PORT: 4822
19 | GUACAMOLE_MAPPING:/tmp
20 |
--------------------------------------------------------------------------------
/server/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | HELP.md
3 | target/
4 | !.mvn/wrapper/maven-wrapper.jar
5 | !**/src/main/**/target/
6 | !**/src/test/**/target/
7 |
8 | ### STS ###
9 | .apt_generated
10 | .classpath
11 | .factorypath
12 | .project
13 | .settings
14 | .springBeans
15 | .sts4-cache
16 |
17 | ### IntelliJ IDEA ###
18 | *.iws
19 | *.iml
20 | *.ipr
21 | .env
22 |
23 | ### NetBeans ###
24 | /nbproject/private/
25 | /nbbuild/
26 | /dist/
27 | /nbdist/
28 | /.nb-gradle/
29 | build/
30 | !**/src/main/**/build/
31 | !**/src/test/**/build/
32 |
33 | src/main/resources/application-dev.properties
34 |
35 | ### VS Code ###
36 | .vscode/
37 |
--------------------------------------------------------------------------------
/server/.mvn/wrapper/maven-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/server/.mvn/wrapper/maven-wrapper.jar
--------------------------------------------------------------------------------
/server/.mvn/wrapper/maven-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.4/apache-maven-3.8.4-bin.zip
2 | wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar
3 |
--------------------------------------------------------------------------------
/server/docker/dockerfile:
--------------------------------------------------------------------------------
1 | FROM openjdk:11-jre
2 |
3 | RUN cp /etc/apt/sources.list /etc/apt/sources.list.bak
4 | RUN sed -i 's/https:\/\/mirrors.aliyun.com/http:\/\/mirrors.cloud.aliyuncs.com/g' /etc/apt/sources.list
5 |
6 | # 安装 MySQL 客户端
7 | RUN apt-get update
8 |
9 | RUN apt-get install -y mariadb-server mariadb-client --no-install-recommends
10 |
11 |
12 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/TermiusPlusApplication.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus;
2 |
3 | import com.codeages.termiusplus.biz.util.ExecuteCommandSSHClient;
4 | import jakarta.annotation.PostConstruct;
5 | import net.javacrumbs.shedlock.spring.annotation.EnableSchedulerLock;
6 | import org.springframework.boot.SpringApplication;
7 | import org.springframework.boot.autoconfigure.SpringBootApplication;
8 | import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
9 | import org.springframework.scheduling.annotation.EnableScheduling;
10 |
11 | @SpringBootApplication
12 | @EnableJpaAuditing
13 | @EnableScheduling
14 | @EnableSchedulerLock(defaultLockAtMostFor = "PT30S")
15 | public class TermiusPlusApplication {
16 |
17 | public static void main(String[] args) {
18 | SpringApplication.run(TermiusPlusApplication.class, args);
19 | }
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/api/admin/AdminSchedulerController.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.api.admin;
2 |
3 | import com.codeages.termiusplus.biz.scheduler.service.SchedulerService;
4 | import com.codeages.termiusplus.common.OkResponse;
5 | import org.springframework.web.bind.annotation.PostMapping;
6 | import org.springframework.web.bind.annotation.RequestMapping;
7 | import org.springframework.web.bind.annotation.RestController;
8 |
9 | @RestController
10 | @RequestMapping("/api-admin/scheduler")
11 | public class AdminSchedulerController {
12 |
13 | private final SchedulerService schedulerService;
14 |
15 | public AdminSchedulerController(SchedulerService schedulerService) {
16 | this.schedulerService = schedulerService;
17 | }
18 |
19 |
20 | @PostMapping("/resetSystemJobs")
21 | public OkResponse resetSystemJobs() {
22 | schedulerService.resetSystemJobs();
23 | return OkResponse.TRUE;
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/ai/dto/Choice.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.ai.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @AllArgsConstructor
9 | @NoArgsConstructor
10 | public class Choice {
11 | private Delta delta;
12 | private Long index;
13 | }
14 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/ai/dto/Ctool.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.ai.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | import java.util.List;
8 |
9 |
10 | @Data
11 | @AllArgsConstructor
12 | @NoArgsConstructor
13 | public class Ctool {
14 | private Long code;
15 | private String message;
16 | private String sid;
17 | private String id;
18 | private Long created;
19 | private List choices;
20 | }
21 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/ai/dto/Delta.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.ai.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @AllArgsConstructor
9 | @NoArgsConstructor
10 | public class Delta {
11 | private String role;
12 | private String content;
13 | }
14 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/application/config/ApplicationMonitorRequestConfig.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.application.config;
2 |
3 | import cn.hutool.http.Method;
4 | import com.codeages.termiusplus.biz.application.enums.ApplicationMonitorCheckTypeEnum;
5 | import lombok.AllArgsConstructor;
6 | import lombok.Data;
7 | import lombok.NoArgsConstructor;
8 |
9 | import java.util.List;
10 | import java.util.Map;
11 |
12 | @Data
13 | @NoArgsConstructor
14 | @AllArgsConstructor
15 | public class ApplicationMonitorRequestConfig {
16 | private String url;
17 | private Method method;
18 | private Map> headers;
19 | private String body;
20 | private String responseRegex;
21 | private ApplicationMonitorCheckTypeEnum checkType;
22 | private List timeRange;
23 | }
24 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/application/dto/ApplicationDto.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.application.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.EqualsAndHashCode;
6 | import lombok.NoArgsConstructor;
7 |
8 | import java.math.BigDecimal;
9 | import java.util.List;
10 |
11 | @Data
12 | @NoArgsConstructor
13 | @AllArgsConstructor
14 | @EqualsAndHashCode
15 | public class ApplicationDto {
16 |
17 | private Long id;
18 |
19 | private Long proxyId;
20 |
21 | private Long parentId;
22 |
23 |
24 | private Boolean isGroup;
25 |
26 |
27 | private Long sort;
28 |
29 |
30 | private String name;
31 |
32 |
33 | private String icon;
34 |
35 | private String masterMobile;
36 | private BigDecimal latitude;
37 | private BigDecimal longitude;
38 |
39 | private String content;
40 |
41 | private String identity;
42 |
43 | private List serverList;
44 | }
45 |
46 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/application/dto/ApplicationMonitorCreateParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.application.dto;
2 |
3 | import com.codeages.termiusplus.biz.application.enums.ApplicationMonitorTypeEnum;
4 | import jakarta.validation.constraints.NotNull;
5 | import lombok.AllArgsConstructor;
6 | import lombok.Data;
7 | import lombok.NoArgsConstructor;
8 |
9 | @Data
10 | @NoArgsConstructor
11 | @AllArgsConstructor
12 | public class ApplicationMonitorCreateParams {
13 |
14 | @NotNull(message = "应用ID不能为空")
15 |
16 | private Long applicationId;
17 |
18 | @NotNull(message = "监控类型不能为空")
19 |
20 | private ApplicationMonitorTypeEnum type;
21 |
22 | @NotNull(message = "监控配置不能为空")
23 |
24 | private String config;
25 |
26 |
27 | private String remark;
28 | }
29 |
30 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/application/dto/ApplicationMonitorDto.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.application.dto;
2 |
3 | import com.codeages.termiusplus.biz.application.enums.ApplicationMonitorTypeEnum;
4 | import com.codeages.termiusplus.biz.server.dto.ProxyDto;
5 | import lombok.AllArgsConstructor;
6 | import lombok.Data;
7 | import lombok.NoArgsConstructor;
8 |
9 | import java.util.Date;
10 |
11 | @Data
12 | @NoArgsConstructor
13 | @AllArgsConstructor
14 | public class ApplicationMonitorDto {
15 |
16 | private Long id;
17 |
18 | private String applicationName;
19 |
20 | private String applicationContent;
21 | private String masterMobile;
22 |
23 | private Long applicationId;
24 |
25 | private ApplicationMonitorTypeEnum type;
26 |
27 | private String config;
28 |
29 | private String remark;
30 | private ProxyDto proxy;
31 | private Long proxyId;
32 |
33 | private Long failureCount;
34 | private Date failureTime;
35 | private String responseResult;
36 | private Long responseTime;
37 | }
38 |
39 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/application/dto/ApplicationMonitorExecDto.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.application.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @NoArgsConstructor
9 | @AllArgsConstructor
10 | public class ApplicationMonitorExecDto {
11 |
12 | private boolean res;
13 | private String request;
14 | private String response;
15 | private boolean success;
16 | private String message;
17 | private String remark;
18 | private Long responseTime;
19 | }
20 |
21 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/application/dto/ApplicationMonitorLogCountDto.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.application.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @NoArgsConstructor
9 | @AllArgsConstructor
10 | public class ApplicationMonitorLogCountDto {
11 | private Long applicationId;
12 | private String applicationName;
13 | private String applicationContent;
14 | private Long errorSeconds;
15 | }
16 |
17 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/application/dto/ApplicationMonitorLogCreateParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.application.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | import java.util.Date;
8 |
9 | @Data
10 | @NoArgsConstructor
11 | @AllArgsConstructor
12 | public class ApplicationMonitorLogCreateParams {
13 | private Long applicationId;
14 | private String applicationName;
15 | private String applicationContent;
16 | private Date date;
17 | }
18 |
19 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/application/dto/ApplicationMonitorLogDto.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.application.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | import java.util.Date;
8 |
9 | @Data
10 | @NoArgsConstructor
11 | @AllArgsConstructor
12 | public class ApplicationMonitorLogDto {
13 | private Long id;
14 | private Long applicationId;
15 | private String applicationName;
16 | private String applicationContent;
17 | private Date date;
18 | }
19 |
20 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/application/dto/ApplicationMonitorLogSearchParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.application.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | import java.util.Date;
8 |
9 | @Data
10 | @NoArgsConstructor
11 | @AllArgsConstructor
12 | public class ApplicationMonitorLogSearchParams {
13 | private Long applicationId;
14 | private String applicationName;
15 | private String applicationContent;
16 | private Date date;
17 | }
18 |
19 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/application/dto/ApplicationMonitorLogUpdateParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.application.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | import java.util.Date;
8 |
9 | @Data
10 | @NoArgsConstructor
11 | @AllArgsConstructor
12 | public class ApplicationMonitorLogUpdateParams {
13 | private Long id;
14 | private Long applicationId;
15 | private String applicationName;
16 | private String applicationContent;
17 | private Date date;
18 | }
19 |
20 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/application/dto/ApplicationMonitorSearchParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.application.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @NoArgsConstructor
9 | @AllArgsConstructor
10 | public class ApplicationMonitorSearchParams {
11 |
12 |
13 | private Long applicationId;
14 |
15 |
16 | private String type;
17 |
18 |
19 | private String config;
20 |
21 |
22 | private String remark;
23 | }
24 |
25 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/application/dto/ApplicationMonitorUpdateParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.application.dto;
2 |
3 | import com.codeages.termiusplus.biz.application.enums.ApplicationMonitorTypeEnum;
4 | import jakarta.validation.constraints.NotNull;
5 | import lombok.AllArgsConstructor;
6 | import lombok.Data;
7 | import lombok.NoArgsConstructor;
8 |
9 | import java.util.Date;
10 |
11 | @Data
12 | @NoArgsConstructor
13 | @AllArgsConstructor
14 | public class ApplicationMonitorUpdateParams {
15 |
16 | private Long id;
17 |
18 | @NotNull(message = "应用ID不能为空")
19 |
20 | private Long applicationId;
21 |
22 | @NotNull(message = "监控类型不能为空")
23 |
24 | private ApplicationMonitorTypeEnum type;
25 |
26 | @NotNull(message = "监控配置不能为空")
27 |
28 | private String config;
29 |
30 |
31 | private String remark;
32 |
33 | private Long failureCount;
34 | private Date failureTime;
35 | private String responseResult;
36 | private Long responseTime;
37 | }
38 |
39 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/application/dto/ApplicationSearchParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.application.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @NoArgsConstructor
9 | @AllArgsConstructor
10 | public class ApplicationSearchParams {
11 |
12 |
13 | private Long parentId;
14 |
15 |
16 | private Boolean isGroup;
17 |
18 |
19 | private Long sort;
20 |
21 |
22 | private String name;
23 |
24 |
25 | private String icon;
26 |
27 |
28 | private String content;
29 |
30 |
31 | private String identity;
32 | }
33 |
34 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/application/dto/ApplicationServerCreateParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.application.dto;
2 |
3 | import jakarta.validation.constraints.NotNull;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | @Data
9 | @NoArgsConstructor
10 | @AllArgsConstructor
11 | public class ApplicationServerCreateParams {
12 |
13 | @NotNull(message = "应用ID不能为空")
14 |
15 | private Long applicationId;
16 |
17 | @NotNull(message = "服务器ID不能为空")
18 |
19 | private Long serverId;
20 |
21 |
22 | private String tag;
23 |
24 |
25 | private String remark;
26 |
27 | }
28 |
29 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/application/dto/ApplicationServerDto.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.application.dto;
2 |
3 | import com.codeages.termiusplus.biz.server.dto.ServerDto;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | @Data
9 | @NoArgsConstructor
10 | @AllArgsConstructor
11 | public class ApplicationServerDto {
12 |
13 | private Long id;
14 |
15 |
16 | private Long applicationId;
17 |
18 |
19 | private Long serverId;
20 |
21 |
22 | private String tag;
23 |
24 |
25 | private String remark;
26 |
27 | private ServerDto server;
28 | }
29 |
30 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/application/dto/ApplicationServerSearchParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.application.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @NoArgsConstructor
9 | @AllArgsConstructor
10 | public class ApplicationServerSearchParams {
11 |
12 |
13 | private Long applicationId;
14 |
15 |
16 | private Long serverId;
17 |
18 |
19 | private String tag;
20 |
21 |
22 | private String remark;
23 | }
24 |
25 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/application/dto/ApplicationServerUpdateParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.application.dto;
2 |
3 | import jakarta.validation.constraints.NotNull;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | @Data
9 | @NoArgsConstructor
10 | @AllArgsConstructor
11 | public class ApplicationServerUpdateParams {
12 |
13 | private Long id;
14 |
15 | @NotNull(message = "应用ID不能为空")
16 |
17 | private Long applicationId;
18 |
19 | @NotNull(message = "服务器ID不能为空")
20 |
21 | private Long serverId;
22 |
23 |
24 | private String tag;
25 |
26 | private String remark;
27 | }
28 |
29 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/application/enums/ApplicationMonitorCheckTypeEnum.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.application.enums;
2 |
3 | public enum ApplicationMonitorCheckTypeEnum {
4 | REGEX,
5 | JAVASCRIPT,
6 | }
7 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/application/enums/ApplicationMonitorTypeEnum.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.application.enums;
2 |
3 | import com.codeages.termiusplus.biz.application.config.ApplicationMonitorRequestConfig;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Getter;
6 |
7 | @AllArgsConstructor
8 | public enum ApplicationMonitorTypeEnum {
9 | REQUEST(ApplicationMonitorRequestConfig.class)
10 |
11 | ;
12 |
13 | @Getter
14 | private final Class> configClass;
15 |
16 |
17 | }
18 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/application/listener/DeleteProxyEventApplicationListener.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.application.listener;
2 |
3 | import com.codeages.termiusplus.biz.ErrorCode;
4 | import com.codeages.termiusplus.biz.application.service.ApplicationService;
5 | import com.codeages.termiusplus.biz.server.event.DeleteProxyEvent;
6 | import com.codeages.termiusplus.exception.AppException;
7 | import org.springframework.beans.factory.annotation.Autowired;
8 | import org.springframework.context.ApplicationListener;
9 | import org.springframework.stereotype.Component;
10 |
11 | @Component
12 | public class DeleteProxyEventApplicationListener implements ApplicationListener {
13 |
14 | @Autowired
15 | private ApplicationService applicationServer;
16 |
17 | @Override
18 | public void onApplicationEvent(DeleteProxyEvent event) {
19 | if (applicationServer.existByProxyId(event.getProxyDto().getId())) {
20 | throw new AppException(ErrorCode.INVALID_ARGUMENT,"尚有应用使用该代理");
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/application/repository/ApplicationMonitorRepository.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.application.repository;
2 |
3 | import com.codeages.termiusplus.biz.application.entity.ApplicationMonitor;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 | import org.springframework.data.querydsl.QuerydslPredicateExecutor;
6 |
7 | import java.util.Optional;
8 |
9 | public interface ApplicationMonitorRepository extends JpaRepository, QuerydslPredicateExecutor {
10 |
11 | void deleteByApplicationId(Long applicationId);
12 |
13 | Optional findByApplicationId(Long applicationId);
14 | }
15 |
16 |
17 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/application/repository/ApplicationRepository.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.application.repository;
2 |
3 | import com.codeages.termiusplus.biz.application.entity.Application;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 | import org.springframework.data.querydsl.QuerydslPredicateExecutor;
6 |
7 | import java.util.List;
8 |
9 | public interface ApplicationRepository extends JpaRepository, QuerydslPredicateExecutor {
10 |
11 | List findAllByParentId(Long parentId);
12 |
13 | List findAllByIsGroupTrue();
14 |
15 | List findAllByIsGroupFalse();
16 |
17 | boolean existsByProxyId(Long proxyId);
18 |
19 | }
20 |
21 |
22 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/application/repository/ApplicationServerRepository.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.application.repository;
2 |
3 | import com.codeages.termiusplus.biz.application.entity.ApplicationServer;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 | import org.springframework.data.querydsl.QuerydslPredicateExecutor;
6 |
7 | import java.util.List;
8 |
9 | public interface ApplicationServerRepository extends JpaRepository, QuerydslPredicateExecutor {
10 |
11 | void deleteByApplicationId(Long applicationId);
12 |
13 | List findByApplicationId(Long applicationId);
14 | }
15 |
16 |
17 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/application/service/ApplicationServerService.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.application.service;
2 |
3 | import com.codeages.termiusplus.biz.application.dto.ApplicationServerCreateParams;
4 | import com.codeages.termiusplus.biz.application.dto.ApplicationServerDto;
5 | import com.codeages.termiusplus.biz.application.dto.ApplicationServerSearchParams;
6 | import com.codeages.termiusplus.biz.application.dto.ApplicationServerUpdateParams;
7 | import org.springframework.data.domain.Page;
8 | import org.springframework.data.domain.Pageable;
9 |
10 | import java.util.List;
11 |
12 | public interface ApplicationServerService {
13 |
14 | Page search(ApplicationServerSearchParams searchParams, Pageable pageable);
15 |
16 | void create(ApplicationServerCreateParams createParams);
17 |
18 | void update(ApplicationServerUpdateParams updateParams);
19 |
20 | void delete(Long id);
21 |
22 | void deleteByApplicationId(Long applicationId);
23 |
24 | List getServers(Long applicationId);
25 | }
26 |
27 |
28 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/job/RunMvelJob.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.job;
2 |
3 | import cn.hutool.extra.spring.SpringUtil;
4 | import com.codeages.termiusplus.biz.job.service.QuartzService;
5 | import lombok.SneakyThrows;
6 | import lombok.extern.slf4j.Slf4j;
7 | import org.quartz.Job;
8 | import org.quartz.JobDataMap;
9 | import org.quartz.JobExecutionContext;
10 |
11 | @Slf4j
12 | public class RunMvelJob implements Job {
13 |
14 | @Override
15 | @SneakyThrows
16 | public void execute(JobExecutionContext context) {
17 | log.info(
18 | "开始执行任务,任务名称:{},任务分组:{}",
19 | context.getJobDetail().getKey().getName(),
20 | context.getJobDetail().getKey().getGroup()
21 | );
22 |
23 | JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
24 |
25 | SpringUtil.getBean(QuartzService.class).execJob(jobDataMap);
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/job/dto/MvelCronCreateDto.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.job.dto;
2 |
3 | import com.codeages.termiusplus.biz.server.dto.ServerDto;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | import java.util.List;
9 |
10 | @Data
11 | @NoArgsConstructor
12 | @AllArgsConstructor
13 | public class MvelCronCreateDto {
14 | private String jobName;
15 | private String jobGroup;
16 | private List serverIds;
17 | private List serverDtoList;
18 | private List params;
19 | private String mvelScript;
20 | private String cronExpression;
21 | }
22 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/job/service/QuartzService.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.job.service;
2 |
3 | import com.codeages.termiusplus.biz.job.dto.MvelCronCreateDto;
4 | import org.quartz.JobDataMap;
5 | import org.quartz.JobDetail;
6 |
7 | import java.util.List;
8 |
9 | public interface QuartzService {
10 |
11 | void createCronJob(MvelCronCreateDto dto);
12 |
13 | void deleteJob(String jobName, String jobGroup);
14 |
15 | List getCurrentlyExecutingJobs();
16 |
17 | void execJob(JobDataMap jobDataMap);
18 | }
19 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/log/dto/CommandLogCreateParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.log.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @NoArgsConstructor
9 | @AllArgsConstructor
10 | public class CommandLogCreateParams {
11 | private Long userId;
12 | private String sessionId;
13 | private Long serverId;
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/log/dto/CommandLogDto.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.log.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @NoArgsConstructor
9 | @AllArgsConstructor
10 | public class CommandLogDto {
11 | private Long id;
12 | private Long userId;
13 | private String userName;
14 | private String sessionId;
15 | private Long serverId;
16 | private String serverName;
17 | private String commandData;
18 | }
19 |
20 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/log/dto/CommandLogSearchParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.log.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @NoArgsConstructor
9 | @AllArgsConstructor
10 | public class CommandLogSearchParams {
11 | private Long userId;
12 | private String sessionId;
13 | private Long serverId;
14 | private String commandData;
15 | }
16 |
17 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/log/dto/CommandLogSimpleDto.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.log.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @NoArgsConstructor
9 | @AllArgsConstructor
10 | public class CommandLogSimpleDto {
11 | private Long id;
12 | private Long userId;
13 | private String userName;
14 | private String sessionId;
15 | private Long serverId;
16 | private String serverName;
17 | }
18 |
19 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/log/dto/CommandLogUpdateParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.log.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @NoArgsConstructor
9 | @AllArgsConstructor
10 | public class CommandLogUpdateParams {
11 | private Long id;
12 | private Long userId;
13 | private String sessionId;
14 | private Long serverId;
15 | private String commandData;
16 | }
17 |
18 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/log/mapper/CommandLogMapper.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.log.mapper;
2 |
3 | import com.codeages.termiusplus.biz.log.dto.CommandLogCreateParams;
4 | import com.codeages.termiusplus.biz.log.dto.CommandLogDto;
5 | import com.codeages.termiusplus.biz.log.dto.CommandLogSimpleDto;
6 | import com.codeages.termiusplus.biz.log.dto.CommandLogUpdateParams;
7 | import com.codeages.termiusplus.biz.log.entity.CommandLog;
8 | import org.mapstruct.BeanMapping;
9 | import org.mapstruct.Mapper;
10 | import org.mapstruct.MappingTarget;
11 | import org.mapstruct.NullValuePropertyMappingStrategy;
12 |
13 | @Mapper(componentModel = "spring")
14 | public interface CommandLogMapper {
15 | CommandLogDto toDto(CommandLog commandLog);
16 |
17 | CommandLogSimpleDto toSimpleDto(CommandLog commandLog);
18 |
19 | CommandLog toCreateEntity(CommandLogCreateParams createParams);
20 |
21 | @BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
22 | CommandLog toUpdateEntity(@MappingTarget CommandLog commandLog, CommandLogUpdateParams updateParams);
23 | }
24 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/log/repository/CommandLogRepository.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.log.repository;
2 |
3 | import com.codeages.termiusplus.biz.log.entity.CommandLog;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 | import org.springframework.data.querydsl.QuerydslPredicateExecutor;
6 |
7 | public interface CommandLogRepository extends JpaRepository, QuerydslPredicateExecutor {
8 |
9 | }
10 |
11 |
12 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/log/service/CommandLogService.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.log.service;
2 |
3 | import com.codeages.termiusplus.biz.log.dto.*;
4 | import org.springframework.data.domain.Page;
5 | import org.springframework.data.domain.Pageable;
6 |
7 | public interface CommandLogService {
8 |
9 | Page search(CommandLogSearchParams searchParams, Pageable pageable);
10 |
11 | CommandLogDto create(CommandLogCreateParams createParams);
12 |
13 | void update(CommandLogUpdateParams updateParams);
14 |
15 | void delete(Long id);
16 |
17 | CommandLogDto get(Long id);
18 | }
19 |
20 |
21 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/message/MessageService.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.message;
2 |
3 | import com.github.jaemon.dinger.core.entity.enums.MessageSubType;
4 |
5 | public interface MessageService {
6 |
7 | void send(MessageSubType messageType, String title, String message);
8 | }
9 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/message/impl/MessageServiceDingerImpl.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.message.impl;
2 |
3 | import com.codeages.termiusplus.biz.message.MessageService;
4 | import com.github.jaemon.dinger.DingerSender;
5 | import com.github.jaemon.dinger.core.entity.DingerRequest;
6 | import com.github.jaemon.dinger.core.entity.enums.MessageSubType;
7 | import org.springframework.beans.factory.annotation.Autowired;
8 | import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
9 | import org.springframework.stereotype.Service;
10 |
11 | @Service
12 | public class MessageServiceDingerImpl implements MessageService {
13 |
14 | @Autowired
15 | private DingerSender dingerSender;
16 |
17 |
18 | @Override
19 | public void send(MessageSubType messageType, String title, String message) {
20 | dingerSender.send(
21 | messageType,
22 | DingerRequest.request(
23 | message,
24 | title
25 | )
26 | );
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/objectlog/entity/ObjectLog.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.objectlog.entity;
2 |
3 | import jakarta.persistence.*;
4 | import lombok.Data;
5 | import org.springframework.data.annotation.CreatedDate;
6 | import org.springframework.data.jpa.domain.support.AuditingEntityListener;
7 |
8 | @Entity
9 | @EntityListeners(AuditingEntityListener.class)
10 | @Data
11 | public class ObjectLog {
12 | @Id
13 | @GeneratedValue(strategy = GenerationType.IDENTITY)
14 | private Long id;
15 |
16 | private String level;
17 |
18 | private String type;
19 |
20 | private Long oid = 0L;
21 |
22 | private String event;
23 |
24 | private String message;
25 |
26 | private String context;
27 |
28 | private Long operatorId = 0L;
29 |
30 | @CreatedDate
31 | private Long createdAt;
32 | }
33 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/objectlog/repository/ObjectLogRepository.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.objectlog.repository;
2 |
3 | import com.codeages.termiusplus.biz.objectlog.entity.ObjectLog;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 | import org.springframework.data.querydsl.QuerydslPredicateExecutor;
6 |
7 | public interface ObjectLogRepository extends JpaRepository, QuerydslPredicateExecutor {
8 | }
9 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/objectlog/service/ObjectLogService.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.objectlog.service;
2 |
3 | import java.util.Map;
4 |
5 | /**
6 | * 业务对象日志服务
7 | *
8 | * 记录业务对象的关键操作事件,可用于回溯
9 | */
10 | public interface ObjectLogService {
11 |
12 | void info(String type, Long oid, String event);
13 |
14 | void info(String type, Long oid, String event, String message);
15 |
16 | void info(String type, Long oid, String event, String message, Map context);
17 |
18 | void warn(String type, Long oid, String event);
19 |
20 | void warn(String type, Long oid, String event, String message);
21 |
22 | void warn(String type, Long oid, String event, String message, Map context);
23 |
24 | void error(String type, Long oid, String event);
25 |
26 | void error(String type, Long oid, String event, String message);
27 |
28 | void error(String type, Long oid, String event, String message, Map context);
29 | }
30 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/scheduler/config/SystemSchedulerConfig.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.scheduler.config;
2 |
3 | import com.codeages.termiusplus.biz.scheduler.dto.CronJobDeclare;
4 | import com.codeages.termiusplus.biz.scheduler.dto.IntervalJobDeclare;
5 |
6 | import java.util.ArrayList;
7 | import java.util.List;
8 |
9 | public interface SystemSchedulerConfig {
10 |
11 | default List declareIntervalJobs() {
12 | return new ArrayList<>();
13 | }
14 |
15 | default List declareCronJobs() {
16 | return new ArrayList<>();
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/scheduler/service/SchedulerService.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.scheduler.service;
2 |
3 | import com.codeages.termiusplus.biz.scheduler.dto.CronJobDeclare;
4 | import com.codeages.termiusplus.biz.scheduler.dto.IntervalJobDeclare;
5 |
6 | public interface SchedulerService {
7 |
8 | void scheduleJob(IntervalJobDeclare declare);
9 |
10 | void scheduleJob(CronJobDeclare declare);
11 |
12 | void deleteJob(String name, String group);
13 |
14 | /**
15 | * 重置系统任务
16 | */
17 | void resetSystemJobs();
18 | }
19 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/annotation/SftpActive.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.annotation;
2 |
3 | import org.intellij.lang.annotations.Language;
4 |
5 | import java.lang.annotation.*;
6 |
7 | /**
8 | * @author kuozhi
9 | */
10 | @Target({ ElementType.METHOD, ElementType.TYPE })
11 | @Retention(RetentionPolicy.RUNTIME)
12 | @Inherited
13 | @Documented
14 | public @interface SftpActive {
15 |
16 | /**
17 | * 列名
18 | */
19 | @Language("SpEL")
20 | String value();
21 | }
22 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/context/ServerContext.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.context;
2 |
3 | import com.codeages.termiusplus.biz.server.dto.SFTPBean;
4 | import com.codeages.termiusplus.ws.ssh.SshHandler;
5 |
6 | import java.util.Map;
7 | import java.util.concurrent.BlockingQueue;
8 | import java.util.concurrent.ConcurrentHashMap;
9 | import java.util.concurrent.ConcurrentMap;
10 |
11 | public class ServerContext {
12 |
13 | public static final ConcurrentMap SSH_POOL = new ConcurrentHashMap<>();
14 |
15 | public static final ConcurrentMap SFTP_POOL = new ConcurrentHashMap<>();
16 |
17 | public static final Map> AUTH_KEYBOARD_INTERACTIVE_POOL = new ConcurrentHashMap<>();
18 | }
19 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/dto/AIChatParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @AllArgsConstructor
9 | @NoArgsConstructor
10 | public class AIChatParams {
11 | private String sessionId;
12 | private String message;
13 | private String prompt;
14 | }
15 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/dto/AiCompletionMetadata.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @AllArgsConstructor
9 | @NoArgsConstructor
10 | public class AiCompletionMetadata {
11 | private CompletionMetadata completionMetadata;
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/dto/ClashProxyDTO.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | import java.util.List;
8 |
9 | @Data
10 | @AllArgsConstructor
11 | @NoArgsConstructor
12 | public class ClashProxyDTO {
13 | //直连列表
14 | private List direct;
15 | //代理列表
16 | private List proxy;
17 | //拒绝列表 广告啥的
18 | private List reject;
19 | }
20 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/dto/CompletionMetadata.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @AllArgsConstructor
9 | @NoArgsConstructor
10 | public class CompletionMetadata {
11 | private String filename;
12 | private String language;
13 | private String textAfterCursor;
14 | private String textBeforeCursor;
15 | }
16 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/dto/LsFileDto.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.dto;
2 |
3 | import com.codeages.termiusplus.biz.server.enums.LsFileTypeEnum;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | @Data
9 | @NoArgsConstructor
10 | @AllArgsConstructor
11 | public class LsFileDto {
12 | private String fileName;
13 | private LsFileTypeEnum type;
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/dto/PortForwarderDto.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.dto;
2 |
3 | import com.codeages.termiusplus.biz.server.enums.PortForWardingStatusEnum;
4 | import com.fasterxml.jackson.annotation.JsonIgnore;
5 | import lombok.AllArgsConstructor;
6 | import lombok.Data;
7 | import lombok.NoArgsConstructor;
8 | import net.schmizz.sshj.SSHClient;
9 | import net.schmizz.sshj.connection.channel.direct.LocalPortForwarder;
10 |
11 | @Data
12 | @AllArgsConstructor
13 | @NoArgsConstructor
14 | public class PortForwarderDto {
15 | private Long id;
16 | private String forwardingName;
17 | @JsonIgnore
18 | private LocalPortForwarder localPortForwarder;
19 | private SSHClient sshClient;
20 | private Integer localPort;
21 | private String localHost;
22 | private String remoteHost;
23 | private Integer remotePort;
24 | private Long serverId;
25 | private ServerDto serverDto;
26 | private Integer retryCount;
27 | private PortForWardingStatusEnum status;
28 | }
29 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/dto/ProxyBrowserParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @NoArgsConstructor
9 | @AllArgsConstructor
10 | public class ProxyBrowserParams {
11 | /**
12 | * 名称
13 | */
14 | private Long id;
15 | private String url;
16 | }
17 |
18 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/dto/ProxyCreateParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.dto;
2 |
3 | import com.codeages.termiusplus.biz.server.enums.ProxyTypeEnum;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | @Data
9 | @NoArgsConstructor
10 | @AllArgsConstructor
11 | public class ProxyCreateParams {
12 | /**
13 | * 名称
14 | */
15 | private String name;
16 | private String ip;
17 | private Long port;
18 | private ProxyTypeEnum type;
19 | private Boolean open;
20 | private String username;
21 | private String password;
22 | }
23 |
24 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/dto/ProxyDto.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.dto;
2 |
3 | import com.codeages.termiusplus.biz.server.enums.ProxyTypeEnum;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | @Data
9 | @NoArgsConstructor
10 | @AllArgsConstructor
11 | public class ProxyDto {
12 | private String name;
13 | private Long id;
14 | private String ip;
15 | private Long port;
16 | private ProxyTypeEnum type;
17 | private Boolean open;
18 | private String password;
19 | private String username;
20 | }
21 |
22 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/dto/ProxySearchParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.dto;
2 |
3 | import com.codeages.termiusplus.biz.server.enums.ProxyTypeEnum;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | @Data
9 | @NoArgsConstructor
10 | @AllArgsConstructor
11 | public class ProxySearchParams {
12 | /**
13 | * 名称
14 | */
15 | private String name;
16 | private String ip;
17 | private Long port;
18 | private ProxyTypeEnum type;
19 | private String username;
20 | private String password;
21 | }
22 |
23 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/dto/ProxyUpdateParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.dto;
2 |
3 | import com.codeages.termiusplus.biz.server.enums.ProxyTypeEnum;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | @Data
9 | @NoArgsConstructor
10 | @AllArgsConstructor
11 | public class ProxyUpdateParams {
12 | /**
13 | * 名称
14 | */
15 | private String name;
16 | private Long id;
17 | private String ip;
18 | private Long port;
19 | private ProxyTypeEnum type;
20 | private String username;
21 | private String password;
22 | }
23 |
24 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/dto/SFTPBean.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 | import net.schmizz.sshj.SSHClient;
7 | import net.schmizz.sshj.sftp.StatefulSFTPClient;
8 |
9 | @Data
10 | @AllArgsConstructor
11 | @NoArgsConstructor
12 | public class SFTPBean {
13 | private StatefulSFTPClient sftp;
14 | private Long time;
15 | private SSHClient sshClient;
16 | private boolean active;
17 | }
18 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/dto/SFTPInitParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @NoArgsConstructor
9 | @AllArgsConstructor
10 | public class SFTPInitParams {
11 | private String sessionId;
12 | private Long serverId;
13 | }
14 |
15 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/dto/SFTPParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @NoArgsConstructor
9 | @AllArgsConstructor
10 | public class SFTPParams {
11 | private String remotePath;
12 | private String newRemotePath;
13 | private String content;
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/dto/SFTPServerUploadServerParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @NoArgsConstructor
9 | @AllArgsConstructor
10 | public class SFTPServerUploadServerParams {
11 | private String taskId;
12 | private String sourceId;
13 | private String sourcePath;
14 | private String targetId;
15 | private String targetPath;
16 | private String fileName;
17 | private String clientSessionId;
18 | private String sourceServerName;
19 | private String targetServerName;
20 | }
21 |
22 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/dto/ServerCreateParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.dto;
2 |
3 | import com.codeages.termiusplus.biz.server.enums.OSEnum;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | @Data
9 | @NoArgsConstructor
10 | @AllArgsConstructor
11 | public class ServerCreateParams {
12 | private Long groupId;
13 | private String name;
14 | private String username;
15 | private String ip;
16 | private Boolean isDb;
17 | private String dbPort;
18 | private String firstCommand;
19 | private Long port;
20 | private Long sort;
21 | private OSEnum os;
22 | private Boolean infoTest;
23 | private Boolean autoSudo;
24 | private Boolean isGroup;
25 | private Boolean historyGet;
26 | private Long parentId;
27 | private Boolean keepAlive;
28 | private String password;
29 | private String remark;
30 | private String key;
31 | private Long proxyId;
32 | private Long proxyServerId;
33 |
34 | }
35 |
36 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/dto/ServerDto.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.dto;
2 |
3 | import com.codeages.termiusplus.biz.server.enums.OSEnum;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | @Data
9 | @NoArgsConstructor
10 | @AllArgsConstructor
11 | public class ServerDto {
12 | private Long id;
13 | private Boolean isGroup;
14 | private String firstCommand;
15 | private Long parentId;
16 | private String username;
17 | private Long sort;
18 | private Boolean autoSudo;
19 | private String name;
20 | private String ip;
21 | private Long port;
22 | private Boolean infoTest;
23 | private OSEnum os;
24 | private String password;
25 | private Boolean isDb;
26 | private Boolean historyGet;
27 | private String dbPort;
28 | private String key;
29 | private String remark;
30 | private Long proxyId;
31 | private ProxyDto proxy;
32 | private Boolean keepAlive;
33 | private Long proxyServerId;
34 | private Long useProxyServerId;
35 | }
36 |
37 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/dto/ServerRunInfoDTO.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.dto;
2 |
3 | import com.codeages.termiusplus.biz.util.command.CpuUsage;
4 | import com.codeages.termiusplus.biz.util.command.DiskUsage;
5 | import com.codeages.termiusplus.biz.util.command.NetworkUsage;
6 | import lombok.AllArgsConstructor;
7 | import lombok.Data;
8 | import lombok.NoArgsConstructor;
9 |
10 | import java.util.List;
11 |
12 | @Data
13 | @NoArgsConstructor
14 | @AllArgsConstructor
15 | public class ServerRunInfoDTO {
16 | private ServerDto server;
17 | private CpuUsage cpuUsage;
18 | private List diskUsages;
19 | private List networkUsages;
20 | }
21 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/dto/ServerRunLogCreateParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | import java.util.Date;
8 |
9 | @Data
10 | @NoArgsConstructor
11 | @AllArgsConstructor
12 | public class ServerRunLogCreateParams {
13 | private Long serverId;
14 | private Date date;
15 | private String cpuUsage;
16 | private String memoryUsage;
17 | private String diskUsages;
18 | private String networkUsages;
19 | }
20 |
21 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/dto/ServerRunLogSearchParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | import java.util.Date;
8 |
9 | @Data
10 | @NoArgsConstructor
11 | @AllArgsConstructor
12 | public class ServerRunLogSearchParams {
13 | private Long serverId;
14 | private Date date;
15 | private String cpuUsage;
16 | private String memoryUsage;
17 | private String diskUsages;
18 | private String networkUsages;
19 | }
20 |
21 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/dto/ServerRunLogUpdateParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | import java.util.Date;
8 |
9 | @Data
10 | @NoArgsConstructor
11 | @AllArgsConstructor
12 | public class ServerRunLogUpdateParams {
13 | private Long id;
14 | private Long serverId;
15 | private Date date;
16 | private String cpuUsage;
17 | private String memoryUsage;
18 | private String diskUsages;
19 | private String networkUsages;
20 | }
21 |
22 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/dto/ServerSearchParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.dto;
2 |
3 | import com.codeages.termiusplus.biz.server.enums.OSEnum;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | @Data
9 | @NoArgsConstructor
10 | @AllArgsConstructor
11 | public class ServerSearchParams {
12 | private String name;
13 | private String ip;
14 | private String username;
15 | private Boolean isGroup;
16 | private String firstCommand;
17 | private Long sort;
18 | private Boolean autoSudo;
19 | private OSEnum os;
20 | private Long parentId;
21 | private Long port;
22 | private String password;
23 | private String key;
24 | private Boolean isDb;
25 | private String dbPort;
26 | private Long proxyId;
27 | }
28 |
29 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/dto/ServerServiceMonitorCreateParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @NoArgsConstructor
9 | @AllArgsConstructor
10 | public class ServerServiceMonitorCreateParams {
11 | private Long serverId;
12 | private String name;
13 | private Long port;
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/dto/ServerServiceMonitorDto.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @NoArgsConstructor
9 | @AllArgsConstructor
10 | public class ServerServiceMonitorDto {
11 | private Long id;
12 | private Long serverId;
13 | private String name;
14 | private Long port;
15 | }
16 |
17 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/dto/ServerServiceMonitorSearchParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @NoArgsConstructor
9 | @AllArgsConstructor
10 | public class ServerServiceMonitorSearchParams {
11 | private Long serverId;
12 | private String name;
13 | private Long port;
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/dto/ServerServiceMonitorUpdateParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @NoArgsConstructor
9 | @AllArgsConstructor
10 | public class ServerServiceMonitorUpdateParams {
11 | private Long id;
12 | private Long serverId;
13 | private String name;
14 | private Long port;
15 | }
16 |
17 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/dto/ServerUpdateParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.dto;
2 |
3 | import com.codeages.termiusplus.biz.server.enums.OSEnum;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | @Data
9 | @NoArgsConstructor
10 | @AllArgsConstructor
11 | public class ServerUpdateParams {
12 | private Long id;
13 | private String name;
14 | private String ip;
15 | private Boolean isGroup;
16 | private Long parentId;
17 | private String username;
18 | private String firstCommand;
19 | private Long sort;
20 | private OSEnum os;
21 | private Boolean infoTest;
22 | private Boolean autoSudo;
23 | private Boolean historyGet;
24 | private Long port;
25 | private String password;
26 | private String key;
27 | private Boolean isDb;
28 | private Boolean keepAlive;
29 | private String dbPort;
30 | private String remark;
31 | private Long proxyId;
32 | private Long proxyServerId;
33 |
34 | }
35 |
36 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/dto/TreeSortParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.dto;
2 |
3 | import com.fasterxml.jackson.annotation.JsonIgnore;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | import java.util.List;
9 |
10 | @Data
11 | @NoArgsConstructor
12 | @AllArgsConstructor
13 | public class TreeSortParams {
14 | private Long id;
15 | @JsonIgnore
16 | private Long parentId;
17 | @JsonIgnore
18 | private Long sort;
19 | private List children;
20 | }
21 |
22 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/entity/ServerServiceMonitor.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.entity;
2 |
3 | import jakarta.persistence.*;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 | import org.springframework.data.annotation.CreatedDate;
8 | import org.springframework.data.annotation.LastModifiedDate;
9 | import org.springframework.data.jpa.domain.support.AuditingEntityListener;
10 |
11 | /**
12 | * 服务监控
13 | */
14 | @Entity
15 | @Data
16 | @NoArgsConstructor
17 | @AllArgsConstructor
18 | @EntityListeners(AuditingEntityListener.class)
19 | public class ServerServiceMonitor {
20 | @Id
21 | @GeneratedValue(strategy = GenerationType.IDENTITY)
22 | private Long id;
23 | /**
24 | * 服务器ID
25 | */
26 | private Long serverId;
27 | /**
28 | * 服务名
29 | */
30 | private String name;
31 | /**
32 | * 端口
33 | */
34 | private Long port;
35 | @CreatedDate
36 | private Long createdAt;
37 | @LastModifiedDate
38 | private Long updatedAt;
39 | }
40 |
41 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/enums/LsFileTypeEnum.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.enums;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Getter;
5 |
6 | @Getter
7 | @AllArgsConstructor
8 | public enum LsFileTypeEnum {
9 | FILE,
10 | DIR
11 | }
12 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/enums/OSEnum.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.enums;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Getter;
5 |
6 | @Getter
7 | @AllArgsConstructor
8 | public enum OSEnum {
9 | LINUX,WINDOWS
10 | }
11 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/enums/PortForWardingStatusEnum.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.enums;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Getter;
5 |
6 | @Getter
7 | @AllArgsConstructor
8 | public enum PortForWardingStatusEnum {
9 | START,
10 | STOP,
11 | }
12 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/enums/ProxyTypeEnum.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.enums;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Getter;
5 |
6 | import java.net.Proxy;
7 |
8 | @Getter
9 | @AllArgsConstructor
10 | public enum ProxyTypeEnum {
11 | HTTP(3L, Proxy.Type.HTTP),
12 | SOCKET4(1L, Proxy.Type.HTTP),
13 | SOCKET5(2L, Proxy.Type.SOCKS),
14 | ;
15 |
16 | private final Long code;
17 |
18 | private final Proxy.Type Type;
19 | }
20 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/event/DeleteProxyEvent.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.event;
2 |
3 |
4 | import com.codeages.termiusplus.biz.server.dto.ProxyDto;
5 | import lombok.Getter;
6 | import org.springframework.context.ApplicationEvent;
7 |
8 | @Getter
9 | public class DeleteProxyEvent extends ApplicationEvent {
10 |
11 | private ProxyDto proxyDto;
12 |
13 | public DeleteProxyEvent(Object source, ProxyDto proxyDto) {
14 | super(source);
15 | this.proxyDto = proxyDto;
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/mapper/PortForwardingMapper.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.mapper;
2 |
3 | import com.codeages.termiusplus.biz.server.dto.*;
4 | import com.codeages.termiusplus.biz.server.entity.PortForwarding;
5 | import org.mapstruct.*;
6 |
7 | import java.util.List;
8 |
9 | @Mapper(componentModel = "spring")
10 | public interface PortForwardingMapper {
11 | PortForwarderDto toDto(PortForwarding portForwarder);
12 |
13 | @Mapping(target = "id", ignore = true)
14 | PortForwarding toEntity(PortForwarderDto portForwarderDto);
15 |
16 | List toDto(List portForwarderList);
17 | }
18 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/mapper/ProxyMapper.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.mapper;
2 |
3 | import com.codeages.termiusplus.biz.server.dto.ProxyCreateParams;
4 | import com.codeages.termiusplus.biz.server.dto.ProxyDto;
5 | import com.codeages.termiusplus.biz.server.dto.ProxyUpdateParams;
6 | import com.codeages.termiusplus.biz.server.entity.Proxy;
7 | import org.mapstruct.BeanMapping;
8 | import org.mapstruct.Mapper;
9 | import org.mapstruct.MappingTarget;
10 | import org.mapstruct.NullValuePropertyMappingStrategy;
11 |
12 | @Mapper(componentModel = "spring")
13 | public interface ProxyMapper {
14 | ProxyDto toDto(Proxy proxy);
15 |
16 | Proxy toCreateEntity(ProxyCreateParams createParams);
17 |
18 | @BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
19 | Proxy toUpdateEntity(@MappingTarget Proxy proxy, ProxyUpdateParams updateParams);
20 | }
21 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/mapper/ServerMapper.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.mapper;
2 |
3 | import com.codeages.termiusplus.biz.server.dto.ServerCreateParams;
4 | import com.codeages.termiusplus.biz.server.dto.ServerDto;
5 | import com.codeages.termiusplus.biz.server.dto.ServerUpdateParams;
6 | import com.codeages.termiusplus.biz.server.dto.TreeSortParams;
7 | import com.codeages.termiusplus.biz.server.entity.Server;
8 | import org.mapstruct.*;
9 |
10 | @Mapper(componentModel = "spring")
11 | public interface ServerMapper {
12 | ServerDto toDto(Server server);
13 |
14 | Server toCreateEntity(ServerCreateParams createParams);
15 |
16 | @Mapping(target = "sort", ignore = true)
17 | @BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
18 | Server toUpdateEntity(@MappingTarget Server server, ServerUpdateParams params);
19 |
20 | @BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
21 | Server toUpdateAllEntity(@MappingTarget Server server, TreeSortParams serverUpdateParam);
22 | }
23 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/repository/PortForWardingRepository.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.repository;
2 |
3 | import com.codeages.termiusplus.biz.server.entity.PortForwarding;
4 | import com.codeages.termiusplus.biz.server.enums.PortForWardingStatusEnum;
5 | import org.springframework.data.jpa.repository.JpaRepository;
6 | import org.springframework.data.querydsl.QuerydslPredicateExecutor;
7 |
8 | import java.util.List;
9 |
10 | public interface PortForWardingRepository extends JpaRepository, QuerydslPredicateExecutor {
11 |
12 | List findAllByStatus(PortForWardingStatusEnum status);
13 | }
14 |
15 |
16 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/repository/ProxyRepository.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.repository;
2 |
3 | import com.codeages.termiusplus.biz.server.entity.Proxy;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 | import org.springframework.data.querydsl.QuerydslPredicateExecutor;
6 |
7 | public interface ProxyRepository extends JpaRepository, QuerydslPredicateExecutor {
8 |
9 | }
10 |
11 |
12 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/repository/ServerRepository.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.repository;
2 |
3 | import com.codeages.termiusplus.biz.server.entity.Server;
4 | import com.codeages.termiusplus.biz.server.enums.OSEnum;
5 | import org.springframework.data.jpa.repository.JpaRepository;
6 | import org.springframework.data.querydsl.QuerydslPredicateExecutor;
7 |
8 | import java.util.Collection;
9 | import java.util.List;
10 | import java.util.Optional;
11 |
12 | public interface ServerRepository extends JpaRepository, QuerydslPredicateExecutor {
13 |
14 | List findAllByParentId(Long id);
15 |
16 | List findAllByParentIdIn(Collection parentId);
17 |
18 | Optional getFirstByParentIdOrderBySortDesc(Long parentId);
19 |
20 | List findAllByIsGroupTrue();
21 |
22 | List findAllByIsGroupFalse();
23 |
24 | List findAllByIsGroupAndOsAndInfoTest(Boolean isGroup, OSEnum os, Boolean infoTest);
25 |
26 | boolean existsByProxyId(Long proxyId);
27 | }
28 |
29 |
30 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/repository/ServerRunLogRepository.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.repository;
2 |
3 | import com.codeages.termiusplus.biz.server.entity.ServerRunLog;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 | import org.springframework.data.querydsl.QuerydslPredicateExecutor;
6 |
7 | import java.util.Date;
8 | import java.util.List;
9 |
10 | public interface ServerRunLogRepository extends JpaRepository, QuerydslPredicateExecutor {
11 |
12 | List findByDateAfter(Date date);
13 |
14 | List findByServerIdAndDateAfter(Long serverId, Date date);
15 | }
16 |
17 |
18 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/repository/ServerServiceMonitorRepository.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.repository;
2 |
3 | import com.codeages.termiusplus.biz.server.entity.ServerServiceMonitor;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 | import org.springframework.data.querydsl.QuerydslPredicateExecutor;
6 |
7 | public interface ServerServiceMonitorRepository extends JpaRepository, QuerydslPredicateExecutor {
8 |
9 | }
10 |
11 |
12 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/service/PortForWardingService.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.service;
2 |
3 | import com.codeages.termiusplus.biz.server.dto.PortForwarderDto;
4 |
5 | import java.util.List;
6 |
7 | public interface PortForWardingService {
8 |
9 | List list();
10 |
11 | boolean isRunning(Integer localPort);
12 |
13 | void stopAllPortForwarding();
14 |
15 | void delete(Long id);
16 |
17 | void create(PortForwarderDto portForwarderDto);
18 |
19 | void start(Long id);
20 |
21 | void update(PortForwarderDto portForwarderDto);
22 |
23 | void stop(Long id);
24 |
25 | String getLocalIp();
26 | }
27 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/service/ProxyService.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.service;
2 |
3 | import com.codeages.termiusplus.biz.server.dto.*;
4 | import org.springframework.data.domain.Page;
5 | import org.springframework.data.domain.Pageable;
6 |
7 | import java.util.List;
8 | import java.util.Optional;
9 |
10 | public interface ProxyService {
11 |
12 | Page search(ProxySearchParams searchParams, Pageable pageable);
13 |
14 | ProxyDto create(ProxyCreateParams createParams);
15 |
16 | void update(ProxyUpdateParams updateParams);
17 |
18 | void delete(Long id);
19 |
20 | Optional findById(Long proxyId);
21 |
22 | List findByIds(List proxyId);
23 |
24 | ClashProxyDTO getClashProxy();
25 |
26 | ClashProxyDTO syncClashProxy();
27 |
28 | void syncProxyOpen();
29 | }
30 |
31 |
32 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/server/service/ServerServiceMonitorService.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.server.service;
2 |
3 | import com.codeages.termiusplus.biz.server.dto.ServerServiceMonitorCreateParams;
4 | import com.codeages.termiusplus.biz.server.dto.ServerServiceMonitorDto;
5 | import com.codeages.termiusplus.biz.server.dto.ServerServiceMonitorSearchParams;
6 | import com.codeages.termiusplus.biz.server.dto.ServerServiceMonitorUpdateParams;
7 | import org.springframework.data.domain.Page;
8 | import org.springframework.data.domain.Pageable;
9 |
10 | public interface ServerServiceMonitorService {
11 |
12 | Page search(ServerServiceMonitorSearchParams searchParams, Pageable pageable);
13 |
14 | void create(ServerServiceMonitorCreateParams createParams);
15 |
16 | void update(ServerServiceMonitorUpdateParams updateParams);
17 |
18 | void delete(Long id);
19 | }
20 |
21 |
22 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/snippet/dto/CommandCreateParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.snippet.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @NoArgsConstructor
9 | @AllArgsConstructor
10 | public class CommandCreateParams {
11 | private String name;
12 | private String command;
13 | private String remark;
14 | private String serverIds;
15 | }
16 |
17 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/snippet/dto/CommandDto.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.snippet.dto;
2 |
3 | import com.codeages.termiusplus.biz.server.dto.ServerDto;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | import java.util.List;
9 |
10 | @Data
11 | @NoArgsConstructor
12 | @AllArgsConstructor
13 | public class CommandDto {
14 | private Long id;
15 | private String name;
16 | private String command;
17 | private String remark;
18 | private String serverIds;
19 | private List serverDtos;
20 | }
21 |
22 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/snippet/dto/CommandSearchParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.snippet.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @NoArgsConstructor
9 | @AllArgsConstructor
10 | public class CommandSearchParams {
11 | private String name;
12 | private String command;
13 | private String remark;
14 | private String serverIds;
15 | }
16 |
17 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/snippet/dto/CommandUpdateParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.snippet.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @NoArgsConstructor
9 | @AllArgsConstructor
10 | public class CommandUpdateParams {
11 | private Long id;
12 | private String name;
13 | private String command;
14 | private String remark;
15 | private String serverIds;
16 | }
17 |
18 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/snippet/mapper/CommandMapper.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.snippet.mapper;
2 |
3 | import com.codeages.termiusplus.biz.snippet.dto.CommandCreateParams;
4 | import com.codeages.termiusplus.biz.snippet.dto.CommandDto;
5 | import com.codeages.termiusplus.biz.snippet.dto.CommandUpdateParams;
6 | import com.codeages.termiusplus.biz.snippet.entity.Command;
7 | import org.mapstruct.BeanMapping;
8 | import org.mapstruct.Mapper;
9 | import org.mapstruct.MappingTarget;
10 | import org.mapstruct.NullValuePropertyMappingStrategy;
11 |
12 | @Mapper(componentModel = "spring")
13 | public interface CommandMapper {
14 | CommandDto toDto(Command command);
15 |
16 | Command toCreateEntity(CommandCreateParams createParams);
17 |
18 | @BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
19 | Command toUpdateEntity(@MappingTarget Command command, CommandUpdateParams updateParams);
20 | }
21 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/snippet/repository/CommandRepository.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.snippet.repository;
2 |
3 | import com.codeages.termiusplus.biz.snippet.entity.Command;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 | import org.springframework.data.querydsl.QuerydslPredicateExecutor;
6 |
7 | public interface CommandRepository extends JpaRepository, QuerydslPredicateExecutor {
8 |
9 | }
10 |
11 |
12 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/snippet/service/CommandService.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.snippet.service;
2 |
3 | import com.codeages.termiusplus.biz.snippet.dto.CommandCreateParams;
4 | import com.codeages.termiusplus.biz.snippet.dto.CommandDto;
5 | import com.codeages.termiusplus.biz.snippet.dto.CommandSearchParams;
6 | import com.codeages.termiusplus.biz.snippet.dto.CommandUpdateParams;
7 | import org.springframework.data.domain.Page;
8 | import org.springframework.data.domain.Pageable;
9 |
10 | public interface CommandService {
11 |
12 | Page search(CommandSearchParams searchParams, Pageable pageable);
13 |
14 | void create(CommandCreateParams createParams);
15 |
16 | void update(CommandUpdateParams updateParams);
17 |
18 | void delete(Long id);
19 | }
20 |
21 |
22 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/storage/dto/FileCreationDTO.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.storage.dto;
2 |
3 | import com.codeages.termiusplus.biz.storage.enums.FileTargetTypeEnum;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Data;
6 |
7 | import java.util.Date;
8 |
9 | @Data
10 | @AllArgsConstructor
11 | public class FileCreationDTO {
12 | private String name;
13 | private String ext;
14 | private Long size;
15 | private Long userId;
16 | private String uri;
17 | private FileTargetTypeEnum targetType;
18 | private String uuid;
19 | private Date uploadTime;
20 | }
21 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/storage/dto/FileFindInfoParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.storage.dto;
2 |
3 | import jakarta.validation.constraints.NotNull;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | import java.util.List;
9 |
10 | @Data
11 | @AllArgsConstructor
12 | @NoArgsConstructor
13 | public class FileFindInfoParams {
14 | @NotNull
15 | List uuids;
16 | }
17 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/storage/enums/FileTargetTypeEnum.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.storage.enums;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Getter;
5 |
6 | @Getter
7 | @AllArgsConstructor
8 | public enum FileTargetTypeEnum {
9 | /**
10 | * 基础文件
11 | */
12 | BASE,
13 | /**
14 | * 公共文件,不需要校验
15 | */
16 | PUBLIC,
17 | /**
18 | * 导入文件
19 | */
20 | IMPORT,
21 | /**
22 | * 导出文件
23 | */
24 | EXPORT,
25 | }
26 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/storage/mapper/FileMapper.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.storage.mapper;
2 |
3 | import com.codeages.termiusplus.biz.storage.dto.FileCreationDTO;
4 | import com.codeages.termiusplus.biz.storage.entity.File;
5 | import com.codeages.termiusplus.biz.storage.vo.FileDto;
6 | import org.mapstruct.Mapper;
7 |
8 | @Mapper(componentModel = "spring")
9 | public interface FileMapper {
10 | FileDto toVO(File file);
11 |
12 | File toEntity(FileCreationDTO dto);
13 | }
14 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/storage/repository/FileRepository.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.storage.repository;
2 |
3 | import com.codeages.termiusplus.biz.storage.entity.File;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 | import org.springframework.data.querydsl.QuerydslPredicateExecutor;
6 |
7 | import java.util.Collection;
8 | import java.util.List;
9 | import java.util.Optional;
10 |
11 | public interface FileRepository extends JpaRepository, QuerydslPredicateExecutor {
12 |
13 | Optional getByUuid(String uuid);
14 |
15 | List findAllByUuidIn(Collection uuid);
16 | }
17 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/storage/service/StorageService.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.storage.service;
2 |
3 |
4 | import com.codeages.termiusplus.biz.storage.entity.File;
5 | import com.codeages.termiusplus.biz.storage.enums.FileTargetTypeEnum;
6 | import com.codeages.termiusplus.biz.storage.vo.FileDto;
7 | import org.springframework.web.multipart.MultipartFile;
8 |
9 | import java.io.ByteArrayOutputStream;
10 | import java.util.List;
11 |
12 | public interface StorageService {
13 | FileDto store(MultipartFile file, FileTargetTypeEnum targetType);
14 |
15 | FileDto store(java.io.File file, FileTargetTypeEnum targetType);
16 |
17 | File getFileByUUID(String uuid);
18 |
19 | FileDto getFileInfo(String uuid);
20 |
21 | File getPublicFileByUUID(String uuid);
22 |
23 | List findFileInfo(List uuids);
24 |
25 | void deleteFile(String uuid);
26 |
27 | FileDto store(ByteArrayOutputStream outputStream, String fileName, FileTargetTypeEnum targetType);
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/storage/vo/FileDto.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.storage.vo;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | import java.util.Date;
8 |
9 | @Data
10 | @NoArgsConstructor
11 | @AllArgsConstructor
12 | public class FileDto {
13 | private String name;
14 | private String ext;
15 | private Long size;
16 | private Long userId;
17 | private String username;
18 | private String uuid;
19 | private String uri;
20 | private Date uploadTime;
21 | }
22 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/storage/vo/FileVo.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.storage.vo;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | import java.util.Date;
8 |
9 | @Data
10 | @NoArgsConstructor
11 | @AllArgsConstructor
12 | public class FileVo {
13 | private String name;
14 | private String ext;
15 | private Long size;
16 | private Long userId;
17 | private Long userName;
18 | private String uuid;
19 | private String uri;
20 | private Date uploadTime;
21 | }
22 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/user/dto/ChangePasswordParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.user.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @NoArgsConstructor
9 | @AllArgsConstructor
10 | public class ChangePasswordParams {
11 | private Long userId;
12 | private String oldPassword;
13 | private String newPassword;
14 | }
15 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/user/dto/LoginParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.user.dto;
2 |
3 | import lombok.Data;
4 |
5 | @Data
6 | public class LoginParams {
7 | private String username;
8 |
9 | private String password;
10 | }
11 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/user/dto/RoleCreateParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.user.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @NoArgsConstructor
9 | @AllArgsConstructor
10 | public class RoleCreateParams {
11 | private String name;
12 | private String serverPermission;
13 | }
14 |
15 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/user/dto/RoleDto.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.user.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @NoArgsConstructor
9 | @AllArgsConstructor
10 | public class RoleDto {
11 | private Long id;
12 | private String name;
13 | private String serverPermission;
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/user/dto/RoleSearchParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.user.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @NoArgsConstructor
9 | @AllArgsConstructor
10 | public class RoleSearchParams {
11 | private String name;
12 | private String serverPermission;
13 | }
14 |
15 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/user/dto/RoleUpdateParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.user.dto;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @NoArgsConstructor
9 | @AllArgsConstructor
10 | public class RoleUpdateParams {
11 | private Long id;
12 | private String name;
13 | private String serverPermission;
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/user/dto/UserAuthedDto.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.user.dto;
2 |
3 | import com.fasterxml.jackson.annotation.JsonIgnore;
4 | import lombok.Data;
5 |
6 | import java.util.List;
7 |
8 | @Data
9 | public class UserAuthedDto {
10 | private Long id;
11 |
12 | private String username;
13 |
14 | @JsonIgnore
15 | private String password;
16 |
17 | private List roles;
18 |
19 | private List roleIds;
20 |
21 | private String token;
22 | }
23 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/user/dto/UserCreateParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.user.dto;
2 |
3 | import jakarta.validation.constraints.Email;
4 | import jakarta.validation.constraints.NotEmpty;
5 | import lombok.Data;
6 | import org.hibernate.validator.constraints.Length;
7 |
8 | import java.util.List;
9 |
10 | @Data
11 | public class UserCreateParams {
12 | @NotEmpty
13 | @Length(min = 2, max = 64)
14 | private String username;
15 |
16 | @NotEmpty
17 | @Length(min = 5, max = 64)
18 | private String password;
19 |
20 | @Email
21 | private String email;
22 |
23 | private List roleIds;
24 | }
25 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/user/dto/UserDto.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.user.dto;
2 |
3 | import lombok.Data;
4 |
5 | import java.util.List;
6 |
7 | @Data
8 | public class UserDto {
9 |
10 | private Long id;
11 |
12 | private String username;
13 |
14 | private Boolean locked;
15 |
16 | private String email;
17 |
18 | private String avatar;
19 |
20 | private Long registerAt;
21 |
22 | private String registerIp;
23 |
24 | private Long loginAt;
25 |
26 | private String loginIp;
27 |
28 | private List roleIds;
29 | }
30 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/user/dto/UserSearchParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.user.dto;
2 |
3 | import lombok.Data;
4 |
5 | @Data
6 | public class UserSearchParams {
7 |
8 | private String username;
9 |
10 | private String email;
11 | }
12 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/user/dto/UserSimpleDto.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.user.dto;
2 |
3 | import lombok.Data;
4 |
5 | @Data
6 | public class UserSimpleDto {
7 | private Long id;
8 |
9 | private String username;
10 |
11 | private String avatar;
12 | }
13 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/user/dto/UserUpdateParams.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.user.dto;
2 |
3 | import jakarta.validation.constraints.NotEmpty;
4 | import lombok.Data;
5 |
6 | import java.util.List;
7 |
8 | @Data
9 | public class UserUpdateParams {
10 | private Long id;
11 |
12 | @NotEmpty
13 | private String password;
14 |
15 | private List roleIds;
16 | }
17 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/user/dto/UserWithRolesDto.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.user.dto;
2 |
3 | import lombok.Data;
4 |
5 | import java.util.ArrayList;
6 | import java.util.List;
7 |
8 | @Data
9 | public class UserWithRolesDto extends UserDto {
10 |
11 | private List roles = new ArrayList<>();
12 | }
13 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/user/entity/Role.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.user.entity;
2 |
3 | import jakarta.persistence.*;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 | import org.springframework.data.annotation.CreatedDate;
8 | import org.springframework.data.annotation.LastModifiedDate;
9 | import org.springframework.data.jpa.domain.support.AuditingEntityListener;
10 |
11 | /**
12 | * 角色
13 | */
14 | @Entity
15 | @Data
16 | @NoArgsConstructor
17 | @AllArgsConstructor
18 | @EntityListeners(AuditingEntityListener.class)
19 | public class Role {
20 | @Id
21 | @GeneratedValue(strategy = GenerationType.IDENTITY)
22 | private Long id;
23 | /**
24 | * 角色名
25 | */
26 | private String name;
27 | /**
28 | * 服务器权限
29 | */
30 | private String serverPermission;
31 | @CreatedDate
32 | private Long createdAt;
33 | @LastModifiedDate
34 | private Long updatedAt;
35 | }
36 |
37 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/user/entity/UserRole.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.user.entity;
2 |
3 | import jakarta.persistence.*;
4 | import lombok.Data;
5 | import org.springframework.data.annotation.CreatedDate;
6 | import org.springframework.data.annotation.LastModifiedDate;
7 | import org.springframework.data.jpa.domain.support.AuditingEntityListener;
8 |
9 | @Entity
10 | @EntityListeners(AuditingEntityListener.class)
11 | @Data
12 | public class UserRole {
13 | @Id
14 | @GeneratedValue(strategy = GenerationType.IDENTITY)
15 | private Long id;
16 |
17 | private Long userId;
18 |
19 | private Long roleId;
20 |
21 | @CreatedDate
22 | private Long createdAt;
23 |
24 | @LastModifiedDate
25 | private Long updatedAt;
26 | }
27 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/user/mapper/RoleMapper.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.user.mapper;
2 |
3 | import com.codeages.termiusplus.biz.user.dto.RoleCreateParams;
4 | import com.codeages.termiusplus.biz.user.dto.RoleDto;
5 | import com.codeages.termiusplus.biz.user.dto.RoleUpdateParams;
6 | import com.codeages.termiusplus.biz.user.entity.Role;
7 | import org.mapstruct.BeanMapping;
8 | import org.mapstruct.Mapper;
9 | import org.mapstruct.MappingTarget;
10 | import org.mapstruct.NullValuePropertyMappingStrategy;
11 |
12 | import java.util.List;
13 |
14 | @Mapper(componentModel = "spring")
15 | public interface RoleMapper {
16 | RoleDto toDto(Role role);
17 |
18 | List toDto(List role);
19 |
20 | Role toCreateEntity(RoleCreateParams createParams);
21 |
22 | @BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
23 | Role toUpdateEntity(@MappingTarget Role role, RoleUpdateParams updateParams);
24 | }
25 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/user/mapper/UserMapper.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.user.mapper;
2 |
3 | import com.codeages.termiusplus.biz.user.dto.UserCreateParams;
4 | import com.codeages.termiusplus.biz.user.dto.UserDto;
5 | import com.codeages.termiusplus.biz.user.dto.UserWithRolesDto;
6 | import com.codeages.termiusplus.biz.user.entity.User;
7 | import org.mapstruct.*;
8 |
9 | import java.util.List;
10 |
11 | @Mapper(componentModel = "spring")
12 | public interface UserMapper {
13 |
14 | @Named(value = "toDto")
15 | UserDto toDto(User user);
16 |
17 | @IterableMapping(qualifiedByName = "toDto")
18 | List toDto(List user);
19 |
20 | UserWithRolesDto toWithRolesDto(User user);
21 |
22 | @BeanMapping(nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
23 | User toEntity(UserCreateParams params);
24 | }
25 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/user/repository/RoleRepository.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.user.repository;
2 |
3 | import com.codeages.termiusplus.biz.user.entity.Role;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 | import org.springframework.data.querydsl.QuerydslPredicateExecutor;
6 |
7 | import java.util.List;
8 |
9 | public interface RoleRepository extends JpaRepository, QuerydslPredicateExecutor {
10 |
11 | List findAllByIdIn(List userRoleIds);
12 |
13 | Role findFirstByName(String name);
14 | }
15 |
16 |
17 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/user/repository/UserRepository.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.user.repository;
2 |
3 | import com.codeages.termiusplus.biz.user.entity.User;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 | import org.springframework.data.querydsl.QuerydslPredicateExecutor;
6 |
7 | import java.util.List;
8 | import java.util.Optional;
9 |
10 | public interface UserRepository extends JpaRepository, QuerydslPredicateExecutor {
11 | Optional getByUsername(String username);
12 |
13 | List findAllByIdIn(List ids);
14 | }
15 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/user/repository/UserRoleRepository.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.user.repository;
2 |
3 | import com.codeages.termiusplus.biz.user.entity.UserRole;
4 | import org.springframework.data.jpa.repository.JpaRepository;
5 | import org.springframework.data.querydsl.QuerydslPredicateExecutor;
6 |
7 | import java.util.List;
8 |
9 | public interface UserRoleRepository extends JpaRepository, QuerydslPredicateExecutor {
10 |
11 | List findAllByUserId(Long userId);
12 |
13 | List findAllByUserIdIn(List userIds);
14 |
15 | void deleteAllByUserId(Long id);
16 | }
17 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/user/schdule/UserDailyReportJob.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.user.schdule;
2 |
3 | import lombok.extern.slf4j.Slf4j;
4 | import org.quartz.JobExecutionContext;
5 | import org.quartz.JobExecutionException;
6 | import org.springframework.scheduling.quartz.QuartzJobBean;
7 | import org.springframework.stereotype.Component;
8 |
9 | /**
10 | * 用户每日报告 Job
11 | */
12 | @Slf4j
13 | @Component
14 | public class UserDailyReportJob extends QuartzJobBean {
15 |
16 | @Override
17 | protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
18 | log.info("UserDailyReportJob execute");
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/user/schdule/UserMetricsStatsJob.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.user.schdule;
2 |
3 | import lombok.extern.slf4j.Slf4j;
4 | import org.quartz.JobExecutionContext;
5 | import org.quartz.JobExecutionException;
6 | import org.springframework.scheduling.quartz.QuartzJobBean;
7 | import org.springframework.stereotype.Component;
8 |
9 | /**
10 | * 用户指标 Job
11 | */
12 | @Component
13 | @Slf4j
14 | public class UserMetricsStatsJob extends QuartzJobBean {
15 | @Override
16 | protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
17 | log.info("UserMetricsStatsJob execute");
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/user/service/RoleService.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.user.service;
2 |
3 | import com.codeages.termiusplus.biz.user.dto.RoleCreateParams;
4 | import com.codeages.termiusplus.biz.user.dto.RoleDto;
5 | import com.codeages.termiusplus.biz.user.dto.RoleSearchParams;
6 | import com.codeages.termiusplus.biz.user.dto.RoleUpdateParams;
7 | import org.springframework.data.domain.Page;
8 | import org.springframework.data.domain.Pageable;
9 |
10 | import java.util.List;
11 |
12 | public interface RoleService {
13 |
14 | Page search(RoleSearchParams searchParams, Pageable pageable);
15 |
16 | void create(RoleCreateParams createParams);
17 |
18 | void update(RoleUpdateParams updateParams);
19 |
20 | void delete(Long id);
21 |
22 | List findByIds(List ids);
23 |
24 | RoleDto findByName(String name);
25 | }
26 |
27 |
28 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/user/service/UserAuthService.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.user.service;
2 |
3 | import com.codeages.termiusplus.biz.user.dto.LoginParams;
4 | import com.codeages.termiusplus.biz.user.dto.UserAuthedDto;
5 | import jakarta.servlet.http.HttpServletRequest;
6 | import jakarta.servlet.http.HttpServletResponse;
7 |
8 | public interface UserAuthService {
9 |
10 | UserAuthedDto login(LoginParams params, HttpServletRequest request, HttpServletResponse response);
11 |
12 | /**
13 | * 认证 Token
14 | *
15 | * @param token
16 | * @return
17 | */
18 | UserAuthedDto auth(String token);
19 | }
20 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/user/service/UserService.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.user.service;
2 |
3 | import com.codeages.termiusplus.biz.user.dto.*;
4 | import org.springframework.data.domain.Page;
5 | import org.springframework.data.domain.Pageable;
6 |
7 | import java.util.List;
8 | import java.util.Optional;
9 |
10 | public interface UserService {
11 |
12 | UserDto create(UserCreateParams params);
13 |
14 | UserDto update(UserUpdateParams params);
15 |
16 | void lock(Long id);
17 |
18 | void unlock(Long id);
19 |
20 | Optional get(Long id);
21 |
22 | Optional getByUsername(String name);
23 |
24 | Page search(UserSearchParams params, Pageable pager);
25 |
26 | List findAllByIdIn(List ids);
27 |
28 | void changePassword(ChangePasswordParams params);
29 |
30 | String resetPassword(Long id);
31 | }
32 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/util/FileSizeFormatter.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.util;
2 |
3 | import java.text.DecimalFormat;
4 |
5 | public class FileSizeFormatter {
6 | public static final int ONE_MB = 1024 * 1024; // 1MB的大小
7 | private static final String[] FILE_SIZE_UNITS = {"B", "KB", "MB", "GB", "TB", "PB"}; // 文件大小单位数组
8 | private static final int UNIT_SIZE = 1024; // 每个单位的大小
9 |
10 | public static String formatFileSize(long size) {
11 | if (size <= 0) {
12 | return "0B"; // 大小为0或负数
13 | }
14 |
15 | int digitGroups = (int) (Math.log10(size) / Math.log10(UNIT_SIZE));
16 | if (digitGroups >= FILE_SIZE_UNITS.length) {
17 | digitGroups = FILE_SIZE_UNITS.length - 1; // 超过最大单位
18 | }
19 |
20 | DecimalFormat decimalFormat = new DecimalFormat("#,##0.#");
21 | double formattedSize = size / Math.pow(UNIT_SIZE, digitGroups);
22 | String unit = FILE_SIZE_UNITS[digitGroups];
23 |
24 | return decimalFormat.format(formattedSize) + unit;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/util/TreeUtils.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.util;
2 |
3 | import cn.hutool.core.collection.CollectionUtil;
4 | import com.codeages.termiusplus.biz.server.dto.TreeSortParams;
5 |
6 | import java.util.List;
7 |
8 | public class TreeUtils {
9 |
10 | public static void rebuildSeq(TreeSortParams treeSortParams) {
11 | List children = treeSortParams.getChildren();
12 | if (CollectionUtil.isEmpty(children)) {
13 | return;
14 | }
15 |
16 | for (int i = 0; i < children.size(); i++) {
17 | rebuildSeq(treeSortParams.getChildren().get(i));
18 |
19 | treeSortParams.getChildren().get(i).setSort((long) i);
20 | }
21 | }
22 |
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/util/command/CpuUsage.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.util.command;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @AllArgsConstructor
9 | @NoArgsConstructor
10 | public class CpuUsage {
11 | private Double us;
12 | private Double sy;
13 | private Double id;
14 | }
15 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/util/command/DiskUsage.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.util.command;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @AllArgsConstructor
9 | @NoArgsConstructor
10 | public class DiskUsage {
11 | private String filesystem;
12 | private String size;
13 | private String used;
14 | private String available;
15 | private String use;
16 | private String mountedOn;
17 | }
18 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/biz/util/command/NetworkUsage.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.biz.util.command;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @AllArgsConstructor
9 | @NoArgsConstructor
10 | public class NetworkUsage {
11 | private String interfaceName;
12 | private double receiveBytes;
13 | private double transmitBytes;
14 | }
15 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/common/ErrorCodeInterface.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.common;
2 |
3 | public interface ErrorCodeInterface {
4 |
5 | String getCode();
6 |
7 | String getMessage();
8 |
9 | int getStatus();
10 | }
11 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/common/IdPayload.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.common;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @AllArgsConstructor
8 | @Data
9 | @NoArgsConstructor
10 | public class IdPayload {
11 | private Long id;
12 | }
13 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/common/OkResponse.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.common;
2 |
3 | public class OkResponse {
4 |
5 | public static final OkResponse TRUE = new OkResponse();
6 |
7 | private OkResponse() {
8 |
9 | }
10 |
11 | public Boolean getOk() {
12 | return true;
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/common/PagerResponse.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.common;
2 |
3 |
4 | import lombok.Data;
5 | import org.springframework.data.domain.Page;
6 | import org.springframework.data.domain.Pageable;
7 |
8 | import java.util.List;
9 |
10 | @Data
11 | public class PagerResponse {
12 |
13 | public PagerResponse(Page pageData, Pageable pageRequest) {
14 | this.data = pageData.getContent();
15 | this.total = pageData.getTotalElements();
16 | this.page = pageRequest.getPageNumber();
17 | this.size = pageRequest.getPageSize();
18 | }
19 |
20 | public PagerResponse(List data, Long total, Pageable pageRequest) {
21 | this.data = data;
22 | this.total = total;
23 | this.page = pageRequest.getPageNumber();
24 | this.size = pageRequest.getPageSize();
25 | }
26 |
27 | private List data;
28 |
29 | private int page;
30 |
31 | private int size;
32 |
33 | private long total;
34 | }
35 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/common/cache/CacheGetCallable.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.common.cache;
2 |
3 | import java.util.Optional;
4 |
5 | @FunctionalInterface
6 | public interface CacheGetCallable {
7 | Optional get();
8 | }
9 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/common/cache/IdObject.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.common.cache;
2 |
3 | public interface IdObject {
4 | Long getId();
5 | }
6 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/config/AppConfig.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.config;
2 |
3 | import org.springframework.core.env.Environment;
4 | import org.springframework.stereotype.Component;
5 |
6 | @Component
7 | public class AppConfig {
8 | private final Environment env;
9 |
10 | public AppConfig(Environment env) {
11 | this.env = env;
12 | }
13 |
14 | public String secret() {
15 | return env.getProperty("app.secret");
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/config/DingerConfigSender.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.config;
2 |
3 | import org.springframework.context.annotation.ComponentScan;
4 | import org.springframework.context.annotation.Configuration;
5 | import org.springframework.stereotype.Component;
6 |
7 | @Component
8 | @Configuration
9 | @ComponentScan(basePackages = {"com.github.jaemon.dinger.config"})
10 | public class DingerConfigSender {
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/config/SchedulerConfiguration.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.config;
2 |
3 | import lombok.extern.slf4j.Slf4j;
4 | import net.javacrumbs.shedlock.core.LockProvider;
5 | import net.javacrumbs.shedlock.provider.redis.spring.RedisLockProvider;
6 | import org.springframework.context.annotation.Bean;
7 | import org.springframework.context.annotation.Configuration;
8 | import org.springframework.context.annotation.Primary;
9 | import org.springframework.data.redis.connection.RedisConnectionFactory;
10 |
11 |
12 | @Configuration
13 | @Slf4j
14 | public class SchedulerConfiguration {
15 |
16 | @Bean
17 | @Primary
18 | //我不想创建表。所以我优先使用了redis的驱动支持类
19 | public LockProvider redisLockProvider(RedisConnectionFactory redisConnectionFactory) {
20 | return new RedisLockProvider(redisConnectionFactory);
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/config/ServerSocketFactory.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.config;
2 |
3 | import lombok.SneakyThrows;
4 | import org.springframework.context.annotation.Bean;
5 | import org.springframework.stereotype.Component;
6 |
7 | import java.net.ServerSocket;
8 |
9 | @Component
10 | public class ServerSocketFactory {
11 |
12 | @Bean
13 | @SneakyThrows
14 | public ServerSocket createServerSocket() {
15 | return new ServerSocket(0);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/exception/AppErrorAttributes.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.exception;
2 |
3 | import org.springframework.boot.web.error.ErrorAttributeOptions;
4 | import org.springframework.boot.web.servlet.error.DefaultErrorAttributes;
5 | import org.springframework.web.context.request.WebRequest;
6 |
7 | import java.util.Map;
8 |
9 | public class AppErrorAttributes extends DefaultErrorAttributes {
10 |
11 | @Override
12 | public Map getErrorAttributes(WebRequest webRequest, ErrorAttributeOptions options) {
13 | var attrs = super.getErrorAttributes(webRequest, options);
14 | var error = AppError.fromAttributeMap(attrs);
15 | return error.toAttributeMap();
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/exception/AppErrorConfig.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.exception;
2 |
3 | import org.springframework.boot.web.servlet.error.ErrorAttributes;
4 | import org.springframework.context.annotation.Bean;
5 | import org.springframework.context.annotation.Configuration;
6 |
7 | @Configuration
8 | public class AppErrorConfig {
9 |
10 | @Bean
11 | public ErrorAttributes errorAttributes() {
12 | return new AppErrorAttributes();
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/security/PasswordEncoderConfig.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.security;
2 |
3 | import org.springframework.context.annotation.Bean;
4 | import org.springframework.context.annotation.Configuration;
5 | import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
6 | import org.springframework.security.crypto.password.PasswordEncoder;
7 |
8 | @Configuration
9 | public class PasswordEncoderConfig {
10 | @Bean
11 | public PasswordEncoder passwordEncoder() {
12 | return new BCryptPasswordEncoder();
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/security/SecurityContext.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.security;
2 |
3 | import org.springframework.security.core.context.SecurityContextHolder;
4 | import org.springframework.stereotype.Component;
5 |
6 | @Component
7 | public class SecurityContext {
8 | public AuthUser getUser() {
9 | return (AuthUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/security/UriConfig.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.security;
2 |
3 | import lombok.Data;
4 | import org.springframework.boot.context.properties.ConfigurationProperties;
5 | import org.springframework.stereotype.Component;
6 |
7 | import java.util.List;
8 |
9 | @Data
10 | @Component
11 | @ConfigurationProperties(prefix = "public")
12 | public class UriConfig {
13 | private List uri;
14 | }
15 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/ws/ssh/AuthEditSessionDto.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.ws.ssh;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @AllArgsConstructor
9 | @NoArgsConstructor
10 | public class AuthEditSessionDto {
11 | private String username;
12 | private String sessionId;
13 | private Boolean result;
14 | }
15 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/ws/ssh/AuthKeyBoardDto.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.ws.ssh;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @Data
8 | @AllArgsConstructor
9 | @NoArgsConstructor
10 | public class AuthKeyBoardDto {
11 | private String serverKey;
12 | private String password;
13 | }
14 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/ws/ssh/EventType.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.ws.ssh;
2 |
3 | public enum EventType {
4 | RESIZE,
5 | COMMAND,
6 | AUTH_KEYBOARD,
7 | SESSION,
8 | JOIN_SESSION,
9 | LEAVE_SESSION,
10 | REQUEST_AUTH_EDIT_SESSION,
11 | RESPONSE_AUTH_EDIT_SESSION,
12 | MASTER_CLOSE,
13 | SFTP_SERVER_UPLOAD_SERVER_PROGRESS,
14 | }
15 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/ws/ssh/MessageDto.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.ws.ssh;
2 |
3 | import cn.hutool.json.JSONUtil;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | @Data
9 | @AllArgsConstructor
10 | @NoArgsConstructor
11 | public class MessageDto {
12 | private EventType event;
13 | private String data;
14 |
15 | public static MessageDto parse(String message) {
16 | return JSONUtil.toBean(message, MessageDto.class);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/ws/ssh/RequestAuthEditSessionDto.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.ws.ssh;
2 |
3 | public class RequestAuthEditSessionDto {
4 | }
5 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/ws/ssh/ResizeDto.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.ws.ssh;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @AllArgsConstructor
8 | @NoArgsConstructor
9 | @Data
10 | public class ResizeDto {
11 | private int cols;
12 | private int rows;
13 | private int width;
14 | private int height;
15 | }
16 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/ws/ssh/RollingString.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.ws.ssh;
2 |
3 | public class RollingString {
4 | private final StringBuilder stringBuilder;
5 | private int maxLength = 512;
6 |
7 | public RollingString() {
8 | this.stringBuilder = new StringBuilder();
9 | }
10 |
11 | public RollingString(int maxLength) {
12 | this.stringBuilder = new StringBuilder();
13 | this.maxLength = maxLength;
14 | }
15 |
16 | public void append(String str) {
17 | if (str == null) return;
18 |
19 | // 计算新的总长度
20 | int newLength = stringBuilder.length() + str.length();
21 |
22 | // 添加新字符串
23 | stringBuilder.append(str);
24 |
25 | // 如果总长度超过最大限制,进行删除
26 | if (newLength > maxLength) {
27 | // 计算需要删除的字符数
28 | int charsToDelete = newLength - maxLength;
29 | // 删除开头的字符
30 | stringBuilder.delete(0, charsToDelete);
31 | }
32 | }
33 |
34 | @Override
35 | public String toString() {
36 | return stringBuilder.toString();
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/server/src/main/java/com/codeages/termiusplus/ws/ssh/SftpServerUploadServerProgressDto.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus.ws.ssh;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 |
7 | @AllArgsConstructor
8 | @Data
9 | @NoArgsConstructor
10 | public class SftpServerUploadServerProgressDto {
11 | private String sourceServerName;
12 | private String sourceFileName;
13 | private String targetServerName;
14 | private String targetFileName;
15 | private Long progress;
16 | private String sourceId;
17 | private String targetId;
18 | private String taskId;
19 | }
20 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2022.0325.000139__ObjectLog.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE `object_log` (
2 | `id` bigint unsigned NOT NULL AUTO_INCREMENT,
3 | `level` enum('info','warn','error') NOT NULL COMMENT '日志级别(info,warn,error)',
4 | `type` varchar(64) NOT NULL COMMENT '对象类型',
5 | `oid` bigint UNSIGNED NOT NULL DEFAULT '0' COMMENT '对象ID',
6 | `event` varchar(32) NOT NULL COMMENT '事件名',
7 | `message` longtext DEFAULT NULL COMMENT '日志内容',
8 | `context` json DEFAULT NULL COMMENT '上下文数据',
9 | `operator_id` bigint UNSIGNED NOT NULL DEFAULT '0' COMMENT '操作人用户ID(0: 表示系统用户)',
10 | `created_at` bigint UNSIGNED NOT NULL,
11 | PRIMARY KEY (`id`)
12 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='业务对象日志表';
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2022.1017.162009__initEsee.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE `file`
2 | (
3 | `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
4 | `target_type` varchar(32) not NULL COMMENT '所属分类',
5 | `name` varchar(1024) CHARACTER SET utf8 NOT NULL COMMENT '文件原名',
6 | `ext` varchar(16) CHARACTER SET utf8 NOT NULL COMMENT '文件格式',
7 | `size` int(10) NOT NULL COMMENT '文件大小',
8 | `user_id` int(10) DEFAULT NULL COMMENT '上传人',
9 | `uri` varchar(512) CHARACTER SET utf8 NOT NULL COMMENT '存储地址',
10 | `uuid` varchar(32) CHARACTER SET utf8 NOT NULL COMMENT 'uuid',
11 | `created_at` bigint(20) unsigned NOT NULL,
12 | `updated_at` bigint(20) unsigned NOT NULL,
13 | PRIMARY KEY (`id`)
14 | ) ENGINE = InnoDB
15 | DEFAULT CHARSET = utf8mb4
16 | COLLATE = utf8mb4_general_ci COMMENT ='文件';
17 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2023.1001.201443__feature.sql:
--------------------------------------------------------------------------------
1 | #给server表加parent_id字段,is_group字段
2 | alter table server add column parent_id bigint unsigned not null default 0 comment '父组ID';
3 | alter table server add column is_group tinyint unsigned not null default 0 comment '是否为组';
4 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2023.1001.201812__feature.sql:
--------------------------------------------------------------------------------
1 | #给server表加sort字段
2 | alter table server add column sort bigint unsigned not null default 0;
3 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2023.1002.000153__feature.sql:
--------------------------------------------------------------------------------
1 | alter table server add column username varchar(256) not null default 'root';
2 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2023.1002.002948__feature.sql:
--------------------------------------------------------------------------------
1 | alter table server add column auto_sudo tinyint unsigned not null default 1 comment '自动sudo';
2 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2023.1002.011801__feature.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE server DROP COLUMN `group_id`;
2 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2023.1003.001706__feature.sql:
--------------------------------------------------------------------------------
1 | alter table proxy add column name varchar(256) not null default '';
2 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2023.1003.212412__feature.sql:
--------------------------------------------------------------------------------
1 | #添加一个服务器连接时执行命令
2 | alter table server add column first_command varchar(256) default null;
3 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2023.1007.142633__init.sql:
--------------------------------------------------------------------------------
1 | alter table server
2 | modify column `key` text default null;
3 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2023.1201.103917__addServerRremark.sql:
--------------------------------------------------------------------------------
1 | #添加一个备注字段,可以填写富文本
2 | alter table `server`
3 | add `remark` longtext default null comment '备注';
4 |
5 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2023.1201.134453__addServerRremark.sql:
--------------------------------------------------------------------------------
1 | alter table `file` add upload_time datetime default null comment '上传时间';
2 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2023.1204.110239__featureCommand.sql:
--------------------------------------------------------------------------------
1 | create table `command`
2 | (
3 | `id` bigint unsigned NOT NULL AUTO_INCREMENT,
4 | `name` varchar(256) not null default '' comment '命令名称',
5 | `command` varchar(256) not null default '' comment '命令',
6 | `remark` longtext default null comment '备注',
7 | `created_at` bigint unsigned not null,
8 | `updated_at` bigint unsigned not null,
9 | primary key (id)
10 | ) engine = InnoDB
11 | default charset = utf8mb4
12 | collate = utf8mb4_general_ci comment ='命令';
13 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2023.1205.172730__featureWindows.sql:
--------------------------------------------------------------------------------
1 | #添加一个字段表示可能有windows服务器,linux服务器
2 | alter table `server`
3 | add column `os` varchar(64) not null default 'LINUX' after `ip`;
4 |
5 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2023.1220.110630__featureServerCommandLog.sql:
--------------------------------------------------------------------------------
1 | create table `command_log`
2 | (
3 | `id` bigint unsigned NOT NULL AUTO_INCREMENT,
4 | `session_id` varchar(256) not null default '' comment '会话id',
5 | `server_id` bigint unsigned not null default 0 comment '服务器id',
6 | `command_data` longtext default null comment '命令数据',
7 | `created_at` bigint unsigned not null,
8 | `updated_at` bigint unsigned not null,
9 | primary key (id)
10 | ) engine = InnoDB
11 | default charset = utf8mb4
12 | collate = utf8mb4_general_ci comment ='命令执行日志';
13 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2023.1227.135259__featureDBConn.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE `db_conn`
2 | (
3 | `id` bigint unsigned NOT NULL AUTO_INCREMENT,
4 | `conn_name` varchar(32) NOT NULL comment '连接名称',
5 | `username` varchar(32) NOT NULL comment '用户名',
6 | `password` varchar(32) NOT NULL comment '密码',
7 | `host` varchar(64) NOT NULL comment '主机',
8 | `port` varchar(6) NOT NULL comment '端口',
9 | `save_password` tinyint(1) NOT NULL DEFAULT 0 comment '是否保存密码',
10 | `created_at` bigint unsigned not null comment '创建时间',
11 | `updated_at` bigint unsigned not null comment '更新时间',
12 | PRIMARY KEY (`id`)
13 | ) ENGINE = InnoDB
14 | DEFAULT CHARSET = utf8mb4
15 | COLLATE = utf8mb4_general_ci;
16 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2023.1227.174057__featureDBConn.sql:
--------------------------------------------------------------------------------
1 | #添加一个字段表示是否db服务器
2 | alter table `server`
3 | add column `is_db` tinyint(1) not null default 0 comment '是否db服务器';
4 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2023.1227.174143__featureDBConn.sql:
--------------------------------------------------------------------------------
1 | #添加一个字段表示db端口,多个用逗号分隔
2 | alter table `server`
3 | add column `db_port` varchar(256) not null default '';
4 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2024.0104.110016__featureRoleServer.sql:
--------------------------------------------------------------------------------
1 | #添加一个字段表示角色拥有的服务器权限,json格式
2 | alter table `role` add column `server_permission` text default null comment '服务器权限' after `name`;
3 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2024.0204.165101__featureLogUserId.sql:
--------------------------------------------------------------------------------
1 | #添加userId字段
2 | alter table `command_log` add column `user_id` int(10) unsigned not null default 0 comment '用户ID' after `session_id`;
3 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2024.0204.165530__featureLogUserId.sql:
--------------------------------------------------------------------------------
1 | truncate table `command_log`;
2 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2024.0306.103404__addServerKeepAlive.sql:
--------------------------------------------------------------------------------
1 | alter table `server` add column `keep_alive` tinyint(1) not null default 1;
2 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2024.0326.150937__commandServerIds.sql:
--------------------------------------------------------------------------------
1 | alter table `command` add column `server_ids` varchar(1024) default null comment '服务器ids';
2 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2024.0427.160943__featureMonitor.sql:
--------------------------------------------------------------------------------
1 | -- 给application_monitor表增加字段失败次数,失败时间,响应结果,响应时间
2 |
3 |
4 | ALTER TABLE application_monitor ADD COLUMN failure_count INT(10) unsigned DEFAULT 0;
5 | ALTER TABLE application_monitor ADD COLUMN failure_time TIMESTAMP DEFAULT NULL;
6 | ALTER TABLE application_monitor ADD COLUMN response_result VARCHAR(255) DEFAULT NULL;
7 | ALTER TABLE application_monitor ADD COLUMN response_time bigint unsigned DEFAULT NULL;
8 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2024.0427.162407__featureApplication.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE application ADD COLUMN master_mobile VARCHAR(32) DEFAULT NULL COMMENT '负责人手机号';
2 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2024.0427.172905__featureApplication.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE `application_monitor`
2 | MODIFY COLUMN `response_result` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL AFTER `failure_time`;
3 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2024.0528.171042__feature.sql:
--------------------------------------------------------------------------------
1 | update `QRTZ_JOB_DETAILS`
2 | set JOB_CLASS_NAME=REPLACE(JOB_CLASS_NAME, 'javaskeletonserver', 'termiusplus')
3 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2024.0813.132152__feature.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE `application`
2 | ADD COLUMN `proxy_id` bigint NULL AFTER `parent_id`;
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2024.0912.210353__featureApplication.sql:
--------------------------------------------------------------------------------
1 | -- 应用监控日志
2 | create table `application_monitor_log`
3 | (
4 | `id` bigint unsigned not null auto_increment,
5 | `application_id` bigint unsigned not null comment '应用ID',
6 | `date` datetime not null comment '日期',
7 | `created_at` bigint unsigned not null comment '创建时间',
8 | `updated_at` bigint unsigned not null comment '更新时间',
9 | primary key (`id`)
10 | ) ENGINE = InnoDB comment '应用监控日志'
11 | DEFAULT CHARSET = utf8mb4
12 | COLLATE = utf8mb4_general_ci;
13 |
14 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2024.0920.210353__featureServerRunLog.sql:
--------------------------------------------------------------------------------
1 | -- 服务器运行日志
2 | create table `server_run_log`
3 | (
4 | `id` bigint unsigned not null auto_increment,
5 | `server_id` bigint unsigned not null comment '服务器ID',
6 | `date` datetime not null comment '日期',
7 | `cpu_usage` text comment 'CPU使用率',
8 | `memory_usage` text comment '内存使用率',
9 | `disk_usages` text comment '磁盘使用率',
10 | `network_usages` text comment '网络使用率',
11 | `created_at` bigint unsigned not null comment '创建时间',
12 | `updated_at` bigint unsigned not null comment '更新时间',
13 | primary key (`id`)
14 | ) ENGINE = InnoDB comment '应用监控日志'
15 | DEFAULT CHARSET = utf8mb4
16 | COLLATE = utf8mb4_general_ci;
17 |
18 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2024.0923.210353__featureServerInfoTest.sql:
--------------------------------------------------------------------------------
1 | alter table `server` add column `info_test` tinyint(1) not null default 1;
2 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2024.1014.114050__featureProxyOpen.sql:
--------------------------------------------------------------------------------
1 | alter table `proxy` add column `open` tinyint(1) not null default 1;
2 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2024.1014.165918__featureHistoryGet.sql:
--------------------------------------------------------------------------------
1 | alter table `server` add column `history_get` tinyint(1) not null default 1;
2 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2024.1020.225918__featureNginxLogPath.sql:
--------------------------------------------------------------------------------
1 | alter table `application_server` add column `nginx_log_path` text default null;
2 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2024.1028.225918__featureRequestMap.sql:
--------------------------------------------------------------------------------
1 | alter table `application` add column `latitude` decimal(10,6) default null;
2 | alter table `application` add column `longitude` decimal(10,6) default null;
3 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2024.1028.225919__featureServerProxyServer.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE `server`
2 | ADD COLUMN `proxy_server_id` int UNSIGNED NULL COMMENT '代理服务器ID' AFTER `proxy_id`;
3 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2025.0302.232013__featurePortForWarding.sql:
--------------------------------------------------------------------------------
1 | -- 端口转发表
2 | create table `port_forwarding`
3 | (
4 | `id` bigint unsigned not null auto_increment,
5 | `server_id` bigint unsigned not null comment '服务器ID',
6 | `forwarding_name` varchar(128) not null comment '转发名称',
7 | `local_host` varchar(128) not null comment '本地主机',
8 | `local_port` int unsigned not null comment '本地端口',
9 | `remote_host` varchar(128) not null comment '远程主机',
10 | `remote_port` int unsigned not null comment '远程端口',
11 | `status` varchar(32) default null comment '状态',
12 | `created_at` bigint unsigned not null comment '创建时间',
13 | `updated_at` bigint unsigned not null comment '更新时间',
14 | primary key (`id`)
15 | ) ENGINE = InnoDB comment '端口转发表'
16 | DEFAULT CHARSET = utf8mb4
17 | COLLATE = utf8mb4_general_ci;
18 |
19 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2025.0305.102003__feature.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE `port_forwarding`
2 | DROP COLUMN `local_host`;
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2025.0331.101825__featureServerRunInfoAddDate.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE `server_run_log`
2 | ADD COLUMN `date_diff` int(10) NULL DEFAULT NULL AFTER `network_usages`;
3 |
4 | ALTER TABLE `server_run_log`
5 | ADD COLUMN `time_zone` varchar(128) NULL DEFAULT NULL AFTER `network_usages`;
6 |
--------------------------------------------------------------------------------
/server/src/main/resources/db/migration/V2025.0331.111434__featureServerRunInfoAddDate.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE `server_run_log`
2 | ADD COLUMN `ntp` tinyint(1) NULL DEFAULT NULL AFTER `network_usages`;
--------------------------------------------------------------------------------
/server/src/test/java/com/codeages/termiusplus/UnitTestConfig.java:
--------------------------------------------------------------------------------
1 | package com.codeages.termiusplus;
2 |
3 | import org.springframework.context.annotation.Configuration;
4 |
5 | @Configuration
6 | public class UnitTestConfig {
7 | }
8 |
--------------------------------------------------------------------------------
/settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | aliyun
5 | Aliyun Maven Repository
6 | https://maven.aliyun.com/repository/public
7 | central
8 |
9 |
10 |
--------------------------------------------------------------------------------
/web/admin/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["@vue/babel-preset-app"],
3 | "plugins": ["@vue/babel-plugin-jsx", [
4 | "import",
5 | {
6 | "libraryName": "view-ui-plus",
7 | "libraryDirectory": "src/components"
8 | },
9 | "view-ui-plus"
10 | ]]
11 | }
12 |
--------------------------------------------------------------------------------
/web/admin/.browserslistrc:
--------------------------------------------------------------------------------
1 | > 1%
2 | last 2 versions
3 | not dead
4 | not ie 11
5 |
--------------------------------------------------------------------------------
/web/admin/.env:
--------------------------------------------------------------------------------
1 | VUE_APP_PROXY_FOR_API=http://localhost:8080
2 | REACT_APP_ENV=prod
--------------------------------------------------------------------------------
/web/admin/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | env: {
4 | node: true
5 | },
6 | 'extends': [
7 | 'plugin:vue/vue3-essential',
8 | 'eslint:recommended'
9 | ],
10 | parserOptions: {
11 | parser: '@babel/eslint-parser'
12 | },
13 | rules: {
14 | 'no-debugger': 'off',
15 | "no-unreachable": "off",
16 | "no-console": "off",
17 | },
18 | reportUnusedDisableDirectives: true,
19 | overrides: [
20 | {
21 | files: [
22 | '**/__tests__/*.{j,t}s?(x)',
23 | '**/tests/unit/**/*.spec.{j,t}s?(x)'
24 | ],
25 | env: {
26 | jest: true
27 | }
28 | }
29 | ]
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/web/admin/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 |
6 | # local env files
7 | .env.local
8 | .env.*.local
9 |
10 | # Log files
11 | npm-debug.log*
12 | yarn-debug.log*
13 | yarn-error.log*
14 | pnpm-debug.log*
15 |
16 | # Editor directories and files
17 | .idea
18 | .vscode
19 | *.suo
20 | *.ntvs*
21 | *.njsproj
22 | *.sln
23 | *.sw?
24 |
--------------------------------------------------------------------------------
/web/admin/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM nginx:alpine-slim as admin
2 | WORKDIR /front
3 | COPY ./dist /front
4 | COPY docker/nginx.conf /etc/nginx/nginx.conf
5 | EXPOSE 8082
6 |
7 |
--------------------------------------------------------------------------------
/web/admin/README.md:
--------------------------------------------------------------------------------
1 | # admin
2 |
3 | ## Project setup
4 | ```
5 | yarn install
6 | ```
7 |
8 | ### Compiles and hot-reloads for development
9 | ```
10 | yarn serve
11 | ```
12 |
13 | ### Compiles and minifies for production
14 | ```
15 | yarn build
16 | ```
17 |
18 | ### Lints and fixes files
19 | ```
20 | yarn lint
21 | ```
22 |
23 | ### Customize configuration
24 | See [Configuration Reference](https://cli.vuejs.org/config/).
25 |
26 | * https://github.com/vueComponent/pro-components/tree/next/packages/pro-layout
27 |
--------------------------------------------------------------------------------
/web/admin/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: [
3 | '@vue/cli-plugin-babel/preset'
4 | ],
5 | "plugins": [
6 | ["import", { "libraryName": "ant-design-vue", "libraryDirectory": "es", "style": true, }, "@vue/babel-plugin-jsx"] // `style: true` 会加载 less 文件
7 | ]
8 | }
9 |
--------------------------------------------------------------------------------
/web/admin/build-docker.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | echo "开始编译前端,版本: "$1
4 |
5 | if [ ! -n "$1" ] ;then
6 | echo "请输入版本号"
7 | exit
8 | fi
9 |
10 | #sudo sysctl -w kern.maxfiles=65535
11 | #
12 | #sudo sysctl -w kern.maxfilesperproc=65535
13 | #
14 | #ulimit -n 65536
15 |
16 | yarn build
17 |
18 | docker build -t registry.cn-hangzhou.aliyuncs.com/kuozhi/termius-plus:front-$1 .
19 |
20 | docker login registry.cn-hangzhou.aliyuncs.com/kuozhi/termius-plus
21 |
22 | docker push registry.cn-hangzhou.aliyuncs.com/kuozhi/termius-plus:front-$1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/web/admin/bun.lockb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/bun.lockb
--------------------------------------------------------------------------------
/web/admin/docker/.env.placeholder:
--------------------------------------------------------------------------------
1 | VITE_ASSETS_DOMAIN=PLACEHOLDER_VITE_ASSETS_DOMAIN
2 |
--------------------------------------------------------------------------------
/web/admin/docker/99-replace-vue-env-var-placeholders.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | ROOT_DIR=/app
4 |
5 | for file in $ROOT_DIR/assets/*.js* $ROOT_DIR/assets/*.css $ROOT_DIR/index.html;
6 | do
7 | sed -i 's|PLACEHOLDER_VITE_ASSETS_DOMAIN|'${VITE_ASSETS_DOMAIN}'|g' $file
8 | done
9 |
--------------------------------------------------------------------------------
/web/admin/jsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "module": "esnext",
5 | "jsx": "preserve",
6 | "jsxImportSource": "vue",
7 | "baseUrl": "./",
8 | "moduleResolution": "node",
9 | "paths": {
10 | "@/*": [
11 | "src/*"
12 | ],
13 | "@shared/*": [
14 | "../shared/*"
15 | ]
16 | },
17 | "lib": [
18 | "esnext",
19 | "dom",
20 | "dom.iterable",
21 | "scripthost"
22 | ]
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/web/admin/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/public/favicon.ico
--------------------------------------------------------------------------------
/web/admin/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | <%= htmlWebpackPlugin.options.title %>
9 |
10 |
11 |
12 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/web/admin/src/api/auth.js:
--------------------------------------------------------------------------------
1 | import {client} from "@shared/api-client";
2 |
3 | export const authApi = {
4 | login: async (params) => {
5 | return client.post("/api-admin/public/login", params);
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/web/admin/src/api/command.js:
--------------------------------------------------------------------------------
1 | import {client} from "@shared/api-client";
2 |
3 | export const commandApi = {
4 |
5 | list: async (params) => {
6 | return client.get("/api-admin/command/list", {params: params});
7 | },
8 | create: async (params) => {
9 | return client.post("/api-admin/command/create", params);
10 | },
11 | update: async (params) => {
12 | return client.post("/api-admin/command/update", params);
13 | },
14 | delete: async (params) => {
15 | return client.post("/api-admin/command/delete", params);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/web/admin/src/api/db.js:
--------------------------------------------------------------------------------
1 | import {client} from "@shared/api-client";
2 |
3 | export const dbApi = {
4 | getDbConnInfo: async (id) => {
5 | return client.get(`/api-admin/dbConn/get/${id}`);
6 | },
7 | list: async () => {
8 | return client.get(`/api-admin/dbConn/list`);
9 | },
10 | showDatabase: async (params) => {
11 | return client.get("/api-admin/dbConnOperation/showDatabase", {params: params});
12 | },
13 | showTables: async (params) => {
14 | return client.get("/api-admin/dbConnOperation/showTables", {params: params});
15 | },
16 | getTableColumns: async (params) => {
17 | return client.get("/api-admin/dbConnOperation/getTableColumns", {params: params});
18 | },
19 | selectTableData: async (params) => {
20 | return client.get("/api-admin/dbConnOperation/selectTableData", {params: params});
21 | },
22 | findAllDbServer: async () => {
23 | return client.get("/api-admin/dbConn/findAllDbServer");
24 | },
25 | executeSql: async (params) => {
26 | return client.get("/api-admin/dbConnOperation/executeSql", {params: params});
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/web/admin/src/api/log.js:
--------------------------------------------------------------------------------
1 | import {client} from "@shared/api-client";
2 |
3 | export const commandLogApi = {
4 |
5 | list: async (params) => {
6 | return client.get("/api-admin/commandLog/list", {params: params});
7 | },
8 | search: async (params) => {
9 | return client.get("/api-admin/commandLog/search", {params: params});
10 | },
11 | get: async (id) => {
12 | return client.get(`/api-admin/commandLog/get/${id}`);
13 | },
14 | }
15 |
--------------------------------------------------------------------------------
/web/admin/src/api/port-forwarding.js:
--------------------------------------------------------------------------------
1 | import {client} from "@shared/api-client";
2 |
3 | export const portForwardingApi = {
4 |
5 | list: async (params) => {
6 | return client.get("/api-admin/port-forwarding/list", {params: params});
7 | },
8 | create: async (params) => {
9 | return client.post("/api-admin/port-forwarding/create", params);
10 | },
11 | update: async (params) => {
12 | return client.post("/api-admin/port-forwarding/update", params);
13 | },
14 | del: async (params) => {
15 | return client.post("/api-admin/port-forwarding/delete", params);
16 | },
17 | start: async (params) => {
18 | return client.post("/api-admin/port-forwarding/start", params);
19 | },
20 | stop: async (params) => {
21 | return client.post("/api-admin/port-forwarding/stop", params);
22 | },
23 | getLocalIp: async () => {
24 | return client.get("/api-admin/port-forwarding/getLocalIp");
25 | },
26 | }
27 |
--------------------------------------------------------------------------------
/web/admin/src/api/proxy.js:
--------------------------------------------------------------------------------
1 | import {client} from "@shared/api-client";
2 |
3 | export const proxyApi = {
4 |
5 | list: async (params) => {
6 | return client.get("/api-admin/proxy/list", {params: params});
7 | },
8 | create: async (params) => {
9 | return client.post("/api-admin/proxy/create", params);
10 | },
11 | update: async (params) => {
12 | return client.post("/api-admin/proxy/update", params);
13 | },
14 | delete: async (params) => {
15 | return client.post("/api-admin/proxy/delete", params);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/web/admin/src/api/quartz.js:
--------------------------------------------------------------------------------
1 | import {client} from "@shared/api-client";
2 |
3 | export const quartzApi = {
4 |
5 | list: async (params) => {
6 | return client.get("/api-admin/quartz/list", {params: params});
7 | },
8 | create: async (params) => {
9 | return client.post("/api-admin/quartz/create", params);
10 | },
11 | update: async (params) => {
12 | return client.post("/api-admin/quartz/update", params);
13 | },
14 | delete: async (params) => {
15 | return client.post("/api-admin/quartz/delete", params);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/web/admin/src/api/role.js:
--------------------------------------------------------------------------------
1 | import {client} from "@shared/api-client";
2 |
3 | /*
4 | 角色名: name
5 | 服务器权限: serverPermission
6 | */
7 | export const roleApi = {
8 | create: async (params) => {
9 | return client.post("/api-admin/role/create", params);
10 | },
11 | search: async (params) => {
12 | return client.get("/api-admin/role/search", {params: params});
13 | },
14 | update: async (params) => {
15 | return client.post("/api-admin/role/update", params);
16 | },
17 | delete: async (params = {id: 0}) => {
18 | return client.post("/api-admin/role/delete", params);
19 | },
20 | list: async (params) => {
21 | return client.get("/api-admin/role/list", {params: params});
22 | },
23 | }
24 |
25 |
--------------------------------------------------------------------------------
/web/admin/src/api/user.js:
--------------------------------------------------------------------------------
1 | import {client} from "@shared/api-client";
2 |
3 | export const userApi = {
4 |
5 | create: async (params) => {
6 | return client.post("/api-admin/user/create", params);
7 | },
8 |
9 | search: async (params) => {
10 | return client.get("/api-admin/user/search", {params: params});
11 | },
12 | update: async (params) => {
13 | return client.post("/api-admin/user/update", params);
14 | },
15 | list: async (params) => {
16 | return client.get("/api-admin/user/list", {params: params});
17 | },
18 | changePassword: async (params) => {
19 | return client.post("/api-app/user/changePassword", params);
20 | },
21 | lock(id) {
22 | return client.post("/api-admin/user/lock", {id: id});
23 | },
24 | unlock(id) {
25 | return client.post("/api-admin/user/unlock", {id: id});
26 | },
27 | resetPassword(id) {
28 | return client.post("/api-admin/user/resetPassword", {id: id});
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/web/admin/src/assets/file-icon/dir.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/file-icon/dir.png
--------------------------------------------------------------------------------
/web/admin/src/assets/file-icon/file.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/file-icon/file.png
--------------------------------------------------------------------------------
/web/admin/src/assets/file-type-icon/dist.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/web/admin/src/assets/file-type-icon/twig.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/web/admin/src/assets/file-type-icon/xml.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/web/admin/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/logo.png
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/AgaveNerdFont-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/AgaveNerdFont-Bold.ttf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/AgaveNerdFont-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/AgaveNerdFont-Regular.ttf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/AgaveNerdFontMono-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/AgaveNerdFontMono-Bold.ttf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/AgaveNerdFontMono-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/AgaveNerdFontMono-Regular.ttf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/AgaveNerdFontPropo-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/AgaveNerdFontPropo-Bold.ttf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/AgaveNerdFontPropo-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/AgaveNerdFontPropo-Regular.ttf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/CascadiaCode.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/CascadiaCode.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/CascadiaCodeItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/CascadiaCodeItalic.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/CascadiaCodeNF.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/CascadiaCodeNF.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/CascadiaCodeNFItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/CascadiaCodeNFItalic.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/CascadiaCodePL.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/CascadiaCodePL.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/CascadiaCodePLItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/CascadiaCodePLItalic.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/CascadiaMono.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/CascadiaMono.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/CascadiaMonoItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/CascadiaMonoItalic.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/CascadiaMonoNF.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/CascadiaMonoNF.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/CascadiaMonoNFItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/CascadiaMonoNFItalic.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/CascadiaMonoPL.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/CascadiaMonoPL.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/CascadiaMonoPLItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/CascadiaMonoPLItalic.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/CommitMono-400-Italic.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/CommitMono-400-Italic.otf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/CommitMono-400-Regular.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/CommitMono-400-Regular.otf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/CommitMono-700-Italic.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/CommitMono-700-Italic.otf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/CommitMono-700-Regular.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/CommitMono-700-Regular.otf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/FiraCode-Bold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/FiraCode-Bold.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/FiraCode-Light.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/FiraCode-Light.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/FiraCode-Medium.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/FiraCode-Medium.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/FiraCode-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/FiraCode-Regular.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/FiraCode-SemiBold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/FiraCode-SemiBold.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/FiraCode-VF.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/FiraCode-VF.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/JetBrainsMono-Bold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/JetBrainsMono-Bold.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/JetBrainsMono-BoldItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/JetBrainsMono-BoldItalic.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/JetBrainsMono-ExtraBold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/JetBrainsMono-ExtraBold.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/JetBrainsMono-ExtraBoldItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/JetBrainsMono-ExtraBoldItalic.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/JetBrainsMono-ExtraLight.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/JetBrainsMono-ExtraLight.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/JetBrainsMono-ExtraLightItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/JetBrainsMono-ExtraLightItalic.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/JetBrainsMono-Italic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/JetBrainsMono-Italic.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/JetBrainsMono-Light.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/JetBrainsMono-Light.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/JetBrainsMono-LightItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/JetBrainsMono-LightItalic.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/JetBrainsMono-Medium.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/JetBrainsMono-Medium.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/JetBrainsMono-MediumItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/JetBrainsMono-MediumItalic.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/JetBrainsMono-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/JetBrainsMono-Regular.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/JetBrainsMono-SemiBold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/JetBrainsMono-SemiBold.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/JetBrainsMono-SemiBoldItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/JetBrainsMono-SemiBoldItalic.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/JetBrainsMono-Thin.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/JetBrainsMono-Thin.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/JetBrainsMono-ThinItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/JetBrainsMono-ThinItalic.woff2
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/MesloLGLDZ-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/MesloLGLDZ-Bold.ttf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/MesloLGLDZ-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/MesloLGLDZ-BoldItalic.ttf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/MesloLGLDZ-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/MesloLGLDZ-Italic.ttf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/MesloLGLDZ-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/MesloLGLDZ-Regular.ttf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/MesloLGMDZ-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/MesloLGMDZ-Bold.ttf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/MesloLGMDZ-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/MesloLGMDZ-BoldItalic.ttf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/MesloLGMDZ-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/MesloLGMDZ-Italic.ttf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/MesloLGMDZ-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/MesloLGMDZ-Regular.ttf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/MesloLGSDZ-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/MesloLGSDZ-Bold.ttf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/MesloLGSDZ-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/MesloLGSDZ-BoldItalic.ttf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/MesloLGSDZ-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/MesloLGSDZ-Italic.ttf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/MesloLGSDZ-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/MesloLGSDZ-Regular.ttf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/SourceCodePro-Black.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/SourceCodePro-Black.otf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/SourceCodePro-BlackIt.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/SourceCodePro-BlackIt.otf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/SourceCodePro-Bold.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/SourceCodePro-Bold.otf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/SourceCodePro-BoldIt.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/SourceCodePro-BoldIt.otf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/SourceCodePro-ExtraLight.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/SourceCodePro-ExtraLight.otf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/SourceCodePro-ExtraLightIt.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/SourceCodePro-ExtraLightIt.otf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/SourceCodePro-It.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/SourceCodePro-It.otf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/SourceCodePro-Light.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/SourceCodePro-Light.otf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/SourceCodePro-LightIt.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/SourceCodePro-LightIt.otf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/SourceCodePro-Medium.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/SourceCodePro-Medium.otf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/SourceCodePro-MediumIt.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/SourceCodePro-MediumIt.otf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/SourceCodePro-Regular.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/SourceCodePro-Regular.otf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/SourceCodePro-Semibold.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/SourceCodePro-Semibold.otf
--------------------------------------------------------------------------------
/web/admin/src/assets/webfonts/SourceCodePro-SemiboldIt.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/2211898719/termius-plus/4147d6c9224b52ffdb69ebff9b7329539b078157/web/admin/src/assets/webfonts/SourceCodePro-SemiboldIt.otf
--------------------------------------------------------------------------------
/web/admin/src/boot/bootAxios.js:
--------------------------------------------------------------------------------
1 | export function bootAxios() {
2 |
3 | }
4 |
--------------------------------------------------------------------------------
/web/admin/src/boot/bootEcharts.js:
--------------------------------------------------------------------------------
1 | import * as echarts from 'echarts/core'
2 | import { GridComponent, LegendComponent, TitleComponent, TooltipComponent } from 'echarts/components'
3 | import { LineChart} from 'echarts/charts'
4 | import { UniversalTransition } from 'echarts/features'
5 | import { CanvasRenderer } from 'echarts/renderers'
6 |
7 | echarts.use([
8 | GridComponent,
9 | TooltipComponent,
10 | LegendComponent,
11 | TitleComponent,
12 | LineChart,
13 | CanvasRenderer,
14 | UniversalTransition,
15 | ])
16 | // import * as echarts from 'echarts'
17 |
18 | // 初始化语法糖
19 | const draw = (dom, option) => {
20 | const chart = echarts.init(dom)
21 | chart.clear()
22 | chart.setOption(option)
23 | return chart
24 | }
25 |
26 | export default {
27 | ...echarts,
28 | draw
29 | }
30 |
--------------------------------------------------------------------------------
/web/admin/src/boot/bootFilters.js:
--------------------------------------------------------------------------------
1 | import {filters} from "@shared/filters";
2 |
3 | export function bootFilters(app) {
4 | app.config.globalProperties.$f = filters;
5 | }
6 |
--------------------------------------------------------------------------------
/web/admin/src/boot/bootPinia.js:
--------------------------------------------------------------------------------
1 | import { createPinia } from 'pinia';
2 |
3 | export function bootPinia(app) {
4 | app.use(createPinia());
5 | }
6 |
--------------------------------------------------------------------------------
/web/admin/src/boot/bootStore.js:
--------------------------------------------------------------------------------
1 | import {useAuthStore} from "@shared/store/useAuthStore";
2 |
3 | export function bootStore() {
4 | const store = useAuthStore();
5 | store.init();
6 | }
7 |
--------------------------------------------------------------------------------
/web/admin/src/components/p-blank.vue:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
14 |
--------------------------------------------------------------------------------
/web/admin/src/components/p-code-edit.vue:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 |
12 |
--------------------------------------------------------------------------------
/web/admin/src/components/p-enum-select.vue:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 | {{ module[item]?.name }}
7 |
8 |
9 |
10 |
11 |
12 |
38 |
39 |
42 |
--------------------------------------------------------------------------------
/web/admin/src/config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | name: "速维web服务器运维管理系统",
3 | }
4 |
--------------------------------------------------------------------------------
/web/admin/src/enums/ApplicationMonitorCheckTypeEnum.js:
--------------------------------------------------------------------------------
1 | import Enum from "./Enum";
2 |
3 |
4 | export default class ApplicationMonitorCheckTypeEnum extends Enum {
5 | static REGEX = new ApplicationMonitorCheckTypeEnum('正则表达式', 'REGEX');
6 | static JAVASCRIPT = new ApplicationMonitorCheckTypeEnum('JavaScript脚本', 'JAVASCRIPT');
7 | }
8 |
9 |
--------------------------------------------------------------------------------
/web/admin/src/enums/ApplicationMonitorTypeEnum.js:
--------------------------------------------------------------------------------
1 | import Enum from "./Enum";
2 |
3 |
4 | export default class ApplicationMonitorTypeEnum extends Enum {
5 | static REQUEST = new ApplicationMonitorTypeEnum('请求', 'REQUEST');
6 |
7 | }
8 |
9 |
--------------------------------------------------------------------------------
/web/admin/src/enums/Enum.js:
--------------------------------------------------------------------------------
1 | export default class Enum {
2 | constructor(name, value) {
3 | this.name = name;
4 | this.value = value;
5 | }
6 | }
7 |
8 |
--------------------------------------------------------------------------------
/web/admin/src/enums/MethodEnum.js:
--------------------------------------------------------------------------------
1 | import Enum from "./Enum";
2 |
3 |
4 | export default class MethodEnum extends Enum {
5 | static POST = new MethodEnum('POST', 'POST');
6 | static GET = new MethodEnum('GET', 'GET');
7 | static PUT = new MethodEnum('PUT', 'PUT');
8 | static DELETE = new MethodEnum('DELETE', 'DELETE');
9 | static PATCH = new MethodEnum('PATCH', 'PATCH');
10 | static OPTIONS = new MethodEnum('OPTIONS', 'OPTIONS');
11 | static HEAD = new MethodEnum('HEAD', 'HEAD');
12 |
13 | }
14 |
15 |
--------------------------------------------------------------------------------
/web/admin/src/enums/OsEnum.js:
--------------------------------------------------------------------------------
1 | import Enum from "./Enum";
2 |
3 |
4 | export default class OsEnum extends Enum {
5 | static LINUX = new OsEnum('Linux', 'LINUX');
6 | static WINDOWS = new OsEnum('Windows', 'WINDOWS');
7 |
8 | }
9 |
10 |
--------------------------------------------------------------------------------
/web/admin/src/enums/PortForWardingStatusEnum.js:
--------------------------------------------------------------------------------
1 | import Enum from "./Enum";
2 |
3 |
4 | export default class PortForWardingStatusEnum extends Enum {
5 | static START = new PortForWardingStatusEnum('运行中', 'START');
6 | static STOP = new PortForWardingStatusEnum('停止', 'STOP');
7 |
8 | }
9 |
10 |
--------------------------------------------------------------------------------
/web/admin/src/enums/ProxyTypeEnum.js:
--------------------------------------------------------------------------------
1 | import Enum from "./Enum";
2 |
3 |
4 | export default class ProxyTypeEnum extends Enum {
5 | static HTTP = new ProxyTypeEnum('HTTP', 'HTTP');
6 | static SOCKET5 = new ProxyTypeEnum('SOCKET5', 'SOCKET5');
7 | static SOCKET4 = new ProxyTypeEnum('SOCKET4', 'SOCKET4');
8 |
9 | }
10 |
11 |
--------------------------------------------------------------------------------
/web/admin/src/icons.js:
--------------------------------------------------------------------------------
1 | import * as Icons from '@ant-design/icons-vue/es';
2 |
3 | export const filterIcons = ['default', 'createFromIconfontCN', 'getTwoToneColor', 'setTwoToneColor'];
4 |
5 | export default (app) => {
6 | const allIcon = Icons;
7 | Object.keys(Icons)
8 | .filter((k) => !filterIcons.includes(k))
9 | .forEach((k) => {
10 | app.component(allIcon[k].displayName, allIcon[k]);
11 | });
12 | };
--------------------------------------------------------------------------------
/web/admin/src/layouts/BlankLayout.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/web/admin/src/layouts/main.less:
--------------------------------------------------------------------------------
1 | //定义变量高度
2 |
3 |
4 | @height: calc(100vh - 48px);
5 | :deep(.ant-card-head-wrapper) {
6 | position: relative;
7 |
8 | .center-name {
9 | position: absolute;
10 | left: 50%;
11 | transform: translateX(-50%) translateY(-50%);
12 | top: 50%;
13 | color: rgba(0, 0, 0, .45);
14 | }
15 | }
16 |
17 | .mt5 {
18 | margin-top: 5px;
19 | }
20 |
21 | .enable-line {
22 | color: #1daa6c !important;
23 | }
24 |
25 | .disable-line {
26 | color: #f5222d !important;
27 | }
28 |
29 | .body-root{
30 | height: @height;
31 | }
32 |
33 | .ant-tabs-left>.ant-tabs-content-holder, .ant-tabs-left>div>.ant-tabs-content-holder{
34 | margin-left: 0;
35 | }
36 | ::-webkit-scrollbar{
37 | display:none;/*隐藏滚动条*/
38 | }
39 |
40 |
41 | /deep/ .el-radio__original {
42 | display: none !important;
43 | }
44 |
45 | /deep/.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner {
46 | box-shadow: none !important;
47 | }
--------------------------------------------------------------------------------
/web/admin/src/views/SystemLogPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
10 |
--------------------------------------------------------------------------------
/web/admin/src/views/WelcomePage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
9 |
--------------------------------------------------------------------------------
/web/admin/src/views/editor/components/trigger.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/web/admin/src/views/server/DockviewPanel.vue:
--------------------------------------------------------------------------------
1 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/web/admin/src/views/server/Panel.js:
--------------------------------------------------------------------------------
1 | import {defineComponent} from "vue";
2 |
3 | export const Panel = defineComponent({
4 | inject: [],
5 | name: 'Panel',
6 | props: {
7 | params: {
8 | type: Object,
9 | required: true,
10 | },
11 | },
12 | data() {
13 | return {
14 | title: '',
15 | message: 'not found',
16 | };
17 | },
18 | mounted() {
19 | const disposable = this.params.api.onDidTitleChange(() => {
20 | this.title = this.params.api.title;
21 | });
22 |
23 | this.title = this.params.api.title;
24 |
25 | return () => {
26 | disposable.dispose();
27 | };
28 | },
29 | template: `
30 |
31 | Hello World
32 |
{{title}}
33 |
{{message}}
34 |
`,
35 | });
--------------------------------------------------------------------------------
/web/shared/encodedKey.js:
--------------------------------------------------------------------------------
1 | export const reqKey = '04c84689966677474709a722cdb4c7178be0d8e59b243c5ed785752c9a22598a96ea7d0f21c7d4dfcc8c516c0f106366a5cf47ff012b77d2bc288ee86cf0859999'
2 |
3 | export const resKey = '0cb8fdca63f53ca8b10a697c04b0fa925722d439e581cf6055167bad8a7601a7'
4 |
5 |
--------------------------------------------------------------------------------
/web/shared/filters.js:
--------------------------------------------------------------------------------
1 | import dayjs from "dayjs";
2 |
3 | export const filters = {
4 | datetime(value, format = 'YYYY-MM-DD HH:mm:ss') {
5 | if (!value) {
6 | return "";
7 | }
8 | return dayjs(value).format(format);
9 | }
10 | }
11 |
--------------------------------------------------------------------------------