agneta-angularjs
Version:
Create your agneta applications with AngularJS
157 lines (137 loc) • 4.68 kB
JavaScript
/* Copyright 2017 Agneta Network Applications, LLC.
*
* Source file: theme/source/main/interceptors.module.js
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
(function() {
var agneta = window.agneta;
var angular = window.angular;
var app = angular.module('MainApp');
app.config(function($httpProvider) {
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
var errors = agneta.errors;
$httpProvider.interceptors.push(function(
$q,
$rootScope,
$injector,
LoopBackAuth
) {
return {
request: function(config) {
// Check if it is an API call
if (config.url.indexOf(agneta.services.url) === 0) {
var data;
switch (config.method) {
case 'GET':
config.params = config.params || {};
data = config.params;
data.__version = new Date().valueOf();
break;
case 'POST':
config.data = config.data || {};
data = config.data;
break;
}
data.language = agneta.lang;
if (data.__endpoint) {
//console.log(config, data.__endpoint);
var overrideURL = config.url;
overrideURL = overrideURL.replace(
agneta.services.url,
data.__endpoint
);
config.url = overrideURL;
//console.log(overrideURL);
}
config.withCredentials = true;
}
return config;
},
response: function(response) {
if (response.config.url.indexOf(agneta.services.url) !== 0) {
return response;
}
var success = response.data && response.data.success;
if (success) {
var $mdDialog = $injector.get('$mdDialog');
if (!(response.config.data && response.config.data.__skipDialog)) {
$mdDialog.open({
partial: 'success',
nested: true,
data: {
title: success.title,
content: success.message || success.content || success
}
});
}
}
return response;
},
responseError: function(rejection) {
var error;
if (rejection.data) {
error = rejection.data.error || rejection.data;
}
if (!error) {
error = {
message: errors.message
};
}
function handleRejection() {
if (
rejection.config &&
rejection.config.url &&
rejection.config.url.indexOf(agneta.services.url) !== 0
) {
return;
}
var code = error && error.code;
switch (code) {
case 'NO_USER_WITH_TOKEN':
console.warn('No user with token.');
LoopBackAuth.clearUser();
LoopBackAuth.clearStorage();
LoopBackAuth.save();
// falls through
case 'LOGIN_FAILED_EMAIL_NOT_VERIFIED':
case 'USER_DEACTIVATED':
return;
}
var $mdDialog = $injector.get('$mdDialog');
var message = error.message || error.errmsg;
if (message) {
rejection.message = message;
$rootScope.$emit('error');
var data = rejection.config.data || rejection.config.params || {};
if (!data.__skipDialog) {
$mdDialog.open({
partial: data.__errorDialog || 'error',
nested: true,
data: {
error: error,
title: error.title || errors.title,
content: message
}
});
}
}
}
handleRejection();
return $q.reject(error);
}
};
});
});
})();