blob: 13440be677c125b8f62218d817e25d0eeb786430 [file] [log] [blame]
khenaidooac637102019-01-14 15:44:34 -05001package sarama
2
khenaidood948f772021-08-11 17:49:24 -04003// Resource holds information about acl resource type
khenaidooac637102019-01-14 15:44:34 -05004type Resource struct {
Scott Baker8461e152019-10-01 14:44:30 -07005 ResourceType AclResourceType
6 ResourceName string
7 ResourcePatternType AclResourcePatternType
khenaidooac637102019-01-14 15:44:34 -05008}
9
William Kurkiandaa6bb22019-03-07 12:26:28 -050010func (r *Resource) encode(pe packetEncoder, version int16) error {
khenaidooac637102019-01-14 15:44:34 -050011 pe.putInt8(int8(r.ResourceType))
12
13 if err := pe.putString(r.ResourceName); err != nil {
14 return err
15 }
16
William Kurkiandaa6bb22019-03-07 12:26:28 -050017 if version == 1 {
Scott Baker8461e152019-10-01 14:44:30 -070018 if r.ResourcePatternType == AclPatternUnknown {
William Kurkiandaa6bb22019-03-07 12:26:28 -050019 Logger.Print("Cannot encode an unknown resource pattern type, using Literal instead")
Scott Baker8461e152019-10-01 14:44:30 -070020 r.ResourcePatternType = AclPatternLiteral
William Kurkiandaa6bb22019-03-07 12:26:28 -050021 }
Scott Baker8461e152019-10-01 14:44:30 -070022 pe.putInt8(int8(r.ResourcePatternType))
William Kurkiandaa6bb22019-03-07 12:26:28 -050023 }
24
khenaidooac637102019-01-14 15:44:34 -050025 return nil
26}
27
28func (r *Resource) decode(pd packetDecoder, version int16) (err error) {
29 resourceType, err := pd.getInt8()
30 if err != nil {
31 return err
32 }
33 r.ResourceType = AclResourceType(resourceType)
34
35 if r.ResourceName, err = pd.getString(); err != nil {
36 return err
37 }
William Kurkiandaa6bb22019-03-07 12:26:28 -050038 if version == 1 {
39 pattern, err := pd.getInt8()
40 if err != nil {
41 return err
42 }
Scott Baker8461e152019-10-01 14:44:30 -070043 r.ResourcePatternType = AclResourcePatternType(pattern)
William Kurkiandaa6bb22019-03-07 12:26:28 -050044 }
khenaidooac637102019-01-14 15:44:34 -050045
46 return nil
47}
48
khenaidood948f772021-08-11 17:49:24 -040049// Acl holds information about acl type
khenaidooac637102019-01-14 15:44:34 -050050type Acl struct {
51 Principal string
52 Host string
53 Operation AclOperation
54 PermissionType AclPermissionType
55}
56
57func (a *Acl) encode(pe packetEncoder) error {
58 if err := pe.putString(a.Principal); err != nil {
59 return err
60 }
61
62 if err := pe.putString(a.Host); err != nil {
63 return err
64 }
65
66 pe.putInt8(int8(a.Operation))
67 pe.putInt8(int8(a.PermissionType))
68
69 return nil
70}
71
72func (a *Acl) decode(pd packetDecoder, version int16) (err error) {
73 if a.Principal, err = pd.getString(); err != nil {
74 return err
75 }
76
77 if a.Host, err = pd.getString(); err != nil {
78 return err
79 }
80
81 operation, err := pd.getInt8()
82 if err != nil {
83 return err
84 }
85 a.Operation = AclOperation(operation)
86
87 permissionType, err := pd.getInt8()
88 if err != nil {
89 return err
90 }
91 a.PermissionType = AclPermissionType(permissionType)
92
93 return nil
94}
95
khenaidood948f772021-08-11 17:49:24 -040096// ResourceAcls is an acl resource type
khenaidooac637102019-01-14 15:44:34 -050097type ResourceAcls struct {
98 Resource
99 Acls []*Acl
100}
101
William Kurkiandaa6bb22019-03-07 12:26:28 -0500102func (r *ResourceAcls) encode(pe packetEncoder, version int16) error {
103 if err := r.Resource.encode(pe, version); err != nil {
khenaidooac637102019-01-14 15:44:34 -0500104 return err
105 }
106
107 if err := pe.putArrayLength(len(r.Acls)); err != nil {
108 return err
109 }
110 for _, acl := range r.Acls {
111 if err := acl.encode(pe); err != nil {
112 return err
113 }
114 }
115
116 return nil
117}
118
119func (r *ResourceAcls) decode(pd packetDecoder, version int16) error {
120 if err := r.Resource.decode(pd, version); err != nil {
121 return err
122 }
123
124 n, err := pd.getArrayLength()
125 if err != nil {
126 return err
127 }
128
129 r.Acls = make([]*Acl, n)
130 for i := 0; i < n; i++ {
131 r.Acls[i] = new(Acl)
132 if err := r.Acls[i].decode(pd, version); err != nil {
133 return err
134 }
135 }
136
137 return nil
138}