/
50_describe_user_scram_credentials.go
68 lines (60 loc) · 1.75 KB
/
50_describe_user_scram_credentials.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package kfake
import (
"github.com/twmb/franz-go/pkg/kerr"
"github.com/twmb/franz-go/pkg/kmsg"
)
func init() { regKey(50, 0, 0) }
func (c *Cluster) handleDescribeUserSCRAMCredentials(kreq kmsg.Request) (kmsg.Response, error) {
var (
req = kreq.(*kmsg.DescribeUserSCRAMCredentialsRequest)
resp = req.ResponseKind().(*kmsg.DescribeUserSCRAMCredentialsResponse)
)
if err := checkReqVersion(req.Key(), req.Version); err != nil {
return nil, err
}
describe := make(map[string]bool) // if false, user was duplicated
for _, u := range req.Users {
if _, ok := describe[u.Name]; ok {
describe[u.Name] = true
} else {
describe[u.Name] = false
}
}
if req.Users == nil { // null returns all
for u := range c.sasls.scram256 {
describe[u] = false
}
for u := range c.sasls.scram512 {
describe[u] = false
}
}
addr := func(u string) *kmsg.DescribeUserSCRAMCredentialsResponseResult {
sr := kmsg.NewDescribeUserSCRAMCredentialsResponseResult()
sr.User = u
resp.Results = append(resp.Results, sr)
return &resp.Results[len(resp.Results)-1]
}
for u, duplicated := range describe {
sr := addr(u)
if duplicated {
sr.ErrorCode = kerr.DuplicateResource.Code
continue
}
if a, ok := c.sasls.scram256[u]; ok {
ci := kmsg.NewDescribeUserSCRAMCredentialsResponseResultCredentialInfo()
ci.Mechanism = 1
ci.Iterations = int32(a.iterations)
sr.CredentialInfos = append(sr.CredentialInfos, ci)
}
if a, ok := c.sasls.scram512[u]; ok {
ci := kmsg.NewDescribeUserSCRAMCredentialsResponseResultCredentialInfo()
ci.Mechanism = 2
ci.Iterations = int32(a.iterations)
sr.CredentialInfos = append(sr.CredentialInfos, ci)
}
if len(sr.CredentialInfos) == 0 {
sr.ErrorCode = kerr.ResourceNotFound.Code
}
}
return resp, nil
}