Stripped lots of boilerplate prepare for minimal test branch
This commit is contained in:
99
src/main.go
Normal file
99
src/main.go
Normal file
@@ -0,0 +1,99 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"html/template"
|
||||
"log"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"gorm.io/driver/postgres"
|
||||
"gorm.io/driver/sqlite"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// ===================== Globals =====================
|
||||
|
||||
var (
|
||||
db *gorm.DB
|
||||
baseURL string
|
||||
cookieDomain string
|
||||
)
|
||||
|
||||
const (
|
||||
PORT = "18765"
|
||||
)
|
||||
|
||||
// ===================== Templates =====================
|
||||
|
||||
var tpl = template.Must(template.New("").Funcs(template.FuncMap{
|
||||
"fmtTime": func(t time.Time) string { return t.Local().Format("1000-01-01 10:10") },
|
||||
}).ParseGlob("templates/*.html"))
|
||||
|
||||
// ===================== Main =====================
|
||||
|
||||
func main() {
|
||||
log.SetFlags(log.LstdFlags | log.Lshortfile)
|
||||
|
||||
baseURL = os.Getenv("APP_BASE_URL")
|
||||
if baseURL == "" {
|
||||
baseURL = "http://localhost:" + PORT
|
||||
}
|
||||
cookieDomain = os.Getenv("APP_COOKIE_DOMAIN")
|
||||
|
||||
// DB connect
|
||||
var err error
|
||||
dsn := os.Getenv("DATABASE_URL")
|
||||
if dsn != "" {
|
||||
db, err = gorm.Open(postgres.Open(dsn), &gorm.Config{})
|
||||
if err != nil {
|
||||
log.Fatal("postgres connect:", err)
|
||||
}
|
||||
log.Println("using Postgres")
|
||||
} else {
|
||||
db, err = gorm.Open(sqlite.Open("qrank.db"), &gorm.Config{})
|
||||
if err != nil {
|
||||
log.Fatal("sqlite connect:", err)
|
||||
}
|
||||
log.Println("using SQLite qrank.db")
|
||||
}
|
||||
|
||||
if err := db.AutoMigrate(&User{}, &Session{}, &LoginToken{}, &Table{}, &Game{}, &GamePlayer{}); err != nil {
|
||||
log.Fatal("migrate:", err)
|
||||
}
|
||||
|
||||
r := gin.Default()
|
||||
|
||||
// Serve static files from the current directory
|
||||
r.Static("/assets", "./assets")
|
||||
|
||||
// Routes
|
||||
r.GET("/", getIndex)
|
||||
r.GET("/login", getLogin)
|
||||
r.POST("/login", postLogin)
|
||||
r.GET("/magic", getMagic)
|
||||
|
||||
// Authenticated routes
|
||||
r.GET("/enter", requireAuth(), getEnter)
|
||||
r.POST("/enter", requireAuth(), postEnter)
|
||||
|
||||
// QR-prepped table routes
|
||||
r.GET("/t/:tslug/enter", requireAuth(), getEnter)
|
||||
r.POST("/t/:tslug/enter", requireAuth(), postEnter)
|
||||
|
||||
r.GET("/history", requireAuth(), getHistory)
|
||||
r.GET("/leaderboard", requireAuth(), getLeaderboard)
|
||||
|
||||
r.GET("/u/:slug", requireAuth(), getUserView)
|
||||
r.GET("/me", requireAuth(), getMe)
|
||||
r.POST("/me", requireAuth(), postMe)
|
||||
|
||||
bind := os.Getenv("APP_BIND")
|
||||
if bind == "" {
|
||||
bind = ":" + PORT
|
||||
}
|
||||
log.Println("listening on", bind, "base:", baseURL)
|
||||
if err := r.Run(bind); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user