Subdomains use HTTPS if settings specify

remove-default-role
David Fischer 2018-04-20 13:09:16 -07:00
parent be4ff5b9c4
commit 89e59e54ed
No known key found for this signature in database
GPG Key ID: F0C9B0ADA737AB60
4 changed files with 34 additions and 1 deletions

View File

@ -83,6 +83,17 @@ Default: :djangosetting:`PUBLIC_DOMAIN`
A special domain for serving public documentation.
If set, public docs will be linked here instead of the `PRODUCTION_DOMAIN`.
PUBLIC_DOMAIN_USES_HTTPS
------------------------
Default: ``False``
If ``True`` and ``PUBLIC_DOMAIN`` is set, that domain will default to
serving public documentation over HTTPS. By default, documentation is
served over HTTP.
ALLOW_ADMIN
-----------

View File

@ -144,9 +144,17 @@ class ResolverBase(object):
version_slug = project.get_default_version()
private = self._get_private(project, version_slug)
domain = self.resolve_domain(project, private=private)
# Use HTTPS if settings specify
public_domain = getattr(settings, 'PUBLIC_DOMAIN', None)
use_https = getattr(settings, 'PUBLIC_DOMAIN_USES_HTTPS', False)
if use_https and public_domain and public_domain in domain:
protocol = 'https'
return '{protocol}://{domain}{path}'.format(
protocol=protocol,
domain=self.resolve_domain(project, private=private),
domain=domain,
path=self.resolve_path(project, filename=filename, private=private,
**kwargs),
)

View File

@ -488,6 +488,19 @@ class ResolverTests(ResolverBase):
url = resolve(project=self.pip, private=False)
self.assertEqual(url, 'http://docs.foobar.com/en/latest/')
@override_settings(
PRODUCTION_DOMAIN='readthedocs.org',
PUBLIC_DOMAIN='readthedocs.io',
PUBLIC_DOMAIN_USES_HTTPS=True,
USE_SUBDOMAIN=True,
)
def test_resolver_domain_https(self):
url = resolve(project=self.pip, private=True)
self.assertEqual(url, 'https://pip.readthedocs.io/en/latest/')
url = resolve(project=self.pip, private=False)
self.assertEqual(url, 'https://pip.readthedocs.io/en/latest/')
class ResolverAltSetUp(object):

View File

@ -42,6 +42,7 @@ class CommunityBaseSettings(Settings):
# Domains and URLs
PRODUCTION_DOMAIN = 'readthedocs.org'
PUBLIC_DOMAIN = None
PUBLIC_DOMAIN_USES_HTTPS = False
USE_SUBDOMAIN = False
PUBLIC_API_URL = 'https://{0}'.format(PRODUCTION_DOMAIN)