Пример #1
0
 private string GetStartPage(string userName, bool useEmail = false)
 {
     ViewBag.StartPageClass = "fa-heart-o";
     try
     {
         ApplicationUser appUser = _userManager.FindByName(userName);
         if (useEmail)
         {
             appUser = _userManager.FindByEmail(userName);
         }
         if (appUser != null)
         {
             string page = ClaimHelper.GetSafeClaim(appUser, AppConstants.FAVORITE_PAGE);
             if (page != string.Empty)
             {
                 ViewBag.StartPageClass = "fa-heart red";
             }
             return(page);
         }
     }
     catch
     {
     }
     return(string.Empty);
 }
        public JsonResult Retrieve()
        {
            if (_userManager != null && _userManager.SupportsUserRole)
            {
                var appUsers      = _userManager.Users.ToList();
                var filteredUsers = appUsers.Where(u => u.Claims.Any(t => t.ClaimType == AppConstants.INVITATION_CLAIM && t.ClaimValue == "1"));
                var invitedUsers  = filteredUsers.Select(u =>
                                                         new UserInvitationViewModel
                {
                    UserId          = u.Id,
                    UserName        = u.UserName,
                    UserEmail       = u.Email,
                    InvitationCode  = ClaimHelper.GetSafeClaim(u, AppConstants.INVITATION_CODE_CLAIM, string.Empty),
                    ExpirationDate  = DateTime.Parse(ClaimHelper.GetSafeClaim(u, AppConstants.EXPIRATION_DATE_CLAIM, DateTime.Today.Date.AddDays(-1).ToShortDateString())),
                    UserRoles       = TuplifyString(ClaimHelper.GetSafeClaim(u, AppConstants.ROLES_CLAIM, string.Empty)),
                    Password        = string.Empty,
                    ConfirmPassword = string.Empty,
                })
                                    .ToList();

                string message = string.Format("Total of {0:d} users are retrieved for invitation.", invitedUsers.Count());
                DojoLogger.Trace(message, typeof(UserRoleManagerController));

                return(Json(invitedUsers, JsonRequestBehavior.AllowGet));
            }
            else if (!_userManager.SupportsUserRole)
            {
                return(JsonError("User Role is not suported."));
            }
            else
            {
                return(JsonError("Role manager does not exist"));
            }
        }
Пример #3
0
        private void SetExternalInvitationRoles(ApplicationUser externalUser, string phone)
        {
            //----------------------------------------------------------------------------------------------------
            // when the external user accepts the invitation, we remove the invitation and roles claims for the
            // internal user, confirm the email and add phone # for the external user.
            //----------------------------------------------------------------------------------------------------
            if (externalUser != null)
            {
                string   roleClaim = ClaimHelper.GetSafeClaim(externalUser, AppConstants.ROLES_CLAIM, string.Empty);
                string[] roles     = roleClaim.Split(new char[] { ',' });
                if (roles.Length > 0)
                {
                    _userManager.AddToRoles(externalUser.Id, roles);
                }

                externalUser.EmailConfirmed = true;
                externalUser.PhoneNumber    = phone;
                _userManager.Update(externalUser);

                // remove invitation claim for the internal user
                SafeRemoveClaim(externalUser, AppConstants.INVITATION_CLAIM, ClaimHelper.GetSafeClaim(externalUser, AppConstants.INVITATION_CLAIM, "1"));
                SafeRemoveClaim(externalUser, AppConstants.EXPIRATION_DATE_CLAIM, ClaimHelper.GetSafeClaim(externalUser, AppConstants.EXPIRATION_DATE_CLAIM, string.Empty));
                SafeRemoveClaim(externalUser, AppConstants.ROLES_CLAIM, ClaimHelper.GetSafeClaim(externalUser, AppConstants.ROLES_CLAIM, string.Empty));
            }
        }
Пример #4
0
        public async Task <ActionResult> Accept(UserInvitationViewModel model)
        {
            try
            {
                //----------------------------------------------------------------------------------------------------
                // when the user accepts the invitation, we remove the invitation claims and sign the user in;
                // temporary password is the invitation code; also confirm the email as user gets here by email link.
                //----------------------------------------------------------------------------------------------------
                var user = _userManager.FindById(model.UserId);
                if (user != null)
                {
                    user.EmailConfirmed = true;
                    user.PhoneNumber    = model.MobilePhone;
                    _userManager.Update(user);

                    // change user password
                    IdentityResult result = _userManager.ChangePassword(user.Id, model.InvitationCode, model.Password);
                    if (result.Succeeded)
                    {
                        string   roleClaim = ClaimHelper.GetSafeClaim(user, AppConstants.ROLES_CLAIM, string.Empty);
                        string[] roles     = roleClaim.Split(new char[] { ',' });
                        if (roles.Length > 0)
                        {
                            _userManager.AddToRoles(user.Id, roles);
                        }

                        // remove invitation claim for the user
                        SafeRemoveClaim(user, AppConstants.INVITATION_CLAIM, ClaimHelper.GetSafeClaim(user, AppConstants.INVITATION_CLAIM, "1"));
                        SafeRemoveClaim(user, AppConstants.INVITATION_CODE_CLAIM, ClaimHelper.GetSafeClaim(user, AppConstants.INVITATION_CODE_CLAIM, string.Empty));
                        SafeRemoveClaim(user, AppConstants.EXPIRATION_DATE_CLAIM, ClaimHelper.GetSafeClaim(user, AppConstants.EXPIRATION_DATE_CLAIM, string.Empty));
                        SafeRemoveClaim(user, AppConstants.ROLES_CLAIM, ClaimHelper.GetSafeClaim(user, AppConstants.ROLES_CLAIM, string.Empty));

                        user = _userManager.FindById(model.UserId);
                        await SignInManager.SignInAsync(user, isPersistent : false, rememberBrowser : false);

                        return(RedirectToAction("Index", "Home", "/")); // redirect user to home page
                    }
                }
            }
            catch
            {
            }
            // redirect to login page if anything is wrong
            return(RedirectToAction("Login", "Account", "/"));
        }
