1
0
mirror of https://github.com/github/octodns.git synced 2024-05-11 05:55:00 +00:00

Handle Cloudflare not escaping semicolons

This commit is contained in:
zBart
2017-05-03 12:08:32 +02:00
parent faa4630362
commit bc98af024b
9 changed files with 65 additions and 11 deletions

View File

@@ -99,7 +99,13 @@ class CloudflareProvider(BaseProvider):
_data_for_A = _data_for_multiple _data_for_A = _data_for_multiple
_data_for_AAAA = _data_for_multiple _data_for_AAAA = _data_for_multiple
_data_for_SPF = _data_for_multiple _data_for_SPF = _data_for_multiple
_data_for_TXT = _data_for_multiple
def _data_for_TXT(self, _type, records):
return {
'ttl': records[0]['ttl'],
'type': _type,
'values': [r['content'].replace(';', '\;') for r in records],
}
def _data_for_CNAME(self, _type, records): def _data_for_CNAME(self, _type, records):
only = records[0] only = records[0]
@@ -191,7 +197,10 @@ class CloudflareProvider(BaseProvider):
_contents_for_AAAA = _contents_for_multiple _contents_for_AAAA = _contents_for_multiple
_contents_for_NS = _contents_for_multiple _contents_for_NS = _contents_for_multiple
_contents_for_SPF = _contents_for_multiple _contents_for_SPF = _contents_for_multiple
_contents_for_TXT = _contents_for_multiple
def _contents_for_TXT(self, record):
for value in record.values:
yield {'content': value.replace('\;', ';')}
def _contents_for_CNAME(self, record): def _contents_for_CNAME(self, record):
yield {'content': record.value} yield {'content': record.value}

View File

@@ -98,6 +98,7 @@ txt:
values: values:
- Bah bah black sheep - Bah bah black sheep
- have you any wool. - have you any wool.
- 'v=DKIM1\;k=rsa\;s=email\;h=sha256\;p=A/kinda+of/long/string+with+numb3rs'
www: www:
ttl: 300 ttl: 300
type: A type: A

View File

@@ -180,7 +180,7 @@
"per_page": 10, "per_page": 10,
"total_pages": 2, "total_pages": 2,
"count": 10, "count": 10,
"total_count": 16 "total_count": 17
}, },
"success": true, "success": true,
"errors": [], "errors": [],

View File

@@ -101,14 +101,31 @@
"meta": { "meta": {
"auto_added": false "auto_added": false
} }
},
{
"id": "fc12ab34cd5611334422ab3322997667",
"type": "TXT",
"name": "txt.unit.tests",
"content": "v=DKIM1;k=rsa;s=email;h=sha256;p=A\/kinda+of\/long\/string+with+numb3rs",
"proxiable": false,
"proxied": false,
"ttl": 600,
"locked": false,
"zone_id": "ff12ab34cd5611334422ab3322997650",
"zone_name": "unit.tests",
"modified_on": "2017-03-11T18:01:42.961566Z",
"created_on": "2017-03-11T18:01:42.961566Z",
"meta": {
"auto_added": false
}
} }
], ],
"result_info": { "result_info": {
"page": 2, "page": 2,
"per_page": 10, "per_page": 10,
"total_pages": 2, "total_pages": 2,
"count": 6, "count": 7,
"total_count": 16 "total_count": 17
}, },
"success": true, "success": true,
"errors": [], "errors": [],

View File

@@ -308,7 +308,7 @@
"pagination": { "pagination": {
"current_page": 1, "current_page": 1,
"per_page": 20, "per_page": 20,
"total_entries": 27, "total_entries": 28,
"total_pages": 2 "total_pages": 2
} }
} }

View File

@@ -127,12 +127,28 @@
"system_record": false, "system_record": false,
"created_at": "2017-03-09T15:55:11Z", "created_at": "2017-03-09T15:55:11Z",
"updated_at": "2017-03-09T15:55:11Z" "updated_at": "2017-03-09T15:55:11Z"
},
{
"id": 11189901,
"zone_id": "unit.tests",
"parent_id": null,
"name": "txt",
"content": "v=DKIM1\\;k=rsa\\;s=email\\;h=sha256\\;p=A/kinda+of/long/string+with+numb3rs",
"ttl": 600,
"priority": null,
"type": "TXT",
"regions": [
"global"
],
"system_record": false,
"created_at": "2017-03-09T15:55:09Z",
"updated_at": "2017-03-09T15:55:09Z"
} }
], ],
"pagination": { "pagination": {
"current_page": 2, "current_page": 2,
"per_page": 20, "per_page": 20,
"total_entries": 27, "total_entries": 28,
"total_pages": 2 "total_pages": 2
} }
} }

View File

@@ -86,6 +86,10 @@
{ {
"content": "\"have you any wool.\"", "content": "\"have you any wool.\"",
"disabled": false "disabled": false
},
{
"content": "\"v=DKIM1\\;k=rsa\\;s=email\\;h=sha256\\;p=A/kinda+of/long/string+with+numb3rs\"",
"disabled": false
} }
], ],
"ttl": 600, "ttl": 600,

View File

@@ -140,7 +140,7 @@ class TestCloudflareProvider(TestCase):
'id': 42, 'id': 42,
} }
}, # zone create }, # zone create
] + [None] * 15 # individual record creates ] + [None] * 16 # individual record creates
# non-existant zone, create everything # non-existant zone, create everything
plan = provider.plan(self.expected) plan = provider.plan(self.expected)
@@ -160,9 +160,16 @@ class TestCloudflareProvider(TestCase):
'name': 'under.unit.tests', 'name': 'under.unit.tests',
'ttl': 3600 'ttl': 3600
}), }),
]) # make sure semicolons are not escaped when sending data
call('POST', '/zones/42/dns_records', data={
'content': 'v=DKIM1;k=rsa;s=email;h=sha256;p=A/kinda+of/long/string+with+numb3rs',
'type': 'TXT',
'name': 'txt.unit.tests',
'ttl': 600
}),
], True)
# expected number of total calls # expected number of total calls
self.assertEquals(17, provider._request.call_count) self.assertEquals(18, provider._request.call_count)
provider._request.reset_mock() provider._request.reset_mock()

View File

@@ -147,7 +147,7 @@ class TestDnsimpleProvider(TestCase):
}), }),
]) ])
# expected number of total calls # expected number of total calls
self.assertEquals(25, provider._client._request.call_count) self.assertEquals(26, provider._client._request.call_count)
provider._client._request.reset_mock() provider._client._request.reset_mock()