package middleware import ( "context" "me-fit/service" "net/http" ) type ContextKey string var SessionKey ContextKey = "session" func Authenticate(service service.Auth) func(http.Handler) http.Handler { return func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { sessionId := getSessionID(r) session, _ := service.SignInSession(sessionId) if session != nil { ctx := context.WithValue(r.Context(), SessionKey, session) next.ServeHTTP(w, r.WithContext(ctx)) } else { next.ServeHTTP(w, r) } }) } } func getSessionID(r *http.Request) string { cookie, err := r.Cookie("id") if err != nil { return "" } return cookie.Name }