Пример #1
0
        public static HotelBookingDetailResponse DetailService(string CRefNo)
        {
            var UName = ConfigurationSettings.AppSettings["TBOUserName"];
            var UPass = ConfigurationSettings.AppSettings["TBOPassword"];

            IHotelService             proxy = TBOCredentials.CreateProxy();
            HotelBookingDetailRequest req   = new HotelBookingDetailRequest
            {
                Credentials = new AuthenticationData()
                {
                    UserName = UName,
                    Password = UPass
                },
                //BookingId = BookId,
                //ConfirmationNo = ConfirmNo,
                ClientReferenceNumber = CRefNo
            };

            var sid = new Guid();

            ProviderLogger.LogBookingDetailReq(req, sid.ToString());
            HotelBookingDetailResponse resp = new HotelBookingDetailResponse();

            resp = proxy.HotelBookingDetail(req);
            ProviderLogger.LogBookingDetailRsp(resp, sid.ToString());

            return(resp);
        }
        public static HotelCancelResponse Cancel(string ConfirmNo)
        {
            var UName = ConfigurationSettings.AppSettings["TBOUserName"];
            var UPass = ConfigurationSettings.AppSettings["TBOPassword"];

            HotelCancelRequest req = new HotelCancelRequest
            {
                Credentials = new AuthenticationData()
                {
                    UserName = UName,
                    Password = UPass
                },
                //RequestType = "HotelCancel",
                ConfirmationNo = ConfirmNo,
                Remarks        = "test cancel"
            };

            IHotelService proxy = TBOCredentials.CreateProxy();
            var           sid   = new Guid();

            ProviderLogger.LogHotelCancelReq(req, sid.ToString());
            HotelCancelResponse resp = new HotelCancelResponse();

            resp = proxy.HotelCancel(req);
            ProviderLogger.LogHotelCancelResp(resp, sid.ToString());
            return(resp);
        }
        public static HotelSearchResponse Search(HotelSearchRequest req, string SID)
        {
            var UName = ConfigurationSettings.AppSettings["TBOUserName"];
            var UPass = ConfigurationSettings.AppSettings["TBOPassword"];

            IHotelService proxy = TBOCredentials.CreateProxy();

            req.Credentials = new AuthenticationData()
            {
                UserName = UName,
                Password = UPass
            };

            ProviderLogger.LogSearchProviderReq(req, SID);

            HotelSearchResponse resp      = new HotelSearchResponse();
            Stopwatch           stopWatch = new Stopwatch();

            stopWatch.Start();
            resp = proxy.HotelSearch(req);


            stopWatch.Stop();
            TimeSpan ts1 = stopWatch.Elapsed;

            ProviderLogger.LogSearchProviderRsp(resp, SID, ts1.ToString());

            return(resp);
        }
        public static HotelRoomAvailabilityResponse Availabilty(string SessionId, int ResIndex, string HotelCode, string SID)
        {
            var UName = ConfigurationSettings.AppSettings["TBOUserName"];
            var UPass = ConfigurationSettings.AppSettings["TBOPassword"];
            HotelRoomAvailabilityRequest req = new HotelRoomAvailabilityRequest
            {
                SessionId   = SessionId,
                ResultIndex = ResIndex,
                HotelCode   = HotelCode,
                IsCancellationPolicyRequired = true, // already come in Pricing
                Credentials = new AuthenticationData()
                {
                    UserName = UName,
                    Password = UPass
                }
            };

            ProviderLogger.LogRoomAvailabiltyReq(req, SID);

            IHotelService proxy = TBOCredentials.CreateProxy();
            HotelRoomAvailabilityResponse resp = new HotelRoomAvailabilityResponse();

            resp = proxy.AvailableHotelRooms(req);
            ProviderLogger.LogRoomAvailabilityProviderRsp(resp, SID);

            return(resp);
        }
Пример #5
0
        public static HotelBookResponse Booking(HotelBookRequest req, string SID)
        {
            var UName = ConfigurationSettings.AppSettings["TBOUserName"];
            var UPass = ConfigurationSettings.AppSettings["TBOPassword"];

            IHotelService proxy = TBOCredentials.CreateProxy();

            req.Credentials = new AuthenticationData()
            {
                UserName = UName,
                Password = UPass
            };
            req.RestrictDuplicateBooking = true;
            ProviderLogger.LogHotelBookReq(req, SID);
            HotelBookResponse resp      = new HotelBookResponse();
            Stopwatch         stopwatch = new Stopwatch();

            stopwatch.Start();
            resp = proxy.HotelBook(req);
            stopwatch.Stop();
            TimeSpan ts1          = stopwatch.Elapsed;
            TimeSpan baseInterval = new TimeSpan(0, 0, 60);

            if (ts1 > baseInterval)
            {
                BookDetail.DetailService(req.ClientReferenceNumber);
            }
            ProviderLogger.LogHotelBookResp(resp, SID);

            return(resp);
        }
