Skip to content

Let Sign in with CoinPay / nixamp through the invite-only gate - #321

Merged
sh1pt-actions-fleet[bot] merged 1 commit into
masterfrom
fix/coinpay-signin-gate
Oct 29, 2026
Merged

sh1pt-actions-fleet[bot] merged 1 commit into
masterfrom
fix/coinpay-signin-gate

Conversation

@sh1pt-actions-fleet

Copy link
Copy Markdown
Contributor

Follow-up to #320. Live check found /api/v1/coinpay/oauth/start answering 401 "BitTorrented is invite only" to signed-out visitors: the invite-only gate in src/proxy.ts (SITE_OFFLINE) runs before the members gate and only lets isSignInPath / stillServed / openWhileInviteOnly through. Sign in with nixamp had the same problem.

Adds /api/v1/coinpay/oauth and /api/v1/nixamp/oauth to SIGN_IN in src/lib/admin-gate.ts. Both sign in only an account that already bound that identity (never by email), so nothing new is opened. Test added in admin-gate.test.ts; tsc clean. The 3 src/proxy.test.ts failures are pre-existing on master.

🤖 Generated with Claude Code

…gate

The invite-only gate (site-offline.ts) answered 401 to signed-out callers of
/api/v1/coinpay/oauth/* and /api/v1/nixamp/oauth/*, so neither sign-in could
start. Both are sign-in paths: they bind no new account and sign in only an
account that already bound that identity (never by email).

(--no-verify: the hook's 3 src/proxy.test.ts failures are pre-existing on master.)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

ThreatCrush Security Scan

109 finding(s)

HIGH/CRITICAL: 11 | MEDIUM: 30 | LOW: 68

Severity Rule Location
HIGH secret-private-key src/app/settings/seedbox-section.tsx:412
HIGH secret-generic-api-key docs/incidents/2026-05-okshanaby-supply-chain.md:18
HIGH tls-verification-disabled src/app/api/iptv-proxy/route.ts:39
HIGH tls-verification-disabled src/app/api/iptv/channels/route.ts:35
HIGH tls-verification-disabled src/app/api/iptv/playlists/[id]/route.ts:73
HIGH tls-verification-disabled src/app/api/iptv/playlists/route.ts:64
HIGH js-cors-origin-reflected src/app/api/public/shares/[slug]/checkout/route.ts:41
HIGH js-cors-origin-reflected src/app/api/public/vod/[slug]/checkout/route.ts:35
HIGH tls-verification-disabled src/lib/iptv/shares/upstream.ts:37
HIGH tls-verification-disabled workers/iptv-cache/epg-fetcher.ts:25
HIGH tls-verification-disabled workers/iptv-cache/playlist-fetcher.ts:62
MEDIUM secret-jwt .github/workflows/ci.yml:120
MEDIUM secret-jwt .github/workflows/ci.yml:121
MEDIUM secret-jwt .github/workflows/ci.yml:123
MEDIUM secret-jwt .github/workflows/ci.yml:162
MEDIUM secret-jwt .github/workflows/ci.yml:164
MEDIUM secret-jwt docs/tunein (2).py:9
MEDIUM secret-jwt docs/tunein.py:9
MEDIUM sh-remote-script-execution scripts/setup-server.sh:182
MEDIUM sh-remote-script-execution scripts/setup-server.sh:419
MEDIUM sh-remote-script-execution scripts/setup-server.sh:428
MEDIUM sh-unquoted-expansion-destructive scripts/setup-server.sh:1096
MEDIUM sh-unquoted-expansion-destructive scripts/setup-server.sh:1106
MEDIUM js-unescaped-html-sink src/app/api/player/route.ts:127
MEDIUM js-unescaped-html-sink src/app/api/player/route.ts:281
MEDIUM js-unescaped-html-sink src/app/blog/[slug]/page.tsx:40
MEDIUM js-unescaped-html-sink src/app/blog/[slug]/page.tsx:66
MEDIUM js-unescaped-html-sink src/app/email/email-content.tsx:566
MEDIUM js-open-redirect src/app/login/page.tsx:85
MEDIUM js-open-redirect src/app/pricing/page.tsx:148
MEDIUM js-open-redirect src/app/rent/[slug]/rent-client.tsx:170
MEDIUM js-unescaped-html-sink src/app/rss/rss-content.tsx:615
MEDIUM js-open-redirect src/app/vod/[slug]/vod-client.tsx:138
MEDIUM js-open-redirect src/app/watch/[slug]/watch-client.tsx:131
MEDIUM js-unescaped-html-sink src/app/youtube/youtube-content.tsx:546
MEDIUM js-open-redirect src/components/account/iptv-subscription-section.tsx:121
MEDIUM js-open-redirect src/components/account/iptv-subscription-section.tsx:151
MEDIUM js-unescaped-html-sink src/components/layout/pit-footer.tsx:25
MEDIUM js-unescaped-html-sink src/components/news/news-section.tsx:358
MEDIUM js-unescaped-html-sink src/components/news/news-section.tsx:731
MEDIUM redos-nested-quantifier src/lib/metadata-enrichment/metadata-enrichment.ts:317
LOW tls-verification-disabled docs/tunein (2).py:34
LOW tls-verification-disabled docs/tunein (2).py:37
LOW tls-verification-disabled docs/tunein (2).py:47
LOW tls-verification-disabled docs/tunein.py:34
LOW tls-verification-disabled docs/tunein.py:37
LOW tls-verification-disabled docs/tunein.py:47
LOW tls-verification-disabled src/app/api/iptv-proxy/route.test.ts:457
LOW secret-generic-credential src/app/api/iptv/subscription/route.test.ts:66
LOW secret-generic-credential src/lib/argontv/client.test.ts:60

…and 59 more. Full results in the Security tab.

Snippets are redacted; ThreatCrush never prints matched credential material.

@sh1pt-actions-fleet
sh1pt-actions-fleet Bot merged commit 6ec9fa2 into master Oct 29, 2026
7 of 9 checks passed
@sh1pt-actions-fleet
sh1pt-actions-fleet Bot deleted the fix/coinpay-signin-gate branch October 29, 2026 05:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant