Changed everything to MVC
This commit is contained in:
		@@ -1,4 +1,4 @@
 | 
			
		||||
package data
 | 
			
		||||
package control
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
@@ -1,13 +1,14 @@
 | 
			
		||||
package data
 | 
			
		||||
package control
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"git.streifling.com/jason/rss"
 | 
			
		||||
	"streifling.com/jason/cpolis/cmd/data"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func GetChannel(db *DB, title, link, desc string) (*rss.Channel, error) {
 | 
			
		||||
func GetChannel(db *data.DB, title, link, desc string) (*rss.Channel, error) {
 | 
			
		||||
	channel := &rss.Channel{
 | 
			
		||||
		Title:       title,
 | 
			
		||||
		Link:        link,
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
package data
 | 
			
		||||
package control
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"crypto/rand"
 | 
			
		||||
@@ -1,15 +0,0 @@
 | 
			
		||||
package data
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type Article struct {
 | 
			
		||||
	Title     string
 | 
			
		||||
	Created   time.Time
 | 
			
		||||
	Desc      string
 | 
			
		||||
	Content   string
 | 
			
		||||
	Published bool
 | 
			
		||||
	ID        int64
 | 
			
		||||
	AuthorID  int64
 | 
			
		||||
}
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
package data
 | 
			
		||||
 | 
			
		||||
type Tag struct {
 | 
			
		||||
	Name string
 | 
			
		||||
	ID   int64
 | 
			
		||||
}
 | 
			
		||||
@@ -1,16 +0,0 @@
 | 
			
		||||
package data
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	Admin = iota
 | 
			
		||||
	Editor
 | 
			
		||||
	Writer
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type User struct {
 | 
			
		||||
	UserName         string
 | 
			
		||||
	FirstName        string
 | 
			
		||||
	LastName         string
 | 
			
		||||
	RejectedArticles []*Article
 | 
			
		||||
	ID               int64
 | 
			
		||||
	Role             int
 | 
			
		||||
}
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
package data
 | 
			
		||||
package model
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"database/sql"
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
package data
 | 
			
		||||
package model
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bufio"
 | 
			
		||||
							
								
								
									
										35
									
								
								cmd/model/structs.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								cmd/model/structs.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
package model
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	Admin = iota
 | 
			
		||||
	Editor
 | 
			
		||||
	Writer
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type User struct {
 | 
			
		||||
	UserName         string
 | 
			
		||||
	FirstName        string
 | 
			
		||||
	LastName         string
 | 
			
		||||
	RejectedArticles []*Article
 | 
			
		||||
	ID               int64
 | 
			
		||||
	Role             int
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Tag struct {
 | 
			
		||||
	Name string
 | 
			
		||||
	ID   int64
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Article struct {
 | 
			
		||||
	Title     string
 | 
			
		||||
	Created   time.Time
 | 
			
		||||
	Desc      string
 | 
			
		||||
	Content   string
 | 
			
		||||
	Published bool
 | 
			
		||||
	ID        int64
 | 
			
		||||
	AuthorID  int64
 | 
			
		||||
}
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
package ui
 | 
			
		||||
package view
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
@@ -7,15 +7,16 @@ import (
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"strconv"
 | 
			
		||||
 | 
			
		||||
	"streifling.com/jason/cpolis/cmd/data"
 | 
			
		||||
	"streifling.com/jason/cpolis/cmd/control"
 | 
			
		||||
	"streifling.com/jason/cpolis/cmd/model"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type AddUserData struct {
 | 
			
		||||
	*data.User
 | 
			
		||||
	*model.User
 | 
			
		||||
	Msg string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func inputsEmpty(user *data.User, pass, pass2 string) bool {
 | 
			
		||||
func inputsEmpty(user *model.User, pass, pass2 string) bool {
 | 
			
		||||
	return len(user.UserName) == 0 ||
 | 
			
		||||
		len(user.FirstName) == 0 ||
 | 
			
		||||
		len(user.LastName) == 0 ||
 | 
			
		||||
@@ -23,7 +24,7 @@ func inputsEmpty(user *data.User, pass, pass2 string) bool {
 | 
			
		||||
		len(pass2) == 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func checkUserStrings(user *data.User) (string, int, bool) {
 | 
			
		||||
func checkUserStrings(user *model.User) (string, int, bool) {
 | 
			
		||||
	userLen := 15
 | 
			
		||||
	nameLen := 50
 | 
			
		||||
 | 
			
		||||
@@ -43,7 +44,7 @@ func CreateUser(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
	template.Must(tmpl, err).ExecuteTemplate(w, "page-content", nil)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func AddUser(db *data.DB, s *data.CookieStore) http.HandlerFunc {
 | 
			
		||||
func AddUser(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 {
 | 
			
		||||
@@ -53,7 +54,7 @@ func AddUser(db *data.DB, s *data.CookieStore) http.HandlerFunc {
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		htmlData := AddUserData{
 | 
			
		||||
			User: &data.User{
 | 
			
		||||
			User: &model.User{
 | 
			
		||||
				UserName:  r.PostFormValue("username"),
 | 
			
		||||
				FirstName: r.PostFormValue("first-name"),
 | 
			
		||||
				LastName:  r.PostFormValue("last-name"),
 | 
			
		||||
@@ -99,9 +100,9 @@ func AddUser(db *data.DB, s *data.CookieStore) http.HandlerFunc {
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		if num == 0 {
 | 
			
		||||
			if htmlData.Role != data.Admin {
 | 
			
		||||
			if htmlData.Role != model.Admin {
 | 
			
		||||
				htmlData.Msg = "Der erste Benutzer muss ein Administrator sein."
 | 
			
		||||
				htmlData.Role = data.Admin
 | 
			
		||||
				htmlData.Role = model.Admin
 | 
			
		||||
				tmpl, err := template.ParseFiles("web/templates/add-user.html")
 | 
			
		||||
				tmpl = template.Must(tmpl, err)
 | 
			
		||||
				tmpl.ExecuteTemplate(w, "page-content", htmlData)
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
package ui
 | 
			
		||||
package view
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"html/template"
 | 
			
		||||
@@ -6,10 +6,11 @@ import (
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"strconv"
 | 
			
		||||
 | 
			
		||||
	"streifling.com/jason/cpolis/cmd/data"
 | 
			
		||||
	"streifling.com/jason/cpolis/cmd/control"
 | 
			
		||||
	"streifling.com/jason/cpolis/cmd/model"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func ShowHub(s *data.CookieStore) http.HandlerFunc {
 | 
			
		||||
func ShowHub(s *control.CookieStore) http.HandlerFunc {
 | 
			
		||||
	return func(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
		session, err := s.Get(r, "cookie")
 | 
			
		||||
		if err != nil {
 | 
			
		||||
@@ -23,7 +24,7 @@ func ShowHub(s *data.CookieStore) http.HandlerFunc {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func WriteArticle(db *data.DB) http.HandlerFunc {
 | 
			
		||||
func WriteArticle(db *model.DB) http.HandlerFunc {
 | 
			
		||||
	return func(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
		tags, err := db.GetTagList()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
@@ -37,26 +38,26 @@ func WriteArticle(db *data.DB) http.HandlerFunc {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func FinishArticle(db *data.DB, s *data.CookieStore) http.HandlerFunc {
 | 
			
		||||
func FinishArticle(db *model.DB, s *control.CookieStore) http.HandlerFunc {
 | 
			
		||||
	return func(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
		article := new(data.Article)
 | 
			
		||||
		article := new(model.Article)
 | 
			
		||||
		var err error
 | 
			
		||||
 | 
			
		||||
		article.Title, err = data.ConvertToPlain(r.PostFormValue("editor-title"))
 | 
			
		||||
		article.Title, err = control.ConvertToPlain(r.PostFormValue("editor-title"))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			log.Println(err)
 | 
			
		||||
			http.Error(w, err.Error(), http.StatusInternalServerError)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		article.Desc, err = data.ConvertToPlain(r.PostFormValue("editor-desc"))
 | 
			
		||||
		article.Desc, err = control.ConvertToPlain(r.PostFormValue("editor-desc"))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			log.Println(err)
 | 
			
		||||
			http.Error(w, err.Error(), http.StatusInternalServerError)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		article.Content, err = data.ConvertToHTML(r.PostFormValue("editor-text"))
 | 
			
		||||
		article.Content, err = control.ConvertToHTML(r.PostFormValue("editor-text"))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			log.Println(err)
 | 
			
		||||
			http.Error(w, err.Error(), http.StatusInternalServerError)
 | 
			
		||||
@@ -101,7 +102,7 @@ func FinishArticle(db *data.DB, s *data.CookieStore) http.HandlerFunc {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func ShowUnpublishedArticles(db *data.DB) http.HandlerFunc {
 | 
			
		||||
func ShowUnpublishedArticles(db *model.DB) http.HandlerFunc {
 | 
			
		||||
	return func(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
		articles, err := db.GetCertainArticles(false)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
@@ -114,7 +115,7 @@ func ShowUnpublishedArticles(db *data.DB) http.HandlerFunc {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func ReviewArticle(db *data.DB, s *data.CookieStore) http.HandlerFunc {
 | 
			
		||||
func ReviewArticle(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 {
 | 
			
		||||
@@ -143,7 +144,7 @@ func ReviewArticle(db *data.DB, s *data.CookieStore) http.HandlerFunc {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func PublishArticle(db *data.DB, s *data.CookieStore) http.HandlerFunc {
 | 
			
		||||
func PublishArticle(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 {
 | 
			
		||||
@@ -1,10 +1,11 @@
 | 
			
		||||
package ui
 | 
			
		||||
package view
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"html/template"
 | 
			
		||||
	"net/http"
 | 
			
		||||
 | 
			
		||||
	"streifling.com/jason/cpolis/cmd/data"
 | 
			
		||||
	"streifling.com/jason/cpolis/cmd/control"
 | 
			
		||||
	"streifling.com/jason/cpolis/cmd/model"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func CreateTag(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
@@ -12,7 +13,7 @@ func CreateTag(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
	template.Must(tmpl, err).ExecuteTemplate(w, "page-content", nil)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func AddTag(db *data.DB, s *data.CookieStore) http.HandlerFunc {
 | 
			
		||||
func AddTag(db *model.DB, s *control.CookieStore) http.HandlerFunc {
 | 
			
		||||
	return func(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
		db.AddTag(r.PostFormValue("tag"))
 | 
			
		||||
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
package ui
 | 
			
		||||
package view
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"html/template"
 | 
			
		||||
@@ -7,10 +7,10 @@ import (
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"git.streifling.com/jason/rss"
 | 
			
		||||
	"streifling.com/jason/cpolis/cmd/data"
 | 
			
		||||
	"streifling.com/jason/cpolis/cmd/model"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func ShowRSS(db *data.DB, title, link, desc string) http.HandlerFunc {
 | 
			
		||||
func ShowRSS(db *model.DB, title, link, desc string) http.HandlerFunc {
 | 
			
		||||
	return func(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
		channel := &rss.Channel{
 | 
			
		||||
			Title:       title,
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
package ui
 | 
			
		||||
package view
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
@@ -6,10 +6,11 @@ import (
 | 
			
		||||
	"log"
 | 
			
		||||
	"net/http"
 | 
			
		||||
 | 
			
		||||
	"streifling.com/jason/cpolis/cmd/data"
 | 
			
		||||
	"streifling.com/jason/cpolis/cmd/control"
 | 
			
		||||
	"streifling.com/jason/cpolis/cmd/model"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func saveSession(w http.ResponseWriter, r *http.Request, s *data.CookieStore, u *data.User) error {
 | 
			
		||||
func saveSession(w http.ResponseWriter, r *http.Request, s *control.CookieStore, u *model.User) error {
 | 
			
		||||
	session, err := s.Get(r, "cookie")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return fmt.Errorf("error getting session: %v", err)
 | 
			
		||||
@@ -26,7 +27,7 @@ func saveSession(w http.ResponseWriter, r *http.Request, s *data.CookieStore, u
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func HomePage(db *data.DB, s *data.CookieStore) http.HandlerFunc {
 | 
			
		||||
func HomePage(db *model.DB, s *control.CookieStore) http.HandlerFunc {
 | 
			
		||||
	return func(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
		numRows, err := db.CountEntries()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
@@ -53,7 +54,7 @@ func HomePage(db *data.DB, s *data.CookieStore) http.HandlerFunc {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Login(db *data.DB, s *data.CookieStore) http.HandlerFunc {
 | 
			
		||||
func Login(db *model.DB, s *control.CookieStore) http.HandlerFunc {
 | 
			
		||||
	return func(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
		userName := r.PostFormValue("username")
 | 
			
		||||
		password := r.PostFormValue("password")
 | 
			
		||||
		Reference in New Issue
	
	Block a user