diff options
author | Harrison Healey <harrisonmhealey@gmail.com> | 2016-01-06 16:13:10 -0500 |
---|---|---|
committer | Harrison Healey <harrisonmhealey@gmail.com> | 2016-01-06 16:13:10 -0500 |
commit | 5bcb9f1c50ed9c319d2a21f2ecb4816c51d18b40 (patch) | |
tree | b24590d93e46414e849ef4af7cefe54b8b7061d7 /web | |
parent | 5855b5e4590889944e4a408f7185f84779fc701a (diff) | |
parent | 214c6bc15ed1d0c9f94d0f0545d3f95241893cdc (diff) | |
download | chat-5bcb9f1c50ed9c319d2a21f2ecb4816c51d18b40.tar.gz chat-5bcb9f1c50ed9c319d2a21f2ecb4816c51d18b40.tar.bz2 chat-5bcb9f1c50ed9c319d2a21f2ecb4816c51d18b40.zip |
Merge pull request #1813 from mattermost/PLT-1558
PLT-1558 adding session length to config file
Diffstat (limited to 'web')
-rw-r--r-- | web/react/components/admin_console/service_settings.jsx | 133 | ||||
-rw-r--r-- | web/web.go | 2 |
2 files changed, 133 insertions, 2 deletions
diff --git a/web/react/components/admin_console/service_settings.jsx b/web/react/components/admin_console/service_settings.jsx index e235819fe..f10721ffa 100644 --- a/web/react/components/admin_console/service_settings.jsx +++ b/web/react/components/admin_console/service_settings.jsx @@ -4,6 +4,10 @@ import * as Client from '../../utils/client.jsx'; import * as AsyncClient from '../../utils/async_client.jsx'; +const DefaultSessionLength = 30; +const DefaultMaximumLoginAttempts = 10; +const DefaultSessionCacheInMinutes = 10; + export default class ServiceSettings extends React.Component { constructor(props) { super(props); @@ -45,13 +49,56 @@ export default class ServiceSettings extends React.Component { //config.ServiceSettings.EnableOAuthServiceProvider = ReactDOM.findDOMNode(this.refs.EnableOAuthServiceProvider).checked; - var MaximumLoginAttempts = 10; + var MaximumLoginAttempts = DefaultMaximumLoginAttempts; if (!isNaN(parseInt(ReactDOM.findDOMNode(this.refs.MaximumLoginAttempts).value, 10))) { MaximumLoginAttempts = parseInt(ReactDOM.findDOMNode(this.refs.MaximumLoginAttempts).value, 10); } + if (MaximumLoginAttempts < 1) { + MaximumLoginAttempts = 1; + } config.ServiceSettings.MaximumLoginAttempts = MaximumLoginAttempts; ReactDOM.findDOMNode(this.refs.MaximumLoginAttempts).value = MaximumLoginAttempts; + var SessionLengthWebInDays = DefaultSessionLength; + if (!isNaN(parseInt(ReactDOM.findDOMNode(this.refs.SessionLengthWebInDays).value, 10))) { + SessionLengthWebInDays = parseInt(ReactDOM.findDOMNode(this.refs.SessionLengthWebInDays).value, 10); + } + if (SessionLengthWebInDays < 1) { + SessionLengthWebInDays = 1; + } + config.ServiceSettings.SessionLengthWebInDays = SessionLengthWebInDays; + ReactDOM.findDOMNode(this.refs.SessionLengthWebInDays).value = SessionLengthWebInDays; + + var SessionLengthMobileInDays = DefaultSessionLength; + if (!isNaN(parseInt(ReactDOM.findDOMNode(this.refs.SessionLengthMobileInDays).value, 10))) { + SessionLengthMobileInDays = parseInt(ReactDOM.findDOMNode(this.refs.SessionLengthMobileInDays).value, 10); + } + if (SessionLengthMobileInDays < 1) { + SessionLengthMobileInDays = 1; + } + config.ServiceSettings.SessionLengthMobileInDays = SessionLengthMobileInDays; + ReactDOM.findDOMNode(this.refs.SessionLengthMobileInDays).value = SessionLengthMobileInDays; + + var SessionLengthSSOInDays = DefaultSessionLength; + if (!isNaN(parseInt(ReactDOM.findDOMNode(this.refs.SessionLengthSSOInDays).value, 10))) { + SessionLengthSSOInDays = parseInt(ReactDOM.findDOMNode(this.refs.SessionLengthSSOInDays).value, 10); + } + if (SessionLengthSSOInDays < 1) { + SessionLengthSSOInDays = 1; + } + config.ServiceSettings.SessionLengthSSOInDays = SessionLengthSSOInDays; + ReactDOM.findDOMNode(this.refs.SessionLengthSSOInDays).value = SessionLengthSSOInDays; + + var SessionCacheInMinutes = DefaultSessionCacheInMinutes; + if (!isNaN(parseInt(ReactDOM.findDOMNode(this.refs.SessionCacheInMinutes).value, 10))) { + SessionCacheInMinutes = parseInt(ReactDOM.findDOMNode(this.refs.SessionCacheInMinutes).value, 10); + } + if (SessionCacheInMinutes < -1) { + SessionCacheInMinutes = -1; + } + config.ServiceSettings.SessionCacheInMinutes = SessionCacheInMinutes; + ReactDOM.findDOMNode(this.refs.SessionCacheInMinutes).value = SessionCacheInMinutes; + Client.saveConfig( config, () => { @@ -417,6 +464,90 @@ export default class ServiceSettings extends React.Component { </div> <div className='form-group'> + <label + className='control-label col-sm-4' + htmlFor='SessionLengthWebInDays' + > + {'Session Length for Web in Days:'} + </label> + <div className='col-sm-8'> + <input + type='text' + className='form-control' + id='SessionLengthWebInDays' + ref='SessionLengthWebInDays' + placeholder='Ex "30"' + defaultValue={this.props.config.ServiceSettings.SessionLengthWebInDays} + onChange={this.handleChange} + /> + <p className='help-text'>{'The web session will expire after the number of days specified and will require a user to login again.'}</p> + </div> + </div> + + <div className='form-group'> + <label + className='control-label col-sm-4' + htmlFor='SessionLengthMobileInDays' + > + {'Session Length for Mobile Device in Days:'} + </label> + <div className='col-sm-8'> + <input + type='text' + className='form-control' + id='SessionLengthMobileInDays' + ref='SessionLengthMobileInDays' + placeholder='Ex "30"' + defaultValue={this.props.config.ServiceSettings.SessionLengthMobileInDays} + onChange={this.handleChange} + /> + <p className='help-text'>{'The native mobile session will expire after the number of days specified and will require a user to login again.'}</p> + </div> + </div> + + <div className='form-group'> + <label + className='control-label col-sm-4' + htmlFor='SessionLengthSSOInDays' + > + {'Session Length for SSO in Days:'} + </label> + <div className='col-sm-8'> + <input + type='text' + className='form-control' + id='SessionLengthSSOInDays' + ref='SessionLengthSSOInDays' + placeholder='Ex "30"' + defaultValue={this.props.config.ServiceSettings.SessionLengthSSOInDays} + onChange={this.handleChange} + /> + <p className='help-text'>{'The SSO session will expire after the number of days specified and will require a user to login again.'}</p> + </div> + </div> + + <div className='form-group'> + <label + className='control-label col-sm-4' + htmlFor='SessionCacheInMinutes' + > + {'Session Cache in Minutes:'} + </label> + <div className='col-sm-8'> + <input + type='text' + className='form-control' + id='SessionCacheInMinutes' + ref='SessionCacheInMinutes' + placeholder='Ex "30"' + defaultValue={this.props.config.ServiceSettings.SessionCacheInMinutes} + onChange={this.handleChange} + /> + <p className='help-text'>{'The number of minutes to cache a session in memory.'}</p> + </div> + </div> + + <div className='form-group'> <div className='col-sm-12'> {serverError} <button diff --git a/web/web.go b/web/web.go index 30a70ba2e..bf1208adc 100644 --- a/web/web.go +++ b/web/web.go @@ -998,7 +998,7 @@ func getAccessToken(c *api.Context, w http.ResponseWriter, r *http.Request) { return } - accessRsp := &model.AccessResponse{AccessToken: session.Token, TokenType: model.ACCESS_TOKEN_TYPE, ExpiresIn: model.SESSION_TIME_OAUTH_IN_SECS} + accessRsp := &model.AccessResponse{AccessToken: session.Token, TokenType: model.ACCESS_TOKEN_TYPE, ExpiresIn: int32(*utils.Cfg.ServiceSettings.SessionLengthSSOInDays * 60 * 60 * 24)} w.Header().Set("Content-Type", "application/json") w.Header().Set("Cache-Control", "no-store") |