public AuthorizeChallenge HandleChallenge(AuthorizationState authzState,
string challengeType,
string handlerName, IReadOnlyDictionary<string, object> handlerParams,
bool cleanUp = false)
{
var provider = ChallengeHandlerExtManager.GetProvider(handlerName);
if (provider == null)
throw new InvalidOperationException("unable to resolve Challenge Handler provider")
.With("handlerName", handlerName);
var authzChallenge = authzState.Challenges.FirstOrDefault(x => x.Type == challengeType);
if (authzChallenge == null)
throw new ArgumentOutOfRangeException(nameof(challengeType),
"no challenge found matching requested type")
.With("challengeType", challengeType);
if (!provider.IsSupported(authzChallenge.Challenge))
throw new InvalidOperationException("Challenge Handler does not support given Challenge")
.With("handlerName", handlerName)
.With("challengeType", authzChallenge.Challenge.Type);
var handler = provider.GetHandler(authzChallenge.Challenge, handlerParams);
if (handler == null)
throw new InvalidOperationException("no Challenge Handler provided for given Challenge")
.With("handlerName", handlerName)
.With("challengeType", authzChallenge.Challenge.Type);
authzChallenge.HandlerName = handlerName;
if (cleanUp)
{
handler.CleanUp(authzChallenge.Challenge);
authzChallenge.HandlerCleanUpDate = DateTime.Now;
}
else
{
handler.Handle(authzChallenge.Challenge);
authzChallenge.HandlerHandleDate = DateTime.Now;
}
handler.Dispose();
return authzChallenge;
}