issues

Github, Jira, Gitlab issues from Plan 9's acme
Log | Files | Refs | README | LICENSE

config.go (1016B)


      1 package main
      2 
      3 import (
      4 	"bufio"
      5 	"fmt"
      6 	"net/url"
      7 	"os"
      8 	"strings"
      9 )
     10 
     11 type Config struct {
     12 	BaseURL  *url.URL
     13 	Username string
     14 	Password string
     15 }
     16 
     17 func readConfig(name string) (*Config, error) {
     18 	f, err := os.Open(name)
     19 	if err != nil {
     20 		return nil, err
     21 	}
     22 	defer f.Close()
     23 	var conf Config
     24 	sc := bufio.NewScanner(f)
     25 	for sc.Scan() {
     26 		line := strings.TrimSpace(sc.Text())
     27 		if strings.HasPrefix(line, "#") {
     28 			continue
     29 		} else if line == "" {
     30 			continue
     31 		}
     32 		k, v, ok := strings.Cut(line, " ")
     33 		if !ok {
     34 			return nil, fmt.Errorf("key %s: expected whitespace after configuration key", k)
     35 		} else if v == "" {
     36 			return nil, fmt.Errorf("key %s: missing parameter", k)
     37 		}
     38 		switch k {
     39 		case "url":
     40 			u, err := url.Parse(v)
     41 			if err != nil {
     42 				return nil, fmt.Errorf("parse base url: %w", err)
     43 			}
     44 			conf.BaseURL = u
     45 		case "username":
     46 			conf.Username = v
     47 		case "password":
     48 			conf.Password = v
     49 		default:
     50 			return nil, fmt.Errorf("unknown configuration key %q", k)
     51 		}
     52 	}
     53 	return &conf, sc.Err()
     54 }