优化
This commit is contained in:
@@ -1,11 +1,10 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"kra/internal/server/httpx"
|
||||
"kra/internal/service"
|
||||
@@ -16,18 +15,11 @@ import (
|
||||
)
|
||||
|
||||
type Export struct {
|
||||
settings *service.SecurityService
|
||||
service *service.ExportService
|
||||
service *service.ExportService
|
||||
}
|
||||
|
||||
func NewExport(settings *service.SecurityService, export *service.ExportService) *Export {
|
||||
return &Export{settings: settings, service: export}
|
||||
}
|
||||
|
||||
type exportToken struct {
|
||||
TemplateID string `json:"templateID"`
|
||||
Params map[string]string `json:"params"`
|
||||
Blank bool `json:"blank"`
|
||||
func NewExport(service *service.ExportService) *Export {
|
||||
return &Export{service: service}
|
||||
}
|
||||
|
||||
func exportParams(values url.Values) map[string]string {
|
||||
@@ -151,9 +143,8 @@ func (h *Export) Issue(blank bool) gin.HandlerFunc {
|
||||
httpx.Fail(c, "模板ID不能为空")
|
||||
return
|
||||
}
|
||||
token := strings.ReplaceAll(uuid.NewString(), "-", "")
|
||||
raw, _ := json.Marshal(exportToken{TemplateID: templateID, Params: exportParams(c.Request.URL.Query()), Blank: blank})
|
||||
if err := h.settings.CacheSet(c.Request.Context(), "export:"+token, string(raw), 30*time.Minute); err != nil {
|
||||
token, err := h.service.IssueToken(c.Request.Context(), templateID, exportParams(c.Request.URL.Query()), blank)
|
||||
if err != nil {
|
||||
httpx.Fail(c, "导出令牌创建失败")
|
||||
return
|
||||
}
|
||||
@@ -196,21 +187,18 @@ func (h *Export) Download(expectBlank bool) gin.HandlerFunc {
|
||||
httpx.Fail(c, "导出token不能为空")
|
||||
return
|
||||
}
|
||||
raw, ok, err := h.settings.CacheGet(c.Request.Context(), "export:"+token)
|
||||
if err != nil || !ok {
|
||||
httpx.Fail(c, "导出token无效或已过期")
|
||||
value, err := h.service.ConsumeToken(c.Request.Context(), token, expectBlank)
|
||||
if err != nil {
|
||||
switch {
|
||||
case errors.Is(err, service.ErrExportTokenMalformed):
|
||||
httpx.Fail(c, "解析导出参数失败")
|
||||
case errors.Is(err, service.ErrExportTokenType):
|
||||
httpx.Fail(c, "token类型错误")
|
||||
default:
|
||||
httpx.Fail(c, "导出token无效或已过期")
|
||||
}
|
||||
return
|
||||
}
|
||||
var value exportToken
|
||||
if json.Unmarshal([]byte(raw), &value) != nil {
|
||||
httpx.Fail(c, "解析导出参数失败")
|
||||
return
|
||||
}
|
||||
if value.Blank != expectBlank {
|
||||
httpx.Fail(c, "token类型错误")
|
||||
return
|
||||
}
|
||||
_ = h.settings.CacheDelete(c.Request.Context(), "export:"+token)
|
||||
var data []byte
|
||||
var name string
|
||||
if expectBlank {
|
||||
|
||||
Reference in New Issue
Block a user