mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2024-11-27 20:49:03 +08:00
feat: 解决数据库同步时存在特殊字符导致失败的问题 (#2214)
This commit is contained in:
parent
e75c9a0304
commit
ad8bf09034
@ -14,6 +14,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/1Panel-dev/1Panel/backend/utils/cmd"
|
"github.com/1Panel-dev/1Panel/backend/utils/cmd"
|
||||||
|
"github.com/mozillazg/go-pinyin"
|
||||||
)
|
)
|
||||||
|
|
||||||
func CompareVersion(version1 string, version2 string) bool {
|
func CompareVersion(version1 string, version2 string) bool {
|
||||||
@ -180,3 +181,17 @@ func LoadTimeZoneByCmd() string {
|
|||||||
}
|
}
|
||||||
return fields[2]
|
return fields[2]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ConvertToPinyin(text string) string {
|
||||||
|
args := pinyin.NewArgs()
|
||||||
|
args.Fallback = func(r rune, a pinyin.Args) []string {
|
||||||
|
return []string{string(r)}
|
||||||
|
}
|
||||||
|
p := pinyin.Pinyin(text, args)
|
||||||
|
var strArr []string
|
||||||
|
for i := 0; i < len(p); i++ {
|
||||||
|
strArr = append(strArr, strings.Join(p[i], ""))
|
||||||
|
}
|
||||||
|
|
||||||
|
return strings.Join(strArr, "")
|
||||||
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package client
|
package client
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
mathRand "math/rand"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/1Panel-dev/1Panel/backend/utils/common"
|
"github.com/1Panel-dev/1Panel/backend/utils/common"
|
||||||
@ -94,14 +95,44 @@ var formatMap = map[string]string{
|
|||||||
}
|
}
|
||||||
|
|
||||||
func loadNameByDB(name, version string) string {
|
func loadNameByDB(name, version string) string {
|
||||||
|
nameItem := common.ConvertToPinyin(name)
|
||||||
if strings.HasPrefix(version, "5.6") {
|
if strings.HasPrefix(version, "5.6") {
|
||||||
if len(name) <= 16 {
|
if len(nameItem) <= 16 {
|
||||||
return name
|
return nameItem
|
||||||
}
|
}
|
||||||
return strings.TrimSuffix(name[:10], "_") + "_" + common.RandStr(5)
|
return strings.TrimSuffix(nameItem[:10], "_") + "_" + common.RandStr(5)
|
||||||
}
|
}
|
||||||
if len(name) <= 32 {
|
if len(nameItem) <= 32 {
|
||||||
return name
|
return nameItem
|
||||||
}
|
}
|
||||||
return strings.TrimSuffix(name[:25], "_") + "_" + common.RandStr(5)
|
return strings.TrimSuffix(nameItem[:25], "_") + "_" + common.RandStr(5)
|
||||||
|
}
|
||||||
|
|
||||||
|
func randomPassword(user string) string {
|
||||||
|
passwdItem := user
|
||||||
|
if len(user) > 6 {
|
||||||
|
passwdItem = user[:6]
|
||||||
|
}
|
||||||
|
num := []rune("1234567890")
|
||||||
|
uppercase := []rune("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
|
||||||
|
lowercase := []rune("abcdefghijklmnopqrstuvwxyz")
|
||||||
|
special := []rune(".%@!~_-")
|
||||||
|
|
||||||
|
b := make([]rune, 10)
|
||||||
|
for i := 0; i < 2; i++ {
|
||||||
|
b[i] = lowercase[mathRand.Intn(len(lowercase))]
|
||||||
|
}
|
||||||
|
for i := 2; i < 4; i++ {
|
||||||
|
b[i] = uppercase[mathRand.Intn(len(uppercase))]
|
||||||
|
}
|
||||||
|
b[4] = special[mathRand.Intn(len(special))]
|
||||||
|
for i := 5; i < 9; i++ {
|
||||||
|
b[i] = num[mathRand.Intn(len(num))]
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := len(b) - 1; i > 0; i-- {
|
||||||
|
j := mathRand.Intn(i + 1)
|
||||||
|
b[i], b[j] = b[j], b[i]
|
||||||
|
}
|
||||||
|
return passwdItem + "-" + (string(b))
|
||||||
}
|
}
|
||||||
|
@ -317,17 +317,19 @@ func (r *Remote) SyncDB(version string) ([]SyncDBInfo, error) {
|
|||||||
}
|
}
|
||||||
if len(dataItem.Username) == 0 {
|
if len(dataItem.Username) == 0 {
|
||||||
dataItem.Username = loadNameByDB(dbName, version)
|
dataItem.Username = loadNameByDB(dbName, version)
|
||||||
|
dataItem.Password = common.RandStr(16)
|
||||||
if err := r.CreateUser(CreateInfo{
|
if err := r.CreateUser(CreateInfo{
|
||||||
Name: dbName,
|
Name: dbName,
|
||||||
Format: charsetName,
|
Format: charsetName,
|
||||||
Version: version,
|
Version: version,
|
||||||
Username: dataItem.Username,
|
Username: dataItem.Username,
|
||||||
Password: common.RandStr(16),
|
Password: dataItem.Password,
|
||||||
Permission: "%",
|
Permission: "%",
|
||||||
Timeout: 300,
|
Timeout: 300,
|
||||||
}, false); err != nil {
|
}, false); err != nil {
|
||||||
return datas, fmt.Errorf("sync db from remote server failed, err: create user failed %v", err)
|
return datas, fmt.Errorf("sync db from remote server failed, err: create user failed %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
dataItem.Permission = "%"
|
dataItem.Permission = "%"
|
||||||
} else {
|
} else {
|
||||||
if isLocal {
|
if isLocal {
|
||||||
|
1
go.mod
1
go.mod
@ -31,6 +31,7 @@ require (
|
|||||||
github.com/mholt/archiver/v4 v4.0.0-alpha.8
|
github.com/mholt/archiver/v4 v4.0.0-alpha.8
|
||||||
github.com/minio/minio-go/v7 v7.0.36
|
github.com/minio/minio-go/v7 v7.0.36
|
||||||
github.com/mojocn/base64Captcha v1.3.5
|
github.com/mojocn/base64Captcha v1.3.5
|
||||||
|
github.com/mozillazg/go-pinyin v0.20.0
|
||||||
github.com/nicksnyder/go-i18n/v2 v2.1.2
|
github.com/nicksnyder/go-i18n/v2 v2.1.2
|
||||||
github.com/opencontainers/image-spec v1.1.0-rc2
|
github.com/opencontainers/image-spec v1.1.0-rc2
|
||||||
github.com/pkg/errors v0.9.1
|
github.com/pkg/errors v0.9.1
|
||||||
|
2
go.sum
2
go.sum
@ -606,6 +606,8 @@ github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
|
|||||||
github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
|
github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
|
||||||
github.com/mozillazg/go-httpheader v0.2.1 h1:geV7TrjbL8KXSyvghnFm+NyTux/hxwueTSrwhe88TQQ=
|
github.com/mozillazg/go-httpheader v0.2.1 h1:geV7TrjbL8KXSyvghnFm+NyTux/hxwueTSrwhe88TQQ=
|
||||||
github.com/mozillazg/go-httpheader v0.2.1/go.mod h1:jJ8xECTlalr6ValeXYdOF8fFUISeBAdw6E61aqQma60=
|
github.com/mozillazg/go-httpheader v0.2.1/go.mod h1:jJ8xECTlalr6ValeXYdOF8fFUISeBAdw6E61aqQma60=
|
||||||
|
github.com/mozillazg/go-pinyin v0.20.0 h1:BtR3DsxpApHfKReaPO1fCqF4pThRwH9uwvXzm+GnMFQ=
|
||||||
|
github.com/mozillazg/go-pinyin v0.20.0/go.mod h1:iR4EnMMRXkfpFVV5FMi4FNB6wGq9NV6uDWbUuPhP4Yc=
|
||||||
github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ=
|
github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ=
|
||||||
github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
||||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||||
|
Loading…
Reference in New Issue
Block a user