in source/rest-api-handler/index.js [217:295]
function upsertEndpoint(projectID, userID, endpoint, metadata) {
log.trace("upsertEndpoint...");
return new Promise((resolve, reject) => {
var endpointID = endpoint.Id || uuidv4(); //New Endpoint, go generate a UUID
endpoint.User.UserId = userID;
//Remove following attributes...they were part of Get, but the Update doesn't like them
delete endpoint.ApplicationId;
delete endpoint.CohortId;
delete endpoint.CreationDate;
delete endpoint.Id;
//Sanitize all user specified values
endpoint.Address = sanitizer.process(endpoint.Address);
for (const property in endpoint.User.UserAttributes) {
endpoint.User.UserAttributes[property].forEach(function(value,index) {
endpoint.User.UserAttributes[property][index] = sanitizer.process(value);
});
}
//Validate Inputs
var dataToValidate = {};
var validationRules = {};
//available channels
metadata.availableChannels.forEach(function(availableChannel) {
if (availableChannel.id == endpoint.ChannelType) {
dataToValidate[endpoint.ChannelType] = endpoint.Address;
validationRules[endpoint.ChannelType] = availableChannel.serverMask || 'string'; //default to string validation
}
});
//publications
metadata.categories.forEach(function(category) {
category.publications.forEach(function(publication) {
validationRules[publication.id] = 'array';
validationRules[`${publication.id}.*`] = 'alpha';
});
});
//attributes
metadata.attributes.forEach(function(attribute) {
validationRules[attribute.id] = 'array';
validationRules[`${attribute.id}.*`] = attribute.serverMask || 'string'; //default to string validation
for (const property in endpoint.User.UserAttributes) {
dataToValidate[property] = endpoint.User.UserAttributes[property];
}
});
const v = new Validator(dataToValidate, validationRules);
v.check().then(function (matched) {
if (matched === true) {
var params = {
ApplicationId: projectID,
EndpointId: endpointID,
EndpointRequest: endpoint
};
log.trace(JSON.stringify(params,null,2));
pinpoint.updateEndpoint(params, function(err, data) {
if (err) {
log.error(err, err.stack);
} else {
log.debug(data);
resolve(data);
}
});
} else {
//validation errors
log.error("Input Validation Errors:", JSON.stringify(v.errors, null, 2));
reject(new Error(`Input Validation Errors: ${JSON.stringify(v.errors, null, 2)}`));
}
});
});
}