MCPcopy Index your code
hub / github.com/cloudflare/cloudflared / Handle

Method Handle

socks/authenticator.go:40–87  ·  view source on GitHub ↗

Handle writes back the version and NoAuth

(reader io.Reader, writer io.Writer)

Source from the content-addressed store, hash-verified

38
39// Handle writes back the version and NoAuth
40func (a *UserPassAuthAuthenticator) Handle(reader io.Reader, writer io.Writer) error {
41 if _, err := writer.Write([]byte{socks5Version, UserPassAuth}); err != nil {
42 return err
43 }
44
45 // Get the version and username length
46 header := []byte{0, 0}
47 if _, err := io.ReadAtLeast(reader, header, 2); err != nil {
48 return err
49 }
50
51 // Ensure compatibility. Someone call E-harmony
52 if header[0] != userAuthVersion {
53 return fmt.Errorf("Unsupported auth version: %v", header[0])
54 }
55
56 // Get the user name
57 userLen := int(header[1])
58 user := make([]byte, userLen)
59 if _, err := io.ReadAtLeast(reader, user, userLen); err != nil {
60 return err
61 }
62
63 // Get the password length
64 if _, err := reader.Read(header[:1]); err != nil {
65 return err
66 }
67
68 // Get the password
69 passLen := int(header[0])
70 pass := make([]byte, passLen)
71 if _, err := io.ReadAtLeast(reader, pass, passLen); err != nil {
72 return err
73 }
74
75 // Verify the password
76 if a.IsValid(string(user), string(pass)) {
77 _, err := writer.Write([]byte{userAuthVersion, authSuccess})
78 return err
79 }
80
81 // password failed. Write back failure
82 if _, err := writer.Write([]byte{userAuthVersion, authFailure}); err != nil {
83 return err
84 }
85
86 return fmt.Errorf("User authentication failed")
87}

Callers

nothing calls this directly

Calls 3

ErrorfMethod · 0.80
WriteMethod · 0.65
ReadMethod · 0.45

Tested by

no test coverage detected