diff --git a/webapp/components/admin_console/ldap_settings.jsx b/webapp/components/admin_console/ldap_settings.jsx
index 393e80f29d..ccb33a4938 100644
--- a/webapp/components/admin_console/ldap_settings.jsx
+++ b/webapp/components/admin_console/ldap_settings.jsx
@@ -7,6 +7,8 @@ import ConnectionSecurityDropdownSetting from './connection_security_dropdown_se
import SettingsGroup from './settings_group.jsx';
import TextSetting from './text_setting.jsx';
+import SyncNowButton from './sync_now_button.jsx';
+
import * as Utils from 'utils/utils.jsx';
import React from 'react';
@@ -428,6 +430,9 @@ export default class LdapSettings extends AdminSettings {
onChange={this.handleChange}
disabled={!this.state.enable}
/>
+
);
}
diff --git a/webapp/components/admin_console/sync_now_button.jsx b/webapp/components/admin_console/sync_now_button.jsx
new file mode 100644
index 0000000000..7197b7b351
--- /dev/null
+++ b/webapp/components/admin_console/sync_now_button.jsx
@@ -0,0 +1,112 @@
+// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+import React from 'react';
+
+import Client from 'utils/web_client.jsx';
+import * as Utils from 'utils/utils.jsx';
+
+import {FormattedMessage, FormattedHTMLMessage} from 'react-intl';
+
+export default class SyncNowButton extends React.Component {
+ static get propTypes() {
+ return {
+ disabled: React.PropTypes.bool
+ };
+ }
+ constructor(props) {
+ super(props);
+
+ this.handleSyncNow = this.handleSyncNow.bind(this);
+
+ this.state = {
+ buisy: false,
+ fail: null
+ };
+ }
+
+ handleSyncNow(e) {
+ e.preventDefault();
+
+ this.setState({
+ buisy: true,
+ fail: null
+ });
+
+ Client.ldapSyncNow(
+ () => {
+ this.setState({
+ buisy: false
+ });
+ },
+ (err) => {
+ this.setState({
+ buisy: false,
+ fail: err.message + ' - ' + err.detailed_error
+ });
+ }
+ );
+ }
+
+ render() {
+ let failMessage = null;
+ if (this.state.fail) {
+ failMessage = (
+
+
+
+
+ );
+ }
+
+ let helpText = (
+
+ );
+
+ let contents = null;
+ if (this.state.loading) {
+ contents = (
+
+
+ {Utils.localizeMessage('admin.reload.loading', ' Loading...')}
+
+ );
+ } else {
+ contents = (
+
+ );
+ }
+
+ return (
+
+
+
+
+ {failMessage}
+
+
+ {helpText}
+
+
+
+ );
+ }
+}
diff --git a/webapp/i18n/en.json b/webapp/i18n/en.json
index e47f68eb91..945c9c4a98 100644
--- a/webapp/i18n/en.json
+++ b/webapp/i18n/en.json
@@ -360,6 +360,9 @@
"admin.ldap.userFilterTitle": "User Filter:",
"admin.ldap.usernameAttrEx": "Ex \"sAMAccountName\"",
"admin.ldap.usernameAttrTitle": "Username Attribute:",
+ "admin.ldap.sync_button": "LDAP Synchronize Now",
+ "admin.ldap.syncNowHelpText": "Initiates an LDAP synchronization immediately.",
+ "admin.ldap.syncFailure": "Sync Failure: {error}",
"admin.license.choose": "Choose File",
"admin.license.chooseFile": "Choose File",
"admin.license.edition": "Edition: ",