85 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package ak
 | 
						|
 | 
						|
import (
 | 
						|
	"bytes"
 | 
						|
	"crypto/sha512"
 | 
						|
	"encoding/hex"
 | 
						|
	"encoding/json"
 | 
						|
	"errors"
 | 
						|
	"fmt"
 | 
						|
	"io/ioutil"
 | 
						|
	"net/http"
 | 
						|
	"net/url"
 | 
						|
	"os"
 | 
						|
 | 
						|
	log "github.com/sirupsen/logrus"
 | 
						|
	"goauthentik.io/internal/constants"
 | 
						|
)
 | 
						|
 | 
						|
func exists(name string) bool {
 | 
						|
	_, err := os.Stat(name)
 | 
						|
	if err == nil {
 | 
						|
		return true
 | 
						|
	}
 | 
						|
	if errors.Is(err, os.ErrNotExist) {
 | 
						|
		return false
 | 
						|
	}
 | 
						|
	return false
 | 
						|
}
 | 
						|
 | 
						|
func getEnv() string {
 | 
						|
	if _, o := os.LookupEnv("KUBERNETES_SERVICE_HOST"); o {
 | 
						|
		return "kubernetes"
 | 
						|
	}
 | 
						|
	if _, o := os.LookupEnv("CI"); o {
 | 
						|
		return "ci"
 | 
						|
	}
 | 
						|
	if exists("/tmp/authentik-mode") {
 | 
						|
		return "embedded"
 | 
						|
	}
 | 
						|
	return "custom"
 | 
						|
}
 | 
						|
 | 
						|
func analytics(akURL url.URL, on string, t string) {
 | 
						|
	if _, s := os.LookupEnv("AUTHENTIK_DISABLE_ANALYTICS"); s {
 | 
						|
		return
 | 
						|
	}
 | 
						|
	e := getEnv()
 | 
						|
	if e == "ci" {
 | 
						|
		return
 | 
						|
	}
 | 
						|
	body := struct {
 | 
						|
		Domain   string `json:"domain"`
 | 
						|
		Name     string `json:"name"`
 | 
						|
		URL      string `json:"url"`
 | 
						|
		Referrer string `json:"referrer"`
 | 
						|
	}{
 | 
						|
		Domain:   "authentik",
 | 
						|
		Name:     "pageview",
 | 
						|
		URL:      fmt.Sprintf("http://localhost/outpost/%s/%s", e, t),
 | 
						|
		Referrer: fmt.Sprintf("%s (%s)", constants.VERSION, constants.BUILD()),
 | 
						|
	}
 | 
						|
	b, err := json.Marshal(body)
 | 
						|
	if err != nil {
 | 
						|
		log.WithError(err).Debug("test")
 | 
						|
	}
 | 
						|
	ua := fmt.Sprintf("%s-%s", akURL.Host, on)
 | 
						|
	h := sha512.New()
 | 
						|
	h.Write([]byte(ua))
 | 
						|
 | 
						|
	req, err := http.NewRequest("POST", "https://goauthentik.io/api/event", bytes.NewReader(b))
 | 
						|
	if err != nil {
 | 
						|
		log.WithError(err).Debug("test")
 | 
						|
	}
 | 
						|
	req.Header.Set("Content-Type", "text/plain")
 | 
						|
	req.Header.Set("User-Agent", hex.EncodeToString(h.Sum(nil)))
 | 
						|
	r, err := http.DefaultClient.Do(req)
 | 
						|
	if err != nil {
 | 
						|
		log.WithError(err).Debug("test")
 | 
						|
	}
 | 
						|
	if r.StatusCode >= 400 {
 | 
						|
		b, _ := ioutil.ReadAll(r.Body)
 | 
						|
		log.WithField("status", r.StatusCode).WithField("body", string(b)).Debug("failed")
 | 
						|
	}
 | 
						|
}
 |