Пример #1
0
        public const int MAXUSERS = 50; // maximum # of users for a dropdown

        public static async Task <bool> IsLargeUserBaseAsync()
        {
            using (UserDefinitionDataProvider userDP = new UserDefinitionDataProvider()) {
                DataProviderGetRecords <UserDefinition> recs = await userDP.GetItemsAsync(0, 1, null, null);

                return(recs.Total > MAXUSERS);
            }
        }
Пример #2
0
        public async Task UpdatePasswordExpiration(List <string> errorList)
        {
            long ticks = WebConfigHelper.GetValue <long>(YetaWF.Modules.Identity.Controllers.AreaRegistration.CurrentPackage.AreaName, "PasswordRenewal", new TimeSpan(0, 0, 0).Ticks); // 0  = indefinitely

            if (ticks <= 0)
            {
                return;                                // nothing to do
            }
            TimeSpan interval   = new TimeSpan(ticks); // renewal interval
            DateTime oldestDate = DateTime.UtcNow.Subtract(interval);

            using (UserDefinitionDataProvider userDP = new UserDefinitionDataProvider()) {
                int       offset = 0;
                const int CHUNK  = 50;

                for (;;)
                {
                    List <DataProviderFilterInfo> filters = null;
                    filters = DataProviderFilterInfo.Join(filters, new DataProviderFilterInfo {
                        Field = nameof(UserDefinition.UserStatus), Operator = "==", Value = UserStatusEnum.Approved
                    });
                    filters = DataProviderFilterInfo.Join(filters, new DataProviderFilterInfo {
                        Field = nameof(UserDefinition.NeedsNewPassword), Operator = "==", Value = false
                    });
                    DataProviderGetRecords <UserDefinition> usersInfo = await userDP.GetItemsAsync(offset, CHUNK, null, filters);

                    if (usersInfo.Data.Count == 0)
                    {
                        return;
                    }

                    foreach (UserDefinition user in usersInfo.Data)
                    {
                        bool forceUpdate = false;
                        if (user.LastPasswordChangedDate != null && user.LastPasswordChangedDate < oldestDate)
                        {
                            forceUpdate = true;
                        }
                        else if (user.LastPasswordChangedDate == null && user.Created < oldestDate)
                        {
                            forceUpdate = true;
                        }
                        if (forceUpdate)
                        {
                            user.NeedsNewPassword = true;
                            await userDP.UpdateItemAsync(user);

                            Logging.AddLog($"Updated {user.Id} {user.UserName} - requires password");
                        }
                    }
                    offset += CHUNK;
                    System.Threading.Thread.Sleep(5 * 1000); // wait some 5 seconds
                }
            }
        }
Пример #3
0
        private GridDefinition GetGridModel()
        {
            return(new GridDefinition {
                ModuleGuid = Module.ModuleGuid,
                SettingsModuleGuid = Module.PermanentGuid,
                RecordType = typeof(BrowseItem),
                AjaxUrl = GetActionUrl(nameof(UsersBrowse_GridData)),
                DirectDataAsync = async(int skip, int take, List <DataProviderSortInfo> sort, List <DataProviderFilterInfo> filters) => {
                    using (UserDefinitionDataProvider dataProvider = new UserDefinitionDataProvider()) {
                        DataProviderGetRecords <UserDefinition> browseItems = await dataProvider.GetItemsAsync(skip, take, sort, filters, IncludeSuperuser : false);

                        return new DataSourceResult {
                            Data = (from s in browseItems.Data select new BrowseItem(Module, s)).ToList <object>(),
                            Total = browseItems.Total
                        };
                    }
                },
            });
        }
