// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import Client from 'utils/web_client.jsx'; import Constants from 'utils/constants.jsx'; import * as Utils from 'utils/utils.jsx'; import UserStore from 'stores/user_store.jsx'; import ConfirmModal from '../confirm_modal.jsx'; import TeamStore from 'stores/team_store.jsx'; import {FormattedMessage, FormattedHTMLMessage} from 'react-intl'; import React from 'react'; import {browserHistory} from 'react-router/es6'; export default class UserItem extends React.Component { constructor(props) { super(props); this.handleMakeMember = this.handleMakeMember.bind(this); this.handleRemoveFromTeam = this.handleRemoveFromTeam.bind(this); this.handleMakeActive = this.handleMakeActive.bind(this); this.handleMakeNotActive = this.handleMakeNotActive.bind(this); this.handleMakeAdmin = this.handleMakeAdmin.bind(this); this.handleMakeSystemAdmin = this.handleMakeSystemAdmin.bind(this); this.handleResetPassword = this.handleResetPassword.bind(this); this.handleResetMfa = this.handleResetMfa.bind(this); this.handleDemote = this.handleDemote.bind(this); this.handleDemoteSubmit = this.handleDemoteSubmit.bind(this); this.handleDemoteCancel = this.handleDemoteCancel.bind(this); this.state = { serverError: null, showDemoteModal: false, user: null, role: null }; } handleMakeMember(e) { e.preventDefault(); const me = UserStore.getCurrentUser(); if (this.props.user.id === me.id) { this.handleDemote(this.props.user, ''); } else { Client.updateRoles( this.props.team.id, this.props.user.id, '', () => { this.props.refreshProfiles(); }, (err) => { this.setState({serverError: err.message}); } ); } } handleRemoveFromTeam() { Client.removeUserFromTeam( this.props.team.id, this.props.user.id, () => { this.props.refreshProfiles(); }, (err) => { this.setState({serverError: err.message}); } ); } handleMakeActive(e) { e.preventDefault(); Client.updateActive(this.props.user.id, true, () => { this.props.refreshProfiles(); }, (err) => { this.setState({serverError: err.message}); } ); } handleMakeNotActive(e) { e.preventDefault(); Client.updateActive(this.props.user.id, false, () => { this.props.refreshProfiles(); }, (err) => { this.setState({serverError: err.message}); } ); } handleMakeAdmin(e) { e.preventDefault(); const me = UserStore.getCurrentUser(); if (this.props.user.id === me.id) { this.handleDemote(this.props.user, 'admin'); } else { Client.updateRoles( this.props.team.id, this.props.user.id, 'admin', () => { this.props.refreshProfiles(); }, (err) => { this.setState({serverError: err.message}); } ); } } handleMakeSystemAdmin(e) { e.preventDefault(); Client.updateRoles( this.props.team.id, this.props.user.id, 'system_admin', () => { this.props.refreshProfiles(); }, (err) => { this.setState({serverError: err.message}); } ); } handleResetPassword(e) { e.preventDefault(); this.props.doPasswordReset(this.props.user); } handleResetMfa(e) { e.preventDefault(); Client.adminResetMfa(this.props.user.id, () => { this.props.refreshProfiles(); }, (err) => { this.setState({serverError: err.message}); } ); } handleDemote(user, role) { this.setState({ serverError: this.state.serverError, showDemoteModal: true, user, role }); } handleDemoteCancel() { this.setState({ serverError: null, showDemoteModal: false, user: null, role: null }); } handleDemoteSubmit() { Client.updateRoles( this.props.team.id, this.props.user.id, this.state.role, () => { this.props.refreshProfiles(); this.setState({ serverError: null, showDemoteModal: false, user: null, role: null }); const teamUrl = TeamStore.getCurrentTeamUrl(); if (teamUrl) { browserHistory.push(teamUrl); } else { browserHistory.push('/'); } }, (err) => { this.setState({ serverError: err.message }); } ); } render() { let serverError = null; if (this.state.serverError) { serverError = (
); } const teamMember = this.props.teamMember; const user = this.props.user; if (!user || !teamMember) { return
; } let currentRoles = ( ); if (teamMember.roles.length > 0 && Utils.isAdmin(teamMember.roles)) { currentRoles = ( ); } if (user.roles.length > 0 && Utils.isSystemAdmin(user.roles)) { currentRoles = ( ); } const me = UserStore.getCurrentUser(); const email = user.email; let showMakeMember = teamMember.roles === 'admin' || user.roles === 'system_admin'; let showMakeAdmin = teamMember.roles === '' && user.roles !== 'system_admin'; let showMakeSystemAdmin = user.roles === '' || user.roles === 'admin'; let showMakeActive = false; let showMakeNotActive = user.roles !== 'system_admin'; const mfaEnabled = global.window.mm_license.IsLicensed === 'true' && global.window.mm_license.MFA === 'true' && global.window.mm_config.EnableMultifactorAuthentication === 'true'; const showMfaReset = mfaEnabled && user.mfa_active; if (user.delete_at > 0) { currentRoles = ( ); showMakeMember = false; showMakeAdmin = false; showMakeSystemAdmin = false; showMakeActive = true; showMakeNotActive = false; } let makeSystemAdmin = null; if (showMakeSystemAdmin) { makeSystemAdmin = (
  • ); } let makeAdmin = null; if (showMakeAdmin) { makeAdmin = (
  • ); } let makeMember = null; if (showMakeMember) { makeMember = (
  • ); } let removeFromTeam = null; if (this.props.user.id !== me.id) { removeFromTeam = (
  • ); } let makeActive = null; if (showMakeActive) { makeActive = (
  • ); } let makeNotActive = null; if (showMakeNotActive) { makeNotActive = (
  • ); } let mfaReset = null; if (showMfaReset) { mfaReset = (
  • ); } let mfaActiveText; if (mfaEnabled) { if (user.mfa_active) { mfaActiveText = ( ); } else { mfaActiveText = ( ); } } let authServiceText; let passwordReset; if (user.auth_service) { const service = (user.auth_service === Constants.LDAP_SERVICE || user.auth_service === Constants.SAML_SERVICE) ? user.auth_service.toUpperCase() : Utils.toTitleCase(user.auth_service); authServiceText = ( ); passwordReset = (
  • ); } else { authServiceText = ( ); passwordReset = (
  • ); } if (global.window.mm_config.EnableSignInWithEmail !== 'true') { passwordReset = null; } let makeDemoteModal = null; if (this.props.user.id === me.id) { const title = ( ); const message = (


    {serverError}
    ); const confirmButton = ( ); makeDemoteModal = ( ); } let displayedName = Utils.getDisplayName(user); if (displayedName !== user.username) { displayedName += ' (@' + user.username + ')'; } return (
    {displayedName}
    {authServiceText} {mfaActiveText}
    {currentRoles}
      {removeFromTeam} {makeAdmin} {makeMember} {makeActive} {makeNotActive} {makeSystemAdmin} {mfaReset} {passwordReset}
    {makeDemoteModal} {serverError}
    ); } } UserItem.propTypes = { team: React.PropTypes.object.isRequired, user: React.PropTypes.object.isRequired, teamMember: React.PropTypes.object.isRequired, refreshProfiles: React.PropTypes.func.isRequired, doPasswordReset: React.PropTypes.func.isRequired };