Пример #6
0
        private Startup()
        {
            IConfigurationBuilder configurationBuilder = new ConfigurationBuilder().AddJsonFile("appsettings.json");

            if (Environment.GetEnvironmentVariable("Environment") == "Development")
            {
                configurationBuilder.AddUserSecrets <Startup>();
            }
            else
            {
                Logger.LogInformation($"Start loading encyption keys");
                Configuration = configurationBuilder.Build();
                string address = Environment.GetEnvironmentVariable("KeySource") ?? Configuration["KeySource"];
                configurationBuilder.AddInMemoryCollection(new KeyLoader(address, new AesRsaProtector()).GetKeys());
                Logger.LogInformation($"Encyption keys loaded");
            }
            Configuration = configurationBuilder.Build();

            IServiceCollection services = new ServiceCollection();
            Storage            storage  = Enum.Parse <Storage>(Environment.GetEnvironmentVariable("Storage") ?? Configuration["Storage"]);

            Logger.LogInformation($"Storage type: {storage}");

            services.AddTransient <IProtector, AesRsaProtector>();
            Logger.LogInformation($"Protector type: Aes+Rsa");

            ProviderLogger.CreateInstance(Configuration["logKey"], Configuration["logVector"]);
            Logger.LogInformation($"Provider log prottection enabled");

            switch (storage)
            {
            case Storage.Files:
                services.AddSingleton <ICaptcha, SimpleCaptcha>();
                Logger.LogInformation("Using captcha from prepeared files");

                services.AddSingleton <IAuthorization, UserFileStorage>();
                services.AddSingleton <IStorageFactory, FileStorageFactory>();
                Logger.LogWarning("Password hashing disabled in this configuration");
                break;

            case Storage.InternalDB:
                services.AddDbContext <StorageContext>(options =>
                                                       options.UseSqlite(GetInternalConnectionString()));
                AddDBConfigurationComponents(services);
                break;

            case Storage.ExternalDB:
                services.AddDbContext <StorageContext>(options =>
                                                       options.UseMySql(GetExternalConnectionString()));
                AddDBConfigurationComponents(services);
                break;
            }

            Services = services.BuildServiceProvider();
        }
Пример #7
0
        /// <summary>
        /// Notifica a Notiway que un mensaje fue leido
        /// </summary>
        /// <param name="request">Objeto que contiene todos los datos de autenticacion del usuario y el Id del mensaje</param>
        public void NotiwayNewsReadNotification(NotiwayNewsReadNotificationRequest request)
        {
            String _methodName = String.Format("{0}", System.Reflection.MethodBase.GetCurrentMethod().Name);

            LogRequest(request);

            var sessionId = GetSessionId(request, out errorMessage);

            if (errorMessage != ErrorMessagesMnemonics.None)
            {
                return;
            }

            var countryId  = Convert.ToInt32(ConfigurationManager.AppSettings["CountryId"]);
            var platformId = Convert.ToInt32(String.IsNullOrEmpty(request.Platform) ? ConfigurationManager.AppSettings["DefaultPlatform"] : request.Platform);

            if (countryId == 14 && platformId == 1)
            {
                countryId  = 1;
                platformId = 4;
            }

            try
            {
                using (var db = new Movilway.API.Data.Notiway.NotiwayEntities())
                {
                    ProviderLogger.InfoLow(() => TagValue.New()
                                           .MethodName(_methodName)
                                           .Message("[" + sessionId + "] " + "Actualizando registro ...")
                                           );

                    db.Database.ExecuteSqlCommand(
                        QUERY_AUDIT_READ,
                        new SqlParameter("@CountryP", countryId),
                        new SqlParameter("@PlatformP", platformId),
                        new SqlParameter("@LoginP", request.AuthenticationData.Username),
                        new SqlParameter("@ScheduleP", request.ScheduleId),
                        new SqlParameter("@DeviceTypeP", request.DeviceType)
                        );
                }

                ProviderLogger.InfoLow(() => TagValue.New()
                                       .MethodName(_methodName)
                                       .Message("[" + sessionId + "] " + "Hecho")
                                       );
            }
            catch (Exception e)
            {
                ProviderLogger.ExceptionLow(() => TagValue.New()
                                            .MethodName(_methodName)
                                            .Message("[AUDITORIA] [" + sessionId + "] " + "Error actualizando auditoria de mensaje")
                                            .Exception(e)
                                            );
            }
        }
