mirror of
https://github.com/safing/portbase
synced 2025-09-01 10:09:50 +00:00
59 lines
1.1 KiB
Go
59 lines
1.1 KiB
Go
package database
|
|
|
|
import (
|
|
"path"
|
|
"os"
|
|
"fmt"
|
|
"errors"
|
|
)
|
|
|
|
var (
|
|
rootDir string
|
|
)
|
|
|
|
// Initialize initialized the database
|
|
func Initialize(location string) error {
|
|
if initialized.SetToIf(false, true) {
|
|
rootDir = location
|
|
|
|
err := checkRootDir()
|
|
if err != nil {
|
|
return fmt.Errorf("could not create/open database directory (%s): %s", rootDir, err)
|
|
}
|
|
|
|
err = loadRegistry()
|
|
if err != nil {
|
|
return fmt.Errorf("could not load database registry (%s): %s", path.Join(rootDir, registryFileName), err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
return errors.New("database already initialized")
|
|
}
|
|
|
|
func checkRootDir() error {
|
|
// open dir
|
|
dir, err := os.Open(rootDir)
|
|
if err != nil {
|
|
if err == os.ErrNotExist {
|
|
return os.MkdirAll(rootDir, 0700)
|
|
}
|
|
return err
|
|
}
|
|
defer dir.Close()
|
|
|
|
fileInfo, err := dir.Stat()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if fileInfo.Mode().Perm() != 0700 {
|
|
return dir.Chmod(0700)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// getLocation returns the storage location for the given name and type.
|
|
func getLocation(name, storageType string) (location string, err error) {
|
|
return path.Join(rootDir, name, storageType), nil
|
|
}
|