public TimeZoneInfo GetUserTimeZone(KoreUser user) { //registered user TimeZoneInfo timeZoneInfo = null; if (dateTimeSettings.AllowUsersToSetTimeZone) { string timeZoneId = string.Empty; if (user != null) { timeZoneId = user.GetAttribute <string>(SystemUserAttributeNames.TimeZoneId, genericAttributeService); } try { if (!string.IsNullOrEmpty(timeZoneId)) { timeZoneInfo = FindTimeZoneById(timeZoneId); } } catch (Exception exc) { Debug.Write(exc.ToString()); } } //default timezone if (timeZoneInfo == null) { timeZoneInfo = this.DefaultTenantTimeZone; } return(timeZoneInfo); }
public void Unsubscribed(KoreUser user) { var tokens = new List <Token> { new Token("[UserName]", user.UserName), new Token("[Email]", user.Email) }; messageService.SendEmailMessage(workContext.CurrentTenant.Id, NewsletterMessageTemplates.Newsletter_Unsubscribed, tokens, user.Email); }
public virtual async Task <bool> IsUserAllowedToSubscribe(KoreUser user) { if (user == null) { return(false); } //if (user.IsGuest()) //{ // return false; //} return(await Task.FromResult(true)); }
public virtual async Task <IHttpActionResult> Delete([FromODataUri] string key) { if (!CheckPermission(KoreWebPermissions.MembershipUsersWrite)) { return(Unauthorized()); } KoreUser entity = await Service.GetUserById(key); if (entity == null) { return(NotFound()); } await Service.DeleteUser(key); return(StatusCode(HttpStatusCode.NoContent)); }
public virtual async Task <bool> IsUserAllowedToCreatePost(KoreUser user, ForumTopic topic) { if (topic == null) { return(false); } if (user == null) { return(false); } //if (user.IsGuest() && !forumSettings.AllowGuestsToCreatePosts) //{ // return false; //} return(await Task.FromResult(true)); }
public virtual async Task <bool> IsUserAllowedToSetTopicPriority(KoreUser user) { if (user == null) { return(false); } //if (user.IsGuest()) //{ // return false; //} if (await IsForumModerator(user)) { return(true); } return(false); }
public async Task UpdateUser(KoreUser user) { string userId = user.Id.ToString(); var existingUser = await userManager.Users.FirstOrDefaultAsync(x => x.Id == userId); if (user != null) { existingUser.UserName = user.UserName; existingUser.Email = user.Email; existingUser.LockoutEnabled = user.IsLockedOut; var result = await userManager.UpdateAsync(existingUser); if (!result.Succeeded) { string errorMessage = string.Join(Environment.NewLine, result.Errors); throw new KoreException(errorMessage); } } }
public virtual async Task <IHttpActionResult> Patch([FromODataUri] string key, Delta <KoreUser> patch) { if (!CheckPermission(KoreWebPermissions.MembershipUsersWrite)) { return(Unauthorized()); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } KoreUser entity = await Service.GetUserById(key); if (entity == null) { return(NotFound()); } patch.Patch(entity); try { await Service.UpdateUser(entity); } catch (DbUpdateConcurrencyException x) { logger.Value.Error(x.Message, x); if (!EntityExists(key)) { return(NotFound()); } else { throw; } } return(Updated(entity)); }
public virtual async Task <IHttpActionResult> Post(KoreUser entity) { if (!CheckPermission(KoreWebPermissions.MembershipUsersWrite)) { return(Unauthorized()); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } string password = System.Web.Security.Membership.GeneratePassword( membershipSettings.Value.GeneratedPasswordLength, membershipSettings.Value.GeneratedPasswordNumberOfNonAlphanumericChars); entity.TenantId = workContext.CurrentTenant.Id; await Service.InsertUser(entity, password); return(Created(entity)); }
public async Task InsertUser(KoreUser user, string password) { // Check for spaces in UserName above, because of this: // http://stackoverflow.com/questions/30078332/bug-in-asp-net-identitys-usermanager string userName = (user.UserName.Contains(" ") ? user.UserName.Replace(" ", "_") : user.UserName); var appUser = new ApplicationUser { TenantId = user.TenantId, UserName = userName, Email = user.Email, LockoutEnabled = user.IsLockedOut }; var result = await userManager.CreateAsync(appUser, password); if (!result.Succeeded) { string errorMessage = string.Join(Environment.NewLine, result.Errors); throw new KoreException(errorMessage); } }
public async Task <string> GetUserDisplayName(KoreUser user) { var profile = await GetProfile(user.Id); bool hasFamilyName = profile.ContainsKey(AccountUserProfileProvider.Fields.FamilyName); bool hasGivenNames = profile.ContainsKey(AccountUserProfileProvider.Fields.GivenNames); if (hasFamilyName && hasGivenNames) { string familyName = profile[AccountUserProfileProvider.Fields.FamilyName]; string givenNames = profile[AccountUserProfileProvider.Fields.GivenNames]; if (profile.ContainsKey(AccountUserProfileProvider.Fields.ShowFamilyNameFirst)) { bool showFamilyNameFirst = bool.Parse(profile[AccountUserProfileProvider.Fields.ShowFamilyNameFirst]); if (showFamilyNameFirst) { return(familyName + " " + givenNames); } return(givenNames + " " + familyName); } return(givenNames + " " + familyName); } else if (hasFamilyName) { return(profile[AccountUserProfileProvider.Fields.FamilyName]); } else if (hasGivenNames) { return(profile[AccountUserProfileProvider.Fields.GivenNames]); } else { return(user.UserName); } }
public virtual async Task <bool> IsUserAllowedToMoveTopic(KoreUser user, ForumTopic topic) { if (topic == null) { return(false); } if (user == null) { return(false); } //if (user.IsGuest()) //{ // return false; //} if (await IsForumModerator(user)) { return(true); } return(false); }
public virtual async Task <bool> IsUserAllowedToCreateTopic(KoreUser user, Forum forum) { if (forum == null) { return(false); } if (user == null) { return(false); } //if (user.IsGuest() && !forumSettings.AllowGuestsToCreateTopics) //{ // return false; //} if (await IsForumModerator(user)) { return(true); } return(true); }
public bool TryCheckAccess(Permission permission, KoreUser user) { var context = new CheckAccessContext { Permission = permission, User = user }; for (var adjustmentLimiter = 0; adjustmentLimiter != 3; ++adjustmentLimiter) { //if (!context.Granted && context.User != null && context.User.IsSuperUser) //{ // context.Granted = true; //} if (!context.Granted) { // determine which set of permissions would satisfy the access check var grantingNames = PermissionNames(context.Permission, Enumerable.Empty <string>()).Distinct().ToArray(); // determine what set of roles should be examined by the access check IEnumerable <string> rolesToExamine; if (context.User == null) { rolesToExamine = anonymousRole; } else { rolesToExamine = (AsyncHelper.RunSync(() => membershipService.GetRolesForUser(context.User.Id))).Select(x => x.Name).ToList(); if (!rolesToExamine.Contains(anonymousRole[0])) { rolesToExamine = rolesToExamine.Concat(authenticatedRole); } } foreach (var role in rolesToExamine) { var rolePermissions = AsyncHelper.RunSync(() => membershipService.GetPermissionsForRole(user.TenantId, role)); foreach (var rolePermission in rolePermissions) { string possessedName = rolePermission.Name; if (grantingNames.Any(grantingName => string.Equals(possessedName, grantingName, StringComparison.OrdinalIgnoreCase))) { context.Granted = true; } if (context.Granted) { break; } } if (context.Granted) { break; } } } context.Adjusted = false; if (!context.Adjusted) { break; } } return(context.Granted); }
private async Task <bool> IsForumModerator(KoreUser user) { var roles = await membershipService.GetRolesForUser(user.Id); return(roles.Any(x => x.Name == Constants.Roles.ForumModerators)); }
public bool Subscribe(string email, string name, KoreUser currentUser, out string message) { // First check if valid email address if (!CmsConstants.RegexPatterns.Email.IsMatch(email)) { message = T(KoreWebLocalizableStrings.Membership.InvalidEmailAddress); return(false); } var existingUser = AsyncHelper.RunSync(() => membershipService.Value.GetUserByEmail(workContext.Value.CurrentTenant.Id, email)); // Check if a user exists with that email.. if (existingUser != null) { // if user is logged in already and is the same user with that email address if (currentUser != null && currentUser.Id == existingUser.Id) { //auto set "ReceiveNewsletters" in profile to true AsyncHelper.RunSync(() => membershipService.Value.SaveProfileEntry( currentUser.Id, NewsletterUserProfileProvider.Fields.SubscribeToNewsletters, bool.TrueString)); eventBus.Value.Notify <INewsletterEventHandler>(x => x.Subscribed(existingUser)); message = T(KoreCmsLocalizableStrings.Newsletters.SuccessfullySignedUp); return(true); } //else just tell user to login and set "ReceiveNewsletters" in profile to true message = T(KoreWebLocalizableStrings.Membership.UserEmailAlreadyExists); return(false); } //create a user and email details to him/her with random password string password = System.Web.Security.Membership.GeneratePassword( membershipSettings.Value.GeneratedPasswordLength, membershipSettings.Value.GeneratedPasswordNumberOfNonAlphanumericChars); AsyncHelper.RunSync(() => membershipService.Value.InsertUser(new KoreUser { TenantId = workContext.Value.CurrentTenant.Id, UserName = email, Email = email }, password)); var user = AsyncHelper.RunSync(() => membershipService.Value.GetUserByEmail(workContext.Value.CurrentTenant.Id, email)); // and sign up for newsletter, as requested. AsyncHelper.RunSync(() => membershipService.Value.SaveProfileEntry(user.Id, NewsletterUserProfileProvider.Fields.SubscribeToNewsletters, bool.TrueString)); name = name.Trim(); if (name.Contains(" ")) { string[] nameArray = name.Split(' '); string familyName = nameArray.Last(); string givenNames = name.Replace(familyName, string.Empty).Trim(); AsyncHelper.RunSync(() => membershipService.Value.SaveProfileEntry(user.Id, AccountUserProfileProvider.Fields.FamilyName, familyName)); AsyncHelper.RunSync(() => membershipService.Value.SaveProfileEntry(user.Id, AccountUserProfileProvider.Fields.GivenNames, givenNames)); } else { AsyncHelper.RunSync(() => membershipService.Value.SaveProfileEntry(user.Id, AccountUserProfileProvider.Fields.GivenNames, name)); } eventBus.Value.Notify <INewsletterEventHandler>(x => x.Subscribed(user)); message = T(KoreCmsLocalizableStrings.Newsletters.SuccessfullySignedUp); return(true); }