Allow system admins to switch user accounts to email/password (#2893)
Этот коммит содержится в:
коммит произвёл
Christopher Speller
родитель
d2ddf40f56
Коммит
f2e788f4b1
@@ -462,10 +462,6 @@ func TestAdminResetPassword(t *testing.T) {
|
|||||||
LinkUserToTeam(user2, team)
|
LinkUserToTeam(user2, team)
|
||||||
store.Must(Srv.Store.User().VerifyEmail(user2.Id))
|
store.Must(Srv.Store.User().VerifyEmail(user2.Id))
|
||||||
|
|
||||||
if _, err := Client.AdminResetPassword(user2.Id, "newpwd"); err == nil {
|
|
||||||
t.Fatal("should have errored - SSO user can't reset password")
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, err := Client.AdminResetPassword(user.Id, "newpwd"); err != nil {
|
if _, err := Client.AdminResetPassword(user.Id, "newpwd"); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1702,7 +1702,7 @@ func ResetPassword(c *Context, userId, newPassword string) *model.AppError {
|
|||||||
user = result.Data.(*model.User)
|
user = result.Data.(*model.User)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(user.AuthData) != 0 {
|
if len(user.AuthData) != 0 && !c.IsSystemAdmin() {
|
||||||
return model.NewLocAppError("ResetPassword", "api.user.reset_password.sso.app_error", nil, "userId="+user.Id)
|
return model.NewLocAppError("ResetPassword", "api.user.reset_password.sso.app_error", nil, "userId="+user.Id)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,7 +58,8 @@ class ResetPasswordModal extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
if (this.props.user == null) {
|
const user = this.props.user;
|
||||||
|
if (user == null) {
|
||||||
return <div/>;
|
return <div/>;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,6 +71,23 @@ class ResetPasswordModal extends React.Component {
|
|||||||
serverError = <div className='form-group has-error'><p className='input__help error'>{this.state.serverError}</p></div>;
|
serverError = <div className='form-group has-error'><p className='input__help error'>{this.state.serverError}</p></div>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let title;
|
||||||
|
if (user.auth_service) {
|
||||||
|
title = (
|
||||||
|
<FormattedMessage
|
||||||
|
id='admin.reset_password.titleSwitch'
|
||||||
|
defaultMessage='Switch Account to Email/Password'
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
title = (
|
||||||
|
<FormattedMessage
|
||||||
|
id='admin.reset_password.titleReset'
|
||||||
|
defaultMessage='Reset Password'
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Modal
|
<Modal
|
||||||
show={this.props.show}
|
show={this.props.show}
|
||||||
@@ -77,10 +95,7 @@ class ResetPasswordModal extends React.Component {
|
|||||||
>
|
>
|
||||||
<Modal.Header closeButton={true}>
|
<Modal.Header closeButton={true}>
|
||||||
<Modal.Title>
|
<Modal.Title>
|
||||||
<FormattedMessage
|
{title}
|
||||||
id='admin.reset_password.title'
|
|
||||||
defaultMessage='Reset Password'
|
|
||||||
/>
|
|
||||||
</Modal.Title>
|
</Modal.Title>
|
||||||
</Modal.Header>
|
</Modal.Header>
|
||||||
<form
|
<form
|
||||||
|
|||||||
@@ -366,6 +366,7 @@ export default class UserItem extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let authServiceText;
|
let authServiceText;
|
||||||
|
let passwordReset;
|
||||||
if (user.auth_service) {
|
if (user.auth_service) {
|
||||||
authServiceText = (
|
authServiceText = (
|
||||||
<FormattedHTMLMessage
|
<FormattedHTMLMessage
|
||||||
@@ -376,6 +377,21 @@ export default class UserItem extends React.Component {
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
passwordReset = (
|
||||||
|
<li role='presentation'>
|
||||||
|
<a
|
||||||
|
role='menuitem'
|
||||||
|
href='#'
|
||||||
|
onClick={this.handleResetPassword}
|
||||||
|
>
|
||||||
|
<FormattedMessage
|
||||||
|
id='admin.user_item.switchToEmail'
|
||||||
|
defaultMessage='Switch to Email/Password'
|
||||||
|
/>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
authServiceText = (
|
authServiceText = (
|
||||||
<FormattedHTMLMessage
|
<FormattedHTMLMessage
|
||||||
@@ -383,6 +399,25 @@ export default class UserItem extends React.Component {
|
|||||||
defaultMessage=', <strong>Sign-in Method:</strong> Email'
|
defaultMessage=', <strong>Sign-in Method:</strong> Email'
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
passwordReset = (
|
||||||
|
<li role='presentation'>
|
||||||
|
<a
|
||||||
|
role='menuitem'
|
||||||
|
href='#'
|
||||||
|
onClick={this.handleResetPassword}
|
||||||
|
>
|
||||||
|
<FormattedMessage
|
||||||
|
id='admin.user_item.resetPwd'
|
||||||
|
defaultMessage='Reset Password'
|
||||||
|
/>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (global.window.mm_config.EnableSignInWithEmail !== 'true') {
|
||||||
|
passwordReset = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const me = UserStore.getCurrentUser();
|
const me = UserStore.getCurrentUser();
|
||||||
@@ -474,18 +509,7 @@ export default class UserItem extends React.Component {
|
|||||||
{makeNotActive}
|
{makeNotActive}
|
||||||
{makeSystemAdmin}
|
{makeSystemAdmin}
|
||||||
{mfaReset}
|
{mfaReset}
|
||||||
<li role='presentation'>
|
{passwordReset}
|
||||||
<a
|
|
||||||
role='menuitem'
|
|
||||||
href='#'
|
|
||||||
onClick={this.handleResetPassword}
|
|
||||||
>
|
|
||||||
<FormattedMessage
|
|
||||||
id='admin.user_item.resetPwd'
|
|
||||||
defaultMessage='Reset Password'
|
|
||||||
/>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -378,7 +378,8 @@
|
|||||||
"admin.reset_password.newPassword": "New Password",
|
"admin.reset_password.newPassword": "New Password",
|
||||||
"admin.reset_password.select": "Select",
|
"admin.reset_password.select": "Select",
|
||||||
"admin.reset_password.submit": "Please enter at least {chars} characters.",
|
"admin.reset_password.submit": "Please enter at least {chars} characters.",
|
||||||
"admin.reset_password.title": "Reset Password",
|
"admin.reset_password.titleReset": "Reset Password",
|
||||||
|
"admin.reset_password.titleSwitch": "Switch Account to Email/Password",
|
||||||
"admin.select_team.close": "Close",
|
"admin.select_team.close": "Close",
|
||||||
"admin.select_team.select": "Select",
|
"admin.select_team.select": "Select",
|
||||||
"admin.select_team.selectTeam": "Select Team",
|
"admin.select_team.selectTeam": "Select Team",
|
||||||
@@ -563,6 +564,7 @@
|
|||||||
"admin.user_item.mfaYes": ", <strong>MFA</strong>: Yes",
|
"admin.user_item.mfaYes": ", <strong>MFA</strong>: Yes",
|
||||||
"admin.user_item.resetMfa": "Remove MFA",
|
"admin.user_item.resetMfa": "Remove MFA",
|
||||||
"admin.user_item.resetPwd": "Reset Password",
|
"admin.user_item.resetPwd": "Reset Password",
|
||||||
|
"admin.user_item.switchToEmail": "Switch to Email/Password",
|
||||||
"admin.user_item.sysAdmin": "System Admin",
|
"admin.user_item.sysAdmin": "System Admin",
|
||||||
"admin.user_item.teamAdmin": "Team Admin",
|
"admin.user_item.teamAdmin": "Team Admin",
|
||||||
"analytics.chart.loading": "Loading...",
|
"analytics.chart.loading": "Loading...",
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user