mirror of
https://github.com/shazow/ssh-chat.git
synced 2025-04-12 15:17:16 +03:00
* move loading whitelist+ops from file to auth and save the loaded files fro reloading * add /whitelist command with lots of open questions * add test for /whitelist * gofmt * use the same auth (the tests don't seem to care, but htis is more right) * mutex whitelistMode and remove some deferred TODOs * s/whitelist/allowlist/ (user-facing); move helper functions outside the handler function * check for ops in Auth.CheckPublicKey and move /allowlist handling to helper functions * possibly fix the test timeout in HostNameCollision * Revert "possibly fix the test timeout in HostNameCollision" (didn't work) This reverts commit 664dbb0976f8f10ea7a673950a879591c2e7c320. * managed to reproduce the timeout after updating, hopefully it's the same one * remove some unimportant TODOs; add a message when reverify kicks people; add a reverify test * add client connection with key; add test for /allowlist import AGE * hopefully make test less racy * s/whitelist/allowlist/ * fix crash on specifying exactly one more -v flag than the max level * use a key loader function to move file reading out of auth * add loader to allowlist test * minor message changes * add --whitelist with a warning; update tests for messages * apparently, we have another prefix * check names directly on the User objects in TestHostNameCollision * not allowlisted -> not allowed * small message change * update test
90 lines
1.5 KiB
Go
90 lines
1.5 KiB
Go
package sshd
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
"testing"
|
|
)
|
|
|
|
func TestServerInit(t *testing.T) {
|
|
config := MakeNoAuth()
|
|
s, err := ListenSSH("localhost:badport", config)
|
|
if err == nil {
|
|
t.Fatal("should fail on bad port")
|
|
}
|
|
|
|
s, err = ListenSSH("localhost:0", config)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
err = s.Close()
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|
|
|
|
func TestServeTerminals(t *testing.T) {
|
|
signer, err := NewRandomSigner(1024)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
config := MakeNoAuth()
|
|
config.AddHostKey(signer)
|
|
|
|
s, err := ListenSSH("localhost:0", config)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
terminals := make(chan *Terminal)
|
|
s.HandlerFunc = func(term *Terminal) {
|
|
terminals <- term
|
|
}
|
|
go s.Serve()
|
|
|
|
go func() {
|
|
// Accept one terminal, read from it, echo back, close.
|
|
term := <-terminals
|
|
term.SetPrompt("> ")
|
|
|
|
line, err := term.ReadLine()
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
_, err = term.Write([]byte("echo: " + line + "\n"))
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
term.Close()
|
|
}()
|
|
|
|
host := s.Addr().String()
|
|
name := "foo"
|
|
|
|
err = ConnectShell(host, name, func(r io.Reader, w io.WriteCloser) error {
|
|
// Consume if there is anything
|
|
buf := new(bytes.Buffer)
|
|
w.Write([]byte("hello\r\n"))
|
|
|
|
buf.Reset()
|
|
_, err := io.Copy(buf, r)
|
|
|
|
expected := "> hello\r\necho: hello\r\n"
|
|
actual := buf.String()
|
|
if actual != expected {
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
t.Errorf("Got %q; expected %q", actual, expected)
|
|
}
|
|
s.Close()
|
|
return nil
|
|
})
|
|
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|