Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions agent/app/api/v2/setting.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,28 @@
helper.SuccessWithData(c, err == nil)
}

// @Tags System Setting
// @Summary Update local is conn
// @Accept json
// @Param request body dto.SSHDefaultConn true "request"
// @Success 200
// @Security ApiKeyAuth
// @Security Timestamp
// @Router /settings/ssh/conn/default [post]
// @x-panel-log {"bodyKeys":["defaultConn"],"paramKeys":[],"BeforeFunctions":[],"formatZH":"本地终端默认连接 [defaultConn]","formatEN":"update system default conn [defaultConn]"}
func (b *BaseApi) SetDefaultIsConn(c *gin.Context) {
var req dto.SSHDefaultConn
if err := helper.CheckBindAndValidate(&req, c); err != nil {

Check warning on line 98 in agent/app/api/v2/setting.go

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this unnecessary variable declaration and use the expression directly in the condition.

See more on https://sonarcloud.io/project/issues?id=1Panel-dev_1Panel&issues=AZsgzdgZKpCHgIPLBsod&open=AZsgzdgZKpCHgIPLBsod&pullRequest=11336
return
}

if err := settingService.SetDefaultIsConn(req); err != nil {
helper.InternalServer(c, err)
return
}
helper.Success(c)
}

// @Tags System Setting
// @Summary Check local conn info
// @Success 200 {boolean} isOk
Expand Down
4 changes: 4 additions & 0 deletions agent/app/dto/setting.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,10 @@ type Clean struct {
Size uint64 `json:"size"`
}

