2
0
mirror of https://github.com/VinylDNS/vinyldns synced 2025-08-22 10:10:12 +00:00
2022-10-10 15:34:00 -04:00

198 lines
7.6 KiB
JavaScript

/*
* Copyright 2018 Comcast Cable Communications Management, LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
'use strict';
angular.module('service.zones', [])
.service('zonesService', function ($http, groupsService, $log, utilityService) {
this.getZones = function (limit, startFrom, query, searchByAdminGroup, ignoreAccess) {
if (query == "") {
query = null;
}
var params = {
"maxItems": limit,
"startFrom": startFrom,
"nameFilter": query,
"searchByAdminGroup": searchByAdminGroup,
"ignoreAccess": ignoreAccess
};
var url = groupsService.urlBuilder("/api/zones", params);
let loader = $("#loader");
loader.modal({
backdrop: "static", //remove ability to close modal with click
keyboard: false, //remove option to close with keyboard
show: true //Display loader!
})
let promis = $http.get(url);
// Hide loader when api gets response
promis.then(()=>loader.modal("hide"), ()=>loader.modal("hide"))
return promis
};
this.getZoneChanges = function (limit, startFrom, zoneId) {
var params = {
"maxItems": limit,
"startFrom": startFrom
}
var url = utilityService.urlBuilder ( "/api/zones/" + zoneId + "/changes", params);
return $http.get(url);
};
this.getBackendIds = function() {
var url = "/api/zones/backendids";
return $http.get(url);
}
this.sendZone = function (payload) {
var sanitizedPayload = this.sanitizeConnections(payload);
$log.info("service.zones: sending zone", sanitizedPayload);
return $http.post("/api/zones", sanitizedPayload, {headers: utilityService.getCsrfHeader()});
};
this.delZone = function (id) {
return $http.delete("/api/zones/"+id, {headers: utilityService.getCsrfHeader()});
};
this.updateZone = function (id, payload) {
var sanitizedPayload = this.sanitizeConnections(payload);
$log.info("service.zones: updating zone", sanitizedPayload);
return $http.put("/api/zones/"+id, sanitizedPayload, {headers: utilityService.getCsrfHeader()});
};
this.sanitizeConnections = function(payload) {
var sanitizedPayload = {};
angular.forEach(payload, function(value, key){
if(key == "connection" || key == "transferConnection") {
var sanitizedConnection = sanitize(payload[key]);
if(!angular.equals(sanitizedConnection, {}) &&
!(Object.keys(sanitizedConnection).length == 1 && 'name' in sanitizedConnection)) {
sanitizedConnection.name = payload.name;
sanitizedPayload[key] = sanitizedConnection;
}
} else {
sanitizedPayload[key] = value
}
});
return sanitizedPayload;
};
this.normalizeZoneDates = function(zone) {
if (zone.created != undefined) {
zone.created = this.toApiIso(zone.created);
}
if (zone.updated != undefined) {
zone.updated = this.toApiIso(zone.updated);
}
if (zone.latestSync != undefined) {
zone.latestSync = this.toApiIso(zone.latestSync);
}
return zone;
};
this.setConnectionKeys = function(zone) {
if (zone.connection != undefined) {
if (zone.hiddenKey.trim() != '') {
zone.connection.key = zone.hiddenKey;
} else if (zone.hiddenKey.trim() == '' && zone.connection.keyName == '' && zone.connection.primaryServer == '') {
zone.connection.key = '';
}
}
if (zone.transferConnection != undefined) {
if (zone.hiddenKey.trim() != '') {
zone.transferConnection.key = zone.hiddenKey;
} else if (zone.hiddenTransferKey.trim() == '' && zone.transferConnection.keyName == '' && zone.transferConnection.primaryServer == '') {
zone.transferConnection.key = '';
}
}
return zone;
};
this.checkBackendId = function(zone) {
if (zone.backendId === ''){
zone.backendId = undefined;
}
return zone;
};
this.checkSharedStatus = function(zone) {
zone.shared = (String(zone.shared).toLowerCase() == 'true');
return zone;
}
this.toApiIso = function(date) {
/* when we parse the DateTimes from the api it gets turned into javascript readable format
* instead of just staying the way it is, so for now converting it back to ISO format on the fly,
* ISO 8601 standards are YYYY-MM-DDTHH:MM:SS:SSSZ, but the DateTime ISO the api uses is
* YYYY-MM-DDTHH:MM:SSZ, so the SSS has to be dropped */
return (new Date(date)).toISOString().slice(0,19) + 'Z';
};
this.toDisplayAclRule = function(rule) {
var newRule = angular.copy(rule);
if (newRule.groupId != undefined) {
newRule.priority = "Group";
} else if (newRule.userId != undefined) {
newRule.priority = "User";
newRule.userName = newRule.displayName;
} else {
newRule.priority = "All Users";
}
if (newRule.accessLevel == 'NoAccess') {
newRule.accessLevel = 'No Access';
}
return newRule;
};
this.toVinylAclRule = function(rule) {
var newRule = {
accessLevel: rule.accessLevel,
description: rule.description,
recordMask: rule.recordMask,
recordTypes: rule.recordTypes,
displayName: rule.displayName
};
switch (rule.priority) {
case 'User':
newRule.userId = rule.userId;
break;
case 'Group':
newRule.groupId = rule.groupId;
break;
default:
break;
}
if (newRule.accessLevel == 'No Access') {
newRule.accessLevel = 'NoAccess';
}
return newRule;
};
function sanitize(connection) {
var sanitizedConnection = {};
angular.forEach(connection, function(value, key) {
if(value.trim() != "") {
sanitizedConnection[key] = value;
}
});
return sanitizedConnection;
}
});