@@ -7,11 +7,13 @@ import { createActivitySummary } from "./controllers/activities/summary/createAc
77import { updatePersonalBestActivitySummary } from "./controllers/activities/summary/updatePersonalBestActivitySummary" ;
88import { getActivitySummaryById } from "./controllers/activities/summary/getActivitySummaryById" ;
99import { getActivitiesWithoutSummary } from "./controllers/activities/getActivitiesWithoutSummary" ;
10+ import getUserAgentGroups from "./controllers/getUserAgentGroups" ;
11+ import { FeatureFlags , VersionFeatureFlags } from "./models/FeatureFlags" ;
1012
1113const router = createRouter ( ) ;
1214
13- async function getRequest ( request : any , env : any , context : any ) {
14- const response : Response = await router . handle ( request , env , context ) ;
15+ async function getRequest ( request : Request , env : Env , context : EventContext < Env , string , null > , featureFlags : VersionFeatureFlags ) {
16+ const response : Response = await router . handle ( request , env , context , featureFlags ) ;
1517
1618 if ( ! response ) {
1719 return new Response ( undefined , {
@@ -23,8 +25,6 @@ async function getRequest(request: any, env: any, context: any) {
2325 return response ;
2426}
2527
26- const acceptedAgents = [ "RideTrackerService" , "RideTrackerApp" ] ;
27-
2828export default {
2929 async scheduled ( controller : ScheduledController , env : Env , context : EventContext < Env , string , null > ) {
3030 switch ( controller . cron ) {
@@ -51,25 +51,36 @@ export default {
5151
5252 async fetch ( request : Request , env : Env , context : EventContext < Env , string , null > ) {
5353 try {
54- const userAgent = request . headers . get ( "User-Agent" ) ;
54+ const userAgent = getUserAgentGroups ( request . headers . get ( "User-Agent" ) ) ;
5555
56- if ( ! userAgent || ! userAgent . match ( / \w + \- ( [ 0 - 9 ] + ) \. ( [ 0 - 9 ] + ) \. ( [ 0 - 9 ] + ) / ) ) {
56+ if ( ! userAgent ) {
5757 return new Response ( undefined , {
5858 status : 400 ,
5959 statusText : "Bad Request"
6060 } ) ;
6161 }
6262
63- if ( ! acceptedAgents . includes ( userAgent . substring ( 0 , userAgent . indexOf ( '-' ) ) ) ) {
63+ const featureFlags = await env . FEATURE_FLAGS . get < FeatureFlags | null > ( `${ userAgent . client } ` , "json" ) ;
64+
65+ if ( ! featureFlags ) {
6466 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" ) } ||` ) ) ;
6567
6668 return new Response ( undefined , {
67- status : 403 ,
68- statusText : "Forbidden"
69+ status : 400 ,
70+ statusText : "Bad Request"
71+ } ) ;
72+ }
73+
74+ const versionFeatureFlags = featureFlags . versions [ userAgent . version . toString ( ) ] ;
75+
76+ if ( versionFeatureFlags . status === "UNSUPPORTED" ) {
77+ return new Response ( undefined , {
78+ status : 410 ,
79+ statusText : "Gone"
6980 } ) ;
7081 }
7182
72- const response = await getRequest ( request , env , context ) ;
83+ const response = await getRequest ( request , env , context , versionFeatureFlags ) ;
7384
7485 if ( response . status < 200 || response . status > 299 ) {
7586 context . waitUntil ( new Promise < void > ( async ( resolve ) => {
0 commit comments