From 8e6ee9ea7935071d55fc78c43c948a3db71fbd15 Mon Sep 17 00:00:00 2001 From: KernelDeimos Date: Mon, 29 Apr 2024 22:48:10 -0400 Subject: [PATCH] Fix oversight in token compression --- .../backend/src/services/auth/TokenService.js | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/packages/backend/src/services/auth/TokenService.js b/packages/backend/src/services/auth/TokenService.js index 4a0d2df83..1dda5ff1b 100644 --- a/packages/backend/src/services/auth/TokenService.js +++ b/packages/backend/src/services/auth/TokenService.js @@ -25,8 +25,15 @@ defv = o => { }; }; -const uuid_compression = { +const uuid_compression = prefix => ({ encode: v => { + if ( prefix ) { + if ( ! v.startsWith(prefix) ) { + throw new Error(`Expected ${prefix} prefix`); + } + v = v.slice(prefix.length); + } + const undecorated = v.replace(/-/g, ""); const base64 = Buffer .from(undecorated, 'hex') @@ -40,7 +47,7 @@ const uuid_compression = { const undecorated = Buffer .from(v, 'base64') .toString('hex'); - return [ + return (prefix ?? '') + [ undecorated.slice(0, 8), undecorated.slice(8, 12), undecorated.slice(12, 16), @@ -48,13 +55,13 @@ const uuid_compression = { undecorated.slice(20), ].join('-'); } -}; +}); const compression = { auth: def({ uuid: { short: 'u', - ...uuid_compression, + ...uuid_compression(), }, version: 'v', type: { @@ -67,11 +74,11 @@ const compression = { }, user_uid: { short: 'uu', - ...uuid_compression, + ...uuid_compression(), }, app_uid: { short: 'au', - ...uuid_compression, + ...uuid_compression('app-'), }, }), }; @@ -97,6 +104,7 @@ class TokenService extends BaseService { const secret = this.secret; const context = this.compression[scope]; + console.log('original payload', payload) const compressed_payload = this._compress_payload(context, payload); return jwt.sign(compressed_payload, secret, options); @@ -111,9 +119,11 @@ class TokenService extends BaseService { const context = this.compression[scope]; const payload = jwt.verify(token, secret); - console.log('payloda', payload) + console.log('payload', payload) - return this._decompress_payload(context, payload); + const decoded = this._decompress_payload(context, payload); + console.log('decoded', decoded); + return decoded; } _compress_payload (context, payload) {