EVOLUTION-MANAGER
Edit File: 7.671628b9f49c9454bd0f.js
(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{1168:function(e,t,a){"use strict";a.d(t,"a",(function(){return d}));var s=a(33),i=a.n(s),n=a(7),r=a.n(n),l=a(1137),o=a(27);function c(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class d extends r.a.PureComponent{render(){const e="fa fa-1x fa-angle-right"+(this.props.additionalClassName?" "+this.props.additionalClassName:"");return r.a.createElement(l.a,{className:e,title:{id:Object(o.b)("generic_icons.next"),defaultMessage:"Next Icon"}})}}c(d,"propTypes",{additionalClassName:i.a.oneOfType([i.a.string,i.a.oneOf([null])])}),c(d,"defaultProps",{additionalClassName:null})},1195:function(e,t,a){"use strict";a.d(t,"a",(function(){return d}));var s=a(33),i=a.n(s),n=a(7),r=a.n(n),l=a(1137),o=a(27);function c(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class d extends r.a.PureComponent{render(){const e="fa fa-1x fa-angle-left"+(this.props.additionalClassName?" "+this.props.additionalClassName:"");return r.a.createElement(l.a,{className:e,title:{id:Object(o.b)("generic_icons.previous"),defaultMessage:"Previous Icon"}})}}c(d,"propTypes",{additionalClassName:i.a.oneOfType([i.a.string,i.a.oneOf([null])])}),c(d,"defaultProps",{additionalClassName:null})},1234:function(e,t,a){"use strict";a.d(t,"a",(function(){return n}));var s=a(7),i=a.n(s);class n extends i.a.PureComponent{render(){return i.a.createElement("svg",{width:"18px",height:"18px",viewBox:"0 0 18 18"},i.a.createElement("g",{id:"Developer-Export",stroke:"none",strokeWidth:"1",fillRule:"evenodd"},i.a.createElement("g",{transform:"translate(-285.000000, -933.000000)",id:"All-Team-Members"},i.a.createElement("g",{transform:"translate(245.000000, 698.000000)"},i.a.createElement("g",{id:"Channel-Administrators",transform:"translate(0.000000, 106.000000)"},i.a.createElement("g",{id:"data-table/column-1",transform:"translate(11.000000, 86.000000)"},i.a.createElement("g",{id:"row-checkbox---Public-Channels",transform:"translate(12.000000, 35.000000)"},i.a.createElement("g",{id:"Stacked-Group",transform:"translate(0.000000, 5.000000)"},i.a.createElement("g",{id:"data-table/1st/row-checkbox-label-base"},i.a.createElement("g",{id:"check-on-copy-11",transform:"translate(14.000000, 0.000000)"},i.a.createElement("path",{d:"M19,3 L5,3 C3.9,3 3,3.9 3,5 L3,19 C3,20.1 3.9,21 5,21 L19,21 C20.1,21 21,20.1 21,19 L21,5 C21,3.9 20.1,3 19,3 L19,3 Z M10,17 L5,12.1923077 L6.4,10.8461538 L10,14.3076923 L17.6,7 L19,8.34615385 L10,17 L10,17 Z",id:"checkbox---checked"})))))))))))}}},1349:function(e,t,a){"use strict";var s=a(309),i=a(6),n=a(20),r=a(10),l=a(13),o=(a(60),a(98),a(72),a(33)),c=a.n(o),d=a(7),m=a.n(d),u=a(1388),p=a(1106),h=a(1103),g=a(314),b=a(27),f=a(1118),_=a(14);const E=Object(u.defineMessages)({sessionRevoked:{id:Object(b.b)("audit_table.sessionRevoked"),defaultMessage:"The session with id {sessionId} was revoked"},channelCreated:{id:Object(b.b)("audit_table.channelCreated"),defaultMessage:"Created the {channelName} channel"},establishedDM:{id:Object(b.b)("audit_table.establishedDM"),defaultMessage:"Established a direct message channel with {username}"},nameUpdated:{id:Object(b.b)("audit_table.nameUpdated"),defaultMessage:"Updated the {channelName} channel name"},headerUpdated:{id:Object(b.b)("audit_table.headerUpdated"),defaultMessage:"Updated the {channelName} channel header"},channelDeleted:{id:Object(b.b)("audit_table.channelDeleted"),defaultMessage:"Archived the channel with the URL {url}"},userAdded:{id:Object(b.b)("audit_table.userAdded"),defaultMessage:"Added {username} to the {channelName} channel"},userRemoved:{id:Object(b.b)("audit_table.userRemoved"),defaultMessage:"Removed {username} to the {channelName} channel"},attemptedRegisterApp:{id:Object(b.b)("audit_table.attemptedRegisterApp"),defaultMessage:"Attempted to register a new OAuth Application with ID {id}"},attemptedAllowOAuthAccess:{id:Object(b.b)("audit_table.attemptedAllowOAuthAccess"),defaultMessage:"Attempted to allow a new OAuth service access"},successfullOAuthAccess:{id:Object(b.b)("audit_table.successfullOAuthAccess"),defaultMessage:"Successfully gave a new OAuth service access"},failedOAuthAccess:{id:Object(b.b)("audit_table.failedOAuthAccess"),defaultMessage:"Failed to allow a new OAuth service access - the redirect URI did not match the previously registered callback"},attemptedOAuthToken:{id:Object(b.b)("audit_table.attemptedOAuthToken"),defaultMessage:"Attempted to get an OAuth access token"},successfullOAuthToken:{id:Object(b.b)("audit_table.successfullOAuthToken"),defaultMessage:"Successfully added a new OAuth service"},oauthTokenFailed:{id:Object(b.b)("audit_table.oauthTokenFailed"),defaultMessage:"Failed to get an OAuth access token - {token}"},attemptedLogin:{id:Object(b.b)("audit_table.attemptedLogin"),defaultMessage:"Attempted to login"},authenticated:{id:Object(b.b)("audit_table.authenticated"),defauleMessage:"Successfully authenticated"},successfullLogin:{id:Object(b.b)("audit_table.successfullLogin"),defaultMessage:"Successfully logged in"},failedLogin:{id:Object(b.b)("audit_table.failedLogin"),defaultMessage:"FAILED login attempt"},updatePicture:{id:Object(b.b)("audit_table.updatePicture"),defaultMessage:"Updated your profile picture"},updateGeneral:{id:Object(b.b)("audit_table.updateGeneral"),defaultMessage:"Updated the general settings of your account"},attemptedPassword:{id:Object(b.b)("audit_table.attemptedPassword"),defaultMessage:"Attempted to change password"},successfullPassword:{id:Object(b.b)("audit_table.successfullPassword"),defaultMessage:"Successfully changed password"},failedPassword:{id:Object(b.b)("audit_table.failedPassword"),defaultMessage:"Failed to change password - tried to update user password who was logged in through OAuth"},updatedRol:{id:Object(b.b)("audit_table.updatedRol"),defaultMessage:"Updated user role(s) to "},member:{id:Object(b.b)("audit_table.member"),defaultMessage:"member"},accountActive:{id:Object(b.b)("audit_table.accountActive"),defaultMessage:"Account activated"},accountInactive:{id:Object(b.b)("audit_table.accountInactive"),defaultMessage:"Account deactivated"},by:{id:Object(b.b)("audit_table.by"),defaultMessage:" by {username}"},byAdmin:{id:Object(b.b)("audit_table.byAdmin"),defaultMessage:" by an admin"},sentEmail:{id:Object(b.b)("audit_table.sentEmail"),defaultMessage:"Sent an email to {email} to reset your password"},attemptedReset:{id:Object(b.b)("audit_table.attemptedReset"),defaultMessage:"Attempted to reset password"},successfullReset:{id:Object(b.b)("audit_table.successfullReset"),defaultMessage:"Successfully reset password"},updateGlobalNotifications:{id:Object(b.b)("audit_table.updateGlobalNotifications"),defaultMessage:"Updated your global notification settings"},attemptedWebhookCreate:{id:Object(b.b)("audit_table.attemptedWebhookCreate"),defaultMessage:"Attempted to create a webhook"},succcessfullWebhookCreate:{id:Object(b.b)("audit_table.successfullWebhookCreate"),defaultMessage:"Successfully created a webhook"},failedWebhookCreate:{id:Object(b.b)("audit_table.failedWebhookCreate"),defaultMessage:"Failed to create a webhook - bad channel permissions"},attemptedWebhookDelete:{id:Object(b.b)("audit_table.attemptedWebhookDelete"),defaultMessage:"Attempted to delete a webhook"},successfullWebhookDelete:{id:Object(b.b)("audit_table.successfullWebhookDelete"),defaultMessage:"Successfully deleted a webhook"},failedWebhookDelete:{id:Object(b.b)("audit_table.failedWebhookDelete"),defaultMessage:"Failed to delete a webhook - inappropriate conditions"},logout:{id:Object(b.b)("audit_table.logout"),defaultMessage:"Logged out of your account"},verified:{id:Object(b.b)("audit_table.verified"),defaultMessage:"Successfully verified your email address"},revokedAll:{id:Object(b.b)("audit_table.revokedAll"),defaultMessage:"Revoked all current sessions for the team"},loginAttempt:{id:Object(b.b)("audit_table.loginAttempt"),defaultMessage:" (Login attempt)"},loginFailure:{id:Object(b.b)("audit_table.loginFailure"),defaultMessage:" (Login failure)"},attemptedLicenseAdd:{id:Object(b.b)("audit_table.attemptedLicenseAdd"),defaultMessage:"Attempted to add new license"},successfullLicenseAdd:{id:Object(b.b)("audit_table.successfullLicenseAdd"),defaultMessage:"Successfully added new license"},failedExpiredLicenseAdd:{id:Object(b.b)("audit_table.failedExpiredLicenseAdd"),defaultMessage:"Failed to add a new license as it has either expired or not yet been started"},failedInvalidLicenseAdd:{id:Object(b.b)("audit_table.failedInvalidLicenseAdd"),defaultMessage:"Failed to add an invalid license"},licenseRemoved:{id:Object(b.b)("audit_table.licenseRemoved"),defaultMessage:"Successfully removed a license"}});class y extends m.a.PureComponent{componentDidMount(){const e=this.props.audits.map(e=>e.user_id);this.props.actions.getMissingProfilesByIds(e)}render(){const e=this.props.audits,t=this.props.showUserId,a=this.props.showIp,s=this.props.showSession;for(var i=[],n=0;n<e.length;n++){const r=e[n],l=this.formatAuditInfo(r);let o,c,d;t&&(o=m.a.createElement("td",{className:"word-break--all"},l.userId)),a&&(c=m.a.createElement("td",{className:"whitespace--nowrap word-break--all"},l.ip)),s&&(d=m.a.createElement("td",{className:"whitespace--nowrap word-break--all"},l.sessionId));let u="";-1!==l.desc.toLowerCase().indexOf("fail")&&(u=" color--error"),i[n]=m.a.createElement("tr",{key:r.id},m.a.createElement("td",{className:"whitespace--nowrap word-break--all"},l.timestamp),o,m.a.createElement("td",{className:"word-break--all"+u},l.desc),c,d)}let r,l,o;return t&&(r=m.a.createElement("th",null,m.a.createElement(p.a,{id:"audit_table.userId",defaultMessage:"User ID"}))),a&&(l=m.a.createElement("th",null,m.a.createElement(p.a,{id:"audit_table.ip",defaultMessage:"IP Address"}))),s&&(o=m.a.createElement("th",null,m.a.createElement(p.a,{id:"audit_table.session",defaultMessage:"Session ID"}))),m.a.createElement("table",{className:"table"},m.a.createElement("thead",null,m.a.createElement("tr",null,m.a.createElement("th",null,m.a.createElement(p.a,{id:"audit_table.timestamp",defaultMessage:"Timestamp"})),r,m.a.createElement("th",null,m.a.createElement(p.a,{id:"audit_table.action",defaultMessage:"Action"})),l,o)),m.a.createElement("tbody",null,i))}formatAuditInfo(e){const{formatMessage:t}=this.props.intl,a=e.action.replace(/\/api\/v[1-9]/,"");let s="";if(0===a.indexOf("/channels")){const n=e.extra_info.split(" "),r=n[0].split("=");let l,o="",c="";switch(r.indexOf("name")>=0&&(o=r[r.indexOf("name")+1],c=(l=this.props.getByName(o))?l.display_name:o),a){case"/channels/create":s=t(E.channelCreated,{channelName:c});break;case"/channels/create_direct":s=t(E.establishedDM,{username:Object(_.t)(l.id).username});break;case"/channels/update":s=t(E.nameUpdated,{channelName:c});break;case"/channels/update_desc":case"/channels/update_header":s=t(E.headerUpdated,{channelName:c});break;default:{let e=[],r="",l="";if(n[1]&&(e=n[1].split("=")).indexOf("user_id")>=0){r=e[e.indexOf("user_id")+1];var i=this.props.getUser(r);i&&(l=i.username)}/\/channels\/[A-Za-z0-9]+\/delete/.test(a)?s=t(E.channelDeleted,{url:o}):/\/channels\/[A-Za-z0-9]+\/add/.test(a)?s=t(E.userAdded,{username:l,channelName:c}):/\/channels\/[A-Za-z0-9]+\/remove/.test(a)&&(s=t(E.userRemoved,{username:l,channelName:c}));break}}}else if(0===a.indexOf("/oauth")){const i=e.extra_info.split(" ");switch(a){case"/oauth/register":{const e=i[0].split("=");"client_id"===e[0]&&(s=t(E.attemptedRegisterApp,{id:e[1]}));break}case"/oauth/allow":"attempt"===i[0]?s=t(E.attemptedAllowOAuthAccess):"success"===i[0]?s=t(E.successfullOAuthAccess):"fail - redirect_uri did not match registered callback"===i[0]&&(s=t(E.failedOAuthAccess));break;case"/oauth/access_token":if("attempt"===i[0])s=t(E.attemptedOAuthToken);else if("success"===i[0])s=t(E.successfullOAuthToken);else{const e=i[0].split("-");"fail"===e[0].trim()&&e[1]&&(s=t(e,{token:e[1].trim()}))}}}else if(0===a.indexOf("/users")){const i=e.extra_info.split(" ");switch(a){case"/users/login":"attempt"===i[0]?s=t(E.attemptedLogin):"success"===i[0]?s=t(E.successfullLogin):"authenticated"===i[0]?s=t(E.authenticated):i[0]&&(s=t(E.failedLogin));break;case"/users/revoke_session":s=t(E.sessionRevoked,{sessionId:i[0].split("=")[1]});break;case"/users/newimage":s=t(E.updatePicture);break;case"/users/update":s=t(E.updateGeneral);break;case"/users/newpassword":"attempted"===i[0]?s=t(E.attemptedPassword):"completed"===i[0]?s=t(E.successfullPassword):"failed - tried to update user password who was logged in through oauth"===i[0]&&(s=t(E.failedPassword));break;case"/users/update_roles":{const e=i[0].split("=")[1];s=t(E.updatedRol),e.trim()?s+=e:s+=t(E.member);break}case"/users/update_active":{const e=i[0].split("=")[0],a=i[0].split("=")[1];if("active"===e){"true"===a?s=t(E.accountActive):"false"===a&&(s=t(E.accountInactive));const e=i[1].split("=");if("session_user"===e[0]){const a=this.props.getUser(e[1]),i=this.props.currentUser;i&&a&&Object(_.ab)(i.roles)?s+=t(E.by,{username:a.username}):i&&a&&(s+=t(E.byAdmin))}}else"session_id"===e&&(s=t(E.sessionRevoked,{sessionId:a}));break}case"/users/send_password_reset":s=t(E.sentEmail,{email:i[0].split("=")[1]});break;case"/users/reset_password":"attempt"===i[0]?s=t(E.attemptedReset):"success"===i[0]&&(s=t(E.successfullReset));break;case"/users/update_notify":s=t(E.updateGlobalNotifications)}}else if(0===a.indexOf("/hooks")){const i=e.extra_info;switch(a){case"/hooks/incoming/create":"attempt"===i?s=t(E.attemptedWebhookCreate):"success"===i?s=t(E.succcessfullWebhookCreate):"fail - bad channel permissions"===i&&(s=t(E.failedWebhookCreate));break;case"/hooks/incoming/delete":"attempt"===i?s=t(E.attemptedWebhookDelete):"success"===i?s=t(E.successfullWebhookDelete):"fail - inappropriate conditions"===i&&(s=t(E.failedWebhookDelete))}}else if(0===a.indexOf("/license")){const i=e.extra_info;switch(a){case"/license/add":"attempt"===i?s=t(E.attemptedLicenseAdd):"success"===i?s=t(E.successfullLicenseAdd):"failed - expired or non-started license"===i?s=t(E.failedExpiredLicenseAdd):"failed - invalid license"===i&&(s=t(E.failedInvalidLicenseAdd));break;case"/license/remove":s=t(E.licenseRemoved)}}else if(0===a.indexOf("/admin/download_compliance_report"))s=Object(_.qb)(e.extra_info);else switch(a){case"/logout":s=t(E.logout);break;case"/verify_email":s=t(E.verified)}if(!s)if(e.extra_info.indexOf("revoked_all=")>=0)s=t(E.revokedAll);else{let t="";a&&-1!==a.lastIndexOf("/")&&(t=a.substring(a.lastIndexOf("/")+1).replace("_"," "),t=Object(_.qb)(t));let i="";e.extra_info&&-1!==(i=e.extra_info).indexOf("=")&&(i=i.substring(i.indexOf("=")+1)),s=t+" "+i}const n=new Date(e.create_at),r={};r.timestamp=m.a.createElement("div",null,m.a.createElement("div",null,m.a.createElement(h.a,{value:n,day:"2-digit",month:"short",year:"numeric"})),m.a.createElement("div",null,m.a.createElement(h.b,{value:n,hour:"2-digit",minute:"2-digit"})));const l=this.props.getUser(e.user_id);return r.userId=l?l.email:e.user_id,r.desc=s,r.ip=e.ip_address,r.sessionId=e.session_id,r}}var v,S,T;v=y,S="propTypes",T={intl:f.a.isRequired,audits:c.a.array.isRequired,showUserId:c.a.bool,showIp:c.a.bool,showSession:c.a.bool,currentUser:c.a.object.isRequired,getUser:c.a.func.isRequired,getByName:c.a.func.isRequired,actions:c.a.shape({getMissingProfilesByIds:c.a.func.isRequired}).isRequired},S in v?Object.defineProperty(v,S,{value:T,enumerable:!0,configurable:!0,writable:!0}):v[S]=T;var O=Object(g.c)(y);t.a=Object(s.connect)((function(e){return{currentUser:Object(r.getCurrentUser)(e),getUser:t=>Object(r.getUser)(e,t),getByName:t=>Object(l.getChannelByName)(e,t)}}),(function(e){return{actions:Object(i.bindActionCreators)({getMissingProfilesByIds:n.getMissingProfilesByIds},e)}}))(O)},1447:function(e,t){},1449:function(e,t){},1912:function(e,t,a){},1913:function(e,t,a){},1914:function(e,t,a){},1915:function(e,t,a){},1916:function(e,t,a){},1917:function(e,t,a){},1918:function(e,t,a){e.exports=a.p+"files/069c3bb3dec2befb54a0694265b0e7fc.png"},1919:function(e,t,a){e.exports=a.p+"files/6990c0422142b59e2cacdc823aab9d6d.png"},1933:function(e,t,a){"use strict";a.r(t);var s,i,n,r=a(309),l=a(6),o=a(1152),c=a(140),d=a(1194),m=a(1105),u=a(15),p=a(61),h=a(10),g=a(16),b=a(12),f=a(1123),_=a(1196),E=(a(34),a(21)),y=a(1232),v=(a(138),a(60),a(7)),S=a.n(v),T=a(1106),O=a(0),w=a(172),C=a(27),x=a(33),M=a.n(x),j=a(1114);class P extends S.a.Component{render(){return S.a.createElement("div",{className:"admin-console__header"},this.props.children)}}s=P,i="propTypes",n={children:M.a.oneOfType([M.a.arrayOf(M.a.element),M.a.element,M.a.string]).isRequired},i in s?Object.defineProperty(s,i,{value:n,enumerable:!0,configurable:!0,writable:!0}):s[i]=n;const A=e=>S.a.createElement(P,null,S.a.createElement(j.b,{id:e.id,defaultMessage:e.defaultMessage,values:e.values}));A.propTypes={id:M.a.string.isRequired,defaultMessage:M.a.string.isRequired,values:M.a.any},A.defaultProps={values:{}};var k=A,R=a(310),N=a.n(R),D=a(1463),L=a.n(D),I=a(14);function U(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class q extends S.a.PureComponent{constructor(...e){super(...e),U(this,"chart",null),U(this,"initChart",e=>{if(!this.refs.canvas)return;const t=N.a.findDOMNode(this.refs.canvas).getContext("2d"),a=JSON.parse(JSON.stringify(this.props.data));this.chart=new L.a(t,{type:"doughnut",data:a,options:{}}),e&&this.chart&&this.chart.update()})}componentDidMount(){this.initChart()}componentDidUpdate(e){I.c(e.data,this.props.data)||this.initChart(!0)}componentWillUnmount(){this.chart&&this.refs.canvas&&this.chart.destroy()}render(){let e;return e=null==this.props.data?S.a.createElement(T.a,{id:"analytics.chart.loading",defaultMessage:"Loading..."}):S.a.createElement("canvas",{ref:"canvas",width:this.props.width,height:this.props.height}),S.a.createElement("div",{className:"col-sm-6"},S.a.createElement("div",{className:"total-count"},S.a.createElement("div",{className:"title"},this.props.title),S.a.createElement("div",{className:"content"},e)))}}function B(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}U(q,"propTypes",{title:M.a.node.isRequired,width:M.a.number.isRequired,height:M.a.number.isRequired,data:M.a.object});class F extends S.a.PureComponent{constructor(...e){super(...e),B(this,"chart",null),B(this,"chartOptions",{legend:{display:!1}}),B(this,"initChart",e=>{if(!this.refs.canvas)return;const t=N.a.findDOMNode(this.refs.canvas).getContext("2d"),a=JSON.parse(JSON.stringify(this.props.data));this.chart=new L.a(t,{type:"line",data:a,options:this.chartOptions||{}}),e&&this.chart.update()})}componentDidMount(){this.initChart()}componentDidUpdate(e){if(!(this.props.data&&this.props.data.labels.length>0)&&this.chart&&(this.chart.destroy(),this.chart=null),I.c(e.data,this.props.data))return;const t=this.props.data&&this.props.data.labels.length>0,a=Boolean(this.chart);t&&this.initChart(a)}componentWillUnmount(){this.chart&&this.chart.destroy()}render(){let e;return e=null==this.props.data?S.a.createElement(T.a,{id:"analytics.chart.loading",defaultMessage:"Loading..."}):0===this.props.data.labels.length?S.a.createElement("h5",null,S.a.createElement(T.a,{id:"analytics.chart.meaningful",defaultMessage:"Not enough data for a meaningful representation."})):S.a.createElement("canvas",{ref:"canvas",width:this.props.width,height:this.props.height}),S.a.createElement("div",{className:"col-sm-12"},S.a.createElement("div",{className:"total-count by-day"},S.a.createElement("div",{className:"title"},this.props.title),S.a.createElement("div",{className:"content"},e)))}}B(F,"propTypes",{title:M.a.node.isRequired,width:M.a.number.isRequired,height:M.a.number.isRequired,data:M.a.object});class G extends S.a.PureComponent{render(){const e=S.a.createElement(T.a,{id:"analytics.chart.loading",defaultMessage:"Loading..."});return S.a.createElement("div",{className:"col-lg-3 col-md-4 col-sm-6"},S.a.createElement("div",{className:"total-count"},S.a.createElement("div",{className:"title"},this.props.title,S.a.createElement("i",{className:"fa "+this.props.icon})),S.a.createElement("div",{className:"content"},void 0===this.props.count||isNaN(this.props.count)?e:this.props.count)))}}function H(e){const t={labels:[],datasets:[{fillColor:"rgba(151,187,205,0.2)",borderColor:"rgba(151,187,205,1)",pointBackgroundColor:"rgba(151,187,205,1)",pointBorderColor:"#fff",pointHoverBackgroundColor:"#fff",pointHoverBorderColor:"rgba(151,187,205,1)",data:[]}]};for(const a in e)if(e[a]){const s=e[a];t.labels.push(s.name),t.datasets[0].data.push(s.value)}return t}function Y(e){const t={labels:[],datasets:[{label:"",fillColor:"rgba(151,187,205,0.2)",borderColor:"rgba(151,187,205,1)",pointBackgroundColor:"rgba(151,187,205,1)",pointBorderColor:"#fff",pointHoverBackgroundColor:"#fff",pointHoverBorderColor:"rgba(151,187,205,1)",data:[]}]};for(const a in e)if(e[a]){const s=e[a];t.labels.push(s.name),t.datasets[0].data.push(s.value)}return t}!function(e,t,a){t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a}(G,"propTypes",{title:M.a.node.isRequired,icon:M.a.string.isRequired,count:M.a.number});const W=O.Q.StatTypes;class z extends S.a.PureComponent{componentDidMount(){f.s(),f.q(),f.n(),f.t(),this.props.isLicensed&&f.m()}render(){const e=this.props.stats,t=this.props.isLicensed,a=-1===e[W.TOTAL_POSTS],s=H(e[W.POST_PER_DAY]),i=H(e[W.BOT_POST_PER_DAY]),n=Y(e[W.USERS_WITH_POSTS_PER_DAY]);let r,l,o,c,d,m,u,p,h,g,b;if(function(...e){const t=new Set;e.forEach(e=>{e.labels.forEach(e=>t.add(e))}),e.forEach(e=>{e.labels.length>0&&t.forEach(t=>{-1===e.labels.indexOf(t)&&(e.labels.push(t),e.datasets[0].data.push(0))})})}(s,i,n),a?r=S.a.createElement("div",{className:"banner"},S.a.createElement("div",{className:"banner__content"},S.a.createElement(j.b,{id:"analytics.system.skippedIntensiveQueries",defaultMessage:"To maximize performance, some statistics are disabled. You can [re-enable them in config.json](!https://docs.mattermost.com/administration/statistics.html)."}))):(l=S.a.createElement(G,{title:S.a.createElement(T.a,{id:"analytics.system.totalPosts",defaultMessage:"Total Posts"}),icon:"fa-comment",count:e[W.TOTAL_POSTS]}),c=S.a.createElement("div",{className:"row"},S.a.createElement(F,{title:S.a.createElement(T.a,{id:"analytics.system.totalBotPosts",defaultMessage:"Total Posts from Bots"}),data:i,width:740,height:225})),o=S.a.createElement("div",{className:"row"},S.a.createElement(F,{title:S.a.createElement(T.a,{id:"analytics.system.totalPosts",defaultMessage:"Total Posts"}),data:s,width:740,height:225})),d=S.a.createElement("div",{className:"row"},S.a.createElement(F,{title:S.a.createElement(T.a,{id:"analytics.system.activeUsers",defaultMessage:"Active Users With Posts"}),data:n,width:740,height:225}))),this.props.isLicensed){p=S.a.createElement(G,{title:S.a.createElement(T.a,{id:"analytics.system.totalSessions",defaultMessage:"Total Sessions"}),icon:"fa-signal",count:e[W.TOTAL_SESSIONS]}),h=S.a.createElement(G,{title:S.a.createElement(T.a,{id:"analytics.system.totalCommands",defaultMessage:"Total Commands"}),icon:"fa-terminal",count:e[W.TOTAL_COMMANDS]}),g=S.a.createElement(G,{title:S.a.createElement(T.a,{id:"analytics.system.totalIncomingWebhooks",defaultMessage:"Incoming Webhooks"}),icon:"fa-arrow-down",count:e[W.TOTAL_IHOOKS]}),b=S.a.createElement(G,{title:S.a.createElement(T.a,{id:"analytics.system.totalOutgoingWebhooks",defaultMessage:"Outgoing Webhooks"}),icon:"fa-arrow-up",count:e[W.TOTAL_OHOOKS]}),m=S.a.createElement("div",null,S.a.createElement(G,{title:S.a.createElement(T.a,{id:"analytics.system.totalWebsockets",defaultMessage:"WebSocket Conns"}),icon:"fa-user",count:e[W.TOTAL_WEBSOCKET_CONNECTIONS]}),S.a.createElement(G,{title:S.a.createElement(T.a,{id:"analytics.system.totalMasterDbConnections",defaultMessage:"Master DB Conns"}),icon:"fa-terminal",count:e[W.TOTAL_MASTER_DB_CONNECTIONS]}),S.a.createElement(G,{title:S.a.createElement(T.a,{id:"analytics.system.totalReadDbConnections",defaultMessage:"Replica DB Conns"}),icon:"fa-terminal",count:e[W.TOTAL_READ_DB_CONNECTIONS]}));const t=(y=e[W.TOTAL_PUBLIC_CHANNELS],v=e[W.TOTAL_PRIVATE_GROUPS],{labels:[I.gb("analytics.system.publicChannels","Public Channels"),I.gb("analytics.system.privateGroups","Private Channels")],datasets:[{data:[y,v],backgroundColor:["#46BFBD","#FDB45C"],hoverBackgroundColor:["#5AD3D1","#FFC870"]}]}),a=(f=e[W.TOTAL_FILE_POSTS],_=e[W.TOTAL_HASHTAG_POSTS],E=e[W.TOTAL_POSTS],{labels:[I.gb("analytics.system.totalFilePosts","Posts with Files"),I.gb("analytics.system.totalHashtagPosts","Posts with Hashtags"),I.gb("analytics.system.textPosts","Posts with Text-only")],datasets:[{data:[f,_,E-f-_],backgroundColor:["#46BFBD","#F7464A","#FDB45C"],hoverBackgroundColor:["#5AD3D1","#FF5A5E","#FFC870"]}]});let s;-1!==e[W.TOTAL_POSTS]&&(s=S.a.createElement(q,{title:S.a.createElement(T.a,{id:"analytics.system.postTypes",defaultMessage:"Posts, Files and Hashtags"}),data:a,width:300,height:225})),u=S.a.createElement("div",{className:"row"},S.a.createElement(q,{title:S.a.createElement(T.a,{id:"analytics.system.channelTypes",defaultMessage:"Channel Types"}),data:t,width:300,height:225}),s)}var f,_,E,y,v;const O=S.a.createElement(G,{title:S.a.createElement(T.a,{id:"analytics.system.totalUsers",defaultMessage:"Total Active Users"}),icon:"fa-user",count:e[W.TOTAL_USERS]}),w=S.a.createElement(G,{title:S.a.createElement(T.a,{id:"analytics.system.totalTeams",defaultMessage:"Total Teams"}),icon:"fa-users",count:e[W.TOTAL_TEAMS]}),C=S.a.createElement(G,{title:S.a.createElement(T.a,{id:"analytics.system.totalChannels",defaultMessage:"Total Channels"}),icon:"fa-globe",count:e[W.TOTAL_PUBLIC_CHANNELS]+e[W.TOTAL_PRIVATE_GROUPS]}),x=S.a.createElement(G,{title:S.a.createElement(T.a,{id:"analytics.system.dailyActiveUsers",defaultMessage:"Daily Active Users"}),icon:"fa-users",count:e[W.DAILY_ACTIVE_USERS]}),M=S.a.createElement(G,{title:S.a.createElement(T.a,{id:"analytics.system.monthlyActiveUsers",defaultMessage:"Monthly Active Users"}),icon:"fa-users",count:e[W.MONTHLY_ACTIVE_USERS]});let P,A;t&&a?(P=S.a.createElement("div",null,O,w,C,p),A=S.a.createElement("div",null,h,g,b)):t&&!a?(P=S.a.createElement("div",null,O,w,C,l),A=S.a.createElement("div",null,p,h,g,b)):t||(P=S.a.createElement("div",null,O,w,C,l));const R=S.a.createElement("div",null,x,M);return S.a.createElement("div",{className:"wrapper--fixed team_statistics"},S.a.createElement(k,{id:"analytics.system.title",defaultMessage:"System Statistics"}),S.a.createElement("div",{className:"admin-console__wrapper"},S.a.createElement("div",{className:"admin-console__content"},r,S.a.createElement("div",{className:"row"},P,A,R,m),u,o,c,d)))}}!function(e,t,a){t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a}(z,"propTypes",{isLicensed:M.a.bool.isRequired,stats:M.a.object});var V=Object(r.connect)((function(e){return{isLicensed:"true"===Object(u.getLicense)(e).IsLicensed,stats:e.entities.admin.analytics}}))(z),X=a(173),J=a(20),K=a(1213),Q=a(175),Z=(a(52),a(1103)),$=a(1119);a(591);const ee=e=>{let t=S.a.createElement(T.a,{id:"admin.banner.heading",defaultMessage:"Note:"});return e.title&&(t=e.title),S.a.createElement("div",{className:"banner"},S.a.createElement("div",{className:"banner__content"},S.a.createElement("h4",{className:"banner__heading"},t),S.a.createElement("p",null,e.description)))};ee.propTypes={title:M.a.element,description:M.a.element.isRequired};var te=ee,ae=a(1390),se=a(1117);class ie extends S.a.PureComponent{render(){return S.a.createElement("div",{className:"col-sm-6"},S.a.createElement("div",{className:"total-count recent-active-users"},S.a.createElement("div",{className:"title"},this.props.title),S.a.createElement("div",{className:"content"},S.a.createElement("table",null,S.a.createElement("tbody",null,this.props.data.map(e=>{const t=S.a.createElement(ae.a,{id:"tip-table-entry-"+e.name},e.tip);return S.a.createElement("tr",{key:"table-entry-"+e.name},S.a.createElement("td",null,S.a.createElement(se.a,{delayShow:O.Q.OVERLAY_TIME_DELAY,placement:"top",overlay:t},S.a.createElement("time",null,e.name))),S.a.createElement("td",null,e.value))}))))))}}function ne(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}!function(e,t,a){t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a}(ie,"propTypes",{title:M.a.node.isRequired,data:M.a.arrayOf(M.a.shape({name:M.a.string.isRequired,tip:M.a.string.isRequired,value:M.a.node.isRequired})).isRequired});const re="last_analytics_team";class le extends S.a.Component{constructor(e){super(e),ne(this,"getData",async e=>{f.s(e),f.q(e),f.n(e),f.t(e);const{data:t}=await this.props.actions.getProfilesInTeam(e,0,b.General.PROFILE_CHUNK_SIZE,"last_activity_at"),{data:a}=await this.props.actions.getProfilesInTeam(e,0,b.General.PROFILE_CHUNK_SIZE,"create_at");this.setState({recentlyActiveUsers:t,newUsers:a})}),ne(this,"handleTeamChange",e=>{const t=e.target.value;let a;this.props.teams.forEach(e=>{e.id===t&&(a=e)}),this.setState({team:a}),K.a.setGlobalItem(re,t)}),this.state={team:e.initialTeam,recentlyActiveUsers:[],newUsers:[]}}componentDidMount(){this.state.team&&this.getData(this.state.team.id),this.props.actions.getTeams(0,1e3)}componentDidUpdate(e,t){this.state.team&&t.team!==this.state.team&&this.getData(this.state.team.id)}render(){if(0===this.props.teams.length||!this.state.team||!this.props.stats[this.state.team.id])return S.a.createElement($.a,null);if(null==this.state.team)return S.a.createElement(te,{description:S.a.createElement(T.a,{id:"analytics.team.noTeams",defaultMessage:"There are no teams on this server for which to view statistics."})});const e=this.props.stats[this.state.team.id],t=H(e[O.H.POST_PER_DAY]),a=Y(e[O.H.USERS_WITH_POSTS_PER_DAY]);let s,i,n,r=S.a.createElement("div",{className:"banner"},S.a.createElement("div",{className:"banner__content"},S.a.createElement(T.a,{id:"analytics.system.info",defaultMessage:"Only data for the chosen team is calculated. Excludes posts made in direct message channels, which are not tied to a team."})));-1===e[O.H.TOTAL_POSTS]?r=S.a.createElement("div",{className:"banner"},S.a.createElement("div",{className:"banner__content"},S.a.createElement(j.b,{id:"analytics.system.infoAndSkippedIntensiveQueries",defaultMessage:"Only data for the chosen team is calculated. Excludes posts made in direct message channels, which are not tied to a team. \\n \\n Some statistics have been omitted because they put too much load on the system to calculate. See [https://docs.mattermost.com/administration/statistics.html](!https://docs.mattermost.com/administration/statistics.html) for more details."}))):(s=S.a.createElement(G,{title:S.a.createElement(T.a,{id:"analytics.team.totalPosts",defaultMessage:"Total Posts"}),icon:"fa-comment",count:e[O.H.TOTAL_POSTS]}),i=S.a.createElement("div",{className:"row"},S.a.createElement(F,{key:this.state.team.id,title:S.a.createElement(T.a,{id:"analytics.team.totalPosts",defaultMessage:"Total Posts"}),data:t,width:740,height:225})),n=S.a.createElement("div",{className:"row"},S.a.createElement(F,{key:this.state.team.id,title:S.a.createElement(T.a,{id:"analytics.team.activeUsers",defaultMessage:"Active Users With Posts"}),data:a,width:740,height:225})));const l=function(e,t){if(null==e)return[];return e.map(e=>{const a={};return a.name=e.username,a.value=S.a.createElement(Z.a,{value:e.last_activity_at,day:"numeric",month:Object(C.a)(t),year:"numeric",hour12:!0,hour:"2-digit",minute:"2-digit"}),a.tip=e.email,a})}(this.state.recentlyActiveUsers,this.props.locale),o=function(e,t){if(null==e)return[];return e.map(e=>{const a={};return a.name=e.username,a.value=S.a.createElement(Z.a,{value:e.create_at,day:"numeric",month:Object(C.a)(t),year:"numeric",hour12:!0,hour:"2-digit",minute:"2-digit"}),a.tip=e.email,a})}(this.state.newUsers,this.props.locale),c=this.props.teams.sort((e,t)=>{const a=e.display_name.toUpperCase(),s=t.display_name.toUpperCase();return a===s?0:a>s?1:-1}).map(e=>S.a.createElement("option",{key:e.id,value:e.id},e.display_name));return S.a.createElement("div",{className:"wrapper--fixed team_statistics"},S.a.createElement("div",{className:"admin-console__header team-statistics__header-row"},S.a.createElement("div",{className:"team-statistics__header"},S.a.createElement(j.b,{id:"analytics.team.title",defaultMessage:"Team Statistics for {team}",values:{team:this.state.team.display_name}})),S.a.createElement("div",{className:"team-statistics__team-filter"},S.a.createElement("select",{className:"form-control team-statistics__team-filter__dropdown",onChange:this.handleTeamChange,value:this.state.team.id},c))),S.a.createElement("div",{className:"admin-console__wrapper"},S.a.createElement("div",{className:"admin-console__content"},r,S.a.createElement("div",{className:"row"},S.a.createElement(G,{title:S.a.createElement(T.a,{id:"analytics.team.totalUsers",defaultMessage:"Total Active Users"}),icon:"fa-users",count:e[O.H.TOTAL_USERS]}),S.a.createElement(G,{title:S.a.createElement(T.a,{id:"analytics.team.publicChannels",defaultMessage:"Public Channels"}),icon:"fa-globe",count:e[O.H.TOTAL_PUBLIC_CHANNELS]}),S.a.createElement(G,{title:S.a.createElement(T.a,{id:"analytics.team.privateGroups",defaultMessage:"Private Channels"}),icon:"fa-lock",count:e[O.H.TOTAL_PRIVATE_GROUPS]}),s),i,n,S.a.createElement("div",{className:"row"},S.a.createElement(ie,{title:S.a.createElement(T.a,{id:"analytics.team.recentUsers",defaultMessage:"Recent Active Users"}),data:l}),S.a.createElement(ie,{title:S.a.createElement(T.a,{id:"analytics.team.newlyCreated",defaultMessage:"Newly Created Users"}),data:o})))))}}ne(le,"propTypes",{teams:M.a.arrayOf(M.a.object).isRequired,initialTeam:M.a.object,locale:M.a.string.isRequired,stats:M.a.object.isRequired,actions:M.a.shape({getTeams:M.a.func.isRequired,getProfilesInTeam:M.a.func.isRequired}).isRequired});const oe="last_analytics_team";var ce=Object(r.connect)((function(e){const t=Object(g.getTeamsList)(e),a=K.a.getGlobalItem(oe,null);return{initialTeam:e.entities.teams.teams[a]||(t.length>0?t[0]:null),locale:Object(Q.a)(e),teams:t,stats:e.entities.admin.teamAnalytics}}),(function(e){return{actions:Object(l.bindActionCreators)({getTeams:X.getTeams,getProfilesInTeam:J.getProfilesInTeam},e)}}))(le),de=a(1426),me=a(1104),ue=a(1110),pe=a.n(ue),he=a(326),ge=a.n(he),be=a(1121),fe=(a(98),a(1303)),_e=a(1150),Ee=a(1129);function ye(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,s)}return a}function ve(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class Se extends S.a.Component{constructor(e){super(e),ve(this,"handleSaved",void 0),ve(this,"canSave",void 0),ve(this,"closeTooltip",()=>{this.setState({errorTooltip:!1})}),ve(this,"openTooltip",e=>{const t=e.currentTarget.querySelector(".control-label");if(t){const e=t.offsetWidth<t.scrollWidth;this.setState({errorTooltip:e})}}),ve(this,"handleChange",(e,t)=>{this.setState(a=>(function(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?ye(a,!0).forEach((function(t){ve(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):ye(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e})({},a,{saveNeeded:!0,[e]:t})),this.props.setNavigationBlocked&&this.props.setNavigationBlocked(!0)}),ve(this,"handleSubmit",e=>{e.preventDefault(),this.doSubmit()}),ve(this,"doSubmit",async e=>{this.setState({saving:!0,serverError:null});let t=JSON.parse(JSON.stringify(this.props.config));if(t=this.getConfigFromState(t),this.props.updateConfig){const{data:a,error:s}=await this.props.updateConfig(t);a?(this.setState(this.getStateFromConfig(a)),this.setState({saveNeeded:!1,saving:!1}),this.props.setNavigationBlocked&&this.props.setNavigationBlocked(!1),e&&e(),this.handleSaved&&this.handleSaved(t)):s&&(this.setState({saving:!1,serverError:s.message,serverErrorId:s.server_error_id}),e&&e(),this.handleSaved&&this.handleSaved(t))}}),ve(this,"parseInt",(e,t)=>{const a=parseInt(e,10);return isNaN(a)?t||0:a}),ve(this,"parseIntNonNegative",(e,t)=>{const a=parseInt(e,10);return isNaN(a)||a<0?t||0:a}),ve(this,"parseIntNonZero",(e,t,a=1)=>{const s=parseInt(e,10);return isNaN(s)||s<a?t||1:s}),ve(this,"isSetByEnv",e=>Boolean(this.props.environmentConfig&&this.getConfigValue(this.props.environmentConfig,e)));const t={saveNeeded:!1,saving:!1,serverError:null,errorTooltip:!1};e.config?this.state=Object.assign(this.getStateFromConfig(e.config),t):this.state=t}getConfigValue(e,t){return t.split(".").reduce((e,t)=>e?e[t]:null,e)}setConfigValue(e,t,a){!function e(t,s){const i=s[0];1===s.length?Object.assign(t,{[i]:a}):(null==t[i]&&Object.assign(t,{[i]:{}}),e(t[i],s.slice(1)))}(e,t.split("."))}render(){return S.a.createElement("form",{className:"form-horizontal",role:"form",onSubmit:this.handleSubmit},S.a.createElement("div",{className:"wrapper--fixed"},S.a.createElement(P,null,this.renderTitle()),this.renderSettings(),S.a.createElement("div",{className:"admin-console-save"},S.a.createElement(_e.a,{saving:this.state.saving,disabled:!this.state.saveNeeded||this.canSave&&!this.canSave(),onClick:this.handleSubmit,savingMessage:Object(I.gb)("admin.saving","Saving Config...")}),S.a.createElement("div",{className:"error-message",ref:"errorMessage",onMouseOver:this.openTooltip,onMouseOut:this.closeTooltip},S.a.createElement(Ee.a,{error:this.state.serverError})),S.a.createElement(fe.a,{show:this.state.errorTooltip,placement:"top",target:this.refs.errorMessage},S.a.createElement(ae.a,{id:"error-tooltip"},this.state.serverError)))))}}ve(Se,"propTypes",{config:M.a.object,environmentConfig:M.a.object,setNavigationBlocked:M.a.func,updateConfig:M.a.func});var Te=function(){return S.a.createElement("div",{className:"alert alert-warning"},S.a.createElement(T.a,{id:"admin.set_by_env",defaultMessage:"This setting has been set through an environment variable. It cannot be changed through the System Console."}))};class Oe extends v.PureComponent{render(){const{children:e,setByEnv:t,helpText:a,inputId:s,label:i}=this.props;return S.a.createElement("div",{"data-testid":s,className:"form-group"},S.a.createElement("label",{className:"control-label col-sm-4",htmlFor:s},i),S.a.createElement("div",{className:"col-sm-8"},e,S.a.createElement("div",{"data-testid":s+"help-text",className:"help-text"},a),t?S.a.createElement(Te,null):null))}}function we(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}!function(e,t,a){t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a}(Oe,"propTypes",{inputId:M.a.string,label:M.a.node.isRequired,children:M.a.node.isRequired,helpText:M.a.node,setByEnv:M.a.bool});class Ce extends S.a.Component{constructor(...e){super(...e),we(this,"handleChange",e=>{this.props.onChange(this.props.id,"true"===e.target.value)})}render(){let e;return e=this.props.disabled&&this.props.disabledText?S.a.createElement("div",null,S.a.createElement("span",{className:"admin-console__disabled-text"},this.props.disabledText),this.props.helpText):this.props.helpText,S.a.createElement(Oe,{inputId:this.props.id,label:this.props.label,helpText:e,setByEnv:this.props.setByEnv},S.a.createElement("a",{id:this.props.id}),S.a.createElement("label",{className:"radio-inline"},S.a.createElement("input",{"data-testid":this.props.id+"true",type:"radio",value:"true",id:I.h(this.props.id)+"true",name:this.props.id,checked:this.props.value,onChange:this.handleChange,disabled:this.props.disabled||this.props.setByEnv}),this.props.trueText),S.a.createElement("label",{className:"radio-inline"},S.a.createElement("input",{"data-testid":this.props.id+"false",type:"radio",value:"false",id:I.h(this.props.id)+"false",name:this.props.id,checked:!this.props.value,onChange:this.handleChange,disabled:this.props.disabled||this.props.setByEnv}),this.props.falseText))}}we(Ce,"propTypes",{id:M.a.string.isRequired,label:M.a.node.isRequired,value:M.a.bool.isRequired,onChange:M.a.func.isRequired,trueText:M.a.node,falseText:M.a.node,disabled:M.a.bool,setByEnv:M.a.bool.isRequired,disabledText:M.a.node,helpText:M.a.node.isRequired}),we(Ce,"defaultProps",{trueText:S.a.createElement(T.a,{id:"admin.true",defaultMessage:"true"}),falseText:S.a.createElement(T.a,{id:"admin.false",defaultMessage:"false"}),disabled:!1});class xe extends S.a.Component{static get propTypes(){return{show:M.a.bool.isRequired,header:M.a.node,children:M.a.node,container:M.a.bool}}static get defaultProps(){return{show:!0,container:!0}}render(){let e="",t="";if(!this.props.show)return null;this.props.container&&(e="admin-console__wrapper",t="admin-console__content");let a=null;return this.props.header&&(a=S.a.createElement("h4",null,this.props.header)),S.a.createElement("div",{className:e},S.a.createElement("div",{className:t},a,this.props.children))}}var Me=a(1368);function je(e,t){if(null==e)return{};var a,s,i=function(e,t){if(null==e)return{};var a,s,i={},n=Object.keys(e);for(s=0;s<n.length;s++)a=n[s],t.indexOf(a)>=0||(i[a]=e[a]);return i}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(s=0;s<n.length;s++)a=n[s],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}const Pe=e=>{const{setByEnv:t,disabled:a}=e,s=je(e,["setByEnv","disabled"]),i=e.disabled||e.setByEnv;return S.a.createElement(Me.a,Object.assign({},s,{labelClassName:"col-sm-4",inputClassName:"col-sm-8",disabled:i,footer:t?S.a.createElement(Te,null):null}))};Pe.propTypes={setByEnv:M.a.bool.isRequired};var Ae=Pe;function ke(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}const Re=({state:e})=>{switch(e){case ge.a.PLUGIN_STATE_NOT_RUNNING:return S.a.createElement(T.a,{id:"admin.plugin.state.not_running",defaultMessage:"Not running"});case ge.a.PLUGIN_STATE_STARTING:return S.a.createElement(T.a,{id:"admin.plugin.state.starting",defaultMessage:"Starting"});case ge.a.PLUGIN_STATE_RUNNING:return S.a.createElement(T.a,{id:"admin.plugin.state.running",defaultMessage:"Running"});case ge.a.PLUGIN_STATE_FAILED_TO_START:return S.a.createElement(T.a,{id:"admin.plugin.state.failed_to_start",defaultMessage:"Failed to start"});case ge.a.PLUGIN_STATE_FAILED_TO_STAY_RUNNING:return S.a.createElement(T.a,{id:"admin.plugin.state.failed_to_stay_running",defaultMessage:"Crashing"});case ge.a.PLUGIN_STATE_STOPPING:return S.a.createElement(T.a,{id:"admin.plugin.state.stopping",defaultMessage:"Stopping"});default:return S.a.createElement(T.a,{id:"admin.plugin.state.unknown",defaultMessage:"Unknown"})}};Re.propTypes={state:M.a.number.isRequired};const Ne=({state:e})=>{switch(e){case ge.a.PLUGIN_STATE_NOT_RUNNING:return S.a.createElement("div",{className:"alert alert-info"},S.a.createElement("i",{className:"fa fa-ban"}),S.a.createElement(T.a,{id:"admin.plugin.state.not_running.description",defaultMessage:"This plugin is not enabled."}));case ge.a.PLUGIN_STATE_STARTING:return S.a.createElement("div",{className:"alert alert-success"},S.a.createElement("i",{className:"fa fa-info"}),S.a.createElement(T.a,{id:"admin.plugin.state.starting.description",defaultMessage:"This plugin is starting."}));case ge.a.PLUGIN_STATE_RUNNING:return S.a.createElement("div",{className:"alert alert-success"},S.a.createElement("i",{className:"fa fa-check"}),S.a.createElement(T.a,{id:"admin.plugin.state.running.description",defaultMessage:"This plugin is running."}));case ge.a.PLUGIN_STATE_FAILED_TO_START:return S.a.createElement("div",{className:"alert alert-warning"},S.a.createElement("i",{className:"fa fa-warning"}),S.a.createElement(T.a,{id:"admin.plugin.state.failed_to_start.description",defaultMessage:"This plugin failed to start. Check your system logs for errors."}));case ge.a.PLUGIN_STATE_FAILED_TO_STAY_RUNNING:return S.a.createElement("div",{className:"alert alert-warning"},S.a.createElement("i",{className:"fa fa-warning"}),S.a.createElement(T.a,{id:"admin.plugin.state.failed_to_stay_running.description",defaultMessage:"This plugin crashed multiple times and is no longer running. Check your system logs for errors."}));case ge.a.PLUGIN_STATE_STOPPING:return S.a.createElement("div",{className:"alert alert-info"},S.a.createElement("i",{className:"fa fa-info"}),S.a.createElement(T.a,{id:"admin.plugin.state.stopping.description",defaultMessage:"This plugin is stopping."}));default:return null}};Ne.propTypes={state:M.a.number.isRequired};const De=({pluginStatus:e,removing:t,handleEnable:a,handleDisable:s,handleRemove:i,showInstances:n,hasSettings:r})=>{let l;const o=e.state===ge.a.PLUGIN_STATE_STARTING,c=e.state===ge.a.PLUGIN_STATE_STOPPING;l=e.active?S.a.createElement("a",{"data-plugin-id":e.id,disabled:c,onClick:s},c?S.a.createElement(T.a,{id:"admin.plugin.disabling",defaultMessage:"Disabling..."}):S.a.createElement(T.a,{id:"admin.plugin.disable",defaultMessage:"Disable"})):S.a.createElement("a",{"data-plugin-id":e.id,disabled:o,onClick:a},o?S.a.createElement(T.a,{id:"admin.plugin.enabling",defaultMessage:"Enabling..."}):S.a.createElement(T.a,{id:"admin.plugin.enable",defaultMessage:"Enable"}));let d,m=null;r&&(m=S.a.createElement("span",null," - ",S.a.createElement(me.a,{to:"/admin_console/plugins/plugin_"+e.id},S.a.createElement(T.a,{id:"admin.plugin.settingsButton",defaultMessage:"Settings"})))),d=t?S.a.createElement(T.a,{id:"admin.plugin.removing",defaultMessage:"Removing..."}):S.a.createElement(T.a,{id:"admin.plugin.remove",defaultMessage:"Remove"});const u=S.a.createElement("span",null," - ",S.a.createElement("a",{"data-plugin-id":e.id,disabled:t,onClick:i},d));let p;e.description&&(p=S.a.createElement("div",{className:"padding-top"},e.description));const h=[];e.instances.some(t=>t.version!==e.version)&&h.push(S.a.createElement("div",{key:"multiple-versions",className:"alert alert-warning"},S.a.createElement("i",{className:"fa fa-warning"}),S.a.createElement(T.a,{id:"admin.plugin.multiple_versions_warning",defaultMessage:"There are multiple versions of this plugin installed across your cluster. Re-install this plugin to ensure it works consistently."}))),h.push(S.a.createElement(Ne,{key:"state-description",state:e.state}));const g=e.instances.slice();let b;return g.sort((e,t)=>e.cluster_id<t.cluster_id?-1:e.cluster_id>t.cluster_id?1:0),n&&(b=S.a.createElement("div",{className:"padding-top x2 padding-bottom"},S.a.createElement("div",{className:"row"},S.a.createElement("div",{className:"col-md-6"},S.a.createElement("strong",null,S.a.createElement(T.a,{id:"admin.plugin.cluster_instance",defaultMessage:"Cluster Instance"}))),S.a.createElement("div",{className:"col-md-3"},S.a.createElement("strong",null,S.a.createElement(T.a,{id:"admin.plugin.version_title",defaultMessage:"Version"}))),S.a.createElement("div",{className:"col-md-3"},S.a.createElement("strong",null,S.a.createElement(T.a,{id:"admin.plugin.state",defaultMessage:"State"})))),g.map(e=>S.a.createElement("div",{key:e.cluster_id,className:"row"},S.a.createElement("div",{className:"col-md-6"},e.cluster_id),S.a.createElement("div",{className:"col-md-3"},e.version),S.a.createElement("div",{className:"col-md-3"},S.a.createElement(Re,{state:e.state})))))),S.a.createElement("div",{"data-testid":e.id},S.a.createElement("div",null,S.a.createElement("strong",null,e.name)," (",e.id," - ",e.version,")"),p,S.a.createElement("div",{className:"padding-top"},l,u,m),S.a.createElement("div",null,h),S.a.createElement("div",null,b),S.a.createElement("hr",null))};De.propTypes={pluginStatus:M.a.object.isRequired,removing:M.a.bool.isRequired,handleEnable:M.a.func.isRequired,handleDisable:M.a.func.isRequired,handleRemove:M.a.func.isRequired,showInstances:M.a.bool.isRequired,hasSettings:M.a.bool.isRequired};class Le extends Se{constructor(e){super(e),ke(this,"getConfigFromState",e=>(e.PluginSettings.Enable=this.state.enable,e.PluginSettings.EnableUploads=this.state.enableUploads,e.PluginSettings.AllowInsecureDownloadUrl=this.state.allowInsecureDownloadUrl,e.PluginSettings.EnableMarketplace=this.state.enableMarketplace,e.PluginSettings.EnableRemoteMarketplace=this.state.enableRemoteMarketplace,e.PluginSettings.AutomaticPrepackagedPlugins=this.state.automaticPrepackagedPlugins,e.PluginSettings.MarketplaceUrl=this.state.marketplaceUrl,e.PluginSettings.RequirePluginSignature=this.state.requirePluginSignature,e)),ke(this,"handleUpload",()=>{this.setState({lastMessage:null,serverError:null});const e=this.refs.fileInput;e.files.length>0&&this.setState({fileSelected:!0,file:e.files[0]})}),ke(this,"helpSubmitUpload",async(e,t)=>{this.setState({uploading:!0});const{error:a}=await this.props.actions.uploadPlugin(e,t);if(a)return"app.plugin.install_id.app_error"!==a.server_error_id||t?(this.setState({file:null,fileSelected:!1,uploading:!1}),"app.plugin.activate.app_error"===a.server_error_id?this.setState({serverError:I.gb("admin.plugin.error.activate","Unable to upload the plugin. It may conflict with another plugin on your server.")}):"app.plugin.extract.app_error"===a.server_error_id?this.setState({serverError:I.gb("admin.plugin.error.extract","Encountered an error when extracting the plugin. Review your plugin file content and try again.")}):this.setState({serverError:a.message}),void this.setState({file:null,fileSelected:!1})):void this.setState({confirmOverwriteUploadModal:!0,overwritingUpload:!0});this.setState({loading:!0}),await this.props.actions.getPlugins();let s="Successfully uploaded plugin from ".concat(e.name);this.state.overwritingUpload&&(s="Successfully updated plugin from ".concat(e.name)),this.setState({file:null,fileSelected:!1,serverError:null,lastMessage:s,overwritingUpload:!1,uploading:!1,loading:!1})}),ke(this,"handleSubmitUpload",e=>{e.preventDefault();const t=this.refs.fileInput;if(0===t.files.length)return;const a=t.files[0];this.helpSubmitUpload(a,!1),I.d(t)}),ke(this,"handleOverwriteUploadPluginCancel",()=>{this.setState({file:null,fileSelected:!1,serverError:null,confirmOverwriteUploadModal:!1,lastMessage:null,uploading:!1})}),ke(this,"handleOverwriteUploadPlugin",()=>{this.setState({confirmOverwriteUploadModal:!1}),this.helpSubmitUpload(this.state.file,!0)}),ke(this,"onPluginDownloadUrlChange",e=>{this.setState({pluginDownloadUrl:e.target.value})}),ke(this,"installFromUrl",async e=>{const{pluginDownloadUrl:t}=this.state;this.setState({installing:!0,serverError:null,lastMessage:null});const{error:a}=await this.props.actions.installPluginFromUrl(t,e);if(a)return"app.plugin.install_id.app_error"!==a.server_error_id||e?(this.setState({installing:!1}),void("app.plugin.extract.app_error"===a.server_error_id?this.setState({serverError:I.gb("admin.plugin.error.extract","Encountered an error when extracting the plugin. Review your plugin file content and try again.")}):this.setState({serverError:a.message}))):void this.setState({confirmOverwriteInstallModal:!0,overwritingInstall:!0});this.setState({loading:!0}),await this.props.actions.getPlugins();let s="Successfully installed plugin from ".concat(t);this.state.overwritingInstall&&(s="Successfully updated plugin from ".concat(t)),this.setState({serverError:null,lastMessage:s,overwritingInstall:!1,installing:!1,loading:!1})}),ke(this,"getMarketplaceUrlHelpText",e=>S.a.createElement("div",null,""===e&&S.a.createElement("div",{className:"alert-warning"},S.a.createElement("i",{className:"fa fa-warning"}),S.a.createElement(j.b,{id:"admin.plugins.settings.marketplaceUrlDesc.empty",defaultMessage:" Marketplace URL is a required field."})),""!==e&&S.a.createElement(j.b,{id:"admin.plugins.settings.marketplaceUrlDesc",defaultMessage:"URL of the marketplace server."}))),ke(this,"canSave",()=>""!==this.state.marketplaceUrl),ke(this,"handleSubmitInstall",e=>(e.preventDefault(),this.installFromUrl(!1))),ke(this,"handleOverwriteInstallPluginCancel",()=>{this.setState({confirmOverwriteInstallModal:!1,installing:!1,serverError:null,lastMessage:null})}),ke(this,"handleOverwriteInstallPlugin",()=>(this.setState({confirmOverwriteInstallModal:!1}),this.installFromUrl(!0))),ke(this,"showRemovePluginModal",e=>{e.preventDefault();const t=e.currentTarget.getAttribute("data-plugin-id");this.setState({showRemoveModal:!0,removing:t})}),ke(this,"handleRemovePluginCancel",()=>{this.setState({showRemoveModal:!1,removing:null})}),ke(this,"handleRemovePlugin",()=>{this.setState({showRemoveModal:!1}),this.handleRemove()}),ke(this,"handleRemove",async()=>{this.setState({lastMessage:null,serverError:null});const{error:e}=await this.props.actions.removePlugin(this.state.removing);this.setState({removing:null}),e&&this.setState({serverError:e.message})}),ke(this,"handleEnable",async e=>{e.preventDefault(),this.setState({lastMessage:null,serverError:null});const t=e.currentTarget.getAttribute("data-plugin-id"),{error:a}=await this.props.actions.enablePlugin(t);a&&this.setState({serverError:a.message})}),ke(this,"handleDisable",async e=>{this.setState({lastMessage:null,serverError:null}),e.preventDefault();const t=e.currentTarget.getAttribute("data-plugin-id"),{error:a}=await this.props.actions.disablePlugin(t);a&&this.setState({serverError:a.message})}),ke(this,"renderOverwritePluginModal",({show:e,onConfirm:t,onCancel:a})=>{const s=S.a.createElement(T.a,{id:"admin.plugin.upload.overwrite_modal.title",defaultMessage:"Overwrite existing plugin?"}),i=S.a.createElement(T.a,{id:"admin.plugin.upload.overwrite_modal.desc",defaultMessage:"A plugin with this ID already exists. Would you like to overwrite it?"}),n=S.a.createElement(T.a,{id:"admin.plugin.upload.overwrite_modal.overwrite",defaultMessage:"Overwrite"});return S.a.createElement(be.a,{show:e,title:s,message:i,confirmButtonClass:"btn btn-danger",confirmButtonText:n,onConfirm:t,onCancel:a})}),ke(this,"renderRemovePluginModal",({show:e,onConfirm:t,onCancel:a})=>{const s=S.a.createElement(T.a,{id:"admin.plugin.remove_modal.title",defaultMessage:"Remove plugin?"}),i=S.a.createElement(T.a,{id:"admin.plugin.remove_modal.desc",defaultMessage:"Are you sure you would like to remove the plugin?"}),n=S.a.createElement(T.a,{id:"admin.plugin.remove_modal.overwrite",defaultMessage:"Remove"});return S.a.createElement(be.a,{show:e,title:s,message:i,confirmButtonClass:"btn btn-danger",confirmButtonText:n,onConfirm:t,onCancel:a})}),ke(this,"renderEnablePluginsSetting",()=>{return this.props.config.ExperimentalSettings.RestrictSystemAdmin?null:S.a.createElement(Ce,{id:"enable",label:S.a.createElement(T.a,{id:"admin.plugins.settings.enable",defaultMessage:"Enable Plugins: "}),helpText:S.a.createElement(j.b,{id:"admin.plugins.settings.enableDesc",defaultMessage:"When true, enables plugins on your Mattermost server. Use plugins to integrate with third-party systems, extend functionality, or customize the user interface of your Mattermost server. See [documentation](https://about.mattermost.com/default-plugin-uploads) to learn more."}),value:this.state.enable,onChange:this.handleChange,setByEnv:this.isSetByEnv("PluginSettings.Enable")})}),ke(this,"renderSettings",()=>{const{enableUploads:e}=this.state,t=this.props.config.PluginSettings.Enable;let a="",s="";const i=e&&t&&!this.props.config.PluginSettings.RequirePluginSignature;this.state.serverError&&(a=S.a.createElement("div",{className:"col-sm-12"},S.a.createElement("div",{className:"form-group has-error half"},S.a.createElement("label",{className:"control-label"},this.state.serverError)))),this.state.lastMessage&&(s=S.a.createElement("div",{className:"col-sm-12"},S.a.createElement("div",{className:"form-group half"},this.state.lastMessage)));let n,r,l,o,c,d="btn";this.state.fileSelected&&(d="btn btn-primary"),this.state.file&&(n=this.state.file.name),r=this.state.uploading?S.a.createElement(T.a,{id:"admin.plugin.uploading",defaultMessage:"Uploading..."}):S.a.createElement(T.a,{id:"admin.plugin.upload",defaultMessage:"Upload"});const m=Object.values(this.props.pluginStatuses);if(this.state.loading)l=S.a.createElement($.a,null);else if(0===m.length)c=S.a.createElement(T.a,{id:"admin.plugin.no_plugins",defaultMessage:"No installed plugins."});else{const e=m.some(e=>e.instances.length>1);m.sort((e,t)=>e.name<t.name?-1:e.name>t.name?1:0),l=m.map(t=>{const a=this.props.plugins[t.id],s=Boolean(a&&a.settings_schema&&(a.settings_schema.header||a.settings_schema.footer||a.settings_schema.settings&&a.settings_schema.settings.length>0));return S.a.createElement(De,{key:t.id,pluginStatus:t,removing:this.state.removing===t.id,handleEnable:this.handleEnable,handleDisable:this.handleDisable,handleRemove:this.showRemovePluginModal,showInstances:e,hasSettings:s})}),c=S.a.createElement("div",{className:"alert alert-transparent"},l)}let u;t&&(o=S.a.createElement("div",{className:"form-group"},S.a.createElement("label",{className:"control-label col-sm-4"},S.a.createElement(T.a,{id:"admin.plugin.installedTitle",defaultMessage:"Installed Plugins: "})),S.a.createElement("div",{className:"col-sm-8"},S.a.createElement("p",{className:"help-text"},S.a.createElement(de.a,{id:"admin.plugin.installedDesc",defaultMessage:"Installed plugins on your Mattermost server."})),S.a.createElement("br",null),c))),u=e&&t?S.a.createElement(j.b,{id:"admin.plugin.uploadDesc",defaultMessage:"Upload a plugin for your Mattermost server. See [documentation](!https://about.mattermost.com/default-plugin-uploads) to learn more."}):t&&!e?S.a.createElement(j.b,{id:"admin.plugin.uploadDisabledDesc",defaultMessage:"Enable plugin uploads in config.json. See [documentation](!https://about.mattermost.com/default-plugin-uploads) to learn more."}):S.a.createElement(j.b,{id:"admin.plugin.uploadAndPluginDisabledDesc",defaultMessage:"To enable plugins, set **Enable Plugins** to true. See [documentation](!https://about.mattermost.com/default-plugin-uploads) to learn more."});const p=this.state.confirmOverwriteUploadModal&&this.renderOverwritePluginModal({show:this.state.confirmOverwriteUploadModal,onConfirm:this.handleOverwriteUploadPlugin,onCancel:this.handleOverwriteUploadPluginCancel}),h=this.state.showRemoveModal&&this.renderRemovePluginModal({show:this.state.showRemoveModal,onConfirm:this.handleRemovePlugin,onCancel:this.handleRemovePluginCancel});return S.a.createElement("div",{className:"admin-console__wrapper"},S.a.createElement("div",{className:"admin-console__content"},S.a.createElement(xe,{id:"PluginSettings",container:!1},this.renderEnablePluginsSetting(),S.a.createElement(Ce,{id:"requirePluginSignature",label:S.a.createElement(T.a,{id:"admin.plugins.settings.requirePluginSignature",defaultMessage:"Require Plugin Signature:"}),helpText:S.a.createElement(j.b,{id:"admin.plugins.settings.requirePluginSignatureDesc",defaultMessage:"When true, uploading plugins is disabled and may only be installed through the Marketplace. Plugins are always verified during Mattermost server startup and initialization. See [documentation](!https://mattermost.com/pl/default-plugin-signing) to learn more."}),value:this.state.requirePluginSignature,disabled:!this.state.enable,onChange:this.handleChange,setByEnv:this.isSetByEnv("PluginSettings.RequirePluginSignature")}),S.a.createElement(Ce,{id:"automaticPrepackagedPlugins",label:S.a.createElement(T.a,{id:"admin.plugins.settings.automaticPrepackagedPlugins",defaultMessage:"Enable Automatic Prepackaged Plugins:"}),helpText:S.a.createElement(j.b,{id:"admin.plugins.settings.automaticPrepackagedPluginsDesc",defaultMessage:"When true, automatically installs any prepackaged plugin found to be enabled in the server configuration."}),value:this.state.automaticPrepackagedPlugins,disabled:!this.state.enable,onChange:this.handleChange,setByEnv:this.isSetByEnv("PluginSettings.AutomaticPrepackagedPlugins")}),S.a.createElement("div",{className:"form-group"},S.a.createElement("label",{className:"control-label col-sm-4"},S.a.createElement(T.a,{id:"admin.plugin.uploadTitle",defaultMessage:"Upload Plugin: "})),S.a.createElement("div",{className:"col-sm-8"},S.a.createElement("div",{className:"file__upload"},S.a.createElement("button",{className:pe()(["btn",{"btn-primary":e}]),disabled:!i},S.a.createElement(T.a,{id:"admin.plugin.choose",defaultMessage:"Choose File"})),S.a.createElement("input",{ref:"fileInput",type:"file",accept:".gz",onChange:this.handleUpload,disabled:!i})),S.a.createElement("button",{className:d,id:"uploadPlugin",disabled:!this.state.fileSelected,onClick:this.handleSubmitUpload},r),S.a.createElement("div",{className:"help-text no-margin"},n),a,s,S.a.createElement("p",{className:"help-text"},u))),S.a.createElement(Ce,{id:"enableMarketplace",label:S.a.createElement(T.a,{id:"admin.plugins.settings.enableMarketplace",defaultMessage:"Enable Marketplace:"}),helpText:S.a.createElement(j.b,{id:"admin.plugins.settings.enableMarketplaceDesc",defaultMessage:"When true, enables System Administrators to install plugins from the [marketplace](!https://mattermost.com/pl/default-mattermost-marketplace.html)."}),value:this.state.enableMarketplace,disabled:!this.state.enable,onChange:this.handleChange,setByEnv:this.isSetByEnv("PluginSettings.EnableMarketplace")}),S.a.createElement(Ce,{id:"enableRemoteMarketplace",label:S.a.createElement(T.a,{id:"admin.plugins.settings.enableRemoteMarketplace",defaultMessage:"Enable Remote Marketplace:"}),helpText:S.a.createElement(j.b,{id:"admin.plugins.settings.enableRemoteMarketplaceDesc",defaultMessage:"When true, marketplace fetches latest plugins from the configured Marketplace URL."}),value:this.state.enableRemoteMarketplace,disabled:!this.state.enable||!this.state.enableMarketplace,onChange:this.handleChange,setByEnv:this.isSetByEnv("PluginSettings.EnableRemoteMarketplace")}),S.a.createElement(Ae,{id:"marketplaceUrl",type:"input",label:S.a.createElement(T.a,{id:"admin.plugins.settings.marketplaceUrl",defaultMessage:"Marketplace URL:"}),helpText:this.getMarketplaceUrlHelpText(this.state.marketplaceUrl),value:this.state.marketplaceUrl,disabled:!this.state.enable||!this.state.enableMarketplace||!this.state.enableRemoteMarketplace,onChange:this.handleChange,setByEnv:this.isSetByEnv("PluginSettings.MarketplaceUrl")}),o),p,h))}),this.state=Object.assign(this.state,{loading:!0,fileSelected:!1,file:null,pluginDownloadUrl:"",serverError:null,lastMessage:null,uploading:!1,installing:!1,overwritingUpload:!1,confirmOverwriteUploadModal:!1,overwritingInstall:!1,confirmOverwriteInstallModal:!1,showRemoveModal:!1,resolveRemoveModal:null})}getStateFromConfig(e){return{enable:e.PluginSettings.Enable,enableUploads:e.PluginSettings.EnableUploads,allowInsecureDownloadUrl:e.PluginSettings.AllowInsecureDownloadUrl,enableMarketplace:e.PluginSettings.EnableMarketplace,enableRemoteMarketplace:e.PluginSettings.EnableRemoteMarketplace,automaticPrepackagedPlugins:e.PluginSettings.AutomaticPrepackagedPlugins,marketplaceUrl:e.PluginSettings.MarketplaceUrl,requirePluginSignature:e.PluginSettings.RequirePluginSignature}}componentDidMount(){this.state.enable&&this.props.actions.getPluginStatuses().then(()=>this.setState({loading:!1}))}renderTitle(){return S.a.createElement(T.a,{id:"admin.plugin.management.title",defaultMessage:"Management"})}}ke(Le,"propTypes",{config:M.a.object.isRequired,pluginStatuses:M.a.object.isRequired,plugins:M.a.object.isRequired,actions:M.a.shape({uploadPlugin:M.a.func.isRequired,removePlugin:M.a.func.isRequired,getPlugins:M.a.func.isRequired,getPluginStatuses:M.a.func.isRequired,enablePlugin:M.a.func.isRequired,disablePlugin:M.a.func.isRequired,installPluginFromUrl:M.a.func.isRequired}).isRequired});var Ie=Object(r.connect)((function(e){return{plugins:e.entities.admin.plugins,pluginStatuses:e.entities.admin.pluginStatuses}}),(function(e){return{actions:Object(l.bindActionCreators)({uploadPlugin:o.uploadPlugin,installPluginFromUrl:o.installPluginFromUrl,removePlugin:o.removePlugin,getPlugins:o.getPlugins,getPluginStatuses:o.getPluginStatuses,enablePlugin:o.enablePlugin,disablePlugin:o.disablePlugin},e)}}))(Le),Ue=(a(137),a(187));a(113);const qe={enableTeamCreation:{true:[{roleName:"system_user",permission:b.Permissions.CREATE_TEAM,shouldHave:!0}],false:[{roleName:"system_user",permission:b.Permissions.CREATE_TEAM,shouldHave:!1}]},editOthersPosts:{true:[{roleName:"system_admin",permission:b.Permissions.EDIT_OTHERS_POSTS,shouldHave:!0},{roleName:"team_admin",permission:b.Permissions.EDIT_OTHERS_POSTS,shouldHave:!0}],false:[{roleName:"team_admin",permission:b.Permissions.EDIT_OTHERS_POSTS,shouldHave:!1},{roleName:"system_admin",permission:b.Permissions.EDIT_OTHERS_POSTS,shouldHave:!0}]},enableOnlyAdminIntegrations:{true:[{roleName:"team_user",permission:b.Permissions.MANAGE_INCOMING_WEBHOOKS,shouldHave:!1},{roleName:"team_user",permission:b.Permissions.MANAGE_OUTGOING_WEBHOOKS,shouldHave:!1},{roleName:"team_user",permission:b.Permissions.MANAGE_SLASH_COMMANDS,shouldHave:!1},{roleName:"system_user",permission:b.Permissions.MANAGE_OAUTH,shouldHave:!1}],false:[{roleName:"team_user",permission:b.Permissions.MANAGE_INCOMING_WEBHOOKS,shouldHave:!0},{roleName:"team_user",permission:b.Permissions.MANAGE_OUTGOING_WEBHOOKS,shouldHave:!0},{roleName:"team_user",permission:b.Permissions.MANAGE_SLASH_COMMANDS,shouldHave:!0},{roleName:"system_user",permission:b.Permissions.MANAGE_OAUTH,shouldHave:!0}]}};function Be(e,t){const a=JSON.parse(JSON.stringify(t));return function(e){const t=function(){let e=[];return Object.values(qe).forEach(t=>{Object.values(t).forEach(t=>{const a=t.map(e=>e.roleName);e=e.concat(a)})}),[...new Set(e.map(e=>e))]}();Object.keys(e).forEach(a=>{t.includes(a)||delete e[a]})}(a),Object.keys(qe).forEach(t=>{const s=e[t];s&&function(e,t,a){const s=qe[e][t];if(void 0===s)throw new Error("Value '".concat(t,"' not present in MAPPING for key '").concat(e,"'."));s.forEach(e=>{const t=a[e.roleName];e.shouldHave?function(e,t){t.permissions.includes(e)||t.permissions.push(e)}(e.permission,t):function(e,t){const a=t.permissions.indexOf(e);-1!==a&&t.permissions.splice(a,1)}(e.permission,t)})}(t,s,a)}),Object.entries(a).forEach(([e,s])=>{const i=new Set(t[e].permissions),n=new Set(s.permissions),r=[...n].filter(e=>!i.has(e));i.size===n.size&&0===r.length&&delete a[e]}),a}var Fe=a(1160),Ge=a(1220),He=a(1163);function Ye(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class We extends S.a.Component{constructor(e){super(e),Ye(this,"handleRequest",e=>{e.preventDefault(),this.setState({busy:!0,fail:null,success:!1});const t=()=>{this.props.requestAction(()=>{this.setState({busy:!1,success:!0})},e=>{let t=e.message;this.props.includeDetailedError&&e.detailed_error&&(t+=" - "+e.detailed_error),this.setState({busy:!1,fail:t})})};this.props.saveNeeded?this.props.saveConfigAction(t):t()}),this.state={busy:!1,fail:null,success:!1}}render(){let e=null;this.state.fail?e=S.a.createElement("div",null,S.a.createElement("div",{className:"alert alert-warning"},S.a.createElement(He.a,null),S.a.createElement(T.a,{id:this.props.errorMessage.id,defaultMessage:this.props.errorMessage.defaultMessage,values:{error:this.state.fail}}))):this.state.success&&this.props.showSuccessMessage&&(e=S.a.createElement("div",null,S.a.createElement("div",{className:"alert alert-success"},S.a.createElement(Ge.a,null),S.a.createElement(T.a,{id:this.props.successMessage.id,defaultMessage:this.props.successMessage.defaultMessage}))));let t="col-sm-8",a=null;return this.props.label?a=S.a.createElement("label",{className:"control-label col-sm-4"},this.props.label):t="col-sm-offset-4 "+t,S.a.createElement("div",{className:"form-group",id:this.props.id},a,S.a.createElement("div",{className:t},S.a.createElement("div",null,S.a.createElement("button",{className:"btn btn-default",onClick:this.handleRequest,disabled:this.props.disabled},S.a.createElement(Fe.a,{loading:this.state.busy,text:this.props.loadingText||I.gb("admin.requestButton.loading"," Loading...")},this.props.buttonText)),this.props.alternativeActionElement,e),S.a.createElement("div",{className:"help-text"},this.props.helpText)))}}function ze(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}Ye(We,"propTypes",{id:M.a.string,requestAction:M.a.func.isRequired,helpText:M.a.element,loadingText:M.a.string,buttonText:M.a.element.isRequired,label:M.a.element,disabled:M.a.bool,saveNeeded:M.a.bool,saveConfigAction:M.a.func,showSuccessMessage:M.a.bool,successMessage:M.a.shape({id:M.a.string.isRequired,defaultMessage:M.a.string.isRequired}),errorMessage:M.a.shape({id:M.a.string.isRequired,defaultMessage:M.a.string.isRequired}),includeDetailedError:M.a.bool,alternativeActionElement:M.a.element}),Ye(We,"defaultProps",{id:null,disabled:!1,saveNeeded:!1,showSuccessMessage:!0,includeDetailedError:!1,successMessage:{id:Object(C.b)("admin.requestButton.requestSuccess"),defaultMessage:"Test Successful"},errorMessage:{id:Object(C.b)("admin.requestButton.requestFailure"),defaultMessage:"Test Failure: {error}"}});class Ve extends S.a.Component{constructor(...e){super(...e),ze(this,"handleChange",e=>{this.props.onChange(this.props.id,e.target.value)})}render(){const e=[];for(const{value:t,text:a}of this.props.values)e.push(S.a.createElement("option",{value:t,key:t},a));return S.a.createElement(Oe,{label:this.props.label,inputId:this.props.id,helpText:this.props.helpText,setByEnv:this.props.setByEnv},S.a.createElement("select",{"data-testid":this.props.id+"dropdown",className:"form-control",id:this.props.id,value:this.props.value,onChange:this.handleChange,disabled:this.props.disabled||this.props.setByEnv},e))}}ze(Ve,"propTypes",{id:M.a.string.isRequired,values:M.a.array.isRequired,label:M.a.node.isRequired,value:M.a.string.isRequired,onChange:M.a.func.isRequired,disabled:M.a.bool,setByEnv:M.a.bool.isRequired,helpText:M.a.node}),ze(Ve,"defaultProps",{isDisabled:!1});var Xe=a(1221);function Je(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class Ke extends S.a.Component{constructor(e){super(e),Je(this,"handleChange",e=>{const t=e.map(e=>e.value);this.props.selected.length>0&&this.props.mustBePresent&&-1===t.join(",").indexOf(this.props.mustBePresent)?this.setState({error:this.props.notPresent}):(this.props.onChange(this.props.id,t),this.setState({error:!1}))}),Je(this,"calculateValue",()=>this.props.selected.reduce((e,t)=>{const a=this.props.values.find(e=>e.value===t);return null!==a&&e.push(a),e},[])),Je(this,"getOptionLabel",({text:e})=>e),this.state={error:!1}}UNSAFE_componentWillReceiveProps(e){e.selected.length>0&&e.mustBePresent&&-1===e.selected.join(",").indexOf(e.mustBePresent)?this.setState({error:this.props.notPresent}):this.setState({error:!1})}render(){return S.a.createElement(Oe,{label:this.props.label,inputId:this.props.id,helpText:this.props.helpText,setByEnv:this.props.setByEnv},S.a.createElement(Xe.b,{id:this.props.id,isMulti:!0,getOptionLabel:this.getOptionLabel,options:this.props.values,delimiter:",",clearable:!1,disabled:this.props.disabled||this.props.setByEnv,noResultsText:this.props.noResultText,onChange:this.handleChange,value:this.calculateValue()}),S.a.createElement(Ee.a,{error:this.state.error}))}}function Qe(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}Je(Ke,"propTypes",{id:M.a.string.isRequired,values:M.a.array.isRequired,label:M.a.node.isRequired,selected:M.a.array.isRequired,mustBePresent:M.a.string,onChange:M.a.func.isRequired,disabled:M.a.bool,setByEnv:M.a.bool.isRequired,helpText:M.a.node,noResultText:M.a.node,errorText:M.a.node,notPresent:M.a.node}),Je(Ke,"defaultProps",{disabled:!1});class Ze extends S.a.Component{constructor(...e){super(...e),Qe(this,"handleChange",e=>{this.props.onChange(this.props.id,e.target.value)})}render(){const e=[];for(const{value:t,text:a}of this.props.values)e.push(S.a.createElement("div",{className:"radio",key:t},S.a.createElement("label",null,S.a.createElement("input",{type:"radio",value:t,name:this.props.id,checked:t===this.props.value,onChange:this.handleChange,disabled:this.props.disabled||this.props.setByEnv}),a)));return S.a.createElement(Oe,{label:this.props.label,inputId:this.props.id,helpText:this.props.helpText,setByEnv:this.props.setByEnv},e)}}Qe(Ze,"propTypes",{id:M.a.string.isRequired,label:M.a.node.isRequired,values:M.a.arrayOf(M.a.shape({text:M.a.string.isRequired,value:M.a.string.isRequired})).isRequired,value:M.a.string.isRequired,setByEnv:M.a.bool.isRequired,disabled:M.a.bool,helpText:M.a.node}),Qe(Ze,"defaultProps",{disabled:!1});var $e=a(1464);function et(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class tt extends S.a.PureComponent{constructor(e){super(e),et(this,"handleChange",e=>{this.props.onChange&&this.props.onChange(this.props.id,e.hex)}),et(this,"togglePicker",()=>{this.props.disabled?this.setState({showPicker:!1}):this.setState({showPicker:!this.state.showPicker})}),et(this,"closePicker",e=>{if(e.target){const t=e.target.closest("."+this.getPickerClass());t&&t.contains(e.target)||this.setState({showPicker:!1})}}),et(this,"onTextInput",e=>{this.props.onChange&&this.props.onChange(this.props.id,e.target.value)}),et(this,"getPickerClass",()=>this.props.id?"picker-"+this.props.id.replace(".","-"):""),this.state={showPicker:!1}}componentDidMount(){document.addEventListener("click",this.closePicker)}componentWillUnmount(){document.removeEventListener("click",this.closePicker)}render(){let e;return this.state.showPicker&&(e=S.a.createElement("div",{className:"color-picker__popover "+this.getPickerClass()},S.a.createElement($e.ChromePicker,{color:this.props.value,onChange:this.handleChange}))),S.a.createElement(Oe,{label:this.props.label,helpText:this.props.helpText,inputId:this.props.id},S.a.createElement("div",{className:"input-group color-picker colorpicker-element"},S.a.createElement("input",{type:"text",className:"form-control",value:this.props.value,onChange:this.onTextInput,disabled:this.props.disabled}),S.a.createElement("span",{className:"input-group-addon "+this.getPickerClass(),onClick:this.togglePicker},S.a.createElement("i",{style:{backgroundColor:this.props.value}})),e))}}et(tt,"propTypes",{id:M.a.string.isRequired,label:M.a.node.isRequired,helpText:M.a.node,value:M.a.string.isRequired,onChange:M.a.func,disabled:M.a.bool});var at=a(1430),st=a.n(at);function it(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class nt extends S.a.Component{constructor(...e){super(...e),it(this,"regenerate",e=>{e.preventDefault(),this.props.onChange(this.props.id,st.a.randomBytes(256).toString("base64").substring(0,32))})}static get defaultProps(){return{disabled:!1,regenerateText:S.a.createElement(T.a,{id:"admin.regenerate",defaultMessage:"Regenerate"})}}render(){let e=null;this.props.disabled&&this.props.disabledText&&(e=S.a.createElement("div",{className:"admin-console__disabled-text"},this.props.disabledText));let t=null;this.props.regenerateHelpText&&(t=S.a.createElement("div",{className:"help-text"},this.props.regenerateHelpText));let a=this.props.value;return a||(a=S.a.createElement("span",{className:"placeholder-text"},this.props.placeholder)),S.a.createElement("div",{className:"form-group"},S.a.createElement("label",{className:"control-label col-sm-4",htmlFor:this.props.id},this.props.label),S.a.createElement("div",{className:"col-sm-8"},S.a.createElement("div",{className:"form-control disabled",id:this.props.id},a),e,S.a.createElement("div",{className:"help-text"},this.props.helpText),S.a.createElement("div",{className:"help-text"},S.a.createElement("button",{className:"btn btn-default",onClick:this.regenerate,disabled:this.props.disabled||this.props.setByEnv},this.props.regenerateText)),t,this.props.setByEnv?S.a.createElement(Te,null):null))}}it(nt,"propTypes",{id:M.a.string.isRequired,label:M.a.node.isRequired,placeholder:M.a.string,value:M.a.string.isRequired,onChange:M.a.func.isRequired,disabled:M.a.bool.isRequired,setByEnv:M.a.bool.isRequired,disabledText:M.a.node,helpText:M.a.node.isRequired,regenerateText:M.a.node.isRequired,regenerateHelpText:M.a.node});var rt=a(176),lt=a(1288),ot=a(1185),ct=a(1186);function dt(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class mt extends S.a.Component{static get propTypes(){return{id:M.a.string.isRequired,label:M.a.node.isRequired,placeholder:M.a.string,helpText:M.a.node,value:M.a.string,onChange:M.a.func,disabled:M.a.bool,actions:M.a.shape({autocompleteUsers:M.a.func.isRequired})}}constructor(e){super(e),dt(this,"handleChange",e=>{this.props.onChange(this.props.id,e.target.value)}),dt(this,"handleUserSelected",e=>{this.props.onChange(this.props.id,e.username)}),this.userSuggestionProviders=[new lt.a(e.actions.autocompleteUsers)]}render(){return S.a.createElement(Oe,{label:this.props.label,helpText:this.props.helpText,inputId:this.props.id},S.a.createElement("div",{className:"admin-setting-user__dropdown"},S.a.createElement(ot.a,{id:"admin_user_setting_"+this.props.id,className:"form-control",placeholder:this.props.placeholder,value:this.props.value,onChange:this.handleChange,onItemSelected:this.handleUserSelected,listComponent:ct.a,listStyle:"bottom",providers:this.userSuggestionProviders,disabled:this.props.disabled,requiredCharacters:0,openOnFocus:!0})))}}var ut=Object(r.connect)(null,(function(e){return{actions:Object(l.bindActionCreators)({autocompleteUsers:rt.b},e)}}))(mt),pt=a(1909),ht=a(1910),gt=a(314),bt=a(1118);function ft(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class _t extends S.a.PureComponent{constructor(e){super(e),ft(this,"getStatus",e=>{const t=this.props.intl.formatMessage;return e.status===O.q.PENDING?S.a.createElement("span",{className:"status-icon-warning",title:t({id:"admin.jobTable.jobId",defaultMessage:"Job ID: "})+e.id},S.a.createElement(T.a,{id:"admin.jobTable.statusPending",defaultMessage:"Pending"})):e.status===O.q.IN_PROGRESS?S.a.createElement("span",{className:"status-icon-warning",title:t({id:"admin.jobTable.jobId",defaultMessage:"Job ID: "})+e.id},S.a.createElement(T.a,{id:"admin.jobTable.statusInProgress",defaultMessage:"In Progress"})):e.status===O.q.SUCCESS?S.a.createElement("span",{className:"status-icon-success",title:t({id:"admin.jobTable.jobId",defaultMessage:"Job ID: "})+e.id},S.a.createElement(T.a,{id:"admin.jobTable.statusSuccess",defaultMessage:"Success"})):e.status===O.q.ERROR?S.a.createElement("span",{className:"status-icon-error",title:t({id:"admin.jobTable.jobId",defaultMessage:"Job ID: "})+e.id},S.a.createElement(T.a,{id:"admin.jobTable.statusError",defaultMessage:"Error"})):e.status===O.q.CANCEL_REQUESTED?S.a.createElement("span",{className:"status-icon-warning",title:t({id:"admin.jobTable.jobId",defaultMessage:"Job ID: "})+e.id},S.a.createElement(T.a,{id:"admin.jobTable.statusCanceling",defaultMessage:"Canceling..."})):e.status===O.q.CANCELED?S.a.createElement("span",{className:"status-icon-error",title:t({id:"admin.jobTable.jobId",defaultMessage:"Job ID: "})+e.id},S.a.createElement(T.a,{id:"admin.jobTable.statusCanceled",defaultMessage:"Canceled"})):S.a.createElement("span",{title:t({id:"admin.jobTable.jobId",defaultMessage:"Job ID: "})+e.id},e.status)}),ft(this,"getExtraInfoText",e=>e.data&&e.data.error&&e.data.error.length>0?S.a.createElement("span",{title:e.data.error},e.data.error):this.props.getExtraInfoText?this.props.getExtraInfoText(e):S.a.createElement("span",null)),ft(this,"getRunLength",e=>{let t=e.last_activity_at-e.start_at;if(e.status===O.q.IN_PROGRESS){const a=Date.now()-e.start_at;a>t&&(t=a)}let a=I.gb("admin.jobTable.lastActivityAt","Last Activity: ")+"--";e.last_activity_at>0&&(a=I.gb("admin.jobTable.lastActivityAt","Last Activity: ")+this.props.intl.formatDate(new Date(e.last_activity_at),{year:"numeric",month:"short",day:"2-digit"})+" - "+this.props.intl.formatTime(new Date(e.last_activity_at),{hour:"2-digit",minute:"2-digit",second:"2-digit"}));var s=Math.round(t/1e3),i=Math.round(t/6e4);return t<=0||e.status===O.q.CANCELED?S.a.createElement("span",{className:"whitespace--nowrap"},"--"):s<=120?S.a.createElement("span",{className:"whitespace--nowrap",title:a},s+I.gb("admin.jobTable.runLengthSeconds"," seconds")):S.a.createElement("span",{className:"whitespace--nowrap",title:a},i+I.gb("admin.jobTable.runLengthMinutes"," minutes"))}),ft(this,"getFinishAt",(e,t)=>{if(0===t||e===O.q.PENDING||e===O.q.IN_PROGRESS||e===O.q.CANCEL_REQUESTED)return S.a.createElement("span",{className:"whitespace--nowrap"},"--");const a=new Date(t);return S.a.createElement("span",{className:"whitespace--nowrap"},S.a.createElement(Z.a,{value:a,day:"2-digit",month:"short",year:"numeric"})," - ",S.a.createElement(Z.b,{value:a,hour:"2-digit",minute:"2-digit"}))}),ft(this,"reload",()=>{this.setState({loading:!0}),this.props.actions.getJobsByType(this.props.jobType).then(()=>{this.setState({loading:!1})})}),ft(this,"handleCancelJob",async e=>{e.preventDefault();const t=e.currentTarget.getAttribute("data-job-id");await this.props.actions.cancelJob(t),this.reload()}),ft(this,"handleCreateJob",async e=>{e.preventDefault();const t={type:this.props.jobType};await this.props.actions.createJob(t),this.reload()}),ft(this,"getCancelButton",e=>{const t=this.props.intl.formatMessage;let a=null;return this.props.disabled||e.status!==O.q.PENDING&&e.status!==O.q.IN_PROGRESS||(a=S.a.createElement("span",{"data-job-id":e.id,onClick:this.handleCancelJob,className:"job-table__cancel-button",title:t({id:"admin.jobTable.cancelButton",defaultMessage:"Cancel"})},"×")),a}),this.interval=null,this.state={loading:!0}}componentDidMount(){this.props.actions.getJobsByType(this.props.jobType).then(()=>this.setState({loading:!1})),this.interval=setInterval(this.reload,15e3)}componentWillUnmount(){this.interval&&clearInterval(this.interval)}render(){var e=this.props.jobs.map(e=>S.a.createElement("tr",{key:e.id},S.a.createElement("td",{width:"30px",className:"whitespace--nowrap text-center"},this.getCancelButton(e)),S.a.createElement("td",{className:"whitespace--nowrap"},this.getStatus(e)),S.a.createElement("td",{className:"whitespace--nowrap"},this.getFinishAt(e.status,e.last_activity_at)),S.a.createElement("td",{className:"whitespace--nowrap"},this.getRunLength(e)),S.a.createElement("td",null,this.getExtraInfoText(e))));return S.a.createElement("div",{className:"job-table__panel"},S.a.createElement("div",{className:"job-table__create-button"},S.a.createElement("div",null,S.a.createElement("button",{className:"btn btn-default",onClick:this.handleCreateJob,disabled:this.props.disabled},this.props.createJobButtonText)),S.a.createElement("div",{className:"help-text"},this.props.createJobHelpText)),S.a.createElement("div",{className:"job-table__table"},S.a.createElement("table",{className:"table"},S.a.createElement("thead",null,S.a.createElement("tr",null,S.a.createElement("th",{width:"30px"}),S.a.createElement("th",null,S.a.createElement(T.a,{id:"admin.jobTable.headerStatus",defaultMessage:"Status"})),S.a.createElement("th",null,S.a.createElement(T.a,{id:"admin.jobTable.headerFinishAt",defaultMessage:"Finish Time"})),S.a.createElement("th",null,S.a.createElement(T.a,{id:"admin.jobTable.headerRunTime",defaultMessage:"Run Time"})),S.a.createElement("th",{colSpan:"3"},S.a.createElement(T.a,{id:"admin.jobTable.headerExtraInfo",defaultMessage:"Details"})))),S.a.createElement("tbody",null,e))))}}ft(_t,"propTypes",{intl:bt.a.isRequired,jobs:M.a.arrayOf(M.a.object).isRequired,getExtraInfoText:M.a.func,disabled:M.a.bool,createJobHelpText:M.a.element.isRequired,createJobButtonText:M.a.element.isRequired,jobType:M.a.string.isRequired,actions:M.a.shape({getJobsByType:M.a.func.isRequired,cancelJob:M.a.func.isRequired,createJob:M.a.func.isRequired}).isRequired});var Et=Object(gt.c)(_t);var yt=Object(r.connect)((function(e,t){return{jobs:ht.makeGetJobsByType(t.jobType)(e)}}),(function(e){return{actions:Object(l.bindActionCreators)({getJobsByType:pt.getJobsByType,createJob:pt.createJob,cancelJob:pt.cancelJob},e)}}))(Et),vt=a(96),St=a.n(vt);function Tt(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class Ot extends Oe{static get propTypes(){return{id:M.a.string.isRequired,label:M.a.node.isRequired,helpText:M.a.node,uploadingText:M.a.node,onSubmit:M.a.func.isRequired,disabled:M.a.bool,fileType:M.a.string.isRequired,error:M.a.string}}constructor(e){super(e),Tt(this,"handleChange",()=>{const e=this.refs.fileInput.files;e&&e.length>0&&this.setState({fileSelected:!0,fileName:e[0].name})}),Tt(this,"handleSubmit",e=>{e.preventDefault(),St()(this.refs.upload_button).button("loading"),this.props.onSubmit(this.props.id,this.refs.fileInput.files[0],e=>{St()(this.refs.upload_button).button("reset"),e&&I.d(this.refs.fileInput)})}),this.state={fileName:null,serverError:e.error}}render(){let e;this.state.serverError&&(e=S.a.createElement("div",{className:"form-group has-error"},S.a.createElement("label",{className:"control-label"},this.state.serverError)));let t,a="btn";return this.state.fileSelected&&(a="btn btn-primary"),t=this.state.fileName?this.state.fileName:S.a.createElement(T.a,{id:"admin.file_upload.noFile",defaultMessage:"No file uploaded"}),S.a.createElement(Oe,{label:this.props.label,helpText:this.props.helpText,inputId:this.props.id},S.a.createElement("div",null,S.a.createElement("div",{className:"file__upload"},S.a.createElement("button",{className:"btn btn-default",disabled:this.props.disabled},S.a.createElement(T.a,{id:"admin.file_upload.chooseFile",defaultMessage:"Choose File"})),S.a.createElement("input",{ref:"fileInput",type:"file",disabled:this.props.disabled,accept:this.props.fileType,onChange:this.handleChange})),S.a.createElement("button",{className:a,disabled:!this.state.fileSelected,onClick:this.handleSubmit,ref:"upload_button","data-loading-text":"<span class='glyphicon glyphicon-refresh glyphicon-refresh-animate'></span> ".concat(this.props.uploadingText)},S.a.createElement(T.a,{id:"admin.file_upload.uploadFile",defaultMessage:"Upload"})),S.a.createElement("div",{className:"help-text no-margin"},t),e))}}class wt extends Oe{constructor(...e){super(...e),function(e,t,a){t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a}(this,"handleRemove",e=>{e.preventDefault(),St()(this.refs.remove_button).button("loading"),this.props.onSubmit(this.props.id,()=>{St()(this.refs.remove_button).button("reset")})})}static get propTypes(){return{id:M.a.string.isRequired,label:M.a.node.isRequired,helpText:M.a.node,removeButtonText:M.a.node.isRequired,removingText:M.a.node,fileName:M.a.string.isRequired,onSubmit:M.a.func.isRequired,disabled:M.a.bool}}render(){return S.a.createElement(Oe,{label:this.props.label,helpText:this.props.helpText,inputId:this.props.id},S.a.createElement("div",null,S.a.createElement("div",{className:"help-text remove-filename"},this.props.fileName),S.a.createElement("button",{className:"btn btn-danger",onClick:this.handleRemove,ref:"remove_button",disabled:this.props.disabled,"data-loading-text":"<span class='glyphicon glyphicon-refresh glyphicon-refresh-animate'></span> ".concat(this.props.removingText)},this.props.removeButtonText)))}}var Ct=a(70),xt=a.n(Ct);function Mt(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class jt extends S.a.PureComponent{constructor(...e){super(...e),Mt(this,"renderTranslated",()=>{const{isMarkdown:e,text:t,textDefault:a,textValues:s}=this.props;return"object"==typeof t?t:e?S.a.createElement(j.b,{id:t,defaultMessage:a,values:s}):S.a.createElement(T.a,{id:t,values:s,defaultMessage:a})}),Mt(this,"renderUntranslated",()=>{if(this.props.isMarkdown){const e=xt()(this.props.text,{breaks:!0,sanitize:!0,renderer:new j.a});return S.a.createElement("span",{dangerouslySetInnerHTML:{__html:e}})}return S.a.createElement("span",null,this.props.text)})}render(){return this.props.isTranslated?this.renderTranslated():this.renderUntranslated()}}function Pt(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,s)}return a}function At(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?Pt(a,!0).forEach((function(t){kt(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):Pt(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function kt(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}Mt(jt,"propTypes",{isMarkdown:M.a.bool,isTranslated:M.a.bool,text:M.a.oneOfType([M.a.string,M.a.object]).isRequired,textDefault:M.a.string,textValues:M.a.object}),Mt(jt,"defaultProps",{isTranslated:!0});class Rt extends S.a.Component{constructor(e){super(e),kt(this,"handleSubmit",async e=>{if(e.preventDefault(),this.setState({saving:!0,serverError:null}),"both"===this.state.saveNeeded||"permissions"===this.state.saveNeeded){const e=Be((this.props.schema&&this.props.schema.settings||[]).reduce((e,t)=>(t.type===O.Q.SettingsTypes.TYPE_PERMISSION&&(e[t.permissions_mapping_name]=this.state[t.key].toString()),e),{}),this.props.roles);let t=!0;if(await Promise.all(Object.values(e).map(async e=>{try{await this.props.editRole(e)}catch(e){t=!1,this.setState({saving:!1,serverError:e.message})}})),!t)return}"both"===this.state.saveNeeded||"config"===this.state.saveNeeded?this.doSubmit(null,Rt.getStateFromConfig):(this.setState({saving:!1,saveNeeded:!1,serverError:null}),this.props.setNavigationBlocked(!1))}),kt(this,"renderTitle",()=>this.props.schema?!1===this.props.schema.translate?S.a.createElement(P,null,this.props.schema.name||this.props.schema.id):S.a.createElement(k,{id:this.props.schema.name||this.props.schema.id,defaultMessage:this.props.schema.name_default||this.props.schema.id}):""),kt(this,"renderBanner",e=>this.props.schema?!1===e.label.translate?S.a.createElement("span",null,e.label):"string"==typeof e.label?e.label_markdown?S.a.createElement(j.b,{id:e.label,values:e.label_values,defaultMessage:e.label_default}):S.a.createElement(T.a,{id:e.label,defaultMessage:e.label_default,values:e.label_values}):e.label:S.a.createElement("span",null,"")),kt(this,"renderHelpText",e=>{if(!this.props.schema)return S.a.createElement("span",null,"");if(!e.help_text)return null;let t,a,s,i;return e.disabled_help_text&&this.isDisabled(e)?(t=e.disabled_help_text,a=e.disabled_help_text_markdown,s=e.disabled_help_text_values,i=e.disabled_help_text_default):(t=e.help_text,a=e.help_text_markdown,s=e.help_text_values,i=e.help_text_default),S.a.createElement(jt,{isMarkdown:a,isTranslated:e.translate,text:t,textDefault:i,textValues:s})}),kt(this,"renderLabel",e=>this.props.schema?!1===e.translate?e.label:I.gb(e.label,e.label_default):""),kt(this,"isDisabled",e=>"function"==typeof e.isDisabled?e.isDisabled(this.props.config,this.state,this.props.license):Boolean(e.isDisabled)),kt(this,"isHidden",e=>"function"==typeof e.isHidden?e.isHidden(this.props.config,this.state,this.props.license):Boolean(e.isHidden)),kt(this,"buildButtonSetting",e=>{return S.a.createElement(We,{id:e.key,key:this.props.schema.id+"_text_"+e.key,requestAction:(t,a)=>{var s="ServiceSettings.SiteURL";e.sourceUrlKey&&(s=e.sourceUrlKey),e.action(e=>{const a=new Map(Object.entries(e));(this.props.schema&&this.props.schema.settings||[]).forEach(e=>{if(e.key&&e.setFromMetadataField){const t=a.get(e.setFromMetadataField);e.type===O.Q.SettingsTypes.TYPE_TEXT?this.setState({[e.key]:t,["".concat(e.key,"Error")]:null}):e.type===O.Q.SettingsTypes.TYPE_FILE_UPLOAD&&this.buildSettingFunctions[e.type]&&this.buildSettingFunctions[e.type](e).props.onSetData&&this.buildSettingFunctions[e.type](e).props.onSetData(e.key,t)}}),t&&"function"==typeof t&&t()},a,this.state[s])},helpText:this.renderHelpText(e),loadingText:I.gb(e.loading,e.loading_default),buttonText:S.a.createElement("span",null,this.renderLabel(e)),showSuccessMessage:Boolean(e.success_message),includeDetailedError:!0,disabled:this.isDisabled(e),errorMessage:{id:e.error_message,defaultMessage:e.error_message_default},successMessage:e.success_message&&{id:e.success_message,defaultMessage:e.success_message_default}})}),kt(this,"buildTextSetting",e=>{let t="input";e.type===O.Q.SettingsTypes.TYPE_NUMBER?t="number":e.type===O.Q.SettingsTypes.TYPE_LONG_TEXT&&(t="textarea");let a=this.state[e.key]||"";return e.dynamic_value&&(a=e.dynamic_value(a,this.props.config,this.state,this.props.license)),S.a.createElement(Ae,{key:this.props.schema.id+"_text_"+e.key,id:e.key,type:t,label:this.renderLabel(e),helpText:this.renderHelpText(e),placeholder:I.gb(e.placeholder,e.placeholder_default),value:a,disabled:this.isDisabled(e),setByEnv:this.isSetByEnv(e.key),onChange:this.handleChange,maxLength:e.max_length})}),kt(this,"buildColorSetting",e=>S.a.createElement(tt,{key:this.props.schema.id+"_text_"+e.key,id:e.key,label:this.renderLabel(e),helpText:this.renderHelpText(e),placeholder:I.gb(e.placeholder,e.placeholder_default),value:this.state[e.key]||"",disabled:this.isDisabled(e),onChange:this.handleChange})),kt(this,"buildBoolSetting",e=>S.a.createElement(Ce,{key:this.props.schema.id+"_bool_"+e.key,id:e.key,label:this.renderLabel(e),helpText:this.renderHelpText(e),value:!this.isDisabled(e)&&this.state[e.key]||!1,disabled:this.isDisabled(e),setByEnv:this.isSetByEnv(e.key),onChange:this.handleChange})),kt(this,"buildPermissionSetting",e=>S.a.createElement(Ce,{key:this.props.schema.id+"_bool_"+e.key,id:e.key,label:this.renderLabel(e),helpText:this.renderHelpText(e),value:!this.isDisabled(e)&&this.state[e.key]||!1,disabled:this.isDisabled(e),setByEnv:this.isSetByEnv(e.key),onChange:this.handlePermissionChange})),kt(this,"buildDropdownSetting",e=>{const t="true"===this.props.config.BuildEnterpriseReady,a=[];e.options.forEach(e=>{e.isHidden&&e.isHidden(this.props.config,this.state,this.props.license,t)||a.push(e)});const s=a.map(e=>({value:e.value,text:I.gb(e.display_name,e.display_name_default)})),i=this.state[e.key]||s[0].value;let n=null;for(const e of a)if(e.help_text&&e.value===i){n=e;break}return S.a.createElement(Ve,{key:this.props.schema.id+"_dropdown_"+e.key,id:e.key,values:s,label:this.renderLabel(e),helpText:this.renderHelpText(n||e),value:i,disabled:this.isDisabled(e),setByEnv:this.isSetByEnv(e.key),onChange:this.handleChange})}),kt(this,"buildLanguageSetting",e=>{const t=Ue.b(),a=Object.keys(t).map(e=>({value:t[e].value,text:t[e].name,order:t[e].order})).sort((e,t)=>e.order-t.order);if(e.multiple){const t=S.a.createElement(T.a,{id:e.no_result,defaultMessage:e.no_result_default}),s=S.a.createElement(T.a,{id:e.not_present,defaultMessage:e.not_present_default});return S.a.createElement(Ke,{key:this.props.schema.id+"_language_"+e.key,id:e.key,label:this.renderLabel(e),values:a,helpText:this.renderHelpText(e),selected:this.state[e.key]&&this.state[e.key].split(",")||[],disabled:this.isDisabled(e),setByEnv:this.isSetByEnv(e.key),onChange:(e,t)=>this.handleChange(e,t.join(",")),noResultText:t,notPresent:s})}return S.a.createElement(Ve,{key:this.props.schema.id+"_language_"+e.key,id:e.key,label:this.renderLabel(e),values:a,helpText:this.renderHelpText(e),value:this.state[e.key]||a[0].value,disabled:this.isDisabled(e),setByEnv:this.isSetByEnv(e.key),onChange:this.handleChange})}),kt(this,"buildRadioSetting",e=>{const t=(e.options||[]).map(e=>({value:e.value,text:e.display_name}));return S.a.createElement(Ze,{key:this.props.schema.id+"_radio_"+e.key,id:e.key,values:t,label:this.renderLabel(e),helpText:this.renderHelpText(e),value:this.state[e.key]||t[0],disabled:this.isDisabled(e),setByEnv:this.isSetByEnv(e.key),onChange:this.handleChange})}),kt(this,"buildBannerSetting",e=>this.isDisabled(e)?null:S.a.createElement("div",{className:"banner "+e.banner_type,key:this.props.schema.id+"_bool_"+e.key},S.a.createElement("div",{className:"banner__content"},S.a.createElement("span",null,"warning"===e.banner_type?S.a.createElement(He.a,{additionalClassName:"banner__icon"}):null,this.renderBanner(e))))),kt(this,"buildGeneratedSetting",e=>S.a.createElement(nt,{key:this.props.schema.id+"_generated_"+e.key,id:e.key,label:this.renderLabel(e),helpText:this.renderHelpText(e),regenerateHelpText:e.regenerate_help_text,placeholder:I.gb(e.placeholder,e.placeholder_default),value:this.state[e.key]||"",disabled:this.isDisabled(e),setByEnv:this.isSetByEnv(e.key),onChange:this.handleGeneratedChange})),kt(this,"handleGeneratedChange",(e,t)=>{this.handleChange(e,t.replace("+","-").replace("/","_"))}),kt(this,"handleChange",(e,t)=>{let a="config";"permissions"===this.state.saveNeeded&&(a="both"),this.setState({saveNeeded:a,[e]:t}),this.props.setNavigationBlocked(!0)}),kt(this,"handlePermissionChange",(e,t)=>{let a="permissions";"config"===this.state.saveNeeded&&(a="both"),this.setState({saveNeeded:a,[e]:t}),this.props.setNavigationBlocked(!0)}),kt(this,"buildUsernameSetting",e=>S.a.createElement(ut,{key:this.props.schema.id+"_userautocomplete_"+e.key,id:e.key,label:this.renderLabel(e),helpText:this.renderHelpText(e),placeholder:I.gb(e.placeholder,e.placeholder_default)||I.gb("search_bar.search","Search"),value:this.state[e.key]||"",disabled:this.isDisabled(e),onChange:this.handleChange})),kt(this,"buildJobsTableSetting",e=>S.a.createElement(yt,{key:this.props.schema.id+"_jobstable_"+e.key,jobType:e.job_type,getExtraInfoText:e.render_job,disabled:this.isDisabled(e),createJobButtonText:S.a.createElement(T.a,{id:e.label,defaultMessage:e.label_default}),createJobHelpText:S.a.createElement(j.b,{id:e.help_text,defaultMessage:e.help_text_default})})),kt(this,"buildFileUploadSetting",e=>{const t=(t,a)=>{e.set_action(a=>{this.handleChange(t,a),this.setState({[e.key]:a,["".concat(e.key,"Error")]:null})},t=>{this.setState({[e.key]:null,["".concat(e.key,"Error")]:t.message})},a)};if(this.state[e.key]){const a=(t,a)=>{e.remove_action(()=>{this.handleChange(e.key,""),this.setState({[e.key]:null,["".concat(e.key,"Error")]:null})},t=>{a(),this.setState({[e.key]:null,["".concat(e.key,"Error")]:t.message})})};return S.a.createElement(wt,{id:this.props.schema.id,key:this.props.schema.id+"_fileupload_"+e.key,label:this.renderLabel(e),helpText:S.a.createElement(T.a,{id:e.remove_help_text,defaultMessage:e.remove_help_text_default}),removeButtonText:I.gb(e.remove_button_text,e.remove_button_text_default),removingText:I.gb(e.removing_text,e.removing_text_default),fileName:this.state[e.key],onSubmit:a,onSetData:t,disabled:this.isDisabled(e),setByEnv:this.isSetByEnv(e.key)})}return S.a.createElement(Ot,{id:e.key,key:this.props.schema.id+"_fileupload_"+e.key,label:this.renderLabel(e),helpText:this.renderHelpText(e),uploadingText:I.gb(e.uploading_text,e.uploading_text_default),disabled:this.isDisabled(e),fileType:e.fileType,onSubmit:(t,a,s)=>{e.upload_action(a,a=>{this.handleChange(t,a),this.setState({[e.key]:a,["".concat(e.key,"Error")]:null}),s&&"function"==typeof s&&s()},e=>{s&&"function"==typeof s&&s(e.message)})},onSetData:t,error:this.state.idpCertificateFileError,setByEnv:this.isSetByEnv(e.key)})}),kt(this,"buildCustomSetting",e=>{const t=e.component,a=S.a.createElement(t,{key:this.props.schema.id+"_custom_"+e.key,id:e.key,label:this.renderLabel(e),helpText:this.renderHelpText(e),value:this.state[e.key],disabled:this.isDisabled(e),config:this.props.config,license:this.props.license,setByEnv:this.isSetByEnv(e.key),onChange:this.handleChange,registerSaveAction:this.registerSaveAction,setSaveNeeded:this.setSaveNeeded,unRegisterSaveAction:this.unRegisterSaveAction});return e.showTitle?S.a.createElement(Oe,{label:e.label,inputId:e.key,helpText:e.helpText},a):a}),kt(this,"unRegisterSaveAction",e=>{const t=this.saveActions.indexOf(e);this.saveActions.splice(t,1)}),kt(this,"registerSaveAction",e=>{this.saveActions.push(e)}),kt(this,"setSaveNeeded",()=>{this.setState({saveNeeded:"config"}),this.props.setNavigationBlocked(!0)}),kt(this,"renderSettings",()=>{const e=this.props.schema,t=[];let a,s;return e.settings&&e.settings.forEach(e=>{this.buildSettingFunctions[e.type]&&!this.isHidden(e)&&t.push(this.buildSettingFunctions[e.type](e))}),e.header&&(a=S.a.createElement("div",{className:"banner"},S.a.createElement(jt,{text:e.header,isMarkdown:!0,isTranslated:this.props.schema.translate}))),e.footer&&(s=S.a.createElement("div",{className:"banner"},S.a.createElement(jt,{text:e.footer,isMarkdown:!0,isTranslated:this.props.schema.translate}))),S.a.createElement(xe,{container:!1},a,t,s)}),kt(this,"closeTooltip",()=>{this.setState({errorTooltip:!1})}),kt(this,"openTooltip",e=>{const t=e.currentTarget.querySelector(".control-label"),a=t.offsetWidth<t.scrollWidth;this.setState({errorTooltip:a})}),kt(this,"doSubmit",async(e,t)=>{this.setState({saving:!0,serverError:null});let a=JSON.parse(JSON.stringify(this.props.config));a=this.getConfigFromState(a);const{error:s}=await this.props.updateConfig(a);s?this.setState({serverError:s.message,serverErrorId:s.id}):this.setState(t(a)),e&&e(),this.handleSaved&&this.handleSaved(a);const i=[];for(const e of this.saveActions)i.push(e());const n=await Promise.all(i).then(e=>e.some(e=>e.error&&e.error.message));this.state.serverError||n?this.setState({saving:!1}):(this.setState({saving:!1,saveNeeded:!1}),this.props.setNavigationBlocked(!1))}),kt(this,"isSetByEnv",e=>Boolean(Rt.getConfigValue(this.props.environmentConfig,e))),kt(this,"hybridSchemaAndComponent",()=>{const e=this.props.schema;if(e&&e.component&&e.settings){const t=e.component;return S.a.createElement(t,this.props)}return null}),kt(this,"render",()=>{const e=this.props.schema;if(e&&e.component&&!e.settings){const t=e.component;return S.a.createElement(t,this.props)}return e?S.a.createElement("div",{className:"wrapper--fixed "+this.state.customComponentWrapperClass},this.renderTitle(),S.a.createElement("div",{className:"admin-console__wrapper"},S.a.createElement("div",{className:"admin-console__content"},S.a.createElement("form",{className:"form-horizontal",role:"form",onSubmit:this.handleSubmit},this.renderSettings()),this.hybridSchemaAndComponent())),S.a.createElement("div",{className:"admin-console-save"},S.a.createElement(_e.a,{saving:this.state.saving,disabled:!this.state.saveNeeded||this.canSave&&!this.canSave(),onClick:this.handleSubmit,savingMessage:I.gb("admin.saving","Saving Config...")}),S.a.createElement("div",{className:"error-message",ref:"errorMessage",onMouseOver:this.openTooltip,onMouseOut:this.closeTooltip},S.a.createElement(Ee.a,{error:this.state.serverError})),S.a.createElement(fe.a,{show:this.state.errorTooltip,delayShow:O.Q.OVERLAY_TIME_DELAY,placement:"top",target:this.refs.errorMessage},S.a.createElement(ae.a,{id:"error-tooltip"},this.state.serverError)))):S.a.createElement("div",{className:"wrapper--fixed"},S.a.createElement(P,null,S.a.createElement(T.a,{id:"error.plugin_not_found.title",defaultMessage:"Plugin not found"})),S.a.createElement("div",{className:"admin-console__wrapper"},S.a.createElement("div",{className:"admin-console__content"},S.a.createElement("p",null,S.a.createElement(T.a,{id:"error.plugin_not_found.desc",defaultMessage:"The plugin you are looking for does not exist."})),S.a.createElement(me.a,{to:"plugin_management"},S.a.createElement(T.a,{id:"admin.plugin.backToPlugins",defaultMessage:"Go back to the Plugins"})))))}),this.isPlugin=!1,this.saveActions=[],this.buildSettingFunctions={[O.Q.SettingsTypes.TYPE_TEXT]:this.buildTextSetting,[O.Q.SettingsTypes.TYPE_LONG_TEXT]:this.buildTextSetting,[O.Q.SettingsTypes.TYPE_NUMBER]:this.buildTextSetting,[O.Q.SettingsTypes.TYPE_COLOR]:this.buildColorSetting,[O.Q.SettingsTypes.TYPE_BOOL]:this.buildBoolSetting,[O.Q.SettingsTypes.TYPE_PERMISSION]:this.buildPermissionSetting,[O.Q.SettingsTypes.TYPE_DROPDOWN]:this.buildDropdownSetting,[O.Q.SettingsTypes.TYPE_RADIO]:this.buildRadioSetting,[O.Q.SettingsTypes.TYPE_BANNER]:this.buildBannerSetting,[O.Q.SettingsTypes.TYPE_GENERATED]:this.buildGeneratedSetting,[O.Q.SettingsTypes.TYPE_USERNAME]:this.buildUsernameSetting,[O.Q.SettingsTypes.TYPE_BUTTON]:this.buildButtonSetting,[O.Q.SettingsTypes.TYPE_LANGUAGE]:this.buildLanguageSetting,[O.Q.SettingsTypes.TYPE_JOBSTABLE]:this.buildJobsTableSetting,[O.Q.SettingsTypes.TYPE_FILE_UPLOAD]:this.buildFileUploadSetting,[O.Q.SettingsTypes.TYPE_CUSTOM]:this.buildCustomSetting},this.state={saveNeeded:!1,saving:!1,serverError:null,errorTooltip:!1,customComponentWrapperClass:""}}static getDerivedStateFromProps(e,t){return e.schema&&e.schema.id!==t.prevSchemaId?At({prevSchemaId:e.schema.id,saveNeeded:!1,saving:!1,serverError:null,errorTooltip:!1},Rt.getStateFromConfig(e.config,e.schema,e.roles)):null}getConfigFromState(e){const t=this.props.schema;if(t){if((t.settings||[]).forEach(t=>{if(!t.key)return;if(t.type===O.Q.SettingsTypes.TYPE_PERMISSION)return void this.setConfigValue(e,t.key,null);let a=this.getSettingValue(t);const s=Rt.getConfigValue(e,t.key);t.onConfigSave&&(a=t.onConfigSave(a,s)),this.setConfigValue(e,t.key,a)}),t.onConfigSave)return t.onConfigSave(e,this.props.config)}return e}static getStateFromConfig(e,t,a){let s={};if(t){(t.settings||[]).forEach(t=>{if(!t.key)return;if(t.type===O.Q.SettingsTypes.TYPE_PERMISSION){try{s[t.key]="true"===function(e,t){for(const a of function*(e,t){for(const a in e)if(e.hasOwnProperty(a)){const s=e[a].some(e=>{const a=t[e.roleName];return e.shouldHave&&!a.permissions.includes(e.permission)||!e.shouldHave&&a.permissions.includes(e.permission)});yield{value:a,allConditionsAreMet:!s}}}(qe[e],t))if(a.allConditionsAreMet)return a.value;throw new Error("No matching mapping value found for key '".concat(e,"' with the given roles."))}(t.permissions_mapping_name,a)}catch(e){s[t.key]=!1}return}let i=Rt.getConfigValue(e,t.key);t.onConfigLoad&&(i=t.onConfigLoad(i,e)),s[t.key]=null==i?t.default:i}),t.onConfigLoad&&(s=At({},s,{},t.onConfigLoad(e)))}return s}getSetting(e){for(const t of this.props.schema.settings)if(t.key===e)return t;return null}getSettingValue(e){return(e.type!==O.Q.SettingsTypes.TYPE_BOOL||!this.isDisabled(e))&&(e.type===O.Q.SettingsTypes.TYPE_TEXT&&e.dynamic_value?e.dynamic_value(this.state[e.key],this.props.config,this.state,this.props.license):this.state[e.key])}static escapePathPart(e){return e.replace(/\./g,"+")}static unescapePathPart(e){return e.replace(/\+/g,".")}static getConfigValue(e,t){return t.split(".").reduce((e,t)=>e?e[Rt.unescapePathPart(t)]:null,e)}setConfigValue(e,t,a){!function e(t,s){const i=Rt.unescapePathPart(s[0]);1===s.length?t[i]=a:(null==t[i]&&(t[i]={}),e(t[i],s.slice(1)))}(e,t.split("."))}}kt(Rt,"propTypes",{config:M.a.object,environmentConfig:M.a.object,setNavigationBlocked:M.a.func,schema:M.a.object,roles:M.a.object,license:M.a.object,editRole:M.a.func,updateConfig:M.a.func.isRequired});var Nt=Rt;function Dt(e){const t="PluginSettings.PluginStates."+Rt.escapePathPart(e.id)+".Enable";return{type:O.j.SettingsTypes.TYPE_BOOL,key:t,label:Object(C.b)("admin.plugin.enable_plugin"),label_default:"Enable Plugin: ",help_text:Object(C.b)("admin.plugin.enable_plugin.help"),help_text_default:"When true, this plugin is enabled."}}function Lt(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,s)}return a}function It(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?Lt(a,!0).forEach((function(t){Ut(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):Lt(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function Ut(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}var qt=Object(r.connect)((function(){const e=Object(E.createSelector)((e,t)=>e.entities.admin.plugins[t],(e,t)=>so(e,t),(e,t)=>{if(!e)return null;const a=Rt.escapePathPart(e.id),s="PluginSettings.PluginStates."+a+".Enable";let i=[];return e.settings_schema&&e.settings_schema.settings&&(i=e.settings_schema.settings.map(i=>{const n=i.key.toLowerCase();let r=null,l="",o=i.type,c=i.display_name,d=$l.stateIsFalse(s);return t[n]?(r=t[n].component,o=O.j.SettingsTypes.TYPE_CUSTOM):i.type===O.j.SettingsTypes.TYPE_CUSTOM&&(o=O.j.SettingsTypes.TYPE_BANNER,c=Object(I.gb)("admin.plugin.customSetting.pluginDisabledWarning","In order to view this setting, enable the plugin and click Save."),l="warning",d=$l.stateIsTrue(s)),It({},i,{type:o,key:"PluginSettings.Plugins."+a+"."+n,help_text_markdown:!0,label:c,translate:Boolean(e.translate),isDisabled:d,banner_type:l,component:r,showTitle:!!t[n]&&t[n].options.showTitle})})),i.unshift(Dt(e)),It({},e.settings_schema,{id:e.id,name:e.name,settings:i,translate:Boolean(e.translate)})});return(t,a)=>{const s=a.match.params.plugin_id;return{schema:e(t,s),roles:Object(p.getRoles)(t)}}}))(Nt),Bt=a(311),Ft=a(18);class Gt extends S.a.PureComponent{render(){return S.a.createElement(T.a,{id:"generic_icons.reload",defaultMessage:"Reload Icon"},e=>S.a.createElement("i",{className:"fa fa-refresh",title:e}))}}var Ht=a(1127);function Yt(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class Wt extends S.a.PureComponent{constructor(e){super(e),Yt(this,"reload",()=>{this.setState({loadingReports:!0}),this.props.actions.getComplianceReports().then(()=>this.setState({loadingReports:!1}))}),Yt(this,"runReport",e=>{e.preventDefault(),this.setState({runningReport:!0});const t={};t.desc=this.descInput.current.value,t.emails=this.emailsInput.current.value,t.keywords=this.keywordsInput.current.value,t.start_at=Date.parse(this.fromInput.current.value),t.end_at=Date.parse(this.toInput.current.value),this.props.actions.createComplianceReport(t).then(({data:e})=>{e&&(this.emailsInput.current.value="",this.keywordsInput.current.value="",this.descInput.current.value="",this.fromInput.current.value="",this.toInput.current.value=""),this.setState({runningReport:!1}),this.props.actions.getComplianceReports()})}),this.state={loadingReports:!0},this.descInput=S.a.createRef(),this.emailsInput=S.a.createRef(),this.fromInput=S.a.createRef(),this.keywordsInput=S.a.createRef(),this.toInput=S.a.createRef()}componentDidMount(){this.props.isLicensed&&this.props.enabled&&this.props.actions.getComplianceReports().then(()=>this.setState({loadingReports:!1}))}getDateTime(e){const t=new Date(e);return S.a.createElement("span",{style:zt.date},S.a.createElement(Z.a,{value:t,day:"2-digit",month:"short",year:"numeric"})," - ",S.a.createElement(Z.b,{value:t,hour:"2-digit",minute:"2-digit"}))}render(){if(!this.props.isLicensed||!this.props.enabled)return S.a.createElement("div",null);let e=null;if(this.state.loadingReports)e=S.a.createElement($.a,null);else{for(var t=[],a=0;a<this.props.reports.length;a++){const e=this.props.reports[a];let s="";"adhoc"===e.type&&(s=S.a.createElement("span",null,S.a.createElement(T.a,{id:"admin.compliance_reports.from",defaultMessage:"From:"})," ",this.getDateTime(e.start_at),S.a.createElement("br",null),S.a.createElement(T.a,{id:"admin.compliance_reports.to",defaultMessage:"To:"})," ",this.getDateTime(e.end_at),S.a.createElement("br",null),S.a.createElement(T.a,{id:"admin.compliance_reports.emails",defaultMessage:"Emails:"})," ",e.emails,S.a.createElement("br",null),S.a.createElement(T.a,{id:"admin.compliance_reports.keywords",defaultMessage:"Keywords:"})," ",e.keywords));let i="",n="";"finished"===e.status?(i=S.a.createElement("a",{href:"".concat(Ft.Client4.getBaseRoute(),"/compliance/reports/").concat(e.id,"/download")},S.a.createElement(T.a,{id:"admin.compliance_table.download",defaultMessage:"Download"})),n=S.a.createElement("span",{className:"status-icon-success"},S.a.createElement(T.a,{id:"admin.compliance_table.success",defaultMessage:"Success"}))):"running"===e.status?n=S.a.createElement("span",{className:"status-icon-warning"},S.a.createElement(T.a,{id:"admin.compliance_table.pending",defaultMessage:"Pending"})):"failed"===e.status&&(n=S.a.createElement("span",{className:"status-icon-error"},S.a.createElement(T.a,{id:"admin.compliance_table.failed",defaultMessage:"Failed"})));let r=e.user_id;const l=this.props.users[e.user_id];l&&(r=l.email),t[a]=S.a.createElement("tr",{key:e.id},S.a.createElement("td",null,n),S.a.createElement("td",{style:zt.dataCell},i),S.a.createElement("td",null,this.getDateTime(e.create_at)),S.a.createElement("td",null,e.count),S.a.createElement("td",null,e.type),S.a.createElement("td",{style:zt.dataCell},e.desc),S.a.createElement("td",null,r),S.a.createElement("td",{style:zt.dataCell},s))}e=S.a.createElement("div",{style:zt.content},S.a.createElement("table",{className:"table"},S.a.createElement("thead",null,S.a.createElement("tr",null,S.a.createElement("th",null,S.a.createElement(T.a,{id:"admin.compliance_table.status",defaultMessage:"Status"})),S.a.createElement("th",null,S.a.createElement(T.a,{id:"admin.compliance_table.files",defaultMessage:"Files"})),S.a.createElement("th",null,S.a.createElement(T.a,{id:"admin.compliance_table.timestamp",defaultMessage:"Timestamp"})),S.a.createElement("th",null,S.a.createElement(T.a,{id:"admin.compliance_table.records",defaultMessage:"Records"})),S.a.createElement("th",null,S.a.createElement(T.a,{id:"admin.compliance_table.type",defaultMessage:"Type"})),S.a.createElement("th",null,S.a.createElement(T.a,{id:"admin.compliance_table.desc",defaultMessage:"Description"})),S.a.createElement("th",null,S.a.createElement(T.a,{id:"admin.compliance_table.userId",defaultMessage:"Requested By"})),S.a.createElement("th",null,S.a.createElement(T.a,{id:"admin.compliance_table.params",defaultMessage:"Params"})))),S.a.createElement("tbody",null,t)))}let s="";return this.props.serverError&&(s=S.a.createElement("div",{className:"form-group has-error",style:zt.serverError},S.a.createElement("label",{className:"control-label"},this.props.serverError))),S.a.createElement("div",{className:"panel compliance-panel"},S.a.createElement("h4",null,S.a.createElement(T.a,{id:"admin.compliance_reports.title",defaultMessage:"Compliance Reports"})),S.a.createElement("div",{className:"row"},S.a.createElement("div",{className:"col-sm-6 col-md-4 form-group"},S.a.createElement("label",null,S.a.createElement(T.a,{id:"admin.compliance_reports.desc",defaultMessage:"Job Name:"})),S.a.createElement(Ht.a,{type:"text",className:"form-control",id:"desc",ref:this.descInput,placeholder:{id:Object(C.b)("admin.compliance_reports.desc_placeholder"),defaultMessage:'E.g. "Audit 445 for HR"'}})),S.a.createElement("div",{className:"col-sm-3 col-md-2 form-group"},S.a.createElement("label",null,S.a.createElement(T.a,{id:"admin.compliance_reports.from",defaultMessage:"From:"})),S.a.createElement(Ht.a,{type:"text",className:"form-control",id:"from",ref:this.fromInput,placeholder:{id:Object(C.b)("admin.compliance_reports.from_placeholder"),defaultMessage:'E.g. "2016-03-11"'}})),S.a.createElement("div",{className:"col-sm-3 col-md-2 form-group"},S.a.createElement("label",null,S.a.createElement(T.a,{id:"admin.compliance_reports.to",defaultMessage:"To:"})),S.a.createElement(Ht.a,{type:"text",className:"form-control",id:"to",ref:this.toInput,placeholder:{id:Object(C.b)("admin.compliance_reports.to_placeholder"),defaultMessage:'E.g. "2016-03-15"'}}))),S.a.createElement("div",{className:"row"},S.a.createElement("div",{className:"col-sm-6 col-md-4 form-group"},S.a.createElement("label",null,S.a.createElement(T.a,{id:"admin.compliance_reports.emails",defaultMessage:"Emails:"})),S.a.createElement(Ht.a,{type:"text",className:"form-control",id:"emails",ref:this.emailsInput,placeholder:{id:Object(C.b)("admin.compliance_reports.emails_placeholder"),defaultMessage:'E.g. "bill@example.com, bob@example.com"'}})),S.a.createElement("div",{className:"col-sm-6 col-md-4 form-group"},S.a.createElement("label",null,S.a.createElement(T.a,{id:"admin.compliance_reports.keywords",defaultMessage:"Keywords:"})),S.a.createElement(Ht.a,{type:"text",className:"form-control",id:"keywords",ref:this.keywordsInput,placeholder:{id:Object(C.b)("admin.compliance_reports.keywords_placeholder"),defaultMessage:'E.g. "shorting stock"'}}))),S.a.createElement("div",{className:"clearfix"},S.a.createElement("button",{id:"run-button",type:"submit",className:"btn btn-primary",onClick:this.runReport},S.a.createElement(T.a,{id:"admin.compliance_reports.run",defaultMessage:"Run Compliance Report"}))),s,S.a.createElement("div",{className:"text-right"},S.a.createElement("button",{type:"submit",className:"btn btn-link",disabled:this.state.runningReport,onClick:this.reload},S.a.createElement(Gt,null),S.a.createElement(T.a,{id:"admin.compliance_reports.reload",defaultMessage:"Reload Completed Compliance Reports"}))),S.a.createElement("div",{className:"compliance-panel__table"},e))}}Yt(Wt,"propTypes",{isLicensed:M.a.bool.isRequired,enabled:M.a.bool.isRequired,reports:M.a.arrayOf(M.a.object).isRequired,users:M.a.object.isRequired,serverError:M.a.string,actions:M.a.shape({getComplianceReports:M.a.func.isRequired,createComplianceReport:M.a.func.isRequired}).isRequired});const zt={content:{margin:10},greenStatus:{color:"green"},redStatus:{color:"red"},dataCell:{whiteSpace:"nowrap"},date:{whiteSpace:"nowrap"},serverError:{marginTop:"10px"}},Vt=Object(E.createSelector)(e=>e.entities.users.profiles,e=>e.entities.admin.complianceReports,(e,t)=>{const a={};return Object.values(t).forEach(t=>{const s=e[t.user_id];s&&(a[s.id]=s)}),a});var Xt=Object(r.connect)((function(e){const t="true"===Object(u.getLicense)(e).IsLicensed;let a=!1;const s=Object(d.getConfig)(e);let i;s&&s.ComplianceSettings&&(a=s.ComplianceSettings.Enable);const n=e.requests.admin.createCompliance.error;return n&&(i=n.message),{isLicensed:t,enabled:a,reports:Object.values(Object(d.getComplianceReports)(e)).sort((e,t)=>t.create_at-e.create_at),serverError:i,users:Vt(e)}}),(function(e){return{actions:Object(l.bindActionCreators)({getComplianceReports:o.getComplianceReports,createComplianceReport:o.createComplianceReport},e)}}))(Wt),Jt=a(1349);function Kt(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class Qt extends S.a.PureComponent{constructor(e){super(e),Kt(this,"reload",()=>{this.setState({loadingAudits:!0}),this.props.actions.getAudits().then(()=>this.setState({loadingAudits:!1}))}),Kt(this,"activityLogHeader",()=>{return S.a.createElement("div",{style:{clear:"both"}},S.a.createElement("h4",{style:{display:"inline-block",marginBottom:"6px"}},S.a.createElement(T.a,{id:"admin.complianceMonitoring.userActivityLogsTitle",defaultMessage:"User Activity Logs"})),S.a.createElement("button",{type:"submit",className:"btn btn-link pull-right",onClick:this.reload},S.a.createElement(Gt,null),S.a.createElement(T.a,{id:"admin.audits.reload",defaultMessage:"Reload User Activity Logs"})))}),Kt(this,"renderComplianceReports",()=>this.props.isLicensed?S.a.createElement(Xt,null):S.a.createElement("div",null)),this.state={loadingAudits:!0}}componentDidMount(){this.props.actions.getAudits().then(()=>this.setState({loadingAudits:!1}))}render(){let e=null;return e=this.state.loadingAudits?S.a.createElement($.a,null):S.a.createElement("div",null,S.a.createElement(Jt.a,{audits:this.props.audits,showUserId:!0,showIp:!0,showSession:!0})),S.a.createElement("div",null,this.renderComplianceReports(),S.a.createElement("div",{className:"panel compliance-panel"},this.activityLogHeader(),S.a.createElement("div",{className:"compliance-panel__table"},e)))}}Kt(Qt,"propTypes",{isLicensed:M.a.bool.isRequired,audits:M.a.arrayOf(M.a.object).isRequired,actions:M.a.shape({getAudits:M.a.func.isRequired}).isRequired});var Zt=Object(r.connect)((function(e){return{isLicensed:"true"===Object(u.getLicense)(e).Compliance,audits:Object.values(d.getAudits(e))}}),(function(e){return{actions:Object(l.bindActionCreators)({getAudits:o.getAudits},e)}}))(Qt);a(72);function $t(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class ea extends S.a.Component{static get propTypes(){return{id:M.a.string.isRequired,value:M.a.array.isRequired,onChange:M.a.func.isRequired,disabled:M.a.bool,setByEnv:M.a.bool.isRequired}}constructor(e){super(e),$t(this,"stringToArray",e=>e.split(",").map(e=>e.trim()).filter(Boolean)),$t(this,"arrayToString",e=>e.join(",")),$t(this,"handleChange",e=>{const t=this.stringToArray(e.target.value);this.props.onChange(this.props.id,t),this.setState({value:e.target.value})}),this.state={value:this.arrayToString(e.value)}}render(){const e=I.gb("admin.customization.customUrlSchemes","Custom URL Schemes:"),t=I.gb("admin.customization.customUrlSchemesDesc",'Allows message text to link if it begins with any of the comma-separated URL schemes listed. By default, the following schemes will create links: "http", "https", "ftp", "tel", and "mailto".');return S.a.createElement(Oe,{label:e,helpText:t,inputId:this.props.id,setByEnv:this.props.setByEnv},S.a.createElement(Ht.a,{id:this.props.id,className:"form-control",type:"text",placeholder:{id:Object(C.b)("admin.customization.customUrlSchemesPlaceholder"),defaultMessage:'E.g.: "git,smtp"'},value:this.state.value,onChange:this.handleChange,disabled:this.props.disabled||this.props.setByEnv}))}}function ta(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class aa extends S.a.Component{constructor(e){super(e),ta(this,"handleChange",(e,t,a)=>{t||a?this.props.onChange(e,t):this.setState({showConfirm:!0})}),this.state={showConfirm:!1}}render(){const e=S.a.createElement(T.a,{id:"admin.guest_access.enableTitle",defaultMessage:"Enable Guest Access: "}),t=S.a.createElement(j.b,{id:"admin.guest_access.enableDescription",defaultMessage:"When true, external guest can be invited to channels within teams. Please see [Permissions Schemes](../user_management/permissions/system_scheme) for which roles can invite guests."});return S.a.createElement(S.a.Fragment,null,S.a.createElement(Ce,{id:this.props.id,value:this.props.value,label:e,helpText:t,setByEnv:this.props.setByEnv,onChange:this.handleChange}),S.a.createElement(be.a,{show:this.state.showConfirm,title:S.a.createElement(T.a,{id:"admin.guest_access.disableConfirmTitle",defaultMessage:"Disable Guest Access?"}),message:S.a.createElement(T.a,{id:"admin.guest_access.disableConfirmMessage",defaultMessage:"Disabling guest access will revoke all current Guest Account sessions. Guests will no longer be able to login and new guests cannot be invited into Mattermost. Guest users will be marked as inactive in user lists. Enabling this feature will not reinstate previous guest accounts."}),confirmButtonText:S.a.createElement(T.a,{id:"admin.guest_access.disableConfirmButton",defaultMessage:"Disable Guest Access"}),onConfirm:()=>{this.handleChange(this.props.id,!1,!0),this.setState({showConfirm:!1})},onCancel:()=>this.setState({showConfirm:!1})}))}}ta(aa,"propTypes",{id:M.a.string.isRequired,value:M.a.bool.isRequired,onChange:M.a.func.isRequired,disabled:M.a.bool,setByEnv:M.a.bool.isRequired});var sa=a(593);function ia(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class na extends S.a.Component{constructor(e){super(e),ia(this,"handleChange",()=>{const e=this.refs.fileInput;e&&e.files.length>0&&this.setState({fileSelected:!0,fileName:e.files[0].name})}),ia(this,"handleSubmit",async e=>{e.preventDefault();const t=this.refs.fileInput;if(!t||0===t.files.length)return;const a=t.files[0];this.setState({uploading:!0});const{error:s}=await this.props.actions.uploadLicense(a);if(s)return I.d(t[0]),void this.setState({fileSelected:!1,fileName:null,serverError:s.message,uploading:!1});await this.props.actions.getLicenseConfig(),this.setState({fileSelected:!1,fileName:null,serverError:null,uploading:!1})}),ia(this,"handleRemove",async e=>{e.preventDefault(),this.setState({removing:!0});const{error:t}=await this.props.actions.removeLicense();t?this.setState({fileSelected:!1,fileName:null,serverError:t.message,removing:!1}):(await this.props.actions.getLicenseConfig(),this.setState({fileSelected:!1,fileName:null,serverError:null,removing:!1}))}),this.state={fileSelected:!1,fileName:null,serverError:null,removing:!1,uploading:!1}}componentDidMount(){this.props.actions.getLicenseConfig()}render(){let e="";this.state.serverError&&(e=S.a.createElement("div",{className:"col-sm-12"},S.a.createElement("div",{className:"form-group has-error"},S.a.createElement("label",{className:"control-label"},this.state.serverError))));var t="btn";this.state.fileSelected&&(t="btn btn-primary");const{license:a}=this.props,{uploading:s}=this.state;let i,n,r;const l=S.a.createElement(S.a.Fragment,null,S.a.createElement(Z.a,{value:new Date(parseInt(a.IssuedAt,10))})," ",S.a.createElement(Z.b,{value:new Date(parseInt(a.IssuedAt,10))})),o=S.a.createElement(Z.a,{value:new Date(parseInt(a.StartsAt,10))}),c=S.a.createElement(Z.a,{value:new Date(parseInt(a.ExpiresAt,10))});if("true"!==a.IsLicensed||s){let a;i=S.a.createElement("p",null,"Mattermost Enterprise Edition. A license is required to unlock enterprise features. Start a trial subscription at ",S.a.createElement("a",{target:"_blank",rel:"noopener noreferrer",href:"https://mattermost.com/trial/?utm_medium=product&utm_source=product-trial"},"https://mattermost.com/trial/")),n="This software is offered under a commercial license.\n\nSee ENTERPRISE-EDITION-LICENSE.txt in your root install directory for details. See NOTICE.txt for information about open source software used in this system.",a=this.state.fileName?this.state.fileName:S.a.createElement(T.a,{id:"admin.license.noFile",defaultMessage:"No file uploaded"});let l=S.a.createElement(T.a,{id:"admin.license.upload",defaultMessage:"Upload"});s&&(l=S.a.createElement(T.a,{id:"admin.license.uploading",defaultMessage:"Uploading License..."})),r=S.a.createElement("div",{className:"col-sm-8"},S.a.createElement("div",{className:"file__upload"},S.a.createElement("button",{className:"btn btn-primary"},S.a.createElement(T.a,{id:"admin.license.choose",defaultMessage:"Choose File"})),S.a.createElement("input",{ref:"fileInput",type:"file",accept:".mattermost-license",onChange:this.handleChange})),S.a.createElement("button",{className:t,disabled:!this.state.fileSelected,onClick:this.handleSubmit,id:"upload-button"},l),S.a.createElement("div",{className:"help-text no-margin"},a),S.a.createElement("br",null),e,S.a.createElement("p",{className:"help-text no-margin"},S.a.createElement(j.b,{id:"admin.license.uploadDesc",defaultMessage:"Upload a license key for Mattermost Enterprise Edition to upgrade this server. [Visit us online](!http://mattermost.com) to learn more about the benefits of Enterprise Edition or to purchase a key."})))}else{const e=a.SkuShortName?S.a.createElement(S.a.Fragment,null,"Edition: Mattermost Enterprise Edition ".concat(a.SkuShortName),S.a.createElement("br",null)):null;i="Mattermost Enterprise Edition. Enterprise features on this server have been unlocked with a license key and a valid subscription.",n=S.a.createElement("div",null,S.a.createElement("p",null,"This software is offered under a commercial license.\n\nSee ENTERPRISE-EDITION-LICENSE.txt in your root install directory for details. See NOTICE.txt for information about open source software used in this system.\n\nYour subscription details are as follows:"),"Name: ".concat(a.Name),S.a.createElement("br",null),"Company or organization name: ".concat(a.Company),S.a.createElement("br",null),e,"Number of users: ".concat(a.Users),S.a.createElement("br",null),"License issued: ",l,S.a.createElement("br",null),"Start date of license: ",o,S.a.createElement("br",null),"Expiry date of license: ",c,S.a.createElement("br",null),S.a.createElement("br",null),"See also ",S.a.createElement("a",{rel:"noopener noreferrer",target:"_blank",href:"https://about.mattermost.com/enterprise-edition-terms/"},"Enterprise Edition Terms of Service")," and ",S.a.createElement("a",{rel:"noopener noreferrer",target:"_blank",href:"https://about.mattermost.com/default-privacy-policy/"},"Privacy Policy."));let t=S.a.createElement(T.a,{id:"admin.license.keyRemove",defaultMessage:"Remove Enterprise License and Downgrade Server"});this.state.removing&&(t=S.a.createElement(T.a,{id:"admin.license.removing",defaultMessage:"Removing License..."})),r=S.a.createElement("div",{className:"col-sm-8"},S.a.createElement("button",{className:"btn btn-danger",onClick:this.handleRemove,id:"remove-button"},t),S.a.createElement("br",null),S.a.createElement("br",null),S.a.createElement("p",{className:"help-text"},"If you migrate servers you may need to remove your license key to install it elsewhere. You can remove the key here, which will revert functionality to that of Team Edition."))}return S.a.createElement("div",{className:"wrapper--fixed"},S.a.createElement(k,{id:"admin.license.title",defaultMessage:"Edition and License"}),S.a.createElement("div",{className:"admin-console__wrapper"},S.a.createElement("div",{className:"admin-console__content"},S.a.createElement("form",{className:"form-horizontal",role:"form"},S.a.createElement("div",{className:"form-group"},S.a.createElement("label",{className:"control-label col-sm-4"},S.a.createElement(T.a,{id:"admin.license.edition",defaultMessage:"Edition: "})),S.a.createElement("div",{className:"col-sm-8"},i)),S.a.createElement("div",{className:"form-group"},S.a.createElement("label",{className:"control-label col-sm-4"},S.a.createElement(T.a,{id:"admin.license.type",defaultMessage:"License: "})),S.a.createElement("div",{className:"col-sm-8"},n)),S.a.createElement("div",{className:"form-group"},S.a.createElement("label",{className:"control-label col-sm-4"},S.a.createElement(T.a,{id:"admin.license.key",defaultMessage:"License Key: "})),r)))))}}ia(na,"propTypes",{license:M.a.object.isRequired,config:M.a.object,actions:M.a.shape({getLicenseConfig:M.a.func.isRequired,uploadLicense:M.a.func.isRequired,removeLicense:M.a.func.isRequired}).isRequired});var ra=Object(r.connect)(null,(function(e){return{actions:Object(l.bindActionCreators)({getLicenseConfig:sa.getLicenseConfig,uploadLicense:o.uploadLicense,removeLicense:o.removeLicense},e)}}))(na),la=a(1341),oa=a(1342);a(1912);const ca=e=>S.a.createElement("div",{className:"AdminPanel "+e.className,id:e.id},S.a.createElement("div",{className:"header",onClick:e.onHeaderClick},S.a.createElement("div",null,S.a.createElement("h3",null,S.a.createElement(T.a,{id:e.titleId,defaultMessage:e.titleDefault})),S.a.createElement("div",{className:"margin-top"},S.a.createElement(j.b,{id:e.subtitleId,defaultMessage:e.subtitleDefault,values:e.subtitleValues}))),e.button&&S.a.createElement("div",{className:"button"},e.button)),e.children);ca.propTypes={id:M.a.string,className:M.a.string,onHeaderClick:M.a.func,titleId:M.a.string.isRequired,titleDefault:M.a.string.isRequired,subtitleId:M.a.string.isRequired,subtitleDefault:M.a.string.isRequired,subtitleValues:M.a.any,button:M.a.node,children:M.a.node},ca.defaultProps={className:""};var da=ca;const ma=e=>{const t=S.a.createElement(me.a,{className:"btn btn-primary",to:e.url,onClick:e.disabled?e=>e.preventDefault():()=>null},S.a.createElement(T.a,{id:e.linkTextId,defaultMessage:e.linkTextDefault}));return S.a.createElement(da,{className:"AdminPanelWithLink "+e.className,id:e.id,titleId:e.titleId,titleDefault:e.titleDefault,subtitleId:e.subtitleId,subtitleDefault:e.subtitleDefault,button:t},e.children)};ma.propTypes={children:M.a.node,className:M.a.string,id:M.a.string,titleId:M.a.string.isRequired,titleDefault:M.a.string.isRequired,subtitleId:M.a.string.isRequired,subtitleDefault:M.a.string.isRequired,url:M.a.string.isRequired,disabled:M.a.bool.isRequired,linkTextId:M.a.string.isRequired,linkTextDefault:M.a.string.isRequired},ma.defaultProps={className:""};var ua=ma;function pa(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}const ha=8;class ga extends S.a.Component{constructor(e){super(e),pa(this,"renderConfirmModal",()=>{const e=S.a.createElement(T.a,{id:"admin.permissions.permissionsSchemeSummary.deleteSchemeTitle",defaultMessage:"Delete {scheme} scheme?",values:{scheme:this.props.scheme.display_name}});let t=null;this.state.serverError&&(t=S.a.createElement("div",{className:"permission-scheme-summary-error-message"},S.a.createElement("i",{className:"fa fa-exclamation-circle"})," ",this.state.serverError));const a=S.a.createElement("div",null,S.a.createElement("p",null,S.a.createElement(T.a,{id:"admin.permissions.permissionsSchemeSummary.deleteConfirmQuestion",defaultMessage:"The permissions in the teams using this scheme will reset to the defaults in the System Scheme. Are you sure you want to delete the {schemeName} scheme?",values:{schemeName:this.props.scheme.display_name}})),t),s=S.a.createElement(Fe.a,{loading:this.state.deleting,text:I.gb("admin.permissions.permissionsSchemeSummary.deleting","Deleting...")},S.a.createElement(T.a,{id:"admin.permissions.permissionsSchemeSummary.deleteConfirmButton",defaultMessage:"Yes, Delete"}));return S.a.createElement(be.a,{show:this.state.showConfirmModal,title:e,message:a,confirmButtonText:s,onConfirm:this.handleDeleteConfirmed,onCancel:this.handleDeleteCanceled})}),pa(this,"stopPropagation",e=>{e.stopPropagation()}),pa(this,"handleDeleteCanceled",()=>{this.setState({showConfirmModal:!1})}),pa(this,"handleDeleteConfirmed",async()=>{this.setState({deleting:!0,serverError:null});const e=await this.props.actions.deleteScheme(this.props.scheme.id);e.error?this.setState({deleting:!1,serverError:e.error.message}):this.setState({deleting:!1,showConfirmModal:!1})}),pa(this,"delete",e=>{e.stopPropagation(),this.setState({showConfirmModal:!0,serverError:null})}),pa(this,"goToEdit",()=>{this.props.history.push("/admin_console/user_management/permissions/team_override_scheme/"+this.props.scheme.id)}),pa(this,"render",()=>{const e=this.props.scheme;let t=this.props.teams?this.props.teams.map(e=>S.a.createElement("span",{className:"team",key:e.id},e.display_name)):[],a=null;t.length>ha&&(a=S.a.createElement(se.a,{delayShow:O.Q.OVERLAY_TIME_DELAY,placement:"bottom",overlay:S.a.createElement(ae.a,{className:"team-scheme-extra-teams-overlay",id:e.id+"-extra-teams-overlay"},t.slice(ha))},S.a.createElement("span",{className:"team",key:"extra-teams"},S.a.createElement(T.a,{id:"admin.permissions.permissionsSchemeSummary.moreTeams",defaultMessage:"+{number} more",values:{number:t.length-ha}}))),t=t.slice(0,ha));const s=this.renderConfirmModal();return S.a.createElement("div",{className:"permissions-scheme-summary",onClick:this.goToEdit},S.a.createElement("div",{onClick:this.stopPropagation},s),S.a.createElement("div",{className:"permissions-scheme-summary--header"},S.a.createElement("div",{className:"title"},e.display_name),S.a.createElement("div",{className:"actions"},S.a.createElement(me.a,{className:"edit-button",to:"/admin_console/user_management/permissions/team_override_scheme/"+e.id},S.a.createElement(T.a,{id:"admin.permissions.permissionsSchemeSummary.edit",defaultMessage:"Edit"})),"-",S.a.createElement("a",{className:"delete-button",onClick:this.delete},S.a.createElement(T.a,{id:"admin.permissions.permissionsSchemeSummary.delete",defaultMessage:"Delete"})))),S.a.createElement("div",{className:"permissions-scheme-summary--description"},e.description),S.a.createElement("div",{className:"permissions-scheme-summary--teams"},t,a))}),this.state={showConfirmModal:!1,deleting:!1,serverError:null}}}pa(ga,"propTypes",{scheme:M.a.object.isRequired,teams:M.a.array,actions:M.a.shape({deleteScheme:M.a.func.isRequired}).isRequired});var ba=Object(r.connect)((function(){const e=Object(oa.makeGetSchemeTeams)();return function(t,a){return{teams:e(t,{schemeId:a.scheme.id})}}}),(function(e){return{actions:Object(l.bindActionCreators)({deleteScheme:la.deleteScheme},e)}}))(ga);function fa(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}const _a=30,Ea=501;class ya extends S.a.PureComponent{constructor(e){super(e),fa(this,"loadMoreSchemes",()=>{this.setState({loadingMore:!0}),this.props.actions.loadSchemes("team",this.state.page+1,_a).then(e=>{const t=[];for(const a of e.data)t.push(this.props.actions.loadSchemeTeams(a.id));Promise.all(t).then(()=>this.setState({loadingMore:!1,page:this.state.page+1}))})}),fa(this,"teamOverrideSchemesMigrationView",()=>{if(this.state.phase2MigrationIsComplete)return null;const e=S.a.createElement("a",{href:"https://docs.mattermost.com/administration/config-settings.html#jobs",rel:"noopener noreferrer",target:"_blank"},S.a.createElement(T.a,{id:"admin.permissions.documentationLinkText",defaultMessage:"documentation"}));return this.props.jobsAreEnabled&&!this.props.clusterIsEnabled?this.teamOverrideUnavalableView(Object(C.b)("admin.permissions.teamOverrideSchemesInProgress"),"Migration job in progress: Team Override Schemes are not available until the job server completes the permissions migration. Learn more in the {documentationLink}.",e):this.teamOverrideUnavalableView(Object(C.b)("admin.permissions.teamOverrideSchemesNoJobsEnabled"),"Migration job on hold: Team Override Schemes are not available until the job server can execute the permissions migration. The job will be automatically started when the job server is enabled. Learn more in the {documentationLink}.",e)}),fa(this,"teamOverrideUnavalableView",(e,t,a)=>S.a.createElement("div",{className:"team-override-unavailable"},S.a.createElement("div",{className:"team-override-unavailable__inner"},S.a.createElement(T.a,{id:e,defaultMessage:t,values:{documentationLink:a}})))),fa(this,"renderTeamOverrideSchemes",()=>{const e=Object.values(this.props.schemes).map(e=>S.a.createElement(ba,{scheme:e,history:this.props.history,key:e.id})),t="true"===this.props.license.CustomPermissionsSchemes,a=this.teamOverrideSchemesMigrationView();return!!t&&S.a.createElement(ua,{className:"permissions-block",titleId:Object(C.b)("admin.permissions.teamOverrideSchemesTitle"),titleDefault:"Team Override Schemes",subtitleId:Object(C.b)("admin.permissions.teamOverrideSchemesBannerText"),subtitleDefault:"Use when specific teams need permission exceptions to the [System Scheme](!https://about.mattermost.com/default-system-scheme).",url:"/admin_console/user_management/permissions/team_override_scheme",disabled:null!==a,linkTextId:Object(C.b)("admin.permissions.teamOverrideSchemesNewButton"),linkTextDefault:"New Team Override Scheme"},0===e.length&&null===a&&S.a.createElement("div",{className:"no-team-schemes"},S.a.createElement(T.a,{id:"admin.permissions.teamOverrideSchemesNoSchemes",defaultMessage:"No team override schemes created."})),a,e.length>0&&e,e.length===_a*(this.state.page+1)&&S.a.createElement("button",{className:"more-schemes theme style--none color--link",onClick:this.loadMoreSchemes,disabled:this.state.loadingMore},S.a.createElement(Fe.a,{loading:this.state.loadingMore,text:I.gb("admin.permissions.loadingMoreSchemes","Loading...")},S.a.createElement(T.a,{id:"admin.permissions.loadMoreSchemes",defaultMessage:"Load more schemes"}))))}),fa(this,"render",()=>{if(this.state.loading)return S.a.createElement($.a,null);const e=this.teamOverrideSchemesMigrationView();return S.a.createElement("div",{className:"wrapper--fixed"},S.a.createElement(k,{id:"admin.permissions.permissionSchemes",defaultMessage:"Permission Schemes"}),S.a.createElement("div",{className:"admin-console__wrapper"},S.a.createElement("div",{className:"admin-console__content"},S.a.createElement("div",{className:"banner info"},S.a.createElement("div",{className:"banner__content"},S.a.createElement("span",null,S.a.createElement(j.b,{id:"admin.permissions.introBanner",defaultMessage:"Permission Schemes set the default permissions for Team Admins, Channel Admins and everyone else. Learn more about permission schemes in our [documentation](!https://about.mattermost.com/default-advanced-permissions)."})))),S.a.createElement(ua,{titleId:Object(C.b)("admin.permissions.systemSchemeBannerTitle"),titleDefault:"System Scheme",subtitleId:Object(C.b)("admin.permissions.systemSchemeBannerText"),subtitleDefault:"Set the default permissions inherited by all teams unless a [Team Override Scheme](!https://about.mattermost.com/default-team-override-scheme) is applied.",url:"/admin_console/user_management/permissions/system_scheme",disabled:null!==e,linkTextId:Object(C.b)("admin.permissions.systemSchemeBannerButton"),linkTextDefault:"Edit Scheme"}),this.renderTeamOverrideSchemes())))}),this.state={loading:!0,loadingMore:!1,page:0,phase2MigrationIsComplete:!1}}async UNSAFE_componentWillMount(){let e,t=!0;try{(e=await this.props.actions.loadSchemes("team",0,_a)).error.status_code===Ea&&(t=!1);const a=[];for(const t of e.data)a.push(this.props.actions.loadSchemeTeams(t.id));Promise.all(a).then(()=>this.setState({loading:!1,phase2MigrationIsComplete:t}))}catch(e){this.setState({loading:!1,phase2MigrationIsComplete:t})}}}fa(ya,"propTypes",{schemes:M.a.object.isRequired,jobsAreEnabled:M.a.bool,clusterIsEnabled:M.a.bool,license:M.a.shape({CustomPermissionsSchemes:M.a.string}),actions:M.a.shape({loadSchemes:M.a.func.isRequired,loadSchemeTeams:M.a.func.isRequired})}),fa(ya,"defaultProps",{schemes:{}}),Object(C.b)("admin.permissions.group.delete_posts.description"),Object(C.b)("admin.permissions.group.delete_posts.name"),Object(C.b)("admin.permissions.group.integrations.description"),Object(C.b)("admin.permissions.group.integrations.name"),Object(C.b)("admin.permissions.group.posts.description"),Object(C.b)("admin.permissions.group.posts.name"),Object(C.b)("admin.permissions.group.private_channel.description"),Object(C.b)("admin.permissions.group.private_channel.name"),Object(C.b)("admin.permissions.group.public_channel.description"),Object(C.b)("admin.permissions.group.public_channel.name"),Object(C.b)("admin.permissions.group.reactions.description"),Object(C.b)("admin.permissions.group.reactions.name"),Object(C.b)("admin.permissions.group.send_invites.description"),Object(C.b)("admin.permissions.group.send_invites.name"),Object(C.b)("admin.permissions.group.teams.description"),Object(C.b)("admin.permissions.group.teams.name"),Object(C.b)("admin.permissions.group.edit_posts.description"),Object(C.b)("admin.permissions.group.edit_posts.name"),Object(C.b)("admin.permissions.group.teams_team_scope.description"),Object(C.b)("admin.permissions.group.teams_team_scope.name"),Object(C.b)("admin.permissions.permission.assign_system_admin_role.description"),Object(C.b)("admin.permissions.permission.assign_system_admin_role.name"),Object(C.b)("admin.permissions.permission.create_direct_channel.description"),Object(C.b)("admin.permissions.permission.create_direct_channel.name"),Object(C.b)("admin.permissions.permission.create_group_channel.description"),Object(C.b)("admin.permissions.permission.create_group_channel.name"),Object(C.b)("admin.permissions.permission.create_private_channel.description"),Object(C.b)("admin.permissions.permission.create_private_channel.name"),Object(C.b)("admin.permissions.permission.create_public_channel.description"),Object(C.b)("admin.permissions.permission.create_public_channel.name"),Object(C.b)("admin.permissions.permission.create_team.description"),Object(C.b)("admin.permissions.permission.create_team.name"),Object(C.b)("admin.permissions.permission.create_user_access_token.description"),Object(C.b)("admin.permissions.permission.create_user_access_token.name"),Object(C.b)("admin.permissions.permission.delete_others_posts.description"),Object(C.b)("admin.permissions.permission.delete_others_posts.name"),Object(C.b)("admin.permissions.permission.delete_post.description"),Object(C.b)("admin.permissions.permission.delete_post.name"),Object(C.b)("admin.permissions.permission.delete_private_channel.description"),Object(C.b)("admin.permissions.permission.delete_private_channel.name"),Object(C.b)("admin.permissions.permission.delete_public_channel.description"),Object(C.b)("admin.permissions.permission.delete_public_channel.name"),Object(C.b)("admin.permissions.permission.edit_other_users.description"),Object(C.b)("admin.permissions.permission.edit_other_users.name"),Object(C.b)("admin.permissions.permission.edit_post.description"),Object(C.b)("admin.permissions.permission.edit_post.name"),Object(C.b)("admin.permissions.permission.import_team.description"),Object(C.b)("admin.permissions.permission.import_team.name"),Object(C.b)("admin.permissions.permission.list_team_channels.description"),Object(C.b)("admin.permissions.permission.list_team_channels.name"),Object(C.b)("admin.permissions.permission.list_users_without_team.description"),Object(C.b)("admin.permissions.permission.list_users_without_team.name"),Object(C.b)("admin.permissions.permission.manage_channel_roles.description"),Object(C.b)("admin.permissions.permission.manage_channel_roles.name"),Object(C.b)("admin.permissions.permission.create_emojis.description"),Object(C.b)("admin.permissions.permission.create_emojis.name"),Object(C.b)("admin.permissions.permission.delete_emojis.description"),Object(C.b)("admin.permissions.permission.delete_emojis.name"),Object(C.b)("admin.permissions.permission.delete_others_emojis.description"),Object(C.b)("admin.permissions.permission.delete_others_emojis.name"),Object(C.b)("admin.permissions.permission.manage_jobs.description"),Object(C.b)("admin.permissions.permission.manage_jobs.name"),Object(C.b)("admin.permissions.permission.manage_oauth.description"),Object(C.b)("admin.permissions.permission.manage_oauth.name"),Object(C.b)("admin.permissions.permission.manage_private_channel_members.description"),Object(C.b)("admin.permissions.permission.manage_private_channel_members.name"),Object(C.b)("admin.permissions.permission.manage_private_channel_properties.description"),Object(C.b)("admin.permissions.permission.manage_private_channel_properties.name"),Object(C.b)("admin.permissions.permission.manage_public_channel_members.description"),Object(C.b)("admin.permissions.permission.manage_public_channel_members.name"),Object(C.b)("admin.permissions.permission.manage_public_channel_properties.description"),Object(C.b)("admin.permissions.permission.manage_public_channel_properties.name"),Object(C.b)("admin.permissions.permission.manage_roles.description"),Object(C.b)("admin.permissions.permission.manage_roles.name"),Object(C.b)("admin.permissions.permission.manage_slash_commands.description"),Object(C.b)("admin.permissions.permission.manage_slash_commands.name"),Object(C.b)("admin.permissions.permission.manage_system.description"),Object(C.b)("admin.permissions.permission.manage_system.name"),Object(C.b)("admin.permissions.permission.manage_team.description"),Object(C.b)("admin.permissions.permission.manage_team.name"),Object(C.b)("admin.permissions.permission.manage_team_roles.description"),Object(C.b)("admin.permissions.permission.manage_team_roles.name"),Object(C.b)("admin.permissions.permission.manage_incoming_webhooks.description"),Object(C.b)("admin.permissions.permission.manage_incoming_webhooks.name"),Object(C.b)("admin.permissions.permission.manage_outgoing_webhooks.description"),Object(C.b)("admin.permissions.permission.manage_outgoing_webhooks.name"),Object(C.b)("admin.permissions.permission.permanent_delete_user.description"),Object(C.b)("admin.permissions.permission.permanent_delete_user.name"),Object(C.b)("admin.permissions.permission.read_channel.description"),Object(C.b)("admin.permissions.permission.read_channel.name"),Object(C.b)("admin.permissions.permission.read_user_access_token.description"),Object(C.b)("admin.permissions.permission.read_user_access_token.name"),Object(C.b)("admin.permissions.permission.remove_user_from_team.description"),Object(C.b)("admin.permissions.permission.remove_user_from_team.name"),Object(C.b)("admin.permissions.permission.revoke_user_access_token.description"),Object(C.b)("admin.permissions.permission.revoke_user_access_token.name"),Object(C.b)("admin.permissions.permission.upload_file.description"),Object(C.b)("admin.permissions.permission.upload_file.name"),Object(C.b)("admin.permissions.permission.view_team.description"),Object(C.b)("admin.permissions.permission.view_team.name"),Object(C.b)("admin.permissions.permission.edit_others_posts.description"),Object(C.b)("admin.permissions.permission.edit_others_posts.name"),Object(C.b)("admin.permissions.permission.invite_guest.name"),Object(C.b)("admin.permissions.permission.invite_guest.description"),Object(C.b)("admin.permissions.roles.all_users.name"),Object(C.b)("admin.permissions.roles.channel_admin.name"),Object(C.b)("admin.permissions.roles.channel_user.name"),Object(C.b)("admin.permissions.roles.system_admin.name"),Object(C.b)("admin.permissions.roles.system_user.name"),Object(C.b)("admin.permissions.roles.team_admin.name"),Object(C.b)("admin.permissions.roles.team_user.name");var va=Object(r.connect)((function(e){const t=Object(oa.getSchemes)(e),a=Object(u.getConfig)(e);return{schemes:t,jobsAreEnabled:"true"===a.RunJobs,clusterIsEnabled:"true"===a.EnableCluster}}),(function(e){return{actions:Object(l.bindActionCreators)({loadSchemes:la.getSchemes,loadSchemeTeams:la.getSchemeTeams},e)}}))(ya),Sa=a(3),Ta=a.n(Sa),Oa=a(602),wa=a.n(Oa),Ca=a(95);function xa(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,s)}return a}function Ma(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class ja extends S.a.PureComponent{constructor(...e){super(...e),Ma(this,"handleClick",e=>{this.props.blocked&&(e.preventDefault(),this.props.actions.deferNavigation(()=>{Ca.a.push(this.props.to)}))})}render(){const e=function(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?xa(a,!0).forEach((function(t){Ma(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):xa(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}({},this.props);return Reflect.deleteProperty(e,"blocked"),Reflect.deleteProperty(e,"actions"),S.a.createElement(me.b,Object.assign({},e,{onClick:this.handleClick}))}}Ma(ja,"propTypes",{blocked:M.a.bool.isRequired,to:M.a.string.isRequired,actions:M.a.shape({deferNavigation:M.a.func.isRequired}).isRequired});var Pa=Object(r.connect)((function(e){return{blocked:Object(_.a)(e)}}),(function(e){return{actions:Object(l.bindActionCreators)({deferNavigation:f.g},e)}}))(ja);class Aa extends S.a.PureComponent{render(){return S.a.createElement("span",this.props,S.a.createElement("svg",{width:"30px",height:"30px",viewBox:"0 0 30 30"},S.a.createElement("g",{id:"Developer-Export",stroke:"none",strokeWidth:"1",fill:"none",fillRule:"evenodd"},S.a.createElement("g",{transform:"translate(-995.000000, -1372.000000)",id:"All-Team-Members"},S.a.createElement("g",{transform:"translate(245.000000, 698.000000)"},S.a.createElement("g",{id:"Team-Administrators",transform:"translate(0.000000, 651.000000)"},S.a.createElement("g",{id:"accordion-header"},S.a.createElement("g",{id:"accordion---expanded",transform:"translate(750.000000, 23.000000)"},S.a.createElement("path",{d:"M23.1484532,13.3124932 C23.3437659,13.1171805 23.3437659,12.7968676 23.1484532,12.6015549 L21.8515766,11.3124908 C21.6562639,11.1171781 21.3437635,11.1171781 21.1484508,11.3124908 L15.0000083,17.4609333 L8.8515659,11.3124908 C8.65625317,11.1171781 8.34375279,11.1171781 8.14844006,11.3124908 L6.85156352,12.6015549 C6.65625078,12.7968676 6.65625078,13.1171805 6.85156352,13.3124932 L14.6484454,21.1015626 C14.8437582,21.2968754 15.1562585,21.2968754 15.3515713,21.1015626 L23.1484532,13.3124932 Z",id:"",fill:"#979797"}),S.a.createElement("circle",{id:"Oval-2",stroke:"#989898",strokeWidth:"2",cx:"15",cy:"15",r:"14"})))))))))}}const ka=e=>S.a.createElement(da,{className:"AdminPanelTogglable "+e.className+(e.open?"":" closed"),id:e.id,titleId:e.titleId,titleDefault:e.titleDefault,subtitleId:e.subtitleId,subtitleDefault:e.subtitleDefault,onHeaderClick:e.onToggle,button:S.a.createElement(Aa,null)},e.children);ka.propTypes={children:M.a.node,className:M.a.string,id:M.a.string,open:M.a.bool,titleId:M.a.string.isRequired,titleDefault:M.a.string.isRequired,subtitleId:M.a.string.isRequired,subtitleDefault:M.a.string.isRequired,onToggle:M.a.func},ka.defaultProps={className:"",open:!0};var Ra=ka,Na=a(1234);class Da extends S.a.PureComponent{render(){return S.a.createElement("svg",{width:"18px",height:"18px",viewBox:"0 0 18 18"},S.a.createElement("g",{id:"Developer-Export",stroke:"none",strokeWidth:"1",fillRule:"evenodd"},S.a.createElement("g",{transform:"translate(-298.000000, -1273.000000)",id:"All-Team-Members"},S.a.createElement("g",{transform:"translate(245.000000, 698.000000)"},S.a.createElement("g",{id:"Channel-Administrators",transform:"translate(0.000000, 106.000000)"},S.a.createElement("g",{id:"data-table/column-1",transform:"translate(11.000000, 86.000000)"},S.a.createElement("g",{id:"row-checkbox---@all-@channel-Mentions",transform:"translate(0.000000, 375.000000)"},S.a.createElement("g",{id:"Stacked-Group"},S.a.createElement("g",{id:"data-table/1st/row-checkbox-label-base",transform:"translate(25.000000, 5.000000)"},S.a.createElement("g",{id:"check-on-copy-11",transform:"translate(14.000000, 0.000000)"},S.a.createElement("path",{d:"M19,3 C20.1,3 21,3.9 21,5 L21,19 C21,20.1 20.1,21 19,21 L5,21 C3.9,21 3,20.1 3,19 L3,5 C3,3.9 3.9,3 5,3 L19,3 Z M7,11 L7,13 L17,13 L17,11 L7,11 Z",id:"checkbox---partial"})))))))))))}}function La(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class Ia extends S.a.PureComponent{render(){const{value:e}=this.props;let t=null,a="";return"checked"===e?(t=S.a.createElement(Na.a,null),a="checked"):"intermediate"===e&&(t=S.a.createElement(Da,null),a="intermediate"),S.a.createElement("div",{className:"permission-check "+a},t)}}function Ua(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}La(Ia,"propTypes",{value:M.a.string.isRequired}),La(Ia,"defaultProps",{value:""});class qa extends S.a.Component{constructor(e){super(e),Ua(this,"closeTooltip",()=>{this.setState({open:!1})}),Ua(this,"openTooltip",e=>{const t=e.currentTarget.querySelector("span"),a=t.offsetWidth<t.scrollWidth;this.setState({open:a})}),Ua(this,"parentPermissionClicked",e=>{const t="inherit-link-wrapper"===e.target.parentElement.parentElement.className;"permission-description"===e.target.parentElement.className||t?t&&(this.props.selectRow(this.props.id),e.stopPropagation()):e.stopPropagation()}),this.id=Object(I.o)(),this.state={open:!1}}render(){const{inherited:e,id:t,rowType:a}=this.props;let s="";s=e?S.a.createElement("span",{className:"inherit-link-wrapper"},S.a.createElement(de.a,{id:"admin.permissions.inherited_from",values:{name:this.props.intl.formatMessage({id:"admin.permissions.roles."+e.name+".name",defaultMessage:e.display_name})}})):S.a.createElement(T.a,{id:"admin.permissions."+a+"."+t+".description",values:this.props.additionalValues});let i=S.a.createElement(fe.a,{show:this.state.open,delayShow:O.Q.OVERLAY_TIME_DELAY,placement:"top",target:this.refs.content},S.a.createElement(ae.a,{id:this.id},s));return s.props.values&&Object.keys(s.props.values).length>0&&(i=null),s=S.a.createElement("span",{className:"permission-description",onClick:this.parentPermissionClicked,ref:"content",onMouseOver:this.openTooltip,onMouseOut:this.closeTooltip},s,i)}}Ua(qa,"propTypes",{intl:bt.a.isRequired,id:M.a.string.isRequired,rowType:M.a.string.isRequired,inherited:M.a.object,selectRow:M.a.func.isRequired,additionalValues:M.a.object});var Ba=Object(gt.c)(qa);function Fa(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class Ga extends S.a.Component{constructor(...e){super(...e),Fa(this,"toggleSelect",()=>{this.props.readOnly||this.props.onChange(this.props.id)}),Fa(this,"render",()=>{const{id:e,uniqId:t,inherited:a,value:s,readOnly:i,selected:n,additionalValues:r}=this.props;let l="permission-row";return i&&(l+=" read-only"),n===e&&(l+=" selected"),S.a.createElement("div",{className:l,onClick:this.toggleSelect,id:t},S.a.createElement(Ia,{value:s}),S.a.createElement("span",{className:"permission-name"},S.a.createElement(T.a,{id:"admin.permissions.permission."+e+".name"})),S.a.createElement(Ba,{inherited:a,id:e,selectRow:this.props.selectRow,rowType:"permission",additionalValues:r}))})}}function Ha(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}Fa(Ga,"propTypes",{id:M.a.string.isRequired,uniqId:M.a.string.isRequired,inherited:M.a.object,readOnly:M.a.bool,selected:M.a.string,selectRow:M.a.func.isRequired,value:M.a.string.isRequired,onChange:M.a.func.isRequired,additionalValues:M.a.object});class Ya extends S.a.Component{constructor(e){super(e),Ha(this,"toggleExpanded",e=>{e.stopPropagation(),this.setState({expanded:!this.state.expanded})}),Ha(this,"toggleSelectRow",e=>{this.props.readOnly||this.props.onChange([e])}),Ha(this,"getRecursivePermissions",e=>{let t=[];for(const a of e)"string"==typeof a?t.push(a):t=t.concat(this.getRecursivePermissions(a.permissions));return t}),Ha(this,"toggleSelectSubGroup",e=>{this.props.readOnly||this.props.onChange(e)}),Ha(this,"toggleSelectGroup",()=>{const{readOnly:e,permissions:t,role:a,onChange:s}=this.props;if(!e)if("checked"===this.getStatus(t)){const e=[];for(const a of this.getRecursivePermissions(t))this.fromParent(a)||e.push(a);this.setState({expanded:!0}),s(e)}else if(""===this.getStatus(t)){const e=[];let a=!0;if(0===this.state.prevPermissions.length)for(const s of this.getRecursivePermissions(t))this.fromParent(s)||(e.push(s),a=!1);else for(const a of this.getRecursivePermissions(t))-1===this.state.prevPermissions.indexOf(a)||this.fromParent(a)||e.push(a);s(e),this.setState({prevPermissions:[],expanded:a})}else{const e=[];for(const s of this.getRecursivePermissions(t))-1!==a.permissions.indexOf(s)||this.fromParent(s)||e.push(s);this.setState({prevPermissions:a.permissions,expanded:!1}),s(e)}}),Ha(this,"isInScope",e=>("channel_scope"!==this.props.scope||"channel_scope"===O.x[e])&&("team_scope"!==this.props.scope||"system_scope"!==O.x[e])),Ha(this,"renderPermission",(e,t)=>{if(!this.isInScope(e))return null;const a=this.fromParent(e),s=a||-1!==this.props.role.permissions.indexOf(e);return S.a.createElement(Ga,{key:e,id:e,uniqId:this.props.uniqId+"-"+e,selected:this.props.selected,selectRow:this.props.selectRow,readOnly:this.props.readOnly||a,inherited:a?this.props.parentRole:null,value:s?"checked":"",onChange:this.toggleSelectRow,additionalValues:t})}),Ha(this,"renderGroup",e=>S.a.createElement(Ya,{key:e.id,id:e.id,uniqId:this.props.uniqId+"-"+e.id,selected:this.props.selected,selectRow:this.props.selectRow,readOnly:this.props.readOnly,permissions:e.permissions,additionalValues:this.props.additionalValues,role:this.props.role,parentRole:this.props.parentRole,scope:this.props.scope,onChange:this.toggleSelectSubGroup,combined:e.combined,root:!1})),Ha(this,"fromParent",e=>this.props.parentRole&&-1!==this.props.parentRole.permissions.indexOf(e)),Ha(this,"getStatus",e=>{let t=!1,a=!1;for(const s of e)if("string"==typeof s){if(!this.isInScope(s))continue;t=t||this.fromParent(s)||-1!==this.props.role.permissions.indexOf(s),a=a||!this.fromParent(s)&&-1===this.props.role.permissions.indexOf(s)}else{const e=this.getStatus(s.permissions);if("intermediate"===e)return"intermediate";"checked"===e&&(t=!0),""===e&&(a=!0)}return t&&a?"intermediate":t&&!a?"checked":""}),Ha(this,"hasPermissionsOnScope",()=>this.getRecursivePermissions(this.props.permissions).some(e=>this.isInScope(e))),Ha(this,"allPermissionsFromParent",e=>{for(const t of e)if("string"==typeof t){if(this.isInScope(t)&&!this.fromParent(t))return!1}else if(!this.allPermissionsFromParent(t.permissions))return!1;return!0}),Ha(this,"render",()=>{const{id:e,uniqId:t,permissions:a,readOnly:s,combined:i,root:n,selected:r,additionalValues:l}=this.props;if(!this.hasPermissionsOnScope())return null;const o=a.map(e=>{if("string"==typeof e){const t=l&&l[e]?l[e]:{};return this.renderPermission(e,t)}return this.renderGroup(e)});if(n)return S.a.createElement("div",{className:"permission-group-permissions "+(this.state.expanded?"open":"")},o);let c=null;this.allPermissionsFromParent(this.props.permissions)&&this.props.combined&&(c=this.props.parentRole);let d="";return r===e&&(d+=" selected"),(s||this.allPermissionsFromParent(this.props.permissions))&&(d+=" read-only"),i&&(d+=" combined"),S.a.createElement("div",{className:"permission-group"},!n&&S.a.createElement("div",{className:"permission-group-row "+d,onClick:this.toggleSelectGroup,id:t},!i&&S.a.createElement("div",{className:"fa fa-caret-right permission-arrow "+(this.state.expanded?"open":""),onClick:this.toggleExpanded}),S.a.createElement(Ia,{value:this.getStatus(this.props.permissions)}),S.a.createElement("span",{className:"permission-name"},S.a.createElement(T.a,{id:"admin.permissions.group."+e+".name"})),S.a.createElement(Ba,{inherited:c,id:e,selectRow:this.props.selectRow,rowType:"group"})),!i&&S.a.createElement("div",{className:"permission-group-permissions "+(this.state.expanded?"open":"")},o))}),this.state={expanded:!0,prevPermissions:[]}}UNSAFE_componentWillUpdate(e){this.props.selected!==e.selected&&-1!==this.getRecursivePermissions(this.props.permissions).indexOf(e.selected)&&this.setState({expanded:!0})}}function Wa(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}Ha(Ya,"propTypes",{id:M.a.string.isRequired,uniqId:M.a.string.isRequired,permissions:M.a.array.isRequired,readOnly:M.a.bool,role:M.a.object,parentRole:M.a.object,scope:M.a.string.isRequired,combined:M.a.bool,selected:M.a.string,selectRow:M.a.func.isRequired,root:M.a.bool,onChange:M.a.func.isRequired,additionalValues:M.a.object});class za extends S.a.Component{constructor(...e){super(...e),Wa(this,"render",()=>{let e;return e=this.props.timeLimit===O.j.UNSET_POST_EDIT_TIME_LIMIT?Object(C.b)("edit_post.time_limit_button.no_limit"):Object(C.b)("edit_post.time_limit_button.for_n_seconds"),S.a.createElement("button",{className:"edit-post-time-limit-button",onClick:this.props.onClick},S.a.createElement("i",{className:"fa fa-gear"}),S.a.createElement(T.a,{id:e,values:{n:this.props.timeLimit}}))})}}Wa(za,"propTypes",{timeLimit:M.a.number.isRequired,onClick:M.a.func});var Va=Object(r.connect)((function(e){const{PostEditTimeLimit:t}=Object(u.getConfig)(e);return{timeLimit:parseInt(t,10)}}))(za),Xa=a(1352);function Ja(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}const Ka=2147483647;class Qa extends S.a.Component{constructor(e){super(e),Ja(this,"save",async()=>{this.setState({saving:!0,errorMessage:""});const e=parseInt(this.state.postEditTimeLimit,10);if(e!==O.j.UNSET_POST_EDIT_TIME_LIMIT&&("NaN"===e.toString()||e<=0||e>Ka))return this.setState({errorMessage:Object(I.gb)("edit_post.time_limit_modal.invalid_time_limit","Invalid time limit"),saving:!1}),!1;const t=JSON.parse(JSON.stringify(this.props.config));t.ServiceSettings.PostEditTimeLimit=e;const{error:a}=await this.props.actions.updateConfig(t);return a?this.setState({errorMessage:a,saving:!1}):(this.setState({saving:!1}),this.props.onClose()),!0}),Ja(this,"handleOptionChange",e=>{const{value:t}=e.target;t===O.j.ALLOW_EDIT_POST_ALWAYS?this.setState({postEditTimeLimit:O.j.UNSET_POST_EDIT_TIME_LIMIT}):this.setState({postEditTimeLimit:""})}),Ja(this,"handleSecondsChange",e=>{const{value:t}=e.target;this.setState({postEditTimeLimit:t})}),Ja(this,"render",()=>S.a.createElement(Xa.a,{dialogClassName:"a11y__modal admin-modal edit-post-time-limit-modal",show:this.props.show,role:"dialog","aria-labelledby":"editPostTimeModalLabel"},S.a.createElement(Xa.a.Header,{closeButton:!0},S.a.createElement(Xa.a.Title,{componentClass:"h1",id:"editPostTimeModalLabel"},S.a.createElement(T.a,{id:"edit_post.time_limit_modal.title",defaultMessage:"Configure Global Edit Post Time Limit"}))),S.a.createElement(Xa.a.Body,null,S.a.createElement(de.a,{id:"edit_post.time_limit_modal.description",defaultMessage:'Setting a time limit <strong>applies to all users</strong> who have the "Edit Post" permissions in any permission scheme.'}),S.a.createElement("div",{className:"padding-left x2 padding-top padding-bottom"},S.a.createElement("div",{className:"padding-top x2"},S.a.createElement("input",{id:"anytime",type:"radio",name:"limit",value:O.j.ALLOW_EDIT_POST_ALWAYS,checked:this.state.postEditTimeLimit===O.j.UNSET_POST_EDIT_TIME_LIMIT,onChange:this.handleOptionChange}),S.a.createElement("label",{htmlFor:"anytime"},S.a.createElement(T.a,{id:"edit_post.time_limit_modal.option_label_anytime",defaultMessage:"Anytime"}))),S.a.createElement("div",{className:"padding-top"},S.a.createElement("input",{id:"timelimit",type:"radio",name:"limit",value:O.j.ALLOW_EDIT_POST_TIME_LIMIT,checked:this.state.postEditTimeLimit!==O.j.UNSET_POST_EDIT_TIME_LIMIT,onChange:this.handleOptionChange}),S.a.createElement("label",{htmlFor:"timelimit"},S.a.createElement(T.a,{id:"edit_post.time_limit_modal.option_label_time_limit.preinput",defaultMessage:"Can edit for"})),S.a.createElement("input",{type:"number",className:"form-control inline",min:"0",step:"1",max:Ka,id:"editPostTimeLimit",readOnly:this.state.postEditTimeLimit===O.j.UNSET_POST_EDIT_TIME_LIMIT,onChange:this.handleSecondsChange,value:this.state.postEditTimeLimit===O.j.UNSET_POST_EDIT_TIME_LIMIT?"":this.state.postEditTimeLimit}),S.a.createElement("label",{htmlFor:"timelimit"},S.a.createElement(T.a,{id:"edit_post.time_limit_modal.option_label_time_limit.postinput",defaultMessage:"seconds after posting"}))),S.a.createElement("div",{className:"padding-top x2 light"},S.a.createElement(T.a,{id:"edit_post.time_limit_modal.subscript",defaultMessage:"Set the length of time users have to edit their messages after posting."})))),S.a.createElement(Xa.a.Footer,null,S.a.createElement("div",{className:"edit-post-time-limit-modal__error"},this.state.errorMessage),S.a.createElement("button",{type:"button",className:"btn btn-cancel",onClick:this.props.onClose},S.a.createElement(T.a,{id:"confirm_modal.cancel",defaultMessage:"Cancel"})),S.a.createElement("button",{id:"linkModalCloseButton",type:"button",className:"btn btn-default",onClick:this.save,disabled:this.state.saving},S.a.createElement(T.a,{id:this.state.saving?Object(C.b)("save_button.saving"):Object(C.b)("edit_post.time_limit_modal.save_button"),defaultMessage:"Save Edit Time"}))))),this.state={postEditTimeLimit:parseInt(e.config.ServiceSettings.PostEditTimeLimit,10),saving:!1,errorMessage:""}}componentDidMount(){this.props.actions.getConfig()}}Ja(Qa,"propTypes",{config:M.a.object.isRequired,show:M.a.bool,onClose:M.a.func.isRequired,actions:M.a.shape({updateConfig:M.a.func.isRequired,getConfig:M.a.func.isRequired}).isRequired});var Za=Object(r.connect)((function(e){return{config:d.getConfig(e)}}),(function(e){return{actions:Object(l.bindActionCreators)({updateConfig:o.updateConfig,getConfig:o.getConfig},e)}}))(Qa);function $a(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class es extends S.a.Component{constructor(e){super(e),$a(this,"updateGroups",()=>{const{config:e,scope:t}=this.props,a=this.groups[this.groups.length-1],s=this.groups[0];"true"===e.EnableIncomingWebhooks&&-1===a.permissions.indexOf(Ta.a.MANAGE_INCOMING_WEBHOOKS)&&a.permissions.push(Ta.a.MANAGE_INCOMING_WEBHOOKS),"true"===e.EnableOutgoingWebhooks&&-1===a.permissions.indexOf(Ta.a.MANAGE_OUTGOING_WEBHOOKS)&&a.permissions.push(Ta.a.MANAGE_OUTGOING_WEBHOOKS),"true"===e.EnableOAuthServiceProvider&&-1===a.permissions.indexOf(Ta.a.MANAGE_OAUTH)&&a.permissions.push(Ta.a.MANAGE_OAUTH),"true"===e.EnableCommands&&-1===a.permissions.indexOf(Ta.a.MANAGE_SLASH_COMMANDS)&&a.permissions.push(Ta.a.MANAGE_SLASH_COMMANDS),"true"===e.EnableCustomEmoji&&-1===a.permissions.indexOf(Ta.a.CREATE_EMOJIS)&&a.permissions.push(Ta.a.CREATE_EMOJIS),"true"===e.EnableCustomEmoji&&-1===a.permissions.indexOf(Ta.a.DELETE_EMOJIS)&&a.permissions.push(Ta.a.DELETE_EMOJIS),"true"===e.EnableCustomEmoji&&-1===a.permissions.indexOf(Ta.a.DELETE_OTHERS_EMOJIS)&&a.permissions.push(Ta.a.DELETE_OTHERS_EMOJIS),"true"===e.EnableGuestAccounts&&-1===s.permissions.indexOf(Ta.a.INVITE_GUEST)&&s.permissions.push(Ta.a.INVITE_GUEST),"team_scope"===t&&"teams_team_scope"!==this.groups[0].id&&(this.groups[0].id="teams_team_scope")}),$a(this,"openPostTimeLimitModal",()=>{this.setState({editTimeLimitModalIsVisible:!0})}),$a(this,"closePostTimeLimitModal",()=>{this.setState({editTimeLimitModalIsVisible:!1})}),$a(this,"toggleGroup",e=>{this.props.readOnly||this.props.onToggle(this.props.role.name,e)}),$a(this,"render",()=>S.a.createElement("div",{className:"permissions-tree"},S.a.createElement("div",{className:"permissions-tree--header"},S.a.createElement("div",{className:"permission-name"},S.a.createElement(T.a,{id:"admin.permissions.permissionsTree.permission",defaultMessage:"Permission"})),S.a.createElement("div",{className:"permission-description"},S.a.createElement(T.a,{id:"admin.permissions.permissionsTree.description",defaultMessage:"Description"}))),S.a.createElement("div",{className:"permissions-tree--body"},S.a.createElement(Ya,{key:"all",id:"all",uniqId:this.props.role.name,selected:this.props.selected,selectRow:this.props.selectRow,readOnly:this.props.readOnly,permissions:this.groups,additionalValues:this.ADDITIONAL_VALUES,role:this.props.role,parentRole:this.props.parentRole,scope:this.props.scope,combined:!1,onChange:this.toggleGroup,root:!0})),S.a.createElement(Za,{onClose:this.closePostTimeLimitModal,show:this.state.editTimeLimitModalIsVisible}))),this.state={editTimeLimitModalIsVisible:!1},this.ADDITIONAL_VALUES={edit_post:{editTimeLimitButton:S.a.createElement(Va,{onClick:this.openPostTimeLimitModal})}},this.groups=[{id:"teams",permissions:[{id:"send_invites",combined:!0,permissions:[Ta.a.INVITE_USER,Ta.a.GET_PUBLIC_LINK,Ta.a.ADD_USER_TO_TEAM]},Ta.a.CREATE_TEAM]},{id:"public_channel",permissions:[Ta.a.CREATE_PUBLIC_CHANNEL,Ta.a.MANAGE_PUBLIC_CHANNEL_PROPERTIES,Ta.a.MANAGE_PUBLIC_CHANNEL_MEMBERS,Ta.a.DELETE_PUBLIC_CHANNEL]},{id:"private_channel",permissions:[Ta.a.CREATE_PRIVATE_CHANNEL,Ta.a.MANAGE_PRIVATE_CHANNEL_PROPERTIES,Ta.a.MANAGE_PRIVATE_CHANNEL_MEMBERS,Ta.a.DELETE_PRIVATE_CHANNEL]},{id:"posts",permissions:[{id:"edit_posts",permissions:[Ta.a.EDIT_POST,Ta.a.EDIT_OTHERS_POSTS]},{id:"delete_posts",permissions:[Ta.a.DELETE_POST,Ta.a.DELETE_OTHERS_POSTS]},{id:"reactions",combined:!0,permissions:[Ta.a.ADD_REACTION,Ta.a.REMOVE_REACTION]}]},{id:"integrations",permissions:[]}],this.updateGroups()}componentDidUpdate(e){this.props.config!==e.config&&this.updateGroups()}}$a(es,"propTypes",{scope:M.a.string.isRequired,config:M.a.object.isRequired,role:M.a.object.isRequired,onToggle:M.a.func.isRequired,parentRole:M.a.object,selected:M.a.string,selectRow:M.a.func.isRequired,readOnly:M.a.bool}),$a(es,"defaultProps",{role:{permissions:[]}});var ts=Object(r.connect)((function(e){return{config:Object(u.getConfig)(e)}}))(es);function as(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class ss extends S.a.Component{constructor(e){super(e),as(this,"openPostTimeLimitModal",()=>{this.setState({editTimeLimitModalIsVisible:!0})}),as(this,"closePostTimeLimitModal",()=>{this.setState({editTimeLimitModalIsVisible:!1})}),as(this,"toggleGroup",e=>{this.props.readOnly||this.props.onToggle(this.props.role.name,e)}),as(this,"render",()=>S.a.createElement("div",{className:"permissions-tree guest"},S.a.createElement("div",{className:"permissions-tree--header"},S.a.createElement("div",{className:"permission-name"},S.a.createElement(T.a,{id:"admin.permissions.permissionsTree.permission",defaultMessage:"Permission"})),S.a.createElement("div",{className:"permission-description"},S.a.createElement(T.a,{id:"admin.permissions.permissionsTree.description",defaultMessage:"Description"}))),S.a.createElement("div",{className:"permissions-tree--body"},S.a.createElement(Ya,{key:"all",id:"all",uniqId:this.props.role.name,selected:this.props.selected,selectRow:this.props.selectRow,readOnly:this.props.readOnly,permissions:this.permissions,additionalValues:this.ADDITIONAL_VALUES,role:this.props.role,parentRole:this.props.parentRole,scope:this.props.scope,combined:!1,onChange:this.toggleGroup,root:!0})),S.a.createElement(Za,{onClose:this.closePostTimeLimitModal,show:this.state.editTimeLimitModalIsVisible}))),this.state={editTimeLimitModalIsVisible:!1},this.ADDITIONAL_VALUES={edit_post:{editTimeLimitButton:S.a.createElement(Va,{onClick:this.openPostTimeLimitModal})}},this.permissions=[Ta.a.CREATE_PRIVATE_CHANNEL,Ta.a.EDIT_POST,Ta.a.DELETE_POST,{id:"reactions",combined:!0,permissions:[Ta.a.ADD_REACTION,Ta.a.REMOVE_REACTION]}]}}as(ss,"propTypes",{scope:M.a.string.isRequired,role:M.a.object.isRequired,onToggle:M.a.func.isRequired,parentRole:M.a.object,selected:M.a.string,selectRow:M.a.func.isRequired,readOnly:M.a.bool}),as(ss,"defaultProps",{role:{permissions:[]}});var is=Object(r.connect)((function(e){return{config:Object(u.getConfig)(e)}}))(ss);function ns(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,s)}return a}function rs(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?ns(a,!0).forEach((function(t){ls(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):ns(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function ls(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}const os=[Ta.a.VIEW_MEMBERS,Ta.a.JOIN_PUBLIC_TEAMS,Ta.a.LIST_PUBLIC_TEAMS,Ta.a.JOIN_PRIVATE_TEAMS,Ta.a.LIST_PRIVATE_TEAMS],cs=[Ta.a.CREATE_PRIVATE_CHANNEL,Ta.a.EDIT_POST,Ta.a.DELETE_POST,Ta.a.ADD_REACTION,Ta.a.REMOVE_REACTION];class ds extends S.a.Component{constructor(e){super(e),ls(this,"goToSelectedRow",()=>{const e=document.querySelector(".permission-row.selected,.permission-group-row.selected");return!!e&&(this.state.openRoles.all_users?e.scrollIntoView({behavior:"smooth",block:"center"}):(this.toggleRole("all_users"),setTimeout(()=>{e.scrollIntoView({behavior:"smooth",block:"center"})},300)),!0)}),ls(this,"selectRow",e=>{this.setState({selectedPermission:e}),setTimeout(this.goToSelectedRow),setTimeout(()=>{this.setState({selectedPermission:null})},3e3)}),ls(this,"deriveRolesFromAllUsers",e=>({system_user:rs({},this.props.roles.system_user,{permissions:e.permissions.filter(e=>"system_scope"===O.x[e])}),team_user:rs({},this.props.roles.team_user,{permissions:e.permissions.filter(e=>"team_scope"===O.x[e])}),channel_user:rs({},this.props.roles.channel_user,{permissions:e.permissions.filter(e=>"channel_scope"===O.x[e])})})),ls(this,"deriveRolesFromGuests",e=>({system_guest:rs({},this.props.roles.system_guest,{permissions:e.permissions.filter(e=>"system_scope"===O.x[e])}),team_guest:rs({},this.props.roles.team_guest,{permissions:e.permissions.filter(e=>"team_scope"===O.x[e])}),channel_guest:rs({},this.props.roles.channel_guest,{permissions:e.permissions.filter(e=>"channel_scope"===O.x[e])})})),ls(this,"restoreExcludedPermissions",e=>{for(const t of this.props.roles.system_user.permissions)os.includes(t)&&e.system_user.permissions.push(t);for(const t of this.props.roles.team_user.permissions)os.includes(t)&&e.team_user.permissions.push(t);for(const t of this.props.roles.channel_user.permissions)os.includes(t)&&e.channel_user.permissions.push(t);return e}),ls(this,"restoreGuestPermissions",e=>{for(const t of this.props.roles.system_guest.permissions)cs.includes(t)||e.system_guest.permissions.push(t);for(const t of this.props.roles.team_guest.permissions)cs.includes(t)||e.team_guest.permissions.push(t);for(const t of this.props.roles.channel_guest.permissions)cs.includes(t)||e.channel_guest.permissions.push(t);return e}),ls(this,"handleSubmit",async()=>{const e=this.props.actions.editRole(this.state.roles.team_admin),t=this.props.actions.editRole(this.state.roles.channel_admin),a=this.restoreExcludedPermissions(this.deriveRolesFromAllUsers(this.state.roles.all_users)),s=this.restoreGuestPermissions(this.deriveRolesFromGuests(this.state.roles.guests)),i=[e,t,this.props.actions.editRole(a.system_user),this.props.actions.editRole(a.team_user),this.props.actions.editRole(a.channel_user)];if(this.haveGuestAccountsPermissions()){const e=this.props.actions.editRole(s.system_guest),t=this.props.actions.editRole(s.team_guest),a=this.props.actions.editRole(s.channel_guest);i.push(e,t,a)}this.setState({saving:!0});const n=await Promise.all(i);let r=null,l=!1;for(const e of n)if(e.error){r=e.error.message,l=!0;break}this.setState({serverError:r,saving:!1,saveNeeded:l}),this.props.actions.setNavigationBlocked(l)}),ls(this,"toggleRole",e=>{const t=rs({},this.state.openRoles);t[e]=!t[e],this.setState({openRoles:t})}),ls(this,"togglePermission",(e,t)=>{const a=rs({},this.state.roles),s=rs({},a[e]),i=[...s.permissions];for(const e of t)-1===i.indexOf(e)?i.push(e):i.splice(i.indexOf(e),1);s.permissions=i,a[e]=s,this.setState({roles:a,saveNeeded:!0}),this.props.actions.setNavigationBlocked(!0)}),ls(this,"resetDefaults",()=>{const e=JSON.parse(JSON.stringify(rs({},this.state.roles)));Object.entries(O.k).forEach(([t,a])=>{e[t].permissions=a}),this.setState({roles:e,saveNeeded:!0}),this.props.actions.setNavigationBlocked(!0)}),ls(this,"haveGuestAccountsPermissions",()=>"true"===this.props.license.GuestAccountsPermissions),ls(this,"render",()=>this.state.loaded?S.a.createElement("div",{className:"wrapper--fixed"},S.a.createElement("div",{className:"admin-console__header with-back"},S.a.createElement("div",null,S.a.createElement(Pa,{to:"/admin_console/user_management/permissions",className:"fa fa-angle-left back"}),S.a.createElement(T.a,{id:"admin.permissions.systemScheme",defaultMessage:"System Scheme"}))),S.a.createElement("div",{className:"admin-console__wrapper"},S.a.createElement("div",{className:"admin-console__content"},S.a.createElement("div",{className:"banner info"},S.a.createElement("div",{className:"banner__content"},S.a.createElement("span",null,S.a.createElement(j.b,{id:"admin.permissions.systemScheme.introBanner",defaultMessage:"Configure the default permissions for Team Admins, Channel Admins and other members. This scheme is inherited by all teams unless a [Team Override Scheme](!https://about.mattermost.com/default-team-override-scheme) is applied in specific teams."})))),this.props.license&&"true"===this.props.config.EnableGuestAccounts&&S.a.createElement(Ra,{className:"permissions-block",open:this.state.openRoles.guests,id:"all_users",onToggle:()=>this.toggleRole("guests"),titleId:Object(C.b)("admin.permissions.systemScheme.GuestsTitle"),titleDefault:"Guests",subtitleId:Object(C.b)("admin.permissions.systemScheme.GuestsDescription"),subtitleDefault:"Permissions granted to guest users."},S.a.createElement(is,{selected:this.state.selectedPermission,role:this.state.roles.guests,scope:"system_scope",onToggle:this.togglePermission,selectRow:this.selectRow,readOnly:!this.haveGuestAccountsPermissions()})),S.a.createElement(Ra,{className:"permissions-block",open:this.state.openRoles.all_users,id:"all_users",onToggle:()=>this.toggleRole("all_users"),titleId:Object(C.b)("admin.permissions.systemScheme.allMembersTitle"),titleDefault:"All Members",subtitleId:Object(C.b)("admin.permissions.systemScheme.allMembersDescription"),subtitleDefault:"Permissions granted to all members, including administrators and newly created users."},S.a.createElement(ts,{selected:this.state.selectedPermission,role:this.state.roles.all_users,scope:"system_scope",onToggle:this.togglePermission,selectRow:this.selectRow})),S.a.createElement(Ra,{className:"permissions-block",open:this.state.openRoles.channel_admin,onToggle:()=>this.toggleRole("channel_admin"),titleId:Object(C.b)("admin.permissions.systemScheme.channelAdminsTitle"),titleDefault:"Channel Administrators",subtitleId:Object(C.b)("admin.permissions.systemScheme.channelAdminsDescription"),subtitleDefault:"Permissions granted to channel creators and any users promoted to Channel Administrator."},S.a.createElement(ts,{parentRole:this.state.roles.all_users,role:this.state.roles.channel_admin,scope:"channel_scope",onToggle:this.togglePermission,selectRow:this.selectRow})),S.a.createElement(Ra,{className:"permissions-block",open:this.state.openRoles.team_admin,onToggle:()=>this.toggleRole("team_admin"),titleId:Object(C.b)("admin.permissions.systemScheme.teamAdminsTitle"),titleDefault:"Team Administrators",subtitleId:Object(C.b)("admin.permissions.systemScheme.teamAdminsDescription"),subtitleDefault:"Permissions granted to team creators and any users promoted to Team Administrator."},S.a.createElement(ts,{parentRole:this.state.roles.all_users,role:this.state.roles.team_admin,scope:"team_scope",onToggle:this.togglePermission,selectRow:this.selectRow})),S.a.createElement(Ra,{className:"permissions-block",open:this.state.openRoles.system_admin,onToggle:()=>this.toggleRole("system_admin"),titleId:Object(C.b)("admin.permissions.systemScheme.systemAdminsTitle"),titleDefault:"System Administrators",subtitleId:Object(C.b)("admin.permissions.systemScheme.systemAdminsDescription"),subtitleDefault:"Full permissions granted to System Administrators."},S.a.createElement(ts,{readOnly:!0,role:this.state.roles.system_admin,scope:"system_scope",onToggle:this.togglePermission,selectRow:this.selectRow})))),S.a.createElement("div",{className:"admin-console-save"},S.a.createElement(_e.a,{saving:this.state.saving,disabled:!this.state.saveNeeded||this.canSave&&!this.canSave(),onClick:this.handleSubmit,savingMessage:Object(I.gb)("admin.saving","Saving Config...")}),S.a.createElement(Pa,{className:"cancel-button",to:"/admin_console/user_management/permissions"},S.a.createElement(T.a,{id:"admin.permissions.permissionSchemes.cancel",defaultMessage:"Cancel"})),S.a.createElement("a",{onClick:()=>this.setState({showResetDefaultModal:!0}),className:"cancel-button reset-defaults-btn"},S.a.createElement(T.a,{id:"admin.permissions.systemScheme.resetDefaultsButton",defaultMessage:"Reset to Defaults"})),S.a.createElement("div",{className:"error-message"},S.a.createElement(Ee.a,{error:this.state.serverError}))),S.a.createElement(be.a,{show:this.state.showResetDefaultModal,title:S.a.createElement(T.a,{id:"admin.permissions.systemScheme.resetDefaultsButtonModalTitle",defaultMessage:"Reset to Default?"}),message:S.a.createElement(T.a,{id:"admin.permissions.systemScheme.resetDefaultsButtonModalBody",defaultMessage:"This will reset all selections on this page to their default settings. Are you sure you want to reset?"}),confirmButtonText:S.a.createElement(T.a,{id:"admin.permissions.systemScheme.resetDefaultsConfirmationButton",defaultMessage:"Yes, Reset"}),onConfirm:()=>{this.resetDefaults(),this.setState({showResetDefaultModal:!1})},onCancel:()=>this.setState({showResetDefaultModal:!1})})):S.a.createElement($.a,null)),this.state={showResetDefaultModal:!1,loaded:!1,saving:!1,saveNeeded:!1,serverError:null,roles:{},openRoles:{guests:!0,all_users:!0,system_admin:!0,team_admin:!0,channel_admin:!0}},this.rolesNeeded=[wa.a.SYSTEM_ADMIN_ROLE,wa.a.SYSTEM_USER_ROLE,wa.a.TEAM_ADMIN_ROLE,wa.a.TEAM_USER_ROLE,wa.a.CHANNEL_ADMIN_ROLE,wa.a.CHANNEL_USER_ROLE,wa.a.SYSTEM_GUEST_ROLE,wa.a.TEAM_GUEST_ROLE,wa.a.CHANNEL_GUEST_ROLE]}componentDidMount(){this.props.actions.loadRolesIfNeeded(this.rolesNeeded),this.rolesNeeded.every(e=>this.props.roles[e])&&this.loadRolesIntoState(this.props)}componentWillReceiveProps(e){!this.state.loaded&&this.rolesNeeded.every(t=>e.roles[t])&&this.loadRolesIntoState(e)}loadRolesIntoState(e){const{system_admin:t,team_admin:a,channel_admin:s,system_user:i,team_user:n,channel_user:r,system_guest:l,team_guest:o,channel_guest:c}=e.roles;this.setState({selectedPermission:null,loaded:!0,roles:{system_admin:t,team_admin:a,channel_admin:s,all_users:{name:"all_users",displayName:"All members",permissions:i.permissions.concat(n.permissions).concat(r.permissions)},guests:{name:"guests",displayName:"Guests",permissions:l.permissions.concat(o.permissions).concat(c.permissions)}}})}}ls(ds,"propTypes",{config:M.a.object.isRequired,roles:M.a.object.isRequired,license:M.a.object.isRequired,actions:M.a.shape({loadRolesIfNeeded:M.a.func.isRequired,editRole:M.a.func.isRequired,setNavigationBlocked:M.a.func.isRequired}).isRequired});var ms=Object(r.connect)((function(e){return{config:Object(u.getConfig)(e),license:Object(u.getLicense)(e),roles:Object(p.getRoles)(e),rolesRequest:e.requests.roles.getRolesByNames}}),(function(e){return{actions:Object(l.bindActionCreators)({loadRolesIfNeeded:c.loadRolesIfNeeded,editRole:c.editRole,setNavigationBlocked:f.F},e)}}))(ds),us=(a(170),a(99),a(1178)),ps=a(1208),hs=a(1204);function gs(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}const bs=50;class fs extends S.a.Component{constructor(e){super(e),gs(this,"handleHide",()=>{this.props.actions.setModalSearchTerm(""),this.setState({show:!1})}),gs(this,"handleExit",()=>{this.props.onModalDismissed&&this.props.onModalDismissed()}),gs(this,"handleSubmit",e=>{e&&e.preventDefault(),0!==this.state.values.length&&(this.props.onTeamsSelected(this.state.values),this.handleHide())}),gs(this,"addValue",(e,t=!1)=>{if(this.props.modalID===O.u.ADD_TEAMS_TO_SCHEME&&null!==e.scheme_id&&""!==e.scheme_id&&!t)return void this.setState({confirmAddModal:!0,confirmAddTeam:e});const a=Object.assign([],this.state.values),s=a.map(e=>e.id);e&&e.id&&-1===s.indexOf(e.id)&&a.push(e),this.setState({values:a,confirmAddModal:!1,confirmAddTeam:null})}),gs(this,"setTeamsLoadingState",e=>{this.setState({loadingTeams:e})}),gs(this,"handlePageChange",(e,t)=>{e>t&&(this.setTeamsLoadingState(!0),this.props.actions.loadTeams(e,bs+1).then(()=>{this.setTeamsLoadingState(!1)}))}),gs(this,"handleDelete",e=>{this.setState({values:e})}),gs(this,"search",(e,t)=>{0!==t.state.page&&t.setState({page:0}),this.props.actions.setModalSearchTerm(e)}),this.searchTimeoutId=0,this.state={values:[],show:!0,search:!1,loadingTeams:!0,confirmAddModal:!1,confirmAddTeam:null}}componentDidMount(){this.props.actions.loadTeams(0,bs+1).then(()=>{this.setTeamsLoadingState(!1)})}UNSAFE_componentWillReceiveProps(e){if(this.props.searchTerm!==e.searchTerm){clearTimeout(this.searchTimeoutId);const t=e.searchTerm;if(""===t)return;this.searchTimeoutId=setTimeout(async()=>{this.setTeamsLoadingState(!0),await this.props.actions.searchTeams(t),this.setTeamsLoadingState(!1)},O.Q.SEARCH_TIMEOUT_MILLISECONDS)}}renderOption(e,t,a,s){var i="";return t&&(i="more-modal__row--selected"),S.a.createElement("div",{key:e.id,ref:t?"selected":e.id,className:"more-modal__row clickable "+i,onClick:()=>a(e),onMouseMove:()=>s(e)},S.a.createElement("div",{className:"more-modal__details"},S.a.createElement("div",{className:"team-info-block"},S.a.createElement(hs.a,{name:e.display_name,url:Object(I.L)(e)}),S.a.createElement("div",{className:"team-data"},S.a.createElement("div",{className:"title"},e.display_name)))),S.a.createElement("div",{className:"more-modal__actions"},S.a.createElement("div",{className:"more-modal__actions--round"},S.a.createElement("i",{className:"fa fa-plus"}))))}renderValue(e){return e.data.display_name}renderConfirmModal(e,t){const a=S.a.createElement(T.a,{id:"add_teams_to_scheme.confirmation.title",defaultMessage:"Team Override Scheme Change?"}),s=S.a.createElement(T.a,{id:"add_teams_to_scheme.confirmation.message",defaultMessage:"This team is already selected in another team scheme, are you sure you want to move it to this team scheme?"}),i=S.a.createElement(T.a,{id:"add_teams_to_scheme.confirmation.accept",defaultMessage:"Yes, Move Team"});return S.a.createElement(be.a,{show:e,title:a,message:s,confirmButtonText:i,onCancel:()=>this.setState({confirmAddModal:!1,confirmAddTeam:null}),onConfirm:()=>this.addValue(t,!0)})}render(){const e=this.renderConfirmModal(this.state.confirmAddModal,this.state.confirmAddTeam),t=S.a.createElement(T.a,{id:"multiselect.selectTeams",defaultMessage:"Use ↑↓ to browse, ↵ to select."}),a=Object(I.gb)("multiselect.add","Add");let s=[];return this.props.teams&&(s=(s=(s=this.props.teams.filter(e=>0===e.delete_at)).filter(e=>e.scheme_id!==this.currentSchemeId)).filter(e=>-1===this.props.alreadySelected.indexOf(e.id))).sort((e,t)=>{const a=e.display_name.toUpperCase(),s=t.display_name.toUpperCase();return a===s?0:a>s?1:-1}),S.a.createElement(Xa.a,{dialogClassName:"a11y__modal more-modal more-direct-channels team-selector-modal",show:this.state.show,onHide:this.handleHide,onExited:this.handleExit,role:"dialog","aria-labelledby":"teamSelectorModalLabel"},S.a.createElement(Xa.a.Header,{closeButton:!0},S.a.createElement(Xa.a.Title,{componentClass:"h1",id:"teamSelectorModalLabel"},S.a.createElement(j.b,{id:"add_teams_to_scheme.title",defaultMessage:"Add Teams To **Team Selection** List"}))),S.a.createElement(Xa.a.Body,null,e,S.a.createElement(ps.a,{key:"addTeamsToSchemeKey",options:s,optionRenderer:this.renderOption,values:this.state.values,valueRenderer:this.renderValue,perPage:bs,handlePageChange:this.handlePageChange,handleInput:this.search,handleDelete:this.handleDelete,handleAdd:this.addValue,handleSubmit:this.handleSubmit,numRemainingText:t,buttonSubmitText:a,saving:!1,loading:this.state.loadingTeams,placeholderText:Object(I.gb)("multiselect.addTeamsPlaceholder","Search and add teams")})))}}gs(fs,"propTypes",{currentSchemeId:M.a.string,alreadySelected:M.a.array,searchTerm:M.a.string.isRequired,teams:M.a.array.isRequired,onModalDismissed:M.a.func,onTeamsSelected:M.a.func,modalID:M.a.string,actions:M.a.shape({loadTeams:M.a.func.isRequired,setModalSearchTerm:M.a.func.isRequired,searchTeams:M.a.func.isRequired}).isRequired});var _s=Object(r.connect)((function(e){const t=e.views.search.modalSearch,a=Object.values(Object(g.getTeams)(e)||{}).filter(e=>e.display_name.toLowerCase().startsWith(t.toLowerCase())||e.description.toLowerCase().startsWith(t.toLowerCase()));return{searchTerm:t,teams:a}}),(function(e){return{actions:Object(l.bindActionCreators)({loadTeams:X.getTeams,setModalSearchTerm:us.a,searchTeams:X.searchTeams},e)}}))(fs);const Es=e=>{let t;return e.onButtonClick&&e.buttonTextId&&(t=S.a.createElement("a",{className:"btn btn-primary",onClick:e.disabled?e=>e.preventDefault():e.onButtonClick},S.a.createElement(T.a,{id:e.buttonTextId,defaultMessage:e.buttonTextDefault}))),S.a.createElement(da,{className:"AdminPanelWithButton "+e.className,id:e.id,titleId:e.titleId,titleDefault:e.titleDefault,subtitleId:e.subtitleId,subtitleDefault:e.subtitleDefault,button:t},e.children)};Es.propTypes={children:M.a.node,className:M.a.string,id:M.a.string,titleId:M.a.string.isRequired,titleDefault:M.a.string.isRequired,subtitleId:M.a.string.isRequired,subtitleDefault:M.a.string.isRequired,onButtonClick:M.a.func,disabled:M.a.bool,buttonTextId:M.a.string,buttonTextDefault:M.a.string},Es.defaultProps={className:""};var ys=Es;class vs extends S.a.Component{render(){const e=this.props.team;return S.a.createElement("div",{className:"team",key:e.id},S.a.createElement(hs.a,{name:e.display_name,url:Object(I.L)(e)}),S.a.createElement("a",{className:"remove",onClick:()=>this.props.onRemoveTeam(e.id)},S.a.createElement(T.a,{id:"admin.permissions.teamScheme.removeTeam",defaultMessage:"Remove"})))}}!function(e,t,a){t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a}(vs,"propTypes",{team:M.a.object.isRequired,onRemoveTeam:M.a.func});var Ss=Object(r.connect)((function(e){return{stats:Object(g.getTeamStats)(e)}}),(function(e){return{actions:Object(l.bindActionCreators)({loadTeamStats:X.getTeamStats},e)}}))(vs);function Ts(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,s)}return a}function Os(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?Ts(a,!0).forEach((function(t){ws(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):Ts(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function ws(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}const Cs=[Ta.a.VIEW_MEMBERS,Ta.a.JOIN_PUBLIC_TEAMS,Ta.a.LIST_PUBLIC_TEAMS,Ta.a.JOIN_PRIVATE_TEAMS,Ta.a.LIST_PRIVATE_TEAMS];class xs extends S.a.Component{constructor(e){super(e),ws(this,"isLoaded",e=>e.schemeId?!!(null!==e.scheme&&null!==e.teams&&e.roles[e.scheme.default_team_user_role]&&e.roles[e.scheme.default_team_admin_role]&&e.roles[e.scheme.default_channel_user_role]&&e.roles[e.scheme.default_channel_admin_role]):!!(e.roles.team_user&&e.roles.team_admin&&e.roles.channel_user&&e.roles.channel_admin)),ws(this,"goToSelectedRow",()=>{const e=document.querySelector(".permission-row.selected,.permission-group-row.selected");return!!e&&(this.state.openRoles.all_users?e.scrollIntoView({behavior:"smooth",block:"center"}):(this.toggleRole("all_users"),setTimeout(()=>{e.scrollIntoView({behavior:"smooth",block:"center"})},300)),!0)}),ws(this,"selectRow",e=>{this.setState({selectedPermission:e}),setTimeout(this.goToSelectedRow),setTimeout(()=>{this.setState({selectedPermission:null})},3e3)}),ws(this,"getStateRoles",()=>{if(null!==this.state.roles)return this.state.roles;let e=null,t=null,a=null,s=null;if(this.props.schemeId)this.isLoaded(this.props)&&(e=this.props.roles[this.props.scheme.default_team_user_role],t=this.props.roles[this.props.scheme.default_team_admin_role],a=this.props.roles[this.props.scheme.default_channel_user_role],s=this.props.roles[this.props.scheme.default_channel_admin_role]);else{if(!this.isLoaded(this.props))return null;e=this.props.roles.team_user,t=this.props.roles.team_admin,a=this.props.roles.channel_user,s=this.props.roles.channel_admin}return{team_admin:t,channel_admin:s,all_users:{name:"all_users",displayName:"All members",permissions:e.permissions.concat(a.permissions)}}}),ws(this,"deriveRolesFromAllUsers",(e,t,a)=>({team_user:Os({},e,{permissions:a.permissions.filter(e=>"team_scope"===O.x[e])}),channel_user:Os({},t,{permissions:a.permissions.filter(e=>"channel_scope"===O.x[e])})})),ws(this,"restoreExcludedPermissions",(e,t,a)=>{for(const t of e.permissions)Cs.includes(t)&&a.team_user.permissions.push(t);for(const e of t.permissions)Cs.includes(e)&&a.channel_user.permissions.push(e);return a}),ws(this,"handleNameChange",e=>{this.setState({schemeName:e.target.value,saveNeeded:!0}),this.props.actions.setNavigationBlocked(!0)}),ws(this,"handleDescriptionChange",e=>{this.setState({schemeDescription:e.target.value,saveNeeded:!0}),this.props.actions.setNavigationBlocked(!0)}),ws(this,"handleSubmit",async()=>{const e=this.getStateRoles();let t=e.team_admin,a=e.channel_admin;const s=e.all_users,i=this.state.schemeName||this.props.scheme&&this.props.scheme.display_name||"",n=this.state.schemeDescription||this.props.scheme&&this.props.scheme.description||"";let r=null,l=null,o=null;if(this.setState({saving:!0}),this.props.schemeId){let e=this.deriveRolesFromAllUsers(this.props.roles[this.props.scheme.default_team_user_role],this.props.roles[this.props.scheme.default_channel_user_role],s);r=(e=this.restoreExcludedPermissions(this.props.roles[this.props.scheme.default_team_user_role],this.props.roles[this.props.scheme.default_channel_user_role],e)).team_user,l=e.channel_user,await this.props.actions.patchScheme(this.props.schemeId,{display_name:i,description:n}),o=this.props.schemeId}else{let e=this.deriveRolesFromAllUsers(this.props.roles.team_user,this.props.roles.channel_user,s);r=(e=this.restoreExcludedPermissions(this.props.roles.team_user,this.props.roles.channel_user,e)).team_user,l=e.channel_user;const c=await this.props.actions.createScheme({display_name:i,description:n,scope:"team"});if(c.error)return this.setState({serverError:c.error.message,saving:!1,saveNeeded:!0}),void this.props.actions.setNavigationBlocked(!0);const d=c.data;o=d.id,await this.props.actions.loadRolesIfNeeded([d.default_team_user_role,d.default_team_admin_role,d.default_channel_user_role,d.default_channel_admin_role]),r=Os({},r,{id:this.props.roles[d.default_team_user_role].id}),t=Os({},t,{id:this.props.roles[d.default_team_admin_role].id}),l=Os({},l,{id:this.props.roles[d.default_channel_user_role].id}),a=Os({},a,{id:this.props.roles[d.default_channel_admin_role].id})}const c=this.props.actions.editRole(t),d=this.props.actions.editRole(a),m=this.props.actions.editRole(r),u=this.props.actions.editRole(l),p=[],h=new Set((this.state.teams||this.props.teams||[]).map(e=>e.id)),g=new Set((this.props.teams||[]).map(e=>e.id)),b=new Set([...h].filter(e=>!g.has(e))),f=new Set([...g].filter(e=>!h.has(e)));for(const e of b)p.push(this.props.actions.updateTeamScheme(e,o));for(const e of f)p.push(this.props.actions.updateTeamScheme(e,""));const _=await Promise.all([c,d,m,u,...p]);let E=null,y=!1;for(const e of _)if(e.error){E=e.error.message,y=!0;break}this.setState({serverError:E,saving:!1,saveNeeded:y}),this.props.actions.setNavigationBlocked(y),this.props.history.push("/admin_console/user_management/permissions")}),ws(this,"toggleRole",e=>{const t=Os({},this.state.openRoles);t[e]=!t[e],this.setState({openRoles:t})}),ws(this,"togglePermission",(e,t)=>{const a=Os({},this.getStateRoles());let s=null;a.team_admin.name===e?s=Os({},a.team_admin):a.channel_admin.name===e?s=Os({},a.channel_admin):a.all_users.name===e&&(s=Os({},a.all_users));const i=[...s.permissions];for(const e of t)-1===i.indexOf(e)?i.push(e):i.splice(i.indexOf(e),1);s.permissions=i,a.team_admin.name===e?a.team_admin=s:a.channel_admin.name===e?a.channel_admin=s:a.all_users.name===e&&(a.all_users=s),this.setState({roles:a,saveNeeded:!0}),this.props.actions.setNavigationBlocked(!0)}),ws(this,"openAddTeam",()=>{this.setState({addTeamOpen:!0})}),ws(this,"removeTeam",e=>{const t=(this.state.teams||this.props.teams).filter(t=>t.id!==e);this.setState({teams:t,saveNeeded:!0}),this.props.actions.setNavigationBlocked(!0)}),ws(this,"addTeams",e=>{const t=this.state.teams||this.props.teams||[];this.setState({teams:[...t,...e],saveNeeded:!0}),this.props.actions.setNavigationBlocked(!0)}),ws(this,"closeAddTeam",()=>{this.setState({addTeamOpen:!1})}),ws(this,"render",()=>{if(!this.isLoaded(this.props))return S.a.createElement($.a,null);const e=this.getStateRoles(),t=this.state.teams||this.props.teams||[],a=this.state.schemeName||this.props.scheme&&this.props.scheme.display_name||"",s=this.state.schemeDescription||this.props.scheme&&this.props.scheme.description||"";return S.a.createElement("div",{className:"wrapper--fixed"},this.state.addTeamOpen&&S.a.createElement(_s,{modalID:O.u.ADD_TEAMS_TO_SCHEME,onModalDismissed:this.closeAddTeam,onTeamsSelected:this.addTeams,currentSchemeId:this.props.schemeId,alreadySelected:t.map(e=>e.id)}),S.a.createElement("div",{className:"admin-console__header with-back"},S.a.createElement("div",null,S.a.createElement(Pa,{to:"/admin_console/user_management/permissions",className:"fa fa-angle-left back"}),S.a.createElement(T.a,{id:"admin.permissions.teamScheme",defaultMessage:"Team Scheme"}))),S.a.createElement("div",{className:"admin-console__wrapper"},S.a.createElement("div",{className:"admin-console__content"},S.a.createElement("div",{className:"banner info"},S.a.createElement("div",{className:"banner__content"},S.a.createElement("span",null,S.a.createElement(j.b,{id:"admin.permissions.teamScheme.introBanner",defaultMessage:"[Team Override Schemes](!https://about.mattermost.com/default-team-override-scheme) set the permissions for Team Admins, Channel Admins and other members in specific teams. Use a Team Override Scheme when specific teams need permission exceptions to the [System Scheme](!https://about.mattermost.com/default-system-scheme)."})))),S.a.createElement(da,{titleId:Object(C.b)("admin.permissions.teamScheme.schemeDetailsTitle"),titleDefault:"Scheme Details",subtitleId:Object(C.b)("admin.permissions.teamScheme.schemeDetailsDescription"),subtitleDefault:"Set the name and description for this scheme."},S.a.createElement("div",{className:"team-scheme-details"},S.a.createElement("div",{className:"form-group"},S.a.createElement("label",{className:"control-label",htmlFor:"scheme-name"},S.a.createElement(T.a,{id:"admin.permissions.teamScheme.schemeNameLabel",defaultMessage:"Scheme Name:"})),S.a.createElement(Ht.a,{id:"scheme-name",className:"form-control",type:"text",value:a,placeholder:{id:Object(C.b)("admin.permissions.teamScheme.schemeNamePlaceholder"),defaultMessage:"Scheme Name"},onChange:this.handleNameChange})),S.a.createElement("div",{className:"form-group"},S.a.createElement("label",{className:"control-label",htmlFor:"scheme-description"},S.a.createElement(T.a,{id:"admin.permissions.teamScheme.schemeDescriptionLabel",defaultMessage:"Scheme Description:"})),S.a.createElement("textarea",{id:"scheme-description",className:"form-control",rows:"5",value:s,placeholder:Object(I.gb)("admin.permissions.teamScheme.schemeDescriptionPlaceholder","Scheme Description"),onChange:this.handleDescriptionChange})))),S.a.createElement(ys,{className:"permissions-block",titleId:Object(C.b)("admin.permissions.teamScheme.selectTeamsTitle"),titleDefault:"Select teams to override permissions",subtitleId:Object(C.b)("admin.permissions.teamScheme.selectTeamsDescription"),subtitleDefault:"Select teams where permission exceptions are required.",onButtonClick:this.openAddTeam,buttonTextId:Object(C.b)("admin.permissions.teamScheme.addTeams"),buttonTextDefault:"Add Teams"},S.a.createElement("div",{className:"teams-list"},0===t.length&&S.a.createElement("div",{className:"no-team-schemes"},S.a.createElement(T.a,{id:"admin.permissions.teamScheme.noTeams",defaultMessage:"No team selected. Please add teams to this list."})),t.map(e=>S.a.createElement(Ss,{key:e.id,team:e,onRemoveTeam:this.removeTeam})))),S.a.createElement(Ra,{className:"permissions-block all_users",open:this.state.openRoles.all_users,id:"all_users",onToggle:()=>this.toggleRole("all_users"),titleId:Object(C.b)("admin.permissions.systemScheme.allMembersTitle"),titleDefault:"All Members",subtitleId:Object(C.b)("admin.permissions.systemScheme.allMembersDescription"),subtitleDefault:"Permissions granted to all members, including administrators and newly created users."},S.a.createElement(ts,{selected:this.state.selectedPermission,role:e.all_users,scope:"team_scope",onToggle:this.togglePermission,selectRow:this.selectRow})),S.a.createElement(Ra,{className:"permissions-block channel_admin",open:this.state.openRoles.channel_admin,onToggle:()=>this.toggleRole("channel_admin"),titleId:Object(C.b)("admin.permissions.systemScheme.channelAdminsTitle"),titleDefault:"Channel Administrators",subtitleId:Object(C.b)("admin.permissions.systemScheme.channelAdminsDescription"),subtitleDefault:"Permissions granted to channel creators and any users promoted to Channel Administrator."},S.a.createElement(ts,{parentRole:e.all_users,role:e.channel_admin,scope:"channel_scope",onToggle:this.togglePermission,selectRow:this.selectRow})),S.a.createElement(Ra,{className:"permissions-block team_admin",open:this.state.openRoles.team_admin,onToggle:()=>this.toggleRole("team_admin"),titleId:Object(C.b)("admin.permissions.systemScheme.teamAdminsTitle"),titleDefault:"Team Administrators",subtitleId:Object(C.b)("admin.permissions.systemScheme.teamAdminsDescription"),subtitleDefault:"Permissions granted to team creators and any users promoted to Team Administrator."},S.a.createElement(ts,{parentRole:e.all_users,role:e.team_admin,scope:"team_scope",onToggle:this.togglePermission,selectRow:this.selectRow})))),S.a.createElement("div",{className:"admin-console-save"},S.a.createElement(_e.a,{saving:this.state.saving,disabled:!this.state.saveNeeded||this.canSave&&!this.canSave(),onClick:this.handleSubmit,savingMessage:Object(I.gb)("admin.saving","Saving Config...")}),S.a.createElement(Pa,{className:"cancel-button",to:"/admin_console/user_management/permissions"},S.a.createElement(T.a,{id:"admin.permissions.permissionSchemes.cancel",defaultMessage:"Cancel"})),S.a.createElement("div",{className:"error-message"},S.a.createElement(Ee.a,{error:this.state.serverError}))))}),this.state={saving:!1,saveNeeded:!1,serverError:null,roles:null,teams:null,addTeamOpen:!1,selectedPermission:null,openRoles:{all_users:!0,team_admin:!0,channel_admin:!0}}}componentDidMount(){this.props.actions.loadRolesIfNeeded(["team_admin","team_user","channel_admin","channel_user"]),this.props.schemeId&&(this.props.actions.loadScheme(this.props.schemeId).then(e=>{this.props.actions.loadRolesIfNeeded([e.data.default_team_user_role,e.data.default_team_admin_role,e.data.default_channel_user_role,e.data.default_channel_admin_role])}),this.props.actions.loadSchemeTeams(this.props.schemeId))}}ws(xs,"propTypes",{schemeId:M.a.string,scheme:M.a.object,roles:M.a.object,teams:M.a.array,actions:M.a.shape({loadRolesIfNeeded:M.a.func.isRequired,loadScheme:M.a.func.isRequired,loadSchemeTeams:M.a.func.isRequired,editRole:M.a.func.isRequired,patchScheme:M.a.func.isRequired,createScheme:M.a.func.isRequired,updateTeamScheme:M.a.func.isRequired,setNavigationBlocked:M.a.func.isRequired}).isRequired}),ws(xs,"defaultProps",{scheme:null});var Ms=Object(r.connect)((function(){const e=Object(oa.makeGetSchemeTeams)();return(t,a)=>{const s=a.match.params.scheme_id;return{schemeId:s,scheme:s?Object(oa.getScheme)(t,s):null,teams:s?e(t,{schemeId:s}):null,roles:Object(p.getRoles)(t),rolesRequest:t.requests.roles.getRolesByNames}}}),(function(e){return{actions:Object(l.bindActionCreators)({loadRolesIfNeeded:c.loadRolesIfNeeded,loadScheme:la.getScheme,loadSchemeTeams:la.getSchemeTeams,editRole:c.editRole,patchScheme:la.patchScheme,updateTeamScheme:X.updateTeamScheme,createScheme:la.createScheme,setNavigationBlocked:f.F},e)}}))(xs),js=a(41),Ps=a(62);function As(e){const t={};return e===O.L.SYSTEM_ADMIN?t[O.M.ROLE]=O.L.SYSTEM_ADMIN:e===O.L.SYSTEM_GUEST?t[O.M.ROLE]=O.L.SYSTEM_GUEST:e===O.L.INACTIVE&&(t[O.M.INACTIVE]=!0),t}var ks=a(1182),Rs=a(1120),Ns=a(54),Ds=a(1134),Ls=a(1140);function Is(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function Us(e){const t=e.user&&e.user.roles?e.user.roles:"";return{user:e.user,error:null,hasPostAllRole:Ns.hasPostAllRole(t),hasPostAllPublicRole:Ns.hasPostAllPublicRole(t),hasUserAccessTokenRole:Ns.hasUserAccessTokenRole(t),isSystemAdmin:Ns.isSystemAdmin(t)}}class qs extends S.a.PureComponent{constructor(e){super(e),Is(this,"handleError",e=>{this.setState({error:e})}),Is(this,"handleSystemAdminChange",e=>{"systemadmin"===e.target.name?this.setState({isSystemAdmin:!0}):"systemmember"===e.target.name&&this.setState({isSystemAdmin:!1})}),Is(this,"handleUserAccessTokenChange",e=>{this.setState({hasUserAccessTokenRole:e.target.checked})}),Is(this,"handlePostAllChange",e=>{this.setState({hasPostAllRole:e.target.checked})}),Is(this,"handlePostAllPublicChange",e=>{this.setState({hasPostAllPublicRole:e.target.checked})}),Is(this,"trackRoleChanges",(e,t)=>{Ns.hasUserAccessTokenRole(e)&&!Ns.hasUserAccessTokenRole(t)?Object(Bt.d)("actions","add_roles",{role:b.General.SYSTEM_USER_ACCESS_TOKEN_ROLE}):!Ns.hasUserAccessTokenRole(e)&&Ns.hasUserAccessTokenRole(t)&&Object(Bt.d)("actions","remove_roles",{role:b.General.SYSTEM_USER_ACCESS_TOKEN_ROLE}),Ns.hasPostAllRole(e)&&!Ns.hasPostAllRole(t)?Object(Bt.d)("actions","add_roles",{role:b.General.SYSTEM_POST_ALL_ROLE}):!Ns.hasPostAllRole(e)&&Ns.hasPostAllRole(t)&&Object(Bt.d)("actions","remove_roles",{role:b.General.SYSTEM_POST_ALL_ROLE}),Ns.hasPostAllPublicRole(e)&&!Ns.hasPostAllPublicRole(t)?Object(Bt.d)("actions","add_roles",{role:b.General.SYSTEM_POST_ALL_PUBLIC_ROLE}):!Ns.hasPostAllPublicRole(e)&&Ns.hasPostAllPublicRole(t)&&Object(Bt.d)("actions","remove_roles",{role:b.General.SYSTEM_POST_ALL_PUBLIC_ROLE})}),Is(this,"handleSave",async()=>{this.setState({error:null});let e=b.General.SYSTEM_USER_ROLE;this.state.isSystemAdmin?e+=" "+b.General.SYSTEM_ADMIN_ROLE:this.state.hasUserAccessTokenRole&&(e+=" "+b.General.SYSTEM_USER_ACCESS_TOKEN_ROLE,this.state.hasPostAllRole?e+=" "+b.General.SYSTEM_POST_ALL_ROLE:this.state.hasPostAllPublicRole&&(e+=" "+b.General.SYSTEM_POST_ALL_PUBLIC_ROLE));const{data:t}=await this.props.actions.updateUserRoles(this.props.user.id,e);this.trackRoleChanges(e,this.props.user.roles),t?this.props.onModalDismissed():this.handleError(S.a.createElement(T.a,{id:"admin.manage_roles.saveError",defaultMessage:"Unable to save roles."}))}),Is(this,"renderContents",()=>{const{user:e}=this.props;if(null==e)return S.a.createElement("div",null);let t,a,s=Ns.getFullName(e);s?s+=" (@".concat(e.username,")"):s="@".concat(e.username),(this.state.hasUserAccessTokenRole||this.state.isSystemAdmin||e.is_bot)&&(t=S.a.createElement("div",null,S.a.createElement("p",null,S.a.createElement(j.b,{id:"admin.manage_roles.additionalRoles",defaultMessage:"Select additional permissions for the account. [Read more about roles and permissions](!https://about.mattermost.com/default-permissions)."})),S.a.createElement("div",{className:"checkbox"},S.a.createElement("label",null,S.a.createElement("input",{type:"checkbox",ref:"postall",checked:this.state.hasPostAllRole||this.state.isSystemAdmin,disabled:this.state.isSystemAdmin,onChange:this.handlePostAllChange}),S.a.createElement("strong",null,S.a.createElement(T.a,{id:"admin.manage_roles.postAllRoleTitle",defaultMessage:"post:all"})),S.a.createElement(T.a,{id:"admin.manage_roles.postAllRole",defaultMessage:"Access to post to all Mattermost channels including direct messages."}))),S.a.createElement("div",{className:"checkbox"},S.a.createElement("label",null,S.a.createElement("input",{type:"checkbox",ref:"postallpublic",checked:this.state.hasPostAllPublicRole||this.state.hasPostAllRole||this.state.isSystemAdmin,disabled:this.state.hasPostAllRole||this.state.isSystemAdmin,onChange:this.handlePostAllPublicChange}),S.a.createElement("strong",null,S.a.createElement(T.a,{id:"admin.manage_roles.postAllPublicRoleTitle",defaultMessage:"post:channels"})),S.a.createElement(T.a,{id:"admin.manage_roles.postAllPublicRole",defaultMessage:"Access to post to all Mattermost public channels."}))))),this.props.userAccessTokensEnabled&&(a=e.is_bot?S.a.createElement("div",null,S.a.createElement("div",{className:"member-row--padded member-row-lone-padding"},t)):S.a.createElement("div",null,S.a.createElement("div",{className:"checkbox"},S.a.createElement("label",null,S.a.createElement("input",{type:"checkbox",ref:"postall",checked:this.state.hasUserAccessTokenRole||this.state.isSystemAdmin,disabled:this.state.isSystemAdmin,onChange:this.handleUserAccessTokenChange}),S.a.createElement(j.b,{id:"admin.manage_roles.allowUserAccessTokens",defaultMessage:"Allow this account to generate [personal access tokens](!https://about.mattermost.com/default-user-access-tokens)."}),S.a.createElement("span",{className:"d-block padding-top padding-bottom light"},S.a.createElement(de.a,{id:"admin.manage_roles.allowUserAccessTokensDesc",defaultMessage:"Removing this permission doesn't delete existing tokens. To delete them, go to the user's Manage Tokens menu."})))),S.a.createElement("div",{className:"member-row--padded"},t)));let i=e.email;return e.is_bot&&(i=""),S.a.createElement("div",null,S.a.createElement("div",{className:"manage-teams__user"},S.a.createElement(Ls.a,{size:"lg",username:e.username,url:Ft.Client4.getProfilePictureUrl(e.id,e.last_picture_update)}),S.a.createElement("div",{className:"manage-teams__info"},S.a.createElement("div",{className:"manage-teams__name"},s,S.a.createElement(Ds.a,{show:Boolean(e.is_bot),className:"badge-admin"})),S.a.createElement("div",{className:"manage-teams__email"},i))),S.a.createElement("div",null,S.a.createElement("div",{className:"manage-row--inner"},S.a.createElement("div",{className:"radio-inline"},S.a.createElement("label",null,S.a.createElement("input",{name:"systemadmin",type:"radio",checked:this.state.isSystemAdmin,onChange:this.handleSystemAdminChange}),S.a.createElement(T.a,{id:"admin.manage_roles.systemAdmin",defaultMessage:"System Admin"}))),S.a.createElement("div",{className:"radio-inline"},S.a.createElement("label",null,S.a.createElement("input",{name:"systemmember",type:"radio",checked:!this.state.isSystemAdmin,onChange:this.handleSystemAdminChange}),S.a.createElement(T.a,{id:"admin.manage_roles.systemMember",defaultMessage:"Member"})))),a))}),this.state=Us(e)}static getDerivedStateFromProps(e,t){const a=t.user||{},s=e.user||{};return a.id!==s.id?Us(e):null}render(){return S.a.createElement(Xa.a,{show:this.props.show,onHide:this.props.onModalDismissed,dialogClassName:"a11y__modal manage-teams",role:"dialog","aria-labelledby":"manageRolesModalLabel"},S.a.createElement(Xa.a.Header,{closeButton:!0},S.a.createElement(Xa.a.Title,{componentClass:"h1",id:"manageRolesModalLabel"},S.a.createElement(T.a,{id:"admin.manage_roles.manageRolesTitle",defaultMessage:"Manage Roles"}))),S.a.createElement(Xa.a.Body,null,this.renderContents(),this.state.error),S.a.createElement(Xa.a.Footer,null,S.a.createElement("button",{type:"button",className:"btn btn-link",onClick:this.props.onModalDismissed},S.a.createElement(T.a,{id:"admin.manage_roles.cancel",defaultMessage:"Cancel"})),S.a.createElement("button",{type:"button",className:"btn btn-primary",onClick:this.handleSave},S.a.createElement(T.a,{id:"admin.manage_roles.save",defaultMessage:"Save"}))))}}Is(qs,"propTypes",{show:M.a.bool.isRequired,user:M.a.object,userAccessTokensEnabled:M.a.bool.isRequired,onModalDismissed:M.a.func.isRequired,actions:M.a.shape({updateUserRoles:M.a.func.isRequired}).isRequired});var Bs=Object(r.connect)((function(e){return{userAccessTokensEnabled:e.entities.admin.config.ServiceSettings.EnableUserAccessTokens}}),(function(e){return{actions:Object(l.bindActionCreators)({updateUserRoles:J.updateUserRoles},e)}}))(qs),Fs=a(1214),Gs=a(1133),Hs=a(1126);function Ys(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class Ws extends S.a.Component{constructor(...e){super(...e),Ys(this,"makeTeamAdmin",async()=>{const{error:e}=await this.props.updateTeamMemberSchemeRoles(this.props.teamMember.team_id,this.props.user.id,!0,!0);e?this.props.onError(e.message):this.props.onMemberChange(this.props.teamMember.team_id)}),Ys(this,"makeMember",async()=>{const{error:e}=await this.props.updateTeamMemberSchemeRoles(this.props.teamMember.team_id,this.props.user.id,!0,!1);e?this.props.onError(e.message):this.props.onMemberChange(this.props.teamMember.team_id)}),Ys(this,"removeFromTeam",()=>{this.props.handleRemoveUserFromTeam(this.props.teamMember.team_id)})}render(){const e=I.O(this.props.teamMember.roles)||this.props.teamMember.scheme_admin,t=I.ab(this.props.user.roles),a=I.V(this.props.user),{team:s}=this.props;let i;return i=t?I.gb("admin.user_item.sysAdmin","System Admin"):e?I.gb("admin.user_item.teamAdmin","Team Admin"):a?I.gb("admin.user_item.guest","Guest"):I.gb("admin.user_item.teamMember","Team Member"),S.a.createElement(Gs.a,null,S.a.createElement("a",null,S.a.createElement("span",null,i," "),S.a.createElement("span",{className:"caret"})),S.a.createElement(Hs.a,{openLeft:!0,ariaLabel:I.gb("team_members_dropdown.menuAriaLabel","Team member role change")},S.a.createElement(Hs.a.ItemAction,{show:!e&&!a,onClick:this.makeTeamAdmin,text:I.gb("admin.user_item.makeTeamAdmin","Make Team Admin")}),S.a.createElement(Hs.a.ItemAction,{show:e,onClick:this.makeMember,text:I.gb("admin.user_item.makeMember","Make Team Member")}),S.a.createElement(Hs.a.ItemAction,{show:!s.group_constrained,onClick:this.removeFromTeam,text:I.gb("team_members_dropdown.leave_team","Remove from Team")})))}}function zs(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}Ys(Ws,"propTypes",{team:M.a.object.isRequired,user:M.a.object.isRequired,teamMember:M.a.object.isRequired,onError:M.a.func.isRequired,onMemberChange:M.a.func.isRequired,updateTeamMemberSchemeRoles:M.a.func.isRequired,handleRemoveUserFromTeam:M.a.func.isRequired});class Vs extends S.a.PureComponent{constructor(...e){super(...e),zs(this,"handleClick",e=>{e.preventDefault(),this.props.handleRemoveUserFromTeam(this.props.teamId)})}render(){return S.a.createElement("button",{className:"btn btn-danger",onClick:this.handleClick},S.a.createElement(T.a,{id:"team_members_dropdown.leave_team",defaultMessage:"Remove from Team"}))}}function Xs(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}zs(Vs,"propTypes",{teamId:M.a.string.isRequired,handleRemoveUserFromTeam:M.a.func.isRequired});class Js extends S.a.Component{constructor(e){super(e),Xs(this,"loadTeamsAndTeamMembers",async(e=this.props.user)=>{this.getTeamMembers(e.id);const{data:t}=await this.props.actions.getTeamsForUser(e.id);this.setState({teams:Object(Fs.a)(t,this.props.locale)})}),Xs(this,"handleError",e=>{this.setState({error:e})}),Xs(this,"getTeamMembers",async(e=this.props.user.id)=>{const{data:t}=await this.props.actions.getTeamMembersForUser(e);t&&this.setState({teamMembers:t})}),Xs(this,"handleMemberRemove",e=>{this.setState({teams:this.state.teams.filter(t=>t.id!==e),teamMembers:this.state.teamMembers.filter(t=>t.team_id!==e)})}),Xs(this,"handleRemoveUserFromTeam",async e=>{const{actions:t,user:a}=this.props,{data:s,error:i}=await t.removeUserFromTeam(e,a.id);s?this.handleMemberRemove(e):i&&this.handleError(i.message)}),Xs(this,"handleMemberChange",()=>{this.getTeamMembers(this.props.user.id)}),Xs(this,"renderContents",()=>{const{user:e}=this.props,{teams:t,teamMembers:a}=this.state;if(!e)return S.a.createElement($.a,null);const s=I.O(e.roles);let i,n=I.z(e);n?n+=" (@".concat(e.username,")"):n="@".concat(e.username),i=t&&a?t.map(t=>{const i=a.find(e=>e.team_id===t.id);if(!i)return null;let n;return n=s?S.a.createElement(Vs,{teamId:t.id,handleRemoveUserFromTeam:this.handleRemoveUserFromTeam}):S.a.createElement(Ws,{user:e,team:t,teamMember:i,onError:this.handleError,onMemberChange:this.handleMemberChange,updateTeamMemberSchemeRoles:this.props.actions.updateTeamMemberSchemeRoles,handleRemoveUserFromTeam:this.handleRemoveUserFromTeam}),S.a.createElement("div",{key:t.id,className:"manage-teams__team"},S.a.createElement("div",{className:"manage-teams__team-name"},t.display_name),S.a.createElement("div",{className:"manage-teams__team-actions"},n))}):S.a.createElement($.a,null);let r=null;return s&&(r=S.a.createElement("div",{className:"manage-teams__system-admin"},S.a.createElement(T.a,{id:"admin.user_item.sysAdmin",defaultMessage:"System Admin"}))),S.a.createElement("div",null,S.a.createElement("div",{className:"manage-teams__user"},S.a.createElement(Ls.a,{username:e.username,url:Ft.Client4.getProfilePictureUrl(e.id,e.last_picture_update),size:"lg"}),S.a.createElement("div",{className:"manage-teams__info"},S.a.createElement("div",{className:"manage-teams__name"},n),S.a.createElement("div",{className:"manage-teams__email"},e.email)),r),S.a.createElement("div",{className:"manage-teams__teams"},i))}),this.state={error:null,teams:null,teamMembers:null}}componentDidMount(){this.props.user&&this.loadTeamsAndTeamMembers()}UNSAFE_componentWillReceiveProps(e){(this.props.user?this.props.user.id:"")!==(e.user?e.user.id:"")&&(this.setState({teams:null,teamMembers:null}),e.user&&this.loadTeamsAndTeamMembers(e.user))}render(){return S.a.createElement(Xa.a,{show:this.props.show,onHide:this.props.onModalDismissed,dialogClassName:"a11y__modal manage-teams modal--overflow-visible",role:"dialog","aria-labelledby":"manageTeamsModalLabel"},S.a.createElement(Xa.a.Header,{closeButton:!0},S.a.createElement(Xa.a.Title,{componentClass:"h1",id:"manageTeamsModalLabel"},S.a.createElement(T.a,{id:"admin.user_item.manageTeams",defaultMessage:"Manage Teams"}))),S.a.createElement(Xa.a.Body,null,this.renderContents()))}}Xs(Js,"propTypes",{locale:M.a.string.isRequired,onModalDismissed:M.a.func.isRequired,show:M.a.bool.isRequired,user:M.a.object,actions:M.a.shape({getTeamMembersForUser:M.a.func.isRequired,getTeamsForUser:M.a.func.isRequired,updateTeamMemberSchemeRoles:M.a.func.isRequired,removeUserFromTeam:M.a.func.isRequired}).isRequired});var Ks=Object(r.connect)((function(e){return{locale:Object(Q.a)(e)}}),(function(e){return{actions:Object(l.bindActionCreators)({getTeamMembersForUser:X.getTeamMembersForUser,getTeamsForUser:X.getTeamsForUser,updateTeamMemberSchemeRoles:X.updateTeamMemberSchemeRoles,removeUserFromTeam:X.removeUserFromTeam},e)}}))(Js);function Qs(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class Zs extends S.a.PureComponent{constructor(...e){super(...e),Qs(this,"handleClick",async e=>{e.preventDefault();const{error:t}=await this.props.actions.revokeUserAccessToken(this.props.tokenId);Object(Bt.d)("system_console","revoke_user_access_token"),t&&this.props.onError(t.message)})}render(){return S.a.createElement("button",{className:"btn btn-danger",onClick:this.handleClick},S.a.createElement(T.a,{id:"admin.revoke_token_button.delete",defaultMessage:"Delete"}))}}Qs(Zs,"propTypes",{tokenId:M.a.string.isRequired,onError:M.a.func.isRequired,actions:M.a.shape({revokeUserAccessToken:M.a.func.isRequired}).isRequired});var $s=Object(r.connect)(null,(function(e){return{actions:Object(l.bindActionCreators)({revokeUserAccessToken:J.revokeUserAccessToken},e)}}))(Zs);function ei(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class ti extends S.a.PureComponent{constructor(e){super(e),ei(this,"handleError",e=>{this.setState({error:e})}),ei(this,"renderContents",()=>{const{user:e,userAccessTokens:t}=this.props;if(!e)return S.a.createElement($.a,null);let a,s=Ns.getFullName(e);if(s?s+=" (@".concat(e.username,")"):s="@".concat(e.username),t){const e=Object.values(t);a=0===e.length?S.a.createElement("div",{className:"manage-row__empty"},S.a.createElement(T.a,{id:"admin.manage_tokens.userAccessTokensNone",defaultMessage:"No personal access tokens."})):e.map(e=>S.a.createElement("div",{key:e.id,className:"manage-teams__team"},S.a.createElement("div",{className:"manage-teams__team-name"},S.a.createElement("div",{className:"whitespace--nowrap overflow--ellipsis"},S.a.createElement(T.a,{id:"admin.manage_tokens.userAccessTokensNameLabel",defaultMessage:"Token Description: "}),e.description),S.a.createElement("div",{className:"whitespace--nowrap overflow--ellipsis"},S.a.createElement(T.a,{id:"admin.manage_tokens.userAccessTokensIdLabel",defaultMessage:"Token ID: "}),e.id)),S.a.createElement("div",{className:"manage-teams__team-actions"},S.a.createElement($s,{tokenId:e.id,onError:this.handleError}))))}else a=S.a.createElement($.a,null);return S.a.createElement("div",null,S.a.createElement("div",{className:"manage-teams__user"},S.a.createElement(Ls.a,{username:e.username,url:Ft.Client4.getProfilePictureUrl(e.id,e.last_picture_update),size:"lg"}),S.a.createElement("div",{className:"manage-teams__info"},S.a.createElement("div",{className:"manage-teams__name"},s),S.a.createElement("div",{className:"manage-teams__email"},e.email))),S.a.createElement("div",{className:"padding-top x2"},S.a.createElement(j.b,{id:"admin.manage_tokens.userAccessTokensDescription",defaultMessage:"Personal access tokens function similarly to session tokens and can be used by integrations to [interact with this Mattermost server](!https://about.mattermost.com/default-api-authentication). Tokens are disabled if the user is deactivated. Learn more about [personal access tokens](!https://about.mattermost.com/default-user-access-tokens)."})),S.a.createElement("div",{className:"manage-teams__teams"},a))}),this.state={error:null}}componentDidUpdate(e){const t=this.props.user?this.props.user.id:null,a=e.user?e.user.id:null;t&&a!==t&&this.props.actions.getUserAccessTokensForUser(t,0,200)}render(){return S.a.createElement(Xa.a,{show:this.props.show,onHide:this.props.onModalDismissed,dialogClassName:"a11y__modal manage-teams",role:"dialog","aria-labelledby":"manageTokensModalLabel"},S.a.createElement(Xa.a.Header,{closeButton:!0},S.a.createElement(Xa.a.Title,{componentClass:"h1",id:"manageTokensModalLabel"},S.a.createElement(T.a,{id:"admin.manage_tokens.manageTokensTitle",defaultMessage:"Manage Personal Access Tokens"}))),S.a.createElement(Xa.a.Body,null,this.renderContents(),this.state.error))}}ei(ti,"propTypes",{show:M.a.bool.isRequired,user:M.a.object,userAccessTokens:M.a.object,onModalDismissed:M.a.func.isRequired,actions:M.a.shape({getUserAccessTokensForUser:M.a.func.isRequired}).isRequired});var ai=Object(r.connect)((function(e,t){const a=t.user?t.user.id:"";return{userAccessTokens:e.entities.admin.userAccessTokensByUser[a]}}),(function(e){return{actions:Object(l.bindActionCreators)({getUserAccessTokensForUser:J.getUserAccessTokensForUser},e)}}))(ti);function si(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class ii extends S.a.Component{constructor(e){super(e),si(this,"doSubmit",e=>{if(e.preventDefault(),!this.props.user)return;let t="";if(this.refs.currentPassword&&""===(t=this.refs.currentPassword.value)){const e=S.a.createElement(T.a,{id:"admin.reset_password.missing_current",defaultMessage:"Please enter your current password."});return void this.setState({serverErrorCurrentPass:e})}const a=this.refs.password.value,{valid:s,error:i}=I.db(a,this.props.passwordConfig);s||!i?(this.setState({serverErrorNewPass:null}),this.props.actions.adminResetPassword(this.props.user.id,t,a,()=>{this.props.onModalSubmit(this.props.user)},e=>{this.setState({serverErrorCurrentPass:e.message})})):this.setState({serverErrorNewPass:i})}),si(this,"doCancel",()=>{this.setState({serverErrorNewPass:null,serverErrorCurrentPass:null}),this.props.onModalDismissed()}),this.state={serverErrorNewPass:null,serverErrorCurrentPass:null}}componentWillUnmount(){this.setState({serverErrorNewPass:null,serverErrorCurrentPass:null})}render(){const e=this.props.user;if(null==e)return S.a.createElement("div",null);let t,a="input-group input-group--limit",s=null;this.state.serverErrorNewPass&&(a+=" has-error",s=S.a.createElement("div",{className:"has-error"},S.a.createElement("p",{className:"input__help error"},this.state.serverErrorNewPass))),t=e.auth_service?S.a.createElement(T.a,{id:"admin.reset_password.titleSwitch",defaultMessage:"Switch Account to Email/Password"}):S.a.createElement(T.a,{id:"admin.reset_password.titleReset",defaultMessage:"Reset Password"});let i=null,n=null,r=!0;if(this.props.currentUserId===e.id){r=!1;let e="input-group input-group--limit";this.state.serverErrorCurrentPass&&(e+=" has-error",n=S.a.createElement("div",{className:"has-error"},S.a.createElement("p",{className:"input__help error"},this.state.serverErrorCurrentPass))),i=S.a.createElement("div",{className:"col-sm-10 password__group-addon-space"},S.a.createElement("div",{className:e},S.a.createElement("span",{"data-toggle":"tooltip",title:"Current Password",className:"input-group-addon password__group-addon"},S.a.createElement(T.a,{id:"admin.reset_password.curentPassword",defaultMessage:"Current Password"})),S.a.createElement("input",{type:"password",ref:"currentPassword",className:"form-control",autoFocus:!0})))}return S.a.createElement(Xa.a,{dialogClassName:"a11y__modal",show:this.props.show,onHide:this.doCancel,role:"dialog","aria-labelledby":"resetPasswordModalLabel"},S.a.createElement(Xa.a.Header,{closeButton:!0},S.a.createElement(Xa.a.Title,{componentClass:"h1",id:"resetPasswordModalLabel"},t)),S.a.createElement("form",{role:"form",className:"form-horizontal"},S.a.createElement(Xa.a.Body,null,S.a.createElement("div",{className:"form-group"},i,S.a.createElement("div",{className:"col-sm-10"},S.a.createElement("div",{className:a},S.a.createElement("span",{"data-toggle":"tooltip",title:"New Password",className:"input-group-addon password__group-addon"},S.a.createElement(T.a,{id:"admin.reset_password.newPassword",defaultMessage:"New Password"})),S.a.createElement("input",{type:"password",ref:"password",className:"form-control",autoFocus:r})),s,n))),S.a.createElement(Xa.a.Footer,null,S.a.createElement("button",{type:"button",className:"btn btn-link",onClick:this.doCancel},S.a.createElement(T.a,{id:"admin.reset_password.cancel",defaultMessage:"Cancel"})),S.a.createElement("button",{onClick:this.doSubmit,type:"submit",className:"btn btn-primary"},S.a.createElement(T.a,{id:"admin.reset_password.reset",defaultMessage:"Reset"})))))}}si(ii,"propTypes",{user:M.a.any,currentUserId:M.a.string.isRequired,show:M.a.bool,onModalSubmit:M.a.func.isRequired,onModalDismissed:M.a.func.isRequired,passwordConfig:M.a.shape({minimumLength:M.a.number.isRequired,requireLowercase:M.a.bool.isRequired,requireNumber:M.a.bool.isRequired,requireSymbol:M.a.bool.isRequired,requireUppercase:M.a.bool.isRequired}).isRequired,actions:M.a.shape({adminResetPassword:M.a.func.isRequired}).isRequired}),si(ii,"defaultProps",{show:!1});var ni=Object(r.connect)((function(e){const t=Object(u.getConfig)(e);return{currentUserId:Object(h.getCurrentUserId)(e),passwordConfig:Object(I.D)(t)}}),(function(e){return{actions:Object(l.bindActionCreators)({adminResetPassword:f.c},e)}}))(ii),ri=a(53);function li(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class oi extends S.a.Component{constructor(e){super(e),li(this,"doSubmit",e=>{if(e.preventDefault(),this.refs.email){const e=this.refs.email.value;if(!Object(ri.isEmail)(e)){const e=S.a.createElement(T.a,{id:"user.settings.general.validEmail",defaultMessage:"Please enter a valid email address."});return void this.setState({error:e})}}const t=Object.assign({},this.props.user),a=this.refs.email.value.trim().toLowerCase();t.email=a,this.setState({error:null}),Object(f.a)(t,()=>{this.props.onModalSubmit(this.props.user)},e=>{const t=e.message?e.message:e;this.setState({error:t})})}),li(this,"doCancel",()=>{this.setState({error:null}),this.props.onModalDismissed()}),this.state={error:null}}render(){if(!this.props.user)return S.a.createElement("div",null);let e="input-group input-group--limit",t=null;this.state.error&&(e+=" has-error",t=S.a.createElement("div",{className:"has-error"},S.a.createElement("p",{className:"input__help error"},this.state.error)));const a=S.a.createElement(T.a,{id:"admin.reset_email.titleReset",defaultMessage:"Update Email"});return S.a.createElement(Xa.a,{dialogClassName:"a11y__modal",show:this.props.show,onHide:this.doCancel,role:"dialog","aria-labelledby":"resetEmailModalLabel","data-testid":"resetEmailModal"},S.a.createElement(Xa.a.Header,{closeButton:!0},S.a.createElement(Xa.a.Title,{componentClass:"h1",id:"resetEmailModalLabel"},a)),S.a.createElement("form",{role:"form",className:"form-horizontal"},S.a.createElement(Xa.a.Body,null,S.a.createElement("div",{className:"form-group"},S.a.createElement("div",{className:"col-sm-10"},S.a.createElement("div",{className:e,"data-testid":"resetEmailForm"},S.a.createElement("span",{"data-toggle":"tooltip",title:"New Email",className:"input-group-addon email__group-addon"},S.a.createElement(T.a,{id:"admin.reset_email.newEmail",defaultMessage:"New Email"})),S.a.createElement("input",{type:"email",ref:"email",className:"form-control",maxLength:"128",autoFocus:!0})),t))),S.a.createElement(Xa.a.Footer,null,S.a.createElement("button",{type:"button",className:"btn btn-link",onClick:this.doCancel},S.a.createElement(T.a,{id:"admin.reset_email.cancel",defaultMessage:"Cancel"})),S.a.createElement("button",{onClick:this.doSubmit,type:"submit",className:"btn btn-primary","data-testid":"resetEmailButton"},S.a.createElement(T.a,{id:"admin.reset_email.reset",defaultMessage:"Reset"})))))}}li(oi,"propTypes",{user:M.a.object,show:M.a.bool.isRequired,onModalSubmit:M.a.func,onModalDismissed:M.a.func,passwordConfig:M.a.object}),li(oi,"defaultProps",{show:!1});var ci=a(1485),di=a(1176);function mi(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class ui extends S.a.Component{constructor(e){super(e),mi(this,"onError",e=>{this.setState({error:e})}),this.state={}}render(){let e=null;this.props.actions&&(e=this.props.actions.map((e,t)=>S.a.createElement(e,Object.assign({key:t.toString(),user:this.props.user,index:this.props.index,totalUsers:this.props.totalUsers},this.props.actionProps,this.props.actionUserProps,{onError:this.onError}))));let t,a=this.props.user.email,s="more-modal__description";this.props.user.is_bot?a=null:this.props.extraInfo&&this.props.extraInfo.length>0?(a=S.a.createElement(j.b,{id:"admin.user_item.emailTitle",defaultMessage:"**Email:** {email}",values:{email:this.props.user.email}}),s=""):t=this.props.user.status?this.props.user.status:this.props.status,this.props.user.is_bot&&(t=null);let i=null,n=null;this.props.userCount>=0&&(i=I.h("userListRowName"+this.props.userCount),n=I.h("userListRowEmail"+this.props.userCount));let r=null;return this.state.error&&(r=S.a.createElement("div",{className:"has-error"},S.a.createElement("label",{className:"has-error control-label"},this.state.error.message))),S.a.createElement("div",{"data-testid":"userListRow",key:this.props.user.id,className:"more-modal__row"},S.a.createElement(di.a,{src:Ft.Client4.getProfilePictureUrl(this.props.user.id,this.props.user.last_picture_update),status:t,size:"md"}),S.a.createElement("div",{className:"more-modal__right"},S.a.createElement("div",{className:"more-modal__top"},S.a.createElement("div",{className:"more-modal__details"},S.a.createElement("div",{id:i,className:"more-modal__name"},S.a.createElement(me.a,{to:"/admin_console/user_management/user/"+this.props.user.id},I.k(this.props.user)),S.a.createElement(Ds.a,{className:"badge-admin",show:Boolean(this.props.user.is_bot)})),S.a.createElement("div",{id:n,className:s},a),this.props.extraInfo),S.a.createElement("div",{className:"more-modal__actions"},e)),S.a.createElement("div",{className:"more-modal__bottom"},r)))}}mi(ui,"propTypes",{user:M.a.object.isRequired,status:M.a.string,extraInfo:M.a.array,actions:M.a.arrayOf(M.a.func),actionProps:M.a.object,actionUserProps:M.a.object,index:M.a.number,totalUsers:M.a.number,userCount:M.a.number}),mi(ui,"defaultProps",{extraInfo:[],actions:[],actionProps:{},actionUserProps:{}});var pi=Object(r.connect)((function(e,t){const a=t.user||{};return{status:Object(h.getStatusForUserId)(e,a.id)}}))(ui),hi=a(1235),gi=a(1266);function bi(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,s)}return a}function fi(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}const _i=5;class Ei extends S.a.PureComponent{constructor(e){super(e),fi(this,"handleMakeActive",e=>{e.preventDefault(),this.props.actions.updateUserActive(this.props.user.id,!0).then(this.onUpdateActiveResult)}),fi(this,"handleManageTeams",e=>{e.preventDefault(),this.props.doManageTeams(this.props.user)}),fi(this,"handleManageRoles",e=>{e.preventDefault(),this.props.doManageRoles(this.props.user)}),fi(this,"handleManageTokens",e=>{e.preventDefault(),this.props.doManageTokens(this.props.user)}),fi(this,"handleResetPassword",e=>{e.preventDefault(),this.props.doPasswordReset(this.props.user)}),fi(this,"handleResetEmail",e=>{e.preventDefault(),this.props.doEmailReset(this.props.user)}),fi(this,"handleResetMfa",e=>{e.preventDefault(),Object(f.b)(this.props.user.id,null,this.props.onError)}),fi(this,"handleShowDeactivateMemberModal",async e=>{e.preventDefault(),this.shouldDisableBotsWhenOwnerIsDeactivated()&&await this.props.actions.loadBots(O.j.Integrations.START_PAGE_NUM,O.j.Integrations.PAGE_SIZE),this.setState({showDeactivateMemberModal:!0})}),fi(this,"handleDeactivateMember",()=>{this.props.actions.updateUserActive(this.props.user.id,!1).then(this.onUpdateActiveResult),this.setState({showDeactivateMemberModal:!1})}),fi(this,"onUpdateActiveResult",({error:e})=>{e&&this.props.onError(function(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?bi(a,!0).forEach((function(t){fi(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):bi(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}({id:e.server_error_id},e))}),fi(this,"handleDeactivateCancel",()=>{this.setState({showDeactivateMemberModal:!1})}),fi(this,"renderDeactivateMemberModal",()=>{const e=this.props.user,t=S.a.createElement(T.a,{id:"deactivate_member_modal.title",defaultMessage:"Deactivate {username}",values:{username:this.props.user.username}}),a=S.a.createElement(j.b,{id:"deactivate_member_modal.desc",defaultMessage:"This action deactivates {username}. They will be logged out and not have access to any teams or channels on this system.\\n",values:{username:e.username}});let s;""!==e.auth_service&&e.auth_service!==O.j.EMAIL_SERVICE&&(s=S.a.createElement("strong",null,S.a.createElement("br",null),S.a.createElement("br",null),S.a.createElement(T.a,{id:"deactivate_member_modal.sso_warning",defaultMessage:"You must also deactivate this user in the SSO provider or they will be reactivated on next login or sync."})));const i=S.a.createElement(j.b,{id:"deactivate_member_modal.desc.confirm",defaultMessage:"Are you sure you want to deactivate {username}?",values:{username:e.username}});let n;if(this.shouldDisableBotsWhenOwnerIsDeactivated())for(const t of Object.values(this.props.bots))if(t.owner_id===e.id&&this.state.showDeactivateMemberModal&&0===t.delete_at){n=S.a.createElement(j.b,{id:"deactivate_member_modal.desc.for_users_with_bot_accounts",defaultMessage:"This action deactivates {username}.\\n \\n * They will be logged out and not have access to any teams or channels on this system.\\n * Bot accounts they manage will be disabled along with their integrations. To enable them again, go to [Integrations > Bot Accounts]({siteURL}/_redirect/integrations/bots). [Learn more about bot accounts](!https://mattermost.com/pl/default-bot-accounts).\\n \\n \\n",values:{username:e.username,siteURL:Object(w.e)()}});break}const r=S.a.createElement("div",null,n||a,i,s),l=S.a.createElement(T.a,{id:"deactivate_member_modal.deactivate",defaultMessage:"Deactivate"});return S.a.createElement(be.a,{show:this.state.showDeactivateMemberModal,title:t,message:r,confirmButtonClass:"btn btn-danger",confirmButtonText:l,onConfirm:this.handleDeactivateMember,onCancel:this.handleDeactivateCancel})}),fi(this,"handleShowRevokeSessionsModal",e=>{e.preventDefault(),this.setState({showRevokeSessionsModal:!0})}),fi(this,"handleRevokeSessions",async()=>{const e=this.props.currentUser,{data:t,error:a}=await this.props.actions.revokeAllSessionsForUser(this.props.user.id);t&&this.props.user.id===e.id?Object(Rs.e)():a&&this.props.onError(a),this.setState({showRevokeSessionsModal:!1})}),fi(this,"handleRevokeSessionsCancel",()=>{this.setState({showRevokeSessionsModal:!1})}),fi(this,"handlePromoteToUser",()=>{this.setState({showPromoteToUserModal:!0})}),fi(this,"handlePromoteToUserConfirm",async()=>{const{error:e}=await this.props.actions.promoteGuestToUser(this.props.user.id);e&&this.props.onError(e),this.setState({showPromoteToUserModal:!1})}),fi(this,"handlePromoteToUserCancel",()=>{this.setState({showPromoteToUserModal:!1})}),fi(this,"handleDemoteToGuest",()=>{this.setState({showDemoteToGuestModal:!0})}),fi(this,"handleDemoteToGuestConfirm",async()=>{const{error:e}=await this.props.actions.demoteUserToGuest(this.props.user.id);e&&this.props.onError(e),this.setState({showDemoteToGuestModal:!1})}),fi(this,"handleDemoteToGuestCancel",()=>{this.setState({showDemoteToGuestModal:!1})}),fi(this,"renderPromoteToUserModal",()=>{const e=S.a.createElement(T.a,{id:"promote_to_user_modal.title",defaultMessage:"Promote guest {username} to user",values:{username:this.props.user.username}}),t=S.a.createElement(T.a,{id:"promote_to_user_modal.desc",defaultMessage:"This action promotes the guest {username} to a member. It will allow the user to join public channels and interact with users outside of the channels they are currently members of. Are you sure you want to promote guest {username} to user?",values:{username:this.props.user.username}}),a=S.a.createElement(T.a,{id:"promote_to_user_modal.promote",defaultMessage:"Promote"});return S.a.createElement(be.a,{show:this.state.showPromoteToUserModal,title:e,message:t,confirmButtonClass:"btn btn-danger",confirmButtonText:a,onConfirm:this.handlePromoteToUserConfirm,onCancel:this.handlePromoteToUserCancel})}),fi(this,"renderDemoteToGuestModal",()=>{const e=S.a.createElement(T.a,{id:"demote_to_user_modal.title",defaultMessage:"Demote user {username} to guest",values:{username:this.props.user.username}}),t=S.a.createElement(T.a,{id:"demote_to_user_modal.desc",defaultMessage:"This action demotes the user {username} to a guest. It will restrict the user's ability to join public channels and interact with users outside of the channels they are currently members of. Are you sure you want to demote user {username} to guest?",values:{username:this.props.user.username}}),a=S.a.createElement(T.a,{id:"demote_to_user_modal.demote",defaultMessage:"Demote"});return S.a.createElement(be.a,{show:this.state.showDemoteToGuestModal,title:e,message:t,confirmButtonClass:"btn btn-danger",confirmButtonText:a,onConfirm:this.handleDemoteToGuestConfirm,onCancel:this.handleDemoteToGuestCancel})}),fi(this,"renderRevokeSessionsModal",()=>{const e=S.a.createElement(T.a,{id:"revoke_user_sessions_modal.title",defaultMessage:"Revoke Sessions for {username}",values:{username:this.props.user.username}}),t=S.a.createElement(T.a,{id:"revoke_user_sessions_modal.desc",defaultMessage:"This action revokes all sessions for {username}. They will be logged out from all devices. Are you sure you want to revoke all sessions for {username}?",values:{username:this.props.user.username}}),a=S.a.createElement(T.a,{id:"revoke_user_sessions_modal.revoke",defaultMessage:"Revoke"});return S.a.createElement(be.a,{show:this.state.showRevokeSessionsModal,title:e,message:t,confirmButtonClass:"btn btn-danger",confirmButtonText:a,onConfirm:this.handleRevokeSessions,onCancel:this.handleRevokeSessionsCancel})}),fi(this,"renderAccessToken",()=>{if(!this.props.enableUserAccessTokens)return null;const e=this.props.user,t=Ns.hasPostAllRole(e.roles),a=Ns.hasPostAllPublicRole(e.roles),s=Ns.hasUserAccessTokenRole(e.roles),i=Ns.isSystemAdmin(e.roles);let n="";return(s||i)&&(n=t?Object(C.b)("admin.user_item.userAccessTokenPostAll"):a?Object(C.b)("admin.user_item.userAccessTokenPostAllPublic"):Object(C.b)("admin.user_item.userAccessTokenYes")),n?S.a.createElement("div",{className:"light margin-top half"},S.a.createElement(T.a,{key:"admin.user_item.userAccessToken",id:n})):null}),this.state={showDeactivateMemberModal:!1,showRevokeSessionsModal:!1,showPromoteToUserModal:!1,showDemoteToGuestModal:!1,user:null,role:null}}shouldDisableBotsWhenOwnerIsDeactivated(){return this.props.config&&this.props.config.ServiceSettings&&this.props.config.ServiceSettings.DisableBotsWhenOwnerIsDeactivated}render(){const{currentUser:e,user:t,isLicensed:a}=this.props,s=I.V(t);if(!t)return S.a.createElement("div",null);let i=S.a.createElement(T.a,{id:"admin.user_item.member",defaultMessage:"Member"});s&&(i=S.a.createElement(T.a,{id:"team_members_dropdown.guest",defaultMessage:"Guest"})),t.roles.length>0&&I.ab(t.roles)&&(i=S.a.createElement(T.a,{id:"team_members_dropdown.systemAdmin",defaultMessage:"System Admin"}));let n=!1,r=!I.ab(t.roles),l=!0,o=!0;const c=this.props.mfaEnabled&&Boolean(t.mfa_active);t.delete_at>0&&(i=S.a.createElement(T.a,{id:"admin.user_item.inactive",defaultMessage:"Inactive"}),n=!0,r=!1,l=!1,o=!1);let d=!1;t.auth_service===O.j.LDAP_SERVICE&&(d=!0);const m=this.renderDeactivateMemberModal(),u=this.renderRevokeSessionsModal(),p=this.renderPromoteToUserModal(),h=this.renderDemoteToGuestModal(),{index:g,totalUsers:f}=this.props;let _=!1;return f>_i&&f-g<=_i&&(_=!0),S.a.createElement(S.a.Fragment,null,m,u,p,h,S.a.createElement(Gs.a,null,S.a.createElement("div",{className:"text-right"},S.a.createElement("a",null,S.a.createElement("span",null,i," "),S.a.createElement("span",{className:"caret"})),this.renderAccessToken()),S.a.createElement(Hs.a,{openLeft:!0,openUp:_,ariaLabel:I.gb("admin.user_item.menuAriaLabel","User Actions Menu")},S.a.createElement(Hs.a.ItemAction,{show:n,onClick:this.handleMakeActive,text:I.gb("admin.user_item.makeActive","Activate"),disabled:d}),S.a.createElement(Hs.a.ItemAction,{show:r,onClick:this.handleShowDeactivateMemberModal,text:I.gb("admin.user_item.makeInactive","Deactivate"),disabled:d}),S.a.createElement(Hs.a.ItemAction,{show:!s,onClick:this.handleManageRoles,text:I.gb("admin.user_item.manageRoles","Manage Roles")}),S.a.createElement(Hs.a.ItemAction,{show:l,onClick:this.handleManageTeams,text:I.gb("admin.user_item.manageTeams","Manage Teams")}),S.a.createElement(Hs.a.ItemAction,{show:this.props.enableUserAccessTokens,onClick:this.handleManageTokens,text:I.gb("admin.user_item.manageTokens","Manage Tokens")}),S.a.createElement(Hs.a.ItemAction,{show:c,onClick:this.handleResetMfa,text:I.gb("admin.user_item.resetMfa","Remove MFA")}),S.a.createElement(Hs.a.ItemAction,{show:Boolean(t.auth_service)&&this.props.experimentalEnableAuthenticationTransfer,onClick:this.handleResetPassword,text:I.gb("admin.user_item.switchToEmail","Switch to Email/Password")}),S.a.createElement(Hs.a.ItemAction,{show:!t.auth_service,onClick:this.handleResetPassword,text:I.gb("admin.user_item.resetPwd","Reset Password")}),S.a.createElement(Hs.a.ItemAction,{show:!t.auth_service&&t.id!==e.id,onClick:this.handleResetEmail,text:I.gb("admin.user_item.resetEmail","Update Email")}),S.a.createElement(Hs.a.ItemAction,{show:s,onClick:this.handlePromoteToUser,text:I.gb("admin.user_item.promoteToUser","Promote to User")}),S.a.createElement(Hs.a.ItemAction,{show:!s&&t.id!==e.id&&a,onClick:this.handleDemoteToGuest,text:I.gb("admin.user_item.demoteToGuest","Demote to Guest")}),S.a.createElement(ks.a,{permissions:[b.Permissions.REVOKE_USER_ACCESS_TOKEN]},S.a.createElement(Hs.a.ItemAction,{show:o,onClick:this.handleShowRevokeSessionsModal,text:I.gb("admin.user_item.revokeSessions","Revoke Sessions")})))))}}fi(Ei,"propTypes",{user:M.a.object.isRequired,mfaEnabled:M.a.bool.isRequired,isLicensed:M.a.bool.isRequired,enableUserAccessTokens:M.a.bool.isRequired,experimentalEnableAuthenticationTransfer:M.a.bool.isRequired,doPasswordReset:M.a.func.isRequired,doEmailReset:M.a.func.isRequired,doManageTeams:M.a.func.isRequired,doManageRoles:M.a.func.isRequired,doManageTokens:M.a.func.isRequired,onError:M.a.func.isRequired,currentUser:M.a.object.isRequired,index:M.a.number.isRequired,totalUsers:M.a.number.isRequired,actions:M.a.shape({updateUserActive:M.a.func.isRequired,revokeAllSessionsForUser:M.a.func.isRequired,promoteGuestToUser:M.a.func.isRequired,demoteUserToGuest:M.a.func.isRequired,loadBots:M.a.func.isRequired}).isRequired,config:M.a.object.isRequired,bots:M.a.object.isRequired});var yi=Object(r.connect)((function(e){const t=Object(hi.getBotAccounts)(e),a=Object(u.getLicense)(e);return{isLicensed:a&&"true"===a.IsLicensed,config:d.getConfig(e),currentUser:Object(h.getCurrentUser)(e),bots:t}}),(function(e){return{actions:Object(l.bindActionCreators)({updateUserActive:J.updateUserActive,revokeAllSessionsForUser:J.revokeAllSessionsForUser,promoteGuestToUser:J.promoteGuestToUser,demoteUserToGuest:J.demoteUserToGuest,loadBots:gi.loadBots},e)}}))(Ei);function vi(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class Si extends S.a.Component{constructor(e){super(e),vi(this,"nextPage",()=>{this.setState({page:this.state.page+1}),this.props.nextPage(this.state.page+1)}),vi(this,"previousPage",()=>{this.setState({page:this.state.page-1})}),vi(this,"search",e=>{this.props.search(e),""!==e&&this.setState({page:0})}),vi(this,"doManageTeams",e=>{this.setState({showManageTeamsModal:!0,user:e})}),vi(this,"doManageRoles",e=>{this.setState({showManageRolesModal:!0,user:e})}),vi(this,"doManageTokens",e=>{this.setState({showManageTokensModal:!0,user:e})}),vi(this,"doManageTeamsDismiss",()=>{this.setState({showManageTeamsModal:!1,user:null})}),vi(this,"doManageRolesDismiss",()=>{this.setState({showManageRolesModal:!1,user:null})}),vi(this,"doManageTokensDismiss",()=>{this.setState({showManageTokensModal:!1,user:null})}),vi(this,"doPasswordReset",e=>{this.setState({showPasswordModal:!0,user:e})}),vi(this,"doPasswordResetDismiss",()=>{this.setState({showPasswordModal:!1,user:null})}),vi(this,"doPasswordResetSubmit",e=>{this.props.actions.getUser(e.id),this.setState({showPasswordModal:!1,user:null})}),vi(this,"doEmailReset",e=>{this.setState({showEmailModal:!0,user:e})}),vi(this,"doEmailResetDismiss",()=>{this.setState({showEmailModal:!1,user:null})}),vi(this,"doEmailResetSubmit",e=>{this.props.actions.getUser(e.id),this.setState({showEmailModal:!1,user:null})}),this.state={page:0,filter:e.filter,teamId:e.teamId,showManageTeamsModal:!1,showManageRolesModal:!1,showManageTokensModal:!1,showPasswordModal:!1,showEmailModal:!1,user:null}}static getDerivedStateFromProps(e,t){return t.teamId!==e.teamId||t.filter!==e.filter?{page:0,teamId:e.teamId,filter:e.filter}:null}getInfoForUser(e){const t=[];if(e.auth_service){let a;a=e.auth_service===O.j.LDAP_SERVICE||e.auth_service===O.j.SAML_SERVICE?e.auth_service.toUpperCase():I.qb(e.auth_service),t.push(S.a.createElement(j.b,{key:"admin.user_item.authServiceNotEmail",id:"admin.user_item.authServiceNotEmail",defaultMessage:"**Sign-in Method:** {service}",values:{service:a}}))}else t.push(S.a.createElement(j.b,{key:"admin.user_item.authServiceEmail",id:"admin.user_item.authServiceEmail",defaultMessage:"**Sign-in Method:** Email"}));t.push(", ");const a=e.id;return t.push(S.a.createElement(j.b,{key:"admin.user_item.user_id",id:"admin.user_item.user_id",defaultMessage:"**User ID:** {userID}",values:{userID:a}})),this.props.mfaEnabled&&(t.push(", "),e.mfa_active?t.push(S.a.createElement(j.b,{key:"admin.user_item.mfaYes",id:"admin.user_item.mfaYes",defaultMessage:"**MFA**: Yes"})):t.push(S.a.createElement(j.b,{key:"admin.user_item.mfaNo",id:"admin.user_item.mfaNo",defaultMessage:"**MFA**: No"}))),t}renderCount(e,t,a,s,i){return t?i?S.a.createElement(T.a,{id:"system_users_list.countSearch",defaultMessage:"{count, number} {count, plural, one {user} other {users}} of {total, number} total",values:{count:e,total:t}}):0!==a||s!==t?S.a.createElement(T.a,{id:"system_users_list.countPage",defaultMessage:"{startCount, number} - {endCount, number} {count, plural, one {user} other {users}} of {total, number} total",values:{count:e,startCount:a+1,endCount:s,total:t}}):S.a.createElement(T.a,{id:"system_users_list.count",defaultMessage:"{count, number} {count, plural, one {user} other {users}}",values:{count:e}}):null}render(){const e={};if(this.props.users)for(const t of this.props.users)e[t.id]=this.getInfoForUser(t);return S.a.createElement("div",null,S.a.createElement(ci.a,Object.assign({},this.props,{renderCount:this.renderCount,extraInfo:e,actions:[yi],actionProps:{mfaEnabled:this.props.mfaEnabled,enableUserAccessTokens:this.props.enableUserAccessTokens,experimentalEnableAuthenticationTransfer:this.props.experimentalEnableAuthenticationTransfer,doPasswordReset:this.doPasswordReset,doEmailReset:this.doEmailReset,doManageTeams:this.doManageTeams,doManageRoles:this.doManageRoles,doManageTokens:this.doManageTokens},nextPage:this.nextPage,previousPage:this.previousPage,search:this.search,page:this.state.page,term:this.props.term,onTermChange:this.props.onTermChange,rowComponentType:pi})),S.a.createElement(Ks,{user:this.state.user,show:this.state.showManageTeamsModal,onModalDismissed:this.doManageTeamsDismiss}),S.a.createElement(Bs,{user:this.state.user,show:this.state.showManageRolesModal,onModalDismissed:this.doManageRolesDismiss}),S.a.createElement(ai,{user:this.state.user,show:this.state.showManageTokensModal,onModalDismissed:this.doManageTokensDismiss}),S.a.createElement(ni,{user:this.state.user,show:this.state.showPasswordModal,onModalSubmit:this.doPasswordResetSubmit,onModalDismissed:this.doPasswordResetDismiss}),S.a.createElement(oi,{user:this.state.user,show:this.state.showEmailModal,onModalSubmit:this.doEmailResetSubmit,onModalDismissed:this.doEmailResetDismiss}))}}vi(Si,"propTypes",{users:M.a.arrayOf(M.a.object),usersPerPage:M.a.number,total:M.a.number,nextPage:M.a.func,search:M.a.func.isRequired,focusOnMount:M.a.bool,renderFilterRow:M.a.func,teamId:M.a.string.isRequired,filter:M.a.string.isRequired,term:M.a.string.isRequired,onTermChange:M.a.func.isRequired,mfaEnabled:M.a.bool.isRequired,enableUserAccessTokens:M.a.bool.isRequired,experimentalEnableAuthenticationTransfer:M.a.bool.isRequired,actions:M.a.shape({getUser:M.a.func.isRequired}).isRequired});const Ti="",Oi="no_team",wi=26;function Ci(e,t,a,s,i){if(t)return[];const n=function(e){return As(e)}(i);if(s){let t=[];if(0===(t=a?Object(h.searchProfilesInTeam)(e,a,s,!1,n):Object(h.searchProfiles)(e,s,!1,n)).length&&s.length===wi){const a=Object(h.getUser)(e,s);a&&(t=[a])}return t}return a===Ti?Object(h.getProfiles)(e,n):a===Oi?Object(h.getProfilesWithoutTeam)(e,n):Object(h.getProfilesInTeam)(e,a,n)}var xi=Object(r.connect)((function(e,t){return{users:function(e,t,a,s,i){return Ci(e,t,a,s,i).filter(e=>!e.is_bot)}(e,t.loading,t.teamId,t.term,t.filter)}}),(function(e){return{actions:Object(l.bindActionCreators)({getUser:J.getUser},e)}}))(Si);function Mi(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,s)}return a}function ji(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}const Pi=26,Ai=50;class ki extends S.a.Component{constructor(e){super(e),ji(this,"loadDataForTeam",async(e,t)=>{const{getProfiles:a,loadProfilesWithoutTeam:s,loadProfilesAndTeamMembers:i,getTeamStats:n}=this.props.actions;if(this.props.searchTerm)return void this.doSearch(this.props.searchTerm,e,t);const r=As(t);e===O.E.ALL_USERS?await Promise.all([a(0,O.j.PROFILE_CHUNK_SIZE,r),Object(f.s)()]):e===O.E.NO_TEAM?await s(0,O.j.PROFILE_CHUNK_SIZE,r):await Promise.all([i(0,O.j.PROFILE_CHUNK_SIZE,e,r),n(e)]),this.setState({loading:!1})}),ji(this,"handleTeamChange",e=>{const t=e.target.value;this.loadDataForTeam(t,this.props.filter),this.props.actions.setSystemUsersSearch(this.props.searchTerm,t,this.props.filter)}),ji(this,"handleFilterChange",e=>{const t=e.target.value;this.loadDataForTeam(this.props.teamId,t),this.props.actions.setSystemUsersSearch(this.props.searchTerm,this.props.teamId,t)}),ji(this,"handleTermChange",e=>{this.props.actions.setSystemUsersSearch(e,this.props.teamId,this.props.filter)}),ji(this,"handleRevokeAllSessions",async()=>{const{data:e}=await this.props.actions.revokeSessionsForAllUsers();e?Object(Rs.e)():this.props.actions.logError({type:"critical",message:"Can't revoke all sessions"})}),ji(this,"handleRevokeAllSessionsCancel",()=>{this.setState({showRevokeAllSessionsModal:!1})}),ji(this,"handleShowRevokeAllSessionsModal",()=>{this.setState({showRevokeAllSessionsModal:!0})}),ji(this,"nextPage",async e=>{const{teamId:t,filter:a}=this.props,{getProfiles:s,loadProfilesWithoutTeam:i,loadProfilesAndTeamMembers:n}=this.props.actions,r=As(a);t===O.E.ALL_USERS?await s(e+1,Ai,r):t===O.E.NO_TEAM?await i(e+1,Ai,r):await n(e+1,Ai,t,r),this.setState({loading:!1})}),ji(this,"doSearch",Object(Ps.debounce)(async(e,t=this.props.teamId,a=this.props.filter)=>{if(!e)return;this.setState({loading:!0});const s=function(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?Mi(a,!0).forEach((function(t){ji(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):Mi(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}({},function(e){const t={};return e===O.L.SYSTEM_ADMIN?t[O.N.ROLE]=O.L.SYSTEM_ADMIN:e===O.L.SYSTEM_GUEST?t[O.N.ROLE]=O.L.SYSTEM_GUEST:e===O.L.INACTIVE&&(t[O.N.ALLOW_INACTIVE]=!0),t}(a),{},t&&{team_id:t},{},t===O.E.NO_TEAM&&{[O.N.WITHOUT_TEAM]:!0},{allow_inactive:!0}),{data:i}=await this.props.actions.searchProfiles(e,s);0===i.length&&e.length===Pi&&await this.getUserByTokenOrId(e),this.setState({loading:!1})},O.j.SEARCH_TIMEOUT_MILLISECONDS)),ji(this,"getUserById",async e=>{this.props.users[e]?this.setState({loading:!1}):(await this.props.actions.getUser(e),this.setState({loading:!1}))}),ji(this,"getUserByTokenOrId",async e=>{if(this.props.enableUserAccessTokens){const{data:t}=await this.props.actions.getUserAccessToken(e);if(t)return this.setState({term:t.user_id}),void this.getUserById(t.user_id)}this.getUserById(e)}),ji(this,"renderRevokeAllUsersModal",()=>{const e=S.a.createElement(T.a,{id:"admin.system_users.revoke_all_sessions_modal_title",defaultMessage:"Revoke all sessions in the system"}),t=S.a.createElement("div",null,S.a.createElement(j.b,{id:"admin.system_users.revoke_all_sessions_modal_message",defaultMessage:"This action revokes all sessions in the system. All users will be logged out from all devices. Are you sure you want to revoke all sessions?"})),a=S.a.createElement(T.a,{id:"admin.system_users.revoke_all_sessions_button",defaultMessage:"Revoke All Sessions"});return S.a.createElement(be.a,{show:this.state.showRevokeAllSessionsModal,title:e,message:t,confirmButtonClass:"btn btn-danger",confirmButtonText:a,onConfirm:this.handleRevokeAllSessions,onCancel:this.handleRevokeAllSessionsCancel})}),ji(this,"renderFilterRow",e=>{const t=this.props.teams.map(e=>S.a.createElement("option",{key:e.id,value:e.id},e.display_name));return S.a.createElement("div",{className:"system-users__filter-row"},S.a.createElement("div",{className:"system-users__filter"},S.a.createElement(Ht.a,{id:"searchUsers",className:"form-control filter-textbox",placeholder:{id:Object(C.b)("filtered_user_list.search"),defaultMessage:"Search users"},onInput:e})),S.a.createElement("label",null,S.a.createElement("span",{className:"system-users__team-filter-label"},S.a.createElement(T.a,{id:"filtered_user_list.team",defaultMessage:"Team:"})),S.a.createElement("select",{className:"form-control system-users__team-filter",onChange:this.handleTeamChange,value:this.props.teamId},S.a.createElement("option",{value:O.E.ALL_USERS},I.gb("admin.system_users.allUsers","All Users")),S.a.createElement("option",{value:O.E.NO_TEAM},I.gb("admin.system_users.noTeams","No Teams")),t)),S.a.createElement("label",null,S.a.createElement("span",{className:"system-users__filter-label"},S.a.createElement(T.a,{id:"filtered_user_list.userStatus",defaultMessage:"User Status:"})),S.a.createElement("select",{id:"selectUserStatus",className:"form-control system-users__filter",value:this.props.filter,onChange:this.handleFilterChange},S.a.createElement("option",{value:""},I.gb("admin.system_users.allUsers","All Users")),S.a.createElement("option",{value:O.L.SYSTEM_ADMIN},I.gb("admin.system_users.system_admin","System Admin")),S.a.createElement("option",{value:O.L.SYSTEM_GUEST},I.gb("admin.system_users.guest","Guest")),S.a.createElement("option",{value:O.L.INACTIVE},I.gb("admin.system_users.inactive","Inactive")))))}),this.state={loading:!0,searching:!1,showRevokeAllSessionsModal:!1}}componentDidMount(){this.loadDataForTeam(this.props.teamId,this.props.filter),this.props.actions.getTeams(0,1e3)}componentWillUnmount(){this.props.actions.setSystemUsersSearch("","","")}render(){const e=this.renderRevokeAllUsersModal();return S.a.createElement("div",{className:"wrapper--fixed"},S.a.createElement(k,{id:"admin.system_users.title",defaultMessage:"{siteName} Users",values:{siteName:this.props.siteName}}),S.a.createElement("div",{className:"admin-console__wrapper"},S.a.createElement("div",{className:"admin-console__content"},S.a.createElement("div",{className:"more-modal__list member-list-holder"},S.a.createElement(xi,{loading:this.state.loading,renderFilterRow:this.renderFilterRow,search:this.doSearch,nextPage:this.nextPage,usersPerPage:Ai,total:this.props.totalUsers,teams:this.props.teams,teamId:this.props.teamId,filter:this.props.filter,term:this.props.searchTerm,onTermChange:this.handleTermChange,mfaEnabled:this.props.mfaEnabled,enableUserAccessTokens:this.props.enableUserAccessTokens,experimentalEnableAuthenticationTransfer:this.props.experimentalEnableAuthenticationTransfer})),S.a.createElement(ks.a,{permissions:[b.Permissions.REVOKE_USER_ACCESS_TOKEN]},e,S.a.createElement("div",{className:"padding-top padding-bottom x2"},S.a.createElement("button",{id:"revoke-all-users",className:"btn btn-default",onClick:()=>this.handleShowRevokeAllSessionsModal()},S.a.createElement(T.a,{id:"admin.system_users.revokeAllSessions",defaultMessage:"Revoke All Sessions"})))))))}}ji(ki,"propTypes",{teams:M.a.arrayOf(M.a.object).isRequired,siteName:M.a.string,mfaEnabled:M.a.bool.isRequired,enableUserAccessTokens:M.a.bool.isRequired,experimentalEnableAuthenticationTransfer:M.a.bool.isRequired,totalUsers:M.a.number.isRequired,searchTerm:M.a.string.isRequired,teamId:M.a.string.isRequired,filter:M.a.string.isRequired,users:M.a.object.isRequired,actions:M.a.shape({getTeams:M.a.func.isRequired,getTeamStats:M.a.func.isRequired,getUser:M.a.func.isRequired,getUserAccessToken:M.a.func.isRequired,loadProfilesAndTeamMembers:M.a.func.isRequired,loadProfilesWithoutTeam:M.a.func.isRequired,getProfiles:M.a.func.isRequired,setSystemUsersSearch:M.a.func.isRequired,searchProfiles:M.a.func.isRequired,revokeSessionsForAllUsers:M.a.func.isRequired,logError:M.a.func.isRequired}).isRequired});var Ri=Object(r.connect)((function(e){const t=Object(u.getConfig)(e),a=t.SiteName,s="true"===t.EnableMultifactorAuthentication,i="true"===t.EnableUserAccessTokens,n="true"===t.ExperimentalEnableAuthenticationTransfer,r=e.views.search.systemUsersSearch;let l=0,o="",c="",d="";if(r)if(o=r.term||"",c=r.team||"",d=r.filter||"",c&&c!==O.E.ALL_USERS)if(c===O.E.NO_TEAM)l=0;else{l=(e.entities.teams.stats[c]||{total_member_count:0}).total_member_count}else{const t=e.entities.admin.analytics||{[b.Stats.TOTAL_USERS]:0,[b.Stats.TOTAL_INACTIVE_USERS]:0};l=t[b.Stats.TOTAL_USERS]+t[b.Stats.TOTAL_INACTIVE_USERS]}return{teams:Object(g.getTeamsList)(e),siteName:a,mfaEnabled:s,totalUsers:l,searchTerm:o,teamId:c,filter:d,enableUserAccessTokens:i,users:Object(h.getUsers)(e),experimentalEnableAuthenticationTransfer:n}}),(function(e){return{actions:Object(l.bindActionCreators)({getTeams:X.getTeams,getTeamStats:X.getTeamStats,getUser:J.getUser,getUserAccessToken:J.getUserAccessToken,loadProfilesAndTeamMembers:rt.g,setSystemUsersSearch:us.b,loadProfilesWithoutTeam:rt.k,getProfiles:J.getProfiles,searchProfiles:J.searchProfiles,revokeSessionsForAllUsers:J.revokeSessionsForAllUsers,logError:js.logError},e)}}))(ki);a(1482),a(1913);class Ni extends S.a.Component{render(){return S.a.createElement("button",{onClick:this.props.onClick,className:"AdminButtonOutline btn btn-primary"},this.props.children)}}!function(e,t,a){t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a}(Ni,"propTypes",{onClick:M.a.func.isRequired,children:M.a.string.isRequired});a(1914);const Di=e=>(e.user.first_name||e.user.last_name)&&e.user.nickname?S.a.createElement("span",null," • "):null,Li=e=>S.a.createElement("div",{className:"AdminUserCard"},S.a.createElement("div",{className:"AdminUserCard__header"},S.a.createElement(di.a,{src:Ft.Client4.getProfilePictureUrl(e.user.id,e.user.last_picture_update),size:"xxl",wrapperClass:"admin-user-card",userId:e.user.id}),S.a.createElement("div",{className:"AdminUserCard__user-info"},S.a.createElement("span",null,e.user.first_name," ",e.user.last_name),S.a.createElement(Di,{user:e.user}),S.a.createElement("span",{className:"AdminUserCard__user-nickname"},e.user.nickname)),S.a.createElement("div",{className:"AdminUserCard__user-id"},I.gb("admin.userManagement.userDetail.userId","User ID:")," ",e.user.id)),S.a.createElement("div",{className:"AdminUserCard__body"},e.body),S.a.createElement("div",{className:"AdminUserCard__footer"},e.footer));Di.propTypes={user:M.a.shape({first_name:M.a.string,last_name:M.a.string,nickname:M.a.string,last_picture_update:M.a.number})},Li.propTypes={user:M.a.shape({first_name:M.a.string,last_name:M.a.string,nickname:M.a.string,last_picture_update:M.a.number,id:M.a.string}),body:M.a.element,footer:M.a.element};var Ii=Li,Ui=a(1168),qi=a(1195);a(1915);function Bi(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,s)}return a}function Fi(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}const Gi=10;class Hi extends S.a.PureComponent{constructor(e){super(e),Fi(this,"previousPage",async e=>{e.preventDefault();const t=this.state.page<1?0:this.state.page-1;this.setState({page:t,loading:!0}),this.performSearch(t)}),Fi(this,"nextPage",async e=>{e.preventDefault();const t=this.state.page+1;this.setState({page:t,loading:!0}),this.performSearch(t)}),Fi(this,"performSearch",()=>{const e=function(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?Bi(a,!0).forEach((function(t){Fi(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):Bi(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}({},this.state),t=this.props.userId;delete e.page,e.loading=!0,this.setState(e),this.props.actions.getTeamsData(t).then(()=>{this.props.onPageChangedCallback&&this.props.onPageChangedCallback(this.getPaging()),this.setState({loading:!1})})}),Fi(this,"renderHeaderLabels",()=>S.a.createElement(S.a.Fragment,null,this.props.headerLabels.map((e,t)=>S.a.createElement("div",{key:t,className:"AbstractList__header-label",style:e.style},e.default)))),Fi(this,"renderRows",()=>{if(this.state.loading)return S.a.createElement("div",{className:"AbstractList__loading"},S.a.createElement("i",{className:"fa fa-spinner fa-pulse fa-2x"}));if(0===this.props.data.length)return S.a.createElement("div",{className:"AbstractList__empty"},S.a.createElement(T.a,{id:this.props.emptyListTextId,defaultMessage:this.props.emptyListTextDefaultMessage}));const e=this.state.page<1?0:this.state.page*Gi,t=this.state.page<1?Gi:(this.state.page+1)*Gi;return this.props.data.slice(e,t).map(this.props.renderRow)}),Fi(this,"render",()=>{const{startCount:e,endCount:t,total:a}=this.getPaging(),s=t===a,i=0===this.state.page;return S.a.createElement("div",{className:"AbstractList"},S.a.createElement("div",{className:"AbstractList__header"},this.renderHeaderLabels()),S.a.createElement("div",{className:"AbstractList__body"},this.renderRows()),a>0&&S.a.createElement("div",{className:"AbstractList__footer"},S.a.createElement("div",{className:"counter"},S.a.createElement(T.a,{id:"admin.team_channel_settings.list.paginatorCount",defaultMessage:"{startCount, number} - {endCount, number} of {total, number}",values:{startCount:e,endCount:t,total:a}})),S.a.createElement("button",{className:"btn btn-link prev "+(i?"disabled":""),onClick:i?null:this.previousPage,disabled:i},S.a.createElement(qi.a,null)),S.a.createElement("button",{className:"btn btn-link next "+(s?"disabled":""),onClick:s?null:this.nextPage,disabled:s},S.a.createElement(Ui.a,null))))}),this.state={loading:!0,page:0}}componentDidMount(){this.performSearch(this.state.page)}getPaging(){const e=this.state.page*Gi+1;let t=this.state.page*Gi+Gi;const a=this.props.total;return t>a&&(t=a),{startCount:e,endCount:t,total:a}}}Fi(Hi,"propTypes",{userId:M.a.string.isRequired,headerLabels:M.a.array.isRequired,data:M.a.arrayOf(M.a.object),onPageChangedCallback:M.a.func,total:M.a.number.isRequired,renderRow:M.a.func.isRequired,emptyListTextId:M.a.string.isRequired,emptyListTextDefaultMessage:M.a.string.isRequired,actions:M.a.shape({getTeamsData:M.a.func.isRequired,removeGroup:M.a.func}).isRequired}),Fi(Hi,"defaultProps",{data:[]});a(1916);class Yi extends S.a.PureComponent{render(){return S.a.createElement("span",this.props,S.a.createElement(T.a,{id:"generic_icons.elipsisHorizontalIcon",defaultMessage:"Ellipsis Horizontal Icon"},e=>S.a.createElement("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",role:"img","aria-label":e},S.a.createElement("path",{d:"M16,12A2,2 0 0,1 18,10A2,2 0 0,1 20,12A2,2 0 0,1 18,14A2,2 0 0,1 16,12M10,12A2,2 0 0,1 12,10A2,2 0 0,1 14,12A2,2 0 0,1 12,14A2,2 0 0,1 10,12M4,12A2,2 0 0,1 6,10A2,2 0 0,1 8,12A2,2 0 0,1 6,14A2,2 0 0,1 4,12Z"}))))}}class Wi extends S.a.Component{constructor(e){super(e),this.state={serverError:null}}render(){const{team:e}=this.props,t=e.scheme_admin,a=e.scheme_user&&!e.scheme_admin,s=e.scheme_guest,i=!t&&!s,n=!a&&!s;return S.a.createElement(Gs.a,null,S.a.createElement("button",{id:"teamListDropdown_".concat(e.id),className:"dropdown-toggle theme color--link style--none",type:"button","aria-expanded":"true"},S.a.createElement("span",{className:"SystemUserDetail__actions-menu-icon"},S.a.createElement(Yi,null))),S.a.createElement("div",null,S.a.createElement(Hs.a,{openLeft:!0,openUp:!1,ariaLabel:Object(I.gb)("team_members_dropdown.menuAriaLabel","Team member role change")},S.a.createElement(Hs.a.ItemAction,{id:"makeTeamAdmin",show:i,onClick:()=>this.props.doMakeUserTeamAdmin(e.id),text:Object(I.gb)("team_members_dropdown.makeAdmin","Make Team Admin")}),S.a.createElement(Hs.a.ItemAction,{show:n,onClick:()=>this.props.doMakeUserTeamMember(e.id),text:Object(I.gb)("team_members_dropdown.makeMember","Make Team Member")}),S.a.createElement(Hs.a.ItemAction,{id:"removeFromTeam",show:!0,onClick:()=>this.props.doRemoveUserFromTeam(e.id),text:Object(I.gb)("team_members_dropdown.leave_team","Remove from Team"),buttonClass:"SystemUserDetail__action-remove-team"}))))}}function zi(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}!function(e,t,a){t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a}(Wi,"propTypes",{team:M.a.object.isRequired,doRemoveUserFromTeam:M.a.func.isRequired,doMakeUserTeamAdmin:M.a.func.isRequired,doMakeUserTeamMember:M.a.func.isRequired});class Vi extends S.a.Component{constructor(...e){super(...e),zi(this,"renderTeamType",e=>e.group_constrained?S.a.createElement(T.a,{id:"admin.systemUserDetail.teamList.teamType.groupSync",defaultMessage:"Group sync"}):e.allow_open_invite?S.a.createElement(T.a,{id:"admin.systemUserDetail.teamList.teamType.anyoneCanJoin",defaultMessage:"Anyone can join"}):S.a.createElement(T.a,{id:"admin.systemUserDetail.teamList.teamType.inviteOnly",defaultMessage:"Invite only"})),zi(this,"renderTeamRole",e=>e.scheme_guest?S.a.createElement(T.a,{id:"admin.systemUserDetail.teamList.teamRole.guest",defaultMessage:"Guest"}):e.scheme_admin&&!e.scheme_guest?S.a.createElement(T.a,{id:"admin.systemUserDetail.teamList.teamRole.admin",defaultMessage:"Team Admin"}):!e.scheme_user||e.scheme_guest||e.scheme_admin?null:S.a.createElement(T.a,{id:"admin.systemUserDetail.teamList.teamRole.member",defaultMessage:"Team Member"})),zi(this,"render",()=>{const{team:e}=this.props,t=I.L(e);return S.a.createElement("div",{className:"TeamRow"},S.a.createElement("div",{className:"TeamRow__row"},S.a.createElement("div",{className:"TeamRow__team-name"},S.a.createElement("div",{className:"col-sm-auto"},S.a.createElement(hs.a,{size:"sm",url:t,name:e.display_name})),S.a.createElement("div",{className:"col-md-auto"},S.a.createElement("b",null,e.display_name),e.description&&S.a.createElement("div",{className:"overflow--ellipsis text-nowrap TeamRow__team-description"},e.description))),S.a.createElement("span",{className:"TeamRow__description"},this.renderTeamType(e)),S.a.createElement("span",{className:"TeamRow__description"},this.renderTeamRole(e)),S.a.createElement("span",{className:"TeamRow__actions"},S.a.createElement(Wi,{team:e,doRemoveUserFromTeam:this.props.doRemoveUserFromTeam,doMakeUserTeamAdmin:this.props.doMakeUserTeamAdmin,doMakeUserTeamMember:this.props.doMakeUserTeamMember}))))})}}function Xi(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,s)}return a}function Ji(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}zi(Vi,"propTypes",{team:M.a.object.isRequired,doRemoveUserFromTeam:M.a.func.isRequired,doMakeUserTeamAdmin:M.a.func.isRequired,doMakeUserTeamMember:M.a.func.isRequired});const Ki=[{id:Object(C.b)("admin.systemUserDetail.teamList.header.name"),default:"Name",style:{flexGrow:1,minWidth:"284px",marginLeft:"16px"}},{id:Object(C.b)("admin.systemUserDetail.teamList.header.type"),default:"Type",style:{width:"150px"}},{id:Object(C.b)("admin.systemUserDetail.teamList.header.role"),default:"Role",style:{width:"150px"}},{style:{width:"150px"}}];class Qi extends S.a.Component{constructor(e){super(e),Ji(this,"getTeamsAndMemberships",async(e=this.props.userId)=>{const t=await this.props.actions.getTeamsData(e),a=await this.props.actions.getTeamMembersForUser(e);return Promise.all([t,a]).then(this.mergeTeamsWithMemberships).then(e=>{this.setState({teamsWithMemberships:e}),this.props.userDetailCallback(e)})}),Ji(this,"mergeTeamsWithMemberships",e=>{const t=e[0].data,a=e[1].data;let s=t.map(e=>{const t=a.filter(t=>t.team_id===e.id);return function(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?Xi(a,!0).forEach((function(t){Ji(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):Xi(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}({},e,{},t[0])});return s=Object(Fs.a)(s,this.props.locale)}),Ji(this,"doRemoveUserFromTeam",async e=>{const{error:t}=await this.props.actions.removeUserFromTeam(e,this.props.userId);t?this.setState({serverError:t.message}):this.getTeamsAndMemberships()}),Ji(this,"doMakeUserTeamAdmin",async e=>{const{error:t}=await this.props.actions.updateTeamMemberSchemeRoles(e,this.props.userId,!0,!0);t?this.setState({serverError:t.message}):this.getTeamsAndMemberships()}),Ji(this,"doMakeUserTeamMember",async e=>{const{error:t}=await this.props.actions.updateTeamMemberSchemeRoles(e,this.props.userId,!0,!1);t?this.setState({serverError:t.message}):this.getTeamsAndMemberships()}),Ji(this,"renderRow",e=>S.a.createElement(Vi,{key:e.id,team:e,doRemoveUserFromTeam:this.doRemoveUserFromTeam,doMakeUserTeamAdmin:this.doMakeUserTeamAdmin,doMakeUserTeamMember:this.doMakeUserTeamMember})),this.state={teamsWithMemberships:[],serverError:null}}componentDidMount(){this.getTeamsAndMemberships()}componentDidUpdate(e){e.refreshTeams!==this.props.refreshTeams&&this.getTeamsAndMemberships()}render(){let e=null;return this.state.serverError&&(e=S.a.createElement("div",{className:"SystemUserDetail__error has-error"},S.a.createElement("label",{className:"has-error control-label"},this.state.serverError))),S.a.createElement(S.a.Fragment,null,S.a.createElement("div",null,e),S.a.createElement(Hi,{headerLabels:Ki,renderRow:this.renderRow,total:this.state.teamsWithMemberships.length,data:this.state.teamsWithMemberships,actions:this.props.actions,emptyListTextId:this.props.emptyListTextId,emptyListTextDefaultMessage:this.props.emptyListTextDefaultMessage,userId:this.props.userId}))}}Ji(Qi,"propTypes",{userId:M.a.string.isRequired,locale:M.a.string.isRequired,emptyListTextId:M.a.string.isRequired,emptyListTextDefaultMessage:M.a.string.isRequired,actions:M.a.shape({getTeamsData:M.a.func.isRequired,getTeamMembersForUser:M.a.func.isRequired,removeUserFromTeam:M.a.func.isRequired,updateTeamMemberSchemeRoles:M.a.func.isRequired}).isRequired,userDetailCallback:M.a.func.isRequired,refreshTeams:M.a.bool.isRequired}),Ji(Qi,"defaultProps",{emptyListTextId:Object(C.b)("admin.team_settings.team_list.no_teams_found"),emptyListTextDefaultMessage:"No teams found",refreshTeams:!1});var Zi=Object(r.connect)((function(e){return{locale:Object(Q.a)(e)}}),(function(e){return{actions:Object(l.bindActionCreators)({getTeamsData:X.getTeamsForUser,getTeamMembersForUser:X.getTeamMembersForUser,removeUserFromTeam:X.removeUserFromTeam,updateTeamMemberSchemeRoles:X.updateTeamMemberSchemeRoles},e)}}))(Qi);class $i extends S.a.PureComponent{render(){return S.a.createElement("span",this.props,S.a.createElement("svg",{width:"100%",height:"100%",viewBox:"0 0 24 24"},S.a.createElement("path",{fill:"inherit",d:"M22 6C22 4.9 21.1 4 20 4H4C2.9 4 2 4.9 2 6V18C2 19.1 2.9 20 4 20H20C21.1 20 22 19.1 22 18V6M20 6L12 11L4 6H20M20 18H4V8L12 13L20 8V18Z"})))}}class en extends S.a.PureComponent{render(){return S.a.createElement("span",this.props,S.a.createElement("svg",{width:"100%",height:"100%",viewBox:"0 0 24 24"},S.a.createElement("path",{fill:"inherit",d:"M12,15C12.81,15 13.5,14.7 14.11,14.11C14.7,13.5 15,12.81 15,12C15,11.19 14.7,10.5 14.11,9.89C13.5,9.3 12.81,9 12,9C11.19,9 10.5,9.3 9.89,9.89C9.3,10.5 9,11.19 9,12C9,12.81 9.3,13.5 9.89,14.11C10.5,14.7 11.19,15 12,15M12,2C14.75,2 17.1,3 19.05,4.95C21,6.9 22,9.25 22,12V13.45C22,14.45 21.65,15.3 21,16C20.3,16.67 19.5,17 18.5,17C17.3,17 16.31,16.5 15.56,15.5C14.56,16.5 13.38,17 12,17C10.63,17 9.45,16.5 8.46,15.54C7.5,14.55 7,13.38 7,12C7,10.63 7.5,9.45 8.46,8.46C9.45,7.5 10.63,7 12,7C13.38,7 14.55,7.5 15.54,8.46C16.5,9.45 17,10.63 17,12V13.45C17,13.86 17.16,14.22 17.46,14.53C17.76,14.84 18.11,15 18.5,15C18.92,15 19.27,14.84 19.57,14.53C19.87,14.22 20,13.86 20,13.45V12C20,9.81 19.23,7.93 17.65,6.35C16.07,4.77 14.19,4 12,4C9.81,4 7.93,4.77 6.35,6.35C4.77,7.93 4,9.81 4,12C4,14.19 4.77,16.07 6.35,17.65C7.93,19.23 9.81,20 12,20H17V22H12C9.25,22 6.9,21 4.95,19.05C3,17.1 2,14.75 2,12C2,9.25 3,6.9 4.95,4.95C6.9,3 9.25,2 12,2Z"})))}}class tn extends S.a.PureComponent{render(){return S.a.createElement("span",this.props,S.a.createElement("svg",{width:"100%",height:"100%",viewBox:"0 0 24 24"},S.a.createElement("path",{fill:"inherit",d:"M21,11C21,16.55 17.16,21.74 12,23C6.84,21.74 3,16.55 3,11V5L12,1L21,5V11M12,21C15.75,20 19,15.54 19,11.22V6.3L12,3.18L5,6.3V11.22C5,15.54 8.25,20 12,21Z"})))}}a(1917);function an(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class sn extends S.a.PureComponent{constructor(e){super(e),an(this,"setTeamsData",e=>{const t=e.map(e=>e.team_id);this.setState({teams:e}),this.setState({teamIds:t}),this.setState({refreshTeams:!1})}),an(this,"openAddTeam",()=>{this.setState({addTeamOpen:!0})}),an(this,"addTeams",e=>{const t=[];for(const a of e)t.push(this.props.actions.addUserToTeam(a.id,this.props.user.id));Promise.all(t).finally(this.setState({refreshTeams:!0}))}),an(this,"closeAddTeam",()=>{this.setState({addTeamOpen:!1})}),an(this,"doPasswordReset",e=>{this.setState({showPasswordModal:!0,user:e})}),an(this,"doPasswordResetDismiss",()=>{this.setState({showPasswordModal:!1})}),an(this,"doPasswordResetSubmit",()=>{this.setState({showPasswordModal:!1})}),an(this,"handleMakeActive",e=>{e.preventDefault(),this.props.actions.updateUserActive(this.props.user.id,!0).then(this.onUpdateActiveResult)}),an(this,"handleShowDeactivateMemberModal",e=>{e.preventDefault(),this.setState({showDeactivateMemberModal:!0})}),an(this,"handleDeactivateMember",()=>{this.props.actions.updateUserActive(this.props.user.id,!1).then(this.onUpdateActiveResult),this.setState({showDeactivateMemberModal:!1})}),an(this,"onUpdateActiveResult",({error:e})=>{e&&this.setState({error:e})}),an(this,"handleDeactivateCancel",()=>{this.setState({showDeactivateMemberModal:!1})}),an(this,"handleResetMfa",e=>{e.preventDefault(),Object(f.b)(this.props.user.id,null,null)}),an(this,"handleEmailChange",e=>{const t=e.target.value!==this.props.user.email;this.setState({user:{email:e.target.value},saveNeeded:t}),this.props.actions.setNavigationBlocked(t)}),an(this,"handleSubmit",e=>{if(e.preventDefault(),this.state.user.email!==this.props.user.email){if(!Object(ri.isEmail)(this.state.user.email))return void this.setState({serverError:"Invalid Email address"});const e=Object.assign({},this.props.user),t=this.state.user.email.trim().toLowerCase();e.email=t,this.setState({serverError:null}),Object(f.a)(e,()=>{this.props.history.push("/admin_console/user_management/users")},e=>{const t=e.message?e.message:e;this.setState({serverError:t})}),this.setState({saving:!1,saveNeeded:!1,serverError:null}),this.props.actions.setNavigationBlocked(!1)}}),an(this,"renderDeactivateMemberModal",e=>{const t=S.a.createElement(T.a,{id:"deactivate_member_modal.title",defaultMessage:"Deactivate {username}",values:{username:e.username}});let a;""!==e.auth_service&&e.auth_service!==O.j.EMAIL_SERVICE&&(a=S.a.createElement("strong",null,S.a.createElement("br",null),S.a.createElement("br",null),S.a.createElement(T.a,{id:"deactivate_member_modal.sso_warning",defaultMessage:"You must also deactivate this user in the SSO provider or they will be reactivated on next login or sync."})));const s=S.a.createElement("div",null,S.a.createElement(T.a,{id:"deactivate_member_modal.desc",defaultMessage:"This action deactivates {username}. They will be logged out and not have access to any teams or channels on this system. Are you sure you want to deactivate {username}?",values:{username:e.username}}),a),i=S.a.createElement(T.a,{id:"deactivate_member_modal.deactivate",defaultMessage:"Deactivate"});return S.a.createElement(be.a,{show:this.state.showDeactivateMemberModal,title:t,message:s,confirmButtonClass:"btn btn-danger",confirmButtonText:i,onConfirm:this.handleDeactivateMember,onCancel:this.handleDeactivateCancel})}),an(this,"renderActivateDeactivate",()=>this.props.user.delete_at>0?S.a.createElement(Ni,{onClick:this.handleMakeActive,className:"admin-btn-default"},I.gb("admin.user_item.makeActive","Activate")):S.a.createElement(Ni,{onClick:this.handleShowDeactivateMemberModal,className:"admin-btn-default"},I.gb("admin.user_item.makeInactive","Deactivate"))),an(this,"renderRemoveMFA",()=>this.props.user.mfa_active?S.a.createElement(Ni,{onClick:this.handleResetMfa,className:"admin-btn-default"},"Remove MFA"):null),this.state={teams:null,teamIds:null,loading:!1,searching:!1,showPasswordModal:!1,showDeactivateMemberModal:!1,saveNeeded:!1,saving:!1,serverError:null,errorTooltip:!1,customComponentWrapperClass:"",user:{email:this.props.user.email},addTeamOpen:!1,refreshTeams:!0}}render(){const{user:e}=this.props;let t,a=S.a.createElement(T.a,{id:"admin.user_item.member",defaultMessage:"Member"});return e.id?(e.id&&(t=this.renderDeactivateMemberModal(e),e.delete_at>0&&(a=S.a.createElement(T.a,{id:"admin.user_item.inactive",defaultMessage:"Inactive"})),e.roles.length>0&&I.ab(e.roles)&&(a=S.a.createElement(T.a,{id:"team_members_dropdown.systemAdmin",defaultMessage:"System Admin"})),e.roles.length>0&&I.V(e)&&(a=S.a.createElement(T.a,{id:"team_members_dropdown.guest",defaultMessage:"Guest"}))),S.a.createElement("div",{className:"SystemUserDetail wrapper--fixed"},S.a.createElement("div",{className:"admin-console__header with-back"},S.a.createElement("div",null,S.a.createElement(Pa,{to:"/admin_console/user_management/users",className:"fa fa-angle-left back"}),S.a.createElement(T.a,{id:"admin.systemUserDetail.title",defaultMessage:"User Configuration"}))),S.a.createElement("div",{className:"admin-console__wrapper"},S.a.createElement("div",{className:"admin-console__content"},S.a.createElement(Ii,{user:e,body:S.a.createElement(S.a.Fragment,null,S.a.createElement("span",{className:"SystemUserDetail__position"},e.position),S.a.createElement("span",{className:"SystemUserDetail__field-label"},I.gb("admin.userManagement.userDetail.email","Email")),S.a.createElement("div",null,S.a.createElement($i,{className:"SystemUserDetail__field-icon"}),S.a.createElement("input",{className:"SystemUserDetail__input form-control",type:"text",value:this.state.user.email,onChange:this.handleEmailChange})),S.a.createElement("span",{className:"SystemUserDetail__field-label"},I.gb("admin.userManagement.userDetail.username","Username")),S.a.createElement("div",null,S.a.createElement(en,{className:"SystemUserDetail__field-icon"}),S.a.createElement("span",{className:"SystemUserDetail__field-text"},e.username)),S.a.createElement("span",{className:"SystemUserDetail__field-label"},I.gb("admin.userManagement.userDetail.authenticationMethod","Authentication Method")),S.a.createElement("div",{className:"SystemUserDetail__field-text"},S.a.createElement(tn,{className:"SystemUserDetail__field-icon"}),S.a.createElement("span",{className:"SystemUserDetail__field-text"},e.mfa_active?"MFA":"Email")),S.a.createElement("span",{className:"SystemUserDetail__field-label"},I.gb("admin.userManagement.userDetail.role","Role")),S.a.createElement("p",null,a)),footer:S.a.createElement(S.a.Fragment,null,S.a.createElement(Ni,{onClick:this.doPasswordReset,className:"admin-btn-default"},"Reset Password"),this.renderActivateDeactivate(),this.renderRemoveMFA())}),S.a.createElement(da,{subtitleId:Object(C.b)("admin.userManagement.userDetail.teamsSubtitle"),subtitleDefault:"Teams to which this user belongs",titleId:Object(C.b)("admin.userManagement.userDetail.teamsTitle"),titleDefault:"Team Membership",button:S.a.createElement("div",{className:"add-team-button"},S.a.createElement("button",{className:"btn btn-primary",onClick:this.openAddTeam},S.a.createElement(T.a,{id:"admin.userManagement.userDetail.addTeam",defaultMessage:"Add Team"})))},S.a.createElement(Zi,{userId:this.props.user.id,userDetailCallback:this.setTeamsData,refreshTeams:this.state.refreshTeams})))),S.a.createElement("div",{className:"admin-console-save"},S.a.createElement(_e.a,{saving:this.state.saving,disabled:!this.state.saveNeeded||this.canSave&&!this.canSave(),onClick:this.handleSubmit,savingMessage:I.gb("admin.saving","Saving Config...")}),S.a.createElement("div",{className:"error-message",ref:"errorMessage",onMouseOver:this.openTooltip,onMouseOut:this.closeTooltip},S.a.createElement(Ee.a,{error:this.state.serverError})),S.a.createElement(fe.a,{show:this.state.errorTooltip,delayShow:O.j.OVERLAY_TIME_DELAY,placement:"top",target:this.refs.errorMessage},S.a.createElement(ae.a,{id:"error-tooltip"},this.state.serverError))),S.a.createElement(ni,{user:e,show:this.state.showPasswordModal,onModalSubmit:this.doPasswordResetSubmit,onModalDismissed:this.doPasswordResetDismiss}),t,this.state.addTeamOpen&&S.a.createElement(_s,{onModalDismissed:this.closeAddTeam,onTeamsSelected:this.addTeams,alreadySelected:this.state.teamIds}))):S.a.createElement(m.a,{to:{pathname:"/admin_console/user_management/users"}})}}an(sn,"propTypes",{user:M.a.object.isRequired,actions:M.a.shape({updateUserActive:M.a.func.isRequired,setNavigationBlocked:M.a.func.isRequired,addUserToTeam:M.a.func.isRequired}).isRequired}),an(sn,"defaultProps",{user:{email:null}});var nn=Object(r.connect)((function(e,t){const a=t.match.params.user_id;return{user:Object(h.getUser)(e,a),navigationBlocked:Object(_.a)(e),showNavigationPrompt:Object(_.c)(e)}}),(function(e){return{actions:Object(l.bindActionCreators)({getUser:h.getUser,getProfiles:h.getProfiles,updateUserActive:J.updateUserActive,setNavigationBlocked:f.F,deferNavigation:f.g,cancelNavigation:f.e,confirmNavigation:f.f,addUserToTeam:X.addUserToTeam},e)}}))(sn);function rn(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}const ln=500;class on extends S.a.PureComponent{constructor(e){super(e),rn(this,"nextPage",e=>{e.preventDefault(),this.setState({nextDisabled:!0}),this.nextTimeoutId=setTimeout(()=>this.setState({nextDisabled:!1}),ln),this.props.nextPage()}),rn(this,"previousPage",e=>{e.preventDefault(),this.props.previousPage()}),this.logPanel=S.a.createRef(),this.state={nextDisabled:!1}}componentDidMount(){const e=this.logPanel.current;e.scrollTop=e.scrollHeight,e.focus()}componentDidUpdate(){const e=this.logPanel.current;e.scrollTop=e.scrollHeight}render(){let e,t,a=null;this.props.logs.length>=this.props.perPage&&(e=S.a.createElement("button",{className:"btn btn-default filter-control filter-control__next pull-right",onClick:this.nextPage,disabled:this.state.nextDisabled},S.a.createElement(T.a,{id:"admin.logs.next",defaultMessage:"Next"}),S.a.createElement(Ui.a,{additionalClassName:"margin-left"}))),this.props.page>0&&(t=S.a.createElement("button",{className:"btn btn-default filter-control filter-control__prev",onClick:this.previousPage},S.a.createElement(T.a,{id:"generic_icons.previous",defaultMessage:"Previous Icon"},e=>S.a.createElement("i",{className:"fa fa-angle-left",title:e})),S.a.createElement(T.a,{id:"admin.logs.prev",defaultMessage:"Previous"}))),a=[];for(let e=0;e<this.props.logs.length;e++){const t={whiteSpace:"nowrap",fontFamily:"monospace"};this.props.logs[e].indexOf("[EROR]")>0&&(t.color="red"),a.push(S.a.createElement("br",{key:"br_"+e})),a.push(S.a.createElement("span",{key:"log_"+e,style:t},this.props.logs[e]))}return S.a.createElement("div",null,S.a.createElement("div",{tabIndex:"-1",ref:this.logPanel,className:"log__panel"},a),S.a.createElement("div",{className:"padding-top padding-bottom x2 filter-controls"},t,e))}}function cn(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}rn(on,"propTypes",{logs:M.a.arrayOf(M.a.string).isRequired,page:M.a.number.isRequired,perPage:M.a.number.isRequired,nextPage:M.a.func.isRequired,previousPage:M.a.func.isRequired});class dn extends S.a.Component{constructor(e){super(e),cn(this,"nextPage",()=>{this.setState({page:this.state.page+1})}),cn(this,"previousPage",()=>{this.setState({page:this.state.page-1})}),cn(this,"reload",()=>{this.setState({loadingLogs:!0}),this.props.actions.getLogs(this.state.page,this.state.perPage).then(()=>this.setState({loadingLogs:!1}))}),this.state={loadingLogs:!0,page:0,perPage:1e3}}componentDidMount(){this.props.actions.getLogs(this.state.page,this.state.perPage).then(()=>this.setState({loadingLogs:!1}))}componentDidUpdate(e,t){this.state.page!==t.page&&this.props.actions.getLogs(this.state.page,this.state.perPage).then(()=>this.setState({loadingLogs:!1}))}render(){let e=null;return e=this.state.loadingLogs?S.a.createElement($.a,null):S.a.createElement(on,Object.assign({},this.props,{nextPage:this.nextPage,previousPage:this.previousPage,page:this.state.page,perPage:this.state.perPage})),S.a.createElement("div",{className:"wrapper--admin"},S.a.createElement(k,{id:"admin.logs.title",defaultMessage:"Server Logs"}),S.a.createElement("div",{className:"admin-console__wrapper"},S.a.createElement("div",{className:"admin-console__content"},S.a.createElement("div",{className:"banner"},S.a.createElement("div",{className:"banner__content"},S.a.createElement(T.a,{id:"admin.logs.bannerDesc",defaultMessage:"To look up users by User ID or Token ID, go to Reporting > Users and paste the ID into the search filter."}))),S.a.createElement("button",{type:"submit",className:"btn btn-primary",onClick:this.reload},S.a.createElement(T.a,{id:"admin.logs.reload",defaultMessage:"Reload"})),e)))}}cn(dn,"propTypes",{logs:M.a.arrayOf(M.a.string).isRequired,nextPage:M.a.func,actions:M.a.shape({getLogs:M.a.func.isRequired}).isRequired});var mn=Object(r.connect)((function(e){return{logs:d.getLogs(e)}}),(function(e){return{actions:Object(l.bindActionCreators)({getLogs:o.getLogs},e)}}))(dn);function un(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}const pn=200;class hn extends S.a.PureComponent{constructor(e){super(e),un(this,"handleImageChange",()=>{const e=St()(this.refs.fileInput);e.prop("files").length>0&&(this.props.setSaveNeeded(),this.setState({brandImage:e.prop("files")[0],deleteBrandImage:!1}))}),un(this,"handleDeleteButtonPressed",()=>{this.setState({deleteBrandImage:!0,brandImage:null,brandImageExists:!1}),this.props.setSaveNeeded()}),un(this,"handleSave",async()=>{let e;return this.setState({error:""}),this.state.deleteBrandImage?await Object(f.h)(()=>{this.setState({deleteBrandImage:!1,brandImageExists:!1,brandImage:null})},t=>{e=t,this.setState({error:t.message})}):this.state.brandImage&&await Object(f.L)(this.state.brandImage,()=>{this.setState({brandImageExists:!0,brandImage:null,brandImageTimestamp:Date.now()})},t=>{e=t,this.setState({error:t.message})}),{error:e}}),this.state={deleteBrandImage:!1,brandImage:null,brandImageExists:!1,brandImageTimestamp:Date.now(),error:""}}componentDidMount(){fetch(Ft.Client4.getBrandImageUrl(this.state.brandImageTimestamp)).then(e=>{e.status===pn?this.setState({brandImageExists:!0}):this.setState({brandImageExists:!1})}),this.props.registerSaveAction(this.handleSave)}componentWillUnmount(){this.props.unRegisterSaveAction(this.handleSave)}componentDidUpdate(){if(this.refs.image){const e=new FileReader,t=this.refs.image;e.onload=e=>{St()(t).attr("src",e.target.result)},e.readAsDataURL(this.state.brandImage)}}render(){let e="btn";this.props.disabled||(e+=" btn-default");let t=null;if(this.state.brandImage)t=S.a.createElement("div",{className:"remove-image__img margin-bottom x3"},S.a.createElement("img",{ref:"image",alt:"brand image",src:""}));else if(this.state.brandImageExists){let e;this.props.disabled||(e=S.a.createElement(se.a,{delayShow:O.j.OVERLAY_TIME_DELAY,placement:"right",overlay:S.a.createElement(ae.a,{id:"removeIcon"},S.a.createElement("div",{"aria-hidden":!0},S.a.createElement(T.a,{id:"admin.team.removeBrandImage",defaultMessage:"Remove brand image"})))},S.a.createElement("button",{className:"remove-image__btn",onClick:this.handleDeleteButtonPressed},S.a.createElement("span",{"aria-hidden":!0},"×")))),t=S.a.createElement("div",{className:"remove-image__img margin-bottom x3"},S.a.createElement("img",{alt:"brand image",src:Ft.Client4.getBrandImageUrl(this.state.brandImageTimestamp)}),e)}else t=S.a.createElement("p",{className:"margin-top"},S.a.createElement(T.a,{id:"admin.team.noBrandImage",defaultMessage:"No brand image uploaded"}));return S.a.createElement("div",{"data-testid":this.props.id,className:"form-group"},S.a.createElement("label",{className:"control-label col-sm-4"},S.a.createElement(T.a,{id:"admin.team.brandImageTitle",defaultMessage:"Custom Brand Image:"})),S.a.createElement("div",{className:"col-sm-8"},S.a.createElement("div",{className:"remove-image"},t)),S.a.createElement("div",{className:"col-sm-4"}),S.a.createElement("div",{className:"col-sm-8"},S.a.createElement("div",{className:"file__upload margin-top x3"},S.a.createElement("button",{className:e,disabled:this.props.disabled},S.a.createElement(T.a,{id:"admin.team.chooseImage",defaultMessage:"Select Image"})),S.a.createElement("input",{ref:"fileInput",type:"file",accept:".jpg,.png,.bmp",disabled:this.props.disabled,onChange:this.handleImageChange})),S.a.createElement("br",null),S.a.createElement(Ee.a,{error:this.state.error}),S.a.createElement("p",{className:"help-text no-margin"},S.a.createElement(de.a,{id:"admin.team.uploadDesc",defaultMessage:'Customize your user experience by adding a custom image to your login screen. See examples at <a href="http://docs.mattermost.com/administration/config-settings.html#custom-branding" target="_blank">docs.mattermost.com/administration/config-settings.html#custom-branding</a>.'}))))}}un(hn,"propTypes",{id:M.a.string,disabled:M.a.bool.isRequired,setSaveNeeded:M.a.func.isRequired,registerSaveAction:M.a.func.isRequired,unRegisterSaveAction:M.a.func.isRequired});a(182);var gn=a(1154);function bn(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class fn extends S.a.Component{constructor(e){super(e),bn(this,"onRowClick",()=>{this.props.onCheckToggle(this.props.primary_key)}),bn(this,"linkHandler",async e=>{e.stopPropagation(),e.preventDefault(),this.setState({loading:!0}),await this.props.actions.link(this.props.primary_key),this.setState({loading:!1})}),bn(this,"unlinkHandler",async e=>{e.stopPropagation(),e.preventDefault(),this.setState({loading:!0}),await this.props.actions.unlink(this.props.primary_key),this.setState({loading:!1})}),bn(this,"renderActions",()=>this.props.mattermost_group_id?this.props.has_syncables?S.a.createElement(me.a,{to:"/admin_console/user_management/groups/"+this.props.mattermost_group_id,id:"".concat(this.props.name,"_edit")},S.a.createElement(T.a,{id:"admin.group_settings.group_row.edit",defaultMessage:"Edit"})):S.a.createElement(me.a,{to:"/admin_console/user_management/groups/"+this.props.mattermost_group_id,id:"".concat(this.props.name,"_configure")},S.a.createElement(T.a,{id:"admin.group_settings.group_row.configure",defaultMessage:"Configure"})):null),bn(this,"renderLinked",()=>this.state.loading?S.a.createElement("a",{href:"#"},this.props.mattermost_group_id&&S.a.createElement(gn.a,{text:Object(I.gb)("admin.group_settings.group_row.unlinking","Unlinking")}),!this.props.mattermost_group_id&&S.a.createElement(gn.a,{text:Object(I.gb)("admin.group_settings.group_row.linking","Linking")})):this.props.mattermost_group_id?this.props.failed?S.a.createElement("a",{href:"#",onClick:this.unlinkHandler,className:"warning"},S.a.createElement("i",{className:"icon fa fa-exclamation-triangle"}),S.a.createElement(T.a,{id:"admin.group_settings.group_row.unlink_failed",defaultMessage:"Unlink failed"})):S.a.createElement("a",{href:"#",onClick:this.unlinkHandler},S.a.createElement("i",{className:"icon fa fa-link"}),S.a.createElement(T.a,{id:"admin.group_settings.group_row.linked",defaultMessage:"Linked"})):this.props.failed?S.a.createElement("a",{href:"#",onClick:this.linkHandler,className:"warning"},S.a.createElement("i",{className:"icon fa fa-exclamation-triangle"}),S.a.createElement(T.a,{id:"admin.group_settings.group_row.link_failed",defaultMessage:"Link failed"})):S.a.createElement("a",{href:"#",onClick:this.linkHandler},S.a.createElement("i",{className:"icon fa fa-unlink"}),S.a.createElement(T.a,{id:"admin.group_settings.group_row.not_linked",defaultMessage:"Not Linked"}))),bn(this,"render",()=>S.a.createElement("div",{id:"".concat(this.props.name,"_group"),className:"group "+(this.props.checked?"checked":""),onClick:this.onRowClick},S.a.createElement("div",{className:"group-row"},S.a.createElement("div",{className:"group-name"},S.a.createElement("div",{className:"group-check "+(this.props.checked?"checked":"")},this.props.checked&&S.a.createElement(Na.a,null)),S.a.createElement("span",null,this.props.name)),S.a.createElement("div",{className:"group-content"},S.a.createElement("span",{className:"group-description"},this.renderLinked()),S.a.createElement("span",{className:"group-actions"},this.renderActions()))))),this.state={loading:!1}}}bn(fn,"propTypes",{primary_key:M.a.string.isRequired,name:M.a.string.isRequired,mattermost_group_id:M.a.string,has_syncables:M.a.bool,checked:M.a.bool,failed:M.a.bool,onCheckToggle:M.a.func,actions:M.a.shape({link:M.a.func.isRequired,unlink:M.a.func.isRequired}).isRequired});var _n=a(1191);function En(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,s)}return a}function yn(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?En(a,!0).forEach((function(t){vn(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):En(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function vn(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}const Sn=200,Tn={filterIsConfigured:{filter:"is:configured",option:{is_configured:!0}},filterIsUnconfigured:{filter:"is:notconfigured",option:{is_configured:!1}},filterIsLinked:{filter:"is:linked",option:{is_linked:!0}},filterIsUnlinked:{filter:"is:notlinked",option:{is_linked:!1}}};class On extends S.a.PureComponent{constructor(e){super(e),vn(this,"closeFilters",()=>{this.setState({showFilters:!1})}),vn(this,"previousPage",async e=>{e.preventDefault();const t=this.state.page<1?0:this.state.page-1;this.setState({checked:{},page:t,loading:!0}),this.searchGroups(t)}),vn(this,"nextPage",async e=>{e.preventDefault();const t=this.state.page+1;this.setState({checked:{},page:t,loading:!0}),this.searchGroups(t)}),vn(this,"onCheckToggle",e=>{const t=yn({},this.state.checked);t[e]=!t[e],this.setState({checked:t})}),vn(this,"linkSelectedGroups",()=>{for(const e of this.props.groups)this.state.checked[e.primary_key]&&!e.mattermost_group_id&&this.props.actions.link(e.primary_key)}),vn(this,"unlinkSelectedGroups",()=>{for(const e of this.props.groups)this.state.checked[e.primary_key]&&e.mattermost_group_id&&this.props.actions.unlink(e.primary_key)}),vn(this,"selectionActionButtonType",()=>{let e=!1;for(const t of this.props.groups)if(this.state.checked[t.primary_key]){if(!t.mattermost_group_id)return"link";e=!0}return e?"unlink":"disabled"}),vn(this,"renderSelectionActionButton",()=>{switch(this.selectionActionButtonType()){case"link":return S.a.createElement("button",{className:"btn btn-primary",onClick:this.linkSelectedGroups},S.a.createElement("i",{className:"icon fa fa-link"}),S.a.createElement(T.a,{id:"admin.group_settings.groups_list.link_selected",defaultMessage:"Link Selected Groups"}));case"unlink":return S.a.createElement("button",{className:"btn btn-primary",onClick:this.unlinkSelectedGroups},S.a.createElement("i",{className:"icon fa fa-unlink"}),S.a.createElement(T.a,{id:"admin.group_settings.groups_list.unlink_selected",defaultMessage:"Unlink Selected Groups"}));default:return S.a.createElement("button",{className:"btn btn-inactive disabled"},S.a.createElement("i",{className:"icon fa fa-link"}),S.a.createElement(T.a,{id:"admin.group_settings.groups_list.link_selected",defaultMessage:"Link Selected Groups"}))}}),vn(this,"renderRows",()=>this.state.loading?S.a.createElement("div",{className:"groups-list-loading"},S.a.createElement("i",{className:"fa fa-spinner fa-pulse fa-2x"})):0===this.props.groups.length?S.a.createElement("div",{className:"groups-list-empty"},S.a.createElement(T.a,{id:"admin.group_settings.groups_list.no_groups_found",defaultMessage:"No groups found"})):this.props.groups.map(e=>S.a.createElement(fn,{key:e.primary_key,primary_key:e.primary_key,name:e.name,mattermost_group_id:e.mattermost_group_id,has_syncables:e.has_syncables,failed:e.failed,checked:Boolean(this.state.checked[e.primary_key]),onCheckToggle:this.onCheckToggle,actions:{link:this.props.actions.link,unlink:this.props.actions.unlink}}))),vn(this,"regex",e=>new RegExp("(".concat(e,")"),"i")),vn(this,"searchGroups",e=>{let{searchString:t}=this.state;const a=yn({},this.state);delete a.page,delete a.checked;let s=t,i={q:""};Object.entries(Tn).forEach(([e,n])=>{const r=this.regex(n.filter);r.test(t)?(a[e]=!0,s=s.replace(r,""),i=Object.assign(i,n.option)):this.state[e]&&(t+=" "+n.filter)}),i.q=s.trim(),a.searchString=t,a.showFilters=!1,a.loading=!0,a.showFilters=!1,this.setState(a),this.props.actions.getLdapGroups(e,Sn,i).then(()=>{this.setState({loading:!1})})}),vn(this,"handleGroupSearchKeyUp",e=>{const{key:t}=e,{searchString:a}=this.state;t===O.j.KeyCodes.ENTER[0]&&(this.setState({page:0}),this.searchGroups());const s={};Object.entries(Tn).forEach(([e,t])=>{this.regex(t.filter).test(a)||(s[e]=!1)}),this.setState(s)}),vn(this,"newSearchString",(e,t,a)=>{let s=e;const{filter:i}=Tn[t],n=this.regex(i),r=n.test(e);return r&&!a&&(s=e.replace(n,"").trim()),!r&&a&&(s+=" "+i),s.replace(/\s{2,}/g," ")}),vn(this,"handleFilterCheck",e=>{let{searchString:t}=this.state;e.forEach(e=>{t=this.newSearchString(t,e[0],e[1]),this.setState({[e[0]]:e[1]})}),this.setState({searchString:t})}),vn(this,"renderSearchFilters",()=>S.a.createElement("div",{id:"group-filters",className:"group-search-filters",onClick:e=>{e.nativeEvent.stopImmediatePropagation()}},S.a.createElement("div",{className:"filter-row"},S.a.createElement("span",{className:"filter-check "+(this.state.filterIsLinked?"checked":""),onClick:()=>this.handleFilterCheck([["filterIsLinked",!this.state.filterIsLinked],["filterIsUnlinked",!1]])},this.state.filterIsLinked&&S.a.createElement(Na.a,null)),S.a.createElement("span",null,S.a.createElement(T.a,{id:"admin.group_settings.filters.isLinked",defaultMessage:"Is Linked"}))),S.a.createElement("div",{className:"filter-row"},S.a.createElement("span",{className:"filter-check "+(this.state.filterIsUnlinked?"checked":""),onClick:()=>this.handleFilterCheck([["filterIsUnlinked",!this.state.filterIsUnlinked],["filterIsLinked",!1]])},this.state.filterIsUnlinked&&S.a.createElement(Na.a,null)),S.a.createElement("span",null,S.a.createElement(T.a,{id:"admin.group_settings.filters.isUnlinked",defaultMessage:"Is Not Linked"}))),S.a.createElement("div",{className:"filter-row"},S.a.createElement("span",{className:"filter-check "+(this.state.filterIsConfigured?"checked":""),onClick:()=>this.handleFilterCheck([["filterIsConfigured",!this.state.filterIsConfigured],["filterIsUnconfigured",!1]])},this.state.filterIsConfigured&&S.a.createElement(Na.a,null)),S.a.createElement("span",null,S.a.createElement(T.a,{id:"admin.group_settings.filters.isConfigured",defaultMessage:"Is Configured"}))),S.a.createElement("div",{className:"filter-row"},S.a.createElement("span",{className:"filter-check "+(this.state.filterIsUnconfigured?"checked":""),onClick:()=>this.handleFilterCheck([["filterIsUnconfigured",!this.state.filterIsUnconfigured],["filterIsConfigured",!1]])},this.state.filterIsUnconfigured&&S.a.createElement(Na.a,null)),S.a.createElement("span",null,S.a.createElement(T.a,{id:"admin.group_settings.filters.isUnconfigured",defaultMessage:"Is Not Configured"}))),S.a.createElement("a",{onClick:()=>{this.setState({page:0}),this.searchGroups(0)},className:"btn btn-primary search-groups-btn"},S.a.createElement(T.a,{id:"search_bar.search",defaultMessage:"Search"})))),vn(this,"resetFiltersAndSearch",()=>{const e={showFilters:!1,searchString:"",loading:!0,page:0};Object.entries(Tn).forEach(([t])=>{e[t]=!1}),this.setState(e),this.props.actions.getLdapGroups(this.state.page,Sn,{q:""}).then(()=>{this.setState({loading:!1})})}),vn(this,"render",()=>{const e=this.state.page*Sn+1;let t=this.state.page*Sn+Sn;const a=this.props.total;t>a&&(t=a);const s=t===a,i=0===this.state.page;return S.a.createElement("div",{className:"groups-list"},S.a.createElement("div",{className:"groups-list--global-actions"},S.a.createElement("div",{className:"group-list-search"},S.a.createElement("input",{type:"text",placeholder:I.gb("search_bar.search","Search"),onKeyUp:this.handleGroupSearchKeyUp,onChange:e=>this.setState({searchString:e.target.value}),value:this.state.searchString}),S.a.createElement(_n.a,{className:"search__icon","aria-hidden":"true"}),S.a.createElement("i",{className:"fa fa-times-circle group-filter-action "+(this.state.searchString.length?"":"hidden"),onClick:this.resetFiltersAndSearch}),S.a.createElement("i",{className:"fa fa-caret-down group-filter-action "+(this.state.showFilters?"hidden":""),onClick:()=>{document.addEventListener("click",this.closeFilters,{once:!0}),this.setState({showFilters:!0})}})),this.state.showFilters&&this.renderSearchFilters(),S.a.createElement("div",{className:"group-list-link-unlink"},this.renderSelectionActionButton())),S.a.createElement("div",{className:"groups-list--header"},S.a.createElement("div",{className:"group-name"},S.a.createElement(T.a,{id:"admin.group_settings.groups_list.nameHeader",defaultMessage:"Name"})),S.a.createElement("div",{className:"group-content"},S.a.createElement("div",{className:"group-description"},S.a.createElement(T.a,{id:"admin.group_settings.groups_list.mappingHeader",defaultMessage:"Mattermost Linking"})),S.a.createElement("div",{className:"group-actions"}))),S.a.createElement("div",{id:"groups-list--body",className:"groups-list--body"},this.renderRows()),a>0&&S.a.createElement("div",{className:"groups-list--footer"},S.a.createElement("div",{className:"counter"},S.a.createElement(T.a,{id:"admin.group_settings.groups_list.paginatorCount",defaultMessage:"{startCount, number} - {endCount, number} of {total, number}",values:{startCount:e,endCount:t,total:a}})),S.a.createElement("button",{className:"btn btn-link prev "+(i?"disabled":""),onClick:i?null:this.previousPage,disabled:i},S.a.createElement(qi.a,null)),S.a.createElement("button",{className:"btn btn-link next "+(s?"disabled":""),onClick:s?null:this.nextPage,disabled:s},S.a.createElement(Ui.a,null))))}),this.state={checked:{},loading:!0,page:0,showFilters:!1,searchString:""},Object.entries(Tn).forEach(([e])=>{this.state[e]=!1})}componentDidMount(){this.props.actions.getLdapGroups(this.state.page,Sn).then(()=>{this.setState({loading:!1})})}}vn(On,"propTypes",{groups:M.a.arrayOf(M.a.object),total:M.a.number,actions:M.a.shape({getLdapGroups:M.a.func.isRequired,link:M.a.func.isRequired,unlink:M.a.func.isRequired}).isRequired}),vn(On,"defaultProps",{groups:[]});const wn=Object(E.createSelector)(d.getLdapGroups,e=>{const t=Object.values(e);return t.sort((e,t)=>e.name.localeCompare(t.name)),t});var Cn=Object(r.connect)((function(e){return{groups:wn(e),total:Object(d.getLdapGroupsCount)(e)}}),(function(e){return{actions:Object(l.bindActionCreators)({getLdapGroups:o.getLdapGroups,link:o.linkLdapGroup,unlink:o.unlinkLdapGroup},e)}}))(On);class xn extends S.a.PureComponent{constructor(...e){super(...e),function(e,t,a){t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a}(this,"render",()=>{const e=Object(w.e)();return S.a.createElement("div",{className:"wrapper--fixed"},S.a.createElement("div",{className:"admin-console__header"},S.a.createElement(T.a,{id:"admin.group_settings.groupsPageTitle",defaultMessage:"Groups (Beta)"})),S.a.createElement("div",{className:"admin-console__wrapper"},S.a.createElement("div",{className:"admin-console__content"},S.a.createElement("div",{className:"banner info"},S.a.createElement("div",{className:"banner__content"},S.a.createElement(j.b,{id:"admin.group_settings.introBanner",defaultMessage:"Groups are a way to organize users and apply actions to all users within that group.\nFor more information on Groups, please see [documentation](!https://www.mattermost.com/default-ad-ldap-groups)."}))),S.a.createElement(da,{id:"ldap_groups",titleId:Object(C.b)("admin.group_settings.ldapGroupsTitle"),titleDefault:"AD/LDAP Groups",subtitleId:Object(C.b)("admin.group_settings.ldapGroupsDescription"),subtitleDefault:"Link and configure groups from your AD/LDAP to Mattermost. Please ensure you have configured a [group filter](".concat(e,"/admin_console/authentication/ldap)."),subtitleValues:{siteURL:e}},S.a.createElement(Cn,null)))))})}}var Mn=a(1192),jn=a(1223);function Pn(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class An extends S.a.PureComponent{constructor(...e){super(...e),Pn(this,"render",()=>{const{name:e}=this.props;return S.a.createElement("div",{className:"group-profile"},S.a.createElement("div",{className:"group-profile-field"},S.a.createElement("label",null,S.a.createElement(T.a,{id:"admin.group_settings.group_details.group_profile.name",defaultMessage:"Name:"})),S.a.createElement("input",{type:"text",className:"form-control",value:e,disabled:!0})))})}}Pn(An,"propTypes",{name:M.a.string.isRequired});var kn=a(1170),Rn=a(1171);function Nn(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class Dn extends S.a.PureComponent{constructor(e){super(e),Nn(this,"removeItem",()=>{this.props.onRemoveItem(this.props.id,this.props.type),this.setState({showConfirmationModal:!1})}),Nn(this,"changeRoles",()=>{this.props.onChangeRoles(this.props.id,this.props.type,!this.props.schemeAdmin)}),Nn(this,"toggleCollapse",()=>{this.props.onToggleCollapse(this.props.id)}),Nn(this,"displayAssignedRolesDropdown",()=>{const{schemeAdmin:e,name:t}=this.props,a=S.a.createElement(T.a,{id:"admin.group_teams_and_channels_row.channelAdmin",defaultMessage:"Channel Admin"}),s=S.a.createElement(T.a,{id:"admin.group_teams_and_channels_row.teamAdmin",defaultMessage:"Team Admin"}),i=S.a.createElement(T.a,{id:"admin.group_teams_and_channels_row.member",defaultMessage:"Member"});let n=null;if(!Object(y.isNil)(e)){let r=i,l=this.props.type.includes("team")?s:a;e&&(r=this.props.type.includes("team")?s:a,l=i),n=S.a.createElement("div",null,S.a.createElement(Gs.a,null,S.a.createElement("div",{"data-testid":"".concat(t,"_current_role")},S.a.createElement("a",null,S.a.createElement("span",null,r," "),S.a.createElement("span",{className:"caret"}))),S.a.createElement(Hs.a,{openLeft:!0,openUp:!0,ariaLabel:Object(I.gb)("admin.team_channel_settings.group_row.memberRole","Member Role")},S.a.createElement(Hs.a.ItemAction,{testid:"".concat(t,"_role_to_be"),onClick:this.changeRoles,text:l}))))}return n}),Nn(this,"render",()=>{let e="",t=null;this.props.hasChildren&&(t=S.a.createElement("i",{className:"fa "+(this.props.collapsed?"fa-caret-right":"fa-caret-down"),onClick:this.toggleCollapse}),e+=" has-clidren"),this.props.collapsed&&(e+=" collapsed");let a=null,s=null;switch(this.props.type){case"public-team":s=S.a.createElement(T.a,{id:"admin.group_settings.group_details.group_teams_and_channels_row.publicTeam",defaultMessage:"Team"});break;case"private-team":s=S.a.createElement(T.a,{id:"admin.group_settings.group_details.group_teams_and_channels_row.privateTeam",defaultMessage:"Team (Private)"})}switch(this.props.type){case"public-channel":a=S.a.createElement("span",{className:"channel-icon"},S.a.createElement(kn.a,{className:"icon icon__globe"})),s=S.a.createElement(T.a,{id:"admin.group_settings.group_details.group_teams_and_channels_row.publicChannel",defaultMessage:"Channel"});break;case"private-channel":a=S.a.createElement("span",{className:"channel-icon"},S.a.createElement(Rn.a,{className:"icon icon__lock"})),s=S.a.createElement(T.a,{id:"admin.group_settings.group_details.group_teams_and_channels_row.privateChannel",defaultMessage:"Channel (Private)"})}const i=this.props.type.split("-")[1];return S.a.createElement("tr",{className:"group-teams-and-channels-row"+e},S.a.createElement(be.a,{show:this.state.showConfirmationModal,title:S.a.createElement(T.a,{id:"admin.group_settings.group_details.group_teams_and_channels_row.remove.confirm_header",defaultMessage:"Remove Membership from the {name} {displayType}?",values:{name:this.props.name,displayType:i}}),message:S.a.createElement(T.a,{id:"admin.group_settings.group_details.group_teams_and_channels_row.remove.confirm_body",defaultMessage:"Removing this membership will prevent future users in this group from being added to the {name} {displayType}.",values:{name:this.props.name,displayType:i}}),confirmButtonText:S.a.createElement(T.a,{id:"admin.group_settings.group_details.group_teams_and_channels_row.remove.confirm_button",defaultMessage:"Yes, Remove"}),onConfirm:this.removeItem,onCancel:()=>this.setState({showConfirmationModal:!1})}),S.a.createElement("td",null,S.a.createElement("span",{className:"arrow-icon"},t),a,S.a.createElement("span",{className:pe()({"name-no-arrow":Object(y.isNil)(t)&&Object(y.isNil)(a)})},this.props.name)),S.a.createElement("td",{className:"type"},s),S.a.createElement("td",null,this.displayAssignedRolesDropdown()),S.a.createElement("td",{className:"text-right"},S.a.createElement("button",{className:"btn btn-link",onClick:()=>this.setState({showConfirmationModal:!0})},S.a.createElement(T.a,{id:"admin.group_settings.group_details.group_teams_and_channels_row.remove",defaultMessage:"Remove"}))))}),this.state={showConfirmationModal:!1}}}function Ln(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,s)}return a}function In(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}Nn(Dn,"propTypes",{id:M.a.string.isRequired,type:M.a.string.isRequired,name:M.a.string.isRequired,hasChildren:M.a.bool,collapsed:M.a.bool,onRemoveItem:M.a.func.isRequired,onToggleCollapse:M.a.func.isRequired,onChangeRoles:M.a.func.isRequired,schemeAdmin:M.a.bool});class Un extends S.a.PureComponent{constructor(e){super(e),In(this,"onToggleCollapse",e=>{const t=function(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?Ln(a,!0).forEach((function(t){In(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):Ln(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}({},this.state.collapsed);t[e]=!t[e],this.setState({collapsed:t})}),In(this,"onRemoveItem",async(e,t)=>{"public-team"===t||"private-team"===t?(await this.props.unlink(this.props.id,e,b.Groups.SYNCABLE_TYPE_TEAM),await this.props.getGroupSyncables(this.props.id,b.Groups.SYNCABLE_TYPE_TEAM),await this.props.getGroupSyncables(this.props.id,b.Groups.SYNCABLE_TYPE_CHANNEL)):(await this.props.unlink(this.props.id,e,b.Groups.SYNCABLE_TYPE_CHANNEL),await this.props.getGroupSyncables(this.props.id,b.Groups.SYNCABLE_TYPE_CHANNEL))}),In(this,"onChangeRoles",async(e,t,a)=>{this.props.onChangeRoles(e,t,a)}),In(this,"teamsAndChannelsToEntries",(e,t)=>{const a=[],s=new Set,i=[];e.forEach(e=>{s.add(e.team_id),i.push({type:"O"===e.team_type?"public-team":"private-team",hasChildren:t.some(t=>t.team_id===e.team_id),name:e.team_display_name,collapsed:this.state.collapsed[e.team_id],id:e.team_id,schemeAdmin:e.scheme_admin})});const n={};return t.forEach(e=>{n[e.team_id]=n[e.team_id]||[],n[e.team_id].push({type:"O"===e.channel_type?"public-channel":"private-channel",name:e.channel_display_name,id:e.channel_id,schemeAdmin:e.scheme_admin}),s.has(e.team_id)||(s.add(e.team_id),i.push({type:"O"===e.team_type?"public-team":"private-team",hasChildren:!0,name:e.team_display_name,collapsed:this.state.collapsed[e.team_id],id:e.team_id}))}),i.sort((e,t)=>e.name&&t.name?e.name.localeCompare(t.name):0),i.forEach(e=>{if(a.push(e),e.hasChildren&&!e.collapsed){const t=n[e.id];t.sort((e,t)=>e.name.localeCompare(t.name)),a.push(...t)}}),a}),In(this,"render",()=>{const e=this.teamsAndChannelsToEntries(this.props.teams,this.props.channels);return this.props.loading?S.a.createElement("div",{className:"group-teams-and-channels"},S.a.createElement("div",{className:"group-teams-and-channels-loading"},S.a.createElement("i",{className:"fa fa-spinner fa-pulse fa-2x"}))):0===e.length?S.a.createElement("div",{className:"group-teams-and-channels"},S.a.createElement("div",{className:"group-teams-and-channels-empty"},S.a.createElement(T.a,{id:"admin.group_settings.group_details.group_teams_and_channels.no-teams-or-channels-speicified",defaultMessage:"No teams or channels specified yet"}))):S.a.createElement("div",{className:"AdminPanel__content"},S.a.createElement("table",{id:"team_and_channel_membership_table",className:"AdminPanel__table group-teams-and-channels"},S.a.createElement("thead",{className:"group-teams-and-channels--header"},S.a.createElement("tr",null,S.a.createElement("th",{width:"30%"},S.a.createElement(T.a,{id:"admin.group_settings.group_profile.group_teams_and_channels.name",defaultMessage:"Name"})),S.a.createElement("th",{width:"25%"},S.a.createElement(T.a,{id:"admin.group_settings.group_profile.group_teams_and_channels.type",defaultMessage:"Type"})),S.a.createElement("th",{width:"25%"},S.a.createElement(T.a,{id:"admin.group_settings.group_profile.group_teams_and_channels.assignedRoles",defaultMessage:"Assigned Roles"})),S.a.createElement("th",{width:"20%"}))),S.a.createElement("tbody",{className:"group-teams-and-channels--body"},e.map(e=>S.a.createElement(Dn,Object.assign({key:e.id,onRemoveItem:this.onRemoveItem,onChangeRoles:this.onChangeRoles,onToggleCollapse:this.onToggleCollapse},e))))))}),this.state={collapsed:{}}}}function qn(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}In(Un,"propTypes",{id:M.a.string.isRequired,teams:M.a.arrayOf(M.a.object),channels:M.a.arrayOf(M.a.object),loading:M.a.bool.isRequired,getGroupSyncables:M.a.func.isRequired,unlink:M.a.func.isRequired,onChangeRoles:M.a.func.isRequired});class Bn extends S.a.PureComponent{constructor(...e){super(...e),qn(this,"render",()=>S.a.createElement("div",{className:"group-users-row"},S.a.createElement(Ls.a,{username:this.props.username,url:Ft.Client4.getProfilePictureUrl(this.props.userId,this.props.lastPictureUpdate),size:"lg"}),S.a.createElement("div",{className:"user-data"},S.a.createElement("div",{className:"name-row"},S.a.createElement("span",{className:"username"},"@"+this.props.username),"-",S.a.createElement("span",{className:"display-name"},this.props.displayName)),S.a.createElement("div",null,S.a.createElement("span",{className:"email-label"},S.a.createElement(T.a,{id:"admin.group_settings.group_details.group_users.email",defaultMessage:"Email:"})),S.a.createElement("span",{className:"email"},this.props.email)))))}}function Fn(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}qn(Bn,"propTypes",{username:M.a.string.isRequired,displayName:M.a.string.isRequired,email:M.a.string.isRequired,userId:M.a.string.isRequired,lastPictureUpdate:M.a.number.isRequired});const Gn=20;class Hn extends S.a.PureComponent{constructor(e){super(e),Fn(this,"previousPage",async()=>{const e=this.state.page<1?0:this.state.page-1;this.setState({page:e,loading:!0}),await this.props.getMembers(this.props.groupID,e,Gn),this.setState({loading:!1})}),Fn(this,"nextPage",async()=>{const e=(this.state.page+1)*Gn>=this.props.total?this.state.page:this.state.page+1;this.setState({page:e,loading:!0}),await this.props.getMembers(this.props.groupID,e,Gn),this.setState({loading:!1})}),Fn(this,"renderRows",()=>0===this.props.members.length?S.a.createElement("div",{className:"group-users-empty"},S.a.createElement(T.a,{id:"admin.group_settings.group_details.group_users.no-users-found",defaultMessage:"No users found"})):this.props.members.map(e=>S.a.createElement(Bn,{key:e.id,username:e.username,displayName:e.first_name+" "+e.last_name,email:e.email,userId:e.id,lastPictureUpdate:e.last_picture_update}))),Fn(this,"renderPagination",()=>{if(0===this.props.members.length)return S.a.createElement("div",{className:"group-users--footer empty"});const e=this.state.page*Gn+1;let t=this.state.page*Gn+Gn;const a=this.props.total;t>a&&(t=a);const s=t===a,i=0===this.state.page;return S.a.createElement("div",{className:"group-users--footer"},S.a.createElement("div",{className:"counter"},S.a.createElement(T.a,{id:"admin.group_settings.groups_list.paginatorCount",defaultMessage:"{startCount, number} - {endCount, number} of {total, number}",values:{startCount:e,endCount:t,total:a}})),S.a.createElement("button",{className:"btn btn-link prev "+(i?"disabled":""),onClick:this.previousPage,disabled:i},S.a.createElement(qi.a,null)),S.a.createElement("button",{className:"btn btn-link next "+(s?"disabled":""),onClick:this.nextPage,disabled:s},S.a.createElement(Ui.a,null)))}),Fn(this,"render",()=>S.a.createElement("div",{className:"group-users"},S.a.createElement("div",{className:"group-users--header"},S.a.createElement(j.b,{id:"admin.group_settings.group_profile.group_users.ldapConnector",defaultMessage:"AD/LDAP Connector is configured to sync and manage this group and its users. [Click here to view]({siteURL}/admin_console/authentication/ldap)",values:{siteURL:Object(w.e)()}})),S.a.createElement("div",{className:"group-users--body"},S.a.createElement("div",{className:"group-users-loading "+(this.state.loading?"active":"")},S.a.createElement("i",{className:"fa fa-spinner fa-pulse fa-2x"})),this.renderRows()),this.renderPagination())),this.state={loading:!0,page:0}}componentDidMount(){this.props.getMembers(this.props.groupID,0,Gn).then(()=>{this.setState({loading:!1})})}}Fn(Hn,"propTypes",{groupID:M.a.string.isRequired,members:M.a.arrayOf(M.a.object),total:M.a.number.isRequired,getMembers:M.a.func.isRequired});var Yn=a(36);function Wn(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}const zn=50;class Vn extends S.a.Component{constructor(e){super(e),Wn(this,"handleHide",()=>{this.props.actions.setModalSearchTerm(""),this.setState({show:!1})}),Wn(this,"handleExit",()=>{this.props.onModalDismissed&&this.props.onModalDismissed()}),Wn(this,"handleSubmit",e=>{e&&e.preventDefault(),0!==this.state.values.length&&(this.props.onChannelsSelected(this.state.values),this.handleHide())}),Wn(this,"addValue",e=>{const t=Object.assign([],this.state.values);e&&e.id&&-1===t.findIndex(t=>t.id===e.id)&&t.push(e),this.setState({values:t})}),Wn(this,"setChannelsLoadingState",e=>{this.setState({loadingChannels:e})}),Wn(this,"handlePageChange",(e,t)=>{e>t&&(this.setChannelsLoadingState(!0),this.props.actions.loadChannels(e,zn+1,this.props.groupID,!0).then(e=>{const t=[...this.state.channels],a=this.state.channels.map(e=>e.id);e.data.forEach(e=>{a.includes(e.id)||t.push(e)}),this.setState({channels:t.sort(I.f)}),this.setChannelsLoadingState(!1)}))}),Wn(this,"handleDelete",e=>{this.setState({values:e})}),Wn(this,"search",(e,t)=>{0!==t.state.page&&t.setState({page:0}),this.props.actions.setModalSearchTerm(e)}),this.searchTimeoutId=0,this.state={values:[],show:!0,search:!1,loadingChannels:!0,channels:[]}}componentDidMount(){this.props.actions.loadChannels(0,zn+1,this.props.groupID,!0).then(e=>{this.setState({channels:e.data.sort(I.f)}),this.setChannelsLoadingState(!1)})}componentDidUpdate(e){if(e.searchTerm!==this.props.searchTerm){clearTimeout(this.searchTimeoutId);const e=this.props.searchTerm;""===e?this.props.actions.loadChannels(0,zn+1,this.props.groupID,!0).then(e=>{this.setState({channels:e.data.sort(I.f)}),this.setChannelsLoadingState(!1)}):this.searchTimeoutId=setTimeout(async()=>{this.setChannelsLoadingState(!0);const t=await this.props.actions.searchChannels(e,this.props.groupID,!0);this.setState({channels:t.data}),this.setChannelsLoadingState(!1)},O.Q.SEARCH_TIMEOUT_MILLISECONDS)}}renderOption(e,t,a,s){let i="";return t&&(i="more-modal__row--selected"),S.a.createElement("div",{key:e.id,ref:t?"selected":e.id,className:"more-modal__row clickable "+i,onClick:()=>a(e),onMouseMove:()=>s(e)},S.a.createElement("div",{className:"more-modal__details"},"P"===e.type&&S.a.createElement(Rn.a,{className:"icon icon__lock"}),"O"===e.type&&S.a.createElement(kn.a,{className:"icon icon__globe"}),S.a.createElement("span",{className:"channel-name"},e.display_name),S.a.createElement("span",{className:"team-name"},"("+e.team_display_name+")")),S.a.createElement("div",{className:"more-modal__actions"},S.a.createElement("div",{className:"more-modal__actions--round"},S.a.createElement("i",{className:"fa fa-plus"}))))}renderValue(e){return e.data.display_name+" ("+e.data.team_display_name+")"}render(){const e=S.a.createElement(T.a,{id:"multiselect.selectChannels",defaultMessage:"Use ↑↓ to browse, ↵ to select."}),t=Object(I.gb)("multiselect.add","Add");return S.a.createElement(Xa.a,{dialogClassName:"a11y__modal more-modal more-direct-channels channel-selector-modal",show:this.state.show,onHide:this.handleHide,onExited:this.handleExit,role:"dialog","aria-labelledby":"channelSelectorModalLabel"},S.a.createElement(Xa.a.Header,{closeButton:!0},S.a.createElement(Xa.a.Title,{componentClass:"h1",id:"channelSelectorModalLabel"},S.a.createElement(j.b,{id:"add_channels_to_scheme.title",defaultMessage:"Add Channels To **Channel Selection** List"}))),S.a.createElement(Xa.a.Body,null,S.a.createElement(ps.a,{key:"addChannelsToSchemeKey",options:this.state.channels,optionRenderer:this.renderOption,values:this.state.values,valueRenderer:this.renderValue,perPage:zn,handlePageChange:this.handlePageChange,handleInput:this.search,handleDelete:this.handleDelete,handleAdd:this.addValue,handleSubmit:this.handleSubmit,numRemainingText:e,buttonSubmitText:t,saving:!1,loading:this.state.loadingChannels,placeholderText:Object(I.gb)("multiselect.addChannelsPlaceholder","Search and add channels")})))}}Wn(Vn,"propTypes",{searchTerm:M.a.string.isRequired,onModalDismissed:M.a.func,onChannelsSelected:M.a.func,groupID:M.a.string.isRequired,actions:M.a.shape({loadChannels:M.a.func.isRequired,setModalSearchTerm:M.a.func.isRequired,searchChannels:M.a.func.isRequired}).isRequired});var Xn=Object(r.connect)((function(e){return{searchTerm:e.views.search.modalSearch}}),(function(e){return{actions:Object(l.bindActionCreators)({loadChannels:Yn.getAllChannels,setModalSearchTerm:us.a,searchChannels:Yn.searchAllChannels},e)}}))(Vn);function Jn(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class Kn extends S.a.PureComponent{constructor(e){super(e),Jn(this,"openAddChannel",()=>{this.setState({addChannelOpen:!0})}),Jn(this,"closeAddChannel",()=>{this.setState({addChannelOpen:!1})}),Jn(this,"openAddTeam",()=>{this.setState({addTeamOpen:!0})}),Jn(this,"closeAddTeam",()=>{this.setState({addTeamOpen:!1})}),Jn(this,"addTeams",e=>{const t=[];for(const a of e)t.push(this.props.actions.link(this.props.groupID,a.id,b.Groups.SYNCABLE_TYPE_TEAM,{auto_add:!0}));return Promise.all(t).finally(()=>this.props.actions.getGroupSyncables(this.props.groupID,b.Groups.SYNCABLE_TYPE_TEAM))}),Jn(this,"addChannels",async e=>{const t=[];for(const a of e)t.push(this.props.actions.link(this.props.groupID,a.id,b.Groups.SYNCABLE_TYPE_CHANNEL,{auto_add:!0}));return Promise.all(t).finally(()=>{this.props.actions.getGroupSyncables(this.props.groupID,b.Groups.SYNCABLE_TYPE_CHANNEL),this.props.actions.getGroupSyncables(this.props.groupID,b.Groups.SYNCABLE_TYPE_TEAM)})}),Jn(this,"onChangeRoles",async(e,t,a)=>{this.setState({loadingTeamsAndChannels:!0}),"public-team"===t||"private-team"===t?(await this.props.actions.patchGroupSyncable(this.props.groupID,e,b.Groups.SYNCABLE_TYPE_TEAM,{scheme_admin:a}),await this.props.actions.getGroupSyncables(this.props.groupID,b.Groups.SYNCABLE_TYPE_TEAM)):(await this.props.actions.patchGroupSyncable(this.props.groupID,e,b.Groups.SYNCABLE_TYPE_CHANNEL,{scheme_admin:a}),await this.props.actions.getGroupSyncables(this.props.groupID,b.Groups.SYNCABLE_TYPE_CHANNEL)),this.setState({loadingTeamsAndChannels:!1})}),Jn(this,"render",()=>{const{group:e,members:t,groupTeams:a,groupChannels:s,memberCount:i}=this.props;return S.a.createElement("div",{className:"wrapper--fixed"},S.a.createElement("div",{className:"admin-console__header with-back"},S.a.createElement("div",null,S.a.createElement(Pa,{to:"/admin_console/user_management/groups",className:"fa fa-angle-left back"}),S.a.createElement(T.a,{id:"admin.group_settings.group_detail.group_configuration",defaultMessage:"Group Configuration"}))),S.a.createElement("div",{className:"admin-console__wrapper"},S.a.createElement("div",{className:"admin-console__content"},S.a.createElement("div",{className:"banner info"},S.a.createElement("div",{className:"banner__content"},S.a.createElement(T.a,{id:"admin.group_settings.group_detail.introBanner",defaultMessage:"Configure default teams and channels and view users belonging to this group."}))),S.a.createElement(da,{id:"group_profile",titleId:Object(C.b)("admin.group_settings.group_detail.groupProfileTitle"),titleDefault:"Group Profile",subtitleId:Object(C.b)("admin.group_settings.group_detail.groupProfileDescription"),subtitleDefault:"The name for this group."},S.a.createElement(An,{name:e.display_name})),S.a.createElement(da,{id:"group_teams_and_channels",titleId:Object(C.b)("admin.group_settings.group_detail.groupTeamsAndChannelsTitle"),titleDefault:"Team and Channel Membership",subtitleId:Object(C.b)("admin.group_settings.group_detail.groupTeamsAndChannelsDescription"),subtitleDefault:"Set default teams and channels for group members. Teams added will include default channels, town-square, and off-topic. Adding a channel without setting the team will add the implied team to the listing below.",button:S.a.createElement("div",{className:"group-profile-add-menu"},S.a.createElement(Gs.a,null,S.a.createElement("button",{id:"add_team_or_channel",className:"btn btn-primary"},S.a.createElement(T.a,{id:"admin.group_settings.group_details.add_team_or_channel",defaultMessage:"Add Team or Channel"}),S.a.createElement("i",{className:"fa fa-caret-down"})),S.a.createElement(Hs.a,{ariaLabel:Object(I.gb)("admin.group_settings.group_details.menuAriaLabel","Add Team or Channel Menu")},S.a.createElement(Hs.a.ItemAction,{id:"add_team",onClick:this.openAddTeam,text:Object(I.gb)("admin.group_settings.group_details.add_team","Add Team")}),S.a.createElement(Hs.a.ItemAction,{id:"add_channel",onClick:this.openAddChannel,text:Object(I.gb)("admin.group_settings.group_details.add_channel","Add Channel")}))))},S.a.createElement(Un,{id:this.props.groupID,teams:a,channels:s,loading:this.state.loadingTeamsAndChannels,getGroupSyncables:this.props.actions.getGroupSyncables,unlink:this.props.actions.unlink,onChangeRoles:this.onChangeRoles})),this.state.addTeamOpen&&S.a.createElement(_s,{onModalDismissed:this.closeAddTeam,onTeamsSelected:this.addTeams,alreadySelected:this.props.groupTeams.map(e=>e.team_id)}),this.state.addChannelOpen&&S.a.createElement(Xn,{onModalDismissed:this.closeAddChannel,onChannelsSelected:this.addChannels,alreadySelected:this.props.groupChannels.map(e=>e.channel_id),groupID:this.props.groupID}),S.a.createElement(da,{id:"group_users",titleId:Object(C.b)("admin.group_settings.group_detail.groupUsersTitle"),titleDefault:"Users",subtitleId:Object(C.b)("admin.group_settings.group_detail.groupUsersDescription"),subtitleDefault:"Listing of users in Mattermost associated with this group."},S.a.createElement(Hn,{members:t,total:i,groupID:this.props.groupID,getMembers:this.props.actions.getMembers})))))}),this.state={loadingTeamsAndChannels:!0,addTeamOpen:!1,addChannelOpen:!1}}componentDidMount(){const{groupID:e,actions:t}=this.props;t.getGroup(e),Promise.all([t.getGroupSyncables(e,b.Groups.SYNCABLE_TYPE_TEAM),t.getGroupSyncables(e,b.Groups.SYNCABLE_TYPE_CHANNEL)]).then(()=>{this.setState({loadingTeamsAndChannels:!1})})}}Jn(Kn,"propTypes",{groupID:M.a.string.isRequired,group:M.a.object,groupTeams:M.a.arrayOf(M.a.object),groupChannels:M.a.arrayOf(M.a.object),members:M.a.arrayOf(M.a.object),memberCount:M.a.number.isRequired,actions:M.a.shape({getGroup:M.a.func.isRequired,getMembers:M.a.func.isRequired,getGroupSyncables:M.a.func.isRequired,link:M.a.func.isRequired,unlink:M.a.func.isRequired,patchGroupSyncable:M.a.func.isRequired}).isRequired}),Jn(Kn,"defaultProps",{members:[],groupTeams:[],groupChannels:[],group:{display_name:""},memberCount:0});var Qn=Object(r.connect)((function(e,t){const a=t.match.params.group_id;return{groupID:a,group:Object(jn.getGroup)(e,a),groupTeams:Object(jn.getGroupTeams)(e,a),groupChannels:Object(jn.getGroupChannels)(e,a),members:Object(jn.getGroupMembers)(e,a),memberCount:Object(jn.getGroupMemberCount)(e,a)}}),(function(e){return{actions:Object(l.bindActionCreators)({getGroup:Mn.getGroup,getMembers:Mn.getGroupMembers,getGroupSyncables:Mn.getGroupSyncables,link:Mn.linkGroupSyncable,unlink:Mn.unlinkGroupSyncable,patchGroupSyncable:Mn.patchGroupSyncable},e)}}))(Kn);function Zn(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class $n extends S.a.Component{constructor(...e){super(...e),Zn(this,"handleRowClick",()=>{const{team:e,onRowClick:t}=this.props;t(e.id)}),Zn(this,"renderManagementMethodText",()=>{const{team:e}=this.props;return e.group_constrained?S.a.createElement(T.a,{id:"admin.team_settings.team_row.managementMethod.groupSync",defaultMessage:"Group Sync"}):e.allow_open_invite?S.a.createElement(T.a,{id:"admin.team_settings.team_row.managementMethod.anyoneCanJoin",defaultMessage:"Anyone Can Join"}):S.a.createElement(T.a,{id:"admin.team_settings.team_row.managementMethod.inviteOnly",defaultMessage:"Invite Only"})}),Zn(this,"render",()=>{const{team:e}=this.props,t=I.L(e);return S.a.createElement("div",{className:"group",onClick:this.handleRowClick},S.a.createElement("div",{className:"group-row group-row-large"},S.a.createElement("div",{className:"group-name adjusted center-row row-content"},S.a.createElement(hs.a,{size:"sm",url:t,name:e.display_name}),S.a.createElement("div",null,S.a.createElement("b",{"data-testid":"team-display-name"},e.display_name),e.description&&S.a.createElement("div",{className:"overflow--ellipsis text-nowrap team-descr-list-column"},e.description))),S.a.createElement("div",{className:"group-content"},S.a.createElement("span",{className:"group-description adjusted row-content"},this.renderManagementMethodText()),S.a.createElement("span",{"data-testid":"".concat(e.display_name,"edit"),className:"group-actions"},S.a.createElement(me.a,{to:"/admin_console/user_management/teams/".concat(e.id)},S.a.createElement(T.a,{id:"admin.team_settings.team_row.configure",defaultMessage:"Edit"}))))))})}}function er(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,s)}return a}function tr(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}Zn($n,"propTypes",{team:M.a.object.isRequired,onRowClick:M.a.func.isRequired});const ar=10;class sr extends S.a.PureComponent{constructor(e){super(e),tr(this,"previousPage",async e=>{e.preventDefault();const t=this.state.page<1?0:this.state.page-1;this.setState({page:t,loading:!0}),this.performSearch(t)}),tr(this,"nextPage",async e=>{e.preventDefault();const t=this.state.page+1;this.setState({page:t,loading:!0}),this.performSearch(t)}),tr(this,"renderRows",()=>{if(this.state.loading)return S.a.createElement("div",{className:"groups-list-loading"},S.a.createElement("i",{className:"fa fa-spinner fa-pulse fa-2x"}));if(0===this.props.data.length)return S.a.createElement("div",{className:"groups-list-empty"},S.a.createElement(T.a,{id:this.props.emptyListTextId,defaultMessage:this.props.emptyListTextDefaultMessage}));const e=this.state.page*ar;return this.props.data.slice(e,e+ar).map(this.props.renderRow)}),tr(this,"performSearch",e=>{const t=function(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?er(a,!0).forEach((function(t){tr(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):er(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}({},this.state);delete t.page,t.loading=!0,this.setState(t),this.props.actions.getData(e,ar).then(e=>{this.props.onPageChangedCallback&&this.props.onPageChangedCallback(this.getPaging(),e),this.setState({loading:!1})})}),tr(this,"render",()=>{const{startCount:e,endCount:t,total:a}=this.getPaging(),s=t===a,i=0===this.state.page;return S.a.createElement("div",{className:"groups-list groups-list-no-padding"},this.props.header,S.a.createElement("div",{id:"groups-list--body",className:"groups-list--body"},this.renderRows()),a>0&&S.a.createElement("div",{className:"groups-list--footer"},S.a.createElement("div",{className:"counter"},S.a.createElement(T.a,{id:"admin.team_channel_settings.list.paginatorCount",defaultMessage:"{startCount, number} - {endCount, number} of {total, number}",values:{startCount:e,endCount:t,total:a}})),S.a.createElement("button",{className:"btn btn-link prev "+(i?"disabled":""),onClick:i?null:this.previousPage,disabled:i},S.a.createElement(qi.a,null)),S.a.createElement("button",{className:"btn btn-link next "+(s?"disabled":""),onClick:s?null:this.nextPage,disabled:s,"data-testid":"page-link-next"},S.a.createElement(Ui.a,null))))}),this.state={loading:!0,page:0}}componentDidMount(){this.performSearch(this.state.page)}getPaging(){const e=this.state.page*ar+1;let t=this.state.page*ar+ar;const a=this.props.total;return t>a&&(t=a),{startCount:e,endCount:t,total:a}}}function ir(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}tr(sr,"propTypes",{data:M.a.arrayOf(M.a.object),onPageChangedCallback:M.a.func,total:M.a.number.isRequired,header:M.a.node.isRequired,renderRow:M.a.func.isRequired,emptyListTextId:M.a.string.isRequired,emptyListTextDefaultMessage:M.a.string.isRequired,actions:M.a.shape({getData:M.a.func.isRequired,removeGroup:M.a.func}).isRequired}),tr(sr,"defaultProps",{data:[]});class nr extends S.a.PureComponent{constructor(e){super(e),ir(this,"searchBar",()=>S.a.createElement("div",{className:"groups-list--global-actions"},S.a.createElement("div",{className:"group-list-search"},S.a.createElement("input",{type:"text",placeholder:I.gb("search_bar.search","Search"),onKeyUp:this.handleTeamSearchKeyUp,onChange:this.searchBarChangeHandler,value:this.state.searchString,"data-testid":"search-input"}),S.a.createElement(_n.a,{id:"searchIcon",className:"search__icon","aria-hidden":"true"}),S.a.createElement("i",{className:"fa fa-times-circle group-filter-action "+(this.state.searchString.length?"":"hidden"),onClick:this.resetSearch,"data-testid":"clear-search"})))),ir(this,"searchBarChangeHandler",e=>{this.setState({searchString:e.target.value})}),ir(this,"handleTeamSearchKeyUp",async e=>{const{key:t}=e,{searchString:a}=this.state;if(t===O.j.KeyCodes.ENTER[0]&&a.length>1){const e=await this.props.actions.searchTeams(a,0,ar);this.setState({searchMode:!0,teams:e.data.teams,searchTotalCount:e.data.total_count,pageResetKey:Date.now()})}0===a.length&&this.resetSearch()}),ir(this,"getDataBySearch",async(e,t)=>{if(this.state.searchString.length>1){const a=await this.props.actions.searchTeams(this.state.searchString,e,t);return new Array(e*t).concat(a.data.teams)}return[]}),ir(this,"resetSearch",()=>{this.setState({searchString:"",teams:[],searchMode:!1,searchTotalCount:0,pageResetKey:Date.now()})}),ir(this,"onPageChangedCallback",(e,t)=>{this.state.searchMode&&this.setState({teams:t})}),ir(this,"renderRow",e=>S.a.createElement($n,{key:e.id,team:e,onRowClick:this.onTeamClick})),ir(this,"onTeamClick",e=>{Ca.a.push("/admin_console/user_management/teams/".concat(e))}),this.state={searchString:"",teams:[],searchTotalCount:0,pageResetKey:0}}header(){return S.a.createElement(S.a.Fragment,null,this.searchBar(),S.a.createElement("div",{className:"groups-list--header"},S.a.createElement("div",{className:"group-name adjusted"},S.a.createElement(T.a,{id:"admin.team_settings.team_list.nameHeader",defaultMessage:"Name"})),S.a.createElement("div",{className:"group-content"},S.a.createElement("div",{className:"group-description adjusted"},S.a.createElement(T.a,{id:"admin.team_settings.team_list.mappingHeader",defaultMessage:"Management"})),S.a.createElement("div",{className:"group-actions"}))))}render(){const e=Object(y.cloneDeep)(this.props);return this.state.searchMode&&(e.actions.getData=this.getDataBySearch),S.a.createElement(sr,Object.assign({header:this.header(),renderRow:this.renderRow},e,{key:this.state.pageResetKey,onPageChangedCallback:this.onPageChangedCallback,data:this.state.searchMode?this.state.teams:this.props.data,total:this.state.searchMode?this.state.searchTotalCount:this.props.total}))}}ir(nr,"propTypes",{actions:M.a.shape({searchTeams:M.a.func.isRequired,getData:M.a.func.isRequired}).isRequired,data:M.a.array,total:M.a.number});const rr=Object(E.createSelector)(g.getTeams,e=>Object.values(e).sort((e,t)=>e.display_name.localeCompare(t.display_name)));var lr=Object(r.connect)((function(e){return{data:rr(e),total:e.entities.teams.totalCount||0,emptyListTextId:Object(C.b)("admin.team_settings.team_list.no_teams_found"),emptyListTextDefaultMessage:"No teams found"}}),(function(e){return{actions:Object(l.bindActionCreators)({getData:(e,t)=>Object(X.getTeams)(e,t,!0),searchTeams:X.searchTeams},e)}}))(nr);function or(e){return S.a.createElement("div",{className:"wrapper--fixed"},S.a.createElement("div",{className:"admin-console__header"},S.a.createElement(T.a,{id:"admin.team_settings.groupsPageTitle",defaultMessage:"{siteName} Teams",values:{siteName:e.siteName}})),S.a.createElement("div",{className:"admin-console__wrapper"},S.a.createElement("div",{className:"admin-console__content"},S.a.createElement(da,{id:"teams",titleId:Object(C.b)("admin.team_settings.title"),titleDefault:"Teams",subtitleId:Object(C.b)("admin.team_settings.description"),subtitleDefault:"Manage team settings."},S.a.createElement(lr,null)))))}or.propTypes={siteName:M.a.string.isRequired};var cr=Object(r.connect)((function(e){return{siteName:Object(u.getConfig)(e).SiteName}}))(or);class dr extends S.a.PureComponent{render(){const{amount:e,inChannel:t}=this.props,a=S.a.createElement(T.a,{id:"admin.team_channel_settings.removeConfirmModal.title",defaultMessage:"Save and remove {amount, number} {amount, plural, one {user} other {users}}?",values:{amount:e}}),s=t?Object(C.b)("admin.team_channel_settings.removeConfirmModal.messageGroup"):Object(C.b)("admin.team_channel_settings.removeConfirmModal.messageChannel"),i=S.a.createElement(T.a,{id:s,defaultMessage:t?"{amount, number} {amount, plural, one {user} other {users}} will be removed on the next AD/LDAP synchronization. They are not in groups linked to this channel. Are you sure you wish to remove these users?":"{amount, number} {amount, plural, one {user} other {users}} will be removed on the next AD/LDAP synchronization. They are not in groups linked to this group. Are you sure you wish to remove these users?",values:{amount:e}}),n=S.a.createElement(T.a,{id:"admin.team_channel_settings.removeConfirmModal.remove",defaultMessage:"Save and remove {amount, plural, one {user} other {users}}",values:{amount:e}}),{show:r,onConfirm:l,onCancel:o}=this.props;return S.a.createElement(be.a,{show:r,title:a,message:i,modalClass:"discard-changes-modal",confirmButtonClass:"btn btn-primary",confirmButtonText:n,onConfirm:l,onCancel:o})}}!function(e,t,a){t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a}(dr,"propTypes",{show:M.a.bool.isRequired,onConfirm:M.a.func.isRequired,onCancel:M.a.func.isRequired,inChannel:M.a.bool.isRequired,amount:M.a.number.isRequired});var mr=a(1225);function ur(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class pr extends S.a.PureComponent{constructor(...e){super(...e),ur(this,"renderRolesColumn",e=>e.roles.split(" ").map(e=>I.gb("admin.permissions.roles."+e+".name",e)).join(", ")),ur(this,"renderGroupsColumn",e=>{const t=e.groups||[];return 1===t.length?t[0].display_name:S.a.createElement(se.a,{placement:"top",overlay:S.a.createElement(ae.a,{id:"groupsTooltip"},t.map(e=>e.display_name).join(", "))},S.a.createElement("a",{href:"#"},S.a.createElement(T.a,{id:Object(C.b)("team_channel_settings.group.group_user_row.numberOfGroups"),defaultMessage:"{amount, number} {amount, plural, one {Group} other {Groups}}",values:{amount:t.length}})))}),ur(this,"render",()=>{const{user:e,lastPictureUpdate:t,displayName:a}=this.props;return S.a.createElement("div",{className:"group"},S.a.createElement("div",{className:"group-row roc",style:{padding:"30px 0px"}},S.a.createElement("div",{className:"group-name col-sm-8"},S.a.createElement("div",{className:"col-sm-2"},S.a.createElement(Ls.a,{username:e.username,url:Ft.Client4.getProfilePictureUrl(e.id,t),size:"lg"})),S.a.createElement("div",{className:"col-sm-10"},S.a.createElement("div",{className:"row"},S.a.createElement("b",null,"@"+e.username," "),"-"," ",a),S.a.createElement("div",{className:"row email-group-row"},e.email))),S.a.createElement("span",{className:"col-sm-2 group-user-removal-column group-description"},this.renderRolesColumn(e)),S.a.createElement("span",{className:"col-sm-2 group-user-removal-column group-description group-description-link"},this.renderGroupsColumn(e))))})}}function hr(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}ur(pr,"propTypes",{displayName:M.a.string.isRequired,user:M.a.any.isRequired,lastPictureUpdate:M.a.number.isRequired});const gr=10;class br extends S.a.PureComponent{constructor(...e){super(...e),hr(this,"state",{page:0}),hr(this,"previousPage",async()=>{const e=this.state.page<1?0:this.state.page-1;this.setState({page:e})}),hr(this,"nextPage",async()=>{const e=(this.state.page+1)*gr>=this.props.total?this.state.page:this.state.page+1;this.setState({page:e})}),hr(this,"renderRow",e=>S.a.createElement(pr,{key:e.id,user:e,displayName:e.first_name+" "+e.last_name,lastPictureUpdate:e.last_picture_update||0})),hr(this,"renderRows",()=>{const e=this.state.page*gr;return this.props.members.slice(e,e+gr).map(this.renderRow)}),hr(this,"renderPagination",()=>{const{page:e}=this.state,t=e*gr+1;let a=e*gr+gr;const s=this.props.total;a>s&&(a=s);const i=a===s,n=0===e;return S.a.createElement("div",{className:"groups-list--footer"},S.a.createElement("div",{className:"counter"},S.a.createElement(T.a,{id:"admin.team_channel_settings.list.paginatorCount",defaultMessage:"{startCount, number} - {endCount, number} of {total, number}",values:{startCount:t,endCount:a,total:s}})),S.a.createElement("button",{className:"btn btn-link prev "+(n?"disabled":""),onClick:this.previousPage,disabled:n},S.a.createElement(qi.a,null)),S.a.createElement("button",{className:"btn btn-link next "+(i?"disabled":""),onClick:this.nextPage,disabled:i},S.a.createElement(Ui.a,null)))}),hr(this,"render",()=>S.a.createElement("div",{className:"groups-list groups-list-less-padding"},S.a.createElement("div",{className:"groups-list--header"},S.a.createElement("div",{className:"group-name"},S.a.createElement(T.a,{id:"admin.team_channel_settings.user_list.nameHeader",defaultMessage:"Name"})),S.a.createElement("div",{className:"group-content"},S.a.createElement("div",{className:"group-description group-users--header-padded"},S.a.createElement(T.a,{id:"admin.team_channel_settings.user_list.roleHeader",defaultMessage:"Role"})),S.a.createElement("div",{className:"group-description group-users--header-padded"},S.a.createElement(T.a,{id:"admin.team_channel_settings.user_list.groupsHeader",defaultMessage:"Groups"})))),S.a.createElement("div",{className:"groups-list--body"},this.renderRows()),this.renderPagination()))}}function fr(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}hr(br,"propTypes",{members:M.a.oneOfType([M.a.any,M.a.arrayOf(M.a.shape({last_picture_update:M.a.number}))]).isRequired,total:M.a.number.isRequired});class _r extends S.a.PureComponent{constructor(e){super(e),fr(this,"handleHide",()=>{this.setState({show:!1})}),fr(this,"handleExit",()=>{this.props.onHide&&this.props.onHide()}),this.state={values:[],show:!0}}render(){const{users:e,total:t}=this.props,a=S.a.createElement(j.b,{id:"admin.team_channel_settings.usersToBeRemovedModal.title",defaultMessage:"**{total, number} {total, plural, one {User} other {Users}}** To Be Removed",values:{total:t}}),s=S.a.createElement(T.a,{id:"admin.team_channel_settings.usersToBeRemovedModal.message",defaultMessage:"The members listed below are not in any of the groups currently linked to this team. Because this team is set to be managed by group sync they will all be removed once saved."}),i=S.a.createElement(T.a,{id:"admin.team_channel_settings.usersToBeRemovedModal.close",defaultMessage:"Close"});return S.a.createElement(Xa.a,{dialogClassName:"a11y__modal settings-modal",show:this.state.show,onHide:this.handleHide,onExited:this.handleExit,id:"confirmModal",role:"dialog","aria-labelledby":"confirmModalLabel"},S.a.createElement(Xa.a.Header,{closeButton:!0},S.a.createElement(Xa.a.Title,{componentClass:"h1",id:"confirmModalLabel"},a)),S.a.createElement(Xa.a.Body,null,S.a.createElement("div",{className:"group-users-to-remove-modal-description"},s),S.a.createElement(br,{members:e,total:t})),S.a.createElement(Xa.a.Footer,null,S.a.createElement("button",{autoFocus:!0,type:"button",className:"btn btn-primary",onClick:this.handleHide,id:"closeModalButton"},i)))}}fr(_r,"propTypes",{total:M.a.number.isRequired,users:M.a.arrayOf(M.a.object).isRequired,onHide:M.a.func});const Er=({warning:e})=>S.a.createElement(Ee.a,{iconClassName:"fa-exclamation-".concat(e?"circle":"triangle"),textClassName:"has-".concat(e?"warning":"error"),error:S.a.createElement(T.a,{id:"admin.team_channel_settings.need_groups",defaultMessage:"You must add at least one group to manage this team by sync group members."})}),yr=()=>S.a.createElement(Ee.a,{error:S.a.createElement(T.a,{id:"admin.team_channel_settings.need_domains",defaultMessage:"Please specify emails domains."})});Er.propTypes={warning:x.bool};class vr extends S.a.PureComponent{render(){const{total:e,users:t}=this.props;return S.a.createElement(Ee.a,{iconClassName:"fa-exclamation-triangle",textClassName:"has-warning",error:S.a.createElement("span",null,S.a.createElement(T.a,{id:"admin.team_channel_settings.users_will_be_removed",defaultMessage:"{amount, number} {amount, plural, one {User} other {Users}} will be removed from this team. They are not in groups linked to this team.",values:{amount:e}}),S.a.createElement(mr.a,{className:"btn btn-link",dialogType:_r,dialogProps:{total:e,users:t}},S.a.createElement(T.a,{id:"admin.team_channel_settings.view_removed_users",defaultMessage:"View These Users"})))})}}function Sr({saveNeeded:e,onClick:t,saving:a,serverError:s,cancelLink:i}){return S.a.createElement("div",{className:"admin-console-save"},S.a.createElement(_e.a,{saving:a,disabled:!e,onClick:t,savingMessage:Object(I.gb)("admin.team_channel_settings.saving","Saving Config...")}),S.a.createElement(Pa,{className:"cancel-button",to:i},S.a.createElement(T.a,{id:"admin.team_channel_settings.cancel",defaultMessage:"Cancel"})),S.a.createElement("div",{className:"error-message"},s))}function Tr({team:e}){const t=I.L(e);return S.a.createElement(da,{id:"team_profile",titleId:Object(C.b)("admin.team_settings.team_detail.profileTitle"),titleDefault:"Team Profile",subtitleId:Object(C.b)("admin.team_settings.team_detail.profileDescription"),subtitleDefault:"Summary of the team, including team name and description."},S.a.createElement("div",{className:"group-teams-and-channels"},S.a.createElement("div",{className:"group-teams-and-channels--body"},S.a.createElement("div",{className:"row"},S.a.createElement("div",{className:"col-sm-2 large-team-image-col"},S.a.createElement(hs.a,{name:e.display_name,size:"lg",url:t})),S.a.createElement("div",{className:"col-sm-10"},S.a.createElement("div",{className:"row row-bottom-padding"},S.a.createElement(j.b,{id:"admin.team_settings.team_detail.teamName",defaultMessage:"**Team Name**:"}),S.a.createElement("br",null),e.display_name),S.a.createElement("div",{className:"row"},S.a.createElement(j.b,{id:"admin.team_settings.team_detail.teamDescription",defaultMessage:"**Team Description**:"}),S.a.createElement("br",null),e.description||S.a.createElement("span",{className:"greyed-out"},I.gb("admin.team_settings.team_detail.profileNoDescription","No team description added."))))))))}!function(e,t,a){t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a}(vr,"propTypes",{users:x.arrayOf(x.object).isRequired,total:x.number.isRequired}),Sr.propTypes={saving:M.a.bool.isRequired,saveNeeded:M.a.bool.isRequired,onClick:M.a.func.isRequired,cancelLink:M.a.string.isRequired,serverError:M.a.node},Tr.propTypes={team:M.a.object.isRequired};const Or=e=>{const{onToggle:t,toggled:a,disabled:s,onText:i,offText:n}=e;return S.a.createElement("button",{type:"button",onClick:t,className:"btn btn-lg btn-toggle ".concat(a&&"active"," ").concat(s&&"disabled"),"aria-pressed":a?"true":"false"},S.a.createElement("div",{className:"handle"}),function(e,t,a){if(e&&!t||!e&&!a)return null;return S.a.createElement("div",{className:"bg-text ".concat(e?"on":"off")},e?t:a)}(a,i,n))};Or.propTypes={onToggle:M.a.func.isRequired,toggled:M.a.bool,disabled:M.a.bool,onText:M.a.node,offText:M.a.node};var wr=Or;class Cr extends S.a.PureComponent{render(){const{title:e,subTitle:t,singleLine:a,toggled:s,onToggle:i,children:n,offText:r,onText:l,disabled:o,last:c}=this.props;return S.a.createElement("div",null,S.a.createElement("div",{className:"line-switch d-flex flex-sm-column flex-md-row align-items-sm-start align-items-center justify-content-md-between"},S.a.createElement("label",{className:"line-switch__label"},e),S.a.createElement("div",{className:"line-switch__toggle"},S.a.createElement(wr,{disabled:o,onToggle:i,toggled:s,onText:l,offText:r}))),S.a.createElement("div",{className:"row"},S.a.createElement("div",{className:"col-sm-10"},S.a.createElement("div",{className:"help-text-small help-text-no-padding ".concat(a?"help-text-single-line":"")},t))),n,!c&&S.a.createElement("div",{className:"section-separator"},S.a.createElement("hr",{className:"separator__hr"})))}}!function(e,t,a){t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a}(Cr,"propTypes",{title:M.a.node.isRequired,last:M.a.bool,toggled:M.a.bool.isRequired,disabled:M.a.bool,singleLine:M.a.bool,subTitle:M.a.node.isRequired,onToggle:M.a.func.isRequired,children:M.a.node,offText:M.a.node,onText:M.a.node});const xr=({syncChecked:e,allAllowedChecked:t,allowedDomainsChecked:a,allowedDomains:s,onToggle:i})=>S.a.createElement(Cr,{toggled:e,last:e,onToggle:()=>i(!e,t,a,s),title:S.a.createElement(T.a,{id:"admin.team_settings.team_details.syncGroupMembers",defaultMessage:"Sync Group Members"}),subTitle:S.a.createElement(j.b,{id:"admin.team_settings.team_details.syncGroupMembersDescr",defaultMessage:"When enabled, adding and removing users from groups will add or remove them from this team. The only way of inviting members to this team is by adding the groups they belong to. [Learn More](!https://www.mattermost.com/pl/default-ldap-group-constrained-team-channel.html)"})});xr.propTypes={syncChecked:M.a.bool.isRequired,allAllowedChecked:M.a.bool.isRequired,allowedDomainsChecked:M.a.bool.isRequired,allowedDomains:M.a.string.isRequired,onToggle:M.a.func.isRequired};const Mr=({syncChecked:e,allAllowedChecked:t,allowedDomainsChecked:a,allowedDomains:s,onToggle:i})=>!e&&S.a.createElement(Cr,{toggled:t,singleLine:!0,onToggle:()=>i(e,!t,a,s),title:S.a.createElement(T.a,{id:"admin.team_settings.team_details.anyoneCanJoin",defaultMessage:"Anyone can join this team"}),subTitle:S.a.createElement(T.a,{id:"admin.team_settings.team_details.anyoneCanJoinDescr",defaultMessage:"This team can be discovered allowing anyone with an account to join this team."})});Mr.propTypes={syncChecked:M.a.bool.isRequired,allAllowedChecked:M.a.bool.isRequired,allowedDomainsChecked:M.a.bool.isRequired,allowedDomains:M.a.string.isRequired,onToggle:M.a.func.isRequired};const jr=({syncChecked:e,allAllowedChecked:t,allowedDomainsChecked:a,allowedDomains:s,onToggle:i})=>!e&&S.a.createElement(Cr,{toggled:a,last:!0,onToggle:()=>i(e,t,!a,s),singleLine:!0,title:S.a.createElement(T.a,{id:"admin.team_settings.team_details.specificDomains",defaultMessage:"Only specific email domains can join this team"}),subTitle:S.a.createElement(T.a,{id:"admin.team_settings.team_details.specificDomainsDescr",defaultMessage:"Users can only join the team if their email matches one of the specified domains"})},S.a.createElement("div",{className:"help-text csvDomains"},S.a.createElement(T.a,{id:"admin.team_settings.team_details.csvDomains",defaultMessage:"Comma Separated Email Domain List"})),S.a.createElement("input",{type:"text",value:s,placeholder:"mattermost.org",className:"form-control",onChange:s=>i(e,t,a,s.currentTarget.value)}));jr.propTypes={syncChecked:M.a.bool.isRequired,allAllowedChecked:M.a.bool.isRequired,allowedDomainsChecked:M.a.bool.isRequired,allowedDomains:M.a.string.isRequired,onToggle:M.a.func.isRequired};const Pr=({allAllowedChecked:e,syncChecked:t,allowedDomains:a,allowedDomainsChecked:s,onToggle:i})=>S.a.createElement(da,{id:"team_manage",titleId:Object(C.b)("admin.team_settings.team_detail.manageTitle"),titleDefault:"Team Management",subtitleId:Object(C.b)("admin.team_settings.team_detail.manageDescription"),subtitleDefault:"Choose between inviting members manually or syncing members automatically from groups."},S.a.createElement("div",{className:"group-teams-and-channels"},S.a.createElement("div",{className:"group-teams-and-channels--body"},S.a.createElement(xr,{allAllowedChecked:e,allowedDomainsChecked:s,allowedDomains:a,syncChecked:t,onToggle:i}),S.a.createElement(Mr,{allAllowedChecked:e,allowedDomainsChecked:s,allowedDomains:a,syncChecked:t,onToggle:i}),S.a.createElement(jr,{allAllowedChecked:e,allowedDomainsChecked:s,allowedDomains:a,syncChecked:t,onToggle:i}))));Pr.propTypes={syncChecked:M.a.bool.isRequired,allAllowedChecked:M.a.bool.isRequired,allowedDomainsChecked:M.a.bool.isRequired,onToggle:M.a.func.isRequired,allowedDomains:M.a.string.isRequired};var Ar=a(1272);function kr(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class Rr extends S.a.Component{constructor(...e){super(...e),kr(this,"removeGroup",()=>{this.props.removeGroup(this.props.group.id)}),kr(this,"setNewGroupRole",()=>{this.props.setNewGroupRole(this.props.group.id)}),kr(this,"displayCurrentRole",()=>{const{group:e,type:t}=this.props,a=S.a.createElement(T.a,{id:"admin.team_channel_settings.group_row.channelAdmin",defaultMessage:"Channel Admin"}),s=S.a.createElement(T.a,{id:"admin.team_channel_settings.group_row.teamAdmin",defaultMessage:"Team Admin"}),i=S.a.createElement(T.a,{id:"admin.team_channel_settings.group_row.member",defaultMessage:"Member"});return e.scheme_admin&&"channel"===t?a:e.scheme_admin&&"team"===t?s:i}),kr(this,"displayRoleToBe",()=>{const{group:e,type:t}=this.props;return e.scheme_admin||"channel"!==t?e.scheme_admin||"team"!==t?Object(I.gb)("admin.team_channel_settings.group_row.member","Member"):Object(I.gb)("admin.team_channel_settings.group_row.teamAdmin","Team Admin"):Object(I.gb)("admin.team_channel_settings.group_row.channelAdmin","Channel Admin")}),kr(this,"render",()=>{const{group:e}=this.props;return S.a.createElement("div",{id:"group",className:"group"},S.a.createElement("div",{id:"group-row",className:"group-row"},S.a.createElement("span",{className:"group-name row-content"},e.display_name||e.name),S.a.createElement("span",{className:"group-description row-content"},S.a.createElement(T.a,{id:"admin.team_channel_settings.group_row.members",defaultMessage:"{memberCount, number} {memberCount, plural, one {member} other {members}}",values:{memberCount:e.member_count}})),S.a.createElement("div",{className:"group-description row-content roles"},S.a.createElement(Gs.a,null,S.a.createElement("div",null,S.a.createElement("a",{"data-testid":"current-role"},S.a.createElement("span",null,this.displayCurrentRole()),S.a.createElement("span",{className:"caret"}))),S.a.createElement(Hs.a,{id:"role-to-be-menu",openLeft:!0,openUp:!1,ariaLabel:Object(I.gb)("admin.team_channel_settings.group_row.memberRole","Member Role")},S.a.createElement(Hs.a.ItemAction,{id:"role-to-be",onClick:this.setNewGroupRole,text:this.displayRoleToBe()})))),S.a.createElement("span",{id:"group-actions",className:"group-actions"},S.a.createElement("a",{href:"#",onClick:this.removeGroup},S.a.createElement(T.a,{id:"admin.team_channel_settings.group_row.remove",defaultMessage:"Remove"})))))})}}function Nr(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}kr(Rr,"propTypes",{group:M.a.any.isRequired,removeGroup:M.a.func.isRequired,key:M.a.string,setNewGroupRole:M.a.func.isRequired,type:M.a.string.isRequired});const Dr=()=>S.a.createElement("div",{className:"groups-list--header"},S.a.createElement("div",{className:"group-name group-name-adjusted"},S.a.createElement(T.a,{id:"admin.team_channel_settings.group_list.nameHeader",defaultMessage:"Name"})),S.a.createElement("div",{className:"group-content"},S.a.createElement("div",{className:"group-description group-description-adjusted"},S.a.createElement(T.a,{id:"admin.team_channel_settings.group_list.membersHeader",defaultMessage:"Member Count"})),S.a.createElement("div",{className:"group-description group-description-adjusted"},S.a.createElement(T.a,{id:"admin.team_channel_settings.group_list.rolesHeader",defaultMessage:"Roles"})),S.a.createElement("div",{className:"group-actions"})));class Lr extends S.a.PureComponent{constructor(...e){super(...e),Nr(this,"renderRow",e=>S.a.createElement(Rr,{key:e.id,group:e,removeGroup:this.props.removeGroup,setNewGroupRole:this.props.setNewGroupRole,type:this.props.type}))}render(){return S.a.createElement(sr,Object.assign({header:S.a.createElement(Dr,null),renderRow:this.renderRow},this.props))}}Nr(Lr,"propTypes",{data:M.a.arrayOf(M.a.any),onPageChangedCallback:M.a.func.isRequired,total:M.a.number.isRequired,emptyListTextId:M.a.string.isRequired,emptyListTextDefaultMessage:M.a.string.isRequired,actions:M.a.shape({getData:M.a.func.isRequired}).isRequired,removeGroup:M.a.func.isRequired,setNewGroupRole:M.a.func.isRequired,type:M.a.string.isRequired});var Ir=Object(r.connect)((function(e,{groups:t,totalGroups:a,isModeSync:s,onGroupRemoved:i,setNewGroupRole:n}){return{data:t,removeGroup:i,setNewGroupRole:n,emptyListTextId:s?Object(C.b)("admin.team_channel_settings.group_list.no-synced-groups"):Object(C.b)("admin.team_channel_settings.group_list.no-groups"),emptyListTextDefaultMessage:s?"At least one group must be specified":"No groups specified yet",total:a}}),(function(){return{actions:{getData:()=>Promise.resolve()}}}))(Lr);const Ur=({onGroupRemoved:e,syncChecked:t,team:a,onAddCallback:s,totalGroups:i,groups:n,removedGroups:r,setNewGroupRole:l})=>S.a.createElement(da,{id:"team_groups",titleId:t?Object(C.b)("admin.team_settings.team_detail.syncedGroupsTitle"):Object(C.b)("admin.team_settings.team_detail.groupsTitle"),titleDefault:t?"Synced Groups":"Groups",subtitleId:t?Object(C.b)("admin.team_settings.team_detail.syncedGroupsDescription"):Object(C.b)("admin.team_settings.team_detail.groupsDescription"),subtitleDefault:t?"Add and remove team members based on their group membership.":"Group members will be added to the team.",button:S.a.createElement(mr.a,{className:"btn btn-primary",dialogType:Ar.a,dialogProps:{team:a,onAddCallback:s,skipCommit:!0,excludeGroups:n,includeGroups:r}},S.a.createElement(T.a,{id:"admin.team_settings.team_details.add_group",defaultMessage:"Add Group"}))},S.a.createElement(Ir,{team:a,isModeSync:t,groups:n,totalGroups:i,onGroupRemoved:e,setNewGroupRole:l,type:"team"}));function qr(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,s)}return a}function Br(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}Ur.propTypes={syncChecked:M.a.bool.isRequired,team:M.a.object.isRequired,totalGroups:M.a.number.isRequired,groups:M.a.arrayOf(M.a.object).isRequired,removedGroups:M.a.arrayOf(M.a.object).isRequired,onAddCallback:M.a.func.isRequired,onGroupRemoved:M.a.func.isRequired,setNewGroupRole:M.a.func.isRequired};class Fr extends S.a.Component{constructor(e){super(e),Br(this,"setNewGroupRole",e=>{const t=Object(y.cloneDeep)(this.state.groups).map(t=>(t.id===e&&(t.scheme_admin=!t.scheme_admin),t));this.processGroupsChange(t)}),Br(this,"handleSubmit",async()=>{this.setState({showRemoveConfirmation:!1,saving:!0});const{groups:e,allAllowedChecked:t,allowedDomainsChecked:a,allowedDomains:s,syncChecked:i}=this.state;let n=null,r=!1;const{team:l,groups:o,teamID:c,actions:d}=this.props;if(a&&0===s.trim().length)r=!0,n=S.a.createElement(yr,null);else if(0===this.state.groups.length&&i)n=S.a.createElement(Er,null),r=!0;else{const r=d.patchTeam(function(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?qr(a,!0).forEach((function(t){Br(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):qr(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}({},l,{group_constrained:i,allowed_domains:a?s:"",allow_open_invite:t})),m=e.filter(e=>o.some(t=>t.id===e.id&&t.scheme_admin!==e.scheme_admin)).map(e=>d.patchGroupSyncable(e.id,c,b.Groups.SYNCABLE_TYPE_TEAM,{scheme_admin:e.scheme_admin})),u=o.filter(t=>!e.some(e=>e.id===t.id)).map(e=>d.unlinkGroupSyncable(e.id,c,b.Groups.SYNCABLE_TYPE_TEAM)),p=e.filter(e=>!o.some(t=>t.id===e.id)).map(e=>d.linkGroupSyncable(e.id,c,b.Groups.SYNCABLE_TYPE_TEAM,{auto_add:!0,scheme_admin:e.scheme_admin})),h=(await Promise.all([r,...m,...u,...p])).find(e=>e.error);h?n=S.a.createElement(Ee.a,{error:h.error.message}):await d.getGroups(c)}this.setState({serverError:n,saving:!1,saveNeeded:r}),d.setNavigationBlocked(r)}),Br(this,"setToggles",(e,t,a,s)=>{this.setState({saveNeeded:!0,syncChecked:e,allAllowedChecked:!e&&t,allowedDomainsChecked:!e&&a,allowedDomains:s},()=>this.processGroupsChange(this.state.groups)),this.props.actions.setNavigationBlocked(!0)}),Br(this,"handleGroupRemoved",e=>{const t=this.state.groups.filter(t=>t.id!==e);this.setState({totalGroups:this.state.totalGroups-1}),this.processGroupsChange(t)}),Br(this,"handleGroupChange",e=>{const t=[...this.state.groups,...e.map(e=>this.props.allGroups[e])];this.setState({totalGroups:this.state.totalGroups+e.length}),this.processGroupsChange(t)}),Br(this,"hideRemoveUsersModal",()=>{this.setState({showRemoveConfirmation:!1})}),Br(this,"showRemoveUsersModal",()=>{this.state.usersToRemove>0?this.setState({showRemoveConfirmation:!0}):this.handleSubmit()}),Br(this,"render",()=>{const{team:e}=this.props,{totalGroups:t,saving:a,saveNeeded:s,serverError:i,groups:n,allAllowedChecked:r,allowedDomainsChecked:l,allowedDomains:o,syncChecked:c,showRemoveConfirmation:d,usersToRemove:m}=this.state,u=this.props.groups.filter(e=>!n.find(t=>t.id===e.id));return S.a.createElement("div",{className:"wrapper--fixed"},S.a.createElement("div",{className:"admin-console__header with-back"},S.a.createElement("div",null,S.a.createElement(Pa,{to:"/admin_console/user_management/teams",className:"fa fa-angle-left back"}),S.a.createElement(T.a,{id:"admin.team_settings.team_detail.group_configuration",defaultMessage:"Team Configuration"}))),S.a.createElement("div",{className:"admin-console__wrapper"},S.a.createElement("div",{className:"admin-console__content"},S.a.createElement(dr,{amount:m,inChannel:!1,show:d,onCancel:this.hideRemoveUsersModal,onConfirm:this.handleSubmit}),S.a.createElement(Tr,{team:e}),S.a.createElement(Pr,{allAllowedChecked:r,allowedDomainsChecked:l,allowedDomains:o,syncChecked:c,onToggle:this.setToggles}),S.a.createElement(Ur,{syncChecked:c,team:e,groups:n,removedGroups:u,totalGroups:t,onAddCallback:this.handleGroupChange,onGroupRemoved:this.handleGroupRemoved,setNewGroupRole:this.setNewGroupRole}))),S.a.createElement(Sr,{saving:a,cancelLink:"/admin_console/user_management/teams",saveNeeded:s,onClick:this.showRemoveUsersModal,serverError:i}))});const t=e.team;this.state={groups:e.groups,syncChecked:Boolean(t.group_constrained),allAllowedChecked:t.allow_open_invite,allowedDomainsChecked:Boolean(t.allowed_domains&&""!==t.allowed_domains),allowedDomains:t.allowed_domains||"",saving:!1,showRemoveConfirmation:!1,usersToRemove:0,totalGroups:e.totalGroups,saveNeeded:!1,serverError:null}}componentDidUpdate(e){const{totalGroups:t,team:a}=this.props;e.team.id===a.id&&t===e.totalGroups||this.setState({totalGroups:t,syncChecked:Boolean(a.group_constrained),allAllowedChecked:a.allow_open_invite,allowedDomainsChecked:Boolean(a.allowed_domains&&""!==a.allowed_domains),allowedDomains:a.allowed_domains||""})}componentDidMount(){const{teamID:e,actions:t}=this.props;t.getTeam(e).then(()=>t.getGroups(e)).then(()=>this.setState({groups:this.props.groups}))}async processGroupsChange(e){const{teamID:t,actions:a}=this.props;a.setNavigationBlocked(!0);let s=null,i=0;if(this.state.syncChecked)try{if(0===e.length)s=S.a.createElement(Er,{warning:!0});else{const n=await a.membersMinusGroupMembers(t,e.map(e=>e.id));(i=n.data.total_count)>0&&(s=S.a.createElement(vr,{total:i,users:n.data.users}))}}catch(e){s=e}this.setState({groups:e,usersToRemove:i,saveNeeded:!0,serverError:s})}}Br(Fr,"propTypes",{teamID:M.a.string.isRequired,team:M.a.object.isRequired,totalGroups:M.a.number.isRequired,groups:M.a.arrayOf(M.a.object),allGroups:M.a.object.isRequired,actions:M.a.shape({setNavigationBlocked:M.a.func.isRequired,getTeam:M.a.func.isRequired,linkGroupSyncable:M.a.func.isRequired,unlinkGroupSyncable:M.a.func.isRequired,membersMinusGroupMembers:M.a.func.isRequired,getGroups:M.a.func.isRequired,patchTeam:M.a.func.isRequired,patchGroupSyncable:M.a.func.isRequired}).isRequired}),Br(Fr,"defaultProps",{team:{display_name:"",id:""}});var Gr=Object(r.connect)((function(e,t){const a=t.match.params.team_id,s=Object(g.getTeam)(e,a),i=Object(jn.getGroupsAssociatedToTeam)(e,a),n=Object(jn.getAllGroups)(e,a);return{team:s,groups:i,totalGroups:i.length,allGroups:n,teamID:a}}),(function(e){return{actions:Object(l.bindActionCreators)({getTeam:X.getTeam,getGroups:Mn.getGroupsAssociatedToTeam,patchTeam:X.patchTeam,linkGroupSyncable:Mn.linkGroupSyncable,unlinkGroupSyncable:Mn.unlinkGroupSyncable,membersMinusGroupMembers:X.membersMinusGroupMembers,setNavigationBlocked:f.F,patchGroupSyncable:Mn.patchGroupSyncable},e)}}))(Fr),Hr=a(13);function Yr(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class Wr extends S.a.Component{constructor(...e){super(...e),Yr(this,"handleRowClick",()=>{const{channel:e,onRowClick:t}=this.props;t(e.id)})}render(){const{channel:e}=this.props;return S.a.createElement("div",{className:"group",onClick:this.handleRowClick},S.a.createElement("div",{className:"group-row"},S.a.createElement("span",{className:"group-name overflow--ellipsis row-content","data-testid":"channel-display-name"},e.type===O.j.PRIVATE_CHANNEL?S.a.createElement(Rn.a,{className:"channel-icon channel-icon__lock"}):S.a.createElement(kn.a,{className:"channel-icon channel-icon__globe"}),e.display_name),S.a.createElement("span",{className:"group-description row-content"},e.team_display_name),S.a.createElement("span",{className:"group-description adjusted row-content"},S.a.createElement(T.a,{id:"admin.channel_settings.channel_row.managementMethod.".concat(e.group_constrained?"group":"manual"),defaultMessage:e.group_constrained?"Group Sync":"Manual Invites"})),S.a.createElement("span",{className:"group-actions","data-testid":"".concat(e.display_name,"edit")},S.a.createElement(me.a,{to:"/admin_console/user_management/channels/".concat(e.id)},S.a.createElement(T.a,{id:"admin.channel_settings.channel_row.configure",defaultMessage:"Edit"})))))}}function zr(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,s)}return a}function Vr(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}Yr(Wr,"propTypes",{channel:M.a.any.isRequired,onRowClick:M.a.func.isRequired});class Xr extends S.a.PureComponent{constructor(e){super(e),Vr(this,"searchBar",()=>S.a.createElement("div",{className:"groups-list--global-actions"},S.a.createElement("div",{className:"group-list-search"},S.a.createElement("input",{type:"text",placeholder:I.gb("search_bar.search","Search"),onKeyUp:this.handleChannelSearchKeyUp,onChange:this.searchBarChangeHandler,value:this.state.searchString,"data-testid":"search-input"}),S.a.createElement(_n.a,{id:"searchIcon",className:"search__icon","aria-hidden":"true"}),S.a.createElement("i",{className:"fa fa-times-circle group-filter-action "+(this.state.searchString.length?"":"hidden"),onClick:this.resetSearch,"data-testid":"clear-search"})))),Vr(this,"searchBarChangeHandler",e=>{this.setState({searchString:e.target.value})}),Vr(this,"handleChannelSearchKeyUp",async e=>{const{key:t}=e,{searchString:a}=this.state;if(t===O.j.KeyCodes.ENTER[0]&&a.length>1){const e=await this.props.actions.searchAllChannels(a,"",!1,0,ar);"data"in e&&this.setState({searchMode:!0,channels:e.data.channels,searchTotalCount:e.data.total_count,pageResetKey:Date.now()})}0===a.length&&this.resetSearch()}),Vr(this,"getDataBySearch",async(e,t,a,s)=>{const i=await this.props.actions.searchAllChannels(this.state.searchString,"",!1,e,t),n=new Array(e*t);return"data"in i?n.concat(i.data.channels):[]}),Vr(this,"resetSearch",()=>{this.setState({searchString:"",channels:[],searchMode:!1,searchTotalCount:0,pageResetKey:Date.now()})}),Vr(this,"onPageChangedCallback",(e,t)=>{this.state.searchMode&&this.setState({channels:t})}),Vr(this,"renderRow",e=>S.a.createElement(Wr,{key:e.id,channel:e,onRowClick:this.onChannelClick})),Vr(this,"onChannelClick",e=>{Ca.a.push("/admin_console/user_management/channels/".concat(e))}),this.state={searchString:"",channels:[],searchTotalCount:0,pageResetKey:0,searchMode:!1}}header(){return S.a.createElement(S.a.Fragment,null,this.searchBar(),S.a.createElement("div",{className:"groups-list--header"},S.a.createElement("div",{className:"group-name adjusted"},S.a.createElement(T.a,{id:"admin.channel_settings.channel_list.nameHeader",defaultMessage:"Name"})),S.a.createElement("div",{className:"group-content"},S.a.createElement("div",{className:"group-description"},S.a.createElement(T.a,{id:"admin.channel_settings.channel_list.teamHeader",defaultMessage:"Team"})),S.a.createElement("div",{className:"group-description adjusted"},S.a.createElement(T.a,{id:"admin.channel_settings.channel_list.managementHeader",defaultMessage:"Management"})),S.a.createElement("div",{className:"group-actions"}))))}render(){const e=function(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?zr(a,!0).forEach((function(t){Vr(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):zr(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}({},this.props);return this.state.searchMode&&(e.actions.getData=this.getDataBySearch),S.a.createElement(sr,Object.assign({header:this.header(),renderRow:this.renderRow},e,{key:this.state.pageResetKey,onPageChangedCallback:this.onPageChangedCallback,data:this.state.searchMode?this.state.channels:this.props.data,total:this.state.searchMode?this.state.searchTotalCount:this.props.total}))}}Vr(Xr,"propTypes",{actions:M.a.shape({searchAllChannels:M.a.func.isRequired,getData:M.a.func.isRequired}).isRequired,data:M.a.arrayOf(M.a.shape({id:M.a.string.isRequired,display_name:M.a.string.isRequired})),total:M.a.number,removeGroup:M.a.func,onPageChangedCallback:M.a.func,emptyListTextId:M.a.string,emptyListTextDefaultMessage:M.a.string});const Jr=(e,t)=>e.display_name.localeCompare(t.display_name),Kr=Object(E.createSelector)(Hr.getAllChannels,e=>Object.values(e).filter(e=>(e.type===O.j.OPEN_CHANNEL||e.type===O.j.PRIVATE_CHANNEL)&&0===e.delete_at).sort(Jr));var Qr=Object(r.connect)((function(e){return{data:Kr(e),total:e.entities.channels.totalCount,emptyListTextId:Object(C.b)("admin.channel_settings.channel_list.no_channels_found"),emptyListTextDefaultMessage:"No channels found"}}),(function(e){return{actions:Object(l.bindActionCreators)({getData:Yn.getAllChannelsWithCount,searchAllChannels:Yn.searchAllChannels},e)}}))(Xr);function Zr(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,s)}return a}function $r(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?Zr(a,!0).forEach((function(t){el(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):Zr(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function el(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class tl extends S.a.Component{constructor(e){super(e),el(this,"onPageChangedCallback",({startCount:e,endCount:t,total:a})=>{this.setState({startCount:e,endCount:t,total:a})}),el(this,"render",()=>S.a.createElement("div",{className:"wrapper--fixed"},S.a.createElement("div",{className:"admin-console__header"},S.a.createElement(T.a,{id:"admin.channel_settings.groupsPageTitle",defaultMessage:"{siteName} Channels",values:{siteName:this.props.siteName}})),S.a.createElement("div",{className:"admin-console__wrapper"},S.a.createElement("div",{className:"admin-console__content"},S.a.createElement(da,{id:"channels",titleId:Object(C.b)("admin.channel_settings.title"),titleDefault:"Channels",subtitleId:Object(C.b)("admin.channel_settings.description"),subtitleDefault:"Manage channel settings.",subtitleValues:$r({},this.state)},S.a.createElement(Qr,{onPageChangedCallback:this.onPageChangedCallback})))))),this.state={startCount:0,endCount:1,total:0}}}el(tl,"propTypes",{siteName:M.a.string.isRequired});var al=Object(r.connect)((function(e){return{siteName:Object(u.getConfig)(e).SiteName}}))(tl);class sl extends S.a.PureComponent{render(){const{displayName:e,toPublic:t}=this.props,a=t?Object(C.b)("admin.team_channel_settings.convertConfirmModal.toPublicMessage"):Object(C.b)("admin.team_channel_settings.convertConfirmModal.toPrivateMessage"),s=t?Object(C.b)("admin.team_channel_settings.convertConfirmModal.toPublicTitle"):Object(C.b)("admin.team_channel_settings.convertConfirmModal.toPrivateTitle"),i=t?Object(C.b)("admin.team_channel_settings.convertConfirmModal.toPublicConfirm"):Object(C.b)("admin.team_channel_settings.convertConfirmModal.toPrivateConfirm"),n=S.a.createElement(T.a,{id:s,defaultMessage:t?"Convert {displayName} to a public channel?":"Convert {displayName} to a private channel?",values:{displayName:e}}),r=S.a.createElement(j.b,{id:a,defaultMessage:t?"When you convert **{displayName}** to a public channel, history and membership are preserved. Public channels are discoverable and can by joined by users on the system without invitation. \n \nAre you sure you want to convert **{displayName}** to a public channel?":"When you convert **{displayName}** to a private channel, history and membership are preserved. Publicly shared files remain accessible to anyone with the link. Membership in a private channel is by invitation only. \n \nAre you sure you want to convert **{displayName}** to a private channel?",values:{displayName:e}}),l=S.a.createElement(T.a,{id:i,defaultMessage:t?"Yes, convert to public channel":"Yes, convert to private channel"}),o=S.a.createElement(T.a,{id:"admin.team_channel_settings.convertConfirmModal.cancel",defaultMessage:"No, cancel"}),{show:c,onConfirm:d,onCancel:m}=this.props;return S.a.createElement(be.a,{show:c,title:n,message:r,modalClass:"discard-changes-modal",confirmButtonClass:"btn btn-primary",confirmButtonText:l,cancelButtonClass:"bnt bnt-link",cancelButtonText:o,onConfirm:d,onCancel:m})}}!function(e,t,a){t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a}(sl,"propTypes",{show:M.a.bool.isRequired,onConfirm:M.a.func.isRequired,onCancel:M.a.func.isRequired,displayName:M.a.string.isRequired,toPublic:M.a.bool.isRequired});class il extends S.a.PureComponent{render(){const{show:e,onConfirm:t,onCancel:a,displayName:s,toPublic:i,removeAmount:n}=this.props,r=i?Object(C.b)("admin.team_channel_settings.convertConfirmModal.toPublicMessage"):Object(C.b)("admin.team_channel_settings.convertConfirmModal.toPrivateMessage"),l=i?Object(C.b)("admin.team_channel_settings.convertAndRemoveConfirmModal.toPublicTitle"):Object(C.b)("admin.team_channel_settings.convertAndRemoveConfirmModal.toPrivateTitle"),o=i?Object(C.b)("admin.team_channel_settings.convertAndRemoveConfirmModal.toPublicConfirm"):Object(C.b)("admin.team_channel_settings.convertAndRemoveConfirmModal.toPrivateConfirm"),c=S.a.createElement(T.a,{id:l,defaultMessage:i?"Convert channel to public and remove {amount, number} {amount, plural, one {user} other {users}}?":"Convert channel to private and remove {amount, number} {amount, plural, one {user} other {users}}?",values:{displayName:s,amount:n}}),d=S.a.createElement("div",null,S.a.createElement("p",null,S.a.createElement(j.b,{id:r,defaultMessage:i?"When you convert **{displayName}** to a public channel, history and membership are preserved. Public channels are discoverable and can by joined by users on the system without invitation. \n \nAre you sure you want to convert **{displayName}** to a public channel?":"When you convert **{displayName}** to a private channel, history and membership are preserved. Publicly shared files remain accessible to anyone with the link. Membership in a private channel is by invitation only. \n \nAre you sure you want to convert **{displayName}** to a private channel?",values:{displayName:s}})),S.a.createElement("p",null,S.a.createElement(T.a,{id:"admin.team_channel_settings.removeConfirmModal.messageChannel",defaultMessage:"{amount, number} {amount, plural, one {user} other {users}} will be removed on the next AD/LDAP synchronization. They are not in groups linked to this channel. Are you sure you wish to remove these users?",values:{amount:n}}))),m=S.a.createElement(T.a,{id:o,defaultMessage:i?"Yes, convert channel to public and remove {amount, number} {amount, plural, one {user} other {users}}":"Yes, convert channel to private and remove {amount, number} {amount, plural, one {user} other {users}}",values:{amount:n}}),u=S.a.createElement(T.a,{id:"admin.team_channel_settings.convertAndRemoveConfirmModal.cancel",defaultMessage:"No, cancel"});return S.a.createElement(be.a,{show:e,title:c,message:d,modalClass:"discard-changes-modal",confirmButtonClass:"btn btn-primary",confirmButtonText:m,cancelButtonClass:"bnt bnt-link",cancelButtonText:u,onConfirm:t,onCancel:a})}}!function(e,t,a){t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a}(il,"propTypes",{show:M.a.bool.isRequired,onConfirm:M.a.func.isRequired,onCancel:M.a.func.isRequired,displayName:M.a.string.isRequired,toPublic:M.a.bool.isRequired,removeAmount:M.a.number.isRequired});const nl=({isSynced:e,isPublic:t,isDefault:a,onToggle:s})=>S.a.createElement(Cr,{disabled:a,toggled:e,last:e,onToggle:()=>{a||s(!e,t)},title:S.a.createElement(T.a,{id:"admin.channel_settings.channel_details.syncGroupMembers",defaultMessage:"Sync Group Members"}),subTitle:S.a.createElement(j.b,{id:"admin.channel_settings.channel_details.syncGroupMembersDescr",defaultMessage:"When enabled, adding and removing users from groups will add or remove them from this channel. The only way of inviting members to this channel is by adding the groups they belong to. [Learn More](!https://www.mattermost.com/pl/default-ldap-group-constrained-team-channel.html)"})});nl.propTypes={isPublic:M.a.bool.isRequired,isSynced:M.a.bool.isRequired,isDefault:M.a.bool.isRequired,onToggle:M.a.func.isRequired};const rl=({isSynced:e,isPublic:t,isDefault:a,onToggle:s})=>!e&&S.a.createElement(Cr,{disabled:a,toggled:t,last:t,onToggle:()=>{a||s(e,!t)},title:S.a.createElement(T.a,{id:"admin.channel_settings.channel_details.isPublic",defaultMessage:"Public channel or private channel"}),subTitle:a?S.a.createElement(T.a,{id:"admin.channel_settings.channel_details.isDefaultDescr",defaultMessage:"This default channel cannot be converted into a private channel."}):S.a.createElement(T.a,{id:"admin.channel_settings.channel_details.isPublicDescr",defaultMessage:"If `public` the channel is discoverable and any user can join, or if `private` invitations are required. Toggle to convert public channels to private. When Group Sync is enabled, private channels cannot be converted to public."}),onText:S.a.createElement(T.a,{id:"channel_toggle_button.public",defaultMessage:"Public"}),offText:S.a.createElement(T.a,{id:"channel_toggle_button.private",defaultMessage:"Private"})});rl.propTypes={isPublic:M.a.bool.isRequired,isSynced:M.a.bool.isRequired,isDefault:M.a.bool.isRequired,onToggle:M.a.func.isRequired};const ll=({isPublic:e,isSynced:t,isDefault:a,onToggle:s})=>S.a.createElement(da,{id:"channel_manage",titleId:Object(C.b)("admin.channel_settings.channel_detail.manageTitle"),titleDefault:"Channel Management",subtitleId:Object(C.b)("admin.channel_settings.channel_detail.manageDescription"),subtitleDefault:"Choose between inviting members manually or syncing members automatically from groups."},S.a.createElement("div",{className:"group-teams-and-channels"},S.a.createElement("div",{className:"group-teams-and-channels--body"},S.a.createElement(nl,{isPublic:e,isSynced:t,isDefault:a,onToggle:s}),S.a.createElement(rl,{isPublic:e,isSynced:t,isDefault:a,onToggle:s}))));ll.propTypes={isPublic:M.a.bool.isRequired,isSynced:M.a.bool.isRequired,isDefault:M.a.bool.isRequired,onToggle:M.a.func.isRequired};var ol=a(1273);const cl=({onGroupRemoved:e,onAddCallback:t,totalGroups:a,groups:s,removedGroups:i,channel:n,synced:r,setNewGroupRole:l})=>S.a.createElement(da,{id:"channel_groups",titleId:r?Object(C.b)("admin.channel_settings.channel_detail.syncedGroupsTitle"):Object(C.b)("admin.channel_settings.channel_detail.groupsTitle"),titleDefault:r?"Synced Groups":"Groups",subtitleId:r?Object(C.b)("admin.channel_settings.channel_detail.syncedGroupsDescription"):Object(C.b)("admin.channel_settings.channel_detail.groupsDescription"),subtitleDefault:r?"Add and remove team members based on their group membership on the next scheduled sync.":"Group members will be added to the channel based on your sync schedule.",button:S.a.createElement(mr.a,{className:"btn btn-primary",dialogType:ol.a,dialogProps:{channel:n,onAddCallback:t,skipCommit:!0,includeGroups:i,excludeGroups:s}},S.a.createElement(T.a,{id:"admin.channel_settings.channel_details.add_group",defaultMessage:"Add Group"}))},n.id&&S.a.createElement(Ir,{channel:n,groups:s,totalGroups:a,onGroupRemoved:e,setNewGroupRole:l,isModeSync:r,type:"channel"}));cl.propTypes={synced:M.a.bool.isRequired,channel:M.a.object.isRequired,onAddCallback:M.a.func.isRequired,totalGroups:M.a.number.isRequired,groups:M.a.arrayOf(M.a.object).isRequired,removedGroups:M.a.arrayOf(M.a.object).isRequired,onGroupRemoved:M.a.func.isRequired,setNewGroupRole:M.a.func.isRequired};const dl=({team:e,channel:t})=>S.a.createElement(da,{id:"channel_profile",titleId:Object(C.b)("admin.channel_settings.channel_detail.profileTitle"),titleDefault:"Channel Profile",subtitleId:Object(C.b)("admin.channel_settings.channel_detail.profileDescription"),subtitleDefault:"Summary of the channel, including the channel name."},S.a.createElement("div",{className:"group-teams-and-channels"},S.a.createElement("div",{className:"group-teams-and-channels--body"},S.a.createElement(j.b,{id:"admin.channel_settings.channel_detail.channelName",defaultMessage:"**Name**"}),S.a.createElement("br",null),t.display_name,S.a.createElement("br",null),S.a.createElement(j.b,{id:"admin.channel_settings.channel_detail.channelTeam",defaultMessage:"**Team**"}),S.a.createElement("br",null),e.display_name)));function ml(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,s)}return a}function ul(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?ml(a,!0).forEach((function(t){pl(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):ml(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function pl(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}dl.propTypes={channel:M.a.object.isRequired,team:M.a.object.isRequired};class hl extends S.a.Component{constructor(e){super(e),pl(this,"setToggles",(e,t)=>{const{channel:a}=this.props,s=a.type===O.Q.OPEN_CHANNEL;this.setState({saveNeeded:!0,isSynced:e,isPublic:t,isPrivacyChanging:t!==s},()=>this.processGroupsChange(this.state.groups)),this.props.actions.setNavigationBlocked(!0)}),pl(this,"handleGroupRemoved",e=>{const t=this.state.groups.filter(t=>t.id!==e);this.setState({totalGroups:this.state.totalGroups-1}),this.processGroupsChange(t)}),pl(this,"setNewGroupRole",e=>{const t=Object(y.cloneDeep)(this.state.groups).map(t=>(t.id===e&&(t.scheme_admin=!t.scheme_admin),t));this.processGroupsChange(t)}),pl(this,"handleGroupChange",e=>{const t=[...this.state.groups,...e.map(e=>this.props.allGroups[e])];this.setState({totalGroups:this.state.totalGroups+e.length}),this.processGroupsChange(t)}),pl(this,"hideConvertConfirmModal",()=>{this.setState({showConvertConfirmModal:!1})}),pl(this,"hideRemoveConfirmModal",()=>{this.setState({showRemoveConfirmModal:!1})}),pl(this,"hideConvertAndRemoveConfirmModal",()=>{this.setState({showConvertAndRemoveConfirmModal:!1})}),pl(this,"onSave",()=>{const{channel:e}=this.props,{isSynced:t,usersToRemove:a}=this.state;let{isPublic:s,isPrivacyChanging:i}=this.state;const n=e.type===O.Q.OPEN_CHANNEL;t&&(s=!1,i=n,this.setState({isPublic:s,isPrivacyChanging:i}),0===this.state.groups.length)||(i&&a>0?this.setState({showConvertAndRemoveConfirmModal:!0}):i&&0===a?this.setState({showConvertConfirmModal:!0}):!i&&a>0?this.setState({showRemoveConfirmModal:!0}):this.handleSubmit())}),pl(this,"handleSubmit",async()=>{this.setState({showConvertConfirmModal:!1,showRemoveConfirmModal:!1,showConvertAndRemoveConfirmModal:!1,saving:!0});const{groups:e,isSynced:t,isPublic:a,isPrivacyChanging:s}=this.state;let i=null,n=!1;const{groups:r,channelID:l,actions:o,channel:c}=this.props;if(0===this.state.groups.length&&t)i=S.a.createElement(Er,null),n=!0;else{const n=[];if(s){const e=o.updateChannelPrivacy(c.id,a?O.Q.OPEN_CHANNEL:O.Q.PRIVATE_CHANNEL);n.push(e.then(e=>e&&e.error?e:o.patchChannel(c.id,ul({},c,{group_constrained:t}))))}else n.push(o.patchChannel(c.id,ul({},c,{group_constrained:t})));const d=e.filter(e=>r.some(t=>t.id===e.id&&t.scheme_admin!==e.scheme_admin)).map(e=>o.patchGroupSyncable(e.id,l,b.Groups.SYNCABLE_TYPE_CHANNEL,{scheme_admin:e.scheme_admin})),m=r.filter(t=>!e.some(e=>e.id===t.id)).map(e=>o.unlinkGroupSyncable(e.id,l,b.Groups.SYNCABLE_TYPE_CHANNEL)),u=e.filter(e=>!r.some(t=>t.id===e.id)).map(e=>o.linkGroupSyncable(e.id,l,b.Groups.SYNCABLE_TYPE_CHANNEL,{auto_add:!0,scheme_admin:e.scheme_admin})),p=(await Promise.all([...n,...d,...m,...u])).find(e=>e.error);p?i=S.a.createElement(Ee.a,{error:p.error.message}):await o.getGroups(l)}this.setState({serverError:i,saving:!1,saveNeeded:n}),o.setNavigationBlocked(n)}),pl(this,"render",()=>{const{totalGroups:e,saving:t,saveNeeded:a,serverError:s,isSynced:i,isPublic:n,isDefault:r,groups:l,showConvertConfirmModal:o,showRemoveConfirmModal:c,showConvertAndRemoveConfirmModal:d,usersToRemove:m}=this.state,{channel:u,team:p}=this.props,h=this.props.groups.filter(e=>!l.find(t=>t.id===e.id));return S.a.createElement("div",{className:"wrapper--fixed"},S.a.createElement("div",{className:"admin-console__header with-back"},S.a.createElement("div",null,S.a.createElement(Pa,{to:"/admin_console/user_management/channels",className:"fa fa-angle-left back"}),S.a.createElement(T.a,{id:"admin.channel_settings.channel_detail.channel_configuration",defaultMessage:"Channel Configuration"}))),S.a.createElement("div",{className:"admin-console__wrapper"},S.a.createElement("div",{className:"admin-console__content"},S.a.createElement(dl,{channel:u,team:p}),S.a.createElement(sl,{show:o,onCancel:this.hideConvertConfirmModal,onConfirm:this.handleSubmit,displayName:u.display_name||"",toPublic:n}),S.a.createElement(dr,{show:c,onCancel:this.hideRemoveConfirmModal,onConfirm:this.handleSubmit,inChannel:!0,amount:m}),S.a.createElement(il,{show:d,onCancel:this.hideConvertAndRemoveConfirmModal,onConfirm:this.handleSubmit,displayName:u.display_name||"",toPublic:n,removeAmount:m}),S.a.createElement(ll,{isPublic:n,isSynced:i,isDefault:r,onToggle:this.setToggles}),S.a.createElement(cl,{synced:i,channel:u,totalGroups:e,groups:l,removedGroups:h,onAddCallback:this.handleGroupChange,onGroupRemoved:this.handleGroupRemoved,setNewGroupRole:this.setNewGroupRole}))),S.a.createElement(Sr,{saving:t,saveNeeded:a,onClick:this.onSave,serverError:s,cancelLink:"/admin_console/user_management/channels"}))}),this.state={isSynced:Boolean(e.channel.group_constrained),isPublic:e.channel.type===O.Q.OPEN_CHANNEL,isDefault:e.channel.name===O.Q.DEFAULT_CHANNEL,isPrivacyChanging:!1,saving:!1,totalGroups:e.totalGroups,showConvertConfirmModal:!1,showRemoveConfirmModal:!1,showConvertAndRemoveConfirmModal:!1,usersToRemove:0,groups:e.groups,saveNeeded:!1,serverError:null}}componentDidUpdate(e){const{channel:t,totalGroups:a}=this.props;t.id===e.channel.id&&a===e.totalGroups||this.setState({totalGroups:a,isSynced:Boolean(t.group_constrained),isPublic:t.type===O.Q.OPEN_CHANNEL,isDefault:t.name===O.Q.DEFAULT_CHANNEL}),e.team.id||e.channel.team_id||!t.team_id||this.props.actions.getTeam(t.team_id)}async componentDidMount(){const{channelID:e,channel:t,team:a,actions:s}=this.props;s.getGroups(e).then(()=>s.getChannel(e)).then(()=>this.setState({groups:this.props.groups})),!a.id&&t.team_id&&s.getTeam(t.team_id)}async processGroupsChange(e){const{actions:t,channelID:a}=this.props;t.setNavigationBlocked(!0);let s=null,i=0;if(this.state.isSynced)try{if(0===e.length)s=S.a.createElement(Er,null);else{const n=await t.membersMinusGroupMembers(a,e.map(e=>e.id));(i=n.data.total_count)>0&&(s=S.a.createElement(vr,{total:i,users:n.data.users}))}}catch(e){s=e}this.setState({groups:e,usersToRemove:i,saveNeeded:!0,serverError:s})}}pl(hl,"propTypes",{channelID:M.a.string.isRequired,channel:M.a.object.isRequired,team:M.a.object.isRequired,groups:M.a.arrayOf(M.a.object).isRequired,totalGroups:M.a.number.isRequired,allGroups:M.a.object.isRequired,actions:M.a.shape({getGroups:M.a.func.isRequired,linkGroupSyncable:M.a.func.isRequired,unlinkGroupSyncable:M.a.func.isRequired,membersMinusGroupMembers:M.a.func.isRequired,setNavigationBlocked:M.a.func.isRequired,getChannel:M.a.func.isRequired,getTeam:M.a.func.isRequired,patchChannel:M.a.func.isRequired,updateChannelPrivacy:M.a.func.isRequired,patchGroupSyncable:M.a.func.isRequired}).isRequired}),pl(hl,"defaultProps",{channel:{display_name:"",id:""}});var gl=Object(r.connect)((function(e,t){const a=t.match.params.channel_id,s=Object(Hr.getChannel)(e,a)||{},i=Object(g.getTeam)(e,s.team_id)||{},n=Object(jn.getGroupsAssociatedToChannel)(e,a);return{channel:s,team:i,allGroups:Object(jn.getAllGroups)(e,s.team_id),totalGroups:n.length,groups:n,channelID:a}}),(function(e){return{actions:Object(l.bindActionCreators)({getChannel:Yn.getChannel,getTeam:X.getTeam,getGroups:Mn.getGroupsAssociatedToChannel,linkGroupSyncable:Mn.linkGroupSyncable,unlinkGroupSyncable:Mn.unlinkGroupSyncable,membersMinusGroupMembers:Yn.membersMinusGroupMembers,patchChannel:Yn.patchChannel,setNavigationBlocked:f.F,updateChannelPrivacy:Yn.updateChannelPrivacy,patchGroupSyncable:Mn.patchGroupSyncable},e)}}))(hl);function bl(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function fl(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}const _l="off",El="mhpns",yl="mtpns",vl="custom";function Sl(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function Tl(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}const Ol={EXPORT_FORMAT_CSV:"csv",EXPORT_FORMAT_ACTIANCE:"actiance",EXPORT_FORMAT_GLOBALRELAY:"globalrelay"};function wl(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function Cl(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}var xl=a(1918),Ml=a.n(xl),jl=a(1919),Pl=a.n(jl);class Al extends S.a.Component{render(){var e=S.a.createElement("img",{alt:"version mismatch",className:"cluster-status",src:Ml.a}),t=S.a.createElement("img",{alt:"config mismatch",className:"cluster-status",src:Ml.a}),a="",s="",i=!1;this.props.clusterInfos.length&&(a=this.props.clusterInfos[0].version,s=this.props.clusterInfos[0].config_hash,i=1===this.props.clusterInfos.length),this.props.clusterInfos.map(i=>(i.version!==a&&(e=S.a.createElement("img",{alt:"version mismatch",className:"cluster-status",src:Pl.a})),i.config_hash!==s&&(t=S.a.createElement("img",{alt:"config mismatch",className:"cluster-status",src:Pl.a})),null));var n=this.props.clusterInfos.map(a=>{var s=null;return""===a.hostname&&(a.hostname=I.gb("admin.cluster.unknown","unknown")),""===a.version&&(a.version=I.gb("admin.cluster.unknown","unknown")),""===a.config_hash&&(a.config_hash=I.gb("admin.cluster.unknown","unknown")),s=i?S.a.createElement("img",{alt:"Cluster status",className:"cluster-status",src:Pl.a}):S.a.createElement("img",{alt:"Cluster status",className:"cluster-status",src:Ml.a}),S.a.createElement("tr",{key:a.ipaddress},S.a.createElement("td",{style:kl.clusterCell},s),S.a.createElement("td",{style:kl.clusterCell},a.hostname),S.a.createElement("td",{style:kl.clusterCell},e," ",a.version),S.a.createElement("td",{style:kl.clusterCell},S.a.createElement("div",{className:"config-hash"},t," ",a.config_hash)),S.a.createElement("td",{style:kl.clusterCell},a.ipaddress))});return S.a.createElement("div",{className:"cluster-panel__table",style:kl.clusterTable},S.a.createElement("div",{className:"text-right"},S.a.createElement("button",{type:"submit",className:"btn btn-link",onClick:this.props.reload},S.a.createElement(Gt,null),S.a.createElement(T.a,{id:"admin.cluster.status_table.reload",defaultMessage:" Reload Cluster Status"}))),S.a.createElement("table",{className:"table"},S.a.createElement("thead",null,S.a.createElement("tr",null,S.a.createElement("th",null,S.a.createElement(T.a,{id:"admin.cluster.status_table.status",defaultMessage:"Status"})),S.a.createElement("th",null,S.a.createElement(T.a,{id:"admin.cluster.status_table.hostname",defaultMessage:"Hostname"})),S.a.createElement("th",null,S.a.createElement(T.a,{id:"admin.cluster.status_table.version",defaultMessage:"Version"})),S.a.createElement("th",null,S.a.createElement(T.a,{id:"admin.cluster.status_table.config_hash",defaultMessage:"Config File MD5"})),S.a.createElement("th",null,S.a.createElement(T.a,{id:"admin.cluster.status_table.url",defaultMessage:"Gossip Address"})))),S.a.createElement("tbody",null,n)))}}!function(e,t,a){t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a}(Al,"propTypes",{clusterInfos:M.a.array.isRequired,reload:M.a.func.isRequired});const kl={clusterTable:{margin:10,marginBottom:30},clusterCell:{whiteSpace:"nowrap"}};function Rl(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class Nl extends S.a.Component{constructor(e){super(e),Rl(this,"load",()=>{Object(f.o)(e=>{this.setState({clusterInfos:e})},null)}),Rl(this,"reload",e=>{e&&e.preventDefault(),this.setState({clusterInfos:null}),this.load()}),this.interval=null,this.state={clusterInfos:null}}componentDidMount(){this.load(),this.interval=setInterval(this.load,15e3)}componentWillUnmount(){this.interval&&clearInterval(this.interval)}render(){return null==this.state.clusterInfos?S.a.createElement($.a,null):S.a.createElement(Al,{clusterInfos:this.state.clusterInfos,reload:this.reload})}}function Dl(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}const Ll={configLoadedFromCluster:{marginBottom:10},warning:{marginBottom:10}};function Il(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,s)}return a}function Ul(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class ql extends Se{constructor(e){super(e),Ul(this,"getConfigFromState",e=>(e.SupportSettings.CustomTermsOfServiceEnabled=this.state.termsEnabled,e.SupportSettings.CustomTermsOfServiceReAcceptancePeriod=this.parseIntNonZero(this.state.reAcceptancePeriod,O.j.DEFAULT_TERMS_OF_SERVICE_RE_ACCEPTANCE_PERIOD),e)),Ul(this,"doSubmit",async e=>{if(this.setState({saving:!0,serverError:null}),this.state.termsEnabled&&(this.state.receivedTermsText!==this.state.termsText||!this.props.config.SupportSettings.CustomTermsOfServiceEnabled)){const t=await this.props.actions.createTermsOfService(this.state.termsText);if(t.error)return void this.handleAPIError(t.error,e)}let t=JSON.parse(JSON.stringify(this.props.config));t=this.getConfigFromState(t);const{data:a,error:s}=await this.props.updateConfig(t);a?(this.setState(this.getStateFromConfig(a)),this.setState({saveNeeded:!1,saving:!1}),this.props.setNavigationBlocked(!1),e&&e(),this.handleSaved&&this.handleSaved(t)):s&&this.handleAPIError(function(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?Il(a,!0).forEach((function(t){Ul(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):Il(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}({id:s.server_error_id},s),e,t)}),Ul(this,"handleAPIError",(e,t,a)=>{this.setState({saving:!1,serverError:e.message,serverErrorId:e.id}),t&&t(),this.handleSaved&&a&&this.handleSaved(a)}),Ul(this,"getTermsOfService",async()=>{this.setState({loadingTermsText:!0});const e=await this.props.actions.getTermsOfService();e.data&&this.setState({termsText:e.data.text,receivedTermsText:e.data.text}),this.setState({loadingTermsText:!1})}),Ul(this,"handleTermsTextChange",(e,t)=>{this.handleChange("termsText",t)}),Ul(this,"handleTermsEnabledChange",(e,t)=>{this.handleChange("termsEnabled",t)}),Ul(this,"handleReAcceptancePeriodChange",(e,t)=>{this.handleChange("reAcceptancePeriod",t)}),Ul(this,"renderSettings",()=>this.state.loadingTermsText?S.a.createElement($.a,null):S.a.createElement(xe,null,S.a.createElement(Ce,{key:"customTermsOfServiceEnabled",id:"SupportSettings.CustomTermsOfServiceEnabled",label:S.a.createElement(T.a,{id:"admin.support.enableTermsOfServiceTitle",defaultMessage:"Enable Custom Terms of Service"}),helpText:S.a.createElement(j.b,{id:"admin.support.enableTermsOfServiceHelp",defaultMessage:"When true, new users must accept the terms of service before accessing any Mattermost teams on desktop, web or mobile. Existing users must accept them after login or a page refresh.\\n \\nTo update terms of service link displayed in account creation and login pages, go to [Site Configuration > Customization](../site_config/customization)."}),value:this.state.termsEnabled,disabled:!(this.props.license.IsLicensed&&"true"===this.props.license.CustomTermsOfService),onChange:this.handleTermsEnabledChange,setByEnv:this.isSetByEnv("SupportSettings.CustomTermsOfServiceEnabled")}),S.a.createElement(Ae,{key:"customTermsOfServiceText",id:"SupportSettings.CustomTermsOfServiceText",type:"textarea",label:S.a.createElement(T.a,{id:"admin.support.termsOfServiceTextTitle",defaultMessage:"Custom Terms of Service Text"}),helpText:S.a.createElement(T.a,{id:"admin.support.termsOfServiceTextHelp",defaultMessage:"Text that will appear in your custom Terms of Service. Supports Markdown-formatted text."}),disabled:!this.state.termsEnabled,onChange:this.handleTermsTextChange,setByEnv:this.isSetByEnv("SupportSettings.CustomTermsOfServiceText"),value:this.state.termsText,maxLength:O.j.MAX_TERMS_OF_SERVICE_TEXT_LENGTH}),S.a.createElement(Ae,{key:"customTermsOfServiceReAcceptancePeriod",id:"SupportSettings.CustomTermsOfServiceReAcceptancePeriod",type:"number",label:S.a.createElement(T.a,{id:"admin.support.termsOfServiceReAcceptanceTitle",defaultMessage:"Re-Acceptance Period:"}),helpText:S.a.createElement(T.a,{id:"admin.support.termsOfServiceReAcceptanceHelp",defaultMessage:"The number of days before Terms of Service acceptance expires, and the terms must be re-accepted."}),disabled:!this.state.termsEnabled,value:this.state.reAcceptancePeriod,onChange:this.handleReAcceptancePeriodChange,setByEnv:this.isSetByEnv("SupportSettings.CustomTermsOfServiceReAcceptancePeriod")}))),this.state={termsEnabled:e.config.SupportSettings.CustomTermsOfServiceEnabled,reAcceptancePeriod:e.config.SupportSettings.CustomTermsOfServiceReAcceptancePeriod,loadingTermsText:!0,receivedTermsText:"",termsText:"",saveNeeded:!1,saving:!1,serverError:null,errorTooltip:!1}}getStateFromConfig(e){return{termsEnabled:e.SupportSettings.CustomTermsOfServiceEnabled,reAcceptancePeriod:e.SupportSettings.CustomTermsOfServiceReAcceptancePeriod}}componentDidMount(){this.getTermsOfService()}renderTitle(){return S.a.createElement(T.a,{id:"admin.support.termsOfServiceTitle",defaultMessage:"Custom Terms of Service (Beta)"})}}Ul(ql,"propTypes",{actions:M.a.shape({getTermsOfService:M.a.func.isRequired,createTermsOfService:M.a.func.isRequired}).isRequired,config:M.a.object,license:M.a.object,setNavigationBlocked:M.a.func,updateConfig:M.a.func});var Bl=Object(r.connect)(null,(function(e){return{actions:Object(l.bindActionCreators)({getTermsOfService:J.getTermsOfService,createTermsOfService:J.createTermsOfService},e)}}))(ql);const Fl=S.a.createElement("tr",null,S.a.createElement("td",null,S.a.createElement(T.a,{id:"admin.connectionSecurityNone",defaultMessage:"None"})),S.a.createElement("td",null,S.a.createElement(T.a,{id:"admin.connectionSecurityNoneDescription",defaultMessage:"Mattermost will connect over an insecure connection."}))),Gl=S.a.createElement("tr",null,S.a.createElement("td",null,S.a.createElement(T.a,{id:"admin.connectionSecurityTls",defaultMessage:"TLS"})),S.a.createElement("td",null,S.a.createElement(T.a,{id:"admin.connectionSecurityTlsDescription",defaultMessage:"Encrypts the communication between Mattermost and your server."}))),Hl=S.a.createElement("tr",null,S.a.createElement("td",null,S.a.createElement(T.a,{id:"admin.connectionSecurityStart",defaultMessage:"STARTTLS"})),S.a.createElement("td",null,S.a.createElement(T.a,{id:"admin.connectionSecurityStartDescription",defaultMessage:"Takes an existing insecure connection and attempts to upgrade it to a secure connection using TLS."}))),Yl=S.a.createElement("table",{className:"table table-bordered table-margin--none",cellPadding:"5"},S.a.createElement("tbody",null,Fl,Gl,Hl)),Wl=S.a.createElement("table",{className:"table table-bordered table-margin--none",cellPadding:"5"},S.a.createElement("tbody",null,Fl,Gl,Hl)),zl=S.a.createElement("table",{className:"table table-bordered table-margin--none",cellPadding:"5"},S.a.createElement("tbody",null,Fl,Gl)),Vl=S.a.createElement("div",null,S.a.createElement("table",{className:"table table-bordered table-margin--none",cellPadding:"5"},S.a.createElement("tbody",null,S.a.createElement("tr",null,S.a.createElement("td",null,S.a.createElement(T.a,{id:"admin.webserverModeGzip",defaultMessage:"gzip"})),S.a.createElement("td",null,S.a.createElement(T.a,{id:"admin.webserverModeGzipDescription",defaultMessage:"The Mattermost server will serve static files compressed with gzip."}))),S.a.createElement("tr",null,S.a.createElement("td",null,S.a.createElement(T.a,{id:"admin.webserverModeUncompressed",defaultMessage:"Uncompressed"})),S.a.createElement("td",null,S.a.createElement(T.a,{id:"admin.webserverModeUncompressedDescription",defaultMessage:"The Mattermost server will serve static files uncompressed."}))),S.a.createElement("tr",null,S.a.createElement("td",null,S.a.createElement(T.a,{id:"admin.webserverModeDisabled",defaultMessage:"Disabled"})),S.a.createElement("td",null,S.a.createElement(T.a,{id:"admin.webserverModeDisabledDescription",defaultMessage:"The Mattermost server will not serve static files."}))))),S.a.createElement("p",{className:"help-text"},S.a.createElement(T.a,{id:"admin.webserverModeHelpText",defaultMessage:"gzip compression applies to static content files. It is recommended to enable gzip to improve performance unless your environment has specific restrictions, such as a web proxy that distributes gzip files poorly."}))),Xl=[{value:"DEBUG",display_name:"DEBUG",display_name_default:"DEBUG"},{value:"INFO",display_name:"INFO",display_name_default:"INFO"},{value:"ERROR",display_name:"ERROR",display_name_default:"ERROR"}];function Jl(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,s)}return a}function Kl(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?Jl(a,!0).forEach((function(t){Ql(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):Jl(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function Ql(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}const Zl=Math.pow(1024,2),$l={isnt:e=>(t,a,s,i)=>!e(t,a,s,i),both:(...e)=>(t,a,s)=>{for(const i of e)if(!i(t,a,s))return!1;return!0},either:(...e)=>(t,a,s,i)=>{for(const n of e)if(n(t,a,s,i))return!0;return!1},stateMatches:(e,t)=>(a,s)=>s[e].match(t),stateEquals:(e,t)=>(a,s)=>s[e]===t,stateIsTrue:e=>(t,a)=>Boolean(a[e]),stateIsFalse:e=>(t,a)=>!a[e],configIsTrue:(e,t)=>a=>Boolean(a[e][t]),configIsFalse:(e,t)=>a=>!a[e][t],enterpriseReady:(e,t,a,s)=>s,licensed:(e,t,a)=>"true"===a.IsLicensed,licensedForFeature:e=>(t,a,s)=>s.IsLicensed&&"true"===s[e]},eo={about:{icon:"fa-info-circle",sectionTitle:Object(C.b)("admin.sidebar.about"),sectionTitleDefault:"About",license:{url:"about/license",title:Object(C.b)("admin.sidebar.license"),title_default:"Edition and License",isHidden:$l.either($l.isnt($l.enterpriseReady),$l.configIsTrue("ExperimentalSettings","RestrictSystemAdmin")),searchableStrings:["admin.license.title","admin.license.uploadDesc","admin.license.keyRemove","admin.license.edition","admin.license.type","admin.license.key","Mattermost Enterprise Edition. Unlock enterprise features in this software through the purchase of a subscription from ","This software is offered under a commercial license.\n\nSee ENTERPRISE-EDITION-LICENSE.txt in your root install directory for details. See NOTICE.txt for information about open source software used in this system."],schema:{id:"LicenseSettings",component:ra}}},reporting:{icon:"fa-bar-chart",sectionTitle:Object(C.b)("admin.sidebar.reporting"),sectionTitleDefault:"Reporting",system_analytics:{url:"reporting/system_analytics",title:Object(C.b)("admin.sidebar.siteStatistics"),title_default:"Site Statistics",searchableStrings:["analytics.system.title","analytics.system.totalPosts","analytics.system.activeUsers","analytics.system.totalSessions","analytics.system.totalCommands","analytics.system.totalIncomingWebhooks","analytics.system.totalOutgoingWebhooks","analytics.system.totalWebsockets","analytics.system.totalMasterDbConnections","analytics.system.totalReadDbConnections","analytics.system.postTypes","analytics.system.channelTypes","analytics.system.totalUsers","analytics.system.totalTeams","analytics.system.totalChannels","analytics.system.dailyActiveUsers","analytics.system.monthlyActiveUsers"],schema:{id:"SystemAnalytics",component:V}},team_statistics:{url:"reporting/team_statistics",title:Object(C.b)("admin.sidebar.teamStatistics"),title_default:"Team Statistics",searchableStrings:[["analytics.team.title",{team:""}],"analytics.system.info","analytics.team.totalPosts","analytics.team.activeUsers","analytics.team.totalUsers","analytics.team.publicChannels","analytics.team.privateGroups","analytics.team.recentUsers","analytics.team.newlyCreated"],schema:{id:"TeamAnalytics",component:ce}},server_logs:{url:"reporting/server_logs",title:Object(C.b)("admin.sidebar.logs"),title_default:"Server Logs",searchableStrings:["admin.logs.bannerDesc","admin.logs.title"],schema:{id:"ServerLogs",component:mn}}},user_management:{icon:"fa-users",sectionTitle:Object(C.b)("admin.sidebar.userManagement"),sectionTitleDefault:"User Management",system_user_detail:{url:"user_management/user/:user_id",schema:{id:"SystemUserDetail",component:nn}},system_users:{url:"user_management/users",title:Object(C.b)("admin.sidebar.users"),title_default:"Users",searchableStrings:[["admin.system_users.title",{siteName:""}]],schema:{id:"SystemUsers",component:Ri}},group_detail:{url:"user_management/groups/:group_id",isHidden:$l.either($l.isnt($l.licensedForFeature("LDAPGroups"))),schema:{id:"GroupDetail",component:Qn}},groups:{url:"user_management/groups",title:Object(C.b)("admin.sidebar.groups"),title_default:"Groups (Beta)",isHidden:$l.either($l.isnt($l.licensedForFeature("LDAPGroups"))),schema:{id:"Groups",component:xn}},team_detail:{url:"user_management/teams/:team_id",isHidden:$l.either($l.isnt($l.licensedForFeature("LDAPGroups"))),schema:{id:"TeamDetail",component:Gr}},teams:{url:"user_management/teams",title:Object(C.b)("admin.sidebar.teams"),title_default:"Teams",isHidden:$l.either($l.isnt($l.licensedForFeature("LDAPGroups"))),schema:{id:"Teams",component:cr}},channel_detail:{url:"user_management/channels/:channel_id",isHidden:$l.either($l.isnt($l.licensedForFeature("LDAPGroups"))),schema:{id:"ChannelDetail",component:gl}},channel:{url:"user_management/channels",title:Object(C.b)("admin.sidebar.channels"),title_default:"Channels",isHidden:$l.either($l.isnt($l.licensedForFeature("LDAPGroups"))),schema:{id:"Channels",component:al}},systemScheme:{url:"user_management/permissions/system_scheme",isHidden:$l.isnt($l.licensed),schema:{id:"PermissionSystemScheme",component:ms}},teamSchemeDetail:{url:"user_management/permissions/team_override_scheme/:scheme_id",isHidden:$l.either($l.isnt($l.licensed),$l.isnt($l.licensedForFeature("CustomPermissionsSchemes"))),schema:{id:"PermissionSystemScheme",component:Ms}},teamScheme:{url:"user_management/permissions/team_override_scheme",isHidden:$l.either($l.isnt($l.licensed),$l.isnt($l.licensedForFeature("CustomPermissionsSchemes"))),schema:{id:"PermissionSystemScheme",component:Ms}},permissions:{url:"user_management/permissions/",title:Object(C.b)("admin.sidebar.permissions"),title_default:"Permissions",isHidden:$l.isnt($l.licensed),searchableStrings:["admin.permissions.documentationLinkText","admin.permissions.teamOverrideSchemesNoSchemes","admin.permissions.loadMoreSchemes","admin.permissions.introBanner","admin.permissions.systemSchemeBannerTitle","admin.permissions.systemSchemeBannerText","admin.permissions.systemSchemeBannerButton","admin.permissions.teamOverrideSchemesTitle","admin.permissions.teamOverrideSchemesBannerText","admin.permissions.teamOverrideSchemesNewButton"],schema:{id:"PermissionSchemes",component:va}}},environment:{icon:"fa-server",sectionTitle:Object(C.b)("admin.sidebar.environment"),sectionTitleDefault:"Environment",web_server:{url:"environment/web_server",title:Object(C.b)("admin.sidebar.webServer"),title_default:"Web Server",isHidden:$l.configIsTrue("ExperimentalSettings","RestrictSystemAdmin"),schema:{id:"ServiceSettings",name:Object(C.b)("admin.environment.webServer"),name_default:"Web Server",settings:[{type:O.j.SettingsTypes.TYPE_BANNER,label:Object(C.b)("admin.rate.noteDescription"),label_default:"Changing properties in this section will require a server restart before taking effect.",banner_type:"info"},{type:O.j.SettingsTypes.TYPE_TEXT,key:"ServiceSettings.SiteURL",label:Object(C.b)("admin.service.siteURL"),label_default:"Site URL:",help_text:Object(C.b)("admin.service.siteURLDescription"),help_text_default:"The URL that users will use to access Mattermost. Standard ports, such as 80 and 443, can be omitted, but non-standard ports are required. For example: http://example.com:8065. This setting is required.\n \nMattermost may be hosted at a subpath. For example: http://example.com:8065/company/mattermost. A restart is required before the server will work correctly.",help_text_markdown:!0,placeholder:Object(C.b)("admin.service.siteURLExample"),placeholder_default:'E.g.: "http://example.com:8065"'},{type:O.j.SettingsTypes.TYPE_BUTTON,key:"TestSiteURL",action:f.I,label:Object(C.b)("admin.service.testSiteURL"),label_default:"Test Live URL",loading:Object(C.b)("admin.service.testSiteURLTesting"),loading_default:"Testing...",error_message:Object(C.b)("admin.service.testSiteURLFail"),error_message_default:"Test unsuccessful: {error}",success_message:Object(C.b)("admin.service.testSiteURLSuccess"),success_message_default:"Test successful. This is a valid URL."},{type:O.j.SettingsTypes.TYPE_TEXT,key:"ServiceSettings.ListenAddress",label:Object(C.b)("admin.service.listenAddress"),label_default:"Listen Address:",placeholder:Object(C.b)("admin.service.listenExample"),placeholder_default:'E.g.: ":8065"',help_text:Object(C.b)("admin.service.listenDescription"),help_text_default:'The address and port to which to bind and listen. Specifying ":8065" will bind to all network interfaces. Specifying "127.0.0.1:8065" will only bind to the network interface having that IP address. If you choose a port of a lower level (called "system ports" or "well-known ports", in the range of 0-1023), you must have permissions to bind to that port. On Linux you can use: "sudo setcap cap_net_bind_service=+ep ./bin/mattermost" to allow Mattermost to bind to well-known ports.'},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.Forward80To443",label:Object(C.b)("admin.service.forward80To443"),label_default:"Forward port 80 to 443:",help_text:Object(C.b)("admin.service.forward80To443Description"),help_text_default:"Forwards all insecure traffic from port 80 to secure port 443. Not recommended when using a proxy server.",disabled_help_text:Object(C.b)("admin.service.forward80To443Description.disabled"),disabled_help_text_default:"Forwards all insecure traffic from port 80 to secure port 443. Not recommended when using a proxy server.\n \nThis setting cannot be enabled until your server is [listening](#ListenAddress) on port 443.",disabled_help_text_markdown:!0,isDisabled:$l.isnt($l.stateMatches("ServiceSettings.ListenAddress",/:443$/))},{type:O.j.SettingsTypes.TYPE_DROPDOWN,key:"ServiceSettings.ConnectionSecurity",label:Object(C.b)("admin.connectionSecurityTitle"),label_default:"Connection Security:",help_text:zl,options:[{value:"",display_name:Object(C.b)("admin.connectionSecurityNone"),display_name_default:"None"},{value:"TLS",display_name:Object(C.b)("admin.connectionSecurityTls"),display_name_default:"TLS (Recommended)"}]},{type:O.j.SettingsTypes.TYPE_TEXT,key:"ServiceSettings.TLSCertFile",label:Object(C.b)("admin.service.tlsCertFile"),label_default:"TLS Certificate File:",help_text:Object(C.b)("admin.service.tlsCertFileDescription"),help_text_default:"The certificate file to use.",isDisabled:$l.stateIsTrue("ServiceSettings.UseLetsEncrypt")},{type:O.j.SettingsTypes.TYPE_TEXT,key:"ServiceSettings.TLSKeyFile",label:Object(C.b)("admin.service.tlsKeyFile"),label_default:"TLS Key File:",help_text:Object(C.b)("admin.service.tlsKeyFileDescription"),help_text_default:"The private key file to use.",isDisabled:$l.stateIsTrue("ServiceSettings.UseLetsEncrypt")},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.UseLetsEncrypt",label:Object(C.b)("admin.service.useLetsEncrypt"),label_default:"Use Let's Encrypt:",help_text:Object(C.b)("admin.service.useLetsEncryptDescription"),help_text_default:"Enable the automatic retrieval of certificates from Let's Encrypt. The certificate will be retrieved when a client attempts to connect from a new domain. This will work with multiple domains.",disabled_help_text:Object(C.b)("admin.service.useLetsEncryptDescription.disabled"),disabled_help_text_default:"Enable the automatic retrieval of certificates from Let's Encrypt. The certificate will be retrieved when a client attempts to connect from a new domain. This will work with multiple domains.\n \nThis setting cannot be enabled unless the [Forward port 80 to 443](#Forward80To443) setting is set to true.",disabled_help_text_markdown:!0,isDisabled:$l.stateIsFalse("ServiceSettings.Forward80To443")},{type:O.j.SettingsTypes.TYPE_TEXT,key:"ServiceSettings.LetsEncryptCertificateCacheFile",label:Object(C.b)("admin.service.letsEncryptCertificateCacheFile"),label_default:"Let's Encrypt Certificate Cache File:",help_text:Object(C.b)("admin.service.letsEncryptCertificateCacheFileDescription"),help_text_default:"Certificates retrieved and other data about the Let's Encrypt service will be stored in this file.",isDisabled:$l.stateIsFalse("ServiceSettings.UseLetsEncrypt")},{type:O.j.SettingsTypes.TYPE_NUMBER,key:"ServiceSettings.ReadTimeout",label:Object(C.b)("admin.service.readTimeout"),label_default:"Read Timeout:",help_text:Object(C.b)("admin.service.readTimeoutDescription"),help_text_default:"Maximum time allowed from when the connection is accepted to when the request body is fully read."},{type:O.j.SettingsTypes.TYPE_NUMBER,key:"ServiceSettings.WriteTimeout",label:Object(C.b)("admin.service.writeTimeout"),label_default:"Write Timeout:",help_text:Object(C.b)("admin.service.writeTimeoutDescription"),help_text_default:"If using HTTP (insecure), this is the maximum time allowed from the end of reading the request headers until the response is written. If using HTTPS, it is the total time from when the connection is accepted until the response is written."},{type:O.j.SettingsTypes.TYPE_DROPDOWN,key:"ServiceSettings.WebserverMode",label:Object(C.b)("admin.webserverModeTitle"),label_default:"Webserver Mode:",help_text:Vl,options:[{value:"gzip",display_name:Object(C.b)("admin.webserverModeGzip"),display_name_default:"gzip"},{value:"uncompressed",display_name:Object(C.b)("admin.webserverModeUncompressed"),display_name_default:"Uncompressed"},{value:"disabled",display_name:Object(C.b)("admin.webserverModeDisabled"),display_name_default:"Disabled"}]},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.EnableInsecureOutgoingConnections",label:Object(C.b)("admin.service.insecureTlsTitle"),label_default:"Enable Insecure Outgoing Connections: ",help_text:Object(C.b)("admin.service.insecureTlsDesc"),help_text_default:"When true, any outgoing HTTPS requests will accept unverified, self-signed certificates. For example, outgoing webhooks to a server with a self-signed TLS certificate, using any domain, will be allowed. Note that this makes these connections susceptible to man-in-the-middle attacks."},{type:O.j.SettingsTypes.TYPE_BUTTON,action:f.B,key:"ReloadConfigButton",label:Object(C.b)("admin.reload.button"),label_default:"Reload Configuration From Disk",help_text:Object(C.b)("admin.reload.reloadDescription"),help_text_default:'Deployments using multiple databases can switch from one master database to another without restarting the Mattermost server by updating "config.json" to the new desired configuration and using the {featureName} feature to load the new settings while the server is running. The administrator should then use the {recycleDatabaseConnections} feature to recycle the database connections based on the new settings.',help_text_values:{featureName:S.a.createElement("b",null,S.a.createElement(T.a,{id:"admin.reload.reloadDescription.featureName",defaultMessage:"Reload Configuration from Disk"})),recycleDatabaseConnections:S.a.createElement("a",{href:"../environment/database"},S.a.createElement("b",null,S.a.createElement(T.a,{id:"admin.reload.reloadDescription.recycleDatabaseConnections",defaultMessage:"Environment > Database > Recycle Database Connections"})))},error_message:Object(C.b)("admin.reload.reloadFail"),error_message_default:"Reload unsuccessful: {error}"},{type:O.j.SettingsTypes.TYPE_BUTTON,key:"PurgeButton",action:f.u,label:Object(C.b)("admin.purge.button"),label_default:"Purge All Caches",help_text:Object(C.b)("admin.purge.purgeDescription"),help_text_default:"This will purge all the in-memory caches for things like sessions, accounts, channels, etc. Deployments using High Availability will attempt to purge all the servers in the cluster. Purging the caches may adversely impact performance.",error_message:Object(C.b)("admin.purge.purgeFail"),error_message_default:"Purging unsuccessful: {error}"}]}},database:{url:"environment/database",title:Object(C.b)("admin.sidebar.database"),title_default:"Database",isHidden:$l.configIsTrue("ExperimentalSettings","RestrictSystemAdmin"),searchableStrings:["admin.database.title",["admin.recycle.recycleDescription",{featureName:"",reloadConfiguration:""}],"admin.recycle.recycleDescription.featureName","admin.recycle.recycleDescription.reloadConfiguration","admin.recycle.button","admin.sql.noteDescription","admin.sql.driverName","admin.sql.driverNameDescription","admin.sql.dataSource","admin.sql.dataSourceDescription","admin.sql.maxConnectionsTitle","admin.sql.maxConnectionsDescription","admin.sql.maxOpenTitle","admin.sql.maxOpenDescription","admin.sql.queryTimeoutTitle","admin.sql.queryTimeoutDescription","admin.sql.connMaxLifetimeTitle","admin.sql.connMaxLifetimeDescription","admin.sql.traceTitle","admin.sql.traceDescription"],schema:{id:"DatabaseSettings",component:class extends Se{constructor(...e){super(...e),wl(this,"getConfigFromState",e=>(e.SqlSettings.MaxIdleConns=this.parseIntNonZero(this.state.maxIdleConns),e.SqlSettings.MaxOpenConns=this.parseIntNonZero(this.state.maxOpenConns),e.SqlSettings.Trace=this.state.trace,e.SqlSettings.QueryTimeout=this.parseIntNonZero(this.state.queryTimeout),e.SqlSettings.ConnMaxLifetimeMilliseconds=this.parseIntNonNegative(this.state.connMaxLifetimeMilliseconds),e.ServiceSettings.MinimumHashtagLength=this.parseIntNonZero(this.state.minimumHashtagLength,3,2),e)),wl(this,"renderSettings",()=>{const e="**********"+this.state.dataSource.substring(this.state.dataSource.indexOf("@"));let t=S.a.createElement("div",null);return"true"===this.props.license.IsLicensed&&(t=S.a.createElement(We,{requestAction:f.y,helpText:S.a.createElement(T.a,{id:"admin.recycle.recycleDescription",defaultMessage:'Deployments using multiple databases can switch from one master database to another without restarting the Mattermost server by updating "config.json" to the new desired configuration and using the {reloadConfiguration} feature to load the new settings while the server is running. The administrator should then use {featureName} feature to recycle the database connections based on the new settings.',values:{featureName:S.a.createElement("b",null,S.a.createElement(T.a,{id:"admin.recycle.recycleDescription.featureName",defaultMessage:"Recycle Database Connections"})),reloadConfiguration:S.a.createElement("a",{href:"../environment/web_server"},S.a.createElement("b",null,S.a.createElement(T.a,{id:"admin.recycle.recycleDescription.reloadConfiguration",defaultMessage:"Environment > Web Server > Reload Configuration from Disk"})))}}),buttonText:S.a.createElement(T.a,{id:"admin.recycle.button",defaultMessage:"Recycle Database Connections"}),showSuccessMessage:!1,errorMessage:{id:Object(C.b)("admin.recycle.reloadFail"),defaultMessage:"Recycling unsuccessful: {error}"},includeDetailedError:!0})),S.a.createElement(xe,null,S.a.createElement("div",{className:"banner"},S.a.createElement(T.a,{id:"admin.sql.noteDescription",defaultMessage:"Changing properties in this section will require a server restart before taking effect."})),S.a.createElement("div",{className:"form-group"},S.a.createElement("label",{className:"control-label col-sm-4",htmlFor:"DriverName"},S.a.createElement(T.a,{id:"admin.sql.driverName",defaultMessage:"Driver Name:"})),S.a.createElement("div",{className:"col-sm-8"},S.a.createElement("input",{type:"text",className:"form-control",value:this.state.driverName,disabled:!0}),S.a.createElement("div",{className:"help-text"},S.a.createElement(T.a,{id:"admin.sql.driverNameDescription",defaultMessage:"Set the database driver in the config.json file."})))),S.a.createElement("div",{className:"form-group"},S.a.createElement("label",{className:"control-label col-sm-4",htmlFor:"DataSource"},S.a.createElement(T.a,{id:"admin.sql.dataSource",defaultMessage:"Data Source:"})),S.a.createElement("div",{className:"col-sm-8"},S.a.createElement("input",{type:"text",className:"form-control",value:e,disabled:!0}),S.a.createElement("div",{className:"help-text"},S.a.createElement(T.a,{id:"admin.sql.dataSourceDescription",defaultMessage:"Set the database source in the config.json file."})))),S.a.createElement(Ae,{id:"maxIdleConns",label:S.a.createElement(T.a,{id:"admin.sql.maxConnectionsTitle",defaultMessage:"Maximum Idle Connections:"}),placeholder:I.gb("admin.sql.maxConnectionsExample",'E.g.: "10"'),helpText:S.a.createElement(T.a,{id:"admin.sql.maxConnectionsDescription",defaultMessage:"Maximum number of idle connections held open to the database."}),value:this.state.maxIdleConns,onChange:this.handleChange,setByEnv:this.isSetByEnv("SqlSettings.MaxIdleConns")}),S.a.createElement(Ae,{id:"maxOpenConns",label:S.a.createElement(T.a,{id:"admin.sql.maxOpenTitle",defaultMessage:"Maximum Open Connections:"}),placeholder:I.gb("admin.sql.maxOpenExample",'E.g.: "10"'),helpText:S.a.createElement(T.a,{id:"admin.sql.maxOpenDescription",defaultMessage:"Maximum number of open connections held open to the database."}),value:this.state.maxOpenConns,onChange:this.handleChange,setByEnv:this.isSetByEnv("SqlSettings.MaxOpenConns")}),S.a.createElement(Ae,{id:"queryTimeout",label:S.a.createElement(T.a,{id:"admin.sql.queryTimeoutTitle",defaultMessage:"Query Timeout:"}),placeholder:I.gb("admin.sql.queryTimeoutExample",'E.g.: "30"'),helpText:S.a.createElement(T.a,{id:"admin.sql.queryTimeoutDescription",defaultMessage:"The number of seconds to wait for a response from the database after opening a connection and sending the query. Errors that you see in the UI or in the logs as a result of a query timeout can vary depending on the type of query."}),value:this.state.queryTimeout,onChange:this.handleChange,setByEnv:this.isSetByEnv("SqlSettings.QueryTimeout")}),S.a.createElement(Ae,{id:"connMaxLifetimeMilliseconds",label:S.a.createElement(T.a,{id:"admin.sql.connMaxLifetimeTitle",defaultMessage:"Maximum Connection Lifetime:"}),placeholder:I.gb("admin.sql.connMaxLifetimeExample",'E.g.: "3600000"'),helpText:S.a.createElement(T.a,{id:"admin.sql.connMaxLifetimeDescription",defaultMessage:"Maximum lifetime for a connection to the database in milliseconds."}),value:this.state.connMaxLifetimeMilliseconds,onChange:this.handleChange,setByEnv:this.isSetByEnv("SqlSettings.ConnMaxLifetimeMilliseconds")}),S.a.createElement(Ae,{id:"minimumHashtagLength",label:S.a.createElement(T.a,{id:"admin.service.minimumHashtagLengthTitle",defaultMessage:"Minimum Hashtag Length:"}),placeholder:I.gb("admin.service.minimumHashtagLengthExample",'E.g.: "3"'),helpText:S.a.createElement(j.b,{id:"admin.service.minimumHashtagLengthDescription",defaultMessage:"Minimum number of characters in a hashtag. This must be greater than or equal to 2. MySQL databases must be configured to support searching strings shorter than three characters, [see documentation](!https://dev.mysql.com/doc/refman/8.0/en/fulltext-fine-tuning.html)."}),value:this.state.minimumHashtagLength,onChange:this.handleChange,setByEnv:this.isSetByEnv("ServiceSettings.MinimumHashtagLength")}),S.a.createElement(Ce,{id:"trace",label:S.a.createElement(T.a,{id:"admin.sql.traceTitle",defaultMessage:"SQL Statement Logging: "}),helpText:S.a.createElement(T.a,{id:"admin.sql.traceDescription",defaultMessage:"(Development Mode) When true, executing SQL statements are written to the log."}),value:this.state.trace,onChange:this.handleChange,setByEnv:this.isSetByEnv("SqlSettings.Trace")}),t)})}getStateFromConfig(e){return{driverName:e.SqlSettings.DriverName,dataSource:e.SqlSettings.DataSource,maxIdleConns:e.SqlSettings.MaxIdleConns,maxOpenConns:e.SqlSettings.MaxOpenConns,trace:e.SqlSettings.Trace,queryTimeout:e.SqlSettings.QueryTimeout,connMaxLifetimeMilliseconds:e.SqlSettings.ConnMaxLifetimeMilliseconds,minimumHashtagLength:e.ServiceSettings.MinimumHashtagLength}}renderTitle(){return S.a.createElement(T.a,{id:"admin.database.title",defaultMessage:"Database Settings"})}}}},elasticsearch:{url:"environment/elasticsearch",title:Object(C.b)("admin.sidebar.elasticsearch"),title_default:"Elasticsearch",isHidden:$l.either($l.isnt($l.licensedForFeature("Elasticsearch")),$l.configIsTrue("ExperimentalSettings","RestrictSystemAdmin")),searchableStrings:["admin.elasticsearch.title","admin.elasticsearch.enableIndexingTitle",["admin.elasticsearch.enableIndexingDescription",{documentationLink:""}],"admin.elasticsearch.enableIndexingDescription.documentationLinkText","admin.elasticsearch.connectionUrlTitle",["admin.elasticsearch.connectionUrlDescription",{documentationLink:""}],"admin.elasticsearch.connectionUrlExample.documentationLinkText","admin.elasticsearch.skipTLSVerificationTitle","admin.elasticsearch.skipTLSVerificationDescription","admin.elasticsearch.usernameTitle","admin.elasticsearch.usernameDescription","admin.elasticsearch.passwordTitle","admin.elasticsearch.passwordDescription","admin.elasticsearch.sniffTitle","admin.elasticsearch.sniffDescription","admin.elasticsearch.testHelpText","admin.elasticsearch.elasticsearch_test_button","admin.elasticsearch.bulkIndexingTitle","admin.elasticsearch.createJob.help","admin.elasticsearch.purgeIndexesHelpText","admin.elasticsearch.purgeIndexesButton","admin.elasticsearch.purgeIndexesButton.label","admin.elasticsearch.enableSearchingTitle","admin.elasticsearch.enableSearchingDescription"],schema:{id:"ElasticSearchSettings",component:class extends Se{constructor(...e){super(...e),Cl(this,"getConfigFromState",e=>(e.ElasticsearchSettings.ConnectionUrl=this.state.connectionUrl,e.ElasticsearchSettings.SkipTLSVerification=this.state.skipTLSVerification,e.ElasticsearchSettings.Username=this.state.username,e.ElasticsearchSettings.Password=this.state.password,e.ElasticsearchSettings.Sniff=this.state.sniff,e.ElasticsearchSettings.EnableIndexing=this.state.enableIndexing,e.ElasticsearchSettings.EnableSearching=this.state.enableSearching,e.ElasticsearchSettings.EnableAutocomplete=this.state.enableAutocomplete,e)),Cl(this,"handleSettingChanged",(e,t)=>{"enableIndexing"===e&&(!1===t?this.setState({enableSearching:!1,enableAutocomplete:!1}):this.setState({canSave:!1,configTested:!1})),"connectionUrl"!==e&&"skipTLSVerification"!==e&&"username"!==e&&"password"!==e&&"sniff"!==e||this.setState({configTested:!1,canSave:!1}),"enableSearching"!==e&&"enableAutocomplete"!==e&&this.setState({canPurgeAndIndex:!1}),this.handleChange(e,t)}),Cl(this,"handleSaved",()=>{this.setState({canPurgeAndIndex:this.state.enableIndexing})}),Cl(this,"canSave",()=>this.state.canSave),Cl(this,"doTestConfig",(e,t)=>{const a=JSON.parse(JSON.stringify(this.props.config));this.getConfigFromState(a),Object(f.j)(a,()=>{this.setState({configTested:!0,canSave:!0}),e(),this.doSubmit()},e=>{this.setState({configTested:!1,canSave:!1}),t(e)})}),Cl(this,"renderSettings",()=>S.a.createElement(xe,null,S.a.createElement(Ce,{id:"enableIndexing",label:S.a.createElement(T.a,{id:"admin.elasticsearch.enableIndexingTitle",defaultMessage:"Enable Elasticsearch Indexing:"}),helpText:S.a.createElement(T.a,{id:"admin.elasticsearch.enableIndexingDescription",defaultMessage:'When true, indexing of new posts occurs automatically. Search queries will use database search until "Enable Elasticsearch for search queries" is enabled. {documentationLink}',values:{documentationLink:S.a.createElement("a",{href:"https://about.mattermost.com/default-elasticsearch-documentation/",rel:"noopener noreferrer",target:"_blank"},S.a.createElement(T.a,{id:"admin.elasticsearch.enableIndexingDescription.documentationLinkText",defaultMessage:"Learn more about Elasticsearch in our documentation."}))}}),value:this.state.enableIndexing,onChange:this.handleSettingChanged,setByEnv:this.isSetByEnv("ElasticsearchSettings.EnableIndexing")}),S.a.createElement(Ae,{id:"connectionUrl",label:S.a.createElement(T.a,{id:"admin.elasticsearch.connectionUrlTitle",defaultMessage:"Server Connection Address:"}),placeholder:I.gb("admin.elasticsearch.connectionUrlExample",'E.g.: "https://elasticsearch.example.org:9200"'),helpText:S.a.createElement(T.a,{id:"admin.elasticsearch.connectionUrlDescription",defaultMessage:"The address of the Elasticsearch server. {documentationLink}",values:{documentationLink:S.a.createElement("a",{href:"https://about.mattermost.com/default-elasticsearch-server-setup/",rel:"noopener noreferrer",target:"_blank"},S.a.createElement(T.a,{id:"admin.elasticsearch.connectionUrlExample.documentationLinkText",defaultMessage:"Please see documentation with server setup instructions."}))}}),value:this.state.connectionUrl,disabled:!this.state.enableIndexing,onChange:this.handleSettingChanged,setByEnv:this.isSetByEnv("ElasticsearchSettings.ConnectionUrl")}),S.a.createElement(Ce,{id:"skipTLSVerification",label:S.a.createElement(T.a,{id:"admin.elasticsearch.skipTLSVerificationTitle",defaultMessage:"Skip TLS Verification:"}),helpText:S.a.createElement(T.a,{id:"admin.elasticsearch.skipTLSVerificationDescription",defaultMessage:"When true, Mattermost will not require the Elasticsearch certificate to be signed by a trusted Certificate Authority."}),value:this.state.skipTLSVerification,disabled:!this.state.enableIndexing,onChange:this.handleSettingChanged,setByEnv:this.isSetByEnv("ElasticsearchSettings.SkipTLSVerification")}),S.a.createElement(Ae,{id:"username",label:S.a.createElement(T.a,{id:"admin.elasticsearch.usernameTitle",defaultMessage:"Server Username:"}),placeholder:I.gb("admin.elasticsearch.usernameExample",'E.g.: "elastic"'),helpText:S.a.createElement(T.a,{id:"admin.elasticsearch.usernameDescription",defaultMessage:"(Optional) The username to authenticate to the Elasticsearch server."}),value:this.state.username,disabled:!this.state.enableIndexing,onChange:this.handleSettingChanged,setByEnv:this.isSetByEnv("ElasticsearchSettings.Username")}),S.a.createElement(Ae,{id:"password",label:S.a.createElement(T.a,{id:"admin.elasticsearch.passwordTitle",defaultMessage:"Server Password:"}),placeholder:I.gb("admin.elasticsearch.password",'E.g.: "yourpassword"'),helpText:S.a.createElement(T.a,{id:"admin.elasticsearch.passwordDescription",defaultMessage:"(Optional) The password to authenticate to the Elasticsearch server."}),value:this.state.password,disabled:!this.state.enableIndexing,onChange:this.handleSettingChanged,setByEnv:this.isSetByEnv("ElasticsearchSettings.Password")}),S.a.createElement(Ce,{id:"sniff",label:S.a.createElement(T.a,{id:"admin.elasticsearch.sniffTitle",defaultMessage:"Enable Cluster Sniffing:"}),helpText:S.a.createElement(T.a,{id:"admin.elasticsearch.sniffDescription",defaultMessage:"When true, sniffing finds and connects to all data nodes in your cluster automatically."}),value:this.state.sniff,disabled:!this.state.enableIndexing,onChange:this.handleSettingChanged,setByEnv:this.isSetByEnv("ElasticsearchSettings.Sniff")}),S.a.createElement(We,{id:"testConfig",requestAction:this.doTestConfig,helpText:S.a.createElement(T.a,{id:"admin.elasticsearch.testHelpText",defaultMessage:"Tests if the Mattermost server can connect to the Elasticsearch server specified. Testing the connection only saves the configuration if the test is successful. See log file for more detailed error messages."}),buttonText:S.a.createElement(T.a,{id:"admin.elasticsearch.elasticsearch_test_button",defaultMessage:"Test Connection"}),successMessage:{id:Object(C.b)("admin.elasticsearch.testConfigSuccess"),defaultMessage:"Test successful. Configuration saved."},disabled:!this.state.enableIndexing}),S.a.createElement("div",{className:"form-group"},S.a.createElement("label",{className:"control-label col-sm-4"},S.a.createElement(T.a,{id:"admin.elasticsearch.bulkIndexingTitle",defaultMessage:"Bulk Indexing:"})),S.a.createElement("div",{className:"col-sm-8"},S.a.createElement("div",{className:"job-table-setting"},S.a.createElement(yt,{jobType:O.r.ELASTICSEARCH_POST_INDEXING,disabled:!this.state.canPurgeAndIndex,createJobButtonText:S.a.createElement(T.a,{id:"admin.elasticsearch.createJob.title",defaultMessage:"Index Now"}),createJobHelpText:S.a.createElement(T.a,{id:"admin.elasticsearch.createJob.help",defaultMessage:"All users, channels and posts in the database will be indexed from oldest to newest. Elasticsearch is available during indexing but search results may be incomplete until the indexing job is complete."}),getExtraInfoText:this.getExtraInfo})))),S.a.createElement(We,{id:"purgeIndexesSection",requestAction:f.i,helpText:S.a.createElement(T.a,{id:"admin.elasticsearch.purgeIndexesHelpText",defaultMessage:"Purging will entirely remove the indexes on the Elasticsearch server. Search results may be incomplete until a bulk index of the existing database is rebuilt."}),buttonText:S.a.createElement(T.a,{id:"admin.elasticsearch.purgeIndexesButton",defaultMessage:"Purge Index"}),successMessage:{id:Object(C.b)("admin.elasticsearch.purgeIndexesButton.success"),defaultMessage:"Indexes purged successfully."},errorMessage:{id:Object(C.b)("admin.elasticsearch.purgeIndexesButton.error"),defaultMessage:"Failed to purge indexes: {error}"},disabled:!this.state.canPurgeAndIndex,label:S.a.createElement(T.a,{id:"admin.elasticsearch.purgeIndexesButton.label",defaultMessage:"Purge Indexes:"})}),S.a.createElement(Ce,{id:"enableSearching",label:S.a.createElement(T.a,{id:"admin.elasticsearch.enableSearchingTitle",defaultMessage:"Enable Elasticsearch for search queries:"}),helpText:S.a.createElement(T.a,{id:"admin.elasticsearch.enableSearchingDescription",defaultMessage:"Requires a successful connection to the Elasticsearch server. When true, Elasticsearch will be used for all search queries using the latest index. Search results may be incomplete until a bulk index of the existing post database is finished. When false, database search is used."}),value:this.state.enableSearching,disabled:!this.state.enableIndexing||!this.state.configTested,onChange:this.handleSettingChanged,setByEnv:this.isSetByEnv("ElasticsearchSettings.EnableSearching")}),S.a.createElement(Ce,{id:"enableAutocomplete",label:S.a.createElement(T.a,{id:"admin.elasticsearch.enableAutocompleteTitle",defaultMessage:"Enable Elasticsearch for autocomplete queries:"}),helpText:S.a.createElement(T.a,{id:"admin.elasticsearch.enableAutocompleteDescription",defaultMessage:"Requires a successful connection to the Elasticsearch server. When true, Elasticsearch will be used for all autocompletion queries on users and channels using the latest index. Autocompletion results may be incomplete until a bulk index of the existing users and channels database is finished. When false, database autocomplete is used."}),value:this.state.enableAutocomplete,disabled:!this.state.enableIndexing||!this.state.configTested,onChange:this.handleSettingChanged,setByEnv:this.isSetByEnv("ElasticsearchSettings.EnableAutocomplete")})))}getStateFromConfig(e){return{connectionUrl:e.ElasticsearchSettings.ConnectionUrl,skipTLSVerification:e.ElasticsearchSettings.SkipTLSVerification,username:e.ElasticsearchSettings.Username,password:e.ElasticsearchSettings.Password,sniff:e.ElasticsearchSettings.Sniff,enableIndexing:e.ElasticsearchSettings.EnableIndexing,enableSearching:e.ElasticsearchSettings.EnableSearching,enableAutocomplete:e.ElasticsearchSettings.EnableAutocomplete,configTested:!0,canSave:!0,canPurgeAndIndex:e.ElasticsearchSettings.EnableIndexing}}getExtraInfo(e){return e.status===O.q.IN_PROGRESS?S.a.createElement(T.a,{id:"admin.elasticsearch.percentComplete",defaultMessage:"{percent}% Complete",values:{percent:Number(e.progress)}}):null}renderTitle(){return S.a.createElement(T.a,{id:"admin.elasticsearch.title",defaultMessage:"Elasticsearch"})}}}},storage:{url:"environment/file_storage",title:Object(C.b)("admin.sidebar.fileStorage"),title_default:"File Storage",isHidden:$l.configIsTrue("ExperimentalSettings","RestrictSystemAdmin"),schema:{id:"FileSettings",name:Object(C.b)("admin.environment.fileStorage"),name_default:"File Storage",settings:[{type:O.j.SettingsTypes.TYPE_DROPDOWN,key:"FileSettings.DriverName",label:Object(C.b)("admin.image.storeTitle"),label_default:"File Storage System:",help_text:Object(C.b)("admin.image.storeDescription"),help_text_default:'Storage system where files and image attachments are saved.\n \nSelecting "Amazon S3" enables fields to enter your Amazon credentials and bucket details.\n \nSelecting "Local File System" enables the field to specify a local file directory.',help_text_markdown:!0,options:[{value:"local",display_name:Object(C.b)("admin.image.storeLocal"),display_name_default:"Local File System"},{value:"amazons3",display_name:Object(C.b)("admin.image.storeAmazonS3"),display_name_default:"Amazon S3"}]},{type:O.j.SettingsTypes.TYPE_TEXT,key:"FileSettings.Directory",label:Object(C.b)("admin.image.localTitle"),label_default:"Local Storage Directory:",help_text:Object(C.b)("admin.image.localDescription"),help_text_default:"Directory to which files and images are written. If blank, defaults to ./data/.",placeholder:Object(C.b)("admin.image.localExample"),placeholder_default:'E.g.: "./data/"',isDisabled:$l.isnt($l.stateEquals("FileSettings.DriverName","local"))},{type:O.j.SettingsTypes.TYPE_NUMBER,key:"FileSettings.MaxFileSize",label:Object(C.b)("admin.image.maxFileSizeTitle"),label_default:"Maximum File Size:",help_text:Object(C.b)("admin.image.maxFileSizeDescription"),help_text_default:"Maximum file size for message attachments in megabytes. Caution: Verify server memory can support your setting choice. Large file sizes increase the risk of server crashes and failed uploads due to network interruptions.",placeholder:Object(C.b)("admin.image.maxFileSizeExample"),placeholder_default:"50",onConfigLoad:e=>e/Zl,onConfigSave:e=>e*Zl},{type:O.j.SettingsTypes.TYPE_TEXT,key:"FileSettings.AmazonS3Bucket",label:Object(C.b)("admin.image.amazonS3BucketTitle"),label_default:"Amazon S3 Bucket:",help_text:Object(C.b)("admin.image.amazonS3BucketDescription"),help_text_default:"Name you selected for your S3 bucket in AWS.",placeholder:Object(C.b)("admin.image.amazonS3BucketExample"),placeholder_default:'E.g.: "mattermost-media"',isDisabled:$l.isnt($l.stateEquals("FileSettings.DriverName","amazons3"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"FileSettings.AmazonS3Region",label:Object(C.b)("admin.image.amazonS3RegionTitle"),label_default:"Amazon S3 Region:",help_text:Object(C.b)("admin.image.amazonS3RegionDescription"),help_text_default:'AWS region you selected when creating your S3 bucket. If no region is set, Mattermost attempts to get the appropriate region from AWS, or sets it to "us-east-1" if none found.',placeholder:Object(C.b)("admin.image.amazonS3RegionExample"),placeholder_default:'E.g.: "us-east-1"',isDisabled:$l.isnt($l.stateEquals("FileSettings.DriverName","amazons3"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"FileSettings.AmazonS3AccessKeyId",label:Object(C.b)("admin.image.amazonS3IdTitle"),label_default:"Amazon S3 Access Key ID:",help_text:Object(C.b)("admin.image.amazonS3IdDescription"),help_text_markdown:!0,help_text_default:"(Optional) Only required if you do not want to authenticate to S3 using an [IAM role](!https://about.mattermost.com/default-iam-role). Enter the Access Key ID provided by your Amazon EC2 administrator.",placeholder:Object(C.b)("admin.image.amazonS3IdExample"),placeholder_default:'E.g.: "AKIADTOVBGERKLCBV"',isDisabled:$l.isnt($l.stateEquals("FileSettings.DriverName","amazons3"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"FileSettings.AmazonS3Endpoint",label:Object(C.b)("admin.image.amazonS3EndpointTitle"),label_default:"Amazon S3 Endpoint:",help_text:Object(C.b)("admin.image.amazonS3EndpointDescription"),help_text_default:'Hostname of your S3 Compatible Storage provider. Defaults to "s3.amazonaws.com".',placeholder:Object(C.b)("admin.image.amazonS3EndpointExample"),placeholder_default:'E.g.: "s3.amazonaws.com"',isDisabled:$l.isnt($l.stateEquals("FileSettings.DriverName","amazons3"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"FileSettings.AmazonS3SecretAccessKey",label:Object(C.b)("admin.image.amazonS3SecretTitle"),label_default:"Amazon S3 Secret Access Key:",help_text:Object(C.b)("admin.image.amazonS3SecretDescription"),help_text_default:"(Optional) The secret access key associated with your Amazon S3 Access Key ID.",placeholder:Object(C.b)("admin.image.amazonS3SecretExample"),placeholder_default:'E.g.: "jcuS8PuvcpGhpgHhlcpT1Mx42pnqMxQY"',isDisabled:$l.isnt($l.stateEquals("FileSettings.DriverName","amazons3"))},{type:O.j.SettingsTypes.TYPE_BOOL,key:"FileSettings.AmazonS3SSL",label:Object(C.b)("admin.image.amazonS3SSLTitle"),label_default:"Enable Secure Amazon S3 Connections:",help_text:Object(C.b)("admin.image.amazonS3SSLDescription"),help_text_default:"When false, allow insecure connections to Amazon S3. Defaults to secure connections only.",isDisabled:$l.isnt($l.stateEquals("FileSettings.DriverName","amazons3"))},{type:O.j.SettingsTypes.TYPE_BOOL,key:"FileSettings.AmazonS3SSE",label:Object(C.b)("admin.image.amazonS3SSETitle"),label_default:"Enable Server-Side Encryption for Amazon S3:",help_text:Object(C.b)("admin.image.amazonS3SSEDescription"),help_text_markdown:!0,help_text_default:"When true, encrypt files in Amazon S3 using server-side encryption with Amazon S3-managed keys. See [documentation](!https://about.mattermost.com/default-server-side-encryption) to learn more.",isHidden:$l.isnt($l.licensedForFeature("Compliance")),isDisabled:$l.isnt($l.stateEquals("FileSettings.DriverName","amazons3"))},{type:O.j.SettingsTypes.TYPE_BOOL,key:"FileSettings.AmazonS3Trace",label:Object(C.b)("admin.image.amazonS3TraceTitle"),label_default:"Enable Amazon S3 Debugging:",help_text:Object(C.b)("admin.image.amazonS3TraceDescription"),help_text_default:"(Development Mode) When true, log additional debugging information to the system logs.",isDisabled:$l.isnt($l.stateEquals("FileSettings.DriverName","amazons3"))},{type:O.j.SettingsTypes.TYPE_BUTTON,action:f.H,key:"TestS3Connection",label:Object(C.b)("admin.s3.connectionS3Test"),label_default:"Test Connection",loading:Object(C.b)("admin.s3.testing"),loading_default:"Testing...",error_message:Object(C.b)("admin.s3.s3Fail"),error_message_default:"Connection unsuccessful: {error}",success_message:Object(C.b)("admin.s3.s3Success"),success_message_default:"Connection was successful"}]}},image_proxy:{url:"environment/image_proxy",title:Object(C.b)("admin.sidebar.imageProxy"),title_default:"Image Proxy",isHidden:$l.configIsTrue("ExperimentalSettings","RestrictSystemAdmin"),schema:{id:"ImageProxy",name:Object(C.b)("admin.environment.imageProxy"),name_default:"Image Proxy",settings:[{type:O.j.SettingsTypes.TYPE_BOOL,key:"ImageProxySettings.Enable",label:Object(C.b)("admin.image.enableProxy"),label_default:"Enable Image Proxy:",help_text:Object(C.b)("admin.image.enableProxyDescription"),help_text_default:"When true, enables an image proxy for loading all Markdown images."},{type:O.j.SettingsTypes.TYPE_DROPDOWN,key:"ImageProxySettings.ImageProxyType",label:Object(C.b)("admin.image.proxyType"),label_default:"Image Proxy Type:",help_text:Object(C.b)("admin.image.proxyTypeDescription"),help_text_default:"Configure an image proxy to load all Markdown images through a proxy. The image proxy prevents users from making insecure image requests, provides caching for increased performance, and automates image adjustments such as resizing. See [documentation](!https://about.mattermost.com/default-image-proxy-documentation) to learn more.",help_text_markdown:!0,options:[{value:"atmos/camo",display_name:Object(C.b)("atmos/camo"),display_name_default:"atmos/camo"},{value:"local",display_name:Object(C.b)("local"),display_name_default:"local"}],isDisabled:$l.stateIsFalse("ImageProxySettings.Enable")},{type:O.j.SettingsTypes.TYPE_TEXT,key:"ImageProxySettings.RemoteImageProxyURL",label:Object(C.b)("admin.image.proxyURL"),label_default:"Remote Image Proxy URL:",help_text:Object(C.b)("admin.image.proxyURLDescription"),help_text_default:"URL of your remote image proxy server.",isDisabled:$l.either($l.stateIsFalse("ImageProxySettings.Enable"),$l.stateEquals("ImageProxySettings.ImageProxyType","local"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"ImageProxySettings.RemoteImageProxyOptions",label:Object(C.b)("admin.image.proxyOptions"),label_default:"Remote Image Proxy Options:",help_text:Object(C.b)("admin.image.proxyOptionsDescription"),help_text_default:"Additional options such as the URL signing key. Refer to your image proxy documentation to learn more about what options are supported.",isDisabled:$l.either($l.stateIsFalse("ImageProxySettings.Enable"),$l.stateEquals("ImageProxySettings.ImageProxyType","local"))}]}},smtp:{url:"environment/smtp",title:Object(C.b)("admin.sidebar.smtp"),title_default:"SMTP",isHidden:$l.configIsTrue("ExperimentalSettings","RestrictSystemAdmin"),schema:{id:"SMTP",name:Object(C.b)("admin.environment.smtp"),name_default:"SMTP",settings:[{type:O.j.SettingsTypes.TYPE_TEXT,key:"EmailSettings.SMTPServer",label:Object(C.b)("admin.environment.smtp.smtpServer.title"),label_default:"SMTP Server:",placeholder:Object(C.b)("admin.environment.smtp.smtpServer.placeholder"),placeholder_default:'Ex: "smtp.yourcompany.com", "email-smtp.us-east-1.amazonaws.com"',help_text:Object(C.b)("admin.environment.smtp.smtpServer.description"),help_text_default:"Location of SMTP email server."},{type:O.j.SettingsTypes.TYPE_TEXT,key:"EmailSettings.SMTPPort",label:Object(C.b)("admin.environment.smtp.smtpPort.title"),label_default:"SMTP Server Port:",placeholder:Object(C.b)("admin.environment.smtp.smtpPort.placeholder"),placeholder_default:'Ex: "25", "465", "587"',help_text:Object(C.b)("admin.environment.smtp.smtpPort.description"),help_text_default:"Port of SMTP email server."},{type:O.j.SettingsTypes.TYPE_BOOL,key:"EmailSettings.EnableSMTPAuth",label:Object(C.b)("admin.environment.smtp.smtpAuth.title"),label_default:"Enable SMTP Authentication:",help_text:Object(C.b)("admin.environment.smtp.smtpAuth.description"),help_text_default:"When true, SMTP Authentication is enabled."},{type:O.j.SettingsTypes.TYPE_TEXT,key:"EmailSettings.SMTPUsername",label:Object(C.b)("admin.environment.smtp.smtpUsername.title"),label_default:"SMTP Server Username:",placeholder:Object(C.b)("admin.environment.smtp.smtpUsername.placeholder"),placeholder_default:'Ex: "admin@yourcompany.com", "AKIADTOVBGERKLCBV"',help_text:Object(C.b)("admin.environment.smtp.smtpUsername.description"),help_text_default:"Obtain this credential from administrator setting up your email server.",isDisabled:$l.stateIsFalse("EmailSettings.EnableSMTPAuth")},{type:O.j.SettingsTypes.TYPE_TEXT,key:"EmailSettings.SMTPPassword",label:Object(C.b)("admin.environment.smtp.smtpPassword.title"),label_default:"SMTP Server Password:",placeholder:Object(C.b)("admin.environment.smtp.smtpPassword.placeholder"),placeholder_default:'Ex: "yourpassword", "jcuS8PuvcpGhpgHhlcpT1Mx42pnqMxQY"',help_text:Object(C.b)("admin.environment.smtp.smtpPassword.description"),help_text_default:"Obtain this credential from administrator setting up your email server.",isDisabled:$l.stateIsFalse("EmailSettings.EnableSMTPAuth")},{type:O.j.SettingsTypes.TYPE_DROPDOWN,key:"EmailSettings.ConnectionSecurity",label:Object(C.b)("admin.environment.smtp.connectionSecurity.title"),label_default:"Connection Security:",help_text:Yl,options:[{value:"",display_name:Object(C.b)("admin.environment.smtp.connectionSecurity.option.none"),display_name_default:"None"},{value:"TLS",display_name:Object(C.b)("admin.environment.smtp.connectionSecurity.option.tls"),display_name_default:"TLS (Recommended)"},{value:"STARTTLS",display_name:Object(C.b)("admin.environment.smtp.connectionSecurity.option.starttls"),display_name_default:"STARTTLS"}]},{type:O.j.SettingsTypes.TYPE_BUTTON,action:f.J,key:"TestSmtpConnection",label:Object(C.b)("admin.environment.smtp.connectionSmtpTest"),label_default:"Test Connection",loading:Object(C.b)("admin.environment.smtp.testing"),loading_default:"Testing...",error_message:Object(C.b)("admin.environment.smtp.smtpFail"),error_message_default:"Connection unsuccessful: {error}",success_message:Object(C.b)("admin.environment.smtp.smtpSuccess"),success_message_default:"No errors were reported while sending an email. Please check your inbox to make sure."},{type:O.j.SettingsTypes.TYPE_BOOL,key:"EmailSettings.SkipServerCertificateVerification",label:Object(C.b)("admin.environment.smtp.skipServerCertificateVerification.title"),label_default:"Skip Server Certificate Verification:",help_text:Object(C.b)("admin.environment.smtp.skipServerCertificateVerification.description"),help_text_default:"When true, Mattermost will not verify the email server certificate."},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.EnableSecurityFixAlert",label:Object(C.b)("admin.environment.smtp.enableSecurityFixAlert.title"),label_default:"Enable Security Alerts:",help_text:Object(C.b)("admin.environment.smtp.enableSecurityFixAlert.description"),help_text_default:"When true, System Administrators are notified by email if a relevant security fix alert has been announced in the last 12 hours. Requires email to be enabled."}]}},push_notification_server:{url:"environment/push_notification_server",title:Object(C.b)("admin.sidebar.pushNotificationServer"),title_default:"Push Notification Server",isHidden:$l.configIsTrue("ExperimentalSettings","RestrictSystemAdmin"),searchableStrings:["admin.environment.pushNotificationServer","admin.email.pushTitle","admin.email.pushServerTitle","admin.email.pushContentTitle","admin.email.pushContentDesc"],schema:{id:"PushNotificationsSettings",component:class extends Se{constructor(...e){super(...e),fl(this,"canSave",()=>this.state.pushNotificationServerType!==El||this.state.agree),fl(this,"handleAgreeChange",e=>{this.setState({agree:e.target.checked})}),fl(this,"handleDropdownChange",(e,t)=>{"pushNotificationServerType"===e&&(this.setState({agree:!1}),t===El?this.setState({pushNotificationServer:O.Q.MHPNS}):t===yl?this.setState({pushNotificationServer:O.Q.MTPNS}):t!==vl||this.state.pushNotificationServerType!==yl&&this.state.pushNotificationServerType!==El||this.setState({pushNotificationServer:""})),this.handleChange(e,t)}),fl(this,"getConfigFromState",e=>(e.EmailSettings.SendPushNotifications=this.state.pushNotificationServerType!==_l,e.EmailSettings.PushNotificationServer=this.state.pushNotificationServer.trim(),e.TeamSettings.MaxNotificationsPerChannel=this.state.maxNotificationsPerChannel,e)),fl(this,"isPushNotificationServerSetByEnv",()=>this.isSetByEnv("EmailSettings.SendPushNotifications")||this.isSetByEnv("EmailSettings.PushNotificationServer")),fl(this,"renderSettings",()=>{const e=[];e.push({value:_l,text:I.gb("admin.email.pushOff","Do not send push notifications")}),"true"===this.props.license.IsLicensed&&"true"===this.props.license.MHPNS&&e.push({value:El,text:I.gb("admin.email.mhpns","Use HPNS connection with uptime SLA to send notifications to iOS and Android apps")}),e.push({value:yl,text:I.gb("admin.email.mtpns","Use TPNS connection to send notifications to iOS and Android apps")}),e.push({value:vl,text:I.gb("admin.email.selfPush","Manually enter Push Notification Service location")});let t,a=null,s=null;return this.state.pushNotificationServerType===_l?a=S.a.createElement(j.b,{id:"admin.email.pushOffHelp",defaultMessage:"Please see [documentation on push notifications](!https://about.mattermost.com/default-mobile-push-notifications/) to learn more about setup options."}):s=this.state.pushNotificationServerType===El?S.a.createElement(j.b,{id:"admin.email.mhpnsHelp",defaultMessage:"Download [Mattermost iOS app](!https://about.mattermost.com/mattermost-ios-app/) from iTunes. Download [Mattermost Android app](!https://about.mattermost.com/mattermost-android-app/) from Google Play. Learn more about the [Mattermost Hosted Push Notification Service](!https://about.mattermost.com/default-hpns/)."}):this.state.pushNotificationServerType===yl?S.a.createElement(j.b,{id:"admin.email.mtpnsHelp",defaultMessage:"Download [Mattermost iOS app](!https://about.mattermost.com/mattermost-ios-app/) from iTunes. Download [Mattermost Android app](!https://about.mattermost.com/mattermost-android-app/) from Google Play. Learn more about the [Mattermost Test Push Notification Service](!https://about.mattermost.com/default-tpns/)."}):S.a.createElement(j.b,{id:"admin.email.easHelp",defaultMessage:"Learn more about compiling and deploying your own mobile apps from an [Enterprise App Store](!https://about.mattermost.com/default-enterprise-app-store)."}),this.state.pushNotificationServerType===El&&(t=S.a.createElement("div",{className:"form-group"},S.a.createElement("div",{className:"col-sm-4"}),S.a.createElement("div",{className:"col-sm-8"},S.a.createElement("input",{type:"checkbox",ref:"agree",checked:this.state.agree,onChange:this.handleAgreeChange}),S.a.createElement(j.b,{id:"admin.email.agreeHPNS",defaultMessage:" I understand and accept the Mattermost Hosted Push Notification Service [Terms of Service](!https://about.mattermost.com/hpns-terms/) and [Privacy Policy](!https://about.mattermost.com/hpns-privacy/)."})))),S.a.createElement(xe,null,S.a.createElement(Ve,{id:"pushNotificationServerType",values:e,label:S.a.createElement(T.a,{id:"admin.email.pushTitle",defaultMessage:"Enable Push Notifications: "}),value:this.state.pushNotificationServerType,onChange:this.handleDropdownChange,helpText:a,setByEnv:this.isPushNotificationServerSetByEnv()}),t,S.a.createElement(Ae,{id:"pushNotificationServer",label:S.a.createElement(T.a,{id:"admin.email.pushServerTitle",defaultMessage:"Push Notification Server:"}),placeholder:I.gb("admin.email.pushServerEx",'E.g.: "https://push-test.mattermost.com"'),helpText:s,value:this.state.pushNotificationServer,onChange:this.handleChange,disabled:this.state.pushNotificationServerType!==vl,setByEnv:this.isSetByEnv("EmailSettings.PushNotificationServer")}),S.a.createElement(Ae,{id:"maxNotificationsPerChannel",type:"number",label:S.a.createElement(T.a,{id:"admin.team.maxNotificationsPerChannelTitle",defaultMessage:"Max Notifications Per Channel:"}),placeholder:I.gb("admin.team.maxNotificationsPerChannelExample",'E.g.: "1000"'),helpText:S.a.createElement(j.b,{id:"admin.team.maxNotificationsPerChannelDescription",defaultMessage:"Maximum total number of users in a channel before users typing messages, @all, @here, and @channel no longer send notifications because of performance."}),value:this.state.maxNotificationsPerChannel,onChange:this.handleChange,setByEnv:this.isSetByEnv("TeamSettings.MaxNotificationsPerChannel")}))})}getStateFromConfig(e){let t=vl,a=!1;e.EmailSettings.SendPushNotifications?e.EmailSettings.PushNotificationServer===O.Q.MHPNS&&"true"===this.props.license.IsLicensed&&"true"===this.props.license.MHPNS?(t=El,a=!0):e.EmailSettings.PushNotificationServer===O.Q.MTPNS&&(t=yl):t=_l;let s=e.EmailSettings.PushNotificationServer;return t===yl?s=O.Q.MTPNS:t===El&&(s=O.Q.MHPNS),{pushNotificationServerType:t,pushNotificationServer:s,maxNotificationsPerChannel:e.TeamSettings.MaxNotificationsPerChannel,agree:a}}renderTitle(){return S.a.createElement(T.a,{id:"admin.environment.pushNotificationServer",defaultMessage:"Push Notification Server"})}}}},high_availability:{url:"environment/high_availability",title:Object(C.b)("admin.sidebar.highAvailability"),title_default:"High Availability",isHidden:$l.either($l.isnt($l.licensedForFeature("Cluster")),$l.configIsTrue("ExperimentalSettings","RestrictSystemAdmin")),searchableStrings:["admin.advance.cluster","admin.cluster.noteDescription","admin.cluster.enableTitle","admin.cluster.enableDescription","admin.cluster.ClusterName","admin.cluster.ClusterNameDesc","admin.cluster.OverrideHostname","admin.cluster.OverrideHostnameDesc","admin.cluster.UseIpAddress","admin.cluster.UseIpAddressDesc","admin.cluster.UseExperimentalGossip","admin.cluster.UseExperimentalGossipDesc","admin.cluster.GossipPort","admin.cluster.GossipPortDesc","admin.cluster.StreamingPort","admin.cluster.StreamingPortDesc"],schema:{id:"ClusterSettings",component:class extends Se{constructor(...e){super(...e),Dl(this,"getConfigFromState",e=>(e.ClusterSettings.Enable=this.state.Enable,e.ClusterSettings.ClusterName=this.state.ClusterName,e.ClusterSettings.OverrideHostname=this.state.OverrideHostname,e.ClusterSettings.UseIpAddress=this.state.UseIpAddress,e.ClusterSettings.UseExperimentalGossip=this.state.UseExperimentalGossip,e.ClusterSettings.GossipPort=this.parseIntNonZero(this.state.GossipPort,8074),e.ClusterSettings.StreamingPort=this.parseIntNonZero(this.state.StreamingPort,8075),e)),Dl(this,"overrideHandleChange",(e,t)=>{this.setState({showWarning:!0}),this.handleChange(e,t)}),Dl(this,"renderSettings",()=>{if(!("true"===this.props.license.IsLicensed&&"true"===this.props.license.Cluster))return null;var e=null;Ft.Client4.clusterId&&(e=S.a.createElement("div",{style:Ll.configLoadedFromCluster,className:"alert alert-warning"},S.a.createElement(He.a,null),S.a.createElement(j.b,{id:"admin.cluster.loadedFrom",defaultMessage:"This configuration file was loaded from Node ID {clusterId}. Please see the Troubleshooting Guide in our [documentation](!http://docs.mattermost.com/deployment/cluster.html) if you are accessing the System Console through a load balancer and experiencing issues.",values:{clusterId:Ft.Client4.clusterId}})));var t=null;this.state.showWarning&&(t=S.a.createElement("div",{style:Ll.warning,className:"alert alert-warning"},S.a.createElement(He.a,null),S.a.createElement(j.b,{id:"admin.cluster.should_not_change",defaultMessage:"WARNING: These settings may not sync with the other servers in the cluster. High Availability inter-node communication will not start until you modify the config.json to be identical on all servers and restart Mattermost. Please see the [documentation](!http://docs.mattermost.com/deployment/cluster.html) on how to add or remove a server from the cluster. If you are accessing the System Console through a load balancer and experiencing issues, please see the Troubleshooting Guide in our [documentation](!http://docs.mattermost.com/deployment/cluster.html)."})));var a=null;return this.state.Enable&&(a=S.a.createElement(Nl,null)),S.a.createElement(xe,null,e,a,S.a.createElement("div",{className:"banner"},S.a.createElement(T.a,{id:"admin.cluster.noteDescription",defaultMessage:"Changing properties in this section will require a server restart before taking effect."})),t,S.a.createElement(Ce,{id:"Enable",label:S.a.createElement(T.a,{id:"admin.cluster.enableTitle",defaultMessage:"Enable High Availability Mode:"}),helpText:S.a.createElement(j.b,{id:"admin.cluster.enableDescription",defaultMessage:"When true, Mattermost will run in High Availability mode. Please see [documentation](!http://docs.mattermost.com/deployment/cluster.html) to learn more about configuring High Availability for Mattermost."}),value:this.state.Enable,onChange:this.overrideHandleChange,setByEnv:this.isSetByEnv("ClusterSettings.Enable")}),S.a.createElement(Ae,{id:"ClusterName",label:S.a.createElement(T.a,{id:"admin.cluster.ClusterName",defaultMessage:"Cluster Name:"}),placeholder:I.gb("admin.cluster.ClusterNameEx",'E.g.: "Production" or "Staging"'),helpText:S.a.createElement(T.a,{id:"admin.cluster.ClusterNameDesc",defaultMessage:"The cluster to join by name. Only nodes with the same cluster name will join together. This is to support Blue-Green deployments or staging pointing to the same database."}),value:this.state.ClusterName,onChange:this.overrideHandleChange,setByEnv:this.isSetByEnv("ClusterSettings.ClusterName")}),S.a.createElement(Ae,{id:"OverrideHostname",label:S.a.createElement(T.a,{id:"admin.cluster.OverrideHostname",defaultMessage:"Override Hostname:"}),placeholder:I.gb("admin.cluster.OverrideHostnameEx",'E.g.: "app-server-01"'),helpText:S.a.createElement(T.a,{id:"admin.cluster.OverrideHostnameDesc",defaultMessage:"The default value of <blank> will attempt to get the Hostname from the OS or use the IP Address. You can override the hostname of this server with this property. It is not recommended to override the Hostname unless needed. This property can also be set to a specific IP Address if needed."}),value:this.state.OverrideHostname,onChange:this.overrideHandleChange,setByEnv:this.isSetByEnv("ClusterSettings.OverrideHostname")}),S.a.createElement(Ce,{id:"UseIpAddress",label:S.a.createElement(T.a,{id:"admin.cluster.UseIpAddress",defaultMessage:"Use IP Address:"}),helpText:S.a.createElement(de.a,{id:"admin.cluster.UseIpAddressDesc",defaultMessage:"When true, the cluster will attempt to communicate via IP Address vs using the hostname."}),value:this.state.UseIpAddress,onChange:this.overrideHandleChange,setByEnv:this.isSetByEnv("ClusterSettings.UseIpAddress")}),S.a.createElement(Ce,{id:"UseExperimentalGossip",label:S.a.createElement(T.a,{id:"admin.cluster.UseExperimentalGossip",defaultMessage:"Use Experimental Gossip:"}),helpText:S.a.createElement(de.a,{id:"admin.cluster.UseExperimentalGossipDesc",defaultMessage:"When true, the server will attempt to communicate via the gossip protocol over the gossip port. When false the server will attempt to communicate over the streaming port. When false the gossip port and protocol are still used to determine cluster health."}),value:this.state.UseExperimentalGossip,onChange:this.overrideHandleChange,setByEnv:this.isSetByEnv("ClusterSettings.UseExperimentalGossip")}),S.a.createElement(Ae,{id:"GossipPort",label:S.a.createElement(T.a,{id:"admin.cluster.GossipPort",defaultMessage:"Gossip Port:"}),placeholder:I.gb("admin.cluster.GossipPortEx",'E.g.: "8074"'),helpText:S.a.createElement(T.a,{id:"admin.cluster.GossipPortDesc",defaultMessage:"The port used for the gossip protocol. Both UDP and TCP should be allowed on this port."}),value:this.state.GossipPort,onChange:this.overrideHandleChange,setByEnv:this.isSetByEnv("ClusterSettings.GossipPort")}),S.a.createElement(Ae,{id:"StreamingPort",label:S.a.createElement(T.a,{id:"admin.cluster.StreamingPort",defaultMessage:"Streaming Port:"}),placeholder:I.gb("admin.cluster.StreamingPortEx",'E.g.: "8075"'),helpText:S.a.createElement(T.a,{id:"admin.cluster.StreamingPortDesc",defaultMessage:"The port used for streaming data between servers."}),value:this.state.StreamingPort,onChange:this.overrideHandleChange,setByEnv:this.isSetByEnv("ClusterSettings.StreamingPort")}))})}getStateFromConfig(e){const t=e.ClusterSettings;return{Enable:t.Enable,ClusterName:t.ClusterName,OverrideHostname:t.OverrideHostname,UseIpAddress:t.UseIpAddress,UseExperimentalGossip:t.UseExperimentalGossip,GossipPort:t.GossipPort,StreamingPort:t.StreamingPort,showWarning:!1}}renderTitle(){return S.a.createElement(T.a,{id:"admin.advance.cluster",defaultMessage:"High Availability"})}}}},rate_limiting:{url:"environment/rate_limiting",title:Object(C.b)("admin.sidebar.rateLimiting"),title_default:"Rate Limiting",isHidden:$l.configIsTrue("ExperimentalSettings","RestrictSystemAdmin"),schema:{id:"ServiceSettings",name:Object(C.b)("admin.rate.title"),name_default:"Rate Limiting",settings:[{type:O.j.SettingsTypes.TYPE_BANNER,label:Object(C.b)("admin.rate.noteDescription"),label_default:"Changing properties other than Site URL in this section will require a server restart before taking effect.",banner_type:"info"},{type:O.j.SettingsTypes.TYPE_BOOL,key:"RateLimitSettings.Enable",label:Object(C.b)("admin.rate.enableLimiterTitle"),label_default:"Enable Rate Limiting:",help_text:Object(C.b)("admin.rate.enableLimiterDescription"),help_text_default:"When true, APIs are throttled at rates specified below."},{type:O.j.SettingsTypes.TYPE_NUMBER,key:"RateLimitSettings.PerSec",label:Object(C.b)("admin.rate.queriesTitle"),label_default:"Maximum Queries per Second:",placeholder:Object(C.b)("admin.rate.queriesExample"),placeholder_default:'E.g.: "10"',help_text:Object(C.b)("admin.rate.queriesDescription"),help_text_default:"Throttles API at this number of requests per second.",isDisabled:$l.stateEquals("RateLimitSettings.Enable",!1)},{type:O.j.SettingsTypes.TYPE_NUMBER,key:"RateLimitSettings.MaxBurst",label:Object(C.b)("admin.rate.maxBurst"),label_default:"Maximum Burst Size:",placeholder:Object(C.b)("admin.rate.maxBurstExample"),placeholder_default:'E.g.: "100"',help_text:Object(C.b)("admin.rate.maxBurstDescription"),help_text_default:"Maximum number of requests allowed beyond the per second query limit.",isDisabled:$l.stateEquals("RateLimitSettings.Enable",!1)},{type:O.j.SettingsTypes.TYPE_NUMBER,key:"RateLimitSettings.MemoryStoreSize",label:Object(C.b)("admin.rate.memoryTitle"),label_default:"Memory Store Size:",placeholder:Object(C.b)("admin.rate.memoryExample"),placeholder_default:'E.g.: "10000"',help_text:Object(C.b)("admin.rate.memoryDescription"),help_text_default:'Maximum number of users sessions connected to the system as determined by "Vary rate limit by remote address" and "Vary rate limit by HTTP header".',isDisabled:$l.stateEquals("RateLimitSettings.Enable",!1)},{type:O.j.SettingsTypes.TYPE_BOOL,key:"RateLimitSettings.VaryByRemoteAddr",label:Object(C.b)("admin.rate.remoteTitle"),label_default:"Vary rate limit by remote address:",help_text:Object(C.b)("admin.rate.remoteDescription"),help_text_default:"When true, rate limit API access by IP address.",isDisabled:$l.stateEquals("RateLimitSettings.Enable",!1)},{type:O.j.SettingsTypes.TYPE_BOOL,key:"RateLimitSettings.VaryByUser",label:Object(C.b)("admin.rate.varyByUser"),label_default:"Vary rate limit by user:",help_text:Object(C.b)("admin.rate.varyByUserDescription"),help_text_default:"When true, rate limit API access by user athentication token.",isDisabled:$l.stateEquals("RateLimitSettings.Enable",!1)},{type:O.j.SettingsTypes.TYPE_TEXT,key:"RateLimitSettings.VaryByHeader",label:Object(C.b)("admin.rate.httpHeaderTitle"),label_default:"Vary rate limit by HTTP header:",placeholder:Object(C.b)("admin.rate.httpHeaderExample"),placeholder_default:'E.g.: "X-Real-IP", "X-Forwarded-For"',help_text:Object(C.b)("admin.rate.httpHeaderDescription"),help_text_default:'When filled in, vary rate limiting by HTTP header field specified (e.g. when configuring NGINX set to "X-Real-IP", when configuring AmazonELB set to "X-Forwarded-For").',isDisabled:$l.either($l.stateEquals("RateLimitSettings.Enable",!1),$l.stateEquals("RateLimitSettings.VaryByRemoteAddr",!0))}]}},logging:{url:"environment/logging",title:Object(C.b)("admin.sidebar.logging"),title_default:"Logging",isHidden:$l.configIsTrue("ExperimentalSettings","RestrictSystemAdmin"),schema:{id:"LogSettings",name:Object(C.b)("admin.general.log"),name_default:"Logging",settings:[{type:O.j.SettingsTypes.TYPE_BOOL,key:"LogSettings.EnableConsole",label:Object(C.b)("admin.log.consoleTitle"),label_default:"Output logs to console: ",help_text:Object(C.b)("admin.log.consoleDescription"),help_text_default:"Typically set to false in production. Developers may set this field to true to output log messages to console based on the console level option. If true, server writes messages to the standard output stream (stdout). Changing this setting requires a server restart before taking effect."},{type:O.j.SettingsTypes.TYPE_DROPDOWN,key:"LogSettings.ConsoleLevel",label:Object(C.b)("admin.log.levelTitle"),label_default:"Console Log Level:",help_text:Object(C.b)("admin.log.levelDescription"),help_text_default:"This setting determines the level of detail at which log events are written to the console. ERROR: Outputs only error messages. INFO: Outputs error messages and information around startup and initialization. DEBUG: Prints high detail for developers working on debugging issues.",options:Xl,isDisabled:$l.stateIsFalse("LogSettings.EnableConsole")},{type:O.j.SettingsTypes.TYPE_BOOL,key:"LogSettings.ConsoleJson",label:Object(C.b)("admin.log.consoleJsonTitle"),label_default:"Output console logs as JSON:",help_text:Object(C.b)("admin.log.jsonDescription"),help_text_default:"When true, logged events are written in a machine readable JSON format. Otherwise they are printed as plain text. Changing this setting requires a server restart before taking effect.",isDisabled:$l.stateIsFalse("LogSettings.EnableConsole")},{type:O.j.SettingsTypes.TYPE_BOOL,key:"LogSettings.EnableFile",label:Object(C.b)("admin.log.fileTitle"),label_default:"Output logs to file: ",help_text:Object(C.b)("admin.log.fileDescription"),help_text_default:"Typically set to true in production. When true, logged events are written to the mattermost.log file in the directory specified in the File Log Directory field. The logs are rotated at 10,000 lines and archived to a file in the same directory, and given a name with a datestamp and serial number. For example, mattermost.2017-03-31.001. Changing this setting requires a server restart before taking effect."},{type:O.j.SettingsTypes.TYPE_DROPDOWN,key:"LogSettings.FileLevel",label:Object(C.b)("admin.log.fileLevelTitle"),label_default:"File Log Level:",help_text:Object(C.b)("admin.log.fileLevelDescription"),help_text_default:"This setting determines the level of detail at which log events are written to the log file. ERROR: Outputs only error messages. INFO: Outputs error messages and information around startup and initialization. DEBUG: Prints high detail for developers working on debugging issues.",options:Xl,isDisabled:$l.stateIsFalse("LogSettings.EnableFile")},{type:O.j.SettingsTypes.TYPE_BOOL,key:"LogSettings.FileJson",label:Object(C.b)("admin.log.fileJsonTitle"),label_default:"Output file logs as JSON:",help_text:Object(C.b)("admin.log.jsonDescription"),help_text_default:"When true, logged events are written in a machine readable JSON format. Otherwise they are printed as plain text. Changing this setting requires a server restart before taking effect.",isDisabled:$l.stateIsFalse("LogSettings.EnableFile")},{type:O.j.SettingsTypes.TYPE_TEXT,key:"LogSettings.FileLocation",label:Object(C.b)("admin.log.locationTitle"),label_default:"File Log Directory:",help_text:Object(C.b)("admin.log.locationDescription"),help_text_default:"The location of the log files. If blank, they are stored in the ./logs directory. The path that you set must exist and Mattermost must have write permissions in it. Changing this setting requires a server restart before taking effect.",placeholder:Object(C.b)("admin.log.locationPlaceholder"),placeholder_default:"Enter your file location",isDisabled:$l.stateIsFalse("LogSettings.EnableFile")},{type:O.j.SettingsTypes.TYPE_BOOL,key:"LogSettings.EnableWebhookDebugging",label:Object(C.b)("admin.log.enableWebhookDebugging"),label_default:"Enable Webhook Debugging:",help_text:Object(C.b)("admin.log.enableWebhookDebuggingDescription"),help_text_default:'When true, sends webhook debug messages to the server logs. To also output the request body of incoming webhooks, set {boldedLogLevel} to "DEBUG".',help_text_values:{boldedLogLevel:S.a.createElement("strong",null,S.a.createElement(T.a,{id:"admin.log.logLevel",defaultMessage:"Log Level"}))}},{type:O.j.SettingsTypes.TYPE_BOOL,key:"LogSettings.EnableDiagnostics",label:Object(C.b)("admin.log.enableDiagnostics"),label_default:"Enable Diagnostics and Error Reporting:",help_text:Object(C.b)("admin.log.enableDiagnosticsDescription"),help_text_default:"Enable this feature to improve the quality and performance of Mattermost by sending error reporting and diagnostic information to Mattermost, Inc. Read our [privacy policy](!https://about.mattermost.com/default-privacy-policy/) to learn more.",help_text_markdown:!0,onConfigSave:(e,t)=>(t&&t!==e&&Object(Bt.d)("ui","diagnostics_disabled"),e)}]}},session_lengths:{url:"environment/session_lengths",title:Object(C.b)("admin.sidebar.sessionLengths"),title_default:"Session Lengths",isHidden:$l.configIsTrue("ExperimentalSettings","RestrictSystemAdmin"),schema:{id:"SessionLengths",name:Object(C.b)("admin.environment.sessionLengths"),name_default:"Session Lengths",settings:[{type:O.j.SettingsTypes.TYPE_NUMBER,key:"ServiceSettings.SessionLengthWebInDays",label:Object(C.b)("admin.service.webSessionDays"),label_default:"Session Length AD/LDAP and Email (days):",help_text:Object(C.b)("admin.service.webSessionDaysDesc"),help_text_default:"The number of days from the last time a user entered their credentials to the expiry of the users session. After changing this setting, the new session length will take effect after the next time the user enters their credentials.",placeholder:Object(C.b)("admin.service.sessionDaysEx"),placeholder_default:'E.g.: "30"'},{type:O.j.SettingsTypes.TYPE_NUMBER,key:"ServiceSettings.SessionLengthMobileInDays",label:Object(C.b)("admin.service.mobileSessionDays"),label_default:"Session Length Mobile (days):",help_text:Object(C.b)("admin.service.mobileSessionDaysDesc"),help_text_default:"The number of days from the last time a user entered their credentials to the expiry of the users session. After changing this setting, the new session length will take effect after the next time the user enters their credentials.",placeholder:Object(C.b)("admin.service.sessionDaysEx"),placeholder_default:'E.g.: "30"'},{type:O.j.SettingsTypes.TYPE_NUMBER,key:"ServiceSettings.SessionLengthSSOInDays",label:Object(C.b)("admin.service.ssoSessionDays"),label_default:"Session Length SSO (days):",help_text:Object(C.b)("admin.service.ssoSessionDaysDesc"),help_text_default:"The number of days from the last time a user entered their credentials to the expiry of the users session. If the authentication method is SAML or GitLab, the user may automatically be logged back in to Mattermost if they are already logged in to SAML or GitLab. After changing this setting, the setting will take effect after the next time the user enters their credentials.",placeholder:Object(C.b)("admin.service.sessionDaysEx"),placeholder_default:'E.g.: "30"'},{type:O.j.SettingsTypes.TYPE_NUMBER,key:"ServiceSettings.SessionCacheInMinutes",label:Object(C.b)("admin.service.sessionCache"),label_default:"Session Cache (minutes):",help_text:Object(C.b)("admin.service.sessionCacheDesc"),help_text_default:"The number of minutes to cache a session in memory.",placeholder:Object(C.b)("admin.service.sessionDaysEx"),placeholder_default:'E.g.: "30"'},{type:O.j.SettingsTypes.TYPE_NUMBER,key:"ServiceSettings.SessionIdleTimeoutInMinutes",label:Object(C.b)("admin.service.sessionIdleTimeout"),label_default:"Session Idle Timeout (minutes):",help_text:Object(C.b)("admin.service.sessionIdleTimeoutDesc"),help_text_default:"The number of minutes from the last time a user was active on the system to the expiry of the user's session. Once expired, the user will need to log in to continue. Minimum is 5 minutes, and 0 is unlimited.\n \nApplies to the desktop app and browsers. For mobile apps, use an EMM provider to lock the app when not in use. In High Availability mode, enable IP hash load balancing for reliable timeout measurement.",help_text_markdown:!0,placeholder:Object(C.b)("admin.service.sessionIdleTimeoutEx"),placeholder_default:'E.g.: "60"',isHidden:$l.isnt($l.licensedForFeature("Compliance")),onConfigSave:e=>0!==e&&e<5?5:e}]}},metrics:{url:"environment/performance_monitoring",title:Object(C.b)("admin.sidebar.metrics"),title_default:"Performance Monitoring",isHidden:$l.either($l.isnt($l.licensedForFeature("Metrics")),$l.configIsTrue("ExperimentalSettings","RestrictSystemAdmin")),schema:{id:"MetricsSettings",name:Object(C.b)("admin.advance.metrics"),name_default:"Performance Monitoring",settings:[{type:O.j.SettingsTypes.TYPE_BOOL,key:"MetricsSettings.Enable",label:Object(C.b)("admin.metrics.enableTitle"),label_default:"Enable Performance Monitoring:",help_text:Object(C.b)("admin.metrics.enableDescription"),help_text_default:"When true, Mattermost will enable performance monitoring collection and profiling. Please see [documentation](!http://docs.mattermost.com/deployment/metrics.html) to learn more about configuring performance monitoring for Mattermost.",help_text_markdown:!0},{type:O.j.SettingsTypes.TYPE_TEXT,key:"MetricsSettings.ListenAddress",label:Object(C.b)("admin.metrics.listenAddressTitle"),label_default:"Listen Address:",placeholder:Object(C.b)("admin.metrics.listenAddressEx"),placeholder_default:'E.g.: ":8067"',help_text:Object(C.b)("admin.metrics.listenAddressDesc"),help_text_default:"The address the server will listen on to expose performance metrics."}]}},developer:{url:"environment/developer",title:Object(C.b)("admin.sidebar.developer"),title_default:"Developer",isHidden:$l.configIsTrue("ExperimentalSettings","RestrictSystemAdmin"),schema:{id:"ServiceSettings",name:Object(C.b)("admin.developer.title"),name_default:"Developer Settings",settings:[{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.EnableTesting",label:Object(C.b)("admin.service.testingTitle"),label_default:"Enable Testing Commands:",help_text:Object(C.b)("admin.service.testingDescription"),help_text_default:"When true, /test slash command is enabled to load test accounts, data and text formatting. Changing this requires a server restart before taking effect."},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.EnableDeveloper",label:Object(C.b)("admin.service.developerTitle"),label_default:"Enable Developer Mode: ",help_text:Object(C.b)("admin.service.developerDesc"),help_text_default:"When true, JavaScript errors are shown in a purple bar at the top of the user interface. Not recommended for use in production."},{type:O.j.SettingsTypes.TYPE_TEXT,key:"ServiceSettings.AllowedUntrustedInternalConnections",label:Object(C.b)("admin.service.internalConnectionsTitle"),label_default:"Allow untrusted internal connections to: ",placeholder:Object(C.b)("admin.service.internalConnectionsEx"),placeholder_default:"webhooks.internal.example.com 127.0.0.1 10.0.16.0/28",help_text:Object(C.b)("admin.service.internalConnectionsDesc"),help_text_default:"A whitelist of local network addresses that can be requested by the Mattermost server on behalf of a client. Care should be used when configuring this setting to prevent unintended access to your local network. See [documentation](!https://mattermost.com/pl/default-allow-untrusted-internal-connections) to learn more.",help_text_markdown:!0}]}}},site:{icon:"fa-cogs",sectionTitle:Object(C.b)("admin.sidebar.site"),sectionTitleDefault:"Site Configuration",customization:{url:"site_config/customization",title:Object(C.b)("admin.sidebar.customization"),title_default:"Customization",schema:{id:"Customization",name:Object(C.b)("admin.site.customization"),name_default:"Customization",settings:[{type:O.j.SettingsTypes.TYPE_TEXT,key:"TeamSettings.SiteName",label:Object(C.b)("admin.team.siteNameTitle"),label_default:"Site Name:",help_text:Object(C.b)("admin.team.siteNameDescription"),help_text_default:'Name of service shown in login screens and UI. When not specified, it defaults to "Mattermost".',placeholder:Object(C.b)("admin.team.siteNameExample"),placeholder_default:'E.g.: "Mattermost"',max_length:O.j.MAX_SITENAME_LENGTH},{type:O.j.SettingsTypes.TYPE_TEXT,key:"TeamSettings.CustomDescriptionText",label:Object(C.b)("admin.team.brandDescriptionTitle"),label_default:"Site Description: ",help_text:Object(C.b)("admin.team.brandDescriptionHelp"),help_text_default:'Description of service shown in login screens and UI. When not specified, "All team communication in one place, searchable and accessible anywhere" is displayed.',placeholder:Object(C.b)("web.root.signup_info"),placeholder_default:"All team communication in one place, searchable and accessible anywhere"},{type:O.j.SettingsTypes.TYPE_BOOL,key:"TeamSettings.EnableCustomBrand",label:Object(C.b)("admin.team.brandTitle"),label_default:"Enable Custom Branding: ",help_text:Object(C.b)("admin.team.brandDesc"),help_text_default:"Enable custom branding to show an image of your choice, uploaded below, and some help text, written below, on the login page."},{type:O.j.SettingsTypes.TYPE_CUSTOM,component:hn,isDisabled:$l.stateIsFalse("TeamSettings.EnableCustomBrand"),key:"CustomBrandImage"},{type:O.j.SettingsTypes.TYPE_LONG_TEXT,key:"TeamSettings.CustomBrandText",label:Object(C.b)("admin.team.brandTextTitle"),label_default:"Custom Brand Text:",help_text:Object(C.b)("admin.team.brandTextDescription"),help_text_default:"Text that will appear below your custom brand image on your login screen. Supports Markdown-formatted text. Maximum 500 characters allowed.",isDisabled:$l.stateIsFalse("TeamSettings.EnableCustomBrand"),max_length:O.j.MAX_CUSTOM_BRAND_TEXT_LENGTH},{type:O.j.SettingsTypes.TYPE_TEXT,key:"SupportSettings.HelpLink",label:Object(C.b)("admin.support.helpTitle"),label_default:"Help Link:",help_text:Object(C.b)("admin.support.helpDesc"),help_text_default:"The URL for the Help link on the Mattermost login page, sign-up pages, and Main Menu. If this field is empty, the Help link is hidden from users."},{type:O.j.SettingsTypes.TYPE_TEXT,key:"SupportSettings.SupportEmail",label:Object(C.b)("admin.support.emailTitle"),label_default:"Support Email:",help_text:Object(C.b)("admin.support.emailHelp"),help_text_default:"Email address displayed on email notifications and during tutorial for end users to ask support questions."},{type:O.j.SettingsTypes.TYPE_TEXT,key:"SupportSettings.TermsOfServiceLink",label:Object(C.b)("admin.support.termsTitle"),label_default:"Terms of Service Link:",help_text:Object(C.b)("admin.support.termsDesc"),help_text_default:'Link to the terms under which users may use your online service. By default, this includes the "Mattermost Conditions of Use (End Users)" explaining the terms under which Mattermost software is provided to end users. If you change the default link to add your own terms for using the service you provide, your new terms must include a link to the default terms so end users are aware of the Mattermost Conditions of Use (End User) for Mattermost software.'},{type:O.j.SettingsTypes.TYPE_TEXT,key:"SupportSettings.PrivacyPolicyLink",label:Object(C.b)("admin.support.privacyTitle"),label_default:"Privacy Policy Link:",help_text:Object(C.b)("admin.support.privacyDesc"),help_text_default:"The URL for the Privacy link on the login and sign-up pages. If this field is empty, the Privacy link is hidden from users."},{type:O.j.SettingsTypes.TYPE_TEXT,key:"SupportSettings.AboutLink",label:Object(C.b)("admin.support.aboutTitle"),label_default:"About Link:",help_text:Object(C.b)("admin.support.aboutDesc"),help_text_default:"The URL for the About link on the Mattermost login and sign-up pages. If this field is empty, the About link is hidden from users."},{type:O.j.SettingsTypes.TYPE_TEXT,key:"SupportSettings.ReportAProblemLink",label:Object(C.b)("admin.support.problemTitle"),label_default:"Report a Problem Link:",help_text:Object(C.b)("admin.support.problemDesc"),help_text_default:"The URL for the Report a Problem link in the Main Menu. If this field is empty, the link is removed from the Main Menu."},{type:O.j.SettingsTypes.TYPE_TEXT,key:"NativeAppSettings.AppDownloadLink",label:Object(C.b)("admin.customization.appDownloadLinkTitle"),label_default:"Mattermost Apps Download Page Link:",help_text:Object(C.b)("admin.customization.appDownloadLinkDesc"),help_text_default:'Add a link to a download page for the Mattermost apps. When a link is present, an option to "Download Mattermost Apps" will be added in the Main Menu so users can find the download page. Leave this field blank to hide the option from the Main Menu.'},{type:O.j.SettingsTypes.TYPE_TEXT,key:"NativeAppSettings.AndroidAppDownloadLink",label:Object(C.b)("admin.customization.androidAppDownloadLinkTitle"),label_default:"Android App Download Link:",help_text:Object(C.b)("admin.customization.androidAppDownloadLinkDesc"),help_text_default:"Add a link to download the Android app. Users who access the site on a mobile web browser will be prompted with a page giving them the option to download the app. Leave this field blank to prevent the page from appearing."},{type:O.j.SettingsTypes.TYPE_TEXT,key:"NativeAppSettings.IosAppDownloadLink",label:Object(C.b)("admin.customization.iosAppDownloadLinkTitle"),label_default:"iOS App Download Link:",help_text:Object(C.b)("admin.customization.iosAppDownloadLinkDesc"),help_text_default:"Add a link to download the iOS app. Users who access the site on a mobile web browser will be prompted with a page giving them the option to download the app. Leave this field blank to prevent the page from appearing."}]}},localization:{url:"site_config/localization",title:Object(C.b)("admin.sidebar.localization"),title_default:"Localization",schema:{id:"LocalizationSettings",name:Object(C.b)("admin.site.localization"),name_default:"Localization",settings:[{type:O.j.SettingsTypes.TYPE_LANGUAGE,key:"LocalizationSettings.DefaultServerLocale",label:Object(C.b)("admin.general.localization.serverLocaleTitle"),label_default:"Default Server Language:",help_text:Object(C.b)("admin.general.localization.serverLocaleDescription"),help_text_default:"Default language for system messages. Changing this will require a server restart before taking effect."},{type:O.j.SettingsTypes.TYPE_LANGUAGE,key:"LocalizationSettings.DefaultClientLocale",label:Object(C.b)("admin.general.localization.clientLocaleTitle"),label_default:"Default Client Language:",help_text:Object(C.b)("admin.general.localization.clientLocaleDescription"),help_text_default:"Default language for newly created users and pages where the user hasn't logged in."},{type:O.j.SettingsTypes.TYPE_LANGUAGE,key:"LocalizationSettings.AvailableLocales",label:Object(C.b)("admin.general.localization.availableLocalesTitle"),label_default:"Available Languages:",help_text:Object(C.b)("admin.general.localization.availableLocalesDescription"),help_text_markdown:!0,help_text_default:"Set which languages are available for users in Account Settings (leave this field blank to have all supported languages available). If you're manually adding new languages, the **Default Client Language** must be added before saving this setting.\n \nWould like to help with translations? Join the [Mattermost Translation Server](!http://translate.mattermost.com/) to contribute.",multiple:!0,no_result:Object(C.b)("admin.general.localization.availableLocalesNoResults"),no_result_default:"No results found",not_present:Object(C.b)("admin.general.localization.availableLocalesNotPresent"),not_present_default:"The default client language must be included in the available list"}]}},users_and_teams:{url:"site_config/users_and_teams",title:Object(C.b)("admin.sidebar.usersAndTeams"),title_default:"Users and Teams",schema:{id:"UserAndTeamsSettings",name:Object(C.b)("admin.site.usersAndTeams"),name_default:"Users and Teams",settings:[{type:O.j.SettingsTypes.TYPE_PERMISSION,key:"TeamSettings.EnableTeamCreation",label:Object(C.b)("admin.team.teamCreationTitle"),label_default:"Enable Team Creation: ",help_text:Object(C.b)("admin.team.teamCreationDescription"),help_text_default:"When false, only System Administrators can create teams.",permissions_mapping_name:"enableTeamCreation",isHidden:$l.licensed},{type:O.j.SettingsTypes.TYPE_NUMBER,key:"TeamSettings.MaxUsersPerTeam",label:Object(C.b)("admin.team.maxUsersTitle"),label_default:"Max Users Per Team:",help_text:Object(C.b)("admin.team.maxUsersDescription"),help_text_default:"Maximum total number of users per team, including both active and inactive users.",placeholder:Object(C.b)("admin.team.maxUsersExample"),placeholder_default:'E.g.: "25"'},{type:O.j.SettingsTypes.TYPE_NUMBER,key:"TeamSettings.MaxChannelsPerTeam",label:Object(C.b)("admin.team.maxChannelsTitle"),label_default:"Max Channels Per Team:",help_text:Object(C.b)("admin.team.maxChannelsDescription"),help_text_default:"Maximum total number of channels per team, including both active and archived channels.",placeholder:Object(C.b)("admin.team.maxChannelsExample"),placeholder_default:'E.g.: "100"'},{type:O.j.SettingsTypes.TYPE_DROPDOWN,key:"TeamSettings.RestrictDirectMessage",label:Object(C.b)("admin.team.restrictDirectMessage"),label_default:"Enable users to open Direct Message channels with:",help_text:Object(C.b)("admin.team.restrictDirectMessageDesc"),help_text_default:'"Any user on the Mattermost server" enables users to open a Direct Message channel with any user on the server, even if they are not on any teams together. "Any member of the team" limits the ability in the Direct Messages "More" menu to only open Direct Message channels with users who are in the same team.\n \nNote: This setting only affects the UI, not permissions on the server.',options:[{value:"any",display_name:Object(C.b)("admin.team.restrict_direct_message_any"),display_name_default:"Any user on the Mattermost server"},{value:"team",display_name:Object(C.b)("admin.team.restrict_direct_message_team"),display_name_default:"Any member of the team"}]},{type:O.j.SettingsTypes.TYPE_DROPDOWN,key:"TeamSettings.TeammateNameDisplay",label:Object(C.b)("admin.team.teammateNameDisplay"),label_default:"Teammate Name Display:",help_text:Object(C.b)("admin.team.teammateNameDisplayDesc"),help_text_default:"Set how to display users' names in posts and the Direct Messages list.",options:[{value:O.j.TEAMMATE_NAME_DISPLAY.SHOW_USERNAME,display_name:Object(C.b)("admin.team.showUsername"),display_name_default:"Show username (default)"},{value:O.j.TEAMMATE_NAME_DISPLAY.SHOW_NICKNAME_FULLNAME,display_name:Object(C.b)("admin.team.showNickname"),display_name_default:"Show nickname if one exists, otherwise show first and last name"},{value:O.j.TEAMMATE_NAME_DISPLAY.SHOW_FULLNAME,display_name:Object(C.b)("admin.team.showFullname"),display_name_default:"Show first and last name"}]},{type:O.j.SettingsTypes.TYPE_BOOL,key:"TeamSettings.LockTeammateNameDisplay",label:Object(C.b)("admin.lockTeammateNameDisplay"),label_default:"Lock Teammate Name Display for all users: ",help_text:Object(C.b)("admin.lockTeammateNameDisplayHelpText"),help_text_default:"When true, disables users' ability to change settings under Main Menu > Account Settings > Display > Teammate Name Display.",isHidden:$l.isnt($l.licensedForFeature("LockTeammateNameDisplay"))},{type:O.j.SettingsTypes.TYPE_PERMISSION,key:"TeamSettings.EditOthersPosts",label:Object(C.b)("admin.team.editOthersPostsTitle"),label_default:"Allow Team Administrators to edit others posts:",help_text:Object(C.b)("admin.team.editOthersPostsDesc"),help_text_default:"When true, Team Administrators and System Administrators can edit other user's posts. When false, only System Administrators can edit other user's posts.",permissions_mapping_name:"editOthersPosts",isHidden:$l.licensed},{type:O.j.SettingsTypes.TYPE_BOOL,key:"TeamSettings.ExperimentalViewArchivedChannels",label:Object(C.b)("admin.viewArchivedChannelsTitle"),label_default:"Allow users to view archived channels: ",help_text:Object(C.b)("admin.viewArchivedChannelsHelpText"),help_text_default:"(Beta) When true, allows users to view, share and search for content of channels that have been archived. Users can only view the content in channels of which they were a member before the channel was archived."},{type:O.j.SettingsTypes.TYPE_BOOL,key:"PrivacySettings.ShowEmailAddress",label:Object(C.b)("admin.privacy.showEmailTitle"),label_default:"Show Email Address:",help_text:Object(C.b)("admin.privacy.showEmailDescription"),help_text_default:"When false, hides the email address of members from everyone except System Administrators."},{type:O.j.SettingsTypes.TYPE_BOOL,key:"PrivacySettings.ShowFullName",label:Object(C.b)("admin.privacy.showFullNameTitle"),label_default:"Show Full Name:",help_text:Object(C.b)("admin.privacy.showFullNameDescription"),help_text_default:"When false, hides the full name of members from everyone except System Administrators. Username is shown in place of full name."}]}},notifications:{url:"environment/notifications",title:Object(C.b)("admin.sidebar.notifications"),title_default:"Notifications",schema:{id:"notifications",name:Object(C.b)("admin.environment.notifications"),name_default:"Notifications",settings:[{type:O.j.SettingsTypes.TYPE_BOOL,key:"TeamSettings.EnableConfirmNotificationsToChannel",label:Object(C.b)("admin.environment.notifications.enableConfirmNotificationsToChannel.label"),label_default:"Show @channel and @all confirmation dialog:",help_text:Object(C.b)("admin.environment.notifications.enableConfirmNotificationsToChannel.help"),help_text_default:"When true, users will be prompted to confirm when posting @channel and @all in channels with over five members. When false, no confirmation is required."},{type:O.j.SettingsTypes.TYPE_BOOL,key:"EmailSettings.SendEmailNotifications",label:Object(C.b)("admin.environment.notifications.enable.label"),label_default:"Enable Email Notifications:",help_text:Object(C.b)("admin.environment.notifications.enable.help"),help_text_default:"Typically set to true in production. When true, Mattermost attempts to send email notifications. When false, email invitations and user account setting change emails are still sent as long as the SMTP server is configured. Developers may set this field to false to skip email setup for faster development."},{type:O.j.SettingsTypes.TYPE_BOOL,key:"EmailSettings.EnablePreviewModeBanner",label:Object(C.b)("admin.environment.notifications.enablePreviewModeBanner.label"),label_default:"Enable Preview Mode Banner:",help_text:Object(C.b)("admin.environment.notifications.enablePreviewModeBanner.help"),help_text_default:"When true, the Preview Mode banner is displayed so users are aware that email notifications are disabled. When false, the Preview Mode banner is not displayed to users.",isDisabled:$l.either($l.stateIsTrue("EmailSettings.SendEmailNotifications"))},{type:O.j.SettingsTypes.TYPE_BOOL,key:"EmailSettings.EnableEmailBatching",label:Object(C.b)("admin.environment.notifications.enableEmailBatching.label"),label_default:"Enable Email Batching:",help_text:Object(C.b)("admin.environment.notifications.enableEmailBatching.help"),help_text_default:"When true, users will have email notifications for multiple direct messages and mentions combined into a single email. Batching will occur at a default interval of 15 minutes, configurable in Account Settings > Notifications.",isDisabled:$l.either($l.stateIsFalse("EmailSettings.SendEmailNotifications"),$l.configIsTrue("ClusterSettings","Enable"),$l.configIsFalse("ServiceSettings","SiteURL"))},{type:O.j.SettingsTypes.TYPE_DROPDOWN,key:"EmailSettings.EmailNotificationContentsType",label:Object(C.b)("admin.environment.notifications.contents.label"),label_default:"Email Notification Contents:",help_text:Object(C.b)("admin.environment.notifications.contents.help"),help_text_default:"**Send full message contents** - Sender name and channel are included in email notifications. Typically used for compliance reasons if Mattermost contains confidential information and policy dictates it cannot be stored in email.\n **Send generic description with only sender name** - Only the name of the person who sent the message, with no information about channel name or message contents are included in email notifications. Typically used for compliance reasons if Mattermost contains confidential information and policy dictates it cannot be stored in email.",help_text_markdown:!0,isHidden:$l.isnt($l.licensedForFeature("EmailNotificationContents")),options:[{value:"full",display_name:Object(C.b)("admin.environment.notifications.contents.full"),display_name_default:"Send full message contents"},{value:"generic",display_name:Object(C.b)("admin.environment.notifications.contents.generic"),display_name_default:"Send generic description with only sender name"}]},{type:O.j.SettingsTypes.TYPE_TEXT,key:"EmailSettings.FeedbackName",label:Object(C.b)("admin.environment.notifications.notificationDisplay.label"),label_default:"Notification Display Name:",placeholder:Object(C.b)("admin.environment.notifications.notificationDisplay.placeholder"),placeholder_default:'Ex: "Mattermost Notification", "System", "No-Reply"',help_text:Object(C.b)("admin.environment.notifications.notificationDisplay.help"),help_text_default:"Display name on email account used when sending notification emails from Mattermost.",isDisabled:$l.stateIsFalse("EmailSettings.SendEmailNotifications")},{type:O.j.SettingsTypes.TYPE_TEXT,key:"EmailSettings.FeedbackEmail",label:Object(C.b)("admin.environment.notifications.feedbackEmail.label"),label_default:"Notification From Address:",placeholder:Object(C.b)("admin.environment.notifications.feedbackEmail.placeholder"),placeholder_default:'Ex: "mattermost@yourcompany.com", "admin@yourcompany.com"',help_text:Object(C.b)("admin.environment.notifications.feedbackEmail.help"),help_text_default:"Email address displayed on email account used when sending notification emails from Mattermost.",isDisabled:$l.stateIsFalse("EmailSettings.SendEmailNotifications"),isHidden:$l.configIsTrue("ExperimentalSettings","RestrictSystemAdmin")},{type:O.j.SettingsTypes.TYPE_TEXT,key:"EmailSettings.ReplyToAddress",label:Object(C.b)("admin.environment.notifications.replyToAddress.label"),label_default:"Notification Reply-To Address:",placeholder:Object(C.b)("admin.environment.notifications.replyToAddress.placeholder"),placeholder_default:'Ex: "mattermost@yourcompany.com", "admin@yourcompany.com"',help_text:Object(C.b)("admin.environment.notifications.replyToAddress.help"),help_text_default:"Email address used in the Reply-To header when sending notification emails from Mattermost.",isDisabled:$l.stateIsFalse("EmailSettings.SendEmailNotifications")},{type:O.j.SettingsTypes.TYPE_TEXT,key:"EmailSettings.FeedbackOrganization",label:Object(C.b)("admin.environment.notifications.feedbackOrganization.label"),label_default:"Notification Footer Mailing Address:",placeholder:Object(C.b)("admin.environment.notifications.feedbackOrganization.placeholder"),placeholder_default:'Ex: "© ABC Corporation, 565 Knight Way, Palo Alto, California, 94305, USA"',help_text:Object(C.b)("admin.environment.notifications.feedbackOrganization.help"),help_text_default:'Organization name and address displayed on email notifications from Mattermost, such as "© ABC Corporation, 565 Knight Way, Palo Alto, California, 94305, USA". If the field is left empty, the organization name and address will not be displayed.',isDisabled:$l.stateIsFalse("EmailSettings.SendEmailNotifications")},{type:O.j.SettingsTypes.TYPE_DROPDOWN,key:"EmailSettings.PushNotificationContents",label:Object(C.b)("admin.environment.notifications.pushContents.label"),label_default:"Push Notification Contents:",help_text:Object(C.b)("admin.environment.notifications.pushContents.help"),help_text_default:"**Generic description with only sender name** - Includes only the name of the person who sent the message in push notifications, with no information about channel name or message contents.\n **Generic description with sender and channel names** - Includes the name of the person who sent the message and the channel it was sent in, but not the message contents.\n **Full message content sent in the notification payload** - Includes the message contents in the push notification payload that is relayed through Apple's Push Notification Service (APNS) or Google's Firebase Cloud Messaging (FCM). It is **highly recommended** this option only be used with an \"https\" protocol to encrypt the connection and protect confidential information sent in messages.",help_text_markdown:!0,isHidden:$l.licensedForFeature("IDLoadedPushNotifications"),options:[{value:"generic_no_channel",display_name:Object(C.b)("admin.environment.notifications.pushContents.genericNoChannel"),display_name_default:"Generic description with only sender name"},{value:"generic",display_name:Object(C.b)("admin.environment.notifications.pushContents.generic"),display_name_default:"Generic description with sender and channel names"},{value:"full",display_name:Object(C.b)("admin.environment.notifications.pushContents.full"),display_name_default:"Full message content sent in the notification payload"}]},{type:O.j.SettingsTypes.TYPE_DROPDOWN,key:"EmailSettings.PushNotificationContents",label:Object(C.b)("admin.environment.notifications.pushContents.label"),label_default:"Push Notification Contents:",help_text:Object(C.b)("admin.environment.notifications.pushContents.withIdLoaded.help"),help_text_default:"**Generic description with only sender name** - Includes only the name of the person who sent the message in push notifications, with no information about channel name or message contents.\n **Generic description with sender and channel names** - Includes the name of the person who sent the message and the channel it was sent in, but not the message contents.\n **Full message content sent in the notification payload** - Includes the message contents in the push notification payload that is relayed through Apple's Push Notification Service (APNS) or Google's Firebase Cloud Messaging (FCM). It is **highly recommended** this option only be used with an \"https\" protocol to encrypt the connection and protect confidential information sent in messages.\n **Full message content fetched from the server on receipt** - The notification payload relayed through APNS or FCM contains no message content, instead it contains a unique message ID used to fetch message content from the server when a push notification is received by a device. If the server cannot be reached, a generic notification will be displayed.",help_text_markdown:!0,isHidden:$l.isnt($l.licensedForFeature("IDLoadedPushNotifications")),options:[{value:"generic_no_channel",display_name:Object(C.b)("admin.environment.notifications.pushContents.genericNoChannel"),display_name_default:"Generic description with only sender name"},{value:"generic",display_name:Object(C.b)("admin.environment.notifications.pushContents.generic"),display_name_default:"Generic description with sender and channel names"},{value:"full",display_name:Object(C.b)("admin.environment.notifications.pushContents.full"),display_name_default:"Full message content sent in the notification payload"},{value:"id_loaded",display_name:Object(C.b)("admin.environment.notifications.pushContents.idLoaded"),display_name_default:"Full message content fetched from the server on receipt"}]}]}},announcement_banner:{url:"site_config/announcement_banner",title:Object(C.b)("admin.sidebar.announcement"),title_default:"Announcement Banner",isHidden:$l.isnt($l.licensed),schema:{id:"AnnouncementSettings",name:Object(C.b)("admin.site.announcementBanner"),name_default:"Announcement Banner",settings:[{type:O.j.SettingsTypes.TYPE_BOOL,key:"AnnouncementSettings.EnableBanner",label:Object(C.b)("admin.customization.announcement.enableBannerTitle"),label_default:"Enable Announcement Banner:",help_text:Object(C.b)("admin.customization.announcement.enableBannerDesc"),help_text_default:"Enable an announcement banner across all teams."},{type:O.j.SettingsTypes.TYPE_TEXT,key:"AnnouncementSettings.BannerText",label:Object(C.b)("admin.customization.announcement.bannerTextTitle"),label_default:"Banner Text:",help_text:Object(C.b)("admin.customization.announcement.bannerTextDesc"),help_text_default:"Text that will appear in the announcement banner.",isDisabled:$l.stateIsFalse("AnnouncementSettings.EnableBanner")},{type:O.j.SettingsTypes.TYPE_COLOR,key:"AnnouncementSettings.BannerColor",label:Object(C.b)("admin.customization.announcement.bannerColorTitle"),label_default:"Banner Color:",isDisabled:$l.stateIsFalse("AnnouncementSettings.EnableBanner")},{type:O.j.SettingsTypes.TYPE_COLOR,key:"AnnouncementSettings.BannerTextColor",label:Object(C.b)("admin.customization.announcement.bannerTextColorTitle"),label_default:"Banner Text Color:",isDisabled:$l.stateIsFalse("AnnouncementSettings.EnableBanner")},{type:O.j.SettingsTypes.TYPE_BOOL,key:"AnnouncementSettings.AllowBannerDismissal",label:Object(C.b)("admin.customization.announcement.allowBannerDismissalTitle"),label_default:"Allow Banner Dismissal:",help_text:Object(C.b)("admin.customization.announcement.allowBannerDismissalDesc"),help_text_default:"When true, users can dismiss the banner until its next update. When false, the banner is permanently visible until it is turned off by the System Admin.",isDisabled:$l.stateIsFalse("AnnouncementSettings.EnableBanner")}]}},emoji:{url:"site_config/emoji",title:Object(C.b)("admin.sidebar.emoji"),title_default:"Emoji",schema:{id:"EmojiSettings",name:Object(C.b)("admin.site.emoji"),name_default:"Emoji",settings:[{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.EnableEmojiPicker",label:Object(C.b)("admin.customization.enableEmojiPickerTitle"),label_default:"Enable Emoji Picker:",help_text:Object(C.b)("admin.customization.enableEmojiPickerDesc"),help_text_default:"The emoji picker allows users to select emoji to add as reactions or use in messages. Enabling the emoji picker with a large number of custom emoji may slow down performance."},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.EnableCustomEmoji",label:Object(C.b)("admin.customization.enableCustomEmojiTitle"),label_default:"Enable Custom Emoji:",help_text:Object(C.b)("admin.customization.enableCustomEmojiDesc"),help_text_default:'Enable users to create custom emoji for use in messages. When enabled, Custom Emoji settings can be accessed by switching to a team and clicking the three dots above the channel sidebar, and selecting "Custom Emoji".'}]}},posts:{url:"site_config/posts",title:Object(C.b)("admin.sidebar.posts"),title_default:"Posts",schema:{id:"PostSettings",name:Object(C.b)("admin.site.posts"),name_default:"Posts",settings:[{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.EnableLinkPreviews",label:Object(C.b)("admin.customization.enableLinkPreviewsTitle"),label_default:"Enable Link Previews:",help_text:Object(C.b)("admin.customization.enableLinkPreviewsDesc"),help_text_default:"Display a preview of website content, image links and YouTube links below the message when available. The server must be connected to the internet and have access through the firewall (if applicable) to the websites from which previews are expected. Users can disable these previews from Account Settings > Display > Website Link Previews."},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.EnableSVGs",label:Object(C.b)("admin.customization.enableSVGsTitle"),label_default:"Enable SVGs:",help_text:Object(C.b)("admin.customization.enableSVGsDesc"),help_text_default:"Enable previews for SVG file attachments and allow them to appear in messages."},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.EnableLatex",label:Object(C.b)("admin.customization.enableLatexTitle"),label_default:"Enable Latex Rendering:",help_text:Object(C.b)("admin.customization.enableLatexDesc"),help_text_default:"Enable rending of Latex code. If false, Latex code will be highlighted only."},{type:O.j.SettingsTypes.TYPE_CUSTOM,component:ea,key:"DisplaySettings.CustomUrlSchemes"},{type:O.j.SettingsTypes.TYPE_TEXT,key:"ServiceSettings.GoogleDeveloperKey",label:Object(C.b)("admin.service.googleTitle"),label_default:"Google API Key:",placeholder:Object(C.b)("admin.service.googleExample"),placeholder_default:'E.g.: "7rAh6iwQCkV4cA1Gsg3fgGOXJAQ43QV"',help_text:Object(C.b)("admin.service.googleDescription"),help_text_default:"Set this key to enable the display of titles for embedded YouTube video previews. Without the key, YouTube previews will still be created based on hyperlinks appearing in messages or comments but they will not show the video title. View a [Google Developers Tutorial](!https://www.youtube.com/watch?v=Im69kzhpR3I) for instructions on how to obtain a key and add YouTube Data API v3 as a service to your key.",help_text_markdown:!0,isHidden:$l.configIsTrue("ExperimentalSettings","RestrictSystemAdmin")}]}},file_sharing_downloads:{url:"site_config/file_sharing_downloads",title:Object(C.b)("admin.sidebar.fileSharingDownloads"),title_default:"File Sharing and Downloads",schema:{id:"FileSharingDownloads",name:Object(C.b)("admin.site.fileSharingDownloads"),name_default:"File Sharing and Downloads",settings:[{type:O.j.SettingsTypes.TYPE_BOOL,key:"FileSettings.EnableFileAttachments",label:Object(C.b)("admin.file.enableFileAttachments"),label_default:"Allow File Sharing:",help_text:Object(C.b)("admin.file.enableFileAttachmentsDesc"),help_text_default:"When false, disables file sharing on the server. All file and image uploads on messages are forbidden across clients and devices, including mobile."},{type:O.j.SettingsTypes.TYPE_BOOL,key:"FileSettings.EnableMobileUpload",label:Object(C.b)("admin.file.enableMobileUploadTitle"),label_default:"Allow File Uploads on Mobile:",help_text:Object(C.b)("admin.file.enableMobileUploadDesc"),help_text_default:"When false, disables file uploads on mobile apps. If Allow File Sharing is set to true, users can still upload files from a mobile web browser.",isHidden:$l.isnt($l.licensedForFeature("Compliance"))},{type:O.j.SettingsTypes.TYPE_BOOL,key:"FileSettings.EnableMobileDownload",label:Object(C.b)("admin.file.enableMobileDownloadTitle"),label_default:"Allow File Downloads on Mobile:",help_text:Object(C.b)("admin.file.enableMobileDownloadDesc"),help_text_default:"When false, disables file downloads on mobile apps. Users can still download files from a mobile web browser.",isHidden:$l.isnt($l.licensedForFeature("Compliance"))}]}},public_links:{url:"site_config/public_links",title:Object(C.b)("admin.sidebar.publicLinks"),title_default:"Public Links",schema:{id:"PublicLinkSettings",name:Object(C.b)("admin.site.public_links"),name_default:"Public Links",settings:[{type:O.j.SettingsTypes.TYPE_BOOL,key:"FileSettings.EnablePublicLink",label:Object(C.b)("admin.image.shareTitle"),label_default:"Enable Public File Links: ",help_text:Object(C.b)("admin.image.shareDescription"),help_text_default:"Allow users to share public links to files and images."},{type:O.j.SettingsTypes.TYPE_GENERATED,key:"FileSettings.PublicLinkSalt",label:Object(C.b)("admin.image.publicLinkTitle"),label_default:"Public Link Salt:",help_text:Object(C.b)("admin.image.publicLinkDescription"),help_text_default:'32-character salt added to signing of public image links. Randomly generated on install. Click "Regenerate" to create new salt.'}]}}},authentication:{icon:"fa-shield",sectionTitle:Object(C.b)("admin.sidebar.authentication"),sectionTitleDefault:"Authentication",signup:{url:"authentication/signup",title:Object(C.b)("admin.sidebar.signup"),title_default:"Signup",schema:{id:"SignupSettings",name:Object(C.b)("admin.authentication.signup"),name_default:"Signup",settings:[{type:O.j.SettingsTypes.TYPE_BOOL,key:"TeamSettings.EnableUserCreation",label:Object(C.b)("admin.team.userCreationTitle"),label_default:"Enable Account Creation: ",help_text:Object(C.b)("admin.team.userCreationDescription"),help_text_default:"When false, the ability to create accounts is disabled. The create account button displays error when pressed."},{type:O.j.SettingsTypes.TYPE_TEXT,key:"TeamSettings.RestrictCreationToDomains",label:Object(C.b)("admin.team.restrictTitle"),label_default:"Restrict account creation to specified email domains:",help_text:Object(C.b)("admin.team.restrictDescription"),help_text_default:'User accounts can only be created from a specific domain (e.g. "mattermost.org") or list of comma-separated domains (e.g. "corp.mattermost.com, mattermost.org"). This setting only affects email login for users.',placeholder:Object(C.b)("admin.team.restrictExample"),placeholder_default:'E.g.: "corp.mattermost.com, mattermost.org"',isHidden:$l.licensed},{type:O.j.SettingsTypes.TYPE_TEXT,key:"TeamSettings.RestrictCreationToDomains",label:Object(C.b)("admin.team.restrictTitle"),label_default:"Restrict account creation to specified email domains:",help_text:Object(C.b)("admin.team.restrictGuestDescription"),help_text_default:'User accounts can only be created from a specific domain (e.g. "mattermost.org") or list of comma-separated domains (e.g. "corp.mattermost.com, mattermost.org"). This setting only affects email login for users. For Guest users, please add domains under Signup > Guest Access.',placeholder:Object(C.b)("admin.team.restrictExample"),placeholder_default:'E.g.: "corp.mattermost.com, mattermost.org"',isHidden:$l.isnt($l.licensed)},{type:O.j.SettingsTypes.TYPE_BOOL,key:"TeamSettings.EnableOpenServer",label:Object(C.b)("admin.team.openServerTitle"),label_default:"Enable Open Server: ",help_text:Object(C.b)("admin.team.openServerDescription"),help_text_default:"When true, anyone can signup for a user account on this server without the need to be invited.",isHidden:$l.configIsTrue("ExperimentalSettings","RestrictSystemAdmin")},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.EnableEmailInvitations",label:Object(C.b)("admin.team.emailInvitationsTitle"),label_default:"Enable Email Invitations: ",help_text:Object(C.b)("admin.team.emailInvitationsDescription"),help_text_default:"When true users can invite others to the system using email."},{type:O.j.SettingsTypes.TYPE_BUTTON,key:"InvalidateEmailInvitesButton",action:f.v,label:Object(C.b)("admin.team.invalidateEmailInvitesTitle"),label_default:"Invalidate pending email invites",help_text:Object(C.b)("admin.team.invalidateEmailInvitesDescription"),help_text_default:"This will invalidate active email invitations that have not been accepted by the user. By default email invitations expire after 48 hours.",error_message:Object(C.b)("admin.team.invalidateEmailInvitesFail"),error_message_default:"Unable to invalidate pending email invites: {error}",success_message:Object(C.b)("admin.team.invalidateEmailInvitesSuccess"),success_message_default:"Pending email invitations invalidated successfully"}]}},email:{url:"authentication/email",title:Object(C.b)("admin.sidebar.email"),title_default:"Email",schema:{id:"EmailSettings",name:Object(C.b)("admin.authentication.email"),name_default:"Email",settings:[{type:O.j.SettingsTypes.TYPE_BOOL,key:"EmailSettings.EnableSignUpWithEmail",label:Object(C.b)("admin.email.allowSignupTitle"),label_default:"Enable account creation with email:",help_text:Object(C.b)("admin.email.allowSignupDescription"),help_text_default:"When true, Mattermost allows account creation using email and password. This value should be false only when you want to limit sign up to a single sign-on service like AD/LDAP, SAML or GitLab."},{type:O.j.SettingsTypes.TYPE_BOOL,key:"EmailSettings.RequireEmailVerification",label:Object(C.b)("admin.email.requireVerificationTitle"),label_default:"Require Email Verification: ",help_text:Object(C.b)("admin.email.requireVerificationDescription"),help_text_default:"Typically set to true in production. When true, Mattermost requires email verification after account creation prior to allowing login. Developers may set this field to false to skip sending verification emails for faster development.",disabled_help_text:Object(C.b)("admin.security.requireEmailVerification.disabled"),disabled_help_text_default:"Email verification cannot be changed while sending emails is disabled.",isDisabled:e=>!e.EmailSettings.SendEmailNotifications},{type:O.j.SettingsTypes.TYPE_BOOL,key:"EmailSettings.EnableSignInWithEmail",label:Object(C.b)("admin.email.allowEmailSignInTitle"),label_default:"Enable sign-in with email:",help_text:Object(C.b)("admin.email.allowEmailSignInDescription"),help_text_default:"When true, Mattermost allows users to sign in using their email and password."},{type:O.j.SettingsTypes.TYPE_BOOL,key:"EmailSettings.EnableSignInWithUsername",label:Object(C.b)("admin.email.allowUsernameSignInTitle"),label_default:"Enable sign-in with username:",help_text:Object(C.b)("admin.email.allowUsernameSignInDescription"),help_text_default:"When true, users with email login can sign in using their username and password. This setting does not affect AD/LDAP login."}]}},password:{url:"authentication/password",title:Object(C.b)("admin.sidebar.password"),title_default:"Password",searchableStrings:["user.settings.security.passwordMinLength","admin.security.password",["admin.password.minimumLength",{max:"",min:""}],["admin.password.minimumLengthDescription",{max:"",min:""}],"passwordRequirements","admin.password.lowercase","admin.password.uppercase","admin.password.number","admin.password.symbol","admin.password.preview","admin.service.attemptTitle","admin.service.attemptDescription"],schema:{id:"PasswordSettings",component:class extends Se{constructor(e){super(e),bl(this,"getConfigFromState",e=>(e.PasswordSettings.MinimumLength=this.parseIntNonZero(this.state.passwordMinimumLength,O.Q.MIN_PASSWORD_LENGTH),e.PasswordSettings.Lowercase=this.refs.lowercase.checked,e.PasswordSettings.Uppercase=this.refs.uppercase.checked,e.PasswordSettings.Number=this.refs.number.checked,e.PasswordSettings.Symbol=this.refs.symbol.checked,e.ServiceSettings.MaximumLoginAttempts=this.parseIntNonZero(this.state.maximumLoginAttempts),e)),bl(this,"getSampleErrorMsg",e=>{if(this.props.config.PasswordSettings.MinimumLength>O.Q.MAX_PASSWORD_LENGTH||this.props.config.PasswordSettings.MinimumLength<O.Q.MIN_PASSWORD_LENGTH)return S.a.createElement(T.a,{id:"user.settings.security.passwordMinLength",default:"Invalid minimum length, cannot show preview."});let t="user.settings.security.passwordError";return this.refs.lowercase.checked&&(t+="Lowercase"),this.refs.uppercase.checked&&(t+="Uppercase"),this.refs.number.checked&&(t+="Number"),this.refs.symbol.checked&&(t+="Symbol"),S.a.createElement(T.a,{id:t,default:"Your password must contain between {min} and {max} characters.",values:{min:e||O.Q.MIN_PASSWORD_LENGTH,max:O.Q.MAX_PASSWORD_LENGTH}})}),bl(this,"handlePasswordLengthChange",(e,t)=>{this.sampleErrorMsg=this.getSampleErrorMsg(t),this.handleChange(e,t)}),bl(this,"handleCheckboxChange",(e,t)=>{this.sampleErrorMsg=this.getSampleErrorMsg(this.state.passwordMinimumLength),this.handleChange(e,t)}),bl(this,"renderSettings",()=>S.a.createElement(xe,null,S.a.createElement("div",null,S.a.createElement(Ae,{id:"passwordMinimumLength",label:S.a.createElement(T.a,{id:"admin.password.minimumLength",defaultMessage:"Minimum Password Length:"}),placeholder:I.gb("admin.password.minimumLengthExample",'E.g.: "5"'),helpText:S.a.createElement(T.a,{id:"admin.password.minimumLengthDescription",defaultMessage:"Minimum number of characters required for a valid password. Must be a whole number greater than or equal to {min} and less than or equal to {max}.",values:{min:O.Q.MIN_PASSWORD_LENGTH,max:O.Q.MAX_PASSWORD_LENGTH}}),value:this.state.passwordMinimumLength,onChange:this.handlePasswordLengthChange,setByEnv:this.isSetByEnv("PasswordSettings.MinimumLength")}),S.a.createElement(Oe,{label:S.a.createElement(T.a,{id:"passwordRequirements",defaultMessage:"Password Requirements:"})},S.a.createElement("div",null,S.a.createElement("label",{className:"checkbox-inline"},S.a.createElement("input",{type:"checkbox",ref:"lowercase",defaultChecked:this.state.passwordLowercase,name:"admin.password.lowercase",onChange:this.handleCheckboxChange}),S.a.createElement(T.a,{id:"admin.password.lowercase",defaultMessage:"At least one lowercase letter"}))),S.a.createElement("div",null,S.a.createElement("label",{className:"checkbox-inline"},S.a.createElement("input",{type:"checkbox",ref:"uppercase",defaultChecked:this.state.passwordUppercase,name:"admin.password.uppercase",onChange:this.handleCheckboxChange}),S.a.createElement(T.a,{id:"admin.password.uppercase",defaultMessage:"At least one uppercase letter"}))),S.a.createElement("div",null,S.a.createElement("label",{className:"checkbox-inline"},S.a.createElement("input",{type:"checkbox",ref:"number",defaultChecked:this.state.passwordNumber,name:"admin.password.number",onChange:this.handleCheckboxChange}),S.a.createElement(T.a,{id:"admin.password.number",defaultMessage:"At least one number"}))),S.a.createElement("div",null,S.a.createElement("label",{className:"checkbox-inline"},S.a.createElement("input",{type:"checkbox",ref:"symbol",defaultChecked:this.state.passwordSymbol,name:"admin.password.symbol",onChange:this.handleCheckboxChange}),S.a.createElement(T.a,{id:"admin.password.symbol",defaultMessage:'At least one symbol (e.g. "~!@#$%^&*()")'}))),S.a.createElement("div",null,S.a.createElement("br",null),S.a.createElement("label",null,S.a.createElement(T.a,{id:"admin.password.preview",defaultMessage:"Error message preview:"})),S.a.createElement("br",null),this.sampleErrorMsg))),S.a.createElement(Ae,{id:"maximumLoginAttempts",label:S.a.createElement(T.a,{id:"admin.service.attemptTitle",defaultMessage:"Maximum Login Attempts:"}),placeholder:I.gb("admin.service.attemptExample",'E.g.: "10"'),helpText:S.a.createElement(T.a,{id:"admin.service.attemptDescription",defaultMessage:"Login attempts allowed before user is locked out and required to reset password via email."}),value:this.state.maximumLoginAttempts,onChange:this.handleChange,setByEnv:this.isSetByEnv("ServiceSettings.MaximumLoginAttempts")}))),this.state=Object.assign(this.state,{passwordMinimumLength:e.config.PasswordSettings.MinimumLength,passwordLowercase:e.config.PasswordSettings.Lowercase,passwordNumber:e.config.PasswordSettings.Number,passwordUppercase:e.config.PasswordSettings.Uppercase,passwordSymbol:e.config.PasswordSettings.Symbol,maximumLoginAttempts:e.config.ServiceSettings.MaximumLoginAttempts}),Object(C.b)("user.settings.security.passwordErrorLowercase"),Object(C.b)("user.settings.security.passwordErrorLowercaseUppercase"),Object(C.b)("user.settings.security.passwordErrorLowercaseUppercaseNumber"),Object(C.b)("user.settings.security.passwordErrorLowercaseUppercaseNumberSymbol"),Object(C.b)("user.settings.security.passwordErrorLowercaseUppercaseSymbol"),Object(C.b)("user.settings.security.passwordErrorLowercaseNumber"),Object(C.b)("user.settings.security.passwordErrorLowercaseNumberSymbol"),Object(C.b)("user.settings.security.passwordErrorLowercaseSymbol"),Object(C.b)("user.settings.security.passwordErrorUppercase"),Object(C.b)("user.settings.security.passwordErrorUppercaseNumber"),Object(C.b)("user.settings.security.passwordErrorUppercaseNumberSymbol"),Object(C.b)("user.settings.security.passwordErrorUppercaseSymbol"),Object(C.b)("user.settings.security.passwordErrorNumber"),Object(C.b)("user.settings.security.passwordErrorNumberSymbol"),Object(C.b)("user.settings.security.passwordErrorSymbol");let t="user.settings.security.passwordError";e.config.PasswordSettings.Lowercase&&(t+="Lowercase"),e.config.PasswordSettings.Uppercase&&(t+="Uppercase"),e.config.PasswordSettings.Number&&(t+="Number"),e.config.PasswordSettings.Symbol&&(t+="Symbol"),this.sampleErrorMsg=S.a.createElement(T.a,{id:t,default:"Your password must contain between {min} and {max} characters.",values:{min:this.state.passwordMinimumLength||O.Q.MIN_PASSWORD_LENGTH,max:O.Q.MAX_PASSWORD_LENGTH}})}getStateFromConfig(e){return{passwordMinimumLength:e.PasswordSettings.MinimumLength,passwordLowercase:e.PasswordSettings.Lowercase,passwordNumber:e.PasswordSettings.Number,passwordUppercase:e.PasswordSettings.Uppercase,passwordSymbol:e.PasswordSettings.Symbol,maximumLoginAttempts:e.ServiceSettings.MaximumLoginAttempts}}renderTitle(){return S.a.createElement(T.a,{id:"admin.security.password",defaultMessage:"Password"})}}}},mfa:{url:"authentication/mfa",title:Object(C.b)("admin.sidebar.mfa"),title_default:"MFA",schema:{id:"ServiceSettings",name:Object(C.b)("admin.authentication.mfa"),name_default:"Multi-factor Authentication",settings:[{type:O.j.SettingsTypes.TYPE_BANNER,label:Object(C.b)("admin.mfa.bannerDesc"),label_default:"[Multi-factor authentication](!https://docs.mattermost.com/deployment/auth.html) is available for accounts with AD/LDAP or email login. If other login methods are used, MFA should be configured with the authentication provider.",label_markdown:!0,banner_type:"info"},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.EnableMultifactorAuthentication",label:Object(C.b)("admin.service.mfaTitle"),label_default:"Enable Multi-factor Authentication:",help_text:Object(C.b)("admin.service.mfaDesc"),help_text_default:"When true, users with AD/LDAP or email login can add multi-factor authentication to their account using Google Authenticator."},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.EnforceMultifactorAuthentication",label:Object(C.b)("admin.service.enforceMfaTitle"),label_default:"Enforce Multi-factor Authentication:",help_text:Object(C.b)("admin.service.enforceMfaDesc"),help_text_markdown:!0,help_text_default:"When true, [multi-factor authentication](!https://docs.mattermost.com/deployment/auth.html) is required for login. New users will be required to configure MFA on signup. Logged in users without MFA configured are redirected to the MFA setup page until configuration is complete.\n \nIf your system has users with login methods other than AD/LDAP and email, MFA must be enforced with the authentication provider outside of Mattermost.",isDisabled:$l.stateIsFalse("ServiceSettings.EnableMultifactorAuthentication"),isHidden:$l.isnt($l.licensedForFeature("MFA"))}]}},ldap:{url:"authentication/ldap",title:Object(C.b)("admin.sidebar.ldap"),title_default:"AD/LDAP",isHidden:$l.isnt($l.licensedForFeature("LDAP")),schema:{id:"LdapSettings",name:Object(C.b)("admin.authentication.ldap"),name_default:"AD/LDAP",settings:[{type:O.j.SettingsTypes.TYPE_BOOL,key:"LdapSettings.Enable",label:Object(C.b)("admin.ldap.enableTitle"),label_default:"Enable sign-in with AD/LDAP:",help_text:Object(C.b)("admin.ldap.enableDesc"),help_text_default:"When true, Mattermost allows login using AD/LDAP"},{type:O.j.SettingsTypes.TYPE_BOOL,key:"LdapSettings.EnableSync",label:Object(C.b)("admin.ldap.enableSyncTitle"),label_default:"Enable Synchronization with AD/LDAP:",help_text:Object(C.b)("admin.ldap.enableSyncDesc"),help_text_default:"When true, Mattermost periodically synchronizes users from AD/LDAP. When false, user attributes are updated from AD/LDAP during user login only."},{type:O.j.SettingsTypes.TYPE_TEXT,key:"LdapSettings.LdapServer",label:Object(C.b)("admin.ldap.serverTitle"),label_default:"AD/LDAP Server:",help_text:Object(C.b)("admin.ldap.serverDesc"),help_text_default:"The domain or IP address of AD/LDAP server.",placeholder:Object(C.b)("admin.ldap.serverEx"),placeholder_default:'E.g.: "10.0.0.23"',isDisabled:$l.both($l.stateIsFalse("LdapSettings.Enable"),$l.stateIsFalse("LdapSettings.EnableSync"))},{type:O.j.SettingsTypes.TYPE_NUMBER,key:"LdapSettings.LdapPort",label:Object(C.b)("admin.ldap.portTitle"),label_default:"AD/LDAP Port:",help_text:Object(C.b)("admin.ldap.portDesc"),help_text_default:"The port Mattermost will use to connect to the AD/LDAP server. Default is 389.",placeholder:Object(C.b)("admin.ldap.portEx"),placeholder_default:'E.g.: "389"',isDisabled:$l.both($l.stateIsFalse("LdapSettings.Enable"),$l.stateIsFalse("LdapSettings.EnableSync"))},{type:O.j.SettingsTypes.TYPE_DROPDOWN,key:"LdapSettings.ConnectionSecurity",label:Object(C.b)("admin.connectionSecurityTitle"),label_default:"Connection Security:",help_text:Wl,options:[{value:"",display_name:Object(C.b)("admin.connectionSecurityNone"),display_name_default:"None"},{value:"TLS",display_name:Object(C.b)("admin.connectionSecurityTls"),display_name_default:"TLS (Recommended)"},{value:"STARTTLS",display_name:Object(C.b)("admin.connectionSecurityStart"),display_name_default:"STARTTLS"}],isDisabled:$l.both($l.stateIsFalse("LdapSettings.Enable"),$l.stateIsFalse("LdapSettings.EnableSync"))},{type:O.j.SettingsTypes.TYPE_BOOL,key:"LdapSettings.SkipCertificateVerification",label:Object(C.b)("admin.ldap.skipCertificateVerification"),label_default:"Skip Certificate Verification:",help_text:Object(C.b)("admin.ldap.skipCertificateVerificationDesc"),help_text_default:"Skips the certificate verification step for TLS or STARTTLS connections. Skipping certificate verification is not recommended for production environments where TLS is required.",isDisabled:$l.stateIsFalse("LdapSettings.ConnectionSecurity")},{type:O.j.SettingsTypes.TYPE_TEXT,key:"LdapSettings.BaseDN",label:Object(C.b)("admin.ldap.baseTitle"),label_default:"BaseDN:",help_text:Object(C.b)("admin.ldap.baseDesc"),help_text_default:"The Base DN is the Distinguished Name of the location where Mattermost should start its search for user and group objects in the AD/LDAP tree.",placeholder:Object(C.b)("admin.ldap.baseEx"),placeholder_default:'E.g.: "ou=Unit Name,dc=corp,dc=example,dc=com"',isDisabled:$l.both($l.stateIsFalse("LdapSettings.Enable"),$l.stateIsFalse("LdapSettings.EnableSync"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"LdapSettings.BindUsername",label:Object(C.b)("admin.ldap.bindUserTitle"),label_default:"Bind Username:",help_text:Object(C.b)("admin.ldap.bindUserDesc"),help_text_default:"The username used to perform the AD/LDAP search. This should typically be an account created specifically for use with Mattermost. It should have access limited to read the portion of the AD/LDAP tree specified in the BaseDN field.",isDisabled:$l.both($l.stateIsFalse("LdapSettings.Enable"),$l.stateIsFalse("LdapSettings.EnableSync"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"LdapSettings.BindPassword",label:Object(C.b)("admin.ldap.bindPwdTitle"),label_default:"Bind Password:",help_text:Object(C.b)("admin.ldap.bindPwdDesc"),help_text_default:'Password of the user given in "Bind Username".',isDisabled:$l.both($l.stateIsFalse("LdapSettings.Enable"),$l.stateIsFalse("LdapSettings.EnableSync"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"LdapSettings.UserFilter",label:Object(C.b)("admin.ldap.userFilterTitle"),label_default:"User Filter:",help_text:Object(C.b)("admin.ldap.userFilterDisc"),help_text_default:"(Optional) Enter an AD/LDAP filter to use when searching for user objects. Only the users selected by the query will be able to access Mattermost. For Active Directory, the query to filter out disabled users is (&(objectCategory=Person)(!(UserAccountControl:1.2.840.113556.1.4.803:=2))).",placeholder:Object(C.b)("admin.ldap.userFilterEx"),placeholder_default:'Ex. "(objectClass=user)"',isDisabled:$l.both($l.stateIsFalse("LdapSettings.Enable"),$l.stateIsFalse("LdapSettings.EnableSync"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"LdapSettings.GuestFilter",label:Object(C.b)("admin.ldap.guestFilterTitle"),label_default:"Guest Filter:",help_text:Object(C.b)("admin.ldap.guestFilterFilterDesc"),help_text_default:"(Optional) Requires Guest Access to be enabled before being applied. Enter an AD/LDAP filter to use when searching for guest objects. Only the users selected by the query will be able to access Mattermost as Guests. Guests are prevented from accessing teams or channels upon logging in until they are assigned a team and at least one channel.\n \nNote: If this filter is removed/changed, active guests will not be promoted to a member and will retain their Guest role. Guests can be promoted in **System Console > User Management**.\n \n \nExisting members that are identified by this attribute as a guest will be demoted from a member to a guest when they are asked to login next. The next login is based upon Session lengths set in **System Console > Session Lengths**. It is highly recommend to manually demote users to guests in **System Console > User Management ** to ensure access is restricted immediately.",help_text_markdown:!0,placeholder:Object(C.b)("admin.ldap.guestFilterEx"),placeholder_default:'E.g.: "(objectClass=guests)"',isDisabled:$l.either($l.configIsFalse("GuestAccountsSettings","Enable"),$l.both($l.stateIsFalse("LdapSettings.Enable"),$l.stateIsFalse("LdapSettings.EnableSync")))},{type:O.j.SettingsTypes.TYPE_BOOL,key:"LdapSettings.EnableAdminFilter",label:Object(C.b)("admin.ldap.enableAdminFilterTitle"),label_default:"Enable Admin Filter:",isDisabled:$l.both($l.stateIsFalse("LdapSettings.Enable"),$l.stateIsFalse("LdapSettings.EnableSync"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"LdapSettings.AdminFilter",label:Object(C.b)("admin.ldap.adminFilterTitle"),label_default:"Admin Filter:",help_text:Object(C.b)("admin.ldap.adminFilterFilterDesc"),help_text_default:"(Optional) Enter an AD/LDAP filter to use for designating System Admins. The users selected by the query will have access to your Mattermost server as System Admins. By default, System Admins have complete access to the Mattermost System Console.\n \nExisting members that are identified by this attribute will be promoted from member to System Admin upon next login. The next login is based upon Session lengths set in **System Console > Session Lengths**. It is highly recommend to manually demote users to members in **System Console > User Management** to ensure access is restricted immediately.\n \nNote: If this filter is removed/changed, System Admins that were promoted via this filter will be demoted to members and will not retain access to the System Console. When this filter is not in use, System Admins can be manually promoted/demoted in **System Console > User Management**.",help_text_markdown:!0,placeholder:Object(C.b)("admin.ldap.adminFilterEx"),placeholder_default:'E.g.: "(objectClass=admins)"',isDisabled:$l.either($l.stateIsFalse("LdapSettings.EnableAdminFilter"),$l.both($l.stateIsFalse("LdapSettings.Enable"),$l.stateIsFalse("LdapSettings.EnableSync")))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"LdapSettings.GroupFilter",label:Object(C.b)("admin.ldap.groupFilterTitle"),label_default:"Group Filter:",help_text:Object(C.b)("admin.ldap.groupFilterFilterDesc"),help_text_markdown:!0,help_text_default:"(Optional) Enter an AD/LDAP filter to use when searching for group objects. Only the groups selected by the query will be available to Mattermost. From [User Management > Groups]({siteURL}/admin_console/user_management/groups), select which AD/LDAP groups should be linked and configured.",help_text_values:{siteURL:Object(w.e)()},placeholder:Object(C.b)("admin.ldap.groupFilterEx"),placeholder_default:'E.g.: "(objectClass=group)"',isDisabled:$l.stateIsFalse("LdapSettings.EnableSync"),isHidden:$l.isnt($l.licensedForFeature("LDAPGroups"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"LdapSettings.GroupDisplayNameAttribute",label:Object(C.b)("admin.ldap.groupDisplayNameAttributeTitle"),label_default:"Group Display Name Attribute:",help_text:Object(C.b)("admin.ldap.groupDisplayNameAttributeDesc"),help_text_default:"The attribute in the AD/LDAP server used to populate the group display names.",placeholder:Object(C.b)("admin.ldap.groupDisplayNameAttributeEx"),placeholder_default:'E.g.: "cn"',isDisabled:$l.stateIsFalse("LdapSettings.EnableSync"),isHidden:$l.isnt($l.licensedForFeature("LDAPGroups"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"LdapSettings.GroupIdAttribute",label:Object(C.b)("admin.ldap.groupIdAttributeTitle"),label_default:"Group ID Attribute:",help_text:Object(C.b)("admin.ldap.groupIdAttributeDesc"),help_text_default:"The attribute in the AD/LDAP server used as a unique identifier for Groups. This should be a AD/LDAP attribute with a value that does not change such as `entryUUID` for LDAP or `objectGUID` for Active Directory.",help_text_markdown:!0,placeholder:Object(C.b)("admin.ldap.groupIdAttributeEx"),placeholder_default:'E.g.: "objectGUID" or "entryUUID"',isDisabled:$l.stateIsFalse("LdapSettings.EnableSync"),isHidden:$l.isnt($l.licensedForFeature("LDAPGroups"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"LdapSettings.FirstNameAttribute",label:Object(C.b)("admin.ldap.firstnameAttrTitle"),label_default:"First Name Attribute:",placeholder:Object(C.b)("admin.ldap.firstnameAttrEx"),placeholder_default:'E.g.: "givenName"',help_text:Object(C.b)("admin.ldap.firstnameAttrDesc"),help_text_default:"(Optional) The attribute in the AD/LDAP server used to populate the first name of users in Mattermost. When set, users cannot edit their first name, since it is synchronized with the LDAP server. When left blank, users can set their first name in Account Settings.",isDisabled:$l.both($l.stateIsFalse("LdapSettings.Enable"),$l.stateIsFalse("LdapSettings.EnableSync"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"LdapSettings.LastNameAttribute",label:Object(C.b)("admin.ldap.lastnameAttrTitle"),label_default:"Last Name Attribute:",placeholder:Object(C.b)("admin.ldap.lastnameAttrEx"),placeholder_default:'E.g.: "sn"',help_text:Object(C.b)("admin.ldap.lastnameAttrDesc"),help_text_default:"(Optional) The attribute in the AD/LDAP server used to populate the last name of users in Mattermost. When set, users cannot edit their last name, since it is synchronized with the LDAP server. When left blank, users can set their last name in Account Settings.",isDisabled:$l.both($l.stateIsFalse("LdapSettings.Enable"),$l.stateIsFalse("LdapSettings.EnableSync"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"LdapSettings.NicknameAttribute",label:Object(C.b)("admin.ldap.nicknameAttrTitle"),label_default:"Nickname Attribute:",placeholder:Object(C.b)("admin.ldap.nicknameAttrEx"),placeholder_default:'E.g.: "nickname"',help_text:Object(C.b)("admin.ldap.nicknameAttrDesc"),help_text_default:"(Optional) The attribute in the AD/LDAP server used to populate the nickname of users in Mattermost. When set, users cannot edit their nickname, since it is synchronized with the LDAP server. When left blank, users can set their nickname in Account Settings.",isDisabled:$l.both($l.stateIsFalse("LdapSettings.Enable"),$l.stateIsFalse("LdapSettings.EnableSync"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"LdapSettings.PositionAttribute",label:Object(C.b)("admin.ldap.positionAttrTitle"),label_default:"Position Attribute:",placeholder:Object(C.b)("admin.ldap.positionAttrEx"),placeholder_default:'E.g.: "title"',help_text:Object(C.b)("admin.ldap.positionAttrDesc"),help_text_default:"(Optional) The attribute in the AD/LDAP server used to populate the position field in Mattermost. When set, users cannot edit their position, since it is synchronized with the LDAP server. When left blank, users can set their position in Account Settings.",isDisabled:$l.both($l.stateIsFalse("LdapSettings.Enable"),$l.stateIsFalse("LdapSettings.EnableSync"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"LdapSettings.EmailAttribute",label:Object(C.b)("admin.ldap.emailAttrTitle"),label_default:"Email Attribute:",placeholder:Object(C.b)("admin.ldap.emailAttrEx"),placeholder_default:'E.g.: "mail" or "userPrincipalName"',help_text:Object(C.b)("admin.ldap.emailAttrDesc"),help_text_default:"The attribute in the AD/LDAP server used to populate the email address field in Mattermost.",isDisabled:$l.both($l.stateIsFalse("LdapSettings.Enable"),$l.stateIsFalse("LdapSettings.EnableSync"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"LdapSettings.UsernameAttribute",label:Object(C.b)("admin.ldap.usernameAttrTitle"),label_default:"Username Attribute:",placeholder:Object(C.b)("admin.ldap.usernameAttrEx"),placeholder_default:'E.g.: "sAMAccountName"',help_text:Object(C.b)("admin.ldap.usernameAttrDesc"),help_text_default:"The attribute in the AD/LDAP server used to populate the username field in Mattermost. This may be the same as the Login ID Attribute.",isDisabled:$l.both($l.stateIsFalse("LdapSettings.Enable"),$l.stateIsFalse("LdapSettings.EnableSync"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"LdapSettings.IdAttribute",label:Object(C.b)("admin.ldap.idAttrTitle"),label_default:"ID Attribute: ",placeholder:Object(C.b)("admin.ldap.idAttrEx"),placeholder_default:'E.g.: "objectGUID" or "entryUUID"',help_text:Object(C.b)("admin.ldap.idAttrDesc"),help_text_markdown:!0,help_text_default:"The attribute in the AD/LDAP server used as a unique identifier in Mattermost. It should be an AD/LDAP attribute with a value that does not change such as `entryUUID` for LDAP or `objectGUID` for Active Directory. If a user's ID Attribute changes, it will create a new Mattermost account unassociated with their old one.\n \nIf you need to change this field after users have already logged in, use the [mattermost ldap idmigrate](!https://about.mattermost.com/default-mattermost-ldap-idmigrate) CLI tool.",isDisabled:$l.both($l.stateEquals("LdapSettings.Enable",!1),$l.stateEquals("LdapSettings.EnableSync",!1))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"LdapSettings.LoginIdAttribute",label:Object(C.b)("admin.ldap.loginAttrTitle"),label_default:"Login ID Attribute: ",placeholder:Object(C.b)("admin.ldap.loginIdAttrEx"),placeholder_default:'E.g.: "sAMAccountName"',help_text:Object(C.b)("admin.ldap.loginAttrDesc"),help_text_markdown:!0,help_text_default:'The attribute in the AD/LDAP server used to log in to Mattermost. Normally this attribute is the same as the "Username Attribute" field above.\n \nIf your team typically uses domain/username to log in to other services with AD/LDAP, you may enter domain/username in this field to maintain consistency between sites.',isDisabled:$l.both($l.stateIsFalse("LdapSettings.Enable"),$l.stateIsFalse("LdapSettings.EnableSync"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"LdapSettings.LoginFieldName",label:Object(C.b)("admin.ldap.loginNameTitle"),label_default:"Sign-in Field Default Text:",placeholder:Object(C.b)("admin.ldap.loginNameEx"),placeholder_default:'E.g.: "AD/LDAP Username"',help_text:Object(C.b)("admin.ldap.loginNameDesc"),help_text_default:'The placeholder text that appears in the login field on the login page. Defaults to "AD/LDAP Username".',isDisabled:$l.both($l.stateIsFalse("LdapSettings.Enable"),$l.stateIsFalse("LdapSettings.EnableSync"))},{type:O.j.SettingsTypes.TYPE_NUMBER,key:"LdapSettings.SyncIntervalMinutes",label:Object(C.b)("admin.ldap.syncIntervalTitle"),label_default:"Synchronization Interval (minutes):",help_text:Object(C.b)("admin.ldap.syncIntervalHelpText"),help_text_default:'AD/LDAP Synchronization updates Mattermost user information to reflect updates on the AD/LDAP server. For example, when a user\'s name changes on the AD/LDAP server, the change updates in Mattermost when synchronization is performed. Accounts removed from or disabled in the AD/LDAP server have their Mattermost accounts set to "Inactive" and have their account sessions revoked. Mattermost performs synchronization on the interval entered. For example, if 60 is entered, Mattermost synchronizes every 60 minutes.',isDisabled:$l.both($l.stateIsFalse("LdapSettings.Enable"),$l.stateIsFalse("LdapSettings.EnableSync"))},{type:O.j.SettingsTypes.TYPE_NUMBER,key:"LdapSettings.MaxPageSize",label:Object(C.b)("admin.ldap.maxPageSizeTitle"),label_default:"Maximum Page Size:",placeholder:Object(C.b)("admin.ldap.maxPageSizeEx"),placeholder_default:'E.g.: "2000"',help_text:Object(C.b)("admin.ldap.maxPageSizeHelpText"),help_text_default:"The maximum number of users the Mattermost server will request from the AD/LDAP server at one time. 0 is unlimited.",isDisabled:$l.both($l.stateIsFalse("LdapSettings.Enable"),$l.stateIsFalse("LdapSettings.EnableSync"))},{type:O.j.SettingsTypes.TYPE_NUMBER,key:"LdapSettings.QueryTimeout",label:Object(C.b)("admin.ldap.queryTitle"),label_default:"Query Timeout (seconds):",placeholder:Object(C.b)("admin.ldap.queryEx"),placeholder_default:'E.g.: "60"',help_text:Object(C.b)("admin.ldap.queryDesc"),help_text_default:"The timeout value for queries to the AD/LDAP server. Increase if you are getting timeout errors caused by a slow AD/LDAP server.",isDisabled:$l.both($l.stateIsFalse("LdapSettings.Enable"),$l.stateIsFalse("LdapSettings.EnableSync"))},{type:O.j.SettingsTypes.TYPE_BUTTON,action:f.w,key:"LdapSettings.LdapTest",label:Object(C.b)("admin.ldap.ldap_test_button"),label_default:"AD/LDAP Test",help_text:Object(C.b)("admin.ldap.testHelpText"),help_text_markdown:!0,help_text_default:'Tests if the Mattermost server can connect to the AD/LDAP server specified. Please review "System Console > Logs" and [documentation](!https://mattermost.com/default-ldap-docs) to troubleshoot errors.',error_message:Object(C.b)("admin.ldap.testFailure"),error_message_default:"AD/LDAP Test Failure: {error}",success_message:Object(C.b)("admin.ldap.testSuccess"),success_message_default:"AD/LDAP Test Successful",isDisabled:$l.both($l.stateIsFalse("LdapSettings.Enable"),$l.stateIsFalse("LdapSettings.EnableSync"))},{type:O.j.SettingsTypes.TYPE_JOBSTABLE,job_type:O.j.JobTypes.LDAP_SYNC,label:Object(C.b)("admin.ldap.sync_button"),label_default:"AD/LDAP Synchronize Now",help_text:Object(C.b)("admin.ldap.syncNowHelpText"),help_text_markdown:!0,help_text_default:'Initiates an AD/LDAP synchronization immediately. See the table below for status of each synchronization. Please review "System Console > Logs" and [documentation](!https://mattermost.com/default-ldap-docs) to troubleshoot errors.',isDisabled:$l.stateIsFalse("LdapSettings.EnableSync"),render_job:e=>{let t,a=0,s=0,i=0,n=0,r=0,l=0,o=0;return e&&e.data&&(e.data.ldap_users_count&&e.data.ldap_users_count.length>0&&(a=e.data.ldap_users_count),e.data.delete_count&&e.data.delete_count.length>0&&(s=e.data.delete_count),e.data.update_count&&e.data.update_count.length>0&&(i=e.data.update_count),e.data.ldap_groups_count&&(t=e.data.ldap_groups_count),e.data.total_ldap_groups_count&&(n=e.data.total_ldap_groups_count),e.data.group_delete_count&&(r=e.data.group_delete_count),e.data.group_member_delete_count&&(l=e.data.group_member_delete_count),e.data.group_member_add_count&&(o=e.data.group_member_add_count)),S.a.createElement("span",null,S.a.createElement(T.a,{id:t?"admin.ldap.jobExtraInfo":"admin.ldap.jobExtraInfoTotal",defaultMessage:t?"Scanned {ldapUsers, number} LDAP users and {ldapGroups, number} linked groups.":"Scanned {ldapUsers, number} LDAP users and {ldapGroups, number} groups.",values:{ldapUsers:a,ldapGroups:t||n}}),S.a.createElement("ul",null,i>0&&S.a.createElement("li",null,S.a.createElement(T.a,{id:"admin.ldap.jobExtraInfo.updatedUsers",defaultMessage:"Updated {updateCount, number} users.",values:{updateCount:i}})),s>0&&S.a.createElement("li",null,S.a.createElement(T.a,{id:"admin.ldap.jobExtraInfo.deactivatedUsers",defaultMessage:"Deactivated {deleteCount, number} users.",values:{deleteCount:s}})),r>0&&S.a.createElement("li",null,S.a.createElement(T.a,{id:"admin.ldap.jobExtraInfo.deletedGroups",defaultMessage:"Deleted {groupDeleteCount, number} groups.",values:{groupDeleteCount:r}})),l>0&&S.a.createElement("li",null,S.a.createElement(T.a,{id:"admin.ldap.jobExtraInfo.deletedGroupMembers",defaultMessage:"Deleted {groupMemberDeleteCount, number} group members.",values:{groupMemberDeleteCount:l}})),o>0&&S.a.createElement("li",null,S.a.createElement(T.a,{id:"admin.ldap.jobExtraInfo.addedGroupMembers",defaultMessage:"Added {groupMemberAddCount, number} group members.",values:{groupMemberAddCount:o}}))))}}]}},saml:{url:"authentication/saml",title:Object(C.b)("admin.sidebar.saml"),title_default:"SAML 2.0",isHidden:$l.isnt($l.licensedForFeature("SAML")),schema:{id:"SamlSettings",name:Object(C.b)("admin.authentication.saml"),name_default:"SAML 2.0",settings:[{type:O.j.SettingsTypes.TYPE_BOOL,key:"SamlSettings.Enable",label:Object(C.b)("admin.saml.enableTitle"),label_default:"Enable Login With SAML 2.0:",help_text:Object(C.b)("admin.saml.enableDescription"),help_text_default:"When true, Mattermost allows login using SAML 2.0. Please see [documentation](!http://docs.mattermost.com/deployment/sso-saml.html) to learn more about configuring SAML for Mattermost.",help_text_markdown:!0},{type:O.j.SettingsTypes.TYPE_BOOL,key:"SamlSettings.EnableSyncWithLdap",label:Object(C.b)("admin.saml.enableSyncWithLdapTitle"),label_default:"Enable Synchronizing SAML Accounts With AD/LDAP:",help_text:Object(C.b)("admin.saml.enableSyncWithLdapDescription"),help_text_default:"When true, Mattermost periodically synchronizes SAML user attributes, including user deactivation and removal, from AD/LDAP. Enable and configure synchronization settings at **Authentication > AD/LDAP**. When false, user attributes are updated from SAML during user login. See [documentation](!https://about.mattermost.com/default-saml-ldap-sync) to learn more.",help_text_markdown:!0,isDisabled:$l.stateIsFalse("SamlSettings.Enable")},{type:O.j.SettingsTypes.TYPE_BOOL,key:"SamlSettings.EnableSyncWithLdapIncludeAuth",label:Object(C.b)("admin.saml.enableSyncWithLdapIncludeAuthTitle"),label_default:"Override SAML bind data with AD/LDAP information:",help_text:Object(C.b)("admin.saml.enableSyncWithLdapIncludeAuthDescription"),help_text_default:"When true, Mattermost will override the SAML ID attribute with the AD/LDAP ID attribute if configured or override the SAML Email attribute with the AD/LDAP Email attribute if SAML ID attribute is not present. This will allow you automatically migrate users from Email binding to ID binding to prevent creation of new users when an email address changes for a user. Moving from true to false, will remove the override from happening.\n \n**Note:** SAML IDs must match the LDAP IDs to prevent disabling of user accounts. Please review [documentation](!https://docs.mattermost.com/deployment/sso-saml-ldapsync.html) for more information.",help_text_markdown:!0,isDisabled:$l.either($l.stateIsFalse("SamlSettings.Enable"),$l.stateIsFalse("SamlSettings.EnableSyncWithLdap"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"SamlSettings.IdpMetadataUrl",label:Object(C.b)("admin.saml.idpMetadataUrlTitle"),label_default:"Identity Provider Metadata URL:",help_text:Object(C.b)("admin.saml.idpMetadataUrlDesc"),help_text_default:"The Metadata URL for the Identity Provider you use for SAML requests",placeholder:Object(C.b)("admin.saml.idpMetadataUrlEx"),placeholder_default:'E.g.: "https://idp.example.org/SAML2/saml/metadata"',isDisabled:$l.stateIsFalse("SamlSettings.Enable")},{type:O.j.SettingsTypes.TYPE_BUTTON,key:"getSamlMetadataFromIDPButton",action:f.r,label:Object(C.b)("admin.saml.getSamlMetadataFromIDPUrl"),label_default:"Get SAML Metadata from IdP",loading:Object(C.b)("admin.saml.getSamlMetadataFromIDPFetching"),loading_default:"Fetching...",error_message:Object(C.b)("admin.saml.getSamlMetadataFromIDPFail"),error_message_default:"SAML Metadata URL did not connect and pull data successfully",success_message:Object(C.b)("admin.saml.getSamlMetadataFromIDPSuccess"),success_message_default:"SAML Metadata retrieved successfully. Two fields below have been updated",isDisabled:$l.either($l.stateIsFalse("SamlSettings.Enable"),$l.stateEquals("SamlSettings.IdpMetadataUrl","")),sourceUrlKey:"SamlSettings.IdpMetadataUrl"},{type:O.j.SettingsTypes.TYPE_TEXT,key:"SamlSettings.IdpUrl",label:Object(C.b)("admin.saml.idpUrlTitle"),label_default:"SAML SSO URL:",help_text:Object(C.b)("admin.saml.idpUrlDesc"),help_text_default:"The URL where Mattermost sends a SAML request to start login sequence.",placeholder:Object(C.b)("admin.saml.idpUrlEx"),placeholder_default:'E.g.: "https://idp.example.org/SAML2/SSO/Login"',isDisabled:$l.stateIsFalse("SamlSettings.Enable"),setFromMetadataField:"idp_url"},{type:O.j.SettingsTypes.TYPE_TEXT,key:"SamlSettings.IdpDescriptorUrl",label:Object(C.b)("admin.saml.idpDescriptorUrlTitle"),label_default:"Identity Provider Issuer URL:",help_text:Object(C.b)("admin.saml.idpDescriptorUrlDesc"),help_text_default:"The issuer URL for the Identity Provider you use for SAML requests.",placeholder:Object(C.b)("admin.saml.idpDescriptorUrlEx"),placeholder_default:'E.g.: "https://idp.example.org/SAML2/issuer"',isDisabled:$l.stateIsFalse("SamlSettings.Enable"),setFromMetadataField:"idp_descriptor_url"},{type:O.j.SettingsTypes.TYPE_FILE_UPLOAD,key:"SamlSettings.IdpCertificateFile",label:Object(C.b)("admin.saml.idpCertificateFileTitle"),label_default:"Identity Provider Public Certificate:",help_text:Object(C.b)("admin.saml.idpCertificateFileDesc"),help_text_default:"The public authentication certificate issued by your Identity Provider.",remove_help_text:Object(C.b)("admin.saml.idpCertificateFileRemoveDesc"),remove_help_text_default:"Remove the public authentication certificate issued by your Identity Provider.",remove_button_text:Object(C.b)("admin.saml.remove.idp_certificate"),remove_button_text_default:"Remove Identity Provider Certificate",removing_text:Object(C.b)("admin.saml.removing.certificate"),removing_text_default:"Removing Certificate...",uploading_text:Object(C.b)("admin.saml.uploading.certificate"),uploading_text_default:"Uploading Certificate...",isDisabled:$l.stateIsFalse("SamlSettings.Enable"),fileType:".crt,.cer,.cert,.pem",upload_action:f.M,set_action:f.G,remove_action:f.C,setFromMetadataField:"idp_public_certificate"},{type:O.j.SettingsTypes.TYPE_BOOL,key:"SamlSettings.Verify",label:Object(C.b)("admin.saml.verifyTitle"),label_default:"Verify Signature:",help_text:Object(C.b)("admin.saml.verifyDescription"),help_text_default:"When false, Mattermost will not verify that the signature sent from a SAML Response matches the Service Provider Login URL. Disabling verification is not recommended for production environments.",isDisabled:$l.stateIsFalse("SamlSettings.Enable")},{type:O.j.SettingsTypes.TYPE_TEXT,key:"SamlSettings.AssertionConsumerServiceURL",label:Object(C.b)("admin.saml.assertionConsumerServiceURLTitle"),label_default:"Service Provider Login URL:",help_text:Object(C.b)("admin.saml.assertionConsumerServiceURLPopulatedDesc"),help_text_default:"This field is also known as the Assertion Consumer Service URL.",placeholder:Object(C.b)("admin.saml.assertionConsumerServiceURLEx"),placeholder_default:'E.g.: "https://<your-mattermost-url>/login/sso/saml"',isDisabled:$l.either($l.stateIsFalse("SamlSettings.Enable"),$l.stateIsFalse("SamlSettings.Verify")),onConfigLoad:(e,t)=>{const a=t.ServiceSettings.SiteURL;if(a.length>0&&0===e.length){const e="/"===a[a.length-1]?"":"/";return"".concat(a).concat(e,"login/sso/saml")}return e}},{type:O.j.SettingsTypes.TYPE_BOOL,key:"SamlSettings.Encrypt",label:Object(C.b)("admin.saml.encryptTitle"),label_default:"Enable Encryption:",help_text:Object(C.b)("admin.saml.encryptDescription"),help_text_default:"When false, Mattermost will not decrypt SAML Assertions encrypted with your Service Provider Public Certificate. Disabling encryption is not recommended for production environments.",isDisabled:$l.stateIsFalse("SamlSettings.Enable")},{type:O.j.SettingsTypes.TYPE_FILE_UPLOAD,key:"SamlSettings.PrivateKeyFile",label:Object(C.b)("admin.saml.privateKeyFileTitle"),label_default:"Service Provider Private Key:",help_text:Object(C.b)("admin.saml.privateKeyFileFileDesc"),help_text_default:"The private key used to decrypt SAML Assertions from the Identity Provider.",remove_help_text:Object(C.b)("admin.saml.privateKeyFileFileRemoveDesc"),remove_help_text_default:"Remove the private key used to decrypt SAML Assertions from the Identity Provider.",remove_button_text:Object(C.b)("admin.saml.remove.privKey"),remove_button_text_default:"Remove Service Provider Private Key",removing_text:Object(C.b)("admin.saml.removing.privKey"),removing_text_default:"Removing Private Key...",uploading_text:Object(C.b)("admin.saml.uploading.privateKey"),uploading_text_default:"Uploading Private Key...",isDisabled:$l.either($l.stateIsFalse("SamlSettings.Enable"),$l.stateIsFalse("SamlSettings.Encrypt")),fileType:".key",upload_action:f.N,remove_action:f.D},{type:O.j.SettingsTypes.TYPE_FILE_UPLOAD,key:"SamlSettings.PublicCertificateFile",label:Object(C.b)("admin.saml.publicCertificateFileTitle"),label_default:"Service Provider Public Certificate:",help_text:Object(C.b)("admin.saml.publicCertificateFileDesc"),help_text_default:"The certificate used to generate the signature on a SAML request to the Identity Provider for a service provider initiated SAML login, when Mattermost is the Service Provider.",remove_help_text:Object(C.b)("admin.saml.publicCertificateFileRemoveDesc"),remove_help_text_default:"Remove the certificate used to generate the signature on a SAML request to the Identity Provider for a service provider initiated SAML login, when Mattermost is the Service Provider.",remove_button_text:Object(C.b)("admin.saml.remove.sp_certificate"),remove_button_text_default:"Remove Service Provider Certificate",removing_text:Object(C.b)("admin.saml.removing.certificate"),removing_text_default:"Removing Certificate...",uploading_text:Object(C.b)("admin.saml.uploading.certificate"),uploading_text_default:"Uploading Certificate...",isDisabled:$l.either($l.stateIsFalse("SamlSettings.Enable"),$l.stateIsFalse("SamlSettings.Encrypt")),fileType:".crt,.cer",upload_action:f.O,remove_action:f.E},{type:O.j.SettingsTypes.TYPE_BOOL,key:"SamlSettings.SignRequest",label:Object(C.b)("admin.saml.signRequestTitle"),label_default:"Sign Request:",help_text:Object(C.b)("admin.saml.signRequestDescription"),help_text_default:"When true, Mattermost will sign the SAML request using your private key. When false, Mattermost will not sign the SAML request.",isDisabled:$l.either($l.stateIsFalse("SamlSettings.Encrypt"),$l.stateIsFalse("SamlSettings.PrivateKeyFile"),$l.stateIsFalse("SamlSettings.PublicCertificateFile"))},{type:O.j.SettingsTypes.TYPE_DROPDOWN,key:"SamlSettings.SignatureAlgorithm",label:Object(C.b)("admin.saml.signatureAlgorithmTitle"),label_default:"Signature Algorithm",isDisabled:$l.either($l.stateIsFalse("SamlSettings.Encrypt"),$l.stateIsFalse("SamlSettings.SignRequest")),options:[{value:"RSAwithSHA1",display_name:Object(C.b)("admin.saml.signatureAlgorithmDisplay.sha1"),display_name_default:"RSAwithSHA1",help_text:Object(C.b)("admin.saml.signatureAlgorithmDescription.sha1"),help_text_default:"Specify the Signature algorithm used to sign the request (RSAwithSHA1). Please see more information provided at http://www.w3.org/2000/09/xmldsig#rsa-sha1"},{value:"RSAwithSHA256",display_name:Object(C.b)("admin.saml.signatureAlgorithmDisplay.sha256"),display_name_default:"RSAwithSHA256",help_text:Object(C.b)("admin.saml.signatureAlgorithmDescription.sha256"),help_text_default:"Specify the Signature algorithm used to sign the request (RSAwithSHA256). Please see more information provided at http://www.w3.org/2001/04/xmldsig-more#rsa-sha256 [section 6.4.2 RSA (PKCS#1 v1.5)]"},{value:"RSAwithSHA512",display_name:Object(C.b)("admin.saml.signatureAlgorithmDisplay.sha512"),display_name_default:"RSAwithSHA512",help_text:Object(C.b)("admin.saml.signatureAlgorithmDescription.sha512"),help_text_default:"Specify the Signature algorithm used to sign the request (RSAwithSHA512). Please see more information provided at http://www.w3.org/2001/04/xmldsig-more#rsa-sha512"}]},{type:O.j.SettingsTypes.TYPE_DROPDOWN,key:"SamlSettings.CanonicalAlgorithm",label:Object(C.b)("admin.saml.canonicalAlgorithmTitle"),label_default:"Canonicalization Algorithm",isDisabled:$l.either($l.stateIsFalse("SamlSettings.Encrypt"),$l.stateIsFalse("SamlSettings.SignRequest")),options:[{value:"Canonical1.0",display_name:Object(C.b)("admin.saml.canonicalAlgorithmDisplay.n10"),display_name_default:"Exclusive XML Canonicalization 1.0 (omit comments)",help_text:Object(C.b)("admin.saml.canonicalAlgorithmDescription.exc"),help_text_default:"Specify the Canonicalization algorithm (Exclusive XML Canonicalization 1.0). Please see more information provided at http://www.w3.org/2001/10/xml-exc-c14n#"},{value:"Canonical1.1",display_name:Object(C.b)("admin.saml.canonicalAlgorithmDisplay.n11"),display_name_default:"Canonical XML 1.1 (omit comments)",help_text:Object(C.b)("admin.saml.canonicalAlgorithmDescription.c14"),help_text_default:"Specify the Canonicalization algorithm (Canonical XML 1.1). Please see more information provided at http://www.w3.org/2006/12/xml-c14n11"}]},{type:O.j.SettingsTypes.TYPE_TEXT,key:"SamlSettings.EmailAttribute",label:Object(C.b)("admin.saml.emailAttrTitle"),label_default:"Email Attribute:",placeholder:Object(C.b)("admin.saml.emailAttrEx"),placeholder_default:'E.g.: "Email" or "PrimaryEmail"',help_text:Object(C.b)("admin.saml.emailAttrDesc"),help_text_default:"The attribute in the SAML Assertion that will be used to populate the email addresses of users in Mattermost.",isDisabled:$l.stateIsFalse("SamlSettings.Enable")},{type:O.j.SettingsTypes.TYPE_TEXT,key:"SamlSettings.UsernameAttribute",label:Object(C.b)("admin.saml.usernameAttrTitle"),label_default:"Username Attribute:",placeholder:Object(C.b)("admin.saml.usernameAttrEx"),placeholder_default:'E.g.: "Username"',help_text:Object(C.b)("admin.saml.usernameAttrDesc"),help_text_default:"The attribute in the SAML Assertion that will be used to populate the username field in Mattermost.",isDisabled:$l.stateIsFalse("SamlSettings.Enable")},{type:O.j.SettingsTypes.TYPE_TEXT,key:"SamlSettings.IdAttribute",label:Object(C.b)("admin.saml.idAttrTitle"),label_default:"Id Attribute:",placeholder:Object(C.b)("admin.saml.idAttrEx"),placeholder_default:'E.g.: "Id"',help_text:Object(C.b)("admin.saml.idAttrDesc"),help_text_default:"(Optional) The attribute in the SAML Assertion that will be used to bind users from SAML to users in Mattermost.",isDisabled:$l.stateIsFalse("SamlSettings.Enable")},{type:O.j.SettingsTypes.TYPE_TEXT,key:"SamlSettings.GuestAttribute",label:Object(C.b)("admin.saml.guestAttrTitle"),label_default:"Guest Attribute:",placeholder:Object(C.b)("admin.saml.guestAttrEx"),placeholder_default:'E.g.: "usertype=Guest" or "isGuest=true"',help_text:Object(C.b)("admin.saml.guestAttrDesc"),help_text_default:"(Optional) Requires Guest Access to be enabled before being applied. The attribute in the SAML Assertion that will be used to apply a guest role to users in Mattermost. Guests are prevented from accessing teams or channels upon logging in until they are assigned a team and at least one channel.\n \nNote: If this attribute is removed/changed from your guest user in SAML and the user is still active, they will not be promoted to a member and will retain their Guest role. Guests can be promoted in **System Console > User Management**.\n \n \nExisting members that are identified by this attribute as a guest will be demoted from a member to a guest when they are asked to login next. The next login is based upon Session lengths set in **System Console > Session Lengths**. It is highly recommend to manually demote users to guests in **System Console > User Management ** to ensure access is restricted immediately.",help_text_markdown:!0,isDisabled:$l.either($l.configIsFalse("GuestAccountsSettings","Enable"),$l.stateIsFalse("SamlSettings.Enable"))},{type:O.j.SettingsTypes.TYPE_BOOL,key:"SamlSettings.EnableAdminAttribute",label:Object(C.b)("admin.saml.enableAdminAttrTitle"),label_default:"Enable Admin Attribute:",isDisabled:$l.stateIsFalse("SamlSettings.Enable")},{type:O.j.SettingsTypes.TYPE_TEXT,key:"SamlSettings.AdminAttribute",label:Object(C.b)("admin.saml.adminAttrTitle"),label_default:"Admin Attribute:",placeholder:Object(C.b)("admin.saml.adminAttrEx"),placeholder_default:'E.g.: "usertype=Admin" or "isAdmin=true"',help_text:Object(C.b)("admin.saml.adminAttrDesc"),help_text_default:"(Optional) The attribute in the SAML Assertion for designating System Admins. The users selected by the query will have access to your Mattermost server as System Admins. By default, System Admins have complete access to the Mattermost System Console.\n \nExisting members that are identified by this attribute will be promoted from member to System Admin upon next login. The next login is based upon Session lengths set in **System Console > Session Lengths.** It is highly recommend to manually demote users to members in **System Console > User Management** to ensure access is restricted immediately.\n \nNote: If this filter is removed/changed, System Admins that were promoted via this filter will be demoted to members and will not retain access to the System Console. When this filter is not in use, System Admins can be manually promoted/demoted in **System Console > User Management**.",help_text_markdown:!0,isDisabled:$l.either($l.stateIsFalse("SamlSettings.EnableAdminAttribute"),$l.stateIsFalse("SamlSettings.Enable"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"SamlSettings.FirstNameAttribute",label:Object(C.b)("admin.saml.firstnameAttrTitle"),label_default:"First Name Attribute:",placeholder:Object(C.b)("admin.saml.firstnameAttrEx"),placeholder_default:'E.g.: "FirstName"',help_text:Object(C.b)("admin.saml.firstnameAttrDesc"),help_text_default:"(Optional) The attribute in the SAML Assertion that will be used to populate the first name of users in Mattermost.",isDisabled:$l.stateIsFalse("SamlSettings.Enable")},{type:O.j.SettingsTypes.TYPE_TEXT,key:"SamlSettings.LastNameAttribute",label:Object(C.b)("admin.saml.lastnameAttrTitle"),label_default:"Last Name Attribute:",placeholder:Object(C.b)("admin.saml.lastnameAttrEx"),placeholder_default:'E.g.: "LastName"',help_text:Object(C.b)("admin.saml.lastnameAttrDesc"),help_text_default:"(Optional) The attribute in the SAML Assertion that will be used to populate the last name of users in Mattermost.",isDisabled:$l.stateIsFalse("SamlSettings.Enable")},{type:O.j.SettingsTypes.TYPE_TEXT,key:"SamlSettings.NicknameAttribute",label:Object(C.b)("admin.saml.nicknameAttrTitle"),label_default:"Nickname Attribute:",placeholder:Object(C.b)("admin.saml.nicknameAttrEx"),placeholder_default:'E.g.: "Nickname"',help_text:Object(C.b)("admin.saml.nicknameAttrDesc"),help_text_default:"(Optional) The attribute in the SAML Assertion that will be used to populate the nickname of users in Mattermost.",isDisabled:$l.stateIsFalse("SamlSettings.Enable")},{type:O.j.SettingsTypes.TYPE_TEXT,key:"SamlSettings.PositionAttribute",label:Object(C.b)("admin.saml.positionAttrTitle"),label_default:"Position Attribute:",placeholder:Object(C.b)("admin.saml.positionAttrEx"),placeholder_default:'E.g.: "Role"',help_text:Object(C.b)("admin.saml.positionAttrDesc"),help_text_default:"(Optional) The attribute in the SAML Assertion that will be used to populate the position of users in Mattermost.",isDisabled:$l.stateIsFalse("SamlSettings.Enable")},{type:O.j.SettingsTypes.TYPE_TEXT,key:"SamlSettings.LocaleAttribute",label:Object(C.b)("admin.saml.localeAttrTitle"),label_default:"Preferred Language Attribute:",placeholder:Object(C.b)("admin.saml.localeAttrEx"),placeholder_default:'E.g.: "Locale" or "PrimaryLanguage"',help_text:Object(C.b)("admin.saml.localeAttrDesc"),help_text_default:"(Optional) The attribute in the SAML Assertion that will be used to populate the language of users in Mattermost.",isDisabled:$l.stateIsFalse("SamlSettings.Enable")},{type:O.j.SettingsTypes.TYPE_TEXT,key:"SamlSettings.LoginButtonText",label:Object(C.b)("admin.saml.loginButtonTextTitle"),label_default:"Login Button Text:",placeholder:Object(C.b)("admin.saml.loginButtonTextEx"),placeholder_default:'E.g.: "OKTA"',help_text:Object(C.b)("admin.saml.loginButtonTextDesc"),help_text_default:'(Optional) The text that appears in the login button on the login page. Defaults to "SAML".',isDisabled:$l.stateIsFalse("SamlSettings.Enable")}]}},gitlab:{url:"authentication/gitlab",title:Object(C.b)("admin.sidebar.gitlab"),title_default:"GitLab",isHidden:$l.licensed,schema:{id:"GitLabSettings",name:Object(C.b)("admin.authentication.gitlab"),name_default:"GitLab",onConfigLoad:e=>{const t={};return t["GitLabSettings.Url"]=e.GitLabSettings.UserApiEndpoint.replace("/api/v4/user",""),t},onConfigSave:e=>{const t=Kl({},e);return t.GitLabSettings.UserApiEndpoint=e.GitLabSettings.Url.replace(/\/$/,"")+"/api/v4/user",t},settings:[{type:O.j.SettingsTypes.TYPE_BOOL,key:"GitLabSettings.Enable",label:Object(C.b)("admin.gitlab.enableTitle"),label_default:"Enable authentication with GitLab: ",help_text:Object(C.b)("admin.gitlab.enableDescription"),help_text_default:'When true, Mattermost allows team creation and account signup using GitLab OAuth.\n \n1. Log in to your GitLab account and go to Profile Settings -> Applications.\n2. Enter Redirect URIs "<your-mattermost-url>/login/gitlab/complete" (example: http://localhost:8065/login/gitlab/complete) and "<your-mattermost-url>/signup/gitlab/complete".\n3. Then use "Application Secret Key" and "Application ID" fields from GitLab to complete the options below.\n4. Complete the Endpoint URLs below.',help_text_markdown:!0},{type:O.j.SettingsTypes.TYPE_TEXT,key:"GitLabSettings.Id",label:Object(C.b)("admin.gitlab.clientIdTitle"),label_default:"Application ID:",help_text:Object(C.b)("admin.gitlab.clientIdDescription"),help_text_default:"Obtain this value via the instructions above for logging into GitLab.",placeholder:Object(C.b)("admin.gitlab.clientIdExample"),placeholder_default:'E.g.: "jcuS8PuvcpGhpgHhlcpT1Mx42pnqMxQY"',isDisabled:$l.stateIsFalse("GitLabSettings.Enable")},{type:O.j.SettingsTypes.TYPE_TEXT,key:"GitLabSettings.Secret",label:Object(C.b)("admin.gitlab.clientSecretTitle"),label_default:"Application Secret Key:",help_text:Object(C.b)("admin.gitlab.clientSecretDescription"),help_text_default:"Obtain this value via the instructions above for logging into GitLab.",placeholder:Object(C.b)("admin.gitlab.clientSecretExample"),placeholder_default:'E.g.: "jcuS8PuvcpGhpgHhlcpT1Mx42pnqMxQY"',isDisabled:$l.stateIsFalse("GitLabSettings.Enable")},{type:O.j.SettingsTypes.TYPE_TEXT,key:"GitLabSettings.Url",label:Object(C.b)("admin.gitlab.siteUrl"),label_default:"GitLab Site URL:",help_text:Object(C.b)("admin.gitlab.siteUrlDescription"),help_text_default:"Enter the URL of your GitLab instance, e.g. https://example.com:3000. If your GitLab instance is not set up with SSL, start the URL with http:// instead of https://.",placeholder:Object(C.b)("admin.gitlab.siteUrlExample"),placeholder_default:"E.g.: https://",isDisabled:$l.stateIsFalse("GitLabSettings.Enable")},{type:O.j.SettingsTypes.TYPE_TEXT,key:"GitLabSettings.UserApiEndpoint",label:Object(C.b)("admin.gitlab.userTitle"),label_default:"User API Endpoint:",dynamic_value:(e,t,a)=>a["GitLabSettings.Url"]?a["GitLabSettings.Url"].replace(/\/$/,"")+"/api/v4/user":"",isDisabled:!0},{type:O.j.SettingsTypes.TYPE_TEXT,key:"GitLabSettings.AuthEndpoint",label:Object(C.b)("admin.gitlab.authTitle"),label_default:"Auth Endpoint:",dynamic_value:(e,t,a)=>a["GitLabSettings.Url"]?a["GitLabSettings.Url"].replace(/\/$/,"")+"/oauth/authorize":"",isDisabled:!0},{type:O.j.SettingsTypes.TYPE_TEXT,key:"GitLabSettings.TokenEndpoint",label:Object(C.b)("admin.gitlab.tokenTitle"),label_default:"Token Endpoint:",dynamic_value:(e,t,a)=>a["GitLabSettings.Url"]?a["GitLabSettings.Url"].replace(/\/$/,"")+"/oauth/token":"",isDisabled:!0}]}},oauth:{url:"authentication/oauth",title:Object(C.b)("admin.sidebar.oauth"),title_default:"OAuth 2.0",isHidden:$l.isnt($l.licensed),schema:{id:"OAuthSettings",name:Object(C.b)("admin.authentication.oauth"),name_default:"OAuth 2.0",onConfigLoad:e=>{const t={};return e.GitLabSettings&&e.GitLabSettings.Enable&&(t.oauthType=O.j.GITLAB_SERVICE),e.Office365Settings&&e.Office365Settings.Enable&&(t.oauthType=O.j.OFFICE365_SERVICE),e.GoogleSettings&&e.GoogleSettings.Enable&&(t.oauthType=O.j.GOOGLE_SERVICE),t["GitLabSettings.Url"]=e.GitLabSettings.UserApiEndpoint.replace("/api/v4/user",""),t},onConfigSave:e=>{const t=Kl({},e);return t.GitLabSettings=e.GitLabSettings||{},t.Office365Settings=e.Office365Settings||{},t.GoogleSettings=e.GoogleSettings||{},t.GitLabSettings.Enable=!1,t.Office365Settings.Enable=!1,t.GoogleSettings.Enable=!1,t.GitLabSettings.UserApiEndpoint=e.GitLabSettings.Url.replace(/\/$/,"")+"/api/v4/user",e.oauthType===O.j.GITLAB_SERVICE&&(t.GitLabSettings.Enable=!0),e.oauthType===O.j.OFFICE365_SERVICE&&(t.Office365Settings.Enable=!0),e.oauthType===O.j.GOOGLE_SERVICE&&(t.GoogleSettings.Enable=!0),delete t.oauthType,t},settings:[{type:O.j.SettingsTypes.TYPE_DROPDOWN,key:"oauthType",label:Object(C.b)("admin.oauth.select"),label_default:"Select OAuth 2.0 Service Provider:",options:[{value:"off",display_name:Object(C.b)("admin.oauth.off"),display_name_default:"Do not allow sign-in via an OAuth 2.0 provider."},{value:O.j.GITLAB_SERVICE,display_name:Object(C.b)("admin.oauth.gitlab"),display_name_default:"GitLab",help_text:Object(C.b)("admin.gitlab.EnableMarkdownDesc"),help_text_default:'1. Log in to your GitLab account and go to Profile Settings -> Applications.\n2. Enter Redirect URIs "<your-mattermost-url>/login/gitlab/complete" (example: http://localhost:8065/login/gitlab/complete) and "<your-mattermost-url>/signup/gitlab/complete".\n3. Then use "Application Secret Key" and "Application ID" fields from GitLab to complete the options below.\n4. Complete the Endpoint URLs below.',help_text_markdown:!0},{value:O.j.GOOGLE_SERVICE,display_name:Object(C.b)("admin.oauth.google"),display_name_default:"Google Apps",isHidden:$l.isnt($l.licensedForFeature("GoogleOAuth")),help_text:Object(C.b)("admin.google.EnableMarkdownDesc"),help_text_default:'1. [Log in](!https://accounts.google.com/login) to your Google account.\n2. Go to [https://console.developers.google.com](!https://console.developers.google.com), click **Credentials** in the left hand sidebar and enter "Mattermost - your-company-name" as the **Project Name**, then click **Create**.\n3. Click the **OAuth consent screen** header and enter "Mattermost" as the **Product name shown to users**, then click **Save**.\n4. Under the **Credentials** header, click **Create credentials**, choose **OAuth client ID** and select **Web Application**.\n5. Under **Restrictions** and **Authorized redirect URIs** enter **your-mattermost-url/signup/google/complete** (example: http://localhost:8065/signup/google/complete). Click **Create**.\n6. Paste the **Client ID** and **Client Secret** to the fields below, then click **Save**.\n7. Go to the [Google People API](!https://console.developers.google.com/apis/library/people.googleapis.com) and click *Enable*.\n8. Finally, go to [Google+ API](!https://console.developers.google.com/apis/api/plus/overview) and click *Enable*. This setting might take a few minutes to propagate.',help_text_markdown:!0},{value:O.j.OFFICE365_SERVICE,display_name:Object(C.b)("admin.oauth.office365"),display_name_default:"Office 365",isHidden:$l.isnt($l.licensedForFeature("Office365OAuth")),help_text:Object(C.b)("admin.office365.EnableMarkdownDesc"),help_text_default:'1. [Log in](!https://login.microsoftonline.com/) to your Microsoft or Office 365 account. Make sure it`s the account on the same [tenant](!https://msdn.microsoft.com/en-us/library/azure/jj573650.aspx#Anchor_0) that you would like users to log in with.\n2. Go to [https://apps.dev.microsoft.com](!https://apps.dev.microsoft.com), click **Go to app list** > **Add an app** and use "Mattermost - your-company-name" as the **Application Name**.\n3. Under **Application Secrets**, click **Generate New Password** and paste it to the **Application Secret Password** field below.\n4. Under **Platforms**, click **Add Platform**, choose **Web** and enter **your-mattermost-url/signup/office365/complete** (example: http://localhost:8065/signup/office365/complete) under **Redirect URIs**. Also uncheck **Allow Implicit Flow**.\n5. Finally, click **Save** and then paste the **Application ID** below.',help_text_markdown:!0}]},{type:O.j.SettingsTypes.TYPE_TEXT,key:"GitLabSettings.Id",label:Object(C.b)("admin.gitlab.clientIdTitle"),label_default:"Application ID:",help_text:Object(C.b)("admin.gitlab.clientIdDescription"),help_text_default:"Obtain this value via the instructions above for logging into GitLab.",placeholder:Object(C.b)("admin.gitlab.clientIdExample"),placeholder_default:'E.g.: "jcuS8PuvcpGhpgHhlcpT1Mx42pnqMxQY"',isHidden:$l.isnt($l.stateEquals("oauthType","gitlab"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"GitLabSettings.Secret",label:Object(C.b)("admin.gitlab.clientSecretTitle"),label_default:"Application Secret Key:",help_text:Object(C.b)("admin.gitlab.clientSecretDescription"),help_text_default:"Obtain this value via the instructions above for logging into GitLab.",placeholder:Object(C.b)("admin.gitlab.clientSecretExample"),placeholder_default:'E.g.: "jcuS8PuvcpGhpgHhlcpT1Mx42pnqMxQY"',isHidden:$l.isnt($l.stateEquals("oauthType","gitlab"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"GitLabSettings.Url",label:Object(C.b)("admin.gitlab.siteUrl"),label_default:"GitLab Site URL:",help_text:Object(C.b)("admin.gitlab.siteUrlDescription"),help_text_default:"Enter the URL of your GitLab instance, e.g. https://example.com:3000. If your GitLab instance is not set up with SSL, start the URL with http:// instead of https://.",placeholder:Object(C.b)("admin.gitlab.siteUrlExample"),placeholder_default:"E.g.: https://",isHidden:$l.isnt($l.stateEquals("oauthType","gitlab"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"GitLabSettings.UserApiEndpoint",label:Object(C.b)("admin.gitlab.userTitle"),label_default:"User API Endpoint:",dynamic_value:(e,t,a)=>a["GitLabSettings.Url"]?a["GitLabSettings.Url"].replace(/\/$/,"")+"/api/v4/user":"",isDisabled:!0,isHidden:$l.isnt($l.stateEquals("oauthType","gitlab"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"GitLabSettings.AuthEndpoint",label:Object(C.b)("admin.gitlab.authTitle"),label_default:"Auth Endpoint:",dynamic_value:(e,t,a)=>a["GitLabSettings.Url"]?a["GitLabSettings.Url"].replace(/\/$/,"")+"/oauth/authorize":"",isDisabled:!0,isHidden:$l.isnt($l.stateEquals("oauthType","gitlab"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"GitLabSettings.TokenEndpoint",label:Object(C.b)("admin.gitlab.tokenTitle"),label_default:"Token Endpoint:",dynamic_value:(e,t,a)=>a["GitLabSettings.Url"]?a["GitLabSettings.Url"].replace(/\/$/,"")+"/oauth/token":"",isDisabled:!0,isHidden:$l.isnt($l.stateEquals("oauthType","gitlab"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"GoogleSettings.Id",label:Object(C.b)("admin.google.clientIdTitle"),label_default:"Client ID:",help_text:Object(C.b)("admin.google.clientIdDescription"),help_text_default:"The Client ID you received when registering your application with Google.",placeholder:Object(C.b)("admin.google.clientIdExample"),placeholder_default:'E.g.: "7602141235235-url0fhs1mayfasbmop5qlfns8dh4.apps.googleusercontent.com"',isHidden:$l.isnt($l.stateEquals("oauthType","google"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"GoogleSettings.Secret",label:Object(C.b)("admin.google.clientSecretTitle"),label_default:"Client Secret:",help_text:Object(C.b)("admin.google.clientSecretDescription"),help_text_default:"The Client Secret you received when registering your application with Google.",placeholder:Object(C.b)("admin.google.clientSecretExample"),placeholder_default:'E.g.: "H8sz0Az-dDs2p15-7QzD231"',isHidden:$l.isnt($l.stateEquals("oauthType","google"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"GoogleSettings.UserApiEndpoint",label:Object(C.b)("admin.google.userTitle"),label_default:"User API Endpoint:",dynamic_value:()=>"https://people.googleapis.com/v1/people/me?personFields=names,emailAddresses,nicknames,metadata",isDisabled:!0,isHidden:$l.isnt($l.stateEquals("oauthType","google"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"GoogleSettings.AuthEndpoint",label:Object(C.b)("admin.google.authTitle"),label_default:"Auth Endpoint:",dynamic_value:()=>"https://accounts.google.com/o/oauth2/v2/auth",isDisabled:!0,isHidden:$l.isnt($l.stateEquals("oauthType","google"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"GoogleSettings.TokenEndpoint",label:Object(C.b)("admin.google.tokenTitle"),label_default:"Token Endpoint:",dynamic_value:()=>"https://www.googleapis.com/oauth2/v4/token",isDisabled:!0,isHidden:$l.isnt($l.stateEquals("oauthType","google"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"Office365Settings.Id",label:Object(C.b)("admin.office365.clientIdTitle"),label_default:"Application ID:",help_text:Object(C.b)("admin.office365.clientIdDescription"),help_text_default:"The Application/Client ID you received when registering your application with Microsoft.",placeholder:Object(C.b)("admin.office365.clientIdExample"),placeholder_default:'E.g.: "adf3sfa2-ag3f-sn4n-ids0-sh1hdax192qq"',isHidden:$l.isnt($l.stateEquals("oauthType","office365"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"Office365Settings.Secret",label:Object(C.b)("admin.office365.clientSecretTitle"),label_default:"Application Secret Password:",help_text:Object(C.b)("admin.office365.clientSecretDescription"),help_text_default:"The Application Secret Password you generated when registering your application with Microsoft.",placeholder:Object(C.b)("admin.office365.clientSecretExample"),placeholder_default:'E.g.: "shAieM47sNBfgl20f8ci294"',isHidden:$l.isnt($l.stateEquals("oauthType","office365"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"Office365Settings.UserApiEndpoint",label:Object(C.b)("admin.office365.userTitle"),label_default:"User API Endpoint:",dynamic_value:()=>"https://graph.microsoft.com/v1.0/me",isDisabled:!0,isHidden:$l.isnt($l.stateEquals("oauthType","office365"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"Office365Settings.AuthEndpoint",label:Object(C.b)("admin.office365.authTitle"),label_default:"Auth Endpoint:",dynamic_value:()=>"https://login.microsoftonline.com/common/oauth2/v2.0/authorize",isDisabled:!0,isHidden:$l.isnt($l.stateEquals("oauthType","office365"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"Office365Settings.TokenEndpoint",label:Object(C.b)("admin.office365.tokenTitle"),label_default:"Token Endpoint:",dynamic_value:()=>"https://login.microsoftonline.com/common/oauth2/v2.0/token",isDisabled:!0,isHidden:$l.isnt($l.stateEquals("oauthType","office365"))}]}},guest_access:{url:"authentication/guest_access",title:Object(C.b)("admin.sidebar.guest_access"),title_default:"Guest Access (Beta)",isHidden:$l.isnt($l.licensed),schema:{id:"GuestAccountsSettings",name:Object(C.b)("admin.authentication.guest_access"),name_default:"Guest Access (Beta)",settings:[{type:O.j.SettingsTypes.TYPE_CUSTOM,component:aa,key:"GuestAccountsSettings.Enable"},{type:O.j.SettingsTypes.TYPE_TEXT,key:"GuestAccountsSettings.RestrictCreationToDomains",label:Object(C.b)("admin.guest_access.whitelistedDomainsTitle"),label_default:"Whitelisted Guest Domains:",help_text:Object(C.b)("admin.guest_access.whitelistedDomainsDescription"),help_text_default:"(Optional) Guest accounts can be created at the system level from this list of allowed guest domains.",help_text_markdown:!0,placeholder:Object(C.b)("admin.guest_access.whitelistedDomainsExample"),placeholder_default:'E.g.: "company.com, othercorp.org"'},{type:O.j.SettingsTypes.TYPE_BOOL,key:"GuestAccountsSettings.EnforceMultifactorAuthentication",label:Object(C.b)("admin.guest_access.mfaTitle"),label_default:"Enforce Multi-factor Authentication: ",help_text:Object(C.b)("admin.guest_access.mfaDescriptionMFANotEnabled"),help_text_default:"[Multi-factor authentication](./mfa) is currently not enabled.",help_text_markdown:!0,isDisabled:()=>!0,isHidden:$l.configIsTrue("ServiceSettings","EnableMultifactorAuthentication")},{type:O.j.SettingsTypes.TYPE_BOOL,key:"GuestAccountsSettings.EnforceMultifactorAuthentication",label:Object(C.b)("admin.guest_access.mfaTitle"),label_default:"Enforce Multi-factor Authentication: ",help_text:Object(C.b)("admin.guest_access.mfaDescriptionMFANotEnforced"),help_text_default:"[Multi-factor authentication](./mfa) is currently not enforced.",help_text_markdown:!0,isDisabled:()=>!0,isHidden:$l.either($l.configIsFalse("ServiceSettings","EnableMultifactorAuthentication"),$l.configIsTrue("ServiceSettings","EnforceMultifactorAuthentication"))},{type:O.j.SettingsTypes.TYPE_BOOL,key:"GuestAccountsSettings.EnforceMultifactorAuthentication",label:Object(C.b)("admin.guest_access.mfaTitle"),label_default:"Enforce Multi-factor Authentication: ",help_text:Object(C.b)("admin.guest_access.mfaDescription"),help_text_default:"When true, [multi-factor authentication](!https://docs.mattermost.com/deployment/auth.html) for guests is required for login. New guest users will be required to configure MFA on signup. Logged in guest users without MFA configured are redirected to the MFA setup page until configuration is complete.\n \nIf your system has guest users with login methods other than AD/LDAP and email, MFA must be enforced with the authentication provider outside of Mattermost.",help_text_markdown:!0,isHidden:$l.either($l.configIsFalse("ServiceSettings","EnableMultifactorAuthentication"),$l.configIsFalse("ServiceSettings","EnforceMultifactorAuthentication"))}]}}},plugins:{icon:"fa-plug",sectionTitle:Object(C.b)("admin.sidebar.plugins"),sectionTitleDefault:"Plugins (Beta)",id:"plugins",plugin_management:{url:"plugins/plugin_management",title:Object(C.b)("admin.plugins.pluginManagement"),title_default:"Plugin Management",searchableStrings:["admin.plugin.management.title","admin.plugins.settings.enable","admin.plugins.settings.enableDesc","admin.plugin.uploadTitle","admin.plugin.installedTitle","admin.plugin.installedDesc","admin.plugin.uploadDesc","admin.plugin.uploadDisabledDesc","admin.plugins.settings.enableMarketplace","admin.plugins.settings.enableMarketplaceDesc","admin.plugins.settings.enableRemoteMarketplace","admin.plugins.settings.enableRemoteMarketplaceDesc","admin.plugins.settings.automaticPrepackagedPlugins","admin.plugins.settings.automaticPrepackagedPluginsDesc","admin.plugins.settings.marketplaceUrl","admin.plugins.settings.marketplaceUrlDesc"],schema:{id:"PluginManagementSettings",component:Ie}},custom:{url:"plugins/plugin_:plugin_id",schema:{id:"CustomPluginSettings",component:qt}}},integrations:{icon:"fa-sitemap",sectionTitle:Object(C.b)("admin.sidebar.integrations"),sectionTitleDefault:"Integrations",id:"integrations",integration_management:{url:"integrations/integration_management",title:Object(C.b)("admin.integrations.integrationManagement"),title_default:"Integration Management",schema:{id:"CustomIntegrationSettings",name:Object(C.b)("admin.integrations.integrationManagement.title"),name_default:"Integration Management",settings:[{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.EnableIncomingWebhooks",label:Object(C.b)("admin.service.webhooksTitle"),label_default:"Enable Incoming Webhooks: ",help_text:Object(C.b)("admin.service.webhooksDescription"),help_text_default:"When true, incoming webhooks will be allowed. To help combat phishing attacks, all posts from webhooks will be labelled by a BOT tag. See [documentation](!http://docs.mattermost.com/developer/webhooks-incoming.html) to learn more.",help_text_markdown:!0},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.EnableOutgoingWebhooks",label:Object(C.b)("admin.service.outWebhooksTitle"),label_default:"Enable Outgoing Webhooks: ",help_text:Object(C.b)("admin.service.outWebhooksDesc"),help_text_default:"When true, outgoing webhooks will be allowed. See [documentation](!http://docs.mattermost.com/developer/webhooks-outgoing.html) to learn more.",help_text_markdown:!0},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.EnableCommands",label:Object(C.b)("admin.service.cmdsTitle"),label_default:"Enable Custom Slash Commands: ",help_text:Object(C.b)("admin.service.cmdsDesc"),help_text_default:"When true, custom slash commands will be allowed. See [documentation](!http://docs.mattermost.com/developer/slash-commands.html) to learn more.",help_text_markdown:!0},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.EnableOAuthServiceProvider",label:Object(C.b)("admin.oauth.providerTitle"),label_default:"Enable OAuth 2.0 Service Provider: ",help_text:Object(C.b)("admin.oauth.providerDescription"),help_text_default:"When true, Mattermost can act as an OAuth 2.0 service provider allowing Mattermost to authorize API requests from external applications. See [documentation](!https://docs.mattermost.com/developer/oauth-2-0-applications.html) to learn more.",help_text_markdown:!0},{type:O.j.SettingsTypes.TYPE_PERMISSION,key:"ServiceSettings.EnableOnlyAdminIntegrations",label:Object(C.b)("admin.service.integrationAdmin"),label_default:"Restrict managing integrations to Admins:",help_text:Object(C.b)("admin.service.integrationAdminDesc"),help_text_default:"When true, webhooks and slash commands can only be created, edited and viewed by Team and System Admins, and OAuth 2.0 applications by System Admins. Integrations are available to all users after they have been created by the Admin.",permissions_mapping_name:"enableOnlyAdminIntegrations",isHidden:$l.licensed},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.EnablePostUsernameOverride",label:Object(C.b)("admin.service.overrideTitle"),label_default:"Enable integrations to override usernames:",help_text:Object(C.b)("admin.service.overrideDescription"),help_text_default:"When true, webhooks, slash commands and other integrations, such as [Zapier](!https://docs.mattermost.com/integrations/zapier.html), will be allowed to change the username they are posting as. Note: Combined with allowing integrations to override profile picture icons, users may be able to perform phishing attacks by attempting to impersonate other users.",help_text_markdown:!0},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.EnablePostIconOverride",label:Object(C.b)("admin.service.iconTitle"),label_default:"Enable integrations to override profile picture icons:",help_text:Object(C.b)("admin.service.iconDescription"),help_text_default:"When true, webhooks, slash commands and other integrations, such as [Zapier](!https://docs.mattermost.com/integrations/zapier.html), will be allowed to change the profile picture they post with. Note: Combined with allowing integrations to override usernames, users may be able to perform phishing attacks by attempting to impersonate other users.",help_text_markdown:!0},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.EnableUserAccessTokens",label:Object(C.b)("admin.service.userAccessTokensTitle"),label_default:"Enable User Access Tokens: ",help_text:Object(C.b)("admin.service.userAccessTokensDescription"),help_text_default:"When true, users can create [user access tokens](!https://about.mattermost.com/default-user-access-tokens) for integrations in **Account Settings > Security**. They can be used to authenticate against the API and give full access to the account.\n\n To manage who can create personal access tokens or to search users by token ID, go to the **User Management > Users** page.",help_text_markdown:!0}]}},bot_accounts:{url:"integrations/bot_accounts",title:Object(C.b)("admin.integrations.botAccounts"),title_default:"Bot Accounts",schema:{id:"BotAccountSettings",name:Object(C.b)("admin.integrations.botAccounts.title"),name_default:"Bot Accounts",settings:[{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.EnableBotAccountCreation",label:Object(C.b)("admin.service.enableBotTitle"),label_default:"Enable Bot Account Creation: ",help_text:Object(C.b)("admin.service.enableBotAccountCreation"),help_text_default:"When true, System Admins can create bot accounts for integrations in [Integrations > Bot Accounts]({siteURL}/_redirect/integrations/bots). Bot accounts are similar to user accounts except they cannot be used to log in. See [documentation](https://mattermost.com/pl/default-bot-accounts) to learn more.",help_text_markdown:!0,help_text_values:{siteURL:Object(w.e)()}},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.DisableBotsWhenOwnerIsDeactivated",label:Object(C.b)("admin.service.disableBotOwnerDeactivatedTitle"),label_default:"Disable bot accounts when owner is deactivated:",help_text:Object(C.b)("admin.service.disableBotWhenOwnerIsDeactivated"),help_text_default:"When a user is deactivated, disables all bot accounts managed by the user. To re-enable bot accounts, go to [Integrations > Bot Accounts]({siteURL}/_redirect/integrations/bots).",help_text_markdown:!0,help_text_values:{siteURL:Object(w.e)()}}]}},gif:{url:"integrations/gif",title:Object(C.b)("admin.sidebar.gif"),title_default:"GIF (Beta)",schema:{id:"GifSettings",name:Object(C.b)("admin.integrations.gif"),name_default:"GIF (Beta)",settings:[{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.EnableGifPicker",label:Object(C.b)("admin.customization.enableGifPickerTitle"),label_default:"Enable GIF Picker:",help_text:Object(C.b)("admin.customization.enableGifPickerDesc"),help_text_default:"Allow users to select GIFs from the emoji picker via a Gfycat integration."},{type:O.j.SettingsTypes.TYPE_TEXT,key:"ServiceSettings.GfycatApiKey",label:Object(C.b)("admin.customization.gfycatApiKey"),label_default:"Gfycat API Key:",help_text:Object(C.b)("admin.customization.gfycatApiKeyDescription"),help_text_default:"Request an API key at [https://developers.gfycat.com/signup/#](!https://developers.gfycat.com/signup/#). Enter the client ID you receive via email to this field. When blank, uses the default API key provided by Gfycat.",help_text_markdown:!0},{type:O.j.SettingsTypes.TYPE_TEXT,key:"ServiceSettings.GfycatApiSecret",label:Object(C.b)("admin.customization.gfycatApiSecret"),label_default:"Gfycat API Secret:",help_text:Object(C.b)("admin.customization.gfycatApiSecretDescription"),help_text_default:"The API secret generated by Gfycat for your API key. When blank, uses the default API secret provided by Gfycat."}]}},cors:{url:"integrations/cors",title:Object(C.b)("admin.sidebar.cors"),title_default:"CORS",isHidden:$l.configIsTrue("ExperimentalSettings","RestrictSystemAdmin"),schema:{id:"CORS",name:Object(C.b)("admin.integrations.cors"),name_default:"CORS",settings:[{type:O.j.SettingsTypes.TYPE_TEXT,key:"ServiceSettings.AllowCorsFrom",label:Object(C.b)("admin.service.corsTitle"),label_default:"Enable cross-origin requests from:",placeholder:Object(C.b)("admin.service.corsEx"),placeholder_default:"http://example.com",help_text:Object(C.b)("admin.service.corsDescription"),help_text_default:'Enable HTTP Cross origin request from a specific domain. Use "*" if you want to allow CORS from any domain or leave it blank to disable it. Should not be set to "*" in production.'},{type:O.j.SettingsTypes.TYPE_TEXT,key:"ServiceSettings.CorsExposedHeaders",label:Object(C.b)("admin.service.corsExposedHeadersTitle"),label_default:"CORS Exposed Headers:",placeholder:Object(C.b)("admin.service.corsHeadersEx"),placeholder_default:"X-My-Header",help_text:Object(C.b)("admin.service.corsExposedHeadersDescription"),help_text_default:"Whitelist of headers that will be accessible to the requester."},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.CorsAllowCredentials",label:Object(C.b)("admin.service.corsAllowCredentialsLabel"),label_default:"CORS Allow Credentials:",help_text:Object(C.b)("admin.service.corsAllowCredentialsDescription"),help_text_default:"When true, requests that pass validation will include the Access-Control-Allow-Credentials header."},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.CorsDebug",label:Object(C.b)("admin.service.CorsDebugLabel"),label_default:"CORS Debug:",help_text:Object(C.b)("admin.service.corsDebugDescription"),help_text_default:'When true, prints messages to the logs to help when developing an integration that uses CORS. These messages will include the structured key value pair "source":"cors".'}]}}},compliance:{icon:"fa-list",sectionTitle:Object(C.b)("admin.sidebar.compliance"),sectionTitleDefault:"Compliance",data_retention:{url:"compliance/data_retention",title:Object(C.b)("admin.sidebar.dataRetentionPolicy"),title_default:"Data Retention Policy",isHidden:$l.isnt($l.licensedForFeature("DataRetention")),searchableStrings:["admin.data_retention.title","admin.data_retention.messageRetentionDays.description","admin.data_retention.fileRetentionDays.description",["admin.data_retention.note.description",{documentationLink:""}],"admin.data_retention.enableMessageDeletion.title","admin.data_retention.enableMessageDeletion.description","admin.data_retention.enableFileDeletion.title","admin.data_retention.enableFileDeletion.description","admin.data_retention.deletionJobStartTime.title","admin.data_retention.deletionJobStartTime.description","admin.data_retention.createJob.title","admin.data_retention.createJob.help"],schema:{id:"DataRetentionSettings",component:class extends Se{constructor(...e){super(...e),Sl(this,"getConfigFromState",e=>(e.DataRetentionSettings.EnableMessageDeletion="true"===this.state.enableMessageDeletion,e.DataRetentionSettings.EnableFileDeletion="true"===this.state.enableFileDeletion,e.DataRetentionSettings.MessageRetentionDays=parseInt(this.state.messageRetentionDays,10),e.DataRetentionSettings.FileRetentionDays=parseInt(this.state.fileRetentionDays,10),e.DataRetentionSettings.DeletionJobStartTime=this.state.deletionJobStartTime,e)),Sl(this,"handleSubmit",e=>{e.preventDefault(),this.setState({showConfirmModal:!0})}),Sl(this,"handleSaveConfirmed",()=>{this.setState({showConfirmModal:!1}),this.doSubmit()}),Sl(this,"handleSaveCanceled",()=>{this.setState({showConfirmModal:!1})}),Sl(this,"renderConfirmModal",()=>{const e=S.a.createElement(T.a,{id:"admin.data_retention.confirmChangesModal.title",defaultMessage:"Confirm data retention policy"}),t=[];"true"===this.state.enableMessageDeletion?t.push(S.a.createElement(T.a,{id:"admin.data_retention.confirmChangesModal.description.itemMessageDeletion",defaultMessage:"All messages will be permanently deleted after {days} days.",values:{days:S.a.createElement("strong",null,this.state.messageRetentionDays)}})):t.push(S.a.createElement(T.a,{id:"admin.data_retention.confirmChangesModal.description.itemMessageIndefinite",defaultMessage:"All messages will be retained indefinitely."})),"true"===this.state.enableFileDeletion?t.push(S.a.createElement(T.a,{id:"admin.data_retention.confirmChangesModal.description.itemFileDeletion",defaultMessage:"All files will be permanently deleted after {days} days.",values:{days:S.a.createElement("strong",null,this.state.fileRetentionDays)}})):t.push(S.a.createElement(T.a,{id:"admin.data_retention.confirmChangesModal.description.itemFileIndefinite",defaultMessage:"All files will be retained indefinitely."}));const a=S.a.createElement("div",null,S.a.createElement("p",null,S.a.createElement(T.a,{id:"admin.data_retention.confirmChangesModal.description",defaultMessage:"Are you sure you want to apply the following data retention policy:"})),S.a.createElement("ul",null,t.map((e,t)=>S.a.createElement("li",{key:t},e))),S.a.createElement("p",null,S.a.createElement(T.a,{id:"admin.data_retention.confirmChangesModal.clarification",defaultMessage:"Once deleted, messages and files cannot be retrieved."}))),s=S.a.createElement(T.a,{id:"admin.data_retention.confirmChangesModal.confirm",defaultMessage:"Confirm Settings"});return S.a.createElement(be.a,{show:this.state.showConfirmModal,title:e,message:a,confirmButtonText:s,onConfirm:this.handleSaveConfirmed,onCancel:this.handleSaveCanceled})}),Sl(this,"renderSettings",()=>{const e=[{value:"false",text:I.gb("admin.data_retention.keepMessagesIndefinitely","Keep all messages indefinitely")},{value:"true",text:I.gb("admin.data_retention.keepMessageForTime","Keep messages for a set amount of time")}],t=[{value:"false",text:I.gb("admin.data_retention.keepFilesIndefinitely","Keep all files indefinitely")},{value:"true",text:I.gb("admin.data_retention.keepFilesForTime","Keep files for a set amount of time")}];let a="";"true"===this.state.enableMessageDeletion&&(a=S.a.createElement(Ae,{id:"messageRetentionDays",label:S.a.createElement("span",null),placeholder:I.gb("admin.data_retention.messageRetentionDays.example",'E.g.: "60"'),helpText:S.a.createElement(T.a,{id:"admin.data_retention.messageRetentionDays.description",defaultMessage:"Set how many days messages are kept in Mattermost. Messages, including file attachments older than the duration you set will be deleted nightly. The minimum time is one day."}),value:this.state.messageRetentionDays,onChange:this.handleChange,setByEnv:this.isSetByEnv("DataRetentionSettings.MessageRetentionDays")}));let s="";"true"===this.state.enableFileDeletion&&(s=S.a.createElement(Ae,{id:"fileRetentionDays",label:S.a.createElement("span",null),placeholder:I.gb("admin.data_retention.fileRetentionDays.example",'E.g.: "60"'),helpText:S.a.createElement(T.a,{id:"admin.data_retention.fileRetentionDays.description",defaultMessage:"Set how many days file uploads are kept in Mattermost. Files older than the duration you set will be deleted nightly. The minimum time is one day."}),value:this.state.fileRetentionDays,onChange:this.handleChange,setByEnv:this.isSetByEnv("DataRetentionSettings.FileRetentionDays")}));const i=this.renderConfirmModal();return S.a.createElement(xe,null,i,S.a.createElement("div",{className:"banner"},S.a.createElement("div",{className:"banner__content"},S.a.createElement(T.a,{id:"admin.data_retention.note.description",defaultMessage:"Caution: Once a message or a file is deleted, the action is irreversible. Please be careful when setting up a custom data retention policy. See {documentationLink} to learn more.",values:{documentationLink:S.a.createElement("a",{href:"https://about.mattermost.com/default-dataretention-documentation/",rel:"noopener noreferrer",target:"_blank"},S.a.createElement(T.a,{id:"admin.data_retention.note.description.documentationLinkText",defaultMessage:"documentation"}))}}))),S.a.createElement(Ve,{id:"enableMessageDeletion",values:e,label:S.a.createElement(T.a,{id:"admin.data_retention.enableMessageDeletion.title",defaultMessage:"Message Retention:"}),helpText:S.a.createElement(T.a,{id:"admin.data_retention.enableMessageDeletion.description",defaultMessage:"Set how long Mattermost keeps messages in channels and direct messages."}),value:this.state.enableMessageDeletion,onChange:this.handleChange,setByEnv:this.isSetByEnv("DataRetentionSettings.EnableMessageDeletion")}),a,S.a.createElement(Ve,{id:"enableFileDeletion",values:t,label:S.a.createElement(T.a,{id:"admin.data_retention.enableFileDeletion.title",defaultMessage:"File Retention:"}),helpText:S.a.createElement(T.a,{id:"admin.data_retention.enableFileDeletion.description",defaultMessage:"Set how long Mattermost keeps file uploads in channels and direct messages."}),value:this.state.enableFileDeletion,onChange:this.handleChange,setByEnv:this.isSetByEnv("DataRetentionSettings.EnableFileDeletion")}),s,S.a.createElement(Ae,{id:"deletionJobStartTime",label:S.a.createElement(T.a,{id:"admin.data_retention.deletionJobStartTime.title",defaultMessage:"Data Deletion Time:"}),placeholder:I.gb("admin.data_retention.deletionJobStartTime.example",'E.g.: "02:00"'),helpText:S.a.createElement(T.a,{id:"admin.data_retention.deletionJobStartTime.description",defaultMessage:"Set the start time of the daily scheduled data retention job. Choose a time when fewer people are using your system. Must be a 24-hour time stamp in the form HH:MM."}),value:this.state.deletionJobStartTime,onChange:this.handleChange,setByEnv:this.isSetByEnv("DataRetentionSettings.DeletionJobStartTime")}),S.a.createElement(yt,{jobType:O.r.DATA_RETENTION,disabled:"true"!==this.state.enableMessageDeletion&&"true"!==this.state.enableFileDeletion,createJobButtonText:S.a.createElement(T.a,{id:"admin.data_retention.createJob.title",defaultMessage:"Run Deletion Job Now"}),createJobHelpText:S.a.createElement(T.a,{id:"admin.data_retention.createJob.help",defaultMessage:"Initiates a Data Retention deletion job immediately."})}))})}getStateFromConfig(e){return{enableMessageDeletion:String(e.DataRetentionSettings.EnableMessageDeletion),enableFileDeletion:String(e.DataRetentionSettings.EnableFileDeletion),messageRetentionDays:e.DataRetentionSettings.MessageRetentionDays,fileRetentionDays:e.DataRetentionSettings.FileRetentionDays,deletionJobStartTime:e.DataRetentionSettings.DeletionJobStartTime,showConfirmModal:!1}}renderTitle(){return S.a.createElement(T.a,{id:"admin.data_retention.title",defaultMessage:"Data Retention Policy"})}}}},message_export:{url:"compliance/export",title:Object(C.b)("admin.sidebar.complianceExport"),title_default:"Compliance Export (Beta)",isHidden:$l.isnt($l.licensedForFeature("MessageExport")),searchableStrings:["admin.service.complianceExportTitle","admin.service.complianceExportDesc","admin.complianceExport.exportJobStartTime.title","admin.complianceExport.exportJobStartTime.description","admin.complianceExport.exportFormat.title",["admin.complianceExport.exportFormat.description",{siteURL:""}],"admin.complianceExport.createJob.title","admin.complianceExport.createJob.help","admin.complianceExport.globalRelayCustomerType.title","admin.complianceExport.globalRelayCustomerType.description","admin.complianceExport.globalRelaySmtpUsername.title","admin.complianceExport.globalRelaySmtpUsername.description","admin.complianceExport.globalRelaySmtpPassword.title","admin.complianceExport.globalRelaySmtpPassword.description","admin.complianceExport.globalRelayEmailAddress.title","admin.complianceExport.globalRelayEmailAddress.description"],schema:{id:"MessageExportSettings",component:class extends Se{constructor(...e){super(...e),Tl(this,"getConfigFromState",e=>(e.MessageExportSettings.EnableExport=this.state.enableComplianceExport,e.MessageExportSettings.ExportFormat=this.state.exportFormat,e.MessageExportSettings.DailyRunTime=this.state.exportJobStartTime,this.state.exportFormat===Ol.EXPORT_FORMAT_GLOBALRELAY&&(e.MessageExportSettings.GlobalRelaySettings={CustomerType:this.state.globalRelayCustomerType,SmtpUsername:this.state.globalRelaySmtpUsername,SmtpPassword:this.state.globalRelaySmtpPassword,EmailAddress:this.state.globalRelayEmailAddress}),e)),Tl(this,"getJobDetails",e=>e.data&&e.data.messages_exported?S.a.createElement(T.a,{id:"admin.complianceExport.messagesExportedCount",defaultMessage:"{count} messages exported.",values:{count:e.data.messages_exported}}):null),Tl(this,"renderSettings",()=>{const e=[{value:Ol.EXPORT_FORMAT_ACTIANCE,text:I.gb("admin.complianceExport.exportFormat.actiance","Actiance XML")},{value:Ol.EXPORT_FORMAT_CSV,text:I.gb("admin.complianceExport.exportFormat.csv","CSV")},{value:Ol.EXPORT_FORMAT_GLOBALRELAY,text:I.gb("admin.complianceExport.exportFormat.globalrelay","GlobalRelay EML")}];let t;if(this.state.exportFormat===Ol.EXPORT_FORMAT_GLOBALRELAY){const e=S.a.createElement(Ze,{id:"globalRelayCustomerType",values:[{value:"A9",text:I.gb("admin.complianceExport.globalRelayCustomerType.a9.description","A9/Type 9")},{value:"A10",text:I.gb("admin.complianceExport.globalRelayCustomerType.a10.description","A10/Type 10")}],label:S.a.createElement(T.a,{id:"admin.complianceExport.globalRelayCustomerType.title",defaultMessage:"Customer Type:"}),helpText:S.a.createElement(T.a,{id:"admin.complianceExport.globalRelayCustomerType.description",defaultMessage:"The type of GlobalRelay customer account that your organization has."}),value:this.state.globalRelayCustomerType?this.state.globalRelayCustomerType:"",disabled:!this.state.enableComplianceExport,onChange:this.handleChange,setByEnv:this.isSetByEnv("DataRetentionSettings.GlobalRelaySettings.CustomerType")}),a=S.a.createElement(Ae,{id:"globalRelaySmtpUsername",label:S.a.createElement(T.a,{id:"admin.complianceExport.globalRelaySmtpUsername.title",defaultMessage:"SMTP Username:"}),placeholder:I.gb("admin.complianceExport.globalRelaySmtpUsername.example",'E.g.: "globalRelayUser"'),helpText:S.a.createElement(T.a,{id:"admin.complianceExport.globalRelaySmtpUsername.description",defaultMessage:"The username that is used to authenticate against the GlobalRelay SMTP server."}),value:this.state.globalRelaySmtpUsername?this.state.globalRelaySmtpUsername:"",disabled:!this.state.enableComplianceExport,onChange:this.handleChange,setByEnv:this.isSetByEnv("DataRetentionSettings.GlobalRelaySettings.SmtpUsername")}),s=S.a.createElement(Ae,{id:"globalRelaySmtpPassword",label:S.a.createElement(T.a,{id:"admin.complianceExport.globalRelaySmtpPassword.title",defaultMessage:"SMTP Password:"}),placeholder:I.gb("admin.complianceExport.globalRelaySmtpPassword.example",'E.g.: "globalRelayPassword"'),helpText:S.a.createElement(T.a,{id:"admin.complianceExport.globalRelaySmtpPassword.description",defaultMessage:"The password that is used to authenticate against the GlobalRelay SMTP server."}),value:this.state.globalRelaySmtpPassword?this.state.globalRelaySmtpPassword:"",disabled:!this.state.enableComplianceExport,onChange:this.handleChange,setByEnv:this.isSetByEnv("DataRetentionSettings.GlobalRelaySettings.SmtpPassword")}),i=S.a.createElement(Ae,{id:"globalRelayEmailAddress",label:S.a.createElement(T.a,{id:"admin.complianceExport.globalRelayEmailAddress.title",defaultMessage:"Email Address:"}),placeholder:I.gb("admin.complianceExport.globalRelayEmailAddress.example",'E.g.: "globalrelay@mattermost.com"'),helpText:S.a.createElement(de.a,{id:"admin.complianceExport.globalRelayEmailAddress.description",defaultMessage:"The email address that your GlobalRelay server monitors for incoming Compliance Exports."}),value:this.state.globalRelayEmailAddress?this.state.globalRelayEmailAddress:"",disabled:!this.state.enableComplianceExport,onChange:this.handleChange,setByEnv:this.isSetByEnv("DataRetentionSettings.GlobalRelaySettings.EmailAddress")});t=S.a.createElement(xe,{id:"globalRelaySettings"},e,a,s,i)}const a=S.a.createElement(j.b,{id:"admin.complianceExport.exportFormat.description",defaultMessage:'Format of the compliance export. Corresponds to the system that you want to import the data into.\\n \\nFor Actiance XML, compliance export files are written to the \\"exports\\" subdirectory of the configured [Local Storage Directory]({siteURL}/admin_console/environment/file_storage). For Global Relay EML, they are emailed to the configured email address.',values:{siteURL:Object(w.e)()}});return S.a.createElement(xe,null,S.a.createElement(Ce,{id:"enableComplianceExport",label:S.a.createElement(T.a,{id:"admin.service.complianceExportTitle",defaultMessage:"Enable Compliance Export:"}),helpText:S.a.createElement(j.b,{id:"admin.service.complianceExportDesc",defaultMessage:"When true, Mattermost will export all messages that were posted in the last 24 hours. The export task is scheduled to run once per day. See [the documentation](!https://about.mattermost.com/default-compliance-export-documentation) to learn more."}),value:this.state.enableComplianceExport,onChange:this.handleChange,setByEnv:this.isSetByEnv("DataRetentionSettings.EnableExport")}),S.a.createElement(Ae,{id:"exportJobStartTime",label:S.a.createElement(T.a,{id:"admin.complianceExport.exportJobStartTime.title",defaultMessage:"Compliance Export Time:"}),placeholder:I.gb("admin.complianceExport.exportJobStartTime.example",'E.g.: "02:00"'),helpText:S.a.createElement(de.a,{id:"admin.complianceExport.exportJobStartTime.description",defaultMessage:"Set the start time of the daily scheduled compliance export job. Choose a time when fewer people are using your system. Must be a 24-hour time stamp in the form HH:MM."}),value:this.state.exportJobStartTime,disabled:!this.state.enableComplianceExport,onChange:this.handleChange,setByEnv:this.isSetByEnv("DataRetentionSettings.DailyRunTime")}),S.a.createElement(Ve,{id:"exportFormat",values:e,label:S.a.createElement(T.a,{id:"admin.complianceExport.exportFormat.title",defaultMessage:"Export Format:"}),helpText:a,value:this.state.exportFormat,disabled:!this.state.enableComplianceExport,onChange:this.handleChange,setByEnv:this.isSetByEnv("DataRetentionSettings.ExportFormat")}),t,S.a.createElement(yt,{jobType:O.r.MESSAGE_EXPORT,disabled:!this.state.enableComplianceExport,createJobButtonText:S.a.createElement(T.a,{id:"admin.complianceExport.createJob.title",defaultMessage:"Run Compliance Export Job Now"}),createJobHelpText:S.a.createElement(T.a,{id:"admin.complianceExport.createJob.help",defaultMessage:"Initiates a Compliance Export job immediately."}),getExtraInfoText:this.getJobDetails}))})}getStateFromConfig(e){const t={enableComplianceExport:e.MessageExportSettings.EnableExport,exportFormat:e.MessageExportSettings.ExportFormat,exportJobStartTime:e.MessageExportSettings.DailyRunTime};return e.MessageExportSettings.GlobalRelaySettings&&(t.globalRelayCustomerType=e.MessageExportSettings.GlobalRelaySettings.CustomerType,t.globalRelaySmtpUsername=e.MessageExportSettings.GlobalRelaySettings.SmtpUsername,t.globalRelaySmtpPassword=e.MessageExportSettings.GlobalRelaySettings.SmtpPassword,t.globalRelayEmailAddress=e.MessageExportSettings.GlobalRelaySettings.EmailAddress),t}renderTitle(){return S.a.createElement(T.a,{id:"admin.complianceExport.title",defaultMessage:"Compliance Export (Beta)"})}}}},audits:{url:"compliance/monitoring",title:Object(C.b)("admin.sidebar.complianceMonitoring"),title_default:"Compliance Monitoring",isHidden:$l.isnt($l.licensed),searchableStrings:["admin.audits.title","admin.audits.reload"],schema:{id:"Audits",name:Object(C.b)("admin.compliance.complianceMonitoring"),name_default:"Compliance Monitoring",component:Zt,isHidden:$l.isnt($l.licensedForFeature("Compliance")),settings:[{type:O.j.SettingsTypes.TYPE_BANNER,label:Object(C.b)("admin.compliance.newComplianceExportBanner"),label_markdown:!0,label_default:"This feature is replaced by a new [Compliance Export]({siteURL}/admin_console/compliance/export) feature, and will be removed in a future release. We recommend migrating to the new system.",label_values:{siteURL:Object(w.e)()},isHidden:$l.isnt($l.licensedForFeature("Compliance")),banner_type:"info"},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ComplianceSettings.Enable",label:Object(C.b)("admin.compliance.enableTitle"),label_default:"Enable Compliance Reporting:",help_text:Object(C.b)("admin.compliance.enableDesc"),help_text_default:"When true, Mattermost allows compliance reporting from the **Compliance and Auditing** tab. See [documentation](!https://docs.mattermost.com/administration/compliance.html) to learn more.",help_text_markdown:!0,isHidden:$l.isnt($l.licensedForFeature("Compliance"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"ComplianceSettings.Directory",label:Object(C.b)("admin.compliance.directoryTitle"),label_default:"Compliance Report Directory:",help_text:Object(C.b)("admin.compliance.directoryDescription"),help_text_default:"Directory to which compliance reports are written. If blank, will be set to ./data/.",placeholder:Object(C.b)("admin.compliance.directoryExample"),placeholder_default:'E.g.: "./data/"',isDisabled:$l.stateIsFalse("ComplianceSettings.Enable"),isHidden:$l.isnt($l.licensedForFeature("Compliance"))},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ComplianceSettings.EnableDaily",label:Object(C.b)("admin.compliance.enableDailyTitle"),label_default:"Enable Daily Report:",help_text:Object(C.b)("admin.compliance.enableDailyDesc"),help_text_default:"When true, Mattermost will generate a daily compliance report.",isDisabled:$l.stateIsFalse("ComplianceSettings.Enable"),isHidden:$l.isnt($l.licensedForFeature("Compliance"))}]}},custom_terms_of_service:{url:"compliance/custom_terms_of_service",title:Object(C.b)("admin.sidebar.customTermsOfService"),title_default:"Custom Terms of Service (Beta)",isHidden:$l.isnt($l.licensedForFeature("CustomTermsOfService")),searchableStrings:["admin.support.termsOfServiceTitle","admin.support.enableTermsOfServiceTitle","admin.support.enableTermsOfServiceHelp","admin.support.termsOfServiceTextTitle","admin.support.termsOfServiceTextHelp","admin.support.termsOfServiceReAcceptanceTitle","admin.support.termsOfServiceReAcceptanceHelp"],schema:{id:"TermsOfServiceSettings",component:Bl}}},experimental:{icon:"fa-flask",sectionTitle:Object(C.b)("admin.sidebar.experimental"),sectionTitleDefault:"Experimental",experimental_features:{url:"experimental/features",title:Object(C.b)("admin.sidebar.experimentalFeatures"),title_default:"Features",schema:{id:"ExperimentalSettings",name:Object(C.b)("admin.experimental.experimentalFeatures"),name_default:"Experimental Features",settings:[{type:O.j.SettingsTypes.TYPE_TEXT,key:"LdapSettings.LoginButtonColor",label:Object(C.b)("admin.experimental.ldapSettingsLoginButtonColor.title"),label_default:"AD/LDAP Login Button Color:",help_text:Object(C.b)("admin.experimental.ldapSettingsLoginButtonColor.desc"),help_text_default:"Specify the color of the AD/LDAP login button for white labeling purposes. Use a hex code with a #-sign before the code. This setting only applies to the mobile apps.",help_text_markdown:!1,isHidden:$l.isnt($l.licensedForFeature("LDAP"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"LdapSettings.LoginButtonBorderColor",label:Object(C.b)("admin.experimental.ldapSettingsLoginButtonBorderColor.title"),label_default:"AD/LDAP Login Button Border Color:",help_text:Object(C.b)("admin.experimental.ldapSettingsLoginButtonBorderColor.desc"),help_text_default:"Specify the color of the AD/LDAP login button border for white labeling purposes. Use a hex code with a #-sign before the code. This setting only applies to the mobile apps.",help_text_markdown:!1,isHidden:$l.isnt($l.licensedForFeature("LDAP"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"LdapSettings.LoginButtonTextColor",label:Object(C.b)("admin.experimental.ldapSettingsLoginButtonTextColor.title"),label_default:"AD/LDAP Login Button Text Color:",help_text:Object(C.b)("admin.experimental.ldapSettingsLoginButtonTextColor.desc"),help_text_default:"Specify the color of the AD/LDAP login button text for white labeling purposes. Use a hex code with a #-sign before the code. This setting only applies to the mobile apps.",help_text_markdown:!1,isHidden:$l.isnt($l.licensedForFeature("LDAP"))},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.ExperimentalEnableAuthenticationTransfer",label:Object(C.b)("admin.experimental.experimentalEnableAuthenticationTransfer.title"),label_default:"Allow Authentication Transfer:",help_text:Object(C.b)("admin.experimental.experimentalEnableAuthenticationTransfer.desc"),help_text_default:"When true, users can change their sign-in method to any that is enabled on the server, either via Account Settings or the APIs. When false, Users cannot change their sign-in method, regardless of which authentication options are enabled.",help_text_markdown:!1,isHidden:$l.isnt($l.licensed)},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.CloseUnusedDirectMessages",label:Object(C.b)("admin.experimental.closeUnusedDirectMessages.title"),label_default:"Autoclose Direct Messages in Sidebar:",help_text:Object(C.b)("admin.experimental.closeUnusedDirectMessages.desc"),help_text_default:"When true, direct message conversations with no activity for 7 days will be hidden from the sidebar. When false, conversations remain in the sidebar until they are manually closed.",help_text_markdown:!1},{type:O.j.SettingsTypes.TYPE_NUMBER,key:"ExperimentalSettings.LinkMetadataTimeoutMilliseconds",label:Object(C.b)("admin.experimental.linkMetadataTimeoutMilliseconds.title"),label_default:"Link Metadata Timeout:",help_text:Object(C.b)("admin.experimental.linkMetadataTimeoutMilliseconds.desc"),help_text_default:"The number of milliseconds to wait for metadata from a third-party link. Used with Post Metadata.",help_text_markdown:!1,placeholder:Object(C.b)("admin.experimental.linkMetadataTimeoutMilliseconds.example"),placeholder_default:'E.g.: "5000"'},{type:O.j.SettingsTypes.TYPE_NUMBER,key:"EmailSettings.EmailBatchingBufferSize",label:Object(C.b)("admin.experimental.emailBatchingBufferSize.title"),label_default:"Email Batching Buffer Size:",help_text:Object(C.b)("admin.experimental.emailBatchingBufferSize.desc"),help_text_default:"Specify the maximum number of notifications batched into a single email.",help_text_markdown:!1,placeholder:Object(C.b)("admin.experimental.emailBatchingBufferSize.example"),placeholder_default:'E.g.: "256"'},{type:O.j.SettingsTypes.TYPE_NUMBER,key:"EmailSettings.EmailBatchingInterval",label:Object(C.b)("admin.experimental.emailBatchingInterval.title"),label_default:"Email Batching Interval:",help_text:Object(C.b)("admin.experimental.emailBatchingInterval.desc"),help_text_default:"Specify the maximum frequency, in seconds, which the batching job checks for new notifications. Longer batching intervals will increase performance.",help_text_markdown:!1,placeholder:Object(C.b)("admin.experimental.emailBatchingInterval.example"),placeholder_default:'E.g.: "30"'},{type:O.j.SettingsTypes.TYPE_TEXT,key:"EmailSettings.LoginButtonColor",label:Object(C.b)("admin.experimental.emailSettingsLoginButtonColor.title"),label_default:"Email Login Button Color:",help_text:Object(C.b)("admin.experimental.emailSettingsLoginButtonColor.desc"),help_text_default:"Specify the color of the email login button for white labeling purposes. Use a hex code with a #-sign before the code. This setting only applies to the mobile apps.",help_text_markdown:!1},{type:O.j.SettingsTypes.TYPE_TEXT,key:"EmailSettings.LoginButtonBorderColor",label:Object(C.b)("admin.experimental.emailSettingsLoginButtonBorderColor.title"),label_default:"Email Login Button Border Color:",help_text:Object(C.b)("admin.experimental.emailSettingsLoginButtonBorderColor.desc"),help_text_default:"Specify the color of the email login button border for white labeling purposes. Use a hex code with a #-sign before the code. This setting only applies to the mobile apps.",help_text_markdown:!1},{type:O.j.SettingsTypes.TYPE_TEXT,key:"EmailSettings.LoginButtonTextColor",label:Object(C.b)("admin.experimental.emailSettingsLoginButtonTextColor.title"),label_default:"Email Login Button Text Color:",help_text:Object(C.b)("admin.experimental.emailSettingsLoginButtonTextColor.desc"),help_text_default:"Specify the color of the email login button text for white labeling purposes. Use a hex code with a #-sign before the code. This setting only applies to the mobile apps.",help_text_markdown:!1},{type:O.j.SettingsTypes.TYPE_BOOL,key:"TeamSettings.EnableUserDeactivation",label:Object(C.b)("admin.experimental.enableUserDeactivation.title"),label_default:"Enable Account Deactivation:",help_text:Object(C.b)("admin.experimental.enableUserDeactivation.desc"),help_text_default:"When true, users may deactivate their own account from **Account Settings > Advanced**. If a user deactivates their own account, they will get an email notification confirming they were deactivated. When false, users may not deactivate their own account.",help_text_markdown:!0},{type:O.j.SettingsTypes.TYPE_BOOL,key:"TeamSettings.ExperimentalEnableAutomaticReplies",label:Object(C.b)("admin.experimental.experimentalEnableAutomaticReplies.title"),label_default:"Enable Automatic Replies:",help_text:Object(C.b)("admin.experimental.experimentalEnableAutomaticReplies.desc"),help_text_default:"When true, users can enable Automatic Replies in **Account Settings > Notifications**. Users set a custom message that will be automatically sent in response to Direct Messages. When false, disables the Automatic Direct Message Replies feature and hides it from Account Settings.",help_text_markdown:!0},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.EnableChannelViewedMessages",label:Object(C.b)("admin.experimental.enableChannelViewedMessages.title"),label_default:"Enable Channel Viewed WebSocket Messages:",help_text:Object(C.b)("admin.experimental.enableChannelViewedMessages.desc"),help_text_default:"This setting determines whether `channel_viewed` WebSocket events are sent, which synchronize unread notifications across clients and devices. Disabling the setting in larger deployments may improve server performance.",help_text_markdown:!1},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ExperimentalSettings.ClientSideCertEnable",label:Object(C.b)("admin.experimental.clientSideCertEnable.title"),label_default:"Enable Client-Side Certification:",help_text:Object(C.b)("admin.experimental.clientSideCertEnable.desc"),help_text_default:"Enables client-side certification for your Mattermost server. See [documentation](!https://docs.mattermost.com/deployment/certificate-based-authentication.html) to learn more.",help_text_markdown:!0,isHidden:$l.isnt($l.licensedForFeature("SAML"))},{type:O.j.SettingsTypes.TYPE_DROPDOWN,key:"ExperimentalSettings.ClientSideCertCheck",label:Object(C.b)("admin.experimental.clientSideCertCheck.title"),label_default:"Client-Side Certification Login Method:",help_text:Object(C.b)("admin.experimental.clientSideCertCheck.desc"),help_text_default:"When **primary**, after the client side certificate is verified, user’s email is retrieved from the certificate and is used to log in without a password. When **secondary**, after the client side certificate is verified, user’s email is retrieved from the certificate and matched against the one supplied by the user. If they match, the user logs in with regular email/password credentials.",help_text_markdown:!0,options:[{value:"primary",display_name:"primary",display_name_default:"primary"},{value:"secondary",display_name:"secondary",display_name_default:"secondary"}],isDisabled:$l.stateIsFalse("ExperimentalSettings.ClientSideCertEnable"),isHidden:$l.isnt($l.licensedForFeature("SAML"))},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.ExperimentalEnableDefaultChannelLeaveJoinMessages",label:Object(C.b)("admin.experimental.experimentalEnableDefaultChannelLeaveJoinMessages.title"),label_default:"Enable Default Channel Leave/Join System Messages:",help_text:Object(C.b)("admin.experimental.experimentalEnableDefaultChannelLeaveJoinMessages.desc"),help_text_default:"This setting determines whether team leave/join system messages are posted in the default town-square channel.",help_text_markdown:!1},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.ExperimentalEnableHardenedMode",label:Object(C.b)("admin.experimental.experimentalEnableHardenedMode.title"),label_default:"Enable Hardened Mode:",help_text:Object(C.b)("admin.experimental.experimentalEnableHardenedMode.desc"),help_text_default:"Enables a hardened mode for Mattermost that makes user experience trade-offs in the interest of security. See [documentation](!https://docs.mattermost.com/administration/config-settings.html#enable-hardened-mode-experimental) to learn more.",help_text_markdown:!0},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.EnablePreviewFeatures",label:Object(C.b)("admin.experimental.enablePreviewFeatures.title"),label_default:"Enable Preview Features:",help_text:Object(C.b)("admin.experimental.enablePreviewFeatures.desc"),help_text_default:"When true, preview features can be enabled from **Account Settings > Advanced > Preview pre-release features**. When false, disables and hides preview features from **Account Settings > Advanced > Preview pre-release features**.",help_text_markdown:!0},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ThemeSettings.EnableThemeSelection",label:Object(C.b)("admin.experimental.enableThemeSelection.title"),label_default:"Enable Theme Selection:",help_text:Object(C.b)("admin.experimental.enableThemeSelection.desc"),help_text_default:"Enables the **Display > Theme** tab in Account Settings so users can select their theme.",help_text_markdown:!0,isHidden:$l.isnt($l.licensed)},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ThemeSettings.AllowCustomThemes",label:Object(C.b)("admin.experimental.allowCustomThemes.title"),label_default:"Allow Custom Themes:",help_text:Object(C.b)("admin.experimental.allowCustomThemes.desc"),help_text_default:"Enables the **Display > Theme > Custom Theme** section in Account Settings.",help_text_markdown:!0,isHidden:$l.isnt($l.licensed),isDisabled:$l.stateIsFalse("ThemeSettings.EnableThemeSelection")},{type:O.j.SettingsTypes.TYPE_TEXT,key:"ThemeSettings.DefaultTheme",label:Object(C.b)("admin.experimental.defaultTheme.title"),label_default:"Default Theme:",help_text:Object(C.b)("admin.experimental.defaultTheme.desc"),help_text_default:"Set a default theme that applies to all new users on the system.",help_text_markdown:!0,options:[{value:"default",display_name:"default",display_name_default:"default"},{value:"organization",display_name:"organization",display_name_default:"organization"},{value:"mattermostDark",display_name:"mattermostDark",display_name_default:"mattermostDark"},{value:"windows10",display_name:"windows10",display_name_default:"windows10"}],isHidden:$l.isnt($l.licensed)},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.EnableTutorial",label:Object(C.b)("admin.experimental.enableTutorial.title"),label_default:"Enable Tutorial:",help_text:Object(C.b)("admin.experimental.enableTutorial.desc"),help_text_default:"When true, users are prompted with a tutorial when they open Mattermost for the first time after account creation. When false, the tutorial is disabled, and users are placed in Town Square when they open Mattermost for the first time after account creation.",help_text_markdown:!1},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.EnableUserTypingMessages",label:Object(C.b)("admin.experimental.enableUserTypingMessages.title"),label_default:"Enable User Typing Messages:",help_text:Object(C.b)("admin.experimental.enableUserTypingMessages.desc"),help_text_default:'This setting determines whether "user is typing..." messages are displayed below the message box. Disabling the setting in larger deployments may improve server performance.',help_text_markdown:!1},{type:O.j.SettingsTypes.TYPE_NUMBER,key:"ServiceSettings.TimeBetweenUserTypingUpdatesMilliseconds",label:Object(C.b)("admin.experimental.timeBetweenUserTypingUpdatesMilliseconds.title"),label_default:"User Typing Timeout:",help_text:Object(C.b)("admin.experimental.timeBetweenUserTypingUpdatesMilliseconds.desc"),help_text_default:"The number of milliseconds to wait between emitting user typing websocket events.",help_text_markdown:!1,placeholder:Object(C.b)("admin.experimental.timeBetweenUserTypingUpdatesMilliseconds.example"),placeholder_default:'E.g.: "5000"',isDisabled:$l.stateIsFalse("ServiceSettings.EnableUserTypingMessages")},{type:O.j.SettingsTypes.TYPE_BOOL,key:"TeamSettings.EnableXToLeaveChannelsFromLHS",label:Object(C.b)("admin.experimental.enableXToLeaveChannelsFromLHS.title"),label_default:"Enable X to Leave Channels from Left-Hand Sidebar:",help_text:Object(C.b)("admin.experimental.enableXToLeaveChannelsFromLHS.desc"),help_text_default:"When true, users can leave Public and Private Channels by clicking the “x” beside the channel name. When false, users must use the **Leave Channel** option from the channel menu to leave channels.",help_text_markdown:!0},{type:O.j.SettingsTypes.TYPE_TEXT,key:"TeamSettings.ExperimentalPrimaryTeam",label:Object(C.b)("admin.experimental.experimentalPrimaryTeam.title"),label_default:"Primary Team:",help_text:Object(C.b)("admin.experimental.experimentalPrimaryTeam.desc"),help_text_default:"The primary team of which users on the server are members. When a primary team is set, the options to join other teams or leave the primary team are disabled.",help_text_markdown:!0,placeholder:Object(C.b)("admin.experimental.experimentalPrimaryTeam.example"),placeholder_default:'E.g.: "teamname"'},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ExperimentalSettings.UseNewSAMLLibrary",label:Object(C.b)("admin.experimental.experimentalUseNewSAMLLibrary.title"),label_default:"Use Improved SAML Library (Beta):",help_text:Object(C.b)("admin.experimental.experimentalUseNewSAMLLibrary.desc"),help_text_default:"Enable an updated SAML Library, which does not require the XML Security Library (xmlsec1) to be installed. Warning: Not all providers have been tested. If you experience issues, please contact support: [https://about.mattermost.com/support/](!https://about.mattermost.com/support/). Changing this setting requires a server restart before taking effect.",help_text_markdown:!0,isHidden:$l.isnt($l.licensedForFeature("SAML"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"SamlSettings.LoginButtonColor",label:Object(C.b)("admin.experimental.samlSettingsLoginButtonColor.title"),label_default:"SAML Login Button Color:",help_text:Object(C.b)("admin.experimental.samlSettingsLoginButtonColor.desc"),help_text_default:"Specify the color of the SAML login button for white labeling purposes. Use a hex code with a #-sign before the code. This setting only applies to the mobile apps.",help_text_markdown:!1,isHidden:$l.isnt($l.licensedForFeature("SAML"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"SamlSettings.LoginButtonBorderColor",label:Object(C.b)("admin.experimental.samlSettingsLoginButtonBorderColor.title"),label_default:"SAML Login Button Border Color:",help_text:Object(C.b)("admin.experimental.samlSettingsLoginButtonBorderColor.desc"),help_text_default:"Specify the color of the SAML login button border for white labeling purposes. Use a hex code with a #-sign before the code. This setting only applies to the mobile apps.",help_text_markdown:!1,isHidden:$l.isnt($l.licensedForFeature("SAML"))},{type:O.j.SettingsTypes.TYPE_TEXT,key:"SamlSettings.LoginButtonTextColor",label:Object(C.b)("admin.experimental.samlSettingsLoginButtonTextColor.title"),label_default:"SAML Login Button Text Color:",help_text:Object(C.b)("admin.experimental.samlSettingsLoginButtonTextColor.desc"),help_text_default:"Specify the color of the SAML login button text for white labeling purposes. Use a hex code with a #-sign before the code. This setting only applies to the mobile apps.",help_text_markdown:!1,isHidden:$l.isnt($l.licensedForFeature("SAML"))},{type:O.j.SettingsTypes.TYPE_BOOL,key:"ServiceSettings.ExperimentalChannelOrganization",label:Object(C.b)("admin.experimental.experimentalChannelOrganization.title"),label_default:"Sidebar Organization:",help_text:Object(C.b)("admin.experimental.experimentalChannelOrganization.desc"),help_text_default:"Enables channel sidebar organization options in **Account Settings > Sidebar > Channel grouping and sorting** including options for grouping unread channels, sorting channels by most recent post and combining all channel types into a single list.",help_text_markdown:!0},{type:O.j.SettingsTypes.TYPE_BOOL,key:"DisplaySettings.ExperimentalTimezone",label:Object(C.b)("admin.experimental.experimentalTimezone.title"),label_default:"Timezone:",help_text:Object(C.b)("admin.experimental.experimentalTimezone.desc"),help_text_default:"Select the timezone used for timestamps in the user interface and email notifications. When true, the Timezone setting is visible in the Account Settings and a time zone is automatically assigned in the next active session. When false, the Timezone setting is hidden in the Account Settings.",help_text_markdown:!1},{type:O.j.SettingsTypes.TYPE_BOOL,key:"TeamSettings.ExperimentalHideTownSquareinLHS",label:Object(C.b)("admin.experimental.experimentalHideTownSquareinLHS.title"),label_default:"Town Square is Hidden in Left-Hand Sidebar:",help_text:Object(C.b)("admin.experimental.experimentalHideTownSquareinLHS.desc"),help_text_default:"When true, hides Town Square in the left-hand sidebar if there are no unread messages in the channel. When false, Town Square is always visible in the left-hand sidebar even if all messages have been read.",help_text_markdown:!0,isHidden:$l.isnt($l.licensed)},{type:O.j.SettingsTypes.TYPE_BOOL,key:"TeamSettings.ExperimentalTownSquareIsReadOnly",label:Object(C.b)("admin.experimental.experimentalTownSquareIsReadOnly.title"),label_default:"Town Square is Read-Only:",help_text:Object(C.b)("admin.experimental.experimentalTownSquareIsReadOnly.desc"),help_text_default:"When true, only System Admins can post in Town Square. Other members are not able to post, reply, upload files, emoji react or pin messages to Town Square, nor are they able to change the channel name, header or purpose. When false, anyone can post in Town Square.",help_text_markdown:!0,isHidden:$l.isnt($l.licensed)},{type:O.j.SettingsTypes.TYPE_BOOL,key:"EmailSettings.UseChannelInEmailNotifications",label:Object(C.b)("admin.experimental.useChannelInEmailNotifications.title"),label_default:"Use Channel Name in Email Notifications:",help_text:Object(C.b)("admin.experimental.useChannelInEmailNotifications.desc"),help_text_default:"When true, channel and team name appears in email notification subject lines. Useful for servers using only one team. When false, only team name appears in email notification subject line.",help_text_markdown:!1},{type:O.j.SettingsTypes.TYPE_NUMBER,key:"TeamSettings.UserStatusAwayTimeout",label:Object(C.b)("admin.experimental.userStatusAwayTimeout.title"),label_default:"User Status Away Timeout:",help_text:Object(C.b)("admin.experimental.userStatusAwayTimeout.desc"),help_text_default:'This setting defines the number of seconds after which the user’s status indicator changes to "Away", when they are away from Mattermost.',help_text_markdown:!1,placeholder:Object(C.b)("admin.experimental.userStatusAwayTimeout.example"),placeholder_default:'E.g.: "300"'}]}}}};Object(C.b)("admin.field_names.allowBannerDismissal"),Object(C.b)("admin.field_names.bannerColor"),Object(C.b)("admin.field_names.bannerText"),Object(C.b)("admin.field_names.bannerTextColor"),Object(C.b)("admin.field_names.enableBanner"),Object(C.b)("admin.field_names.enableCommands"),Object(C.b)("admin.field_names.enableConfirmNotificationsToChannel"),Object(C.b)("admin.field_names.enableIncomingWebhooks"),Object(C.b)("admin.field_names.enableOAuthServiceProvider"),Object(C.b)("admin.field_names.enableOutgoingWebhooks"),Object(C.b)("admin.field_names.enablePostIconOverride"),Object(C.b)("admin.field_names.enablePostUsernameOverride"),Object(C.b)("admin.field_names.enableUserAccessTokens"),Object(C.b)("admin.field_names.enableUserCreation"),Object(C.b)("admin.field_names.maxChannelsPerTeam"),Object(C.b)("admin.field_names.maxNotificationsPerChannel"),Object(C.b)("admin.field_names.maxUsersPerTeam"),Object(C.b)("admin.field_names.postEditTimeLimit"),Object(C.b)("admin.field_names.restrictCreationToDomains"),Object(C.b)("admin.field_names.restrictDirectMessage"),Object(C.b)("admin.field_names.teammateNameDisplay");var to=eo;const ao=Object(E.createSelector)(()=>to,e=>e.plugins.adminConsoleReducers,(e,t)=>{let a=Object(y.cloneDeep)(to);for(const e of Object.values(t))a=e(a);return a}),so=(e,t)=>e.plugins.adminConsoleCustomComponents[t]||{};var io=a(116),no=(a(1427),a(1181)),ro=a(1347),lo=a(1486);class oo extends S.a.Component{render(){const e=S.a.createElement(T.a,{id:"discard_changes_modal.title",defaultMessage:"Discard Changes?"}),t=S.a.createElement(T.a,{id:"discard_changes_modal.message",defaultMessage:"You have unsaved changes, are you sure you want to discard them?"}),a=S.a.createElement(T.a,{id:"discard_changes_modal.leave",defaultMessage:"Yes, Discard"}),{show:s,onConfirm:i,onCancel:n}=this.props;return S.a.createElement(be.a,{show:s,title:e,message:t,modalClass:"discard-changes-modal",confirmButtonClass:"btn btn-primary",confirmButtonText:a,onConfirm:i,onCancel:n})}}!function(e,t,a){t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a}(oo,"propTypes",{show:M.a.bool.isRequired,onConfirm:M.a.func.isRequired,onCancel:M.a.func.isRequired});var co=a(1302),mo=a(1202),uo=a.n(mo),po=a(1920),ho=a.n(po),go=a(1921),bo=a.n(go),fo=a(82);function _o(e){const t=Eo(Dt(e));if(e.name&&t.push(e.name),e.id&&t.push(e.id),e.settings_schema&&(e.settings_schema.footer&&t.push(Object(fo.c)(e.settings_schema.footer)),e.settings_schema.header&&t.push(Object(fo.c)(e.settings_schema.header)),e.settings_schema.settings)){const a=Object.values(e.settings_schema.settings);for(const e of a){const a=Eo(e);t.push(...a)}}return t}function Eo(e){const t=[];return e.label&&t.push(e.label),e.display_name&&t.push(e.display_name),e.help_text&&t.push(Object(fo.c)(e.help_text)),e.key&&t.push(e.key),t}function yo(e,t){const a=[];if(e.title&&a.push(t.formatMessage({id:e.title,defaultMessage:e.title_default})),e.schema&&e.schema.name&&a.push(e.schema.name),e.searchableStrings)for(const s of e.searchableStrings)"string"==typeof s?a.push(t.formatMessage({id:s,defaultMessage:s})):a.push(t.formatMessage({id:s[0],defaultMessage:""},s[1]));if(e.schema&&e.schema.settings)for(const s of Object.values(e.schema.settings))s.label&&a.push(t.formatMessage({id:s.label,defaultMessage:s.label_default},s.label_values)),s.help_text&&"string"==typeof s.help_text&&a.push(t.formatMessage({id:s.help_text,defaultMessage:s.help_text_default},s.help_text_values)),s.remove_help_text&&a.push(t.formatMessage({id:s.remove_help_text,defaultMessage:s.remove_help_text_default})),s.remove_button_text&&a.push(t.formatMessage({id:s.remove_button_text,defaultMessage:s.remove_button_text_default}));return a}function vo(e,t,a){const s=new bo.a;return So(function(e,t){const a={};for(const s of Object.values(e.about))a[s.url]=yo(s,t);for(const s of Object.values(e.reporting))a[s.url]=yo(s,t);for(const s of Object.values(e.user_management))a[s.url]=yo(s,t);for(const s of Object.values(e.environment))a[s.url]=yo(s,t);for(const s of Object.values(e.site))a[s.url]=yo(s,t);for(const s of Object.values(e.authentication))a[s.url]=yo(s,t);for(const s of Object.values(e.plugins))a[s.url]=yo(s,t);for(const s of Object.values(e.integrations))a[s.url]=yo(s,t);for(const s of Object.values(e.compliance))a[s.url]=yo(s,t);for(const s of Object.values(e.experimental))a[s.url]=yo(s,t);return a}(e,a),s),So(function(e={}){const t={},a=e||{};for(const e of Object.keys(a)){t["plugin_".concat(e)]=_o(a[e])}return t}(t),s),s}function So(e,t){for(const a of Object.keys(e)){let s="";for(const t of e[a])s+=" "+t;t.add(a,s)}}class To extends S.a.Component{static get propTypes(){return{name:M.a.string,title:M.a.node.isRequired,icon:M.a.string.isRequired,sectionClass:M.a.string,parentLink:M.a.string,children:M.a.node,action:M.a.node}}static get defaultProps(){return{parentLink:""}}render(){let e=this.props.parentLink,t=S.a.createElement("div",{className:"category-title category-title--active"},S.a.createElement("i",{className:"category-icon fa "+this.props.icon}),S.a.createElement("span",{className:"category-title__text"},this.props.title),this.props.action);this.props.name&&(e+="/"+name,t=S.a.createElement(me.b,{to:e,className:"category-title",activeClassName:"category-title category-title--active"},t));let a=null;return this.props.children&&(a=S.a.createElement(m.b,{path:e,render:()=>S.a.createElement("ul",{className:"sections "+this.props.sectionClass},S.a.Children.map(this.props.children,t=>null===t?null:S.a.cloneElement(t,{parentLink:e})))})),S.a.createElement("li",{className:"sidebar-category"},t,a)}}var Oo=a(1260),wo=a(1489),Co=a(1215);const xo=({to:e,text:t})=>S.a.createElement(Pa,{to:e},t);xo.propTypes={to:M.a.string.isRequired,text:M.a.oneOfType([M.a.string,M.a.node]).isRequired};const Mo=Object(Co.a)(xo);Mo.displayName="MenuItemBlockableLinkImpl";var jo=Mo;function Po(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class Ao extends S.a.Component{constructor(...e){super(...e),Po(this,"handleLogout",e=>{this.props.navigationBlocked?(e.preventDefault(),this.props.actions.deferNavigation(Rs.e)):Rs.e()})}render(){const{locale:e,teams:t,siteName:a}=this.props,{formatMessage:s}=this.props.intl,i=[];let n;if(t&&t.length>0){const a=Object(Fs.a)(t,e);for(const e of a)i.push(S.a.createElement(jo,{key:"team_"+e.name,to:"/"+e.name,text:s({id:"navbar_dropdown.switchTo",defaultMessage:"Switch to "})+" "+e.display_name}))}else n=S.a.createElement(jo,{to:"/select_team",icon:S.a.createElement(T.a,{id:"select_team.icon",defaultMessage:"Select Team Icon"},e=>S.a.createElement("i",{className:"fa fa-exchange",title:e})),text:s({id:"admin.nav.switch",defaultMessage:"Team Selection"})});return S.a.createElement(Hs.a,{ariaLabel:s({id:"admin.nav.menuAriaLabel",defaultMessage:"Admin Console Menu"})},S.a.createElement(Hs.a.Group,null,i,n),S.a.createElement(Hs.a.Group,null,S.a.createElement(Hs.a.ItemExternalLink,{url:"https://about.mattermost.com/administrators-guide/",text:s({id:"admin.nav.administratorsGuide",defaultMessage:"Administrator Guide"})}),S.a.createElement(Hs.a.ItemExternalLink,{url:"https://about.mattermost.com/troubleshooting-forum/",text:s({id:"admin.nav.troubleshootingForum",defaultMessage:"Troubleshooting Forum"})}),S.a.createElement(Hs.a.ItemExternalLink,{url:"https://about.mattermost.com/commercial-support/",text:s({id:"admin.nav.commercialSupport",defaultMessage:"Commercial Support"})}),S.a.createElement(Hs.a.ItemToggleModalRedux,{modalId:O.u.ABOUT,dialogType:wo.a,text:s({id:"navbar_dropdown.about",defaultMessage:"About {appTitle}"},{appTitle:a||"Mattermost"})})),S.a.createElement(Hs.a.Group,null,S.a.createElement(Hs.a.ItemAction,{onClick:this.handleLogout,text:s({id:"navbar_dropdown.logout",defaultMessage:"Log Out"})})))}}Po(Ao,"propTypes",{intl:bt.a.isRequired,locale:M.a.string.isRequired,siteName:M.a.string,navigationBlocked:M.a.bool,teams:M.a.arrayOf(M.a.object).isRequired,actions:M.a.shape({deferNavigation:M.a.func}).isRequired});var ko=Object(gt.c)(Ao);var Ro=Object(r.connect)((function(e){return{locale:Object(Q.a)(e),teams:Object(g.getMyTeams)(e),siteName:Object(u.getConfig)(e).SiteName,navigationBlocked:Object(_.a)(e)}}),(function(e){return{actions:Object(l.bindActionCreators)({deferNavigation:f.g},e)}}))(ko);class No extends S.a.Component{render(){const e=this.props.currentUser;let t=null;return e?(e.last_picture_update&&(t=S.a.createElement(Ls.a,{username:e.username,url:Ft.Client4.getProfilePictureUrl(e.id,e.last_picture_update),size:"lg"})),S.a.createElement(Gs.a,{className:"AdminSidebarHeader"},S.a.createElement("div",null,t,S.a.createElement("div",{className:"header__info"},S.a.createElement("div",{className:"team__name"},S.a.createElement(T.a,{id:"admin.sidebarHeader.systemConsole",defaultMessage:"System Console"})),S.a.createElement("div",{className:"user__name overflow--ellipsis whitespace--nowrap"},"@"+e.username)),S.a.createElement("button",{className:"style--none"},S.a.createElement(Oo.a,{className:"menu-icon"}))),S.a.createElement(Ro,null))):null}}!function(e,t,a){t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a}(No,"propTypes",{currentUser:M.a.object});var Do=Object(r.connect)((function(e){return{currentUser:Object(h.getCurrentUser)(e)}}))(No);class Lo extends S.a.Component{static get propTypes(){return{name:M.a.string.isRequired,title:M.a.node.isRequired,type:M.a.string,parentLink:M.a.string,subsection:M.a.bool,children:M.a.node,action:M.a.node}}static get defaultProps(){return{parentLink:"",subsection:!1,children:[]}}getLink(){return this.props.parentLink+"/"+this.props.name}render(){const e=this.getLink();let t=null;this.props.children&&(t=S.a.createElement("ul",{className:"nav nav__sub-menu subsections"},S.a.Children.map(this.props.children,t=>null===t?null:S.a.cloneElement(t,{parentLink:e,subsection:!0}))));let a="sidebar-section";this.props.subsection&&(a+=" sidebar-subsection");let s=S.a.createElement(Pa,{id:I.h(this.props.name),className:"".concat(a,"-title"),activeClassName:"".concat(a,"-title ").concat(a,"-title--active"),to:e},S.a.createElement("span",{className:"".concat(a,"-title__text")},this.props.title),this.props.action);return"text"===this.props.type&&(s=S.a.createElement("div",{className:"".concat(a,"-title")},S.a.createElement("span",{className:"".concat(a,"-title__text")},this.props.title),this.props.action)),S.a.createElement("li",{className:a},s,t)}}var Io=a(1922),Uo=a.n(Io),qo=a(1219),Bo=a.n(qo);function Fo(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class Go extends S.a.Component{constructor(e){super(e),Fo(this,"markInstance",void 0),Fo(this,"ref",void 0),Fo(this,"redrawHighlight",Bo()(()=>{this.markInstance&&this.markInstance.unmark(),this.props.filter&&this.ref.current&&(this.markInstance=new Uo.a(this.ref.current),this.markInstance.mark(this.props.filter,{accuracy:"complementary"}))},100,{leading:!0,trailing:!0})),this.ref=S.a.createRef()}render(){return setTimeout(this.redrawHighlight,0),S.a.createElement("div",{ref:this.ref},this.props.children)}}function Ho(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}Fo(Go,"propTypes",{filter:M.a.string.isRequired,children:M.a.node.isRequired});const Yo=e=>S.a.createElement("div",Object.assign({},e,{className:"scrollbar--view"})),Wo=e=>S.a.createElement("div",Object.assign({},e,{className:"scrollbar--horizontal"})),zo=e=>S.a.createElement("div",Object.assign({},e,{className:"scrollbar--vertical"}));class Vo extends S.a.Component{constructor(e){super(e),Ho(this,"onFilterChange",e=>{const t=e.target.value;if(""===t)return this.setState({sections:null,filter:t}),void this.props.onFilterChange(t);null===this.idx&&(this.idx=vo(this.props.adminDefinition,this.props.plugins,this.props.intl));let a="";for(const e of t.split(" "))e.trim(),""!==e&&(a+=e+" ",a+=e+"* ");const s=this.idx.search(a);if(!(this.setState({sections:s,filter:t}),this.props.onFilterChange(t),this.props.navigationBlocked||-1!==s.indexOf(Ca.a.location.pathname.replace("/admin_console/","")))){const e=this.visibleSections();for(const t of s)if(e.has(t)){Ca.a.replace("/admin_console/"+t);break}}}),Ho(this,"updateTitle",()=>{let e="";this.props.siteName&&(e=" - "+this.props.siteName),document.title=I.gb("sidebar_right_menu.console","System Console")+e}),Ho(this,"visibleSections",()=>{const e=e=>!!e.schema&&(!!e.title&&(!e.isHidden||!e.isHidden(this.props.config,{},this.props.license,this.props.buildEnterpriseReady))),t=new Set;for(const a of Object.values(this.props.adminDefinition))for(const s of Object.values(a))e(s)&&t.add(s.url);return t}),Ho(this,"renderRootMenu",e=>{const t=[];return Object.values(e).forEach((e,a)=>{const s=[];Object.values(e).forEach((e,t)=>{if(e.title&&(!e.isHidden||!e.isHidden(this.props.config,{},this.props.license,this.props.buildEnterpriseReady))){if(null!==this.state.sections){let t=!1;for(const a of this.state.sections)a===e.url&&(t=!0);if(!t)return}s.push(S.a.createElement(Lo,{key:t,name:e.url,title:S.a.createElement(T.a,{id:e.title,defaultMessage:e.title_default})}))}});let i=[];return"plugins"===e.id&&(i=this.renderPluginsMenu()),0===s.length&&0===i.length?null:((s.length||i.length)&&t.push(S.a.createElement(To,{key:a,parentLink:"/admin_console",icon:e.icon,sectionClass:"",title:S.a.createElement(T.a,{id:e.sectionTitle,defaultMessage:e.sectionTitleDefault})},s,i)),null)}),t}),Ho(this,"renderPluginsMenu",()=>{const e=[];return this.props.config.PluginSettings.Enable&&Object.values(this.props.plugins).sort((e,t)=>{const a=e.name.localeCompare(t.name);return 0!==a?a:e.id.localeCompare(t.id)}).forEach(t=>{t.settings_schema&&(t.settings_schema.header||t.settings_schema.footer||t.settings_schema.settings)&&(t.settings_schema.settings&&!t.settings_schema.header&&!t.settings_schema.footer&&t.settings_schema.settings.hasOwnProperty("length")&&0===t.settings_schema.settings.length||null!==this.state.sections&&-1===this.state.sections.indexOf("plugin_".concat(t.id))||e.push(S.a.createElement(Lo,{key:"customplugin"+t.id,name:"plugins/plugin_"+t.id,title:t.name})))}),e}),Ho(this,"handleClearFilter",()=>{this.setState({sections:null,filter:""}),this.props.onFilterChange("")}),this.state={sections:null,filter:""},this.idx=null,this.searchRef=S.a.createRef()}componentDidMount(){this.props.config.PluginSettings.Enable&&this.props.actions.getPlugins(),this.searchRef.current&&this.searchRef.current.focus(),this.updateTitle()}componentDidUpdate(e){null===this.idx||ho()(this.props.plugins,e.plugins)&&ho()(this.props.adminDefinition,e.adminDefinition)||(this.idx=vo(this.props.adminDefinition,this.props.plugins,this.props.intl))}render(){const e=S.a.createElement(ae.a,{id:"admin-sidebar-fitler-clear"},S.a.createElement(T.a,{id:"admin.sidebar.filter-clear",defaultMessage:"Clear search"}));return S.a.createElement("div",{className:"admin-sidebar"},S.a.createElement(Do,null),S.a.createElement(uo.a,{ref:"scrollbar",autoHide:!0,autoHideTimeout:500,autoHideDuration:500,renderThumbHorizontal:Wo,renderThumbVertical:zo,renderView:Yo},S.a.createElement("div",{className:"nav-pills__container"},S.a.createElement(Go,{filter:this.state.filter},S.a.createElement("ul",{className:"nav nav-pills nav-stacked"},S.a.createElement("li",{className:"filter-container"},S.a.createElement(_n.a,{className:"search__icon","aria-hidden":"true"}),S.a.createElement("input",{className:"filter "+(this.state.filter?"active":""),type:"text",onChange:this.onFilterChange,value:this.state.filter,placeholder:I.gb("admin.sidebar.filter","Find settings"),ref:this.searchRef,id:"adminSidebarFilter"}),this.state.filter&&S.a.createElement("div",{className:"sidebar__search-clear visible",onClick:this.handleClearFilter},S.a.createElement(co.a,{delayShow:O.Q.OVERLAY_TIME_DELAY,placement:"bottom",overlay:e},S.a.createElement("span",{className:"sidebar__search-clear-x","aria-hidden":"true"},"×")))),this.renderRootMenu(this.props.adminDefinition))))))}}Ho(Vo,"propTypes",{license:M.a.object.isRequired,config:M.a.object,plugins:M.a.object,adminDefinition:M.a.object,buildEnterpriseReady:M.a.bool,siteName:M.a.string,onFilterChange:M.a.func.isRequired,navigationBlocked:M.a.bool.isRequired,intl:bt.a.isRequired,actions:M.a.shape({getPlugins:M.a.func.isRequired}).isRequired}),Ho(Vo,"defaultProps",{plugins:{}});var Xo=Object(gt.c)(Vo);var Jo=Object(r.connect)((function(e){const t=Object(u.getLicense)(e),a=Object(u.getConfig)(e),s="true"===a.BuildEnterpriseReady,i=a.SiteName,n=ao(e);return{license:t,config:e.entities.admin.config,plugins:e.entities.admin.plugins,navigationBlocked:Object(_.a)(e),buildEnterpriseReady:s,siteName:i,adminDefinition:n}}),(function(e){return{actions:Object(l.bindActionCreators)({getPlugins:o.getPlugins},e)}}),null,{pure:!1})(Xo);function Ko(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}class Qo extends S.a.Component{constructor(e){super(e),Ko(this,"onFilterChange",e=>{this.setState({filter:e})}),Ko(this,"renderRoutes",e=>{const t=Object.values(this.props.adminDefinition).reduce((e,t)=>{const a=Object.values(t).filter(e=>(!e.isHidden||!e.isHidden(this.props.config,{},this.props.license,this.props.buildEnterpriseReady))&&!!e.schema);return e.concat(a)},[]),a=t.map(t=>S.a.createElement(m.b,{key:t.url,path:"".concat(this.props.match.url,"/").concat(t.url),render:a=>S.a.createElement(Rt,Object.assign({},e,a,{schema:t.schema}))})),s=t[0].url;return S.a.createElement(m.d,null,a,S.a.createElement(m.a,{to:"".concat(this.props.match.url,"/").concat(s)}))}),this.state={filter:""}}componentDidMount(){this.props.actions.getConfig(),this.props.actions.getEnvironmentConfig(),this.props.actions.loadRolesIfNeeded(["channel_user","team_user","system_user","channel_admin","team_admin","system_admin"])}mainRolesLoaded(e){return e&&e.channel_admin&&e.channel_user&&e.team_admin&&e.team_user&&e.system_admin&&e.system_user}render(){const{license:e,config:t,environmentConfig:a,showNavigationPrompt:s,roles:i}=this.props,{setNavigationBlocked:n,cancelNavigation:r,confirmNavigation:l,editRole:o,updateConfig:c}=this.props.actions;if(!this.props.isCurrentUserSystemAdmin)return S.a.createElement(m.a,{to:this.props.unauthorizedRoute});if(!this.mainRolesLoaded(this.props.roles))return null;if(0===Object.keys(t).length)return S.a.createElement("div",null);if(t&&0===Object.keys(t).length&&"Object"===t.constructor)return S.a.createElement("div",{className:"admin-console__wrapper"},S.a.createElement(no.a,null),S.a.createElement("div",{className:"admin-console"}));const d=S.a.createElement(oo,{show:s,onConfirm:l,onCancel:r}),u={license:e,config:t,environmentConfig:a,setNavigationBlocked:n,roles:i,editRole:o,updateConfig:c};return S.a.createElement("div",{className:"admin-console__wrapper",id:"adminConsoleWrapper"},S.a.createElement(no.a,null),S.a.createElement(ro.a,null),S.a.createElement(Jo,{onFilterChange:this.onFilterChange}),S.a.createElement("div",{className:"admin-console"},S.a.createElement(Go,{filter:this.state.filter},this.renderRoutes(u))),d,S.a.createElement(lo.a,null))}}Ko(Qo,"propTypes",{config:M.a.object.isRequired,adminDefinition:M.a.object.isRequired,environmentConfig:M.a.object,license:M.a.object.isRequired,unauthorizedRoute:M.a.string.isRequired,buildEnterpriseReady:M.a.bool,roles:M.a.object.isRequired,match:M.a.shape({url:M.a.string.isRequired}).isRequired,showNavigationPrompt:M.a.bool.isRequired,isCurrentUserSystemAdmin:M.a.bool.isRequired,actions:M.a.shape({getConfig:M.a.func.isRequired,getEnvironmentConfig:M.a.func.isRequired,setNavigationBlocked:M.a.func.isRequired,confirmNavigation:M.a.func.isRequired,cancelNavigation:M.a.func.isRequired,loadRolesIfNeeded:M.a.func.isRequired,editRole:M.a.func.isRequired,updateConfig:M.a.func}).isRequired});t.default=Object(m.g)(Object(r.connect)((function(e){const t="true"===Object(u.getConfig)(e).BuildEnterpriseReady,a=ao(e),s=io.a.getPreviousTeamId(Object(h.getCurrentUserId)(e)),i=Object(g.getTeam)(e,s),n=i?"/".concat(i.name,"/channels/").concat(b.General.DEFAULT_CHANNEL):"/";return{config:d.getConfig(e),environmentConfig:d.getEnvironmentConfig(e),license:Object(u.getLicense)(e),buildEnterpriseReady:t,unauthorizedRoute:n,navigationBlocked:Object(_.a)(e),showNavigationPrompt:Object(_.c)(e),isCurrentUserSystemAdmin:Object(h.isCurrentUserSystemAdmin)(e),roles:Object(p.getRoles)(e),adminDefinition:a}}),(function(e){return{actions:Object(l.bindActionCreators)({getConfig:o.getConfig,getEnvironmentConfig:o.getEnvironmentConfig,updateConfig:o.updateConfig,setNavigationBlocked:f.F,deferNavigation:f.g,cancelNavigation:f.e,confirmNavigation:f.f,loadRolesIfNeeded:c.loadRolesIfNeeded,editRole:c.editRole},e)}}))(Qo))}}]); //# sourceMappingURL=7.671628b9f49c9454bd0f.js.map