diff options
author | Steve Manuel <nilslice@gmail.com> | 2016-10-06 03:12:14 -0700 |
---|---|---|
committer | Steve Manuel <nilslice@gmail.com> | 2016-10-06 03:12:14 -0700 |
commit | 698173a6176762f966be0abd1dc77b85e482a03a (patch) | |
tree | 9613cb11d115bbf644b80a84ad12d1b953d574c7 /system/db/init.go | |
parent | 179cb469c9204a463284c5823251e8cea31a4a1e (diff) |
adding config, user and refactored some content query code. all in their own files for better maintainability
Diffstat (limited to 'system/db/init.go')
-rw-r--r-- | system/db/init.go | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/system/db/init.go b/system/db/init.go new file mode 100644 index 0000000..0db2955 --- /dev/null +++ b/system/db/init.go @@ -0,0 +1,94 @@ +package db + +import ( + "encoding/json" + "fmt" + "log" + + "github.com/boltdb/bolt" + "github.com/nilslice/cms/content" + "github.com/nilslice/cms/system/admin/config" +) + +var store *bolt.DB + +// Init creates a db connection, initializes db with required info, sets secrets +func Init() { + var err error + store, err = bolt.Open("store.db", 0666, nil) + if err != nil { + log.Fatal(err) + } + + err = store.Update(func(tx *bolt.Tx) error { + // initialize db with all content type buckets + for t := range content.Types { + _, err := tx.CreateBucketIfNotExists([]byte(t)) + if err != nil { + return err + } + } + + // init db with other buckets as needed + buckets := []string{"_config", "_users"} + for _, name := range buckets { + _, err := tx.CreateBucketIfNotExists([]byte(name)) + if err != nil { + return err + } + } + + // seed db with configs structure if not present + b := tx.Bucket([]byte("_config")) + if b.Get([]byte("settings")) == nil { + j, err := json.Marshal(&config.Config{}) + if err != nil { + return err + } + + err = b.Put([]byte("settings"), j) + if err != nil { + return err + } + } + + // clientSecret, err := Config("client_secret") + // if err != nil { + // return err + // } + + // jwt.Secret(clientSecret) + + return nil + }) + if err != nil { + log.Fatal("Coudn't initialize db with buckets.", err) + } + +} + +// SystemInitComplete checks if there is at least 1 admin user in the db which +// would indicate that the system has been configured to the minimum required. +func SystemInitComplete() bool { + complete := false + + err := store.View(func(tx *bolt.Tx) error { + users := tx.Bucket([]byte("_users")) + err := users.ForEach(func(k, v []byte) error { + complete = true + return nil + }) + if err != nil { + return err + } + + return nil + }) + if err != nil { + complete = false + log.Fatal(err) + } + + fmt.Println("System Init Complete:", complete) + return complete +} |