blob: b91c28202220ef304d1d921b1844591b9cd0f2cc [file] [log] [blame]
William Kurkianea869482019-04-09 15:16:11 -04001package sarama
2
3type Resource struct {
4 ResourceType AclResourceType
5 ResourceName string
6 ResoucePatternType AclResourcePatternType
7}
8
9func (r *Resource) encode(pe packetEncoder, version int16) error {
10 pe.putInt8(int8(r.ResourceType))
11
12 if err := pe.putString(r.ResourceName); err != nil {
13 return err
14 }
15
16 if version == 1 {
17 if r.ResoucePatternType == AclPatternUnknown {
18 Logger.Print("Cannot encode an unknown resource pattern type, using Literal instead")
19 r.ResoucePatternType = AclPatternLiteral
20 }
21 pe.putInt8(int8(r.ResoucePatternType))
22 }
23
24 return nil
25}
26
27func (r *Resource) decode(pd packetDecoder, version int16) (err error) {
28 resourceType, err := pd.getInt8()
29 if err != nil {
30 return err
31 }
32 r.ResourceType = AclResourceType(resourceType)
33
34 if r.ResourceName, err = pd.getString(); err != nil {
35 return err
36 }
37 if version == 1 {
38 pattern, err := pd.getInt8()
39 if err != nil {
40 return err
41 }
42 r.ResoucePatternType = AclResourcePatternType(pattern)
43 }
44
45 return nil
46}
47
48type Acl struct {
49 Principal string
50 Host string
51 Operation AclOperation
52 PermissionType AclPermissionType
53}
54
55func (a *Acl) encode(pe packetEncoder) error {
56 if err := pe.putString(a.Principal); err != nil {
57 return err
58 }
59
60 if err := pe.putString(a.Host); err != nil {
61 return err
62 }
63
64 pe.putInt8(int8(a.Operation))
65 pe.putInt8(int8(a.PermissionType))
66
67 return nil
68}
69
70func (a *Acl) decode(pd packetDecoder, version int16) (err error) {
71 if a.Principal, err = pd.getString(); err != nil {
72 return err
73 }
74
75 if a.Host, err = pd.getString(); err != nil {
76 return err
77 }
78
79 operation, err := pd.getInt8()
80 if err != nil {
81 return err
82 }
83 a.Operation = AclOperation(operation)
84
85 permissionType, err := pd.getInt8()
86 if err != nil {
87 return err
88 }
89 a.PermissionType = AclPermissionType(permissionType)
90
91 return nil
92}
93
94type ResourceAcls struct {
95 Resource
96 Acls []*Acl
97}
98
99func (r *ResourceAcls) encode(pe packetEncoder, version int16) error {
100 if err := r.Resource.encode(pe, version); err != nil {
101 return err
102 }
103
104 if err := pe.putArrayLength(len(r.Acls)); err != nil {
105 return err
106 }
107 for _, acl := range r.Acls {
108 if err := acl.encode(pe); err != nil {
109 return err
110 }
111 }
112
113 return nil
114}
115
116func (r *ResourceAcls) decode(pd packetDecoder, version int16) error {
117 if err := r.Resource.decode(pd, version); err != nil {
118 return err
119 }
120
121 n, err := pd.getArrayLength()
122 if err != nil {
123 return err
124 }
125
126 r.Acls = make([]*Acl, n)
127 for i := 0; i < n; i++ {
128 r.Acls[i] = new(Acl)
129 if err := r.Acls[i].decode(pd, version); err != nil {
130 return err
131 }
132 }
133
134 return nil
135}