public async Task AddEnabledTwoStepAuthenticationAsync(int userId, string auth)
        {
            using (UserDefinitionDataProvider userDP = new UserDefinitionDataProvider()) {
                UserDefinition user = await userDP.GetItemByUserIdAsync(userId);

                if (user == null)
                {
                    throw new InternalError($"Unexpected error in {nameof(AddEnabledTwoStepAuthenticationAsync)} - no user found");
                }
                TwoStepDefinition authDef = new DataProvider.TwoStepDefinition {
                    Name = auth
                };
                if (!user.EnabledTwoStepAuthentications.Contains(authDef, new TwoStepDefinitionComparer()))
                {
                    user.EnabledTwoStepAuthentications.Add(authDef);
                    UpdateStatusEnum status = await userDP.UpdateItemAsync(user);

                    if (status != UpdateStatusEnum.OK)
                    {
                        throw new InternalError($"Unexpected status {status} updating user account in {nameof(AddEnabledTwoStepAuthenticationAsync)}");
                    }
                    Manager.Need2FAState = null;//reevaluate now that user has enabled a two-step authentication
                }
            }
        }
Beispiel #2
0
        public async Task <ActionResult> EntryEdit_Partial(EditModel model)
        {
            if (!ModelState.IsValid)
            {
                return(PartialView(model));
            }
            using (BlogEntryDataProvider dataProvider = new BlogEntryDataProvider()) {
                BlogEntry data = await dataProvider.GetItemAsync(model.Identity);

                if (data == null)
                {
                    throw new Error(this.__ResStr("notFound", "Blog entry with id {0} not found"), model.Identity);
                }
                // save updated item
                data = model.GetData(data); // merge new data into original
                model.SetData(data);        // and all the data back into model for final display

                UpdateStatusEnum status = await dataProvider.UpdateItemAsync(data);

                if (status != UpdateStatusEnum.OK)
                {
                    throw new Error(this.__ResStr("errSaving", "An unexpected error occurred saving the blog entry - {0}", status));
                }
                return(FormProcessed(model, this.__ResStr("okSaved", "Blog entry saved")));
            }
        }
        public async Task SetUserStatusAsync(int userId, UserStatusEnum userStatus)
        {
            using (UserDefinitionDataProvider userDP = new UserDefinitionDataProvider()) {
                UserDefinition user = await userDP.GetItemByUserIdAsync(userId);

                if (user == null)
                {
                    throw new InternalError($"Unknown user (user id {userId})");
                }
                if (user.UserStatus != userStatus)
                {
                    user.UserStatus = userStatus;
                    if (userStatus == UserStatusEnum.Approved)
                    {
                        user.LoginFailures = 0;
                    }
                    UpdateStatusEnum status = await userDP.UpdateItemAsync(user);

                    if (status != UpdateStatusEnum.OK)
                    {
                        throw new InternalError($"Unexpected status {status} updating user account in {nameof(SetUserStatusAsync)}");
                    }
                }
            }
        }
        public async Task RemoveRoleFromUserAsync(int userId, string roleName)
        {
            int roleId;

            // get the role id for roleName
            using (RoleDefinitionDataProvider roleDP = new RoleDefinitionDataProvider()) {
                RoleDefinition role = await roleDP.GetItemAsync(roleName);

                if (role == null)
                {
                    throw new InternalError("Unexpected error in AddRoleToUser - expected role {0} not found", roleName);
                }
                roleId = role.RoleId;
            }
            // remove the role from the user
            using (UserDefinitionDataProvider userDP = new UserDefinitionDataProvider()) {
                UserDefinition user = await userDP.GetItemByUserIdAsync(userId);

                if (user != null)
                {
                    Role role = (from Role r in user.RolesList where r.RoleId == roleId select r).FirstOrDefault();
                    if (role != null)
                    {
                        user.RolesList.Remove(role);
                        UpdateStatusEnum status = await userDP.UpdateItemAsync(user);

                        if (status != UpdateStatusEnum.OK)
                        {
                            throw new InternalError("Unexpected status {0} updating user account in RemoveRoleFromUser", status);
                        }
                    }
                }
            }
        }
        public async Task UpdateItemAsync(UserData data)
        {
            if (Manager.HaveUser)
            {
                data.Key = Manager.UserId;
                UpdateStatusEnum status = await DataProvider.UpdateAsync(data.Key, data.Key, data);

                if (status == UpdateStatusEnum.RecordDeleted)
                {
                    if (!await DataProvider.AddAsync(data))
                    {
                        throw new InternalError("Unexpected failure saving user settings", status);
                    }
                }
                else if (status != UpdateStatusEnum.OK)
                {
                    throw new InternalError("Unexpected status {0} updating user settings", status);
                }
            }
            else
            {
                Manager.SessionSettings.SiteSettings.SetValue <UserData>(KEY, data);
                Manager.SessionSettings.SiteSettings.Save();
            }
        }
