Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fhferreira/df3a543acfcad4a57a21127a14398c13 to your computer and use it in GitHub Desktop.
Save fhferreira/df3a543acfcad4a57a21127a14398c13 to your computer and use it in GitHub Desktop.
A CloudFlare service worker that proxies purge cache requests. Example: https://example.com/__purge_cache?zone=XX
addEventListener('fetch', event => {
event.respondWith(purgeCache(event.request))
})
async function purgeCache(request) {
const url = new URL(request.url)
// If the path doesn't begin with our protected prefix, just pass the request through.
if (!url.pathname.startsWith("/__purge_cache")) {
return fetch(request)
}
// Lets validate the zone id, and return an error if invalid
let zoneIdValidated = (new RegExp("^([a-z0-9]{32})$")).test(url.searchParams.get('zone'));
if (!zoneIdValidated) {
return new Response('Invalid Zone ID', {
status: 500
});
}
let content = '{"purge_everything":true}'
let headers = {
'Content-Type': 'application/json',
'X-Auth-Email': '', // Cloudflare API Auth Email
'X-Auth-Key': '' //Cloudflare API Auth Key
}
const init = {
method: 'POST',
headers: headers,
body: content
}
const response = await fetch('https://api.cloudflare.com/client/v4/zones/'+url.searchParams.get('zone')+'/purge_cache', init)
return response
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment