refactor: embed xdb file for ip2region

This commit is contained in:
RockYang 2023-06-22 11:08:44 +08:00
parent a7d5a6ccb9
commit c8e30383ba
4 changed files with 124 additions and 106 deletions

View File

@ -72,36 +72,40 @@ func (h *ManagerHandler) Session(c *gin.Context) {
}
}
// TestUser 修正用户配置数据接口
// 将用户订阅角色的数据结构从 map 改成数组
func (h *ManagerHandler) TestUser(c *gin.Context) {
var users []model.User
h.db.Find(&users)
for _, u := range users {
var m map[string]int
var roleKeys = make([]string, 0)
err := utils.JsonDecode(u.ChatRoles, &m)
if err != nil {
continue
}
// Migrate 数据修正
func (h *ManagerHandler) Migrate(c *gin.Context) {
opt := c.Query("opt")
switch opt {
case "user":
// 将用户订阅角色的数据结构从 map 改成数组
var users []model.User
h.db.Find(&users)
for _, u := range users {
var m map[string]int
var roleKeys = make([]string, 0)
err := utils.JsonDecode(u.ChatRoles, &m)
if err != nil {
continue
}
for k, _ := range m {
roleKeys = append(roleKeys, k)
}
u.ChatRoles = utils.JsonEncode(roleKeys)
h.db.Updates(&u)
for k, _ := range m {
roleKeys = append(roleKeys, k)
}
u.ChatRoles = utils.JsonEncode(roleKeys)
h.db.Updates(&u)
}
break
case "role":
// TestRole 修改角色图片,改成绝对路径
var roles []model.ChatRole
h.db.Find(&roles)
for _, r := range roles {
r.Icon = "/" + r.Icon
h.db.Updates(&r)
}
break
}
resp.SUCCESS(c, "SUCCESS")
}
// TestRole 修改角色图片,改成绝对路径
func (h *ManagerHandler) TestRole(c *gin.Context) {
var roles []model.ChatRole
h.db.Find(&roles)
for _, r := range roles {
r.Icon = "/" + r.Icon
h.db.Updates(&r)
}
resp.SUCCESS(c, "SUCCESS")
}

View File

@ -8,8 +8,10 @@ import (
logger2 "chatplus/logger"
"chatplus/store"
"context"
"embed"
"flag"
"fmt"
"io"
"log"
"os"
"os/signal"
@ -22,10 +24,12 @@ import (
)
var logger = logger2.GetLogger()
var configFile string
var debugMode bool
//go:embed res/ip2region.xdb
var xdbFS embed.FS
// AppLifecycle 应用程序生命周期
type AppLifecycle struct {
}
@ -67,8 +71,11 @@ func main() {
// 创建 Ip2Region 查询对象
fx.Provide(func() (*xdb.Searcher, error) {
dbPath := "res/ip2region.xdb"
cBuff, err := xdb.LoadContentFromFile(dbPath)
file, err := xdbFS.Open("res/ip2region.xdb")
if err != nil {
return nil, err
}
cBuff, err := io.ReadAll(file)
if err != nil {
return nil, err
}
@ -125,8 +132,7 @@ func main() {
group.POST("login", h.Login)
group.GET("logout", h.Logout)
group.GET("session", h.Session)
group.GET("test/user", h.TestUser)
group.GET("test/role", h.TestRole)
group.GET("migrate", h.Migrate)
}),
fx.Invoke(func(s *core.AppServer, h *admin.ApiKeyHandler) {
group := s.Engine.Group("/api/admin/apikey/")

View File

@ -3,83 +3,12 @@ package utils
import (
"encoding/json"
"fmt"
"github.com/lionsoul2014/ip2region/binding/golang/xdb"
"golang.org/x/crypto/sha3"
"math/rand"
"reflect"
"strings"
"time"
"github.com/lionsoul2014/ip2region/binding/golang/xdb"
)
// RandString generate rand string with specified length
func RandString(length int) string {
str := "0123456789abcdefghijklmnopqrstuvwxyz"
data := []byte(str)
var result []byte
r := rand.New(rand.NewSource(time.Now().UnixNano()))
for i := 0; i < length; i++ {
result = append(result, data[r.Intn(len(data))])
}
return string(result)
}
func RandomNumber(bit int) int {
rand.Seed(time.Now().UnixNano())
min := 1 // min value
max := 1 //max value
for i := 0; i < bit; i++ {
min = min * 10
max = max * 10
}
max = max * 10
return rand.Intn(max-min+1) + min
}
func ContainsStr(slice []string, item string) bool {
for _, e := range slice {
if e == item {
return true
}
}
return false
}
// Stamp2str 时间戳转字符串
func Stamp2str(timestamp int64) string {
if timestamp == 0 {
return ""
}
return time.Unix(timestamp, 0).Format("2006-01-02 15:04:05")
}
// Str2stamp 字符串转时间戳
func Str2stamp(str string) int64 {
layout := "2006-01-02 15:04:05"
t, err := time.Parse(layout, str)
if err != nil {
return 0
}
return t.Unix()
}
func GenPassword(pass string, salt string) string {
data := []byte(pass + salt)
hash := sha3.Sum256(data)
return fmt.Sprintf("%x", hash)
}
func JsonEncode(value interface{}) string {
bytes, err := json.Marshal(value)
if err != nil {
return ""
}
return string(bytes)
}
func JsonDecode(src string, dest interface{}) error {
return json.Unmarshal([]byte(src), dest)
}
// CopyObject 拷贝对象
func CopyObject(src interface{}, dst interface{}) error {

79
api/go/utils/strings.go Normal file
View File

@ -0,0 +1,79 @@
package utils
import (
"encoding/json"
"fmt"
"math/rand"
"time"
"golang.org/x/crypto/sha3"
)
// RandString generate rand string with specified length
func RandString(length int) string {
str := "0123456789abcdefghijklmnopqrstuvwxyz"
data := []byte(str)
var result []byte
r := rand.New(rand.NewSource(time.Now().UnixNano()))
for i := 0; i < length; i++ {
result = append(result, data[r.Intn(len(data))])
}
return string(result)
}
func RandomNumber(bit int) int {
rand.Seed(time.Now().UnixNano())
min := 1 // min value
max := 1 //max value
for i := 0; i < bit; i++ {
min = min * 10
max = max * 10
}
max = max * 10
return rand.Intn(max-min+1) + min
}
func ContainsStr(slice []string, item string) bool {
for _, e := range slice {
if e == item {
return true
}
}
return false
}
// Stamp2str 时间戳转字符串
func Stamp2str(timestamp int64) string {
if timestamp == 0 {
return ""
}
return time.Unix(timestamp, 0).Format("2006-01-02 15:04:05")
}
// Str2stamp 字符串转时间戳
func Str2stamp(str string) int64 {
layout := "2006-01-02 15:04:05"
t, err := time.Parse(layout, str)
if err != nil {
return 0
}
return t.Unix()
}
func GenPassword(pass string, salt string) string {
data := []byte(pass + salt)
hash := sha3.Sum256(data)
return fmt.Sprintf("%x", hash)
}
func JsonEncode(value interface{}) string {
bytes, err := json.Marshal(value)
if err != nil {
return ""
}
return string(bytes)
}
func JsonDecode(src string, dest interface{}) error {
return json.Unmarshal([]byte(src), dest)
}