

feat: token based auth
@74352bca5c5a897af79acf100c0fbcbdebed2670
--- src/faster_whisper_server/config.py
+++ src/faster_whisper_server/config.py
... | ... | @@ -180,6 +180,7 @@ |
180 | 180 |
|
181 | 181 |
model_config = SettingsConfigDict(env_nested_delimiter="__") |
182 | 182 |
|
183 |
+ api_key: str | None = None |
|
183 | 184 |
log_level: str = "debug" |
184 | 185 |
host: str = Field(alias="UVICORN_HOST", default="0.0.0.0") |
185 | 186 |
port: int = Field(alias="UVICORN_PORT", default=8000) |
--- src/faster_whisper_server/dependencies.py
+++ src/faster_whisper_server/dependencies.py
... | ... | @@ -1,7 +1,8 @@ |
1 | 1 |
from functools import lru_cache |
2 | 2 |
from typing import Annotated |
3 | 3 |
|
4 |
-from fastapi import Depends |
|
4 |
+from fastapi import Depends, HTTPException, status |
|
5 |
+from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer |
|
5 | 6 |
|
6 | 7 |
from faster_whisper_server.config import Config |
7 | 8 |
from faster_whisper_server.model_manager import PiperModelManager, WhisperModelManager |
... | ... | @@ -31,3 +32,16 @@ |
31 | 32 |
|
32 | 33 |
|
33 | 34 |
PiperModelManagerDependency = Annotated[PiperModelManager, Depends(get_piper_model_manager)] |
35 |
+ |
|
36 |
+ |
|
37 |
+security = HTTPBearer() |
|
38 |
+ |
|
39 |
+ |
|
40 |
+async def verify_api_key( |
|
41 |
+ config: ConfigDependency, credentials: Annotated[HTTPAuthorizationCredentials, Depends(security)] |
|
42 |
+) -> None: |
|
43 |
+ if credentials.credentials != config.api_key: |
|
44 |
+ raise HTTPException(status_code=status.HTTP_403_FORBIDDEN) |
|
45 |
+ |
|
46 |
+ |
|
47 |
+ApiKeyDependency = Depends(verify_api_key) |
--- src/faster_whisper_server/main.py
+++ src/faster_whisper_server/main.py
... | ... | @@ -10,7 +10,7 @@ |
10 | 10 |
) |
11 | 11 |
from fastapi.middleware.cors import CORSMiddleware |
12 | 12 |
|
13 |
-from faster_whisper_server.dependencies import get_config, get_model_manager |
|
13 |
+from faster_whisper_server.dependencies import get_config, get_model_manager, verify_api_key |
|
14 | 14 |
from faster_whisper_server.logger import setup_logger |
15 | 15 |
from faster_whisper_server.routers.list_models import ( |
16 | 16 |
router as list_models_router, |
... | ... | @@ -50,7 +50,11 @@ |
50 | 50 |
model_manager.load_model(model_name) |
51 | 51 |
yield |
52 | 52 |
|
53 |
- app = FastAPI(lifespan=lifespan) |
|
53 |
+ dependencies = [] |
|
54 |
+ if config.api_key is not None: |
|
55 |
+ dependencies.append(verify_api_key) |
|
56 |
+ |
|
57 |
+ app = FastAPI(lifespan=lifespan, dependencies=dependencies) |
|
54 | 58 |
|
55 | 59 |
app.include_router(stt_router) |
56 | 60 |
app.include_router(list_models_router) |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?