session-timeout
Version:
session timeout
71 lines (58 loc) • 1.81 kB
JavaScript
angular.module('ngIdle.keepalive', [])
.provider('Keepalive', function() {
var options = {
http: null,
interval: 10 * 60
};
this.http = function(value) {
if (!value) throw new Error('Argument must be a string containing a URL, or an object containing the HTTP request configuration.');
if (angular.isString(value)) {
value = {
url: value,
method: 'GET'
};
}
value.cache = false;
options.http = value;
};
var setInterval = this.interval = function(seconds) {
seconds = parseInt(seconds);
if (isNaN(seconds) || seconds <= 0) throw new Error('Interval must be expressed in seconds and be greater than 0.');
options.interval = seconds;
};
this.$get = ['$rootScope', '$log', '$interval', '$http',
function($rootScope, $log, $interval, $http) {
var state = {
ping: null
};
function handleResponse(response) {
$rootScope.$broadcast('KeepaliveResponse', response.data, response.status);
}
function ping() {
$rootScope.$broadcast('Keepalive');
if (angular.isObject(options.http)) {
$http(options.http)
.then(handleResponse)
.catch(handleResponse);
}
}
return {
_options: function() {
return options;
},
setInterval: setInterval,
start: function() {
$interval.cancel(state.ping);
state.ping = $interval(ping, options.interval * 1000);
return state.ping;
},
stop: function() {
$interval.cancel(state.ping);
},
ping: function() {
ping();
}
};
}
];
});