2021-03-25 22:57:25 +00:00
|
|
|
// Copyright (C) 2020 Storj Labs, Inc.
|
|
|
|
// See LICENSE for copying information.
|
|
|
|
|
|
|
|
package consolewasm
|
|
|
|
|
|
|
|
import (
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
"storj.io/common/grant"
|
|
|
|
)
|
|
|
|
|
|
|
|
// RestrictGrant restricts an access grant with the permissions and paths and returns a new access grant.
|
|
|
|
func RestrictGrant(accessGrant string, paths []string, permission Permission) (string, error) {
|
|
|
|
access, err := grant.ParseAccess(accessGrant)
|
|
|
|
if err != nil {
|
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
|
|
|
|
prefixes := make([]grant.SharePrefix, 0, len(paths))
|
|
|
|
for _, path := range paths {
|
|
|
|
parts := strings.SplitN(path, "/", 2)
|
|
|
|
prefix := grant.SharePrefix{Bucket: parts[0]}
|
|
|
|
if len(parts) > 1 {
|
|
|
|
prefix.Prefix = parts[1]
|
|
|
|
}
|
|
|
|
prefixes = append(prefixes, prefix)
|
|
|
|
}
|
|
|
|
|
2023-09-07 11:27:53 +01:00
|
|
|
restricted, err := access.Restrict(
|
|
|
|
grant.Permission{
|
|
|
|
AllowDownload: permission.AllowDownload,
|
|
|
|
AllowUpload: permission.AllowUpload,
|
|
|
|
AllowList: permission.AllowList,
|
|
|
|
AllowDelete: permission.AllowDelete,
|
|
|
|
NotBefore: permission.NotBefore,
|
|
|
|
NotAfter: permission.NotAfter,
|
|
|
|
},
|
|
|
|
prefixes...,
|
|
|
|
)
|
2021-03-25 22:57:25 +00:00
|
|
|
if err != nil {
|
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
|
|
|
|
return restricted.Serialize()
|
|
|
|
}
|