139 lines
2.7 KiB
Go
139 lines
2.7 KiB
Go
package sarama
|
|
|
|
//Resource holds information about acl resource type
|
|
type Resource struct {
|
|
ResourceType AclResourceType
|
|
ResourceName string
|
|
ResourcePatternType AclResourcePatternType
|
|
}
|
|
|
|
func (r *Resource) encode(pe packetEncoder, version int16) error {
|
|
pe.putInt8(int8(r.ResourceType))
|
|
|
|
if err := pe.putString(r.ResourceName); err != nil {
|
|
return err
|
|
}
|
|
|
|
if version == 1 {
|
|
if r.ResourcePatternType == AclPatternUnknown {
|
|
Logger.Print("Cannot encode an unknown resource pattern type, using Literal instead")
|
|
r.ResourcePatternType = AclPatternLiteral
|
|
}
|
|
pe.putInt8(int8(r.ResourcePatternType))
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (r *Resource) decode(pd packetDecoder, version int16) (err error) {
|
|
resourceType, err := pd.getInt8()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
r.ResourceType = AclResourceType(resourceType)
|
|
|
|
if r.ResourceName, err = pd.getString(); err != nil {
|
|
return err
|
|
}
|
|
if version == 1 {
|
|
pattern, err := pd.getInt8()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
r.ResourcePatternType = AclResourcePatternType(pattern)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
//Acl holds information about acl type
|
|
type Acl struct {
|
|
Principal string
|
|
Host string
|
|
Operation AclOperation
|
|
PermissionType AclPermissionType
|
|
}
|
|
|
|
func (a *Acl) encode(pe packetEncoder) error {
|
|
if err := pe.putString(a.Principal); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := pe.putString(a.Host); err != nil {
|
|
return err
|
|
}
|
|
|
|
pe.putInt8(int8(a.Operation))
|
|
pe.putInt8(int8(a.PermissionType))
|
|
|
|
return nil
|
|
}
|
|
|
|
func (a *Acl) decode(pd packetDecoder, version int16) (err error) {
|
|
if a.Principal, err = pd.getString(); err != nil {
|
|
return err
|
|
}
|
|
|
|
if a.Host, err = pd.getString(); err != nil {
|
|
return err
|
|
}
|
|
|
|
operation, err := pd.getInt8()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
a.Operation = AclOperation(operation)
|
|
|
|
permissionType, err := pd.getInt8()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
a.PermissionType = AclPermissionType(permissionType)
|
|
|
|
return nil
|
|
}
|
|
|
|
//ResourceAcls is an acl resource type
|
|
type ResourceAcls struct {
|
|
Resource
|
|
Acls []*Acl
|
|
}
|
|
|
|
func (r *ResourceAcls) encode(pe packetEncoder, version int16) error {
|
|
if err := r.Resource.encode(pe, version); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := pe.putArrayLength(len(r.Acls)); err != nil {
|
|
return err
|
|
}
|
|
for _, acl := range r.Acls {
|
|
if err := acl.encode(pe); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (r *ResourceAcls) decode(pd packetDecoder, version int16) error {
|
|
if err := r.Resource.decode(pd, version); err != nil {
|
|
return err
|
|
}
|
|
|
|
n, err := pd.getArrayLength()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
r.Acls = make([]*Acl, n)
|
|
for i := 0; i < n; i++ {
|
|
r.Acls[i] = new(Acl)
|
|
if err := r.Acls[i].decode(pd, version); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|