diff --git a/go.mod b/go.mod index d685e52..41c73e1 100644 --- a/go.mod +++ b/go.mod @@ -3,14 +3,15 @@ module com.navi.medici.janus go 1.16 require ( - github.com/Shopify/sarama v1.28.0 // indirect + github.com/Shopify/sarama v1.28.0 github.com/confluentinc/confluent-kafka-go v1.5.2 // indirect github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b // indirect github.com/golang/protobuf v1.4.1 // indirect github.com/gorilla/mux v1.8.0 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/riferrei/srclient v0.2.1 // indirect + github.com/riferrei/srclient v0.2.1 github.com/spf13/viper v1.7.1 // indirect + github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c google.golang.org/protobuf v1.25.0 // indirect gopkg.in/confluentinc/confluent-kafka-go.v1 v1.5.2 // indirect gopkg.in/jcmturner/aescts.v1 v1.0.1 // indirect diff --git a/go.sum b/go.sum index ecd5bd5..8428968 100644 --- a/go.sum +++ b/go.sum @@ -231,7 +231,9 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c h1:u40Z8hqBAAQyv+vATcGgV0YCnDjqSL7/q/JyPhhJSPk= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= +github.com/xdg/stringprep v1.0.0 h1:d9X0esnoa3dFsV0FG35rAT0RIhYFlPq7MiP+DW89La0= github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= diff --git a/producer/producer_config.go b/producer/producer_config.go index 7227bd7..fccc3dc 100644 --- a/producer/producer_config.go +++ b/producer/producer_config.go @@ -25,9 +25,9 @@ func GetSyncProducerConfig(kafkaConfiguration config.KafkaConfigurations, env st config.Net.SASL.Enable = true config.Net.SASL.Handshake = true config.Net.SASL.Mechanism = sarama.SASLTypeSCRAMSHA512 - /* saramaConfig.Net.SASL.SCRAMClientGeneratorFunc = func() sarama.SCRAMClient { + config.Net.SASL.SCRAMClientGeneratorFunc = func() sarama.SCRAMClient { return &XDGSCRAMClient{HashGeneratorFcn: SHA512} - } */ + } config.Net.SASL.User = kafkaConfiguration.Sasl_User config.Net.SASL.Password = kafkaConfiguration.Sasl_Password } @@ -55,10 +55,10 @@ func GetAsyncProducerConfig(kafkaConfiguration config.KafkaConfigurations, env s if env == "PROD" { config.Net.SASL.Enable = true config.Net.SASL.Handshake = true - config.Net.SASL.Mechanism = sarama.SASLMechanism(sarama.SASLTypeSCRAMSHA512) - /*config.Net.SASL.SCRAMClientGeneratorFunc = func() sarama.SCRAMClient { - return &scramclient.XDGSCRAMClient{HashGeneratorFcn: scramClient.SHA512} - } */ + config.Net.SASL.Mechanism = sarama.SASLMechanism(sarama.SASLTypeSCRAMSHA512) + config.Net.SASL.SCRAMClientGeneratorFunc = func() sarama.SCRAMClient { + return &XDGSCRAMClient{HashGeneratorFcn: SHA512} + } config.Net.SASL.User = kafkaConfiguration.Sasl_User config.Net.SASL.Password = kafkaConfiguration.Sasl_Password } diff --git a/producer/scram_client.go b/producer/scram_client.go new file mode 100644 index 0000000..cfbbe89 --- /dev/null +++ b/producer/scram_client.go @@ -0,0 +1,37 @@ +package producer + +import ( + "crypto/sha256" + "crypto/sha512" + + "github.com/xdg/scram" +) + +var ( + SHA256 scram.HashGeneratorFcn = sha256.New + SHA512 scram.HashGeneratorFcn = sha512.New +) + +type XDGSCRAMClient struct { + *scram.Client + *scram.ClientConversation + scram.HashGeneratorFcn +} + +func (x *XDGSCRAMClient) Begin(userName, password, authzID string) (err error) { + x.Client, err = x.HashGeneratorFcn.NewClient(userName, password, authzID) + if err != nil { + return err + } + x.ClientConversation = x.Client.NewConversation() + return nil +} + +func (x *XDGSCRAMClient) Step(challenge string) (response string, err error) { + response, err = x.ClientConversation.Step(challenge) + return +} + +func (x *XDGSCRAMClient) Done() bool { + return x.ClientConversation.Done() +} \ No newline at end of file