Initial test CLI

master
HimbeerserverDE 2021-09-12 12:03:20 +02:00
parent 9c5662303a
commit 852faf64ff
No known key found for this signature in database
GPG Key ID: 1A651504791E6A8B
3 changed files with 67 additions and 0 deletions

View File

@ -12,6 +12,7 @@ const defaultCmdPrefix = ">"
const defaultSendInterval = 0.09
const defaultUserLimit = 10
const defaultAuthBackend = "sqlite3"
const defaultTelnetAddr = ":40010"
const defaultBindAddr = ":40000"
const defaultListInterval = 300
@ -27,6 +28,7 @@ type Config struct {
SendInterval float32
UserLimit int
AuthBackend string
TelnetAddr string
BindAddr string
Servers []struct {
Name string
@ -83,6 +85,7 @@ func LoadConfig() error {
config.SendInterval = defaultSendInterval
config.UserLimit = defaultUserLimit
config.AuthBackend = defaultAuthBackend
config.TelnetAddr = defaultTelnetAddr
config.BindAddr = defaultBindAddr
config.Groups = make(map[string][]string)
config.UserGroups = make(map[string]string)

8
run.go
View File

@ -29,6 +29,12 @@ func Run() {
log.Fatal("{←|⇶} invalid auth backend")
}
go func() {
if err := telnetServer(); err != nil {
log.Fatal("{←|⇶} ", err)
}
}()
addr, err := net.ResolveUDPAddr("udp", Conf().BindAddr)
if err != nil {
log.Fatal("{←|⇶} ", err)
@ -49,6 +55,8 @@ func Run() {
signal.Notify(sig, os.Interrupt, syscall.SIGTERM, syscall.SIGHUP)
<-sig
close(telnetCh)
if Conf().List.Enable {
if err := announce(listRm); err != nil {
log.Print("{←|⇶} ", err)

56
telnet.go Normal file
View File

@ -0,0 +1,56 @@
package proxy
import (
"bufio"
"errors"
"io"
"log"
"net"
)
var telnetCh = make(chan struct{})
func telnetServer() error {
ln, err := net.Listen("tcp", Conf().TelnetAddr)
if err != nil {
return err
}
defer ln.Close()
for {
select {
case <-telnetCh:
return nil
default:
conn, err := ln.Accept()
if err != nil {
log.Print("{←|⇶} ", err)
continue
}
go handleTelnet(conn)
}
}
}
func handleTelnet(conn net.Conn) {
defer conn.Close()
r, w := bufio.NewReader(conn), bufio.NewWriter(conn)
b := bufio.NewReadWriter(r, w)
b.WriteString("mt-multiserver-proxy console\n")
for {
b.WriteString(">")
_, err := b.ReadString('\n')
if err != nil {
if errors.Is(err, io.EOF) {
return
}
log.Print("{←|⇶} ", err)
continue
}
}
}