Improve template handling
All checks were successful
the build was successful

This commit is contained in:
Peter Stuifzand 2018-09-01 13:35:02 +02:00
parent d7834ebf53
commit 218f3ffa08
WARNING! Although there is a key with this ID in the database it does not verify this commit! This commit is SUSPICIOUS.
GPG Key ID: 374322D56E5209E8
3 changed files with 87 additions and 31 deletions

View File

@ -38,8 +38,8 @@ import (
) )
type mainHandler struct { type mainHandler struct {
Backend *memoryBackend Backend *memoryBackend
Templates *template.Template TemplateDir string
} }
type session struct { type session struct {
@ -110,16 +110,27 @@ func newMainHandler(backend *memoryBackend) (*mainHandler, error) {
} }
templateDir = strings.TrimRight(templateDir, "/") templateDir = strings.TrimRight(templateDir, "/")
h.TemplateDir = templateDir
templates, err := template.ParseGlob(fmt.Sprintf("%s/*.html", templateDir))
if err != nil {
return nil, err
}
h.Templates = templates
return h, nil return h, nil
} }
func (h *mainHandler) templateFile(filename string) string {
return fmt.Sprintf("%s/%s", h.TemplateDir, filename)
}
func (h *mainHandler) renderTemplate(w io.Writer, filename string, data interface{}) error {
t, err := template.ParseFiles(h.templateFile("base.html"), h.templateFile(filename))
if err != nil {
return err
}
err = t.ExecuteTemplate(w, filename, data)
if err != nil {
return err
}
return nil
}
func getSessionCookie(w http.ResponseWriter, r *http.Request) string { func getSessionCookie(w http.ResponseWriter, r *http.Request) string {
c, err := r.Cookie("session") c, err := r.Cookie("session")
sessionVar := util.RandStringBytes(16) sessionVar := util.RandStringBytes(16)
@ -200,6 +211,10 @@ func isLoggedIn(backend *memoryBackend, sess *session) bool {
return false return false
} }
if !auth {
return true
}
if sess.Me != backend.Me { if sess.Me != backend.Me {
return false return false
} }
@ -284,10 +299,9 @@ func (h *mainHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
page.Session = sess page.Session = sess
page.Baseurl = strings.TrimRight(os.Getenv("EKSTER_BASEURL"), "/") page.Baseurl = strings.TrimRight(os.Getenv("EKSTER_BASEURL"), "/")
err = h.Templates.ExecuteTemplate(w, "index.html", page) err = h.renderTemplate(w, "index.html", page)
if err != nil { if err != nil {
fmt.Fprintf(w, "ERROR: %q\n", err) fmt.Fprintf(w, "ERROR: %s\n", err)
return
} }
return return
} else if r.URL.Path == "/session/callback" { } else if r.URL.Path == "/session/callback" {
@ -351,10 +365,9 @@ func (h *mainHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
} }
} }
err = h.Templates.ExecuteTemplate(w, "channel.html", page) err = h.renderTemplate(w, "channel.html", page)
if err != nil { if err != nil {
fmt.Fprintf(w, "ERROR: %q\n", err) fmt.Fprintf(w, "ERROR: %s\n", err)
return
} }
return return
} else if r.URL.Path == "/logs" { } else if r.URL.Path == "/logs" {
@ -375,10 +388,9 @@ func (h *mainHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
var page logsPage var page logsPage
page.Session = sess page.Session = sess
err = h.Templates.ExecuteTemplate(w, "logs.html", page) err = h.renderTemplate(w, "logs.html", page)
if err != nil { if err != nil {
fmt.Fprintf(w, "ERROR: %q\n", err) fmt.Fprintf(w, "ERROR: %s\n", err)
return
} }
return return
} else if r.URL.Path == "/settings" { } else if r.URL.Path == "/settings" {
@ -399,12 +411,11 @@ func (h *mainHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
var page settingsPage var page settingsPage
page.Session = sess page.Session = sess
page.Channels, err = h.Backend.ChannelsGetList() page.Channels, err = h.Backend.ChannelsGetList()
//page.Feeds = h.Backend.Feeds // page.Feeds = h.Backend.Feeds
err = h.Templates.ExecuteTemplate(w, "settings.html", page) err = h.renderTemplate(w, "settings.html", page)
if err != nil { if err != nil {
fmt.Fprintf(w, "ERROR: %q\n", err) fmt.Fprintf(w, "ERROR: %s\n", err)
return
} }
return return
} else if r.URL.Path == "/auth" { } else if r.URL.Path == "/auth" {
@ -467,10 +478,9 @@ func (h *mainHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
} }
page.App = app page.App = app
err = h.Templates.ExecuteTemplate(w, "auth.html", page) err = h.renderTemplate(w, "auth.html", page)
if err != nil { if err != nil {
fmt.Fprintf(w, "ERROR: %q\n", err) fmt.Fprintf(w, "ERROR: %s\n", err)
return
} }
return return
} }
@ -591,9 +601,9 @@ func (h *mainHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
return return
} }
code := r.FormValue("code") code := r.FormValue("code")
//clientID := r.FormValue("client_id") // clientID := r.FormValue("client_id")
//redirectURI := r.FormValue("redirect_uri") // redirectURI := r.FormValue("redirect_uri")
//me := r.FormValue("me") // me := r.FormValue("me")
values, err := redis.Values(conn.Do("HGETALL", "code:"+code)) values, err := redis.Values(conn.Do("HGETALL", "code:"+code))
if err != nil { if err != nil {
@ -635,7 +645,7 @@ func (h *mainHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
} else if r.URL.Path == "/settings/channel" { } else if r.URL.Path == "/settings/channel" {
defer h.Backend.save() defer h.Backend.save()
uid := r.FormValue("uid") uid := r.FormValue("uid")
//name := r.FormValue("name") // name := r.FormValue("name")
excludeRegex := r.FormValue("exclude_regex") excludeRegex := r.FormValue("exclude_regex")
if setting, e := h.Backend.Settings[uid]; e { if setting, e := h.Backend.Settings[uid]; e {

49
templates/base.html Normal file
View File

@ -0,0 +1,49 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{template "title" .}}</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.1/css/bulma.min.css">
</head>
<body>
<section class="section">
<div class="container">
<nav class="navbar" role="navigation" aria-label="main navigation">
<div class="navbar-brand">
<a class="navbar-item" href="/">
Ekster
</a>
<a role="button" class="navbar-burger" aria-label="menu" aria-expanded="false" data-target="menu">
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
</a>
</div>
{{ if .Session.LoggedIn }}
<div id="menu" class="navbar-menu">
<a class="navbar-item" href="/settings">
Settings
</a>
<a class="navbar-item" href="/logs">
Logs
</a>
<a class="navbar-item" href="{{ .Session.Me }}">
Profile
</a>
</div>
{{ end }}
</nav>
<h1 class="title">Ekster - Microsub server</h1>
{{template "content" .}}
</div>
</section>
</body>
</html>
{{define "header"}}{{end}}
{{define "content"}}{{end}}
{{define "footer"}}{{end}}

View File

@ -9,8 +9,6 @@
<body> <body>
<section class="section"> <section class="section">
<div class="container"> <div class="container">
<nav class="navbar" role="navigation" aria-label="main navigation"> <nav class="navbar" role="navigation" aria-label="main navigation">
<div class="navbar-brand"> <div class="navbar-brand">
<a class="navbar-item" href="/"> <a class="navbar-item" href="/">
@ -44,7 +42,6 @@
{{ if .Session.LoggedIn }} {{ if .Session.LoggedIn }}
{{ end }} {{ end }}
<h2 class="subtitle">Channels</h2> <h2 class="subtitle">Channels</h2>
<div class="channels"> <div class="channels">