This commit is contained in:
Ruidy Nemausat 2020-03-15 12:47:45 +01:00
parent 9425dc16f6
commit 17387f25a8
8 changed files with 44 additions and 12 deletions

View file

@ -14,7 +14,8 @@ import (
// return template.Must(template.ParseFiles("templates/edit.html", "templates/view.html")) // add slice of fileNAmes // return template.Must(template.ParseFiles("templates/edit.html", "templates/view.html")) // add slice of fileNAmes
// } // }
func RegisteredRoutes() { // Router dispatch the request to the corresponding route handlers.
func Router() {
// http.HandleFunc("/", loveHandler) // http.HandleFunc("/", loveHandler)
http.HandleFunc("/view/", makeHandler(viewHandler)) http.HandleFunc("/view/", makeHandler(viewHandler))
http.HandleFunc("/edit/", makeHandler(editHandler)) http.HandleFunc("/edit/", makeHandler(editHandler))

View file

@ -7,6 +7,7 @@ import (
"github.com/joho/godotenv" "github.com/joho/godotenv"
) )
// Port value
var Port string = readEnv(".env") var Port string = readEnv(".env")
var tmplDir string = "templates/" var tmplDir string = "templates/"

5
go.mod
View file

@ -2,4 +2,7 @@ module github.com/rjNemo/go-wiki
go 1.14 go 1.14
require github.com/joho/godotenv v1.3.0 require (
github.com/joho/godotenv v1.3.0
github.com/lib/pq v1.3.0
)

2
go.sum
View file

@ -1,2 +1,4 @@
github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc=
github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
github.com/lib/pq v1.3.0 h1:/qkRGz8zljWiDcFvgpwUpwIAPu3r07TDvs3Rws+o/pU=
github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=

View file

@ -8,12 +8,12 @@ import (
) )
func main() { func main() {
startServer(controller.Port) startServer(controller.Port, controller.Router)
} }
func startServer(p string) { func startServer(p string, r func()) {
log.Printf("Start Go-wiki server on http://localhost:%s\n", controller.Port) log.Printf("Start Go-wiki server on http://localhost:%s\n", controller.Port)
port := ":" + p port := ":" + p
controller.RegisteredRoutes() r()
log.Fatal(http.ListenAndServe(port, nil)) log.Fatal(http.ListenAndServe(port, nil))
} }

View file

@ -4,29 +4,34 @@ import (
"io/ioutil" "io/ioutil"
) )
// A Page own a wiki page data and has a title and a body.
type Page struct { type Page struct {
Title string title string
Body []byte body []byte
} }
// BlankPage constructor returns a pointer to a blank Page.
func BlankPage() *Page { func BlankPage() *Page {
return &Page{Title: "Empty page", Body: []byte("Write some content")} return &Page{title: "Empty page", body: []byte("Write some content")}
} }
// NewPage constructor returns a pointer to a sample Page.
func NewPage(title string, body []byte) *Page { func NewPage(title string, body []byte) *Page {
return &Page{Title: title, Body: body} return &Page{title: title, body: body}
} }
// Save a page to the 'data/' folder in txt format.
func (p *Page) Save() error { func (p *Page) Save() error {
fileName := "data/" + p.Title + ".txt" fileName := "data/" + p.title + ".txt"
return ioutil.WriteFile(fileName, p.Body, 0600) return ioutil.WriteFile(fileName, p.body, 0600)
} }
// LoadPage reads a saved page data and returns a pointer to the Page.
func LoadPage(title string) (*Page, error) { func LoadPage(title string) (*Page, error) {
fileName := "data/" + title + ".txt" fileName := "data/" + title + ".txt"
body, err := ioutil.ReadFile(fileName) body, err := ioutil.ReadFile(fileName)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return &Page{Title: title, Body: body}, nil return &Page{title: title, body: body}, nil
} }

17
model/page_test.go Normal file
View file

@ -0,0 +1,17 @@
package model
import "testing"
func TestBlankPage(t *testing.T) {
ans := BlankPage()
if ans.title != "Empty page" && string(ans.body) != "Write some content" {
t.Errorf("BlankPage() = %v; want &Page{title: 'Empty page', body: []byte('Write some content')}", ans)
}
}
func TestNewPage(t *testing.T) {
ans := NewPage("Test Page", []byte("This is a sample page"))
if ans.title != "Test Page" && string(ans.body) != "This is a sample page" {
t.Errorf("NewPage() = %v; want &Page{title: 'Test Page', body: []byte('This is a sample page')}", ans)
}
}

View file

@ -6,6 +6,7 @@ import (
"net/smtp" "net/smtp"
) )
// Mail holds contact form information
type Mail struct { type Mail struct {
// Contact mail address // Contact mail address
from string from string
@ -16,10 +17,12 @@ type Mail struct {
var hostMail string = "ruidy.nemausat@gmail.com" var hostMail string = "ruidy.nemausat@gmail.com"
var smtpServer string = "smtp.gmail.com:587" var smtpServer string = "smtp.gmail.com:587"
// NewMail creates a Mail with from and body fields
func NewMail(from, body string) Mail { func NewMail(from, body string) Mail {
return Mail{from, body} return Mail{from, body}
} }
// MailClient runs a mail client and send mail
func MailClient(m Mail) { func MailClient(m Mail) {
c, err := smtp.Dial(smtpServer) c, err := smtp.Dial(smtpServer)
if err != nil { if err != nil {