mirror of
https://github.com/aljazceru/CTFd.git
synced 2025-12-18 14:34:21 +01:00
Add S3 region support (#2188)
Co-authored-by: Smyler <smyler@hackademint.org>
This commit is contained in:
@@ -129,6 +129,10 @@ AWS_S3_BUCKET =
|
|||||||
# A URL pointing to a custom S3 implementation. Only used under the s3 uploader.
|
# A URL pointing to a custom S3 implementation. Only used under the s3 uploader.
|
||||||
AWS_S3_ENDPOINT_URL =
|
AWS_S3_ENDPOINT_URL =
|
||||||
|
|
||||||
|
# AWS_S3_REGION
|
||||||
|
# The aws region that hosts your bucket. Only used in the s3 uploader.
|
||||||
|
AWS_S3_REGION =
|
||||||
|
|
||||||
[logs]
|
[logs]
|
||||||
# LOG_FOLDER
|
# LOG_FOLDER
|
||||||
# The location where logs are written. These are the logs for CTFd key submissions, registrations, and logins. The default location is the CTFd/logs folder.
|
# The location where logs are written. These are the logs for CTFd key submissions, registrations, and logins. The default location is the CTFd/logs folder.
|
||||||
|
|||||||
@@ -174,6 +174,8 @@ class ServerConfig(object):
|
|||||||
|
|
||||||
AWS_S3_ENDPOINT_URL: str = empty_str_cast(config_ini["uploads"]["AWS_S3_ENDPOINT_URL"])
|
AWS_S3_ENDPOINT_URL: str = empty_str_cast(config_ini["uploads"]["AWS_S3_ENDPOINT_URL"])
|
||||||
|
|
||||||
|
AWS_S3_REGION: str = empty_str_cast(config_ini["uploads"]["AWS_S3_REGION"])
|
||||||
|
|
||||||
# === OPTIONAL ===
|
# === OPTIONAL ===
|
||||||
REVERSE_PROXY: Union[str, bool] = empty_str_cast(config_ini["optional"]["REVERSE_PROXY"], default=False)
|
REVERSE_PROXY: Union[str, bool] = empty_str_cast(config_ini["optional"]["REVERSE_PROXY"], default=False)
|
||||||
|
|
||||||
|
|||||||
@@ -85,12 +85,14 @@ class S3Uploader(BaseUploader):
|
|||||||
access_key = get_app_config("AWS_ACCESS_KEY_ID")
|
access_key = get_app_config("AWS_ACCESS_KEY_ID")
|
||||||
secret_key = get_app_config("AWS_SECRET_ACCESS_KEY")
|
secret_key = get_app_config("AWS_SECRET_ACCESS_KEY")
|
||||||
endpoint = get_app_config("AWS_S3_ENDPOINT_URL")
|
endpoint = get_app_config("AWS_S3_ENDPOINT_URL")
|
||||||
|
region = get_app_config("AWS_S3_REGION")
|
||||||
client = boto3.client(
|
client = boto3.client(
|
||||||
"s3",
|
"s3",
|
||||||
config=Config(signature_version="s3v4"),
|
config=Config(signature_version="s3v4"),
|
||||||
aws_access_key_id=access_key,
|
aws_access_key_id=access_key,
|
||||||
aws_secret_access_key=secret_key,
|
aws_secret_access_key=secret_key,
|
||||||
endpoint_url=endpoint,
|
endpoint_url=endpoint,
|
||||||
|
region_name=region,
|
||||||
)
|
)
|
||||||
return client
|
return client
|
||||||
|
|
||||||
|
|||||||
@@ -10,8 +10,10 @@ from tests.helpers import create_ctfd, destroy_ctfd
|
|||||||
|
|
||||||
@mock_s3
|
@mock_s3
|
||||||
def test_s3_uploader():
|
def test_s3_uploader():
|
||||||
conn = boto3.resource("s3", region_name="us-east-1")
|
conn = boto3.resource("s3", region_name="test-region")
|
||||||
conn.create_bucket(Bucket="bucket")
|
conn.create_bucket(
|
||||||
|
Bucket="bucket", CreateBucketConfiguration={"LocationConstraint": "test-region"}
|
||||||
|
)
|
||||||
|
|
||||||
app = create_ctfd()
|
app = create_ctfd()
|
||||||
with app.app_context():
|
with app.app_context():
|
||||||
@@ -19,6 +21,7 @@ def test_s3_uploader():
|
|||||||
app.config["AWS_ACCESS_KEY_ID"] = "AKIAIOSFODNN7EXAMPLE"
|
app.config["AWS_ACCESS_KEY_ID"] = "AKIAIOSFODNN7EXAMPLE"
|
||||||
app.config["AWS_SECRET_ACCESS_KEY"] = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
|
app.config["AWS_SECRET_ACCESS_KEY"] = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
|
||||||
app.config["AWS_S3_BUCKET"] = "bucket"
|
app.config["AWS_S3_BUCKET"] = "bucket"
|
||||||
|
app.config["AWS_S3_REGION"] = "test-region"
|
||||||
|
|
||||||
uploader = S3Uploader()
|
uploader = S3Uploader()
|
||||||
|
|
||||||
@@ -34,8 +37,10 @@ def test_s3_uploader():
|
|||||||
|
|
||||||
@mock_s3
|
@mock_s3
|
||||||
def test_s3_sync():
|
def test_s3_sync():
|
||||||
conn = boto3.resource("s3", region_name="us-east-1")
|
conn = boto3.resource("s3", region_name="test-region")
|
||||||
conn.create_bucket(Bucket="bucket")
|
conn.create_bucket(
|
||||||
|
Bucket="bucket", CreateBucketConfiguration={"LocationConstraint": "test-region"}
|
||||||
|
)
|
||||||
|
|
||||||
app = create_ctfd()
|
app = create_ctfd()
|
||||||
with app.app_context():
|
with app.app_context():
|
||||||
@@ -43,6 +48,7 @@ def test_s3_sync():
|
|||||||
app.config["AWS_ACCESS_KEY_ID"] = "AKIAIOSFODNN7EXAMPLE"
|
app.config["AWS_ACCESS_KEY_ID"] = "AKIAIOSFODNN7EXAMPLE"
|
||||||
app.config["AWS_SECRET_ACCESS_KEY"] = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
|
app.config["AWS_SECRET_ACCESS_KEY"] = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
|
||||||
app.config["AWS_S3_BUCKET"] = "bucket"
|
app.config["AWS_S3_BUCKET"] = "bucket"
|
||||||
|
app.config["AWS_S3_REGION"] = "test-region"
|
||||||
|
|
||||||
uploader = S3Uploader()
|
uploader = S3Uploader()
|
||||||
uploader.sync()
|
uploader.sync()
|
||||||
|
|||||||
Reference in New Issue
Block a user