Fresh repository history for elektrine/tarakan-client hosted at https://git.elektrine.com/elektrine/tarakan-client.
73 lines
1.9 KiB
Go
73 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/atomine-elektrine/tarakan-client/internal/api"
|
|
)
|
|
|
|
// peelAPIFlags pulls --url/--host/--token from anywhere in args so they work
|
|
// before or after the subcommand name:
|
|
//
|
|
// tarakan --token SECRET report --pickup
|
|
// tarakan report --token SECRET --pickup
|
|
func peelAPIFlags(args []string) (url, token string, rest []string) {
|
|
rest = make([]string, 0, len(args))
|
|
for i := 0; i < len(args); i++ {
|
|
arg := args[i]
|
|
switch {
|
|
case arg == "--url" || arg == "--host":
|
|
if i+1 >= len(args) {
|
|
rest = append(rest, arg)
|
|
continue
|
|
}
|
|
i++
|
|
url = args[i]
|
|
case strings.HasPrefix(arg, "--url="):
|
|
url = strings.TrimPrefix(arg, "--url=")
|
|
case strings.HasPrefix(arg, "--host="):
|
|
url = strings.TrimPrefix(arg, "--host=")
|
|
case arg == "--token":
|
|
if i+1 >= len(args) {
|
|
rest = append(rest, arg)
|
|
continue
|
|
}
|
|
i++
|
|
token = args[i]
|
|
case strings.HasPrefix(arg, "--token="):
|
|
token = strings.TrimPrefix(arg, "--token=")
|
|
default:
|
|
rest = append(rest, arg)
|
|
}
|
|
}
|
|
return url, token, rest
|
|
}
|
|
|
|
func addAPIFlags(fs *flag.FlagSet, url, host, token *string) {
|
|
fs.StringVar(url, "url", "", "Tarakan host URL (overrides saved login and $TARAKAN_URL)")
|
|
fs.StringVar(host, "host", "", "alias for --url")
|
|
fs.StringVar(token, "token", "", "API token (overrides saved login and $TARAKAN_API_TOKEN)")
|
|
}
|
|
|
|
func resolveAPIFlagURL(url, host string) (string, error) {
|
|
url = strings.TrimSpace(url)
|
|
host = strings.TrimSpace(host)
|
|
switch {
|
|
case url != "" && host != "" && url != host:
|
|
return "", fmt.Errorf("--url and --host disagree (%q vs %q)", url, host)
|
|
case url != "":
|
|
return url, nil
|
|
default:
|
|
return host, nil
|
|
}
|
|
}
|
|
|
|
func apiConfigFromFlags(url, host, token string) (api.Config, error) {
|
|
resolved, err := resolveAPIFlagURL(url, host)
|
|
if err != nil {
|
|
return api.Config{}, err
|
|
}
|
|
return api.LoadConfig(resolved, token), nil
|
|
}
|