├── .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 | 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 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /web/admin/src/components/p-code-edit.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | 9 | 12 | -------------------------------------------------------------------------------- /web/admin/src/components/p-enum-select.vue: -------------------------------------------------------------------------------- 1 | 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 | 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 | 7 | 10 | -------------------------------------------------------------------------------- /web/admin/src/views/WelcomePage.vue: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /web/admin/src/views/editor/components/trigger.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | -------------------------------------------------------------------------------- /web/admin/src/views/server/DockviewPanel.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 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 | --------------------------------------------------------------------------------