summaryrefslogtreecommitdiffstats
path: root/webapp/components/login/login.jsx
diff options
context:
space:
mode:
authorCorey Hulen <corey@hulen.com>2016-04-21 22:37:01 -0700
committerCorey Hulen <corey@hulen.com>2016-04-21 22:37:01 -0700
commit2e5617c29be69637acd384e85f795a0b343bec8d (patch)
tree6b8bdae1e664013b97c2dda94985375abda91aa5 /webapp/components/login/login.jsx
parent5c755463ed3a4c74a383fb4460b5be02d8868481 (diff)
downloadchat-2e5617c29be69637acd384e85f795a0b343bec8d.tar.gz
chat-2e5617c29be69637acd384e85f795a0b343bec8d.tar.bz2
chat-2e5617c29be69637acd384e85f795a0b343bec8d.zip
PLT-2057 User as a first class object (#2648)
* Adding TeamMember to system * Fixing all unit tests on the backend * Fixing merge conflicts * Fixing merge conflict * Adding javascript unit tests * Adding TeamMember to system * Fixing all unit tests on the backend * Fixing merge conflicts * Fixing merge conflict * Adding javascript unit tests * Adding client side unit test * Cleaning up the clint side tests * Fixing msg * Adding more client side unit tests * Adding more using tests * Adding last bit of client side unit tests and adding make cmd * Fixing bad merge * Fixing libraries * Updating to new client side API * Fixing borken unit test * Fixing unit tests * ugg...trying to beat gofmt * ugg...trying to beat gofmt * Cleaning up remainder of the server side routes * Adding inital load api * Increased coverage of webhook unit tests (#2660) * Adding loading ... to root html * Fixing bad merge * Removing explicit content type so superagent will guess corectly (#2685) * Fixing merge and unit tests * Adding create team UI * Fixing signup flows * Adding LDAP unit tests and enterprise unit test helper (#2702) * Add the ability to reset MFA from the commandline (#2706) * Fixing compliance unit tests * Fixing client side tests * Adding open server to system console * Moving websocket connection * Fixing unit test * Fixing unit tests * Fixing unit tests * Adding nickname and more LDAP unit tests (#2717) * Adding join open teams * Cleaning up all TODOs in the code * Fixing web sockets * Removing unused webockets file * PLT-2533 Add the ability to reset a user's MFA from the system console (#2715) * Add the ability to reset a user's MFA from the system console * Add client side unit test for adminResetMfa * Reorganizing authentication to fix LDAP error message (#2723) * Fixing failing unit test * Initial upgrade db code * Adding upgrade script * Fixing upgrade script after running on core * Update OAuth and Claim routes to work with user model changes (#2739) * Fixing perminant deletion. Adding ability to delete all user and the entire database (#2740) * Fixing team invite ldap login call (#2741) * Fixing bluebar and some img stuff * Fix all the different file upload web utils (#2743) * Fixing invalid session redirect (#2744) * Redirect on bad channel name (#2746) * Fixing a bunch of issue and removing dead code * Patch to fix error message on leave channel (#2747) * Setting EnableOpenServer to false by default * Fixing config * Fixing upgrade * Fixing reported bugs * Bug fixes for PLT-2057 * PLT-2563 Redo password recovery to use a database table (#2745) * Redo password recovery to use a database table * Update reset password audits * Split out admin and user reset password APIs to be separate * Delete password recovery when user is permanently deleted * Consolidate password resetting into a single function * Removed private channels as an option for outgoing webhooks (#2752) * PLT-2577/PLT-2552 Fixes for backstage (#2753) * Added URL to incoming webhook list * Fixed client functions for adding/removing integrations * Disallowed slash commands without trigger words * Fixed clientside handling of errors on AddCommand page * Minor auth cleanup (#2758) * Changed EditPostModal to just close if you save without making any changes (#2759) * Renamed client -> Client in async_client.jsx and fixed eslint warnings (#2756) * Fixed url in channel info modal (#2755) * Fixing reported issues * Moving to version 3 of the apis * Fixing command unit tests (#2760) * Adding team admins * Fixing DM issue * Fixing eslint error * Properly set EditPostModal's originalText state in all cases (#2762) * Update client config check to assume features is defined if server is licensed (#2772) * Fixing url link * Fixing issue with websocket crashing when sending messages to different teams
Diffstat (limited to 'webapp/components/login/login.jsx')
-rw-r--r--webapp/components/login/login.jsx198
1 files changed, 84 insertions, 114 deletions
diff --git a/webapp/components/login/login.jsx b/webapp/components/login/login.jsx
index a3dadbf36..c5955a1f4 100644
--- a/webapp/components/login/login.jsx
+++ b/webapp/components/login/login.jsx
@@ -5,12 +5,14 @@ import LoginEmail from './components/login_email.jsx';
import LoginUsername from './components/login_username.jsx';
import LoginLdap from './components/login_ldap.jsx';
import LoginMfa from './components/login_mfa.jsx';
+import ErrorBar from 'components/error_bar.jsx';
-import TeamStore from 'stores/team_store.jsx';
+import * as GlobalActions from '../../action_creators/global_actions.jsx';
import UserStore from 'stores/user_store.jsx';
+import Client from 'utils/web_client.jsx';
import * as TextFormatting from 'utils/text_formatting.jsx';
-import * as Client from 'utils/client.jsx';
+
import * as Utils from 'utils/utils.jsx';
import Constants from 'utils/constants.jsx';
@@ -18,40 +20,24 @@ import {FormattedMessage} from 'react-intl';
import {browserHistory, Link} from 'react-router';
import React from 'react';
+import logoImage from 'images/logo.png';
export default class Login extends React.Component {
constructor(props) {
super(props);
- this.getStateFromStores = this.getStateFromStores.bind(this);
- this.onTeamChange = this.onTeamChange.bind(this);
this.preSubmit = this.preSubmit.bind(this);
this.submit = this.submit.bind(this);
+ this.finishSignin = this.finishSignin.bind(this);
- const state = this.getStateFromStores();
- state.doneCheckLogin = false;
+ const state = {};
+ state.showMfa = false;
this.state = state;
}
componentDidMount() {
- TeamStore.addChangeListener(this.onTeamChange);
- Client.getMeLoggedIn((data) => {
- if (data && data.logged_in !== 'false') {
- browserHistory.push('/' + this.props.params.team + '/channels/town-square');
- } else {
- this.setState({doneCheckLogin: true}); //eslint-disable-line react/no-did-mount-set-state
- }
- });
- }
- componentWillUnmount() {
- TeamStore.removeChangeListener(this.onTeamChange);
- }
- getStateFromStores() {
- return {
- currentTeam: TeamStore.getByName(this.props.params.team)
- };
- }
- onTeamChange() {
- this.setState(this.getStateFromStores());
+ if (UserStore.getCurrentUser()) {
+ browserHistory.push('/select_team');
+ }
}
preSubmit(method, loginId, password) {
if (global.window.mm_config.EnableMultifactorAuthentication !== 'true') {
@@ -59,7 +45,7 @@ export default class Login extends React.Component {
return;
}
- Client.checkMfa(method, this.state.currentTeam.name, loginId,
+ Client.checkMfa(method, loginId,
(data) => {
if (data.mfa_required === 'true') {
this.setState({showMfa: true, method, loginId, password});
@@ -78,27 +64,41 @@ export default class Login extends React.Component {
}
);
}
+ finishSignin() {
+ GlobalActions.emitInitialLoad(
+ () => {
+ browserHistory.push('/select_team');
+ }
+ );
+ }
+
submit(method, loginId, password, token) {
this.setState({showMfa: false, serverEmailError: null, serverUsernameError: null, serverLdapError: null});
- const team = this.state.currentTeam.name;
-
if (method === Constants.EMAIL_SERVICE) {
- Client.loginByEmail(team, loginId, password, token,
+ Client.webLogin(
+ loginId,
+ null,
+ password,
+ token,
() => {
UserStore.setLastEmail(loginId);
- browserHistory.push('/' + team + '/channels/town-square');
+ this.finishSignin();
},
(err) => {
if (err.id === 'api.user.login.not_verified.app_error') {
- browserHistory.push('/should_verify_email?teamname=' + encodeURIComponent(team) + '&email=' + encodeURIComponent(loginId));
+ browserHistory.push('/should_verify_email?&email=' + encodeURIComponent(loginId));
return;
}
this.setState({serverEmailError: err.message});
}
);
} else if (method === Constants.USERNAME_SERVICE) {
- Client.loginByUsername(team, loginId, password, token,
+ Client.webLogin(
+ null,
+ loginId,
+ password,
+ token,
() => {
UserStore.setLastUsername(loginId);
@@ -106,7 +106,7 @@ export default class Login extends React.Component {
if (redirect) {
browserHistory.push(decodeURIComponent(redirect));
} else {
- browserHistory.push('/' + team + '/channels/town-square');
+ this.finishSignin();
}
},
(err) => {
@@ -120,13 +120,16 @@ export default class Login extends React.Component {
}
);
} else if (method === Constants.LDAP_SERVICE) {
- Client.loginByLdap(team, loginId, password, token,
+ Client.loginByLdap(
+ loginId,
+ password,
+ token,
() => {
const redirect = Utils.getUrlParameter('redirect');
if (redirect) {
browserHistory.push(decodeURIComponent(redirect));
} else {
- browserHistory.push('/' + team + '/channels/town-square');
+ this.finishSignin();
}
},
(err) => {
@@ -144,7 +147,7 @@ export default class Login extends React.Component {
return (
<div>
<img
- src='/api/v1/admin/get_brand_image'
+ src={Client.getAdminRoute() + '/get_brand_image'}
/>
<p dangerouslySetInnerHTML={{__html: TextFormatting.formatText(text)}}/>
</div>
@@ -153,7 +156,7 @@ export default class Login extends React.Component {
return null;
}
- createLoginOptions(currentTeam) {
+ createLoginOptions() {
const extraParam = Utils.getUrlParameter('extra');
let extraBox = '';
if (extraParam) {
@@ -187,10 +190,19 @@ export default class Login extends React.Component {
/>
</div>
);
+ } else if (extraParam === Constants.PASSWORD_CHANGE) {
+ extraBox = (
+ <div className='alert alert-success'>
+ <i className='fa fa-check'/>
+ <FormattedMessage
+ id='login.passwordChanged'
+ defaultMessage=' Password updated successfully'
+ />
+ </div>
+ );
}
}
- const teamName = currentTeam.name;
const ldapEnabled = global.window.mm_config.EnableLdap === 'true';
const gitlabSigninEnabled = global.window.mm_config.EnableSignUpWithGitLab === 'true';
const googleSigninEnabled = global.window.mm_config.EnableSignUpWithGoogle === 'true';
@@ -200,10 +212,10 @@ export default class Login extends React.Component {
const oauthLogins = [];
if (gitlabSigninEnabled) {
oauthLogins.push(
- <Link
+ <a
className='btn btn-custom-login gitlab'
key='gitlab'
- to={'/api/v1/oauth/gitlab/login?team=' + encodeURIComponent(teamName)}
+ href={Client.getOAuthRoute() + '/gitlab/login'}
>
<span className='icon'/>
<span>
@@ -212,7 +224,7 @@ export default class Login extends React.Component {
defaultMessage='with GitLab'
/>
</span>
- </Link>
+ </a>
);
}
@@ -221,7 +233,7 @@ export default class Login extends React.Component {
<Link
className='btn btn-custom-login google'
key='google'
- to={'/api/v1/oauth/google/login?team=' + encodeURIComponent(teamName)}
+ to={Client.getOAuthRoute() + '/google/login'}
>
<span className='icon'/>
<span>
@@ -238,7 +250,6 @@ export default class Login extends React.Component {
if (emailSigninEnabled) {
emailLogin = (
<LoginEmail
- teamName={teamName}
serverError={this.state.serverEmailError}
submit={this.preSubmit}
/>
@@ -263,7 +274,6 @@ export default class Login extends React.Component {
if (usernameSigninEnabled) {
usernameLogin = (
<LoginUsername
- teamName={teamName}
serverError={this.state.serverUsernameError}
submit={this.preSubmit}
/>
@@ -288,7 +298,6 @@ export default class Login extends React.Component {
if (ldapEnabled) {
ldapLogin = (
<LoginLdap
- teamName={teamName}
serverError={this.state.serverLdapError}
submit={this.preSubmit}
/>
@@ -309,34 +318,31 @@ export default class Login extends React.Component {
}
}
- let userSignUp;
- if (currentTeam.allow_open_invite) {
- userSignUp = (
- <div>
- <span>
+ const userSignUp = (
+ <div>
+ <span>
+ <FormattedMessage
+ id='login.noAccount'
+ defaultMessage="Don't have an account? "
+ />
+ <Link
+ to={'/signup_user_complete'}
+ className='signup-team-login'
+ >
<FormattedMessage
- id='login.noAccount'
- defaultMessage="Don't have an account? "
+ id='login.create'
+ defaultMessage='Create one now'
/>
- <Link
- to={'/signup_user_complete/?id=' + currentTeam.invite_id}
- className='signup-team-login'
- >
- <FormattedMessage
- id='login.create'
- defaultMessage='Create one now'
- />
- </Link>
- </span>
- </div>
- );
- }
+ </Link>
+ </span>
+ </div>
+ );
let forgotPassword;
if (usernameSigninEnabled || emailSigninEnabled) {
forgotPassword = (
<div className='form-group'>
- <Link to={'/' + teamName + '/reset_password'}>
+ <Link to={'/reset_password'}>
<FormattedMessage
id='login.forgot'
defaultMessage='I forgot my password'
@@ -346,23 +352,6 @@ export default class Login extends React.Component {
);
}
- let teamSignUp;
- if (global.window.mm_config.EnableTeamCreation === 'true' && !Utils.isMobileApp()) {
- teamSignUp = (
- <div className='margin--extra'>
- <Link
- to='/'
- className='signup-team-login'
- >
- <FormattedMessage
- id='login.createTeam'
- defaultMessage='Create a new team'
- />
- </Link>
- </div>
- );
- }
-
return (
<div>
{extraBox}
@@ -372,16 +361,10 @@ export default class Login extends React.Component {
{ldapLogin}
{userSignUp}
{forgotPassword}
- {teamSignUp}
</div>
);
}
render() {
- const currentTeam = this.state.currentTeam;
- if (currentTeam == null || !this.state.doneCheckLogin) {
- return <div/>;
- }
-
let content;
let customContent;
let customClass;
@@ -395,7 +378,7 @@ export default class Login extends React.Component {
/>
);
} else {
- content = this.createLoginOptions(currentTeam);
+ content = this.createLoginOptions();
customContent = this.createCustomLogin();
if (customContent) {
customClass = 'branded';
@@ -404,36 +387,23 @@ export default class Login extends React.Component {
return (
<div>
- <div className='signup-header'>
- <Link to='/'>
- <span className='fa fa-chevron-left'/>
- <FormattedMessage
- id='web.header.back'
- />
- </Link>
- </div>
+ <ErrorBar/>
<div className='col-sm-12'>
<div className={'signup-team__container ' + customClass}>
<div className='signup__markdown'>
{customContent}
</div>
+ <img
+ className='signup-team-logo'
+ src={logoImage}
+ />
+ <h1>{global.window.mm_config.SiteName}</h1>
+ <h4 className='color--light'>
+ <FormattedMessage
+ id='web.root.singup_info'
+ />
+ </h4>
<div className='signup__content'>
- <h5 className='margin--less'>
- <FormattedMessage
- id='login.signTo'
- defaultMessage='Sign in to:'
- />
- </h5>
- <h2 className='signup-team__name'>{currentTeam.display_name}</h2>
- <h2 className='signup-team__subdomain'>
- <FormattedMessage
- id='login.on'
- defaultMessage='on {siteName}'
- values={{
- siteName: global.window.mm_config.SiteName
- }}
- />
- </h2>
{content}
</div>
</div>