From 01e876d1e6a19afc9712da2645e68818bb4fad68 Mon Sep 17 00:00:00 2001 From: bytedream Date: Fri, 28 Jan 2022 14:41:40 +0100 Subject: [PATCH] Updated article loader and added test entry to database --- database.sqlite3 | Bin 65536 -> 65536 bytes database/schema.go | 13 +++++++++++ main.go | 27 ++++++++++++++-------- server/article.go | 56 +++++++++++++++++++++++++++++++++------------ 4 files changed, 72 insertions(+), 24 deletions(-) create mode 100644 database/schema.go diff --git a/database.sqlite3 b/database.sqlite3 index f5beee8ed8e490b2f3b313cd92fe9d5089e1f556..0baa834508ba9d04f76386ca355901eb5a8523a3 100644 GIT binary patch delta 150 zcmZo@U}ORPCYRt&RAS%kh!6B+_2vPtt352ssi%S#| S6+ldz0y|`$eu3Sh4*~#@KL7v# diff --git a/database/schema.go b/database/schema.go new file mode 100644 index 0000000..e9cbca7 --- /dev/null +++ b/database/schema.go @@ -0,0 +1,13 @@ +package database + +type Article struct { + Id int `gorm:"primaryKey"` + Title string + Summary string + Image string + Created int64 + Modified int64 + Link string + Markdown string + Html string +} diff --git a/main.go b/main.go index 8beac98..a548120 100644 --- a/main.go +++ b/main.go @@ -15,6 +15,21 @@ func main() { r := mux.NewRouter() r.StrictSlash(true) + setupApi(r) + setupFrontend(r) + + db, err := database.NewSqlite3Connection(config.DatabaseFile) + if err != nil { + panic(err) + } + database.SetGlobDB(db) + + if err := http.ListenAndServe(fmt.Sprintf(":%s", config.ServerPort), r); err != nil { + panic(err) + } +} + +func setupApi(r *mux.Router) { r.HandleFunc("/api/login", api.Login).Methods(http.MethodPost) r.HandleFunc("/api/authors", api.Authors).Methods(http.MethodGet) @@ -26,7 +41,9 @@ func main() { r.HandleFunc("/api/article", api.Article).Methods(http.MethodPost, http.MethodPatch, http.MethodDelete) r.HandleFunc("/api/assets", api.Assets).Methods(http.MethodGet, http.MethodPost, http.MethodDelete) +} +func setupFrontend(r *mux.Router) { r.HandleFunc("/article/{article}", server.Article).Methods(http.MethodGet) r.HandleFunc("/favicon.ico", func(w http.ResponseWriter, r *http.Request) { @@ -42,14 +59,4 @@ func main() { server.Error404(w, r) } }) - - db, err := database.NewSqlite3Connection(config.DatabaseFile) - if err != nil { - panic(err) - } - database.SetGlobDB(db) - - if err := http.ListenAndServe(fmt.Sprintf(":%s", config.ServerPort), r); err != nil { - panic(err) - } } diff --git a/server/article.go b/server/article.go index a1158c4..a02c71f 100644 --- a/server/article.go +++ b/server/article.go @@ -1,29 +1,57 @@ package server import ( + "TheAdversary/config" "TheAdversary/database" - "database/sql" - "fmt" "github.com/gorilla/mux" "net/http" + "text/template" + "time" ) -// var tmpl = template.Must(template.ParseFiles(config.ArticleTemplate)) +var tmpl = template.Must(template.ParseFiles(config.ArticleTemplate)) + +type tmplArticle struct { + Title string + Summary string + Image string + Authors []string + Tags []string + Date string + Modified bool + Content string +} func Article(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/html") articleName := mux.Vars(r)["article"] - var article string - if err := database.GetDB().Table("article").Select("html").Where("name = ?", articleName).First(&article).Error; err != nil { - if err == sql.ErrNoRows { - Error404(w, r) - } else { - Error500(w, r) - } - return - } + var article database.Article + if database.GetDB().Table("article").Where("link = ?", articleName).First(&article).RowsAffected == 0 { + Error404(w, r) + } else if database.GetDB().Error != nil { + Error500(w, r) + } else { + var authors, tags []string + database.GetDB().Table("author").Select("id").Where("id IN (?)", database.GetDB().Table("article_author").Select("author_id").Where("article_id = ?", article.Id)).Find(&authors) + database.GetDB().Table("article_tag").Where("article_id = ?", article.Id).Find(&tags) - w.WriteHeader(http.StatusOK) - fmt.Fprint(w, article) + ta := tmplArticle{ + Title: article.Title, + Summary: article.Summary, + Image: article.Image, + Authors: authors, + Tags: tags, + Content: article.Html, + } + if article.Modified > 0 { + ta.Date = time.Unix(article.Modified, 0).Format("Monday, 2. January 2006 | 15:04") + ta.Modified = true + } else { + ta.Date = time.Unix(article.Created, 0).Format("Monday, 2. January 2006 | 15:04") + } + + w.WriteHeader(http.StatusOK) + tmpl.Execute(w, ta) + } }