auth-runtime/cli/main.go

97 lines
1.7 KiB
Go

package main
import (
"fmt"
"os"
"strings"
)
func fatal(msg string) {
fmt.Fprintln(os.Stderr, msg)
os.Exit(1)
}
func usage() {
fatal(`Usage:
auth-rt token
auth-rt session
auth-rt client-config
auth-rt request <METHOD> <path> [--body JSON] [--api-base URL]`)
}
func main() {
args := os.Args[1:]
if len(args) == 0 {
usage()
}
command := args[0]
switch command {
case "token":
cfg := loadConfig()
session, err := fetchSession(cfg)
if err != nil {
fatal(err.Error())
}
fmt.Printf(`{"token":"%s"}`, session.AccessToken)
fmt.Println()
case "session":
cfg := loadConfig()
session, err := fetchSession(cfg)
if err != nil {
fatal(err.Error())
}
printJSON(session)
case "client-config":
cfg := loadConfig()
config, err := fetchClientConfig(cfg)
if err != nil {
fatal(err.Error())
}
printJSON(config)
case "request":
if len(args) < 3 {
fatal("request requires <METHOD> <path>")
}
method := strings.ToUpper(args[1])
path := args[2]
var body, apiBase string
for i := 3; i < len(args); i++ {
if args[i] == "--body" && i+1 < len(args) {
i++
body = args[i]
} else if args[i] == "--api-base" && i+1 < len(args) {
i++
apiBase = args[i]
}
}
validMethods := map[string]bool{
"GET": true, "POST": true, "PUT": true,
"PATCH": true, "DELETE": true, "HEAD": true,
}
if !validMethods[method] {
fatal("Invalid method: " + method)
}
cfg := loadConfig()
if apiBase != "" {
cfg.APIBase = apiBase
}
result, err := requestWithRetry(cfg, method, path, body)
if err != nil {
fatal(err.Error())
}
printJSON(result)
default:
fatal("Unknown command: " + command)
}
}