File tree 2 files changed +21
-2
lines changed
2 files changed +21
-2
lines changed Original file line number Diff line number Diff line change @@ -818,8 +818,15 @@ def clean_domain(self):
818
818
819
819
domain_string = parsed .netloc
820
820
821
- # Don't allow production or public domain to be set as custom domain
822
- for invalid_domain in [settings .PRODUCTION_DOMAIN , settings .PUBLIC_DOMAIN ]:
821
+ # Don't allow internal domains to be added, we have:
822
+ # - Dashboard domain
823
+ # - Public domain (from where documentation pages are served)
824
+ # - External version domain (from where PR previews are served)
825
+ for invalid_domain in [
826
+ settings .PRODUCTION_DOMAIN ,
827
+ settings .PUBLIC_DOMAIN ,
828
+ settings .RTD_EXTERNAL_VERSION_DOMAIN ,
829
+ ]:
823
830
if invalid_domain and domain_string .endswith (invalid_domain ):
824
831
raise forms .ValidationError (
825
832
f'{ invalid_domain } is not a valid domain.'
Original file line number Diff line number Diff line change @@ -92,6 +92,18 @@ def test_public_domain_not_allowed(self):
92
92
f"{ settings .PUBLIC_DOMAIN } is not a valid domain." ,
93
93
)
94
94
95
+ @override_settings (RTD_EXTERNAL_VERSION_DOMAIN = "readthedocs.build" )
96
+ def test_external_domain_not_allowed (self ):
97
+ for domain in ["readthedocs.build" , "test.readthedocs.build" ]:
98
+ form = DomainForm (
99
+ {"domain" : domain },
100
+ project = self .project ,
101
+ )
102
+ self .assertFalse (form .is_valid ())
103
+ self .assertEqual (
104
+ form .errors ["domain" ][0 ], "readthedocs.build is not a valid domain."
105
+ )
106
+
95
107
def test_domain_with_path (self ):
96
108
form = DomainForm (
97
109
{"domain" : "domain.com/foo/bar" },
You can’t perform that action at this time.
0 commit comments