From 3ebdce373e134b70b129154d8033c1c628847a6c Mon Sep 17 00:00:00 2001 From: Fulup Ar Foll Date: Mon, 25 Jan 2016 14:37:32 +0100 Subject: First version --- .../widgets/Notifications/TokenRefreshSvc.js | 131 +++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 afm-client/app/Frontend/widgets/Notifications/TokenRefreshSvc.js (limited to 'afm-client/app/Frontend/widgets/Notifications/TokenRefreshSvc.js') diff --git a/afm-client/app/Frontend/widgets/Notifications/TokenRefreshSvc.js b/afm-client/app/Frontend/widgets/Notifications/TokenRefreshSvc.js new file mode 100644 index 0000000..5c5b5ae --- /dev/null +++ b/afm-client/app/Frontend/widgets/Notifications/TokenRefreshSvc.js @@ -0,0 +1,131 @@ +/* + alsa-gateway -- provide a REST/HTTP interface to ALSA-Mixer + + Copyright (C) 2015, Fulup Ar Foll + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with scope program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + References: + + */ + +(function () { + 'use strict'; + + var template = + '
' + + 'afb://{{hostname}}:{{httpdport}}' + + '' + + '
'; + + +// scope module is load statically before any route is cativated +angular.module('TokenRefresh', ['AppConfig', 'ModalNotification']) + + .directive ('tokenRefresh', function($timeout, $http, $location, Notification, AppConfig) { + + function mymethods(scope, elem, attrs) { + scope.status=undefined; // neither thu neither false + + + scope.online = function () { + elem.addClass ("online"); + elem.removeClass ("offline"); + }; + + scope.offline = function(){ + elem.addClass ("offline"); + elem.removeClass ("online"); + }; + + scope.onerror = function(data, errcode, headers) { + if (scope.status !== false) { + Notification.warning ({message: "AppFramework Binder Lost", delay: 5000}); + scope.offline(); + } + scope.status = 0; + }; + + scope.onsuccess = function(data, errcode, headers, config) { + if (scope.status !== true) { + if (data.request.token) AppConfig.session.token = data.request.token; + if (data.request.uuid) AppConfig.session.uuid = data.request.uuid; + if (data.request.timeout) AppConfig.session.timeout = data.request.timeout; + + Notification.success ({message: "AppFramework Binder Back to Live", delay: 3000}); + scope.online(); + if (scope.callback) scope.callback(); + } + scope.status = 1; + }; + + // Check Binder status + scope.getping = function() { + + var handler = $http.get(AppConfig.session.ping+'?token='+ AppConfig.session.token); + + // process success and error + handler.success(scope.onsuccess); + handler.error(scope.onerror); + + // restart a new timer for next ping + $timeout (scope.getping, AppConfig.session.pingrate*1000); + }; + + // Check Binder status + scope.refresh = function() { + var handler = $http.get(AppConfig.session.refresh+'?token='+ AppConfig.session.token); + + // process success and error + handler.success(scope.onsuccess); + handler.error(scope.onerror); + // restart a new timer for next refresh to 1/4 of timeout session + $timeout (scope.refresh, AppConfig.session.timeout *250); + }; + + // Initial connection + scope.tkcreate = function() { + var handler = $http.get(AppConfig.session.create+'?token='+ AppConfig.session.initial); + + // process success and error + handler.success(scope.onsuccess); + handler.error(scope.onerror); + }; + + scope.icon = attrs.icon || "fi-lightbulb"; + scope.hostname = $location.host(); + scope.httpdport = $location.port(); + scope.autolog = JSON.parse(attrs.autolog || false); + + if (scope.autolog) scope.tkcreate(); + + // Init ping and refresh process + $timeout (scope.getping, AppConfig.session.pingrate*1000); + $timeout (scope.refresh, AppConfig.session.timeout *250); + } + + return { + template: template, + scope: { + callback : "=" + }, + restrict: 'E', + link: mymethods + }; +}); + +})(); +console.log ("Token Refresh Loaded"); + -- cgit 1.2.3-korg