@@ -23,6 +23,8 @@ async function getRequest(request: any, env: any, context: any) {
2323 return response ;
2424}
2525
26+ const acceptedAgents = [ "RideTrackerService" , "RideTrackerApp" ] ;
27+
2628export 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