public int Save(UserAccountDto userAccount)
        {
            var userEntity = new User();
            userEntity.FirstName = userAccount.Name;
            userEntity.EmailAddress = userAccount.EmailAddress;
            userEntity.Password = userAccount.Password;
            userEntity.Avatar = userAccount.GravatarUrl;
            userEntity.CreatedDate = DateTime.UtcNow;

            db.Users.Add(userEntity);
            db.SaveChanges();
            return userEntity.ID;

        }
        /// <summary>
        /// Creates a salted PBKDF2 hash of the password.
        /// </summary>
        /// <param name="password">The password to hash.</param>
        /// <returns>The hash of the password.</returns>
        public static void CreateHash(User user,string password)
        {
            // Generate a random salt
            RNGCryptoServiceProvider csprng = new RNGCryptoServiceProvider();
            byte[] salt = new byte[SALT_BYTES];
            csprng.GetBytes(salt);

            // Hash the password and encode the parameters
            byte[] hash = PBKDF2(password, salt, PBKDF2_ITERATIONS, HASH_BYTES);
            //user.PasswordSalt = Convert.ToBase64String(salt);
            user.Password= PBKDF2_ITERATIONS + ":" +
                Convert.ToBase64String(salt) + ":" +
                Convert.ToBase64String(hash);
        }
        public void SaveActivityForNewUserJoinedTeam(TeamMemberRequest teamMemberRequest, User user,int currentUserId,int teamId)
        {
            var activity = new Activity { CreatedByID = currentUserId, TeamID = teamId };
            activity.ObjectID = user.ID;
            activity.ObjectType = "User";
            activity.ActivityDesc = "Joined team " + teamMemberRequest.Team.Name;
            activity.NewState = user.FirstName;

            var result = repo.SaveActivity(activity);
            if (!result.Status)
            {
                var log = new Logger("Email");
                log.Error(result);
            }
        }
 public void SendNewAccountCreatedEmail(User user)
 {
     var emailTemplate = repo.GetEmailTemplate("NewAccount");
     if (emailTemplate != null)
     {
         string emailSubject = emailTemplate.EmailSubject;
         string emailBody = emailTemplate.EmailBody;
         Email email = new Email();
         email.ToAddress.Add(user.EmailAddress);
       
         emailBody = emailBody.Replace("@userName", user.FirstName);
         email.Body = emailBody;
         email.Subject = emailSubject;
         email.Send();
     }
 }
        public static void SetNewPassword(User user, string newPassword)
        {

                 ICryptoService cryptoService = new PBKDF2();
         int SALT_SIZE = 16;
         int HASH_ITERATIONS = 20;

         PasswordHash.CreateHash(user,newPassword);
            //a new password hash is generated from a generated salt with the passed settings
            // user.Password = cryptoService.Compute(newPassword, SALT_SIZE, HASH_ITERATIONS);
            //assigning the generated salt to the user
            //user.PasswordSalt = cryptoService.Salt;
        }
        public OperationStatus SaveUser(User user)
        {
            try
            {
                if (user.ID == 0)
                {
                    user.CreatedDate = DateTime.UtcNow;
                    db.Users.Add(user);
                }
                else
                {
                    db.Entry(user).State = EntityState.Modified;
                }
                db.SaveChanges();
            }
            catch (DbEntityValidationException dbEx)
            {
                return  OperationStatus.CreateFromException("error", dbEx);
            }
            catch (Exception ex)
            {
                var res = new OperationStatus();

            }
            return new OperationStatus { OperationID = user.ID, Status = true };
        }