# README
castle-go
castle-go is a go library wrapping https://castle.io API.
Install
go get github.com/castle/castle-go
Usage
Providing own http client
castle.NewWithHTTPClient("secret-api-key", &http.Client{Timeout: time.Second * 2})
Tracking properties and traits
castle.Track(
castle.EventLoginSucceeded,
"user-123",
map[string]string{"prop1": "propValue1"},
map[string]string{"trait1": "traitValue1"},
castle.ContextFromRequest(req),
)
Tracking custom events
castle.Track(
castle.Event("custom-event"),
"user-123",
map[string]string{"prop1": "propValue1"},
map[string]string{"trait1": "traitValue1"},
castle.ContextFromRequest(req),
)
Adaptive authentication
decision, err := castle.Authenticate(
castle.EventLoginSucceeded,
"md-1",
map[string]string{"prop1": "propValue1"},
map[string]string{"trait1": "traitValue1"},
castle.ContextFromRequest(req),
)
Example
package main
import (
"net/http"
"log"
"github.com/castle/castle-go/castle"
)
func main() {
cstl, err := castle.New("secret-api-key")
if err != nil {
log.Fatal(err)
}
http.ListenAndServe(":8080", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// authenticate user then track with castle
decision, err := castle.AuthenticateSimple(
castle.EventLoginSucceeded,
"user-123",
castle.ContextFromRequest(r),
)
if err != nil {
log.Println(err)
}
if decision == castle.RecommendedActionChallenge {
// challenge with MFA and track with castle
err := cstl.TrackSimple(
castle.EventChallengeRequested,
"user-123",
castle.ContextFromRequest(r),
)
if err != nil {
log.Println(err)
}
// trigger off MFA path
}
w.WriteHeader(http.StatusNoContent)
}))
}
# Functions
ContextFromRequest builds castle context from current http.Request.
New creates a new castle client.
NewWithHTTPClient same as New but allows passing of http.Client with custom config.
# Constants
See https://castle.io/docs/events.
See https://castle.io/docs/events.
See https://castle.io/docs/events.
See https://castle.io/docs/events.
See https://castle.io/docs/events.
See https://castle.io/docs/events.
See https://castle.io/docs/events.
See https://castle.io/docs/events.
See https://castle.io/docs/events.
See https://castle.io/docs/events.
See https://castle.io/docs/events.
See https://castle.io/docs/events.
See https://castle.io/docs/authentication.
See https://castle.io/docs/authentication.
See https://castle.io/docs/authentication.
See https://castle.io/docs/authentication.
VERSION - current package version.
# Variables
AuthenticateEndpoint defines the adaptive authentication URL castle.io side.
HeaderAllowList keeps a list of headers that will be forwarded to castle.
TrackEndpoint defines the tracking URL castle.io side.
# Structs
Castle encapsulates http client.
Context captures data from HTTP request.
WebhookBody encapsulates body of webhook notificationc coming from castle.io see https://castle.io/docs/webhooks.
# Type aliases
AuthenticationRecommendedAction encapsulates the 3 possible responses from auth call (allow, challenge, deny).
Event is an enum defining types of event castle tracks.