Пример #8
0
        public static AvailabilityAndPricingResponse PricingService(AvailabilityAndPricingRequest req, string SID)
        {
            var UName = ConfigurationSettings.AppSettings["TBOUserName"];
            var UPass = ConfigurationSettings.AppSettings["TBOPassword"];

            req.Credentials = new AuthenticationData()
            {
                UserName = UName,
                Password = UPass
            };

            IHotelService proxy = TBOCredentials.CreateProxy();

            ProviderLogger.LogAvailablityPricingReq(req, SID);
            AvailabilityAndPricingResponse resp = new AvailabilityAndPricingResponse();

            resp = proxy.AvailabilityAndPricing(req);
            ProviderLogger.LogAvailablityPricingProviderRsp(resp, SID);
            return(resp);
        }
Пример #9
0
        /// <summary>
        /// Escribe en base de datos la auditoria para cada mensaje enviado
        /// </summary>
        /// <param name="SessionId">ID de la sesion que genero los mensajes (solo para log)</param>
        /// <param name="CountryId">ID del pais al que pertenece el usuario</param>
        /// <param name="PlatformId">ID de la plataforma al que pertenece el usuario</param>
        /// <param name="Login">Login del usuario</param>
        /// <param name="DeviceType">ID del tipo de acceso</param>
        /// <param name="MarkAsReaded">Incrementar el contador de lecturas para el mensaje automaticamente</param>
        /// <param name="messages">Lista de mensajes enviados que se escribiran en los datos de auditoria</param>
        private void writeAudit(String SessionId, int CountryId, int PlatformId, String Login, int DeviceType, bool MarkAsReaded, List <NotiwayNews> messages)
        {
            String _methodName = String.Format("{0}", System.Reflection.MethodBase.GetCurrentMethod().Name);

            if (messages != null && messages.Count > 0)
            {
                ProviderLogger.InfoLow(() => TagValue.New()
                                       .MethodName(_methodName)
                                       .Message("[AUDITORIA] [" + SessionId + "] " + "Total mensajes a ser actualizados en auditoria: " + messages.Count)
                                       );

                try
                {
                    using (var db = new Movilway.API.Data.Notiway.NotiwayEntities())
                    {
                        db.Database.ExecuteSqlCommand(
                            QUERY_AUDIT_BULK,
                            new SqlParameter("@CountryP", CountryId),
                            new SqlParameter("@PlatformP", PlatformId),
                            new SqlParameter("@LoginP", Login),
                            new SqlParameter("@ScheduleListP", String.Join(",", messages.Select(s => s.ScheduleId).ToList())),
                            new SqlParameter("@DeviceTypeP", DeviceType),
                            new SqlParameter("@MarkAsReadP", MarkAsReaded ? "1" : "0")
                            );
                    }

                    ProviderLogger.InfoLow(() => TagValue.New()
                                           .MethodName(_methodName)
                                           .Message("[AUDITORIA] [" + SessionId + "] " + "Hecho")
                                           );
                }
                catch (Exception e)
                {
                    ProviderLogger.ExceptionLow(() => TagValue.New()
                                                .MethodName(_methodName)
                                                .Message("[AUDITORIA] [" + SessionId + "] " + "Error actualizando auditoria de mensajes")
                                                .Exception(e)
                                                );
                }
            }
        }
