Correctly synchronise sid and username across domains

This commit is contained in:
Cathy J. Fitzpatrick 2013-03-22 05:11:11 -06:00
parent 03dd6a2586
commit d672ae57b5
4 changed files with 31 additions and 12 deletions

View File

@ -73,6 +73,7 @@ foreach ($reqs as $reqData) {
$challengeprefix = verifyCrossDomainRequest();
$out['assertion'] = $users->getAssertion($curuser['userid'], $serverhostname, null,
$challengekeyid, $challenge, $challengeprefix);
$out['sid'] = $users->sid;
break;
case 'register':
$serverhostname = '' . getServerHostName(@$reqData['serverid']);
@ -102,6 +103,7 @@ foreach ($reqs as $reqData) {
$out['curuser'] = $user;
$out['assertion'] = $users->getAssertion($user['userid'],
$serverhostname, $user, $challengekeyid, $challenge, $challengeprefix);
$out['sid'] = $users->sid;
$out['actionsuccess'] = true;
if ($curuser && $serverhostname) {
$out['sessiontoken'] = $users->getSessionToken($serverhostname) . '::' . $serverhostname;

View File

@ -23,18 +23,25 @@ $sid = isset($_COOKIE['sid']) ? $_COOKIE['sid'] : '';
?>
<!DOCTYPE html>
<script src="/js/jquery-1.9.0.min.js"></script>
<script src="/js/jquery-cookie.js"></script>
<script>
(function() {
var origin = <?php echo json_encode($origin) ?>;
$(window).on('message', function($e) {
var e = $e.originalEvent;
if (e.origin !== origin) return;
if (e.data.prefs) {
localStorage.setItem('showdown_prefs', e.data.prefs);
if (e.data.username) {
$.cookie('showdown_username', e.data.username, {expires: 14});
}
if (e.data.sid) {
$.cookie('sid', e.data.username, {expires: 14});
}
if (e.data.teams) {
localStorage.setItem('showdown_teams', e.data.teams);
}
if (e.data.prefs) {
localStorage.setItem('showdown_prefs', e.data.prefs);
}
});
var message = {
upkeep: <?php echo json_encode($upkeep) ?>,

View File

@ -308,6 +308,8 @@ var Tools = {
resourcePrefix: 'http://play.pokemonshowdown.com/',
postCrossDomainMessage: function(data) {},
showInterstice: (function() {
var patterns = (function(whitelist) {
var patterns = [];

View File

@ -2512,6 +2512,7 @@ function updateMe() {
$.cookie('showdown_username', me.name, {
expires: 14
});
Tools.postCrossDomainMessage({username: me.name});
} else {
$('#userbar').html(notifybutton + '<i class="icon-user" style="color:#999"></i> ' + sanitize(me.name) + mutebutton + ' <button onclick="return rooms[\'lobby\'].formRename()" style="font-size:9pt">Choose name</button>');
}
@ -3210,6 +3211,9 @@ function overlaySubmit(e, overlayType) {
challenge: me.challenge
}, Tools.safeJson(function (data) {
if (!data) data = {};
if (data.sid !== undefined) {
Tools.postCrossDomainMessage({sid: data.sid});
}
var token = data.assertion;
if (data.curuser && data.curuser.loggedin) {
me.registered = data.curuser;
@ -3260,6 +3264,9 @@ function overlaySubmit(e, overlayType) {
challenge: me.challenge
}, Tools.safeJson(function (data) {
if (!data) data = {};
if (data.sid !== undefined) {
Tools.postCrossDomainMessage({sid: data.sid});
}
var token = data.assertion;
if (data.curuser && data.curuser.loggedin) {
me.registered = data.curuser;
@ -3562,27 +3569,28 @@ teams = (function() {
$(window).on('message', function($e) {
var e = $e.originalEvent;
if (e.origin !== origin) return;
if (e.data.sid) {
$.cookie('sid', e.data.sid);
}
Tools.postCrossDomainMessage = function(data) {
return e.source.postMessage(data, origin);
};
// sid
$.cookie('sid', e.data.sid);
// teams
if (e.data.teams) {
cookieTeams = false;
teams = $.parseJSON(e.data.teams);
}
Teambuilder.writeTeams = function() {
e.source.postMessage({
teams: $.toJSON(teams)
}, origin);
Tools.postCrossDomainMessage({teams: $.toJSON(teams)});
};
// prefs
if (e.data.prefs) {
Tools.prefs.data = $.parseJSON(e.data.prefs);
}
Tools.prefs.save = function() {
e.source.postMessage({
prefs: $.toJSON(this.data)
}, origin);
Tools.postCrossDomainMessage({prefs: $.toJSON(this.data)});
};
connect(e.data.upkeep, e.data.username || $.cookie('showdown_username'));
// connect
connect(e.data.upkeep, e.data.username);
});
var $iframe = $(
'<iframe src="http://play.pokemonshowdown.com/crossdomain.php?prefix=' +