Merge pull request #11 from starkSV/feat/cf-worker-proxy
docs: update README, About, Privacy and Disclaimer for CF Worker
This commit is contained in:
commit
38ea92d014
4 changed files with 48 additions and 15 deletions
37
README.md
37
README.md
|
|
@ -37,8 +37,9 @@ MSDL replicates the session flow that Microsoft uses to serve ISO download links
|
|||
|
||||
```
|
||||
windows-iso-downloader/
|
||||
├── frontend/ # React 19 + TypeScript + Vite + Tailwind v4
|
||||
├── backend/ # Go proxy server (recommended for production)
|
||||
├── frontend/ # React 19 + TypeScript + Vite + Tailwind v4
|
||||
├── backend/ # Go proxy server (recommended for production)
|
||||
├── cloudflare-worker/ # Optional CF Worker for distributed IP routing
|
||||
└── README.md
|
||||
```
|
||||
|
||||
|
|
@ -47,16 +48,18 @@ windows-iso-downloader/
|
|||
## How It Works
|
||||
|
||||
```
|
||||
Browser → Backend Proxy → Microsoft Download API → Signed CDN URL
|
||||
↓
|
||||
1. Register session (Microsoft tracking endpoint)
|
||||
2. Parse MDT fingerprint script
|
||||
3. Fetch SKU list (available languages)
|
||||
4. Fetch signed CDN download URL
|
||||
Browser → Backend → (CF Worker) → Microsoft API → Signed CDN URL
|
||||
↓
|
||||
1. Register session (Microsoft tracking endpoint)
|
||||
2. Parse MDT fingerprint script
|
||||
3. Fetch SKU list (available languages)
|
||||
4. Fetch signed CDN download URL
|
||||
```
|
||||
|
||||
The flow mirrors [Fido.ps1](https://github.com/pbatard/Fido) by Pete Batard — the same script bundled with Rufus.
|
||||
|
||||
Outbound requests to Microsoft are optionally routed through a Cloudflare Worker (`cloudflare-worker/worker.js`). This distributes requests across Cloudflare's global edge IPs instead of a single server IP, preventing Microsoft's rate-limit block (error 715-123130) under high traffic. The Worker is opt-in via environment variables — omit them to go direct to Microsoft.
|
||||
|
||||
---
|
||||
|
||||
## Running Locally
|
||||
|
|
@ -84,6 +87,17 @@ Create `frontend/.env.local`:
|
|||
VITE_API_URL=http://localhost:3002
|
||||
```
|
||||
|
||||
#### Optional: Cloudflare Worker (recommended for production)
|
||||
|
||||
Deploy `cloudflare-worker/worker.js` to Cloudflare Workers, then set these on the backend:
|
||||
|
||||
```env
|
||||
CF_WORKER_URL=https://your-worker.your-name.workers.dev
|
||||
CF_WORKER_SECRET=your-secret # must match the CF_WORKER_SECRET secret set in the Worker's settings
|
||||
```
|
||||
|
||||
Omit both to go direct to Microsoft (fine for local development and low-traffic self-hosting).
|
||||
|
||||
---
|
||||
|
||||
## API Reference
|
||||
|
|
@ -167,14 +181,15 @@ Returns signed download links from Microsoft's CDN.
|
|||
|
||||
## Deployment
|
||||
|
||||
> ⚠️ **Deploy the backend to a standard VPS** (Hetzner, DigitalOcean, Linode, etc.) — **not** serverless platforms like Vercel, Cloudflare Workers, or AWS Lambda. Microsoft rate-limits known datacenter IP ranges.
|
||||
|
||||
Recommended setup:
|
||||
|
||||
| Component | Platform |
|
||||
|---|---|
|
||||
| Frontend | Cloudflare Pages / Vercel (static) |
|
||||
| Backend | VPS with a non-datacenter IP |
|
||||
| Backend | VPS (Hetzner, DigitalOcean, Linode, etc.) |
|
||||
| Outbound proxy | Cloudflare Worker (optional, recommended for public instances) |
|
||||
|
||||
> ⚠️ **Deploy the Go backend to a standard VPS**, not serverless platforms. The Cloudflare Worker is used only as an outbound proxy for Microsoft API calls — the backend itself must be a long-running process with session state.
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -67,8 +67,12 @@ export default function AboutPage() {
|
|||
<li>Call the download links API using the warmed session to get signed CDN URLs</li>
|
||||
</ol>
|
||||
<p>
|
||||
Links are IP-tied to the server and expire after 24 hours — this is standard
|
||||
Microsoft behaviour, not a limitation of MSDL.
|
||||
Outbound requests to Microsoft are routed through a Cloudflare Worker, which
|
||||
distributes traffic across Cloudflare's global edge IPs. This prevents any single
|
||||
IP from being rate-limited by Microsoft under high traffic.
|
||||
</p>
|
||||
<p>
|
||||
Links expire after 24 hours — this is standard Microsoft behaviour, not a limitation of MSDL.
|
||||
</p>
|
||||
</Section>
|
||||
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ export default function DisclaimerPage() {
|
|||
>
|
||||
<div>
|
||||
<h1 className="text-2xl font-bold text-white mb-1">Disclaimer</h1>
|
||||
<p className="text-xs font-mono text-zinc-600">Last updated: April 9, 2026</p>
|
||||
<p className="text-xs font-mono text-zinc-600">Last updated: May 18, 2026</p>
|
||||
</div>
|
||||
|
||||
<div className="p-4 rounded-xl border border-amber-500/15 bg-amber-500/6 text-amber-400/80 text-[12px] leading-relaxed">
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ export default function PrivacyPolicyPage() {
|
|||
>
|
||||
<div>
|
||||
<h1 className="text-2xl font-bold text-white mb-1">Privacy Policy</h1>
|
||||
<p className="text-xs font-mono text-zinc-600">Last updated: April 9, 2026</p>
|
||||
<p className="text-xs font-mono text-zinc-600">Last updated: May 18, 2026</p>
|
||||
</div>
|
||||
|
||||
<Section title="No data collected">
|
||||
|
|
@ -60,6 +60,20 @@ export default function PrivacyPolicyPage() {
|
|||
(<code className="text-zinc-400 text-[11px] font-mono bg-white/5 px-1 py-0.5 rounded">software.download.prss.microsoft.com</code>).
|
||||
We are not responsible for Microsoft's privacy practices or link availability.
|
||||
</p>
|
||||
<p>
|
||||
API requests to Microsoft are routed through a Cloudflare Worker running on
|
||||
Cloudflare's edge network. Cloudflare may process request metadata in transit
|
||||
in accordance with their{' '}
|
||||
<a
|
||||
href="https://www.cloudflare.com/privacypolicy/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="text-blue-400 hover:text-blue-300 transition-colors"
|
||||
>
|
||||
privacy policy
|
||||
</a>.
|
||||
No user data or download links are stored by the Worker.
|
||||
</p>
|
||||
</Section>
|
||||
|
||||
<Section title="Open source">
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue