mirror of
https://github.com/shazow/ssh-chat.git
synced 2026-10-22 23:52:12 +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 664dbb0976.
* 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)
|
|
}
|
|
}
|