示例#1
0
        public void TestIsSupportedHttpChallenge()
        {
            var prov = ChallengeHandlerExtManager.GetProvider("manual");

            Assert.IsNotNull(prov);
            Assert.IsTrue(prov.IsSupported(HTTP_CHALLENGE));
        }
示例#2
0
        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);
        }
示例#3
0
        public void TestHandlerDisposal()
        {
            var prov = ChallengeHandlerExtManager.GetProvider("manual");

            Assert.IsNotNull(prov);
            var h = prov.GetHandler(DNS_CHALLENGE, null);

            Assert.IsFalse(h.IsDisposed);
            h.Dispose();
            Assert.IsTrue(h.IsDisposed);
            h.Handle(DNS_CHALLENGE);
        }
示例#4
0
        public void TestCleanUpHttpChallenge()
        {
            var prov = ChallengeHandlerExtManager.GetProvider("manual");

            Assert.IsNotNull(prov);
            var h = prov.GetHandler(HTTP_CHALLENGE, new Dictionary <string, object>
            {
                { "WriteOutPath", "DBG" }
            });

            h.CleanUp(HTTP_CHALLENGE);
            h.Dispose();
        }
示例#5
0
        public void TestHandleDnsChallenge()
        {
            var prov = ChallengeHandlerExtManager.GetProvider("manual");

            Assert.IsNotNull(prov);
            var h = prov.GetHandler(DNS_CHALLENGE, new Dictionary <string, object>
            {
                { "WriteOutPath", "DBG" }
            });

            h.Handle(new ChallengeHandlingContext(DNS_CHALLENGE));
            h.Dispose();
        }
示例#6
0
        public void TestProviderParams()
        {
            var prov = ChallengeHandlerExtManager.GetProvider("manual");

            Assert.IsNotNull(prov);

            var paramsEnum = prov.DescribeParameters();

            Assert.IsNotNull(paramsEnum);

            var paramsArr = paramsEnum.ToArray();

            Assert.IsTrue(paramsArr.Length > 0);
        }
        protected override void ProcessRecord()
        {
            // We have to invoke this here because we *may not* invoke
            // any Vault access but we do rely on Ext mechanism access.
            Util.PoshHelper.BeforeExtAccess();

            if (ReloadProviders)
            {
                ChallengeDecoderExtManager.Reload();
                ChallengeHandlerExtManager.Reload();
            }
            else if (!string.IsNullOrEmpty(GetChallengeType))
            {
                WriteVerbose("Getting details of Challenge Type Decoder");
                var tInfo = ChallengeDecoderExtManager.GetProviderInfo(GetChallengeType);
                var t     = ChallengeDecoderExtManager.GetProvider(GetChallengeType);
                WriteObject(new {
                    ChallengeType = tInfo.Type,
                    tInfo.Label,
                    tInfo.SupportedType,
                    tInfo.Description,
                });
            }
            else if (ListChallengeTypes)
            {
                WriteVerbose("Listing all Challenge Type Decoders");
                WriteObject(ChallengeDecoderExtManager.GetProviderInfos().Select(_ => _.Name), true);
            }
            else if (!string.IsNullOrEmpty(GetChallengeHandler))
            {
                WriteVerbose("Getting details of Challenge Type Handler");
                var pInfo = ChallengeHandlerExtManager.GetProviderInfo(GetChallengeHandler);
                var p     = ChallengeHandlerExtManager.GetProvider(GetChallengeHandler);
                if (ParametersOnly)
                {
                    WriteVerbose("Showing parameter details only");
                    WriteObject(p.DescribeParameters().Select(_ => new {
                        _.Name,
                        _.Label,
                        _.Type,
                        _.IsRequired,
                        _.IsMultiValued,
                        _.Description,
                    }), true);
                }
                else
                {
                    WriteObject(new {
                        pInfo.Name,
                        pInfo.Label,
                        pInfo.SupportedTypes,
                        pInfo.Description,
                        Parameters = p.DescribeParameters().Select(_ => new {
                            _.Name,
                            _.Label,
                            _.Type,
                            _.IsRequired,
                            _.IsMultiValued,
                            _.Description,
                        }),
                    });
                }
            }
            else if (ListChallengeHandlers)
            {
                WriteVerbose("Listing all Challenge Type Handlers");
                WriteObject(ChallengeHandlerExtManager.GetProviderInfos().Select(_ => _.Name), true);
            }
            else
            {
                WriteVerbose("Getting details of preconfigured Challenge Handler Profile");
                using (var vlt = Util.VaultHelper.GetVault(VaultProfile))
                {
                    vlt.OpenStorage();
                    var v = vlt.LoadVault();

                    if (ListProfiles)
                    {
                        WriteObject(v.ProviderProfiles?.Values, true);
                    }
                    else
                    {
                        var ppi = v.ProviderProfiles?.GetByRef(ProfileRef, throwOnMissing: false);
                        if (ppi == null)
                        {
                            WriteObject(ppi);
                        }
                        else
                        {
                            var asset = vlt.GetAsset(Vault.VaultAssetType.ProviderConfigInfo,
                                                     ppi.Id.ToString());
                            using (var s = vlt.LoadAsset(asset))
                            {
                                WriteObject(JsonHelper.Load <ProviderProfile>(s), false);
                            }
                        }
                    }
                }
            }
        }