Пример #10
0
        internal GetFavoriteAmountsResponse GetFavoriteAmounts(GetFavoriteAmountsRequest request)
        {
            LogRequest(request);

            var response = new GetFavoriteAmountsResponse();

            var sessionId = GetSessionId(request, out errorMessage);

            if (errorMessage != ErrorMessagesMnemonics.None)
            {
                response.ResponseCode    = (int)errorMessage;
                response.ResponseMessage = errorMessage.ToDescription();
                return(response);
            }

            try
            {
                var platformId = Convert.ToInt32(request.Platform);                              //1
                var countryId  = Convert.ToInt32(ConfigurationManager.AppSettings["CountryId"]); //10

                //Platform products.
                var productList = new ServiceExecutionDelegator <GetProductListResponseBody, GetProductListRequestBody>().
                                  ResolveRequest(new GetProductListRequestBody()
                {
                    AuthenticationData = new AuthenticationData()
                    {
                        Username  = request.AuthenticationData.Username,
                        Password  = request.AuthenticationData.Password,
                        SessionID = sessionId
                    },
                    Agent      = request.Agent,
                    DeviceType = request.DeviceType
                }, request.Platform, ApiServiceName.GetProductList);

                if (productList.ProductList == null)
                {
                    response = new GetFavoriteAmountsResponse()
                    {
                        ResponseCode    = 99,
                        ResponseMessage = "Error: El usuario no tiene productos asignados en la plataforma.",
                        TransactionID   = 0
                    };
                }
                else
                {
                    var dm = new MacroProductDataManager();
                    response.FavoriteAmounts = dm.GetFavoriteAmounts(countryId);
                    response.ResponseCode    = 0;
                    response.ResponseMessage = "Exito.";
                    response.TransactionID   = 0;
                }
            }
            catch (Exception e)
            {
                ProviderLogger.ExceptionLow(() => TagValue.New().Message("Exception trying to serve KINACU Operation").Exception(e));
            }

            LogResponse(response);

            return(response);
        }
Пример #11
0
        public DataContract.Macro.GetMacroProductListByCategoryResponse GetMacroProductsByCategory(DataContract.Macro.GetMacroProductListRequest request)
        {
            LogRequest(request);

            var response  = new DataContract.Macro.GetMacroProductListByCategoryResponse();
            var sessionId = GetSessionId(request, out errorMessage);

            logger.InfoLow("[API] [" + sessionId + "] [MacroProductProvider] [SEND-DATA] GetMacroProductsByCategory {sessionId = " + sessionId + ", UserId=" + request.Agent + ", DeviceType=" + request.DeviceType + "}");

            if (errorMessage != ErrorMessagesMnemonics.None)
            {
                response.ResponseCode    = (int)errorMessage;
                response.ResponseMessage = errorMessage.ToDescription();
                logger.InfoLow("[API Binwus] [" + sessionId + "] [MacroProductProvider] [SEND-DATA] GetMacroProductsByCategory Error: " + errorMessage.ToDescription());

                return(response);
            }

            try
            {
                var platformId = Convert.ToInt32(request.Platform);                              //1
                var countryId  = Convert.ToInt32(ConfigurationManager.AppSettings["CountryId"]); //10
                logger.InfoLow("[API BinwusA] [MacroProductProvider]");

                //Platform products.
                var productList = new ServiceExecutionDelegator <GetProductListResponseBody, GetProductListRequestBody>().
                                  ResolveRequest(new GetProductListRequestBody()
                {
                    AuthenticationData = new AuthenticationData()
                    {
                        Username  = request.AuthenticationData.Username,
                        Password  = request.AuthenticationData.Password,
                        SessionID = sessionId
                    },
                    Agent      = request.Agent,
                    DeviceType = request.DeviceType
                }, request.Platform, ApiServiceName.GetProductList);
                logger.InfoLow("[API BinwusB] [MacroProductProvider]");
                if (productList.ProductList == null)
                {
                    response = new GetMacroProductListByCategoryResponse
                    {
                        ResponseCode    = 99,
                        ResponseMessage = "Error: El usuario no tiene productos asignados en la plataforma.",
                        TransactionID   = 0
                    };
                    logger.InfoLow("[API Binwus1] [" + sessionId + "] [MacroProductProvider] [SEND-DATA] GetMacroProductsByCategory Error: El usuario no tiene productos asignados en la plataforma.");
                }
                else
                {
                    logger.InfoLow("[API BinwusC.] [MacroProductProvider]");
                    var dm = new Movilway.API.Data.MacroProduct.MacroProductDataManager();
                    logger.InfoLow("[API BinwusD.] [MacroProductProvider]");
                    response = dm.GetMacroProductsByCategory(platformId, countryId, productList.ProductList, request.DeviceType);
                    logger.InfoLow("[API BinwusE.] [MacroProductProvider]");

                    logger.InfoLow("[API Binwus2] [" + sessionId + "] [MacroProductProvider] [RECV-DATA] GetMacroProductsByCategory {response={" + productList.ProductList.ToString() + "}}");

                    response.ResponseCode    = 0;
                    response.ResponseMessage = "Exito.";
                    response.TransactionID   = 0;
                }
            }
            catch (Exception e)
            {
                logger.InfoLow("[API Binwus3] [" + sessionId + "] [MacroProductProvider] [RECV-DATA] GetMacroProductsByCategory Error: " + e.Message);

                ProviderLogger.ExceptionLow(() => TagValue.New().Message("Exception trying to serve KINACU Operation").Exception(e));
            }

            LogResponse(response);

            return(response);
        }
