mirror of
https://github.com/bellingcat/auto-archiver-api.git
synced 2026-06-08 03:28:35 +03:00
secure auth
This commit is contained in:
15
src/main.py
15
src/main.py
@@ -4,10 +4,11 @@ from fastapi.encoders import jsonable_encoder
|
||||
from fastapi.responses import JSONResponse, FileResponse
|
||||
from fastapi.staticfiles import StaticFiles
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
from fastapi.security import HTTPBasic, HTTPBasicCredentials
|
||||
# from fastapi.templating import Jinja2Templates
|
||||
# from pydantic.json import pydantic_encoder
|
||||
from dotenv import load_dotenv
|
||||
import traceback, os, requests, re
|
||||
import traceback, os, requests, re, secrets
|
||||
from loguru import logger
|
||||
|
||||
from worker import create_archive_task, celery
|
||||
@@ -24,7 +25,7 @@ assert len(GOOGLE_CHROME_APP_ID)>10, "GOOGLE_CHROME_APP_ID env variable not set"
|
||||
ALLOWED_EMAILS = set(os.environ.get("ALLOWED_EMAILS", "").split(","))
|
||||
assert len(GOOGLE_CHROME_APP_ID)>=1, "at least one ALLOWED_EMAILS is required from the env variable"
|
||||
ALLOWED_ORIGINS = os.environ.get("ALLOWED_ORIGINS", "chrome-extension://ondkcheoicfckabcnkdgbepofpjmjcmb,chrome-extension://ojcimmjndnlmmlgnjaeojoebaceokpdp").split(",")
|
||||
VERSION = "0.1.7"
|
||||
VERSION = "0.1.8"
|
||||
|
||||
app = FastAPI()
|
||||
app.add_middleware(
|
||||
@@ -99,14 +100,18 @@ def get_status(task_id, access_token:str, db: Session = Depends(get_db)):
|
||||
# logic to allow access to 1 static file
|
||||
SF = os.environ.get("STATIC_FILE", "")
|
||||
SFP = os.environ.get("STATIC_FILE_PASSWORD", "") # min length is 20 chars
|
||||
security = HTTPBasic()
|
||||
if len(SF) > 1 and len(SFP) >= 20 and os.path.isfile(SF):
|
||||
@app.get("/static-file")
|
||||
def static_file(static_file_password:str):
|
||||
if type(static_file_password) ==str and len(static_file_password)>=20 and static_file_password==SFP:
|
||||
def static_file(credentials: HTTPBasicCredentials = Depends(security)):
|
||||
current_password_bytes = credentials.password.encode("utf8")
|
||||
is_correct_password = secrets.compare_digest(current_password_bytes, SFP.encode("utf8"))
|
||||
if is_correct_password:
|
||||
return FileResponse(SF, filename=os.path.basename(SF))
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_401_UNAUTHORIZED,
|
||||
detail="Wrong static file access credentials"
|
||||
detail="Wrong static file access credentials",
|
||||
headers={"WWW-Authenticate": "Basic"}
|
||||
)
|
||||
|
||||
@app.get("/")
|
||||
|
||||
Reference in New Issue
Block a user