package controllers import ( "bytes" "crypto/sha256" "fmt" "github.com/revel/revel" "image" "image/jpeg" "io/ioutil" "net/http" "net/url" "os" "strconv" "strings" ) var pix = image.NewRGBA(image.Rectangle{image.Point{0, 0}, image.Point{1, 1}}) var img image.Image = pix var buffer = new(bytes.Buffer) var foo = jpeg.Encode(buffer, img, nil) var content_length = strconv.Itoa(len(buffer.Bytes())) type Pixel string func (p Pixel) Apply(req *revel.Request, resp *revel.Response) { resp.Out.Header().Add("Content-Type", "image/jpeg") resp.Out.Header().Add("Content-Length", content_length) resp.GetWriter().Write(buffer.Bytes()) } type Hermes struct { *revel.Controller } func (c Hermes) Index() revel.Result { return c.Render() } func send_notification(title, recipient, token string) { http.PostForm("https://gotify.yigitcolakoglu.com/message?token="+token, url.Values{"title": {"E-mail Seen"}, "message": {fmt.Sprintf("To: %s \n Title: %s", recipient, title)}, "priority": {"5"}}) } func (h Hermes) Read(title, recipient, user, provided_hash string) revel.Result { ip := strings.Split(h.Request.RemoteAddr, ":")[0] raw_userdata, _ := ioutil.ReadFile("storage/userdata") userdata := strings.Split(string(raw_userdata), "\n") key := "" gotify_token := "" for i := 0; i < len(userdata); i++ { if strings.Split(userdata[i], " ")[0] == user { key = strings.Split(userdata[i], " ")[1] gotify_token = strings.Split(userdata[i], " ")[2] } } if key == "" { return Pixel("No dice") } identity := title + recipient + user + key fmt.Printf(identity) hash_string := fmt.Sprintf("%x", sha256.Sum256([]byte(identity))) if hash_string != provided_hash { fmt.Printf("Hashes don't match!\n") return Pixel("You think you can fool me?") } if _, err := os.Stat("storage/ipdata/" + hash_string); os.IsNotExist(err) { os.Create("storage/ipdata/" + hash_string) } raw_ipdata, _ := ioutil.ReadFile("storage/ipdata/" + hash_string) ipdata := strings.Split(string(raw_ipdata), "\n") for i := 0; i < len(ipdata)-1; i++ { if ipdata[i] == ip { fmt.Printf("IP collision detected!\n") return Pixel("I see what you are trying to do!") } } f, _ := os.OpenFile("storage/ipdata/"+hash_string, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) f.WriteString(fmt.Sprintf("%s\n", ip)) f.Close() send_notification(title, recipient, gotify_token) return Pixel("Success") }