public override async Task <SearchReply> Search(SearchCriteria criteria, ServerCallContext context)
        {
            await Task.Delay(500); // Gotta look busy...

            var rng   = new Random();
            var reply = new SearchReply();

            reply.Itineraries.AddRange(Enumerable.Range(0, rng.Next(1, 5)).Select(_ => new Itinerary
            {
                Price    = rng.Next(10000, 200000) / 100m,
                Outbound = new FlightSegment
                {
                    Airline         = RandomAirline(),
                    FromAirportCode = criteria.FromAirport,
                    ToAirportCode   = criteria.ToAirport,
                    DepartureTime   = criteria.OutboundDate.AddHours(rng.Next(24)).AddMinutes(5 * rng.Next(12)),
                    ReturnTime      = criteria.OutboundDate.AddHours(rng.Next(24)).AddMinutes(5 * rng.Next(12)),
                    DurationHours   = 2 + rng.Next(10),
                    TicketClass     = criteria.TicketClass
                },
                Return = new FlightSegment
                {
                    Airline         = RandomAirline(),
                    FromAirportCode = criteria.ToAirport,
                    ToAirportCode   = criteria.FromAirport,
                    DepartureTime   = criteria.ReturnDate.AddHours(rng.Next(24)).AddMinutes(5 * rng.Next(12)),
                    ReturnTime      = criteria.ReturnDate.AddHours(rng.Next(24)).AddMinutes(5 * rng.Next(12)),
                    DurationHours   = 2 + rng.Next(10),
                    TicketClass     = criteria.TicketClass
                },
            }));

            return(reply);
        }
Exemple #2
0
        public void ShowsSearchResults()
        {
            // Arrange: Prepare a reply from server
            var app   = host.AddComponent <Main>();
            var reply = new SearchReply();

            reply.Itineraries.Add(TestItinerary.Create("My Airline", 123));
            reply.Itineraries.Add(TestItinerary.Create("Another Airline", 456m));

            // Act: Click 'search'; receive reply
            app.Find(".search-submit").Click();
            host.WaitForNextRender(() => flightDataClient.SetResponse(reply));

            // Assert: Verify UI displays the data
            Assert.Equal("2 results", app.Find("#results-area .title h2").InnerText);
            Assert.Collection(app.FindAll("#results-area .search-result"),
                              item =>
            {
                Assert.Equal("$123", item.QuerySelector(".price h3").InnerText);
                Assert.Equal("My Airline", item.QuerySelector(".airline span").InnerText);
            },
                              item =>
            {
                Assert.Equal("$456", item.QuerySelector(".price h3").InnerText);
                Assert.Equal("Another Airline", item.QuerySelector(".airline span").InnerText);
            });
        }
Exemple #3
0
        public override async Task <SearchReply> Search(SearchRequest request, ServerCallContext context)
        {
            var condition = _mapper.Map <Condition>(request.Condition);
            var results   = await _driver.Search(condition);

            var response = new SearchReply();

            response.Ids.AddRange(results);
            return(response);
        }
Exemple #4
0
        public override Task <SearchReply> List(SearchRequest request, ServerCallContext context)
        {
            SearchReply result = new SearchReply();

            for (int i = 0; i < request.Count; i++)
            {
                var item = new User
                {
                    Name       = "henryfan",
                    City       = "guangzhou",
                    Email      = "*****@*****.**",
                    Title      = "cxo",
                    Password   = "******",
                    ID         = Guid.NewGuid().ToString("N"),
                    CreateTime = DateTime.Now.Ticks
                };
                result.Items.Add(item);
            }
            return(Task.FromResult(result));
        }
Exemple #5
0
        public override async Task <SearchReply> ExecuteSearchRequest(SearchRequest request, ServerCallContext context)
        {
            if (!RequestIsFromLoopback(context))
            {
                throw new Exception("Request is not from loopback");
            }

            List <string> cns = request.UserIdentity.Cn.ToList();
            List <string> ous = request.UserIdentity.Ou.ToList();

            if (cns[0] != "BindUser" && ous.Count != 0)
            {
                throw new Exception("Search by Non-BindUser");
            }


            SearchReply reply = new SearchReply {
            };

            Guid appId = new Guid(request.UserIdentity.Dc[0]);

            LdapPacketParserLibrary.Parser             parser  = new LdapPacketParserLibrary.Parser();
            LdapPacketParserLibrary.Models.LdapMessage message = parser.TryParsePacket(request.RawPacket.ToByteArray());

            if (message.ProtocolOp.GetType() == typeof(LdapPacketParserLibrary.Models.Operations.Request.SearchRequest))
            {
                LdapPacketParserLibrary.Models.Operations.Request.SearchRequest searchRequest =
                    (LdapPacketParserLibrary.Models.Operations.Request.SearchRequest)message.ProtocolOp;

                int?limit = searchRequest.SizeLimit;

                var itemExpression = Expression.Parameter(typeof(AppUser));
                SearchExpressionBuilder searchExpressionBuilder = new SearchExpressionBuilder();
                var conditions  = searchExpressionBuilder.Build(searchRequest.Filter, itemExpression);
                var queryLambda = Expression.Lambda <Func <AppUser, bool> >(conditions, itemExpression);
                var predicate   = queryLambda.Compile();

                List <AppUser> results = await _authDbContext.Users
                                         .AsNoTracking()
                                         .Include(u => u.Groups)
                                         .ThenInclude(g => g.AuthApps)
                                         .Where(queryLambda)
                                         .Where(u => u.Groups.Any(g => g.AuthApps.Any(a => a.Id == appId)))
                                         .AsSplitQuery()
                                         .ToListAsync();

                SearchReply.Types.ResultEntry entry = new SearchReply.Types.ResultEntry {
                };

                foreach (AppUser user in results)
                {
                    entry.Rdn = "cn=" + user.Id.ToString() + ",ou=People,dc=" + appId;

                    SearchReply.Types.ResultEntry.Types.ResultAttribute displayNameAttribute = new SearchReply.Types.ResultEntry.Types.ResultAttribute
                    {
                        Name = "displayname",
                    };
                    displayNameAttribute.Value.Add(user.UserName);

                    SearchReply.Types.ResultEntry.Types.ResultAttribute emailAttribute = new SearchReply.Types.ResultEntry.Types.ResultAttribute
                    {
                        Name = "email",
                    };
                    emailAttribute.Value.Add(user.Email);

                    SearchReply.Types.ResultEntry.Types.ResultAttribute objectClassAttribute = new SearchReply.Types.ResultEntry.Types.ResultAttribute
                    {
                        Name = "objectclass",
                    };
                    objectClassAttribute.Value.Add("inetOrgPerson");

                    SearchReply.Types.ResultEntry.Types.ResultAttribute entryUuidAttribute = new SearchReply.Types.ResultEntry.Types.ResultAttribute
                    {
                        Name = "entryUuid",
                    };
                    entryUuidAttribute.Value.Add(user.Id.ToString());

                    entry.Attributes.AddRange(new List <SearchReply.Types.ResultEntry.Types.ResultAttribute>()
                    {
                        displayNameAttribute, emailAttribute, objectClassAttribute, entryUuidAttribute
                    });

                    reply.Results.Add(entry);
                }
            }

            return(reply);
        }