Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        public virtual async Task <bool> IsUserAllowedToSubscribe(KoreUser user)
        {
            if (user == null)
            {
                return(false);
            }

            //if (user.IsGuest())
            //{
            //    return false;
            //}

            return(await Task.FromResult(true));
        }
Esempio n. 4
0
        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));
        }
Esempio n. 5
0
        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));
        }
Esempio n. 6
0
        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);
                }
            }
        }
Esempio n. 8
0
        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));
        }
Esempio n. 9
0
        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));
        }
Esempio n. 10
0
        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);
            }
        }
Esempio n. 11
0
        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);
            }
        }
Esempio n. 12
0
        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);
        }
Esempio n. 13
0
        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);
        }
Esempio n. 14
0
        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);
        }
Esempio n. 15
0
        private async Task <bool> IsForumModerator(KoreUser user)
        {
            var roles = await membershipService.GetRolesForUser(user.Id);

            return(roles.Any(x => x.Name == Constants.Roles.ForumModerators));
        }
Esempio n. 16
0
        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);
        }