Здравствуйте. Написал сервис-интерсептор, который видоизменяет config.data при обращении к определенному URL. А если быть точнее, то шифрует алгоритмом AES некоторые элементы объекта.
Имеем таблицу, где данные редактируются прямо в ячейках. И после нажатия кнопки "Сохранить" отправляем строку таблицы в виде JSON на сервер. Сервис примерно такой:
/*global angular*/
(function () {
'use strict';
angular
.module('App')
.factory('httpRequestEncriptAES', ['$q', '$injector', '$log',
httpRequestEncriptAES]);
/**
* @name httpRequestEncriptAES
*/
function httpRequestEncriptAES($q, $injector, $log) {
var self = {};
self.jsonRegexp = /^application\/json;\s*charset=[a-zA-Z0-9\-\_]+/i;
self.API = $injector.get('API');
self.Crypto = $injector.get('cryptoFactory');
self.request = function (config) {
var m;
/**
* Проверяем, что отправляется и куда.
* Если мы отправляем JSON и в URL запроса есть /api/v1/keeper,
* то шифруем данные.
*/
if((m = self.jsonRegexp.exec(config.headers['Content-Type'])) !== null){
if(config.url.indexOf(self.API.makeUrl(self.API.URLS.keeper)) == 0){
$log.debug("httpRequestEncriptAES Encrypt before:", config.data);
/**
* Шифруем информацию
*/
config.data = self.Crypto.encrypt(config.data);
$log.debug("httpRequestEncriptAES Encrypt after:", config.data);
}
}
return config;
};
self.response = function (response) {
var m;
if((m = self.jsonRegexp.exec(response.headers()['content-type'])) !== null){
if(response.config.url.indexOf(self.API.makeUrl(self.API.URLS.keeper)) == 0 && response.data && response.data.docs){
var response_data = angular.fromJson(response.data);
$log.debug("httpRequestEncriptAES Decrypt before:", response_data.docs);
// Дешифруем информацию
response.data.docs = self.Crypto.decrypt(response_data.docs);
$log.debug("httpRequestEncriptAES Decrypt after:", response.data.docs);
}
}
return response;
};
return self;
}
})();
И функция, которая шифрует данные:
self.encrypt = function (objectData) { <- config.data из request
for (var key in objectData) {
if (objectData.hasOwnProperty(key)) {
if((self.targetKeys.indexOf(key) > -1)){
objectData[key] = self.Crypt.AES.encrypt(objectData[key], self.key);
}
}
}
var encObject = angular.extend({}, objectData);
return encObject;
};
Проблема вот в чем. После того, как шифрующая функция отрабатывает, то данные в таблице тоже видоизменяются, а не нужно )) При загрузке страницы данные нормально дешифруются и выводятся в нормальном виде. Но стоит изменить и попробовать сохранить - и трындец. Как быть?