@@ -281,9 +281,9 @@ def test_check_rrset_not_allowed_single_entries():
281281 ],
282282 )
283283 for item in [
284- 'entry1 .test-zone.example.com.' ,
285- 'entry2 .entry1.test-zone.example.com' ,
286- 'test-zone .example.com.' ,
284+ 'entry100 .test-zone.example.com.' ,
285+ 'entry200 .entry1.test-zone.example.com' ,
286+ 'test-record .example.com.' ,
287287 ]:
288288 rrset : RRSET = {
289289 'name' : item ,
@@ -293,7 +293,7 @@ def test_check_rrset_not_allowed_single_entries():
293293 'records' : [],
294294 'comments' : [],
295295 }
296- assert check_rrset_allowed (zone , rrset )
296+ assert not check_rrset_allowed (zone , rrset )
297297
298298
299299def test_check_rrsets_request_allowed_no_raise ():
@@ -348,8 +348,8 @@ def test_check_rrsets_request_allowed_raise():
348348 )
349349 with pytest .raises (HTTPException ) as err :
350350 ensure_rrsets_request_allowed (zone , request )
351- assert err .value .status_code == 403
352- assert err .value .detail == 'RRSET entry1.test-zone.example.com. not allowed'
351+ assert err .value .status_code == 403
352+ assert err .value .detail == 'RRSET entry1.test-zone.example.com. not allowed'
353353
354354
355355def test_check_rrsets_request_not_allowed_read_only ():
@@ -378,6 +378,119 @@ def test_check_rrsets_request_not_allowed_read_only():
378378 assert err .value .detail == 'RRSET update not allowed with read only token'
379379
380380
381+ def test_rrset_request_not_allowed_regex_empty ():
382+ zone = ProxyConfigZone (
383+ name = 'test-zone.example.com.' ,
384+ regex_records = [],
385+ )
386+ request : RRSETRequest = {'rrsets' : []}
387+ assert ensure_rrsets_request_allowed (zone , request )
388+
389+
390+ def test_rrset_request_allowed_all_regex ():
391+ zone = ProxyConfigZone (
392+ name = 'test-zone.example.com.' ,
393+ regex_records = [
394+ '.*' ,
395+ ],
396+ )
397+ request : RRSETRequest = {'rrsets' : []}
398+ for item in [
399+ 'entry1.test-zone.example.com.' ,
400+ 'entry2.entry1.test-zone.example.com' ,
401+ ]:
402+ request ['rrsets' ].append (
403+ {
404+ 'name' : item ,
405+ 'type' : 'TXT' ,
406+ 'changetype' : 'REPLACE' ,
407+ 'ttl' : 3600 ,
408+ 'records' : [],
409+ 'comments' : [],
410+ }
411+ )
412+ assert ensure_rrsets_request_allowed (zone , request )
413+
414+
415+ def test_rrset_request_allowed_acme_regex ():
416+ zone = ProxyConfigZone (
417+ name = 'test-zone.example.com.' ,
418+ regex_records = [
419+ '_acme-challenge.example.*.test-zone.example.com' ,
420+ ],
421+ )
422+ request : RRSETRequest = {'rrsets' : []}
423+ for item in [
424+ '_acme-challenge.example-entry.test-zone.example.com.' ,
425+ ]:
426+ request ['rrsets' ].append (
427+ {
428+ 'name' : item ,
429+ 'type' : 'TXT' ,
430+ 'changetype' : 'REPLACE' ,
431+ 'ttl' : 3600 ,
432+ 'records' : [],
433+ 'comments' : [],
434+ }
435+ )
436+ assert ensure_rrsets_request_allowed (zone , request )
437+
438+
439+ def test_rrset_request_not_allowed_false_regex ():
440+ zone = ProxyConfigZone (
441+ name = 'test-zone.example.com.' ,
442+ regex_records = [
443+ 'example.*.test-zone.example.com' ,
444+ ],
445+ )
446+ request : RRSETRequest = {'rrsets' : []}
447+ for item in [
448+ 'entry1.test-zone.example.com.' ,
449+ 'entry2.entry1.test-zone.example.com' ,
450+ ]:
451+ request ['rrsets' ].append (
452+ {
453+ 'name' : item ,
454+ 'type' : 'TXT' ,
455+ 'changetype' : 'REPLACE' ,
456+ 'ttl' : 3600 ,
457+ 'records' : [],
458+ 'comments' : [],
459+ }
460+ )
461+ with pytest .raises (HTTPException ) as err :
462+ ensure_rrsets_request_allowed (zone , request )
463+ assert err .value .status_code == 403
464+ assert err .value .detail == 'RRSET entry1.test-zone.example.com. not allowed'
465+
466+
467+ def test_rrset_request_not_allowed_false_zone ():
468+ zone = ProxyConfigZone (
469+ name = 'test-zone.example.com.' ,
470+ regex_records = [
471+ 'example.*.test-zone2.example.com' ,
472+ ],
473+ )
474+ request : RRSETRequest = {'rrsets' : []}
475+ for item in [
476+ 'example1.test-zone2.example.com.' ,
477+ ]:
478+ request ['rrsets' ].append (
479+ {
480+ 'name' : item ,
481+ 'type' : 'TXT' ,
482+ 'changetype' : 'REPLACE' ,
483+ 'ttl' : 3600 ,
484+ 'records' : [],
485+ 'comments' : [],
486+ }
487+ )
488+ with pytest .raises (HTTPException ) as err :
489+ ensure_rrsets_request_allowed (zone , request )
490+ assert err .value .status_code == 403
491+ assert err .value .detail == 'RRSET example1.test-zone2.example.com. not allowed'
492+
493+
381494def test_check_acme_record_allowed_all_records ():
382495 zone = ProxyConfigZone (name = 'test-zone.example.com' , all_records = True )
383496 rrset = RRSET (
0 commit comments