From 64ae79f565cb316966bb4ee8034f5ea4557351c8 Mon Sep 17 00:00:00 2001 From: Lykin <137850705+tiny-craft@users.noreply.github.com> Date: Thu, 22 Feb 2024 10:42:08 +0800 Subject: [PATCH 1/7] perf: add `New Custom Decoder` entrance to decoder dropdown list --- .../components/common/DropdownSelector.vue | 30 ++++++++++++++++--- .../content_value/FormatSelector.vue | 21 +++++++++++++ .../components/dialogs/PreferencesDialog.vue | 2 +- frontend/src/components/sidebar/Ribbon.vue | 5 +++- frontend/src/langs/en-us.json | 1 + frontend/src/langs/zh-cn.json | 1 + frontend/src/stores/dialog.js | 6 +++- 7 files changed, 59 insertions(+), 7 deletions(-) diff --git a/frontend/src/components/common/DropdownSelector.vue b/frontend/src/components/common/DropdownSelector.vue index 10d7ed9..c987742 100644 --- a/frontend/src/components/common/DropdownSelector.vue +++ b/frontend/src/components/common/DropdownSelector.vue @@ -1,8 +1,9 @@ diff --git a/frontend/src/components/dialogs/PreferencesDialog.vue b/frontend/src/components/dialogs/PreferencesDialog.vue index d132112..d015fab 100644 --- a/frontend/src/components/dialogs/PreferencesDialog.vue +++ b/frontend/src/components/dialogs/PreferencesDialog.vue @@ -25,7 +25,7 @@ const loading = ref(false) const initPreferences = async () => { try { loading.value = true - tab.value = 'general' + tab.value = dialogStore.preferencesTag || 'general' await prefStore.loadPreferences() prevPreferences.value = { general: prefStore.general, diff --git a/frontend/src/components/sidebar/Ribbon.vue b/frontend/src/components/sidebar/Ribbon.vue index c6cae8e..af09694 100644 --- a/frontend/src/components/sidebar/Ribbon.vue +++ b/frontend/src/components/sidebar/Ribbon.vue @@ -169,20 +169,23 @@ const exThemeVars = computed(() => { v-if="prefStore.currentLanguage === 'zh'" :icon="QRCode" :size="iconSize" + :tooltip-delay="100" class="nav-menu-button" t-tooltip="ribbon.wechat_official" @click="openWechatOfficial" /> diff --git a/frontend/src/langs/en-us.json b/frontend/src/langs/en-us.json index 95d405b..2e44367 100644 --- a/frontend/src/langs/en-us.json +++ b/frontend/src/langs/en-us.json @@ -127,6 +127,7 @@ "memory_usage": "Memory Usage", "view_as": "View As", "decode_with": "Decode / Decompression", + "custom_decoder": "New Custom Decoder", "reload": "Reload", "reload_disable": "Reload will enable after full loaded", "auto_refresh": "Auto Refresh", diff --git a/frontend/src/langs/zh-cn.json b/frontend/src/langs/zh-cn.json index 635740d..3617b94 100644 --- a/frontend/src/langs/zh-cn.json +++ b/frontend/src/langs/zh-cn.json @@ -127,6 +127,7 @@ "memory_usage": "内存占用", "view_as": "查看方式", "decode_with": "解码/解压方式", + "custom_decoder": "添加自定义解码", "reload": "重新载入", "reload_disable": "全量加载后可重新载入", "auto_refresh": "自动刷新", diff --git a/frontend/src/stores/dialog.js b/frontend/src/stores/dialog.js index b0e36d7..5be88ea 100644 --- a/frontend/src/stores/dialog.js +++ b/frontend/src/stores/dialog.js @@ -102,6 +102,8 @@ const useDialogStore = defineStore('dialog', { }, preferencesDialogVisible: false, + preferencesTag: '', + aboutDialogVisible: false, }), actions: { @@ -346,11 +348,13 @@ const useDialogStore = defineStore('dialog', { this.decodeDialogVisible = false }, - openPreferencesDialog() { + openPreferencesDialog(tag = '') { this.preferencesDialogVisible = true + this.preferencesTag = tag }, closePreferencesDialog() { this.preferencesDialogVisible = false + this.preferencesTag = '' }, openAboutDialog() { From 13e80da9782f31486461292c8cecf88d82506f8a Mon Sep 17 00:00:00 2001 From: Lykin <137850705+tiny-craft@users.noreply.github.com> Date: Thu, 22 Feb 2024 17:54:00 +0800 Subject: [PATCH 2/7] feat: support HTTP/SOCKS5 proxy for connections #159 --- backend/services/connection_service.go | 64 +++++++++++-- backend/types/connection.go | 10 ++ backend/utils/proxy/http.go | 96 +++++++++++++++++++ .../components/dialogs/ConnectionDialog.vue | 78 +++++++++++++++ frontend/src/langs/en-us.json | 10 ++ frontend/src/langs/zh-cn.json | 10 ++ frontend/src/stores/connections.js | 9 ++ 7 files changed, 268 insertions(+), 9 deletions(-) create mode 100644 backend/utils/proxy/http.go diff --git a/backend/services/connection_service.go b/backend/services/connection_service.go index 659f0bb..51d3d1e 100644 --- a/backend/services/connection_service.go +++ b/backend/services/connection_service.go @@ -11,8 +11,10 @@ import ( "github.com/vrischmann/userdir" "github.com/wailsapp/wails/v2/pkg/runtime" "golang.org/x/crypto/ssh" + "golang.org/x/net/proxy" "io" "net" + "net/url" "os" "path" "strconv" @@ -21,6 +23,7 @@ import ( "time" . "tinyrdm/backend/storage" "tinyrdm/backend/types" + _ "tinyrdm/backend/utils/proxy" ) type cmdHistoryItem struct { @@ -54,9 +57,34 @@ func (c *connectionService) Start(ctx context.Context) { } func (c *connectionService) buildOption(config types.ConnectionConfig) (*redis.Options, error) { - var sshClient *ssh.Client + var dialer proxy.Dialer + var dialerErr error + if config.Proxy.Type == 1 { + // use system proxy + dialer = proxy.FromEnvironment() + } else if config.Proxy.Type == 2 { + // use custom proxy + proxyUrl := url.URL{ + Host: fmt.Sprintf("%s:%d", config.Proxy.Addr, config.Proxy.Port), + } + if len(config.Proxy.Username) > 0 { + proxyUrl.User = url.UserPassword(config.Proxy.Username, config.Proxy.Password) + } + switch config.Proxy.Schema { + case "socks5", "socks5h", "http", "https": + proxyUrl.Scheme = config.Proxy.Schema + default: + proxyUrl.Scheme = "http" + } + if dialer, dialerErr = proxy.FromURL(&proxyUrl, proxy.Direct); dialerErr != nil { + return nil, dialerErr + } + } + + var sshConfig *ssh.ClientConfig + var sshAddr string if config.SSH.Enable { - sshConfig := &ssh.ClientConfig{ + sshConfig = &ssh.ClientConfig{ User: config.SSH.Username, Auth: []ssh.AuthMethod{ssh.Password(config.SSH.Password)}, HostKeyCallback: ssh.InsecureIgnoreHostKey(), @@ -84,11 +112,7 @@ func (c *connectionService) buildOption(config types.ConnectionConfig) (*redis.O return nil, errors.New("invalid login type") } - var err error - sshClient, err = ssh.Dial("tcp", fmt.Sprintf("%s:%d", config.SSH.Addr, config.SSH.Port), sshConfig) - if err != nil { - return nil, err - } + sshAddr = fmt.Sprintf("%s:%d", config.SSH.Addr, config.SSH.Port) } var tlsConfig *tls.Config @@ -150,9 +174,31 @@ func (c *connectionService) buildOption(config types.ConnectionConfig) (*redis.O option.Addr = fmt.Sprintf("%s:%d", config.Addr, port) } } - if sshClient != nil { + + if len(sshAddr) > 0 { + if dialer != nil { + // ssh with proxy + conn, err := dialer.Dial("tcp", sshAddr) + if err != nil { + return nil, err + } + sc, chans, reqs, err := ssh.NewClientConn(conn, sshAddr, sshConfig) + if err != nil { + return nil, err + } + dialer = ssh.NewClient(sc, chans, reqs) + } else { + // ssh without proxy + sshClient, err := ssh.Dial("tcp", sshAddr, sshConfig) + if err != nil { + return nil, err + } + dialer = sshClient + } + } + if dialer != nil { option.Dialer = func(ctx context.Context, network, addr string) (net.Conn, error) { - return sshClient.Dial(network, addr) + return dialer.Dial(network, addr) } option.ReadTimeout = -2 option.WriteTimeout = -2 diff --git a/backend/types/connection.go b/backend/types/connection.go index 7125fb2..f936199 100644 --- a/backend/types/connection.go +++ b/backend/types/connection.go @@ -27,6 +27,7 @@ type ConnectionConfig struct { SSH ConnectionSSH `json:"ssh,omitempty" yaml:"ssh,omitempty"` Sentinel ConnectionSentinel `json:"sentinel,omitempty" yaml:"sentinel,omitempty"` Cluster ConnectionCluster `json:"cluster,omitempty" yaml:"cluster,omitempty"` + Proxy ConnectionProxy `json:"proxy,omitempty" yaml:"proxy,omitempty"` } type Connection struct { @@ -76,3 +77,12 @@ type ConnectionSentinel struct { type ConnectionCluster struct { Enable bool `json:"enable,omitempty" yaml:"enable,omitempty"` } + +type ConnectionProxy struct { + Type int `json:"type,omitempty" yaml:"type,omitempty"` + Schema string `json:"schema,omitempty" yaml:"schema,omitempty"` + Addr string `json:"addr,omitempty" yaml:"addr,omitempty"` + Port int `json:"port,omitempty" yaml:"port,omitempty"` + Username string `json:"username,omitempty" yaml:"username,omitempty"` + Password string `json:"password,omitempty" yaml:"password,omitempty"` +} diff --git a/backend/utils/proxy/http.go b/backend/utils/proxy/http.go new file mode 100644 index 0000000..fb4c959 --- /dev/null +++ b/backend/utils/proxy/http.go @@ -0,0 +1,96 @@ +package proxy + +import ( + "bufio" + "fmt" + "net" + "net/http" + "net/url" + "time" + + "golang.org/x/net/proxy" +) + +type HttpProxy struct { + scheme string // HTTP Proxy scheme + host string // HTTP Proxy host or host:port + auth *proxy.Auth // authentication + forward proxy.Dialer // forwarding Dialer +} + +func (p *HttpProxy) Dial(network, addr string) (net.Conn, error) { + c, err := p.forward.Dial(network, p.host) + if err != nil { + return nil, err + } + + err = c.SetDeadline(time.Now().Add(15 * time.Second)) + if err != nil { + return nil, err + } + + reqUrl := &url.URL{ + Scheme: "", + Host: addr, + } + + // create with CONNECT method + req, err := http.NewRequest("CONNECT", reqUrl.String(), nil) + if err != nil { + c.Close() + return nil, err + } + req.Close = false + + // authentication + if p.auth != nil { + req.SetBasicAuth(p.auth.User, p.auth.Password) + req.Header.Add("Proxy-Authorization", req.Header.Get("Authorization")) + } + + // send request + err = req.Write(c) + if err != nil { + c.Close() + return nil, err + } + + res, err := http.ReadResponse(bufio.NewReader(c), req) + if err != nil { + res.Body.Close() + c.Close() + return nil, err + } + res.Body.Close() + + if res.StatusCode != http.StatusOK { + c.Close() + return nil, fmt.Errorf("proxy connection error: StatusCode[%d]", res.StatusCode) + } + + return c, nil +} + +func NewHttpProxyDialer(u *url.URL, forward proxy.Dialer) (proxy.Dialer, error) { + var auth *proxy.Auth + if u.User != nil { + pwd, _ := u.User.Password() + auth = &proxy.Auth{ + User: u.User.Username(), + Password: pwd, + } + } + + hp := &HttpProxy{ + scheme: u.Scheme, + host: u.Host, + auth: auth, + forward: forward, + } + return hp, nil +} + +func init() { + proxy.RegisterDialerType("http", NewHttpProxyDialer) + proxy.RegisterDialerType("https", NewHttpProxyDialer) +} diff --git a/frontend/src/components/dialogs/ConnectionDialog.vue b/frontend/src/components/dialogs/ConnectionDialog.vue index f38b192..1844aec 100644 --- a/frontend/src/components/dialogs/ConnectionDialog.vue +++ b/frontend/src/components/dialogs/ConnectionDialog.vue @@ -205,10 +205,24 @@ const onSaveConnection = async () => { generalForm.value.sentinel = {} } + // trim cluster data if (!!!generalForm.value.cluster.enable) { generalForm.value.cluster = {} } + // trim proxy data + if (generalForm.value.proxy.type !== 2) { + generalForm.value.proxy.schema = '' + generalForm.value.proxy.addr = '' + generalForm.value.proxy.port = 0 + generalForm.value.proxy.auth = false + generalForm.value.proxy.username = '' + generalForm.value.proxy.password = '' + } else if (!generalForm.value.proxy.auth) { + generalForm.value.proxy.username = '' + generalForm.value.proxy.password = '' + } + // store new connection const { success, msg } = await connectionStore.saveConnection( isEditMode.value ? editName.value : null, @@ -248,6 +262,7 @@ watch( pairs.push({ db: parseInt(db), alias: alias[db] }) } aliasPair.value = pairs + generalForm.value.proxy.auth = !isEmpty(generalForm.value.proxy.username) } }, ) @@ -723,6 +738,69 @@ const pasteFromClipboard = async () => { + + + + + + + + + + + + + + + : + + + + + + {{ $t('dialogue.connection.proxy.auth') }} + + + + + + + + + + + + + diff --git a/frontend/src/langs/en-us.json b/frontend/src/langs/en-us.json index 2e44367..fdea643 100644 --- a/frontend/src/langs/en-us.json +++ b/frontend/src/langs/en-us.json @@ -269,6 +269,16 @@ "cluster": { "title": "Cluster", "enable": "Serve as Cluster Node" + }, + "proxy": { + "title": "Proxy", + "type_none": "No Proxy", + "type_system": "System Proxy Configuration", + "type_custom": "Manual Proxy Configuration", + "host": "Host name", + "auth": "Proxy authentication", + "usr_tip": "Username for proxy authentication", + "pwd_tip": "Password for proxy authentication" } }, "group": { diff --git a/frontend/src/langs/zh-cn.json b/frontend/src/langs/zh-cn.json index 3617b94..6af5ae9 100644 --- a/frontend/src/langs/zh-cn.json +++ b/frontend/src/langs/zh-cn.json @@ -269,6 +269,16 @@ "cluster": { "title": "集群模式", "enable": "当前为集群节点" + }, + "proxy": { + "title": "网络代理", + "type_none": "不使用代理", + "type_system": "使用系统代理设置", + "type_custom": "手动配置代理", + "host": "主机名", + "auth": "使用身份验证", + "usr_tip": "代理授权用户名", + "pwd_tip": "代理授权密码" } }, "group": { diff --git a/frontend/src/stores/connections.js b/frontend/src/stores/connections.js index f1b3601..07bb8d7 100644 --- a/frontend/src/stores/connections.js +++ b/frontend/src/stores/connections.js @@ -196,6 +196,15 @@ const useConnectionStore = defineStore('connections', { cluster: { enable: false, }, + proxy: { + type: 0, + schema: 'http', + addr: '', + port: 0, + auth: false, + username: '', + password: '', + }, } }, From 70ed556e8052a02020c5e9025943a9e75db52def Mon Sep 17 00:00:00 2001 From: Lykin <137850705+tiny-craft@users.noreply.github.com> Date: Thu, 22 Feb 2024 18:31:05 +0800 Subject: [PATCH 3/7] chore: update dependencies --- frontend/package-lock.json | 250 ++++++++++++++++++------------------- frontend/package.json | 8 +- frontend/package.json.md5 | 2 +- go.mod | 6 +- go.sum | 8 +- 5 files changed, 137 insertions(+), 137 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index b161205..a812656 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -13,21 +13,21 @@ "lodash": "^4.17.21", "monaco-editor": "^0.46.0", "pinia": "^2.1.7", - "sass": "^1.70.0", - "vue": "^3.4.18", + "sass": "^1.71.1", + "vue": "^3.4.19", "vue-chartjs": "^5.3.0", "vue-i18n": "^9.9.1", "xterm": "^5.3.0", "xterm-addon-fit": "^0.8.0" }, "devDependencies": { - "@vitejs/plugin-vue": "^5.0.3", + "@vitejs/plugin-vue": "^5.0.4", "naive-ui": "^2.37.3", "prettier": "^3.2.5", "unplugin-auto-import": "^0.17.5", "unplugin-icons": "^0.18.5", "unplugin-vue-components": "^0.26.0", - "vite": "^5.1.0" + "vite": "^5.1.4" } }, "node_modules/@antfu/install-pkg": { @@ -902,9 +902,9 @@ } }, "node_modules/@vitejs/plugin-vue": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.3.tgz", - "integrity": "sha512-b8S5dVS40rgHdDrw+DQi/xOM9ed+kSRZzfm1T74bMmBDCd8XO87NKlFYInzCtwvtWwXZvo1QxE2OSspTATWrbA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz", + "integrity": "sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==", "dev": true, "engines": { "node": "^18.0.0 || >=20.0.0" @@ -915,36 +915,36 @@ } }, "node_modules/@vue/compiler-core": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.18.tgz", - "integrity": "sha512-F7YK8lMK0iv6b9/Gdk15A67wM0KKZvxDxed0RR60C1z9tIJTKta+urs4j0RTN5XqHISzI3etN3mX0uHhjmoqjQ==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.19.tgz", + "integrity": "sha512-gj81785z0JNzRcU0Mq98E56e4ltO1yf8k5PQ+tV/7YHnbZkrM0fyFyuttnN8ngJZjbpofWE/m4qjKBiLl8Ju4w==", "dependencies": { "@babel/parser": "^7.23.9", - "@vue/shared": "3.4.18", + "@vue/shared": "3.4.19", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.0.2" } }, "node_modules/@vue/compiler-dom": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.18.tgz", - "integrity": "sha512-24Eb8lcMfInefvQ6YlEVS18w5Q66f4+uXWVA+yb7praKbyjHRNuKVWGuinfSSjM0ZIiPi++QWukhkgznBaqpEA==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.19.tgz", + "integrity": "sha512-vm6+cogWrshjqEHTzIDCp72DKtea8Ry/QVpQRYoyTIg9k7QZDX6D8+HGURjtmatfgM8xgCFtJJaOlCaRYRK3QA==", "dependencies": { - "@vue/compiler-core": "3.4.18", - "@vue/shared": "3.4.18" + "@vue/compiler-core": "3.4.19", + "@vue/shared": "3.4.19" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.18.tgz", - "integrity": "sha512-rG5tqtnzwrVpMqAQ7FHtvHaV70G6LLfJIWLYZB/jZ9m/hrnZmIQh+H3ewnC5onwe/ibljm9+ZupxeElzqCkTAw==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.19.tgz", + "integrity": "sha512-LQ3U4SN0DlvV0xhr1lUsgLCYlwQfUfetyPxkKYu7dkfvx7g3ojrGAkw0AERLOKYXuAGnqFsEuytkdcComei3Yg==", "dependencies": { "@babel/parser": "^7.23.9", - "@vue/compiler-core": "3.4.18", - "@vue/compiler-dom": "3.4.18", - "@vue/compiler-ssr": "3.4.18", - "@vue/shared": "3.4.18", + "@vue/compiler-core": "3.4.19", + "@vue/compiler-dom": "3.4.19", + "@vue/compiler-ssr": "3.4.19", + "@vue/shared": "3.4.19", "estree-walker": "^2.0.2", "magic-string": "^0.30.6", "postcss": "^8.4.33", @@ -952,12 +952,12 @@ } }, "node_modules/@vue/compiler-ssr": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.18.tgz", - "integrity": "sha512-hSlv20oUhPxo2UYUacHgGaxtqP0tvFo6ixxxD6JlXIkwzwoZ9eKK6PFQN4hNK/R13JlNyldwWt/fqGBKgWJ6nQ==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.19.tgz", + "integrity": "sha512-P0PLKC4+u4OMJ8sinba/5Z/iDT84uMRRlrWzadgLA69opCpI1gG4N55qDSC+dedwq2fJtzmGald05LWR5TFfLw==", "dependencies": { - "@vue/compiler-dom": "3.4.18", - "@vue/shared": "3.4.18" + "@vue/compiler-dom": "3.4.19", + "@vue/shared": "3.4.19" } }, "node_modules/@vue/devtools-api": { @@ -966,29 +966,29 @@ "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==" }, "node_modules/@vue/reactivity": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.18.tgz", - "integrity": "sha512-7uda2/I0jpLiRygprDo5Jxs2HJkOVXcOMlyVlY54yRLxoycBpwGJRwJT9EdGB4adnoqJDXVT2BilUAYwI7qvmg==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.19.tgz", + "integrity": "sha512-+VcwrQvLZgEclGZRHx4O2XhyEEcKaBi50WbxdVItEezUf4fqRh838Ix6amWTdX0CNb/b6t3Gkz3eOebfcSt+UA==", "dependencies": { - "@vue/shared": "3.4.18" + "@vue/shared": "3.4.19" } }, "node_modules/@vue/runtime-core": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.18.tgz", - "integrity": "sha512-7mU9diCa+4e+8/wZ7Udw5pwTH10A11sZ1nldmHOUKJnzCwvZxfJqAtw31mIf4T5H2FsLCSBQT3xgioA9vIjyDQ==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.19.tgz", + "integrity": "sha512-/Z3tFwOrerJB/oyutmJGoYbuoadphDcJAd5jOuJE86THNZji9pYjZroQ2NFsZkTxOq0GJbb+s2kxTYToDiyZzw==", "dependencies": { - "@vue/reactivity": "3.4.18", - "@vue/shared": "3.4.18" + "@vue/reactivity": "3.4.19", + "@vue/shared": "3.4.19" } }, "node_modules/@vue/runtime-dom": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.18.tgz", - "integrity": "sha512-2y1Mkzcw1niSfG7z3Qx+2ir9Gb4hdTkZe5p/I8x1aTIKQE0vY0tPAEUPhZm5tx6183gG3D/KwHG728UR0sIufA==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.19.tgz", + "integrity": "sha512-IyZzIDqfNCF0OyZOauL+F4yzjMPN2rPd8nhqPP2N1lBn3kYqJpPHHru+83Rkvo2lHz5mW+rEeIMEF9qY3PB94g==", "dependencies": { - "@vue/runtime-core": "3.4.18", - "@vue/shared": "3.4.18", + "@vue/runtime-core": "3.4.19", + "@vue/shared": "3.4.19", "csstype": "^3.1.3" } }, @@ -998,21 +998,21 @@ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/@vue/server-renderer": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.18.tgz", - "integrity": "sha512-YJd1wa7mzUN3NRqLEsrwEYWyO+PUBSROIGlCc3J/cvn7Zu6CxhNLgXa8Z4zZ5ja5/nviYO79J1InoPeXgwBTZA==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.19.tgz", + "integrity": "sha512-eAj2p0c429RZyyhtMRnttjcSToch+kTWxFPHlzGMkR28ZbF1PDlTcmGmlDxccBuqNd9iOQ7xPRPAGgPVj+YpQw==", "dependencies": { - "@vue/compiler-ssr": "3.4.18", - "@vue/shared": "3.4.18" + "@vue/compiler-ssr": "3.4.19", + "@vue/shared": "3.4.19" }, "peerDependencies": { - "vue": "3.4.18" + "vue": "3.4.19" } }, "node_modules/@vue/shared": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.18.tgz", - "integrity": "sha512-CxouGFxxaW5r1WbrSmWwck3No58rApXgRSBxrqgnY1K+jk20F6DrXJkHdH9n4HVT+/B6G2CAn213Uq3npWiy8Q==" + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.19.tgz", + "integrity": "sha512-/KliRRHMF6LoiThEy+4c1Z4KB/gbPrGjWwJR+crg2otgrf/egKzRaCPvJ51S5oetgsgXLfc4Rm5ZgrKHZrtMSw==" }, "node_modules/acorn": { "version": "8.11.3", @@ -1934,9 +1934,9 @@ } }, "node_modules/sass": { - "version": "1.70.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.70.0.tgz", - "integrity": "sha512-uUxNQ3zAHeAx5nRFskBnrWzDUJrrvpCPD5FNAoRvTi0WwremlheES3tg+56PaVtCs5QDRX5CBLxxKMDJMEa1WQ==", + "version": "1.71.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz", + "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -2259,9 +2259,9 @@ } }, "node_modules/vite": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.0.tgz", - "integrity": "sha512-STmSFzhY4ljuhz14bg9LkMTk3d98IO6DIArnTY6MeBwiD1Za2StcQtz7fzOUnRCqrHSD5+OS2reg4HOz1eoLnw==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.4.tgz", + "integrity": "sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==", "dev": true, "dependencies": { "esbuild": "^0.19.3", @@ -2326,15 +2326,15 @@ } }, "node_modules/vue": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.18.tgz", - "integrity": "sha512-0zLRYamFRe0wF4q2L3O24KQzLyLpL64ye1RUToOgOxuWZsb/FhaNRdGmeozdtVYLz6tl94OXLaK7/WQIrVCw1A==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.19.tgz", + "integrity": "sha512-W/7Fc9KUkajFU8dBeDluM4sRGc/aa4YJnOYck8dkjgZoXtVsn3OeTGni66FV1l3+nvPA7VBFYtPioaGKUmEADw==", "dependencies": { - "@vue/compiler-dom": "3.4.18", - "@vue/compiler-sfc": "3.4.18", - "@vue/runtime-dom": "3.4.18", - "@vue/server-renderer": "3.4.18", - "@vue/shared": "3.4.18" + "@vue/compiler-dom": "3.4.19", + "@vue/compiler-sfc": "3.4.19", + "@vue/runtime-dom": "3.4.19", + "@vue/server-renderer": "3.4.19", + "@vue/shared": "3.4.19" }, "peerDependencies": { "typescript": "*" @@ -2953,43 +2953,43 @@ } }, "@vitejs/plugin-vue": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.3.tgz", - "integrity": "sha512-b8S5dVS40rgHdDrw+DQi/xOM9ed+kSRZzfm1T74bMmBDCd8XO87NKlFYInzCtwvtWwXZvo1QxE2OSspTATWrbA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz", + "integrity": "sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==", "dev": true, "requires": {} }, "@vue/compiler-core": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.18.tgz", - "integrity": "sha512-F7YK8lMK0iv6b9/Gdk15A67wM0KKZvxDxed0RR60C1z9tIJTKta+urs4j0RTN5XqHISzI3etN3mX0uHhjmoqjQ==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.19.tgz", + "integrity": "sha512-gj81785z0JNzRcU0Mq98E56e4ltO1yf8k5PQ+tV/7YHnbZkrM0fyFyuttnN8ngJZjbpofWE/m4qjKBiLl8Ju4w==", "requires": { "@babel/parser": "^7.23.9", - "@vue/shared": "3.4.18", + "@vue/shared": "3.4.19", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.0.2" } }, "@vue/compiler-dom": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.18.tgz", - "integrity": "sha512-24Eb8lcMfInefvQ6YlEVS18w5Q66f4+uXWVA+yb7praKbyjHRNuKVWGuinfSSjM0ZIiPi++QWukhkgznBaqpEA==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.19.tgz", + "integrity": "sha512-vm6+cogWrshjqEHTzIDCp72DKtea8Ry/QVpQRYoyTIg9k7QZDX6D8+HGURjtmatfgM8xgCFtJJaOlCaRYRK3QA==", "requires": { - "@vue/compiler-core": "3.4.18", - "@vue/shared": "3.4.18" + "@vue/compiler-core": "3.4.19", + "@vue/shared": "3.4.19" } }, "@vue/compiler-sfc": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.18.tgz", - "integrity": "sha512-rG5tqtnzwrVpMqAQ7FHtvHaV70G6LLfJIWLYZB/jZ9m/hrnZmIQh+H3ewnC5onwe/ibljm9+ZupxeElzqCkTAw==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.19.tgz", + "integrity": "sha512-LQ3U4SN0DlvV0xhr1lUsgLCYlwQfUfetyPxkKYu7dkfvx7g3ojrGAkw0AERLOKYXuAGnqFsEuytkdcComei3Yg==", "requires": { "@babel/parser": "^7.23.9", - "@vue/compiler-core": "3.4.18", - "@vue/compiler-dom": "3.4.18", - "@vue/compiler-ssr": "3.4.18", - "@vue/shared": "3.4.18", + "@vue/compiler-core": "3.4.19", + "@vue/compiler-dom": "3.4.19", + "@vue/compiler-ssr": "3.4.19", + "@vue/shared": "3.4.19", "estree-walker": "^2.0.2", "magic-string": "^0.30.6", "postcss": "^8.4.33", @@ -2997,12 +2997,12 @@ } }, "@vue/compiler-ssr": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.18.tgz", - "integrity": "sha512-hSlv20oUhPxo2UYUacHgGaxtqP0tvFo6ixxxD6JlXIkwzwoZ9eKK6PFQN4hNK/R13JlNyldwWt/fqGBKgWJ6nQ==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.19.tgz", + "integrity": "sha512-P0PLKC4+u4OMJ8sinba/5Z/iDT84uMRRlrWzadgLA69opCpI1gG4N55qDSC+dedwq2fJtzmGald05LWR5TFfLw==", "requires": { - "@vue/compiler-dom": "3.4.18", - "@vue/shared": "3.4.18" + "@vue/compiler-dom": "3.4.19", + "@vue/shared": "3.4.19" } }, "@vue/devtools-api": { @@ -3011,29 +3011,29 @@ "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==" }, "@vue/reactivity": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.18.tgz", - "integrity": "sha512-7uda2/I0jpLiRygprDo5Jxs2HJkOVXcOMlyVlY54yRLxoycBpwGJRwJT9EdGB4adnoqJDXVT2BilUAYwI7qvmg==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.19.tgz", + "integrity": "sha512-+VcwrQvLZgEclGZRHx4O2XhyEEcKaBi50WbxdVItEezUf4fqRh838Ix6amWTdX0CNb/b6t3Gkz3eOebfcSt+UA==", "requires": { - "@vue/shared": "3.4.18" + "@vue/shared": "3.4.19" } }, "@vue/runtime-core": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.18.tgz", - "integrity": "sha512-7mU9diCa+4e+8/wZ7Udw5pwTH10A11sZ1nldmHOUKJnzCwvZxfJqAtw31mIf4T5H2FsLCSBQT3xgioA9vIjyDQ==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.19.tgz", + "integrity": "sha512-/Z3tFwOrerJB/oyutmJGoYbuoadphDcJAd5jOuJE86THNZji9pYjZroQ2NFsZkTxOq0GJbb+s2kxTYToDiyZzw==", "requires": { - "@vue/reactivity": "3.4.18", - "@vue/shared": "3.4.18" + "@vue/reactivity": "3.4.19", + "@vue/shared": "3.4.19" } }, "@vue/runtime-dom": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.18.tgz", - "integrity": "sha512-2y1Mkzcw1niSfG7z3Qx+2ir9Gb4hdTkZe5p/I8x1aTIKQE0vY0tPAEUPhZm5tx6183gG3D/KwHG728UR0sIufA==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.19.tgz", + "integrity": "sha512-IyZzIDqfNCF0OyZOauL+F4yzjMPN2rPd8nhqPP2N1lBn3kYqJpPHHru+83Rkvo2lHz5mW+rEeIMEF9qY3PB94g==", "requires": { - "@vue/runtime-core": "3.4.18", - "@vue/shared": "3.4.18", + "@vue/runtime-core": "3.4.19", + "@vue/shared": "3.4.19", "csstype": "^3.1.3" }, "dependencies": { @@ -3045,18 +3045,18 @@ } }, "@vue/server-renderer": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.18.tgz", - "integrity": "sha512-YJd1wa7mzUN3NRqLEsrwEYWyO+PUBSROIGlCc3J/cvn7Zu6CxhNLgXa8Z4zZ5ja5/nviYO79J1InoPeXgwBTZA==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.19.tgz", + "integrity": "sha512-eAj2p0c429RZyyhtMRnttjcSToch+kTWxFPHlzGMkR28ZbF1PDlTcmGmlDxccBuqNd9iOQ7xPRPAGgPVj+YpQw==", "requires": { - "@vue/compiler-ssr": "3.4.18", - "@vue/shared": "3.4.18" + "@vue/compiler-ssr": "3.4.19", + "@vue/shared": "3.4.19" } }, "@vue/shared": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.18.tgz", - "integrity": "sha512-CxouGFxxaW5r1WbrSmWwck3No58rApXgRSBxrqgnY1K+jk20F6DrXJkHdH9n4HVT+/B6G2CAn213Uq3npWiy8Q==" + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.19.tgz", + "integrity": "sha512-/KliRRHMF6LoiThEy+4c1Z4KB/gbPrGjWwJR+crg2otgrf/egKzRaCPvJ51S5oetgsgXLfc4Rm5ZgrKHZrtMSw==" }, "acorn": { "version": "8.11.3", @@ -3736,9 +3736,9 @@ } }, "sass": { - "version": "1.70.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.70.0.tgz", - "integrity": "sha512-uUxNQ3zAHeAx5nRFskBnrWzDUJrrvpCPD5FNAoRvTi0WwremlheES3tg+56PaVtCs5QDRX5CBLxxKMDJMEa1WQ==", + "version": "1.71.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz", + "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==", "requires": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -3961,9 +3961,9 @@ } }, "vite": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.0.tgz", - "integrity": "sha512-STmSFzhY4ljuhz14bg9LkMTk3d98IO6DIArnTY6MeBwiD1Za2StcQtz7fzOUnRCqrHSD5+OS2reg4HOz1eoLnw==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.4.tgz", + "integrity": "sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==", "dev": true, "requires": { "esbuild": "^0.19.3", @@ -3982,15 +3982,15 @@ } }, "vue": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.18.tgz", - "integrity": "sha512-0zLRYamFRe0wF4q2L3O24KQzLyLpL64ye1RUToOgOxuWZsb/FhaNRdGmeozdtVYLz6tl94OXLaK7/WQIrVCw1A==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.19.tgz", + "integrity": "sha512-W/7Fc9KUkajFU8dBeDluM4sRGc/aa4YJnOYck8dkjgZoXtVsn3OeTGni66FV1l3+nvPA7VBFYtPioaGKUmEADw==", "requires": { - "@vue/compiler-dom": "3.4.18", - "@vue/compiler-sfc": "3.4.18", - "@vue/runtime-dom": "3.4.18", - "@vue/server-renderer": "3.4.18", - "@vue/shared": "3.4.18" + "@vue/compiler-dom": "3.4.19", + "@vue/compiler-sfc": "3.4.19", + "@vue/runtime-dom": "3.4.19", + "@vue/server-renderer": "3.4.19", + "@vue/shared": "3.4.19" } }, "vue-chartjs": { diff --git a/frontend/package.json b/frontend/package.json index 112cbeb..3f5b49b 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -14,20 +14,20 @@ "lodash": "^4.17.21", "monaco-editor": "^0.46.0", "pinia": "^2.1.7", - "sass": "^1.70.0", - "vue": "^3.4.18", + "sass": "^1.71.1", + "vue": "^3.4.19", "vue-chartjs": "^5.3.0", "vue-i18n": "^9.9.1", "xterm": "^5.3.0", "xterm-addon-fit": "^0.8.0" }, "devDependencies": { - "@vitejs/plugin-vue": "^5.0.3", + "@vitejs/plugin-vue": "^5.0.4", "naive-ui": "^2.37.3", "prettier": "^3.2.5", "unplugin-auto-import": "^0.17.5", "unplugin-icons": "^0.18.5", "unplugin-vue-components": "^0.26.0", - "vite": "^5.1.0" + "vite": "^5.1.4" } } diff --git a/frontend/package.json.md5 b/frontend/package.json.md5 index 22eb415..e292df3 100755 --- a/frontend/package.json.md5 +++ b/frontend/package.json.md5 @@ -1 +1 @@ -0e7759f741b2d18b129ae154ce334ae9 \ No newline at end of file +0d716149856646a7939a157fbfa27913 \ No newline at end of file diff --git a/go.mod b/go.mod index ecef1ed..a78d046 100644 --- a/go.mod +++ b/go.mod @@ -6,12 +6,13 @@ require ( github.com/adrg/sysfont v0.1.2 github.com/andybalholm/brotli v1.1.0 github.com/google/uuid v1.6.0 - github.com/klauspost/compress v1.17.6 - github.com/redis/go-redis/v9 v9.4.0 + github.com/klauspost/compress v1.17.7 + github.com/redis/go-redis/v9 v9.5.1 github.com/vmihailenco/msgpack/v5 v5.4.1 github.com/vrischmann/userdir v0.0.0-20151206171402-20f291cebd68 github.com/wailsapp/wails/v2 v2.8.0 golang.org/x/crypto v0.19.0 + golang.org/x/net v0.21.0 gopkg.in/yaml.v3 v3.0.1 ) @@ -44,7 +45,6 @@ require ( github.com/wailsapp/go-webview2 v1.0.10 // indirect github.com/wailsapp/mimetype v1.4.1 // indirect golang.org/x/exp v0.0.0-20240205201215-2c58cdc269a3 // indirect - golang.org/x/net v0.21.0 // indirect golang.org/x/sys v0.17.0 // indirect golang.org/x/text v0.14.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect diff --git a/go.sum b/go.sum index 02648c9..bde719a 100644 --- a/go.sum +++ b/go.sum @@ -30,8 +30,8 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e h1:Q3+PugElBCf4PFpxhErSzU3/PY5sFL5Z6rfv4AbGAck= github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e/go.mod h1:alcuEEnZsY1WQsagKhZDsoPCRoOijYqhZvPwLG0kzVs= -github.com/klauspost/compress v1.17.6 h1:60eq2E/jlfwQXtvZEeBUYADs+BwKBWURIY+Gj2eRGjI= -github.com/klauspost/compress v1.17.6/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg= +github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -66,8 +66,8 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/redis/go-redis/v9 v9.4.0 h1:Yzoz33UZw9I/mFhx4MNrB6Fk+XHO1VukNcCa1+lwyKk= -github.com/redis/go-redis/v9 v9.4.0/go.mod h1:hdY0cQFCN4fnSYT6TkisLufl/4W5UIXyv0b/CLO2V2M= +github.com/redis/go-redis/v9 v9.5.1 h1:H1X4D3yHPaYrkL5X06Wh6xNVM/pX0Ft4RV0vMGvLBh8= +github.com/redis/go-redis/v9 v9.5.1/go.mod h1:hdY0cQFCN4fnSYT6TkisLufl/4W5UIXyv0b/CLO2V2M= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= From 2250e15971d65e66f644ac65e2d8dc03abde1ddf Mon Sep 17 00:00:00 2001 From: Lykin <137850705+tiny-craft@users.noreply.github.com> Date: Thu, 22 Feb 2024 21:32:42 +0800 Subject: [PATCH 4/7] chore: update README --- README.md | 9 +++------ README_zh.md | 7 ++----- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 59d418c..d4f26ae 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ Linux. * Provides visually and user-friendly UI, light and dark themes (Thanks to [Naive UI](https://github.com/tusen-ai/naive-ui) and [IconPark](https://iconpark.oceanengine.com)). * Multi-language support ([Need more languages ? Click here to contribute](.github/CONTRIBUTING.md)). -* Better connection management: supports SSH Tunnel/SSL/Sentinel Mode/Cluster Mode. +* Better connection management: supports SSH Tunnel/SSL/Sentinel Mode/Cluster Mode/HTTP proxy/SOCKS5 proxy. * Visualize key value operations, CRUD support for Lists, Hashes, Strings, Sets, Sorted Sets, and Streams. * Support multiple data viewing format and decode/decompression methods. * Use SCAN for segmented loading, making it easy to list millions of keys. @@ -50,11 +50,8 @@ Linux. * Support real-time commands monitoring. * Support import/export data. * Support publish/subscribe. -* support import/export connection profile - -## Roadmap - -- [ ] Custom data encoder and decoder for value display +* Support import/export connection profile. +* Custom data encoder and decoder for value display. ## Installation diff --git a/README_zh.md b/README_zh.md index eb13fb4..d34cfc9 100644 --- a/README_zh.md +++ b/README_zh.md @@ -32,7 +32,7 @@ * 界面精美易用,提供浅色/深色主题(感谢[Naive UI](https://github.com/tusen-ai/naive-ui) 和 [IconPark](https://iconpark.oceanengine.com)) * 多国语言支持:英文/中文([需要更多语言支持?点我贡献语言](.github/CONTRIBUTING_zh.md)) -* 更好用的连接管理:支持SSH隧道/SSL/哨兵模式/集群模式 +* 更好用的连接管理:支持SSH隧道/SSL/哨兵模式/集群模式/HTTP代理/SOCKS5代理 * 可视化键值操作,增删查改一应俱全 * 支持多种数据查看格式以及转码/解压方式 * 采用SCAN分段加载,可轻松处理数百万键列表 @@ -46,10 +46,7 @@ * 支持导入/导出数据 * 支持发布订阅 * 支持导入/导出连接配置 - -## 未来版本规划 - -- [ ] 自定义数据展示编码/解码 +* 自定义数据展示编码/解码 ## 安装 From 28d233612498134fd01983175b8a4384f1812e6d Mon Sep 17 00:00:00 2001 From: Lykin <137850705+tiny-craft@users.noreply.github.com> Date: Thu, 22 Feb 2024 22:12:23 +0800 Subject: [PATCH 5/7] fix: github action for signing windows package --- .github/workflows/release-windows.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release-windows.yaml b/.github/workflows/release-windows.yaml index afce2cb..8858ba0 100644 --- a/.github/workflows/release-windows.yaml +++ b/.github/workflows/release-windows.yaml @@ -84,7 +84,7 @@ jobs: - name: Build Windows NSIS installer shell: bash - run: CGO_ENABLED=1 wails build -clean -platform ${{ matrix.platform }} -nsis -webview2 embed -ldflags "-X main.version=${{ github.event.release.tag_name }}" + run: CGO_ENABLED=1 wails build -clean -platform ${{ matrix.platform }} -nsis -webview2 embed -webview2 embed -ldflags "-X main.version=${{ github.event.release.tag_name }}" - name: Codesign Windows NSIS installer working-directory: ./build/bin @@ -94,11 +94,11 @@ jobs: Set-Content -Path certificate\certificate.txt -Value '${{ secrets.WIN_SIGNING_CERT }}' certutil -decode certificate\certificate.txt certificate\certificate.pfx echo "Signing TinyRDM installer" - & 'C:/Program Files (x86)/Windows Kits/10/bin/10.0.17763.0/x86/signtool.exe' sign /fd sha256 /tr http://ts.ssl.com /f certificate\certificate.pfx /p '${{ secrets.WIN_SIGNING_CERT_PASSWORD }}' TinyRDM-${{ steps.normalise_platform.outputs.tag }}-installer.exe + & 'C:/Program Files (x86)/Windows Kits/10/bin/10.0.17763.0/x86/signtool.exe' sign /fd sha256 /tr http://ts.ssl.com /f certificate\certificate.pfx /p '${{ secrets.WIN_SIGNING_CERT_PASSWORD }}' 'Tiny RDM.exe' - name: Rename installer working-directory: ./build/bin - run: Rename-Item -Path "TinyRDM-${{ steps.normalise_platform.outputs.tag }}-installer.exe" -NewName "TinyRDM_Setup_${{ steps.normalise_version.outputs.version }}_${{ steps.normalise_platform.outputs.tag }}.exe" + run: Rename-Item -Path "Tiny RDM.exe" -NewName "TinyRDM_Setup_${{ steps.normalise_version.outputs.version }}_${{ steps.normalise_platform.outputs.tag }}.exe" - name: Upload release asset (Installer) uses: softprops/action-gh-release@v1 From 78b7700b1b782abe61a735d086948cadd0089bc6 Mon Sep 17 00:00:00 2001 From: Lykin <137850705+tiny-craft@users.noreply.github.com> Date: Thu, 22 Feb 2024 22:47:07 +0800 Subject: [PATCH 6/7] fix: github action for signing windows package --- .github/workflows/release-windows.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-windows.yaml b/.github/workflows/release-windows.yaml index 8858ba0..e0d3ae8 100644 --- a/.github/workflows/release-windows.yaml +++ b/.github/workflows/release-windows.yaml @@ -84,7 +84,7 @@ jobs: - name: Build Windows NSIS installer shell: bash - run: CGO_ENABLED=1 wails build -clean -platform ${{ matrix.platform }} -nsis -webview2 embed -webview2 embed -ldflags "-X main.version=${{ github.event.release.tag_name }}" + run: CGO_ENABLED=1 wails build -clean -platform ${{ matrix.platform }} -nsis -upx -webview2 embed -ldflags "-X main.version=${{ github.event.release.tag_name }}" - name: Codesign Windows NSIS installer working-directory: ./build/bin From a431467b5f48cbfada5c0fc2e63ed7bc3d623cb3 Mon Sep 17 00:00:00 2001 From: Lykin <137850705+tiny-craft@users.noreply.github.com> Date: Thu, 22 Feb 2024 23:08:31 +0800 Subject: [PATCH 7/7] chore: remove -upx flag due to windows/arm cause error --- .github/workflows/release-windows.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-windows.yaml b/.github/workflows/release-windows.yaml index e0d3ae8..1713230 100644 --- a/.github/workflows/release-windows.yaml +++ b/.github/workflows/release-windows.yaml @@ -84,7 +84,7 @@ jobs: - name: Build Windows NSIS installer shell: bash - run: CGO_ENABLED=1 wails build -clean -platform ${{ matrix.platform }} -nsis -upx -webview2 embed -ldflags "-X main.version=${{ github.event.release.tag_name }}" + run: CGO_ENABLED=1 wails build -clean -platform ${{ matrix.platform }} -nsis -webview2 embed -ldflags "-X main.version=${{ github.event.release.tag_name }}" - name: Codesign Windows NSIS installer working-directory: ./build/bin