96 lines
1.5 KiB
Go
96 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"flag"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
|
|
"github.com/Xe/Tetra/atheme"
|
|
"github.com/howeyc/gopass"
|
|
)
|
|
|
|
var (
|
|
client *atheme.Atheme
|
|
serverString = flag.String("server", "http://127.0.0.1:8080/xmlrpc", "what http://server:port to connect to")
|
|
cookie = flag.String("cookie", "", "authentication cookie to use")
|
|
user = flag.String("user", "", "username to use")
|
|
)
|
|
|
|
func main() {
|
|
flag.Parse()
|
|
|
|
command := flag.Arg(0)
|
|
if command == "" {
|
|
flag.Usage()
|
|
os.Exit(1)
|
|
}
|
|
|
|
var rest []string
|
|
|
|
if n := flag.NArg(); n > 1 {
|
|
rest = flag.Args()[1:]
|
|
}
|
|
|
|
_ = rest
|
|
|
|
var err error
|
|
|
|
client, err = atheme.NewAtheme(*serverString)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
switch command {
|
|
case "login":
|
|
var username string
|
|
var password string
|
|
scanner := bufio.NewScanner(os.Stdin)
|
|
|
|
fmt.Print("Username: ")
|
|
|
|
for {
|
|
scanner.Scan()
|
|
username = scanner.Text()
|
|
|
|
if scanner.Err() == nil {
|
|
break
|
|
}
|
|
|
|
fmt.Print("Username: ")
|
|
}
|
|
|
|
fmt.Print("Password: ")
|
|
for {
|
|
password = string(gopass.GetPasswdMasked())
|
|
if password != "" {
|
|
break
|
|
}
|
|
fmt.Print("Password: ")
|
|
}
|
|
|
|
err = client.Login(username, password)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
fmt.Printf("Authcookie: %s\n", client.Authcookie)
|
|
|
|
case "command":
|
|
if *cookie == "" {
|
|
log.Fatal("specify cookie")
|
|
}
|
|
|
|
client.Authcookie = *cookie
|
|
client.Account = *user
|
|
|
|
output, err := client.Command(rest...)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
fmt.Println(output)
|
|
}
|
|
}
|