William Kurkian | ea86948 | 2019-04-09 15:16:11 -0400 | [diff] [blame] | 1 | package sarama |
| 2 | |
khenaidoo | 106c61a | 2021-08-11 18:05:46 -0400 | [diff] [blame] | 3 | import ( |
| 4 | "fmt" |
| 5 | "strings" |
| 6 | ) |
| 7 | |
Abhilash S.L | 3b49463 | 2019-07-16 15:51:09 +0530 | [diff] [blame] | 8 | type ( |
| 9 | AclOperation int |
| 10 | |
| 11 | AclPermissionType int |
| 12 | |
| 13 | AclResourceType int |
| 14 | |
| 15 | AclResourcePatternType int |
| 16 | ) |
William Kurkian | ea86948 | 2019-04-09 15:16:11 -0400 | [diff] [blame] | 17 | |
| 18 | // ref: https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/acl/AclOperation.java |
| 19 | const ( |
Abhilash S.L | 3b49463 | 2019-07-16 15:51:09 +0530 | [diff] [blame] | 20 | AclOperationUnknown AclOperation = iota |
| 21 | AclOperationAny |
| 22 | AclOperationAll |
| 23 | AclOperationRead |
| 24 | AclOperationWrite |
| 25 | AclOperationCreate |
| 26 | AclOperationDelete |
| 27 | AclOperationAlter |
| 28 | AclOperationDescribe |
| 29 | AclOperationClusterAction |
| 30 | AclOperationDescribeConfigs |
| 31 | AclOperationAlterConfigs |
| 32 | AclOperationIdempotentWrite |
William Kurkian | ea86948 | 2019-04-09 15:16:11 -0400 | [diff] [blame] | 33 | ) |
| 34 | |
khenaidoo | 106c61a | 2021-08-11 18:05:46 -0400 | [diff] [blame] | 35 | func (a *AclOperation) String() string { |
| 36 | mapping := map[AclOperation]string{ |
| 37 | AclOperationUnknown: "Unknown", |
| 38 | AclOperationAny: "Any", |
| 39 | AclOperationAll: "All", |
| 40 | AclOperationRead: "Read", |
| 41 | AclOperationWrite: "Write", |
| 42 | AclOperationCreate: "Create", |
| 43 | AclOperationDelete: "Delete", |
| 44 | AclOperationAlter: "Alter", |
| 45 | AclOperationDescribe: "Describe", |
| 46 | AclOperationClusterAction: "ClusterAction", |
| 47 | AclOperationDescribeConfigs: "DescribeConfigs", |
| 48 | AclOperationAlterConfigs: "AlterConfigs", |
| 49 | AclOperationIdempotentWrite: "IdempotentWrite", |
| 50 | } |
| 51 | s, ok := mapping[*a] |
| 52 | if !ok { |
| 53 | s = mapping[AclOperationUnknown] |
| 54 | } |
| 55 | return s |
| 56 | } |
| 57 | |
| 58 | // MarshalText returns the text form of the AclOperation (name without prefix) |
| 59 | func (a *AclOperation) MarshalText() ([]byte, error) { |
| 60 | return []byte(a.String()), nil |
| 61 | } |
| 62 | |
| 63 | // UnmarshalText takes a text reprentation of the operation and converts it to an AclOperation |
| 64 | func (a *AclOperation) UnmarshalText(text []byte) error { |
| 65 | normalized := strings.ToLower(string(text)) |
| 66 | mapping := map[string]AclOperation{ |
| 67 | "unknown": AclOperationUnknown, |
| 68 | "any": AclOperationAny, |
| 69 | "all": AclOperationAll, |
| 70 | "read": AclOperationRead, |
| 71 | "write": AclOperationWrite, |
| 72 | "create": AclOperationCreate, |
| 73 | "delete": AclOperationDelete, |
| 74 | "alter": AclOperationAlter, |
| 75 | "describe": AclOperationDescribe, |
| 76 | "clusteraction": AclOperationClusterAction, |
| 77 | "describeconfigs": AclOperationDescribeConfigs, |
| 78 | "alterconfigs": AclOperationAlterConfigs, |
| 79 | "idempotentwrite": AclOperationIdempotentWrite, |
| 80 | } |
| 81 | ao, ok := mapping[normalized] |
| 82 | if !ok { |
| 83 | *a = AclOperationUnknown |
| 84 | return fmt.Errorf("no acl operation with name %s", normalized) |
| 85 | } |
| 86 | *a = ao |
| 87 | return nil |
| 88 | } |
| 89 | |
William Kurkian | ea86948 | 2019-04-09 15:16:11 -0400 | [diff] [blame] | 90 | // ref: https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/acl/AclPermissionType.java |
| 91 | const ( |
Abhilash S.L | 3b49463 | 2019-07-16 15:51:09 +0530 | [diff] [blame] | 92 | AclPermissionUnknown AclPermissionType = iota |
| 93 | AclPermissionAny |
| 94 | AclPermissionDeny |
| 95 | AclPermissionAllow |
William Kurkian | ea86948 | 2019-04-09 15:16:11 -0400 | [diff] [blame] | 96 | ) |
| 97 | |
khenaidoo | 106c61a | 2021-08-11 18:05:46 -0400 | [diff] [blame] | 98 | func (a *AclPermissionType) String() string { |
| 99 | mapping := map[AclPermissionType]string{ |
| 100 | AclPermissionUnknown: "Unknown", |
| 101 | AclPermissionAny: "Any", |
| 102 | AclPermissionDeny: "Deny", |
| 103 | AclPermissionAllow: "Allow", |
| 104 | } |
| 105 | s, ok := mapping[*a] |
| 106 | if !ok { |
| 107 | s = mapping[AclPermissionUnknown] |
| 108 | } |
| 109 | return s |
| 110 | } |
| 111 | |
| 112 | // MarshalText returns the text form of the AclPermissionType (name without prefix) |
| 113 | func (a *AclPermissionType) MarshalText() ([]byte, error) { |
| 114 | return []byte(a.String()), nil |
| 115 | } |
| 116 | |
| 117 | // UnmarshalText takes a text reprentation of the permission type and converts it to an AclPermissionType |
| 118 | func (a *AclPermissionType) UnmarshalText(text []byte) error { |
| 119 | normalized := strings.ToLower(string(text)) |
| 120 | mapping := map[string]AclPermissionType{ |
| 121 | "unknown": AclPermissionUnknown, |
| 122 | "any": AclPermissionAny, |
| 123 | "deny": AclPermissionDeny, |
| 124 | "allow": AclPermissionAllow, |
| 125 | } |
| 126 | |
| 127 | apt, ok := mapping[normalized] |
| 128 | if !ok { |
| 129 | *a = AclPermissionUnknown |
| 130 | return fmt.Errorf("no acl permission with name %s", normalized) |
| 131 | } |
| 132 | *a = apt |
| 133 | return nil |
| 134 | } |
| 135 | |
William Kurkian | ea86948 | 2019-04-09 15:16:11 -0400 | [diff] [blame] | 136 | // ref: https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/resource/ResourceType.java |
| 137 | const ( |
Abhilash S.L | 3b49463 | 2019-07-16 15:51:09 +0530 | [diff] [blame] | 138 | AclResourceUnknown AclResourceType = iota |
| 139 | AclResourceAny |
| 140 | AclResourceTopic |
| 141 | AclResourceGroup |
| 142 | AclResourceCluster |
| 143 | AclResourceTransactionalID |
khenaidoo | 106c61a | 2021-08-11 18:05:46 -0400 | [diff] [blame] | 144 | AclResourceDelegationToken |
William Kurkian | ea86948 | 2019-04-09 15:16:11 -0400 | [diff] [blame] | 145 | ) |
| 146 | |
khenaidoo | 106c61a | 2021-08-11 18:05:46 -0400 | [diff] [blame] | 147 | func (a *AclResourceType) String() string { |
| 148 | mapping := map[AclResourceType]string{ |
| 149 | AclResourceUnknown: "Unknown", |
| 150 | AclResourceAny: "Any", |
| 151 | AclResourceTopic: "Topic", |
| 152 | AclResourceGroup: "Group", |
| 153 | AclResourceCluster: "Cluster", |
| 154 | AclResourceTransactionalID: "TransactionalID", |
| 155 | AclResourceDelegationToken: "DelegationToken", |
| 156 | } |
| 157 | s, ok := mapping[*a] |
| 158 | if !ok { |
| 159 | s = mapping[AclResourceUnknown] |
| 160 | } |
| 161 | return s |
| 162 | } |
| 163 | |
| 164 | // MarshalText returns the text form of the AclResourceType (name without prefix) |
| 165 | func (a *AclResourceType) MarshalText() ([]byte, error) { |
| 166 | return []byte(a.String()), nil |
| 167 | } |
| 168 | |
| 169 | // UnmarshalText takes a text reprentation of the resource type and converts it to an AclResourceType |
| 170 | func (a *AclResourceType) UnmarshalText(text []byte) error { |
| 171 | normalized := strings.ToLower(string(text)) |
| 172 | mapping := map[string]AclResourceType{ |
| 173 | "unknown": AclResourceUnknown, |
| 174 | "any": AclResourceAny, |
| 175 | "topic": AclResourceTopic, |
| 176 | "group": AclResourceGroup, |
| 177 | "cluster": AclResourceCluster, |
| 178 | "transactionalid": AclResourceTransactionalID, |
| 179 | "delegationtoken": AclResourceDelegationToken, |
| 180 | } |
| 181 | |
| 182 | art, ok := mapping[normalized] |
| 183 | if !ok { |
| 184 | *a = AclResourceUnknown |
| 185 | return fmt.Errorf("no acl resource with name %s", normalized) |
| 186 | } |
| 187 | *a = art |
| 188 | return nil |
| 189 | } |
| 190 | |
William Kurkian | ea86948 | 2019-04-09 15:16:11 -0400 | [diff] [blame] | 191 | // ref: https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/resource/PatternType.java |
William Kurkian | ea86948 | 2019-04-09 15:16:11 -0400 | [diff] [blame] | 192 | const ( |
| 193 | AclPatternUnknown AclResourcePatternType = iota |
| 194 | AclPatternAny |
| 195 | AclPatternMatch |
| 196 | AclPatternLiteral |
| 197 | AclPatternPrefixed |
| 198 | ) |
khenaidoo | 106c61a | 2021-08-11 18:05:46 -0400 | [diff] [blame] | 199 | |
| 200 | func (a *AclResourcePatternType) String() string { |
| 201 | mapping := map[AclResourcePatternType]string{ |
| 202 | AclPatternUnknown: "Unknown", |
| 203 | AclPatternAny: "Any", |
| 204 | AclPatternMatch: "Match", |
| 205 | AclPatternLiteral: "Literal", |
| 206 | AclPatternPrefixed: "Prefixed", |
| 207 | } |
| 208 | s, ok := mapping[*a] |
| 209 | if !ok { |
| 210 | s = mapping[AclPatternUnknown] |
| 211 | } |
| 212 | return s |
| 213 | } |
| 214 | |
| 215 | // MarshalText returns the text form of the AclResourcePatternType (name without prefix) |
| 216 | func (a *AclResourcePatternType) MarshalText() ([]byte, error) { |
| 217 | return []byte(a.String()), nil |
| 218 | } |
| 219 | |
| 220 | // UnmarshalText takes a text reprentation of the resource pattern type and converts it to an AclResourcePatternType |
| 221 | func (a *AclResourcePatternType) UnmarshalText(text []byte) error { |
| 222 | normalized := strings.ToLower(string(text)) |
| 223 | mapping := map[string]AclResourcePatternType{ |
| 224 | "unknown": AclPatternUnknown, |
| 225 | "any": AclPatternAny, |
| 226 | "match": AclPatternMatch, |
| 227 | "literal": AclPatternLiteral, |
| 228 | "prefixed": AclPatternPrefixed, |
| 229 | } |
| 230 | |
| 231 | arpt, ok := mapping[normalized] |
| 232 | if !ok { |
| 233 | *a = AclPatternUnknown |
| 234 | return fmt.Errorf("no acl resource pattern with name %s", normalized) |
| 235 | } |
| 236 | *a = arpt |
| 237 | return nil |
| 238 | } |