Apply .gitignore rules
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
package user
|
||||
|
||||
import (
|
||||
"common/cache"
|
||||
"common/connection"
|
||||
"goutil/logUtilPlus"
|
||||
"sync"
|
||||
)
|
||||
|
||||
// 用户缓存对象
|
||||
var userMap = make(map[int64]*User)
|
||||
var rwmu sync.RWMutex
|
||||
|
||||
// GetUser 根据用户id获取用户信息
|
||||
func GetUserByID(UserID int64) (*User, error) {
|
||||
|
||||
//判断缓存是否存在
|
||||
var user *User
|
||||
|
||||
func() *User {
|
||||
rwmu.RLock()
|
||||
defer rwmu.RUnlock()
|
||||
ok := true
|
||||
if user, ok = userMap[UserID]; ok {
|
||||
return user
|
||||
}
|
||||
return nil
|
||||
}()
|
||||
|
||||
if user != nil {
|
||||
return user, nil
|
||||
}
|
||||
|
||||
result := connection.GetUserDB().First(&user, UserID)
|
||||
if result.Error != nil {
|
||||
return nil, result.Error
|
||||
}
|
||||
|
||||
//添加缓存
|
||||
func() {
|
||||
rwmu.Lock()
|
||||
defer rwmu.Unlock()
|
||||
user.Cache = cache.NewCache()
|
||||
userMap[user.ID] = user
|
||||
}()
|
||||
|
||||
return user, nil
|
||||
}
|
||||
|
||||
// 添加用户缓存
|
||||
func AddUserCache(user *User) {
|
||||
rwmu.Lock()
|
||||
defer rwmu.Unlock()
|
||||
user.Cache = cache.NewCache()
|
||||
userMap[user.ID] = user
|
||||
}
|
||||
|
||||
// AddUser 添加用户
|
||||
// AddUser 添加新的用户到数据库中。
|
||||
// 参数 User: 包含用户信息的对象。
|
||||
// 返回值: 插入操作影响的行数和可能发生的错误。
|
||||
func AddUser(User *User) (int64, error) {
|
||||
|
||||
//处理一些验证
|
||||
|
||||
//写入缓存
|
||||
AddUserCache(User)
|
||||
|
||||
// 写入到数据库
|
||||
result := connection.GetUserDB().Create(&User) // 通过数据的指针来创建
|
||||
|
||||
if result.Error != nil {
|
||||
logUtilPlus.ErrorLog("添加用户失败 错误信息:", result.Error.Error())
|
||||
}
|
||||
return User.ID, nil
|
||||
}
|
||||
|
||||
// Login 用户登录
|
||||
func Login(account string, password string) (*User, error) {
|
||||
|
||||
//这里优先验证缓存数据
|
||||
|
||||
var User User
|
||||
result := connection.GetUserDB().Where("account = ? AND password = ?", account, password).First(&User)
|
||||
if result.Error != nil {
|
||||
return nil, result.Error
|
||||
}
|
||||
return &User, nil
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package securityUtil
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestVerifyRsaWithSha1(t *testing.T) {
|
||||
publicKey := "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCmreYIkPwVovKR8rLHWlFVw7YDfm9uQOJKL89Smt6ypXGVdrAKKl0wNYc3/jecAoPi2ylChfa2iRu5gunJyNmpWZzlCNRIau55fxGW0XEu553IiprOZcaw5OuYGlf60ga8QT6qToP0/dpiL/ZbmNUO9kUhosIjEu22uFgR+5cYyQIDAQAB"
|
||||
source := "notifyId=GC201710201145455410100040000&partnerOrder=601_2055_1508471145_42087&productName=元宝&productDesc=1000元宝&price=5000&count=1&attach=601_2055_1508471145_42087"
|
||||
sign := "JdzsJlVOgJ6gXTCJjWAXisyFeS0ztvB5m6WOgx9XqqdfxthLVC0gvxXdoqT1SnzzkaznebtbgvVrIeAFlyEBiVpShH76yZ9KO781wiBdJMY/BUwKkHlnMWjtFZx7pjqj6xBMoZ3HFl9j5loFYuYLMg+MDUCpvXV+Kg/wAqkkOnY="
|
||||
|
||||
err := VerifyRsaWithSha1(publicKey, source, sign)
|
||||
if err != nil {
|
||||
t.Fatalf("VerifyRsaWithSha1验证错误:%v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestVerifyRsaWithSha256(t *testing.T) {
|
||||
publicKey := "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJm8eeTR8mPWuPdCFo5boenHe+Yj8zC82ohIuTeMu+4QJuRK/MI+wtJlYheKtE0s4lXzL0rw/KQzMB+KO9F/WM0CAwEAAQ=="
|
||||
source := "accessMode=0&amount=6.00&bankId=HuaWei¬ifyTime=1500370048019&orderId=H20170718172707521578B0C13&orderTime=2017-07-18 17:27:07&payType=0&productName=元宝&requestId=606_2001_1500370020_19213&result=0&spending=0.00&tradeTime=2017-07-18 17:27:07&userName=900086000021763400"
|
||||
sign := "d9PDjSwgItg8eTTAYbP2OHD5t+F8wgrgjMOCXHXI7pe3qCe7sixraHmLrOQfFoAvxi4e2eYxZocN4QRoqD3/zw=="
|
||||
|
||||
err := VerifyRsaWithSha256(publicKey, source, sign)
|
||||
if err != nil {
|
||||
t.Fatalf("VerifyRsaWithSha256验证错误:%v", err)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
package bytesSendUtil
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"goutil/debugUtil"
|
||||
"goutil/logUtil"
|
||||
)
|
||||
|
||||
// 负责发送数据的协程
|
||||
func sendLoop(s sender, closeSignal chan struct{}) {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
logUtil.LogUnknownError(r)
|
||||
}
|
||||
}()
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-s.Done():
|
||||
closeSignal <- struct{}{}
|
||||
return
|
||||
case v := <-s.Data():
|
||||
if err := s.Send(v); err != nil {
|
||||
// 发送失败存入缓存
|
||||
s.Cache() <- v
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 定时重发失败的数据
|
||||
func resendLoop(s sender, folder string, closeSignal chan struct{}) {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
logUtil.LogUnknownError(r)
|
||||
}
|
||||
}()
|
||||
|
||||
// debug模式每秒重试1次
|
||||
var delay time.Duration
|
||||
if debugUtil.IsDebug() {
|
||||
delay = time.Second
|
||||
} else {
|
||||
delay = time.Minute * 5
|
||||
}
|
||||
|
||||
// 定时重发失败数据
|
||||
for {
|
||||
select {
|
||||
case <-s.Done():
|
||||
closeSignal <- struct{}{}
|
||||
return
|
||||
case <-time.After(delay):
|
||||
sendCacheData(s, folder)
|
||||
loadData(s.(EnsureSender), folder)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 从sender获取失败数据重发
|
||||
func sendCacheData(s sender, folder string) {
|
||||
failed := make([]dataItem, 0)
|
||||
length := len(s.Cache())
|
||||
|
||||
defer func() {
|
||||
// 用于记录多次失败后放弃发送的数据
|
||||
giveUpItems := make(chan dataItem, len(failed))
|
||||
|
||||
for _, v := range failed {
|
||||
if v.Count() >= 3 {
|
||||
// 失败次数太多的数据准备存放到磁盘中
|
||||
giveUpItems <- v
|
||||
} else {
|
||||
s.Cache() <- v
|
||||
}
|
||||
}
|
||||
|
||||
giveUpLen := len(giveUpItems)
|
||||
if giveUpLen > 0 {
|
||||
// 将多次失败的数据保存到文件中
|
||||
if folder[len(folder)-1] == '/' {
|
||||
folder = folder[:len(folder)-1]
|
||||
}
|
||||
saveData(giveUpItems, folder+"_giveup")
|
||||
|
||||
if giveUpLen >= 5 {
|
||||
log := fmt.Sprintf("ensureSendUtil: 有%d条数据多次发送失败", giveUpLen)
|
||||
logUtil.NormalLog(log, logUtil.Error)
|
||||
}
|
||||
}
|
||||
|
||||
// 输出信息
|
||||
log := fmt.Sprintf("ensureSendUtil: 重发%d条数据,失败%d条,存盘%d条\n", length, len(failed), giveUpLen)
|
||||
logUtil.NormalLog(log, logUtil.Info)
|
||||
}()
|
||||
|
||||
for {
|
||||
select {
|
||||
case v := <-s.Cache():
|
||||
// 重发数据
|
||||
if e := s.Send(v); e != nil {
|
||||
// 记录失败的数据
|
||||
failed = append(failed, v)
|
||||
}
|
||||
default:
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user