From 491462e033ae78a5b5c4f93ed8d5663e4da0a9e3 Mon Sep 17 00:00:00 2001 From: horus_arch Date: Fri, 20 Mar 2015 23:16:27 +0100 Subject: Fix bug which prevented creating a new entry. --- Makefile | 2 ++ domain.go | 21 +++++++++++++++++---- domain_test.go | 7 ++++--- env.sh | 2 +- handler.go | 32 ++++++++++++++++++++++++++++++-- mailer | Bin 11874821 -> 12001936 bytes main.go | 1 + server.go | 18 ++++++++++++++++-- utilities_test.go | 5 ----- views/register.html | 51 ++++++++++++++++++++++++++++++++------------------- 10 files changed, 103 insertions(+), 36 deletions(-) diff --git a/Makefile b/Makefile index 6f3925b..cb4c7db 100644 --- a/Makefile +++ b/Makefile @@ -130,3 +130,5 @@ gen_config: _test_build echo "export FREEMAIL_SMTP_PASSWORD=$(FREEMAIL_SMTP_PASSWORD)" >> _env.sh echo "export FREEMAIL_SMTP_ADRESS=$(FREEMAIL_SMTP_ADRESS)" >> _env.sh @chmod +x _env.sh + +restart: kill build run diff --git a/domain.go b/domain.go index 501351b..aa0ce40 100644 --- a/domain.go +++ b/domain.go @@ -33,12 +33,13 @@ func (vD VirtualDomain) CreateDomain() bool { } func (vD VirtualDomain) ValidateDomain(ref string) bool { + log.Println("Validating " + vD.Name) if vD.Name == "" { return false } addr, err := net.LookupIP(vD.Name) if err != nil { - log.Println(err) + log.Println(vD.Name + " " + err.Error()) return false } if len(addr) == 0 { @@ -46,23 +47,35 @@ func (vD VirtualDomain) ValidateDomain(ref string) bool { } serverIP, err := net.LookupIP(ref) if err != nil { - log.Println(err) + log.Println(ref + " " + err.Error()) return false } return reflect.DeepEqual(serverIP, addr) } func (vD VirtualDomain) ValidateDomainMX(ref string) bool { + log.Println("Validating MX " + vD.Name) if vD.Name == "" { + log.Println("Empty domain.") return false } mx, err := net.LookupMX(vD.Name) if err != nil { - log.Println(err) + log.Println("Lookup error " + vD.Name + " " + err.Error()) return false } match := false + + serverIP, err := net.LookupIP(ref) + if err != nil { + log.Println("Lookup error for server " + ref + " " + err.Error()) + return false + } for _, v := range mx { - if v.Host == ref { + mxIP, err := net.LookupIP(v.Host) + if err != nil { + log.Println(err) + } + if reflect.DeepEqual(serverIP, mxIP) { match = true } } diff --git a/domain_test.go b/domain_test.go index 20d927a..1560d55 100644 --- a/domain_test.go +++ b/domain_test.go @@ -43,7 +43,8 @@ func TestValidateDomain(t *testing.T) { if d.ValidateDomain("wikipedia.de") { t.Fatal("'" + d.Name + "' and wikipedia.de do not share IPs.") } - if !d.ValidateDomain("google.com") { + d.Name = "localhost" + if !d.ValidateDomain("localhost") { t.Fatal("'" + d.Name + "' is a valid domain.") } } @@ -52,9 +53,9 @@ func TestValidateDomainMX(t *testing.T) { if testing.Short() || !*testExternal { t.Skip("Skipping test to avoid external network.") } - d := VirtualDomain{Name: "heise.de"} + d := VirtualDomain{Name: "google.com"} if d.ValidateDomainMX(os.Getenv("FREEMAIL_SMTP_MAILER_MX")) { - t.Fatal("heise.de MX record doesn't point to this server.") + t.Fatal("google.cm MX record doesn't point to this server.") } d.Name = "iamfabulous.de" if !d.ValidateDomainMX(os.Getenv("FREEMAIL_SMTP_MAILER_MX")) { diff --git a/env.sh b/env.sh index 15983eb..20d5dd3 100755 --- a/env.sh +++ b/env.sh @@ -17,7 +17,7 @@ export FREEMAIL_HTTP_IP=127.0.0.1 export FREEMAIL_HTTP_PORT=8080 # SMTP -export FREEMAIL_SMTP_MAILER_MX="mx.example.org" +export FREEMAIL_SMTP_MAILER_MX=mx.iamfabulous.de #export FREEMAIL_SMTP_MAILER="smtp.example.org:25" #export FREEMAIL_SMTP_PASSWORD="password" #export FREEMAIL_SMTP_ADRESS="foo@example.org" diff --git a/handler.go b/handler.go index 4e077db..dd761e4 100644 --- a/handler.go +++ b/handler.go @@ -16,11 +16,39 @@ func IndexHandler(w http.ResponseWriter, r *http.Request) { flash.Success = session.Flashes("success") session.Save(r, w) - index := mainTempl.Lookup("index.html") + /* + index := mainTempl.Lookup("index.html") - err = index.ExecuteTemplate(w, "index.html", flash) + err = index.ExecuteTemplate(w, "index.html", flash) + if err != nil { + log.Println(err) + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + */ + + err = ExecTemplate("index.html", w, flash) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + session.Save(r, w) +} + +func RegisterHandler(w http.ResponseWriter, r *http.Request) { + session, err := store.Get(r, "_SID") if err != nil { log.Println(err) + } + + flash := Flash{} + flash.Error = session.Flashes("error") + flash.Success = session.Flashes("success") + session.Save(r, w) + + err = ExecTemplate("register.html", w, flash) + if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } diff --git a/mailer b/mailer index 03b8fcd..940dff0 100755 Binary files a/mailer and b/mailer differ diff --git a/main.go b/main.go index 23e15b4..d73587b 100644 --- a/main.go +++ b/main.go @@ -33,6 +33,7 @@ func main() { r := mux.NewRouter() r.HandleFunc("/", IndexHandler) + r.HandleFunc("/register", RegisterHandler) r.HandleFunc("/create", CreateNewEntryHandler).Methods("POST") r.PathPrefix("/static/").Handler(http.StripPrefix("/static/", http.FileServer(http.Dir("./static")))) diff --git a/server.go b/server.go index 66e3a94..746ac92 100644 --- a/server.go +++ b/server.go @@ -2,10 +2,13 @@ package main import ( "errors" + "log" + "net/http" "os" ) func CreateNewEntry(email, password string) error { + serverIP := os.Getenv("FREEMAIL_SMTP_MAILER_MX") if !ValidateEmail(email) { return errors.New("This doesn't look like a mail adress.") } @@ -19,10 +22,10 @@ func CreateNewEntry(email, password string) error { vD := VirtualDomain{} vD.Name = GetDomain(vU.Email) - if !vD.ValidateDomainMX(os.Getenv("FREEMAIL_SMTP_MAILER_MX")) { + if !vD.ValidateDomainMX(serverIP) { return errors.New("The MX record doesn't point to this server.") } - if !vD.ValidateDomain(os.Getenv("FREEMAIL_SMTP_MAILER_MX")) { + if !vD.ValidateDomain(serverIP) { return errors.New("This doesn't look like a good domain. Host not found.") } @@ -39,3 +42,14 @@ func CreateNewEntry(email, password string) error { } return nil } + +func ExecTemplate(template string, w http.ResponseWriter, flash Flash) error { + index := mainTempl.Lookup(template) + + err := index.ExecuteTemplate(w, template, flash) + if err != nil { + log.Println(err) + return err + } + return nil +} diff --git a/utilities_test.go b/utilities_test.go index 6e4d31c..4776323 100644 --- a/utilities_test.go +++ b/utilities_test.go @@ -1,5 +1,3 @@ -// +build all general - package main import ( @@ -23,6 +21,3 @@ func TestCompareStrings(t *testing.T) { t.Fatal("Strings are not equal. Exptected false") } } - -func TestCompareIPs(t *testing.T) { -} diff --git a/views/register.html b/views/register.html index b1481fc..71bb035 100644 --- a/views/register.html +++ b/views/register.html @@ -1,40 +1,53 @@ {{template "header.html"}} {{template "navbar.html"}} + +{{if .Error}}
+ {{.}} - -{{end}} +
+ {{end}}+ {{.}} +
+ {{end}}