Initial commit on Forgejo
Some checks failed
CI and releases / Test and vet (push) Failing after 1s
CI and releases / Build release binaries (push) Has been skipped
CI and releases / Publish GitHub release (push) Has been skipped

Fresh repository history for elektrine/tarakan-client hosted at
https://git.elektrine.com/elektrine/tarakan-client.
This commit is contained in:
Maxfield Luke 2026-07-29 04:56:36 -04:00
commit 58b29a7f84
70 changed files with 12994 additions and 0 deletions

View file

@ -0,0 +1,73 @@
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
}