Skip to content

Commit 4fcf7d1

Browse files
committed
feat: reorg config for better customization
1 parent ac981ce commit 4fcf7d1

File tree

2 files changed

+38
-15
lines changed

2 files changed

+38
-15
lines changed

src/stac_auth_proxy/app.py

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,25 +21,25 @@ def create_app(settings: Optional[Settings] = None) -> FastAPI:
2121
app = FastAPI(openapi_url=None)
2222
app.add_middleware(AddProcessTimeHeaderMiddleware)
2323

24-
open_id_connect_scheme = OpenIdConnect(
24+
auth_scheme = OpenIdConnect(
2525
openIdConnectUrl=str(settings.oidc_discovery_url),
2626
scheme_name="OpenID Connect",
2727
description="OpenID Connect authentication for STAC API access",
2828
)
2929

3030
proxy = ReverseProxy(upstream=str(settings.upstream_url))
3131

32-
# Transactions Extension Endpoins
33-
for path, methods in {
34-
# https://github.com/stac-api-extensions/collection-transaction/blob/v1.0.0-beta.1/README.md#methods
35-
"/collections": ["POST"],
36-
"/collections/{collection_id}": ["PUT", "PATCH", "DELETE"],
37-
# https://github.com/stac-api-extensions/transaction/blob/v1.0.0-rc.3/README.md#methods
38-
"/collections/{collection_id}/items": ["POST"],
39-
"/collections/{collection_id}/items/{item_id}": ["PUT", "PATCH", "DELETE"],
40-
# https://stac-utils.github.io/stac-fastapi/api/stac_fastapi/extensions/third_party/bulk_transactions/#bulktransactionextension
41-
"/collections/{collection_id}/bulk_items": ["POST"],
42-
}.items():
32+
# Endpoints that are explicitely marked private
33+
for path, methods in settings.private_endpoints.items():
34+
app.add_api_route(
35+
path,
36+
proxy.stream,
37+
methods=methods,
38+
dependencies=[Depends(auth_scheme)],
39+
)
40+
41+
# Endpoints that are explicitely marked as public
42+
for path, methods in settings.public_endpoints.items():
4343
app.add_api_route(
4444
path,
4545
proxy.stream,
@@ -56,7 +56,12 @@ def create_app(settings: Optional[Settings] = None) -> FastAPI:
5656
methods=["GET"],
5757
)
5858

59-
# Catchall proxy
60-
app.add_route("/{path:path}", proxy.stream)
59+
# Catchall for remainder of the endpoints
60+
app.add_api_route(
61+
"/{path:path}",
62+
proxy.stream,
63+
methods=["GET", "POST", "PUT", "PATCH", "DELETE"],
64+
dependencies=([] if settings.default_public else [Depends(auth_scheme)]),
65+
)
6166

6267
return app

src/stac_auth_proxy/config.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,29 @@
1-
from typing import Optional
1+
from typing import Optional, TypeAlias
2+
3+
from pydantic import Json
24
from pydantic.networks import HttpUrl
35
from pydantic_settings import BaseSettings
46

7+
EndpointMethods: TypeAlias = dict[str, list[str]]
8+
59

610
class Settings(BaseSettings):
711
upstream_url: HttpUrl = "https://earth-search.aws.element84.com/v1"
812
oidc_discovery_url: HttpUrl
13+
14+
# Endpoints
15+
default_public: bool = False
16+
private_endpoints: EndpointMethods = {
17+
# https://github.com/stac-api-extensions/collection-transaction/blob/v1.0.0-beta.1/README.md#methods
18+
"/collections": ["POST"],
19+
"/collections/{collection_id}": ["PUT", "PATCH", "DELETE"],
20+
# https://github.com/stac-api-extensions/transaction/blob/v1.0.0-rc.3/README.md#methods
21+
"/collections/{collection_id}/items": ["POST"],
22+
"/collections/{collection_id}/items/{item_id}": ["PUT", "PATCH", "DELETE"],
23+
# https://stac-utils.github.io/stac-fastapi/api/stac_fastapi/extensions/third_party/bulk_transactions/#bulktransactionextension
24+
"/collections/{collection_id}/bulk_items": ["POST"],
25+
}
26+
public_endpoints: EndpointMethods = {"/api.html": ["GET"]}
927
openapi_spec_endpoint: Optional[str] = None
1028

1129
class Config:

0 commit comments

Comments
 (0)