package sasl
import (
"bytes"
)
var plainSep = []byte {0 }
var plain = Mechanism {
Name : "PLAIN" ,
Start : func (m *Negotiator ) (more bool , resp []byte , _ interface {}, err error ) {
username , password , identity := m .credentials ()
payload := make ([]byte , 0 , len (identity )+len (username )+len (password )+2 )
payload = append (payload , identity ...)
payload = append (payload , '\x00' )
payload = append (payload , username ...)
payload = append (payload , '\x00' )
payload = append (payload , password ...)
return false , payload , nil , nil
},
Next : func (m *Negotiator , challenge []byte , _ interface {}) (more bool , resp []byte , _ interface {}, err error ) {
if m .State ()&Receiving != Receiving || m .State ()&StepMask != AuthTextSent {
err = ErrTooManySteps
return
}
parts := bytes .Split (challenge , plainSep )
if len (parts ) != 3 {
err = ErrInvalidChallenge
return
}
if m .Permissions (Credentials (func () (Username , Password , Identity []byte ) {
return parts [1 ], parts [2 ], parts [0 ]
})) {
return
}
err = ErrAuthn
return
},
}
The pages are generated with Golds v0.3.6 . (GOOS=darwin 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 .