Check S3_IGNORE_SUBDOMAIN_BUCKETNAME environment variable (#3796)

* Check S3_IGNORE_SUBDOMAIN_BUCKETNAME environment variable

* move S3_IGNORE_SUBDOMAIN_BUCKETNAME environment variable to settings
This commit is contained in:
Codeglitches 2021-03-26 17:51:19 +01:00 committed by GitHub
parent 1761be46e3
commit 9f9716ee01
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 30 additions and 9 deletions

View File

@ -27,6 +27,7 @@ from moto.packages.httpretty.core import HTTPrettyRequest
from moto.core.responses import _TemplateEnvironmentMixin, ActionAuthenticatorMixin
from moto.core.utils import path_url
from moto.core import ACCOUNT_ID
from moto.settings import S3_IGNORE_SUBDOMAIN_BUCKETNAME
from moto.s3bucket_path.utils import (
bucket_name_from_url as bucketpath_bucket_name_from_url,
@ -186,6 +187,8 @@ class ResponseObject(_TemplateEnvironmentMixin, ActionAuthenticatorMixin):
return template.render(buckets=all_buckets)
def subdomain_based_buckets(self, request):
if S3_IGNORE_SUBDOMAIN_BUCKETNAME:
return False
host = request.headers.get("host", request.headers.get("Host"))
if not host:
host = urlparse(request.url).netloc

View File

@ -1,12 +1,12 @@
from __future__ import unicode_literals
import logging
import os
import re
import six
from six.moves.urllib.parse import urlparse, unquote, quote
from requests.structures import CaseInsensitiveDict
import sys
from moto.settings import S3_IGNORE_SUBDOMAIN_BUCKETNAME
log = logging.getLogger(__name__)
@ -26,7 +26,7 @@ user_settable_fields = {
def bucket_name_from_url(url):
if os.environ.get("S3_IGNORE_SUBDOMAIN_BUCKETNAME", "") in ["1", "true"]:
if S3_IGNORE_SUBDOMAIN_BUCKETNAME:
return None
domain = urlparse(url).netloc

View File

@ -6,6 +6,10 @@ INITIAL_NO_AUTH_ACTION_COUNT = float(
)
DEFAULT_CONTAINER_REGISTRY = os.environ.get("DEFAULT_CONTAINER_REGISTRY", "docker.io")
S3_IGNORE_SUBDOMAIN_BUCKETNAME = os.environ.get(
"S3_IGNORE_SUBDOMAIN_BUCKETNAME", ""
) in ["1", "true"]
def get_sf_execution_history_type():
"""

5
tests/compat.py Normal file
View File

@ -0,0 +1,5 @@
try:
from unittest.mock import patch
except ImportError:
# for python 2.7
from mock import patch

View File

@ -1,5 +1,4 @@
from __future__ import unicode_literals
import os
import pytest
from sure import expect
from moto.s3.utils import (
@ -9,6 +8,7 @@ from moto.s3.utils import (
clean_key_name,
undo_clean_key_name,
)
from tests.compat import patch
def test_base_url():
@ -25,12 +25,11 @@ def test_localhost_without_bucket():
expect(bucket_name_from_url("https://www.localhost:5000/def")).should.equal(None)
def test_force_ignore_subdomain_for_bucketnames():
os.environ["S3_IGNORE_SUBDOMAIN_BUCKETNAME"] = "1"
expect(
bucket_name_from_url("https://subdomain.localhost:5000/abc/resource")
).should.equal(None)
del os.environ["S3_IGNORE_SUBDOMAIN_BUCKETNAME"]
def test_force_ignore_subdomain_for_bucketnames(monkeypatch):
with patch("moto.s3.utils.S3_IGNORE_SUBDOMAIN_BUCKETNAME", True):
expect(
bucket_name_from_url("https://subdomain.localhost:5000/abc/resource")
).should.equal(None)
def test_versioned_key_store():

View File

@ -7,6 +7,7 @@ import sure # noqa
from flask.testing import FlaskClient
import moto.server as server
from tests.compat import patch
"""
Test the different server responses
@ -56,6 +57,15 @@ def test_s3_server_bucket_create():
res.data.should.equal(b"test value")
def test_s3_server_ignore_subdomain_for_bucketnames():
with patch("moto.s3.responses.S3_IGNORE_SUBDOMAIN_BUCKETNAME", True):
test_client = authenticated_client()
res = test_client.put("/mybucket", "http://foobaz.localhost:5000/")
res.status_code.should.equal(200)
res.data.should.contain(b"mybucket")
def test_s3_server_bucket_versioning():
test_client = authenticated_client()