type SSHDefaultConn struct {
WithReset bool `json:"withReset"`
DefaultConn string `json:"defaultConn"`
}
type SSHConnData struct {
Addr string `json:"addr" validate:"required"`
Port uint `json:"port" validate:"required,number,max=65535,min=1"`
Expand Down
12 changes: 12 additions & 0 deletions agent/app/service/setting.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"github.com/1Panel-dev/1Panel/agent/app/model"
"github.com/1Panel-dev/1Panel/agent/app/repo"
"github.com/1Panel-dev/1Panel/agent/buserr"
"github.com/1Panel-dev/1Panel/agent/constant"
"github.com/1Panel-dev/1Panel/agent/utils/encrypt"
"github.com/1Panel-dev/1Panel/agent/utils/ssh"
"github.com/jinzhu/copier"
Expand All @@ -22,6 +23,7 @@ type ISettingService interface {

TestConnByInfo(req dto.SSHConnData) bool
SaveConnInfo(req dto.SSHConnData) error
SetDefaultIsConn(req dto.SSHDefaultConn) error
GetSystemProxy() (*dto.SystemProxy, error)
GetLocalConn() dto.SSHConnData
GetSettingByKey(key string) string
Expand Down Expand Up @@ -125,6 +127,15 @@ func (u *SettingService) SaveConnInfo(req dto.SSHConnData) error {
return nil
}

func (u *SettingService) SetDefaultIsConn(req dto.SSHDefaultConn) error {
if req.DefaultConn == constant.StatusDisable && req.WithReset {
if err := settingRepo.Update("LocalSSHConn", ""); err != nil {
return err
}
}
return settingRepo.Update("LocalSSHConnShow", req.DefaultConn)
}

func (u *SettingService) GetSystemProxy() (*dto.SystemProxy, error) {
systemProxy := dto.SystemProxy{}
systemProxy.Type, _ = settingRepo.GetValueByKey("ProxyType")
Expand All @@ -138,6 +149,7 @@ func (u *SettingService) GetSystemProxy() (*dto.SystemProxy, error) {

func (u *SettingService) GetLocalConn() dto.SSHConnData {
var data dto.SSHConnData
data.LocalSSHConnShow, _ = settingRepo.GetValueByKey("LocalSSHConnShow")
connItem, _ := settingRepo.GetValueByKey("LocalSSHConn")
if len(connItem) == 0 {
return data
Expand Down
1 change: 1 addition & 0 deletions agent/router/ro_setting.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ func (s *SettingRouter) InitRouter(Router *gin.RouterGroup) {

settingRouter.POST("/ssh/check", baseApi.CheckLocalConn)
settingRouter.GET("/ssh/conn", baseApi.LoadLocalConn)
settingRouter.POST("/ssh/default", baseApi.SetDefaultIsConn)
settingRouter.POST("/ssh", baseApi.SaveLocalConn)
settingRouter.POST("/ssh/check/info", baseApi.CheckLocalConnByInfo)
}
Expand Down
3 changes: 3 additions & 0 deletions frontend/src/api/modules/terminal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ export const getHostByID = (id: number) => {
export const getHostTree = (params: Host.ReqSearch) => {
return http.post<Array<Host.HostTree>>(`/core/hosts/tree`, params);
};
export const updateLocalConn = (param: { withReset: boolean; defaultConn: string }) => {
return http.post(`/settings/ssh/default`, param);
};
export const addHost = (params: Host.HostOperate) => {
let request = deepCopy(params) as Host.HostOperate;
if (request.password) {
Expand Down
3 changes: 1 addition & 2 deletions frontend/src/components/del-dialog/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
</div>
<template #footer>
<span class="dialog-footer">
<el-button @click="open = false" :disabled="loading">
<el-button @click="handleClose" :disabled="loading">
{{ $t('commons.button.cancel') }}
</el-button>
<el-button type="primary" @click="onConfirm" :disabled="loading">
Expand Down Expand Up @@ -88,7 +88,6 @@ const onConfirm = async () => {
await form
.api(form.params)
.then(() => {
emit('cancel');
emit('search');
if (!noMsg.value) {
MsgSuccess(successMsg.value ?? i18n.global.t('commons.msg.deleteSuccess'));
Expand Down
1 change: 1 addition & 0 deletions frontend/src/lang/modules/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1270,6 +1270,7 @@ const message = {
defaultConn: 'Default Connection',
defaultConnHelper:
'This operation will automatically connect to the node terminal after opening the terminal for 【{0}】. Continue?',
withReset: 'Reset Connection Information',
localConnJump:
'Default connection information is maintained in [Terminal - Settings]. If connection fails, please edit there!',
localHelper: 'The `local` name is used only for system local identification',
Expand Down
1 change: 1 addition & 0 deletions frontend/src/lang/modules/es-es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1279,6 +1279,7 @@ const message = {
defaultConn: 'Conexión predeterminada',
defaultConnHelper:
'Esta operación conectará automáticamente al terminal del nodo después de abrir el terminal para 【{0}】. ¿Continuar?',
withReset: 'Restablecer Información de Conexión',
localConnJump:
'La información de conexión predeterminada se mantiene en [Terminal - Configuración]. Si la conexión falla, ¡edite allí!',
localHelper: 'El nombre `local` se utiliza solo para identificación interna del sistema',
Expand Down
1 change: 1 addition & 0 deletions frontend/src/lang/modules/ja.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1236,6 +1236,7 @@ const message = {
defaultConn: 'デフォルト接続',
defaultConnHelper:
'この操作は【{0}】のターミナルを開いた後、自動的にノードターミナルに接続します。続行しますか?',
withReset: '接続情報をリセット',
localConnJump:
'デフォルト接続情報は【ターミナル - 設定】で管理されています。接続に失敗した場合はこちらで編集してください!',
localHelper: 'ローカル名はシステムのローカル識別にのみ使用されます。',
Expand Down
1 change: 1 addition & 0 deletions frontend/src/lang/modules/ko.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1225,6 +1225,7 @@ const message = {
local: '로컬',
defaultConn: '기본 연결',
defaultConnHelper: '이 작업은 【{0}】의 터미널을 연 후 자동으로 노드 터미널에 연결됩니다. 계속하시겠습니까?',
withReset: '연결 정보 재설정',
localConnJump: '기본 연결 정보는 [터미널 - 설정]에서 관리됩니다. 연결 실패 시 해당 위치에서 편집하세요!',
localHelper: '로컬 이름은 시스템 로컬 식별에만 사용됩니다.',
connLocalErr: '자동 인증에 실패했습니다. 로컬 서버 로그인 정보를 입력해주세요.',
Expand Down
1 change: 1 addition & 0 deletions frontend/src/lang/modules/ms.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1265,6 +1265,7 @@ const message = {
defaultConn: 'Sambungan Lalai',
defaultConnHelper:
'Operasi ini akan menyambung secara automatik ke terminal nod selepas membuka terminal untuk 【{0}】. Teruskan?',
withReset: 'Tetapkan Semula Maklumat Sambungan',
localConnJump:
'Maklumat sambungan lalai dikekalkan dalam [Terminal - Tetapan]. Jika sambungan gagal, sila edit di sana!',
localHelper: 'Nama tempatan hanya digunakan untuk pengenalan sistem tempatan.',
Expand Down
1 change: 1 addition & 0 deletions frontend/src/lang/modules/pt-br.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1258,6 +1258,7 @@ const message = {
defaultConn: 'Conexão Padrão',
defaultConnHelper:
'Esta operação conectará automaticamente ao terminal do nó após abrir o terminal para 【{0}】. Continuar?',
withReset: 'Redefinir Informações de Conexão',
localConnJump:
'As informações de conexão padrão são mantidas em [Terminal - Configurações]. Se a conexão falhar, edite lá!',
localHelper: 'O nome local é usado apenas para identificação local do sistema.',
Expand Down
1 change: 1 addition & 0 deletions frontend/src/lang/modules/ru.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1260,6 +1260,7 @@ const message = {
defaultConn: 'Соединение по умолчанию',
defaultConnHelper:
'Эта операция автоматически подключится к узловому терминалу после открытия терминала для 【{0}】. Продолжить?',
withReset: 'Сбросить Информацию о Подключении',
localConnJump:
'Информация о соединении по умолчанию поддерживается в [Терминал - Настройки]. Если соединение не удается, отредактируйте там!',
localHelper: 'Локальное имя используется только для локальной идентификации системы.',
Expand Down
1 change: 1 addition & 0 deletions frontend/src/lang/modules/tr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1284,6 +1284,7 @@ const message = {
defaultConn: 'Varsayılan Bağlantı',
defaultConnHelper:
'Bu işlem, 【{0}】 için terminal açıldıktan sonra otomatik olarak düğüm terminaline bağlanacaktır. Devam etmek istiyor musunuz?',
withReset: 'Bağlantı Bilgilerini Sıfırla',
localConnJump:
'Varsayılan bağlantı bilgileri [Terminal - Ayarlar] bölümünde yönetilir. Bağlantı başarısız olursa lütfen oradan düzenleyin!',
localHelper: '`local` adı sadece sistem yerel tanımlaması için kullanılır',
Expand Down
1 change: 1 addition & 0 deletions frontend/src/lang/modules/zh-Hant.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1202,6 +1202,7 @@ const message = {
local: '本機',
defaultConn: '預設連接',
defaultConnHelper: '該操作將【{0}】開啟終端後自動連線到所在節點終端,是否繼續?',
withReset: '重置連線資訊',
localConnJump: '預設連線資訊在【終端 - 設定】中維護,連線失敗可前往編輯!',
localHelper: 'local 名稱僅用於系統本機標識',
connLocalErr: '無法自動認證,請填寫本機伺服器的登入資訊!',
Expand Down
1 change: 1 addition & 0 deletions frontend/src/lang/modules/zh.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1209,6 +1209,7 @@ const message = {
local: '本机',
defaultConn: '默认连接',
defaultConnHelper: '该操作将【{0}】打开终端后自动连接所在节点终端,是否继续?',
withReset: '重置连接信息',
localConnJump: '默认连接信息在 【 终端 - 配置 】中维护,连接失败可前往编辑!',
localHelper: 'local 名称仅用于系统本机标识',
connLocalErr: '无法自动认证,请填写本地服务器的登录信息!',
Expand Down
7 changes: 4 additions & 3 deletions frontend/src/views/terminal/setting/default_conn/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ const form = reactive({
groupID: 0,
description: '',
rememberPassword: false,
localSSHConnShow: '',
});
const rules = reactive({
addr: [Rules.ipV4V6OrDomain],
Expand All @@ -90,9 +91,9 @@ const acceptParams = (): void => {
const search = async () => {
await loadLocalConn().then((res) => {
if (res.data) {
form.addr = res.data.addr;
form.port = res.data.port;
form.authMode = res.data.authMode;
form.addr = res.data.addr || '127.0.0.1';
form.port = res.data.port || 22;
form.authMode = res.data.authMode || 'password';
form.password = Base64.decode(res.data.password);
form.privateKey = Base64.decode(res.data.privateKey);
form.passPhrase = Base64.decode(res.data.passPhrase);
Expand Down
36 changes: 24 additions & 12 deletions frontend/src/views/terminal/setting/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -104,21 +104,31 @@
</template>
</LayoutContent>
<OperateDialog @search="loadConnShow" ref="dialogRef" />

<OpDialog ref="opRef" @search="search" @cancel="loadConnShow">
<template #content>
<el-form class="mt-4 mb-1" ref="deleteForm" v-if="!form.showDefaultConn" label-position="left">
<el-form-item>
<el-checkbox v-model="resetConn" :label="$t('terminal.withReset')" />
</el-form-item>
</el-form>
</template>
</OpDialog>
</div>
</template>

<script lang="ts" setup>
import { ref, reactive } from 'vue';
import { ElForm } from 'element-plus';
import { getTerminalInfo, updateAgentSetting, UpdateTerminalInfo } from '@/api/modules/setting';
import { getTerminalInfo, UpdateTerminalInfo } from '@/api/modules/setting';
import { Terminal } from '@xterm/xterm';
import OperateDialog from '@/views/terminal/setting/default_conn/index.vue';
import '@xterm/xterm/css/xterm.css';
import { FitAddon } from '@xterm/addon-fit';
import i18n from '@/lang';
import { MsgSuccess } from '@/utils/message';
import { TerminalStore } from '@/store';
import { loadLocalConn } from '@/api/modules/terminal';
import { loadLocalConn, updateLocalConn } from '@/api/modules/terminal';

const loading = ref(false);
const terminalStore = TerminalStore();
Expand All @@ -141,6 +151,9 @@ const form = reactive({
defaultConn: '',
});

const resetConn = ref(false);
const opRef = ref();

const acceptParams = () => {
search(true);
loadConnShow();
Expand Down Expand Up @@ -181,17 +194,16 @@ const loadConnShow = async () => {
};

const changeShow = async () => {
resetConn.value = false;
let op = form.showDefaultConn ? i18n.global.t('xpack.waf.allow') : i18n.global.t('xpack.waf.deny');
ElMessageBox.confirm(i18n.global.t('terminal.defaultConnHelper', [op]), i18n.global.t('terminal.defaultConn'), {
confirmButtonText: i18n.global.t('commons.button.confirm'),
cancelButtonText: i18n.global.t('commons.button.cancel'),
type: 'info',
}).then(async () => {
await updateAgentSetting({ key: 'LocalSSHConnShow', value: form.showDefaultConn ? 'Enable' : 'Disable' }).then(
() => {
MsgSuccess(i18n.global.t('commons.msg.operationSuccess'));
},
);
opRef.value.acceptParams({
title: i18n.global.t('terminal.defaultConn'),
names: [],
msg: i18n.global.t('terminal.defaultConnHelper', [op]),
noMsg: false,
successMsg: i18n.global.t('commons.msg.operationSuccess'),
api: updateLocalConn,
params: { withReset: resetConn.value, defaultConn: form.showDefaultConn ? 'Enable' : 'Disable' },
});
};

Expand Down
Loading