package pgproto3
import (
"bytes"
"encoding/binary"
"encoding/json"
"errors"
"github.com/jackc/pgx/v5/internal/pgio"
)
type AuthenticationSASL struct {
AuthMechanisms []string
}
func (*AuthenticationSASL ) Backend () {}
func (*AuthenticationSASL ) AuthenticationResponse () {}
func (dst *AuthenticationSASL ) Decode (src []byte ) error {
if len (src ) < 4 {
return errors .New ("authentication message too short" )
}
authType := binary .BigEndian .Uint32 (src )
if authType != AuthTypeSASL {
return errors .New ("bad auth type" )
}
authMechanisms := src [4 :]
for len (authMechanisms ) > 1 {
idx := bytes .IndexByte (authMechanisms , 0 )
if idx == -1 {
return &invalidMessageFormatErr {messageType : "AuthenticationSASL" , details : "unterminated string" }
}
dst .AuthMechanisms = append (dst .AuthMechanisms , string (authMechanisms [:idx ]))
authMechanisms = authMechanisms [idx +1 :]
}
return nil
}
func (src *AuthenticationSASL ) Encode (dst []byte ) []byte {
dst = append (dst , 'R' )
sp := len (dst )
dst = pgio .AppendInt32 (dst , -1 )
dst = pgio .AppendUint32 (dst , AuthTypeSASL )
for _ , s := range src .AuthMechanisms {
dst = append (dst , []byte (s )...)
dst = append (dst , 0 )
}
dst = append (dst , 0 )
pgio .SetInt32 (dst [sp :], int32 (len (dst [sp :])))
return dst
}
func (src AuthenticationSASL ) MarshalJSON () ([]byte , error ) {
return json .Marshal (struct {
Type string
AuthMechanisms []string
}{
Type : "AuthenticationSASL" ,
AuthMechanisms : src .AuthMechanisms ,
})
}
The pages are generated with Golds v0.6.7 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds .