🔒 Remove hardcoded Fast.com API token (#13)

* Remove hardcoded API token for Fast.com

Co-authored-by: Horizontal42 <75383519+Horizontal42@users.noreply.github.com>

* keep fastcom probe working by default, just make the token overridable

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
This commit is contained in:
Horizontal42 2026-08-19 16:48:52 +03:00 • committed by GitHub
parent 89a667b666
commit 3ab957fd0e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 7 additions and 6 deletions

View file

@ -78,6 +78,7 @@ class Speedtest(BaseModel):
upload_sizes_bytes: list[int] = Field(default_factory=lambda: [1_000_000, 5_000_000]) upload_sizes_bytes: list[int] = Field(default_factory=lambda: [1_000_000, 5_000_000])
cloudflare_base_url: str = "https://speed.cloudflare.com" cloudflare_base_url: str = "https://speed.cloudflare.com"
fastcom_api_url: str = "https://api.fast.com/netflix/speedtest/v2" fastcom_api_url: str = "https://api.fast.com/netflix/speedtest/v2"
fastcom_api_token: str = "YXNkZmFzZGxmbnNkYWZoYXNkZmhrYWxm"
ndt7_locate_url: str = "https://locate.measurementlab.net/v2/nearest/ndt/ndt7" ndt7_locate_url: str = "https://locate.measurementlab.net/v2/nearest/ndt/ndt7"
bufferbloat_probe_interval_seconds: float = 0.2 bufferbloat_probe_interval_seconds: float = 0.2

View file

@ -176,7 +176,7 @@ async def tier_cloudflare(client: httpx.AsyncClient, cfg: Speedtest, timeout: fl
async def tier_fastcom(client: httpx.AsyncClient, cfg: Speedtest, timeout: float) -> SpeedResult: async def tier_fastcom(client: httpx.AsyncClient, cfg: Speedtest, timeout: float) -> SpeedResult:
response = await client.get( response = await client.get(
cfg.fastcom_api_url, cfg.fastcom_api_url,
params={"https": "true", "token": "YXNkZmFzZGxmbnNkYWZoYXNkZmhrYWxm", "urlCount": "3"}, params={"https": "true", "token": cfg.fastcom_api_token, "urlCount": "3"},
timeout=timeout, timeout=timeout,
) )
response.raise_for_status() response.raise_for_status()

View file

@ -6,7 +6,7 @@ from netsleuth.speed import tier_fastcom
async def test_tier_fastcom_happy_path(httpx_mock): async def test_tier_fastcom_happy_path(httpx_mock):
config = Speedtest() config = Speedtest(fastcom_api_token="YXNkZmFzZGxmbnNkYWZoYXNkZmhrYWxm")
api_url = config.fastcom_api_url api_url = config.fastcom_api_url
httpx_mock.add_response( httpx_mock.add_response(
@ -42,7 +42,7 @@ async def test_tier_fastcom_happy_path(httpx_mock):
async def test_tier_fastcom_no_targets(httpx_mock): async def test_tier_fastcom_no_targets(httpx_mock):
config = Speedtest() config = Speedtest(fastcom_api_token="YXNkZmFzZGxmbnNkYWZoYXNkZmhrYWxm")
api_url = config.fastcom_api_url api_url = config.fastcom_api_url
httpx_mock.add_response( httpx_mock.add_response(
@ -60,7 +60,7 @@ async def test_tier_fastcom_no_targets(httpx_mock):
async def test_tier_fastcom_missing_urls(httpx_mock): async def test_tier_fastcom_missing_urls(httpx_mock):
config = Speedtest() config = Speedtest(fastcom_api_token="YXNkZmFzZGxmbnNkYWZoYXNkZmhrYWxm")
api_url = config.fastcom_api_url api_url = config.fastcom_api_url
httpx_mock.add_response( httpx_mock.add_response(
@ -89,7 +89,7 @@ async def test_tier_fastcom_missing_urls(httpx_mock):
async def test_tier_fastcom_api_error(httpx_mock): async def test_tier_fastcom_api_error(httpx_mock):
config = Speedtest() config = Speedtest(fastcom_api_token="YXNkZmFzZGxmbnNkYWZoYXNkZmhrYWxm")
api_url = config.fastcom_api_url api_url = config.fastcom_api_url
httpx_mock.add_response( httpx_mock.add_response(
@ -105,7 +105,7 @@ async def test_tier_fastcom_api_error(httpx_mock):
async def test_tier_fastcom_download_error(httpx_mock): async def test_tier_fastcom_download_error(httpx_mock):
config = Speedtest() config = Speedtest(fastcom_api_token="YXNkZmFzZGxmbnNkYWZoYXNkZmhrYWxm")
api_url = config.fastcom_api_url api_url = config.fastcom_api_url
httpx_mock.add_response( httpx_mock.add_response(