LP#1526185 Teach egNet about PERM_FAILURE events user/berick/lp1526185-egnet-sees-perm-failure
authorBill Erickson <berickxx@gmail.com>
Thu, 8 Dec 2016 21:32:24 +0000 (16:32 -0500)
committerBill Erickson <berickxx@gmail.com>
Thu, 8 Dec 2016 21:35:09 +0000 (16:35 -0500)
Teach egNet to broadcast a message when a PERM_FAILURE event occurs,
similar to how currently handles NO_SESSION events.

The new event will look like:

$rootScope.$broadcast('egNetPermFailure', {
    service  : service,
    method   : method,
    params   : params,
    perm_evt : evt
});

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Open-ILS/web/js/ui/default/staff/services/net.js

index 156d554..26fe36c 100644 (file)
@@ -39,16 +39,35 @@ function($q,  $rootScope,  egEvent) {
 
     var net = {};
 
-    // raises the egAuthExpired event on NO_SESSION
-    net.checkResponse = function(resp) {
+    // raises global event handlers when needed.
+    net.checkResponse = function(resp, service, method, params) {
         var content = resp.content();
-        if (!content) return null;
         var evt = egEvent.parse(content);
-        if (evt && evt.textcode == 'NO_SESSION') {
-            $rootScope.$broadcast('egAuthExpired') 
-        } else {
-            return content;
+
+        if (evt) {
+            switch(evt.textcode) {
+
+                case 'NO_SESSION':
+                    $rootScope.$broadcast('egAuthExpired');
+                    return {reject : true};
+
+                case 'PERM_FAILURE':
+                    $rootScope.$broadcast('egNetPermFailure', {
+                        service  : service,
+                        method   : method,
+                        params   : params,
+                        perm_evt : evt
+                    });
+                    return {reject : true};
+
+                // Add other global event handlers here.
+
+                default:
+                    // other event types are passed to the caller.
+            }
         }
+
+        return {content : content};
     };
 
     net.request = function(service, method) {
@@ -64,8 +83,15 @@ function($q,  $rootScope,  egEvent) {
                 deferred.resolve(last);
             },
             onresponse : function(r) {
-                last = net.checkResponse(r.recv());
-                deferred.notify(last);
+                var stat = 
+                    net.checkResponse(r.recv(), service, method, params);
+
+                if (stat.reject) {
+                    deferred.reject();
+                } else {
+                    last = stat.content;
+                    deferred.notify(last);
+                }
             },
             onerror : function(msg) {
                 // 'msg' currently tells us very little, so don't