This commit is contained in:
2021-01-07 21:45:59 -05:00
parent 67e7bf9f5a
commit 04924ead5c
28 changed files with 676 additions and 288 deletions

0
internal/auth/ldap.go Normal file
View File

0
internal/auth/local.go Normal file
View File

View File

@@ -1,21 +1,32 @@
package config
import (
"reichard.io/imagini/internal/db"
"gorm.io/gorm"
"os"
)
type ServerConfig struct {
db *gorm.DB
settings *Settings
type Config struct {
DBType string
DBName string
DBPassword string
DataPath string
ConfigPath string
JWTSecret string
}
func NewConfig() {
loadedSettings := loadSettings()
loadedDB := db.OpenDB(&loadedSettings)
newConfig := &Config {
settings: &loadedSettings,
db: &loadedDB,
func NewConfig() *Config {
return &Config{
DBType: getEnv("DATABASE_TYPE", "SQLite"),
DBName: getEnv("DATABASE_NAME", "imagini"),
DBPassword: getEnv("DATABASE_PASSWORD", ""),
ConfigPath: getEnv("CONFIG_PATH", "/config"),
DataPath: getEnv("DATA_PATH", "/data"),
JWTSecret: getEnv("JWT_SECRET", "58b9340c0472cf045db226bc445966524e780cd38bc3dd707afce80c95d4de6f"),
}
}
func getEnv(key, fallback string) string {
if value, ok := os.LookupEnv(key); ok {
return value
}
return fallback
}

View File

@@ -1,32 +0,0 @@
package config
import (
"os"
)
type Settings struct {
DBType string
DBName string
DBPassword string
DataPath string
ConfigPath string
JWTSecret string
}
func loadSettings() *Settings {
return &Settings{
DBType: getEnv("DATABASE_TYPE", "SQLite"),
DBName: getEnv("DATABASE_NAME", "imagini"),
DBPassword: getEnv("DATABASE_PASSWORD", ""),
ConfigPath: getEnv("CONFIG_PATH", "/config"),
DataPath: getEnv("DATA_PATH", "/data"),
JWTSecret: getEnv("JWT_SECRET", "58b9340c0472cf045db226bc445966524e780cd38bc3dd707afce80c95d4de6f"),
}
}
func getEnv(key, fallback string) string {
if value, ok := os.LookupEnv(key); ok {
return value
}
return fallback
}

View File

@@ -1,40 +1,125 @@
package db
import (
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"log"
"path"
"fmt"
"time"
"gorm.io/gorm"
"gorm.io/driver/sqlite"
"reichard.io/imagini/internal/config"
)
func OpenDB(data) *gorm.DB {
database, _ := gorm.Open(sqlite.Open("./db/imagini.db"), &gorm.Config{
PrepareStmt: true,
})
var db *gorm.DB
func ConnectDB(c *config.Config) {
fmt.Printf("%+v\n", c)
if c.DBType == "SQLite" {
dbLocation := path.Join(c.ConfigPath, "imagini.db")
db, _ = gorm.Open(sqlite.Open(dbLocation), &gorm.Config{
PrepareStmt: true,
})
} else {
log.Fatal("ERROR: Unsupported Database")
}
// Initialize Database
database.AutoMigrate(&ServerSetting{})
database.AutoMigrate(&User{})
database.AutoMigrate(&MediaItem{})
database.AutoMigrate(&Tag{})
database.AutoMigrate(&Album{})
return database
db.AutoMigrate(&ServerSetting{})
db.AutoMigrate(&User{})
db.AutoMigrate(&MediaItem{})
db.AutoMigrate(&Tag{})
db.AutoMigrate(&Album{})
}
func ItemsFromAlbum(userID int, albumID int) []MediaItem {
database, _ := gorm.Open(sqlite.Open("./db/imagini.db"), &gorm.Config{})
database.Raw(`
SELECT
MediaItems.*
FROM
MediaAlbums
INNER JOIN MediaItems ON MediaAlbums.mediaID = MediaItems.mediaID
WHERE MediaAlbums.albumID = ? AND MediaItems.userID = ?`, albumID, userID)
return nil
func ItemsFromAlbum(user User, album Album) []MediaItem {
var mediaItems []MediaItem
// db.Table("media_albums").
// Select("media_item.*").
// Joins("INNER JOIN media_items ON media_albums.ID = media_items.Albums").
// Where("media_albums.album_id = ? AND media_items.User = ?", albumID, userID).
db.
//Where("album = ? AND user = ?", albumID, userID).
Find(&mediaItems)
return mediaItems
// db.Raw(`
// SELECT
// MediaItems.*
// FROM
// MediaAlbums
// INNER JOIN MediaItems ON MediaAlbums.mediaID = MediaItems.mediaID
// WHERE MediaAlbums.albumID = ? AND MediaItems.userID = ?`, albumID, userID)
}
func ItemsFromTags(userID int, tagID int) []MediaItem {
return nil
}
// func ItemsFromTags(userID int, tagID int) []MediaItem {
// return nil
// }
//
// func IndexMediaItems(newItems []MediaItem) {
// }
func IndexMediaItems(newItems []MediaItem) {
func PopulateTestData() {
user1 := User{Name: "Evan", Email: "evan@reichard.io", AuthType: "LDAP", Salt: "1234", HashedPWSalt: "1234"}
user2 := User{Name: "Ryan", Email: "ryan@example.com", AuthType: "Local", Salt: "2345", HashedPWSalt: "2345"}
user3 := User{Name: "Bill", Email: "bill@example.com", AuthType: "LDAP", Salt: "3456", HashedPWSalt: "3456"}
mi1 := MediaItem{
User: user1,
EXIFDate: time.Now(),
Latitude: "1234",
Longitude: "1234",
RelPath: "./1234.jpg",
Tags: []Tag{
{Name: "Tag1"},
{Name: "Tag2"},
},
Albums: []Album{
{Name: "Album1"},
{Name: "Album2"},
},
}
mi2 := MediaItem{
User: user2,
EXIFDate: time.Now(),
Latitude: "1234",
Longitude: "1234",
RelPath: "./1234.jpg",
Tags: []Tag{
{Name: "Tag3"},
{Name: "Tag4"},
},
Albums: []Album{
{Name: "Album3"},
{Name: "Album4"},
},
}
mi3 := MediaItem{
User: user3,
EXIFDate: time.Now(),
Latitude: "1234",
Longitude: "1234",
RelPath: "./1234.jpg",
Tags: []Tag{
{Name: "Tag4"},
{Name: "Tag5"},
},
Albums: []Album{
{Name: "Album1"},
{Name: "Album7"},
},
}
// db.Create(&user1)
// db.Create(&user2)
// db.Create(&user3)
db.Create(&mi1)
db.Create(&mi2)
db.Create(&mi3)
}

View File

@@ -19,12 +19,11 @@ type User struct {
AuthType string
Salt string
HashedPWSalt string
MediaItems []MediaItem
}
type MediaItem struct {
gorm.Model
User User
User User `gorm:"ForeignKey:ID"`
EXIFDate time.Time
Latitude string
Longitude string

View File

@@ -1,8 +1,8 @@
package sessions
import (
"github.com/dgrijalva/jwt-go"
)
// import (
// "github.com/dgrijalva/jwt-go"
// )
type Manager struct {