@@ -26,24 +26,39 @@ import { PG_CONNECTION, CRYPTO_KEY } from '../constants.js'
2626export default async ( fastify : FastifyInstance ) => {
2727 // Adds a "pg" object to the request if it doesn't exist
2828 fastify . addHook ( 'onRequest' , ( request , _reply , done ) => {
29- // Node converts headers to lowercase
30- const encryptedHeader = request . headers [ 'x-connection-encrypted' ] ?. toString ( )
31- if ( encryptedHeader ) {
29+ try {
30+ // Node converts headers to lowercase
31+ const encryptedHeader = request . headers [ 'x-connection-encrypted' ] ?. toString ( )
32+ if ( encryptedHeader ) {
33+ try {
34+ request . headers . pg = CryptoJS . AES . decrypt ( encryptedHeader , CRYPTO_KEY )
35+ . toString ( CryptoJS . enc . Utf8 )
36+ . trim ( )
37+ } catch ( e : any ) {
38+ request . log . warn ( {
39+ message : 'failed to parse encrypted connstring' ,
40+ error : e . toString ( ) ,
41+ } )
42+ throw new Error ( 'failed to process upstream connection details' )
43+ }
44+ } else {
45+ request . headers . pg = PG_CONNECTION
46+ }
47+ if ( ! request . headers . pg ) {
48+ request . log . error ( { message : 'failed to get connection string' } )
49+ throw new Error ( 'failed to get upstream connection details' )
50+ }
51+ // Ensure the resulting connection string is a valid URL
3252 try {
33- request . headers . pg = CryptoJS . AES . decrypt ( encryptedHeader , CRYPTO_KEY ) . toString (
34- CryptoJS . enc . Utf8
35- )
36- } catch ( e : any ) {
37- request . log . warn ( {
38- message : 'failed to parse encrypted connstring' ,
39- error : e . toString ( ) ,
40- } )
53+ new URL ( request . headers . pg )
54+ } catch ( error ) {
55+ request . log . error ( { message : 'pg connection string is invalid url' } )
4156 throw new Error ( 'failed to process upstream connection details' )
4257 }
43- } else {
44- request . headers . pg = PG_CONNECTION
58+ done ( )
59+ } catch ( err ) {
60+ return done ( err as Error )
4561 }
46- done ( )
4762 } )
4863
4964 fastify . register ( ColumnPrivilegesRoute , { prefix : '/column-privileges' } )
0 commit comments