Beispiel #6
0
        public async Task <ActionResult> Suspend(string userName)
        {
            using (UserDefinitionDataProvider dataProvider = new UserDefinitionDataProvider()) {
                UserDefinition user = await GetUserAsync(userName, dataProvider);

                if (user.UserStatus != UserStatusEnum.Suspended)
                {
                    user.UserStatus = UserStatusEnum.Suspended;
                    UpdateStatusEnum status = await dataProvider.UpdateItemAsync(user);

                    switch (status)
                    {
                    default:
                    case UpdateStatusEnum.NewKeyExists:
                        throw new InternalError("Unexpected status {0}", status);

                    case UpdateStatusEnum.RecordDeleted:
                        throw new Error(this.__ResStr("rejectUserNotFound", "The user account for user {0} no longer exists.", userName));

                    case UpdateStatusEnum.OK:
                        break;
                    }
                }
                Emails emails = new Emails();
                await emails.SendSuspendedAsync(user);

                return(Reload(null, Reload: ReloadEnum.ModuleParts, PopupText: this.__ResStr("userSuspended", "The user account for user {0} has been marked as suspended. An email has been sent to the user.", userName)));
            }
        }
        // IINSTALLABLEMODEL
        // IINSTALLABLEMODEL
        // IINSTALLABLEMODEL

        public new async Task LocalizeModelAsync(string language, Func <string, bool> isHtml, Func <List <string>, Task <List <string> > > translateStringsAsync, Func <string, Task <string> > translateComplexStringAsync)
        {
            const int RECORDS = 20;

            for (int offset = 0; ;)
            {
                DataProviderGetRecords <MenuInfo> data = await DataProvider.GetRecordsAsync(offset, RECORDS, null, null);

                if (data.Data.Count == 0)
                {
                    break;
                }
                bool changed = false;
                foreach (MenuInfo menu in data.Data)
                {
                    changed = await TranslateMenuListAsync(menu.Menu, language, (s) => false, translateStringsAsync, translateComplexStringAsync);

                    if (changed)
                    {
                        UpdateStatusEnum status = await UpdateItemAsync(menu);

                        if (status != UpdateStatusEnum.OK)
                        {
                            throw new InternalError($"Update failed for type {typeof(MenuInfo).FullName} ({status})");
                        }
                    }
                }
                offset += data.Data.Count;
                if (offset >= data.Total)
                {
                    break;
                }
            }
        }
