commit - e526b14b660a73efce02a2edc9e63bea215208ed
commit + 4bcb477f41800862d0a7c265b40dfccf97180dcc
blob - defa8f4ac66fc7ab6e793dffdccdf927198e404d
blob + 3ee0fe29e984c743a573219152d6c86e8d380abf
--- cmd/Jira/Jira.go
+++ cmd/Jira/Jira.go
-package jira
+package main
import (
"bytes"
"io"
"io/fs"
"log"
- "net/url"
"os"
"path"
"regexp"
return err
}
}
+
stat, err := f.Stat()
if err != nil {
return err
}
-
defer f.Close()
if stat.IsDir() {
dirs, err := f.(fs.ReadDirFile).ReadDir(-1)
w.PrintTabbed(buf.String())
return nil
}
+
b, err := io.ReadAll(f)
if err != nil {
return fmt.Errorf("read %s: %w", stat.Name(), err)
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)
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,
},
}
blob - /dev/null
blob + 8446f85284e03a77313b0d7f5fde033016c1fbfb (mode 644)
--- /dev/null
+++ cmd/Jira/config.go
+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()
+}