Пример #12
0
        /// <summary>
        /// Obtiene la lista de mensajes pendientes a ser enviados para el usuario que realiza la peticion
        /// </summary>
        /// <param name="request">Objeto que contiene todos los datos de autenticacion del usuario</param>
        /// <returns>Un objeto <c>GetNotiwayMessageListResponse</c> que contiene la lista de mensajes pendientes</returns>
        public GetNotiwayNewsListResponse GetNotiwayNewsList(GetNotiwayNewsListRequest request)
        {
            String _methodName = String.Format("{0}", System.Reflection.MethodBase.GetCurrentMethod().Name);

            LogRequest(request);

            GetNotiwayNewsListResponse response = new GetNotiwayNewsListResponse();
            var sessionId = GetSessionId(request, response, out errorMessage);

            if (errorMessage != ErrorMessagesMnemonics.None)
            {
                return(response);
            }

            var countryId  = Convert.ToInt32(ConfigurationManager.AppSettings["CountryId"]);
            var platformId = Convert.ToInt32(String.IsNullOrEmpty(request.Platform) ? ConfigurationManager.AppSettings["DefaultPlatform"] : request.Platform);

            if (countryId == 14 && platformId == 1)
            {
                countryId  = 1;
                platformId = 4;
            }

            using (var db = new Movilway.API.Data.Notiway.NotiwayEntities())
            {
                ProviderLogger.InfoLow(() => TagValue.New()
                                       .MethodName(_methodName)
                                       .Message("[" + sessionId + "] " + "Obteniendo lista de mensajes ...")
                                       );

                var list = db.Database.SqlQuery <NotiwayQuerySelectItem>(
                    QUERY_SELECT,
                    new SqlParameter("@CountryP", countryId),
                    new SqlParameter("@PlatformP", platformId),
                    new SqlParameter("@LoginP", request.AuthenticationData.Username),
                    new SqlParameter("@DeviceTypeP", request.DeviceType),
                    new SqlParameter("@OnlyUnreadP", request.OnlyUnread ? "1" : "0")
                    );

                foreach (var item in list)
                {
                    NotiwayNews aux = new NotiwayNews()
                    {
                        NewsId = item.MessageId
                        ,
                        ScheduleId = item.MessageScheduleId
                        ,
                        ExpirationDate = item.ExpirationDate.ToString("yyyy-MM-dd")
                        ,
                        Title = item.Title
                        ,
                        Abstract = item.Abstract
                        ,
                        Type = item.MessageTypeId
                        ,
                        FirstDeliveryDate = item.FirstDeliveryDate.ToString("yyyy-MM-dd")
                        ,
                        LastReadDate = ((item.LastReadDate != null && item.LastReadDate.HasValue) ? (item.LastReadDate.Value.ToString("yyyy-MM-dd")) : "")
                    };

                    if (request.DeviceType == PosWebDeviceTypeId)
                    {
                        // POS WEB
                        aux.Detail   = String.IsNullOrEmpty(item.Detail) ? "" : item.Detail;
                        aux.ImageURL = String.IsNullOrEmpty(item.ImageURL) ? "" : item.ImageURL;
                    }
                    response.NewsList.Add(aux);
                }

                ProviderLogger.InfoLow(() => TagValue.New()
                                       .MethodName(_methodName)
                                       .Message("[" + sessionId + "] " + "Total mensajes a ser enviados: " + response.NewsList.Count)
                                       );

                try
                {
                    ThreadPool.QueueUserWorkItem(unused => writeAudit(sessionId, countryId, platformId, request.AuthenticationData.Username, request.DeviceType, request.MarkAsReaded, response.NewsList));
                }
                catch (Exception e)
                {
                    ProviderLogger.ExceptionLow(() => TagValue.New()
                                                .MethodName(_methodName)
                                                .Message("Error iniciando hilo de escritura mensajes de auditoria")
                                                .Exception(e)
                                                );
                }
            }

            response.ResponseCode    = 0;
            response.ResponseMessage = "Exito";
            response.Quantity        = response.NewsList.Count;

            LogResponse(response);
            return(response);
        }