mirror of
https://github.com/foomo/keel.git
synced 2025-10-16 12:35:34 +00:00
60 lines
1.4 KiB
Go
60 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"net/http"
|
|
"time"
|
|
|
|
"github.com/foomo/keel"
|
|
keelhttp "github.com/foomo/keel/net/http"
|
|
"github.com/foomo/keel/net/http/cookie"
|
|
"github.com/foomo/keel/net/http/middleware"
|
|
"github.com/foomo/keel/service"
|
|
)
|
|
|
|
func main() {
|
|
svr := keel.NewServer()
|
|
|
|
// get logger
|
|
l := svr.Logger()
|
|
|
|
// custom cookie time provider
|
|
timeProvider := cookie.NewTimeProvider(
|
|
cookie.TimeProviderWithOffset(-time.Millisecond * 500),
|
|
)
|
|
|
|
// custom cookie domain provider
|
|
domainProvider := cookie.NewDomainProvider(
|
|
cookie.DomainProviderWithDomains("foo.com", "*.bar.com"),
|
|
cookie.DomainProviderWithMappings(map[string]string{"source.com": "target.com"}),
|
|
)
|
|
|
|
// custom cookie provider
|
|
sessionCookie := cookie.New(
|
|
"session",
|
|
cookie.WithExpires(time.Hour*60),
|
|
cookie.WithTimeProvider(timeProvider),
|
|
cookie.WithDomainProvider(domainProvider),
|
|
)
|
|
|
|
// create demo service
|
|
svs := http.NewServeMux()
|
|
svs.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(http.StatusOK)
|
|
_, _ = w.Write([]byte(r.Header.Get(keelhttp.HeaderXSessionID)))
|
|
_, _ = w.Write([]byte(middleware.SessionIDFromContext(r.Context())))
|
|
})
|
|
|
|
svr.AddService(
|
|
service.NewHTTP(l, "demo", "localhost:8080", svs,
|
|
middleware.SessionID(
|
|
// automatically set cookie if not exists
|
|
middleware.SessionIDWithSetCookie(true),
|
|
// define a custom cookie provider
|
|
middleware.SessionIDWithCookie(sessionCookie),
|
|
),
|
|
),
|
|
)
|
|
|
|
svr.Run()
|
|
}
|