You've already forked tarr
Initial Commit
This commit is contained in:
123
cmd/autharr/main.go
Normal file
123
cmd/autharr/main.go
Normal file
@ -0,0 +1,123 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"time"
|
||||
|
||||
"git.cryptic.systems/volker.raschek/tarr/pkg/config"
|
||||
"git.cryptic.systems/volker.raschek/tarr/pkg/domain"
|
||||
"github.com/sirupsen/logrus"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var version string
|
||||
|
||||
func main() {
|
||||
rootCmd := &cobra.Command{
|
||||
Args: cobra.RangeArgs(1, 2),
|
||||
Long: `autharr reads the XML or YAML configuration file and prints the API token on stdout`,
|
||||
Example: `autharr /etc/bazarr/config.yaml
|
||||
autharr /etc/lidarr/config.xml`,
|
||||
RunE: runE,
|
||||
Version: version,
|
||||
Use: "autharr",
|
||||
}
|
||||
rootCmd.Flags().Bool("watch", false, "Listens for changes to the configuration and writes the token continuously to the output")
|
||||
|
||||
rootCmd.Execute()
|
||||
}
|
||||
|
||||
func runE(cmd *cobra.Command, args []string) error {
|
||||
watchCfg, err := cmd.Flags().GetBool("watch")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
switch watchCfg {
|
||||
case true:
|
||||
return runWatch(cmd, args)
|
||||
case false:
|
||||
return runSingle(cmd, args)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func runSingle(_ *cobra.Command, args []string) error {
|
||||
cfg, err := config.ReadConfig(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var dest string
|
||||
if len(args) == 2 {
|
||||
dest = args[1]
|
||||
}
|
||||
|
||||
return writeConfig(cfg, dest)
|
||||
}
|
||||
|
||||
func runWatch(cmd *cobra.Command, args []string) error {
|
||||
// Initial output
|
||||
err := runSingle(cmd, args)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Watcher output
|
||||
configChannel, errorChannel := config.WatchConfig(cmd.Context(), args[0])
|
||||
|
||||
var dest string
|
||||
if len(args) == 2 {
|
||||
dest = args[1]
|
||||
}
|
||||
|
||||
waitFor := time.Millisecond * 100
|
||||
timer := time.NewTimer(waitFor)
|
||||
<-timer.C
|
||||
|
||||
var cachedConfig *domain.Config = nil
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-cmd.Context().Done():
|
||||
return nil
|
||||
case err := <-errorChannel:
|
||||
logrus.WithError(err).Errorln("Received from config watcher")
|
||||
case <-timer.C:
|
||||
writeConfig(cachedConfig, dest)
|
||||
case config := <-configChannel:
|
||||
cachedConfig = config
|
||||
timer.Reset(waitFor)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func writeConfig(config *domain.Config, dest string) error {
|
||||
switch {
|
||||
case len(dest) <= 0:
|
||||
_, err := fmt.Fprintf(os.Stdout, "%s", config.API.Token)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
case len(dest) > 0:
|
||||
dirname := filepath.Dir(dest)
|
||||
|
||||
err := os.MkdirAll(dirname, 0755)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
f, err := os.Create(dest)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer func() { _ = f.Close() }()
|
||||
|
||||
f.WriteString(config.API.Token)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
Reference in New Issue
Block a user