const hasValidHeader = (request: Request, env: Env) => {
return request.headers.get('X-CF-Secret') === env.AUTH_KEY_SECRET;
};
function authorizeRequest(request: Request, env: Env, key:string) {
switch (request.method) {
case 'PUT':
case 'DELETE':
return hasValidHeader(request, env);
case 'GET':
return true
default:
return false;
}
}
export default {
async fetch(request:Request, env:Env) {
const url = new URL(request.url);
const key = url.pathname.slice(1);
if (!authorizeRequest(request, env, key)) {
return new Response('Forbidden', { status: 403 });
}
switch (request.method) {
case 'PUT':
await env.R2_BUCKET.put(key, request.body);
return new Response(`Put ${key} successfully!`);
case 'GET':
const object = await env.R2_BUCKET.get(key);
if (object === null) {
return new Response('Object Not Found', { status: 404 });
}
const headers = new Headers();
object.writeHttpMetadata(headers);
headers.set('etag', object.httpEtag);
return new Response(object.body, {
headers,
});
case 'DELETE':
await env.R2_BUCKET.delete(key);
return new Response('Deleted!');
default:
return new Response('Method Not Allowed', {
status: 405,
headers: {
Allow: 'PUT, GET, DELETE',
},
});
}
},
};
const hasValidHeader = (request: Request, env: Env) => {
return request.headers.get('X-CF-Secret') === env.AUTH_KEY_SECRET;
};
function authorizeRequest(request: Request, env: Env, key:string) {
switch (request.method) {
case 'PUT':
case 'DELETE':
return hasValidHeader(request, env);
case 'GET':
return true
default:
return false;
}
}
export default {
async fetch(request:Request, env:Env) {
const url = new URL(request.url);
const key = url.pathname.slice(1);
if (!authorizeRequest(request, env, key)) {
return new Response('Forbidden', { status: 403 });
}
switch (request.method) {
case 'PUT':
await env.R2_BUCKET.put(key, request.body);
return new Response(`Put ${key} successfully!`);
case 'GET':
const object = await env.R2_BUCKET.get(key);
if (object === null) {
return new Response('Object Not Found', { status: 404 });
}
const headers = new Headers();
object.writeHttpMetadata(headers);
headers.set('etag', object.httpEtag);
return new Response(object.body, {
headers,
});
case 'DELETE':
await env.R2_BUCKET.delete(key);
return new Response('Deleted!');
default:
return new Response('Method Not Allowed', {
status: 405,
headers: {
Allow: 'PUT, GET, DELETE',
},
});
}
},
};