mirror of
https://github.com/strongdm/comply
synced 2024-11-14 20:04:53 +00:00
37 lines
1.0 KiB
Go
37 lines
1.0 KiB
Go
package model
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"sync"
|
|
|
|
"github.com/nanobox-io/golang-scribble"
|
|
"github.com/strongdm/comply/internal/config"
|
|
)
|
|
|
|
var dbSingletonOnce sync.Once
|
|
var dbSingleton *scribble.Driver
|
|
|
|
// DB provides a singleton reference to a local json cache; will panic if storage location is not writeable.
|
|
func DB() *scribble.Driver {
|
|
dbSingletonOnce.Do(func() {
|
|
if _, err := os.Stat(filepath.Join(config.ProjectRoot(), ".comply", "cache")); os.IsNotExist(err) {
|
|
err = os.Mkdir(filepath.Join(config.ProjectRoot(), ".comply"), os.FileMode(0755))
|
|
if err != nil {
|
|
panic("could not create directory .comply: " + err.Error())
|
|
}
|
|
err = os.Mkdir(filepath.Join(config.ProjectRoot(), ".comply", "cache"), os.FileMode(0755))
|
|
if err != nil {
|
|
panic("could not create directory .comply/cache: " + err.Error())
|
|
}
|
|
}
|
|
|
|
db, err := scribble.New(filepath.Join(config.ProjectRoot(), ".comply", "cache"), nil)
|
|
if err != nil {
|
|
panic("unable to load comply data: " + err.Error())
|
|
}
|
|
dbSingleton = db
|
|
})
|
|
return dbSingleton
|
|
}
|