Add segment integration
This commit is contained in:
@@ -39,6 +39,8 @@ var DockerClientID, DockerClientSecret string
|
|||||||
|
|
||||||
var PlaygroundDomain string
|
var PlaygroundDomain string
|
||||||
|
|
||||||
|
var SegmentId string
|
||||||
|
|
||||||
func ParseFlags() {
|
func ParseFlags() {
|
||||||
flag.StringVar(&LetsEncryptCertsDir, "letsencrypt-certs-dir", "/certs", "Path where let's encrypt certs will be stored")
|
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")
|
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(&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(&AdminToken, "admin-token", "", "Token to validate admin user for admin endpoints")
|
||||||
|
|
||||||
|
flag.StringVar(&SegmentId, "segment-id", "", "Segment id to post metrics")
|
||||||
|
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
SecureCookie = securecookie.New([]byte(CookieHashKey), []byte(CookieBlockKey))
|
SecureCookie = securecookie.New([]byte(CookieHashKey), []byte(CookieBlockKey))
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
package handlers
|
package handlers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"html/template"
|
||||||
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"time"
|
"time"
|
||||||
@@ -22,6 +25,7 @@ import (
|
|||||||
|
|
||||||
var core pwd.PWDApi
|
var core pwd.PWDApi
|
||||||
var e event.EventApi
|
var e event.EventApi
|
||||||
|
var landings = map[string][]byte{}
|
||||||
|
|
||||||
type HandlerExtender func(h *mux.Router)
|
type HandlerExtender func(h *mux.Router)
|
||||||
|
|
||||||
@@ -31,6 +35,8 @@ func Bootstrap(c pwd.PWDApi, ev event.EventApi) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func Register(extend HandlerExtender) {
|
func Register(extend HandlerExtender) {
|
||||||
|
initLandings()
|
||||||
|
|
||||||
r := mux.NewRouter()
|
r := mux.NewRouter()
|
||||||
corsRouter := mux.NewRouter()
|
corsRouter := mux.NewRouter()
|
||||||
|
|
||||||
@@ -143,3 +149,29 @@ func Register(extend HandlerExtender) {
|
|||||||
log.Fatal(httpServer.ListenAndServe())
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
index := filepath.Join("./www", playground.AssetsDir, "/landing.html")
|
rw.Write(landings[playground.Id])
|
||||||
if _, err := os.Stat(index); os.IsNotExist(err) {
|
|
||||||
index = "./www/default/landing.html"
|
|
||||||
}
|
|
||||||
|
|
||||||
http.ServeFile(rw, req, index)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,6 +64,16 @@
|
|||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</div>
|
</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://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://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>
|
<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',
|
method: 'GET',
|
||||||
url: '/users/me'
|
url: '/users/me'
|
||||||
}).then(function(response) {
|
}).then(function(response) {
|
||||||
|
[[ if .SegmentId ]]
|
||||||
|
analytics.identify(response.data.email);
|
||||||
|
[[ end ]]
|
||||||
$scope.user = response.data;
|
$scope.user = response.data;
|
||||||
$scope.loggedIn = true;
|
$scope.loggedIn = true;
|
||||||
}, function(response) {
|
}, function(response) {
|
||||||
|
[[ if .SegmentId ]]
|
||||||
|
analytics.identify();
|
||||||
|
[[ end ]]
|
||||||
console.log('ERROR', response);
|
console.log('ERROR', response);
|
||||||
$scope.user = null;
|
$scope.user = null;
|
||||||
$scope.loggedIn = false;
|
$scope.loggedIn = false;
|
||||||
|
|||||||
@@ -64,6 +64,16 @@
|
|||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</div>
|
</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://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://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>
|
<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',
|
method: 'GET',
|
||||||
url: '/users/me'
|
url: '/users/me'
|
||||||
}).then(function(response) {
|
}).then(function(response) {
|
||||||
|
[[ if .SegmentId ]]
|
||||||
|
analytics.identify(response.data.email);
|
||||||
|
[[ end ]]
|
||||||
$scope.user = response.data;
|
$scope.user = response.data;
|
||||||
$scope.loggedIn = true;
|
$scope.loggedIn = true;
|
||||||
}, function(response) {
|
}, function(response) {
|
||||||
|
[[ if .SegmentId ]]
|
||||||
|
analytics.identify();
|
||||||
|
[[ end ]]
|
||||||
console.log('ERROR', response);
|
console.log('ERROR', response);
|
||||||
$scope.user = null;
|
$scope.user = null;
|
||||||
$scope.loggedIn = false;
|
$scope.loggedIn = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user