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:
parent
1761be46e3
commit
9f9716ee01
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
5
tests/compat.py
Normal file
@ -0,0 +1,5 @@
|
||||
try:
|
||||
from unittest.mock import patch
|
||||
except ImportError:
|
||||
# for python 2.7
|
||||
from mock import patch
|
@ -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():
|
||||
|
@ -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()
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user