Skip to content

Commit d48e8bb

Browse files
Added user agent control
1 parent f363875 commit d48e8bb

1 file changed

Lines changed: 20 additions & 0 deletions

File tree

src/index.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ async function getRequest(request: any, env: any, context: any) {
2323
return response;
2424
}
2525

26+
const acceptedAgents = [ "RideTrackerService", "RideTrackerApp" ];
27+
2628
export default {
2729
async scheduled(controller: ScheduledController, env: Env, context: EventContext<Env, string, null>) {
2830
switch(controller.cron) {
@@ -49,6 +51,24 @@ export default {
4951

5052
async fetch(request: Request, env: Env, context: EventContext<Env, string, null>) {
5153
try {
54+
const userAgent = request.headers.get("User-Agent");
55+
56+
if(!userAgent || !userAgent.match(/\w+\-([0-9]+)\.([0-9]+)\.([0-9]+)/)) {
57+
return new Response(undefined, {
58+
status: 400,
59+
statusText: "Bad Request"
60+
});
61+
}
62+
63+
if(!acceptedAgents.includes(userAgent.substring(0, userAgent.indexOf('-')))) {
64+
context.waitUntil(triggerAlarm(env, "User Agent Alarm", `An unrecognized user agent was detected.\n \n\`\`\`\n${userAgent}\n\`\`\`\n${request.method} ${request.url}\nRemote Address: || ${request.headers.get("CF-Connecting-IP")} ||`));
65+
66+
return new Response(undefined, {
67+
status: 403,
68+
statusText: "Forbidden"
69+
});
70+
}
71+
5272
const response = await getRequest(request, env, context);
5373

5474
if(response.status < 200 || response.status > 299) {

0 commit comments

Comments
 (0)