...
1
2
3
4
5
6
7 package auth
8
9 import (
10 "context"
11 )
12
13
14 const PLAIN = "PLAIN"
15
16 func newPlainAuthenticator(cred *Cred) (Authenticator, error) {
17 return &PlainAuthenticator{
18 Username: cred.Username,
19 Password: cred.Password,
20 }, nil
21 }
22
23
24 type PlainAuthenticator struct {
25 Username string
26 Password string
27 }
28
29
30 func (a *PlainAuthenticator) Auth(ctx context.Context, cfg *Config) error {
31 return ConductSaslConversation(ctx, cfg, "$external", &plainSaslClient{
32 username: a.Username,
33 password: a.Password,
34 })
35 }
36
37 type plainSaslClient struct {
38 username string
39 password string
40 }
41
42 var _ SaslClient = (*plainSaslClient)(nil)
43
44 func (c *plainSaslClient) Start() (string, []byte, error) {
45 b := []byte("\x00" + c.username + "\x00" + c.password)
46 return PLAIN, b, nil
47 }
48
49 func (c *plainSaslClient) Next([]byte) ([]byte, error) {
50 return nil, newAuthError("unexpected server challenge", nil)
51 }
52
53 func (c *plainSaslClient) Completed() bool {
54 return true
55 }
56
View as plain text