Beispiel #8
0
        public async Task <UpdateStatusEnum> UpdateItemAsync(UnifiedSetData unifiedSet)
        {
            UnifiedSetData origData = Auditing.Active ? await GetItemAsync(unifiedSet.UnifiedSetGuid) : null;

            unifiedSet.Updated = DateTime.UtcNow;
            if (unifiedSet.UnifiedMode == PageDefinition.UnifiedModeEnum.SkinDynamicContent)
            {
                unifiedSet.PageList = new List <string>();
            }
            else
            {
                unifiedSet.PageSkin = new SkinDefinition();
            }
            unifiedSet.PageGuids = await UpdatePageGuidsAsync(unifiedSet.UnifiedSetGuid, unifiedSet.PageList);

            UpdateStatusEnum status = await DataProvider.UpdateAsync(unifiedSet.UnifiedSetGuid, unifiedSet.UnifiedSetGuid, unifiedSet);

            if (status != UpdateStatusEnum.OK)
            {
                return(status);
            }

            await Auditing.AddAuditAsync($"{nameof(UnifiedSetDataProvider)}.{nameof(UpdateItemAsync)}", Dataset, Guid.Empty,
                                         $"Update UPS {unifiedSet.Name}",
                                         DataBefore : origData,
                                         DataAfter : unifiedSet
                                         );

            return(status);
        }
        public async Task AddTwoStepLoginFailureAsync()
        {
            int userId = Manager.SessionSettings.SiteSettings.GetValue <int>(LoginTwoStepController.IDENTITY_TWOSTEP_USERID);

            if (userId == 0)
            {
                throw new InternalError("No user id available in AddTwoStepLoginFailure");
            }
            using (UserDefinitionDataProvider userDP = new UserDefinitionDataProvider()) {
                UserDefinition user = await userDP.GetItemByUserIdAsync(userId);

                if (user == null)
                {
                    throw new InternalError("Unexpected error in AddTwoStepLoginFailure - no user found");
                }
                LoginConfigData config = await LoginConfigDataProvider.GetConfigAsync();

                user.LoginFailures = user.LoginFailures + 1;
                if (config.MaxLoginFailures != 0 && user.LoginFailures >= config.MaxLoginFailures)
                {
                    if (user.UserStatus != UserStatusEnum.Suspended)
                    {
                        user.UserStatus = UserStatusEnum.Suspended;
                    }
                }
                UpdateStatusEnum status = await userDP.UpdateItemAsync(user);

                if (status != UpdateStatusEnum.OK)
                {
                    throw new InternalError("Unexpected status {0} updating user account in AddTwoStepLoginFailure", status);
                }
            }
        }
Beispiel #10
0
        // SCHEDULER
        // SCHEDULER
        // SCHEDULER

        /// <summary>
        /// Run a scheduler item.
        /// </summary>
        /// <param name="name"></param>
        private async Task RunItemAsync(string name)
        {
            using (SchedulerDataProvider schedDP = new SchedulerDataProvider()) {
                using (ILockObject lockObject = await YetaWF.Core.IO.Caching.LockProvider.LockResourceAsync($"{AreaRegistration.CurrentPackage.AreaName}_RunItem_{name}")) {
                    SchedulerItemData evnt = await schedDP.GetItemAsync(name);

                    if (evnt == null)
                    {
                        throw new Error(this.__ResStr("errItemNotFound", "Scheduler item '{0}' does not exist."), name);
                    }
                    if (evnt.RunOnce)
                    {
                        evnt.Enabled = true;
                    }
                    if (!evnt.Enabled)
                    {
                        throw new Error(this.__ResStr("errItemDisabled", "Scheduler item '{0}' is currently disabled and cannot be scheduled."), evnt.Name);
                    }
                    evnt.Next   = DateTime.UtcNow.AddSeconds(-1);
                    evnt.Errors = null;
                    UpdateStatusEnum status = await schedDP.UpdateItemAsync(evnt);

                    await lockObject.UnlockAsync();

                    if (status != UpdateStatusEnum.OK)
                    {
                        throw new Error(this.__ResStr("errItemUpdFail", "Scheduler item '{0}' couldn't be updated."), evnt.Name);
                    }

                    Dispatch();// run the scheduler now
                }
            }
        }
        public async Task <UpdateStatusEnum> UpdateItemAsync(Authorization data)
        {
            Authorization origData = Auditing.Active ? await GetItemAsync(data.ResourceName) : null;

            CleanupUsersAndRoles(data);
            if (data.AllowedUsers.Count > Info.MAX_USERS_IN_RESOURCE)
            {
                throw new Error(this.__ResStr("maxUsers", "Only up to {0} users can be authorized for a resource. Consider creating a role instead, and add all users to that role. There is no limit to the number of users that can be added to a role."));
            }
            UpdateStatusEnum status = await DataProvider.UpdateAsync(data.ResourceName, data.ResourceName, data);

            if (status == UpdateStatusEnum.RecordDeleted)
            {
                if (!await DataProvider.AddAsync(data))
                {
                    throw new Error(this.__ResStr("addFail", "Unexpected error adding new record - {0}", status));
                }
                status = UpdateStatusEnum.OK;
            }
            if (status != UpdateStatusEnum.OK)
            {
                throw new Error(this.__ResStr("updFail", "Unexpected error updating record - {0}", status));
            }
            await Auditing.AddAuditAsync($"{nameof(AuthorizationDataProvider)}.{nameof(UpdateItemAsync)}", data.ResourceName, Guid.Empty,
                                         "Add/Update Authorization",
                                         DataBefore : origData,
                                         DataAfter : data,
                                         ExpensiveMultiInstance : true
                                         );

            return(status);
        }
