| 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.