From 9110dd54a15f3d0fcf6f60936e01d816b667b93c Mon Sep 17 00:00:00 2001 From: JoramWilander Date: Mon, 4 Jan 2016 12:44:22 -0500 Subject: Added license validation and settings --- .../components/admin_console/license_settings.jsx | 232 +++++++++++++++++++++ 1 file changed, 232 insertions(+) create mode 100644 web/react/components/admin_console/license_settings.jsx (limited to 'web/react/components/admin_console/license_settings.jsx') diff --git a/web/react/components/admin_console/license_settings.jsx b/web/react/components/admin_console/license_settings.jsx new file mode 100644 index 000000000..d49056601 --- /dev/null +++ b/web/react/components/admin_console/license_settings.jsx @@ -0,0 +1,232 @@ +// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +import * as Utils from '../../utils/utils.jsx'; +import * as Client from '../../utils/client.jsx'; + +export default 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, + serverError: null + }; + } + + handleChange() { + const element = $(ReactDOM.findDOMNode(this.refs.fileInput)); + if (element.prop('files').length > 0) { + this.setState({fileSelected: true}); + } + } + + 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'); + window.location.reload(true); + }, + (serverError) => { + this.setState({serverError}); + } + ); + } + + handleRemove(e) { + e.preventDefault(); + + $('#remove-button').button('loading'); + + Client.removeLicenseFile( + () => { + $('#remove-button').button('reset'); + window.location.reload(true); + }, + (serverError) => { + $('#remove-button').button('reset'); + this.setState({serverError}); + } + ); + } + + render() { + var serverError = ''; + if (this.state.serverError) { + serverError =
; + } + + 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 = 'Mattermost Enterprise Edition. Designed for enterprise-scale communication.'; + licenseType = ( +
+

+ {'This compiled release of Mattermost platform is provided under a '} + + {'commercial license'} + + {' from Mattermost, Inc. based on your subscription level and is subject to the '} + + {'Terms of Service.'} + +

+

{'Your subscription details are as follows:'}

+ {'Name: ' + global.window.mm_license.Name} +
+ {'Company or organization name: ' + global.window.mm_license.Company} +
+ {'Number of users: ' + global.window.mm_license.Users} +
+ {`License issued: ${Utils.displayDate(parseInt(global.window.mm_license.IssuedAt, 10))} ${Utils.displayTime(parseInt(global.window.mm_license.IssuedAt, 10), true)}`} +
+ {'Start date of license: ' + Utils.displayDate(parseInt(global.window.mm_license.StartsAt, 10))} +
+ {'Expiry date of license: ' + Utils.displayDate(parseInt(global.window.mm_license.ExpiresAt, 10))} +
+ {'LDAP: ' + global.window.mm_license.LDAP} +
+
+ ); + + licenseKey = ( +
+ +
+
+

+ {'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, '} + + {'disable all Enterprise Edition features on this server'} + + {'. This will enable the ability to remove the license key and downgrade this server from Enterprise Edition to Team Edition.'} +

+
+ ); + } else { + edition = 'Mattermost Team Edition. Designed for teams from 5 to 50 users.'; + + licenseType = ( + +

{'This compiled release of Mattermost platform is offered under an MIT license.'}

+

{'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.'}

+
+ ); + + licenseKey = ( +
+ + {serverError} + +
+
+

+ {'Upload a license key for Mattermost Enterprise Edition to upgrade this server. '} + + {'Visit us online'} + + {' to learn more about the benefits of Enterprise Edition or to purchase a key.'} +

+
+ ); + } + + return ( +
+

{'Edition and License'}

+
+
+ +
+ {edition} +
+
+
+ +
+ {licenseType} +
+
+
+ + {licenseKey} +
+
+
+ ); + } +} -- cgit v1.2.3-1-g7c22 From 22c522178ce5a4b9e9533d91dd77518a2899f2b0 Mon Sep 17 00:00:00 2001 From: JoramWilander Date: Wed, 13 Jan 2016 12:56:35 -0500 Subject: Fix error message --- web/react/components/admin_console/license_settings.jsx | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'web/react/components/admin_console/license_settings.jsx') diff --git a/web/react/components/admin_console/license_settings.jsx b/web/react/components/admin_console/license_settings.jsx index d49056601..ba953f3bd 100644 --- a/web/react/components/admin_console/license_settings.jsx +++ b/web/react/components/admin_console/license_settings.jsx @@ -43,10 +43,13 @@ export default class LicenseSettings extends React.Component { () => { Utils.clearFileInput(element[0]); $('#upload-button').button('reset'); + this.setState({serverError: null}); window.location.reload(true); }, - (serverError) => { - this.setState({serverError}); + (error) => { + Utils.clearFileInput(element[0]); + $('#upload-button').button('reset'); + this.setState({serverError: error.message}); } ); } @@ -59,11 +62,12 @@ export default class LicenseSettings extends React.Component { Client.removeLicenseFile( () => { $('#remove-button').button('reset'); + this.setState({serverError: null}); window.location.reload(true); }, - (serverError) => { + (error) => { $('#remove-button').button('reset'); - this.setState({serverError}); + this.setState({serverError: error.message}); } ); } @@ -164,7 +168,6 @@ export default class LicenseSettings extends React.Component { accept='.mattermost-license' onChange={this.handleChange} /> - {serverError}