public ActionResult AccountActivation(Guid userId, Guid token)
        {
            // check for the user
            var user = ValidateUserActivation(userId, token, SystemUserAttributeNames.AccountActivationToken);

            if (user == null)
                return RedirectToRoute(SystemRouteNames.Login);

            // valid user with a valid token, we need him to set the security settings
            var model = new AccountActivationModel
            {
                UserId = user.RowId,
                Token = token
            };

            PrepareAccountActivationModel(model);

            return View(model);
        }
        public ActionResult AccountActivation(AccountActivationModel model)
        {
            if (ModelState.IsValid)
            {
                var user = ValidateUserActivation(model.UserId, model.Token, SystemUserAttributeNames.AccountActivationToken);

                // set the question and answers and the security verification image for this user in the database
                if (user != null)
                {
                    // set this user unique password
                    ChangePasswordRequest changeRequest = new ChangePasswordRequest(user.Username,
                        false, model.Password);
                    var changeResult = userRegistrationService.ChangePassword(changeRequest);

                    if (changeResult.Success)
                    {
                        // activate this user account now
                        user.CurrentPublishingStatus = PublishingStatus.Active;
                        user.LastActivityDate = DateTime.UtcNow;
                        userService.Update(user);

                        // need to delete the activation token
                        attributeService.SaveAttribute(user, SystemUserAttributeNames.AccountActivationToken, string.Empty);

                        SuccessNotification("Your account has been activated");
                        return RedirectToRoute(SystemRouteNames.Login);
                    }

                    ErrorNotification(changeResult.ErrorMessages);
                }
            }

            // reached here, means error, show the form again
            PrepareAccountActivationModel(model);
            return View(model);
        }
        private void PrepareAccountActivationModel(AccountActivationModel model)
        {
            Guard.IsNotNull(model, "model");

            // retrieve the user
            var user = userService.GetById(model.UserId);
            if (user != null)
            {
                model.ContactName = user.GetFullName();
                model.UserName = user.Username;
            }
        }