mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2025-07-04 17:06:49 +00:00
Convert db backend to use Gorm, with basis for support
for Mysql and Postgres in addition to existing Sqlite
This commit is contained in:
79
backend/internal/config/db.go
Normal file
79
backend/internal/config/db.go
Normal file
@ -0,0 +1,79 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const (
|
||||
DatabaseSqlite = "sqlite"
|
||||
DatabasePostgres = "postgres"
|
||||
DatabaseMysql = "mysql"
|
||||
)
|
||||
|
||||
type db struct {
|
||||
Driver string `json:"driver" envconfig:"optional,default=sqlite"`
|
||||
Host string `json:"host" envconfig:"optional,default="`
|
||||
Port int `json:"port" envconfig:"optional,default="`
|
||||
Username string `json:"username" envconfig:"optional,default="`
|
||||
Password string `json:"password" envconfig:"optional,default="`
|
||||
Name string `json:"name" envconfig:"optional,default="`
|
||||
SSLMode string `json:"sslmode" envconfig:"optional,default=deisable"`
|
||||
}
|
||||
|
||||
// GetDriver returns the lowercase driver name
|
||||
func (d *db) GetDriver() string {
|
||||
return strings.ToLower(d.Driver)
|
||||
}
|
||||
|
||||
// GetGormConnectURL is used by Gorm
|
||||
func (d *db) GetGormConnectURL() string {
|
||||
switch d.GetDriver() {
|
||||
case DatabaseSqlite:
|
||||
return fmt.Sprintf("%s/nginxproxymanager.db", Configuration.DataFolder)
|
||||
case DatabasePostgres:
|
||||
return fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%d sslmode=%s TimeZone=UTC",
|
||||
d.Host,
|
||||
d.Username,
|
||||
d.Password,
|
||||
d.Name,
|
||||
d.Port,
|
||||
d.SSLMode,
|
||||
)
|
||||
case DatabaseMysql:
|
||||
return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
|
||||
d.Username,
|
||||
d.Password,
|
||||
d.Host,
|
||||
d.Port,
|
||||
d.Name,
|
||||
)
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
// GetDBMateConnectURL is used by Dbmate
|
||||
func (d *db) GetDBMateConnectURL() string {
|
||||
switch d.GetDriver() {
|
||||
case DatabaseSqlite:
|
||||
return fmt.Sprintf("sqlite:%s/nginxproxymanager.db", Configuration.DataFolder)
|
||||
case DatabasePostgres:
|
||||
return fmt.Sprintf("postgres://%s:%s@%s:%d/%s?sslmode=%s",
|
||||
d.Username,
|
||||
d.Password,
|
||||
d.Host,
|
||||
d.Port,
|
||||
d.Name,
|
||||
d.SSLMode,
|
||||
)
|
||||
case DatabaseMysql:
|
||||
return fmt.Sprintf("mysql://%s:%s@%s:%d/%s",
|
||||
d.Username,
|
||||
d.Password,
|
||||
d.Host,
|
||||
d.Port,
|
||||
d.Name,
|
||||
)
|
||||
}
|
||||
return ""
|
||||
}
|
Reference in New Issue
Block a user