Beispiel #12
0
        public async Task <UpdateStatusEnum> UpdateItemAsync(string originalRole, RoleDefinition data)
        {
            if (data.RoleId == RoleDefinitionDataProvider.SuperUserId || data.Name == Globals.Role_Superuser)
            {
                throw new Error(this.__ResStr("cantUpdateSuper", "Can't update built-in superuser role"));
            }
            if (originalRole != data.Name && IsPredefinedRole(originalRole))
            {
                throw new Error(this.__ResStr("cantUpdateUser", "The {0} role can't be updated", originalRole));
            }
            if (YetaWF.Core.Support.Startup.MultiInstance)
            {
                throw new InternalError("Changing roles is not possible when distributed caching is enabled");
            }
            RoleDefinition origRole = Auditing.Active ? await GetItemAsync(originalRole) : null;

            UpdateStatusEnum status = await DataProvider.UpdateAsync(originalRole, data.Name, data);

            if (status == UpdateStatusEnum.OK)
            {
                GetAllUserRoles(true);
            }
            await Auditing.AddAuditAsync($"{nameof(RoleDefinitionDataProvider)}.{nameof(UpdateItemAsync)}", originalRole, Guid.Empty,
                                         "Update Role",
                                         DataBefore : origRole,
                                         DataAfter : data,
                                         ExpensiveMultiInstance : true
                                         );

            return(status);
        }
Beispiel #13
0
        public async Task <bool> AddItemsAsync(List <SearchData> list, string pageUrl, PageDefinition.PageSecurityType pageSecurity, string pageDescription, string pageSummary, DateTime pageCreated, DateTime?pageUpdated, DateTime searchStarted, string customData)
        {
            if (!IsUsable)
            {
                return(false);
            }
            bool status = false;

            using (ILockObject lockObject = await YetaWF.Core.IO.Caching.LockProvider.LockResourceAsync($"{AreaRegistration.CurrentPackage.AreaName}_{nameof(SearchDataProvider)}")) {
                if (pageUpdated != null && (DateTime)pageUpdated < pageCreated)
                {
                    pageCreated = (DateTime)pageUpdated;
                }
                using (SearchDataUrlDataProvider searchUrlDP = new SearchDataUrlDataProvider()) {
                    SearchDataUrl searchUrl = await searchUrlDP.GetItemByUrlAsync(pageUrl);

                    if (searchUrl == null)
                    {
                        searchUrl = new SearchDataUrl {
                            DatePageCreated = pageCreated,
                            DatePageUpdated = pageUpdated,
                            PageTitle       = pageDescription.Truncate(SearchDataUrl.MaxTitle),
                            PageUrl         = pageUrl,
                            PageSecurity    = pageSecurity,
                            PageSummary     = pageSummary.Truncate(SearchDataUrl.MaxSummary),
                            CustomData      = customData,
                        };
                        if (!await searchUrlDP.AddItemAsync(searchUrl))
                        {
                            throw new InternalError("Unexpected error adding SearchDataUrl for url {0}", pageUrl);
                        }
                    }
                    else
                    {
                        searchUrl.PageTitle       = pageDescription.Truncate(SearchDataUrl.MaxTitle);
                        searchUrl.PageSummary     = pageSummary.Truncate(SearchDataUrl.MaxSummary);
                        searchUrl.DatePageCreated = pageCreated;
                        searchUrl.DatePageUpdated = pageUpdated ?? pageCreated;
                        searchUrl.PageSecurity    = pageSecurity;
                        searchUrl.CustomData      = customData;
                        UpdateStatusEnum updStatus = await searchUrlDP.UpdateItemAsync(searchUrl);

                        if (updStatus != UpdateStatusEnum.OK)
                        {
                            throw new InternalError("Unexpected error updating SearchDataUrl for url {0} - {1}", pageUrl, updStatus);
                        }
                    }
                    foreach (SearchData data in list)
                    {
                        data.SearchDataUrlId = searchUrl.SearchDataUrlId;
                        data.DateAdded       = searchStarted;
                        await AddItemAsync(data);
                    }
                }
                status = true;
                await lockObject.UnlockAsync();
            }
            return(status);
        }
