2021-05-05 05:06:05 +07:00
package handlers
import (
"net/http"
2022-03-16 05:55:38 +07:00
"github.com/ory/fosite"
2021-08-11 08:04:35 +07:00
"github.com/authelia/authelia/v4/internal/middlewares"
2022-03-16 05:55:38 +07:00
"github.com/authelia/authelia/v4/internal/oidc"
2021-05-05 05:06:05 +07:00
)
2022-04-07 07:58:51 +07:00
// OAuthIntrospectionPOST handles POST requests to the OAuth 2.0 Introspection endpoint.
//
// https://datatracker.ietf.org/doc/html/rfc7662
func OAuthIntrospectionPOST ( ctx * middlewares . AutheliaCtx , rw http . ResponseWriter , req * http . Request ) {
2022-03-16 05:55:38 +07:00
var (
responder fosite . IntrospectionResponder
err error
)
oidcSession := oidc . NewSession ( )
if responder , err = ctx . Providers . OpenIDConnect . Fosite . NewIntrospectionRequest ( ctx , req , oidcSession ) ; err != nil {
rfc := fosite . ErrorToRFC6749Error ( err )
2021-05-05 05:06:05 +07:00
2022-04-25 07:31:05 +07:00
ctx . Logger . Errorf ( "Introspection Request failed with error: %s" , rfc . WithExposeDebug ( true ) . GetDescription ( ) )
2021-05-05 05:06:05 +07:00
ctx . Providers . OpenIDConnect . Fosite . WriteIntrospectionError ( rw , err )
return
}
2022-03-16 05:55:38 +07:00
requester := responder . GetAccessRequester ( )
ctx . Logger . Tracef ( "Introspection Request yeilded a %s (active: %t) requested at %s created with request id '%s' on client with id '%s'" , responder . GetTokenUse ( ) , responder . IsActive ( ) , requester . GetRequestedAt ( ) . String ( ) , requester . GetID ( ) , requester . GetClient ( ) . GetID ( ) )
ctx . Providers . OpenIDConnect . Fosite . WriteIntrospectionResponse ( rw , responder )
2021-05-05 05:06:05 +07:00
}