blob: 1ba64235c2c126d42fe9168ff236bb30eb3a3329 [file] [log] [blame]
Matteo Scandolof6acdbe2016-12-13 10:29:37 -08001/// <reference path="../typings/index.d.ts" />
2
Matteo Scandolo9f87f302016-12-13 18:11:10 -08003// TODO handle backend failure
4
Matteo Scandolof6acdbe2016-12-13 10:29:37 -08005export function interceptorConfig($httpProvider: angular.IHttpProvider, $resourceProvider: angular.resource.IResourceServiceProvider) {
6 $httpProvider.interceptors.push('UserStatusInterceptor');
7 $httpProvider.interceptors.push('CredentialsInterceptor');
Matteo Scandolof2c3ed62016-12-15 14:32:50 -08008 $httpProvider.interceptors.push('NoHyperlinksInterceptor');
Matteo Scandolof6acdbe2016-12-13 10:29:37 -08009}
10
Matteo Scandolo0e363772017-01-13 11:41:29 -080011export function userStatusInterceptor($state: angular.ui.IStateService, $cookies: ng.cookies.ICookiesService) {
Matteo Scandolof6acdbe2016-12-13 10:29:37 -080012
13 const checkLogin = (res) => {
Matteo Scandoloc37c5ac2017-01-09 13:43:31 -080014 if (res.status === 401 || res.status === -1) {
Matteo Scandolo1aee1982017-02-17 08:33:23 -080015 $cookies.remove('sessionid', {path: '/'});
Matteo Scandolof1e32dc2016-12-23 17:26:39 -080016 $state.go('login');
Matteo Scandolof6acdbe2016-12-13 10:29:37 -080017 }
18 return res;
19 };
20
21 return {
22 response: checkLogin,
23 responseError: checkLogin
24 };
25}
26
27export function CredentialsInterceptor($cookies: angular.cookies.ICookiesService) {
28 return {
29 request: (req) => {
Matteo Scandolo1aee1982017-02-17 08:33:23 -080030 if (!$cookies.get('sessionid')) {
Matteo Scandolof6acdbe2016-12-13 10:29:37 -080031 return req;
32 }
Matteo Scandolo1aee1982017-02-17 08:33:23 -080033 req.headers['x-sessionid'] = $cookies.get('sessionid');
34 req.headers['x-xossession'] = $cookies.get('sessionid');
Matteo Scandolof6acdbe2016-12-13 10:29:37 -080035 return req;
36 }
37 };
38}
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080039
40export function NoHyperlinksInterceptor() {
41 return {
42 request: (req) => {
Matteo Scandolo1aee1982017-02-17 08:33:23 -080043 if (req.url.indexOf('.html') === -1) {
44 // NOTE force content type to be JSON
45 req.headers['Content-Type'] = 'application/json';
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080046 }
47 return req;
Matteo Scandolo1aee1982017-02-17 08:33:23 -080048 },
49 response: (res) => {
50 try {
51 // NOTE convert res.data from string to JSON
52 res.data = JSON.parse(res.data);
53 try {
54 // NOTE chameleon return everything inside an "items" field
55 res.data = res.data.items;
56 } catch (_e) {
57 res.data = res.data;
58 }
59 } catch (e) {
60 res.data = res.data;
61 }
62 return res;
Matteo Scandolof2c3ed62016-12-15 14:32:50 -080063 }
64 };
65}