Add segment integration
This commit is contained in:
@@ -39,6 +39,8 @@ var DockerClientID, DockerClientSecret string
|
||||
|
||||
var PlaygroundDomain string
|
||||
|
||||
var SegmentId string
|
||||
|
||||
func ParseFlags() {
|
||||
flag.StringVar(&LetsEncryptCertsDir, "letsencrypt-certs-dir", "/certs", "Path where let's encrypt certs will be stored")
|
||||
flag.BoolVar(&UseLetsEncrypt, "letsencrypt-enable", false, "Enabled let's encrypt tls certificates")
|
||||
@@ -74,6 +76,8 @@ func ParseFlags() {
|
||||
flag.StringVar(&PlaygroundDomain, "playground-domain", "localhost", "Domain to use for the playground")
|
||||
flag.StringVar(&AdminToken, "admin-token", "", "Token to validate admin user for admin endpoints")
|
||||
|
||||
flag.StringVar(&SegmentId, "segment-id", "", "Segment id to post metrics")
|
||||
|
||||
flag.Parse()
|
||||
|
||||
SecureCookie = securecookie.New([]byte(CookieHashKey), []byte(CookieBlockKey))
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"fmt"
|
||||
"html/template"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"net/http"
|
||||
"time"
|
||||
@@ -22,6 +25,7 @@ import (
|
||||
|
||||
var core pwd.PWDApi
|
||||
var e event.EventApi
|
||||
var landings = map[string][]byte{}
|
||||
|
||||
type HandlerExtender func(h *mux.Router)
|
||||
|
||||
@@ -31,6 +35,8 @@ func Bootstrap(c pwd.PWDApi, ev event.EventApi) {
|
||||
}
|
||||
|
||||
func Register(extend HandlerExtender) {
|
||||
initLandings()
|
||||
|
||||
r := mux.NewRouter()
|
||||
corsRouter := mux.NewRouter()
|
||||
|
||||
@@ -143,3 +149,29 @@ func Register(extend HandlerExtender) {
|
||||
log.Fatal(httpServer.ListenAndServe())
|
||||
}
|
||||
}
|
||||
|
||||
func initLandings() {
|
||||
pgs, err := core.PlaygroundList()
|
||||
if err != nil {
|
||||
log.Fatal("Error getting playgrounds to initialize landings")
|
||||
}
|
||||
for _, p := range pgs {
|
||||
if p.AssetsDir == "" {
|
||||
p.AssetsDir = "default"
|
||||
}
|
||||
|
||||
var b bytes.Buffer
|
||||
t, err := template.New("landing.html").Delims("[[", "]]").ParseFiles(fmt.Sprintf("./www/%s/landing.html", p.AssetsDir))
|
||||
if err != nil {
|
||||
log.Fatalf("Error parsing template %v", err)
|
||||
}
|
||||
if err := t.Execute(&b, struct{ SegmentId string }{config.SegmentId}); err != nil {
|
||||
log.Fatalf("Error executing template %v", err)
|
||||
}
|
||||
landingBytes, err := ioutil.ReadAll(&b)
|
||||
if err != nil {
|
||||
log.Fatalf("Error reading template bytes %v", err)
|
||||
}
|
||||
landings[p.Id] = landingBytes
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,10 +46,6 @@ func Landing(rw http.ResponseWriter, req *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
index := filepath.Join("./www", playground.AssetsDir, "/landing.html")
|
||||
if _, err := os.Stat(index); os.IsNotExist(err) {
|
||||
index = "./www/default/landing.html"
|
||||
}
|
||||
rw.Write(landings[playground.Id])
|
||||
|
||||
http.ServeFile(rw, req, index)
|
||||
}
|
||||
|
||||
@@ -64,6 +64,16 @@
|
||||
</footer>
|
||||
|
||||
</div>
|
||||
|
||||
[[ if .SegmentId ]]
|
||||
<script>
|
||||
!function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on"];analytics.factory=function(t){return function(){var e=Array.prototype.slice.call(arguments);e.unshift(t);analytics.push(e);return analytics}};for(var t=0;t<analytics.methods.length;t++){var e=analytics.methods[t];analytics[e]=analytics.factory(e)}analytics.load=function(t){var e=document.createElement("script");e.type="text/javascript";e.async=!0;e.src=("https:"===document.location.protocol?"https://":"http://")+"cdn.segment.com/analytics.js/v1/"+t+"/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(e,n)};analytics.SNIPPET_VERSION="4.0.0";
|
||||
analytics.load('[[ .SegmentId ]]');
|
||||
analytics.page();
|
||||
}}();
|
||||
</script>
|
||||
[[ end ]]
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
|
||||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
|
||||
@@ -79,9 +89,15 @@
|
||||
method: 'GET',
|
||||
url: '/users/me'
|
||||
}).then(function(response) {
|
||||
[[ if .SegmentId ]]
|
||||
analytics.identify(response.data.email);
|
||||
[[ end ]]
|
||||
$scope.user = response.data;
|
||||
$scope.loggedIn = true;
|
||||
}, function(response) {
|
||||
[[ if .SegmentId ]]
|
||||
analytics.identify();
|
||||
[[ end ]]
|
||||
console.log('ERROR', response);
|
||||
$scope.user = null;
|
||||
$scope.loggedIn = false;
|
||||
|
||||
@@ -64,6 +64,16 @@
|
||||
</footer>
|
||||
|
||||
</div>
|
||||
|
||||
[[ if .SegmentId ]]
|
||||
<script>
|
||||
!function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on"];analytics.factory=function(t){return function(){var e=Array.prototype.slice.call(arguments);e.unshift(t);analytics.push(e);return analytics}};for(var t=0;t<analytics.methods.length;t++){var e=analytics.methods[t];analytics[e]=analytics.factory(e)}analytics.load=function(t){var e=document.createElement("script");e.type="text/javascript";e.async=!0;e.src=("https:"===document.location.protocol?"https://":"http://")+"cdn.segment.com/analytics.js/v1/"+t+"/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(e,n)};analytics.SNIPPET_VERSION="4.0.0";
|
||||
analytics.load('[[ .SegmentId ]]');
|
||||
analytics.page();
|
||||
}}();
|
||||
</script>
|
||||
[[ end ]]
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
|
||||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
|
||||
@@ -79,9 +89,15 @@
|
||||
method: 'GET',
|
||||
url: '/users/me'
|
||||
}).then(function(response) {
|
||||
[[ if .SegmentId ]]
|
||||
analytics.identify(response.data.email);
|
||||
[[ end ]]
|
||||
$scope.user = response.data;
|
||||
$scope.loggedIn = true;
|
||||
}, function(response) {
|
||||
[[ if .SegmentId ]]
|
||||
analytics.identify();
|
||||
[[ end ]]
|
||||
console.log('ERROR', response);
|
||||
$scope.user = null;
|
||||
$scope.loggedIn = false;
|
||||
|
||||
Reference in New Issue
Block a user