Beispiel #14
0
        private async Task GenerateRecoveryCodeAsync(UserDefinitionDataProvider userDP, UserDefinition user)
        {
            user.RecoveryCode = Guid.NewGuid().ToString().Substring(0, 12);
            UpdateStatusEnum status = await userDP.UpdateItemAsync(user);

            if (status != UpdateStatusEnum.OK)
            {
                throw new Error(this.__ResStr("cantUpdate", "Updating user information failed - {0}", status));
            }
        }
        public async Task <UpdateStatusEnum> UpdateItemAsync(string originalName, UserDefinition data)
        {
            CleanupRoles(data);

            if (!Manager.HasSuperUserRole)
            {
                int superuserRole = Resource.ResourceAccess.GetSuperuserRoleId();
                if (data.RolesList.Contains(new Role {
                    RoleId = superuserRole
                }, new RoleComparer()))
                {
                    // new data has super user role
                    // get original to make sure superuser role isn't new
                    UserDefinition origData = await GetItemByUserIdAsync(data.UserId);

                    if (!origData.RolesList.Contains(new Role {
                        RoleId = superuserRole
                    }, new RoleComparer()))
                    {
                        throw new Error(this.__ResStr("noSup", "Only a superuser can assign superuser status to another user"));
                    }
                }
            }

            if (string.Compare(data.UserName, SuperuserDefinitionDataProvider.SuperUserName, true) == 0 &&
                string.Compare(originalName, SuperuserDefinitionDataProvider.SuperUserName, true) != 0)
            {
                return(UpdateStatusEnum.NewKeyExists);
            }
            if (string.Compare(originalName, SuperuserDefinitionDataProvider.SuperUserName, true) == 0)
            {
                if (data.UserName != originalName)
                {
                    throw new Error(this.__ResStr("cantRenameSuper", "The user \"{0}\" can't be renamed.", originalName));
                }
                using (SuperuserDefinitionDataProvider superDP = new SuperuserDefinitionDataProvider()) {
                    return(await superDP.UpdateItemAsync(data));
                }
            }
            UserDefinition origUser = Auditing.Active ? await GetItemAsync(originalName) : null;

            UpdateStatusEnum result = await DataProvider.UpdateAsync(originalName, data.UserName, data);

            await Auditing.AddAuditAsync($"{nameof(UserDefinitionDataProvider)}.{nameof(UpdateItemAsync)}", originalName, Guid.Empty,
                                         "Update User",
                                         DataBefore : origUser,
                                         DataAfter : data
                                         );

            return(result);
        }
        protected async Task <UpdateStatusEnum> UpdateItemAsync(MenuInfo data)
        {
            MenuInfo origMenu = Auditing.Active ? await GetItemAsync(data.ModuleGuid) : null;

            UpdateStatusEnum result = await DataProvider.UpdateAsync(data.ModuleGuid, data.ModuleGuid, data);

            await Auditing.AddAuditAsync($"{nameof(MenuInfoDataProvider)}.{nameof(UpdateItemAsync)}", "Menu", data.ModuleGuid,
                                         "Update Menu",
                                         DataBefore : origMenu,
                                         DataAfter : data,
                                         ExpensiveMultiInstance : true
                                         );

            return(result);
        }
Beispiel #17
0
        public async Task UpdateItemAsync(VoiceMailData data)
        {
            VoiceMailData origEmail = Auditing.Active ? await GetItemAsync(data.CallSid) : null;

            UpdateStatusEnum status = await DataProvider.UpdateByIdentityAsync(data.Id, data);

            if (status != UpdateStatusEnum.OK)
            {
                throw new InternalError("Unexpected error {0} updating item", status);
            }
            await Auditing.AddAuditAsync($"{nameof(VoiceMailDataProvider)}.{nameof(UpdateItemAsync)}", Dataset, Guid.Empty,
                                         $"Update Voice Mail Entry {data.Id}",
                                         DataBefore : origEmail,
                                         DataAfter : data
                                         );
        }
