From 0a1dde93abd8659ec455a1318b0d8a16516d9a15 Mon Sep 17 00:00:00 2001 From: Jan-Lukas Else Date: Thu, 4 Apr 2019 13:18:19 +0200 Subject: [PATCH] Fix CORS, fix tracking script & show Hello response when unknown URL requested --- go.mod | 1 + go.sum | 2 ++ main.go | 41 +++++++++++++++++++++--------- static/kis3.js | 5 ++-- static/{default.html => test.html} | 2 +- 5 files changed, 35 insertions(+), 16 deletions(-) rename static/{default.html => test.html} (73%) diff --git a/go.mod b/go.mod index c9c1d0d..2fe7a61 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( github.com/gobuffalo/packr/v2 v2.0.9 github.com/golang-migrate/migrate/v4 v4.2.5 github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect + github.com/gorilla/handlers v1.4.0 github.com/gorilla/mux v1.7.0 github.com/mattn/go-sqlite3 v1.10.0 github.com/wcharczuk/go-chart v2.0.1+incompatible diff --git a/go.sum b/go.sum index 11080ca..949b381 100644 --- a/go.sum +++ b/go.sum @@ -77,6 +77,8 @@ github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk github.com/gopherjs/gopherjs v0.0.0-20181004151105-1babbf986f6f/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/handlers v1.4.0 h1:XulKRWSQK5uChr4pEgSE4Tc/OcmnU9GJuSwdog/tZsA= +github.com/gorilla/handlers v1.4.0/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/mux v1.6.2 h1:Pgr17XVTNXAk3q/r4CpKzC5xBM/qW1uVLV+IhRZpIIk= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.0 h1:tOSd0UKHQd6urX6ApfOn4XdBMY6Sh1MfxV3kmaazO+U= diff --git a/main.go b/main.go index 0883613..11346f8 100644 --- a/main.go +++ b/main.go @@ -4,6 +4,7 @@ import ( "encoding/json" "fmt" "github.com/gobuffalo/packr/v2" + "github.com/gorilla/handlers" "github.com/gorilla/mux" "github.com/wcharczuk/go-chart" "github.com/wcharczuk/go-chart/drawing" @@ -15,9 +16,10 @@ import ( ) type kis3 struct { - db *Database - router *mux.Router - fs http.Handler + db *Database + router *mux.Router + staticBox *packr.Box + staticFS http.Handler } var ( @@ -43,9 +45,18 @@ func (kis3 *kis3) setupDB() (e error) { func (kis3 *kis3) setupRouter() { kis3.router = mux.NewRouter() - kis3.router.HandleFunc("/view", kis3.trackView) + + corsHandler := handlers.CORS(handlers.AllowedOrigins([]string{"*"})) + + viewRouter := kis3.router.PathPrefix("/view").Subrouter() + viewRouter.Use(corsHandler) + viewRouter.Path("").HandlerFunc(kis3.trackView) + kis3.router.HandleFunc("/stats", kis3.requestStats) - kis3.router.PathPrefix("/").Handler(http.HandlerFunc(kis3.serveStaticFile)) + + staticRouter := kis3.router.PathPrefix("").Subrouter() + staticRouter.Use(corsHandler) + staticRouter.PathPrefix("").Handler(http.HandlerFunc(kis3.serveStaticFile)) } func (kis3 kis3) startListening() { @@ -56,7 +67,7 @@ func (kis3 kis3) startListening() { } func (kis3 kis3) trackView(w http.ResponseWriter, r *http.Request) { - url := r.URL.Query().Get("url") + url := r.Header.Get("Referer") // URL of requesting source ref := r.URL.Query().Get("ref") if r.Header.Get("DNT") == "1" && appConfig.dnt { fmt.Println("Not tracking because of DNT") @@ -67,15 +78,21 @@ func (kis3 kis3) trackView(w http.ResponseWriter, r *http.Request) { } } +func sendHelloResponse(w http.ResponseWriter) { + _, _ = fmt.Fprint(w, "Hello from KISSS") +} + func (kis3 kis3) serveStaticFile(w http.ResponseWriter, r *http.Request) { - if kis3.fs == nil { - kis3.fs = http.FileServer(packr.New("staticFiles", "./static")) + if kis3.staticBox == nil || kis3.staticFS == nil { + kis3.staticBox = packr.New("staticFiles", "./static") + kis3.staticFS = http.FileServer(kis3.staticBox) } - // Fix, because file server isn't serving index.html otherwise - if r.URL.Path == "/" || r.URL.Path == "/index.html" { - r.URL.Path = "/default.html" + uPath := r.URL.Path + if uPath != "/" && kis3.staticBox.Has(uPath) { + kis3.staticFS.ServeHTTP(w, r) + } else { + sendHelloResponse(w) } - kis3.fs.ServeHTTP(w, r) } func (kis3 kis3) requestStats(w http.ResponseWriter, r *http.Request) { diff --git a/static/kis3.js b/static/kis3.js index 6f6841d..6975592 100644 --- a/static/kis3.js +++ b/static/kis3.js @@ -1,9 +1,8 @@ (function () { var request = new XMLHttpRequest(); - var url = document.currentScript.baseURI - + "view?url=" + window.decodeURI(document.documentURI); + var url = document.currentScript.src.replace("kis3.js", "view?"); if (document.referrer && document.referrer.length > 0) { - url += window.decodeURI(document.referrer); + url += "ref=" + window.decodeURI(document.referrer); } request.onload = function () { if (request.status >= 200 && request.status < 300) { diff --git a/static/default.html b/static/test.html similarity index 73% rename from static/default.html rename to static/test.html index 93cc5c4..51df229 100644 --- a/static/default.html +++ b/static/test.html @@ -6,6 +6,6 @@ Welcome to KISSS - +