lib.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. package utils
  2. import (
  3. "crypto/rand"
  4. "crypto/rsa"
  5. "database/sql"
  6. "encoding/base64"
  7. "encoding/json"
  8. "encoding/pem"
  9. "fmt"
  10. _ "github.com/go-sql-driver/mysql"
  11. "github.com/redis/go-redis/v9"
  12. "os"
  13. )
  14. func RandomString(size int, patten string) string {
  15. buffer, limit := make([]byte, size), len(patten)
  16. for i := 0; i < size; i++ {
  17. buffer[i] = patten[RandInt(limit)]
  18. }
  19. return string(buffer)
  20. }
  21. func WsEvent(event string, data any) WsMsg {
  22. return WsMsg{Event: event, Data: data}
  23. }
  24. func WsError(msg string) WsMsg {
  25. return WsMsg{Event: "_ERROR_", Data: msg}
  26. }
  27. func Success(data any) Response {
  28. return Response{true, "success", data}
  29. }
  30. func Fail(msg string) Response {
  31. return Response{false, msg, nil}
  32. }
  33. func ReadConfig(filepath string) Config {
  34. config := Config{
  35. Release: false, ServerAddr: "127.0.0.1:3080", TimeFormat: "15:04:05",
  36. MysqlHost: "127.0.0.1", MysqlPort: 3306, MysqlUser: "wine", MysqlPass: "Wine-Mysql.1000", MysqlDatabase: "wine",
  37. RedisHost: "127.0.0.1", RedisPort: 6379, RedisPass: "Wine-Redis.1000", RedisDatabase: 0,
  38. }
  39. file, err := os.Open(filepath)
  40. if err != nil {
  41. return config
  42. }
  43. defer func() {
  44. err = file.Close()
  45. if err != nil {
  46. }
  47. }()
  48. decoder := json.NewDecoder(file)
  49. var conf Config
  50. err = decoder.Decode(&conf)
  51. if err != nil {
  52. return config
  53. }
  54. return conf
  55. }
  56. func SqlInit(config *Config) {
  57. Redis = redis.NewClient(&redis.Options{
  58. Addr: fmt.Sprintf("%s:%d", config.RedisHost, config.RedisPort),
  59. Password: config.RedisPass, DB: config.RedisDatabase,
  60. })
  61. db, err := sql.Open(
  62. "mysql",
  63. fmt.Sprintf(
  64. "%s:%s@tcp(%s:%d)/%s?loc=Local&charset=utf8&parseTime=true",
  65. config.MysqlUser, config.MysqlPass, config.MysqlHost, config.MysqlPort, config.MysqlDatabase,
  66. ),
  67. )
  68. if err != nil {
  69. fmt.Println("mysql init failed.")
  70. os.Exit(-1)
  71. }
  72. err = db.Ping()
  73. if err != nil {
  74. fmt.Println("mysql connection failed.")
  75. os.Exit(-1)
  76. }
  77. Mysql = db
  78. }
  79. func GenRsaKey() error {
  80. var err error
  81. var bytes []byte
  82. ServerPri, err = rsa.GenerateKey(rand.Reader, 2048)
  83. if err != nil {
  84. return err
  85. }
  86. bytes, err = MarshalPublicKey(&ServerPri.PublicKey)
  87. if err != nil {
  88. return err
  89. }
  90. publicBlock := &pem.Block{
  91. Type: "PUBLIC KEY",
  92. Bytes: bytes,
  93. }
  94. ClientPub = string(pem.EncodeToMemory(publicBlock))
  95. return nil
  96. }
  97. func Encrypt(data string) (string, error) {
  98. return "", nil
  99. }
  100. func Decrypt(data string) (string, error) {
  101. bytes, err := base64.StdEncoding.DecodeString(data)
  102. if err != nil {
  103. return "", err
  104. }
  105. bytes, err = rsa.DecryptPKCS1v15(rand.Reader, ServerPri, bytes)
  106. if err != nil {
  107. return "", err
  108. }
  109. return string(bytes), nil
  110. }
  111. func UnZip(list JsonType) ([]string, []any) {
  112. var keys []string
  113. var values []any
  114. for k, v := range list {
  115. keys = append(keys, k)
  116. values = append(values, v)
  117. }
  118. return keys, values
  119. }
  120. func SqlFields(names []string) string {
  121. var res string
  122. for _, name := range names {
  123. res += fmt.Sprintf("`%s`=?, ", name)
  124. }
  125. ll := len(res)
  126. if ll > 0 {
  127. return res[:ll-2]
  128. }
  129. return res
  130. }
  131. func AnyTrans(data any, aim any) error {
  132. tmp, err := json.Marshal(data)
  133. if err != nil {
  134. return err
  135. }
  136. err = json.Unmarshal(tmp, aim)
  137. if err != nil {
  138. return err
  139. }
  140. return nil
  141. }