| 10285 | |
| 10286 | # --- BACKEND LOGIC --- |
| 10287 | class OSINTCore: |
| 10288 | def __init__(self): |
| 10289 | self.creds = DEFAULT_CREDS.copy() |
| 10290 | loaded = _load_credentials() |
| 10291 | if isinstance(loaded, dict): |
| 10292 | migrated_tg_session = loaded.pop("tg_session", "") |
| 10293 | if migrated_tg_session: |
| 10294 | try: |
| 10295 | _store_tg_session(migrated_tg_session) |
| 10296 | except Exception: |
| 10297 | print("[!] Migrazione tg_session verso keyring non riuscita.") |
| 10298 | try: |
| 10299 | self.creds.update({k: v for k, v in loaded.items() if k in self.creds}) |
| 10300 | except: |
| 10301 | pass |
| 10302 | try: |
| 10303 | self.creds.pop("tg_session", None) |
| 10304 | _save_credentials(self.creds) |
| 10305 | except: |
| 10306 | pass |
| 10307 | self._social_search_cache = {} |
| 10308 | self._social_search_cache_ttl = 180 |
| 10309 | self._social_snapshot_dir = SOCIAL_SNAPSHOTS_DIR |
| 10310 | |
| 10311 | def _normalize_instagram_share_link(self, target): |
| 10312 | if not target: |
| 10313 | return {"platform": "Instagram", "query": "", "metadata": {}} |
| 10314 | raw = str(target).strip() |
| 10315 | if not raw: |
| 10316 | return {"platform": "Instagram", "query": "", "metadata": {}} |
| 10317 | if not re.match(r"^https?://", raw, re.I): |
| 10318 | return {"platform": "Instagram", "query": raw.lstrip("@"), "metadata": {"share_source": "handle"}} |
| 10319 | |
| 10320 | candidate = raw |
| 10321 | for _ in range(3): |
| 10322 | redirected = None |
| 10323 | for pattern in SHARETRACE_PLATFORM_PATTERNS.get("Instagram", {}).get("shortlink", []): |
| 10324 | match = re.search(pattern, candidate, re.I) |
| 10325 | if match: |
| 10326 | redirected = match.group(1) |
| 10327 | break |
| 10328 | if not redirected: |
| 10329 | parsed = urllib.parse.urlparse(candidate) |
| 10330 | host = (parsed.netloc or "").lower() |
| 10331 | if host.startswith("www."): |
| 10332 | host = host[4:] |
| 10333 | query_data = urllib.parse.parse_qs(parsed.query or "") |
| 10334 | if host in {"l.instagram.com", "l.insta.co", "l.inked.in"}: |
| 10335 | redirected = ( |
| 10336 | query_data.get("u", [None])[0] |
| 10337 | or query_data.get("url", [None])[0] |
| 10338 | or query_data.get("link", [None])[0] |
| 10339 | ) |
| 10340 | if isinstance(redirected, str) and redirected.strip().startswith("http"): |
| 10341 | candidate = urllib.parse.unquote(redirected.strip()) |
| 10342 | continue |
| 10343 | if candidate == raw and not re.match(r"^https?://", candidate, re.I): |
| 10344 | break |