From d8bd57901e33a7057e26e782e295099ffcc0da89 Mon Sep 17 00:00:00 2001 From: Christopher Speller Date: Wed, 6 Sep 2017 23:04:13 -0700 Subject: Removing webapp --- .../components/admin_console/system_users/index.js | 31 -- .../admin_console/system_users/system_users.jsx | 372 --------------- .../system_users/system_users_dropdown.jsx | 529 --------------------- .../system_users/system_users_list.jsx | 295 ------------ 4 files changed, 1227 deletions(-) delete mode 100644 webapp/components/admin_console/system_users/index.js delete mode 100644 webapp/components/admin_console/system_users/system_users.jsx delete mode 100644 webapp/components/admin_console/system_users/system_users_dropdown.jsx delete mode 100644 webapp/components/admin_console/system_users/system_users_list.jsx (limited to 'webapp/components/admin_console/system_users') diff --git a/webapp/components/admin_console/system_users/index.js b/webapp/components/admin_console/system_users/index.js deleted file mode 100644 index 261a11d7e..000000000 --- a/webapp/components/admin_console/system_users/index.js +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) 2017 Mattermost, Inc. All Rights Reserved. -// See License.txt for license information. - -import {connect} from 'react-redux'; -import {bindActionCreators} from 'redux'; -import {getTeams, getTeamStats} from 'mattermost-redux/actions/teams'; -import {getUser, getUserAccessToken} from 'mattermost-redux/actions/users'; - -import {getTeamsList} from 'mattermost-redux/selectors/entities/teams'; - -import SystemUsers from './system_users.jsx'; - -function mapStateToProps(state, ownProps) { - return { - teams: getTeamsList(state), - ...ownProps - }; -} - -function mapDispatchToProps(dispatch) { - return { - actions: bindActionCreators({ - getTeams, - getTeamStats, - getUser, - getUserAccessToken - }, dispatch) - }; -} - -export default connect(mapStateToProps, mapDispatchToProps)(SystemUsers); diff --git a/webapp/components/admin_console/system_users/system_users.jsx b/webapp/components/admin_console/system_users/system_users.jsx deleted file mode 100644 index db8400217..000000000 --- a/webapp/components/admin_console/system_users/system_users.jsx +++ /dev/null @@ -1,372 +0,0 @@ -// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved. -// See License.txt for license information. - -import React from 'react'; -import PropTypes from 'prop-types'; -import {FormattedMessage} from 'react-intl'; - -import { - loadProfiles, - loadProfilesAndTeamMembers, - loadProfilesWithoutTeam, - searchUsers -} from 'actions/user_actions.jsx'; - -import AnalyticsStore from 'stores/analytics_store.jsx'; -import TeamStore from 'stores/team_store.jsx'; -import UserStore from 'stores/user_store.jsx'; - -import {reloadIfServerVersionChanged} from 'actions/global_actions.jsx'; -import {getStandardAnalytics} from 'actions/admin_actions.jsx'; -import {Constants, StatTypes, UserSearchOptions} from 'utils/constants.jsx'; -import * as Utils from 'utils/utils.jsx'; - -import SystemUsersList from './system_users_list.jsx'; - -import store from 'stores/redux_store.jsx'; -import {searchProfiles, searchProfilesInTeam} from 'mattermost-redux/selectors/entities/users'; - -const ALL_USERS = ''; -const NO_TEAM = 'no_team'; - -const USER_ID_LENGTH = 26; -const USERS_PER_PAGE = 50; - -export default class SystemUsers extends React.Component { - static propTypes = { - - /* - * Array of team objects - */ - teams: PropTypes.arrayOf(PropTypes.object).isRequired, - - actions: PropTypes.shape({ - - /* - * Function to get teams - */ - getTeams: PropTypes.func.isRequired, - - /* - * Function to get statistics for a team - */ - getTeamStats: PropTypes.func.isRequired, - - /* - * Function to get a user - */ - getUser: PropTypes.func.isRequired, - - /* - * Function to get a user access token - */ - getUserAccessToken: PropTypes.func.isRequired - }).isRequired - } - - constructor(props) { - super(props); - - this.updateTotalUsersFromStore = this.updateTotalUsersFromStore.bind(this); - this.updateUsersFromStore = this.updateUsersFromStore.bind(this); - - this.loadDataForTeam = this.loadDataForTeam.bind(this); - this.loadComplete = this.loadComplete.bind(this); - - this.handleTeamChange = this.handleTeamChange.bind(this); - this.handleTermChange = this.handleTermChange.bind(this); - this.nextPage = this.nextPage.bind(this); - - this.doSearch = this.doSearch.bind(this); - this.search = this.search.bind(this); - this.getUserById = this.getUserById.bind(this); - - this.renderFilterRow = this.renderFilterRow.bind(this); - - this.state = { - totalUsers: AnalyticsStore.getAllSystem()[StatTypes.TOTAL_USERS], - users: UserStore.getProfileList(), - - teamId: ALL_USERS, - term: '', - loading: true, - searching: false - }; - } - - componentDidMount() { - AnalyticsStore.addChangeListener(this.updateTotalUsersFromStore); - TeamStore.addStatsChangeListener(this.updateTotalUsersFromStore); - - UserStore.addChangeListener(this.updateUsersFromStore); - UserStore.addInTeamChangeListener(this.updateUsersFromStore); - UserStore.addWithoutTeamChangeListener(this.updateUsersFromStore); - - this.loadDataForTeam(this.state.teamId); - this.props.actions.getTeams(0, 1000).then(reloadIfServerVersionChanged); - } - - componentWillUpdate(nextProps, nextState) { - const nextTeamId = nextState.teamId; - - if (this.state.teamId !== nextTeamId) { - this.updateTotalUsersFromStore(nextTeamId); - this.updateUsersFromStore(nextTeamId, nextState.term); - - this.loadDataForTeam(nextTeamId); - } - } - - componentWillUnmount() { - AnalyticsStore.removeChangeListener(this.updateTotalUsersFromStore); - TeamStore.removeStatsChangeListener(this.updateTotalUsersFromStore); - - UserStore.removeChangeListener(this.updateUsersFromStore); - UserStore.removeInTeamChangeListener(this.updateUsersFromStore); - UserStore.removeWithoutTeamChangeListener(this.updateUsersFromStore); - } - - updateTotalUsersFromStore(teamId = this.state.teamId) { - if (teamId === ALL_USERS) { - this.setState({ - totalUsers: AnalyticsStore.getAllSystem()[StatTypes.TOTAL_USERS] - }); - } else if (teamId === NO_TEAM) { - this.setState({ - totalUsers: 0 - }); - } else { - this.setState({ - totalUsers: TeamStore.getStats(teamId).total_member_count - }); - } - } - - updateUsersFromStore(teamId = this.state.teamId, term = this.state.term) { - if (term) { - let users; - if (teamId) { - users = searchProfilesInTeam(store.getState(), teamId, term); - } else { - users = searchProfiles(store.getState(), term); - } - - if (users.length === 0 && UserStore.hasProfile(term)) { - users = [UserStore.getProfile(term)]; - } - - this.setState({users}); - return; - } - - if (teamId === ALL_USERS) { - this.setState({users: UserStore.getProfileList(false, true)}); - } else if (teamId === NO_TEAM) { - this.setState({users: UserStore.getProfileListWithoutTeam()}); - } else { - this.setState({users: UserStore.getProfileListInTeam(this.state.teamId)}); - } - } - - loadDataForTeam(teamId) { - if (this.state.term) { - this.search(this.state.term, teamId); - return; - } - - if (teamId === ALL_USERS) { - loadProfiles(0, Constants.PROFILE_CHUNK_SIZE, this.loadComplete); - getStandardAnalytics(); - } else if (teamId === NO_TEAM) { - loadProfilesWithoutTeam(0, Constants.PROFILE_CHUNK_SIZE, this.loadComplete); - } else { - loadProfilesAndTeamMembers(0, Constants.PROFILE_CHUNK_SIZE, teamId, this.loadComplete); - this.props.actions.getTeamStats(teamId); - } - } - - loadComplete() { - this.setState({loading: false}); - } - - handleTeamChange(e) { - this.setState({teamId: e.target.value}); - } - - handleTermChange(term) { - this.setState({term}); - } - - nextPage(page) { - // Paging isn't supported while searching - - if (this.state.teamId === ALL_USERS) { - loadProfiles(page, USERS_PER_PAGE, this.loadComplete); - } else if (this.state.teamId === NO_TEAM) { - loadProfilesWithoutTeam(page + 1, USERS_PER_PAGE, this.loadComplete); - } else { - loadProfilesAndTeamMembers(page + 1, USERS_PER_PAGE, this.state.teamId, this.loadComplete); - } - } - - search(term, teamId = this.state.teamId) { - if (term === '') { - this.updateUsersFromStore(teamId, term); - - this.setState({ - loading: false - }); - - this.searchTimeoutId = ''; - return; - } - - this.doSearch(teamId, term); - } - - doSearch(teamId, term, now = false) { - clearTimeout(this.searchTimeoutId); - this.term = term; - - this.setState({loading: true}); - - const options = { - [UserSearchOptions.ALLOW_INACTIVE]: true - }; - if (teamId === NO_TEAM) { - options[UserSearchOptions.WITHOUT_TEAM] = true; - } - - this.searchTimeoutId = setTimeout( - () => { - searchUsers( - term, - teamId, - options, - (users) => { - if (users.length === 0 && term.length === USER_ID_LENGTH) { - // This term didn't match any users name, but it does look like it might be a user's ID - this.getUserByTokenOrId(term); - } else { - this.setState({loading: false}); - } - }, - () => { - this.setState({loading: false}); - } - ); - }, - now ? 0 : Constants.SEARCH_TIMEOUT_MILLISECONDS - ); - } - - getUserById(id) { - if (UserStore.hasProfile(id)) { - this.setState({loading: false}); - return; - } - - this.props.actions.getUser(id).then( - () => { - this.setState({ - loading: false - }); - } - ); - } - - getUserByTokenOrId = async (id) => { - if (global.window.mm_config.EnableUserAccessTokens === 'true') { - const {data} = await this.props.actions.getUserAccessToken(id); - - if (data) { - this.term = data.user_id; - this.setState({term: data.user_id}); - this.updateUsersFromStore(this.state.teamId, data.user_id); - this.getUserById(data.user_id); - return; - } - } - - this.getUserById(id); - } - - renderFilterRow(doSearch) { - const teams = this.props.teams.map((team) => { - return ( - - ); - }); - - return ( -
-
- -
- -
- ); - } - - render() { - let users = null; - if (!this.state.loading) { - users = this.state.users; - } - - return ( -
-

- -

-
- -
-
- ); - } -} diff --git a/webapp/components/admin_console/system_users/system_users_dropdown.jsx b/webapp/components/admin_console/system_users/system_users_dropdown.jsx deleted file mode 100644 index 79ccc8b31..000000000 --- a/webapp/components/admin_console/system_users/system_users_dropdown.jsx +++ /dev/null @@ -1,529 +0,0 @@ -// 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} -
    - ); - } -} diff --git a/webapp/components/admin_console/system_users/system_users_list.jsx b/webapp/components/admin_console/system_users/system_users_list.jsx deleted file mode 100644 index 8a7f30e1b..000000000 --- a/webapp/components/admin_console/system_users/system_users_list.jsx +++ /dev/null @@ -1,295 +0,0 @@ -// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved. -// See License.txt for license information. - -import React from 'react'; -import PropTypes from 'prop-types'; -import {FormattedMessage, FormattedHTMLMessage} from 'react-intl'; - -import ManageTeamsModal from 'components/admin_console/manage_teams_modal/manage_teams_modal.jsx'; -import ManageRolesModal from 'components/admin_console/manage_roles_modal'; -import ManageTokensModal from 'components/admin_console/manage_tokens_modal'; -import ResetPasswordModal from 'components/admin_console/reset_password_modal.jsx'; -import SearchableUserList from 'components/searchable_user_list/searchable_user_list.jsx'; - -import store from 'stores/redux_store.jsx'; -const dispatch = store.dispatch; -const getState = store.getState; - -import {getUser} from 'mattermost-redux/actions/users'; -import {Constants} from 'utils/constants.jsx'; -import * as Utils from 'utils/utils.jsx'; - -import SystemUsersDropdown from './system_users_dropdown.jsx'; - -export default class SystemUsersList extends React.Component { - static propTypes = { - users: PropTypes.arrayOf(PropTypes.object), - usersPerPage: PropTypes.number, - total: PropTypes.number, - nextPage: PropTypes.func, - search: PropTypes.func.isRequired, - focusOnMount: PropTypes.bool, - renderFilterRow: PropTypes.func, - - teamId: PropTypes.string.isRequired, - term: PropTypes.string.isRequired, - onTermChange: PropTypes.func.isRequired - }; - - constructor(props) { - super(props); - - this.state = { - page: 0, - - showManageTeamsModal: false, - showManageRolesModal: false, - showManageTokensModal: false, - showPasswordModal: false, - user: null - }; - } - - componentWillReceiveProps(nextProps) { - if (nextProps.teamId !== this.props.teamId) { - this.setState({page: 0}); - } - } - - nextPage = () => { - this.setState({page: this.state.page + 1}); - - this.props.nextPage(this.state.page + 1); - } - - previousPage = () => { - this.setState({page: this.state.page - 1}); - } - - search = (term) => { - this.props.search(term); - - if (term !== '') { - this.setState({page: 0}); - } - } - - doManageTeams = (user) => { - this.setState({ - showManageTeamsModal: true, - user - }); - } - - doManageRoles = (user) => { - this.setState({ - showManageRolesModal: true, - user - }); - } - - doManageTokens = (user) => { - this.setState({ - showManageTokensModal: true, - user - }); - } - - doManageTeamsDismiss = () => { - this.setState({ - showManageTeamsModal: false, - user: null - }); - } - - doManageRolesDismiss = () => { - this.setState({ - showManageRolesModal: false, - user: null - }); - } - - doManageTokensDismiss = () => { - this.setState({ - showManageTokensModal: false, - user: null - }); - } - - doPasswordReset = (user) => { - this.setState({ - showPasswordModal: true, - user - }); - } - - doPasswordResetDismiss = () => { - this.setState({ - showPasswordModal: false, - user: null - }); - } - - doPasswordResetSubmit = (user) => { - getUser(user.id)(dispatch, getState); - - this.setState({ - showPasswordModal: false, - user: null - }); - } - - getInfoForUser(user) { - const info = []; - - if (user.auth_service) { - let service; - if (user.auth_service === Constants.LDAP_SERVICE || user.auth_service === Constants.SAML_SERVICE) { - service = user.auth_service.toUpperCase(); - } else { - service = Utils.toTitleCase(user.auth_service); - } - - info.push( - - ); - } else { - info.push( - - ); - } - - const mfaEnabled = global.window.mm_license.IsLicensed === 'true' && - global.window.mm_license.MFA === 'true' && - global.window.mm_config.EnableMultifactorAuthentication === 'true'; - if (mfaEnabled) { - info.push(', '); - - if (user.mfa_active) { - info.push( - - ); - } else { - info.push( - - ); - } - } - - return info; - } - - renderCount(count, total, startCount, endCount, isSearch) { - if (total) { - if (isSearch) { - return ( - - ); - } else if (startCount !== 0 || endCount !== total) { - return ( - - ); - } - - return ( - - ); - } - - return null; - } - - render() { - const extraInfo = {}; - if (this.props.users) { - for (const user of this.props.users) { - extraInfo[user.id] = this.getInfoForUser(user); - } - } - - return ( -
    - - - - - -
    - ); - } -} -- cgit v1.2.3-1-g7c22