diff --git a/auth.go b/auth.go index 66ee275..9172f21 100644 --- a/auth.go +++ b/auth.go @@ -142,6 +142,17 @@ func (a *Auth) BanFingerprint(authkey string, d time.Duration) { logger.Debugf("Added to banned: %q (for %s)", authItem.Key(), d) } +func (a *Auth) Banned() []string { + r := []string{} + iterGet := func(key string, _ set.Item) error { + r = append(r, key) + return nil + } + a.banned.Each(iterGet) + a.bannedAddr.Each(iterGet) + return r +} + // Ban will set an IP address as banned. func (a *Auth) BanAddr(addr net.Addr, d time.Duration) { authItem := set.StringItem(newAuthAddr(addr)) diff --git a/host.go b/host.go index 34a19df..9912fa7 100644 --- a/host.go +++ b/host.go @@ -1,6 +1,7 @@ package sshchat import ( + "bytes" "errors" "fmt" "io" @@ -454,6 +455,29 @@ func (h *Host) InitCommands(c *chat.Commands) { }, }) + c.Add(chat.Command{ + Op: true, + Prefix: "/banned", + Help: "List the current ban conditions.", + Handler: func(room *chat.Room, msg message.CommandMsg) error { + if !room.IsOp(msg.From()) { + return errors.New("must be op") + } + + banned := h.auth.Banned() + + buf := bytes.Buffer{} + fmt.Fprintf(&buf, "Banned:\n") + for _, key := range banned { + fmt.Fprintf(&buf, " %s\n", key) + } + + room.Send(message.NewSystemMsg(buf.String(), msg.From())) + + return nil + }, + }) + c.Add(chat.Command{ Op: true, Prefix: "/motd",