package main import ( "database/sql" "fmt" "log" "net/http" "fagott.pw/charakterin" "fagott.pw/grilist/frontend" "fagott.pw/grilist/grilist" "fagott.pw/grilist/modules/lists" "github.com/julienschmidt/httprouter" _ "github.com/lib/pq" ) var app *grilist.Grilist func index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { user, err := app.Charakterin.GetUserFromRequest(r) if err != nil { http.Redirect(w, r, "/login", 302) return } data := make(map[string]interface{}) data["username"] = user.GetName() app.Renderer.RenderPage("index", w, data) } 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 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") renderer := frontend.New("views") login := charakterin.New(db) login.UseRenderer(renderer) router := httprouter.New() app = &grilist.Grilist{ config, renderer, login, db, make(map[string]grilist.Module), router, } router.HandlerFunc("GET", "/login", login.DisplayLogin) router.HandlerFunc("POST", "/login", login.Login) router.HandlerFunc("GET", "/logout", login.Logout) router.HandlerFunc("GET", "/register", login.DisplayRegistration) router.HandlerFunc("POST", "/register", login.Register) router.GET("/", index) fs := http.FileServer(http.Dir("assets")) http.Handle("/assets/", http.StripPrefix("/assets/", fs)) http.Handle("/", router) // Module laden loadModule(lists.New()) log.Fatal(http.ListenAndServe(":8080", nil)) }