diff options
Diffstat (limited to 'web/react/components/access_history_modal.jsx')
-rw-r--r-- | web/react/components/access_history_modal.jsx | 193 |
1 files changed, 132 insertions, 61 deletions
diff --git a/web/react/components/access_history_modal.jsx b/web/react/components/access_history_modal.jsx index 9aeb7f682..41a865df4 100644 --- a/web/react/components/access_history_modal.jsx +++ b/web/react/components/access_history_modal.jsx @@ -14,6 +14,7 @@ export default class AccessHistoryModal extends React.Component { this.handleMoreInfo = this.handleMoreInfo.bind(this); this.onHide = this.onHide.bind(this); this.onShow = this.onShow.bind(this); + this.formatAuditInfo = this.formatAuditInfo.bind(this); const state = this.getStateFromStoresForAudits(); state.moreInfo = []; @@ -52,74 +53,127 @@ export default class AccessHistoryModal extends React.Component { newMoreInfo[index] = true; this.setState({moreInfo: newMoreInfo}); } - render() { - var accessList = []; + formatAuditInfo(currentAudit) { + const currentActionURL = currentAudit.action.replace(/\/api\/v[1-9]/, ''); - for (var i = 0; i < this.state.audits.length; i++) { - var currentAudit = this.state.audits[i]; - var currentDate = new Date(currentAudit.create_at); + let currentAuditDesc = ' '; + + /* Handle audit formatting semi-individually for each type and + fall back to a best guess case if none exists + + Supported audits: + /channels + - Create Channel X + - Update Channel X + - Update Channel Description X + - Delete Channel X + - Add User to Channel X + - Remove User from Channel X + + /oauth + - Register X + - Allow Attempt/Success/Failure X + + /team + - Revoke All Sessions X (NO CORRESPONDING ADDRESS/FUNCTION) + + - Revoke Session X + - Update (users - ?) X + - Update Notify (?) X + - Login Attempt X + - Login (success/failure) X + - Logout (/logout) X + - Verify Email (/verify_email) X + */ + switch (currentActionURL) { + + /* BREAK UP CHANNEL INTO OWN SWITCH STATEMENT TO REUSE VARIABLES AND BE CLEAN */ + case '/channels/create': + const createChannelInfo = currentAudit.extra_info.split('='); + let channelName = ''; + + if (createChannelInfo[0] === 'name') { + channelName = createChannelInfo[1]; + } + + currentAuditDesc = 'Created a new channel/group named ' + channelName; + + break; + case '/channels/update': + const updateChannelInfo = currentAudit.extra_info.split('='); + let originalChannelName = ''; + + if (updateChannelInfo[0] === 'name') { + originalChannelName = updateChannelInfo[1]; + } + + currentAuditDesc = 'Updated the channel/group name for ' + originalChannelName; + break; - if (!currentAudit.session_id && currentAudit.action.search('/users/login') !== -1) { - currentAudit.session_id = 'N/A (Login attempt)'; + /* case '/channels/update_desc': + const updateChannelInfo = currentAudit.extra_info.split('='); + let originalChannelName = ''; + + if (updateChannelInfo[0] === 'name') { + originalChannelName = updateChannelInfo[1]; } - const currentActionURL = currentAudit.action.replace(/\/api\/v[1-9]/, ''); - - let currentAuditDesc = ''; - - /* Handle specific audit type formatting semi-individually and - fall back to a best guess case if none exists - - Supported audits: - /channels - - Create Channel X - - Update Channel X - - Update Channel Description X - - Delete Channel X - - Add User to Channel X - - Remove User from Channel X - - /oauth - - Register X - - Allow Attempt/Success/Failure X - - /team - - Revoke All Sessions X (NO CORRESPONDING ADDRESS) - - - Update (users - ?) X - - Update Notify (?) X - - Login Attempt X - - Login (success/failure) X - - Logout (/logout) X - */ - switch (currentActionURL) { - case '/channels/create': - break; - case '/channels/update': - break; - case '/channels/update_desc': - break; - case /\/channels\/[A-Za-z0-9]+\/delete/: - break; - case /\/channels\/[A-Za-z0-9]+\/add/: - break; - case /\/channels\/[A-Za-z0-9]+\/remove/: - break; - case '/oauth/register': - break; - case '/oauth/allow': - break; - case '/team/': - break; - default: - let currentActionDesc = ''; + currentAuditDesc = 'Updated the channel/group name for ' + originalChannelName; + break;*/ + case /\/channels\/[A-Za-z0-9]+\/delete/: + break; + case /\/channels\/[A-Za-z0-9]+\/add/: + break; + case /\/channels\/[A-Za-z0-9]+\/remove/: + break; + case '/oauth/register': + break; + case '/oauth/allow': + break; + case '/users/login': + break; + case '/users/revoke_session': + break; + case '/users/newimage': + break; + case '/users/update': + break; + case '/users/newpassword': + break; + case '/users/update_roles': + break; + case '/users/update_active': + break; + case '/users/send_password_reset': + break; + case '/users/reset_password': + break; + case '/users/update_notify': + break; + case '/logout': + break; + case '/hooks/incoming/create': + break; + case '/hooks/incoming/delete': + break; + case '/verify_email': + break; + case '/oauth/access_token': + break; + case '': + break; + default: + if (currentAudit.extra_info.indexOf('revoked_all=') >= 0) { + // do stuff + } else { + let currentActionDesc = ' '; if (currentActionURL && currentActionURL.lastIndexOf('/') !== -1) { currentActionDesc = currentActionURL.substring(currentActionURL.lastIndexOf('/') + 1).replace('_', ' '); currentActionDesc = Utils.toTitleCase(currentActionDesc); } - let currentExtraInfoDesc = ''; + let currentExtraInfoDesc = ' '; if (currentAudit.extra_info) { currentExtraInfoDesc = currentAudit.extra_info; @@ -127,11 +181,23 @@ export default class AccessHistoryModal extends React.Component { currentExtraInfoDesc = currentExtraInfoDesc.substring(currentExtraInfoDesc.indexOf('=') + 1); } } - currentAuditDesc = currentActionDesc + ' ' + currentExtraInfoDesc; - break; } + break; + } + + const currentDate = new Date(currentAudit.create_at); + const currentAuditInfo = currentDate.toDateString() + ' - ' + currentDate.toLocaleTimeString(navigator.language, {hour: '2-digit', minute: '2-digit'}) + ' | ' + currentAuditDesc; + return currentAuditInfo; + } + render() { + var accessList = []; + + for (var i = 0; i < this.state.audits.length; i++) { + const currentAudit = this.state.audits[i]; + const currentAuditInfo = this.formatAuditInfo(currentAudit); + var moreInfo = ( <a href='#' @@ -143,8 +209,13 @@ export default class AccessHistoryModal extends React.Component { ); if (this.state.moreInfo[i]) { + if (!currentAudit.session_id && currentAudit.action.search('/users/login') !== -1) { + currentAudit.session_id = 'N/A (Login attempt)'; + } + moreInfo = ( <div> + <div>{'IP: ' + currentAudit.ip_address}</div> <div>{'Session ID: ' + currentAudit.session_id}</div> </div> ); @@ -161,7 +232,7 @@ export default class AccessHistoryModal extends React.Component { className='access-history__table' > <div className='access__report'> - <div className='report__time'>{currentDate.toDateString() + ' - ' + currentDate.toLocaleTimeString(navigator.language, {hour: '2-digit', minute: '2-digit'}) + ' | ' + currentAuditDesc + ' from ' + currentAudit.ip_address}</div> + <div className='report__time'>{currentAuditInfo}</div> <div className='report__info'> {moreInfo} </div> |