Beispiel #18
0
        public async Task UpdateConfigAsync(SearchConfigData data)
        {
            SearchConfigData origConfig = Auditing.Active ? await GetItemAsync() : null;

            data.Id = KEY;
            UpdateStatusEnum status = await DataProvider.UpdateAsync(data.Id, data.Id, data);

            if (status != UpdateStatusEnum.OK)
            {
                throw new InternalError("Unexpected error saving settings {0}", status);
            }
            await Auditing.AddAuditAsync($"{nameof(SearchConfigDataProvider)}.{nameof(UpdateConfigAsync)}", "Config", Guid.Empty,
                                         "Update Search Config",
                                         DataBefore : origConfig,
                                         DataAfter : data,
                                         ExpensiveMultiInstance : true
                                         );
        }
        public async Task UpdateConfigAsync(RecaptchaV2Config data)
        {
            RecaptchaV2Config origConfig = Auditing.Active ? await GetItemAsync() : null;

            data.Key = KEY;
            UpdateStatusEnum status = await DataProvider.UpdateAsync(data.Key, data.Key, data);

            if (status != UpdateStatusEnum.OK)
            {
                throw new InternalError("Can't save captcha configuration {0}", status);
            }
            await Auditing.AddAuditAsync($"{nameof(RecaptchaV2ConfigDataProvider)}.{nameof(UpdateConfigAsync)}", "Config", Guid.Empty,
                                         "Update RecaptchaV2 Config",
                                         DataBefore : origConfig,
                                         DataAfter : data,
                                         ExpensiveMultiInstance : true
                                         );
        }
        public async Task <ActionResult> Approve(int blogEntry, int comment)
        {
            using (BlogCommentDataProvider dataProvider = new BlogCommentDataProvider(blogEntry)) {
                BlogComment cmt = await dataProvider.GetItemAsync(comment);

                if (cmt == null)
                {
                    throw new InternalError("Can't find comment entry {0}", comment);
                }
                cmt.Approved = true;
                UpdateStatusEnum status = await dataProvider.UpdateItemAsync(cmt);

                if (status != UpdateStatusEnum.OK)
                {
                    throw new InternalError("Can't update comment entry - {0}", status);
                }
                return(Reload(null, Reload: ReloadEnum.Page));
            }
        }
        public async Task <UpdateStatusEnum> UpdateItemAsync(UserInfo userInfo)
        {
            UserInfo origUserInfo = Auditing.Active ? await GetItemAsync(userInfo.UserId) : null;

            userInfo.Updated = DateTime.UtcNow;
            if (string.IsNullOrWhiteSpace(userInfo.Country))
            {
                userInfo.Country = Globals.DefaultCountry;
            }
            UpdateStatusEnum result = await DataProvider.UpdateAsync(userInfo.UserId, userInfo.UserId, userInfo);

            await Auditing.AddAuditAsync($"{nameof(UserInfoDataProvider)}.{nameof(UpdateItemAsync)}", userInfo.UserId.ToString(), Guid.Empty,
                                         "Update UserInfo",
                                         DataBefore : origUserInfo,
                                         DataAfter : userInfo
                                         );

            return(result);
        }
Beispiel #22
0
        public async Task <IdentityResult> UpdateAsync(RoleDefinition role, CancellationToken cancellationToken)
        {
            RoleDefinitionDataProvider dataProvider = new RoleDefinitionDataProvider(this.CurrentSiteIdentity);
            UpdateStatusEnum           status       = await dataProvider.UpdateItemAsync(role);

            switch (status)
            {
            default:
            case UpdateStatusEnum.RecordDeleted:
                throw new Error(this.__ResStr("alreadyDeleted", "The role named \"{0}\" has been removed and can no longer be updated.", role.Name));

            case UpdateStatusEnum.NewKeyExists:
                throw new Error(this.__ResStr("alreadyExists", "A role named \"{0}\" already exists.", role.Name));

            case UpdateStatusEnum.OK:
                break;
            }
            return(IdentityResult.Success);
        }
