From 45fa38a4c2f40be7c3b1af3bc1b5e8cd9cac63b9 Mon Sep 17 00:00:00 2001 From: philmacfly Date: Mon, 13 Jun 2022 20:39:30 +0200 Subject: [PATCH] First working version --- .gitignore | 9 +++++++ cmd/cisgo/main.go | 43 ++++++++++++++++++++++++++++++++++ go.mod | 3 +++ pkg/config/config.go | 32 +++++++++++++++++++++++++ pkg/generator/generator.go | 48 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 135 insertions(+) create mode 100644 cmd/cisgo/main.go create mode 100644 go.mod create mode 100644 pkg/config/config.go create mode 100644 pkg/generator/generator.go diff --git a/.gitignore b/.gitignore index adf8f72..b04eed0 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ # https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore # # Binaries for programs and plugins +cisgo *.exe *.exe~ *.dll @@ -21,3 +22,11 @@ # Go workspace file go.work +# Config +*.json + +# outputdir +output/ + +# template file +template.txt \ No newline at end of file diff --git a/cmd/cisgo/main.go b/cmd/cisgo/main.go new file mode 100644 index 0000000..e2d7217 --- /dev/null +++ b/cmd/cisgo/main.go @@ -0,0 +1,43 @@ +package main + +import ( + "flag" + "log" + "text/template" + + "git.vvoid.camp/cisgo/pkg/config" + "git.vvoid.camp/cisgo/pkg/generator" +) + +var confpath string +var templatepath string +var outputdir string + +func main() { + flag.StringVar(&confpath, "c", "./config.json", "path to config file") + flag.StringVar(&templatepath, "t", "./template.txt", "path to template file") + flag.StringVar(&outputdir, "o", "./output", "path to output directory") + flag.Parse() + + // Load config + config, err := config.LoadConfig(confpath) + if err != nil { + log.Fatal("Error loadin Config: " + err.Error()) + } + + // Load template + template, err := template.ParseFiles(templatepath) + if err != nil { + log.Fatal("Error loading template: " + err.Error()) + } + + // Create generator + generator := generator.NewGenerator(config, template) + + // Generate + err = generator.Generate(outputdir) + if err != nil { + log.Fatal("Error generating: " + err.Error()) + } + log.Println("AP configs Generated") +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..00b511d --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module git.vvoid.camp/cisgo + +go 1.17 diff --git a/pkg/config/config.go b/pkg/config/config.go new file mode 100644 index 0000000..e2463d0 --- /dev/null +++ b/pkg/config/config.go @@ -0,0 +1,32 @@ +package config + +import ( + "encoding/json" + "errors" + "os" +) + +type AccessPoint struct { + Name string + Address string +} + +type Config struct { + AccessPoints []AccessPoint +} + +func LoadConfig(path string) (Config, error) { + var result Config + file, err := os.Open(path) + if err != nil { + return result, errors.New("Could not open config file" + err.Error()) + } + defer file.Close() + decoder := json.NewDecoder(file) + err = decoder.Decode(&result) + if err != nil { + return result, errors.New("Could not decode config file" + err.Error()) + } + + return result, nil +} diff --git a/pkg/generator/generator.go b/pkg/generator/generator.go new file mode 100644 index 0000000..c1980db --- /dev/null +++ b/pkg/generator/generator.go @@ -0,0 +1,48 @@ +package generator + +import ( + "errors" + "log" + "os" + "text/template" + + "git.vvoid.camp/cisgo/pkg/config" +) + +type Generator struct { + Config config.Config + Template *template.Template +} + +func NewGenerator(config config.Config, template *template.Template) *Generator { + return &Generator{ + Config: config, + Template: template, + } +} + +func (g *Generator) generateAP(ap config.AccessPoint, outputdir string) error { + f, err := os.Create(outputdir + "/" + ap.Name + ".txt") + if err != nil { + return errors.New("Could not create file: " + err.Error()) + } + defer f.Close() + err = g.Template.Execute(f, ap) + if err != nil { + return errors.New("Could not execute template: " + err.Error()) + } + + return nil +} + +func (g *Generator) Generate(outputdir string) error { + + for _, ap := range g.Config.AccessPoints { + log.Println("Generating AP: " + ap.Name) + err := g.generateAP(ap, outputdir) + if err != nil { + return errors.New("Error generating AP " + ap.Name + ": " + err.Error()) + } + } + return nil +}