Skip to content

Commit 77d19fd

Browse files
authored
Merge pull request #58 from Triple-Z/DeleteRecodeFromRedis
DeleteRecodeFromRedis
2 parents 95657c5 + 7ed7531 commit 77d19fd

File tree

8 files changed

+63
-12
lines changed

8 files changed

+63
-12
lines changed

common/const.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ const FILE_MAX_EXIST_TIME = 24 //文件最大存在时长
3333
// 文件默认可下载次数
3434
const FILE_DEFAULT_DOWNCOUNT = 10
3535

36+
// 文件签名下载签名过期时长 单位:秒
37+
const FILE_DOWNLOAD_SIGNURL_TIME = 60
38+
3639
// 压缩包/归档类型
3740
const (
3841
ARCHIVE_NULL = iota // 0,非压缩包

common/tool.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
package common
22

33
import (
4+
"fmt"
5+
"log"
46
"math/rand"
57
"time"
8+
9+
"github.com/go-redis/redis"
610
)
711

812
// 生成随机字符串
@@ -31,3 +35,24 @@ func RandStringBytesMaskImprSrc(n int) string {
3135

3236
return string(b)
3337
}
38+
39+
func DeleteRedisRecodeFromRecode(recode string) {
40+
tokenRedisClient := GetUserTokenRedisClient()
41+
reCodeRedisClient := GetReCodeRedisClient()
42+
if !KeyISExistInRedis(recode, reCodeRedisClient) {
43+
log.Println(fmt.Errorf("key %s is not in reCodeRedis", recode))
44+
}
45+
userToken := reCodeRedisClient.Get(recode).Val()
46+
if !KeyISExistInRedis(userToken, tokenRedisClient) {
47+
log.Println(fmt.Errorf("recode %s is in reCodeRedis,But key %s is not in userTokenRedis", recode, userToken))
48+
}
49+
reCodeRedisClient.Del(recode)
50+
tokenRedisClient.Del(userToken)
51+
}
52+
53+
func KeyISExistInRedis(str string, client *redis.Client) bool {
54+
if client.Exists(str).Val() == 0 {
55+
return false
56+
}
57+
return true
58+
}

item/delete.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ func DeleteManual(c *gin.Context) {
4242
db.Delete(item)
4343
}
4444
DeleteItems(itemList)
45+
//清理Redis
46+
common.DeleteRedisRecodeFromRecode(itemList[0].ReCode)
4547
c.JSON(http.StatusOK, gin.H{
4648
"message": "ok",
4749
})

item/download.go

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99

1010
"a2os/safeu-backend/common"
1111

12+
"github.com/aliyun/aliyun-oss-go-sdk/oss"
1213
"github.com/gin-gonic/gin"
1314
"github.com/gin-gonic/gin/json"
1415
"github.com/satori/go.uuid"
@@ -119,7 +120,7 @@ func DownloadItems(c *gin.Context) {
119120

120121
// 删除数据库记录
121122
db.Delete(&singleItem)
122-
123+
common.DeleteRedisRecodeFromRecode(singleItem.ReCode)
123124
// 返回 410 Gone
124125
c.JSON(http.StatusGone, gin.H{
125126
"error": "Over the expired time.",
@@ -139,7 +140,7 @@ func DownloadItems(c *gin.Context) {
139140

140141
// 删除数据库记录
141142
db.Delete(&singleItem)
142-
143+
common.DeleteRedisRecodeFromRecode(singleItem.ReCode)
143144
c.JSON(http.StatusGone, gin.H{
144145
"error": "Out of downloadable count.",
145146
})
@@ -306,3 +307,19 @@ func GetZipEndpoint() (string, error) {
306307

307308
return zipEndpoint, nil
308309
}
310+
311+
// 获取签名URL
312+
func GetSignURL(itemBucket string, itemPath string, client *oss.Client) (string, error) {
313+
314+
bucket, err := client.Bucket(itemBucket)
315+
if err != nil {
316+
log.Println(fmt.Sprintf("Func: GetSignURL Get Client %v Bucket %s Failed %s", client, itemBucket, err.Error()))
317+
return "", err
318+
}
319+
signedURL, err := bucket.SignURL(itemPath, oss.HTTPGet, common.FILE_DOWNLOAD_SIGNURL_TIME)
320+
if err != nil {
321+
log.Println(fmt.Sprintf("Func: GetSignURL Get Bucket %s Object %s Failed %s", itemBucket, itemPath, err.Error()))
322+
return "", err
323+
}
324+
return signedURL, nil
325+
}

item/downloadCount.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ func DownloadCount(c *gin.Context) {
4444
} else {
4545
// 删除数据库记录
4646
db.Delete(&singleItem)
47+
common.DeleteRedisRecodeFromRecode(singleItem.ReCode)
4748
c.String(http.StatusOK, "DELETED")
4849
return
4950
}
@@ -68,6 +69,7 @@ func DownloadCount(c *gin.Context) {
6869
} else {
6970
// 删除数据库记录
7071
db.Delete(&singleItem)
72+
common.DeleteRedisRecodeFromRecode(singleItem.ReCode)
7173
c.String(http.StatusOK, "DELETED")
7274
return
7375
}
@@ -128,6 +130,7 @@ func DownloadCount(c *gin.Context) {
128130
} else {
129131
// 删除数据库记录
130132
db.Delete(&item)
133+
common.DeleteRedisRecodeFromRecode(item.ReCode)
131134
log.Println(c.ClientIP(), " Deleted item id ", item.ID, " by retrieve code \"", retrieveCode, "\"")
132135
isDelete = true
133136
}

item/update.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -153,13 +153,13 @@ func ChangeRecode(c *gin.Context) {
153153
//2 合法性检测
154154
// 2.1 在Redis中判断提取码重复
155155
reCodeRedisClient := common.GetReCodeRedisClient()
156-
if KeyISExistInRedis(changeRecodeBody.NewReCode, reCodeRedisClient) {
157-
log.Println("Find reCode Repeat In Redis", changeRecodeBody.NewReCode)
158-
c.JSON(http.StatusBadRequest, gin.H{
159-
"message": "reCode Repeat",
160-
})
161-
return
162-
}
156+
//if KeyISExistInRedis(changeRecodeBody.NewReCode, reCodeRedisClient) {
157+
// // log.Println("Find reCode Repeat In Redis", changeRecodeBody.NewReCode)
158+
// // c.JSON(http.StatusBadRequest, gin.H{
159+
// // "message": "reCode Repeat",
160+
// // })
161+
// // return
162+
// //}
163163
// 2.2 在DB中判断判断提取码重复
164164
db := common.GetDB()
165165
if CheckReCodeRepeatInDB(changeRecodeBody.NewReCode, db) {

item/upload.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -481,7 +481,8 @@ func FinishUpload(c *gin.Context) {
481481
owner := common.RandStringBytesMaskImprSrc(common.UserTokenLength)
482482
// 将提取码推入Redis
483483
reCodeRedisClient := common.GetReCodeRedisClient()
484-
reCodeRedisClient.Set(reCode, owner, 0)
484+
redisExpireTime, _ := time.ParseDuration(common.FILE_DEFAULT_EXIST_TIME)
485+
reCodeRedisClient.Set(reCode, owner, redisExpireTime)
485486
// 将用户识别码推入Redis
486487
tokenRedisClient := common.GetUserTokenRedisClient()
487488
tokenRedisClient.SAdd(owner, files)

item/validation.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ func CheckDownCountAndExpiredTime(db *gorm.DB, retrieveCode string) ([]Item, err
179179

180180
// 删除数据库记录
181181
db.Delete(&item)
182-
182+
common.DeleteRedisRecodeFromRecode(item.ReCode)
183183
itemList = append(itemList[:j], itemList[j+1:]...)
184184
deleted++
185185
continue
@@ -197,7 +197,7 @@ func CheckDownCountAndExpiredTime(db *gorm.DB, retrieveCode string) ([]Item, err
197197

198198
// 删除数据库记录
199199
db.Delete(&item)
200-
200+
common.DeleteRedisRecodeFromRecode(item.ReCode)
201201
itemList = append(itemList[:j], itemList[j+1:]...)
202202
deleted++
203203
continue

0 commit comments

Comments
 (0)