diff --git a/agent/app/api/v2/setting.go b/agent/app/api/v2/setting.go index 1f6180cf6..f643a425c 100644 --- a/agent/app/api/v2/setting.go +++ b/agent/app/api/v2/setting.go @@ -75,16 +75,16 @@ func (b *BaseApi) LoadBaseDir(c *gin.Context) { // @Success 200 {object} dto.SSHConnData // @Security ApiKeyAuth // @Security Timestamp -// @Router /settings/ssh [get] +// @Router /settings/ssh/conn [get] func (b *BaseApi) LoadLocalConn(c *gin.Context) { - connInfoInDB, err := settingService.GetSSHInfo() - if err != nil { - helper.InternalServer(c, err) + connInfoInDB := settingService.GetSettingByKey("LocalSSHConn") + if len(connInfoInDB) == 0 { + helper.Success(c) return } var data dto.SSHConnData if err := json.Unmarshal([]byte(connInfoInDB), &data); err != nil { - helper.InternalServer(c, err) + helper.Success(c) return } if len(data.Password) != 0 { @@ -139,10 +139,7 @@ func (b *BaseApi) SaveLocalConn(c *gin.Context) { } func loadLocalConn() (*ssh.SSHClient, error) { - connInfoInDB, err := settingService.GetSSHInfo() - if err != nil { - return nil, err - } + connInfoInDB := settingService.GetSettingByKey("LocalSSHConn") if len(connInfoInDB) == 0 { return nil, errors.New("no such ssh conn info in db!") } diff --git a/agent/app/service/setting.go b/agent/app/service/setting.go index b8c7a2249..90ceb9de5 100644 --- a/agent/app/service/setting.go +++ b/agent/app/service/setting.go @@ -7,6 +7,7 @@ import ( "github.com/1Panel-dev/1Panel/agent/app/dto" "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" @@ -18,7 +19,6 @@ type ISettingService interface { GetSettingInfo() (*dto.SettingInfo, error) Update(key, value string) error - GetSSHInfo() (string, error) TestConnByInfo(req dto.SSHConnData) bool SaveConnInfo(req dto.SSHConnData) error GetSystemProxy() (*dto.SystemProxy, error) @@ -55,14 +55,6 @@ func (u *SettingService) Update(key, value string) error { return settingRepo.UpdateOrCreate(key, value) } -func (u *SettingService) GetSSHInfo() (string, error) { - conn, err := settingRepo.GetValueByKey("LocalSSHConn") - if err != nil || len(conn) == 0 { - return "", err - } - return encrypt.StringDecrypt(conn) -} - func (u *SettingService) TestConnByInfo(req dto.SSHConnData) bool { if req.AuthMode == "password" && len(req.Password) != 0 { password, err := base64.StdEncoding.DecodeString(req.Password) @@ -124,6 +116,7 @@ func (u *SettingService) SaveConnInfo(req dto.SSHConnData) error { localConn, _ := json.Marshal(&connInfo) connAfterEncrypt, _ := encrypt.StringEncrypt(string(localConn)) _ = settingRepo.Update("LocalSSHConn", connAfterEncrypt) + _ = settingRepo.Update("LocalSSHConnShow", constant.StatusEnable) return nil } @@ -140,17 +133,15 @@ func (u *SettingService) GetSystemProxy() (*dto.SystemProxy, error) { func (u *SettingService) GetSettingByKey(key string) string { switch key { - case "SystemIP": - value, _ := settingRepo.GetValueByKey(key) - return value case "LocalSSHConn": value, _ := settingRepo.GetValueByKey(key) if len(value) == 0 { return "" } - itemStr, _ := encrypt.StringDecryptWithBase64(value) + itemStr, _ := encrypt.StringDecrypt(value) return itemStr default: - return "" + value, _ := settingRepo.GetValueByKey(key) + return value } } diff --git a/agent/init/migration/migrate.go b/agent/init/migration/migrate.go index bef5e7bfd..8e3791676 100644 --- a/agent/init/migration/migrate.go +++ b/agent/init/migration/migrate.go @@ -40,6 +40,7 @@ func InitAgentDB() { migrations.AddQuickJump, migrations.UpdateMcpServerAddType, migrations.InitLocalSSHConn, + migrations.InitLocalSSHShow, }) if err := m.Migrate(); err != nil { global.LOG.Error(err) diff --git a/agent/init/migration/migrations/init.go b/agent/init/migration/migrations/init.go index 987a88373..eece1f128 100644 --- a/agent/init/migration/migrations/init.go +++ b/agent/init/migration/migrations/init.go @@ -553,3 +553,13 @@ var InitLocalSSHConn = &gormigrate.Migration{ return nil }, } + +var InitLocalSSHShow = &gormigrate.Migration{ + ID: "20250908-init-local-ssh-show", + Migrate: func(tx *gorm.DB) error { + if err := tx.Create(&model.Setting{Key: "LocalSSHConnShow", Value: constant.StatusEnable}).Error; err != nil { + return err + } + return nil + }, +} diff --git a/frontend/src/views/terminal/setting/default_conn/index.vue b/frontend/src/views/terminal/setting/default_conn/index.vue index 8c2170473..05ccec5f9 100644 --- a/frontend/src/views/terminal/setting/default_conn/index.vue +++ b/frontend/src/views/terminal/setting/default_conn/index.vue @@ -47,6 +47,7 @@ import { Rules } from '@/global/form-rules'; import { addHost, loadLocalConn, testByInfo } from '@/api/modules/terminal'; import i18n from '@/lang'; import { MsgError, MsgSuccess } from '@/utils/message'; +import { Base64 } from 'js-base64'; const loading = ref(); const isOK = ref(false); @@ -81,21 +82,21 @@ const rules = reactive({ privateKey: [Rules.requiredInput], }); -const acceptParams = (init: boolean): void => { - if (!init) { - search(); - } +const acceptParams = (): void => { + search(); drawerVisible.value = true; }; const search = async () => { await loadLocalConn().then((res) => { - form.addr = res.data.addr; - form.port = res.data.port; - form.authMode = res.data.authMode; - form.password = res.data.password; - form.privateKey = res.data.privateKey; - form.passPhrase = res.data.passPhrase; + if (res.data) { + form.addr = res.data.addr; + form.port = res.data.port; + form.authMode = res.data.authMode; + form.password = Base64.decode(res.data.password); + form.privateKey = res.data.privateKey; + form.passPhrase = res.data.passPhrase; + } }); }; diff --git a/frontend/src/views/terminal/setting/index.vue b/frontend/src/views/terminal/setting/index.vue index 84480b6b4..aeafc4647 100644 --- a/frontend/src/views/terminal/setting/index.vue +++ b/frontend/src/views/terminal/setting/index.vue @@ -166,8 +166,8 @@ const search = async (withReset?: boolean) => { }; const loadConnShow = async () => { - await getAgentSettingByKey('LocalSSHConn').then((res) => { - form.showDefaultConn = res.data.length !== 0; + await getAgentSettingByKey('LocalSSHConnShow').then((res) => { + form.showDefaultConn = res.data === 'Enable'; }); }; @@ -176,7 +176,7 @@ const changeShow = async () => { dialogRef.value.acceptParams(true); return; } - await updateAgentSetting({ key: 'LocalSSHConn', value: '' }).then(() => { + await updateAgentSetting({ key: 'LocalSSHConnShow', value: 'Disable' }).then(() => { MsgSuccess(i18n.global.t('commons.msg.operationSuccess')); }); }; diff --git a/frontend/src/views/terminal/terminal/index.vue b/frontend/src/views/terminal/terminal/index.vue index d95a0950a..88cb863f7 100644 --- a/frontend/src/views/terminal/terminal/index.vue +++ b/frontend/src/views/terminal/terminal/index.vue @@ -210,8 +210,8 @@ const acceptParams = async () => { loadCommandTree(); loadHostTree(); if (terminalTabs.value.length === 0) { - await getAgentSettingByKey('LocalSSHConn').then((res) => { - if (res.data.length !== 0) { + await getAgentSettingByKey('LocalSSHConnShow').then((res) => { + if (res.data === 'Enable') { onNewLocal(); } });