Beispiel #1
0
        public bool LoginExternal(string email, string loginProvider, string providerKey)
        {
            ExternalLoginInfo loginInfo = new ExternalLoginInfo();

            loginInfo.Email = email;
            loginInfo.Login = new UserLoginInfo(loginProvider, providerKey);

            var    result = _signInManager.ExternalSignInAsync(loginInfo, true).Result;
            ASUser user   = _userManager.FindByEmail(loginInfo.Email);

            if (result == SignInStatus.Success)
            {
                ProcessAfterLogin(true, user);
                return(true);
            }

            if (user != null)
            {
                IdentityResult addLoginResult = _userManager.AddLogin(user.Id, loginInfo.Login);

                if (!addLoginResult.Succeeded)
                {
                    throw new ASException(string.Join(";", addLoginResult.Errors));
                }
                bool signInResult = _signInManager.ExternalSignInAsync(loginInfo, isPersistent: true).Result == SignInStatus.Success;

                if (signInResult)
                {
                    ProcessAfterLogin(true, user);
                }

                return(signInResult);
            }
            return(false);
        }
Beispiel #2
0
        public void ChangePassword(int userId, string currentPassword, string newPassword)
        {
            ASUser user = this._userManager.FindById(userId);

            SignInStatus status = _signInManager.PasswordSignInAsync(user.UserName, currentPassword, false, false).Result;

            if (status != SignInStatus.Success)
            {
                throw new ASException(this._resourceManager.GetString("Membership_LoginFailed"));
            }

            string         token   = _userManager.GeneratePasswordResetToken(userId);
            IdentityResult iResult = _userManager.ResetPassword(userId, token, newPassword);

            if (!iResult.Succeeded)
            {
                throw new ASException(string.Join(";", iResult.Errors));
            }

            UserActivity activity = new UserActivity();

            activity.UserId           = user.Id;
            activity.UserActivityType = UserActivityType.PasswordChange;
            _dbContext.Set <UserActivity>().Add(activity);
        }
Beispiel #3
0
        public bool Login(string userNameOrEmail, string password, bool isPersistent)
        {
            this.LogOut(); //LogOut first
            _contextProvider.LoginAttemptCount++;
            ASUser user = this._userManager.FindByName(userNameOrEmail);

            if (user == null)
            {
                user = this._userManager.FindByEmail(userNameOrEmail);
            }

            if (user == null)
            {
                throw new ASException(this._resourceManager.GetString("Membership_UserNotFound"));
            }

            SignInStatus status = _signInManager.PasswordSignInAsync(user.UserName, password, isPersistent, false).Result;

            UserActivity activity;

            if (status != SignInStatus.Success)
            {
                activity                  = new UserActivity();
                activity.UserId           = user.Id;
                activity.UserActivityType = UserActivityType.InvalidPasswordEntry;
                _dbContext.Set <UserActivity>().Add(activity);
                _dbContext.SaveChanges();
                throw new ASException(this._resourceManager.GetString("Membership_LoginFailed"));
            }
            ProcessAfterLogin(isPersistent, user);

            return(true);
        }
Beispiel #4
0
        /// <summary>
        /// Starts "I forgot My Password" flow. Sends users e-mail address a link with a token to reset his/her password
        /// Throws exception if user is not found
        /// </summary>
        /// <param name="userNameOrEmail">Username or e-mail address of the user</param>
        /// <returns>Generated token</returns>
        public PasswordResetToken StartForgotPasswordProcess(string userNameOrEmail)
        {
            ASUser user = _userManager.FindByEmail(userNameOrEmail);

            if (user == null)
            {
                user = _userManager.FindByName(userNameOrEmail);

                if (user == null)
                {
                    throw new ASException(this._resourceManager.GetString("Membership_UserNotFound"));
                }
            }
            if (this._settingManager.GetContainer <EMailSetting>().Default == null)
            {
                throw new ASException(this._resourceManager.GetString("EMail_UserErrorMessage"));
            }

            PasswordResetToken token = new PasswordResetToken();

            token.Token  = this._userManager.GeneratePasswordResetToken(user.Id);
            token.UserId = user.Id;
            Dictionary <string, object> viewBag = new Dictionary <string, object>();

            viewBag.Add("UserName", user.UserName);
            viewBag.Add("ResetLink", string.Concat(this._contextProvider.RootAddress, "ResetPassword?token="
                                                   , this._appManager.EncodeURL(token.Token)));
            EMail mail = new EMail();

            mail.Body = this._templateService.GetBody("ForgotPassword", viewBag);

            mail.EmailSettingName          = this._settingManager.GetContainer <EMailSetting>().Default.Name;
            mail.FromAddress               = this._settingManager.GetContainer <EMailSetting>().Default.FromAddress;
            mail.FromName                  = this._settingManager.GetContainer <EMailSetting>().Default.FromDisplayName;
            mail.Receivers                 = user.Email;
            mail.SmtpClientTimeOut         = this._settingManager.GetContainer <EMailSetting>().Default.TimeOut;
            mail.SmtpEnableSsl             = this._settingManager.GetContainer <EMailSetting>().Default.EnableSsl;
            mail.SmtpHostAddress           = this._settingManager.GetContainer <EMailSetting>().Default.Host;
            mail.SmtpPassword              = this._settingManager.GetContainer <EMailSetting>().Default.Password;
            mail.SmtpPort                  = this._settingManager.GetContainer <EMailSetting>().Default.Port;
            mail.SmtpUseDefaultCredentials = this._settingManager.GetContainer <EMailSetting>().Default.DefaultCredentials;
            mail.SmtpUserName              = this._settingManager.GetContainer <EMailSetting>().Default.UserName;
            mail.Subject = this._templateService.GetSubject("ForgotPassword", viewBag);
            _mailService.Enqueue(mail);
            token.EMail = mail;
            _dbContext.Set <PasswordResetToken>().Add(token);

            UserActivity activity = new UserActivity();

            activity.UserId           = user.Id;
            activity.UserActivityType = UserActivityType.PasswordResetRequest;
            _dbContext.Set <UserActivity>().Add(activity);

            _dbContext.SaveChanges();

            return(token);
        }
