From 36911d7ed6af91040a94b0797f7bc1c5f46d454e Mon Sep 17 00:00:00 2001 From: Aiden McClelland <3732071+dr-bonez@users.noreply.github.com> Date: Mon, 12 Sep 2022 13:20:49 -0600 Subject: [PATCH] use base64 for HTTP headers (#1795) * use base64 for HTTP headers * fe for base64 headers Co-authored-by: Matt Hill --- backend/src/middleware/db.rs | 16 ++++++++-------- frontend/package-lock.json | 1 + frontend/package.json | 1 + .../app/services/api/embassy-live-api.service.ts | 16 ++++++++++++---- frontend/tsconfig.json | 3 --- 5 files changed, 22 insertions(+), 15 deletions(-) diff --git a/backend/src/middleware/db.rs b/backend/src/middleware/db.rs index 0d9c1d40b..232e05086 100644 --- a/backend/src/middleware/db.rs +++ b/backend/src/middleware/db.rs @@ -47,10 +47,10 @@ pub fn db(ctx: RpcContext) -> DynMiddleware { Err(dump) => serde_json::to_vec(&[dump]), } .with_kind(crate::ErrorKind::Serialization)?; - Ok::<_, Error>( - url::form_urlencoded::byte_serialize(&json) - .collect::(), - ) + Ok::<_, Error>(base64::encode_config( + &json, + base64::URL_SAFE, + )) } .await { @@ -60,10 +60,10 @@ pub fn db(ctx: RpcContext) -> DynMiddleware { Err(e) => res.headers.append( "X-Patch-Error", HeaderValue::from_str( - &url::form_urlencoded::byte_serialize( - e.to_string().as_bytes(), - ) - .collect::(), + &base64::encode_config( + &e.to_string(), + base64::URL_SAFE, + ), )?, ), }; diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 75dcf4fd6..14b6fa2ea 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -23,6 +23,7 @@ "@start9labs/emver": "^0.1.5", "aes-js": "^3.1.2", "ansi-to-html": "^0.7.2", + "base64-js": "^1.5.1", "cbor": "npm:@jprochazk/cbor@^0.4.9", "cbor-web": "^8.1.0", "core-js": "^3.21.1", diff --git a/frontend/package.json b/frontend/package.json index a3b92fb03..e5a1689b7 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -37,6 +37,7 @@ "@start9labs/emver": "^0.1.5", "aes-js": "^3.1.2", "ansi-to-html": "^0.7.2", + "base64-js": "^1.5.1", "cbor": "npm:@jprochazk/cbor@^0.4.9", "cbor-web": "^8.1.0", "core-js": "^3.21.1", diff --git a/frontend/projects/ui/src/app/services/api/embassy-live-api.service.ts b/frontend/projects/ui/src/app/services/api/embassy-live-api.service.ts index da0049144..5b7bbdd69 100644 --- a/frontend/projects/ui/src/app/services/api/embassy-live-api.service.ts +++ b/frontend/projects/ui/src/app/services/api/embassy-live-api.service.ts @@ -18,6 +18,7 @@ import { AuthService } from '../auth.service' import { DOCUMENT } from '@angular/common' import { DataModel } from '../patch-db/data-model' import { PatchDB, Update } from 'patch-db-client' +import * as Base64 from 'base64-js' @Injectable() export class LiveApiService extends ApiService { @@ -415,15 +416,22 @@ export class LiveApiService extends ApiService { } const res = await this.http.rpcRequest(options) - const encoded = res.headers.get('x-patch-updates') + const encodedUpdates = res.headers.get('x-patch-updates') + const encodedError = res.headers.get('x-patch-error') - if (encoded) { - const updates: Update[] = JSON.parse( - decodeURIComponent(encoded), + if (encodedUpdates) { + const decoded = new TextDecoder().decode( + Base64.toByteArray(encodedUpdates), ) + const updates: Update[] = JSON.parse(decoded) this.patchStream$.next(updates) } + if (encodedError) { + const error = new TextDecoder().decode(Base64.toByteArray(encodedError)) + console.error(error) + } + const rpcRes = res.body if (isRpcError(rpcRes)) { diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index 4383466c1..89f8e9548 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -20,9 +20,6 @@ "module": "es2020", "lib": ["es2020", "dom"], "paths": { - "stream": ["./node_modules/stream-browserify"], - "crypto": ["./node_modules/crypto-browserify"], - "vm": ["./node_modules/vm-browserify"], /* These paths are relative to each app base folder */ "@start9labs/marketplace": ["../marketplace/src/public-api"], "@start9labs/shared": ["../shared/src/public-api"]