コード例 #1
0
        private async Task SendUserInviteEmailAsync(UserBasic userDisplay, string from, string fromEmail, IUser to, string message)
        {
            var token = await UserManager.GenerateEmailConfirmationTokenAsync((int)userDisplay.Id);

            var inviteToken = string.Format("{0}{1}{2}",
                                            (int)userDisplay.Id,
                                            WebUtility.UrlEncode("|"),
                                            token.ToUrlBase64());

            // Get an mvc helper to get the URL
            var http      = EnsureHttpContext();
            var urlHelper = new UrlHelper(http.Request.RequestContext);
            var action    = urlHelper.Action("VerifyInvite", "BackOffice",
                                             new
            {
                area   = GlobalSettings.GetUmbracoMvcArea(),
                invite = inviteToken
            });

            // Construct full URL using configured application URL (which will fall back to request)
            var applicationUri = RuntimeState.ApplicationUrl;
            var inviteUri      = new Uri(applicationUri, action);

            var emailSubject = Services.TextService.Localize("user", "inviteEmailCopySubject",
                                                             //Ensure the culture of the found user is used for the email!
                                                             UserExtensions.GetUserCulture(to.Language, Services.TextService, GlobalSettings));
            var emailBody = Services.TextService.Localize("user", "inviteEmailCopyFormat",
                                                          //Ensure the culture of the found user is used for the email!
                                                          UserExtensions.GetUserCulture(to.Language, Services.TextService, GlobalSettings),
                                                          new[] { userDisplay.Name, from, message, inviteUri.ToString(), fromEmail });

            await UserManager.EmailService.SendAsync(
                //send the special UmbracoEmailMessage which configures it's own sender
                //to allow for events to handle sending the message if no smtp is configured
                new UmbracoEmailMessage(new EmailSender(true))
            {
                Body        = emailBody,
                Destination = userDisplay.Email,
                Subject     = emailSubject
            });
        }
