优化模块值.

This commit is contained in:
lijiahang
2024-10-15 17:41:39 +08:00
parent 6e3abab232
commit 3e41e17367
25 changed files with 103 additions and 101 deletions

View File

@@ -76,7 +76,7 @@ public class TerminalConnectLogController {
@PostMapping("/session")
@Operation(summary = "查询全部终端连接会话")
@PreAuthorize("@ss.hasPermission('asset:terminal-connect-session:management:query')")
public List<TerminalConnectLogVO> getHostConnectSessions(@Validated @RequestBody TerminalConnectLogQueryRequest request) {
public List<TerminalConnectLogVO> getTerminalConnectSessions(@Validated @RequestBody TerminalConnectLogQueryRequest request) {
return terminalConnectLogService.getTerminalConnectSessions(request);
}

View File

@@ -19,7 +19,7 @@ import com.orion.visor.framework.log.core.annotation.IgnoreLog;
import com.orion.visor.framework.log.core.enums.IgnoreLogMode;
import com.orion.visor.framework.web.core.annotation.RestWrapper;
import com.orion.visor.module.asset.entity.vo.HostTerminalThemeVO;
import com.orion.visor.module.asset.service.HostTerminalService;
import com.orion.visor.module.asset.service.TerminalService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
@@ -39,36 +39,36 @@ import java.util.List;
* @version 1.0.0
* @since 2023-9-20 11:55
*/
@Tag(name = "asset - 主机终端服务")
@Tag(name = "asset - 终端服务")
@Slf4j
@Validated
@RestWrapper
@RestController
@RequestMapping("/asset/host-terminal")
public class HostTerminalController {
@RequestMapping("/asset/terminal")
public class TerminalController {
@Resource
private HostTerminalService hostTerminalService;
private TerminalService terminalService;
@IgnoreLog(IgnoreLogMode.ALL)
@GetMapping("/themes")
@Operation(summary = "获取主机终端主题")
@Operation(summary = "获取终端主题")
public List<HostTerminalThemeVO> getTerminalThemes() {
return hostTerminalService.getTerminalThemes();
return terminalService.getTerminalThemes();
}
@GetMapping("/access")
@Operation(summary = "获取主机终端 accessToken")
@PreAuthorize("@ss.hasPermission('asset:host-terminal:access')")
@Operation(summary = "获取终端 accessToken")
@PreAuthorize("@ss.hasPermission('asset:terminal:access')")
public String getTerminalAccessToken() {
return hostTerminalService.getTerminalAccessToken();
return terminalService.getTerminalAccessToken();
}
@GetMapping("/transfer")
@Operation(summary = "获取主机终端 transferToken")
@PreAuthorize("@ss.hasPermission('asset:host-terminal:access')")
@Operation(summary = "获取终端 transferToken")
@PreAuthorize("@ss.hasPermission('asset:terminal:access')")
public String getTerminalTransferToken() {
return hostTerminalService.getTerminalTransferToken();
return terminalService.getTerminalTransferToken();
}
}

View File

@@ -31,30 +31,30 @@ import static com.orion.visor.framework.biz.operator.log.core.enums.OperatorRisk
* @version 1.0.0
* @since 2023/10/10 17:30
*/
@Module("asset:host-terminal")
@Module("asset:terminal")
public class HostTerminalOperatorType extends InitializingOperatorTypes {
public static final String CONNECT = "host-terminal:connect";
public static final String CONNECT = "terminal:connect";
public static final String DELETE_SFTP_LOG = "host-terminal:delete-sftp-log";
public static final String DELETE_SFTP_LOG = "terminal:delete-sftp-log";
public static final String SFTP_MKDIR = "host-terminal:sftp-mkdir";
public static final String SFTP_MKDIR = "terminal:sftp-mkdir";
public static final String SFTP_TOUCH = "host-terminal:sftp-touch";
public static final String SFTP_TOUCH = "terminal:sftp-touch";
public static final String SFTP_MOVE = "host-terminal:sftp-move";
public static final String SFTP_MOVE = "terminal:sftp-move";
public static final String SFTP_REMOVE = "host-terminal:sftp-remove";
public static final String SFTP_REMOVE = "terminal:sftp-remove";
public static final String SFTP_TRUNCATE = "host-terminal:sftp-truncate";
public static final String SFTP_TRUNCATE = "terminal:sftp-truncate";
public static final String SFTP_CHMOD = "host-terminal:sftp-chmod";
public static final String SFTP_CHMOD = "terminal:sftp-chmod";
public static final String SFTP_SET_CONTENT = "host-terminal:sftp-set-content";
public static final String SFTP_SET_CONTENT = "terminal:sftp-set-content";
public static final String SFTP_UPLOAD = "host-terminal:sftp-upload";
public static final String SFTP_UPLOAD = "terminal:sftp-upload";
public static final String SFTP_DOWNLOAD = "host-terminal:sftp-download";
public static final String SFTP_DOWNLOAD = "terminal:sftp-download";
public static final List<String> SFTP_TYPES = Lists.of(
SFTP_MKDIR,

View File

@@ -41,7 +41,7 @@ import com.orion.visor.module.asset.handler.host.exec.command.model.ExecCommandD
import com.orion.visor.module.asset.handler.host.exec.command.model.ExecCommandHostDTO;
import com.orion.visor.module.asset.handler.host.exec.log.manager.ExecLogManager;
import com.orion.visor.module.asset.handler.host.jsch.SessionStores;
import com.orion.visor.module.asset.service.HostTerminalService;
import com.orion.visor.module.asset.service.TerminalService;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
@@ -64,7 +64,7 @@ public abstract class BaseExecCommandHandler implements IExecCommandHandler {
private static final ExecLogManager execLogManager = SpringHolder.getBean(ExecLogManager.class);
private static final HostTerminalService hostTerminalService = SpringHolder.getBean(HostTerminalService.class);
private static final TerminalService terminalService = SpringHolder.getBean(TerminalService.class);
private static final ExecHostLogDAO execHostLogDAO = SpringHolder.getBean(ExecHostLogDAO.class);
@@ -146,7 +146,7 @@ public abstract class BaseExecCommandHandler implements IExecCommandHandler {
// 初始化日志
this.initLogOutputStream();
// 打开会话
HostTerminalConnectDTO connect = hostTerminalService.getTerminalConnectInfo(execHostCommand.getHostId());
HostTerminalConnectDTO connect = terminalService.getTerminalConnectInfo(execHostCommand.getHostId());
this.sessionStore = SessionStores.openSessionStore(connect);
if (Booleans.isTrue(execCommand.getScriptExec())) {
// 上传脚本文件

View File

@@ -41,7 +41,7 @@ import com.orion.visor.module.asset.handler.host.terminal.model.response.Termina
import com.orion.visor.module.asset.handler.host.terminal.session.ITerminalSession;
import com.orion.visor.module.asset.handler.host.terminal.utils.TerminalUtils;
import com.orion.visor.module.asset.service.TerminalConnectLogService;
import com.orion.visor.module.asset.service.HostTerminalService;
import com.orion.visor.module.asset.service.TerminalService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketSession;
@@ -64,7 +64,7 @@ public class TerminalCheckHandler extends AbstractTerminalHandler<TerminalCheckR
private HostDAO hostDAO;
@Resource
private HostTerminalService hostTerminalService;
private TerminalService terminalService;
@Resource
private TerminalConnectLogService terminalConnectLogService;
@@ -95,7 +95,7 @@ public class TerminalCheckHandler extends AbstractTerminalHandler<TerminalCheckR
Exception ex = null;
try {
// 获取连接信息
connect = hostTerminalService.getTerminalConnectInfo(userId, host);
connect = terminalService.getTerminalConnectInfo(userId, host);
connect.setConnectType(connectType.name());
// 设置到缓存中
channel.getAttributes().put(sessionId, connect);

View File

@@ -32,7 +32,7 @@ import com.orion.visor.module.asset.handler.host.transfer.session.DownloadSessio
import com.orion.visor.module.asset.handler.host.transfer.session.ITransferSession;
import com.orion.visor.module.asset.handler.host.transfer.session.UploadSession;
import com.orion.visor.module.asset.handler.host.transfer.utils.TransferUtils;
import com.orion.visor.module.asset.service.HostTerminalService;
import com.orion.visor.module.asset.service.TerminalService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.socket.WebSocketSession;
@@ -48,7 +48,7 @@ import java.util.concurrent.ConcurrentHashMap;
@Slf4j
public class TransferHandler implements ITransferHandler {
private static final HostTerminalService hostTerminalService = SpringHolder.getBean(HostTerminalService.class);
private static final TerminalService terminalService = SpringHolder.getBean(TerminalService.class);
private final WebSocketSession channel;
@@ -110,7 +110,7 @@ public class TransferHandler implements ITransferHandler {
if (terminalConnection == null) {
// 获取终端连接信息
Long userId = WebSockets.getAttr(channel, ExtraFieldConst.USER_ID);
HostTerminalConnectDTO connectInfo = hostTerminalService.getTerminalConnectInfo(userId, hostId);
HostTerminalConnectDTO connectInfo = terminalService.getTerminalConnectInfo(userId, hostId);
terminalConnection = new TerminalConnection(connectInfo, SessionStores.openSessionStore(connectInfo));
terminalConnections.put(hostId, terminalConnection);
}

View File

@@ -29,7 +29,7 @@ import com.orion.visor.module.asset.entity.dto.HostTerminalConnectDTO;
import com.orion.visor.module.asset.enums.UploadTaskFileStatusEnum;
import com.orion.visor.module.asset.handler.host.jsch.SessionStores;
import com.orion.visor.module.asset.handler.host.upload.model.FileUploadFileItemDTO;
import com.orion.visor.module.asset.service.HostTerminalService;
import com.orion.visor.module.asset.service.TerminalService;
import com.orion.visor.module.asset.utils.SftpUtils;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
@@ -50,7 +50,7 @@ import java.util.stream.Collectors;
@Slf4j
public class FileUploader implements IFileUploader {
private static final HostTerminalService hostTerminalService = SpringHolder.getBean(HostTerminalService.class);
private static final TerminalService terminalService = SpringHolder.getBean(TerminalService.class);
private static final UploadTaskFileDAO uploadTaskFileDAO = SpringHolder.getBean(UploadTaskFileDAO.class);
@@ -116,7 +116,7 @@ public class FileUploader implements IFileUploader {
log.info("HostFileUploader.initSession start taskId: {}, hostId: {}", taskId, hostId);
try {
// 打开会话
HostTerminalConnectDTO connectInfo = hostTerminalService.getTerminalConnectInfo(hostId);
HostTerminalConnectDTO connectInfo = terminalService.getTerminalConnectInfo(hostId);
this.sessionStore = SessionStores.openSessionStore(connectInfo);
this.executor = sessionStore.getSftpExecutor(connectInfo.getFileNameCharset());
executor.connect();

View File

@@ -20,7 +20,7 @@ import com.orion.visor.framework.common.constant.ExtraFieldConst;
import com.orion.visor.framework.common.meta.TraceIdHolder;
import com.orion.visor.framework.common.utils.Requests;
import com.orion.visor.module.asset.entity.dto.HostTerminalAccessDTO;
import com.orion.visor.module.asset.service.HostTerminalService;
import com.orion.visor.module.asset.service.TerminalService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
@@ -43,7 +43,7 @@ import java.util.Map;
public class TerminalAccessInterceptor implements HandshakeInterceptor {
@Resource
private HostTerminalService hostTerminalService;
private TerminalService terminalService;
@Override
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {
@@ -51,7 +51,7 @@ public class TerminalAccessInterceptor implements HandshakeInterceptor {
String accessToken = Urls.getUrlSource(request.getURI().getPath());
log.info("TerminalAccessInterceptor-beforeHandshake start accessToken: {}", accessToken);
// 获取连接数据
HostTerminalAccessDTO access = hostTerminalService.getAccessInfoByToken(accessToken);
HostTerminalAccessDTO access = terminalService.getAccessInfoByToken(accessToken);
if (access == null) {
log.error("TerminalAccessInterceptor-beforeHandshake absent accessToken: {}", accessToken);
return false;

View File

@@ -20,7 +20,7 @@ import com.orion.visor.framework.common.constant.ExtraFieldConst;
import com.orion.visor.framework.common.meta.TraceIdHolder;
import com.orion.visor.framework.common.utils.Requests;
import com.orion.visor.module.asset.entity.dto.HostTerminalTransferDTO;
import com.orion.visor.module.asset.service.HostTerminalService;
import com.orion.visor.module.asset.service.TerminalService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
@@ -43,7 +43,7 @@ import java.util.Map;
public class TerminalTransferInterceptor implements HandshakeInterceptor {
@Resource
private HostTerminalService hostTerminalService;
private TerminalService terminalService;
@Override
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {
@@ -51,7 +51,7 @@ public class TerminalTransferInterceptor implements HandshakeInterceptor {
String transferToken = Urls.getUrlSource(request.getURI().getPath());
log.info("TerminalTransferInterceptor-beforeHandshake start transferToken: {}", transferToken);
// 获取连接数据
HostTerminalTransferDTO transfer = hostTerminalService.getTransferInfoByToken(transferToken);
HostTerminalTransferDTO transfer = terminalService.getTransferInfoByToken(transferToken);
if (transfer == null) {
log.error("TerminalTransferInterceptor-beforeHandshake absent transferToken: {}", transferToken);
return false;

View File

@@ -30,7 +30,7 @@ import java.util.List;
* @version 1.0.0
* @since 2023/12/26 14:22
*/
public interface HostTerminalService {
public interface TerminalService {
/**
* 获取主机终端主题

View File

@@ -46,7 +46,7 @@ import com.orion.visor.module.asset.handler.host.jsch.SessionStores;
import com.orion.visor.module.asset.handler.host.transfer.manager.HostTransferManager;
import com.orion.visor.module.asset.handler.host.transfer.session.DownloadSession;
import com.orion.visor.module.asset.service.HostSftpService;
import com.orion.visor.module.asset.service.HostTerminalService;
import com.orion.visor.module.asset.service.TerminalService;
import com.orion.visor.module.infra.api.OperatorLogApi;
import com.orion.visor.module.infra.entity.dto.operator.OperatorLogQueryDTO;
import com.orion.web.servlet.web.Servlets;
@@ -81,7 +81,7 @@ public class HostSftpServiceImpl implements HostSftpService {
private HostTransferManager hostTransferManager;
@Resource
private HostTerminalService hostTerminalService;
private TerminalService terminalService;
@Override
public DataGrid<HostSftpLogVO> getHostSftpLogPage(HostSftpLogQueryRequest request) {
@@ -131,7 +131,7 @@ public class HostSftpServiceImpl implements HostSftpService {
InputStream in = null;
try {
// 获取终端连接信息
HostTerminalConnectDTO connectInfo = hostTerminalService.getTerminalConnectInfo(SecurityUtils.getLoginUserId(), cache.getHostId());
HostTerminalConnectDTO connectInfo = terminalService.getTerminalConnectInfo(SecurityUtils.getLoginUserId(), cache.getHostId());
sessionStore = SessionStores.openSessionStore(connectInfo);
executor = sessionStore.getSftpExecutor(connectInfo.getFileNameCharset());
executor.connect();
@@ -164,7 +164,7 @@ public class HostSftpServiceImpl implements HostSftpService {
InputStream in = null;
try {
// 获取终端连接信息
HostTerminalConnectDTO connectInfo = hostTerminalService.getTerminalConnectInfo(SecurityUtils.getLoginUserId(), cache.getHostId());
HostTerminalConnectDTO connectInfo = terminalService.getTerminalConnectInfo(SecurityUtils.getLoginUserId(), cache.getHostId());
sessionStore = SessionStores.openSessionStore(connectInfo);
executor = sessionStore.getSftpExecutor(connectInfo.getFileNameCharset());
executor.connect();

View File

@@ -39,7 +39,7 @@ import com.orion.visor.module.asset.handler.host.config.model.HostSshConfigModel
import com.orion.visor.module.asset.handler.host.extra.model.HostSshExtraModel;
import com.orion.visor.module.asset.service.HostConfigService;
import com.orion.visor.module.asset.service.HostExtraService;
import com.orion.visor.module.asset.service.HostTerminalService;
import com.orion.visor.module.asset.service.TerminalService;
import com.orion.visor.module.infra.api.DataPermissionApi;
import com.orion.visor.module.infra.api.DictValueApi;
import com.orion.visor.module.infra.enums.DataPermissionTypeEnum;
@@ -60,7 +60,7 @@ import java.util.stream.Collectors;
*/
@Slf4j
@Service
public class HostTerminalServiceImpl implements HostTerminalService {
public class TerminalServiceImpl implements TerminalService {
private static final String THEME_DICT_KEY = "terminalTheme";
@@ -107,7 +107,7 @@ public class HostTerminalServiceImpl implements HostTerminalService {
@Override
public String getTerminalAccessToken() {
LoginUser user = Valid.notNull(SecurityUtils.getLoginUser());
log.info("HostConnectService.getHostAccessToken userId: {}", user.getId());
log.info("HostTerminalService.getTerminalAccessToken userId: {}", user.getId());
String accessToken = UUIds.random19();
HostTerminalAccessDTO access = HostTerminalAccessDTO.builder()
.userId(user.getId())
@@ -122,7 +122,7 @@ public class HostTerminalServiceImpl implements HostTerminalService {
@Override
public String getTerminalTransferToken() {
LoginUser user = Valid.notNull(SecurityUtils.getLoginUser());
log.info("HostConnectService.getTerminalTransferToken userId: {}", user.getId());
log.info("HostTerminalService.getTerminalTransferToken userId: {}", user.getId());
String transferToken = UUIds.random19();
HostTerminalTransferDTO transfer = HostTerminalTransferDTO.builder()
.userId(user.getId())
@@ -160,7 +160,7 @@ public class HostTerminalServiceImpl implements HostTerminalService {
@Override
public HostTerminalConnectDTO getTerminalConnectInfo(Long hostId) {
log.info("HostConnectService.getTerminalConnectInfo-withHost hostId: {}", hostId);
log.info("HostTerminalService.getTerminalConnectInfo-withHost hostId: {}", hostId);
// 查询主机
HostDO host = hostDAO.selectById(hostId);
// 查询主机配置
@@ -181,7 +181,7 @@ public class HostTerminalServiceImpl implements HostTerminalService {
@Override
public HostTerminalConnectDTO getTerminalConnectInfo(Long userId, HostDO host) {
Long hostId = host.getId();
log.info("HostConnectService.getTerminalConnectInfo hostId: {}, userId: {}", hostId, userId);
log.info("HostTerminalService.getTerminalConnectInfo hostId: {}, userId: {}", hostId, userId);
// 验证主机是否有权限
List<Long> hostIdList = assetAuthorizedDataService.getUserAuthorizedHostId(userId);
Valid.isTrue(hostIdList.contains(hostId),

View File

@@ -65,7 +65,6 @@ public class SystemSettingController {
@GetMapping("/setting")
@Operation(summary = "查询系统设置")
@Parameter(name = "type", description = "type", required = true)
@PreAuthorize("@ss.hasPermission('infra:system-setting:query')")
public Map<String, Object> getSystemSettingByType(@RequestParam("type") String type) {
return systemSettingService.getSystemSettingByType(type);
}

View File

@@ -38,35 +38,35 @@ export interface TerminalThemeSchema {
}
/**
*
*
*/
export function getTerminalThemes() {
return axios.get<Array<TerminalTheme>>('/asset/host-terminal/themes');
return axios.get<Array<TerminalTheme>>('/asset/terminal/themes');
}
/**
* accessToken
* accessToken
*/
export function getTerminalAccessToken() {
return axios.get<string>('/asset/host-terminal/access');
return axios.get<string>('/asset/terminal/access');
}
/**
* transferToken
* transferToken
*/
export function getTerminalTransferToken() {
return axios.get<string>('/asset/host-terminal/transfer');
return axios.get<string>('/asset/terminal/transfer');
}
/**
* websocket
* websocket
*/
export const openHostTerminalChannel = (accessToken: string) => {
return createAppWebSocket(`/host/terminal/${accessToken}`);
};
/**
* websocket
* websocket
*/
export const openHostTransferChannel = (accessToken: string) => {
return createAppWebSocket(`/host/transfer/${accessToken}`);

View File

@@ -26,7 +26,7 @@
<!-- 右侧操作 -->
<ul class="right-side">
<!-- 主机终端 -->
<li v-permission="['asset:host-terminal:access']">
<li v-permission="['asset:terminal:access']">
<a-tooltip content="主机终端">
<a-button class="nav-btn"
type="outline"

View File

@@ -12,8 +12,8 @@ import type { ISshSession, ITerminalSession, PanelSessionTabType, TerminalPanelT
import type { AuthorizedHostQueryResponse } from '@/api/asset/asset-authorized-data';
import { getCurrentAuthorizedHost } from '@/api/asset/asset-authorized-data';
import type { HostQueryResponse } from '@/api/asset/host';
import type { TerminalTheme, TerminalThemeSchema } from '@/api/asset/host-terminal';
import { getTerminalThemes } from '@/api/asset/host-terminal';
import type { TerminalTheme, TerminalThemeSchema } from '@/api/asset/terminal';
import { getTerminalThemes } from '@/api/asset/terminal';
import { defineStore } from 'pinia';
import { getPreference, updatePreference } from '@/api/user/preference';
import { nextId } from '@/utils';

View File

@@ -1,6 +1,6 @@
import type { ISftpTransferManager, ITerminalPanelManager, ITerminalSessionManager, ITerminalTabManager } from '@/views/host/terminal/types/define';
import type { AuthorizedHostQueryResponse } from '@/api/asset/asset-authorized-data';
import type { TerminalTheme } from '@/api/asset/host-terminal';
import type { TerminalTheme } from '@/api/asset/terminal';
export interface TerminalState {
preference: TerminalPreference;

View File

@@ -1,7 +1,7 @@
// sftp 操作类型
export const SftpOperatorType = {
SFTP_MOVE: 'host-terminal:sftp-move',
SFTP_CHMOD: 'host-terminal:sftp-chmod',
SFTP_MOVE: 'terminal:sftp-move',
SFTP_CHMOD: 'terminal:sftp-chmod',
};
// 最大展示数量

View File

@@ -184,7 +184,7 @@
</a-doption>
<!-- SSH -->
<a-doption v-if="record.type === hostType.SSH.type"
v-permission="['asset:host-terminal:access']"
v-permission="['asset:terminal:access']"
@click="openNewRoute({ name: 'terminal', query: { connect: record.id, type: 'SSH' } })">
<span class="more-doption normal">
<icon-thunderbolt /> SSH
@@ -192,7 +192,7 @@
</a-doption>
<!-- SFTP -->
<a-doption v-if="record.type === hostType.SSH.type"
v-permission="['asset:host-terminal:access']"
v-permission="['asset:terminal:access']"
@click="openNewRoute({ name: 'terminal', query: { connect: record.id, type: 'SFTP' } })">
<span class="more-doption normal">
<icon-folder /> SFTP

View File

@@ -222,7 +222,7 @@
</a-doption>
<!-- SSH -->
<a-doption v-if="record.type === hostType.SSH.type"
v-permission="['asset:host-terminal:access']"
v-permission="['asset:terminal:access']"
@click="openNewRoute({ name: 'terminal', query: { connect: record.id, type: 'SSH' } })">
<span class="more-doption normal">
SSH
@@ -230,7 +230,7 @@
</a-doption>
<!-- SFTP -->
<a-doption v-if="record.type === hostType.SSH.type"
v-permission="['asset:host-terminal:access']"
v-permission="['asset:terminal:access']"
@click="openNewRoute({ name: 'terminal', query: { connect: record.id, type: 'SFTP' } })">
<span class="more-doption normal">
SFTP

View File

@@ -9,7 +9,7 @@
</script>
<script lang="ts" setup>
import type { TerminalThemeSchema } from '@/api/asset/host-terminal';
import type { TerminalThemeSchema } from '@/api/asset/terminal';
import { Terminal } from '@xterm/xterm';
import { onMounted, onUnmounted, ref } from 'vue';

View File

@@ -54,13 +54,13 @@
</script>
<script lang="ts" setup>
import type { TerminalTheme } from '@/api/asset/host-terminal';
import type { TerminalTheme } from '@/api/asset/terminal';
import type { ISshSession } from '../../../types/define';
import { useTerminalStore } from '@/store';
import { TerminalPreferenceItem } from '@/store/modules/terminal';
import { PanelSessionType } from '../../../types/const';
import { onMounted, ref } from 'vue';
import { getTerminalThemes } from '@/api/asset/host-terminal';
import { getTerminalThemes } from '@/api/asset/terminal';
import { getPreference } from '@/api/user/preference';
import useLoading from '@/hooks/loading';
import TerminalExample from '../terminal-example.vue';

View File

@@ -1,7 +1,7 @@
import type { ISftpTransferHandler, ISftpTransferManager, SftpFile, SftpTransferItem, TransferOperatorResponse } from '../types/define';
import { sessionCloseMsg, TransferReceiver, TransferStatus, TransferType } from '../types/const';
import { Message } from '@arco-design/web-vue';
import { getTerminalTransferToken, openHostTransferChannel } from '@/api/asset/host-terminal';
import { getTerminalTransferToken, openHostTransferChannel } from '@/api/asset/terminal';
import { nextId } from '@/utils';
import SftpTransferUploader from './sftp-transfer-uploader';
import SftpTransferDownloader from './sftp-transfer-downloader';

View File

@@ -2,7 +2,7 @@ import type { ITerminalChannel, ITerminalOutputProcessor, ITerminalSessionManage
import type { InputPayload, Protocol } from '@/types/protocol/terminal.protocol';
import { format, OutputProtocol, parse } from '@/types/protocol/terminal.protocol';
import { sessionCloseMsg } from '../types/const';
import { getTerminalAccessToken, openHostTerminalChannel } from '@/api/asset/host-terminal';
import { getTerminalAccessToken, openHostTerminalChannel } from '@/api/asset/terminal';
import { Message } from '@arco-design/web-vue';
import TerminalOutputProcessor from './terminal-output-processor';

View File

@@ -181,8 +181,8 @@ INSERT INTO `dict_value` VALUES (176, 27, 'terminalConnectType', 'SSH', 'SSH', '
INSERT INTO `dict_value` VALUES (177, 28, 'terminalConnectStatus', 'CONNECTING', '连接中', '{\"color\": \"rgb(var(--green-6))\"}', 10, '2023-12-26 23:29:00', '2024-10-15 11:59:01', '1', '1', 0);
INSERT INTO `dict_value` VALUES (178, 28, 'terminalConnectStatus', 'COMPLETE', '完成', '{\"color\": \"rgb(var(--blue-6))\"}', 20, '2023-12-26 23:29:15', '2024-10-15 11:59:01', '1', '1', 0);
INSERT INTO `dict_value` VALUES (179, 28, 'terminalConnectStatus', 'FAILED', '失败', '{\"color\": \"rgb(var(--red-6))\"}', 30, '2023-12-26 23:29:34', '2024-10-15 11:59:01', '1', '1', 0);
INSERT INTO `dict_value` VALUES (180, 1, 'operatorLogModule', 'asset:host-terminal', '主机终端', '{}', 2050, '2023-12-27 18:42:39', '2024-04-11 23:34:50', '2', '1', 0);
INSERT INTO `dict_value` VALUES (181, 2, 'operatorLogType', 'host-terminal:connect', '连接主机终端', '{}', 10, '2023-12-27 18:43:17', '2024-04-11 23:34:50', '2', '1', 0);
INSERT INTO `dict_value` VALUES (180, 1, 'operatorLogModule', 'asset:terminal', '主机终端', '{}', 2050, '2023-12-27 18:42:39', '2024-10-15 15:52:47', '2', '1', 0);
INSERT INTO `dict_value` VALUES (181, 2, 'operatorLogType', 'terminal:connect', '连接主机终端', '{}', 10, '2023-12-27 18:43:17', '2024-10-15 15:54:47', '2', '1', 0);
INSERT INTO `dict_value` VALUES (182, 29, 'terminalSessionStatus', '0', '连接中', '{\"status\": \"normal\"}', 10, '2024-01-09 00:32:47', '2024-10-15 13:39:21', '1', '1', 0);
INSERT INTO `dict_value` VALUES (183, 29, 'terminalSessionStatus', '1', '已连接', '{\"status\": \"processing\"}', 20, '2024-01-09 00:32:59', '2024-10-15 13:39:23', '1', '1', 0);
INSERT INTO `dict_value` VALUES (184, 29, 'terminalSessionStatus', '2', '已断开', '{\"status\": \"danger\"}', 30, '2024-01-09 00:33:09', '2024-10-15 13:39:24', '1', '1', 0);
@@ -191,15 +191,15 @@ INSERT INTO `dict_value` VALUES (190, 31, 'terminalEmulationType', 'xterm-16colo
INSERT INTO `dict_value` VALUES (191, 31, 'terminalEmulationType', 'xterm-256color', 'xterm-256color', '{}', 30, '2024-01-11 23:35:55', '2024-01-11 23:35:55', '1', '1', 0);
INSERT INTO `dict_value` VALUES (192, 31, 'terminalEmulationType', 'vt100', 'vt100', '{}', 40, '2024-01-11 23:36:00', '2024-01-11 23:36:00', '1', '1', 0);
INSERT INTO `dict_value` VALUES (193, 27, 'terminalConnectType', 'SFTP', 'SFTP', '{\"color\": \"purple\"}', 20, '2024-02-04 18:23:10', '2024-10-15 11:56:41', '1', '1', 0);
INSERT INTO `dict_value` VALUES (194, 2, 'operatorLogType', 'host-terminal:sftp-mkdir', '创建文件夹', '{}', 20, '2024-02-23 17:53:21', '2024-02-23 17:53:21', '1', '1', 0);
INSERT INTO `dict_value` VALUES (195, 2, 'operatorLogType', 'host-terminal:sftp-touch', '创建文件', '{}', 30, '2024-02-23 17:53:28', '2024-02-23 17:53:28', '1', '1', 0);
INSERT INTO `dict_value` VALUES (196, 2, 'operatorLogType', 'host-terminal:sftp-move', '移动文件', '{}', 40, '2024-02-23 17:53:39', '2024-02-23 17:53:39', '1', '1', 0);
INSERT INTO `dict_value` VALUES (197, 2, 'operatorLogType', 'host-terminal:sftp-remove', '删除文件', '{}', 50, '2024-02-23 17:53:51', '2024-02-23 17:53:51', '1', '1', 0);
INSERT INTO `dict_value` VALUES (198, 2, 'operatorLogType', 'host-terminal:sftp-truncate', '截断文件', '{}', 60, '2024-02-23 17:54:06', '2024-02-23 17:54:06', '1', '1', 0);
INSERT INTO `dict_value` VALUES (199, 2, 'operatorLogType', 'host-terminal:sftp-chmod', '文件提权', '{}', 70, '2024-02-23 17:54:17', '2024-02-23 17:54:17', '1', '1', 0);
INSERT INTO `dict_value` VALUES (200, 2, 'operatorLogType', 'host-terminal:sftp-set-content', '修改文件内容', '{}', 80, '2024-02-23 17:54:37', '2024-02-23 17:54:37', '1', '1', 0);
INSERT INTO `dict_value` VALUES (201, 2, 'operatorLogType', 'host-terminal:sftp-upload', '上传文件', '{}', 90, '2024-02-23 17:54:52', '2024-02-23 17:54:52', '1', '1', 0);
INSERT INTO `dict_value` VALUES (202, 2, 'operatorLogType', 'host-terminal:sftp-download', '下载文件', '{}', 100, '2024-02-23 17:55:03', '2024-02-23 17:55:03', '1', '1', 0);
INSERT INTO `dict_value` VALUES (194, 2, 'operatorLogType', 'terminal:sftp-mkdir', '创建文件夹', '{}', 20, '2024-02-23 17:53:21', '2024-10-15 15:54:47', '1', '1', 0);
INSERT INTO `dict_value` VALUES (195, 2, 'operatorLogType', 'terminal:sftp-touch', '创建文件', '{}', 30, '2024-02-23 17:53:28', '2024-10-15 15:54:47', '1', '1', 0);
INSERT INTO `dict_value` VALUES (196, 2, 'operatorLogType', 'terminal:sftp-move', '移动文件', '{}', 40, '2024-02-23 17:53:39', '2024-10-15 15:54:47', '1', '1', 0);
INSERT INTO `dict_value` VALUES (197, 2, 'operatorLogType', 'terminal:sftp-remove', '删除文件', '{}', 50, '2024-02-23 17:53:51', '2024-10-15 15:54:47', '1', '1', 0);
INSERT INTO `dict_value` VALUES (198, 2, 'operatorLogType', 'terminal:sftp-truncate', '截断文件', '{}', 60, '2024-02-23 17:54:06', '2024-10-15 15:54:47', '1', '1', 0);
INSERT INTO `dict_value` VALUES (199, 2, 'operatorLogType', 'terminal:sftp-chmod', '文件提权', '{}', 70, '2024-02-23 17:54:17', '2024-10-15 15:54:47', '1', '1', 0);
INSERT INTO `dict_value` VALUES (200, 2, 'operatorLogType', 'terminal:sftp-set-content', '修改文件内容', '{}', 80, '2024-02-23 17:54:37', '2024-10-15 15:54:47', '1', '1', 0);
INSERT INTO `dict_value` VALUES (201, 2, 'operatorLogType', 'terminal:sftp-upload', '上传文件', '{}', 90, '2024-02-23 17:54:52', '2024-10-15 15:54:47', '1', '1', 0);
INSERT INTO `dict_value` VALUES (202, 2, 'operatorLogType', 'terminal:sftp-download', '下载文件', '{}', 100, '2024-02-23 17:55:03', '2024-10-15 15:54:47', '1', '1', 0);
INSERT INTO `dict_value` VALUES (203, 32, 'terminalTabColor', 'red', '红色', '{\"bg\": \"rgb(var(--red-2))\", \"color\": \"rgb(var(--red-6))\"}', 10, '2024-03-01 15:07:41', '2024-08-05 14:24:28', '1', '1', 0);
INSERT INTO `dict_value` VALUES (204, 32, 'terminalTabColor', 'orange', '橙色', '{\"bg\": \"rgb(var(--orange-2))\", \"color\": \"rgb(var(--orange-6))\"}', 20, '2024-03-01 15:07:55', '2024-08-05 14:24:23', '1', '1', 0);
INSERT INTO `dict_value` VALUES (205, 32, 'terminalTabColor', 'yellow', '黄色', '{\"bg\": \"rgb(var(--yellow-2))\", \"color\": \"rgb(var(--yellow-6))\"}', 30, '2024-03-01 15:08:13', '2024-08-05 14:24:15', '1', '1', 0);
@@ -218,16 +218,16 @@ INSERT INTO `dict_value` VALUES (218, 2, 'operatorLogType', 'terminal-connect-lo
INSERT INTO `dict_value` VALUES (219, 1, 'operatorLogModule', 'infra:operator-log', '操作日志', '{}', 1060, '2024-03-04 16:32:11', '2024-03-04 16:32:11', '1', '1', 0);
INSERT INTO `dict_value` VALUES (220, 2, 'operatorLogType', 'operator-log:delete', '删除操作日志', '{}', 10, '2024-03-04 16:33:11', '2024-03-04 16:33:44', '1', '1', 0);
INSERT INTO `dict_value` VALUES (221, 2, 'operatorLogType', 'operator-log:clear', '清空操作日志', '{}', 20, '2024-03-04 16:33:31', '2024-03-04 16:33:31', '1', '1', 0);
INSERT INTO `dict_value` VALUES (222, 2, 'operatorLogType', 'host-terminal:delete-sftp-log', '删除文件操作日志', '{}', 15, '2024-03-05 15:28:00', '2024-04-12 13:47:36', '1', '1', 0);
INSERT INTO `dict_value` VALUES (223, 33, 'sftpOperatorType', 'host-terminal:sftp-mkdir', '创建文件夹', '{}', 10, '2024-03-05 16:50:17', '2024-03-05 16:50:17', '1', '1', 0);
INSERT INTO `dict_value` VALUES (224, 33, 'sftpOperatorType', 'host-terminal:sftp-touch', '创建文件', '{}', 20, '2024-03-05 16:50:27', '2024-03-05 16:50:27', '1', '1', 0);
INSERT INTO `dict_value` VALUES (225, 33, 'sftpOperatorType', 'host-terminal:sftp-move', '移动文件', '{}', 30, '2024-03-05 16:50:41', '2024-03-05 16:50:41', '1', '1', 0);
INSERT INTO `dict_value` VALUES (226, 33, 'sftpOperatorType', 'host-terminal:sftp-remove', '删除文件', '{}', 40, '2024-03-05 16:50:53', '2024-03-05 16:50:53', '1', '1', 0);
INSERT INTO `dict_value` VALUES (227, 33, 'sftpOperatorType', 'host-terminal:sftp-truncate', '截断文件', '{}', 50, '2024-03-05 16:51:04', '2024-03-05 16:51:04', '1', '1', 0);
INSERT INTO `dict_value` VALUES (228, 33, 'sftpOperatorType', 'host-terminal:sftp-chmod', '文件提权', '{}', 60, '2024-03-05 16:51:15', '2024-03-05 16:51:15', '1', '1', 0);
INSERT INTO `dict_value` VALUES (229, 33, 'sftpOperatorType', 'host-terminal:sftp-set-content', '修改文件内容', '{}', 70, '2024-03-05 16:51:30', '2024-03-05 16:51:48', '1', '1', 0);
INSERT INTO `dict_value` VALUES (230, 33, 'sftpOperatorType', 'host-terminal:sftp-upload', '上传文件', '{}', 80, '2024-03-05 16:52:06', '2024-03-05 16:52:06', '1', '1', 0);
INSERT INTO `dict_value` VALUES (231, 33, 'sftpOperatorType', 'host-terminal:sftp-download', '下载文件', '{}', 90, '2024-03-05 16:52:18', '2024-03-05 16:52:18', '1', '1', 0);
INSERT INTO `dict_value` VALUES (222, 2, 'operatorLogType', 'terminal:delete-sftp-log', '删除文件操作日志', '{}', 15, '2024-03-05 15:28:00', '2024-10-15 15:54:47', '1', '1', 0);
INSERT INTO `dict_value` VALUES (223, 33, 'sftpOperatorType', 'terminal:sftp-mkdir', '创建文件夹', '{}', 10, '2024-03-05 16:50:17', '2024-10-15 15:54:47', '1', '1', 0);
INSERT INTO `dict_value` VALUES (224, 33, 'sftpOperatorType', 'terminal:sftp-touch', '创建文件', '{}', 20, '2024-03-05 16:50:27', '2024-10-15 15:54:47', '1', '1', 0);
INSERT INTO `dict_value` VALUES (225, 33, 'sftpOperatorType', 'terminal:sftp-move', '移动文件', '{}', 30, '2024-03-05 16:50:41', '2024-10-15 15:54:47', '1', '1', 0);
INSERT INTO `dict_value` VALUES (226, 33, 'sftpOperatorType', 'terminal:sftp-remove', '删除文件', '{}', 40, '2024-03-05 16:50:53', '2024-10-15 15:54:47', '1', '1', 0);
INSERT INTO `dict_value` VALUES (227, 33, 'sftpOperatorType', 'terminal:sftp-truncate', '截断文件', '{}', 50, '2024-03-05 16:51:04', '2024-10-15 15:54:47', '1', '1', 0);
INSERT INTO `dict_value` VALUES (228, 33, 'sftpOperatorType', 'terminal:sftp-chmod', '文件提权', '{}', 60, '2024-03-05 16:51:15', '2024-10-15 15:54:47', '1', '1', 0);
INSERT INTO `dict_value` VALUES (229, 33, 'sftpOperatorType', 'terminal:sftp-set-content', '修改文件内容', '{}', 70, '2024-03-05 16:51:30', '2024-10-15 15:54:47', '1', '1', 0);
INSERT INTO `dict_value` VALUES (230, 33, 'sftpOperatorType', 'terminal:sftp-upload', '上传文件', '{}', 80, '2024-03-05 16:52:06', '2024-10-15 15:54:47', '1', '1', 0);
INSERT INTO `dict_value` VALUES (231, 33, 'sftpOperatorType', 'terminal:sftp-download', '下载文件', '{}', 90, '2024-03-05 16:52:18', '2024-10-15 15:54:47', '1', '1', 0);
INSERT INTO `dict_value` VALUES (232, 1, 'operatorLogModule', 'asset:exec-template', '执行模板', '{}', 2070, '2024-03-07 18:32:41', '2024-03-07 18:32:41', '1', '1', 0);
INSERT INTO `dict_value` VALUES (233, 2, 'operatorLogType', 'exec-template:create', '创建执行模板', '{}', 10, '2024-03-07 18:32:41', '2024-04-12 13:48:54', '1', '1', 0);
INSERT INTO `dict_value` VALUES (234, 2, 'operatorLogType', 'exec-template:update', '更新执行模板', '{}', 20, '2024-03-07 18:32:41', '2024-04-12 13:48:56', '1', '1', 0);
@@ -317,6 +317,8 @@ INSERT INTO `dict_value` VALUES (402, 53, 'terminalTheme', '{\"background\":\"#1
INSERT INTO `dict_value` VALUES (403, 53, 'terminalTheme', '{\"background\":\"#F4F4F4\",\"foreground\":\"#3E3E3E\",\"cursor\":\"#3F3F3F\",\"selectionBackground\":\"#A9C1E2\",\"black\":\"#3E3E3E\",\"red\":\"#970B16\",\"green\":\"#07962A\",\"yellow\":\"#F8EEC7\",\"blue\":\"#003E8A\",\"cyan\":\"#89D1EC\",\"white\":\"#FFFFFF\",\"brightBlack\":\"#666666\",\"brightRed\":\"#DE0000\",\"brightGreen\":\"#87D5A2\",\"brightYellow\":\"#F1D007\",\"brightBlue\":\"#2E6CBA\",\"brightCyan\":\"#1CFAFE\",\"brightWhite\":\"#FFFFFF\"}', 'Github', '{\"dark\": false}', 160, '2024-08-19 18:53:39', '2024-08-19 18:53:39', '1', '1', 0);
INSERT INTO `dict_value` VALUES (404, 53, 'terminalTheme', '{\"background\":\"#1F1F1F\",\"foreground\":\"#B9BCBA\",\"cursor\":\"#F83E19\",\"selectionBackground\":\"#2A2D32\",\"black\":\"#3A3D43\",\"red\":\"#BE3F48\",\"green\":\"#879A3B\",\"yellow\":\"#C5A635\",\"blue\":\"#4F76A1\",\"cyan\":\"#578FA4\",\"white\":\"#B9BCBA\",\"brightBlack\":\"#888987\",\"brightRed\":\"#FB001F\",\"brightGreen\":\"#0F722F\",\"brightYellow\":\"#C47033\",\"brightBlue\":\"#186DE3\",\"brightCyan\":\"#2E706D\",\"brightWhite\":\"#FDFFB9\"}', 'DimmedMonokai', '{\"dark\": true}', 170, '2024-08-19 18:53:52', '2024-08-19 18:53:52', '1', '1', 0);
INSERT INTO `dict_value` VALUES (405, 53, 'terminalTheme', '{\"background\":\"#1F1D27\",\"foreground\":\"#B7A1FF\",\"cursor\":\"#FF9839\",\"selectionBackground\":\"#353147\",\"black\":\"#1F1D27\",\"red\":\"#D9393E\",\"green\":\"#2DCD73\",\"yellow\":\"#D9B76E\",\"blue\":\"#FFC284\",\"cyan\":\"#2488FF\",\"white\":\"#B7A1FF\",\"brightBlack\":\"#353147\",\"brightRed\":\"#D9393E\",\"brightGreen\":\"#2DCD73\",\"brightYellow\":\"#D9B76E\",\"brightBlue\":\"#FFC284\",\"brightCyan\":\"#2488FF\",\"brightWhite\":\"#EAE5FF\"}', 'Duotone Dark', '{\"dark\": true}', 180, '2024-08-19 18:54:09', '2024-08-19 18:54:09', '1', '1', 0);
INSERT INTO `dict_value` VALUES (424, 1, 'operatorLogModule', 'infra:system-setting', '系统设置', '{}', 1070, '2024-10-09 19:28:58', '2024-10-09 19:28:58', '1', '1', 0);
INSERT INTO `dict_value` VALUES (425, 2, 'operatorLogType', 'system-setting:update', '更新系统设置', '{}', 10, '2024-10-09 19:30:17', '2024-10-09 19:30:43', '1', '1', 0);
-- 菜单配置
INSERT INTO `system_menu` VALUES (1, 0, '工作台', NULL, 1, 10, 1, 1, 1, 0, 'IconComputer', NULL, 'workplace', '2023-07-28 10:51:50', '2024-08-11 00:05:44', '1', '1', 0);
@@ -390,7 +392,7 @@ INSERT INTO `system_menu` VALUES (145, 0, '主机运维', NULL, 1, 400, 1, 1, 1,
INSERT INTO `system_menu` VALUES (146, 145, '主机终端', NULL, 2, 10, 1, 1, 1, 1, 'icon-code-square', NULL, 'terminal', '2023-12-04 23:38:01', '2024-03-07 19:09:44', '1', '1', 0);
INSERT INTO `system_menu` VALUES (148, 152, '连接日志', NULL, 2, 10, 1, 1, 1, 0, 'IconLink', NULL, 'connectLog', '2023-12-26 22:53:07', '2024-03-07 19:09:59', '1', '1', 0);
INSERT INTO `system_menu` VALUES (149, 148, '查询连接日志', 'asset:terminal-connect-log:management:query', 3, 10, 1, 1, 1, 0, NULL, NULL, NULL, '2023-12-26 22:53:08', '2024-10-15 11:28:08', '1', '1', 0);
INSERT INTO `system_menu` VALUES (151, 146, '连接终端', 'asset:host-terminal:access', 3, 10, 1, 1, 1, 0, NULL, NULL, NULL, '2023-12-27 18:56:33', '2023-12-27 18:56:33', '2', '2', 0);
INSERT INTO `system_menu` VALUES (151, 146, '连接终端', 'asset:terminal:access', 3, 10, 1, 1, 1, 0, NULL, NULL, NULL, '2023-12-27 18:56:33', '2024-10-15 15:52:13', '2', '2', 0);
INSERT INTO `system_menu` VALUES (152, 0, '运维审计', NULL, 1, 410, 1, 1, 1, 0, 'IconSafe', NULL, 'assetAuditModule', '2024-01-04 17:54:56', '2024-04-28 15:30:04', '1', '1', 0);
INSERT INTO `system_menu` VALUES (153, 148, '删除连接日志', 'asset:terminal-connect-log:management:delete', 3, 20, 1, 1, 1, 0, NULL, NULL, NULL, '2024-03-04 13:39:46', '2024-10-15 11:28:08', '1', '1', 0);
INSERT INTO `system_menu` VALUES (154, 148, '清空连接日志', 'asset:terminal-connect-log:management:clear', 3, 30, 1, 1, 1, 0, NULL, NULL, NULL, '2024-03-04 13:40:05', '2024-10-15 11:28:08', '1', '1', 0);
@@ -439,3 +441,4 @@ INSERT INTO `system_menu` VALUES (200, 198, '查询上传日志', 'asset:upload-
INSERT INTO `system_menu` VALUES (201, 198, '删除上传日志', 'asset:upload-task:delete', 3, 20, 1, 1, 1, 0, NULL, NULL, NULL, '2024-05-08 22:20:26', '2024-05-08 22:20:26', '1', '1', 0);
INSERT INTO `system_menu` VALUES (202, 198, '清理上传日志', 'asset:upload-task:management:clear', 3, 30, 1, 1, 1, 0, NULL, NULL, NULL, '2024-05-08 22:20:37', '2024-05-08 22:20:37', '1', '1', 0);
INSERT INTO `system_menu` VALUES (203, 12, '系统设置', NULL, 2, 40, 1, 1, 1, 0, 'IconSettings', NULL, 'systemSetting', '2024-06-17 20:46:15', '2024-06-17 20:46:15', '1', '1', 0);
INSERT INTO `system_menu` VALUES (265, 203, '更新系统设置', 'infra:system-setting:update', 3, 20, 1, 1, 1, 0, NULL, NULL, NULL, '2024-10-09 19:25:28', '2024-10-09 19:25:28', '1', '1', 0);