| 1751 | } |
| 1752 | |
| 1753 | func (b *Broker) sendAndReceiveSASLSCRAMv1(authSendReceiver func(authBytes []byte) (*SaslAuthenticateResponse, error), scramClient SCRAMClient) error { |
| 1754 | if err := scramClient.Begin(b.conf.Net.SASL.User, b.conf.Net.SASL.Password, b.conf.Net.SASL.SCRAMAuthzID); err != nil { |
| 1755 | return fmt.Errorf("failed to start SCRAM exchange with the server: %w", err) |
| 1756 | } |
| 1757 | |
| 1758 | msg, err := scramClient.Step("") |
| 1759 | if err != nil { |
| 1760 | return fmt.Errorf("failed to advance the SCRAM exchange: %w", err) |
| 1761 | } |
| 1762 | |
| 1763 | for !scramClient.Done() { |
| 1764 | res, err := authSendReceiver([]byte(msg)) |
| 1765 | if err != nil { |
| 1766 | return err |
| 1767 | } |
| 1768 | |
| 1769 | msg, err = scramClient.Step(string(res.SaslAuthBytes)) |
| 1770 | if err != nil { |
| 1771 | Logger.Println("SASL authentication failed", err) |
| 1772 | return err |
| 1773 | } |
| 1774 | } |
| 1775 | |
| 1776 | DebugLogger.Println("SASL authentication succeeded") |
| 1777 | |
| 1778 | return nil |
| 1779 | } |
| 1780 | |
| 1781 | func (b *Broker) createSaslAuthenticateRequest(msg []byte) *SaslAuthenticateRequest { |
| 1782 | authenticateRequest := SaslAuthenticateRequest{SaslAuthBytes: msg} |