58 lines
1.5 KiB
Go
58 lines
1.5 KiB
Go
package core
|
|
|
|
import (
|
|
"fmt"
|
|
"html/template"
|
|
"net/http"
|
|
|
|
"github.com/gorilla/mux"
|
|
"github.com/kirsle/blog/core/forms"
|
|
"github.com/kirsle/blog/core/models/settings"
|
|
)
|
|
|
|
// ContactRoutes attaches the contact URL to the app.
|
|
func (b *Blog) ContactRoutes(r *mux.Router) {
|
|
r.HandleFunc("/contact", func(w http.ResponseWriter, r *http.Request) {
|
|
v := NewVars()
|
|
form := forms.Contact{}
|
|
v.Form = &form
|
|
|
|
// If there is no site admin, show an error.
|
|
cfg, err := settings.Load()
|
|
if err != nil {
|
|
b.Error(w, r, "Error loading site configuration!")
|
|
return
|
|
} else if cfg.Site.AdminEmail == "" {
|
|
b.Error(w, r, "There is no admin email configured for this website!")
|
|
return
|
|
} else if !cfg.Mail.Enabled {
|
|
b.Error(w, r, "This website doesn't have an e-mail gateway configured.")
|
|
return
|
|
}
|
|
|
|
// Posting?
|
|
if r.Method == http.MethodPost {
|
|
form.ParseForm(r)
|
|
if err = form.Validate(); err != nil {
|
|
b.Flash(w, r, err.Error())
|
|
} else {
|
|
go b.SendEmail(Email{
|
|
To: cfg.Site.AdminEmail,
|
|
Admin: true,
|
|
ReplyTo: form.Email,
|
|
Subject: fmt.Sprintf("Contact Form on %s: %s", cfg.Site.Title, form.Subject),
|
|
Template: ".email/contact.gohtml",
|
|
Data: map[string]interface{}{
|
|
"Name": form.Name,
|
|
"Message": template.HTML(b.RenderMarkdown(form.Message)),
|
|
"Email": form.Email,
|
|
},
|
|
})
|
|
b.FlashAndRedirect(w, r, "/contact", "Your message has been sent.")
|
|
}
|
|
}
|
|
|
|
b.RenderTemplate(w, r, "contact", v)
|
|
})
|
|
}
|