package main import ( "database/sql" "fmt" "log" "net/http" "strings" "fagott.pw/charakterin" "fagott.pw/grilist/eventlogging" "fagott.pw/grilist/frontend" "fagott.pw/grilist/grilist" "fagott.pw/grilist/modules/grils" "fagott.pw/grilist/modules/likes" "fagott.pw/grilist/modules/lists" "fagott.pw/grilist/modules/search" "fagott.pw/grilist/modules/series" "fagott.pw/grilist/modules/tags" "fagott.pw/grilist/modules/user" "fagott.pw/nsa" "github.com/julienschmidt/httprouter" _ "github.com/lib/pq" ) var app *grilist.Grilist func index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { if strings.Index(r.Referer(), "127.0.0.1") != -1 { w.WriteHeader(200) return } http.Redirect(w, r, "/dashboard", 301) } func loadModule(mod grilist.Module) error { if _, ok := app.Modules[mod.Name()]; ok { return fmt.Errorf("module with name %s already exists", mod.Name()) } app.Modules[mod.Name()] = mod mod.Init(app) return nil } func main() { config := grilist.LoadConfig() db, err := sql.Open("postgres", config.DBConnectionString()) if err != nil { log.Fatal(err) } if err := db.Ping(); err != nil { log.Fatal(err) } log.Println("database connection established") if config.EnableNSA { if err := nsa.Init(db); err != nil { panic(err) } if err := nsa.SetEvents(eventlogging.Events); err != nil { panic(err) } } functions := charakterin.GetRendererFunctions() renderer := frontend.New("views", functions) login := charakterin.New(db) login.UseRenderer(renderer) if config.AnilistAPI.ClientID != "" && config.AnilistAPI.ClientSecret != "" { login.EnableAnilistAPI(config.AnilistAPI.ClientID, config.AnilistAPI.ClientSecret) } router := httprouter.New() app = &grilist.Grilist{ config, renderer, login, db, make(map[string]grilist.Module), router, } router.GET("/", index) router.GET("/health", app.HealthCheck) router.HandlerFunc("GET", "/login", login.DisplayLogin) router.HandlerFunc("POST", "/login", login.Login) router.HandlerFunc("GET", "/settings", login.DisplayUserSettings) router.HandlerFunc("POST", "/settings", login.SaveUserRoute) router.HandlerFunc("GET", "/logout", login.Logout) router.HandlerFunc("GET", "/register", login.DisplayRegistration) router.HandlerFunc("POST", "/register", login.Register) router.GET("/settings/api/:type/couple", login.DisplayAPICouplePage) router.POST("/settings/api/:type/couple", login.CoupleAPI) fs := http.FileServer(http.Dir("assets")) http.Handle("/assets/", http.StripPrefix("/assets/", fs)) http.Handle("/", router) // Module laden loadModule(grils.New()) loadModule(lists.New()) loadModule(tags.New()) loadModule(search.New()) loadModule(user.New()) loadModule(series.New()) loadModule(likes.New()) router.GET("/dashboard", viewDashboard) log.Fatal(http.ListenAndServe(":8080", nil)) }