public GetProfileResponse GetCustomerProfileforHPID(UserAuthenticationInterchange UserAuthInterchange, TokenDetails sessionTokenDetails, bool RetainOldValues, APIMethods apiRetainOldValues) { logger.Info($"GetCustomerProfileforHPID={sessionTokenDetails.AccessToken}"); GetProfileResponse response = new GetProfileResponse(); TokenDetails sessionToken = sessionTokenDetails; // try to get HPID profile with existing session token CustomerIds idS = new CustomerIds(); if (GetProfileBySessionToken(response, sessionToken, idS)) { return(GetCustomerProfileFromHPIDAndDatabase(response, UserAuthInterchange, sessionToken, idS, RetainOldValues, apiRetainOldValues)); } // if get profile failed not by expired token, but because of other errors, then do not use refresh token if (!response.ErrorList.Contains(Responses.Faults.HPIDInvalidToken)) { return(response); } // if profile it recognized by access token, then do not use refresh token if (sessionToken.tokenScopeType == TokenScopeType.apiProfileGetByTokenCall) { response.ErrorList.Clear(); response.ErrorList.Add(Responses.Faults.InvalidCredentials); return(response); } // try to get HPID profile with refresh token return(GetProfileByRefreshToken(response, sessionToken, UserAuthInterchange.UserId, UserAuthInterchange.CallerId)); }
public void TestXmlToCursorOrIn() { var northwind = GetContext(); var ids1 = OrderIds.Take(50).ToArray(); var ids2 = CustomerIds.Take(50).ToArray(); var list = northwind.Orders .Where(order => ids1.Contains(order.OrderID) || ids2.Contains(order.Customer.CustomerID)) .ToList(); Assert.AreEqual(483, list.Count); }
public void TestXmlToCursorMultiple() { var northwind = GetContext(); var orderIds = OrderIds.Take(160).ToArray(); var customerIds = CustomerIds.ToArray(); var list = northwind.Orders .Where(order => orderIds.Contains(order.OrderID) && customerIds.Contains(order.Customer.CustomerID)) .ToList(); Assert.AreEqual(160, list.Count); }
public void NestedJoinWithXmlToCursorRewriteTest() { var northwind = this.GetContext(); var query = northwind.OrderDetails .Join(northwind.Orders, x => x.OrderID, x => x.OrderID, (o, d) => new { Order = o, OrderDetail = d }) .Join(northwind.Products, x => x.Order.ProductID, x => x.ProductID, (x, p) => new { Order = x.Order, OrderDetail = x.OrderDetail, Product = p }) .Where(x => CustomerIds.Contains(x.OrderDetail.Customer.CustomerID)) .Select(x => new { OrderID = x.Order.OrderID, ProductID = x.Product.ProductID, Freight = x.OrderDetail.Freight }); query.ToList(); }
public GetProfileResponse GetCustomerProfileforHPIDTEST(UserAuthenticationInterchange UserAuthInterchange, TokenDetails sessionTokenDetails, bool RetainOldValues, APIMethods apiRetainOldValues) { GetProfileResponse response = new GetProfileResponse(); AccessCredentials accessCredentials = new AccessCredentials(); accessCredentials.AppVersion = "1.0.0.0"; accessCredentials.CallerId = "TESTLOGIN1.0.0.0"; accessCredentials.LoginDate = DateTime.UtcNow; response.Credentials = accessCredentials; CustomerProfile customerProfile = new CustomerProfile(); CustomerData customerData = new CustomerData() { Locale = TranslationUtils.Locale(UserAuthInterchange.LanguageCode, UserAuthInterchange.CountryCode), ActiveHealth = true, Country = "US", CompanyName = "HP", DisplayName = "Ramdeo Angh", EmailAddress = "*****@*****.**", FirstName = "Ramdeo", LastName = "Angh" }; customerProfile.Country = customerData.Country; customerProfile.CompanyName = customerData.CompanyName; customerProfile.DisplayName = customerData.DisplayName; customerProfile.EmailAddress = customerData.EmailAddress; customerProfile.ActiveHealth = customerData.ActiveHealth; customerProfile.Locale = customerData.Locale; customerProfile.FirstName = customerData.FirstName; customerProfile.LastName = customerData.LastName; response.CustomerProfileObject = customerProfile; response.LoginDate = DateTime.UtcNow; sessionTokenDetails = new TokenDetails(); sessionTokenDetails.AccessToken = (Guid.NewGuid().ToString()); sessionTokenDetails.RefreshToken = (Guid.NewGuid().ToString()); sessionTokenDetails.RefreshTokenType = (int)TokenScopeType.userLogin; TokenDetails sessionToken = sessionTokenDetails; // try to get HPID profile with existing session token CustomerIds idS = new CustomerIds(); idS.HPIDid = "INNOVATIONPORTAL12345!@#$%"; return(GetCustomerProfileFromHPIDAndDatabase(response, UserAuthInterchange, sessionToken, idS, RetainOldValues, apiRetainOldValues)); }
public override int GetHashCode() { int hashCode = 1711926547; if (CustomerIds != null) { hashCode += CustomerIds.GetHashCode(); } if (LocationIds != null) { hashCode += LocationIds.GetHashCode(); } return(hashCode); }
public override bool Equals(object obj) { if (obj == null) { return(false); } if (obj == this) { return(true); } return(obj is SearchSubscriptionsFilter other && ((CustomerIds == null && other.CustomerIds == null) || (CustomerIds?.Equals(other.CustomerIds) == true)) && ((LocationIds == null && other.LocationIds == null) || (LocationIds?.Equals(other.LocationIds) == true))); }
private GetProfileResponse GetProfileByRefreshToken(GetProfileResponse response, TokenDetails sessionToken, int UserID, string calledId) { // try to get IsacUsers record and refresh token response.ErrorList.Clear(); User isaacUser = userUtils.GetRefreshToken(calledId, sessionToken); if (isaacUser == null || string.IsNullOrEmpty(isaacUser.RefreshToken)) { ExecuteLogout(response, UserID, QueryUtils.GetMD5(sessionToken.AccessToken), calledId); response.ErrorList.Add(Responses.Faults.HPIDSessionTimeout); return(response); } // renew access token to HPID using refresh token sessionToken.RefreshToken = isaacUser.RefreshToken; sessionToken.RefreshTokenType = Convert.ToInt32(isaacUser.RefreshTokenType); //fetch clientId from DB UserAuthentication hppAuth = null; DatabaseWrapper.databaseOperation(response, (context, query) => { hppAuth = query.GetHPPToken(context, UserID, calledId); }, readOnly: true); string clientId = hppAuth?.ClientId; sessionToken = hpidUtils.GetHPIDSessionToken((int)TokenScopeType.userRefreshToken, "", sessionToken.RefreshToken, response, clientId, sessionToken.RefreshTokenType); if (sessionToken == null || string.IsNullOrEmpty(sessionToken.AccessToken)) { ExecuteLogout(response, UserID, QueryUtils.GetMD5(sessionToken.AccessToken), calledId); response.ErrorList.Add(Responses.Faults.HPIDSessionTimeout); return(response); } // try to get HPID profile using renewed access token CustomerIds idS = new CustomerIds(); if (GetProfileBySessionToken(response, sessionToken, idS)) { return(GetProfileDataFromDatabase(response, isaacUser)); } return(response); }
public void GetCustomerProfileByAuthenticationTest_Success() { bool IsNewCustomer = false; CustomerHPIDUtils custUtils = new CustomerHPIDUtils(); RoleUtils rlUtils = new RoleUtils(); TokenDetails sessionToken = new TokenDetails(); sessionToken.AccessToken = "sessionToken"; hpidUtilsMock.Setup(x => x.GetHPIDSessionToken(It.IsAny <int>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <GetProfileResponse>(), It.IsAny <string>(), It.IsAny <int>())).Returns(sessionToken); hpidUtilsMock.Setup(x => x.GetIdsAndProfile(It.IsAny <CustomerIds>(), It.IsAny <string>(), It.IsAny <GetProfileResponse>())). Callback((CustomerIds i, string u, GetProfileResponse r) => { i = new CustomerIds() { HPIDid = "hpidid", HPPid = "hppid" }; r.CustomerProfileObject = new CustomerProfile(); }).Returns(true); User aProfile = new User() { EmailConsent = true }; List <RoleMapping> roleMappings = new List <RoleMapping>(); RoleMapping role = new RoleMapping(); role.RoleId = 1; role.RoleMappingId = 1; role.UserId = 1; role.CreatedDate = DateTime.UtcNow; roleMappings.Add(role); aProfile.RoleMappings = roleMappings; isacMock.Setup(x => x.FindOrInsertHPIDProfile(It.IsAny <ResponseBase>(), It.IsAny <RequestFindOrInsertHPIDProfile>(), out IsNewCustomer)).Returns(aProfile); GetProfileResponse response = custUtils.GetCustomerProfileByAuthentication(new UserAuthenticationInterchange(), It.IsAny <bool>(), "access", "url", It.IsAny <APIMethods>()); Assert.IsTrue(response.ErrorList.Count == 0); Assert.IsTrue(response.CustomerProfileObject.EmailConsent.Equals(EmailConsentType.Y.ToString())); }
private GetProfileResponse GetCustomerProfileFromHPIDAndDatabase(GetProfileResponse response, UserAuthenticationInterchange hppAuthInterchange, TokenDetails sessionToken, CustomerIds idS, bool RetainOldValues, APIMethods apiRetainOldValues) { User profile = null; List <RoleMapping> roleMappings = null; try { // check is done based on profile, customerId is also generated for a new profile bool IsNewCustomer = false; RequestFindOrInsertHPIDProfile requestFindOrInsertHPID = new RequestFindOrInsertHPIDProfile(); requestFindOrInsertHPID.Locale = string.IsNullOrEmpty(response?.CustomerProfileObject?.Locale)?TranslationUtils.Locale(hppAuthInterchange.LanguageCode, hppAuthInterchange.CountryCode):response?.CustomerProfileObject?.Locale; requestFindOrInsertHPID.HPIDprofileId = idS.HPIDid; requestFindOrInsertHPID.HPPprofileId = idS.HPPid; requestFindOrInsertHPID.tokenDetails = sessionToken; requestFindOrInsertHPID.clientId = hppAuthInterchange.ClientId; requestFindOrInsertHPID.apiRetainOldValues = apiRetainOldValues; requestFindOrInsertHPID.EmailAddrees = response?.CustomerProfileObject?.EmailAddress; requestFindOrInsertHPID.CompanyName = response?.CustomerProfileObject?.CompanyName; requestFindOrInsertHPID.ActiveHealth = response.CustomerProfileObject.ActiveHealth; requestFindOrInsertHPID.FirstName = response?.CustomerProfileObject?.FirstName; requestFindOrInsertHPID.LastName = response.CustomerProfileObject.LastName; profile = userUtils.FindOrInsertHPIDProfile(response, requestFindOrInsertHPID, out IsNewCustomer); if (response.ErrorList.Count > 0) { return(response); } if (profile.RoleMappings.Count == 0) { roleMappings = roleUtils.InsertRoleMapping(response, profile.UserId); } else { roleMappings = profile.RoleMappings.ToList(); } hppAuthInterchange.UserId = Convert.ToInt32(profile.UserId); hppAuthInterchange.Token = sessionToken.AccessToken; hppAuthInterchange.IsHPID = true; // Register profile & session token in database customerUtils.InsertOrUpdateHPPToken(response, (UserAuthentication)hppAuthInterchange, RetainOldValues); List <int> roleids = roleMappings.Select(r => r.RoleId).ToList(); List <UserRoles> userRoles = new List <UserRoles>(); RESTAPIGetRolesResponse rolesResponse = new RESTAPIGetRolesResponse(); statusUtils.GetRoles(rolesResponse); if (rolesResponse.RolesList.Count != 0) { var rolResponseList = rolesResponse.RolesList.Where(r => roleids.Contains(r.RoleId)).ToList(); foreach (var roles in rolResponseList) { userRoles.Add(new UserRoles() { Id = roles.RoleId, Name = roles.RoleName }); } } response.Credentials = new AccessCredentials() { UserID = Convert.ToInt32(profile.UserId), SessionToken = QueryUtils.GetMD5(sessionToken.AccessToken), CallerId = hppAuthInterchange.CallerId, Token = sessionToken.AccessToken, Roles = userRoles }; response = GetProfileDataFromDatabase(response, profile); response.CustomerProfileObject.IsNewCustomer = IsNewCustomer; response.LoginDate = hppAuthInterchange.LoginDate; } catch (Exception ex) { response.ErrorList.Add(new Fault("GetCustomerProfileFailed", ex.Message)); } return(response); }
private bool GetProfileBySessionToken(GetProfileResponse response, TokenDetails sessionToken, CustomerIds idS) { if (sessionToken == null || string.IsNullOrEmpty(sessionToken.AccessToken)) { response.ErrorList.Add(Responses.Faults.InvalidCredentials); return(false); } return(hpidUtils.GetIdsAndProfile(idS, sessionToken.AccessToken, response)); }
public bool GetIdsAndProfile(CustomerIds ids, string token, GetProfileResponse response) { JObject respObj = null; log.Debug($"GetIdsAndProfile: START token={token}"); var client = new HttpClient(); client.DefaultRequestHeaders.TryAddWithoutValidation("content-type", "application/x-www-form-urlencoded"); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); Stopwatch timer = new Stopwatch(); string respResult = null; try { timer.Start(); var resp = client.GetAsync(profileURL).Result; timer.Stop(); respResult = resp.Content.ReadAsStringAsync().Result; respObj = JObject.Parse(respResult); if (!CheckServiceResponse(respObj, response)) { log.Debug($"GetIdsAndProfile: get profile failed"); return(false); } } catch (TimeoutException ex) { log.Debug($"GetIdsAndProfile: Errortype=TimeoutException,Exception={ex.Message}"); response.ErrorList.Add(new Fault(Faults.HPIDTimeoutError, ex)); return(false); } catch (Exception ex) { log.Debug($"GetIdsAndProfile: Errortype=Exception,Exception={ex.Message}"); response.ErrorList.Add(new Fault(Faults.HPIDInternalError, ex)); return(false); } finally { timer.Stop(); // Log the outbound service call details in ExtServiceLogs table ExtServiceLogs.LogExtServiceCallDetails(client?.DefaultRequestHeaders?.Authorization?.ToString(), HttpVerbs.Get, "HPID", profileURL?.ToString(), null, respObj?.ToString(), (int)timer.ElapsedMilliseconds, false); } // get HPIDid profile ID if missing, it means that profile is broken ids.HPIDid = (string)respObj["id"]; if (string.IsNullOrEmpty(ids.HPIDid)) { response.ErrorList.Add(Faults.HPIDInvalidResponse); log.Debug($"GetIdsAndProfile: Errortype=HPIDid profile ID if missing"); return(false); } ; // get HPPid profile ID - if missing, it means that user is just logged ids.HPPid = (string)respObj["hpp_id"]; // get profile data // =========================================================================== CustomerProfile profile = new CustomerProfile(); profile.EmailConsent = EmailConsentType.N.ToString(); profile.PrimaryUse = PrimaryUseType.Item002.ToString(); try { profile.FirstName = (string)respObj["name"]["givenName"]; } catch (Exception ex) { profile.FirstName = null; log.Debug($"GetIdsAndProfile: Errortype=HPID response parse-FirstName, exception={ex.Message}"); } try { profile.LastName = (string)respObj["name"]["familyName"]; } catch (Exception ex) { profile.LastName = null; log.Debug($"GetIdsAndProfile: Errortype=HPID response parse-LastName, exception={ex.Message}"); } profile.UserName = (string)respObj["userName"]; profile.Country = (string)respObj["countryResidence"]; profile.CompanyName = (string)respObj["hpp_organizationName"]; try { profile.Language = GetProperLanguageCode(((string)respObj["locale"]).Substring(0, 2)); } catch (Exception ex) { profile.Language = null; log.Debug($"GetIdsAndProfile: Errortype=HPID response parse-Language, exception={ex.Message}"); } try { profile.Locale = (string)respObj["locale"]; } catch (Exception ex) { profile.Locale = null; log.Debug($"GetIdsAndProfile: Errortype=HPID response parse-Locale, exception={ex.Message}"); } try { profile.DisplayName = (string)respObj["displayName"]; } catch (Exception ex) { profile.DisplayName = null; log.Debug($"GetIdsAndProfile: Errortype=HPID response parse-DisplayName, exception={ex.Message}"); } try { profile.Gender = (string)respObj["gender"]; } catch (Exception ex) { profile.Gender = null; log.Debug($"GetIdsAndProfile: Errortype=HPID response parse-Gender, exception={ex.Message}"); } profile.Id = (string)respObj["id"]; //Get Address details try { JToken jStatus = respObj.SelectToken("$.addresses"); if (jStatus != null && jStatus.Count() > 0) { profile.Addresses = new List <Address>(); foreach (var i in jStatus) { Address add = i.ToObject <Address>(); profile.Addresses.Add(add); } } } catch (Exception ex) { log.Debug($"GetIdsAndProfile: Errortype=HPID response parse-addresses, exception={ex.Message}"); } //Get phone numbers try { JToken jStatus = respObj.SelectToken("$.phoneNumbers"); if (jStatus != null && jStatus.Count() > 0) { profile.PhoneNumbers = new List <PhoneNumber>(); foreach (var i in jStatus) { PhoneNumber ph = i.ToObject <PhoneNumber>(); profile.PhoneNumbers.Add(ph); } } } catch (Exception ex) { log.Debug($"GetIdsAndProfile: Errortype=HPID response parse-phoneNumbers, exception={ex.Message}"); } // use primary email try { JToken jStatus = respObj.SelectToken("$.emails"); if (jStatus != null && jStatus.Count() > 0) { foreach (var i in jStatus) { Email eml = i.ToObject <Email>(); if (eml.primary) { profile.EmailAddress = eml.value; break; } } } } catch (Exception ex) { log.Debug($"GetIdsAndProfile: Errortype=HPID response parse-email, exception={ex.Message}"); }; //use primary address try { JToken jStatus = respObj.SelectToken("$.addresses"); if (jStatus != null && jStatus.Count() > 0) { foreach (var i in jStatus) { Address adr = i.ToObject <Address>(); if (Convert.ToBoolean(adr.Primary)) { profile.City = adr.Locality; break; } } } } catch (Exception ex) { log.Debug($"GetIdsAndProfile: Errortype=HPID response parse-address, exception={ex.Message}"); }; response.CustomerProfileObject = profile; return(true); }