//[TestMethod] public void SpeedTestForArrayPropertyFromDynamic() { dynamic data = JsonConvert.DeserializeObject <System.Dynamic.ExpandoObject>(_json); Gigya.Module.Core.Connector.Common.DynamicUtils.GetValue <long>(data, "profile.age"); DynamicUtils.GetValue <long>(data, "profile.age"); var stopwatch = new Stopwatch(); stopwatch.Start(); for (int i = 0; i < 20; i++) { var value = Gigya.Module.Core.Connector.Common.DynamicUtils.GetValue <long>(data, "profile.age"); } var oldVersionMs = stopwatch.ElapsedMilliseconds; stopwatch.Restart(); for (int i = 0; i < 20; i++) { var value = DynamicUtils.GetValue <long>(data, "profile.age"); } var newVersionMs = stopwatch.ElapsedMilliseconds; Assert.Inconclusive(string.Format("Old version: {0}, New version: {1}", oldVersionMs, newVersionMs)); }
private void ThrowTestingExceptionIfRequired(IGigyaModuleSettings settings, dynamic userInfo) { if (settings.DebugMode && DynamicUtils.GetValue <string>(userInfo, "profile.email") == Constants.Testing.EmailWhichThrowsException) { throw new ArgumentException("profile.email matches testing email which causes exception"); } }
public void DefaultValueReturnedIfInvalidArrayIndex() { dynamic data = JsonConvert.DeserializeObject <System.Dynamic.ExpandoObject>(_json); var value = DynamicUtils.GetValue <long>(data, "data.phoneNumbers[2].phone"); Assert.AreEqual(0, value); }
public void CanGetNestedLongPropertyFromDynamic() { dynamic data = JsonConvert.DeserializeObject <System.Dynamic.ExpandoObject>(_json); var value = DynamicUtils.GetValue <long>(data, "profile.age"); Assert.IsNotNull(value, "Value not found"); Assert.AreEqual(value, 1, "Value doesn't match"); }
public void CanGetNestedPropertyFromDynamic() { dynamic data = JsonConvert.DeserializeObject <System.Dynamic.ExpandoObject>(_json); var firstName = DynamicUtils.GetValue <string>(data, "profile.firstName"); Assert.IsNotNull(firstName, "Value not found"); Assert.AreEqual(firstName, "Jason", "Value doesn't match"); }
public void CanGetNestedArrayPropertyFromDynamic() { dynamic data = JsonConvert.DeserializeObject <System.Dynamic.ExpandoObject>(_json); var value = DynamicUtils.GetValue <long>(data, "data.phoneNumbers[1].phone"); Assert.IsNotNull(value, "Value not found"); Assert.AreEqual(4567, value, "Value doesn't match"); }
public void CanGetPropertyFromDynamic() { dynamic data = JsonConvert.DeserializeObject <System.Dynamic.ExpandoObject>(_json); var value = DynamicUtils.GetValue <string>(data, "socialProviders"); Assert.IsNotNull(value, "Value not found"); Assert.AreEqual(value, "site", "Value doesn't match"); }
private GSResponse LogError(GSResponse response, string method, Exception e) { dynamic gigyaModel = response != null?JsonConvert.DeserializeObject <ExpandoObject>(response.GetResponseText()) : new ExpandoObject(); var gigyaError = response != null?response.GetErrorMessage() : string.Empty; var gigyaErrorDetail = DynamicUtils.GetValue <string>(gigyaModel, "errorDetails"); var gigyaCallId = DynamicUtils.GetValue <string>(gigyaModel, "callId"); _logger.Error(string.Format("API call: {0}. CallId: {1}. Error: {2}. Error Details: {3}.", method, gigyaCallId, gigyaError, gigyaErrorDetail), e); return(response); }
public static void LogResponseIfRequired(Logger logger, IGigyaModuleSettings settings, string apiMethod, GSResponse response) { if (settings.DebugMode) { dynamic gigyaModel = response != null?JsonConvert.DeserializeObject <ExpandoObject>(response.GetResponseText()) : new ExpandoObject(); var gigyaError = response != null?response.GetErrorMessage() : string.Empty; var gigyaErrorDetail = DynamicUtils.GetValue <string>(gigyaModel, "errorDetails"); var callId = DynamicUtils.GetValue <string>(gigyaModel, "callId"); logger.DebugFormat("API call: {0}. CallId: {1}. Error: {2}. Error Details: {3}.", apiMethod, callId, gigyaError, gigyaErrorDetail); } }
/// <summary> /// Gets a Gigya value from the model. /// </summary> /// <param name="gigyaModel">Deserialized Gigya JSON object.</param> /// <param name="gigyaFieldName">Gigya field name e.g. profile.age</param> /// <returns></returns> protected object GetGigyaValue(dynamic gigyaModel, string gigyaFieldName, string cmsFieldName) { var eventArgs = new MapGigyaFieldEventArgs { GigyaModel = gigyaModel, GigyaFieldName = gigyaFieldName, CmsFieldName = cmsFieldName, Origin = "GetGigyaValue", GigyaValue = DynamicUtils.GetValue <object>(gigyaModel, gigyaFieldName) }; GettingGigyaValue?.Invoke(this, eventArgs); return(eventArgs.GigyaValue); }
/// <summary> /// Gets a Gigya value from the model. /// </summary> /// <param name="gigyaModel">Deserialized Gigya JSON object.</param> /// <param name="gigyaFieldName">Gigya field name e.g. profile.age</param> /// <returns></returns> protected virtual object GetGigyaValue(dynamic gigyaModel, string gigyaFieldName, string sitefinityFieldName) { var eventArgs = new MapGigyaFieldEvent { GigyaModel = gigyaModel, GigyaFieldName = gigyaFieldName, SitefinityFieldName = sitefinityFieldName, Origin = "GetGigyaValue", GigyaValue = DynamicUtils.GetValue <object>(gigyaModel, gigyaFieldName) }; EventHub.Raise(eventArgs); return(eventArgs.GigyaValue); }
/// <summary> /// Validate that an oid exists for a given ds type. /// </summary> private bool Validate(string dsType, string fieldName, string oid) { if (string.IsNullOrEmpty(dsType)) { throw new ArgumentException("dsType"); } if (string.IsNullOrEmpty(oid)) { throw new ArgumentException("oid"); } var query = string.Format("SELECT data.{0} FROM {1} WHERE oid = '{2}'", fieldName, dsType, oid); var response = _apiHelper.Search(_settings, query); if (response == null) { return(false); } dynamic model = JsonConvert.DeserializeObject <ExpandoObject>(response.GetResponseText()); if (model.results.Count == 0) { return(false); } foreach (var result in model.results) { if (DynamicUtils.GetValue <object>(result, string.Concat("data.", fieldName)) != null) { return(true); } } return(false); }
private void AddProperties(ref AccountSchemaModel results, string schema, string propertyPrefix) { var schemaData = _apiHelper.GetAccountSchema(_gigyaModuleSettings, schema); if (schemaData == null || schemaData.GetErrorCode() != 0) { return; } var model = JsonConvert.DeserializeObject <ExpandoObject>(schemaData.GetResponseText()); var propertyPath = string.Concat(schema, ".fields"); var fields = DynamicUtils.GetValue <IDictionary <string, object> >(model, propertyPath); if (fields == null || !fields.Any()) { return; } results.Properties.AddRange(fields.Keys.Select(i => new AccountSchemaProperty { Name = !string.IsNullOrEmpty(propertyPrefix) ? string.Join(".", propertyPrefix, i) : i })); }
/// <summary> /// Sends a request to the Gigya API. /// </summary> /// <param name="request">Request object.</param> /// <param name="apiMethod">The Gigya method to call.</param> /// <param name="settings">The Gigya module settings.</param> /// <param name="validateSignature">If set to true, the signature will be validated.</param> /// <returns></returns> private GSResponse Send(GSRequest request, string apiMethod, IGigyaModuleSettings settings, bool validateSignature) { if (apiMethod == "accounts.getAccountInfo") { var environment = new { cms_name = _settingsHelper.CmsName, cms_version = _settingsHelper.CmsVersion, gigya_version = _settingsHelper.ModuleVersion }; request.SetParam("environment", JsonConvert.SerializeObject(environment)); } if (!string.IsNullOrEmpty(settings.DataCenter)) { request.APIDomain = settings.DataCenter; } LogRequestIfRequired(settings, apiMethod); GSResponse response = null; try { response = request.Send(); } catch (Exception e) { dynamic gigyaModel = response != null?JsonConvert.DeserializeObject <ExpandoObject>(response.GetResponseText()) : new ExpandoObject(); var gigyaError = response != null?response.GetErrorMessage() : string.Empty; var gigyaErrorDetail = DynamicUtils.GetValue <string>(gigyaModel, "errorDetails"); var gigyaCallId = DynamicUtils.GetValue <string>(gigyaModel, "callId"); _logger.Error(string.Format("API call: {0}. CallId: {1}. Error: {2}. Error Details: {3}.", apiMethod, gigyaCallId, gigyaError, gigyaErrorDetail), e); return(response); } LogResponseIfRequired(settings, apiMethod, response); if (response.GetErrorCode() != 0) { return(response); } var userId = response.GetString(Constants.GigyaFields.UserId, null); if (string.IsNullOrEmpty(userId)) { return(response); } // no need to validate server calls unless explicitly required e.g. for signature exchange if (validateSignature && !ValidateSignature(userId, settings, response)) { if (settings.DebugMode) { dynamic gigyaModel = response != null?JsonConvert.DeserializeObject <ExpandoObject>(response.GetResponseText()) : new ExpandoObject(); var gigyaCallId = DynamicUtils.GetValue <string>(gigyaModel, "callId"); _logger.DebugFormat("Invalid user signature for login request. API call: {0}. CallId: {1}.", apiMethod, gigyaCallId); } return(null); } return(response); }
/// <summary> /// /// </summary> /// <param name="gigyaModel"></param> /// <param name="key"></param> /// <param name="defaultValue"></param> /// <returns></returns> protected virtual string GetGigyaValueWithDefault(dynamic gigyaModel, string key, string defaultValue = null) { return(DynamicUtils.GetValue <string>(gigyaModel, key) ?? defaultValue); }