parent
a7292e897a
commit
743826bbf3
@ -0,0 +1,41 @@ |
|||||||
|
<?php |
||||||
|
/** |
||||||
|
* ownCloud |
||||||
|
* @author Christian Reiner |
||||||
|
* @copyright 2011-2012 Christian Reiner <foss@christian-reiner.info> |
||||||
|
* |
||||||
|
* This library is free software; you can redistribute it and/or |
||||||
|
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE |
||||||
|
* License as published by the Free Software Foundation; either |
||||||
|
* version 3 of the license, or any later version. |
||||||
|
* |
||||||
|
* This library is distributed in the hope that it will be useful, |
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
* GNU AFFERO GENERAL PUBLIC LICENSE for more details. |
||||||
|
* |
||||||
|
* You should have received a copy of the GNU Affero General Public |
||||||
|
* License along with this library. |
||||||
|
* If not, see <http://www.gnu.org/licenses/>. |
||||||
|
* |
||||||
|
*/ |
||||||
|
|
||||||
|
/** |
||||||
|
* @file core/ajax/requesttoken.php |
||||||
|
* @brief Ajax method to retrieve a fresh request protection token for ajax calls |
||||||
|
* @return json: success/error state indicator including a fresh request token |
||||||
|
* @author Christian Reiner |
||||||
|
*/ |
||||||
|
require_once '../../lib/base.php'; |
||||||
|
|
||||||
|
// don't load apps or filesystem for this task |
||||||
|
$RUNTIME_NOAPPS = TRUE; |
||||||
|
$RUNTIME_NOSETUPFS = TRUE; |
||||||
|
|
||||||
|
// Sanity checks |
||||||
|
// using OCP\JSON::callCheck() below protects the token refreshing itself. |
||||||
|
//OCP\JSON::callCheck ( ); |
||||||
|
OCP\JSON::checkLoggedIn ( ); |
||||||
|
// hand out a fresh token |
||||||
|
OCP\JSON::success ( array ( 'token' => OCP\Util::callRegister() ) ); |
||||||
|
?> |
@ -0,0 +1,55 @@ |
|||||||
|
/** |
||||||
|
* ownCloud |
||||||
|
* |
||||||
|
* @file core/js/requesttoken.js |
||||||
|
* @brief Routine to refresh the Request protection request token periodically |
||||||
|
* @author Christian Reiner (arkascha) |
||||||
|
* @copyright 2011-2012 Christian Reiner <foss@christian-reiner.info> |
||||||
|
* |
||||||
|
* This library is free software; you can redistribute it and/or |
||||||
|
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE |
||||||
|
* License as published by the Free Software Foundation; either |
||||||
|
* version 3 of the license, or any later version. |
||||||
|
* |
||||||
|
* This library is distributed in the hope that it will be useful, |
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
* GNU AFFERO GENERAL PUBLIC LICENSE for more details. |
||||||
|
* |
||||||
|
* You should have received a copy of the GNU Affero General Public |
||||||
|
* License along with this library. |
||||||
|
* If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
* |
||||||
|
*/ |
||||||
|
|
||||||
|
OC.Request = { |
||||||
|
// the request token
|
||||||
|
Token: {}, |
||||||
|
// the lifespan span (in secs)
|
||||||
|
Lifespan: {}, |
||||||
|
// method to refresh the local request token periodically
|
||||||
|
Refresh: function(){ |
||||||
|
// just a client side console log to preserve efficiency
|
||||||
|
console.log("refreshing request token (lifebeat)"); |
||||||
|
var dfd=new $.Deferred(); |
||||||
|
$.ajax({ |
||||||
|
type: 'POST', |
||||||
|
url: OC.filePath('core','ajax','requesttoken.php'), |
||||||
|
cache: false, |
||||||
|
data: { }, |
||||||
|
dataType: 'json' |
||||||
|
}).done(function(response){ |
||||||
|
// store refreshed token inside this class
|
||||||
|
OC.Request.Token=response.token; |
||||||
|
dfd.resolve(); |
||||||
|
}).fail(dfd.reject); |
||||||
|
return dfd; |
||||||
|
} |
||||||
|
} |
||||||
|
// accept requesttoken and lifespan into the OC namespace
|
||||||
|
OC.Request.Token = oc_requesttoken; |
||||||
|
OC.Request.Lifespan = oc_requestlifespan; |
||||||
|
// refresh the request token periodically shortly before it becomes invalid on the server side
|
||||||
|
setInterval(OC.Request.Refresh,Math.floor(1000*OC.Request.Lifespan*0.93)), // 93% of lifespan value, close to when the token expires
|
||||||
|
// early bind token as additional ajax argument for every single request
|
||||||
|
$(document).bind('ajaxSend', function(elm, xhr, s){xhr.setRequestHeader('requesttoken', OC.Request.Token);}); |
Loading…
Reference in new issue