cabinet/web/entry.go

180 lines
3.5 KiB
Go
Raw Normal View History

package web
2019-11-03 20:01:24 +00:00
import (
"encoding/json"
"fmt"
2019-11-16 13:49:07 +00:00
"io/ioutil"
2019-11-03 20:01:24 +00:00
"net/http"
2019-11-08 01:54:00 +00:00
"time"
"github.com/rs/zerolog/log"
2019-11-03 20:01:24 +00:00
"code.chrissexton.org/cws/cabinet/entry"
"github.com/gorilla/mux"
)
2019-11-03 20:01:24 +00:00
func (web *Web) editEntry(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
slug := vars["slug"]
dec := json.NewDecoder(r.Body)
req := struct {
Content string
}{}
err := dec.Decode(&req)
2019-11-03 20:01:24 +00:00
if err != nil {
w.WriteHeader(500)
fmt.Fprint(w, err)
return
}
newEntry := entry.NewFromMd(web.db, req.Content)
2019-11-03 20:01:24 +00:00
oldEntry, err := entry.GetBySlug(web.db, slug)
if err != nil {
w.WriteHeader(500)
fmt.Fprint(w, err)
return
}
2019-11-08 01:54:00 +00:00
oldEntry.Content = newEntry.Content
oldEntry.Title = newEntry.Title
oldEntry.Slug = newEntry.UniqueSlug()
2019-11-08 01:54:00 +00:00
oldEntry.Tags = newEntry.Tags
oldEntry.Updated = time.Now()
err = oldEntry.Update()
2019-11-03 20:01:24 +00:00
if err != nil {
w.WriteHeader(500)
fmt.Fprint(w, err)
return
}
2019-11-08 01:54:00 +00:00
resp, err := json.Marshal(oldEntry)
2019-11-03 20:01:24 +00:00
if err != nil {
w.WriteHeader(500)
fmt.Fprint(w, err)
return
}
2019-11-08 01:54:00 +00:00
2019-11-03 20:01:24 +00:00
w.Header().Set("content-type", "application/json")
fmt.Fprint(w, string(resp))
}
2019-11-16 13:49:07 +00:00
func (web *Web) newMarkdownEntry(w http.ResponseWriter, r *http.Request) {
body, err := ioutil.ReadAll(r.Body)
if err != nil {
w.WriteHeader(500)
fmt.Fprint(w, err)
return
}
newEntry := entry.NewFromMd(web.db, string(body))
err = newEntry.Create()
if err != nil {
w.WriteHeader(500)
fmt.Fprint(w, err)
return
}
resp, err := json.Marshal(newEntry)
if err != nil {
w.WriteHeader(500)
fmt.Fprint(w, err)
return
}
w.Header().Set("content-type", "application/json")
fmt.Fprint(w, string(resp))
}
2019-11-03 20:01:24 +00:00
func (web *Web) newEntry(w http.ResponseWriter, r *http.Request) {
dec := json.NewDecoder(r.Body)
newEntry := entry.New(web.db)
err := dec.Decode(&newEntry)
if err != nil {
w.WriteHeader(500)
fmt.Fprint(w, err)
return
}
err = newEntry.Create()
if err != nil {
w.WriteHeader(500)
fmt.Fprint(w, err)
return
}
resp, err := json.Marshal(newEntry)
if err != nil {
w.WriteHeader(500)
fmt.Fprint(w, err)
return
}
w.Header().Set("content-type", "application/json")
fmt.Fprint(w, string(resp))
}
2019-11-03 20:01:24 +00:00
func (web *Web) allEntries(w http.ResponseWriter, r *http.Request) {
2019-11-08 04:39:16 +00:00
query := ""
tags := []string{}
if !web.AuthCheck(r) {
tags = append(tags, "public")
}
2019-11-08 04:39:16 +00:00
items, ok := r.URL.Query()["query"]
if ok {
query = items[0]
}
entries, err := entry.SearchByTag(web.db, query, tags)
2019-11-03 20:01:24 +00:00
if err != nil {
log.Error().Msgf("Error querying: %w", err)
2019-11-03 20:01:24 +00:00
w.WriteHeader(500)
fmt.Fprint(w, err)
return
}
resp, err := json.Marshal(entries)
if err != nil {
w.WriteHeader(500)
fmt.Fprint(w, err)
return
}
w.Header().Set("content-type", "application/json")
fmt.Fprint(w, string(resp))
}
func (web *Web) getEntry(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
slug := vars["slug"]
entry, err := entry.GetBySlug(web.db, slug)
if err != nil {
w.WriteHeader(500)
fmt.Fprint(w, err)
return
}
if !web.AuthCheck(r) && !entry.HasTag("public") {
w.WriteHeader(401)
fmt.Fprint(w, "not allowed")
return
}
2019-11-03 20:01:24 +00:00
resp, err := json.Marshal(entry)
if err != nil {
w.WriteHeader(500)
fmt.Fprint(w, err)
return
}
w.Header().Set("content-type", "application/json")
fmt.Fprint(w, string(resp))
}
2019-11-03 20:01:24 +00:00
func (web *Web) removeEntry(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
slug := vars["slug"]
2019-11-03 20:01:24 +00:00
err := entry.RemoveBySlug(web.db, slug)
if err != nil {
2019-11-08 05:26:02 +00:00
log.Error().Msgf("Error deleting: %s", err)
2019-11-03 20:01:24 +00:00
w.WriteHeader(500)
fmt.Fprint(w, err)
return
}
w.WriteHeader(200)
}