Beispiel #23
0
        public async Task <UpdateStatusEnum> UpdateItemAsync(HolidayEntry data)
        {
            HolidayEntry origData = Auditing.Active ? await GetItemByIdentityAsync(data.Id) : null;

            UpdateStatusEnum status = await DataProvider.UpdateByIdentityAsync(data.Id, data);

            if (status != UpdateStatusEnum.OK)
            {
                return(status);
            }

            await Auditing.AddAuditAsync($"{nameof(HolidayEntryDataProvider)}.{nameof(UpdateItemAsync)}", Dataset, Guid.Empty,
                                         $"Update Holiday Entry {data.Id}",
                                         DataBefore : origData,
                                         DataAfter : data
                                         );

            return(UpdateStatusEnum.OK);
        }
        public async Task UpdateConfigAsync(BlogConfigData data)
        {
            BlogConfigData origConfig = Auditing.Active ? await GetItemAsync() : null;

            data.Id = KEY;
            await SaveImagesAsync(ModuleDefinition.GetPermanentGuid(typeof(BlogConfigModule)), data);

            UpdateStatusEnum status = await DataProvider.UpdateAsync(data.Id, data.Id, data);

            if (status != UpdateStatusEnum.OK)
            {
                throw new InternalError("Unexpected error saving settings {0}", status);
            }
            await Auditing.AddAuditAsync($"{nameof(BlogConfigDataProvider)}.{nameof(UpdateConfigAsync)}", "Config", Guid.Empty,
                                         "Update Blog Config",
                                         DataBefore : origConfig,
                                         DataAfter : data,
                                         ExpensiveMultiInstance : true
                                         );
        }
Beispiel #25
0
        public async Task <IdentityResult> UpdateAsync(UserDefinition user, CancellationToken cancellationToken)
        {
            using (UserDefinitionDataProvider dataProvider = new UserDefinitionDataProvider(this.CurrentSiteIdentity)) {
                UpdateStatusEnum status = await dataProvider.UpdateItemAsync(user);

                switch (status)
                {
                default:
                case UpdateStatusEnum.NewKeyExists:
                    throw new InternalError("Unexpected update status");

                case UpdateStatusEnum.RecordDeleted:
                    throw new Error(this.__ResStr("userDeleted", "User {0} not found.", user.UserName));

                case UpdateStatusEnum.OK:
                    break;
                }
                return(IdentityResult.Success);
            }
        }
Beispiel #26
0
        public async Task <UpdateStatusEnum> UpdateItemAsync(BlockedNumberEntry data)
        {
            BlockedNumberEntry origData = Auditing.Active ? await GetItemByIdentityAsync(data.Id) : null;

            data.Updated = DateTime.UtcNow;
            data.Number  = PhoneNumberAttribute.GetE164(data.Number);
            UpdateStatusEnum status = await DataProvider.UpdateByIdentityAsync(data.Id, data);

            if (status != UpdateStatusEnum.OK)
            {
                return(status);
            }

            await Auditing.AddAuditAsync($"{nameof(BlockedNumberDataProvider)}.{nameof(UpdateItemAsync)}", Dataset, Guid.Empty,
                                         $"Update Blocked Number {data.Id}",
                                         DataBefore : origData,
                                         DataAfter : data
                                         );

            return(UpdateStatusEnum.OK);
        }
        public async Task RehashAllPasswordsAsync()
        {
            LoginConfigData config = await LoginConfigDataProvider.GetConfigAsync();

            if (!config.SavePlainTextPassword)
            {
                throw new InternalError("Rehashing all passwords is only available if plain text passwords are saved");
            }
            UserManager <UserDefinition> userManager = Managers.GetUserManager();
            const int TAKE = 10;

            for (int skip = 0; ; skip += TAKE)
            {
                DataProviderGetRecords <UserDefinition> list = await GetItemsAsync(skip, TAKE, null, null);

                if (list.Data.Count == 0)
                {
                    break;
                }
                foreach (UserDefinition user in list.Data)
                {
                    if (!string.IsNullOrWhiteSpace(user.PasswordPlainText))
                    {
#if MVC6
                        IPasswordHasher <UserDefinition> passwordHasher = (IPasswordHasher <UserDefinition>)YetaWFManager.ServiceProvider.GetService(typeof(IPasswordHasher <UserDefinition>));
                        user.PasswordHash = passwordHasher.HashPassword(user, user.PasswordPlainText);
#else
                        user.PasswordHash = userManager.PasswordHasher.HashPassword(user.PasswordPlainText);
#endif
                        UpdateStatusEnum status = await UpdateItemAsync(user);

                        if (status != UpdateStatusEnum.OK)
                        {
                            throw new InternalError("Update failed - status {0} user id {1}", status, user.Id);
                        }
                    }
                }
            }
        }
