示例#1
0
        public async Task SubscribeToRoomsUpdatesAsync(string userId, string connectionId, params Room[] rooms)
        {
            await GrpcCallerService.CallService(_urls.GrpcNotifications, async channel =>
            {
                var client = new NotificationsGrpc.NotificationsGrpcClient(channel);

                var request = new RoomsUpdatesRequest
                {
                    UserId       = userId,
                    ConnectionId = connectionId
                };

                foreach (var room in rooms)
                {
                    var roomModel = new GrpcNotifcations.Room {
                        Id = room.Id
                    };
                    roomModel.MembersIds.AddRange(room.MembersIds);

                    request.Rooms.Add(roomModel);
                }

                await client.SubscribeToRoomsUpdatesAsync(request);
            });
        }
示例#2
0
        public async Task <CustomerResponse> Register([Required] CustomerRequest request)
        {
            if (!ModelState.IsValid)
            {
                throw new Exception("Invalid model");
            }

            var response = await GrpcCallerService.CallService(urlGrpc : GRPCUrl.IdentityService, logger : _logger, func : async channel =>
            {
                var client = new Customer.CustomerClient(channel);
                _logger.LogDebug("Grpc get customer request {@request}", request);
                var customer = await client.AddCustomerAsync(request);
                var response = await GrpcCallerService.CallService(urlGrpc: GRPCUrl.ProductService, logger: _logger, func: async channel =>
                {
                    var client = new ProductUser.ProductUserClient(channel);
                    _logger.LogDebug("Grpc add product customer request {@request}", customer);
                    return(await client.UpdateCustomerAsync(new ProductUserRequest {
                        Id = customer.Id, Name = customer.Name, IsDeleted = false
                    }));
                });
                return(customer);
            });

            return(response);
        }
        public async Task <IActionResult> Login(string returnUrl)
        {
            var loginKey = await GrpcCallerService.CallService(_settings.InternalEndpoints["grpcResources"], _logger, async channel =>
            {
                var client  = new Resources.API.Grpc.ResourceService.ResourceServiceClient(channel);
                var request = new Resources.API.Grpc.GetByKeyRequest()
                {
                    Key = "login_lb", LanguageCode = "fr"
                };
                _logger.LogInformation("grpc client created, request = {@request}", request);
                var reply = await client.GetByKeyAsync(request);
                _logger.LogInformation("grpc reply {@reply}", reply);
                return(reply?.Value);
            });

            if (User.Identity.IsAuthenticated == true)
            {
                return(RedirectToAction(nameof(LoggedIn)));
            }

            var context = await _interaction.GetAuthorizationContextAsync(returnUrl);

            if (context?.IdP != null)
            {
                throw new NotImplementedException("External login is not implemented!");
            }

            var vm = BuildLoginViewModel(returnUrl, context);

            ViewData["ReturnUrl"] = returnUrl;

            return(View(vm));
        }
示例#4
0
        public async Task <IActionResult> GetById(Service.GetByIdRequest request)
        {
            var response = await GrpcCallerService.CallService <Service.GetByIdResponse>(async() => await _client.GetByIdAsync(request, deadline: DateTime.UtcNow.AddSeconds(30)));

            if (!response.IsSuccessful)
            {
                _logger.LogError($"{nameof(ProductServiceController)} call unsuccessful on GetProductById: {response.Message}");
            }

            return(ResponseHelper.PrepareServiceCallResponse(this, response.ServiceResponse.ServiceProcessResult.IsSuccessful, response));
        }
示例#5
0
        public async Task <ProductResponse> UpdateProduct([Required] ProductRequest request)
        {
            var response = await GrpcCallerService.CallService(urlGrpc : GRPCUrl.IdentityService, logger : _logger, func : async channel =>
            {
                var client = new Product.ProductClient(channel);
                _logger.LogDebug("Grpc update product request {@request}", request);
                return(await client.UpdateProductAsync(request));
            });

            return(response);
        }
