summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorHubert Hirtz <hubert@hirtz.pm>2020-11-29 12:27:52 +0100
committerHubert Hirtz <hubert@hirtz.pm>2020-11-29 12:58:10 +0100
commitc79110642bc0f7accd8ec312ef03535e60256ed1 (patch)
tree6ec42b78bdee45caaea318f5587f7f57ddb3700b /cmd
parentDon't forward outdated typing timeouts (diff)
Make cmd/test usable
Diffstat (limited to 'cmd')
-rw-r--r--cmd/test/main.go119
1 files changed, 71 insertions, 48 deletions
diff --git a/cmd/test/main.go b/cmd/test/main.go
index 5560db8..b900d40 100644
--- a/cmd/test/main.go
+++ b/cmd/test/main.go
@@ -1,87 +1,78 @@
package main
import (
- "bufio"
"crypto/tls"
"flag"
- "log"
+ "fmt"
+ "io"
"net"
"os"
"git.sr.ht/~taiite/senpai"
"git.sr.ht/~taiite/senpai/irc"
+ "golang.org/x/term"
)
-func main() {
- var configPath string
- var address string
- var nick string
- var password string
- var useTLS bool
- flag.StringVar(&configPath, "config", "", "path to the configuration file")
- flag.StringVar(&address, "address", "", "server address")
- flag.StringVar(&nick, "nick", "senpai", "IRC nick/user to use")
- flag.StringVar(&password, "password", "", "SASL password to use")
- flag.BoolVar(&useTLS, "tls", false, "whether to use tls")
- flag.Parse()
-
- if address == "" {
- if configPath == "" {
- configDir, err := os.UserConfigDir()
- if err != nil {
- log.Panicln(err)
- }
- configPath = configDir + "/senpai/senpai.yaml"
- }
+var (
+ configPath string
+ address string
+ nick string
+ password string
+ useTLS bool
+)
- cfg, err := senpai.LoadConfigFile(configPath)
- if err != nil {
- log.Panicln(err)
- }
+func main() {
+ parseFlags()
- address = cfg.Addr
- nick = cfg.Nick
- if cfg.Password != nil {
- password = *cfg.Password
- }
+ oldState, err := term.MakeRaw(0)
+ if err != nil {
+ panic(err)
}
+ defer term.Restore(0, oldState)
+
+ screen := struct {
+ io.Reader
+ io.Writer
+ }{os.Stdin, os.Stdout}
+ t := term.NewTerminal(screen, "> ")
- log.Printf("Connecting to %s...\n", address)
+ fmt.Fprintf(t, "Connecting to %s...\n", address)
var conn net.Conn
- var err error
if useTLS {
conn, err = tls.Dial("tcp", address, nil)
} else {
conn, err = net.Dial("tcp", address)
}
if err != nil {
- log.Panicf("Failed to connect to %s: %v", address, err)
+ panic(fmt.Sprintf("Failed to connect to %s: %v\n", address, err))
}
defer conn.Close()
- log.Printf("Connected. Registration in progress...\n")
+ fmt.Fprintf(t, "Connected. Registration in progress...\n")
- var auth irc.SASLPlain
+ var auth irc.SASLClient
if password != "" {
- auth = irc.SASLPlain{Username: nick, Password: password}
+ auth = &irc.SASLPlain{Username: nick, Password: password}
}
cli, err := irc.NewSession(conn, irc.SessionParams{
Nickname: nick,
Username: nick,
RealName: nick,
- Auth: &auth,
+ Auth: auth,
Debug: true,
})
if err != nil {
- log.Panicf("Failed to connect to %s: %v", address, err)
+ panic(fmt.Sprintf("Failed to connect to %s: %v", address, err))
}
defer cli.Stop()
go func() {
- r := bufio.NewScanner(os.Stdin)
- for r.Scan() {
- line := r.Text()
+ for {
+ line, err := t.ReadLine()
+ if err != nil {
+ break
+ }
cli.SendRaw(line)
}
cli.Stop()
@@ -91,15 +82,47 @@ func main() {
switch ev := ev.(type) {
case irc.RawMessageEvent:
if ev.Outgoing {
- log.Printf("C > S: %s\n", ev.Message)
+ fmt.Fprintf(t, "C > S: %s\n", ev.Message)
} else {
- log.Printf("C < S: %s\n", ev.Message)
+ fmt.Fprintf(t, "C < S: %s\n", ev.Message)
}
case error:
- log.Panicln(ev)
+ panic(ev)
default:
- log.Printf("Event: %T%+v", ev, ev)
+ fmt.Fprintf(t, "=EVENT: %T%+v\n", ev, ev)
+ }
+ }
+ t.SetPrompt("")
+ fmt.Fprintln(t, "Disconnected")
+}
+
+func parseFlags() {
+ flag.StringVar(&configPath, "config", "", "path to the configuration file")
+ flag.StringVar(&address, "address", "", "server address")
+ flag.StringVar(&nick, "nick", "senpai", "IRC nick/user to use")
+ flag.StringVar(&password, "password", "", "SASL password to use")
+ flag.BoolVar(&useTLS, "tls", false, "use tls")
+ flag.Parse()
+
+ if address == "" {
+ if configPath == "" {
+ configDir, err := os.UserConfigDir()
+ if err != nil {
+ panic(err)
+ }
+ configPath = configDir + "/senpai/senpai.yaml"
+ }
+
+ cfg, err := senpai.LoadConfigFile(configPath)
+ if err != nil {
+ panic(err)
+ }
+
+ address = cfg.Addr
+ nick = cfg.Nick
+ if cfg.Password != nil {
+ password = *cfg.Password
}
+ useTLS = true
}
- log.Println("Disconnected")
}