fix: change miner authentication to use separate X-Miner-ID header instead of API key for miner identification

- Add get_miner_id() dependency to extract miner ID from X-Miner-ID header
- Update miner register and heartbeat endpoints to require both X-Miner-ID and X-Api-Key headers
- Remove miner_id from query parameters in favor of header-based extraction
- Fix miner heartbeat CLI to send proper JSON payload with inflight, status, and metadata fields
- Fix typo in MinerService: extra_metadata → extra_meta_data
This commit is contained in:
oib
2026-03-05 12:28:17 +01:00
parent 80b9ea4b25
commit efd85060db
5 changed files with 38 additions and 15 deletions

View File

@@ -5,7 +5,7 @@ from fastapi import APIRouter, Depends, HTTPException, Response, status, Request
from slowapi import Limiter
from slowapi.util import get_remote_address
from ..deps import require_miner_key
from ..deps import require_miner_key, get_miner_id
from ..schemas import AssignedJob, JobFailSubmit, JobResultSubmit, JobState, MinerHeartbeat, MinerRegister, PollRequest
from ..services import JobService, MinerService
from ..services.receipts import ReceiptService
@@ -24,7 +24,8 @@ async def register(
req: MinerRegister,
request: Request,
session: SessionDep,
miner_id: str = Depends(require_miner_key()),
miner_id: str = Depends(get_miner_id()),
api_key: str = Depends(require_miner_key()),
) -> dict[str, Any]: # type: ignore[arg-type]
service = MinerService(session)
record = service.register(miner_id, req)
@@ -36,7 +37,8 @@ async def heartbeat(
req: MinerHeartbeat,
request: Request,
session: SessionDep,
miner_id: str = Depends(require_miner_key()),
miner_id: str = Depends(get_miner_id()),
api_key: str = Depends(require_miner_key()),
) -> dict[str, str]: # type: ignore[arg-type]
try:
MinerService(session).heartbeat(miner_id, req)