portainer/app/portainer/services/httpRequestHelper.js

56 lines
1.9 KiB
JavaScript

angular.module('portainer.app')
.factory('HttpRequestHelper', [function HttpRequestHelper() {
'use strict';
var service = {};
var headers = {};
headers.agentTargetQueue = [];
headers.agentManagerOperation = false;
service.registryAuthenticationHeader = function() {
return headers.registryAuthentication;
};
service.setRegistryAuthenticationHeader = function(headerValue) {
headers.registryAuthentication = headerValue;
};
// Due to the fact that async HTTP requests are decorated using an interceptor
// we need to store and retrieve the headers using a first-in-first-out (FIFO) data structure.
// Otherwise, sequential HTTP requests might end up using the same header value (incorrect in the case
// of starting multiple containers on different nodes for example).
// To prevent having to use the HttpRequestHelper.setPortainerAgentTargetHeader before EACH request,
// we re-use the latest available header in the data structure (handy in thee case of multiple requests affecting
// the same node in the same view).
service.portainerAgentTargetHeader = function() {
if (headers.agentTargetQueue.length === 0) {
return headers.agentTargetLastValue;
} else if (headers.agentTargetQueue.length === 1) {
headers.agentTargetLastValue = headers.agentTargetQueue[0];
}
return headers.agentTargetQueue.shift();
};
service.setPortainerAgentTargetHeader = function(headerValue) {
if (headerValue) {
headers.agentTargetQueue.push(headerValue);
}
};
service.setPortainerAgentManagerOperation = function(set) {
headers.agentManagerOperation = set;
};
service.portainerAgentManagerOperation = function() {
return headers.agentManagerOperation;
};
service.resetAgentHeaders = function() {
headers.agentTargetQueue = [];
delete headers.agentTargetLastValue;
headers.agentManagerOperation = false;
};
return service;
}]);