@@ -222,27 +222,31 @@ export function checkDynamoDbQueryIsSafe(query: string): QuerySafetyResult {
222222 return checkSqlQueryIsSafe ( query ) ;
223223}
224224
225+ type QuerySafetyChecker = ( query : string ) => QuerySafetyResult ;
226+
227+ const CONNECTION_TYPE_CHECKERS : ReadonlyMap < ConnectionTypesEnum , QuerySafetyChecker > = new Map ( [
228+ ...SQL_CONNECTION_TYPES . map ( ( type ) : [ ConnectionTypesEnum , QuerySafetyChecker ] => [ type , checkSqlQueryIsSafe ] ) ,
229+ ...MONGODB_CONNECTION_TYPES . map ( ( type ) : [ ConnectionTypesEnum , QuerySafetyChecker ] => [ type , checkMongoQueryIsSafe ] ) ,
230+ ...ELASTICSEARCH_CONNECTION_TYPES . map ( ( type ) : [ ConnectionTypesEnum , QuerySafetyChecker ] => [
231+ type ,
232+ checkElasticsearchQueryIsSafe ,
233+ ] ) ,
234+ ...REDIS_CONNECTION_TYPES . map ( ( type ) : [ ConnectionTypesEnum , QuerySafetyChecker ] => [ type , checkRedisQueryIsSafe ] ) ,
235+ ...DYNAMODB_CONNECTION_TYPES . map ( ( type ) : [ ConnectionTypesEnum , QuerySafetyChecker ] => [
236+ type ,
237+ checkDynamoDbQueryIsSafe ,
238+ ] ) ,
239+ ] ) ;
240+
225241export function validateQuerySafety ( query : string , connectionType : ConnectionTypesEnum ) : void {
226- let result : QuerySafetyResult ;
227-
228- if ( MONGODB_CONNECTION_TYPES . includes ( connectionType ) ) {
229- result = checkMongoQueryIsSafe ( query ) ;
230- } else if ( ELASTICSEARCH_CONNECTION_TYPES . includes ( connectionType ) ) {
231- result = checkElasticsearchQueryIsSafe ( query ) ;
232- } else if ( REDIS_CONNECTION_TYPES . includes ( connectionType ) ) {
233- result = checkRedisQueryIsSafe ( query ) ;
234- } else if ( DYNAMODB_CONNECTION_TYPES . includes ( connectionType ) ) {
235- result = checkDynamoDbQueryIsSafe ( query ) ;
236- } else if ( SQL_CONNECTION_TYPES . includes ( connectionType ) ) {
237- result = checkSqlQueryIsSafe ( query ) ;
238- } else {
239- result = checkSqlQueryIsSafe ( query ) ;
240- }
242+ const checker = CONNECTION_TYPE_CHECKERS . get ( connectionType ) ?? checkSqlQueryIsSafe ;
243+ const result = checker ( query ) ;
241244
242245 if ( ! result . isSafe ) {
243246 throw new BadRequestException ( `Unsafe query: ${ result . reason } . Only read-only queries are allowed.` ) ;
244247 }
245248}
249+
246250function normalizeQuery ( query : string ) : string {
247251 return query
248252 . replace ( / - - .* $ / gm, '' )
0 commit comments