diff --git a/cmd/frontend/pdf.go b/cmd/calls/pdf.go similarity index 58% rename from cmd/frontend/pdf.go rename to cmd/calls/pdf.go index c41b959..7369b8e 100644 --- a/cmd/frontend/pdf.go +++ b/cmd/calls/pdf.go @@ -1,7 +1,8 @@ -package frontend +package calls import ( "encoding/json" + "fmt" "log" "net/http" "os" @@ -9,31 +10,6 @@ import ( b "streifling.com/jason/cpolis/cmd/backend" ) -func tokenIsVerified(w http.ResponseWriter, r *http.Request) bool { - idToken := r.Header.Get("Authorization") - if idToken == "" { - log.Println("Authorization header missing") - http.Error(w, "Authorization header missing", http.StatusUnauthorized) - return false - } - - client, err := b.NewClient() - if err != nil { - log.Println(err) - http.Error(w, err.Error(), http.StatusInternalServerError) - return false - } - - _, err = client.Verify(idToken) - if err != nil { - log.Println(err) - http.Error(w, err.Error(), http.StatusUnauthorized) - return false - } - - return true -} - func ServePDFList(c *b.Config) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { if tokenIsVerified(w, r) { @@ -62,7 +38,7 @@ func ServePDFList(c *b.Config) http.HandlerFunc { func ServePDF(c *b.Config) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { if tokenIsVerified(w, r) { - http.ServeFile(w, r, r.PathValue("id")) + http.ServeFile(w, r, fmt.Sprint(c.PDFDir, "/", r.PathValue("id"))) } } } diff --git a/cmd/calls/rss.go b/cmd/calls/rss.go new file mode 100644 index 0000000..f98c9e1 --- /dev/null +++ b/cmd/calls/rss.go @@ -0,0 +1,15 @@ +package calls + +import ( + "net/http" + + b "streifling.com/jason/cpolis/cmd/backend" +) + +func ServeRSS(c *b.Config) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + if tokenIsVerified(w, r) { + http.ServeFile(w, r, c.RSSFile) + } + } +} diff --git a/cmd/calls/verification.go b/cmd/calls/verification.go new file mode 100644 index 0000000..2a25665 --- /dev/null +++ b/cmd/calls/verification.go @@ -0,0 +1,34 @@ +package calls + +import ( + "log" + "net/http" + + b "streifling.com/jason/cpolis/cmd/backend" +) + +// tokenIsVerified verifies that a request is authorized. It returns a bool. +func tokenIsVerified(w http.ResponseWriter, r *http.Request) bool { + idToken := r.Header.Get("Authorization") + if idToken == "" { + log.Println("Authorization header missing") + http.Error(w, "Authorization header missing", http.StatusUnauthorized) + return false + } + + client, err := b.NewClient() + if err != nil { + log.Println(err) + http.Error(w, err.Error(), http.StatusInternalServerError) + return false + } + + _, err = client.Verify(idToken) + if err != nil { + log.Println(err) + http.Error(w, err.Error(), http.StatusUnauthorized) + return false + } + + return true +} diff --git a/cmd/frontend/articles.go b/cmd/frontend/articles.go index 7b1bfba..a408280 100644 --- a/cmd/frontend/articles.go +++ b/cmd/frontend/articles.go @@ -25,11 +25,9 @@ const ( func ShowHub(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - session, err := s.Get(r, "cookie") + session, err := getSession(w, r, c, s) if err != nil { - 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) + return } session.Values["article"] = nil @@ -46,6 +44,11 @@ func ShowHub(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { func WriteArticle(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { + session, err := getSession(w, r, c, s) + if err != nil { + return + } + type editorHTMLData struct { Title string Description string @@ -55,13 +58,6 @@ func WriteArticle(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { Mode int } - session, err := s.Get(r, "cookie") - if err != nil { - 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) - } - var data editorHTMLData if session.Values["article"] == nil { data = editorHTMLData{} @@ -84,11 +80,9 @@ func WriteArticle(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { func SubmitArticle(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - session, err := s.Get(r, "cookie") + session, err := getSession(w, r, c, s) if err != nil { - 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) + return } session.Values["article"] = nil @@ -139,6 +133,11 @@ func SubmitArticle(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { func ResubmitArticle(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { + session, err := getSession(w, r, c, s) + if err != nil { + return + } + id, err := strconv.ParseInt(r.PathValue("id"), 10, 64) if err != nil { log.Println(err) @@ -178,21 +177,18 @@ func ResubmitArticle(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { return } - session, err := s.Get(r, "cookie") - if err != nil { - 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(c.WebDir + "/templates/hub.html") tmpl = template.Must(tmpl, err) tmpl.ExecuteTemplate(w, "page-content", session.Values["role"]) } } -func ShowUnpublishedArticles(c *b.Config, db *b.DB) http.HandlerFunc { +func ShowUnpublishedArticles(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { + if _, err := getSession(w, r, c, s); err != nil { + return + } + unpublishedArticles, err := db.GetCertainArticles(false, false) if err != nil { log.Println(err) @@ -208,19 +204,17 @@ func ShowUnpublishedArticles(c *b.Config, db *b.DB) http.HandlerFunc { func ShowRejectedArticles(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { + session, err := getSession(w, r, c, s) + if err != nil { + return + } + type htmlData struct { MyIDs map[int64]bool RejectedArticles []*b.Article } data := new(htmlData) - session, err := s.Get(r, "cookie") - if err != nil { - log.Println(err) - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } - data.RejectedArticles, err = db.GetCertainArticles(false, true) if err != nil { log.Println(err) @@ -243,6 +237,10 @@ func ShowRejectedArticles(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerF func ReviewUnpublishedArticle(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { + if _, err := getSession(w, r, c, s); err != nil { + return + } + type htmlData struct { Title string Description string @@ -305,6 +303,10 @@ func ReviewUnpublishedArticle(c *b.Config, db *b.DB, s *b.CookieStore) http.Hand func ReviewRejectedArticle(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { + if _, err := getSession(w, r, c, s); err != nil { + return + } + type htmlData struct { Selected map[int64]bool Article *b.Article @@ -352,6 +354,11 @@ func ReviewRejectedArticle(c *b.Config, db *b.DB, s *b.CookieStore) http.Handler func PublishArticle(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { + session, err := getSession(w, r, c, s) + if err != nil { + return + } + id, err := strconv.ParseInt(r.PathValue("id"), 10, 64) if err != nil { log.Println(err) @@ -359,13 +366,6 @@ func PublishArticle(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { return } - session, err := s.Get(r, "cookie") - if err != nil { - 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) - } - if err = db.AddArticleToCurrentIssue(id); err != nil { log.Println(err) http.Error(w, err.Error(), http.StatusInternalServerError) @@ -402,6 +402,11 @@ func PublishArticle(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { func RejectArticle(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { + session, err := getSession(w, r, c, s) + if err != nil { + return + } + id, err := strconv.ParseInt(r.PathValue("id"), 10, 64) if err != nil { log.Println(err) @@ -409,13 +414,6 @@ func RejectArticle(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { return } - session, err := s.Get(r, "cookie") - if err != nil { - 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) - } - if err = db.UpdateAttributes( &b.Attribute{Table: "articles", ID: id, AttName: "rejected", Value: true}, ); err != nil { @@ -430,8 +428,12 @@ func RejectArticle(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { } } -func ShowCurrentArticles(c *b.Config, db *b.DB) http.HandlerFunc { +func ShowCurrentArticles(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { + if _, err := getSession(w, r, c, s); err != nil { + return + } + articles, err := db.GetCurrentIssueArticles() if err != nil { log.Println(err) @@ -444,8 +446,12 @@ func ShowCurrentArticles(c *b.Config, db *b.DB) http.HandlerFunc { } } -func UploadImage(c *b.Config) http.HandlerFunc { +func UploadImage(c *b.Config, s *b.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { + if _, err := getSession(w, r, c, s); err != nil { + return + } + file, header, err := r.FormFile("article-image") if err != nil { log.Println(err) diff --git a/cmd/frontend/editor.go b/cmd/frontend/editor.go index 737c784..f133e62 100644 --- a/cmd/frontend/editor.go +++ b/cmd/frontend/editor.go @@ -7,8 +7,12 @@ import ( b "streifling.com/jason/cpolis/cmd/backend" ) -func CreateTag(c *b.Config) http.HandlerFunc { +func CreateTag(c *b.Config, s *b.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { + if _, err := getSession(w, r, c, s); err != nil { + return + } + tmpl, err := template.ParseFiles(c.WebDir + "/templates/add-tag.html") template.Must(tmpl, err).ExecuteTemplate(w, "page-content", nil) } @@ -16,15 +20,13 @@ func CreateTag(c *b.Config) http.HandlerFunc { func AddTag(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - db.AddTag(r.PostFormValue("tag")) - - session, err := s.Get(r, "cookie") + session, err := getSession(w, r, c, s) if err != nil { - 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) + return } + db.AddTag(r.PostFormValue("tag")) + 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/frontend/images.go b/cmd/frontend/images.go index 7b77e5d..5718ee5 100644 --- a/cmd/frontend/images.go +++ b/cmd/frontend/images.go @@ -10,6 +10,10 @@ import ( func ServeImage(c *b.Config, s *b.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { + if _, err := getSession(w, r, c, s); err != nil { + return + } + absFilepath, err := filepath.Abs(c.PicsDir) if err != nil { log.Println(err) diff --git a/cmd/frontend/issues.go b/cmd/frontend/issues.go index 043ca95..5361e48 100644 --- a/cmd/frontend/issues.go +++ b/cmd/frontend/issues.go @@ -10,19 +10,17 @@ import ( func PublishLatestIssue(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { + session, err := getSession(w, r, c, s) + if err != nil { + return + } + if err := db.PublishLatestIssue(); err != nil { log.Println(err) http.Error(w, err.Error(), http.StatusInternalServerError) return } - session, err := s.Get(r, "cookie") - if err != nil { - 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(c.WebDir + "/templates/hub.html") tmpl = template.Must(tmpl, err) tmpl.ExecuteTemplate(w, "page-content", session.Values["role"]) diff --git a/cmd/frontend/sessions.go b/cmd/frontend/sessions.go index 15245b1..2f34d3d 100644 --- a/cmd/frontend/sessions.go +++ b/cmd/frontend/sessions.go @@ -90,11 +90,9 @@ func Login(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { func Logout(c *b.Config, s *b.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - session, err := s.Get(r, "cookie") + session, err := getSession(w, r, c, s) if err != nil { - 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) + return } session.Options.MaxAge = -1 diff --git a/cmd/frontend/users.go b/cmd/frontend/users.go index 5b9b804..3eefa7f 100644 --- a/cmd/frontend/users.go +++ b/cmd/frontend/users.go @@ -30,8 +30,12 @@ func checkUserStrings(user *b.User) (string, int, bool) { } } -func CreateUser(c *b.Config) http.HandlerFunc { +func CreateUser(c *b.Config, s *b.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { + if _, err := getSession(w, r, c, s); err != nil { + return + } + tmpl, err := template.ParseFiles(c.WebDir + "/templates/add-user.html") template.Must(tmpl, err).ExecuteTemplate(w, "page-content", nil) } @@ -39,6 +43,11 @@ func CreateUser(c *b.Config) http.HandlerFunc { func AddUser(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { + session, err := getSession(w, r, c, s) + if err != nil { + return + } + role, err := strconv.Atoi(r.PostFormValue("role")) if err != nil { log.Println(err) @@ -94,13 +103,6 @@ func AddUser(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { return } - session, err := s.Get(r, "cookie") - if err != nil { - 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(c.WebDir + "/templates/hub.html") tmpl = template.Must(tmpl, err) tmpl.ExecuteTemplate(w, "page-content", session.Values["role"].(int)) @@ -109,11 +111,9 @@ func AddUser(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { func EditSelf(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - session, err := s.Get(r, "cookie") + session, err := getSession(w, r, c, s) if err != nil { - 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) + return } user, err := db.GetUser(session.Values["id"].(int64)) @@ -130,11 +130,9 @@ func EditSelf(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { func UpdateSelf(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - session, err := s.Get(r, "cookie") + session, err := getSession(w, r, c, s) if err != nil { - 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) + return } userData := UserData{ @@ -200,8 +198,11 @@ func UpdateSelf(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { func AddFirstUser(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - var err error + if _, err := getSession(w, r, c, s); err != nil { + return + } + var err error htmlData := UserData{ User: &b.User{ UserName: r.PostFormValue("username"), @@ -275,7 +276,11 @@ func AddFirstUser(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { func ShowAllUsers(c *b.Config, db *b.DB, s *b.CookieStore, action string) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - var err error + session, err := getSession(w, r, c, s) + if err != nil { + return + } + type htmlData struct { Users map[int64]*b.User Action string @@ -289,21 +294,18 @@ func ShowAllUsers(c *b.Config, db *b.DB, s *b.CookieStore, action string) http.H return } - session, err := s.Get(r, "cookie") - if err != nil { - 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) - } - delete(data.Users, session.Values["id"].(int64)) tmpl, err := template.ParseFiles(c.WebDir + "/templates/show-all-users.html") template.Must(tmpl, err).ExecuteTemplate(w, "page-content", data) } } -func EditUser(c *b.Config, db *b.DB) http.HandlerFunc { +func EditUser(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { + if _, err := getSession(w, r, c, s); err != nil { + return + } + id, err := strconv.ParseInt(r.PathValue("id"), 10, 64) if err != nil { log.Println(err) @@ -325,6 +327,11 @@ func EditUser(c *b.Config, db *b.DB) http.HandlerFunc { func UpdateUser(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { + session, err := getSession(w, r, c, s) + if err != nil { + return + } + id, err := strconv.ParseInt(r.PathValue("id"), 10, 64) if err != nil { log.Println(err) @@ -394,13 +401,6 @@ func UpdateUser(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { template.Must(tmpl, err).ExecuteTemplate(w, "page-content", userData) } - session, err := s.Get(r, "cookie") - if err != nil { - 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(c.WebDir + "/templates/hub.html") tmpl = template.Must(tmpl, err) tmpl.ExecuteTemplate(w, "page-content", session.Values["role"].(int)) @@ -409,6 +409,11 @@ func UpdateUser(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { func DeleteUser(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { + session, err := getSession(w, r, c, s) + if err != nil { + return + } + id, err := strconv.ParseInt(r.PathValue("id"), 10, 64) if err != nil { log.Println(err) @@ -422,13 +427,6 @@ func DeleteUser(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { return } - session, err := s.Get(r, "cookie") - if err != nil { - 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(c.WebDir + "/templates/hub.html") tmpl = template.Must(tmpl, err) tmpl.ExecuteTemplate(w, "page-content", session.Values["role"].(int)) diff --git a/cmd/frontend/verification.go b/cmd/frontend/verification.go new file mode 100644 index 0000000..7aded9b --- /dev/null +++ b/cmd/frontend/verification.go @@ -0,0 +1,22 @@ +package frontend + +import ( + "html/template" + "net/http" + + "github.com/gorilla/sessions" + b "streifling.com/jason/cpolis/cmd/backend" +) + +// getSession is used for verifying that the user is logged in and returns their session and an error. +func getSession(w http.ResponseWriter, r *http.Request, c *b.Config, s *b.CookieStore) (*sessions.Session, error) { + session, err := s.Get(r, "cookie") + if err != nil { + msg := "Session nicht mehr gültig. Bitte erneut anmelden." + tmpl, tmplErr := template.ParseFiles(c.WebDir + "/templates/login.html") + template.Must(tmpl, tmplErr).ExecuteTemplate(w, "page-content", msg) + return nil, err + } + + return session, nil +} diff --git a/cmd/main.go b/cmd/main.go index 3bd36db..c2ba0db 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -7,6 +7,7 @@ import ( "os" b "streifling.com/jason/cpolis/cmd/backend" + c "streifling.com/jason/cpolis/cmd/calls" f "streifling.com/jason/cpolis/cmd/frontend" ) @@ -48,15 +49,15 @@ func main() { http.FileServer(http.Dir(config.WebDir+"/static/")))) mux.HandleFunc("/", f.HomePage(config, db, store)) - mux.HandleFunc("GET /create-tag", f.CreateTag(config)) - mux.HandleFunc("GET /create-user", f.CreateUser(config)) + mux.HandleFunc("GET /create-tag", f.CreateTag(config, store)) + mux.HandleFunc("GET /create-user", f.CreateUser(config, store)) mux.HandleFunc("GET /edit-self", f.EditSelf(config, db, store)) - mux.HandleFunc("GET /edit-user/{id}", f.EditUser(config, db)) + mux.HandleFunc("GET /edit-user/{id}", f.EditUser(config, db, store)) mux.HandleFunc("GET /delete-user/{id}", f.DeleteUser(config, db, store)) mux.HandleFunc("GET /hub", f.ShowHub(config, db, store)) mux.HandleFunc("GET /logout", f.Logout(config, store)) - mux.HandleFunc("GET /pdf/get-list", f.ServePDFList(config)) - mux.HandleFunc("GET /pdf/{id}", f.ServePDF(config)) + mux.HandleFunc("GET /pdf/get-list", c.ServePDFList(config)) + mux.HandleFunc("GET /pdf/{id}", c.ServePDF(config)) mux.HandleFunc("GET /pics/{pic}", f.ServeImage(config, store)) mux.HandleFunc("GET /publish-article/{id}", f.PublishArticle(config, db, store)) mux.HandleFunc("GET /publish-issue", f.PublishLatestIssue(config, db, store)) @@ -64,11 +65,11 @@ func main() { mux.HandleFunc("GET /rejected-articles", f.ShowRejectedArticles(config, db, store)) mux.HandleFunc("GET /review-rejected-article/{id}", f.ReviewRejectedArticle(config, db, store)) mux.HandleFunc("GET /review-unpublished-article/{id}", f.ReviewUnpublishedArticle(config, db, store)) - mux.HandleFunc("GET /rss", func(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, config.RSSFile) }) + mux.HandleFunc("GET /rss", c.ServeRSS(config)) mux.HandleFunc("GET /show-all-users-edit", f.ShowAllUsers(config, db, store, "edit-user")) mux.HandleFunc("GET /show-all-users-delete", f.ShowAllUsers(config, db, store, "delete-user")) - mux.HandleFunc("GET /this-issue", f.ShowCurrentArticles(config, db)) - mux.HandleFunc("GET /unpublished-articles", f.ShowUnpublishedArticles(config, db)) + mux.HandleFunc("GET /this-issue", f.ShowCurrentArticles(config, db, store)) + mux.HandleFunc("GET /unpublished-articles", f.ShowUnpublishedArticles(config, db, store)) mux.HandleFunc("GET /write-article", f.WriteArticle(config, db, store)) mux.HandleFunc("POST /add-first-user", f.AddFirstUser(config, db, store)) @@ -79,7 +80,7 @@ func main() { mux.HandleFunc("POST /submit-article", f.SubmitArticle(config, db, store)) mux.HandleFunc("POST /update-self", f.UpdateSelf(config, db, store)) mux.HandleFunc("POST /update-user/{id}", f.UpdateUser(config, db, store)) - mux.HandleFunc("POST /upload-image", f.UploadImage(config)) + mux.HandleFunc("POST /upload-image", f.UploadImage(config, store)) log.Fatalln(http.ListenAndServe(config.Port, mux)) }