Beispiel #5
0
        public bool ResetPasswordWithoutToken(string userName, string newPassword)
        {
            ASUser user  = _userManager.FindByName(userName);
            string token = this._userManager.GeneratePasswordResetToken(user.Id);

            bool result = _userManager.ResetPassword(user.Id, token, newPassword) == IdentityResult.Success;

            if (result)
            {
                UserActivity activity = new UserActivity();
                activity.UserId           = user.Id;
                activity.UserActivityType = UserActivityType.PasswordReset;
                _dbContext.Set <UserActivity>().Add(activity);

                _dbContext.SaveChanges();
            }
            return(result);
        }
Beispiel #6
0
        private void ProcessAfterLogin(bool isPersistent, ASUser user)
        {
            UserActivity activity;

            var identity = this._userManager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie);

            this._signInManager.AuthenticationManager.SignIn(new AuthenticationProperties()
            {
                IsPersistent = isPersistent
            }, identity);

            user.LastLogin = DateTime.UtcNow;
            this._userManager.Update(user);

            activity                  = new UserActivity();
            activity.UserId           = user.Id;
            activity.UserActivityType = UserActivityType.LogIn;
            _dbContext.Set <UserActivity>().Add(activity);
            _dbContext.SaveChanges();
            _contextProvider.LoginAttemptCount = 0;
        }
Beispiel #7
0
        public void DeleteUser(string userName)
        {
            ASUser user = _userManager.FindByName(userName);

            if (user == null)
            {
                return;
            }

            IList <string> userRoles = _userManager.GetRoles(user.Id);

            foreach (ASUserLogin login in user.Logins)
            {
                _userManager.RemoveLogin(login.UserId, new UserLoginInfo(login.LoginProvider, login.ProviderKey));
            }

            foreach (string userRole in userRoles)
            {
                _userManager.RemoveFromRole(user.Id, userRole);
            }

            UserActivity activity = new UserActivity();

            activity.UserId           = user.Id;
            activity.UserActivityType = UserActivityType.UserDeleted;
            IdentityResult iResult = _userManager.Delete(user);

            if (!iResult.Succeeded)
            {
                throw new ASException(string.Join(";", iResult.Errors));
            }

            _dbContext.Set <RecordAuditLog>().Add(GenerateAuditLog("DELETE", user));
            _dbContext.Set <UserActivity>().Add(activity);
            _dbContext.SaveChanges();
        }
Beispiel #8
0
        public void CreateUser(string userName, string password, string email, List <string> roles)
        {
            IdentityResult iResult;

            //Check if roles exists
            foreach (string role in roles)
            {
                if (!(_roleManager.RoleExistsAsync(role).Result))
                {
                    throw new ASException(this._resourceManager.GetString("Membership_RoleDoesNotExist"));
                }
            }
            //Now create user
            ASUser user = new ASUser();

            user.UserName  = userName;
            user.Email     = email;
            user.CreatedOn = DateTime.UtcNow;
            user.CreatedBy = this._contextProvider.UserName;
            iResult        = _userManager.CreateAsync(user, password).Result;
            if (!iResult.Succeeded)
            {
                throw new ASException(string.Join(";", iResult.Errors));
            }


            foreach (string role in roles)
            {
                iResult = _userManager.AddToRole(user.Id, role);
                if (!iResult.Succeeded)
                {
                    throw new ASException(string.Join(";", iResult.Errors));
                }
            }

            Dictionary <string, object> viewBag = new Dictionary <string, object>();

            viewBag.Add("UserName", user.UserName);
            viewBag.Add("Url", this._contextProvider.RootAddress);
            EMail mail = new EMail();

            mail.Body = this._templateService.GetBody("Newuser", viewBag);

            if (this._settingManager.GetContainer <EMailSetting>().Default != null)
            {
                mail.EmailSettingName          = this._settingManager.GetContainer <EMailSetting>().Default.Name;
                mail.FromAddress               = this._settingManager.GetContainer <EMailSetting>().Default.FromAddress;
                mail.FromName                  = this._settingManager.GetContainer <EMailSetting>().Default.FromDisplayName;
                mail.Receivers                 = user.Email;
                mail.SmtpClientTimeOut         = this._settingManager.GetContainer <EMailSetting>().Default.TimeOut;
                mail.SmtpEnableSsl             = this._settingManager.GetContainer <EMailSetting>().Default.EnableSsl;
                mail.SmtpHostAddress           = this._settingManager.GetContainer <EMailSetting>().Default.Host;
                mail.SmtpPassword              = this._settingManager.GetContainer <EMailSetting>().Default.Password;
                mail.SmtpPort                  = this._settingManager.GetContainer <EMailSetting>().Default.Port;
                mail.SmtpUseDefaultCredentials = this._settingManager.GetContainer <EMailSetting>().Default.DefaultCredentials;
                mail.SmtpUserName              = this._settingManager.GetContainer <EMailSetting>().Default.UserName;
                mail.Subject = this._templateService.GetSubject("NewUser", viewBag);
                _mailService.Enqueue(mail);
            }
            UserActivity activity = new UserActivity();

            activity.UserId           = user.Id;
            activity.UserActivityType = UserActivityType.UserCreation;
            _dbContext.Set <UserActivity>().Add(activity);
            _dbContext.SaveChanges();
        }