| from slowapi import Limiter |
| from config import ACCESS_RATE |
| from fastapi import APIRouter, File, Request, Depends, HTTPException, UploadFile |
| from fastapi.security import HTTPBearer |
| from slowapi import Limiter |
| from slowapi.util import get_remote_address |
| from io import BytesIO |
| from .controller import process_image_ela , verify_token,process_fft_image, process_meta_image |
| import requests |
| router = APIRouter() |
| limiter = Limiter(key_func=get_remote_address) |
| security = HTTPBearer() |
|
|
|
|
|
|
| @router.post("/ela") |
| @limiter.limit(ACCESS_RATE) |
| async def detect_ela(request:Request,file: UploadFile = File(...), quality: int = 90 ,token: str = Depends(verify_token)): |
| |
| allowed_types = ["image/jpeg", "image/png"] |
|
|
| if file.content_type not in allowed_types: |
| raise HTTPException( |
| status_code=400, |
| detail="Unsupported file type. Only JPEG and PNG images are allowed." |
| ) |
| |
| content = await file.read() |
| result = await process_image_ela(content, quality) |
| return result |
|
|
| @router.post("/fft") |
| @limiter.limit(ACCESS_RATE) |
| async def detect_fft(request:Request,file:UploadFile =File(...),threshold:float=0.95,token:str=Depends(verify_token)): |
| if file.content_type not in ["image/jpeg", "image/png"]: |
| raise HTTPException(status_code=400, detail="Unsupported image type.") |
| |
| content = await file.read() |
| result = await process_fft_image(content,threshold) |
| return result |
|
|
| @router.post("/meta") |
| @limiter.limit(ACCESS_RATE) |
| async def detect_meta(request:Request,file:UploadFile=File(...),token:str=Depends(verify_token)): |
| if file.content_type not in ["image/jpeg", "image/png"]: |
| raise HTTPException(status_code=400, detail="Unsupported image type.") |
| content = await file.read() |
| result = await process_meta_image(content) |
| return result |
| @router.post("/health") |
| @limiter.limit(ACCESS_RATE) |
| def heath(request:Request): |
| return {"status":"ok"} |
|
|