summaryrefslogtreecommitdiffstats
path: root/webapp/components/admin_console/ldap_test_button.jsx
blob: fbe348158b03b7daa8da1af64a68cb41b5cdfc2f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.

import React from 'react';

import Client from 'client/web_client.jsx';
import * as Utils from 'utils/utils.jsx';

import {FormattedMessage, FormattedHTMLMessage} from 'react-intl';

export default class LdapTestButton extends React.Component {
    static get propTypes() {
        return {
            disabled: React.PropTypes.bool,
            submitFunction: React.PropTypes.func,
            saveNeeded: React.PropTypes.bool
        };
    }
    constructor(props) {
        super(props);

        this.handleLdapTest = this.handleLdapTest.bind(this);

        this.state = {
            buisy: false,
            fail: null,
            success: false
        };
    }

    handleLdapTest(e) {
        e.preventDefault();

        this.setState({
            buisy: true,
            fail: null,
            success: false
        });

        const doRequest = () => { //eslint-disable-line func-style
            Client.ldapTest(
                () => {
                    this.setState({
                        buisy: false,
                        success: true
                    });
                },
                (err) => {
                    this.setState({
                        buisy: false,
                        fail: err.message
                    });
                }
            );
        };

        // If we need to run the save function then run it with our request function as callback
        if (this.props.saveNeeded) {
            this.props.submitFunction(doRequest);
        } else {
            doRequest();
        }
    }

    render() {
        let message = null;
        if (this.state.fail) {
            message = (
                <div className='alert alert-warning'>
                    <i className='fa fa-warning'/>
                    <FormattedMessage
                        id='admin.ldap.testFailure'
                        defaultMessage='LDAP Test Failure: {error}'
                        values={{
                            error: this.state.fail
                        }}
                    />
                </div>
            );
        } else if (this.state.success) {
            message = (
                <div className='alert alert-success'>
                    <i className='fa fa-success'/>
                    <FormattedMessage
                        id='admin.ldap.testSuccess'
                        defaultMessage='LDAP Test Successful'
                        values={{
                            error: this.state.fail
                        }}
                    />
                </div>
            );
        }

        let helpText = (
            <FormattedHTMLMessage
                id='admin.ldap.testHelpText'
                defaultMessage='Tests if the Mattermost server can connect to the LDAP server specified. See log file for more detailed error messages.'
            />
        );

        let contents = null;
        if (this.state.loading) {
            contents = (
                <span>
                    <span className='fa fa-refresh icon--rotate'/>
                    {Utils.localizeMessage('admin.reload.loading', ' Loading...')}
                </span>
            );
        } else {
            contents = (
                <FormattedMessage
                    id='admin.ldap.ldap_test_button'
                    defaultMessage='LDAP Test'
                />
            );
        }

        return (
            <div className='form-group reload-config'>
                <div className='col-sm-offset-4 col-sm-8'>
                    <div>
                        <button
                            className='btn btn-default'
                            onClick={this.handleLdapTest}
                            disabled={this.props.disabled}
                        >
                            {contents}
                        </button>
                        {message}
                    </div>
                    <div className='help-text'>
                        {helpText}
                    </div>
                </div>
            </div>
        );
    }
}