mirror of
https://github.com/jc21/nginx-proxy-manager.git
synced 2024-08-30 18:22:48 +00:00
75 lines
1.3 KiB
Go
75 lines
1.3 KiB
Go
|
package database
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"os"
|
||
|
|
||
|
"npm/internal/config"
|
||
|
"npm/internal/logger"
|
||
|
|
||
|
"github.com/jmoiron/sqlx"
|
||
|
|
||
|
// Blank import for Sqlite
|
||
|
_ "github.com/mattn/go-sqlite3"
|
||
|
)
|
||
|
|
||
|
var dbInstance *sqlx.DB
|
||
|
|
||
|
// NewDB creates a new connection
|
||
|
func NewDB() {
|
||
|
logger.Info("Creating new DB instance")
|
||
|
db := SqliteDB()
|
||
|
if db != nil {
|
||
|
dbInstance = db
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// GetInstance returns an existing or new instance
|
||
|
func GetInstance() *sqlx.DB {
|
||
|
if dbInstance == nil {
|
||
|
NewDB()
|
||
|
} else if err := dbInstance.Ping(); err != nil {
|
||
|
NewDB()
|
||
|
}
|
||
|
|
||
|
return dbInstance
|
||
|
}
|
||
|
|
||
|
// SqliteDB Create sqlite client
|
||
|
func SqliteDB() *sqlx.DB {
|
||
|
dbFile := fmt.Sprintf("%s/nginxproxymanager.db", config.Configuration.DataFolder)
|
||
|
autocreate(dbFile)
|
||
|
db, err := sqlx.Open("sqlite3", dbFile)
|
||
|
if err != nil {
|
||
|
logger.Error("SqliteError", err)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
return db
|
||
|
}
|
||
|
|
||
|
// Commit will close and reopen the db file
|
||
|
func Commit() *sqlx.DB {
|
||
|
if dbInstance != nil {
|
||
|
err := dbInstance.Close()
|
||
|
if err != nil {
|
||
|
logger.Error("DatabaseCloseError", err)
|
||
|
}
|
||
|
}
|
||
|
NewDB()
|
||
|
return dbInstance
|
||
|
}
|
||
|
|
||
|
func autocreate(dbFile string) {
|
||
|
if _, err := os.Stat(dbFile); os.IsNotExist(err) {
|
||
|
// Create it
|
||
|
logger.Info("Creating Sqlite DB: %s", dbFile)
|
||
|
// nolint: gosec
|
||
|
_, err = os.Create(dbFile)
|
||
|
if err != nil {
|
||
|
logger.Error("FileCreateError", err)
|
||
|
}
|
||
|
Commit()
|
||
|
}
|
||
|
}
|