blob: 82c5f34e30f310fc94cbb0d339a384dff50c3a7a [file] [log] [blame]
Matteo Scandolof6acdbe2016-12-13 10:29:37 -08001/// <reference path="../typings/index.d.ts" />
2
Matteo Scandolof6acdbe2016-12-13 10:29:37 -08003export function interceptorConfig($httpProvider: angular.IHttpProvider, $resourceProvider: angular.resource.IResourceServiceProvider) {
4 $httpProvider.interceptors.push('UserStatusInterceptor');
5 $httpProvider.interceptors.push('CredentialsInterceptor');
Matteo Scandolof2c3ed62016-12-15 14:32:50 -08006 $httpProvider.interceptors.push('NoHyperlinksInterceptor');
Matteo Scandolof6acdbe2016-12-13 10:29:37 -08007}
8
Matteo Scandoloebe5a222017-02-27 11:09:26 -08009export function userStatusInterceptor($state: angular.ui.IStateService, $cookies: ng.cookies.ICookiesService, $q: ng.IQService) {
Matteo Scandolof6acdbe2016-12-13 10:29:37 -080010 const checkLogin = (res) => {
Matteo Scandolo0f3692e2017-07-10 14:06:41 -070011 // NOTE this interceptor may never be called as the request is not rejected byt the "model-discoverer" service
Matteo Scandolo042ea632017-03-01 19:02:34 -080012 switch (res.status) {
13 case -1:
14 case 401:
Matteo Scandolo0f3692e2017-07-10 14:06:41 -070015 case 403:
Matteo Scandolo042ea632017-03-01 19:02:34 -080016 $cookies.remove('sessionid', {path: '/'});
17 $state.go('login');
18 return $q.reject(res);
19 default:
Matteo Scandolo42c66922017-05-01 17:24:59 -070020 return $q.reject(res);
Matteo Scandolof6acdbe2016-12-13 10:29:37 -080021 }
Matteo Scandolof6acdbe2016-12-13 10:29:37 -080022 };
23
24 return {
Matteo Scandolof6acdbe2016-12-13 10:29:37 -080025 responseError: checkLogin
26 };
27}
28
29export function CredentialsInterceptor($cookies: angular.cookies.ICookiesService) {
30 return {
31 request: (req) => {
Matteo Scandolo1aee1982017-02-17 08:33:23 -080032 if (!$cookies.get('sessionid')) {
Matteo Scandolof6acdbe2016-12-13 10:29:37 -080033 return req;
34 }
Matteo Scandolo1aee1982017-02-17 08:33:23 -080035 req.headers['x-sessionid'] = $cookies.get('sessionid');
36 req.headers['x-xossession'] = $cookies.get('sessionid');
Matteo Scandolof6acdbe2016-12-13 10:29:37 -080037 return req;
38 }
39 };
40}
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080041
Matteo Scandolo42c66922017-05-01 17:24:59 -070042export function NoHyperlinksInterceptor($q: ng.IQService) {
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080043 return {
44 request: (req) => {
Matteo Scandolo1aee1982017-02-17 08:33:23 -080045 if (req.url.indexOf('.html') === -1) {
46 // NOTE force content type to be JSON
47 req.headers['Content-Type'] = 'application/json';
Matteo Scandolo520a8a12017-03-10 17:31:37 -080048
49 if (req.method === 'PUT') {
Matteo Scandolo02229382017-04-18 11:52:23 -070050 // XosModelStore.search add this value for visualization purpose,
Matteo Scandolo520a8a12017-03-10 17:31:37 -080051 // no one should change models
52 delete req.data.modelName;
53 }
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080054 }
55 return req;
Matteo Scandolo1aee1982017-02-17 08:33:23 -080056 },
57 response: (res) => {
58 try {
59 // NOTE convert res.data from string to JSON
60 res.data = JSON.parse(res.data);
61 try {
62 // NOTE chameleon return everything inside an "items" field
63 res.data = res.data.items;
64 } catch (_e) {
65 res.data = res.data;
66 }
67 } catch (e) {
68 res.data = res.data;
69 }
70 return res;
Matteo Scandolo42c66922017-05-01 17:24:59 -070071 },
72 responseError: (res) => {
73 return $q.reject(res.data);
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080074 }
75 };
76}