feat: init api, db, app

This commit is contained in:
2024-11-07 19:07:41 +00:00
parent ab9b3368d1
commit 11b063c2fa
43 changed files with 1487 additions and 137 deletions
+60
View File
@@ -0,0 +1,60 @@
package db
import (
"log"
"os"
"strings"
"gorm.io/driver/postgres"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
var dbInstance *gorm.DB
func Get() *gorm.DB {
if dbInstance == nil {
log.Fatal("database not initialized")
}
return dbInstance
}
func Init() {
// log.Println("Initializing database...")
dsn := os.Getenv("DATABASE_URL")
if dsn == "" {
dsn = "file:data.db?cache=shared&mode=rwc&_journal_mode=WAL"
}
// Open db connection
var con gorm.Dialector
if strings.HasPrefix(dsn, "postgres:") {
con = postgres.Open(dsn)
} else {
con = sqlite.Open(dsn)
}
db, err := gorm.Open(con, &gorm.Config{
SkipDefaultTransaction: true,
})
if err != nil {
log.Fatal(err)
}
dbInstance = db
// Migrate the schema
db.AutoMigrate(Models...)
runSeeders(db)
}
func Close() error {
con, err := dbInstance.DB()
if err != nil {
return err
}
if err := con.Close(); err != nil {
return err
}
return nil
}
+10
View File
@@ -0,0 +1,10 @@
package db
import "rul.sh/vaulterm/models"
var Models = []interface{}{
&models.User{},
&models.UserSession{},
&models.Keychain{},
&models.Host{},
}
+63
View File
@@ -0,0 +1,63 @@
package db
import (
"gorm.io/gorm"
"rul.sh/vaulterm/lib"
"rul.sh/vaulterm/models"
)
type SeedFn func(*gorm.DB) error
var seeders = []SeedFn{
seedUsers,
}
func seedUsers(tx *gorm.DB) error {
var userCount int64
if res := tx.Model(&models.User{}).Count(&userCount); res.Error != nil {
return res.Error
}
// skip seeder if users already exist
if userCount > 0 {
return nil
}
testPasswd, err := lib.HashPassword("123456")
if err != nil {
return err
}
userList := []models.User{
{
Name: "Admin",
Username: "admin",
Password: testPasswd,
Email: "[email protected]",
Role: models.UserRoleAdmin,
},
{
Name: "John Doe",
Username: "user",
Password: testPasswd,
Email: "[email protected]",
},
}
if res := tx.Create(&userList); res.Error != nil {
return res.Error
}
return nil
}
func runSeeders(db *gorm.DB) {
db.Transaction(func(tx *gorm.DB) error {
for _, seed := range seeders {
if err := seed(db); err != nil {
return err
}
}
return nil
})
}