diff --git a/cmd/root.go b/cmd/root.go index 4399ef0..3ac1548 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -66,7 +66,7 @@ func (c *rootCmd) Register() { {"ldap-insecure", false, "Skip certificate verification for the LDAP server."}, {"ldap-search-filter", "(uid=%s)", "LDAP search filter for user lookup."}, {"resources-dir", "/data/resources", "Path to a directory containing custom resources (e.g. background image)."}, - {"database-path", "/data/tinyauth.db", "Path to the Sqlite database file."}, + {"database-path", "/data/tinyauth.db", "Path to the Sqlite database file. Directory will be created if it doesn't exist."}, {"trusted-proxies", "", "Comma separated list of trusted proxies (IP addresses or CIDRs) for correct client IP detection."}, {"disable-analytics", false, "Disable anonymous version collection."}, {"disable-resources", false, "Disable the resources server."}, diff --git a/internal/config/config.go b/internal/config/config.go index f13d97e..c53c4e7 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -37,7 +37,7 @@ type Config struct { LdapInsecure bool `mapstructure:"ldap-insecure"` LdapSearchFilter string `mapstructure:"ldap-search-filter"` ResourcesDir string `mapstructure:"resources-dir"` - DatabasePath string `mapstructure:"database-path" validate:"required"` + DatabasePath string `mapstructure:"database-path"` TrustedProxies string `mapstructure:"trusted-proxies"` DisableAnalytics bool `mapstructure:"disable-analytics"` DisableResources bool `mapstructure:"disable-resources"` diff --git a/internal/service/database_service.go b/internal/service/database_service.go index eb75b9f..30d8803 100644 --- a/internal/service/database_service.go +++ b/internal/service/database_service.go @@ -2,6 +2,9 @@ package service import ( "database/sql" + "fmt" + "os" + "path/filepath" "tinyauth/internal/assets" "github.com/glebarez/sqlite" @@ -27,7 +30,17 @@ func NewDatabaseService(config DatabaseServiceConfig) *DatabaseService { } func (ds *DatabaseService) Init() error { - gormDB, err := gorm.Open(sqlite.Open(ds.config.DatabasePath), &gorm.Config{}) + dbPath := ds.config.DatabasePath + if dbPath == "" { + dbPath = "/data/tinyauth.db" + } + + dir := filepath.Dir(dbPath) + if err := os.MkdirAll(dir, 0755); err != nil { + return fmt.Errorf("failed to create database directory %s: %w", dir, err) + } + + gormDB, err := gorm.Open(sqlite.Open(dbPath), &gorm.Config{}) if err != nil { return err