sharktide/shield / intelligence /device_intel.py
sharktide's picture
download
raw
1.74 kB
from __future__ import annotations
from typing import Any, Dict, List
from shield.models.evidence import Evidence
_AUTOMATION_MARKERS = (
"headless",
"selenium",
"playwright",
"phantomjs",
"puppeteer",
"webdriver",
)
def collect_device_evidence(
device_fingerprint: str | None,
metadata: Dict[str, Any] | None,
) -> List[Evidence]:
evidence: List[Evidence] = []
metadata = metadata if isinstance(metadata, dict) else {}
user_agent = str(metadata.get("user_agent") or metadata.get("userAgent") or "").lower()
automation_flags = metadata.get("automation_flags")
if any(marker in user_agent for marker in _AUTOMATION_MARKERS):
evidence.append(Evidence(
source="device_intelligence",
category="bot_automation",
risk_score=82,
weight=0.86,
confidence=0.9,
explanation="User agent contains browser automation markers",
))
if isinstance(automation_flags, list) and automation_flags:
evidence.append(Evidence(
source="device_intelligence",
category="bot_automation",
risk_score=75,
weight=0.75,
confidence=0.86,
explanation="Device metadata reports automation indicators",
metadata={"flag_count": len(automation_flags)},
))
if not device_fingerprint and metadata.get("requires_device_fingerprint"):
evidence.append(Evidence(
source="device_intelligence",
category="identity_risk",
risk_score=35,
weight=0.35,
confidence=0.6,
explanation="Expected device fingerprint is missing",
))
return evidence

Xet Storage Details

Size:
1.74 kB
·
Xet hash:
dd24e73e8208ce54335efc1cad59c3242f3247ab2f88ff3cae31eb6917354db0

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.