diff options
author | Corey Hulen <corey@hulen.com> | 2016-04-21 22:37:01 -0700 |
---|---|---|
committer | Corey Hulen <corey@hulen.com> | 2016-04-21 22:37:01 -0700 |
commit | 2e5617c29be69637acd384e85f795a0b343bec8d (patch) | |
tree | 6b8bdae1e664013b97c2dda94985375abda91aa5 /webapp/components/signup_user_complete.jsx | |
parent | 5c755463ed3a4c74a383fb4460b5be02d8868481 (diff) | |
download | chat-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/signup_user_complete.jsx')
-rw-r--r-- | webapp/components/signup_user_complete.jsx | 199 |
1 files changed, 143 insertions, 56 deletions
diff --git a/webapp/components/signup_user_complete.jsx b/webapp/components/signup_user_complete.jsx index 9e821289b..666e72e13 100644 --- a/webapp/components/signup_user_complete.jsx +++ b/webapp/components/signup_user_complete.jsx @@ -3,12 +3,13 @@ import LoadingScreen from 'components/loading_screen.jsx'; import LoginLdap from 'components/login/components/login_ldap.jsx'; +import * as GlobalActions from 'action_creators/global_actions.jsx'; import BrowserStore from 'stores/browser_store.jsx'; import UserStore from 'stores/user_store.jsx'; import * as Utils from 'utils/utils.jsx'; -import * as Client from 'utils/client.jsx'; +import Client from 'utils/web_client.jsx'; import Constants from 'utils/constants.jsx'; import {FormattedMessage, FormattedHTMLMessage} from 'react-intl'; @@ -24,7 +25,6 @@ class SignupUserComplete extends React.Component { super(props); this.handleSubmit = this.handleSubmit.bind(this); - this.inviteInfoRecieved = this.inviteInfoRecieved.bind(this); this.handleLdapSignup = this.handleLdapSignup.bind(this); this.state = { @@ -34,7 +34,10 @@ class SignupUserComplete extends React.Component { email: '', teamDisplayName: '', teamName: '', - teamId: '' + teamId: '', + openServer: false, + loading: true, + inviteId: '' }; } componentWillMount() { @@ -46,19 +49,91 @@ class SignupUserComplete extends React.Component { let teamDisplayName = ''; let teamName = ''; let teamId = ''; + let openServer = false; + let loading = true; + + if ((inviteId && inviteId.length > 0) || (hash && hash.length > 0)) { + // if we are already logged in then attempt to just join the team + if (UserStore.getCurrentUser()) { + loading = true; + Client.addUserToTeamFromInvite( + data, + hash, + inviteId, + () => { + GlobalActions.emitInitialLoad( + () => { + browserHistory.push('/select_team'); + } + ); + }, + (err) => { + this.setState({ + noOpenServerError: true, + serverError: err.message, + loading: false + }); + } + ); + } else if (hash) { + // If we have a hash in the url then we are attempting to access a private team + const parsedData = JSON.parse(data); + usedBefore = BrowserStore.getGlobalItem(hash); + email = parsedData.email; + teamDisplayName = parsedData.display_name; + teamName = parsedData.name; + teamId = parsedData.id; + loading = false; + } else { + loading = true; + Client.getInviteInfo( + inviteId, + (inviteData) => { + if (!inviteData) { + return; + } - // If we have a hash in the url then we are attempting to access a private team - if (hash) { - const parsedData = JSON.parse(data); - usedBefore = BrowserStore.getGlobalItem(hash); - email = parsedData.email; - teamDisplayName = parsedData.display_name; - teamName = parsedData.name; - teamId = parsedData.id; + this.setState({ + serverError: null, + teamDisplayName: inviteData.display_name, + teamName: inviteData.name, + teamId: inviteData.id, + loading: false + }); + }, + () => { + this.setState({ + noOpenServerError: true, + loading: false, + serverError: + <FormattedMessage + id='signup_user_completed.invalid_invite' + defaultMessage='The invite link was invalid. Please speak with your Administrator to receive an invitation.' + /> + }); + } + ); + + data = ''; + hash = ''; + } + } else if (global.window.mm_config.EnableOpenServer === 'true' || UserStore.getNoAccounts()) { + // If this is the first account then let them create an account anyway. + // The server will verify it's the first account before allowing creation. + // Of if the server is open then we don't care. + openServer = true; + loading = false; } else { - Client.getInviteInfo(this.inviteInfoRecieved, null, inviteId); - data = ''; - hash = ''; + loading = false; + this.setState({ + noOpenServerError: true, + serverError: + <FormattedMessage + id='signup_user_completed.no_open_server' + defaultMessage='This server does not allow open signups. Please speak with your Administrator to receive an invitation.' + />, + loading: false + }); } this.setState({ @@ -68,29 +143,25 @@ class SignupUserComplete extends React.Component { email, teamDisplayName, teamName, - teamId - }); - } - inviteInfoRecieved(data) { - if (!data) { - return; - } - - this.setState({ - teamDisplayName: data.display_name, - teamName: data.name, - teamId: data.id + teamId, + openServer, + inviteId, + loading }); } handleLdapSignup(method, loginId, password, token) { - Client.loginByLdap(this.state.teamName, loginId, password, token, + Client.loginByLdap(loginId, password, token, () => { const redirect = Utils.getUrlParameter('redirect'); if (redirect) { browserHistory.push(decodeURIComponent(redirect)); } else { - browserHistory.push('/' + this.state.teamName + '/channels/town-square'); + GlobalActions.emitInitialLoad( + () => { + browserHistory.push('/select_team'); + } + ); } }, (err) => { @@ -187,28 +258,34 @@ class SignupUserComplete extends React.Component { }); const user = { - team_id: this.state.teamId, email: providedEmail, username: providedUsername, password: providedPassword, allow_marketing: true }; - Client.createUser(user, this.state.data, this.state.hash, + Client.createUserWithInvite(user, + this.state.data, + this.state.hash, + this.state.inviteId, () => { Client.track('signup', 'signup_user_02_complete'); - - Client.loginByEmail( - this.state.teamName, + Client.login( user.email, + null, user.password, - '', // No MFA Token + '', () => { UserStore.setLastEmail(user.email); if (this.state.hash > 0) { BrowserStore.setGlobalItem(this.state.hash, JSON.stringify({usedBefore: true})); } - browserHistory.push('/' + this.state.teamName + '/channels/town-square'); + + GlobalActions.emitInitialLoad( + () => { + browserHistory.push('/select_team'); + } + ); }, (err) => { if (err.id === 'api.user.login.not_verified.app_error') { @@ -239,9 +316,7 @@ class SignupUserComplete extends React.Component { ); } - // If we haven't got a team id yet we are waiting for - // the client so just show the standard loading screen - if (this.state.teamId === '') { + if (this.state.loading) { return (<LoadingScreen/>); } @@ -349,7 +424,7 @@ class SignupUserComplete extends React.Component { <a className='btn btn-custom-login gitlab' key='gitlab' - href={'/api/v1/oauth/gitlab/signup' + window.location.search + '&team=' + encodeURIComponent(this.state.teamName)} + href={Client.getOAuthRoute() + '/gitlab/signup' + window.location.search} > <span className='icon'/> <span> @@ -367,7 +442,7 @@ class SignupUserComplete extends React.Component { <a className='btn btn-custom-login google' key='google' - href={'/api/v1/oauth/google/signup' + window.location.search + '&team=' + encodeURIComponent(this.state.teamName)} + href={Client.getOAuthRoute() + '/google/signup' + window.location.search + '&team=' + encodeURIComponent(this.state.teamName)} > <span className='icon'/> <span> @@ -497,12 +572,33 @@ class SignupUserComplete extends React.Component { ); } + let terms = ( + <p> + <FormattedHTMLMessage + id='create_team.agreement' + defaultMessage="By proceeding to create your account and use {siteName}, you agree to our <a href='/static/help/terms.html'>Terms of Service</a> and <a href='/static/help/privacy.html'>Privacy Policy</a>. If you do not agree, you cannot use {siteName}." + values={{ + siteName: global.window.mm_config.SiteName + }} + /> + </p> + ); + + if (this.state.noOpenServerError) { + signupMessage = null; + ldapSignup = null; + emailSignup = null; + terms = null; + } + return ( <div> <div className='signup-header'> <Link to='/'> - <span classNameNameName='fa fa-chevron-left'/> - <FormattedMessage id='web.header.back'/> + <span className='fa fa-chevron-left'/> + <FormattedMessage + id='web.header.back' + /> </Link> </div> <div className='col-sm-12'> @@ -511,22 +607,12 @@ class SignupUserComplete extends React.Component { className='signup-team-logo' src={logoImage} /> - <h5 className='margin--less'> - <FormattedMessage - id='signup_user_completed.welcome' - defaultMessage='Welcome to:' - /> - </h5> - <h2 className='signup-team__name'>{this.state.teamName}</h2> - <h2 className='signup-team__subdomain'> + <h1>{global.window.mm_config.SiteName}</h1> + <h4 className='color--light'> <FormattedMessage - id='signup_user_completed.onSite' - defaultMessage='on {siteName}' - values={{ - siteName: global.window.mm_config.SiteName - }} + id='web.root.singup_info' /> - </h2> + </h4> <h4 className='color--light'> <FormattedMessage id='signup_user_completed.lets' @@ -537,6 +623,7 @@ class SignupUserComplete extends React.Component { {ldapSignup} {emailSignup} {serverError} + {terms} </div> </div> </div> |