-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathworkers-script.js
More file actions
55 lines (52 loc) · 1.61 KB
/
workers-script.js
File metadata and controls
55 lines (52 loc) · 1.61 KB
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
addEventListener('fetch', event => {
event.respondWith(runScript(event));
})
let cdnDomain = "example-sharex-uploader.com"
let domain = "cdn.example.com"
let secret = "supersecretkey"
async function runScript(event) {
let response;
if(event.request.method == 'POST') {
let json = await event.request.json();
if(event.request.headers.get("key") !== secret) {
return new Response(
JSON.stringify({
error: "401: Unauthorized"
}), {
status: 401
}
)
} else {
response = json.url.replace(cdnDomain, domain)
return new Response(response)
}
} else {
let regex = /[a-zA-Z0-9]+\.(png|jpe?g|gifv?)/
let status;
const urlString = new URL(event.request.url).pathname.substring(1);
if(!urlString) {
status = 400
return new Response(
JSON.stringify({
error: "400: Please specify image url"
}), {
status: status
}
)
}
if(!regex.test(urlString)) {
status = 404
return new Response(
JSON.stringify({
error: "404: Not found"
}), {
status: status
}
)
}
let img = await fetch("https://" + cdnDomain + "/" + urlString)
let clone = img.clone().body
response = new Response(clone)
}
return response
}