public JsonResult Delete(string model)
        {
            try
            {
                UserInvitationViewModel invitation = JsonConvert.DeserializeObject <UserInvitationViewModel>(model);
                var user = _userManager.FindByEmail(invitation.UserEmail);
                if (user != null)
                {
                    if (_userManager.Delete(user) == IdentityResult.Success)
                    {
                        Response.StatusCode = (int)System.Net.HttpStatusCode.OK;
                        return(Json(string.Empty, JsonRequestBehavior.AllowGet));
                    }
                }

                Response.StatusCode = (int)System.Net.HttpStatusCode.Conflict;
                return(JsonError("User does not exist or cannot be deleted."));
            }
            catch (Exception ex)
            {
                string message = string.Format("Deleting user fails. {0}", ex.Message);
                DojoLogger.Warn(message, typeof(UserRoleManagerController));

                Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError;
                return(Json(message, JsonRequestBehavior.AllowGet));
            }
        }
        private void SendInvitationEmail(string userId, UserInvitationViewModel invitation)
        {
            try
            {
                var           recipient = invitation.UserEmail;
                List <string> Ccs       = new List <string>()
                {
                    SettingsHelper.GetSafeSetting(AppConstants.EMAIL_SUPPORT_KEY, string.Empty),
                    //SettingsHelper.GetSafeSetting(AppConstants.EMAIL_DEVELOPER_KEY, string.Empty),
                };
                if (!string.IsNullOrEmpty(recipient))
                {
                    string          pageUrl = Request.Url.GetLeftPart(UriPartial.Authority);
                    string          url     = string.Format("{0}{1}?id={2}&invite={3}", pageUrl, "/Account/Accept", userId, invitation.InvitationCode);
                    ResourceManager rm      = new ResourceManager("Senstay.Dojo.AppResources", Assembly.GetExecutingAssembly());
                    var             subject = rm.GetString("InvitationEmailSubject");
                    var             body    = rm.GetString("InvitationEmailTemplate");
                    var             content = string.Format(body, invitation.UserName, invitation.InvitationCode, url);
                    Helpers.EmailHelper.SendEmail(recipient, subject, content, Ccs);

                    string message = string.Format("Invitation email is sent to {0} on {1}", recipient, DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss zzz"));
                    DojoLogger.Info(message, typeof(UserInvitationController));
                }
                else
                {
                    string message = "Invitation recipient email is empty or null.";
                    DojoLogger.Warn(message, typeof(UserInvitationController));
                }
            }
            catch (Exception ex)
            {
                string message = string.Format("Send invitation email error. {0}", ex.Message + ex.StackTrace);
                DojoLogger.Error(message, typeof(UserInvitationController));
            }
        }
예제 #3
0
        public ActionResult ExternalAccept(UserInvitationViewModel model)
        {
            string returnUrl = string.Format("/Account/ExternalInvitationRedirect/?id={0}&phone={1}", model.UserId, model.MobilePhone);

            return(new ChallengeResult(model.Provider, Url.Action("ExternalInvitationLoginCallback", "Account",
                                                                  new { ReturnUrl = returnUrl })));
        }
        public JsonResult Create(string model)
        {
            try
            {
                UserInvitationViewModel invitation = JsonConvert.DeserializeObject <UserInvitationViewModel>(model);
                if (_userManager.FindByEmail(invitation.UserEmail) != null)
                {
                    Response.StatusCode = (int)System.Net.HttpStatusCode.Conflict;
                    return(JsonError("User already exists."));
                }

                DojoLogger.Trace(string.Format("Inviting user '{0}', email '{1} to join Dojo.", invitation.UserName, invitation.UserEmail), typeof(UserRoleManagerController));

                ApplicationUser newUser = new ApplicationUser()
                {
                    UserName = invitation.UserName,
                    Email    = invitation.UserEmail,
                };

                IdentityResult result = _userManager.Create(newUser, invitation.InvitationCode);
                DojoLogger.Trace(string.Format("Creating User '{0}', email '{1} in DB.", invitation.UserName, invitation.UserEmail), typeof(UserRoleManagerController));
                if (result == IdentityResult.Success)
                {
                    newUser = _userManager.FindByEmail(invitation.UserEmail);
                    _userManager.AddClaim(newUser.Id, new Claim(AppConstants.INVITATION_CLAIM, "1"));
                    _userManager.AddClaim(newUser.Id, new Claim(AppConstants.INVITATION_CODE_CLAIM, invitation.InvitationCode));
                    _userManager.AddClaim(newUser.Id, new Claim(AppConstants.EXPIRATION_DATE_CLAIM, invitation.ExpirationDate.ToString("MM/dd/yyyy")));
                    _userManager.AddClaim(newUser.Id, new Claim(AppConstants.ROLES_CLAIM, StringifyTuples(invitation.UserRoles)));

                    DojoLogger.Trace(string.Format("Sending invitation email to User '{0}', ID {1}.", invitation.UserName, newUser.Id), typeof(UserRoleManagerController));

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

                    Response.StatusCode = (int)System.Net.HttpStatusCode.OK;
                    return(Json(invitation, JsonRequestBehavior.AllowGet)); // keep claims out of it
                }
                else
                {
                    Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError;
                    return(Json("Unable to create invited user.", 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));
            }
        }
예제 #5
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", "/"));
        }
예제 #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));
            }
        }
        public ActionResult InviteToContest(UserInvitationViewModel model)
        {
            var loggedUserId = this.User.Identity.GetUserId();
            var contest = this.Data.Contests.Find(model.ContestId);

            if (!this.ModelState.IsValid)
            {
                throw new HttpException();
            }

            if (loggedUserId != contest.CreatorId)
            {
                throw new HttpException();
            }

            if (contest.Invited.Any(p => p.Id == model.UserId) || contest.Participants.Any(p => p.Id == model.UserId))
            {
                return this.Content("User already invited", "text/html");
            }

            var invitedUser = this.Data.Users.Find(model.UserId);
            var loggedUser = this.Data.Users.Find(loggedUserId);

            invitedUser.InvitedContests.Add(contest);
            contest.Invited.Add(invitedUser);

            var text = string.Format("Hello, {0}, I'd like you to join the contest {1}", invitedUser.UserName, contest.Title);

            var notification = new Notification

            {
                Text = text,
                DateSent = DateTime.Now,
                ReceiverId = model.UserId,
                Receiver = invitedUser,
                SenderId = loggedUserId,
                Sender = loggedUser,
                ContestId = contest.Id
            };

            this.Data.Notifications.Add(notification);
            this.Data.SaveChanges();

            var message = string.Format("Invitation to {0} sent", invitedUser.UserName);

            return this.Content(message, "text/html");
        }