1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-08-07 23:05:26 +02:00

feat(webhooks): add support for service update webhooks (#2161)

* Initial pass at adding webhook controller and routes

* Moving some objects around

* Cleaning up comments

* Fixing syntax, switching to using the docker sdk over building an http client

* Adding delete and list functionality

* Updating the handler to use the correct permissions. Updating some comments

* Fixing some comments

* Code cleanup per pull request comments

* Cleanup per PR feedback. Syntax error fix

* Initial creation of webhook app code

* Moving ClientFactory creation out of handler code and instead using the one created by the main process. Removing webhookInspect method and updating the list function to use json filters

* Delete now works on the webhook ID vs service ID

* WIP - Service creates a webhook. Display will show an existing webhook URL.

* Adding the webhook field to the service view. There is now the ability to add or remove a webhook from a service

* Moving all api calls to be webhooks vs webhook

* Code cleanup. Moving all api calls to be webhooks vs webhook

* More conversion of webhook to webhooks?

* Moving UI elements around. Starting function for copying to clipboard

* Finalizing function for copying to clipboard. Adding button that calls function and copies webhook to clipboard.

* Fixing UI issues. Hiding field entirely when there is no webhook

* Moving URL crafting to a helper method. The edit pane for service now creates/deletes webhooks immidiately.

* style(service-details): update webhook line

* feat(api): strip sha when updating an image via the update webhook

* Fixing up some copy. Only displying the port if it is not http or https

* Fixing tooltip copy. Setting the forceupdate to be true to require an update to occur

* Fixing code climate errors

* Adding WebhookType field and setting to ServiceWebhook for new webhooks. Renaming ServiceID to resourceID so future work can add new types of webhooks in other resource areas.

* Adding the webhook type to the payload to support more types of webhooks in the future. Setting the type correctly when creating one for a service

* feat(webhooks): changes related to webhook management

* API code cleanup, removing unneeded functions, and updating validation logic

* Incorrectly ignoring the error that the webhook did not exist

* Re-adding missing error handling. Changing error response to be a 404 vs 500 when token can't find an object

* fix(webhooks): close Docker client after service webhook execution
This commit is contained in:
Kendrick 2018-09-03 03:08:03 -07:00 committed by Anthony Lapenna
parent d5facde9d4
commit 0efeeaf185
22 changed files with 619 additions and 11 deletions

View file

@ -0,0 +1,13 @@
angular.module('portainer.app')
.factory('WebhookHelper', ['$location', 'API_ENDPOINT_WEBHOOKS', function WebhookHelperFactory($location,API_ENDPOINT_WEBHOOKS) {
'use strict';
var helper = {};
helper.returnWebhookUrl = function(token) {
var displayPort = $location.protocol().toLowerCase() === 'http' && $location.port() === 80 || $location.protocol().toLowerCase() === 'https' && $location.port() === 443 ? '' : ':' + $location.port();
return $location.protocol() + '://' + $location.host()
+ displayPort + '/' + API_ENDPOINT_WEBHOOKS + '/' + token;
};
return helper;
}]);

View file

@ -0,0 +1,7 @@
function WebhookViewModel(data) {
this.Id = data.Id;
this.Token = data.Token;
this.ResourceId = data.ResourceID;
this.EndpointId = data.EndpointID;
this.WebhookType = data.WebhookType;
}

View file

@ -0,0 +1,10 @@
angular.module('portainer.app')
.factory('Webhooks', ['$resource', 'API_ENDPOINT_WEBHOOKS',
function WebhooksFactory($resource, API_ENDPOINT_WEBHOOKS) {
'use strict';
return $resource(API_ENDPOINT_WEBHOOKS + '/:id', {}, {
query: { method: 'GET', isArray: true },
create: { method: 'POST' },
remove: { method: 'DELETE', params: { id: '@id'} }
});
}]);

View file

@ -0,0 +1,33 @@
angular.module('portainer.app')
.factory('WebhookService', ['$q', 'Webhooks', function WebhookServiceFactory($q, Webhooks) {
'use strict';
var service = {};
service.webhooks = function(serviceID, endpointID) {
var deferred = $q.defer();
var filters = { ResourceID: serviceID, EndpointID: endpointID };
Webhooks.query({ filters:filters }).$promise
.then(function success(data) {
var webhooks = data.map(function (item) {
return new WebhookViewModel(item);
});
deferred.resolve(webhooks);
})
.catch(function error(err) {
deferred.reject({msg: 'Unable to retrieve webhooks', err: err});
});
return deferred.promise;
};
service.createServiceWebhook = function(serviceID, endpointID) {
return Webhooks.create({ ResourceID: serviceID, EndpointID: endpointID, WebhookType: 1 }).$promise;
};
service.deleteWebhook = function(id) {
return Webhooks.remove({ id: id }).$promise;
};
return service;
}]);