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/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

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/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=

41
main.go
View File

@ -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) {

View File

@ -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) {

View File

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