summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--domain.go22
-rw-r--r--email.go6
-rwxr-xr-xenv.sh2
-rw-r--r--handler.go22
-rw-r--r--main.go4
-rw-r--r--server.go4
-rw-r--r--user.go2
-rw-r--r--utilities.go18
-rw-r--r--utilities_test.go38
9 files changed, 87 insertions, 31 deletions
diff --git a/domain.go b/domain.go
index 6136f63..252cab4 100644
--- a/domain.go
+++ b/domain.go
@@ -10,7 +10,7 @@ import (
func (vD VirtualDomain) DomainExists() bool {
query := Db.Where("name = ?", vD.Name).Find(&vD)
if query.Error != nil {
- log.Println(query.Error)
+ log.Println("Info: Query error.", query.Error)
return false
}
if vD.Name == "" {
@@ -21,25 +21,25 @@ func (vD VirtualDomain) DomainExists() bool {
func (vD VirtualDomain) CreateDomain() bool {
if !Db.NewRecord(vD) {
- log.Println("Creating new record failed.", vD.Name)
+ log.Println("Info: Creating new record failed.", vD.Name)
return false
}
query := Db.Create(&vD)
if query.Error != nil {
- log.Println(query.Error)
+ log.Println("Info: Query error.", query.Error)
return false
}
return true
}
func (vD VirtualDomain) ValidateDomain(ref string) bool {
- log.Println("Validating " + vD.Name)
+ log.Println("Info: Validating " + vD.Name)
if vD.Name == "" {
return false
}
addr, err := net.LookupIP(vD.Name)
if err != nil {
- log.Println(vD.Name + " " + err.Error())
+ log.Println("Info: ", vD.Name+" "+err.Error())
return false
}
if len(addr) == 0 {
@@ -47,33 +47,33 @@ func (vD VirtualDomain) ValidateDomain(ref string) bool {
}
serverIP, err := net.LookupIP(ref)
if err != nil {
- log.Println(ref + " " + err.Error())
+ log.Println("Info: ", ref+" "+err.Error())
return false
}
return reflect.DeepEqual(serverIP, addr)
}
func (vD VirtualDomain) ValidateDomainMX(ref string) bool {
- log.Println("Validating MX " + vD.Name)
+ log.Println("Info: Validating MX " + vD.Name)
if vD.Name == "" {
- log.Println("Empty domain.")
+ log.Println("Info: Empty domain.")
return false
}
mx, err := net.LookupMX(vD.Name)
if err != nil {
- log.Println("Lookup error " + vD.Name + " " + err.Error())
+ log.Println("Info: 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())
+ log.Println("Info: Lookup error for server " + ref + " " + err.Error())
return false
}
for _, v := range mx {
mxIP, err := net.LookupIP(v.Host)
if err != nil {
- log.Println(err)
+ log.Println("Info: ", err)
}
if reflect.DeepEqual(serverIP, mxIP) {
match = true
diff --git a/email.go b/email.go
index 43bde50..4665986 100644
--- a/email.go
+++ b/email.go
@@ -8,7 +8,7 @@ import (
func (vU VirtualUser) EmailExists() bool {
query := Db.Where("email = ?", vU.Email).Find(&vU)
if query.Error != nil {
- log.Println(query.Error)
+ log.Println("Info: ", query.Error)
return false
}
if vU.Email == "" {
@@ -19,12 +19,12 @@ func (vU VirtualUser) EmailExists() bool {
func (vU VirtualUser) CreateEmail() bool {
if !Db.NewRecord(vU) {
- log.Println("Creating new record failed.", vU)
+ log.Println("Info: Creating new record failed.", vU)
return false
}
query := Db.Create(&vU)
if query.Error != nil {
- log.Println(query.Error)
+ log.Println("Info: ", query.Error)
return false
}
return true
diff --git a/env.sh b/env.sh
index 20d5dd3..b5485b3 100755
--- a/env.sh
+++ b/env.sh
@@ -5,7 +5,7 @@
export FREEMAIL_DB_DRIVER=sqlite3
export FREEMAIL_DB_CREDENTIALS=./db/freemail.db
export FREEMAIL_DB_IMPORT_DRIVER=github.com/mattn/go-sqlite3
-export FREEMAIL_DB_LOG=true
+export FREEMAIL_DB_LOG=false
export FREEMAIL_SECRET=verylongsecret
# Redis
diff --git a/handler.go b/handler.go
index f84dda0..9035f87 100644
--- a/handler.go
+++ b/handler.go
@@ -8,7 +8,7 @@ import (
func IndexHandler(w http.ResponseWriter, r *http.Request) {
session, err := store.Get(r, "_SID")
if err != nil {
- log.Println(err)
+ log.Println("Info: ", err)
}
flash := Flash{}
@@ -28,7 +28,7 @@ func IndexHandler(w http.ResponseWriter, r *http.Request) {
func RegisterHandler(w http.ResponseWriter, r *http.Request) {
session, err := store.Get(r, "_SID")
if err != nil {
- log.Println(err)
+ log.Println("Info: ", err)
}
flash := Flash{}
@@ -61,7 +61,7 @@ func CreateNewEntryHandler(w http.ResponseWriter, r *http.Request) {
session, err := store.Get(r, "_SID")
if err != nil {
- log.Println(err)
+ log.Println("Info: ", err)
}
if !CompareStrings(req.Email, req.ConfirmEmail) {
@@ -88,6 +88,7 @@ func CreateNewEntryHandler(w http.ResponseWriter, r *http.Request) {
return
}
+ log.Println("Info: New sign up " + req.Email + " from " + GetIP(r))
session.AddFlash("Success! You can login now with your new mail account.", "success")
session.Save(r, w)
http.Redirect(w, r, "/user", 302)
@@ -96,7 +97,7 @@ func CreateNewEntryHandler(w http.ResponseWriter, r *http.Request) {
func AboutHandler(w http.ResponseWriter, r *http.Request) {
session, err := store.Get(r, "_SID")
if err != nil {
- log.Println(err)
+ log.Println("Info: ", err)
}
flash := Flash{}
@@ -116,7 +117,7 @@ func AboutHandler(w http.ResponseWriter, r *http.Request) {
func ServerHandler(w http.ResponseWriter, r *http.Request) {
session, err := store.Get(r, "_SID")
if err != nil {
- log.Println(err)
+ log.Println("Info: ", err)
}
flash := Flash{}
@@ -136,7 +137,7 @@ func ServerHandler(w http.ResponseWriter, r *http.Request) {
func HowtoHandler(w http.ResponseWriter, r *http.Request) {
session, err := store.Get(r, "_SID")
if err != nil {
- log.Println(err)
+ log.Println("Info: ", err)
}
flash := Flash{}
@@ -156,7 +157,7 @@ func HowtoHandler(w http.ResponseWriter, r *http.Request) {
func UserHandler(w http.ResponseWriter, r *http.Request) {
session, err := store.Get(r, "_SID")
if err != nil {
- log.Println(err)
+ log.Println("Info: ", err)
}
flash := Flash{}
@@ -176,7 +177,7 @@ func UserHandler(w http.ResponseWriter, r *http.Request) {
func PasswordHandler(w http.ResponseWriter, r *http.Request) {
session, err := store.Get(r, "_SID")
if err != nil {
- log.Println(err)
+ log.Println("Info: ", err)
}
flash := Flash{}
@@ -212,7 +213,7 @@ func ChangePasswordHandler(w http.ResponseWriter, r *http.Request) {
session, err := store.Get(r, "_SID")
if err != nil {
- log.Println(err)
+ log.Println("Info: ", err)
}
if !CompareStrings(req.NewPassword, req.ConfirmPassword) {
session.AddFlash("Passwords don't match.", "error")
@@ -224,13 +225,14 @@ func ChangePasswordHandler(w http.ResponseWriter, r *http.Request) {
req.NewPassword = Md5Hash(req.NewPassword)
if err := ChangePassword(req.Email, req.Password, req.NewPassword); err != nil {
- log.Println(err)
+ log.Println("Info: ", err)
session.AddFlash(err.Error(), "error")
session.Save(r, w)
http.Redirect(w, r, "/password", 302)
return
}
+ log.Println("Info: Changed password for " + req.Email + " from " + GetIP(r))
session.AddFlash("Changed your password.", "success")
session.Save(r, w)
http.Redirect(w, r, "/user", 302)
diff --git a/main.go b/main.go
index 5104d6e..750fbfe 100644
--- a/main.go
+++ b/main.go
@@ -51,7 +51,7 @@ func main() {
err := http.ListenAndServe(ip+":"+port, nil)
if err != nil {
- log.Panic(err)
+ log.Panic("Info: ", err)
}
- log.Println("Server is up and listens on " + ip + ":" + port)
+ log.Println("Info: Server is up and listens on " + ip + ":" + port)
}
diff --git a/server.go b/server.go
index 0ea1851..387b5b6 100644
--- a/server.go
+++ b/server.go
@@ -54,7 +54,7 @@ func ExecTemplate(template string, w http.ResponseWriter, r *http.Request, flash
err := index.ExecuteTemplate(w, template, flash)
if err != nil {
- log.Println(err)
+ log.Println("Info: ", err)
return err
}
return nil
@@ -62,7 +62,7 @@ func ExecTemplate(template string, w http.ResponseWriter, r *http.Request, flash
func ChangePassword(email, oldPassword, newPassword string) error {
if !ValidateEmail(email) {
- log.Println("No E-Mail: ", email)
+ log.Println("Info: No E-Mail: ", email)
return errors.New("This doesn't look like a mail adress.")
}
diff --git a/user.go b/user.go
index 9f5064e..28f734f 100644
--- a/user.go
+++ b/user.go
@@ -29,7 +29,7 @@ func (vU VirtualUser) UpdatePassword(password string) bool {
}
query := Db.Model(&vU).Where("Email = ?", vU.Email).Update("password", password)
if query.Error != nil {
- log.Println(query.Error)
+ log.Println("Info: ", query.Error)
return false
}
return true
diff --git a/utilities.go b/utilities.go
index 4bf0b92..3ce3e1d 100644
--- a/utilities.go
+++ b/utilities.go
@@ -5,6 +5,7 @@ import (
"fmt"
"io"
"log"
+ "net"
"net/http"
"strings"
)
@@ -33,7 +34,7 @@ func CompareStrings(strs ...string) bool {
func GetLanguage(r *http.Request) string {
c, err := r.Cookie("lang")
if err != nil {
- log.Println("Cookie: lang", err)
+ log.Println("Info: Cookie: lang", err)
} else {
if c.Value != "" {
if c.Value == "de" {
@@ -53,3 +54,18 @@ func GetLanguage(r *http.Request) string {
}
return ""
}
+
+func GetIP(r *http.Request) string {
+ if len(r.Header["X-Forwarded-For"]) > 0 {
+ return r.Header["X-Forwarded-For"][0]
+ }
+ if len(r.Header["X-Real-Ip"]) > 0 {
+ return r.Header["X-Real-Ip"][0]
+ }
+ if r.RemoteAddr != "" {
+ ip, _, _ := net.SplitHostPort(r.RemoteAddr)
+ return ip
+ }
+ log.Println("Info: No remote IP detectable.")
+ return "0.0.0.0"
+}
diff --git a/utilities_test.go b/utilities_test.go
index 5f095dc..4431241 100644
--- a/utilities_test.go
+++ b/utilities_test.go
@@ -74,3 +74,41 @@ func TestGetLanguage(t *testing.T) {
t.Fatal("Expected empty string as lang.")
}
}
+
+func TestGetIP(t *testing.T) {
+ // Test with X-Forwarded-For
+ request, err := http.NewRequest("GET", "/", nil)
+ if err != nil {
+ t.Fatal("Error creating new http request. (/)", err)
+ }
+ request.Header.Add("X-Forwarded-For", "10.0.0.1")
+
+ ip := GetIP(request)
+ if ip != "10.0.0.1" {
+ t.Fatal("Expected IP '10.0.0.1', got " + ip)
+ }
+
+ // Test with X-Real-Ip
+ request, err = http.NewRequest("GET", "/", nil)
+ if err != nil {
+ t.Fatal("Error creating new http request. (/)", err)
+ }
+ request.Header.Add("X-Real-Ip", "10.0.0.1")
+
+ ip = GetIP(request)
+ if ip != "10.0.0.1" {
+ t.Fatal("Expected IP '10.0.0.1', got " + ip)
+ }
+
+ // Test with RemoteAddr
+ // Since Golang itself doesn't set RemoteAddr '0.0.0.0' is expected
+ request, err = http.NewRequest("GET", "/", nil)
+ if err != nil {
+ t.Fatal("Error creating new http request. (/)", err)
+ }
+
+ ip = GetIP(request)
+ if ip != "0.0.0.0" {
+ t.Fatal("Expected IP '0.0.0.0', got " + ip)
+ }
+}