initial working version
This commit is contained in:
parent
db6b90134d
commit
d986a0b31a
19 changed files with 1430 additions and 0 deletions
64
internal/config/config.go
Normal file
64
internal/config/config.go
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
package config
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/adrg/xdg"
|
||||
toml "github.com/pelletier/go-toml/v2"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
Issuer string `toml:"issuer"`
|
||||
ClientID string `toml:"client_id"`
|
||||
ClientSecret string `toml:"client_secret,omitempty"`
|
||||
CacheHost string `toml:"cache_host"`
|
||||
NetrcPath string `toml:"netrc_path"`
|
||||
}
|
||||
|
||||
// Load reads the config from the given path, or from the default XDG location.
|
||||
func Load(path string) (*Config, error) {
|
||||
if path == "" {
|
||||
path = filepath.Join(xdg.ConfigHome, "nix-cache-login", "config.toml")
|
||||
}
|
||||
|
||||
data, err := os.ReadFile(path)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("reading config file: %w", err)
|
||||
}
|
||||
|
||||
var cfg Config
|
||||
if err := toml.Unmarshal(data, &cfg); err != nil {
|
||||
return nil, fmt.Errorf("parsing config file: %w", err)
|
||||
}
|
||||
|
||||
cfg.NetrcPath = os.ExpandEnv(cfg.NetrcPath)
|
||||
|
||||
if err := cfg.validate(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &cfg, nil
|
||||
}
|
||||
|
||||
func (c *Config) validate() error {
|
||||
if c.Issuer == "" {
|
||||
return fmt.Errorf("config: issuer is required")
|
||||
}
|
||||
if c.ClientID == "" {
|
||||
return fmt.Errorf("config: client_id is required")
|
||||
}
|
||||
if c.CacheHost == "" {
|
||||
return fmt.Errorf("config: cache_host is required")
|
||||
}
|
||||
if c.NetrcPath == "" {
|
||||
return fmt.Errorf("config: netrc_path is required")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// RefreshTokenPath returns the path to the stored refresh token.
|
||||
func RefreshTokenPath() string {
|
||||
return filepath.Join(xdg.ConfigHome, "nix-cache-login", "refresh-token")
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue