portainer/app/extensions/registry-management/rest/manifestJquery.js

91 lines
2.5 KiB
JavaScript

/**
* This service has been created to request the docker registry API
* without triggering AngularJS digest cycles
* For more information, see https://github.com/portainer/portainer/pull/2648#issuecomment-505644913
*/
import $ from 'jquery';
angular.module('portainer.extensions.registrymanagement').factory('RegistryManifestsJquery', [
'API_ENDPOINT_REGISTRIES',
function RegistryManifestsJqueryFactory(API_ENDPOINT_REGISTRIES) {
'use strict';
function buildUrl(params) {
return API_ENDPOINT_REGISTRIES + '/' + params.id + '/v2/' + params.repository + '/manifests/' + params.tag;
}
function _get(params) {
return new Promise((resolve, reject) => {
$.ajax({
type: 'GET',
dataType: 'JSON',
url: buildUrl(params),
headers: {
'Cache-Control': 'no-cache',
'If-Modified-Since': 'Mon, 26 Jul 1997 05:00:00 GMT',
},
success: (result) => resolve(result),
error: (error) => reject(error),
});
});
}
function _getV2(params) {
return new Promise((resolve, reject) => {
$.ajax({
type: 'GET',
dataType: 'JSON',
url: buildUrl(params),
headers: {
Accept: 'application/vnd.docker.distribution.manifest.v2+json',
'Cache-Control': 'no-cache',
'If-Modified-Since': 'Mon, 26 Jul 1997 05:00:00 GMT',
},
success: (result, status, request) => {
result.digest = request.getResponseHeader('Docker-Content-Digest');
resolve(result);
},
error: (error) => reject(error),
});
});
}
function _put(params, data) {
const transformRequest = (d) => {
return angular.toJson(d, 3);
};
return new Promise((resolve, reject) => {
$.ajax({
type: 'PUT',
url: buildUrl(params),
headers: {
'Content-Type': 'application/vnd.docker.distribution.manifest.v2+json',
},
data: transformRequest(data),
success: (result) => resolve(result),
error: (error) => reject(error),
});
});
}
function _delete(params) {
return new Promise((resolve, reject) => {
$.ajax({
type: 'DELETE',
url: buildUrl(params),
success: (result) => resolve(result),
error: (error) => reject(error),
});
});
}
return {
get: _get,
getV2: _getV2,
put: _put,
delete: _delete,
};
},
]);