HariLogicgo commited on
Commit
033a45d
·
1 Parent(s): 078d18a

added authorization

Browse files
Files changed (1) hide show
  1. app.py +18 -6
app.py CHANGED
@@ -12,8 +12,9 @@ import insightface
12
  from insightface.app import FaceAnalysis
13
  from huggingface_hub import hf_hub_download
14
 
15
- from fastapi import FastAPI, UploadFile, File, HTTPException, Response
16
  from fastapi.responses import RedirectResponse
 
17
  from pydantic import BaseModel
18
  from motor.motor_asyncio import AsyncIOMotorClient, AsyncIOMotorGridFSBucket
19
  from bson import ObjectId
@@ -127,6 +128,17 @@ async def shutdown_db():
127
  client.close()
128
  logger.info("MongoDB connection closed")
129
 
 
 
 
 
 
 
 
 
 
 
 
130
  # -------------------------------------------------
131
  # Lock for face swap
132
  # -------------------------------------------------
@@ -209,13 +221,13 @@ async def health():
209
  return {"status": "healthy"}
210
 
211
  @fastapi_app.post("/source")
212
- async def upload_source(image: UploadFile = File(...)):
213
  contents = await image.read()
214
  file_id = await fs_bucket.upload_from_stream(image.filename, contents, metadata={"type": "source"})
215
  return {"source_id": str(file_id)}
216
 
217
  @fastapi_app.get("/targets")
218
- async def list_targets():
219
  files = []
220
  async for file in database.fs.files.find({"metadata.type": "target", "metadata.predefined": True}):
221
  files.append({
@@ -225,7 +237,7 @@ async def list_targets():
225
  return {"targets": files}
226
 
227
  @fastapi_app.post("/target")
228
- async def upload_target(image: UploadFile = File(...)):
229
  contents = await image.read()
230
  file_id = await fs_bucket.upload_from_stream(image.filename, contents, metadata={"type": "target"})
231
  return {"target_id": str(file_id)}
@@ -235,7 +247,7 @@ class FaceSwapRequest(BaseModel):
235
  target_id: str
236
 
237
  @fastapi_app.post("/faceswap")
238
- async def perform_faceswap(request: FaceSwapRequest):
239
  try:
240
  src_stream = await fs_bucket.open_download_stream(ObjectId(request.source_id))
241
  src_bytes = await src_stream.read()
@@ -266,7 +278,7 @@ async def perform_faceswap(request: FaceSwapRequest):
266
  return {"result_id": str(result_id)}
267
 
268
  @fastapi_app.get("/download/{result_id}")
269
- async def download_result(result_id: str):
270
  try:
271
  stream = await fs_bucket.open_download_stream(ObjectId(result_id))
272
  data = await stream.read()
 
12
  from insightface.app import FaceAnalysis
13
  from huggingface_hub import hf_hub_download
14
 
15
+ from fastapi import FastAPI, UploadFile, File, HTTPException, Response, Depends, Security
16
  from fastapi.responses import RedirectResponse
17
+ from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
18
  from pydantic import BaseModel
19
  from motor.motor_asyncio import AsyncIOMotorClient, AsyncIOMotorGridFSBucket
20
  from bson import ObjectId
 
128
  client.close()
129
  logger.info("MongoDB connection closed")
130
 
131
+ # -------------------------------------------------
132
+ # Auth Setup
133
+ # -------------------------------------------------
134
+ security = HTTPBearer()
135
+ API_SECRET_TOKEN = os.getenv("API_SECRET_TOKEN")
136
+
137
+ def verify_token(credentials: HTTPAuthorizationCredentials = Security(security)):
138
+ if credentials.credentials != API_SECRET_TOKEN:
139
+ raise HTTPException(status_code=401, detail="Invalid or missing token")
140
+ return credentials.credentials
141
+
142
  # -------------------------------------------------
143
  # Lock for face swap
144
  # -------------------------------------------------
 
221
  return {"status": "healthy"}
222
 
223
  @fastapi_app.post("/source")
224
+ async def upload_source(image: UploadFile = File(...), token: str = Depends(verify_token)):
225
  contents = await image.read()
226
  file_id = await fs_bucket.upload_from_stream(image.filename, contents, metadata={"type": "source"})
227
  return {"source_id": str(file_id)}
228
 
229
  @fastapi_app.get("/targets")
230
+ async def list_targets(token: str = Depends(verify_token)):
231
  files = []
232
  async for file in database.fs.files.find({"metadata.type": "target", "metadata.predefined": True}):
233
  files.append({
 
237
  return {"targets": files}
238
 
239
  @fastapi_app.post("/target")
240
+ async def upload_target(image: UploadFile = File(...), token: str = Depends(verify_token)):
241
  contents = await image.read()
242
  file_id = await fs_bucket.upload_from_stream(image.filename, contents, metadata={"type": "target"})
243
  return {"target_id": str(file_id)}
 
247
  target_id: str
248
 
249
  @fastapi_app.post("/faceswap")
250
+ async def perform_faceswap(request: FaceSwapRequest, token: str = Depends(verify_token)):
251
  try:
252
  src_stream = await fs_bucket.open_download_stream(ObjectId(request.source_id))
253
  src_bytes = await src_stream.read()
 
278
  return {"result_id": str(result_id)}
279
 
280
  @fastapi_app.get("/download/{result_id}")
281
+ async def download_result(result_id: str, token: str = Depends(verify_token)):
282
  try:
283
  stream = await fs_bucket.open_download_stream(ObjectId(result_id))
284
  data = await stream.read()