mirror of
https://github.com/tuxis-ie/nsedit.git
synced 2025-05-08 22:43:58 +03:00
We don't need all these functions anymore
This commit is contained in:
parent
8a63698b9f
commit
65d6b9afe0
1 changed files with 0 additions and 142 deletions
142
zones.php
142
zones.php
|
@ -24,115 +24,6 @@ function _valid_label($name) {
|
|||
return is_ascii($name) && ( bool ) preg_match("/^([-.a-z0-9_\/\*]+)?$/i", $name );
|
||||
}
|
||||
|
||||
function make_record($zone, $input) {
|
||||
global $defaults;
|
||||
|
||||
$name = isset($input['name']) ? $input['name'] : '';
|
||||
|
||||
if ('' == $name) {
|
||||
$name = $zone['name'];
|
||||
} elseif (string_ends_with($name, '.')) {
|
||||
# "absolute" name, shouldn't append zone[name] - but check.
|
||||
$name = substr($name, 0, -1);
|
||||
if (!string_ends_with($name, $zone['name'])) {
|
||||
jtable_respond(null, 'error', "Name $name not in zone ".$zone['name']);
|
||||
}
|
||||
} else if (!string_ends_with($name, $zone['name'])) {
|
||||
$name = $name . '.' . $zone['name'];
|
||||
}
|
||||
|
||||
$ttl = (int) ((isset($input['ttl']) && $input['ttl']) ? $input['ttl'] : $defaults['ttl']);
|
||||
$type = isset($input['type']) ? $input['type'] : '';
|
||||
$disabled = (bool) (isset($input['disabled']) && $input['disabled']);
|
||||
|
||||
$content = isset($input['content']) ? $input['content'] : '';
|
||||
|
||||
if ($type === 'TXT') {
|
||||
# empty TXT records are ok, otherwise require surrounding quotes: "..."
|
||||
if (strlen($content) == 1 || substr($content, 0, 1) !== '"' || substr($content, -1) !== '"') {
|
||||
# fix quoting: first escape all \, then all ", then surround with quotes.
|
||||
$content = '"'.str_replace('"', '\\"', str_replace('\\', '\\\\', $content)).'"';
|
||||
}
|
||||
}
|
||||
|
||||
if (!_valid_label($name)) {
|
||||
jtable_respond(null, 'error', "Please only use [a-z0-9_/.-]");
|
||||
}
|
||||
if (!$type) {
|
||||
jtable_respond(null, 'error', "Require a type");
|
||||
}
|
||||
if (!is_ascii($content)) {
|
||||
jtable_respond(null, 'error', "Please only use ASCII-characters in your fields");
|
||||
}
|
||||
|
||||
return array(
|
||||
'disabled' => $disabled,
|
||||
'type' => $type,
|
||||
'name' => $name,
|
||||
'ttl' => $ttl,
|
||||
'content' => $content);
|
||||
}
|
||||
|
||||
function update_records($zone, $name_and_type, $inputs) {
|
||||
# need one "record" to extract name and type, in case we have no inputs
|
||||
# (deletion of all records)
|
||||
$name_and_type = make_record($zone, $name_and_type);
|
||||
$name = $name_and_type['name'];
|
||||
$type = $name_and_type['type'];
|
||||
|
||||
$records = array();
|
||||
foreach ($inputs as $input) {
|
||||
$record = make_record($zone, $input);
|
||||
if ($record['name'] !== $name || $record['type'] !== $type) {
|
||||
jtable_respond(null, 'error', "Records not matching");
|
||||
}
|
||||
|
||||
array_push($records, $record);
|
||||
}
|
||||
|
||||
if (!_valid_label($name)) {
|
||||
jtable_respond(null, 'error', "Please only use [a-z0-9_/.-]");
|
||||
}
|
||||
|
||||
$patch = array(
|
||||
'rrsets' => array(array(
|
||||
'name' => $name,
|
||||
'type' => $type,
|
||||
'changetype' => count($records) ? 'REPLACE' : 'DELETE',
|
||||
'records' => $records)));
|
||||
|
||||
api_request($zone['url'], $patch, 'PATCH');
|
||||
}
|
||||
|
||||
function create_record($zone, $input) {
|
||||
$record = make_record($zone, $input);
|
||||
$records = get_records_by_name_type($zone, $record['name'], $record['type']);
|
||||
array_push($records, $record);
|
||||
|
||||
$patch = array(
|
||||
'rrsets' => array(array(
|
||||
'name' => $record['name'],
|
||||
'type' => $record['type'],
|
||||
'changetype' => 'REPLACE',
|
||||
'records' => $records)));
|
||||
|
||||
api_request($zone['url'], $patch, 'PATCH');
|
||||
|
||||
return $record;
|
||||
}
|
||||
|
||||
function get_records_by_name_type($zone, $name, $type) {
|
||||
$zone = api_request($zone['url']);
|
||||
$records = array();
|
||||
foreach ($zone['records'] as $record) {
|
||||
if ($record['name'] == $name and $record['type'] == $type) {
|
||||
array_push($records, $record);
|
||||
}
|
||||
}
|
||||
|
||||
return $records;
|
||||
}
|
||||
|
||||
function decode_record_id($id) {
|
||||
$record = json_decode($id, 1);
|
||||
if (!$record
|
||||
|
@ -146,39 +37,6 @@ function decode_record_id($id) {
|
|||
return $record;
|
||||
}
|
||||
|
||||
# get all records with same name and type but different id (content)
|
||||
# requires records with id to be present
|
||||
# SOA records match always, regardless of content.
|
||||
function get_records_except($zone, $exclude) {
|
||||
$is_soa = ($exclude['type'] == 'SOA');
|
||||
|
||||
$found = false;
|
||||
$zone = api_request($zone['url']);
|
||||
$records = array();
|
||||
foreach ($zone['records'] as $record) {
|
||||
if ($record['name'] == $exclude['name'] and $record['type'] == $exclude['type']) {
|
||||
if ($is_soa) {
|
||||
# SOA changes all the time (serial); we can't match it in a sane way.
|
||||
# OTOH we know it is unique anyway - just pretend we found a match.
|
||||
$found = true;
|
||||
} elseif ($record['content'] != $exclude['content']
|
||||
or $record['ttl'] != $exclude['ttl']
|
||||
or $record['disabled'] != $exclude['disabled']) {
|
||||
array_push($records, $record);
|
||||
} else {
|
||||
$found = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!$found) {
|
||||
header("Status: 404 Not Found");
|
||||
jtable_respond(null, 'error', "Didn't find record with id");
|
||||
}
|
||||
|
||||
return $records;
|
||||
}
|
||||
|
||||
function compareName($a, $b) {
|
||||
$a = array_reverse(explode('.', $a));
|
||||
$b = array_reverse(explode('.', $b));
|
||||
|
|
Loading…
Add table
Reference in a new issue