diff --git a/cmd/control/cli.go b/cmd/control/cli.go new file mode 100644 index 0000000..1f32933 --- /dev/null +++ b/cmd/control/cli.go @@ -0,0 +1,44 @@ +package control + +import ( + "flag" + "fmt" + "path/filepath" +) + +type CliArgs struct { + KeyFile string + LogFile string + PicsDir string + WebDir string +} + +func HandleCliArgs() (*CliArgs, error) { + var err error + cliArgs := new(CliArgs) + + keyFile := flag.String("key", "/var/www/cpolis.key", "key file") + logFile := flag.String("log", "/var/log/cpolis.log", "log file") + picsDir := flag.String("pics", "/var/www/cpolis/pics", "pictures directory") + webDir := flag.String("web", "/var/www/cpolis/web", "web directory") + flag.Parse() + + cliArgs.KeyFile, err = filepath.Abs(*keyFile) + if err != nil { + return nil, fmt.Errorf("error finding KeyFile: %v", err) + } + cliArgs.LogFile, err = filepath.Abs(*logFile) + if err != nil { + return nil, fmt.Errorf("error finding LogFile: %v", err) + } + cliArgs.PicsDir, err = filepath.Abs(*picsDir) + if err != nil { + return nil, fmt.Errorf("error finding PicsDir: %v", err) + } + cliArgs.WebDir, err = filepath.Abs(*webDir) + if err != nil { + return nil, fmt.Errorf("error finding WebDir: %v", err) + } + + return cliArgs, nil +} diff --git a/cmd/main.go b/cmd/main.go index 1fc4a91..d173c99 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -16,13 +16,17 @@ func init() { } func main() { - logFile, err := os.OpenFile("tmp/cpolis.log", - os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644) + cliArgs, err := control.HandleCliArgs() + if err != nil { + log.Fatalln(err) + } + + logFile, err := os.OpenFile(cliArgs.LogFile, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644) if err != nil { log.Fatalln(err) } defer logFile.Close() - // log.SetOutput(logFile) + log.SetOutput(logFile) db, err := model.OpenDB("cpolis") if err != nil { @@ -30,48 +34,49 @@ func main() { } defer db.Close() - key, err := control.LoadKey("tmp/key.gob") + key, err := control.LoadKey(cliArgs.KeyFile) if err != nil { key, err = control.NewKey() if err != nil { log.Fatalln(err) } - control.SaveKey(key, "tmp/key.gob") + control.SaveKey(key, cliArgs.KeyFile) } store := control.NewCookieStore(key) mux := http.NewServeMux() mux.Handle("/web/static/", http.StripPrefix("/web/static/", - http.FileServer(http.Dir("web/static/")))) - mux.HandleFunc("/", view.HomePage(db, store)) + http.FileServer(http.Dir(cliArgs.WebDir+"/static/")))) + mux.HandleFunc("/", view.HomePage(cliArgs, db, store)) - mux.HandleFunc("GET /create-tag/", view.CreateTag) - mux.HandleFunc("GET /create-user/", view.CreateUser) - mux.HandleFunc("GET /edit-user/", view.EditUser(db, store)) - mux.HandleFunc("GET /hub/", view.ShowHub(db, store)) - mux.HandleFunc("GET /logout/", view.Logout(store)) - mux.HandleFunc("GET /publish-issue/", view.PublishLatestIssue(db, store)) - mux.HandleFunc("GET /rejected-articles/", view.ShowRejectedArticles(db, store)) - mux.HandleFunc("GET /rss/", view.ShowRSS( + mux.HandleFunc("GET /create-tag/", view.CreateTag(cliArgs)) + mux.HandleFunc("GET /create-user/", view.CreateUser(cliArgs)) + mux.HandleFunc("GET /edit-user/", view.EditUser(cliArgs, db, store)) + mux.HandleFunc("GET /hub/", view.ShowHub(cliArgs, db, store)) + mux.HandleFunc("GET /logout/", view.Logout(cliArgs, store)) + mux.HandleFunc("GET /publish-issue/", view.PublishLatestIssue(cliArgs, db, store)) + mux.HandleFunc("GET /rejected-articles/", view.ShowRejectedArticles(cliArgs, db, store)) + mux.HandleFunc("GET /rss/", view.ShowRSS(cliArgs, db, "Freimaurer Distrikt Niedersachsen und Sachsen-Anhalt", "https://distrikt-ni-st.de", "Freiheit, Gleichheit, Brüderlichkeit, Toleranz und Humanität", )) - mux.HandleFunc("GET /this-issue/", view.ShowCurrentArticles(db)) - mux.HandleFunc("GET /unpublished-articles/", view.ShowUnpublishedArticles(db)) - mux.HandleFunc("GET /write-article/", view.WriteArticle(db)) + mux.HandleFunc("GET /this-issue/", view.ShowCurrentArticles(cliArgs, db)) + mux.HandleFunc("GET /unpublished-articles/", view.ShowUnpublishedArticles(cliArgs, db)) + mux.HandleFunc("GET /write-article/", view.WriteArticle(cliArgs, db)) - mux.HandleFunc("POST /add-tag/", view.AddTag(db, store)) - mux.HandleFunc("POST /add-user/", view.AddUser(db, store)) - mux.HandleFunc("POST /login/", view.Login(db, store)) - mux.HandleFunc("POST /publish-article/", view.PublishArticle(db, store)) - mux.HandleFunc("POST /reject-article/", view.RejectArticle(db, store)) - mux.HandleFunc("POST /resubmit-article/", view.ResubmitArticle(db, store)) - mux.HandleFunc("POST /review-rejected-article/", view.ReviewRejectedArticle(db, store)) - mux.HandleFunc("POST /review-unpublished-article/", view.ReviewUnpublishedArticle(db, store)) - mux.HandleFunc("POST /submit-article/", view.SubmitArticle(db, store)) - mux.HandleFunc("POST /update-user/", view.UpdateUser(db, store)) + mux.HandleFunc("POST /add-tag/", view.AddTag(cliArgs, db, store)) + mux.HandleFunc("POST /add-user/", view.AddUser(cliArgs, db, store)) + mux.HandleFunc("POST /login/", view.Login(cliArgs, db, store)) + mux.HandleFunc("POST /publish-article/", view.PublishArticle(cliArgs, db, store)) + mux.HandleFunc("POST /reject-article/", view.RejectArticle(cliArgs, db, store)) + mux.HandleFunc("POST /resubmit-article/", view.ResubmitArticle(cliArgs, db, store)) + mux.HandleFunc("POST /review-rejected-article/", view.ReviewRejectedArticle(cliArgs, db, store)) + mux.HandleFunc("POST /review-unpublished-article/", view.ReviewUnpublishedArticle(cliArgs, db, store)) + mux.HandleFunc("POST /submit-article/", view.SubmitArticle(cliArgs, db, store)) + mux.HandleFunc("POST /update-user/", view.UpdateUser(cliArgs, db, store)) + mux.HandleFunc("POST /upload-image/", view.UploadImage(cliArgs)) log.Fatalln(http.ListenAndServe(":8080", mux)) } diff --git a/cmd/view/articles.go b/cmd/view/articles.go index b6a9aba..6025246 100644 --- a/cmd/view/articles.go +++ b/cmd/view/articles.go @@ -1,9 +1,12 @@ package view import ( + "fmt" "html/template" + "io" "log" "net/http" + "os" "strconv" "time" @@ -11,21 +14,21 @@ import ( "streifling.com/jason/cpolis/cmd/model" ) -func ShowHub(db *model.DB, s *control.CookieStore) http.HandlerFunc { +func ShowHub(c *control.CliArgs, db *model.DB, s *control.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { session, err := s.Get(r, "cookie") if err != nil { - tmpl, err := template.ParseFiles("web/templates/login.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/login.html") msg := "Session nicht mehr gültig. Bitte erneut anmelden." template.Must(tmpl, err).ExecuteTemplate(w, "page-content", msg) } - tmpl, err := template.ParseFiles("web/templates/hub.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/hub.html") template.Must(tmpl, err).ExecuteTemplate(w, "page-content", session.Values["role"].(int)) } } -func WriteArticle(db *model.DB) http.HandlerFunc { +func WriteArticle(c *control.CliArgs, db *model.DB) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { tags, err := db.GetTagList() if err != nil { @@ -34,16 +37,16 @@ func WriteArticle(db *model.DB) http.HandlerFunc { return } - tmpl, err := template.ParseFiles("web/templates/editor.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/editor.html") template.Must(tmpl, err).ExecuteTemplate(w, "page-content", tags) } } -func SubmitArticle(db *model.DB, s *control.CookieStore) http.HandlerFunc { +func SubmitArticle(c *control.CliArgs, db *model.DB, s *control.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { session, err := s.Get(r, "cookie") if err != nil { - tmpl, err := template.ParseFiles("web/templates/login.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/login.html") msg := "Session nicht mehr gültig. Bitte erneut anmelden." template.Must(tmpl, err).ExecuteTemplate(w, "page-content", msg) } @@ -81,13 +84,13 @@ func SubmitArticle(db *model.DB, s *control.CookieStore) http.HandlerFunc { return } - tmpl, err := template.ParseFiles("web/templates/hub.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/hub.html") tmpl = template.Must(tmpl, err) tmpl.ExecuteTemplate(w, "page-content", session.Values["role"]) } } -func ResubmitArticle(db *model.DB, s *control.CookieStore) http.HandlerFunc { +func ResubmitArticle(c *control.CliArgs, db *model.DB, s *control.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { id, err := strconv.ParseInt(r.PostFormValue("article-id"), 10, 64) if err != nil { @@ -130,18 +133,18 @@ func ResubmitArticle(db *model.DB, s *control.CookieStore) http.HandlerFunc { session, err := s.Get(r, "cookie") if err != nil { - tmpl, err := template.ParseFiles("web/templates/login.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/login.html") msg := "Session nicht mehr gültig. Bitte erneut anmelden." template.Must(tmpl, err).ExecuteTemplate(w, "page-content", msg) } - tmpl, err := template.ParseFiles("web/templates/hub.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/hub.html") tmpl = template.Must(tmpl, err) tmpl.ExecuteTemplate(w, "page-content", session.Values["role"]) } } -func ShowUnpublishedArticles(db *model.DB) http.HandlerFunc { +func ShowUnpublishedArticles(c *control.CliArgs, db *model.DB) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { unpublishedArticles, err := db.GetCertainArticles(false, false) if err != nil { @@ -150,13 +153,13 @@ func ShowUnpublishedArticles(db *model.DB) http.HandlerFunc { return } - tmpl, err := template.ParseFiles("web/templates/unpublished-articles.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/unpublished-articles.html") tmpl = template.Must(tmpl, err) tmpl.ExecuteTemplate(w, "page-content", unpublishedArticles) } } -func ShowRejectedArticles(db *model.DB, s *control.CookieStore) http.HandlerFunc { +func ShowRejectedArticles(c *control.CliArgs, db *model.DB, s *control.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { type htmlData struct { MyIDs map[int64]bool @@ -185,13 +188,13 @@ func ShowRejectedArticles(db *model.DB, s *control.CookieStore) http.HandlerFunc } } - tmpl, err := template.ParseFiles("web/templates/rejected-articles.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/rejected-articles.html") tmpl = template.Must(tmpl, err) tmpl.ExecuteTemplate(w, "page-content", data) } } -func ReviewUnpublishedArticle(db *model.DB, s *control.CookieStore) http.HandlerFunc { +func ReviewUnpublishedArticle(c *control.CliArgs, db *model.DB, s *control.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { type htmlData struct { Article *model.Article @@ -220,13 +223,13 @@ func ReviewUnpublishedArticle(db *model.DB, s *control.CookieStore) http.Handler return } - tmpl, err := template.ParseFiles("web/templates/to-be-published.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/to-be-published.html") tmpl = template.Must(tmpl, err) tmpl.ExecuteTemplate(w, "page-content", data) } } -func ReviewRejectedArticle(db *model.DB, s *control.CookieStore) http.HandlerFunc { +func ReviewRejectedArticle(c *control.CliArgs, db *model.DB, s *control.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { type htmlData struct { Selected map[int64]bool @@ -267,13 +270,13 @@ func ReviewRejectedArticle(db *model.DB, s *control.CookieStore) http.HandlerFun data.Selected[tag.ID] = true } - tmpl, err := template.ParseFiles("web/templates/rework-article.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/rework-article.html") tmpl = template.Must(tmpl, err) tmpl.ExecuteTemplate(w, "page-content", data) } } -func PublishArticle(db *model.DB, s *control.CookieStore) http.HandlerFunc { +func PublishArticle(c *control.CliArgs, db *model.DB, s *control.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { id, err := strconv.ParseInt(r.PostFormValue("id"), 10, 64) if err != nil { @@ -284,7 +287,7 @@ func PublishArticle(db *model.DB, s *control.CookieStore) http.HandlerFunc { session, err := s.Get(r, "cookie") if err != nil { - tmpl, err := template.ParseFiles("web/templates/login.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/login.html") msg := "Session nicht mehr gültig. Bitte erneut anmelden." template.Must(tmpl, err).ExecuteTemplate(w, "page-content", msg) } @@ -322,13 +325,13 @@ func PublishArticle(db *model.DB, s *control.CookieStore) http.HandlerFunc { return } - tmpl, err := template.ParseFiles("web/templates/hub.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/hub.html") tmpl = template.Must(tmpl, err) tmpl.ExecuteTemplate(w, "page-content", session.Values["role"]) } } -func RejectArticle(db *model.DB, s *control.CookieStore) http.HandlerFunc { +func RejectArticle(c *control.CliArgs, db *model.DB, s *control.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { id, err := strconv.ParseInt(r.PostFormValue("id"), 10, 64) if err != nil { @@ -339,7 +342,7 @@ func RejectArticle(db *model.DB, s *control.CookieStore) http.HandlerFunc { session, err := s.Get(r, "cookie") if err != nil { - tmpl, err := template.ParseFiles("web/templates/login.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/login.html") msg := "Session nicht mehr gültig. Bitte erneut anmelden." template.Must(tmpl, err).ExecuteTemplate(w, "page-content", msg) } @@ -352,13 +355,13 @@ func RejectArticle(db *model.DB, s *control.CookieStore) http.HandlerFunc { return } - tmpl, err := template.ParseFiles("web/templates/hub.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/hub.html") tmpl = template.Must(tmpl, err) tmpl.ExecuteTemplate(w, "page-content", session.Values["role"]) } } -func ShowCurrentArticles(db *model.DB) http.HandlerFunc { +func ShowCurrentArticles(c *control.CliArgs, db *model.DB) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { articles, err := db.GetCurrentIssueArticles() if err != nil { @@ -367,7 +370,37 @@ func ShowCurrentArticles(db *model.DB) http.HandlerFunc { return } - tmpl, err := template.ParseFiles("web/templates/current-articles.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/current-articles.html") template.Must(tmpl, err).ExecuteTemplate(w, "page-content", articles) } } + +func UploadImage(c *control.CliArgs) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + file, header, err := r.FormFile("article-image") + if err != nil { + log.Println(err) + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + defer file.Close() + + filename := fmt.Sprint("tmp/pics/", time.Now().Format("2006-01-02_15:04:05"), "-", header.Filename) + img, err := os.Create(filename) + if err != nil { + log.Println(err) + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + defer img.Close() + + if _, err = io.Copy(img, file); err != nil { + log.Println(err) + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + tmpl, err := template.ParseFiles(c.WebDir + "/templates/editor.html") + template.Must(tmpl, err).ExecuteTemplate(w, "editor-images", fmt.Sprint("![", header.Filename, "](", filename, ")")) + } +} diff --git a/cmd/view/editor.go b/cmd/view/editor.go index 7570d8a..aa7fbdd 100644 --- a/cmd/view/editor.go +++ b/cmd/view/editor.go @@ -8,23 +8,25 @@ import ( "streifling.com/jason/cpolis/cmd/model" ) -func CreateTag(w http.ResponseWriter, r *http.Request) { - tmpl, err := template.ParseFiles("web/templates/add-tag.html") - template.Must(tmpl, err).ExecuteTemplate(w, "page-content", nil) +func CreateTag(c *control.CliArgs) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + tmpl, err := template.ParseFiles(c.WebDir + "/templates/add-tag.html") + template.Must(tmpl, err).ExecuteTemplate(w, "page-content", nil) + } } -func AddTag(db *model.DB, s *control.CookieStore) http.HandlerFunc { +func AddTag(c *control.CliArgs, db *model.DB, s *control.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { db.AddTag(r.PostFormValue("tag")) session, err := s.Get(r, "cookie") if err != nil { - tmpl, err := template.ParseFiles("web/templates/login.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/login.html") msg := "Session nicht mehr gültig. Bitte erneut anmelden." template.Must(tmpl, err).ExecuteTemplate(w, "page-content", msg) } - tmpl, err := template.ParseFiles("web/templates/hub.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/hub.html") tmpl = template.Must(tmpl, err) tmpl.ExecuteTemplate(w, "page-content", session.Values["role"]) } diff --git a/cmd/view/issues.go b/cmd/view/issues.go index 08af3fb..a23b11d 100644 --- a/cmd/view/issues.go +++ b/cmd/view/issues.go @@ -9,7 +9,7 @@ import ( "streifling.com/jason/cpolis/cmd/model" ) -func PublishLatestIssue(db *model.DB, s *control.CookieStore) http.HandlerFunc { +func PublishLatestIssue(c *control.CliArgs, db *model.DB, s *control.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { if err := db.PublishLatestIssue(); err != nil { log.Println(err) @@ -19,12 +19,12 @@ func PublishLatestIssue(db *model.DB, s *control.CookieStore) http.HandlerFunc { session, err := s.Get(r, "cookie") if err != nil { - tmpl, err := template.ParseFiles("web/templates/login.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/login.html") msg := "Session nicht mehr gültig. Bitte erneut anmelden." template.Must(tmpl, err).ExecuteTemplate(w, "page-content", msg) } - tmpl, err := template.ParseFiles("web/templates/hub.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/hub.html") tmpl = template.Must(tmpl, err) tmpl.ExecuteTemplate(w, "page-content", session.Values["role"]) } diff --git a/cmd/view/rss.go b/cmd/view/rss.go index c6429e6..5c749bc 100644 --- a/cmd/view/rss.go +++ b/cmd/view/rss.go @@ -12,7 +12,7 @@ import ( "streifling.com/jason/cpolis/cmd/model" ) -func ShowRSS(db *model.DB, title, link, desc string) http.HandlerFunc { +func ShowRSS(c *control.CliArgs, db *model.DB, title, link, desc string) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { channel := &rss.Channel{ Title: title, @@ -88,7 +88,7 @@ func ShowRSS(db *model.DB, title, link, desc string) http.HandlerFunc { return } - files := []string{"web/templates/index.html", "web/templates/feed.rss"} + files := []string{c.WebDir + "/templates/index.html", c.WebDir + "/templates/feed.rss"} tmpl, err := template.ParseFiles(files...) template.Must(tmpl, err).Execute(w, rss) } diff --git a/cmd/view/sessions.go b/cmd/view/sessions.go index 2a34130..ed20eda 100644 --- a/cmd/view/sessions.go +++ b/cmd/view/sessions.go @@ -27,26 +27,26 @@ func saveSession(w http.ResponseWriter, r *http.Request, s *control.CookieStore, return nil } -func HomePage(db *model.DB, s *control.CookieStore) http.HandlerFunc { +func HomePage(c *control.CliArgs, db *model.DB, s *control.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { numRows, err := db.CountEntries("users") if err != nil { log.Fatalln(err) } - files := []string{"web/templates/index.html"} + files := []string{c.WebDir + "/templates/index.html"} if numRows == 0 { - files = append(files, "web/templates/add-user.html") + files = append(files, c.WebDir+"/templates/add-user.html") tmpl, err := template.ParseFiles(files...) template.Must(tmpl, err).Execute(w, nil) } else { session, _ := s.Get(r, "cookie") if auth, ok := session.Values["authenticated"].(bool); auth && ok { - files = append(files, "web/templates/hub.html") + files = append(files, c.WebDir+"/templates/hub.html") tmpl, err := template.ParseFiles(files...) template.Must(tmpl, err).Execute(w, session.Values["role"]) } else { - files = append(files, "web/templates/login.html") + files = append(files, c.WebDir+"/templates/login.html") tmpl, err := template.ParseFiles(files...) template.Must(tmpl, err).Execute(w, nil) } @@ -54,7 +54,7 @@ func HomePage(db *model.DB, s *control.CookieStore) http.HandlerFunc { } } -func Login(db *model.DB, s *control.CookieStore) http.HandlerFunc { +func Login(c *control.CliArgs, db *model.DB, s *control.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { userName := r.PostFormValue("username") password := r.PostFormValue("password") @@ -84,16 +84,16 @@ func Login(db *model.DB, s *control.CookieStore) http.HandlerFunc { return } - tmpl, err := template.ParseFiles("web/templates/hub.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/hub.html") template.Must(tmpl, err).ExecuteTemplate(w, "page-content", user.Role) } } -func Logout(s *control.CookieStore) http.HandlerFunc { +func Logout(c *control.CliArgs, s *control.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { session, err := s.Get(r, "cookie") if err != nil { - tmpl, err := template.ParseFiles("web/templates/login.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/login.html") msg := "Session nicht mehr gültig. Bitte erneut anmelden." template.Must(tmpl, err).ExecuteTemplate(w, "page-content", msg) } @@ -106,7 +106,7 @@ func Logout(s *control.CookieStore) http.HandlerFunc { return } - tmpl, err := template.ParseFiles("web/templates/login.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/login.html") template.Must(tmpl, err).ExecuteTemplate(w, "page-content", nil) } } diff --git a/cmd/view/users.go b/cmd/view/users.go index ef54226..e5c6cc1 100644 --- a/cmd/view/users.go +++ b/cmd/view/users.go @@ -31,12 +31,14 @@ func checkUserStrings(user *model.User) (string, int, bool) { } } -func CreateUser(w http.ResponseWriter, r *http.Request) { - tmpl, err := template.ParseFiles("web/templates/add-user.html") - template.Must(tmpl, err).ExecuteTemplate(w, "page-content", nil) +func CreateUser(c *control.CliArgs) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + tmpl, err := template.ParseFiles(c.WebDir + "/templates/add-user.html") + template.Must(tmpl, err).ExecuteTemplate(w, "page-content", nil) + } } -func AddUser(db *model.DB, s *control.CookieStore) http.HandlerFunc { +func AddUser(c *control.CliArgs, db *model.DB, s *control.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { role, err := strconv.Atoi(r.PostFormValue("role")) if err != nil { @@ -59,7 +61,7 @@ func AddUser(db *model.DB, s *control.CookieStore) http.HandlerFunc { if len(htmlData.UserName) == 0 || len(htmlData.FirstName) == 0 || len(htmlData.LastName) == 0 || len(pass) == 0 || len(pass2) == 0 { htmlData.Msg = "Alle Felder müssen ausgefüllt werden." - tmpl, err := template.ParseFiles("web/templates/add-user.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/add-user.html") template.Must(tmpl, err).ExecuteTemplate(w, "page-content", htmlData) return } @@ -67,7 +69,7 @@ func AddUser(db *model.DB, s *control.CookieStore) http.HandlerFunc { if !ok { htmlData.Msg = fmt.Sprint(userString, " ist zu lang. Maximal ", stringLen, " Zeichen erlaubt.") - tmpl, err := template.ParseFiles("web/templates/add-user.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/add-user.html") template.Must(tmpl, err).ExecuteTemplate(w, "page-content", htmlData) return } @@ -75,13 +77,13 @@ func AddUser(db *model.DB, s *control.CookieStore) http.HandlerFunc { if id != 0 { htmlData.Msg = fmt.Sprint(htmlData.UserName, " ist bereits vergeben. Bitte anderen Benutzernamen wählen.") - tmpl, err := template.ParseFiles("web/templates/add-user.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/add-user.html") template.Must(tmpl, err).ExecuteTemplate(w, "page-content", htmlData) return } if pass != pass2 { htmlData.Msg = "Die Passwörter stimmen nicht überein." - tmpl, err := template.ParseFiles("web/templates/add-user.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/add-user.html") template.Must(tmpl, err).ExecuteTemplate(w, "page-content", htmlData) return } @@ -117,16 +119,16 @@ func AddUser(db *model.DB, s *control.CookieStore) http.HandlerFunc { } } - tmpl, err := template.ParseFiles("web/templates/hub.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/hub.html") template.Must(tmpl, err).ExecuteTemplate(w, "page-content", 0) } } -func EditUser(db *model.DB, s *control.CookieStore) http.HandlerFunc { +func EditUser(c *control.CliArgs, db *model.DB, s *control.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { session, err := s.Get(r, "cookie") if err != nil { - tmpl, err := template.ParseFiles("web/templates/login.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/login.html") msg := "Session nicht mehr gültig. Bitte erneut anmelden." template.Must(tmpl, err).ExecuteTemplate(w, "page-content", msg) } @@ -138,16 +140,16 @@ func EditUser(db *model.DB, s *control.CookieStore) http.HandlerFunc { return } - tmpl, err := template.ParseFiles("web/templates/edit-user.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/edit-user.html") template.Must(tmpl, err).ExecuteTemplate(w, "page-content", user) } } -func UpdateUser(db *model.DB, s *control.CookieStore) http.HandlerFunc { +func UpdateUser(c *control.CliArgs, db *model.DB, s *control.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { session, err := s.Get(r, "cookie") if err != nil { - tmpl, err := template.ParseFiles("web/templates/login.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/login.html") msg := "Session nicht mehr gültig. Bitte erneut anmelden." template.Must(tmpl, err).ExecuteTemplate(w, "page-content", msg) } @@ -167,7 +169,7 @@ func UpdateUser(db *model.DB, s *control.CookieStore) http.HandlerFunc { if len(userData.UserName) == 0 || len(userData.FirstName) == 0 || len(userData.LastName) == 0 { userData.Msg = "Alle Felder mit * müssen ausgefüllt sein." - tmpl, err := template.ParseFiles("web/templates/edit-user.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/edit-user.html") tmpl = template.Must(tmpl, err) tmpl.ExecuteTemplate(w, "page-content", userData.Msg) return @@ -177,7 +179,7 @@ func UpdateUser(db *model.DB, s *control.CookieStore) http.HandlerFunc { if !ok { userData.Msg = fmt.Sprint(userString, " ist zu lang. Maximal ", stringLen, " Zeichen erlaubt.") - tmpl, err := template.ParseFiles("web/templates/edit-user.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/edit-user.html") tmpl = template.Must(tmpl, err) tmpl.ExecuteTemplate(w, "page-content", userData) return @@ -187,7 +189,7 @@ func UpdateUser(db *model.DB, s *control.CookieStore) http.HandlerFunc { if id != userData.ID { userData.Msg = "Benutzername bereits vergeben." userData.UserName = "" - tmpl, err := template.ParseFiles("web/templates/edit-user.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/edit-user.html") tmpl = template.Must(tmpl, err) tmpl.ExecuteTemplate(w, "page-content", userData) return @@ -203,11 +205,11 @@ func UpdateUser(db *model.DB, s *control.CookieStore) http.HandlerFunc { newPass, newPass2); err != nil { userData.Msg = "Aktualisierung der Benutzerdaten fehlgeschlagen." - tmpl, err := template.ParseFiles("web/templates/edit-user.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/edit-user.html") template.Must(tmpl, err).ExecuteTemplate(w, "page-content", userData) } - tmpl, err := template.ParseFiles("web/templates/hub.html") + tmpl, err := template.ParseFiles(c.WebDir + "/templates/hub.html") tmpl = template.Must(tmpl, err) tmpl.ExecuteTemplate(w, "page-content", session.Values["role"].(int)) } diff --git a/web/templates/editor.html b/web/templates/editor.html index f0f8b9b..6a7c6df 100644 --- a/web/templates/editor.html +++ b/web/templates/editor.html @@ -16,8 +16,42 @@ {{end}} +
+ +
+ + + +{{end}} + +{{define "editor-images"}} +{{if gt (len .) 0}} +
+ {{.}} + +
+{{end}} {{end}}