init_service.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. package services
  2. import (
  3. "context"
  4. "fmt"
  5. "image/color"
  6. "sync"
  7. "time"
  8. "github.com/jmoiron/sqlx"
  9. "github.com/go-redis/redis/v8"
  10. "github.com/gorilla/sessions"
  11. "github.com/mojocn/base64Captcha"
  12. )
  13. var (
  14. // 配置信息
  15. AppConfig = struct {
  16. SessionSecret string
  17. SessionName string
  18. CaptchaType string
  19. }{
  20. SessionSecret: "your-very-secret-key-change-in-production",
  21. SessionName: "auth_session",
  22. CaptchaType: "digit", // math, digit, audio, string
  23. }
  24. // 全局服务实例
  25. sessionStore *sessions.CookieStore
  26. captchaDriver base64Captcha.Driver
  27. initOnce sync.Once
  28. RedisClient *redis.Client
  29. MYSQL_DB *sqlx.DB
  30. JdbcClient *DBClient
  31. MinioClient *MinioService
  32. )
  33. // 验证码配置
  34. const (
  35. CaptchaExpireMin = 5 // 验证码过期时间(分钟)
  36. CaptchaRedisPrefix = "code-key-" // 验证码结果存储键前缀
  37. )
  38. const (
  39. BucketName = "process"
  40. )
  41. // InitConfig 初始化配置
  42. func InitConfig() {
  43. // 这里可以读取配置文件或环境变量
  44. // 例如:AppConfig.SessionSecret = os.Getenv("SESSION_SECRET")
  45. }
  46. // SessionStore 获取会话存储
  47. func SessionStore() *sessions.CookieStore {
  48. initOnce.Do(func() {
  49. sessionStore = sessions.NewCookieStore([]byte(AppConfig.SessionSecret))
  50. sessionStore.Options = &sessions.Options{
  51. Path: "/",
  52. MaxAge: 86400 * 7, // 7天
  53. HttpOnly: true,
  54. Secure: false, // 开发环境设为false,生产环境设为true
  55. }
  56. })
  57. return sessionStore
  58. }
  59. // InitServices 初始化服务
  60. func InitCaptcha() {
  61. // 初始化验证码驱动
  62. switch AppConfig.CaptchaType {
  63. case "digit":
  64. captchaDriver = base64Captcha.NewDriverDigit(80, 240, 4, 0.2, 10)
  65. case "math":
  66. captchaDriver = base64Captcha.NewDriverMath(
  67. 70, // 高度 - 适当高度,保证清晰度
  68. 240, // 宽度 - 足够宽度显示数学公式
  69. 0, // 干扰线数量 - 设置为0提高可读性
  70. 0, // 干扰点数量 - 设置为0提高可读性
  71. &color.RGBA{R: 255, G: 255, B: 255, A: 255}, // 白色背景
  72. nil, // 字体列表 - 使用默认
  73. []string{"RitaSmith.ttf"}, // 使用清晰字体
  74. )
  75. case "audio":
  76. captchaDriver = base64Captcha.NewDriverAudio(4, "en")
  77. default:
  78. captchaDriver = base64Captcha.NewDriverString(80, 240, 4, 0, 4, "1234567890", nil, nil, nil)
  79. }
  80. }
  81. func InitMyRedis(addr string, password string, dbn int) {
  82. RedisClient = redis.NewClient(&redis.Options{
  83. Addr: addr, // Redis地址
  84. Password: password, // Redis密码(无则留空)
  85. DB: dbn, // 使用的数据库
  86. })
  87. ctx := context.Background()
  88. err := RedisClient.Set(ctx, "mes", "mes-redis", 10*time.Second).Err()
  89. if err == nil {
  90. build_time := time.Now()
  91. build_time_str := build_time.Format(time.DateTime)
  92. fmt.Printf("%s redis客户端启动成功\n", build_time_str)
  93. } else {
  94. fmt.Printf("redis.err=====%v\n", err)
  95. }
  96. }
  97. func InitMysqlPool(user string, password string, host string, port int, dbname string, log bool) {
  98. db_config := DefaultConfig(user, password, host, port, dbname)
  99. MYSQL_DB = NewPool(db_config)
  100. JdbcClient = NewDBClient(MYSQL_DB, log)
  101. // // 准备预编译语句
  102. // stmt, err := MYSQL_DB.Preparex("SELECT VERSION()")
  103. // if err != nil {
  104. // print(err)
  105. // }
  106. // defer stmt.Close()
  107. // var version string
  108. // err = stmt.QueryRowx().Scan(&version)
  109. // if err != nil {
  110. // print(err)
  111. // }
  112. // print("Database Version: ", version,"\n")
  113. }
  114. func InitMinioServie(addr string, user string, password string, usessl bool) {
  115. MinioClient = NewMinioService(
  116. addr,
  117. user,
  118. password,
  119. usessl,
  120. )
  121. build_time := time.Now()
  122. build_time_str := build_time.Format(time.DateTime)
  123. ctx := context.Background()
  124. _, err := MinioClient.client.BucketExists(ctx, "process")
  125. if err == nil {
  126. fmt.Printf("%s minio客户端初始化成功\n", build_time_str)
  127. } else {
  128. fmt.Printf("minio客户端.err=====%v\n", err)
  129. }
  130. }
  131. // GetCaptchaDriver 获取验证码驱动
  132. func GetCaptchaDriver() base64Captcha.Driver {
  133. return captchaDriver
  134. }
  135. // GetRedisClient 获取Redis客户端
  136. func GetRedisClient() *redis.Client {
  137. return RedisClient
  138. }
  139. // func GetMysqlPool() *sqlx.DB {
  140. // return MYSQL_DB
  141. // }
  142. func GetMinioClient() *MinioService {
  143. return MinioClient
  144. }