-- Migration 063 — Sophos XGS 6500 + Zyxel XS3800-28 URL fix -- -- Sophos: images.contentstack.io Contentstack CDN (official Sophos CMS). -- xgs-107w-136-2300-4500-6500-front.png: verified HTTP 200 PNG (2026-04-21). -- Note: filename explicitly includes "6500" — this is the XGS 6500 product image. -- CS210-48FP: no publicly accessible product image found on Sophos CDN. -- -- Zyxel XS3800-28 fix: migration 061 used xs3800-28/img_xs3800-28_p_cover.jpg which -- returns 403 on curl (Zyxel CDN bot-protection). Updated to the Banner/hero path -- in the parent xs3800/ directory, which returns HTTP 200 PNG (2026-04-21). -- ── Sophos ──────────────────────────────────────────────────────────────────── -- XGS 6500 — high-performance next-gen firewall / network security appliance -- Image shows XGS 107w/136/2300/4500/6500 front panel family shot. UPDATE switches SET image_url = 'https://images.contentstack.io/v3/assets/blt38f1f401b66100ad/bltdedd0b72748be54b/69b0d8d7c52c3d0008cb63e3/xgs-107w-136-2300-4500-6500-front.png', product_page_url = COALESCE(product_page_url, 'https://www.sophos.com/en-us/products/next-gen-firewall'), assets_scraped_at = NOW() WHERE model = 'XGS 6500' AND vendor_id = (SELECT id FROM vendors WHERE slug = 'sophos'); -- ── Zyxel XS3800-28 (URL fix) ───────────────────────────────────────────────── -- XS3800-28 — 28×10G L2/L3 aggregation switch -- Replaces migration 061 URL (xs3800-28/img_xs3800-28_p_cover.jpg → 403 on curl). -- Banner/hero path in parent xs3800/ directory returns HTTP 200 PNG. UPDATE switches SET image_url = 'https://www.zyxel.com/library/assets/products/xs3800/XS3800-28-Banner_product_hero.png', assets_scraped_at = NOW() WHERE model = 'XS3800-28' AND vendor_id = (SELECT id FROM vendors WHERE slug = 'zyxel');