Name
sn_docker_spoke.DockerWebhookAuthenticator
Description
The purpose of this class is to authenticate Docker webhook request received. Look at authenticate(). Input Query params in the form of object Output status (success / failure), errorMessage, statusCode wrapped in an object
Script
var DockerWebhookAuthenticator = Class.create();
DockerWebhookAuthenticator.prototype = {
initialize: function(params) {
//ni.nolog prefix is used to prevent the query params from being logged at Load Balancer
this.id = params['ni.nolog.id'].toString();
this.token = params['ni.nolog.token'].toString();
},
authenticate: function() {
if (this._isTokenAbsent()) {
return this._prepareTokenMissingResponse();
}
return this._checkWebhookRegistration();
},
_isTokenAbsent: function() {
return !this.id || !this.token;
},
_checkWebhookRegistration: function() {
var response = {};
var token = decodeURIComponent(this.token);
var registry = new GlideRecord("sn_docker_spoke_docker_webhook_registry");
if (registry.get(this.id)) {
response = (token != registry.token.token.toString()) ? this._prepareTokenMismatchResponse() : this._prepareAuthSuccessResponse();
} else {
response = this._prepareUnRegisteredWebhookResponse(this.id);
}
return response;
},
_prepareTokenMissingResponse: function() {
gs.error("id or token of webhook is not present");
var response = {};
response.status = "failure";
response.errorMessage = "id or token of webhook is not present";
response.statusCode = 400;
return response;
},
_prepareUnRegisteredWebhookResponse: function(id) {
gs.error("Webhook with id: " + id + " is not registered");
var response = {};
response.status = "failure";
response.errorMessage = "Webhook with id: " + id + " is not registered";
response.statusCode = 400;
return response;
},
_prepareTokenMismatchResponse: function() {
gs.error("Bad token");
var response = {};
response.status = "failure";
response.errorMessage = "Bad token";
response.statusCode = 401;
return response;
},
_prepareAuthSuccessResponse: function() {
var response = {};
response.status = "success";
response.statusCode = 200;
return response;
},
type: 'DockerWebhookAuthenticator'
};
Sys ID
3d73f7aa772230106a9e78adaf5a99c1