Exemple #1
0
        /// <summary>
        /// Parse the parameter and returns a list of prompt parameter.
        /// </summary>
        /// <param name="parameter">List of prompts separated by whitespace</param>
        /// <returns>List of prompts.</returns>
        public static ICollection <string> ParsePrompts(this string?parameter)
        {
            if (string.IsNullOrWhiteSpace(parameter))
            {
                return(new List <string>());
            }

            var promptNames = PromptParameters.All(); //Enum.GetNames(typeof(PromptParameter));

            var prompts = parameter.Split(' ')
                          .Where(c => !string.IsNullOrWhiteSpace(c) && promptNames.Contains(c))
                          .ToList();

            return(prompts);
        }
        /// <summary>
        /// Validate the prompt parameter.
        /// </summary>
        /// <param name="prompt"></param>
        /// <param name="state"></param>
        private Option ValidatePromptParameter(string?prompt, string?state)
        {
            if (string.IsNullOrWhiteSpace(prompt))
            {
                return(new Option.Success());
            }

            var promptNames = PromptParameters.All(); //Enum.GetNames(typeof(PromptParameter));
            var atLeastOnePromptIsNotSupported = prompt.Split(' ')
                                                 .Any(r => !string.IsNullOrWhiteSpace(r) && !promptNames.Contains(r));

            if (atLeastOnePromptIsNotSupported)
            {
                var message = Strings.AtLeastOnePromptIsNotSupported;
                _logger.LogError(message);
                return(new Option.Error(
                           new ErrorDetails
                {
                    Title = ErrorCodes.InvalidRequest, Detail = message, Status = HttpStatusCode.BadRequest
                },
                           state));
            }

            var prompts = prompt.ParsePrompts();

            if (prompts.Contains(PromptParameters.None) &&
                (prompts.Contains(PromptParameters.Login) ||
                 prompts.Contains(PromptParameters.Consent) ||
                 prompts.Contains(PromptParameters.SelectAccount)))
            {
                var message = Strings.PromptParameterShouldHaveOnlyNoneValue;
                _logger.LogError(message);
                return(new Option.Error(
                           new ErrorDetails
                {
                    Title = ErrorCodes.InvalidRequest, Detail = message, Status = HttpStatusCode.BadRequest
                },
                           state));
            }

            return(new Option.Success());
        }