53 lines
1.0 KiB
Go
53 lines
1.0 KiB
Go
|
package chef
|
||
|
|
||
|
import "fmt"
|
||
|
|
||
|
type ACLService struct {
|
||
|
client *Client
|
||
|
}
|
||
|
|
||
|
// ACL represents the native Go version of the deserialized ACL type
|
||
|
type ACL map[string]ACLitems
|
||
|
|
||
|
// ACLitems
|
||
|
type ACLitems struct {
|
||
|
Groups ACLitem `json:"groups"`
|
||
|
Actors ACLitem `json:"actors"`
|
||
|
}
|
||
|
|
||
|
// ACLitem
|
||
|
type ACLitem []string
|
||
|
|
||
|
func NewACL(acltype string, actors, groups ACLitem) (acl *ACL) {
|
||
|
acl = &ACL{
|
||
|
acltype: ACLitems{
|
||
|
Actors: actors,
|
||
|
Groups: groups,
|
||
|
},
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// Get gets an ACL from the Chef server.
|
||
|
//
|
||
|
// Chef API docs: lol
|
||
|
func (a *ACLService) Get(subkind string, name string) (acl ACL, err error) {
|
||
|
url := fmt.Sprintf("%s/%s/_acl", subkind, name)
|
||
|
err = a.client.magicRequestDecoder("GET", url, nil, &acl)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// Put updates an ACL on the Chef server.
|
||
|
//
|
||
|
// Chef API docs: rofl
|
||
|
func (a *ACLService) Put(subkind, name string, acltype string, item *ACL) (err error) {
|
||
|
url := fmt.Sprintf("%s/%s/_acl/%s", subkind, name, acltype)
|
||
|
body, err := JSONReader(item)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
err = a.client.magicRequestDecoder("PUT", url, body, nil)
|
||
|
return
|
||
|
}
|