package charakterin import ( "log" "net/http" ) // Renderer wird verwendet, um die Routen (bspw. Login-Route) zu rendern. Damit bleibt Charakterin selbst ohne Template. type Renderer interface { // RenderLoginPage zeigt die Login-Seite an. RenderLoginPage(w http.ResponseWriter, data map[string]interface{}) } // Charakterin ist das tolle Login- und Accountmanagementsystem. type Charakterin struct { renderer Renderer FallbackRoute string } // New erstellt eine neue Instanz von Charakterin. func New() *Charakterin { return &Charakterin{ nil, "/", } } // UseRenderer sagt charakterin, welchen Renderer es benutzen soll. func (c *Charakterin) UseRenderer(renderer Renderer) { c.renderer = renderer } // DisplayLogin zeigt die Route für den Login an, wenn der User nicht bereits eingeloggt ist. func (c *Charakterin) DisplayLogin(w http.ResponseWriter, r *http.Request) { if c.IsLoggedIn(r) { http.Redirect(w, r, c.FallbackRoute, 302) return } if c.renderer == nil { log.Println("charakterin: no renderer set") return } c.renderer.RenderLoginPage(w, make(map[string]interface{})) } // Login versucht einen Charakter einzuloggen. func (c *Charakterin) Login(w http.ResponseWriter, r *http.Request) { } // IsLoggedIn überprüft anhand eines Request, ob der Charakter eingeloggt ist. func (c *Charakterin) IsLoggedIn(r *http.Request) bool { return false }