@@ -26,24 +26,39 @@ import { PG_CONNECTION, CRYPTO_KEY } from '../constants.js'
26
26
export default async ( fastify : FastifyInstance ) => {
27
27
// Adds a "pg" object to the request if it doesn't exist
28
28
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
32
52
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' } )
41
56
throw new Error ( 'failed to process upstream connection details' )
42
57
}
43
- } else {
44
- request . headers . pg = PG_CONNECTION
58
+ done ( )
59
+ } catch ( err ) {
60
+ return done ( err as Error )
45
61
}
46
- done ( )
47
62
} )
48
63
49
64
fastify . register ( ColumnPrivilegesRoute , { prefix : '/column-privileges' } )
0 commit comments