Browse Source

调整包名、完善鉴权

hsun 1 year ago
parent
commit
dddbf242d5
45 changed files with 269 additions and 79 deletions
  1. 9 9
      controller/auth.go
  2. 5 5
      controller/eta_trial/questionnaire.go
  3. 5 5
      controller/eta_trial/user.go
  4. 2 2
      controller/resp/base.go
  5. 4 4
      core/log.go
  6. 2 2
      core/run_server.go
  7. 2 2
      global/global.go
  8. 1 1
      go.mod
  9. 1 1
      init_serve/mysql.go
  10. 1 1
      init_serve/redis.go
  11. 4 4
      init_serve/router.go
  12. 1 1
      init_serve/task.go
  13. 1 1
      main.go
  14. 159 0
      middleware/auth.go
  15. 4 4
      middleware/recover.go
  16. 2 2
      middleware/token.go
  17. 1 1
      models/crm/admin.go
  18. 1 1
      models/crm/eta_trial.go
  19. 1 1
      models/crm/eta_trial_active_record.go
  20. 1 1
      models/crm/eta_trial_login_duration_record.go
  21. 1 1
      models/crm/eta_trial_questionnaire.go
  22. 1 1
      models/crm/eta_trial_questionnaire_record.go
  23. 25 0
      models/crm/open_api_user.go
  24. 1 1
      models/crm/sys_department.go
  25. 1 1
      models/crm/sys_group.go
  26. 1 1
      models/crm/sys_role.go
  27. 1 1
      models/crm/sys_role_admin.go
  28. 1 1
      models/eta/admin.go
  29. 1 1
      models/eta/crm_config.go
  30. 1 1
      models/eta/sys_department.go
  31. 1 1
      models/eta/sys_group.go
  32. 1 1
      models/eta/sys_role.go
  33. 1 1
      models/eta/sys_session.go
  34. 1 1
      models/eta/sys_user_login_record.go
  35. 1 1
      models/rddp/sys_session.go
  36. 1 1
      models/rddp/sys_user_login_record.go
  37. 1 1
      models/request/eta_trial/questionnaire.go
  38. 2 2
      routers/auth.go
  39. 1 1
      routers/eta_trial.go
  40. 2 2
      services/alarm_msg/alarm_msg.go
  41. 2 2
      services/cache_queue.go
  42. 1 1
      services/company.go
  43. 4 4
      services/sys_user_sync.go
  44. 3 3
      task/task.go
  45. 6 0
      utils/constants.go

+ 9 - 9
controller/auth.go

@@ -2,18 +2,18 @@ package controller
 
 import (
 	"encoding/base64"
+	"eta/eta_bridge/controller/resp"
+	"eta/eta_bridge/global"
+	"eta/eta_bridge/models/crm"
+	"eta/eta_bridge/models/eta"
+	"eta/eta_bridge/models/rddp"
+	"eta/eta_bridge/models/request"
+	"eta/eta_bridge/models/response"
+	"eta/eta_bridge/services"
+	"eta/eta_bridge/utils"
 	"fmt"
 	"github.com/gin-gonic/gin"
 	"github.com/go-playground/validator/v10"
-	"hongze/hz_crm_eta/controller/resp"
-	"hongze/hz_crm_eta/global"
-	"hongze/hz_crm_eta/models/crm"
-	"hongze/hz_crm_eta/models/eta"
-	"hongze/hz_crm_eta/models/rddp"
-	"hongze/hz_crm_eta/models/request"
-	"hongze/hz_crm_eta/models/response"
-	"hongze/hz_crm_eta/services"
-	"hongze/hz_crm_eta/utils"
 	"time"
 )
 

+ 5 - 5
controller/eta_trial/questionnaire.go

@@ -1,13 +1,13 @@
 package eta_trial
 
 import (
+	"eta/eta_bridge/controller/resp"
+	"eta/eta_bridge/global"
+	"eta/eta_bridge/models/crm"
+	etaTrialReq "eta/eta_bridge/models/request/eta_trial"
+	"eta/eta_bridge/utils"
 	"github.com/gin-gonic/gin"
 	"github.com/go-playground/validator/v10"
-	"hongze/hz_crm_eta/controller/resp"
-	"hongze/hz_crm_eta/global"
-	"hongze/hz_crm_eta/models/crm"
-	etaTrialReq "hongze/hz_crm_eta/models/request/eta_trial"
-	"hongze/hz_crm_eta/utils"
 	"sort"
 	"strings"
 )

