-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
62 lines (49 loc) · 1.71 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
const Router = require('./router')
const whiteList = require('./whitelist')
/**
* Example of how router can be used in an application
* */
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request));
})
function handler(request) {
const init = {
headers: { 'content-type': 'application/json' },
};
const body = JSON.stringify({ some: 'json' });
return new Response(body, init)
}
function keepWhiteListParams(url) {
let params = new URLSearchParams(url.search.slice(1));
console.log("params: ", params, params.toString(), params.has("q"));
console.log("Contains: ", whiteList.whiteList);
// removing unnecessary params
for(var key of params.keys()) {
if(!whiteList.whiteList.includes(key)){
params.delete(key);
}
}
const newUrl = url.origin + url.pathname + "?" + params.toString();
return newUrl;
}
async function sanitizeRequest(request) {
const url = new URL(request.url);
const sanitizedUrl = keepWhiteListParams(url);
console.log("SanitizedUrl: ", sanitizedUrl);
const updatedReq = new Request(sanitizedUrl, {
body: request.body,
headers: request.headers,
method: request.method,
redirect: request.redirect
});
console.log("UpdatedReq: ", updatedReq);
const response = await fetch(updatedReq);
return response;
}
async function handleRequest(request) {
const r = new Router();
r.get('.*/search.*', request => sanitizeRequest(request)); // return the response from the origin
r.get('.*/test', () => new Response('Hello worker!')); // return a default message for the root route
const resp = await r.route(request);
return resp;
}