// 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 {updateActive} from 'actions/user_actions.jsx'; import {adminResetMfa} from 'actions/admin_actions.jsx'; import * as UserUtils from 'mattermost-redux/utils/user_utils'; import {FormattedMessage} from 'react-intl'; import PropTypes from 'prop-types'; import React from 'react'; export default class SystemUsersDropdown extends React.Component { static propTypes = { /* * User to manage with dropdown */ user: PropTypes.object.isRequired, /* * Function to open password reset, takes user as an argument */ doPasswordReset: PropTypes.func.isRequired, /* * Function to open manage teams, takes user as an argument */ doManageTeams: PropTypes.func.isRequired, /* * Function to open manage roles, takes user as an argument */ doManageRoles: PropTypes.func.isRequired, /* * Function to open manage tokens, takes user as an argument */ doManageTokens: PropTypes.func.isRequired }; constructor(props) { super(props); this.state = { serverError: null, showDemoteModal: false, showDeactivateMemberModal: false, user: null, role: null }; } handleMakeActive = (e) => { e.preventDefault(); updateActive(this.props.user.id, true, null, (err) => { this.setState({serverError: err.message}); } ); } handleManageTeams = (e) => { e.preventDefault(); this.props.doManageTeams(this.props.user); } handleManageRoles = (e) => { e.preventDefault(); this.props.doManageRoles(this.props.user); } handleManageTokens = (e) => { e.preventDefault(); this.props.doManageTokens(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 ( ); } renderAccessToken = () => { const userAccessTokensEnabled = global.window.mm_config.EnableUserAccessTokens === 'true'; if (!userAccessTokensEnabled) { return null; } const user = this.props.user; const hasPostAllRole = UserUtils.hasPostAllRole(user.roles); const hasPostAllPublicRole = UserUtils.hasPostAllPublicRole(user.roles); const hasUserAccessTokenRole = UserUtils.hasUserAccessTokenRole(user.roles); const isSystemAdmin = UserUtils.isSystemAdmin(user.roles); let messageId = ''; if (hasUserAccessTokenRole || isSystemAdmin) { if (hasPostAllRole) { messageId = 'admin.user_item.userAccessTokenPostAll'; } else if (hasPostAllPublicRole) { messageId = 'admin.user_item.userAccessTokenPostAllPublic'; } else { messageId = 'admin.user_item.userAccessTokenYes'; } } if (!messageId) { return null; } 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 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 = ( ); showMakeActive = true; showMakeNotActive = false; showManageTeams = false; } let disableActivationToggle = false; if (user.auth_service === Constants.LDAP_SERVICE) { disableActivationToggle = true; } 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 manageTokens; if (global.window.mm_config.EnableUserAccessTokens === 'true') { manageTokens = (
  • ); } 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} {this.renderAccessToken()}
      {makeActive} {makeNotActive}
    • {manageTeams} {manageTokens} {mfaReset} {passwordReset}
    {makeDemoteModal} {deactivateMemberModal} {serverError}
    ); } }