+ 5 - 5
controller/eta_trial/user.go

@@ -1,13 +1,13 @@
 package eta_trial
 
 import (
+	"eta/eta_bridge/controller/resp"
+	"eta/eta_bridge/global"
+	"eta/eta_bridge/models/crm"
+	etaTrialReq "eta/eta_bridge/models/request/eta_trial"
+	"eta/eta_bridge/utils"
 	"github.com/gin-gonic/gin"
 	"github.com/go-playground/validator/v10"
-	"hongze/hz_crm_eta/controller/resp"
-	"hongze/hz_crm_eta/global"
-	"hongze/hz_crm_eta/models/crm"
-	etaTrialReq "hongze/hz_crm_eta/models/request/eta_trial"
-	"hongze/hz_crm_eta/utils"
 	"time"
 )
 

+ 2 - 2
controller/resp/base.go

@@ -2,10 +2,10 @@ package resp
 
 import (
 	"encoding/json"
+	"eta/eta_bridge/global"
+	"eta/eta_bridge/utils"
 	"fmt"
 	"github.com/gin-gonic/gin"
-	"hongze/hz_crm_eta/global"
-	"hongze/hz_crm_eta/utils"
 	"strings"
 )
 

+ 4 - 4
core/log.go

@@ -1,13 +1,13 @@
 package core
 
 import (
+	"eta/eta_bridge/config"
+	"eta/eta_bridge/global"
+	"eta/eta_bridge/utils"
 	"fmt"
 	"github.com/gin-gonic/gin"
 	rotatelogs "github.com/lestrrat-go/file-rotatelogs"
 	oplogging "github.com/op/go-logging"
-	"hongze/hz_crm_eta/config"
-	"hongze/hz_crm_eta/global"
-	"hongze/hz_crm_eta/utils"
 	"io"
 	"os"
 	"strings"
@@ -15,7 +15,7 @@ import (
 )
 
 const (
-	Module = "hz_crm_eta"
+	Module = "eta_bridge"
 )
 
 var (

+ 2 - 2
core/run_server.go

@@ -1,9 +1,9 @@
 package core
 
 import (
+	"eta/eta_bridge/global"
+	"eta/eta_bridge/init_serve"
 	"fmt"
-	"hongze/hz_crm_eta/global"
-	"hongze/hz_crm_eta/init_serve"
 )
 
 func RunServe() {

+ 2 - 2
global/global.go

@@ -1,14 +1,14 @@
 package global
 
 import (
+	"eta/eta_bridge/config"
+	"eta/eta_bridge/utils"
 	"fmt"
 	"github.com/fsnotify/fsnotify"
 	"github.com/go-redis/redis/v8"
 	oplogging "github.com/op/go-logging"
 	"github.com/spf13/viper"
 	"gorm.io/gorm"
-	"hongze/hz_crm_eta/config"
-	"hongze/hz_crm_eta/utils"
 	"io"
 
 	"github.com/rdlucklib/rdluck_tools/cache"

+ 1 - 1
go.mod

@@ -1,4 +1,4 @@
-module hongze/hz_crm_eta
+module eta/eta_bridge
 
 go 1.18
 

+ 1 - 1
init_serve/mysql.go

@@ -1,11 +1,11 @@
 package init_serve
 
 import (
+	"eta/eta_bridge/global"
 	"fmt"
 	"gorm.io/driver/mysql"
 	"gorm.io/gorm"
 	"gorm.io/gorm/logger"
-	"hongze/hz_crm_eta/global"
 	"io"
 	"log"
 	"os"

+ 1 - 1
init_serve/redis.go

@@ -2,9 +2,9 @@ package init_serve
 
 import (
 	"context"
+	"eta/eta_bridge/global"
 	"fmt"
 	"github.com/go-redis/redis/v8"
-	"hongze/hz_crm_eta/global"
 
 	"github.com/rdlucklib/rdluck_tools/cache"
 )

+ 4 - 4
init_serve/router.go

@@ -1,11 +1,11 @@
 package init_serve
 
 import (
+	_ "eta/eta_bridge/docs"
+	"eta/eta_bridge/global"
+	"eta/eta_bridge/middleware"
+	"eta/eta_bridge/routers"
 	"github.com/gin-gonic/gin"
-	_ "hongze/hz_crm_eta/docs"
-	"hongze/hz_crm_eta/global"
-	"hongze/hz_crm_eta/middleware"
-	"hongze/hz_crm_eta/routers"
 )
 
 // InitRouter 初始化路由

+ 1 - 1
init_serve/task.go

@@ -1,6 +1,6 @@
 package init_serve
 
-import "hongze/hz_crm_eta/services"
+import "eta/eta_bridge/services"
 
 func InitTask() {
 	// 角色-用户-部门-分组同步

+ 1 - 1
main.go

@@ -1,7 +1,7 @@
 package main
 
 import (
-	"hongze/hz_crm_eta/core"
+	"eta/eta_bridge/core"
 )
 
 // @BasePath /

+ 159 - 0
middleware/auth.go

@@ -0,0 +1,159 @@
+package middleware
+
+import (
+	"crypto/md5"
+	"errors"
+	"eta/eta_bridge/controller/resp"
+	"eta/eta_bridge/global"
+	"eta/eta_bridge/models/crm"
+	"eta/eta_bridge/utils"
+	"fmt"
+	"github.com/gin-gonic/gin"
+	"math"
+	"sort"
+	"strconv"
+	"strings"
+	"time"
+)
+
+func BaseAuthCheck() gin.HandlerFunc {
+	return func(c *gin.Context) {
+		method := c.Request.Method
+		if method != "POST" {
+			resp.TokenError(nil, "请求异常", "不支持非POST请求", c)
+			c.Abort()
+			return
+		}
+		pass, e := signCheck(c)
+		if e != nil {
+			resp.TokenError(nil, "签名错误", "签名校验失败, Err: "+e.Error(), c)
+			c.Abort()
+			return
+		}
+		if !pass {
+			resp.TokenError(nil, "签名错误", "签名错误", c)
+			c.Abort()
+			return
+		}
+	}
+}
+
+func signCheck(c *gin.Context) (ok bool, err error) {
+	params := make(map[string][]string)
+	err = c.ShouldBind(params)
+	if err != nil {
+		return
+	}
+	signData := convertParam(params)
+
+	// 签名校验
+	ip := c.ClientIP()
+	err = checkSignData(signData, ip)
+	if err != nil {
+		return
+	}
+	ok = true
+	return
+}
+
+// convertParam 将请求传入的数据格式转换成签名需要的格式
+func convertParam(params map[string][]string) (signData map[string]string) {
+	signData = make(map[string]string)
+	for key := range params {
+		signData[key] = params[key][0]
+	}
+	return signData
+}
+
+// checkSignData 请求参数签名校验
+func checkSignData(postData map[string]string, ip string) (err error) {
+	isSandbox := postData["is_sandbox"]
+	// 如果是测试环境, 且是沙箱环境的话, 那么绕过测试
+	if global.CONFIG.Serve.RunMode == "debug" && isSandbox != "" {
+		return
+	}
+
+	appid := postData["appid"]
+	if appid == "" {
+		err = errors.New("参数异常,缺少appid")
+		return
+	}
+
+	openApiOB := new(crm.OpenApiUser)
+	apiUser, e := openApiOB.GetItemByAppid(appid)
+	if e != nil {
+		if e != utils.ErrNoRow {
+			err = errors.New("系统异常,请联系管理员")
+			return
+		}
+		err = errors.New("appid异常,请联系管理员")
+		return
+	}
+	if apiUser == nil {
+		err = errors.New("系统异常,请联系管理员")
+		return
+	}
+
+	// 如果有ip限制, 则校验IP
+	if apiUser.Ip != "" {
+		if !strings.Contains(apiUser.Ip, ip) {
+			err = errors.New(fmt.Sprintf("无权限访问该接口,ip:%v,请联系管理员", ip))
+			return
+		}
+	}
+
+	// 接口提交的签名字符串
+	ownSign := postData["sign"]
+	if ownSign == "" {
+		err = errors.New("参数异常,缺少签名字符串")
+		return
+	}
+	if postData["nonce_str"] == "" {
+		err = errors.New("参数异常,缺少随机字符串")
+		return
+	}
+	if postData["timestamp"] == "" {
+		err = errors.New("参数异常,缺少时间戳")
+		return
+	} else {
+		timeUnix := time.Now().Unix() // 当前格林威治时间,int64类型
+		// 将接口传入的时间做转换
+		timestamp, timeErr := strconv.ParseInt(postData["timestamp"], 10, 64)
+		if timeErr != nil {
+			err = errors.New("参数异常,时间戳格式异常")
+			return
+		}
+		if math.Abs(float64(timeUnix-timestamp)) > 300 {
+			err = errors.New("当前时间异常,请调整设备时间与北京时间一致")
+			return
+		}
+	}
+
+	// 先取出除sign外的所有的提交的参数key
+	var keys []string
+	for k := range postData {
+		if k != "sign" {
+			keys = append(keys, k)
+		}
+	}
+
+	//1,根据参数名称的ASCII码表的顺序排序
+	sort.Strings(keys)
+
+	//2 根据排序后的参数名称,取出对应的值,并拼接字符串
+	var signStr string
+	for _, v := range keys {
+		signStr += v + "=" + postData[v] + "&"
+	}
+	//3,全转小写(md5(拼装的字符串后+分配给你的app_secret))
+	//sign := strings.ToLower(fmt.Sprintf("%x", md5.Sum([]byte(strings.Trim(signStr, "&")+key))))
+
+	//md5.Sum([]byte(signStr+"key="+key))  这是md5加密出来后的每个字符的AscII码,需要再转换成对应的字符
+	//3,全转大写(md5(拼装的字符串后+分配给你的app_secret))
+	sign := strings.ToUpper(fmt.Sprintf("%x", md5.Sum([]byte(signStr+"secret="+apiUser.Secret))))
+	if sign != ownSign {
+		global.LOG.Info(fmt.Sprintf("签名校验异常,签名字符串:%v;服务端签名值:%v", signStr, sign))
+		return errors.New("签名校验异常,请核实签名")
+	}
+	return nil
+}

+ 4 - 4
middleware/recover.go

@@ -1,12 +1,12 @@
 package middleware
 
 import (
+	"eta/eta_bridge/controller/resp"
+	"eta/eta_bridge/global"
+	"eta/eta_bridge/services/alarm_msg"
+	"eta/eta_bridge/utils"
 	"fmt"
 	"github.com/gin-gonic/gin"
-	"hongze/hz_crm_eta/controller/resp"
-	"hongze/hz_crm_eta/global"
-	"hongze/hz_crm_eta/services/alarm_msg"
-	"hongze/hz_crm_eta/utils"
 	"net/http"
 	"runtime"
 	"time"

+ 2 - 2
middleware/token.go

@@ -1,9 +1,9 @@
 package middleware
 
 import (
+	"eta/eta_bridge/controller/resp"
+	"eta/eta_bridge/utils"
 	"github.com/gin-gonic/gin"
-	"hongze/hz_crm_eta/controller/resp"
-	"hongze/hz_crm_eta/utils"
 )
 
 func Token() gin.HandlerFunc {

+ 1 - 1
models/crm/admin.go

@@ -1,7 +1,7 @@
 package crm
 
 import (
-	"hongze/hz_crm_eta/global"
+	"eta/eta_bridge/global"
 	"time"
 )
 

+ 1 - 1
models/crm/eta_trial.go

@@ -1,7 +1,7 @@
 package crm
 
 import (
-	"hongze/hz_crm_eta/global"
+	"eta/eta_bridge/global"
 	"time"
 )
 

+ 1 - 1
models/crm/eta_trial_active_record.go

@@ -1,7 +1,7 @@
 package crm
 
 import (
-	"hongze/hz_crm_eta/global"
+	"eta/eta_bridge/global"
 	"time"
 )
 

+ 1 - 1
models/crm/eta_trial_login_duration_record.go

@@ -1,7 +1,7 @@
 package crm
 
 import (
-	"hongze/hz_crm_eta/global"
+	"eta/eta_bridge/global"
 	"time"
 )
 

+ 1 - 1
models/crm/eta_trial_questionnaire.go

@@ -1,7 +1,7 @@
 package crm
 
 import (
-	"hongze/hz_crm_eta/global"
+	"eta/eta_bridge/global"
 	"time"
 )
 

+ 1 - 1
models/crm/eta_trial_questionnaire_record.go

@@ -1,7 +1,7 @@
 package crm
 
 import (
-	"hongze/hz_crm_eta/global"
+	"eta/eta_bridge/global"
 	"time"
 )
 

+ 25 - 0
models/crm/open_api_user.go

@@ -0,0 +1,25 @@
+package crm
+
+import (
+	"eta/eta_bridge/global"
+	"time"
+)
+
+type OpenApiUser struct {
+	Appid      string    `gorm:"primaryKey;column:appid;type:varchar(32);not null;default:''" json:"appid"`      // 开放平台appid
+	Secret     string    `gorm:"column:secret;type:varchar(64);default:''" json:"secret"`                        // 开放平台秘钥
+	Ip         string    `gorm:"column:ip;type:text" json:"ip"`                                                  // 限制请求来源ip,多个ip用英文,隔开
+	Remark     string    `gorm:"column:remark;type:varchar(255);default:''" json:"remark"`                       // 备注,记录来源等信息
+	CreateTime time.Time `gorm:"column:create_time;type:timestamp;default:CURRENT_TIMESTAMP" json:"create_time"` // 创建时间
+	ModifyTime time.Time `gorm:"column:modify_time;type:datetime" json:"modify_time"`                            // 最近一次更新时间
+}
+
+func (m *OpenApiUser) TableName() string {
+	return "open_api_user"
+}
+
+// GetItemByAppid AppID获取信息
+func (m *OpenApiUser) GetItemByAppid(appid string) (item *OpenApiUser, err error) {
+	err = global.MYSQL["hz_crm"].Model(m).Where("appid = ?", appid).First(&item).Error
+	return
+}

+ 1 - 1
models/crm/sys_department.go

@@ -1,7 +1,7 @@
 package crm
 
 import (
-	"hongze/hz_crm_eta/global"
+	"eta/eta_bridge/global"
 	"time"
 )
 

+ 1 - 1
models/crm/sys_group.go

@@ -1,7 +1,7 @@
 package crm
 
 import (
-	"hongze/hz_crm_eta/global"
+	"eta/eta_bridge/global"
 	"time"
 )
 

+ 1 - 1
models/crm/sys_role.go

@@ -1,7 +1,7 @@
 package crm
 
 import (
-	"hongze/hz_crm_eta/global"
+	"eta/eta_bridge/global"
 	"time"
 )
 

+ 1 - 1
models/crm/sys_role_admin.go

@@ -1,7 +1,7 @@
 package crm
 
 import (
-	"hongze/hz_crm_eta/global"
+	"eta/eta_bridge/global"
 	"time"
 )
 

+ 1 - 1
models/eta/admin.go

@@ -1,7 +1,7 @@
 package eta
 
 import (
-	"hongze/hz_crm_eta/global"
+	"eta/eta_bridge/global"
 	"time"
 )
 

+ 1 - 1
models/eta/crm_config.go

@@ -1,7 +1,7 @@
 package eta
 
 import (
-	"hongze/hz_crm_eta/global"
+	"eta/eta_bridge/global"
 	"time"
 )
 

+ 1 - 1
models/eta/sys_department.go

@@ -1,7 +1,7 @@
 package eta
 
 import (
-	"hongze/hz_crm_eta/global"
+	"eta/eta_bridge/global"
 	"time"
 )
 

+ 1 - 1
models/eta/sys_group.go

@@ -1,7 +1,7 @@
 package eta
 
 import (
-	"hongze/hz_crm_eta/global"
+	"eta/eta_bridge/global"
 	"time"
 )
 

+ 1 - 1
models/eta/sys_role.go

@@ -1,7 +1,7 @@
 package eta
 
 import (
-	"hongze/hz_crm_eta/global"
+	"eta/eta_bridge/global"
 	"time"
 )
 

+ 1 - 1
models/eta/sys_session.go

@@ -1,7 +1,7 @@
 package eta
 
 import (
-	"hongze/hz_crm_eta/global"
+	"eta/eta_bridge/global"
 	"time"
 )
 

+ 1 - 1
models/eta/sys_user_login_record.go

@@ -1,7 +1,7 @@
 package eta
 
 import (
-	"hongze/hz_crm_eta/global"
+	"eta/eta_bridge/global"
 	"time"
 )
 

+ 1 - 1
models/rddp/sys_session.go

@@ -1,7 +1,7 @@
 package rddp
 
 import (
-	"hongze/hz_crm_eta/global"
+	"eta/eta_bridge/global"
 	"time"
 )
 

+ 1 - 1
models/rddp/sys_user_login_record.go

@@ -1,7 +1,7 @@
 package rddp
 
 import (
-	"hongze/hz_crm_eta/global"
+	"eta/eta_bridge/global"
 	"time"
 )
 

+ 1 - 1
models/request/eta_trial/questionnaire.go

@@ -1,6 +1,6 @@
 package eta_trial
 
-import "hongze/hz_crm_eta/models/crm"
+import "eta/eta_bridge/models/crm"
 
 type QuestionnaireCommitReq struct {
 	List []crm.EtaTrialQuestionnaireRecord

+ 2 - 2
routers/auth.go

@@ -1,9 +1,9 @@
 package routers
 
 import (
+	"eta/eta_bridge/controller"
+	"eta/eta_bridge/middleware"
 	"github.com/gin-gonic/gin"
-	"hongze/hz_crm_eta/controller"
-	"hongze/hz_crm_eta/middleware"
 )
 
 func InitAuth(r *gin.RouterGroup) {

+ 1 - 1
routers/eta_trial.go

@@ -1,8 +1,8 @@
 package routers
 
 import (
+	"eta/eta_bridge/controller/eta_trial"
 	"github.com/gin-gonic/gin"
-	"hongze/hz_crm_eta/controller/eta_trial"
 )
 
 // InitEtaTrial ETA试用

+ 2 - 2
services/alarm_msg/alarm_msg.go

@@ -2,9 +2,9 @@ package alarm_msg
 
 import (
 	"encoding/json"
+	"eta/eta_bridge/global"
+	"eta/eta_bridge/utils"
 	"github.com/rdlucklib/rdluck_tools/http"
-	"hongze/hz_crm_eta/global"
-	"hongze/hz_crm_eta/utils"
 )
 
 var (

+ 2 - 2
services/cache_queue.go

@@ -2,9 +2,9 @@ package services
 
 import (
 	"encoding/json"
+	"eta/eta_bridge/global"
+	"eta/eta_bridge/utils"
 	"fmt"
-	"hongze/hz_crm_eta/global"
-	"hongze/hz_crm_eta/utils"
 )
 
 // ListenSyncRole 同步角色

+ 1 - 1
services/company.go

@@ -1,6 +1,6 @@
 package services
 
-import "hongze/hz_crm_eta/utils"
+import "eta/eta_bridge/utils"
 
 // GetProductId 根据角色类型获取对应的产品ID
 func GetProductId(roleTypeCode string) (productId int) {

+ 4 - 4
services/sys_user_sync.go

@@ -2,11 +2,11 @@ package services
 
 import (
 	"encoding/json"
+	"eta/eta_bridge/models/crm"
+	"eta/eta_bridge/models/eta"
+	"eta/eta_bridge/services/alarm_msg"
+	"eta/eta_bridge/utils"
 	"fmt"
-	"hongze/hz_crm_eta/models/crm"
-	"hongze/hz_crm_eta/models/eta"
-	"hongze/hz_crm_eta/services/alarm_msg"
-	"hongze/hz_crm_eta/utils"
 	"time"
 )
 

+ 3 - 3
task/task.go

@@ -1,10 +1,10 @@
 package task
 
 import (
+	"eta/eta_bridge/global"
+	"eta/eta_bridge/services/alarm_msg"
+	"eta/eta_bridge/utils"
 	"fmt"
-	"hongze/hz_crm_eta/global"
-	"hongze/hz_crm_eta/services/alarm_msg"
-	"hongze/hz_crm_eta/utils"
 	"os"
 	"runtime"
 	"sync"

+ 6 - 0
utils/constants.go

@@ -89,3 +89,9 @@ const (
 )
 
 const CrmEtaAuthorization = "NIi1RbEmH0C2rksXtPGDPBBgRgTZY87Q"
+
+// 自用商户号
+const (
+	BusinessCodeSandbox = "E2023080700" // ETA体验版
+	BusinessCodeRelease = "E2023080900" // 弘则ETA
+)