123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- package utils
- import (
- "crypto/rand"
- "crypto/rsa"
- "database/sql"
- "encoding/base64"
- "encoding/json"
- "encoding/pem"
- "fmt"
- _ "github.com/go-sql-driver/mysql"
- "github.com/redis/go-redis/v9"
- "os"
- )
- func RandomString(size int, patten string) string {
- buffer, limit := make([]byte, size), len(patten)
- for i := 0; i < size; i++ {
- buffer[i] = patten[RandInt(limit)]
- }
- return string(buffer)
- }
- func WsEvent(event string, data any) WsMsg {
- return WsMsg{Event: event, Data: data}
- }
- func WsError(msg string) WsMsg {
- return WsMsg{Event: "_ERROR_", Data: msg}
- }
- func Success(data any) Response {
- return Response{true, "success", data}
- }
- func Fail(msg string) Response {
- return Response{false, msg, nil}
- }
- func ReadConfig(filepath string) Config {
- config := Config{
- Release: false, ServerAddr: "127.0.0.1:3080", TimeFormat: "15:04:05",
- MysqlHost: "127.0.0.1", MysqlPort: 3306, MysqlUser: "wine", MysqlPass: "Wine-Mysql.1000", MysqlDatabase: "wine",
- RedisHost: "127.0.0.1", RedisPort: 6379, RedisPass: "Wine-Redis.1000", RedisDatabase: 0,
- }
- file, err := os.Open(filepath)
- if err != nil {
- return config
- }
- defer func() {
- err = file.Close()
- if err != nil {
- }
- }()
- decoder := json.NewDecoder(file)
- var conf Config
- err = decoder.Decode(&conf)
- if err != nil {
- return config
- }
- return conf
- }
- func SqlInit(config *Config) {
- Redis = redis.NewClient(&redis.Options{
- Addr: fmt.Sprintf("%s:%d", config.RedisHost, config.RedisPort),
- Password: config.RedisPass, DB: config.RedisDatabase,
- })
- db, err := sql.Open(
- "mysql",
- fmt.Sprintf(
- "%s:%s@tcp(%s:%d)/%s?loc=Local&charset=utf8&parseTime=true",
- config.MysqlUser, config.MysqlPass, config.MysqlHost, config.MysqlPort, config.MysqlDatabase,
- ),
- )
- if err != nil {
- fmt.Println("mysql init failed.")
- os.Exit(-1)
- }
- err = db.Ping()
- if err != nil {
- fmt.Println("mysql connection failed.")
- os.Exit(-1)
- }
- Mysql = db
- }
- func GenRsaKey() error {
- var err error
- var bytes []byte
- ServerPri, err = rsa.GenerateKey(rand.Reader, 2048)
- if err != nil {
- return err
- }
- bytes, err = MarshalPublicKey(&ServerPri.PublicKey)
- if err != nil {
- return err
- }
- publicBlock := &pem.Block{
- Type: "PUBLIC KEY",
- Bytes: bytes,
- }
- ClientPub = string(pem.EncodeToMemory(publicBlock))
- return nil
- }
- func Encrypt(data string) (string, error) {
- return "", nil
- }
- func Decrypt(data string) (string, error) {
- bytes, err := base64.StdEncoding.DecodeString(data)
- if err != nil {
- return "", err
- }
- bytes, err = rsa.DecryptPKCS1v15(rand.Reader, ServerPri, bytes)
- if err != nil {
- return "", err
- }
- return string(bytes), nil
- }
- func UnZip(list JsonType) ([]string, []any) {
- var keys []string
- var values []any
- for k, v := range list {
- keys = append(keys, k)
- values = append(values, v)
- }
- return keys, values
- }
- func SqlFields(names []string) string {
- var res string
- for _, name := range names {
- res += fmt.Sprintf("`%s`=?, ", name)
- }
- ll := len(res)
- if ll > 0 {
- return res[:ll-2]
- }
- return res
- }
- func AnyTrans(data any, aim any) error {
- tmp, err := json.Marshal(data)
- if err != nil {
- return err
- }
- err = json.Unmarshal(tmp, aim)
- if err != nil {
- return err
- }
- return nil
- }
|