jlelse
/
kis3
Archived
1
Fork 0

Fix CORS, fix tracking script & show Hello response when unknown URL requested

This commit is contained in:
Jan-Lukas Else 2019-04-04 13:18:19 +02:00
parent e185344b4f
commit 0a1dde93ab
5 changed files with 35 additions and 16 deletions

1
go.mod
View File

@ -6,6 +6,7 @@ require (
github.com/gobuffalo/packr/v2 v2.0.9 github.com/gobuffalo/packr/v2 v2.0.9
github.com/golang-migrate/migrate/v4 v4.2.5 github.com/golang-migrate/migrate/v4 v4.2.5
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect 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/gorilla/mux v1.7.0
github.com/mattn/go-sqlite3 v1.10.0 github.com/mattn/go-sqlite3 v1.10.0
github.com/wcharczuk/go-chart v2.0.1+incompatible github.com/wcharczuk/go-chart v2.0.1+incompatible

2
go.sum
View File

@ -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/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 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8=
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= 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 h1:Pgr17XVTNXAk3q/r4CpKzC5xBM/qW1uVLV+IhRZpIIk=
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/mux v1.7.0 h1:tOSd0UKHQd6urX6ApfOn4XdBMY6Sh1MfxV3kmaazO+U= github.com/gorilla/mux v1.7.0 h1:tOSd0UKHQd6urX6ApfOn4XdBMY6Sh1MfxV3kmaazO+U=

41
main.go
View File

@ -4,6 +4,7 @@ import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"github.com/gobuffalo/packr/v2" "github.com/gobuffalo/packr/v2"
"github.com/gorilla/handlers"
"github.com/gorilla/mux" "github.com/gorilla/mux"
"github.com/wcharczuk/go-chart" "github.com/wcharczuk/go-chart"
"github.com/wcharczuk/go-chart/drawing" "github.com/wcharczuk/go-chart/drawing"
@ -15,9 +16,10 @@ import (
) )
type kis3 struct { type kis3 struct {
db *Database db *Database
router *mux.Router router *mux.Router
fs http.Handler staticBox *packr.Box
staticFS http.Handler
} }
var ( var (
@ -43,9 +45,18 @@ func (kis3 *kis3) setupDB() (e error) {
func (kis3 *kis3) setupRouter() { func (kis3 *kis3) setupRouter() {
kis3.router = mux.NewRouter() 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.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() { func (kis3 kis3) startListening() {
@ -56,7 +67,7 @@ func (kis3 kis3) startListening() {
} }
func (kis3 kis3) trackView(w http.ResponseWriter, r *http.Request) { 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") ref := r.URL.Query().Get("ref")
if r.Header.Get("DNT") == "1" && appConfig.dnt { if r.Header.Get("DNT") == "1" && appConfig.dnt {
fmt.Println("Not tracking because of 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) { func (kis3 kis3) serveStaticFile(w http.ResponseWriter, r *http.Request) {
if kis3.fs == nil { if kis3.staticBox == nil || kis3.staticFS == nil {
kis3.fs = http.FileServer(packr.New("staticFiles", "./static")) kis3.staticBox = packr.New("staticFiles", "./static")
kis3.staticFS = http.FileServer(kis3.staticBox)
} }
// Fix, because file server isn't serving index.html otherwise uPath := r.URL.Path
if r.URL.Path == "/" || r.URL.Path == "/index.html" { if uPath != "/" && kis3.staticBox.Has(uPath) {
r.URL.Path = "/default.html" kis3.staticFS.ServeHTTP(w, r)
} else {
sendHelloResponse(w)
} }
kis3.fs.ServeHTTP(w, r)
} }
func (kis3 kis3) requestStats(w http.ResponseWriter, r *http.Request) { func (kis3 kis3) requestStats(w http.ResponseWriter, r *http.Request) {

View File

@ -1,9 +1,8 @@
(function () { (function () {
var request = new XMLHttpRequest(); var request = new XMLHttpRequest();
var url = document.currentScript.baseURI var url = document.currentScript.src.replace("kis3.js", "view?");
+ "view?url=" + window.decodeURI(document.documentURI);
if (document.referrer && document.referrer.length > 0) { if (document.referrer && document.referrer.length > 0) {
url += window.decodeURI(document.referrer); url += "ref=" + window.decodeURI(document.referrer);
} }
request.onload = function () { request.onload = function () {
if (request.status >= 200 && request.status < 300) { if (request.status >= 200 && request.status < 300) {

View File

@ -6,6 +6,6 @@
</head> </head>
<body> <body>
Welcome to <b>KISSS</b> Welcome to <b>KISSS</b>
<script src="kis3.js"></script> <script src="http://localhost:8080/kis3.js"></script>
</body> </body>
</html> </html>