summaryrefslogtreecommitdiff
path: root/config.go
diff options
context:
space:
mode:
Diffstat (limited to 'config.go')
-rw-r--r--config.go112
1 files changed, 112 insertions, 0 deletions
diff --git a/config.go b/config.go
new file mode 100644
index 0000000..6d8786f
--- /dev/null
+++ b/config.go
@@ -0,0 +1,112 @@
+package main
+
+import (
+ "bytes"
+ "fmt"
+ "github.com/go-yaml/yaml"
+ "io"
+ "io/ioutil"
+ "log"
+ "os"
+)
+
+type SCORSHWorker_cfg struct {
+ Name string `yaml:"w_name"`
+ Repos []string `yaml:"w_repos"`
+ Folder string `yaml:"w_folder"`
+ Logfile string `yaml:"w_logfile"`
+ Tagfile string `yaml:"w_tagfile"`
+ Keyrings []string `yaml:"w_keyrings"`
+}
+
+type SCORSHcfg struct {
+ Spooldir string `yaml:"s_spooldir"`
+ Logfile string `yaml:"s_logfile"`
+ LogPrefix string `yaml:"s_logprefix"`
+ Workers []SCORSHWorker_cfg `yaml:"s_workers"`
+}
+
+// Read a configuration from fname or die
+
+func ReadConfig(fname string) *SCORSHcfg {
+
+ data, err := ioutil.ReadFile(fname)
+ if err != nil {
+ log.Fatal("Error while reading file: ", err)
+ }
+
+ var cfg *SCORSHcfg
+ cfg = new(SCORSHcfg)
+
+ // Unmarshal the YAML configuration file into a SCORSHcfg structure
+ err = yaml.Unmarshal(data, cfg)
+ if err != nil {
+ log.Fatal("Error while reading configuration: ", err)
+ }
+
+ fmt.Printf("%s", cfg)
+
+ // If the user has not set a spooldir, crash loudly
+ if cfg.Spooldir == "" {
+ log.Fatal("No spooldir defined in ", fname, ". Exiting\n")
+ }
+
+ // Check if the user has set a custom logprefix
+ if cfg.LogPrefix != "" {
+ log.SetPrefix(cfg.LogPrefix)
+ }
+
+ // Check if the user wants to redirect the logs to a file
+ if cfg.Logfile != "" {
+ f, err := os.Open(cfg.Logfile)
+ if err != nil {
+ log.SetOutput(io.Writer(f))
+ } else {
+ log.Printf("Error opening logfile: \n", err)
+ }
+ }
+
+ // If we got so far, then there is some sort of config in cfg
+ log.Printf("Successfully read config from %s\n", fname)
+
+ return cfg
+
+}
+
+func (cfg *SCORSHcfg) String() string {
+
+ var buff bytes.Buffer
+
+ buff.WriteString("spooldir: ")
+ buff.WriteString(cfg.Spooldir)
+ buff.WriteString("\nlogfile: ")
+ buff.WriteString(cfg.Logfile)
+ buff.WriteString("\nlogprefix: ")
+ buff.WriteString(cfg.LogPrefix)
+ buff.WriteString("\nWorkers: \n")
+
+ for _, w := range cfg.Workers {
+ buff.WriteString("---\n name: ")
+ buff.WriteString(w.Name)
+ buff.WriteString("\n repos: ")
+ for _, r := range w.Repos {
+ buff.WriteString("\n ")
+ buff.WriteString(r)
+ }
+ buff.WriteString("\n folder: ")
+ buff.WriteString(w.Folder)
+ buff.WriteString("\n logfile: ")
+ buff.WriteString(w.Logfile)
+ buff.WriteString("\n tagfile: ")
+ buff.WriteString(w.Tagfile)
+ buff.WriteString("\n keyrings: ")
+ for _, k := range w.Keyrings {
+ buff.WriteString("\n ")
+ buff.WriteString(k)
+ }
+ buff.WriteString("\n...\n")
+
+ }
+
+ return buff.String()
+}