Пример #5
0
 public JsonResult SetStartPage(string page)
 {
     try
     {
         ApplicationUser appUser = _userManager.FindByName(ClaimsPrincipal.Current.Identity.Name);
         if (appUser != null)
         {
             // keep only one start page
             string oldPage = ClaimHelper.GetSafeClaim(appUser, AppConstants.FAVORITE_PAGE);
             _userManager.RemoveClaim(appUser.Id, new Claim(AppConstants.FAVORITE_PAGE, oldPage));
             _userManager.AddClaim(appUser.Id, new Claim(AppConstants.FAVORITE_PAGE, page));
             return(Json("success", JsonRequestBehavior.AllowGet));
         }
     }
     catch
     {
     }
     return(Json("fail", JsonRequestBehavior.AllowGet));
 }
Пример #6
0
 public ActionResult Accept(string id, string invite)
 {
     try
     {
         //------------------------------------------------------------------------------------------------
         // present the user with the invitation form pre-popualated user name, email and invitation code.
         //------------------------------------------------------------------------------------------------
         var user = _userManager.FindById(id);
         if (user != null)
         {
             var claimValue = ClaimHelper.GetSafeClaim(user, AppConstants.INVITATION_CODE_CLAIM, null);
             if (claimValue != null)
             {
                 var      invitationCode = claimValue;
                 var      expiredOn      = ClaimHelper.GetSafeClaim(user, AppConstants.EXPIRATION_DATE_CLAIM, DateTime.Today.Date.AddDays(-1).ToShortDateString());
                 DateTime expirationDate;
                 if (DateTime.TryParse(expiredOn, out expirationDate) == true)
                 {
                     if (DateTime.Today.Date <= expirationDate && invitationCode == invite)
                     {
                         UserInvitationViewModel invitationModel = new UserInvitationViewModel();
                         invitationModel.UserId         = id;
                         invitationModel.UserName       = user.UserName;
                         invitationModel.UserEmail      = user.Email;
                         invitationModel.InvitationCode = invite;
                         return(View(invitationModel));
                     }
                 }
             }
             else // user has been here before, redirect it to login page
             {
                 return(RedirectToAction("Login"));
             }
         }
     }
     catch
     {
     }
     // redirect to login page if anything is wrong
     return(RedirectToAction("Login"));
 }
        public JsonResult Update(string model)
        {
            try
            {
                UserInvitationViewModel invitation = JsonConvert.DeserializeObject <UserInvitationViewModel>(model);
                var user = _userManager.Users.Where(u => u.Id == invitation.UserId).First();
                if (user == null)
                {
                    Response.StatusCode = (int)System.Net.HttpStatusCode.Conflict;
                    return(JsonError("User does not exist."));
                }
                else
                {
                    user.UserName = invitation.UserName;
                    user.Email    = invitation.UserEmail;
                    _userManager.Update(user);

                    SafeRemoveClaim(user, AppConstants.INVITATION_CODE_CLAIM, ClaimHelper.GetSafeClaim(user, AppConstants.INVITATION_CODE_CLAIM, string.Empty));
                    SafeRemoveClaim(user, AppConstants.EXPIRATION_DATE_CLAIM, ClaimHelper.GetSafeClaim(user, AppConstants.EXPIRATION_DATE_CLAIM, string.Empty));
                    SafeRemoveClaim(user, AppConstants.ROLES_CLAIM, ClaimHelper.GetSafeClaim(user, AppConstants.ROLES_CLAIM, string.Empty));
                    _userManager.AddClaim(user.Id, new Claim(AppConstants.INVITATION_CODE_CLAIM, invitation.InvitationCode));
                    _userManager.AddClaim(user.Id, new Claim(AppConstants.EXPIRATION_DATE_CLAIM, invitation.ExpirationDate.ToString("MM/dd/yyyy")));
                    _userManager.AddClaim(user.Id, new Claim(AppConstants.ROLES_CLAIM, StringifyTuples(invitation.UserRoles)));

                    // send invitation email to user
                    SendInvitationEmail(user.Id, invitation);

                    Response.StatusCode = (int)System.Net.HttpStatusCode.OK;
                    return(Json(invitation, JsonRequestBehavior.AllowGet));
                }
            }
            catch (Exception ex)
            {
                string message = string.Format("Inviting user fails. {0}", ex.Message);
                DojoLogger.Warn(message, typeof(UserRoleManagerController));

                Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError;
                return(Json(message, JsonRequestBehavior.AllowGet));
            }
        }