|
@@ -2,6 +2,7 @@ package filter
|
|
|
|
|
|
import (
|
|
|
util "app.yhyue.com/moapp/jybase/common"
|
|
|
+ "app.yhyue.com/moapp/jybase/encrypt"
|
|
|
"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
|
|
|
"app.yhyue.com/moapp/jypkg/public"
|
|
|
"crypto/rand"
|
|
@@ -12,9 +13,11 @@ import (
|
|
|
"encoding/pem"
|
|
|
"errors"
|
|
|
"fmt"
|
|
|
+ "github.com/bwmarrin/snowflake"
|
|
|
"io/ioutil"
|
|
|
"log"
|
|
|
"net/http"
|
|
|
+ "strings"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
@@ -26,6 +29,10 @@ type AnonymousAuth struct {
|
|
|
SetSession map[string]interface{}
|
|
|
}
|
|
|
|
|
|
+var (
|
|
|
+ node, _ = snowflake.NewNode(1)
|
|
|
+)
|
|
|
+
|
|
|
func initPrivatePublicKey() {
|
|
|
// 读取私钥文件
|
|
|
privateKeyBytes, err := ioutil.ReadFile("rsa_private_key.pem")
|
|
@@ -87,33 +94,22 @@ func initPrivatePublicKey() {
|
|
|
}
|
|
|
|
|
|
func (sk *AnonymousAuth) Do() {
|
|
|
- anonymousFid := sk.GetSession["anonymousFid"]
|
|
|
- if anonymousFid != nil && anonymousFid != "" {
|
|
|
- return
|
|
|
- }
|
|
|
- fid, err := sk.R.Cookie("fid")
|
|
|
- if err != nil {
|
|
|
- log.Println("匿名用户获取fid失败", err.Error())
|
|
|
- return
|
|
|
- }
|
|
|
- eid, err := sk.R.Cookie("eid")
|
|
|
- if err != nil {
|
|
|
- log.Println("匿名用户获取eid失败", err.Error())
|
|
|
+ if sk.GetSession["mgoUserId"] != nil && sk.GetSession["mgoUserId"] != "" {
|
|
|
return
|
|
|
}
|
|
|
- if fid.Value != "" && eid.Value != "" {
|
|
|
- eData, err1 := Decryption(eid.Value)
|
|
|
- if err1 != nil {
|
|
|
- log.Printf("匿名用户eid:%s,fid:%s 解密失败err:%s", eid.Value, fid.Value, err1.Error())
|
|
|
- return
|
|
|
- }
|
|
|
- if fid.Value != eData {
|
|
|
- log.Printf("匿名用户身份验证不通过,eid:%s,fid:%s,eData:%s", eid.Value, fid.Value, eData)
|
|
|
- return
|
|
|
- }
|
|
|
- sk.Session.Set("anonymousFid", fid.Value)
|
|
|
- //未登录用户增加匿名身份信息
|
|
|
- if sk.GetSession["mgoUserId"] == nil || sk.GetSession["mgoUserId"] == "" {
|
|
|
+ jyTrustedId, _ := sk.R.Cookie("JYTrustedId")
|
|
|
+ if jyTrustedId == nil || jyTrustedId.Value == "" { //不存在信用标识
|
|
|
+ jyGuestUID, _ := sk.R.Cookie("JYGuestUID")
|
|
|
+ if jyGuestUID == nil || jyGuestUID.Value == "" { //不存在后端id 生成后端id 并创建匿名身份信息
|
|
|
+ guestUID := node.Generate()
|
|
|
+ cookie := &http.Cookie{
|
|
|
+ Name: "JYGuestUID",
|
|
|
+ Value: util.InterfaceToStr(guestUID),
|
|
|
+ Path: "/",
|
|
|
+ HttpOnly: true,
|
|
|
+ }
|
|
|
+ http.SetCookie(sk.W, cookie)
|
|
|
+ //未登录用户增加匿名身份信息
|
|
|
agent := sk.R.Header.Get("user-agent")
|
|
|
md, _ := json.Marshal(sk.R.Form)
|
|
|
str := string(md)
|
|
@@ -122,17 +118,55 @@ func (sk *AnonymousAuth) Do() {
|
|
|
"client": agent,
|
|
|
"os": util.GetOS(agent),
|
|
|
"browse": util.GetBrowse(agent),
|
|
|
- "fid": fid.Value,
|
|
|
"url": sk.R.RequestURI,
|
|
|
+ "guestUID": util.InterfaceToStr(guestUID),
|
|
|
"mdescribe": str,
|
|
|
"refer": sk.R.Referer(),
|
|
|
"method": sk.R.Method,
|
|
|
"creation_time": time.Now().Unix(),
|
|
|
}
|
|
|
public.BaseMysql.Insert("anonymous_identity", data)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ fid, err := sk.R.Cookie("fid")
|
|
|
+ if err != nil {
|
|
|
+ //log.Println("匿名用户获取fid失败", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ eid, err := sk.R.Cookie("eid")
|
|
|
+ if err != nil {
|
|
|
+ //log.Println("匿名用户获取eid失败", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if fid.Value != "" && eid.Value != "" {
|
|
|
+ eData, err1 := Decryption(eid.Value)
|
|
|
+ if err1 != nil {
|
|
|
+ //log.Printf("匿名用户eid:%s,fid:%s 解密失败err:%s", eid.Value, fid.Value, err1.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if fid.Value != eData {
|
|
|
+ //log.Printf("匿名用户身份验证不通过,eid:%s,fid:%s,eData:%s", eid.Value, fid.Value, eData)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ trustedId := encrypt.SE.EncodeString(fid.Value + "***" + jyGuestUID.Value)
|
|
|
+ cookie := &http.Cookie{
|
|
|
+ Name: "JYTrustedId",
|
|
|
+ Value: trustedId,
|
|
|
+ Path: "/",
|
|
|
+ HttpOnly: true,
|
|
|
+ }
|
|
|
+ http.SetCookie(sk.W, cookie)
|
|
|
+ public.BaseMysql.Update("anonymous_identity", map[string]interface{}{"guestUID": jyGuestUID.Value},
|
|
|
+ map[string]interface{}{"fid": fid.Value, "trustedId": trustedId})
|
|
|
+ } else {
|
|
|
+ log.Println("无身份验证信息")
|
|
|
}
|
|
|
} else {
|
|
|
- log.Println("无身份验证信息")
|
|
|
+ trustedId := encrypt.SE.DecodeString(jyTrustedId.Value)
|
|
|
+ if !strings.Contains(trustedId, "***") {
|
|
|
+ log.Println("无效信用id")
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|