From ff72a126d3f6a45da8968ddc0a8e79721fe64e64 Mon Sep 17 00:00:00 2001 From: Harrison Healey Date: Mon, 9 May 2016 15:56:50 -0400 Subject: PLT-2862 Re-added LDAP login boxes as part of signup flow (#2937) * Added ldap_only parameter for login API * Re-added LDAP login boxes as part of signup flow --- webapp/client/client.jsx | 6 + webapp/components/signup_user_complete.jsx | 195 ++++++++++++++++++++++++++--- webapp/utils/web_client.jsx | 22 ++++ 3 files changed, 204 insertions(+), 19 deletions(-) (limited to 'webapp') diff --git a/webapp/client/client.jsx b/webapp/client/client.jsx index 5d0dd07c9..c81c5a1d7 100644 --- a/webapp/client/client.jsx +++ b/webapp/client/client.jsx @@ -759,6 +759,12 @@ export default class Client { this.track('api', 'api_users_login', '', 'id', id); } + loginByLdap = (loginId, password, mfaToken, success, error) => { + this.doLogin({login_id: loginId, password, token: mfaToken, ldap_only: 'true'}, success, error); + + this.track('api', 'api_users_login', '', 'login_id', loginId); + } + doLogin = (outgoingData, success, error) => { var outer = this; // eslint-disable-line consistent-this diff --git a/webapp/components/signup_user_complete.jsx b/webapp/components/signup_user_complete.jsx index 6dd26f391..5c06cefed 100644 --- a/webapp/components/signup_user_complete.jsx +++ b/webapp/components/signup_user_complete.jsx @@ -1,6 +1,7 @@ // Copyright (c) 2015 Mattermost, Inc. All Rights Reserved. // See License.txt for license information. +import FormError from 'components/form_error.jsx'; import LoadingScreen from 'components/loading_screen.jsx'; import * as GlobalActions from 'action_creators/global_actions.jsx'; @@ -19,11 +20,15 @@ import ReactDOM from 'react-dom'; import logoImage from 'images/logo.png'; -class SignupUserComplete extends React.Component { +export default class SignupUserComplete extends React.Component { constructor(props) { super(props); this.handleSubmit = this.handleSubmit.bind(this); + this.handleLdapSignup = this.handleLdapSignup.bind(this); + + this.handleLdapIdChange = this.handleLdapIdChange.bind(this); + this.handleLdapPasswordChange = this.handleLdapPasswordChange.bind(this); this.state = { data: '', @@ -35,9 +40,12 @@ class SignupUserComplete extends React.Component { teamId: '', openServer: false, loading: true, - inviteId: '' + inviteId: '', + ldapId: '', + ldapPassword: '' }; } + componentWillMount() { let data = this.props.location.query.d; let hash = this.props.location.query.h; @@ -148,6 +156,48 @@ class SignupUserComplete extends React.Component { }); } + handleLdapSignup(e) { + e.preventDefault(); + + this.setState({ldapError: ''}); + + Client.webLoginByLdap( + this.state.ldapId, + this.state.ldapPassword, + null, + () => { + GlobalActions.emitInitialLoad( + () => { + browserHistory.push('/select_team'); + } + ); + }, + (err) => { + if (err.id === 'ent.ldap.do_login.user_not_registered.app_error' || err.id === 'ent.ldap.do_login.user_filtered.app_error') { + this.setState({ + ldapError: ( + + ) + }); + } else if (err.id === 'ent.ldap.do_login.invalid_password.app_error') { + this.setState({ + ldapError: ( + + ) + }); + } else { + this.setState({ldapError: err.message}); + } + } + ); + } + handleSubmit(e) { e.preventDefault(); @@ -277,6 +327,80 @@ class SignupUserComplete extends React.Component { } ); } + + handleLdapIdChange(e) { + e.preventDefault(); + + this.setState({ + ldapId: e.target.value + }); + } + + handleLdapPasswordChange(e) { + e.preventDefault(); + + this.setState({ + ldapPassword: e.target.value + }); + } + + renderLdapLogin() { + let ldapIdPlaceholder; + if (global.window.mm_config.LdapLoginFieldName) { + ldapIdPlaceholder = global.window.mm_config.LdapLoginFieldName; + } else { + ldapIdPlaceholder = Utils.localizeMessage('login.ldap_username', 'LDAP Username'); + } + + let errorClass = ''; + if (this.state.ldapError) { + errorClass += ' has-error'; + } + + return ( +
+
+ +
+ +
+
+ +
+
+ +
+
+
+ ); + } + render() { Client.track('signup', 'signup_user_01_welcome'); @@ -431,6 +555,23 @@ class SignupUserComplete extends React.Component { ); } + let ldapSignup; + if (global.window.mm_config.EnableLdap === 'true' && global.window.mm_license.IsLicensed === 'true' && global.window.mm_license.LDAP) { + ldapSignup = ( +
+
+ + + +
+ {this.renderLdapLogin()} +
+ ); + } + let emailSignup; if (global.window.mm_config.EnableSignUpWithEmail === 'true') { emailSignup = ( @@ -494,7 +635,7 @@ class SignupUserComplete extends React.Component { ); } - if (signupMessage.length > 0 && emailSignup) { + if (signupMessage.length > 0 && (emailSignup || ldapSignup)) { signupMessage = (
{signupMessage} @@ -508,7 +649,36 @@ class SignupUserComplete extends React.Component { ); } - if (signupMessage.length === 0 && !emailSignup) { + if (ldapSignup && emailSignup) { + ldapSignup = ( +
+ {ldapSignup} +
+ +
+
+ ); + } + + let terms = null; + if (!this.state.noOpenServerError && (emailSignup || ldapSignup)) { + terms = ( +

+ +

+ ); + } + + if (signupMessage.length === 0 && !emailSignup && !ldapSignup) { emailSignup = (
- -

- ); - if (this.state.noOpenServerError) { signupMessage = null; emailSignup = null; - terms = null; + ldapSignup = null; } return ( @@ -566,6 +724,7 @@ class SignupUserComplete extends React.Component { /> {signupMessage} + {ldapSignup} {emailSignup} {serverError} {terms} @@ -581,5 +740,3 @@ SignupUserComplete.defaultProps = { SignupUserComplete.propTypes = { location: React.PropTypes.object }; - -export default SignupUserComplete; diff --git a/webapp/utils/web_client.jsx b/webapp/utils/web_client.jsx index 3efb32806..642e523b7 100644 --- a/webapp/utils/web_client.jsx +++ b/webapp/utils/web_client.jsx @@ -60,6 +60,28 @@ class WebClientClass extends Client { } ); } + + webLoginByLdap(loginId, password, token, success, error) { + this.loginByLdap( + loginId, + password, + token, + (data) => { + this.track('api', 'api_users_login_success', '', 'login_id', loginId); + BrowserStore.signalLogin(); + + if (success) { + success(data); + } + }, + (err) => { + this.track('api', 'api_users_login_fail', name, 'login_id', loginId); + if (error) { + error(err); + } + } + ); + } } var WebClient = new WebClientClass(); -- cgit v1.2.3-1-g7c22