Пример #4
0
        internal static GridDefinition GetGridAllUsersModel()
        {
            return(new GridDefinition()
            {
                RecordType = typeof(AllEntry),
                InitialPageSize = 10,
                AjaxUrl = Utility.UrlFor(typeof(AllowedUsersController), nameof(AllowedUsersController.AllowedUsersBrowse_GridData)),
                DirectDataAsync = async(int skip, int take, List <DataProviderSortInfo> sort, List <DataProviderFilterInfo> filters) => {
                    using (UserDefinitionDataProvider userDP = new UserDefinitionDataProvider()) {
                        DataProviderGetRecords <UserDefinition> browseItems = await userDP.GetItemsAsync(skip, take, sort, filters);

                        return new DataSourceResult {
                            Data = (from s in browseItems.Data select new AllowedUsersEditComponent.AllEntry(s)).ToList <object>(),
                            Total = browseItems.Total
                        };
                    }
                },
            });
        }
Пример #5
0
        public async Task <string> RenderAsync(int model)
        {
            HtmlBuilder hb = new HtmlBuilder();

            string type = PropData.GetAdditionalAttributeValue <string>("Force", null);

            if (type == "Grid" || (await IsLargeUserBaseAsync() && type != "DropDown"))
            {
                string hiddenId = UniqueId();
                string allId    = UniqueId();
                string nameId   = UniqueId();
                string noUser   = __ResStr("noUser", "(none)");

                bool header = PropData.GetAdditionalAttributeValue("Header", true);

                UserIdUI ui = new UserIdUI {
                    UserId = model,
                };
                using (UserDefinitionDataProvider userDP = new UserDefinitionDataProvider()) {
                    UserDefinition user = await userDP.GetItemByUserIdAsync(model);

                    if (user == null)
                    {
                        ui.UserName = __ResStr("noUser", "(none)");
                    }
                    else
                    {
                        ui.UserName = user.UserName;
                    }
                }

                ui.AllUsers    = GetGridAllUsersModel(header);
                ui.AllUsers.Id = allId;

                hb.Append($@"
<div class='yt_yetawf_identity_userid t_large t_edit' id='{DivId}'>
    {await HtmlHelper.ForEditComponentAsync(Container, PropertyName, model, "Hidden", HtmlAttributes: new { id = hiddenId, __NoTemplate = true })}");

                using (Manager.StartNestedComponent(FieldName)) {
                    hb.Append($@"
    <div class='t_name'>
        {await HtmlHelper.ForDisplayAsync(ui, nameof(ui.UserName), HtmlAttributes: new { id = nameId })}
        {ImageHTML.BuildKnownIcon("#RemoveLight", title: __ResStr("ttClear", "Clear the current selection"), cssClass: "t_clear")}
    </div>
    {await HtmlHelper.ForLabelAsync(ui, nameof(ui.AllUsers))}
    {await HtmlHelper.ForDisplayAsync(ui, nameof(ui.AllUsers))}");
                }
                hb.Append($@"
</div>");

                UserIdSetup setup = new UserIdSetup {
                    GridAllId = ui.AllUsers.Id,
                    HiddenId  = hiddenId,
                    NameId    = nameId,
                    NoUser    = noUser,
                };

                Manager.ScriptManager.AddLast($@"new YetaWF_Identity.UserIdEditComponent('{DivId}', {Utility.JsonSerialize(setup)});");
            }
            else
            {
                hb.Append($@"
<div class='yt_yetawf_identity_userid t_small t_edit'>");

                using (UserDefinitionDataProvider userDP = new UserDefinitionDataProvider()) {
                    List <DataProviderSortInfo> sorts = null;
                    DataProviderSortInfo.Join(sorts, new DataProviderSortInfo {
                        Field = nameof(UserDefinition.UserName), Order = DataProviderSortInfo.SortDirection.Ascending
                    });
                    DataProviderGetRecords <UserDefinition> recs = await userDP.GetItemsAsync(0, MAXUSERS, sorts, null);

                    List <SelectionItem <int> > list = (from u in recs.Data select new SelectionItem <int> {
                        Text = u.UserName,
                        Value = u.UserId,
                    }).ToList();
                    list.Insert(0, new SelectionItem <int> {
                        Text  = __ResStr("select", "(select)"),
                        Value = 0,
                    });
                    hb.Append(await DropDownListIntComponent.RenderDropDownListAsync(this, model, list, null));
                }

                hb.Append($@"
</div>");
            }
            return(hb.ToString());
        }