2 var tokenRefreshTimer = setInterval(refreshToken,
elgg.security.interval);
12 function setToken(token_object, valid_tokens) {
14 elgg.security.token = token_object;
17 $(
'[name=__elgg_ts]').val(token_object.__elgg_ts);
18 $(
'[name=__elgg_token]').each(
function () {
19 if (valid_tokens[$(
this).val()]) {
20 $(
this).val(token_object.__elgg_token);
25 $(
'[href*="__elgg_ts"][href*="__elgg_token"]').each(
function () {
26 var token = this.href.match(/__elgg_token=([0-9a-z_-]+)/i)[1];
27 if (valid_tokens[token]) {
29 .replace(/__elgg_ts=\d+/i,
'__elgg_ts=' + token_object.__elgg_ts)
30 .replace(/__elgg_token=[0-9a-z_-]+/i,
'__elgg_token=' + token_object.__elgg_token);
41 function refreshToken() {
45 pairs[
elgg.security.token.__elgg_ts +
',' +
elgg.security.token.__elgg_token] = 1;
47 $(
'form').each(
function () {
49 var
ts = $(
'[name=__elgg_ts]:last',
this).val();
50 var token = $(
'[name=__elgg_token]:last',
this).val();
53 pairs[ts +
',' + token] = 1;
57 $(
'[href*="__elgg_ts"][href*="__elgg_token"]').each(
function () {
58 var ts = this.href.match(/__elgg_ts=(\d+)/i)[1];
59 var token = this.href.match(/__elgg_token=([0-9a-z_-]+)/i)[1];
60 pairs[ts +
',' + token] = 1;
63 pairs = $.map(pairs,
function (val, key) {
67 require([
'elgg/Ajax',
'elgg/system_messages',
'elgg/i18n'],
function(Ajax, system_messages, i18n) {
68 var ajax =
new Ajax(
false);
69 ajax.path(
'refresh_token', {
72 session_token:
elgg.session.token
74 success:
function (data) {
76 elgg.session.token = data.session_token;
77 setToken(data.token, data.valid_tokens);
79 if (
elgg.get_logged_in_user_guid() != data.user_guid) {
80 elgg.session.user = null;
82 clearInterval(tokenRefreshTimer);
84 system_messages.error(i18n.echo(
'session_changed_user'));
86 system_messages.error(i18n.echo(
'session_expired'));
107 if (typeof data ===
'string') {
109 var parts =
elgg.parse_url(data),
113 if (parts[
'host'] === undefined) {
114 if (data.indexOf(
'?') === 0) {
117 args =
elgg.parse_str(parts[
'query']);
122 if (parts[
'query'] !== undefined) {
124 args =
elgg.parse_str(parts[
'query']);
126 var split = data.split(
'?');
127 base = split[0] +
'?';
129 args[
"__elgg_ts"] =
elgg.security.token.__elgg_ts;
130 args[
"__elgg_token"] =
elgg.security.token.__elgg_token;
132 return base +
jQuery.param(args);
136 if (data === undefined) {
137 return elgg.security.token;
142 return $.extend(data,
elgg.security.token);
145 if (data instanceof FormData) {
146 data.set(
'__elgg_ts',
elgg.security.token.__elgg_ts);
147 data.set(
'__elgg_token',
elgg.security.token.__elgg_token);
152 throw new TypeError(
"addToken not implemented for " + (typeof data) +
"s");
elgg security addToken
Add elgg action tokens to an object, URL, or query string (with a ?).
define(['jquery', 'elgg'], function($, elgg){var tokenRefreshTimer=setInterval(refreshToken, elgg.security.interval);function setToken(token_object, valid_tokens){elgg.security.token=token_object;$('[name=__elgg_ts]').val(token_object.__elgg_ts);$('[name=__elgg_token]').each(function(){if(valid_tokens[$(this).val()]){$(this).val(token_object.__elgg_token);}});$('[href *="__elgg_ts"][href *="__elgg_token"]').each(function(){var token=this.href.match(/__elgg_token=([0-9a-z_-]+)/i)[1];if(valid_tokens[token]){this.href=this.href.replace(/__elgg_ts=\d+/i, '__elgg_ts='+token_object.__elgg_ts).replace(/__elgg_token=[0-9a-z_-]+/i, '__elgg_token='+token_object.__elgg_token);}});};function refreshToken(){var pairs={};pairs[elgg.security.token.__elgg_ts+ ','+elgg.security.token.__elgg_token]=1;$('form').each(function(){var ts=$('[name=__elgg_ts]:last', this).val();var token=$('[name=__elgg_token]:last', this).val();if(token){pairs[ts+ ','+token]=1;}});$('[href *="__elgg_ts"][href *="__elgg_token"]').each(function(){var ts=this.href.match(/__elgg_ts=(\d+)/i)[1];var token=this.href.match(/__elgg_token=([0-9a-z_-]+)/i)[1];pairs[ts+ ','+token]=1;});pairs=$.map(pairs, function(val, key){return key;});require(['elgg/Ajax', 'elgg/system_messages', 'elgg/i18n'], function(Ajax, system_messages, i18n){var ajax=new Ajax(false);ajax.path('refresh_token',{data:{pairs:pairs, session_token:elgg.session.token}, success:function(data){if(data){elgg.session.token=data.session_token;setToken(data.token, data.valid_tokens);if(elgg.get_logged_in_user_guid()!=data.user_guid){elgg.session.user=null;elgg.user=null;clearInterval(tokenRefreshTimer);if(data.user_guid){system_messages.error(i18n.echo('session_changed_user'));}else{system_messages.error(i18n.echo('session_expired'));}}}}, error:function(){}});});};return{addToken:function(data){if(typeof data=== 'string'){var parts=elgg.parse_url(data), args={}, base= '';if(parts['host']===undefined){if(data.indexOf('?')===0){base= '?';args=elgg.parse_str(parts['query']);}}else{if(parts['query']!==undefined){args=elgg.parse_str(parts['query']);}var split=data.split('?');base=split[0]+ '?';}args["__elgg_ts"]=elgg.security.token.__elgg_ts;args["__elgg_token"]=elgg.security.token.__elgg_token;return base+jQuery.param(args);}if(data===undefined){return elgg.security.token;}if($.isPlainObject(data)){return $.extend(data, elgg.security.token);}if(data instanceof FormData){data.set('__elgg_ts', elgg.security.token.__elgg_ts);data.set('__elgg_token', elgg.security.token.__elgg_token);return data;}throw new TypeError("addToken not implemented for "+(typeof data)+"s");}};})
elgg isPlainObject
Check if the value is a "plain" object (i.e., created by {} or new Object())
elgg require
Throw an error if the required package isn't present.