public ClaimsIdentityDTO GetDTOFromUser(ApplicationUser user)
        {
            Mapper.Initialize(cfg =>
            {
                cfg.CreateMap <ApplicationUser, ClaimsIdentityDTO>();
                cfg.CreateMap <RoleClaim, ClaimDTO>();
                cfg.CreateMap <Institution, InstitutionDTO>();
            });
            ClaimsIdentityDTO result = Mapper.Map <ClaimsIdentityDTO>(user);

            result.Claims = _accountService.GetClaimsDictionaryByUser(user);
            return(result);
        }
        public async Task <ClaimsIdentityDTO> SaveUser(ClaimsIdentityDTO claimsDTO)
        {
            var applicationUser = string.IsNullOrEmpty(claimsDTO.Id) ? new ApplicationUser() : _accountService.GetById(claimsDTO.Id);
            var mapper          = new MapperConfiguration(cfg => {
                cfg.CreateMap <ClaimsIdentityDTO, ApplicationUser>().ForMember(dest => dest.Subscriptions, opt => opt.UseValue <IList <InstitutionDTO> >(null)).ForMember(dest => dest.Claims, opt => opt.Ignore());
            }).CreateMapper();

            mapper.Map(claimsDTO, applicationUser);
            applicationUser.UserName = claimsDTO.Email;
            bool sendConfirmationEmail = false;

            IdentityResult result = null;

            if (string.IsNullOrEmpty(applicationUser.Id))
            {
                applicationUser.Id = Guid.NewGuid().ToString();
                result             = await((ApplicationUserService)_accountService.UserService).CreateAsync(applicationUser, claimsDTO.Password);
                if (!result.Succeeded)
                {
                    throw new Exception(result.Errors.ToString());
                }
                ((ApplicationUserService)_accountService.UserService).AddToRole(applicationUser.Id, "User");
                sendConfirmationEmail = true;
            }

            applicationUser.Subscriptions.Clear();
            if (claimsDTO.SubscriptionType == "SELECTED")
            {
                foreach (InstitutionDTO inst in claimsDTO.Subscriptions)
                {
                    Institution currentInstitution = _institutionService.GetById(inst.Id);
                    if (currentInstitution == null)
                    {
                        continue;
                    }
                    if (!applicationUser.Subscriptions.Contains(currentInstitution))
                    {
                        applicationUser.Subscriptions.Add(currentInstitution);
                    }
                }
            }

            int x         = _accountService.Save();
            var resultDTO = GetDTOFromUser(applicationUser);

            if (sendConfirmationEmail)
            {
                await this.SendConfirmEmail(resultDTO);
            }
            return(resultDTO);
        }
        public async Task <object> SendResetPassword([FromBody] ClaimsIdentityDTO userModel)
        {
            ApplicationUser user = await UserManager.FindByEmailAsync(userModel.Email);

            if (user == null)
            {
                return new { error = true, message = "email_not_found" }
            }
            ;
            Dictionary <string, string> replacements = new Dictionary <string, string>();

            replacements.Add("LINK", "/reset-password/" + HttpContext.Current.Server.UrlEncode(user.Id) + "?token=" + HttpUtility.UrlEncode(this.UserManager.GeneratePasswordResetToken(user.Id)));
            replacements.Add("FULLNAME", user.FirstName + " " + user.LastName);
            Notification not = _notificationSevice.ConstructNotification("email.reset-password.subject", "email.masterTemplate", "email.reset-password.body", "email.defaultFrom", replacements);

            not.To = user.Email;
            this._notificationSevice.AddNotification(not);
            return(new { result = "success", message = "email_sent" });
        }