/** * 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 } }]);