diff --git a/frontend/src/pages/org-admin/org-users-search-users.js b/frontend/src/pages/org-admin/org-users-search-users.js index 455f2df92e7..b20e3c6bba1 100644 --- a/frontend/src/pages/org-admin/org-users-search-users.js +++ b/frontend/src/pages/org-admin/org-users-search-users.js @@ -26,7 +26,7 @@ class OrgUsersSearchUsersResult extends React.Component { }; render() { - let { orgUsers } = this.props; + let { orgUsers, changeStatus } = this.props; return (
@@ -52,6 +52,7 @@ class OrgUsersSearchUsersResult extends React.Component { toggleDelete={this.props.toggleDelete} onFreezedItem={this.onFreezedItem} onUnfreezedItem={this.onUnfreezedItem} + changeStatus={changeStatus} /> );})} @@ -159,6 +160,22 @@ class OrgUsersSearchUsers extends Component { } }; + changeStatus= (email, isActive) => { + seafileAPI.orgAdminChangeOrgUserStatus(orgID, email, isActive).then(res => { + let users = this.state.orgUsers.map(item => { + if (item.email == email) { + item['is_active']= res.data['is_active']; + } + return item; + }); + this.setState({orgUsers: users}); + toaster.success(gettext('Edit succeeded.')); + }).catch(error => { + let errMessage = Utils.getErrorMsg(error); + toaster.danger(errMessage); + }); + } + render() { const { query, isSubmitBtnActive } = this.state; @@ -189,6 +206,7 @@ class OrgUsersSearchUsers extends Component {

{gettext('Result')}

diff --git a/seahub/auth/views.py b/seahub/auth/views.py index cb958b6e99a..e470b07d252 100644 --- a/seahub/auth/views.py +++ b/seahub/auth/views.py @@ -144,7 +144,7 @@ def login(request, template_name='registration/login.html', try: user = User.objects.get(email) if user.is_active: - user.freeze_user(notify_admins=True) + user.freeze_user(notify_admins=True, notify_org_admins=True) logger.warn('Login attempt limit reached, freeze the user email/username: %s, ip: %s, attemps: %d' % (login, ip, failed_attempt)) except User.DoesNotExist: diff --git a/seahub/base/accounts.py b/seahub/base/accounts.py index 82c9f36b75a..92462240a64 100644 --- a/seahub/base/accounts.py +++ b/seahub/base/accounts.py @@ -682,7 +682,7 @@ def email_user(self, subject, message, from_email=None): "Sends an e-mail to this User." send_mail(subject, message, from_email, [self.email]) - def freeze_user(self, notify_admins=False): + def freeze_user(self, notify_admins=False, notify_org_admins=False): self.is_active = False self.save() @@ -706,6 +706,37 @@ def freeze_user(self, notify_admins=False): # restore current language translation.activate(cur_language) + if notify_org_admins: + org = None + if is_pro_version(): + orgs = ccnet_api.get_orgs_by_user(self.username) + if orgs: + org = orgs[0] + + org_members = list() + if org: + org_members = ccnet_api.get_org_emailusers(org.url_prefix, -1, -1) + for u in org_members: + if not (ccnet_api.is_org_staff(org.org_id, u.email) == 1): + continue + + # save current language + cur_language = translation.get_language() + + # get and active user language + user_language = Profile.objects.get_user_language(u.email) + translation.activate(user_language) + + send_html_email_with_dj_template(u.email, + subject=_('Account %(account)s froze on %(site)s.') % { + "account": self.email, + "site": get_site_name()}, + dj_template='sysadmin/user_freeze_email.html', + context={'user': self.email}) + + # restore current language + translation.activate(cur_language) + def remove_repo_passwds(self): """ Remove all repo decryption passwords stored on server.