Files

46 lines
1.2 KiB
Go

package files
import (
"net/http"
"strings"
. "github.com/mickael-kerjean/filestash/server/pkg/core"
. "github.com/mickael-kerjean/filestash/server/pkg/kernel"
. "github.com/mickael-kerjean/filestash/server/pkg/utils"
. "github.com/mickael-kerjean/filestash/server/pkg/permissions"
)
func FileAccess(ctx *App, res http.ResponseWriter, req *http.Request) {
path, err := PathBuilder(ctx, req.URL.Query().Get("path"))
if err != nil {
Log.Debug("access::path '%s'", err.Error())
SendErrorResult(res, err)
return
}
var perms Metadata = Metadata{}
if obj, ok := ctx.Backend.(interface{ Meta(path string) Metadata }); ok {
perms = obj.Meta(path)
}
allowed := []string{}
if CanRead(ctx) {
if perms.CanSee == nil || *perms.CanSee == true {
allowed = append(allowed, "GET")
}
}
if CanEdit(ctx) {
if (perms.CanCreateFile == nil || *perms.CanCreateFile == true) &&
(perms.CanCreateDirectory == nil || *perms.CanCreateDirectory == true) {
allowed = append(allowed, "PUT")
}
}
if CanUpload(ctx) {
if perms.CanUpload == nil || *perms.CanUpload == true {
allowed = append(allowed, "POST")
}
}
header := res.Header()
header.Set("Allow", strings.Join(allowed, ", "))
SendSuccessResult(res, nil)
}