@@ -17,33 +17,37 @@ - 远程终端 + {{ $t('Router.Terminal') }} - 远程桌面 + {{ $t('Router.RemoteDesktop') }} - 文件传输 + {{ $t('Router.FileTransfer') }} - 数据库 + {{ $t('Router.Database') }} - 关于我们 + {{ $t('Router.AboutUs') }} + + + { + t.locale.value = "en" + localStorage.setItem('lang', "en") + } + return {os, defaultActive, key, activeItems, handleSelect, handClickI18n} } } diff --git a/interface/src/renderer/pages/About.vue b/interface/src/renderer/pages/About.vue index 94f39d9..501ac73 100644 --- a/interface/src/renderer/pages/About.vue +++ b/interface/src/renderer/pages/About.vue @@ -1,8 +1,8 @@ diff --git a/interface/src/renderer/pages/Databases.vue b/interface/src/renderer/pages/Databases.vue index d11301c..f4d078a 100644 --- a/interface/src/renderer/pages/Databases.vue +++ b/interface/src/renderer/pages/Databases.vue @@ -9,22 +9,22 @@ @cancel="onCancelItem" @save="onSaveItem" > - - + + - + - - + + - + @@ -36,7 +36,7 @@ - 本地客户端连 Oracle 数据库需要使用 21.0 及以上版本 OCI + {{ $t('Common.OracleOCI') }} Date: Thu, 16 Nov 2023 19:01:15 +0800 Subject: [PATCH 05/11] perf: github actions --- .github/workflows/build.yml | 67 +++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..923ec87 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,67 @@ +# build.yml + +name: Auto Build + +on: + workflow_dispatch: + push: + branches: + - master + - release-test + + + +env: + ELECTRON_OUTPUT_PATH: interface/dist_electron + CSC_LINK: ${{ secrets.CSC_LINK }} + CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }} + + +jobs: + release: + name: build and release electron app + runs-on: ${{ matrix.os }} + + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-11, windows-latest] + + steps: + - name: Check out git repository + uses: actions/checkout@v3 + + - uses: actions/setup-go@v3 + with: + go-version: 1.18 + + - name: build go client + run: make build-client + working-directory: go-client + + - name: Install Node.js + uses: actions/setup-node@v3 + with: + node-version: '16.x' + + - name: Install system deps + if: matrix.os == 'ubuntu-latest' + run: | + sudo apt-get install --no-install-recommends -y icnsutils graphicsmagick xz-utils + + - name: Yarn install + run: | + yarn + yarn global add xvfb-maybe + + - name: Build & release app + run: | + yarn build + + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + XCODE_APP_TEAM_ID: ${{ secrets.XCODE_APP_TEAM_ID }} + XCODE_APP_LOADER_EMAIL: ${{ secrets.XCODE_APP_LOADER_EMAIL }} + XCODE_APP_LOADER_PASSWORD: ${{ secrets.XCODE_APP_LOADER_PASSWORD }} + BUILD_CERTIFICATE_BASE64: ${{ secrets.CSC_LINK }} + P12_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }} \ No newline at end of file From 4b0150303185187cc27de68072a71c93b9bd3a7d Mon Sep 17 00:00:00 2001 From: halo Date: Thu, 16 Nov 2023 23:10:31 +0800 Subject: [PATCH 06/11] =?UTF-8?q?fix:=20telnet=E8=B5=84=E4=BA=A7=E9=93=BE?= =?UTF-8?q?=E6=8E=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go-client/config.json | 9 ++++++--- go-client/pkg/awaken/awaken.go | 2 +- go-client/pkg/awaken/awaken_darwin.go | 3 ++- go-client/pkg/awaken/awaken_linux.go | 3 ++- go-client/pkg/awaken/awaken_windows.go | 3 ++- 5 files changed, 13 insertions(+), 7 deletions(-) diff --git a/go-client/config.json b/go-client/config.json index a98f57d..480b9ed 100644 --- a/go-client/config.json +++ b/go-client/config.json @@ -183,7 +183,8 @@ "name": "terminal", "display_name": "Terminal", "protocol": [ - "ssh" + "ssh", + "telnet" ], "comment": "Terminal是MacOS操作系统上的虚拟终端应用软件,位于“实用工具”文件夹内。", "download_url": "内置", @@ -199,7 +200,8 @@ "name": "iterm", "display_name": "iTerm2", "protocol": [ - "ssh" + "ssh", + "telnet" ], "comment": "iTerm2是MacOS操作系统上的虚拟终端应用软件。\n\n!!!手动下载安装,点击保存启用!!!", "download_url": "https://iterm2.com/downloads.html", @@ -319,7 +321,8 @@ "name": "terminal", "display_name": "Terminal", "protocol": [ - "ssh" + "ssh", + "telnet" ], "comment": "Terminal是Linux操作系统上的虚拟终端应用软件。", "download_url": "内置", diff --git a/go-client/pkg/awaken/awaken.go b/go-client/pkg/awaken/awaken.go index e2e7115..6443183 100755 --- a/go-client/pkg/awaken/awaken.go +++ b/go-client/pkg/awaken/awaken.go @@ -126,7 +126,7 @@ func (r *Rouse) Run() { switch protocol { case "rdp": r.HandleRDP(&appConfig) - case "ssh", "sftp": + case "ssh", "sftp", "telnet": r.HandleSSH(&appConfig) case "mysql", "mariadb", "postgresql", "redis", "oracle", "sqlserver": r.HandleDB(&appConfig) diff --git a/go-client/pkg/awaken/awaken_darwin.go b/go-client/pkg/awaken/awaken_darwin.go index 031cadf..9344cda 100755 --- a/go-client/pkg/awaken/awaken_darwin.go +++ b/go-client/pkg/awaken/awaken_darwin.go @@ -28,7 +28,8 @@ func awakenSSHCommand(r *Rouse, cfg *config.AppConfig) *exec.Cmd { var appItem *config.AppItem var appLst []config.AppItem switch r.Protocol { - case "ssh": + case "ssh", "telnet": + r.Protocol = "ssh" appLst = cfg.MacOS.Terminal case "sftp": appLst = cfg.MacOS.FileTransfer diff --git a/go-client/pkg/awaken/awaken_linux.go b/go-client/pkg/awaken/awaken_linux.go index 22df10b..b3ebcb1 100755 --- a/go-client/pkg/awaken/awaken_linux.go +++ b/go-client/pkg/awaken/awaken_linux.go @@ -39,7 +39,8 @@ func awakenSSHCommand(r *Rouse, cfg *config.AppConfig) *exec.Cmd { var appItem *config.AppItem var appLst []config.AppItem switch r.Protocol { - case "ssh": + case "ssh", "telnet": + r.Protocol = "ssh" appLst = cfg.Linux.Terminal case "sftp": appLst = cfg.Linux.FileTransfer diff --git a/go-client/pkg/awaken/awaken_windows.go b/go-client/pkg/awaken/awaken_windows.go index 92a15e9..6092bbe 100755 --- a/go-client/pkg/awaken/awaken_windows.go +++ b/go-client/pkg/awaken/awaken_windows.go @@ -37,7 +37,8 @@ func handleSSH(r *Rouse, cfg *config.AppConfig) *exec.Cmd { var appItem *config.AppItem var appLst []config.AppItem switch r.Protocol { - case "ssh": + case "ssh", "telnet": + r.Protocol = "ssh" appLst = cfg.Windows.Terminal case "sftp": appLst = cfg.Windows.FileTransfer From e75aee1ae173a5f087ec17c58f5d688f9148cfb6 Mon Sep 17 00:00:00 2001 From: halo Date: Fri, 17 Nov 2023 18:12:25 +0800 Subject: [PATCH 07/11] =?UTF-8?q?perf:=20=E6=9B=B4=E6=96=B0=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- interface/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/package.json b/interface/package.json index b110005..d1211c7 100644 --- a/interface/package.json +++ b/interface/package.json @@ -1,7 +1,7 @@ { "name": "jumpserver-client", "author": "Fit2Cloud Technology Co., Ltd.; ", - "version": "v2.0.2", + "version": "v2.0.3", "homepage": "https://jumpserver.org", "private": true, "scripts": { From b832791d0e4a08b36c0604bbab3f6efb07cfdc51 Mon Sep 17 00:00:00 2001 From: halo Date: Tue, 21 Nov 2023 22:43:37 +0800 Subject: [PATCH 08/11] =?UTF-8?q?perf:=20=E5=AE=8C=E6=88=90=E7=BF=BB?= =?UTF-8?q?=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- interface/src/background.js | 11 +++- interface/src/i18n/langs/en.json | 15 ++++- interface/src/i18n/langs/zh.json | 15 ++++- .../src/renderer/components/ListTable.vue | 14 +++-- interface/src/renderer/layouts/Main.vue | 22 +++---- interface/src/renderer/pages/About.vue | 27 ++++++-- interface/src/renderer/pages/FileTransfer.vue | 10 +-- interface/src/renderer/pages/Language.vue | 62 +++++++++++++++++++ .../src/renderer/pages/RemoteDesktop.vue | 12 ++-- interface/src/renderer/pages/Terminal.vue | 10 +-- interface/src/renderer/router/index.js | 5 ++ 11 files changed, 159 insertions(+), 44 deletions(-) create mode 100644 interface/src/renderer/pages/Language.vue diff --git a/interface/src/background.js b/interface/src/background.js index d9914cc..956b607 100644 --- a/interface/src/background.js +++ b/interface/src/background.js @@ -1,4 +1,4 @@ -import {app, BrowserWindow, ipcMain, protocol} from "electron"; +import {app, shell, BrowserWindow, ipcMain, protocol} from "electron"; import {createProtocol} from "vue-cli-plugin-electron-builder/lib"; import installExtension, {VUEJS3_DEVTOOLS} from "electron-devtools-installer"; import path from 'path' @@ -37,10 +37,15 @@ async function createWindow() { }, }); - if (process.env.WEBPACK_DEV_SERVER_URL) { + mainWindow.webContents.setWindowOpenHandler((details) => { + shell.openExternal(details.url) + return { action: "deny" } + }); + + if (process.env.WEBPACK_DEV_SERVER_URL) { // Load the url of the dev server if in development mode await mainWindow.loadURL(process.env.WEBPACK_DEV_SERVER_URL); - // if (!process.env.IS_TEST) mainWindow.webContents.openDevTools() + if (!process.env.IS_TEST) mainWindow.webContents.openDevTools() } else { createProtocol("app"); // Load the index.html when not in development diff --git a/interface/src/i18n/langs/en.json b/interface/src/i18n/langs/en.json index 0178f37..02caaa0 100644 --- a/interface/src/i18n/langs/en.json +++ b/interface/src/i18n/langs/en.json @@ -24,9 +24,20 @@ "RemoteDesktop": "Remote Desktop", "FileTransfer": "File Transfer", "Database": "Database", - "AboutUs": "About Us" + "AboutUs": "About Us", + "Language": "Language" }, "AboutUs": { - "Author": "Author" + "Author": "Author", + "Version": "Version", + "Copyright": "Copyright", + "AllRightsReserved": "All Rights Reserved", + "OfficialWebsite": "Official Website", + "OnlineDocumentation": "Online Documentation", + "CommunityForum": "Community Forum", + "AboutUs": "AboutUs" + }, + "Language": { + "ChooseLanguage": "Choose Language" } } diff --git a/interface/src/i18n/langs/zh.json b/interface/src/i18n/langs/zh.json index cf93181..90a898b 100644 --- a/interface/src/i18n/langs/zh.json +++ b/interface/src/i18n/langs/zh.json @@ -24,9 +24,20 @@ "RemoteDesktop": "远程桌面", "FileTransfer": "文件传输", "Database": "数据库", - "AboutUs": "关于我们" + "AboutUs": "关于我们", + "Language": "语言设置" }, "AboutUs": { - "Author": "作者" + "Author": "作者", + "Version": "版本", + "Copyright": "版权公告", + "AllRightsReserved": "版权所有", + "OfficialWebsite": "产品官网", + "OnlineDocumentation": "在线文档", + "CommunityForum": "社区论坛", + "AboutUs": "关于我们" + }, + "Language": { + "ChooseLanguage": "选择语言" } } diff --git a/interface/src/renderer/components/ListTable.vue b/interface/src/renderer/components/ListTable.vue index 0692a87..8a3f080 100644 --- a/interface/src/renderer/components/ListTable.vue +++ b/interface/src/renderer/components/ListTable.vue @@ -9,10 +9,10 @@
{{ d.comment }}
- {{ is_set_string(d.is_set) }} + {{ $t(is_set_string(d.is_set)) }} - 默认应用 + {{ $t('Common.DefaultApp') }} {{ join_2_string(d.match_first) }}
@@ -38,9 +38,9 @@ export default { methods: { is_set_string(b) { if (b) { - return "已配置" + return "Common.Configured" } else { - return "未配置" + return "Common.NotConfigured" } }, join_2_string(b) { @@ -112,6 +112,11 @@ export default { } .prop{ + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + color: #5cb87a; + .is-setted { font-size: 12px; color: #5cb87a; @@ -125,6 +130,7 @@ export default { .match_first { font-size: 11px; color: #5cb87a; + } } } diff --git a/interface/src/renderer/layouts/Main.vue b/interface/src/renderer/layouts/Main.vue index 2b007b0..fa60e4f 100644 --- a/interface/src/renderer/layouts/Main.vue +++ b/interface/src/renderer/layouts/Main.vue @@ -37,6 +37,12 @@ {{ $t('Router.Database') }} + + + + + {{ $t('Router.Language') }} + @@ -44,10 +50,6 @@ {{ $t('Router.AboutUs') }} - - -
{ - t.locale.value = "en" - localStorage.setItem('lang', "en") - } - return {os, defaultActive, key, activeItems, handleSelect, handClickI18n} + return {os, defaultActive, key, activeItems, handleSelect} } } @@ -153,7 +149,7 @@ export default { .fake-title-bar { -webkit-app-region: drag; - height: 25px; + height: 30px; width: 100%; text-align: center; color: #eee; @@ -173,7 +169,7 @@ export default { background: #1f1f1f; .side-bar-menu { - height: calc(100vh - 25px); + height: calc(100vh - 30px); overflow-x: hidden; overflow-y: auto; border-right: solid 1px #4c4d4faf; diff --git a/interface/src/renderer/pages/About.vue b/interface/src/renderer/pages/About.vue index 501ac73..279d707 100644 --- a/interface/src/renderer/pages/About.vue +++ b/interface/src/renderer/pages/About.vue @@ -1,14 +1,22 @@ @@ -18,9 +26,20 @@ div { height: 100%; text-align: center; color: #e1e1e1e1; + + p { + font-size: 15px; + } + + a { + line-height: 50px; + margin: 0 15px; + color: #3f83cc; + } + #logo { margin-top: 80px; - width: 300px; + width: 200px; } } diff --git a/interface/src/renderer/pages/FileTransfer.vue b/interface/src/renderer/pages/FileTransfer.vue index f05339c..5aff1f3 100644 --- a/interface/src/renderer/pages/FileTransfer.vue +++ b/interface/src/renderer/pages/FileTransfer.vue @@ -8,17 +8,17 @@ @save="onSaveItem" @confirm="onConfirmItem" > - - + + - + - + diff --git a/interface/src/renderer/pages/Language.vue b/interface/src/renderer/pages/Language.vue new file mode 100644 index 0000000..a148399 --- /dev/null +++ b/interface/src/renderer/pages/Language.vue @@ -0,0 +1,62 @@ + + + + + diff --git a/interface/src/renderer/pages/RemoteDesktop.vue b/interface/src/renderer/pages/RemoteDesktop.vue index 2391fea..e236ae5 100644 --- a/interface/src/renderer/pages/RemoteDesktop.vue +++ b/interface/src/renderer/pages/RemoteDesktop.vue @@ -8,17 +8,17 @@ @save="onSaveItem" @confirm="onConfirmItem" > - - + + - - + + - + diff --git a/interface/src/renderer/pages/Terminal.vue b/interface/src/renderer/pages/Terminal.vue index a011c48..780a963 100644 --- a/interface/src/renderer/pages/Terminal.vue +++ b/interface/src/renderer/pages/Terminal.vue @@ -8,17 +8,17 @@ @save="onSaveItem" @confirm="onConfirmItem" > - - + + - + - + diff --git a/interface/src/renderer/router/index.js b/interface/src/renderer/router/index.js index 66f2eea..c12d41c 100644 --- a/interface/src/renderer/router/index.js +++ b/interface/src/renderer/router/index.js @@ -33,6 +33,11 @@ export default createRouter({ path: '/about', name: 'aboutPage', component: () => import('@/pages/About.vue') + }, + { + path: '/i18n', + name: 'languagePage', + component: () => import('@/pages/Language.vue') } ] }, From 2b23eb2f81d1d6925cef17fc49f9402a5c7aadde Mon Sep 17 00:00:00 2001 From: halo Date: Wed, 29 Nov 2023 10:49:05 +0800 Subject: [PATCH 09/11] =?UTF-8?q?perf:=20=E6=9B=B4=E6=96=B0=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- interface/package.json | 2 +- interface/src/renderer/pages/About.vue | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/interface/package.json b/interface/package.json index 4457f88..36162b3 100644 --- a/interface/package.json +++ b/interface/package.json @@ -1,7 +1,7 @@ { "name": "jumpserver-client", "author": "Fit2Cloud Technology Co., Ltd.; ", - "version": "v2.0.3", + "version": "v2.1.0", "homepage": "https://jumpserver.org", "private": true, "scripts": { diff --git a/interface/src/renderer/pages/About.vue b/interface/src/renderer/pages/About.vue index 279d707..1136a67 100644 --- a/interface/src/renderer/pages/About.vue +++ b/interface/src/renderer/pages/About.vue @@ -1,14 +1,14 @@ From f4d71eac931cc262add6fe47c08d08aad5da3623 Mon Sep 17 00:00:00 2001 From: halo Date: Wed, 29 Nov 2023 16:00:06 +0800 Subject: [PATCH 10/11] =?UTF-8?q?perf:=20=E9=A6=96=E6=AC=A1=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E8=AE=BE=E7=BD=AE=E8=AF=AD=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- interface/src/background.js | 2 +- interface/src/i18n/langs/en.json | 2 +- interface/src/renderer/components/Dialog.vue | 45 ++++++------ interface/src/renderer/layouts/Main.vue | 72 +++++++++++++++++--- 4 files changed, 89 insertions(+), 32 deletions(-) diff --git a/interface/src/background.js b/interface/src/background.js index 956b607..d36ce77 100644 --- a/interface/src/background.js +++ b/interface/src/background.js @@ -45,7 +45,7 @@ async function createWindow() { if (process.env.WEBPACK_DEV_SERVER_URL) { // Load the url of the dev server if in development mode await mainWindow.loadURL(process.env.WEBPACK_DEV_SERVER_URL); - if (!process.env.IS_TEST) mainWindow.webContents.openDevTools() + // if (!process.env.IS_TEST) mainWindow.webContents.openDevTools() } else { createProtocol("app"); // Load the index.html when not in development diff --git a/interface/src/i18n/langs/en.json b/interface/src/i18n/langs/en.json index 02caaa0..b0a5016 100644 --- a/interface/src/i18n/langs/en.json +++ b/interface/src/i18n/langs/en.json @@ -35,7 +35,7 @@ "OfficialWebsite": "Official Website", "OnlineDocumentation": "Online Documentation", "CommunityForum": "Community Forum", - "AboutUs": "AboutUs" + "AboutUs": "About Us" }, "Language": { "ChooseLanguage": "Choose Language" diff --git a/interface/src/renderer/components/Dialog.vue b/interface/src/renderer/components/Dialog.vue index 56ffd01..9315bff 100644 --- a/interface/src/renderer/components/Dialog.vue +++ b/interface/src/renderer/components/Dialog.vue @@ -1,24 +1,25 @@ - From a4fc3576f4bbb8e9c16a4a7a3fb18520f94dd17e Mon Sep 17 00:00:00 2001 From: halo Date: Thu, 30 Nov 2023 22:39:27 +0800 Subject: [PATCH 11/11] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Drdm=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go-client/config.json | 2 +- go-client/pkg/awaken/awaken_windows.go | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/go-client/config.json b/go-client/config.json index 75ffdfa..6a43d8b 100644 --- a/go-client/config.json +++ b/go-client/config.json @@ -169,7 +169,7 @@ "download_url": "https://github.com/FuckDoctors/rdm-builder/releases/download/2022.5.1/resp-2022.5.1.exe", "type": "databases", "path": "", - "arg_format": "--settings-dir {config_file}", + "arg_format": "--settings-dir*{config_file}", "match_first": [], "is_internal": false, "is_default": false, diff --git a/go-client/pkg/awaken/awaken_windows.go b/go-client/pkg/awaken/awaken_windows.go index 6092bbe..85a5b9e 100755 --- a/go-client/pkg/awaken/awaken_windows.go +++ b/go-client/pkg/awaken/awaken_windows.go @@ -108,7 +108,7 @@ func handleDB(r *Rouse, cfg *config.AppConfig) *exec.Cmd { ss := make(map[string]string) ss["host"] = r.Host ss["port"] = strconv.Itoa(r.Port) - ss["name"] = r.Name + ss["name"] = r.getName() ss["auth"] = r.Token.ID + "@" + r.Value ss["ssh_agent_path"] = "" ss["ssh_password"] = "" @@ -131,7 +131,13 @@ func handleDB(r *Rouse, cfg *config.AppConfig) *exec.Cmd { connectMap["config_file"] = currentPath } commands := getCommandFromArgs(connectMap, appItem.ArgFormat) - return exec.Command(appPath, strings.Split(commands, " ")...) + if strings.Contains(commands, "*") { + commands := strings.Split(commands, "*") + return exec.Command(appPath, commands...) + } else { + commands := strings.Split(commands, " ") + return exec.Command(appPath, commands...) + } } func handleCommand(r *Rouse, cfg *config.AppConfig) *exec.Cmd {