Add ability to display feed

This commit is contained in:
Jason Streifling 2024-02-24 14:49:29 +01:00
parent 36f7a92a06
commit 49988edd82
5 changed files with 69 additions and 48 deletions

View File

@ -102,16 +102,28 @@ func (db *DB) ChangePassword(id int64, oldPass, newPass string) error {
return fmt.Errorf("error creating password hash: %v", err) return fmt.Errorf("error creating password hash: %v", err)
} }
updateQuery := ` query := `
UPDATE users SET UPDATE users SET
password = ? password = ?
WHERE WHERE
id = ? id = ?
` `
_, err = db.Exec(updateQuery, string(newHashedPass), id) _, err = db.Exec(query, string(newHashedPass), id)
if err != nil { if err != nil {
return fmt.Errorf("error updating password in DB: %v", err) return fmt.Errorf("error updating password in DB: %v", err)
} }
return nil return nil
} }
func (db *DB) CountEntries() (int64, error) {
var count int64
query := `SELECT COUNT(*) FROM users`
row := db.QueryRow(query)
if err := row.Scan(&count); err != nil {
return 0, fmt.Errorf("error counting rows in user DB: %v", err)
}
return count, nil
}

View File

@ -1,10 +1,9 @@
package feed package data
import ( import (
"encoding/gob" "encoding/gob"
"fmt" "fmt"
"os" "os"
"time"
"github.com/gorilla/feeds" "github.com/gorilla/feeds"
) )
@ -23,22 +22,6 @@ func NewFeed(title, link, desc string) *Feed {
} }
} }
func SaveFeed(feed *Feed, filename string) error {
file, err := os.Create(filename)
if err != nil {
return fmt.Errorf("error creating file %v: %v", filename, err)
}
defer file.Close()
encoder := gob.NewEncoder(file)
err = encoder.Encode(feed)
if err != nil {
return fmt.Errorf("error encoding file %v: %v", filename, err)
}
return nil
}
func OpenFeed(filename string) (*Feed, error) { func OpenFeed(filename string) (*Feed, error) {
file, err := os.Open(filename) file, err := os.Open(filename)
if err != nil { if err != nil {
@ -56,20 +39,18 @@ func OpenFeed(filename string) (*Feed, error) {
return feed, nil return feed, nil
} }
func AddToFeed(feed *Feed, title, desc, content string) error { func (feed *Feed) Save(filename string) error {
item := feeds.Item{ file, err := os.Create(filename)
Title: title,
Created: time.Now(),
Description: desc,
Content: content,
}
feed.Add(&item)
rss, err := feed.ToRss()
if err != nil { if err != nil {
return fmt.Errorf("error converting feed to RSS: %v", err) return fmt.Errorf("error creating file %v: %v", filename, err)
}
defer file.Close()
encoder := gob.NewEncoder(file)
err = encoder.Encode(feed)
if err != nil {
return fmt.Errorf("error encoding file %v: %v", filename, err)
} }
fmt.Println(rss)
return nil return nil
} }

View File

@ -5,12 +5,13 @@ import (
"html/template" "html/template"
"log" "log"
"net/http" "net/http"
"time"
"github.com/gorilla/feeds"
"streifling.com/jason/cpolis/cmd/data" "streifling.com/jason/cpolis/cmd/data"
"streifling.com/jason/cpolis/cmd/feed"
) )
func HandleLogin(db *data.DB) http.HandlerFunc { func Login(db *data.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) { return func(w http.ResponseWriter, r *http.Request) {
user := r.PostFormValue("username") user := r.PostFormValue("username")
pass := r.PostFormValue("password") pass := r.PostFormValue("password")
@ -32,7 +33,7 @@ func HandleLogin(db *data.DB) http.HandlerFunc {
} }
} }
func HandleFinishedEdit(f *feed.Feed) http.HandlerFunc { func FinishEdit(feed *data.Feed) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) { return func(w http.ResponseWriter, r *http.Request) {
title := r.PostFormValue("editor-title") title := r.PostFormValue("editor-title")
desc := r.PostFormValue("editor-desc") desc := r.PostFormValue("editor-desc")
@ -45,13 +46,25 @@ func HandleFinishedEdit(f *feed.Feed) http.HandlerFunc {
return return
} }
feed.AddToFeed(f, title, desc, content) feed.Add(&feeds.Item{
feed.SaveFeed(f, "tmp/rss.gob") Title: title,
// template.Must(template.ParseFiles("web/templates/editor.html")).ExecuteTemplate(w, "html-result", rssItem) Created: time.Now(),
Description: desc,
Content: content,
})
feed.Save("tmp/rss.gob")
rss, err := feed.ToRss()
if err != nil {
log.Println(err)
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
template.Must(template.ParseFiles("web/templates/feed.rss")).ExecuteTemplate(w, "page-content", rss)
} }
} }
func HandleAddUser(db *data.DB) http.HandlerFunc { func AddUser(db *data.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) { return func(w http.ResponseWriter, r *http.Request) {
var writer, editor, admin bool var writer, editor, admin bool

30
main.go
View File

@ -1,13 +1,13 @@
package main package main
import ( import (
"fmt"
"html/template" "html/template"
"log" "log"
"net/http" "net/http"
"os" "os"
"streifling.com/jason/cpolis/cmd/data" "streifling.com/jason/cpolis/cmd/data"
"streifling.com/jason/cpolis/cmd/feed"
"streifling.com/jason/cpolis/cmd/ui" "streifling.com/jason/cpolis/cmd/ui"
) )
@ -25,23 +25,35 @@ func main() {
} }
defer db.Close() defer db.Close()
rss, err := feed.OpenFeed("tmp/rss.gob") feed, err := data.OpenFeed("tmp/rss.gob")
if err != nil { if err != nil {
log.Println(err) log.Println(err)
rss = feed.NewFeed("Freimaurer Distrikt Niedersachsen und Sachsen-Anhalt", feed = data.NewFeed("Freimaurer Distrikt Niedersachsen und Sachsen-Anhalt",
"https://distrikt-ni-st.de", "https://distrikt-ni-st.de",
"Freiheit, Gleichheit, Brüderlichkeit, Toleranz und Humanität") "Freiheit, Gleichheit, Brüderlichkeit, Toleranz und Humanität")
} }
mux := http.NewServeMux() mux := http.NewServeMux()
mux.Handle("/web/static/", http.StripPrefix("/web/static/", http.FileServer(http.Dir("web/static/")))) mux.Handle("/web/static/", http.StripPrefix("/web/static/", http.FileServer(http.Dir("web/static/"))))
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
template.Must(template.ParseFiles("web/templates/index.html", "web/templates/login.html")).Execute(w, nil)
})
mux.HandleFunc("POST /add-user/", ui.HandleAddUser(db)) numRows, err := db.CountEntries()
mux.HandleFunc("POST /finished-edit/", ui.HandleFinishedEdit(rss)) if err != nil {
mux.HandleFunc("POST /login/", ui.HandleLogin(db)) log.Fatalln(err)
}
fmt.Println(numRows)
if numRows == 0 {
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
template.Must(template.ParseFiles("web/templates/index.html", "web/templates/add-user.html")).Execute(w, nil)
})
} else {
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
template.Must(template.ParseFiles("web/templates/index.html", "web/templates/login.html")).Execute(w, nil)
})
}
mux.HandleFunc("POST /add-user/", ui.AddUser(db))
mux.HandleFunc("POST /finished-edit/", ui.FinishEdit(feed))
mux.HandleFunc("POST /login/", ui.Login(db))
log.Fatalln(http.ListenAndServe(":8080", mux)) log.Fatalln(http.ListenAndServe(":8080", mux))
} }

3
web/templates/feed.rss Normal file
View File

@ -0,0 +1,3 @@
{{define "page-content"}}
{{.}}
{{end}}