// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import ConfirmModal from 'components/confirm_modal.jsx'; import TeamStore from 'stores/team_store.jsx'; import UserStore from 'stores/user_store.jsx'; import Constants from 'utils/constants.jsx'; import * as Utils from 'utils/utils.jsx'; import {updateUserRoles, updateActive} from 'actions/user_actions.jsx'; import {adminResetMfa} from 'actions/admin_actions.jsx'; import {FormattedMessage} from 'react-intl'; import PropTypes from 'prop-types'; import React from 'react'; export default class SystemUsersDropdown extends React.Component { static propTypes = { user: PropTypes.object.isRequired, doPasswordReset: PropTypes.func.isRequired, doManageTeams: PropTypes.func.isRequired }; constructor(props) { super(props); this.handleMakeMember = this.handleMakeMember.bind(this); this.handleMakeActive = this.handleMakeActive.bind(this); this.handleShowDeactivateMemberModal = this.handleShowDeactivateMemberModal.bind(this); this.handleDeactivateMember = this.handleDeactivateMember.bind(this); this.handleDeactivateCancel = this.handleDeactivateCancel.bind(this); this.handleMakeSystemAdmin = this.handleMakeSystemAdmin.bind(this); this.handleManageTeams = this.handleManageTeams.bind(this); this.handleResetPassword = this.handleResetPassword.bind(this); this.handleResetMfa = this.handleResetMfa.bind(this); this.handleDemoteSystemAdmin = this.handleDemoteSystemAdmin.bind(this); this.handleDemoteSubmit = this.handleDemoteSubmit.bind(this); this.handleDemoteCancel = this.handleDemoteCancel.bind(this); this.renderDeactivateMemberModal = this.renderDeactivateMemberModal.bind(this); this.state = { serverError: null, showDemoteModal: false, showDeactivateMemberModal: false, user: null, role: null }; } doMakeMember() { updateUserRoles( this.props.user.id, 'system_user', null, (err) => { this.setState({serverError: err.message}); } ); } handleMakeMember(e) { e.preventDefault(); const me = UserStore.getCurrentUser(); if (this.props.user.id === me.id && me.roles.includes('system_admin')) { this.handleDemoteSystemAdmin(this.props.user, 'member'); } else { this.doMakeMember(); } } handleMakeActive(e) { e.preventDefault(); updateActive(this.props.user.id, true, null, (err) => { this.setState({serverError: err.message}); } ); } handleMakeSystemAdmin(e) { e.preventDefault(); updateUserRoles( this.props.user.id, 'system_user system_admin', null, (err) => { this.setState({serverError: err.message}); } ); } handleManageTeams(e) { e.preventDefault(); this.props.doManageTeams(this.props.user); } handleResetPassword(e) { e.preventDefault(); this.props.doPasswordReset(this.props.user); } handleResetMfa(e) { e.preventDefault(); adminResetMfa(this.props.user.id, null, (err) => { this.setState({serverError: err.message}); } ); } handleDemoteSystemAdmin(user, role) { this.setState({ serverError: this.state.serverError, showDemoteModal: true, user, role }); } handleDemoteCancel() { this.setState({ serverError: null, showDemoteModal: false, user: null, role: null }); } handleDemoteSubmit() { if (this.state.role === 'member') { this.doMakeMember(); } const teamUrl = TeamStore.getCurrentTeamUrl(); if (teamUrl) { // the channel is added to the URL cause endless loading not being fully fixed window.location.href = teamUrl + '/channels/town-square'; } else { window.location.href = '/'; } } handleShowDeactivateMemberModal(e) { e.preventDefault(); this.setState({showDeactivateMemberModal: true}); } handleDeactivateMember() { updateActive(this.props.user.id, false, null, (err) => { this.setState({serverError: err.message}); } ); this.setState({showDeactivateMemberModal: false}); } handleDeactivateCancel() { this.setState({showDeactivateMemberModal: false}); } renderDeactivateMemberModal() { const title = ( ); const message = ( ); const confirmButtonClass = 'btn btn-danger'; const deactivateMemberButton = ( ); return ( ); } render() { let serverError = null; if (this.state.serverError) { serverError = (
); } const user = this.props.user; if (!user) { return
; } let currentRoles = ( ); if (user.roles.length > 0 && Utils.isSystemAdmin(user.roles)) { currentRoles = ( ); } const me = UserStore.getCurrentUser(); let showMakeMember = Utils.isSystemAdmin(user.roles); let showMakeSystemAdmin = !Utils.isSystemAdmin(user.roles); let showMakeActive = false; let showMakeNotActive = !Utils.isSystemAdmin(user.roles); let showManageTeams = true; 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; showMakeSystemAdmin = false; showMakeActive = true; showMakeNotActive = false; showManageTeams = false; } let disableActivationToggle = false; if (user.auth_service === Constants.LDAP_SERVICE) { disableActivationToggle = true; } let makeSystemAdmin = null; if (showMakeSystemAdmin) { makeSystemAdmin = (
  • ); } let makeMember = null; if (showMakeMember) { makeMember = (
  • ); } let menuClass = ''; if (disableActivationToggle) { menuClass = 'disabled'; } let makeActive = null; if (showMakeActive) { makeActive = (
  • ); } let makeNotActive = null; if (showMakeNotActive) { makeNotActive = (
  • ); } let manageTeams = null; if (showManageTeams) { manageTeams = (
  • ); } let mfaReset = null; if (showMfaReset) { mfaReset = (
  • ); } let passwordReset; if (user.auth_service) { passwordReset = (
  • ); } else { passwordReset = (
  • ); } let makeDemoteModal = null; if (this.props.user.id === me.id) { const title = ( ); const message = (


    {serverError}
    ); const confirmButton = ( ); makeDemoteModal = ( ); } const deactivateMemberModal = this.renderDeactivateMemberModal(); let displayedName = Utils.getDisplayName(user); if (displayedName !== user.username) { displayedName += ' (@' + user.username + ')'; } return (
    {currentRoles}
      {makeMember} {makeActive} {makeNotActive} {makeSystemAdmin} {manageTeams} {mfaReset} {passwordReset}
    {makeDemoteModal} {deactivateMemberModal} {serverError}
    ); } }