예제 #1
0
        public static ODataQuerier <T> Create(string name, XElement schema = null, string dataConverter = null, string dateFormatter = null, string format = null)
        {
            Database database = new DatabaseManufacturer().Create(name);

            XElement xSchema = schema ?? new PrimarySchemaProvider().GetSchema(name);

            string sConverter;

            if (string.IsNullOrWhiteSpace(dataConverter))
            {
                if (typeof(T) == typeof(XElement))
                {
                    sConverter = "xml";
                }
                else if (typeof(T) == typeof(string))
                {
                    sConverter = "json";
                }
                else
                {
                    throw new NotSupportedException(typeof(T).ToString());
                }
            }
            else
            {
                sConverter = dataConverter;
            }
            DataConverter <T> oDataConverter = new DataConverterManufacturer().Create <T>(sConverter);

            DateFormatter formatter;

            if (string.IsNullOrWhiteSpace(dateFormatter))
            {
                if (oDataConverter is DataConverter <XElement> )
                {
                    formatter = new DotNETDateFormatter();
                }
                else if (oDataConverter is DataConverter <string> )
                {
                    formatter = new JsonNETFormatter()
                    {
                        TimezoneOffset = schema.GetTimezoneOffset()
                    };
                }
                else
                {
                    throw new ArgumentNullException("dateFormatter");
                }
            }
            else
            {
                formatter = new DateFormatterManufacturer().Create(dateFormatter, schema.GetTimezoneOffset(), format);
            }
            oDataConverter.DateFormatter = formatter;

            return(new ODataQuerier <T>(database, xSchema, oDataConverter));
        }
예제 #2
0
        protected void UpdateLockedOutState(XElement user, bool isSuccessful)
        {
            DateTime           now                = ODataQuerier.GetNow();
            string             nowString          = new DotNETDateFormatter().Format(now);
            SettingsService    settingsService    = new SettingsService(Name);
            MembershipSettings membershipSettings = settingsService.GetMembershipSettings();

            if (isSuccessful)
            {
                user.SetElementValue("LastLoginDate", nowString);
                user.SetElementValue("FailedPasswordAttemptCount", 0);
            }
            else
            {
                if (membershipSettings.MaxInvalidPasswordAttempts == 0)
                {
                    return;
                }

                int failedCount = int.Parse(user.Element("FailedPasswordAttemptCount").Value);
                if (failedCount > 0)
                {
                    DateTime start = DateTime.Parse(user.Element("FailedPasswordAttemptWindowStart").Value);
                    if ((DateTime.Now - start).TotalMinutes < membershipSettings.PasswordAttemptWindow)
                    {
                        if (failedCount >= membershipSettings.MaxInvalidPasswordAttempts)
                        {
                            user.SetElementValue("IsLockedOut", true.ToString());
                            user.SetElementValue("LastLockoutDate", nowString);
                        }
                        else
                        {
                            failedCount++;
                            user.SetElementValue("FailedPasswordAttemptCount", failedCount);
                        }
                    }
                    else
                    {
                        user.SetElementValue("FailedPasswordAttemptCount", 1);
                        user.SetElementValue("FailedPasswordAttemptWindowStart", nowString);
                    }
                }
                else
                {
                    user.SetElementValue("FailedPasswordAttemptCount", 1);
                    user.SetElementValue("FailedPasswordAttemptWindowStart", nowString);
                }
            }
            Modifier.AppendUpdate(user);
        }
예제 #3
0
        public bool IsUnique(string entity, IEnumerable <KeyValuePair <string, object> > propertyValues, IEnumerable <KeyValuePair <string, object> > excludedKey)
        {
            string filter = GenerateFilter(propertyValues, out IReadOnlyDictionary <string, object> parameters);
            string select = string.Join(",", excludedKey.Select(p => p.Key));

            ODataQuerier <XElement> oDataQuerier = ODataQuerier <XElement> .Create(Name, Schema);

            IEnumerable <XElement> result = oDataQuerier.GetCollection(entity, select, filter, null, parameters);

            int count = result.Count();

            if (count == 0)
            {
                return(true);
            }
            if (count > 1)
            {
                return(false);
            }

            XElement element = result.First();

            foreach (KeyValuePair <string, object> pair in excludedKey)
            {
                object obj = pair.Value;

                string value;
                if (obj.GetType() == typeof(bool))
                {
                    value = ((bool)obj) ? "true" : "false";
                }
                else if (obj.GetType() == typeof(DateTime))
                {
                    value = new DotNETDateFormatter().Format((DateTime)obj);
                }
                else
                {
                    value = obj.ToString();
                }
                if (element.Element(pair.Key).Value == value)
                {
                    continue;
                }

                return(false);
            }
            return(true);
        }