|
|
package Handler
|
|
|
|
|
|
import (
|
|
|
"bufio"
|
|
|
"dsSso/Const/DefaultConst"
|
|
|
"dsSso/Handler/CheckHandler"
|
|
|
"dsSso/Utils/CommonUtil"
|
|
|
"dsSso/Utils/ConfigUtil"
|
|
|
"dsSso/Utils/SsoUtil"
|
|
|
"fmt"
|
|
|
"github.com/gin-gonic/gin"
|
|
|
"io"
|
|
|
"net/http"
|
|
|
"os"
|
|
|
"strings"
|
|
|
)
|
|
|
|
|
|
//白名单数组
|
|
|
var WhiteArray []string
|
|
|
|
|
|
//特权放行的IP段
|
|
|
var passIpRange = []string{"10.10.24.", "127.0.0."}
|
|
|
|
|
|
// 初始化白名单
|
|
|
func init() {
|
|
|
f, err := os.Open("./Config/White.txt")
|
|
|
if err != nil {
|
|
|
fmt.Println("没有找到白名单文件!")
|
|
|
}
|
|
|
buf := bufio.NewReader(f)
|
|
|
|
|
|
var shouldBreak = false
|
|
|
for {
|
|
|
line, err := buf.ReadString('\n')
|
|
|
if err != nil || io.EOF == err {
|
|
|
shouldBreak = true
|
|
|
}
|
|
|
line = strings.TrimSpace(line)
|
|
|
if strings.Index(line, "#") < 0 && len(line) > 0 {
|
|
|
WhiteArray = append(WhiteArray, line)
|
|
|
}
|
|
|
if shouldBreak {
|
|
|
break
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:将权限校验的东西放在这里进行
|
|
|
作者:黄海
|
|
|
时间:2020-01-22
|
|
|
*/
|
|
|
func AuthorizeHandler() gin.HandlerFunc {
|
|
|
return func(c *gin.Context) {
|
|
|
var resultStruct CheckHandler.ResultStruct
|
|
|
//检查参数的合法性
|
|
|
result, resultStruct := CheckHandler.IsLegal(c)
|
|
|
if !result {
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
|
"success": false,
|
|
|
"InterfaceName": resultStruct.InterfaceName,
|
|
|
"HttpType": resultStruct.HttpType,
|
|
|
"Parameter": resultStruct.Parameter,
|
|
|
"Message": resultStruct.Message,
|
|
|
})
|
|
|
c.Abort()
|
|
|
}
|
|
|
//是否需要放行
|
|
|
var isWhiteRequestUrl = false
|
|
|
//定义一个白名单,如果在白名单中,直接放行
|
|
|
for i := 0; i < len(WhiteArray); i++ {
|
|
|
if strings.Index(c.Request.RequestURI, WhiteArray[i]) >= 0 {
|
|
|
//放行~
|
|
|
isWhiteRequestUrl = true
|
|
|
break
|
|
|
}
|
|
|
}
|
|
|
if isWhiteRequestUrl {
|
|
|
c.Next()
|
|
|
} else {
|
|
|
//如果是内部地址,可以随意~
|
|
|
var clientIp = CommonUtil.RemoteIp(c.Request)
|
|
|
var arrIp = strings.Split(clientIp, ".")
|
|
|
var prefixIp = arrIp[0] + "." + arrIp[1] + "." + arrIp[2] + "."
|
|
|
if CommonUtil.InArray(prefixIp, passIpRange) {
|
|
|
c.Next()
|
|
|
return
|
|
|
}
|
|
|
//从cookie中读取回来identity_id和person_id
|
|
|
var identityId = DefaultConst.IdentityId
|
|
|
var personId = DefaultConst.PersonId
|
|
|
cookie, e := c.Request.Cookie(ConfigUtil.AccessToken)
|
|
|
//是不是可以通行
|
|
|
var canPass = true
|
|
|
if e == nil {
|
|
|
identityId, personId, _ = SsoUtil.AnalyzeSessionId(cookie.Value)
|
|
|
if identityId != "0" || personId != "0" {
|
|
|
//不是统一认证管理员,拒绝
|
|
|
canPass = false
|
|
|
}
|
|
|
} else {
|
|
|
//没有登录,拒绝
|
|
|
canPass = false
|
|
|
}
|
|
|
if !canPass {
|
|
|
c.JSON(301, gin.H{
|
|
|
"success": false,
|
|
|
"Message": "您不是合法的统一认证管理员,请求被禁止!",
|
|
|
})
|
|
|
c.Abort()
|
|
|
}
|
|
|
//检查通过
|
|
|
c.Next()
|
|
|
}
|
|
|
}
|
|
|
}
|