diff --git a/code/rest/share_controller.go b/code/rest/share_controller.go index e8028ea..e0838e9 100644 --- a/code/rest/share_controller.go +++ b/code/rest/share_controller.go @@ -70,38 +70,19 @@ func (this *ShareController) RegisterRoutes() map[string]func(writer http.Respon func (this *ShareController) Create(writer http.ResponseWriter, request *http.Request) *result.WebResult { - matterUuids := request.FormValue("matterUuids") - expireInfinityStr := request.FormValue("expireInfinity") - expireTimeStr := request.FormValue("expireTime") - - if matterUuids == "" { - panic(result.BadRequest("matterUuids cannot be null")) - } - - var expireTime time.Time - expireInfinity := false - if expireInfinityStr == TRUE { - expireInfinity = true - expireTime = time.Now() - } else { - - if expireTimeStr == "" { - panic(result.BadRequest("time format error")) - } else { - expireTime = util.ConvertDateTimeStringToTime(expireTimeStr) - } + uuidArray := util.ExtractRequestArray(request, "matterUuids") + expireInfinity := util.ExtractRequestBool(request, "expireInfinity") + spaceUuid := util.ExtractRequestString(request, "spaceUuid") + var expireTime = time.Now() + if !expireInfinity { + expireTime = util.ExtractRequestTime(request, "expireTime") if expireTime.Before(time.Now()) { panic(result.BadRequest("expire time cannot before now")) } - } - uuidArray := strings.Split(matterUuids, ",") - - if len(uuidArray) == 0 { - panic(result.BadRequest("share at least one file")) - } else if len(uuidArray) > SHARE_MAX_NUM { + if len(uuidArray) > SHARE_MAX_NUM { panic(result.BadRequestI18n(request, i18n.ShareNumExceedLimit, len(uuidArray), SHARE_MAX_NUM)) } @@ -150,6 +131,7 @@ func (this *ShareController) Create(writer http.ResponseWriter, request *http.Re Code: util.RandomString4(), ExpireInfinity: expireInfinity, ExpireTime: expireTime, + SpaceUuid: spaceUuid, } this.shareDao.Create(share) @@ -194,14 +176,14 @@ func (this *ShareController) DeleteBatch(writer http.ResponseWriter, request *ht for _, uuid := range uuidArray { - imageCache := this.shareDao.FindByUuid(uuid) + share := this.shareDao.FindByUuid(uuid) user := this.checkUser(request) - if imageCache.UserUuid != user.Uuid { + if share.UserUuid != user.Uuid { panic(result.UNAUTHORIZED) } - this.shareDao.Delete(imageCache) + this.shareDao.Delete(share) } return this.Success("OK") diff --git a/code/rest/share_model.go b/code/rest/share_model.go index 996629c..aa23737 100644 --- a/code/rest/share_model.go +++ b/code/rest/share_model.go @@ -33,6 +33,7 @@ type Share struct { Code string `json:"code" gorm:"type:varchar(45) not null"` ExpireInfinity bool `json:"expireInfinity" gorm:"type:tinyint(1) not null;default:0"` ExpireTime time.Time `json:"expireTime" gorm:"type:timestamp not null;default:'2018-01-01 00:00:00'"` + SpaceUuid string `json:"spaceUuid" gorm:"type:char(36) not null;index:idx_space_uuid"` DirMatter *Matter `json:"dirMatter" gorm:"-"` Matters []*Matter `json:"matters" gorm:"-"` } diff --git a/code/tool/util/util_params.go b/code/tool/util/util_params.go index 007f77e..1bade3a 100644 --- a/code/tool/util/util_params.go +++ b/code/tool/util/util_params.go @@ -4,6 +4,8 @@ import ( "fmt" "net/http" "strconv" + "strings" + "time" ) // param is required. when missing, panic error. @@ -26,6 +28,20 @@ func ExtractRequestStringWithErrorHint(request *http.Request, key string, errorH } } +// split by comma , param is required. when missing, panic error. +func ExtractRequestArray(request *http.Request, key string) []string { + str := request.FormValue(key) + if str == "" { + panic(fmt.Sprintf("%s is required", key)) + } else { + arr := strings.Split(str, ",") + if len(arr) == 0 { + panic(fmt.Sprintf("%s cannot be empty", key)) + } + return arr + } +} + // param is required. when missing, panic error. func ExtractRequestInt64(request *http.Request, key string) int64 { keyStr := request.FormValue(key) @@ -85,6 +101,22 @@ func ExtractRequestOptionalString(request *http.Request, key string, defaultValu } // param is required. when missing, panic error. +func ExtractRequestBool(request *http.Request, key string) bool { + str := request.FormValue(key) + if str == "true" { + return true + } else { + return false + } +} + +// param is required. when missing, panic error. +func ExtractRequestTime(request *http.Request, key string) time.Time { + str := request.FormValue(key) + return ConvertDateTimeStringToTime(str) +} + +// param is optional. when missing, use default. func ExtractRequestOptionalBool(request *http.Request, key string, defaultValue bool) bool { str := request.FormValue(key) if str == "" {