Ejemplo n.º 1
0
        public void UnsupportedDirective()
        {
            // arrange
            DocumentNode query = Utf8GraphQLParser.Parse(@"
                {
                    dog {
                        name @foo(bar: true)
                    }
                }
            ");

            Schema          schema         = ValidationUtils.CreateSchema();
            IQueryValidator queryValidator = CreateValidator();

            // act
            QueryValidationResult result =
                queryValidator.Validate(schema, query);

            // assert
            Assert.True(result.HasErrors);
            Assert.Collection(result.Errors,
                              t => Assert.Equal(
                                  "The specified directive `foo` " +
                                  "is not supported by the current schema.",
                                  t.Message));
        }
Ejemplo n.º 2
0
        public void RequiredFieldIsNull()
        {
            // arrange
            DocumentNode query = Utf8GraphQLParser.Parse(@"
                {
                    findDog2(complex: { name: null })
                    {
                        name
                    }
                }
            ");

            Schema          schema         = ValidationUtils.CreateSchema();
            IQueryValidator queryValidator = CreateValidator();

            // act
            QueryValidationResult result =
                queryValidator.Validate(schema, query);

            // assert
            Assert.True(result.HasErrors);
            Assert.Collection(result.Errors,
                              t => Assert.Equal(
                                  "`name` is a required field and cannot be null.",
                                  t.Message));
        }
Ejemplo n.º 3
0
        public void NameFieldIsAmbiguous()
        {
            // arrange
            DocumentNode query = Utf8GraphQLParser.Parse(@"
                {
                    findDog(complex: { name: ""A"", name: ""B"" })
                    {
                        name
                    }
                }
            ");

            Schema          schema         = ValidationUtils.CreateSchema();
            IQueryValidator queryValidator = CreateValidator();

            // act
            QueryValidationResult result =
                queryValidator.Validate(schema, query);

            // assert
            Assert.True(result.HasErrors);
            Assert.Collection(result.Errors,
                              t => Assert.Equal(
                                  "Field `name` is ambiguous.",
                                  t.Message));
        }
Ejemplo n.º 4
0
        public void InvalidInputObjectFieldsExist()
        {
            // arrange
            DocumentNode query = Utf8GraphQLParser.Parse(@"
                {
                    findDog(complex: { favoriteCookieFlavor: ""Bacon"" })
                    {
                        name
                    }
                }
            ");

            Schema          schema         = ValidationUtils.CreateSchema();
            IQueryValidator queryValidator = CreateValidator();

            // act
            QueryValidationResult result =
                queryValidator.Validate(schema, query);

            // assert
            Assert.True(result.HasErrors);
            Assert.Collection(result.Errors,
                              t => Assert.Equal(
                                  "The specified input object field " +
                                  "`favoriteCookieFlavor` does not exist.",
                                  t.Message));
        }
Ejemplo n.º 5
0
        public void FragmentDoesNotMatchType()
        {
            // arrange
            DocumentNode query = Utf8GraphQLParser.Parse(@"
                {
                    dog {
                        ...fragmentDoesNotMatchType
                    }
                }

                fragment fragmentDoesNotMatchType on Human {
                    name
                }
            ");

            Schema          schema         = ValidationUtils.CreateSchema();
            IQueryValidator queryValidator = CreateValidator();

            // act
            QueryValidationResult result =
                queryValidator.Validate(schema, query);

            // assert
            Assert.True(result.HasErrors);
            Assert.Collection(result.Errors,
                              t => Assert.Equal(
                                  "The parent type does not match the type condition on " +
                                  "the fragment `fragmentDoesNotMatchType`.",
                                  t.Message));
        }
Ejemplo n.º 6
0
 public OrganizationController(
     OrganizationService organizationService,
     IOrganizationRepository organizationRepository,
     ICacheClient cacheClient,
     IEventRepository eventRepository,
     IUserRepository userRepository,
     IProjectRepository projectRepository,
     BillingManager billingManager,
     IMailer mailer,
     IMessagePublisher messagePublisher,
     IMapper mapper,
     IQueryValidator validator,
     AppOptions options,
     ILoggerFactory loggerFactory,
     BillingPlans plans) : base(organizationRepository, mapper, validator, loggerFactory)
 {
     _organizationService = organizationService;
     _cacheClient         = cacheClient;
     _eventRepository     = eventRepository;
     _userRepository      = userRepository;
     _projectRepository   = projectRepository;
     _billingManager      = billingManager;
     _mailer           = mailer;
     _messagePublisher = messagePublisher;
     _options          = options;
     _plans            = plans;
 }
Ejemplo n.º 7
0
        public void StringIntoInt()
        {
            // arrange
            DocumentNode query = Utf8GraphQLParser.Parse(@"
                {
                    arguments {
                        ...stringIntoInt
                    }
                }

                fragment stringIntoInt on Arguments {
                    intArgField(intArg: ""123"")
                }
            ");

            Schema          schema         = ValidationUtils.CreateSchema();
            IQueryValidator queryValidator = CreateValidator();

            // act
            QueryValidationResult result =
                queryValidator.Validate(schema, query);

            // assert
            Assert.True(result.HasErrors);
            Assert.Collection(result.Errors,
                              t => Assert.Equal(
                                  "The specified argument value does not match the " +
                                  "argument type.\nArgument: `intArg`\nValue: `123`",
                                  t.Message));
        }
Ejemplo n.º 8
0
        public void QueryWithTypeSystemDefinitions()
        {
            // arrange
            DocumentNode query = Parser.Default.Parse(@"
                query getDogName {
                    dog {
                        name
                        color
                    }
                }

                extend type Dog {
                    color: String
                }
            ");

            Schema          schema         = ValidationUtils.CreateSchema();
            IQueryValidator queryValidator = CreateValidator();

            // act
            QueryValidationResult result =
                queryValidator.Validate(schema, query);

            // assert
            Assert.True(result.HasErrors);
            Assert.Collection(result.Errors,
                              t => Assert.Equal(
                                  "A document containing TypeSystemDefinition " +
                                  "is invalid for execution.", t.Message),
                              t => Assert.Equal(
                                  "The field `color` does not exist " +
                                  "on the type `Dog`.", t.Message));
        }
 public OrganizationController(
     IOrganizationRepository organizationRepository,
     ICacheClient cacheClient,
     IEventRepository eventRepository,
     IUserRepository userRepository,
     IProjectRepository projectRepository,
     IQueue <WorkItemData> workItemQueue,
     BillingManager billingManager,
     IMailer mailer,
     IMessagePublisher messagePublisher,
     IMapper mapper,
     IQueryValidator validator,
     IOptions <AppOptions> options,
     IOptions <StripeOptions> stripeOptions,
     ILoggerFactory loggerFactory,
     BillingPlans plans) : base(organizationRepository, mapper, validator, loggerFactory)
 {
     _cacheClient       = cacheClient;
     _eventRepository   = eventRepository;
     _userRepository    = userRepository;
     _projectRepository = projectRepository;
     _workItemQueue     = workItemQueue;
     _billingManager    = billingManager;
     _mailer            = mailer;
     _messagePublisher  = messagePublisher;
     _options           = options;
     _stripeOptions     = stripeOptions;
     _plans             = plans;
 }
Ejemplo n.º 10
0
        public void MissingRequiredArgNonNullBooleanArg()
        {
            // arrange
            DocumentNode query = Parser.Default.Parse(@"
                fragment missingRequiredArg on Arguments {
                    nonNullBooleanArgField(nonNullBooleanArg: null)
                }
            ");

            Schema          schema         = ValidationUtils.CreateSchema();
            IQueryValidator queryValidator = CreateValidator();

            // act
            QueryValidationResult result =
                queryValidator.Validate(schema, query);

            // assert
            Assert.True(result.HasErrors);
            Assert.Collection(result.Errors,
                              t => Assert.Equal(
                                  $"The argument `nonNullBooleanArg` is required " +
                                  "and does not allow null values.", t.Message),
                              t => Assert.Equal(
                                  "The specified fragment `missingRequiredArg` " +
                                  "is not used within the current document.",
                                  t.Message));
        }
Ejemplo n.º 11
0
        public void DisallowedSecondRootField()
        {
            // arrange
            DocumentNode query = Parser.Default.Parse(@"
                subscription sub {
                    newMessage {
                        body
                        sender
                    }
                    disallowedSecondRootField
                }
            ");

            Schema          schema         = ValidationUtils.CreateSchema();
            IQueryValidator queryValidator = CreateValidator();

            // act
            QueryValidationResult result =
                queryValidator.Validate(schema, query);

            // assert
            Assert.True(result.HasErrors);
            Assert.Collection(result.Errors,
                              t => Assert.Equal(
                                  $"Subscription operation `sub` must " +
                                  "have exactly one root field.", t.Message),
                              t => Assert.Equal(
                                  "The field `disallowedSecondRootField` does not exist " +
                                  "on the type `Subscription`.", t.Message));
        }
Ejemplo n.º 12
0
        public void DuplicateArgument()
        {
            // arrange
            DocumentNode query = Parser.Default.Parse(@"
                fragment goodNonNullArg on Arguments {
                    nonNullBooleanArgField(
                        nonNullBooleanArg: true, nonNullBooleanArg: true)
                }
            ");

            Schema          schema         = ValidationUtils.CreateSchema();
            IQueryValidator queryValidator = CreateValidator();

            // act
            QueryValidationResult result =
                queryValidator.Validate(schema, query);

            // assert
            Assert.True(result.HasErrors);
            Assert.Collection(result.Errors,
                              t => Assert.Equal(
                                  $"Arguments are not unique.", t.Message),
                              t => Assert.Equal(
                                  "The specified fragment `goodNonNullArg` " +
                                  "is not used within the current document.",
                                  t.Message));
        }
Ejemplo n.º 13
0
        public void OperationWithTwoVariablesThatHaveTheSameName()
        {
            // arrange
            DocumentNode query = Parser.Default.Parse(@"
                query houseTrainedQuery(
                    $atOtherHomes: Boolean, $atOtherHomes: Boolean) {
                    dog {
                        isHousetrained(atOtherHomes: $atOtherHomes)
                    }
                }
            ");

            Schema          schema         = ValidationUtils.CreateSchema();
            IQueryValidator queryValidator = CreateValidator();

            // act
            QueryValidationResult result =
                queryValidator.Validate(schema, query);

            // assert
            Assert.True(result.HasErrors);
            Assert.Collection(result.Errors,
                              t => Assert.Equal(
                                  "A document containing operations that " +
                                  "define more than one variable with the same " +
                                  "name is invalid for execution.", t.Message),
                              t => Assert.Equal(
                                  "The field `isHousetrained` does not exist " +
                                  "on the type `Dog`.", t.Message));
        }
Ejemplo n.º 14
0
        public void TwoQueryOperationsWithTheSameName()
        {
            // arrange
            DocumentNode query = Parser.Default.Parse(@"
                query getName {
                    dog {
                        name
                    }
                }

                query getName {
                    dog {
                        owner {
                            name
                        }
                    }
                }
            ");

            Schema          schema         = ValidationUtils.CreateSchema();
            IQueryValidator queryValidator = CreateValidator();

            // act
            QueryValidationResult result =
                queryValidator.Validate(schema, query);

            // assert
            Assert.True(result.HasErrors);
            Assert.Collection(result.Errors,
                              t => Assert.Equal(
                                  $"The operation name `getName` is not unique.",
                                  t.Message));
        }
Ejemplo n.º 15
0
        public void VariableNotUsedWithinFragment()
        {
            // arrange
            DocumentNode query = Parser.Default.Parse(@"
                query variableNotUsedWithinFragment($atOtherHomes: Boolean) {
                    dog {
                        ...isHousetrainedWithoutVariableFragment
                    }
                }

                fragment isHousetrainedWithoutVariableFragment on Dog {
                    barkVolume
                }
            ");

            Schema          schema         = ValidationUtils.CreateSchema();
            IQueryValidator queryValidator = CreateValidator();

            // act
            QueryValidationResult result =
                queryValidator.Validate(schema, query);

            // assert
            Assert.True(result.HasErrors);
            Assert.Collection(result.Errors,
                              t => Assert.Equal(
                                  "The following variables were not used: " +
                                  "atOtherHomes.", t.Message));
        }
Ejemplo n.º 16
0
        public void ConflictingBecauseAlias()
        {
            // arrange
            DocumentNode query = Parser.Default.Parse(@"
                fragment conflictingBecauseAlias on Dog {
                    name: nickname
                    name
                }
            ");

            Schema          schema         = ValidationUtils.CreateSchema();
            IQueryValidator queryValidator = CreateValidator();

            // act
            QueryValidationResult result =
                queryValidator.Validate(schema, query);

            // assert
            Assert.True(result.HasErrors);
            Assert.Collection(result.Errors,
                              t => Assert.Equal(
                                  "The query has non-mergable fields.",
                                  t.Message),
                              t => Assert.Equal(
                                  "The specified fragment `conflictingBecauseAlias` " +
                                  "is not used within the current document.",
                                  t.Message));
        }
Ejemplo n.º 17
0
        public void InlineFragOnScalar()
        {
            // arrange
            DocumentNode query = Parser.Default.Parse(@"
                {
                    dog {
                       ... inlineFragOnScalar
                    }
                }

                fragment inlineFragOnScalar on Dog {
                    ... on Boolean {
                        somethingElse
                    }
                }
            ");

            Schema          schema         = ValidationUtils.CreateSchema();
            IQueryValidator queryValidator = CreateValidator();

            // act
            QueryValidationResult result =
                queryValidator.Validate(schema, query);

            // assert
            Assert.True(result.HasErrors);
            Assert.Collection(result.Errors,
                              t => Assert.Equal(t.Message,
                                                "Fragments can only be declared on unions, interfaces, " +
                                                "and objects."));
        }
Ejemplo n.º 18
0
        public void UndefinedFragment()
        {
            // arrange
            DocumentNode query = Parser.Default.Parse(@"
                {
                    dog {
                        ...undefinedFragment
                    }
                }
            ");

            Schema          schema         = ValidationUtils.CreateSchema();
            IQueryValidator queryValidator = CreateValidator();

            // act
            QueryValidationResult result =
                queryValidator.Validate(schema, query);

            // assert
            Assert.True(result.HasErrors);
            Assert.Collection(result.Errors,
                              t => Assert.Equal(
                                  "The specified fragment `undefinedFragment` " +
                                  "does not exist.",
                                  t.Message));
        }
Ejemplo n.º 19
0
        public void ScalarSelectionsNotAllowedOnInt()
        {
            // arrange
            DocumentNode query = Parser.Default.Parse(@"
                {
                    dog {
                        barkVolume {
                            sinceWhen
                        }
                    }
                }
            ");

            Schema          schema         = ValidationUtils.CreateSchema();
            IQueryValidator queryValidator = CreateValidator();

            // act
            QueryValidationResult result =
                queryValidator.Validate(schema, query);

            // assert
            Assert.True(result.HasErrors);
            Assert.Collection(result.Errors,
                              t => Assert.Equal(t.Message,
                                                "`barkVolume` is a scalar field. Selections on scalars " +
                                                "or enums are never allowed, because they are the leaf " +
                                                "nodes of any GraphQL query."));
        }
Ejemplo n.º 20
0
        public void DuplicateFragments()
        {
            // arrange
            DocumentNode query = Parser.Default.Parse(@"
                {
                    dog {
                        ...fragmentOne
                    }
                }

                fragment fragmentOne on Dog {
                    name
                }

                fragment fragmentOne on Dog {
                    owner {
                        name
                    }
                }
            ");

            Schema          schema         = ValidationUtils.CreateSchema();
            IQueryValidator queryValidator = CreateValidator();

            // act
            QueryValidationResult result =
                queryValidator.Validate(schema, query);

            // assert
            Assert.True(result.HasErrors);
            Assert.Collection(result.Errors,
                              t => Assert.Equal(
                                  "There are multiple fragments with the name `fragmentOne`.",
                                  t.Message));
        }
Ejemplo n.º 21
0
        public void UnusedFragment()
        {
            // arrange
            DocumentNode query = Parser.Default.Parse(@"
                fragment nameFragment on Dog { # unused
                    name
                }

                {
                    dog {
                        name
                    }
                }
            ");

            Schema          schema         = ValidationUtils.CreateSchema();
            IQueryValidator queryValidator = CreateValidator();

            // act
            QueryValidationResult result =
                queryValidator.Validate(schema, query);

            // assert
            Assert.True(result.HasErrors);
            Assert.Collection(result.Errors,
                              t => Assert.Equal(
                                  "The specified fragment `nameFragment` " +
                                  "is not used within the current document.", t.Message));
        }
Ejemplo n.º 22
0
        public void InvalidFieldArgName()
        {
            // arrange
            DocumentNode query = Parser.Default.Parse(@"
                fragment invalidArgName on Dog {
                    doesKnowCommand(command: CLEAN_UP_HOUSE)
                }
            ");

            Schema          schema         = ValidationUtils.CreateSchema();
            IQueryValidator queryValidator = CreateValidator();

            // act
            QueryValidationResult result =
                queryValidator.Validate(schema, query);

            // assert
            Assert.True(result.HasErrors);
            Assert.Collection(result.Errors,
                              t => Assert.Equal(
                                  "The argument `dogCommand` is required and does not " +
                                  "allow null values.",
                                  t.Message),
                              t => Assert.Equal(
                                  "The argument `command` does not exist.", t.Message),
                              t => Assert.Equal(
                                  "The specified fragment `invalidArgName` " +
                                  "is not used within the current document.",
                                  t.Message));
        }
 public ProjectController(
     IOrganizationRepository organizationRepository,
     IProjectRepository projectRepository,
     IStackRepository stackRepository,
     IEventRepository eventRepository,
     ITokenRepository tokenRepository,
     IQueue <WorkItemData> workItemQueue,
     BillingManager billingManager,
     SlackService slackService,
     IMapper mapper,
     IQueryValidator validator,
     AppOptions options,
     ILoggerFactory loggerFactory
     ) : base(projectRepository, mapper, validator, loggerFactory)
 {
     _organizationRepository = organizationRepository;
     _projectRepository      = projectRepository;
     _stackRepository        = stackRepository;
     _eventRepository        = eventRepository;
     _tokenRepository        = tokenRepository;
     _workItemQueue          = workItemQueue;
     _billingManager         = billingManager;
     _slackService           = slackService;
     _options = options;
 }
 public CreateSubscriptionCommand(
     IQueryValidator queryValidator,
     IEntityById entityById,
     IRepository<Subscription> repository)
 {
     this.queryValidator = queryValidator;
     this.entityById = entityById;
     this.repository = repository;
 }
Ejemplo n.º 25
0
 public CreateSubscriptionCommand(
     IQueryValidator queryValidator,
     IEntityById entityById,
     IRepository <Subscription> repository)
 {
     this.queryValidator = queryValidator;
     this.entityById     = entityById;
     this.repository     = repository;
 }
Ejemplo n.º 26
0
        public void QueriesWithInvalidVariableTypes()
        {
            // arrange
            DocumentNode query = Utf8GraphQLParser.Parse(@"
                query takesCat($cat: Cat) {
                    # ...
                }

                query takesDogBang($dog: Dog!) {
                    # ...
                }

                query takesListOfPet($pets: [Pet]) {
                    # ...
                }

                query takesCatOrDog($catOrDog: CatOrDog) {
                    # ...
                }
            ");

            Schema          schema         = ValidationUtils.CreateSchema();
            IQueryValidator queryValidator = CreateValidator();

            // act
            QueryValidationResult result =
                queryValidator.Validate(schema, query);

            // assert
            Assert.True(result.HasErrors);
            Assert.Collection(result.Errors,
                              t => Assert.Equal(
                                  "The following variables were not used: cat.",
                                  t.Message),
                              t => Assert.Equal(
                                  "The following variables were not used: dog.",
                                  t.Message),
                              t => Assert.Equal(
                                  "The following variables were not used: pets.",
                                  t.Message),
                              t => Assert.Equal(
                                  "The following variables were not used: catOrDog.",
                                  t.Message),
                              t => Assert.Equal(
                                  "The type of variable `cat` is not an input type.",
                                  t.Message),
                              t => Assert.Equal(
                                  "The type of variable `dog` is not an input type.",
                                  t.Message),
                              t => Assert.Equal(
                                  "The type of variable `pets` is not an input type.",
                                  t.Message),
                              t => Assert.Equal(
                                  "The type of variable `catOrDog` is not an input type.",
                                  t.Message));
        }
Ejemplo n.º 27
0
 public CreateSubscriptionCommand CreateCommand(
     IQueryValidator isQueryValid          = null,
     IEntityById entityById                = null,
     IRepository <Subscription> repository = null)
 {
     return(new CreateSubscriptionCommand(
                isQueryValid ?? Mock.Of <IQueryValidator>(qv => qv.IsValid(It.IsAny <string>())),
                entityById ?? Mock.Of <IEntityById>(eb => eb.Exist <Topic>(It.IsAny <Identity>())),
                repository ?? Mock.Of <IRepository <Subscription> >()));
 }
 public CreateSubscriptionCommand CreateCommand(
     IQueryValidator isQueryValid = null,
     IEntityById entityById = null,
     IRepository<Subscription> repository  = null)
 {
     return new CreateSubscriptionCommand(
         isQueryValid ?? Mock.Of<IQueryValidator>(qv => qv.IsValid(It.IsAny<string>())),
         entityById ?? Mock.Of<IEntityById>(eb => eb.Exist<Topic>(It.IsAny<Identity>())),
         repository ?? Mock.Of<IRepository<Subscription>>());
 }
 public ValidateQueryMiddleware(
     QueryDelegate next,
     IQueryValidator validator,
     Cache <QueryValidationResult> validatorCache)
 {
     _next = next ??
             throw new ArgumentNullException(nameof(next));
     _validator = validator ??
                  throw new ArgumentNullException(nameof(validator));
     _validatorCache = validatorCache ??
                       new Cache <QueryValidationResult>(Defaults.CacheSize);
 }
Ejemplo n.º 30
0
 public UpdateSubscriptionCommand CreateCommand(
     IEntityById entityById                = null,
     IQueryValidator queryValidator        = null,
     IRepository <Subscription> repository = null
     )
 {
     return(new UpdateSubscriptionCommand(
                entityById ?? Mock.Of <IEntityById>(eb => eb.Exist <Subscription>(It.IsAny <Identity>()) == true),
                queryValidator ?? Mock.Of <IQueryValidator>(qv => qv.IsValid(It.IsAny <string>()) == true),
                repository ?? Mock.Of <IRepository <Subscription> >()
                ));
 }
Ejemplo n.º 31
0
 protected QueryHandler(IBus bus,
                        IQueryValidator <T> queryValidator,
                        IErrorEventEmitter <T, E, F> errorEventEmitter,
                        IQueryHandler <T, R> handler,
                        ILogger logger)
 {
     _bus               = bus;
     _queryValidator    = queryValidator;
     _errorEventEmitter = errorEventEmitter;
     _logger            = logger;
     _handler           = handler;
 }
Ejemplo n.º 32
0
 public UpdateSubscriptionCommand CreateCommand(
     IEntityById entityById = null,
     IQueryValidator queryValidator = null,
     IRepository<Subscription> repository = null
     )
 {
     return new UpdateSubscriptionCommand(
         entityById ?? Mock.Of<IEntityById>(eb => eb.Exist<Subscription>(It.IsAny<Identity>()) == true),
         queryValidator ?? Mock.Of<IQueryValidator>(qv => qv.IsValid(It.IsAny<string>()) == true),
         repository ?? Mock.Of<IRepository<Subscription>>()
         );
 }
        public void QueryIsNull()
        {
            // arrange
            Schema          schema         = ValidationUtils.CreateSchema();
            IQueryValidator queryValidator = CreateValidator();

            // act
            Action a = () => queryValidator.Validate(schema, null);

            // assert
            Assert.Throws <ArgumentNullException>(a);
        }
Ejemplo n.º 34
0
 /// <summary>
 /// Initializes a new instance of <see cref="QueryCoordinator"/>
 /// </summary>
 /// <param name="typeDiscoverer"><see cref="ITypeDiscoverer"/> to use for discovering <see cref="IQueryProviderFor{T}"/> implementations</param>
 /// <param name="container"><see cref="IContainer"/> for getting instances of <see cref="IQueryProviderFor{T}">query providers</see></param>
 /// <param name="fetchingSecurityManager"><see cref="IFetchingSecurityManager"/> to use for securing <see cref="IQuery">queries</see></param>
 /// <param name="validator"><see cref="IQueryValidator"/> to use for validating <see cref="IQuery">queries</see></param>
 /// <param name="filters"><see cref="IReadModelFilters">Filters</see> used to filter any of the read models coming back after a query</param>
 public QueryCoordinator(
     ITypeDiscoverer typeDiscoverer, 
     IContainer container, 
     IFetchingSecurityManager fetchingSecurityManager,
     IQueryValidator validator,
     IReadModelFilters filters)
 {
     _typeDiscoverer = typeDiscoverer;
     _container = container;
     _validator = validator;
     _filters = filters;
     _fetchingSecurityManager = fetchingSecurityManager;
     DiscoverQueryTypesPerTargetType();
 }
Ejemplo n.º 35
0
		private async Task<object> GetResult(IHttpContext context, IDictionary<string, string> routeArgs,
			object service, MethodInfo method, ParameterInfo[] methodParams, IQueryValidator argResolver)
		{
			var urlArgs = new Dictionary<string, string>();

			var paramSource = await GetParamSource(context.Request);

			foreach (var param in paramSource.Split(new[] { '?', '&' }, StringSplitOptions.RemoveEmptyEntries))
			{
				var tokens = param.Split('=');

				if (tokens.Length != 2)
					return Error(context, "Invalid query string");

				urlArgs.Add(tokens[0].ToLower(), Uri.UnescapeDataString(tokens[1]));
			}

			var methodArgs = new object[methodParams.Length];

			if (argResolver != null)
			{
				var error = await argResolver.Validate(context, urlArgs);
				if (error != null)
					return error;
			}

			for (var i = 0; i < methodArgs.Length; i++)
			{
				var param = methodParams[i];
				var argResult = TryGetArg(context, param, urlArgs, routeArgs, argResolver);

				if (argResult is RouteError)
					return argResult;

				methodArgs[i] = argResult;
			}

			var result = method.Invoke(service, methodArgs);

			var task = result as Task;
			if (task == null)
				return result;

			await task;
			PropertyInfo getter;
			if (m_taskResultLookup.TryGetValue(task.GetType(), out getter))
				return getter.GetValue(task);
			else
				return null;
		}
Ejemplo n.º 36
0
 public QueryParser(IQueryValidator queryValidator,
     IDirectoryInfoProcessor directoryInfoProcessor)
 {
     _queryValidator = queryValidator;
     _directoryInfoProcessor = directoryInfoProcessor;
 }
Ejemplo n.º 37
0
		private object TryGetArg(IHttpContext context, ParameterInfo param, IDictionary<string, string> urlArgs,
			IDictionary<string, string> routeArgs, IQueryValidator argResolver)
		{
			var type = param.ParameterType;

			if (type == typeof(IHttpContext))
				return context;

			var paramName = param.Name.ToLower();

			string argValue;
			var gotValue = urlArgs.TryGetValue(paramName, out argValue)
				|| (routeArgs != null && routeArgs.TryGetValue(paramName, out argValue));

			if (!gotValue)
			{
				object defaultValue;
				if (param.TryGetDefaultValue(out defaultValue))
					return defaultValue;

				if (Nullable.GetUnderlyingType(param.ParameterType) != null)
					return null;

				return Error(context, "Missing param '{0}'", paramName);
			}

			if (string.IsNullOrEmpty(argValue))
				return Error(context, "Empty param '{0}'", paramName);

			object parsedArg;
			if (!m_argParser.TryParse(type, argValue, out parsedArg))
				return Error(context, "Param '{0}' is invalid", paramName);

			return parsedArg;
		}