diff --git a/controller/routes.go b/controller/routes.go index 6b5c484..909de23 100644 --- a/controller/routes.go +++ b/controller/routes.go @@ -1,12 +1,13 @@ package controller import ( + "fmt" "html/template" - "log" "net/http" "regexp" "github.com/rjNemo/go-wiki/model" + "github.com/rjNemo/go-wiki/service" ) // func ParseTemplates() *template.Template { @@ -18,13 +19,9 @@ func RegisteredRoutes() { http.HandleFunc("/view/", makeHandler(viewHandler)) http.HandleFunc("/edit/", makeHandler(editHandler)) http.HandleFunc("/save/", makeHandler(saveHandler)) + http.HandleFunc("/contact/", contactHandler) + http.HandleFunc("/contact/post", postContactHandler) http.HandleFunc("/", homeHandler) - log.Fatal(server(Port)) -} - -func server(p string) error { - port := ":" + p - return http.ListenAndServe(port, nil) } // func loveHandler(w http.ResponseWriter, r *http.Request) { @@ -34,9 +31,7 @@ func server(p string) error { // } func homeHandler(w http.ResponseWriter, r *http.Request) { - // viewHandler(w, r, "FrontPage") - p := model.BlankPage() - renderTemplate(w, "home", p) + renderTemplate(w, "home", nil) } func viewHandler(w http.ResponseWriter, r *http.Request, title string) { @@ -64,6 +59,23 @@ func saveHandler(w http.ResponseWriter, r *http.Request, title string) { http.Redirect(w, r, "/view/"+title, http.StatusFound) } +func contactHandler(w http.ResponseWriter, r *http.Request) { + renderTemplate(w, "contact", nil) +} + +func postContactHandler(w http.ResponseWriter, r *http.Request) { + err := r.ParseForm() + checkError(err, w) // bad error handling + mail := parseContactForm(r) + service.MailClient(mail) + fmt.Println(mail) + renderTemplate(w, "contact_sent", nil) +} + +func parseContactForm(r *http.Request) service.Mail { + return service.NewMail(r.PostFormValue("email"), r.PostFormValue("message")) +} + // var templates = template.Must(template.ParseFiles("templates/edit.html", "templates/view.html")) // add slice of fileNAmes func renderTemplate(w http.ResponseWriter, tmpl string, p *model.Page) { @@ -77,6 +89,7 @@ func renderTemplate(w http.ResponseWriter, tmpl string, p *model.Page) { func getTmplName(tmpl string) string { return tmplDir + tmpl + ".html" } + func checkError(err error, w http.ResponseWriter) { if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) diff --git a/data/database.go b/data/database.go new file mode 100644 index 0000000..27bc4ef --- /dev/null +++ b/data/database.go @@ -0,0 +1,17 @@ +package data + +import ( + "database/sql" + "log" + + _ "github.com/lib/pq" +) + +func main() { + connStr := "user=nemausat dbname=godb sslmode=verify-full" + db, err := sql.Open("postgres", connStr) + if err != nil { + log.Fatal(err) + } + defer db.Close() +} diff --git a/data/fetch.go b/data/fetch.go index 8e13553..476ef5f 100644 --- a/data/fetch.go +++ b/data/fetch.go @@ -12,7 +12,7 @@ import ( var exJson string = "https://jsonplaceholder.typicode.com/todos/1" func Main() { - b := fetchApi(exJson) + b := FetchApi(exJson) fmt.Println(b) } diff --git a/main.go b/main.go index 6f98bc9..d229110 100644 --- a/main.go +++ b/main.go @@ -2,6 +2,8 @@ package main import ( "fmt" + "log" + "net/http" "time" "github.com/rjNemo/go-wiki/controller" @@ -9,5 +11,11 @@ import ( func main() { fmt.Printf("Start Go-wiki server on http://localhost:%s at %s\n", controller.Port, time.Now()) - controller.RegisteredRoutes() + startServer(controller.Port) +} + +func startServer(p string) { + port := ":" + p + controller.RegisteredRoutes() + log.Fatal(http.ListenAndServe(port, nil)) } diff --git a/service/mail.go b/service/mail.go new file mode 100644 index 0000000..1f20de1 --- /dev/null +++ b/service/mail.go @@ -0,0 +1,56 @@ +package service + +import ( + "fmt" + "log" + "net/smtp" +) + +type Mail struct { + // Contact mail address + from string + // Mail body + message string +} + +var hostMail string = "ruidy.nemausat@gmail.com" +var smtpServer string = "smtp.gmail.com:587" + +func NewMail(from, body string) Mail { + return Mail{from, body} +} + +func MailClient(m Mail) { + c, err := smtp.Dial(smtpServer) + if err != nil { + log.Fatal(err) + } + + // c.StartTLS() + + if err := c.Mail(hostMail); err != nil { + log.Fatal(err) + } + + if err := c.Rcpt(hostMail); err != nil { + log.Fatal(err) + } + + wc, err := c.Data() + if err != nil { + log.Fatal(err) + } + + if _, err := fmt.Fprintf(wc, m.message); err != nil { + log.Fatal(err) + } + + if err := wc.Close(); err != nil { + log.Fatal(err) + } + + err = c.Quit() + if err != nil { + log.Fatal(err) + } +} diff --git a/templates/base.html b/templates/base.html index c8866ff..8b1aabc 100644 --- a/templates/base.html +++ b/templates/base.html @@ -29,6 +29,15 @@ > +