コード例 #2
0
        private bool UpdateMemberProperties(IUser user, BackOfficeIdentityUser identityUser)
        {
            var anythingChanged = false;

            //don't assign anything if nothing has changed as this will trigger the track changes of the model

            if (identityUser.IsPropertyDirty("LastLoginDateUtc") ||
                (user.LastLoginDate != default(DateTime) && identityUser.LastLoginDateUtc.HasValue == false) ||
                identityUser.LastLoginDateUtc.HasValue && user.LastLoginDate.ToUniversalTime() != identityUser.LastLoginDateUtc.Value)
            {
                anythingChanged = true;
                //if the LastLoginDate is being set to MinValue, don't convert it ToLocalTime
                var dt = identityUser.LastLoginDateUtc == DateTime.MinValue ? DateTime.MinValue : identityUser.LastLoginDateUtc.Value.ToLocalTime();
                user.LastLoginDate = dt;
            }
            if (identityUser.IsPropertyDirty("LastPasswordChangeDateUtc") ||
                (user.LastPasswordChangeDate != default(DateTime) && identityUser.LastPasswordChangeDateUtc.HasValue == false) ||
                identityUser.LastPasswordChangeDateUtc.HasValue && user.LastPasswordChangeDate.ToUniversalTime() != identityUser.LastPasswordChangeDateUtc.Value)
            {
                anythingChanged             = true;
                user.LastPasswordChangeDate = identityUser.LastPasswordChangeDateUtc.Value.ToLocalTime();
            }
            if (identityUser.IsPropertyDirty("EmailConfirmed") ||
                (user.EmailConfirmedDate.HasValue && user.EmailConfirmedDate.Value != default(DateTime) && identityUser.EmailConfirmed == false) ||
                ((user.EmailConfirmedDate.HasValue == false || user.EmailConfirmedDate.Value == default(DateTime)) && identityUser.EmailConfirmed))
            {
                anythingChanged         = true;
                user.EmailConfirmedDate = identityUser.EmailConfirmed ? (DateTime?)DateTime.Now : null;
            }
            if (identityUser.IsPropertyDirty("Name") &&
                user.Name != identityUser.Name && identityUser.Name.IsNullOrWhiteSpace() == false)
            {
                anythingChanged = true;
                user.Name       = identityUser.Name;
            }
            if (identityUser.IsPropertyDirty("Email") &&
                user.Email != identityUser.Email && identityUser.Email.IsNullOrWhiteSpace() == false)
            {
                anythingChanged = true;
                user.Email      = identityUser.Email;
            }
            if (identityUser.IsPropertyDirty("AccessFailedCount") &&
                user.FailedPasswordAttempts != identityUser.AccessFailedCount)
            {
                anythingChanged             = true;
                user.FailedPasswordAttempts = identityUser.AccessFailedCount;
            }
            if (user.IsLockedOut != identityUser.IsLockedOut)
            {
                anythingChanged  = true;
                user.IsLockedOut = identityUser.IsLockedOut;

                if (user.IsLockedOut)
                {
                    //need to set the last lockout date
                    user.LastLockoutDate = DateTime.Now;
                }
            }
            if (identityUser.IsPropertyDirty("UserName") &&
                user.Username != identityUser.UserName && identityUser.UserName.IsNullOrWhiteSpace() == false)
            {
                anythingChanged = true;
                user.Username   = identityUser.UserName;
            }
            if (identityUser.IsPropertyDirty("PasswordHash") &&
                user.RawPasswordValue != identityUser.PasswordHash && identityUser.PasswordHash.IsNullOrWhiteSpace() == false)
            {
                anythingChanged       = true;
                user.RawPasswordValue = identityUser.PasswordHash;
            }

            if (identityUser.IsPropertyDirty("Culture") &&
                user.Language != identityUser.Culture && identityUser.Culture.IsNullOrWhiteSpace() == false)
            {
                anythingChanged = true;
                user.Language   = identityUser.Culture;
            }
            if (identityUser.IsPropertyDirty("StartMediaIds") &&
                user.StartMediaIds.UnsortedSequenceEqual(identityUser.StartMediaIds) == false)
            {
                anythingChanged    = true;
                user.StartMediaIds = identityUser.StartMediaIds;
            }
            if (identityUser.IsPropertyDirty("StartContentIds") &&
                user.StartContentIds.UnsortedSequenceEqual(identityUser.StartContentIds) == false)
            {
                anythingChanged      = true;
                user.StartContentIds = identityUser.StartContentIds;
            }
            if (user.SecurityStamp != identityUser.SecurityStamp)
            {
                anythingChanged    = true;
                user.SecurityStamp = identityUser.SecurityStamp;
            }

            // TODO: Fix this for Groups too
            if (identityUser.IsPropertyDirty("Roles") || identityUser.IsPropertyDirty("Groups"))
            {
                var userGroupAliases = user.Groups.Select(x => x.Alias).ToArray();

                var identityUserRoles  = identityUser.Roles.Select(x => x.RoleId).ToArray();
                var identityUserGroups = identityUser.Groups.Select(x => x.Alias).ToArray();

                var combinedAliases = identityUserRoles.Union(identityUserGroups).ToArray();

                if (userGroupAliases.ContainsAll(combinedAliases) == false ||
                    combinedAliases.ContainsAll(userGroupAliases) == false)
                {
                    anythingChanged = true;

                    //clear out the current groups (need to ToArray since we are modifying the iterator)
                    user.ClearGroups();

                    //go lookup all these groups
                    var groups = _userService.GetUserGroupsByAlias(combinedAliases).Select(x => x.ToReadOnlyGroup()).ToArray();

                    //use all of the ones assigned and add them
                    foreach (var group in groups)
                    {
                        user.AddGroup(group);
                    }

                    //re-assign
                    identityUser.Groups = groups;
                }
            }

            //we should re-set the calculated start nodes
            identityUser.CalculatedMediaStartNodeIds   = user.CalculateMediaStartNodeIds(_entityService);
            identityUser.CalculatedContentStartNodeIds = user.CalculateContentStartNodeIds(_entityService);

            //reset all changes
            identityUser.ResetDirtyProperties(false);

            return(anythingChanged);
        }
コード例 #3
0
 public static FormsAuthenticationTicket UmbracoLoginWebApi(this HttpResponseMessage response, IUser user)
 {
     throw new NotSupportedException("This method is not supported and should not be used, it has been removed in Umbraco 7.4");
 }