36 lines
855 B
Go
36 lines
855 B
Go
|
// 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)
|
||
|
}
|
||
|
|
||
|
restricted, err := access.Restrict(grant.Permission(permission), prefixes...)
|
||
|
if err != nil {
|
||
|
return "", err
|
||
|
}
|
||
|
|
||
|
return restricted.Serialize()
|
||
|
}
|