mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-09 02:42:47 +00:00
Merge branch '10.0'
This commit is contained in:
@@ -26,7 +26,7 @@ class OrgUsersSearchUsersResult extends React.Component {
|
|||||||
};
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
let { orgUsers } = this.props;
|
let { orgUsers, changeStatus } = this.props;
|
||||||
return (
|
return (
|
||||||
<div className="cur-view-content">
|
<div className="cur-view-content">
|
||||||
<table>
|
<table>
|
||||||
@@ -52,6 +52,7 @@ class OrgUsersSearchUsersResult extends React.Component {
|
|||||||
toggleDelete={this.props.toggleDelete}
|
toggleDelete={this.props.toggleDelete}
|
||||||
onFreezedItem={this.onFreezedItem}
|
onFreezedItem={this.onFreezedItem}
|
||||||
onUnfreezedItem={this.onUnfreezedItem}
|
onUnfreezedItem={this.onUnfreezedItem}
|
||||||
|
changeStatus={changeStatus}
|
||||||
/>
|
/>
|
||||||
);})}
|
);})}
|
||||||
</tbody>
|
</tbody>
|
||||||
@@ -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() {
|
render() {
|
||||||
const { query, isSubmitBtnActive } = this.state;
|
const { query, isSubmitBtnActive } = this.state;
|
||||||
|
|
||||||
@@ -189,6 +206,7 @@ class OrgUsersSearchUsers extends Component {
|
|||||||
<h4 className="border-bottom font-weight-normal mb-2 pb-1">{gettext('Result')}</h4>
|
<h4 className="border-bottom font-weight-normal mb-2 pb-1">{gettext('Result')}</h4>
|
||||||
<OrgUsersSearchUsersResult
|
<OrgUsersSearchUsersResult
|
||||||
toggleDelete={this.deleteUser}
|
toggleDelete={this.deleteUser}
|
||||||
|
changeStatus={this.changeStatus}
|
||||||
orgUsers={this.state.orgUsers}
|
orgUsers={this.state.orgUsers}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -144,7 +144,7 @@ def login(request, template_name='registration/login.html',
|
|||||||
try:
|
try:
|
||||||
user = User.objects.get(email)
|
user = User.objects.get(email)
|
||||||
if user.is_active:
|
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' %
|
logger.warn('Login attempt limit reached, freeze the user email/username: %s, ip: %s, attemps: %d' %
|
||||||
(login, ip, failed_attempt))
|
(login, ip, failed_attempt))
|
||||||
except User.DoesNotExist:
|
except User.DoesNotExist:
|
||||||
|
@@ -682,7 +682,7 @@ class User(object):
|
|||||||
"Sends an e-mail to this User."
|
"Sends an e-mail to this User."
|
||||||
send_mail(subject, message, from_email, [self.email])
|
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.is_active = False
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
@@ -706,6 +706,37 @@ class User(object):
|
|||||||
# restore current language
|
# restore current language
|
||||||
translation.activate(cur_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):
|
def remove_repo_passwds(self):
|
||||||
"""
|
"""
|
||||||
Remove all repo decryption passwords stored on server.
|
Remove all repo decryption passwords stored on server.
|
||||||
|
Reference in New Issue
Block a user