Beispiel #28
0
        // Change a user password
        private async Task ChangePasswordAsync(string userName, string newPassword)
        {
            using (UserDefinitionDataProvider dataProvider = new UserDefinitionDataProvider()) {
                UserDefinition user = await dataProvider.GetItemAsync(userName);

                if (user == null)
                {
                    throw new Error(this.__ResStr("notFound", "User {0} not found", userName));
                }

                UserManager <UserDefinition> userManager = Managers.GetUserManager();
                string hashedNewPassword;
#if MVC6
                IPasswordHasher <UserDefinition> passwordHasher = (IPasswordHasher <UserDefinition>)YetaWFManager.ServiceProvider.GetService(typeof(IPasswordHasher <UserDefinition>));
                hashedNewPassword = passwordHasher.HashPassword(user, newPassword);
#else
                hashedNewPassword = userManager.PasswordHasher.HashPassword(newPassword);
#endif
                //ModuleDefinition.GetPermanentGuid(typeof(RegisterModule))
                LoginConfigData config = await LoginConfigDataProvider.GetConfigAsync();

                user.PasswordPlainText = config.SavePlainTextPassword ? newPassword : null;
                user.PasswordHash      = hashedNewPassword;
                UpdateStatusEnum status = await dataProvider.UpdateItemAsync(user);

                switch (status)
                {
                default:
                case UpdateStatusEnum.NewKeyExists:
                    throw new InternalError("Unexpected status {0}", status);

                case UpdateStatusEnum.RecordDeleted:
                    throw new Error(this.__ResStr("changeUserNotFound", "The user account for user {0} no longer exists.", userName));

                case UpdateStatusEnum.OK:
                    break;
                }
            }
        }
        public async Task RemoveEnabledTwoStepAuthenticationAsync(int userId, string auth)
        {
            using (UserDefinitionDataProvider userDP = new UserDefinitionDataProvider()) {
                UserDefinition user = await userDP.GetItemByUserIdAsync(userId);

                if (user == null)
                {
                    throw new InternalError("Unexpected error in RemoveEnabledTwoStepAuthentication - no user found");
                }
                TwoStepDefinition authDef = user.EnabledTwoStepAuthentications.Find(m => m.Name == auth);
                if (authDef != null)
                {
                    user.EnabledTwoStepAuthentications.Remove(authDef);
                    UpdateStatusEnum status = await userDP.UpdateItemAsync(user);

                    if (status != UpdateStatusEnum.OK)
                    {
                        throw new InternalError("Unexpected status {0} updating user account in RemoveEnabledTwoStepAuthentication", status);
                    }
                    Manager.Need2FAState = null;//reevaluate now that user has removed a two-step authentication
                }
            }
        }
Beispiel #30
0
        // IUserLoginStore
        // IUserLoginStore
        // IUserLoginStore
        public async Task AddLoginAsync(UserDefinition user, UserLoginInfo login, CancellationToken cancellationToken)
        {
            using (UserLoginInfoDataProvider logInfoDP = new DataProvider.UserLoginInfoDataProvider(CurrentSiteIdentity)) {
                await logInfoDP.AddItemAsync(user.UserId, login.LoginProvider, login.ProviderKey);
            }

            using (UserDefinitionDataProvider dataProvider = new UserDefinitionDataProvider(this.CurrentSiteIdentity)) {
                UpdateStatusEnum status = await dataProvider.UpdateItemAsync(user);

                switch (status)
                {
                case UpdateStatusEnum.RecordDeleted:
                    throw new Error(this.__ResStr("delUser", "Can't update user {0}, because the user has been deleted.", user.UserName));

                default:
                case UpdateStatusEnum.NewKeyExists:
                    throw new InternalError("Unexpected update status");

                case UpdateStatusEnum.OK:
                    break;
                }
            }
        }