Skip to content

Commit 4bbbb3a

Browse files
committed
SCRAMClientGeneratorFunc function must be provided to Net.SASL.SCRAMClientGeneratorFunc
1 parent a2799b5 commit 4bbbb3a

File tree

4 files changed

+81
-3
lines changed

4 files changed

+81
-3
lines changed

go.mod

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ require (
2929
github.com/slack-go/slack v0.12.3
3030
github.com/spf13/viper v1.18.2
3131
github.com/stretchr/testify v1.9.0
32+
github.com/xdg-go/scram v1.1.2
3233
go.opentelemetry.io/otel v1.21.0
3334
go.opentelemetry.io/otel/trace v1.21.0
3435
gocloud.dev v0.34.0
@@ -39,6 +40,11 @@ require (
3940
golang.org/x/text v0.14.0
4041
)
4142

43+
require (
44+
github.com/xdg-go/pbkdf2 v1.0.0 // indirect
45+
github.com/xdg-go/stringprep v1.0.4 // indirect
46+
)
47+
4248
require (
4349
cloud.google.com/go v0.111.0 // indirect
4450
cloud.google.com/go/compute v1.23.3 // indirect

go.sum

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,12 @@ github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG
479479
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
480480
github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE=
481481
github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU=
482+
github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
483+
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
484+
github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY=
485+
github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4=
486+
github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8=
487+
github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM=
482488
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c=
483489
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
484490
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0=

internal/kafka/kafka.go

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,25 @@ func OpenTopic(logger log.Logger, cfg *service.KafkaConfig) (*pubsub.Topic, erro
2222

2323
config.Net.SASL.Enable = cfg.Key != ""
2424
config.Net.SASL.Mechanism = sarama.SASLMechanism(cfg.SASLMechanism)
25-
if config.Net.SASL.Mechanism == "" {
25+
26+
// Default to PLAIN if no SASL mechanism is specified
27+
switch cfg.SASLMechanism {
28+
case "SCRAM-SHA-512":
29+
config.Net.SASL.SCRAMClientGeneratorFunc = func() sarama.SCRAMClient {
30+
return &XDGSCRAMClient{HashGeneratorFcn: SHA512}
31+
}
32+
config.Net.SASL.Mechanism = sarama.SASLMechanism(cfg.SASLMechanism)
33+
34+
case "SCRAM-SHA-256":
35+
config.Net.SASL.SCRAMClientGeneratorFunc = func() sarama.SCRAMClient {
36+
return &XDGSCRAMClient{HashGeneratorFcn: SHA256}
37+
}
38+
config.Net.SASL.Mechanism = sarama.SASLMechanism(cfg.SASLMechanism)
39+
40+
default:
2641
config.Net.SASL.Mechanism = sarama.SASLMechanism("PLAIN")
2742
}
43+
2844
config.Net.SASL.User = cfg.Key
2945
config.Net.SASL.Password = cfg.Secret
3046

@@ -49,10 +65,24 @@ func OpenSubscription(logger log.Logger, cfg *service.KafkaConfig) (*pubsub.Subs
4965
config.Net.TLS.Enable = cfg.TLS
5066

5167
config.Net.SASL.Enable = cfg.Key != ""
52-
config.Net.SASL.Mechanism = sarama.SASLMechanism(cfg.SASLMechanism)
53-
if config.Net.SASL.Mechanism == "" {
68+
// Default to PLAIN if no SASL mechanism is specified
69+
switch cfg.SASLMechanism {
70+
case "SCRAM-SHA-512":
71+
config.Net.SASL.SCRAMClientGeneratorFunc = func() sarama.SCRAMClient {
72+
return &XDGSCRAMClient{HashGeneratorFcn: SHA512}
73+
}
74+
config.Net.SASL.Mechanism = sarama.SASLMechanism(cfg.SASLMechanism)
75+
76+
case "SCRAM-SHA-256":
77+
config.Net.SASL.SCRAMClientGeneratorFunc = func() sarama.SCRAMClient {
78+
return &XDGSCRAMClient{HashGeneratorFcn: SHA256}
79+
}
80+
config.Net.SASL.Mechanism = sarama.SASLMechanism(cfg.SASLMechanism)
81+
82+
default:
5483
config.Net.SASL.Mechanism = sarama.SASLMechanism("PLAIN")
5584
}
85+
5686
config.Net.SASL.User = cfg.Key
5787
config.Net.SASL.Password = cfg.Secret
5888

internal/kafka/scram_client.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package kafka
2+
3+
import (
4+
"crypto/sha256"
5+
"crypto/sha512"
6+
"hash"
7+
8+
"github.com/xdg-go/scram"
9+
)
10+
11+
var SHA256 scram.HashGeneratorFcn = func() hash.Hash { return sha256.New() }
12+
var SHA512 scram.HashGeneratorFcn = func() hash.Hash { return sha512.New() }
13+
14+
type XDGSCRAMClient struct {
15+
*scram.Client
16+
*scram.ClientConversation
17+
scram.HashGeneratorFcn
18+
}
19+
20+
func (x *XDGSCRAMClient) Begin(userName, password, authzID string) (err error) {
21+
x.Client, err = x.HashGeneratorFcn.NewClient(userName, password, authzID)
22+
if err != nil {
23+
return err
24+
}
25+
x.ClientConversation = x.Client.NewConversation()
26+
return nil
27+
}
28+
29+
func (x *XDGSCRAMClient) Step(challenge string) (response string, err error) {
30+
response, err = x.ClientConversation.Step(challenge)
31+
return
32+
}
33+
34+
func (x *XDGSCRAMClient) Done() bool {
35+
return x.ClientConversation.Done()
36+
}

0 commit comments

Comments
 (0)