summaryrefslogtreecommitdiffstats
path: root/webapp/components/admin_console/license_settings.jsx
diff options
context:
space:
mode:
authorChristopher Speller <crspeller@gmail.com>2016-03-14 08:50:46 -0400
committerChristopher Speller <crspeller@gmail.com>2016-03-16 18:02:55 -0400
commit12896bd23eeba79884245c1c29fdc568cf21a7fa (patch)
tree4e7f83d3e2564b9b89d669e9f7905ff11768b11a /webapp/components/admin_console/license_settings.jsx
parent29fe6a3d13c9c7aa490fffebbe5d1b5fdf1e3090 (diff)
downloadchat-12896bd23eeba79884245c1c29fdc568cf21a7fa.tar.gz
chat-12896bd23eeba79884245c1c29fdc568cf21a7fa.tar.bz2
chat-12896bd23eeba79884245c1c29fdc568cf21a7fa.zip
Converting to Webpack. Stage 1.
Diffstat (limited to 'webapp/components/admin_console/license_settings.jsx')
-rw-r--r--webapp/components/admin_console/license_settings.jsx295
1 files changed, 295 insertions, 0 deletions
diff --git a/webapp/components/admin_console/license_settings.jsx b/webapp/components/admin_console/license_settings.jsx
new file mode 100644
index 000000000..5aa0dba7e
--- /dev/null
+++ b/webapp/components/admin_console/license_settings.jsx
@@ -0,0 +1,295 @@
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+import $ from 'jquery';
+import ReactDOM from 'react-dom';
+import * as Utils from 'utils/utils.jsx';
+import * as Client from 'utils/client.jsx';
+
+import {injectIntl, intlShape, defineMessages, FormattedMessage, FormattedHTMLMessage} from 'react-intl';
+
+const holders = defineMessages({
+ removing: {
+ id: 'admin.license.removing',
+ defaultMessage: 'Removing License...'
+ },
+ uploading: {
+ id: 'admin.license.uploading',
+ defaultMessage: 'Uploading License...'
+ }
+});
+
+import React from 'react';
+
+class LicenseSettings extends React.Component {
+ constructor(props) {
+ super(props);
+
+ this.handleChange = this.handleChange.bind(this);
+ this.handleSubmit = this.handleSubmit.bind(this);
+ this.handleRemove = this.handleRemove.bind(this);
+
+ this.state = {
+ fileSelected: false,
+ fileName: null,
+ serverError: null
+ };
+ }
+
+ handleChange() {
+ const element = $(ReactDOM.findDOMNode(this.refs.fileInput));
+ if (element.prop('files').length > 0) {
+ this.setState({fileSelected: true, fileName: element.prop('files')[0].name});
+ }
+ }
+
+ handleSubmit(e) {
+ e.preventDefault();
+
+ const element = $(ReactDOM.findDOMNode(this.refs.fileInput));
+ if (element.prop('files').length === 0) {
+ return;
+ }
+ const file = element.prop('files')[0];
+
+ $('#upload-button').button('loading');
+
+ const formData = new FormData();
+ formData.append('license', file, file.name);
+
+ Client.uploadLicenseFile(formData,
+ () => {
+ Utils.clearFileInput(element[0]);
+ $('#upload-button').button('reset');
+ this.setState({fileSelected: false, fileName: null, serverError: null});
+ window.location.reload(true);
+ },
+ (error) => {
+ Utils.clearFileInput(element[0]);
+ $('#upload-button').button('reset');
+ this.setState({fileSelected: false, fileName: null, serverError: error.message});
+ }
+ );
+ }
+
+ handleRemove(e) {
+ e.preventDefault();
+
+ $('#remove-button').button('loading');
+
+ Client.removeLicenseFile(
+ () => {
+ $('#remove-button').button('reset');
+ this.setState({fileSelected: false, fileName: null, serverError: null});
+ window.location.reload(true);
+ },
+ (error) => {
+ $('#remove-button').button('reset');
+ this.setState({fileSelected: false, fileName: null, serverError: error.message});
+ }
+ );
+ }
+
+ render() {
+ var serverError = '';
+ if (this.state.serverError) {
+ serverError = <div className='form-group has-error'><label className='control-label'>{this.state.serverError}</label></div>;
+ }
+
+ var btnClass = 'btn';
+ if (this.state.fileSelected) {
+ btnClass = 'btn btn-primary';
+ }
+
+ let edition;
+ let licenseType;
+ let licenseKey;
+
+ if (global.window.mm_license.IsLicensed === 'true') {
+ edition = (
+ <FormattedMessage
+ id='admin.license.enterpriseEdition'
+ defaultMessage='Mattermost Enterprise Edition. Designed for enterprise-scale communication.'
+ />
+ );
+ licenseType = (
+ <FormattedHTMLMessage
+ id='admin.license.enterpriseType'
+ values={{
+ terms: global.window.mm_config.TermsOfServiceLink,
+ name: global.window.mm_license.Name,
+ company: global.window.mm_license.Company,
+ users: global.window.mm_license.Users,
+ issued: Utils.displayDate(parseInt(global.window.mm_license.IssuedAt, 10)) + ' ' + Utils.displayTime(parseInt(global.window.mm_license.IssuedAt, 10), true),
+ start: Utils.displayDate(parseInt(global.window.mm_license.StartsAt, 10)),
+ expires: Utils.displayDate(parseInt(global.window.mm_license.ExpiresAt, 10)),
+ ldap: global.window.mm_license.LDAP
+ }}
+ defaultMessage='<div><p>This compiled release of Mattermost platform is provided under a <a href="http://mattermost.com" target="_blank">commercial license</a> from Mattermost, Inc. based on your subscription level and is subject to the <a href="{terms}" target="_blank">Terms of Service.</a></p>
+ <p>Your subscription details are as follows:</p>
+ Name: {name}<br />
+ Company or organization name: {company}<br/>
+ Number of users: {users}<br/>
+ License issued: {issued}<br/>
+ Start date of license: {start}<br/>
+ Expiry date of license: {expires}<br/>
+ LDAP: {ldap}<br/></div>'
+ />
+ );
+
+ licenseKey = (
+ <div className='col-sm-8'>
+ <button
+ disabled={this.props.config.LdapSettings.Enable}
+ className='btn btn-danger'
+ onClick={this.handleRemove}
+ id='remove-button'
+ data-loading-text={'<span class=\'glyphicon glyphicon-refresh glyphicon-refresh-animate\'></span> ' + this.props.intl.formatMessage(holders.removing)}
+ >
+ <FormattedMessage
+ id='admin.license.keyRemove'
+ defaultMessage='Remove Enterprise License and Downgrade Server'
+ />
+ </button>
+ <br/>
+ <br/>
+ <p className='help-text'>
+ <FormattedHTMLMessage
+ id='admin.licence.keyMigration'
+ defaultMessage='If you’re migrating servers you may need to remove your license key from this server in order to install it on a new server. To start, <a href="http://mattermost.com" target="_blank">disable all Enterprise Edition features on this server</a>. This will enable the ability to remove the license key and downgrade this server from Enterprise Edition to Team Edition.'
+ />
+ </p>
+ </div>
+ );
+ } else {
+ edition = (
+ <FormattedMessage
+ id='admin.license.teamEdition'
+ defaultMessage='Mattermost Team Edition. Designed for teams from 5 to 50 users.'
+ />
+ );
+
+ licenseType = (
+ <FormattedHTMLMessage
+ id='admin.license.teamType'
+ defaultMessage='<span><p>This compiled release of Mattermost platform is offered under an MIT license.</p>
+ <p>See MIT-COMPILED-LICENSE.txt in your root install directory for details. See NOTICES.txt for information about open source software used in this system.</p></span>'
+ />
+ );
+
+ let fileName;
+ if (this.state.fileName) {
+ fileName = this.state.fileName;
+ } else {
+ fileName = (
+ <FormattedMessage
+ id='admin.license.noFile'
+ defaultMessage='No file uploaded'
+ />
+ );
+ }
+
+ licenseKey = (
+ <div className='col-sm-8'>
+ <div className='file__upload'>
+ <button className='btn btn-default'>
+ <FormattedMessage
+ id='admin.license.choose'
+ defaultMessage='Choose File'
+ />
+ </button>
+ <input
+ ref='fileInput'
+ type='file'
+ accept='.mattermost-license'
+ onChange={this.handleChange}
+ />
+ </div>
+ <button
+ className={btnClass}
+ disabled={!this.state.fileSelected}
+ onClick={this.handleSubmit}
+ id='upload-button'
+ data-loading-text={'<span class=\'glyphicon glyphicon-refresh glyphicon-refresh-animate\'></span> ' + this.props.intl.formatMessage(holders.uploading)}
+ >
+ <FormattedMessage
+ id='admin.license.upload'
+ defaultMessage='Upload'
+ />
+ </button>
+ <div className='help-text no-margin'>
+ {fileName}
+ </div>
+ <br/>
+ {serverError}
+ <p className='help-text no-margin'>
+ <FormattedHTMLMessage
+ id='admin.license.uploadDesc'
+ defaultMessage='Upload a license key for Mattermost Enterprise Edition to upgrade this server. <a href="http://mattermost.com" target="_blank">Visit us online</a> to learn more about the benefits of Enterprise Edition or to purchase a key.'
+ />
+ </p>
+ </div>
+ );
+ }
+
+ return (
+ <div className='wrapper--fixed'>
+ <h3>
+ <FormattedMessage
+ id='admin.license.title'
+ defaultMessage='Edition and License'
+ />
+ </h3>
+ <form
+ className='form-horizontal'
+ role='form'
+ >
+ <div className='form-group'>
+ <label
+ className='control-label col-sm-4'
+ >
+ <FormattedMessage
+ id='admin.license.edition'
+ defaultMessage='Edition: '
+ />
+ </label>
+ <div className='col-sm-8'>
+ {edition}
+ </div>
+ </div>
+ <div className='form-group'>
+ <label
+ className='control-label col-sm-4'
+ >
+ <FormattedMessage
+ id='admin.license.type'
+ defaultMessage='License: '
+ />
+ </label>
+ <div className='col-sm-8'>
+ {licenseType}
+ </div>
+ </div>
+ <div className='form-group'>
+ <label
+ className='control-label col-sm-4'
+ >
+ <FormattedMessage
+ id='admin.license.key'
+ defaultMessage='License Key: '
+ />
+ </label>
+ {licenseKey}
+ </div>
+ </form>
+ </div>
+ );
+ }
+}
+
+LicenseSettings.propTypes = {
+ intl: intlShape.isRequired,
+ config: React.PropTypes.object
+};
+
+export default injectIntl(LicenseSettings);