//[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);
        }
Example #9
0
        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
            }));
        }
Example #14
0
        /// <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);
 }