summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config/config.json1
-rw-r--r--docker/dev/config_docker.json1
-rw-r--r--docker/local/config_docker.json1
-rw-r--r--model/config.go6
-rw-r--r--utils/config.go1
-rw-r--r--web/react/components/admin_console/service_settings.jsx34
-rw-r--r--web/react/stores/error_store.jsx1
-rw-r--r--web/templates/head.html5
8 files changed, 50 insertions, 0 deletions
diff --git a/config/config.json b/config/config.json
index 4477ec63b..beb023e2b 100644
--- a/config/config.json
+++ b/config/config.json
@@ -10,6 +10,7 @@
"EnablePostUsernameOverride": false,
"EnablePostIconOverride": false,
"EnableTesting": false,
+ "EnableDeveloper": true,
"EnableSecurityFixAlert": true
},
"TeamSettings": {
diff --git a/docker/dev/config_docker.json b/docker/dev/config_docker.json
index ab1373a44..2c109c105 100644
--- a/docker/dev/config_docker.json
+++ b/docker/dev/config_docker.json
@@ -10,6 +10,7 @@
"EnablePostUsernameOverride": false,
"EnablePostIconOverride": false,
"EnableTesting": false,
+ "EnableDeveloper": false,
"EnableSecurityFixAlert": true
},
"TeamSettings": {
diff --git a/docker/local/config_docker.json b/docker/local/config_docker.json
index ab1373a44..2c109c105 100644
--- a/docker/local/config_docker.json
+++ b/docker/local/config_docker.json
@@ -10,6 +10,7 @@
"EnablePostUsernameOverride": false,
"EnablePostIconOverride": false,
"EnableTesting": false,
+ "EnableDeveloper": false,
"EnableSecurityFixAlert": true
},
"TeamSettings": {
diff --git a/model/config.go b/model/config.go
index 9030f91ae..06cb9829e 100644
--- a/model/config.go
+++ b/model/config.go
@@ -33,6 +33,7 @@ type ServiceSettings struct {
EnablePostUsernameOverride bool
EnablePostIconOverride bool
EnableTesting bool
+ EnableDeveloper *bool
EnableSecurityFixAlert *bool
}
@@ -191,6 +192,11 @@ func (o *Config) SetDefaults() {
o.EmailSettings.PasswordResetSalt = NewRandomString(32)
}
+ if o.ServiceSettings.EnableDeveloper == nil {
+ o.ServiceSettings.EnableDeveloper = new(bool)
+ *o.ServiceSettings.EnableDeveloper = false
+ }
+
if o.ServiceSettings.EnableSecurityFixAlert == nil {
o.ServiceSettings.EnableSecurityFixAlert = new(bool)
*o.ServiceSettings.EnableSecurityFixAlert = true
diff --git a/utils/config.go b/utils/config.go
index 0789c101d..3f451b88a 100644
--- a/utils/config.go
+++ b/utils/config.go
@@ -195,6 +195,7 @@ func getClientConfig(c *model.Config) map[string]string {
props["EnableOutgoingWebhooks"] = strconv.FormatBool(c.ServiceSettings.EnableOutgoingWebhooks)
props["EnablePostUsernameOverride"] = strconv.FormatBool(c.ServiceSettings.EnablePostUsernameOverride)
props["EnablePostIconOverride"] = strconv.FormatBool(c.ServiceSettings.EnablePostIconOverride)
+ props["EnableDeveloper"] = strconv.FormatBool(*c.ServiceSettings.EnableDeveloper)
props["SendEmailNotifications"] = strconv.FormatBool(c.EmailSettings.SendEmailNotifications)
props["EnableSignUpWithEmail"] = strconv.FormatBool(c.EmailSettings.EnableSignUpWithEmail)
diff --git a/web/react/components/admin_console/service_settings.jsx b/web/react/components/admin_console/service_settings.jsx
index 1f5faf1d4..d7582d682 100644
--- a/web/react/components/admin_console/service_settings.jsx
+++ b/web/react/components/admin_console/service_settings.jsx
@@ -40,6 +40,7 @@ export default class ServiceSettings extends React.Component {
config.ServiceSettings.EnablePostUsernameOverride = ReactDOM.findDOMNode(this.refs.EnablePostUsernameOverride).checked;
config.ServiceSettings.EnablePostIconOverride = ReactDOM.findDOMNode(this.refs.EnablePostIconOverride).checked;
config.ServiceSettings.EnableTesting = ReactDOM.findDOMNode(this.refs.EnableTesting).checked;
+ config.ServiceSettings.EnableDeveloper = ReactDOM.findDOMNode(this.refs.EnableDeveloper).checked;
config.ServiceSettings.EnableSecurityFixAlert = ReactDOM.findDOMNode(this.refs.EnableSecurityFixAlert).checked;
//config.ServiceSettings.EnableOAuthServiceProvider = ReactDOM.findDOMNode(this.refs.EnableOAuthServiceProvider).checked;
@@ -343,6 +344,39 @@ export default class ServiceSettings extends React.Component {
<div className='form-group'>
<label
className='control-label col-sm-4'
+ htmlFor='EnableDeveloper'
+ >
+ {'Enable Developer Mode: '}
+ </label>
+ <div className='col-sm-8'>
+ <label className='radio-inline'>
+ <input
+ type='radio'
+ name='EnableDeveloper'
+ value='true'
+ ref='EnableDeveloper'
+ defaultChecked={this.props.config.ServiceSettings.EnableDeveloper}
+ onChange={this.handleChange}
+ />
+ {'true'}
+ </label>
+ <label className='radio-inline'>
+ <input
+ type='radio'
+ name='EnableDeveloper'
+ value='false'
+ defaultChecked={!this.props.config.ServiceSettings.EnableDeveloper}
+ onChange={this.handleChange}
+ />
+ {'false'}
+ </label>
+ <p className='help-text'>{'(Developer Option) When true, extra information around errors will be displayed in the UI.'}</p>
+ </div>
+ </div>
+
+ <div className='form-group'>
+ <label
+ className='control-label col-sm-4'
htmlFor='EnableSecurityFixAlert'
>
{'Enable Security Alerts: '}
diff --git a/web/react/stores/error_store.jsx b/web/react/stores/error_store.jsx
index 8fb051138..69d6cca7f 100644
--- a/web/react/stores/error_store.jsx
+++ b/web/react/stores/error_store.jsx
@@ -63,3 +63,4 @@ ErrorStore.dispatchToken = AppDispatcher.register((payload) => {
});
export default ErrorStore;
+window.ErrorStore = ErrorStore;
diff --git a/web/templates/head.html b/web/templates/head.html
index be4ed2b25..7ffeeec7b 100644
--- a/web/templates/head.html
+++ b/web/templates/head.html
@@ -85,6 +85,11 @@
type: 'POST',
data: JSON.stringify(l)
});
+
+ if (window.mm_config.EnableDeveloper === 'true') {
+ window.ErrorStore.storeLastError('DEVELOPER MODE: A javascript error has occured. Please use the javascript console to capture and report the error (row: ' + line + ' col: ' + column + ').');
+ window.ErrorStore.emitChange();
+ }
}
</script>