Exemplo n.º 1
0
        /// <inheritdoc/>
        public void Validate(IChallenge challenge)
        {
            if (challenge.Status == ChallengeStatus.Pending)
            {
                challenge.Status = ChallengeStatus.Processing;
                ChallengeRepository.Update(challenge);

                Logger.Info("Challenge {id} status updated to {status}", challenge.Id, challenge.Status);

                Task
                .Run(() =>
                {
                    // validate challenge
                    switch (challenge.Type)
                    {
                    case "http-01":
                        ValidateHttpChallenge(challenge);
                        break;

                    default:
                        throw new Exception($"Unsupported Challenge type '{challenge.Type}'");
                    }
                })
                .ContinueWith(t =>
                {
                    // Fault validate
                    if (t.IsFaulted)
                    {
                        Error err              = t.Exception.InnerException;
                        challenge.Error        = ChallengeRepository.CreateError();
                        challenge.Error.Detail = err.Detail;
                        challenge.Error.Type   = err.Type;
                        challenge.Status       = ChallengeStatus.Invalid;
                        ChallengeRepository.Update(challenge);
                    }

                    //Complete validate
                    if (t.IsCompleted)
                    {
                        if (challenge.Status == ChallengeStatus.Processing)
                        {
                            challenge.Status    = ChallengeStatus.Valid;
                            challenge.Validated = DateTime.UtcNow;
                            ChallengeRepository.Update(challenge);
                        }
                    }

                    Logger.Info("Challenge {id} status updated to {status}", challenge.Id, challenge.Status);
                });
            }
            else
            {
                throw new MalformedException("Wrong challenge status");
            }
        }