diff --git a/controllers/resource.go b/controllers/resource.go index a4c59471..c6709013 100644 --- a/controllers/resource.go +++ b/controllers/resource.go @@ -167,11 +167,16 @@ func (c *ApiController) DeleteResource() { return } + if resource.Provider != "" { + c.Input().Set("provider", resource.Provider) + } + c.Input().Set("fullFilePath", resource.Name) provider, err := c.GetProviderFromContext("Storage") if err != nil { c.ResponseError(err.Error()) return } + _, resource.Name = refineFullFilePath(resource.Name) err = object.DeleteFile(provider, resource.Name, c.GetAcceptLanguage()) if err != nil { @@ -231,6 +236,7 @@ func (c *ApiController) UploadResource() { c.ResponseError(err.Error()) return } + _, fullFilePath = refineFullFilePath(fullFilePath) fileType := "unknown" contentType := header.Header.Get("Content-Type") diff --git a/controllers/util.go b/controllers/util.go index 757d26d3..6f8a922f 100644 --- a/controllers/util.go +++ b/controllers/util.go @@ -16,6 +16,7 @@ package controllers import ( "fmt" + "strings" "github.com/casdoor/casdoor/conf" "github.com/casdoor/casdoor/i18n" @@ -143,6 +144,17 @@ func (c *ApiController) IsMaskedEnabled() (bool, bool) { return true, isMaskEnabled } +func refineFullFilePath(fullFilePath string) (string, string) { + tokens := strings.Split(fullFilePath, "/") + if len(tokens) >= 2 && tokens[0] == "Direct" && tokens[1] != "" { + providerName := tokens[1] + res := strings.Join(tokens[2:], "/") + return providerName, "/" + res + } else { + return "", fullFilePath + } +} + func (c *ApiController) GetProviderFromContext(category string) (*object.Provider, error) { providerName := c.Input().Get("provider") if providerName == "" { @@ -150,6 +162,9 @@ func (c *ApiController) GetProviderFromContext(category string) (*object.Provide value := c.Input().Get("value") if field == "provider" && value != "" { providerName = value + } else { + fullFilePath := c.Input().Get("fullFilePath") + providerName, _ = refineFullFilePath(fullFilePath) } }