private WebRioSsoConfig GetWebRioSsoConfiguration(RequestActionEventArgs args)
        {
            var configuration = new WebRioSsoConfig();

            configuration.JSessionId  = GetParamValue(args, UsdParameter.WebRioJSessionId);
            configuration.RequestType = GetRequestType(args);
            if (configuration.RequestType == RequestType.TravelPlanner)
            {
                configuration.TravelPlannerId = GetParamValue(args, UsdParameter.EntityId);
                if (!string.IsNullOrWhiteSpace(configuration.TravelPlannerId))
                {
                    CrmService.GetInitialsFrom(_client.CrmInterface, configuration);
                }
            }
            if (configuration.RequestType == RequestType.Booking)
            {
                GetBookingDetails(args, configuration);
            }
            else if (configuration.RequestType == RequestType.TravelPlanner)
            {
                GetTravelPlannerDetails(args, configuration);
            }
            CrmService.GetWebRioSsoConfiguration(_client.CrmInterface, configuration);

            configuration.Login      = CrmService.GetSsoLoginDetails(_client.CrmInterface, _client.CrmInterface.GetMyCrmUserId());
            configuration.PrivateKey = CrmService.GetWebRioPrivateKey(_client.CrmInterface);
            ValidateConfiguration(configuration);
            return(configuration);
        }
        private WebRioJsonWebTokenPayload GetWebRioSsoTokenPayload(WebRioSsoConfig configuration)
        {
            if (configuration == null)
            {
                throw new ArgumentNullException("configuration");
            }

            var payload = new WebRioJsonWebTokenPayload
            {
                IssuedAtTime = _jtiService.GetIssuedAtTime().ToString(),
                NotBefore    = _jtiService.GetNotBeforeTime(configuration.NotBeforeTime).ToString(),
                Expiry       = _jtiService.GetExpiry(configuration.ExpirySeconds).ToString(),
                Jti          = WebServiceExchangeHelper.GetJti().ToString(),
                BranchCode   = configuration.Login.BranchCode,
                AbtaNumber   = configuration.Login.AbtaNumber,
                EmployeeId   = configuration.Login.EmployeeId,
                Initials     = configuration.Login.Initials,
                Aud          = EntityRecords.Configuration.WebRioAudWebRio
            };

            if (configuration.RequestType == RequestType.TravelPlanner)
            {
                payload.TravelPlannerInitials = configuration.Initials;
                payload.IncludeInitials       = true;
            }
            else
            {
                payload.IncludeInitials = false;
            }

            return(payload);
        }
 public void GetTravelPlannerDetails(RequestActionEventArgs args, WebRioSsoConfig configuration)
 {
     if (configuration.RequestType != RequestType.TravelPlanner)
     {
         return;
     }
     configuration.ConsultationReference = GetParamValue(args, UsdParameter.WebRioConsultationNo);
     configuration.CustomerId            = GetParamValue(args, UsdParameter.CustomerId);
 }
        private WebRioResponse OpenNewConsultation(CrmServiceClient crmInterface, WebRioSsoConfig configuration, string token)
        {
            Customer cust = CrmService.GetCustomerDataForWebRioNewConsultation(_client.CrmInterface, configuration.CustomerId);

            configuration.Data = SerializeNewConsultationSsoRequestToJson(cust);

            var url      = $"{configuration.ServiceUrl}/{configuration.NewConsultationApi}";
            var response = SendRequest(url, token, configuration.JSessionId, configuration.Data);
            var content  = GetResponseContent(response);

            return(GetWebRioSsoResponse(content));
        }
 private void SetRequestData(WebRioSsoConfig configuration)
 {
     if (configuration.RequestType == RequestType.Admin)
     {
         configuration.Data = string.Empty;
     }
     else if (configuration.RequestType == RequestType.Booking || configuration.RequestType == RequestType.TravelPlanner)
     {
         configuration.Data = WebServiceExchangeHelper.SerializeOpenConsultationSsoRequestToJson(new WebRioSsoRequest {
             Consultation = configuration.ConsultationReference
         });
     }
 }
        private string GetUrl(WebRioSsoConfig configuration)
        {
            if (configuration == null)
            {
                throw new ArgumentNullException("configuration");
            }
            if (configuration.RequestType == RequestType.Admin)
            {
                return($"{configuration.ServiceUrl}/{configuration.AdminApi}");
            }
            if ((configuration.RequestType == RequestType.Booking) || (configuration.RequestType == RequestType.TravelPlanner))
            {
                return($"{configuration.ServiceUrl}/{configuration.OpenConsultationApi}");
            }

            return(null);
        }
        private void HandleConfigurationErrors(WebRioSsoConfig configuration, bool global)
        {
            if (configuration == null)
            {
                return;
            }
            if (configuration.Errors == null || configuration.Errors.Count == 0)
            {
                return;
            }
            var message = new StringBuilder();

            foreach (var item in configuration.Errors)
            {
                message.AppendLine(item);
            }
            message.Append("Please contact administrator for further details.");
            FireEventOnError(message.ToString(), global);
        }
        public void GetBookingDetails(RequestActionEventArgs args, WebRioSsoConfig configuration)
        {
            if (configuration.RequestType != RequestType.Booking)
            {
                return;
            }
            var url        = GetParamValue(args, UsdParameter.Url);
            var decodedUrl = WebUtility.UrlDecode(url);

            decodedUrl = decodedUrl.Replace("%25", "");
            decodedUrl = decodedUrl.Replace("%3d", "=");

            var etc = decodedUrl.Substring(decodedUrl.IndexOf("etc="));

            configuration.ObjectTypeCode = etc.Substring(4, etc.IndexOf('&') - 4);


            var id = decodedUrl.Substring(decodedUrl.IndexOf("id="));

            id = id.Substring(3, id.IndexOf("7d") - 3);
            configuration.BookingSummaryId = id.Replace("7b", "");

            CrmService.GetConsultationReferenceFromBookingSummary(_client.CrmInterface, configuration);
        }
        private void ValidateConfiguration(WebRioSsoConfig configuration)
        {
            if (configuration == null)
            {
                throw new ArgumentNullException("configuration");
            }

            var errors = new List <string>();

            if (configuration.RequestType == RequestType.Other)
            {
                errors.Add("Action call parameter [Type] is missing or not valid.");
            }

            if (configuration.RequestType == RequestType.TravelPlanner)
            {
                if (string.IsNullOrWhiteSpace(configuration.Initials))
                {
                    errors.Add("The id of the travel planner provided is invalid or initials is missing.");
                }
                if (string.IsNullOrWhiteSpace(configuration.ConsultationReference))
                {
                    errors.Add("Consultation reference is missing.");
                }
            }

            if (configuration.RequestType == RequestType.Booking)
            {
                if (string.IsNullOrWhiteSpace(configuration.ConsultationReference))
                {
                    errors.Add("The id of the booking summary provided is invalid or consultation reference is missing in booking reference.");
                }
            }

            if (configuration.Login == null ||
                string.IsNullOrWhiteSpace(configuration.Login.AbtaNumber) ||
                string.IsNullOrWhiteSpace(configuration.Login.BranchCode) ||
                string.IsNullOrWhiteSpace(configuration.Login.Initials) ||
                string.IsNullOrWhiteSpace(configuration.Login.EmployeeId))
            {
                errors.Add("Login details are missing for the logged-in user.");
            }

            int expirySeconds = -1;

            if (string.IsNullOrWhiteSpace(configuration.ExpirySeconds) || !Int32.TryParse(configuration.ExpirySeconds, out expirySeconds))
            {
                errors.Add("Expiry seconds have not been specified or the one specified does not have the correct format.");
            }

            int notBeforeTime = -1;

            if (string.IsNullOrWhiteSpace(configuration.NotBeforeTime) || !Int32.TryParse(configuration.NotBeforeTime, out notBeforeTime))
            {
                errors.Add("Not before time seconds have not been specified or the one specified does not have correct format.");
            }

            if (string.IsNullOrWhiteSpace(configuration.PrivateKey))
            {
                errors.Add("Private key has not been provided");
            }

            if (string.IsNullOrWhiteSpace(configuration.ServiceUrl))
            {
                errors.Add("SSO Url has not been configured properly.");
            }
            else
            {
                if (configuration.RequestType == RequestType.Admin)
                {
                    if (string.IsNullOrWhiteSpace(configuration.AdminApi))
                    {
                        errors.Add("Admin Api has not been configured properly.");
                    }
                }
            }

            configuration.Errors = errors;
        }