Allow system admins to switch user accounts to email/password (#2893)

Этот коммит содержится в:
Joram Wilander
2016-05-05 16:36:42 -04:00
коммит произвёл Christopher Speller
родитель d2ddf40f56
Коммит f2e788f4b1
5 изменённых файлов: 60 добавлений и 23 удалений

Просмотреть файл

@@ -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...",