Add spyware module
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
89f5fd178f
commit
eb21ce6d8e
@ -0,0 +1,62 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net/http"
|
||||
"net/http/cookiejar"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/gorilla/mux"
|
||||
"golang.org/x/net/publicsuffix"
|
||||
)
|
||||
|
||||
type ApiApplication interface {
|
||||
NewRouter() *mux.Router
|
||||
Visit(w http.ResponseWriter, r *http.Request)
|
||||
}
|
||||
|
||||
func NewApiApp() (ApiApplication, error) {
|
||||
cookiejar, err := cookiejar.New(&cookiejar.Options{PublicSuffixList: publicsuffix.List})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &apiapp{
|
||||
cj: cookiejar,
|
||||
}, nil
|
||||
}
|
||||
|
||||
type apiapp struct {
|
||||
router mux.Router
|
||||
cj *cookiejar.Jar
|
||||
}
|
||||
|
||||
func (a *apiapp) NewRouter() *mux.Router {
|
||||
router := mux.NewRouter()
|
||||
|
||||
router.HandleFunc("/visit", a.Visit)
|
||||
|
||||
return router
|
||||
}
|
||||
|
||||
// Called when someone visits any page of the website
|
||||
// Calls for the spyware cookie and sets it if it doesn't yet exist
|
||||
func (a *apiapp) Visit(w http.ResponseWriter, r *http.Request) {
|
||||
log.Printf("Visit called\n")
|
||||
|
||||
c, err := r.Cookie("spyware")
|
||||
if err != nil && err != http.ErrNoCookie {
|
||||
log.Printf("Error: %s\n", err.Error())
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
} else if err == http.ErrNoCookie {
|
||||
// Create cookie and send it
|
||||
log.Printf("No cookie sent by client, sending cookie to them!\n")
|
||||
c = &http.Cookie{Name: "spyware", Value: uuid.NewString(), MaxAge: 0}
|
||||
http.SetCookie(w, c)
|
||||
}
|
||||
|
||||
w.WriteHeader(200)
|
||||
w.Write([]byte("yeet"))
|
||||
|
||||
log.Printf("Someone visited: %s\n", c.Value)
|
||||
|
||||
}
|
Loading…
Reference in New Issue