1/**
2 * api Interceptor
3 *
4 * @module app/common/services/apiInterceptor
5 * @exports apiInterceptor
6 * @name apiInterceptor
7
8 */
9
10window.angular && (function (angular) {
11    'use strict';
12
13    angular
14        .module('app.common.services')
15        .service('apiInterceptor', ['$q', '$rootScope', 'dataService', function($q, $rootScope, dataService){
16            return {
17                'request': function(config){
18                    dataService.loading = true;
19                    // If caller has not defined a timeout, set to default of 20s
20                    if (config.timeout == null){
21                        config.timeout = 20000;
22                    }
23                    return config;
24                },
25                'response': function(response){
26                    dataService.loading = false;
27
28                    //not interested in template requests
29                    if(!/^https?\:/i.test(response.config.url)){
30                        return response;
31                    }
32
33                    dataService.last_updated = new Date();
34                    if(!response){
35                        dataService.server_unreachable = true;
36                    }else{
37                        dataService.server_unreachable = false;
38                    }
39
40                    if(response && response.status == 'error' &&
41                       dataService.path != '/login'){
42                        $rootScope.$emit('timedout-user', {});
43                    }
44
45                    return response;
46                },
47                'responseError': function(rejection){
48                    if (dataService.ignoreHttpError === false)
49                    {
50                        // If unauthorized, log out
51                        if (rejection.status == 401){
52                            if (dataService.path != '/login'){
53                                $rootScope.$emit('timedout-user', {});
54                            }
55                        } else if (rejection.status == -1){
56                            dataService.server_unreachable = true;
57                        }
58
59                        dataService.loading = false;
60                    }
61                    return $q.reject(rejection);
62                }
63            };
64        }]);
65
66})(window.angular);
67