File size: 1,351 Bytes
ff23105
 
 
 
 
 
 
 
78331be
ff23105
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
from fastapi import FastAPI, HTTPException, BackgroundTasks, Request
from pydantic import BaseModel
import os
from dotenv import load_dotenv
from solver import solve_quiz
import logging

# Configure logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

load_dotenv()

app = FastAPI()

class QuizRequest(BaseModel):
    email: str
    secret: str
    url: str
    class Config:
        extra = "allow"

@app.post("/", status_code=200)
async def solve_quiz_endpoint(request: QuizRequest, background_tasks: BackgroundTasks):
    logger.info(f"Received quiz request for URL: {request.url}")
    
    # Verify secret
    expected_secret = os.getenv("QUIZ_SECRET")
    if not expected_secret:
        logger.warning("QUIZ_SECRET not set in environment variables. Skipping secret validation.")
    elif request.secret != expected_secret:
        logger.error(f"Invalid secret provided: {request.secret} is not {expected_secret}")
        raise HTTPException(status_code=403, detail="Invalid secret")
    
    # Start solving in background
    background_tasks.add_task(solve_quiz, request.url, request.email, request.secret)
    
    return {"message": "Task received, solving started."}

@app.get("/health")
async def health_check():
    return {"status": "ok"}