Skip to content

Commit 657240d

Browse files
add CORS configuration via env variables (#168)
* add CORS configuration via env variables * edit CI
1 parent 4bb5e0f commit 657240d

File tree

5 files changed

+37
-3
lines changed

5 files changed

+37
-3
lines changed

.github/workflows/cicd.yaml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
name: stac-fastapi
22
on:
33
push:
4-
branches: [main]
4+
branches:
5+
- main
6+
- maint-3.0.x
57
pull_request:
6-
branches: [main]
8+
branches:
9+
- main
10+
- maint-3.0.x
711

812

913
jobs:

.github/workflows/packages.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ on:
33
push:
44
branches:
55
- main
6+
- maint-3.0.x
67
tags:
78
- "*"
89
workflow_dispatch:

CHANGES.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
## [Unreleased]
44

5+
## [3.0.1] - 2024-11-14
6+
7+
- Enable runtime `CORS` configuration using environment variables (`CORS_ORIGIN="https://...,https://..."`, `CORS_METHODS="PUT,OPTIONS"`)
8+
59
## [3.0.0] - 2024-08-02
610

711
- Enable filter extension for `GET /items` requests and add `Queryables` links in `/collections` and `/collections/{collection_id}` responses ([#89](https://github.com/stac-utils/stac-fastapi-pgstac/pull/89))

stac_fastapi/pgstac/app.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@
77

88
import os
99

10+
from brotli_asgi import BrotliMiddleware
1011
from fastapi.responses import ORJSONResponse
1112
from stac_fastapi.api.app import StacApi
13+
from stac_fastapi.api.middleware import CORSMiddleware, ProxyHeaderMiddleware
1214
from stac_fastapi.api.models import (
1315
ItemCollectionUri,
1416
create_get_request_model,
@@ -23,6 +25,7 @@
2325
TransactionExtension,
2426
)
2527
from stac_fastapi.extensions.third_party import BulkTransactionExtension
28+
from starlette.middleware import Middleware
2629

2730
from stac_fastapi.pgstac.config import Settings
2831
from stac_fastapi.pgstac.core import CoreCrudClient
@@ -75,6 +78,15 @@
7578
items_get_request_model=items_get_request_model,
7679
search_get_request_model=get_request_model,
7780
search_post_request_model=post_request_model,
81+
middlewares=[
82+
Middleware(BrotliMiddleware),
83+
Middleware(ProxyHeaderMiddleware),
84+
Middleware(
85+
CORSMiddleware,
86+
allow_origins=settings.cors_origins,
87+
allow_methods=settings.cors_methods,
88+
),
89+
],
7890
)
7991
app = api.app
8092

stac_fastapi/pgstac/config.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from typing import List, Type
44
from urllib.parse import quote_plus as quote
55

6-
from pydantic import BaseModel
6+
from pydantic import BaseModel, field_validator
77
from pydantic_settings import SettingsConfigDict
88
from stac_fastapi.types.config import ApiSettings
99

@@ -75,8 +75,21 @@ class Settings(ApiSettings):
7575
base_item_cache: Type[BaseItemCache] = DefaultBaseItemCache
7676
invalid_id_chars: List[str] = DEFAULT_INVALID_ID_CHARS
7777

78+
cors_origins: str = "*"
79+
cors_methods: str = "GET,POST,OPTIONS"
80+
7881
testing: bool = False
7982

83+
@field_validator("cors_origins")
84+
def parse_cors_origin(cls, v):
85+
"""Parse CORS origins."""
86+
return [origin.strip() for origin in v.split(",")]
87+
88+
@field_validator("cors_methods")
89+
def parse_cors_methods(cls, v):
90+
"""Parse CORS methods."""
91+
return [method.strip() for method in v.split(",")]
92+
8093
@property
8194
def reader_connection_string(self):
8295
"""Create reader psql connection string."""

0 commit comments

Comments
 (0)