示例#6
0
        public async Task <IEnumerable <Models.Complete.Property> > Get(PropertiesParameters parameters = null) =>
        _Grpc ? await GrpcCallerService.CallService(_urls.PropertiesGrpc, async channel =>
        {
            var client = new Property.PropertyClient(channel);
            _logger.LogDebug("grpc client created, request");
            var response = await client.GetPropertiesAsync(new Properties.Services.PropertyTypes.GetPropertiesRequest());
            _logger.LogDebug("grpc response {@response}", response);

            return(response.Properties.Select(p => MapToPropertyComplete(p)));
        }) :
        WebUtilities.MapListResponse <Models.Complete.Property>(
        public async Task <IEnumerable <WeatherDataItem> > GetFirst()
        {
            return(await GrpcCallerService.CallService(_urls.WeatherFirst, async httpClient =>
            {
                var channel = GrpcChannel.ForAddress(_urls.WeatherFirst);
                var client = new WeatherFirst.WeatherFirstClient(channel);
                _logger.LogDebug("grpc client created, request");
                var response = await client.GetAsync(new ApiFirst.Proto.WeatherRequest());
                _logger.LogDebug("grpc response {@response}", response);

                return MapToWeatherData(response);
            }));
        }
示例#8
0
        public async Task <RetailerResponse> UpdateRetailer([Required] RetailerUpdateRequest request)
        {
            var response = await GrpcCallerService.CallService(urlGrpc : GRPCUrl.IdentityService, logger : _logger, func : async channel =>
            {
                var client = new Retailer.RetailerClient(channel);
                _logger.LogDebug("Grpc put Retailer request {@request}", request);
                var retailer = await client.UpdateRetailerAsync(request);
                await UpdateProductRetailer(retailer);
                return(retailer);
            });

            return(response);
        }
示例#9
0
        public async Task <RetailerResponse> Get([Required] Guid id)
        {
            var response = await GrpcCallerService.CallService(urlGrpc : GRPCUrl.IdentityService, logger : _logger, func : async channel =>
            {
                var client = new Retailer.RetailerClient(channel);
                _logger.LogDebug("Grpc get Retailer request {@request}", id);
                return(await client.GetRetailerAsync(new RetailerItemRequest {
                    Id = id.ToString()
                }));
            });

            return(response);
        }
示例#10
0
        private async Task <ProductUserResponse> UpdateProductRetailer(RetailerResponse retailer, bool isDeleted = false)
        {
            var response = await GrpcCallerService.CallService(urlGrpc : GRPCUrl.ProductService, logger : _logger, func : async channel =>
            {
                var client = new ProductUser.ProductUserClient(channel);
                _logger.LogDebug("Grpc delete Retailer request {@request}", retailer);
                return(await client.UpdateRetailerAsync(new ProductUserRequest {
                    Id = retailer.Id, Name = retailer.Name, IsDeleted = isDeleted
                }));
            });

            return(response);
        }
示例#11
0
        public async Task <CustomerResponse> UpdateCustomer([Required] CustomerUpdateRequest customerRequest)
        {
            var response = await GrpcCallerService.CallService(urlGrpc : GRPCUrl.IdentityService, logger : _logger, func : async channel =>
            {
                var client = new Customer.CustomerClient(channel);
                _logger.LogDebug("Grpc get customer request {@request}", customerRequest);
                var customer = await client.UpdateCustomerAsync(customerRequest);
                await UpdateProductCustomer(customer, false);
                return(customer);
            });

            return(response);
        }
        public async Task <UserModel> GetUserAsync(string id)
        {
            return(await GrpcCallerService.CallService(_urls.GrpcUsers, async channel =>
            {
                var client = new UsersGrpc.UsersGrpcClient(channel);

                var response = await client.GetUserAsync(new UserRequest {
                    Id = id
                });

                return MapToUserData(response);
            }));
        }
示例#13
0
        public async Task <ProductResponse> DeleteProduct([Required] Guid id)
        {
            var response = await GrpcCallerService.CallService(urlGrpc : GRPCUrl.IdentityService, logger : _logger, func : async channel =>
            {
                var client = new Product.ProductClient(channel);
                _logger.LogDebug("Grpc delete product request {@request}", id);
                return(await client.DeleteProductAsync(new ProductItemRequest {
                    Id = id.ToString()
                }));
            });

            return(response);
        }
示例#14
0
        public async Task <RetailerResponse> DeleteCustomer([Required] Guid id)
        {
            var response = await GrpcCallerService.CallService(urlGrpc : GRPCUrl.IdentityService, logger : _logger, func : async channel =>
            {
                var client = new Retailer.RetailerClient(channel);
                _logger.LogDebug("Grpc delete Retailer request {@request}", id);
                var retailer = await client.DeleteRetailerAsync(new RetailerItemRequest {
                    Id = id.ToString()
                });
                await UpdateProductRetailer(retailer, true);
                return(retailer);
            });

            return(response);
        }
示例#15
0
        public async Task <PaginatedItemsResponse> Get([Required] ProductItemsRequest request)
        {
            if (!ModelState.IsValid)
            {
                throw new Exception("Invalid model");
            }
            var response = await GrpcCallerService.CallService(urlGrpc : GRPCUrl.IdentityService, logger : _logger, func : async channel =>
            {
                var client = new Product.ProductClient(channel);
                _logger.LogDebug("Grpc get products request {@request}", request);
                return(await client.GetProductsAsync(request));
            });

            return(response);
        }
示例#16
0
        public async Task <LogoutResponse> Logout([Required] LogoutRequest request)
        {
            if (!ModelState.IsValid)
            {
                throw new Exception("Invalid model");
            }
            var response = await GrpcCallerService.CallService(urlGrpc : GRPCUrl.IdentityService, logger : _logger, func : async channel =>
            {
                var client = new Auth.AuthClient(channel);
                _logger.LogDebug("Grpc auth logout {@request}", request);
                return(await client.LogoutAsync(request));
            });

            return(response);
        }
示例#17
0
        public async Task <BasketResponse> RemoveToBasket([Required] BasketRequest request)
        {
            if (!ModelState.IsValid)
            {
                throw new Exception("Invalid model");
            }
            var response = await GrpcCallerService.CallService(urlGrpc : GRPCUrl.ProductService, logger : _logger, func : async channel =>
            {
                var client = new Basket.BasketClient(channel);
                _logger.LogDebug("Grpc remove backet {@request}", request);
                return(await client.RemoveFromBasketAsync(request));
            });

            return(response);
        }
示例#18
0
        public async Task SubscribeToUsersStatusUpdatesAsync(string userId, string connectionId, params string[] usersIds)
        {
            await GrpcCallerService.CallService(_urls.GrpcNotifications, async channel =>
            {
                var client = new NotificationsGrpc.NotificationsGrpcClient(channel);

                var request = new ConnectionsUpdatesRequest
                {
                    UserId       = userId,
                    ConnectionId = connectionId
                };
                request.UsersIds.AddRange(usersIds);

                await client.SubscribeToUsersStatusUpdatesAsync(request);
            });
        }
示例#19
0
        public async Task <IActionResult> NewPass(int rut)
        {
            var person = await mediator.Send(new NewPassQuery(rut));

            await GrpcCallerService.CallService(_urls.GrpcMail, channel =>
            {
                var client = new Mailer.MailerClient(channel);
                client.MailChagedPassword(new MailRequest
                {
                    CuentaDestino = person.CORREO_ELECTRONICO,
                    Nombre        = person.NOMBRE_COMPLETO,
                    IdPersona     = person.ID_PER,
                    CodEmail      = 1
                });

                return(Task.CompletedTask);
            });

            return(Ok(person));
        }
        public void OnAuthorization(AuthorizationFilterContext filterContext)
        {
            try
            {
                var skipAuthorization = (filterContext.ActionDescriptor as ControllerActionDescriptor)
                                        .MethodInfo.GetCustomAttributes(typeof(AllowAnonymousAttribute), true);
                if (skipAuthorization.Length > 0)
                {
                    return;
                }
                var tokenString = filterContext.HttpContext.Request.Headers["Authorization"].ToString();
                if (string.IsNullOrWhiteSpace(tokenString))
                {
                    throw new UnauthorizedAccessException();
                }

                var response = Task.Run(async() =>
                                        await GrpcCallerService.CallService(urlGrpc: GRPCUrl.IdentityService, logger: null,
                                                                            func: async channel =>
                {
                    var client = new Auth.AuthClient(channel);
                    return(await client.ValidTokenAsync(new TokenRequest {
                        Token = tokenString
                    }));
                }))
                               .ConfigureAwait(false).GetAwaiter().GetResult();

                if (!response.IsValid)
                {
                    throw new UnauthorizedAccessException();
                }

                SetClaim(filterContext: filterContext, response: response);
            }
            catch (Exception ex)
            {
                throw new UnauthorizedAccessException();
            }
        }