Skip to content

Commit

Permalink
[SSO] Fixed bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
TBoonX committed Dec 13, 2017
1 parent 5f5c7c8 commit 4d83b00
Show file tree
Hide file tree
Showing 9 changed files with 66 additions and 69 deletions.
5 changes: 4 additions & 1 deletion actions/user/finalizeMergedUser.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
const log = require('../log/clog');

const MODI = 'sso_modi';
const NAME = 'sso_data';

export default function finalizeMergedUser(context, payload, done) {
log.info(context);
context.service.read('user.ssofinalize', payload, { timeout: 20 * 1000 }, (err, res) => {
Expand All @@ -8,7 +11,7 @@ export default function finalizeMergedUser(context, payload, done) {
//TODO
done();
} else {
localStorage.setItem(NAME, decodeURIComponent(payload));
localStorage.setItem(NAME, decodeURIComponent(JSON.stringify(res)));

try {
window.close();
Expand Down
7 changes: 7 additions & 0 deletions actions/user/updateSSOData.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
const log = require('../log/clog');

export default function updateSSOData(context, payload, done) {
log.info(context);
context.dispatch('SSO_NEW_DATA', payload);
done();
}
2 changes: 1 addition & 1 deletion components/Login/LoginModal.js
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,7 @@ class LoginModal extends React.Component {

$('.ui.login.modal').modal('toggle');

this.context.executeAction(openSSOModal);
this.context.executeAction(openSSOModal, {register: false});
}

handleStorageEvent(e) {
Expand Down
15 changes: 3 additions & 12 deletions components/Login/MigrateUser.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,12 @@ import {navigateAction} from 'fluxible-router';
import ReactDOM from 'react-dom';
import ReviseUser from './ReviseUser';
let classNames = require('classnames');
import updateSSOData from '../../actions/user/updateSSOData';

const MODI = 'sso_modi';
const NAME = 'sso_data';

class MigrateUser extends React.Component {
constructor(props) {
super(props);

this.hash = '';
this.email = '',
this.username = '';
}

componentDidMount() {
console.log('MigrateUser was called');

Expand All @@ -36,9 +29,6 @@ class MigrateUser extends React.Component {
}
//revise user data
else {
this.hash = json.hash;
this.email = json.email;
this.username = json.email;
//open modal
$(ReactDOM.findDOMNode(this.refs.modal.refs.wrappedElement.refs.ReviseUser_Modal)).modal({
closable : false,
Expand All @@ -50,6 +40,7 @@ class MigrateUser extends React.Component {
window.close();
}
}).modal('show');
this.context.executeAction(updateSSOData, json);
}
}
else {
Expand Down Expand Up @@ -82,7 +73,7 @@ class MigrateUser extends React.Component {
return (
<div>
<b>We are merging your user account. This will take just a few seconds.<br/>You will be directed to next view.</b>
<ReviseUser ref='modal' hash={this.hash} email={this.email} username={this.username} />
<ReviseUser ref='modal' hash={this.hash} />
</div>
);
}
Expand Down
60 changes: 17 additions & 43 deletions components/Login/ReviseUser.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {connectToStores} from 'fluxible-addons-react';
import checkEmail from '../../actions/user/registration/checkEmail';
import checkUsername from '../../actions/user/registration/checkUsername';
import UserRegistrationStore from '../../stores/UserRegistrationStore';
import SSOStore from '../../stores/SSOStore';
import common from '../../common';
import finalizeMergedUser from '../../actions/user/finalizeMergedUser';
import instances from '../../configs/instances.js';
Expand All @@ -18,13 +19,6 @@ const modalStyle = {
};

class ReviseUser extends React.Component {
constructor(props) {
super(props);

this.setUserdata = this.setUserdata.bind(this);
this.handleNoAccessClick = this.handleNoAccessClick.bind(this);
}

componentDidMount() {
//Form validation
const validationRules = {
Expand Down Expand Up @@ -77,33 +71,32 @@ class ReviseUser extends React.Component {
}

componentWillReceiveProps(nextProps) {
// console.log('UserRegistrationSocial componentWillReceiveProps()', this.props.UserRegistrationStore.socialuserdata, nextProps.UserRegistrationStore.socialuserdata);
if (nextProps.UserRegistrationStore.socialuserdata.email === undefined && nextProps.UserRegistrationStore.socialuserdata.username === undefined) {
this.setUserdata({}, false);
return;
}
if (nextProps.UserRegistrationStore.socialuserdata && localStorage.getItem(MODI) === 'register') {
if ((nextProps.UserRegistrationStore.socialuserdata.username && !(this.refs.username.value)) || (nextProps.UserRegistrationStore.socialuserdata.email && !(this.refs.email.value)))
this.setUserdata(nextProps.UserRegistrationStore.socialuserdata);
console.log('ReviseUser componentWillReceiveProps()', this.props.UserRegistrationStore.socialuserdata, nextProps.UserRegistrationStore.socialuserdata, this.props.SSOStore.username, nextProps.SSOStore.username);
if (nextProps.SSOStore.username !== this.props.SSOStore.username) {
this.refs.username.value = nextProps.SSOStore.username;
this.refs.email.value = nextProps.SSOStore.email;
this.checkUsername();
this.checkEmail();
}
}

handleSignUp(e) {
e.preventDefault();

$(ReactDOM.findDOMNode(this.refs.SocialRegistration_Modal)).modal('hide');
let user = this.props.UserRegistrationStore.socialuserdata;
let user = {};
user.email = this.refs.email.value;
user.username = this.refs.username.value;
user.hash = this.props.hash;
user.hash = this.props.SSOStore.hash;

let language = common.getIntlLanguage();
user.language = language;

user.url = instances[instances._self].finalize.replace('{hash}', this.props.hash);
user.url = instances[instances._self].finalize.replace('{hash}', user.hash);

this.context.executeAction(finalizeMergedUser, user);

$(ReactDOM.findDOMNode(this.refs.ReviseUser_Modal)).modal('hide');

return false;
}

Expand All @@ -121,26 +114,6 @@ class ReviseUser extends React.Component {
}
}

setUserdata(data, check = true) {
// console.log('ReviseUser setUserdata()', data);

this.refs.username.value = data.username || '';
this.refs.email.value = data.email || '';

if (check) {
this.checkUsername();
this.checkEmail();
}
}

handleNoAccessClick(e) {
e.preventDefault();
$(ReactDOM.findDOMNode(this.refs.SocialRegistration_Modal)).modal('hide');
this.context.executeAction(navigateAction, {
url: '/resetpassword'
});
}

render() {
const signUpLabelStyle = {width: '150px'};

Expand Down Expand Up @@ -186,11 +159,11 @@ class ReviseUser extends React.Component {
<form className="ui ssoregistrationmodalform form" ref="ReviseUser_form" >
<div className={usernameClasses} data-tooltip={usernameToolTipp} data-position="top center" data-inverted="" onBlur={this.checkUsername.bind(this)}>
<label style={signUpLabelStyle}>Username * </label>
<div className="ui icon input"><i className={usernameIconClasses}/><input type="text" name="username" ref="username" placeholder="Username" aria-required="true" value={this.props.username} /></div>
<div className="ui icon input"><i className={usernameIconClasses}/><input type="text" name="username" ref="username" placeholder="Username" aria-required="true" /></div>
</div>
<div className={emailClasses} data-tooltip={emailToolTipp} data-position="top center" data-inverted="" onBlur={this.checkEmail.bind(this)}>
<label style={signUpLabelStyle}>Email * </label>
<div className="ui icon input"><i className={emailIconClasses}/><input type="email" name="email" ref="email" placeholder="Email" aria-required="true" value={this.props.email} /></div>
<div className="ui icon input"><i className={emailIconClasses}/><input type="email" name="email" ref="email" placeholder="Email" aria-required="true" /></div>
</div>
<div className="ui error message"></div>
<button type="submit" className="ui blue labeled submit icon button" >
Expand All @@ -210,9 +183,10 @@ class ReviseUser extends React.Component {
ReviseUser.contextTypes = {
executeAction: React.PropTypes.func.isRequired
};
ReviseUser = connectToStores(ReviseUser, [UserRegistrationStore], (context, props) => {
ReviseUser = connectToStores(ReviseUser, [UserRegistrationStore, SSOStore], (context, props) => {
return {
UserRegistrationStore: context.getStore(UserRegistrationStore).getState()
UserRegistrationStore: context.getStore(UserRegistrationStore).getState(),
SSOStore: context.getStore(SSOStore).getState()
};
});
export default ReviseUser;
5 changes: 3 additions & 2 deletions components/User/SelectInstanceModal.js
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ class SelectInstanceModal extends React.Component {
}
finally {
//delete data
localStorage.setItem(NAME, '');
// localStorage.setItem(NAME, '');
}

//add language before send to service
Expand All @@ -143,7 +143,8 @@ class SelectInstanceModal extends React.Component {

this.context.executeAction(setUser, data);
try {
this.context.executeAction(navigateAction, {url: '/user/'+data.username+'/settings/profile'});
if (this.props.SSOStore.register)
this.context.executeAction(navigateAction, {url: '/user/'+data.username+'/settings/profile'});
location.reload();
} catch (e) {
//nothing - server side
Expand Down
2 changes: 1 addition & 1 deletion components/User/UserRegistration/UserRegistration.js
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,7 @@ class UserRegistration extends React.Component {
doSSO(e) {
e.preventDefault();

this.context.executeAction(openSSOModal);
this.context.executeAction(openSSOModal, {register: true});
}

handleStorageEvent(e) {
Expand Down
9 changes: 6 additions & 3 deletions services/user.js
Original file line number Diff line number Diff line change
Expand Up @@ -67,14 +67,17 @@ export default {
} else if (resource === 'user.ssofinalize') {
rp.post({
uri: args.url,
body: JSON.stringify({
body: {
email: args.email,
username: args.username
}),
},
json: true,
resolveWithFullResponse: true
})
.then((res) => {
callback(null, res.headers['----jwt----']);
let json = res.body;
json.jwt = res.headers['----jwt----'];
callback(null, json);
})
.catch((err) => {
callback(err);
Expand Down
30 changes: 24 additions & 6 deletions stores/SSOStore.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ class SSOStore extends BaseStore {
this.jwt = '';
this.errorMessage = '';
this.userid = 0;
this.register = false;
this.username = '';
this.hash = '';
}

getState(){
Expand All @@ -24,7 +27,10 @@ class SSOStore extends BaseStore {
email: this.email,
jwt: this.jwt,
errorMessage: this.errorMessage,
userid: this.userid
userid: this.userid,
register: this.register,
username: this.username,
hash: this.hash
};
}
dehydrate() {
Expand All @@ -39,14 +45,18 @@ class SSOStore extends BaseStore {
this.jwt = state.jwt;
this.errorMessage = state.errorMessage;
this.userid = state.userid;
this.register = state.register;
this.username = state.username;
this.hash = state.hash;
}
openExampleModal(payload){
openModalMethod(payload){
this.openModal = true;
this.activeTrap = true;
this.register = payload.register;
this.emitChange();

}
closeExampleModal(payload){
closeModal(payload){
this.openModal = false;
this.activeTrap = false;
this.emitChange();
Expand Down Expand Up @@ -80,16 +90,24 @@ class SSOStore extends BaseStore {
this.emitChange();
}

newData(data) {
this.username = data.username;
this.email = data.email;
this.hash = data.hash;
this.emitChange();
}

}
SSOStore.storeName = 'SSOStore';
SSOStore.handlers = {
'SSO_MODAL_OPEN' : 'openExampleModal',
'SSO_MODAL_CLOSE': 'closeExampleModal',
'SSO_MODAL_OPEN' : 'openModalMethod',
'SSO_MODAL_CLOSE': 'closeModal',
'SSO_MODAL_ERROR': 'error',
'SSO_MODAL_CHECKED_EMAIL': 'checkedEmail',
'SSO_INITIATE': 'initiate',
'SSO_SIGNIN_SUCCESS': 'saveSignInData',
'SSO_SIGNIN_ERROR': 'signInError'
'SSO_SIGNIN_ERROR': 'signInError',
'SSO_NEW_DATA': 'newData'
};

export default SSOStore;

0 comments on commit 4d83b00

Please sign in to comment.