From 87b691762f0324834ba2059dd1a587c63da36039 Mon Sep 17 00:00:00 2001 From: igorwork <markin.io210@gmail.com> Date: Fri, 11 Sep 2020 18:09:22 +0300 Subject: [PATCH] Implement sender status object encoding --- __tests__/ObfuscationService.test.js | 1 + __tests__/StatusesService.test.js | 15 ++++++++-- jest.config.js | 7 ++--- .../StatusesService/StatusesService.ts | 29 ++++++++++++++----- src/utils.ts | 14 ++++----- 5 files changed, 43 insertions(+), 23 deletions(-) diff --git a/__tests__/ObfuscationService.test.js b/__tests__/ObfuscationService.test.js index 1f6374c..115402f 100644 --- a/__tests__/ObfuscationService.test.js +++ b/__tests__/ObfuscationService.test.js @@ -8,6 +8,7 @@ const encodeObject = (object) => { const decodeObject = (arrayBuffer) => { const decoder = new TextDecoder(); + // console.log(decoder.decode(arrayBuffer)); return JSON.parse(decoder.decode(arrayBuffer)); }; diff --git a/__tests__/StatusesService.test.js b/__tests__/StatusesService.test.js index 785d747..9684f08 100644 --- a/__tests__/StatusesService.test.js +++ b/__tests__/StatusesService.test.js @@ -2,8 +2,19 @@ import { describe, test } from "@jest/globals"; import StatusesService from "../src/services/StatusesService"; describe("StatusesService", () => { - test("test", async () => { + test("encodes and decodes sender status object", async () => { const statusesService = new StatusesService(); - statusesService.test(); + + const textEncoder = new TextEncoder(); // always utf-8 + const stringBytes = textEncoder.encode("test bytes"); + + const statusObjectBytes = statusesService.encodeSenderStatusObject( + 1, + stringBytes, + stringBytes, + { + attachment_1: stringBytes, + } + ); }); }); diff --git a/jest.config.js b/jest.config.js index 65f67c9..9914c02 100644 --- a/jest.config.js +++ b/jest.config.js @@ -135,7 +135,7 @@ module.exports = { // snapshotSerializers: [], // The test environment that will be used for testing - // testEnvironment: "jest-environment-jsdom", + testEnvironment: "jest-environment-node", // Options that will be passed to the testEnvironment // testEnvironmentOptions: {}, @@ -150,10 +150,7 @@ module.exports = { // ], // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped - testPathIgnorePatterns: [ - "/node_modules/", - "setupFiles.js" - ], + testPathIgnorePatterns: ["/node_modules/", "setupFiles.js"], // The regexp pattern or array of patterns that Jest uses to detect test files // testRegex: [], diff --git a/src/services/StatusesService/StatusesService.ts b/src/services/StatusesService/StatusesService.ts index 7d67db9..4c07e49 100644 --- a/src/services/StatusesService/StatusesService.ts +++ b/src/services/StatusesService/StatusesService.ts @@ -1,4 +1,4 @@ -// const statuses = require("./objects/statuses_pb"); +const statuses = require("./objects/statuses_pb"); // const { arrayBufferToBase64 } = require("../../../dist/utils"); // var message = new messages.MyMessage(); @@ -41,12 +41,27 @@ class StatusesService { * @param messageSignature * @param attachmentsSignature */ - // createSenderStatusObject( - // signatureTime: number, - // signatureTimeSignature: string, - // messageSignature: string, - // attachmentsSignature: { [key: string]: string } - // ): string {} + encodeSenderStatusObject( + signatureTime: number, + signatureTimeSignature: Uint8Array, + messageSignature: Uint8Array, + attachmentsSignature: { [key: string]: Uint8Array } + ): Uint8Array { + const senderStatusObject = new statuses.SenderStatusObject(); + senderStatusObject.setSignaturetime(signatureTime); + senderStatusObject.setSignaturetimesignature(signatureTimeSignature); + senderStatusObject.setMessagesignature(messageSignature); + + Object.keys(attachmentsSignature).forEach((key) => { + senderStatusObject + .getAttachmentssignatureMap() + .set(key, attachmentsSignature[key]); + }); + + console.log(senderStatusObject.toObject()); + + return senderStatusObject.serializeBinary(); + } } export default StatusesService; diff --git a/src/utils.ts b/src/utils.ts index 2526cf7..37af78b 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,19 +1,15 @@ export const arrayBufferToBase64 = (buffer: ArrayBuffer): string => { - let binary = ""; - const bytes = new Uint8Array(buffer); - const len = bytes.byteLength; - for (let i = 0; i < len; i++) { - binary += String.fromCharCode(bytes[i]); - } - return window.btoa(binary); + return Buffer.from(buffer).toString("base64"); }; export const base64ToArrayBuffer = (base64: string): ArrayBuffer => { - const binaryString = window.atob(base64); + const binaryString = new Buffer(base64, "base64").toString(); const len = binaryString.length; const bytes = new Uint8Array(len); + for (let i = 0; i < len; i++) { bytes[i] = binaryString.charCodeAt(i); } - return bytes.buffer; + + return bytes; }; -- GitLab