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.responses import _TemplateEnvironmentMixin, ActionAuthenticatorMixin
|
||||||
from moto.core.utils import path_url
|
from moto.core.utils import path_url
|
||||||
from moto.core import ACCOUNT_ID
|
from moto.core import ACCOUNT_ID
|
||||||
|
from moto.settings import S3_IGNORE_SUBDOMAIN_BUCKETNAME
|
||||||
|
|
||||||
from moto.s3bucket_path.utils import (
|
from moto.s3bucket_path.utils import (
|
||||||
bucket_name_from_url as bucketpath_bucket_name_from_url,
|
bucket_name_from_url as bucketpath_bucket_name_from_url,
|
||||||
@ -186,6 +187,8 @@ class ResponseObject(_TemplateEnvironmentMixin, ActionAuthenticatorMixin):
|
|||||||
return template.render(buckets=all_buckets)
|
return template.render(buckets=all_buckets)
|
||||||
|
|
||||||
def subdomain_based_buckets(self, request):
|
def subdomain_based_buckets(self, request):
|
||||||
|
if S3_IGNORE_SUBDOMAIN_BUCKETNAME:
|
||||||
|
return False
|
||||||
host = request.headers.get("host", request.headers.get("Host"))
|
host = request.headers.get("host", request.headers.get("Host"))
|
||||||
if not host:
|
if not host:
|
||||||
host = urlparse(request.url).netloc
|
host = urlparse(request.url).netloc
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
import logging
|
import logging
|
||||||
import os
|
|
||||||
|
|
||||||
import re
|
import re
|
||||||
import six
|
import six
|
||||||
from six.moves.urllib.parse import urlparse, unquote, quote
|
from six.moves.urllib.parse import urlparse, unquote, quote
|
||||||
from requests.structures import CaseInsensitiveDict
|
from requests.structures import CaseInsensitiveDict
|
||||||
import sys
|
import sys
|
||||||
|
from moto.settings import S3_IGNORE_SUBDOMAIN_BUCKETNAME
|
||||||
|
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
@ -26,7 +26,7 @@ user_settable_fields = {
|
|||||||
|
|
||||||
|
|
||||||
def bucket_name_from_url(url):
|
def bucket_name_from_url(url):
|
||||||
if os.environ.get("S3_IGNORE_SUBDOMAIN_BUCKETNAME", "") in ["1", "true"]:
|
if S3_IGNORE_SUBDOMAIN_BUCKETNAME:
|
||||||
return None
|
return None
|
||||||
domain = urlparse(url).netloc
|
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")
|
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():
|
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
|
from __future__ import unicode_literals
|
||||||
import os
|
|
||||||
import pytest
|
import pytest
|
||||||
from sure import expect
|
from sure import expect
|
||||||
from moto.s3.utils import (
|
from moto.s3.utils import (
|
||||||
@ -9,6 +8,7 @@ from moto.s3.utils import (
|
|||||||
clean_key_name,
|
clean_key_name,
|
||||||
undo_clean_key_name,
|
undo_clean_key_name,
|
||||||
)
|
)
|
||||||
|
from tests.compat import patch
|
||||||
|
|
||||||
|
|
||||||
def test_base_url():
|
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)
|
expect(bucket_name_from_url("https://www.localhost:5000/def")).should.equal(None)
|
||||||
|
|
||||||
|
|
||||||
def test_force_ignore_subdomain_for_bucketnames():
|
def test_force_ignore_subdomain_for_bucketnames(monkeypatch):
|
||||||
os.environ["S3_IGNORE_SUBDOMAIN_BUCKETNAME"] = "1"
|
with patch("moto.s3.utils.S3_IGNORE_SUBDOMAIN_BUCKETNAME", True):
|
||||||
expect(
|
expect(
|
||||||
bucket_name_from_url("https://subdomain.localhost:5000/abc/resource")
|
bucket_name_from_url("https://subdomain.localhost:5000/abc/resource")
|
||||||
).should.equal(None)
|
).should.equal(None)
|
||||||
del os.environ["S3_IGNORE_SUBDOMAIN_BUCKETNAME"]
|
|
||||||
|
|
||||||
|
|
||||||
def test_versioned_key_store():
|
def test_versioned_key_store():
|
||||||
|
@ -7,6 +7,7 @@ import sure # noqa
|
|||||||
|
|
||||||
from flask.testing import FlaskClient
|
from flask.testing import FlaskClient
|
||||||
import moto.server as server
|
import moto.server as server
|
||||||
|
from tests.compat import patch
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Test the different server responses
|
Test the different server responses
|
||||||
@ -56,6 +57,15 @@ def test_s3_server_bucket_create():
|
|||||||
res.data.should.equal(b"test value")
|
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():
|
def test_s3_server_bucket_versioning():
|
||||||
test_client = authenticated_client()
|
test_client = authenticated_client()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user