fix(plugin): hybrid SSL context - verify when possible, fall back gracefully

This commit is contained in:
2026-06-28 17:33:55 +08:00
parent 961c81e97f
commit 046e483861
+15 -2
View File
@@ -3,6 +3,19 @@ import json
import os import os
import ssl import ssl
def _get_ssl_context():
"""Create an SSL context, trying verification first, falling back to unverified.
This handles systems where the CA bundle is missing or outdated (e.g., Steam Deck)."""
try:
ctx = ssl.create_default_context()
# Test that the context can actually verify by checking it has CAs
if ctx.get_ca_certs():
return ctx
except Exception:
pass
# Fall back to unverified if default context fails
return ssl._create_unverified_context()
try: try:
import decky import decky
except ImportError: except ImportError:
@@ -350,7 +363,7 @@ benchmark_percentiles=97,AVG,1,0.1
method="POST" method="POST"
) )
context = ssl._create_unverified_context() context = _get_ssl_context()
with urllib.request.urlopen(req, timeout=30, context=context) as response: with urllib.request.urlopen(req, timeout=30, context=context) as response:
status = response.status status = response.status
body = response.read().decode('utf-8') body = response.read().decode('utf-8')
@@ -386,7 +399,7 @@ benchmark_percentiles=97,AVG,1,0.1
headers={"x-api-key": api_key}, headers={"x-api-key": api_key},
method="GET" method="GET"
) )
context = ssl._create_unverified_context() context = _get_ssl_context()
with urllib.request.urlopen(req, timeout=10, context=context) as response: with urllib.request.urlopen(req, timeout=10, context=context) as response:
# A 404 (game not found) still means the API key is valid # A 404 (game not found) still means the API key is valid
return {"valid": True} return {"valid": True}