keel/examples/middlewares/sessionid/main.go
Kevin Franklin Kim 07f0c394d5
feat: add GoRoutine service
moves all services into the service package
2023-09-08 12:17:23 +02:00

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()
}