commit 4bcb477f41800862d0a7c265b40dfccf97180dcc
parent e526b14b660a73efce02a2edc9e63bea215208ed
Author: Oliver Lowe <oliver.lowe@audinate.com>
Date: Wed, 12 Mar 2025 16:33:11 +1100
cmd/Jira: more options in config file
Diffstat:
2 files changed, 62 insertions(+), 15 deletions(-)
diff --git a/cmd/Jira/Jira.go b/cmd/Jira/Jira.go
@@ -1,4 +1,4 @@
-package jira
+package main
import (
"bytes"
@@ -8,7 +8,6 @@ import (
"io"
"io/fs"
"log"
- "net/url"
"os"
"path"
"regexp"
@@ -151,11 +150,11 @@ func (w *awin) Get(f fs.File) error {
return err
}
}
+
stat, err := f.Stat()
if err != nil {
return err
}
-
defer f.Close()
if stat.IsDir() {
dirs, err := f.(fs.ReadDirFile).ReadDir(-1)
@@ -174,6 +173,7 @@ func (w *awin) Get(f fs.File) error {
w.PrintTabbed(buf.String())
return nil
}
+
b, err := io.ReadAll(f)
if err != nil {
return fmt.Errorf("read %s: %w", stat.Name(), err)
@@ -246,10 +246,7 @@ func readCreds(name string) (username, password string, err error) {
return u, p, nil
}
-var hostFlag = flag.String("h", "jira.atlassian.com", "")
-
func main() {
- flag.Parse()
home, err := os.UserHomeDir()
if err != nil {
log.Fatalf("find user config dir: %v", err)
@@ -261,24 +258,20 @@ func main() {
fmt.Fprintln(os.Stderr, usage)
os.Exit(2)
}
- user, pass, err := readCreds(credPath)
+ config, err := readConfig(credPath)
if err != nil {
- log.Fatalf("read credentials: %v", err)
+ log.Fatalf("read configuration: %v", err)
}
// srv := newFakeServer("testdata")
// defer srv.Close()
- u, err := url.Parse("https://" + *hostFlag + "/rest/api/3")
- if err != nil {
- log.Fatalf("parse api root url: %v", err)
- }
fsys := &jira.FS{
Client: &jira.Client{
Debug: false,
- APIRoot: u,
- Username: user,
- Password: pass,
+ APIRoot: config.BaseURL,
+ Username: config.Username,
+ Password: config.Password,
},
}
diff --git a/cmd/Jira/config.go b/cmd/Jira/config.go
@@ -0,0 +1,54 @@
+package main
+
+import (
+ "bufio"
+ "fmt"
+ "net/url"
+ "os"
+ "strings"
+)
+
+type Config struct {
+ BaseURL *url.URL
+ Username string
+ Password string
+}
+
+func readConfig(name string) (*Config, error) {
+ f, err := os.Open(name)
+ if err != nil {
+ return nil, err
+ }
+ defer f.Close()
+ var conf Config
+ sc := bufio.NewScanner(f)
+ for sc.Scan() {
+ line := strings.TrimSpace(sc.Text())
+ if strings.HasPrefix(line, "#") {
+ continue
+ } else if line == "" {
+ continue
+ }
+ k, v, ok := strings.Cut(line, " ")
+ if !ok {
+ return nil, fmt.Errorf("key %s: expected whitespace after configuration key", k)
+ } else if v == "" {
+ return nil, fmt.Errorf("key %s: missing parameter", k)
+ }
+ switch k {
+ case "url":
+ u, err := url.Parse(v)
+ if err != nil {
+ return nil, fmt.Errorf("parse base url: %w", err)
+ }
+ conf.BaseURL = u
+ case "username":
+ conf.Username = v
+ case "password":
+ conf.Password = v
+ default:
+ return nil, fmt.Errorf("unknown configuration key %q", k)
+ }
+ }
+ return &conf, sc.Err()
+}