From 72ddbb7db2f8dc28772cf3c41eb3f48f3537efb9 Mon Sep 17 00:00:00 2001 From: Audric Ackermann Date: Wed, 19 May 2021 10:56:20 +1000 Subject: [PATCH 1/4] 1.6.2 (#1642) * padd Message buffer for all outgoing messages (even opengroupv2) * pad and unpad message everywhere attachment not padded for opengroup only * lint * enable fileserver v2 sending side * removed all en unused local strings * remove all unused keys for other locales * update displayname even if we dont have avatar on incoming profile * redesign group invitation message type * ask confirmation before joining opengroup invitation * remove the channelId from groupInvitation * fallback to envelope timestamp if dataMessage.timestamp is 0 * match group invitation design with ios * speed up first load of room message by prefetching token * create convo for members if they don't exist also, removing a private convo does not remove it entirely as we need the convo to be able to remove members * fix avatar download on restore when linking device Fixes #1601 * make sure the left member convo exist in rendering GroupUpdate * Reply attachments (#1591) * First attachment showing in reply composition. * WIP: Adding thumbnail to quote response composition component. * Added icon for voice recording attachment * Updated formatting. * Formatting. * removed duplicate styling. * WIP: Converting quote component to functional components. * Fix bug where thumbnails for attachment replies wasn't showing. * yarn Formatting. * Removed old quote component. * Add type to contentTypeSupported method. * Moved quote subcomponents out of Quote component. * yarn format * Add export to quote subcomponents. * Fixing linting errors. * remove commented line. * Addressing PR comments. * Allow pasting images into composition box as attachments (#1616) * Allow pasting images into composition box as attachments * Fix linter errors * Fix typo * Get snode from snode (#1614) * force deleteAccount after 10sec timeout waiting for configMessage * move some constants to file where they are used * add a way to fetch snodes from snodes * remove a snode from a pubkey's swarm if we get 421 without valid content * remove getVersion from snodes * hide groupMembers in right panel for non-group convo * Fix fonts sans serif (#1619) * force deleteAccount after 10sec timeout waiting for configMessage * move some constants to file where they are used * add a way to fetch snodes from snodes * remove a snode from a pubkey's swarm if we get 421 without valid content * remove getVersion from snodes * hide groupMembers in right panel for non-group convo * fix font sans serif by using roboto instead Fixes #1617 * WIP: User nicknames (#1618) * WIP Adding change nickname dialog. * WIP adding nickname change dialog. * WIP nickname dialog. * WIP: Able to set conversation nicknames. Next step cleaning and adding to conversation list menu. * Fix message capitilisations. * Add change nickname to conversation list menu. * Enable clear nickname menu item. * Added messages for changing nicknames. * Clearing nicknames working from header and message list. * Adding modal styling to nickname modal. * Reorder nickname menu item positions. * Add group based conditional nickname menu options to conversation header menu. * minor tidying. * Remove unused error causing el option. * Formatting. * Linting fixes. * Made PR fixes * Prioritise displaying nicknames for inviting new closed group members and updating closed group members. * Fix app image start for non-debian based distribs (#1622) Fixes #1620 * fixup nickname dialog for enter key pressed event (#1623) also add some type for it and remove unused props * Fix attachment extension vnd (#1628) * allow openoffice document extension and don't use * allow opendocument to be shared with the extension rather than mimetype Fixes #1593 * allow message without padding * add test for odt files * More Japanese translations (#1632) * Translate some untranslated strings into Japanese * Tweak some Japanese translations * Add new Japanese translations * WIP: Closed group reliability (#1630) * WIP: added non-durable messaging function. * WIP: Non-durable sending * WIP: adding dialog box. * Creating dialog if group invite message promises don't return true. * removed console log * applied PR changes, linting and formatting. * WIP: allowing resend invite to failures. * using lookup. * WIP: recursively opening dialog. * WIP: debugging reject triggering on confirmation modal. * register events fix. * Closed group invite retry dialog working. * Added english text to messages. * Prevent saving of hexkey pair if it already exists. * Fixed nickname edit input trimming end letter. * Don't show closed group invite dialog unless it has failed at least once. * Fix linting error. * Fix plurality. * Ensure admin members are included in all invite reattempts, mixed plurality. * test fixing windows build * Revert "test fixing windows build" This reverts commit 8ed2e0891d160a774de452e8373aea179502e221. * attachment padding not enforced to be 0x00 (#1640) * Consider anything padding (#1641) * Session v1.6.2 (#1639) * padd Message buffer for all outgoing messages (even opengroupv2) * pad and unpad message everywhere attachment not padded for opengroup only * lint * enable fileserver v2 sending side * removed all en unused local strings * remove all unused keys for other locales * update displayname even if we dont have avatar on incoming profile * redesign group invitation message type * ask confirmation before joining opengroup invitation * remove the channelId from groupInvitation * fallback to envelope timestamp if dataMessage.timestamp is 0 * match group invitation design with ios * speed up first load of room message by prefetching token * create convo for members if they don't exist also, removing a private convo does not remove it entirely as we need the convo to be able to remove members * fix avatar download on restore when linking device Fixes #1601 * make sure the left member convo exist in rendering GroupUpdate * Reply attachments (#1591) * First attachment showing in reply composition. * WIP: Adding thumbnail to quote response composition component. * Added icon for voice recording attachment * Updated formatting. * Formatting. * removed duplicate styling. * WIP: Converting quote component to functional components. * Fix bug where thumbnails for attachment replies wasn't showing. * yarn Formatting. * Removed old quote component. * Add type to contentTypeSupported method. * Moved quote subcomponents out of Quote component. * yarn format * Add export to quote subcomponents. * Fixing linting errors. * remove commented line. * Addressing PR comments. * Allow pasting images into composition box as attachments (#1616) * Allow pasting images into composition box as attachments * Fix linter errors * Fix typo * Get snode from snode (#1614) * force deleteAccount after 10sec timeout waiting for configMessage * move some constants to file where they are used * add a way to fetch snodes from snodes * remove a snode from a pubkey's swarm if we get 421 without valid content * remove getVersion from snodes * hide groupMembers in right panel for non-group convo * Fix fonts sans serif (#1619) * force deleteAccount after 10sec timeout waiting for configMessage * move some constants to file where they are used * add a way to fetch snodes from snodes * remove a snode from a pubkey's swarm if we get 421 without valid content * remove getVersion from snodes * hide groupMembers in right panel for non-group convo * fix font sans serif by using roboto instead Fixes #1617 * WIP: User nicknames (#1618) * WIP Adding change nickname dialog. * WIP adding nickname change dialog. * WIP nickname dialog. * WIP: Able to set conversation nicknames. Next step cleaning and adding to conversation list menu. * Fix message capitilisations. * Add change nickname to conversation list menu. * Enable clear nickname menu item. * Added messages for changing nicknames. * Clearing nicknames working from header and message list. * Adding modal styling to nickname modal. * Reorder nickname menu item positions. * Add group based conditional nickname menu options to conversation header menu. * minor tidying. * Remove unused error causing el option. * Formatting. * Linting fixes. * Made PR fixes * Prioritise displaying nicknames for inviting new closed group members and updating closed group members. * Fix app image start for non-debian based distribs (#1622) Fixes #1620 * fixup nickname dialog for enter key pressed event (#1623) also add some type for it and remove unused props * Fix attachment extension vnd (#1628) * allow openoffice document extension and don't use * allow opendocument to be shared with the extension rather than mimetype Fixes #1593 * allow message without padding * add test for odt files * More Japanese translations (#1632) * Translate some untranslated strings into Japanese * Tweak some Japanese translations * Add new Japanese translations * WIP: Closed group reliability (#1630) * WIP: added non-durable messaging function. * WIP: Non-durable sending * WIP: adding dialog box. * Creating dialog if group invite message promises don't return true. * removed console log * applied PR changes, linting and formatting. * WIP: allowing resend invite to failures. * using lookup. * WIP: recursively opening dialog. * WIP: debugging reject triggering on confirmation modal. * register events fix. * Closed group invite retry dialog working. * Added english text to messages. * Prevent saving of hexkey pair if it already exists. * Fixed nickname edit input trimming end letter. * Don't show closed group invite dialog unless it has failed at least once. * Fix linting error. * Fix plurality. * Ensure admin members are included in all invite reattempts, mixed plurality. * test fixing windows build * Revert "test fixing windows build" This reverts commit 8ed2e0891d160a774de452e8373aea179502e221. Co-authored-by: Warrick Co-authored-by: shellhazard Co-authored-by: beantaco <64012487+beantaco@users.noreply.github.com> * attachment padding not enforced to be 0x00 * add message an attachment padding test Co-authored-by: Warrick Co-authored-by: shellhazard Co-authored-by: beantaco <64012487+beantaco@users.noreply.github.com> * Consider anything padding (#1643) * Session v1.6.2 (#1639) * padd Message buffer for all outgoing messages (even opengroupv2) * pad and unpad message everywhere attachment not padded for opengroup only * lint * enable fileserver v2 sending side * removed all en unused local strings * remove all unused keys for other locales * update displayname even if we dont have avatar on incoming profile * redesign group invitation message type * ask confirmation before joining opengroup invitation * remove the channelId from groupInvitation * fallback to envelope timestamp if dataMessage.timestamp is 0 * match group invitation design with ios * speed up first load of room message by prefetching token * create convo for members if they don't exist also, removing a private convo does not remove it entirely as we need the convo to be able to remove members * fix avatar download on restore when linking device Fixes #1601 * make sure the left member convo exist in rendering GroupUpdate * Reply attachments (#1591) * First attachment showing in reply composition. * WIP: Adding thumbnail to quote response composition component. * Added icon for voice recording attachment * Updated formatting. * Formatting. * removed duplicate styling. * WIP: Converting quote component to functional components. * Fix bug where thumbnails for attachment replies wasn't showing. * yarn Formatting. * Removed old quote component. * Add type to contentTypeSupported method. * Moved quote subcomponents out of Quote component. * yarn format * Add export to quote subcomponents. * Fixing linting errors. * remove commented line. * Addressing PR comments. * Allow pasting images into composition box as attachments (#1616) * Allow pasting images into composition box as attachments * Fix linter errors * Fix typo * Get snode from snode (#1614) * force deleteAccount after 10sec timeout waiting for configMessage * move some constants to file where they are used * add a way to fetch snodes from snodes * remove a snode from a pubkey's swarm if we get 421 without valid content * remove getVersion from snodes * hide groupMembers in right panel for non-group convo * Fix fonts sans serif (#1619) * force deleteAccount after 10sec timeout waiting for configMessage * move some constants to file where they are used * add a way to fetch snodes from snodes * remove a snode from a pubkey's swarm if we get 421 without valid content * remove getVersion from snodes * hide groupMembers in right panel for non-group convo * fix font sans serif by using roboto instead Fixes #1617 * WIP: User nicknames (#1618) * WIP Adding change nickname dialog. * WIP adding nickname change dialog. * WIP nickname dialog. * WIP: Able to set conversation nicknames. Next step cleaning and adding to conversation list menu. * Fix message capitilisations. * Add change nickname to conversation list menu. * Enable clear nickname menu item. * Added messages for changing nicknames. * Clearing nicknames working from header and message list. * Adding modal styling to nickname modal. * Reorder nickname menu item positions. * Add group based conditional nickname menu options to conversation header menu. * minor tidying. * Remove unused error causing el option. * Formatting. * Linting fixes. * Made PR fixes * Prioritise displaying nicknames for inviting new closed group members and updating closed group members. * Fix app image start for non-debian based distribs (#1622) Fixes #1620 * fixup nickname dialog for enter key pressed event (#1623) also add some type for it and remove unused props * Fix attachment extension vnd (#1628) * allow openoffice document extension and don't use * allow opendocument to be shared with the extension rather than mimetype Fixes #1593 * allow message without padding * add test for odt files * More Japanese translations (#1632) * Translate some untranslated strings into Japanese * Tweak some Japanese translations * Add new Japanese translations * WIP: Closed group reliability (#1630) * WIP: added non-durable messaging function. * WIP: Non-durable sending * WIP: adding dialog box. * Creating dialog if group invite message promises don't return true. * removed console log * applied PR changes, linting and formatting. * WIP: allowing resend invite to failures. * using lookup. * WIP: recursively opening dialog. * WIP: debugging reject triggering on confirmation modal. * register events fix. * Closed group invite retry dialog working. * Added english text to messages. * Prevent saving of hexkey pair if it already exists. * Fixed nickname edit input trimming end letter. * Don't show closed group invite dialog unless it has failed at least once. * Fix linting error. * Fix plurality. * Ensure admin members are included in all invite reattempts, mixed plurality. * test fixing windows build * Revert "test fixing windows build" This reverts commit 8ed2e0891d160a774de452e8373aea179502e221. Co-authored-by: Warrick Co-authored-by: shellhazard Co-authored-by: beantaco <64012487+beantaco@users.noreply.github.com> * attachment padding not enforced to be 0x00 * add message an attachment padding test Co-authored-by: Warrick Co-authored-by: shellhazard Co-authored-by: beantaco <64012487+beantaco@users.noreply.github.com> Co-authored-by: Warrick Co-authored-by: shellhazard Co-authored-by: beantaco <64012487+beantaco@users.noreply.github.com> --- ts/session/crypto/BufferPadding.ts | 18 ++-- ts/test/session/unit/padding/Padding_test.ts | 92 ++++++++++++++++++++ 2 files changed, 98 insertions(+), 12 deletions(-) create mode 100644 ts/test/session/unit/padding/Padding_test.ts diff --git a/ts/session/crypto/BufferPadding.ts b/ts/session/crypto/BufferPadding.ts index 5658cd7c0..1e6436aed 100644 --- a/ts/session/crypto/BufferPadding.ts +++ b/ts/session/crypto/BufferPadding.ts @@ -12,14 +12,14 @@ const PADDING_BYTE = 0x00; */ export function removeMessagePadding(paddedData: ArrayBuffer): ArrayBuffer { const paddedPlaintext = new Uint8Array(paddedData); - window.log.info('Removing message padding...'); + window?.log.info('Removing message padding...'); for (let i = paddedPlaintext.length - 1; i >= 0; i -= 1) { if (paddedPlaintext[i] === 0x80) { const plaintext = new Uint8Array(i); plaintext.set(paddedPlaintext.subarray(0, i)); return plaintext.buffer; } else if (paddedPlaintext[i] !== PADDING_BYTE) { - window.log.warn('got a message without padding... Letting it through for now'); + window?.log.warn('got a message without padding... Letting it through for now'); return paddedPlaintext; } } @@ -32,7 +32,7 @@ export function removeMessagePadding(paddedData: ArrayBuffer): ArrayBuffer { * @param messageBuffer The buffer to add padding to. */ export function addMessagePadding(messageBuffer: Uint8Array): Uint8Array { - window.log?.info('Adding message padding...'); + window?.log?.info('Adding message padding...'); const plaintext = new Uint8Array(getPaddedMessageLength(messageBuffer.byteLength + 1) - 1); plaintext.set(new Uint8Array(messageBuffer)); @@ -59,25 +59,19 @@ export function getUnpaddedAttachment( data: ArrayBuffer, unpaddedExpectedSize: number ): ArrayBuffer | null { - window.log?.info('Removing attachment padding...'); + window?.log?.info('Removing attachment padding...'); // to have a padding we must have a strictly longer length expected if (data.byteLength <= unpaddedExpectedSize) { return null; } - const dataUint = new Uint8Array(data); - for (let i = unpaddedExpectedSize; i < data.byteLength; i++) { - if (dataUint[i] !== PADDING_BYTE) { - return null; - } - } - + // we now consider that anything coming after the expected size is padding, no matter what there is there return data.slice(0, unpaddedExpectedSize); } export function addAttachmentPadding(data: ArrayBuffer): ArrayBuffer { const originalUInt = new Uint8Array(data); - window.log.info('Adding attchment padding...'); + window?.log.info('Adding attchment padding...'); const paddedSize = Math.max( 541, diff --git a/ts/test/session/unit/padding/Padding_test.ts b/ts/test/session/unit/padding/Padding_test.ts new file mode 100644 index 000000000..ff397ed28 --- /dev/null +++ b/ts/test/session/unit/padding/Padding_test.ts @@ -0,0 +1,92 @@ +// tslint:disable: no-implicit-dependencies max-func-body-length no-unused-expression + +import chai from 'chai'; +import * as sinon from 'sinon'; +import _ from 'lodash'; +import { describe } from 'mocha'; + +import chaiAsPromised from 'chai-as-promised'; +import { + addAttachmentPadding, + addMessagePadding, + getUnpaddedAttachment, + removeMessagePadding, +} from '../../../../session/crypto/BufferPadding'; +chai.use(chaiAsPromised as any); +chai.should(); + +const { expect } = chai; + +// tslint:disable-next-line: max-func-body-length +describe('Padding', () => { + describe('Attachment padding', () => { + it('add padding', () => { + const bufferIn = new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]); + + const paddedBuffer = addAttachmentPadding(bufferIn); + expect(paddedBuffer.byteLength).to.equal(541); + expect(new Uint8Array(paddedBuffer.slice(0, bufferIn.length))).to.equalBytes(bufferIn); + // this makes sure that the padding is just the 0 bytes + expect(new Uint8Array(paddedBuffer.slice(bufferIn.length))).to.equalBytes( + new Uint8Array(541 - bufferIn.length) + ); + }); + + it('remove padding', () => { + // padding can be anything after the expected size + const expectedSize = 10; + const paddedBuffer = new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 5]); + + const paddingRemoveBuffer = getUnpaddedAttachment(paddedBuffer, expectedSize); + + expect(paddingRemoveBuffer?.byteLength).to.equal(expectedSize); + expect(paddingRemoveBuffer).to.equalBytes(paddedBuffer.slice(0, expectedSize)); + }); + }); + + describe('Message padding', () => { + it('add padding', () => { + const bufferIn = new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]); + + const paddedMessage = addMessagePadding(bufferIn); + expect(paddedMessage.byteLength).to.equal(159); + // for message padding, we have [bufferIn, 0x80, 0x00, 0x00, 0x00, ...] + expect(new Uint8Array(paddedMessage.slice(0, bufferIn.length))).to.equalBytes(bufferIn); + expect(paddedMessage[bufferIn.length]).to.equal(0x80); + // this makes sure that the padding is just the 0 bytes + expect(new Uint8Array(paddedMessage.slice(bufferIn.length + 1))).to.equalBytes( + new Uint8Array(159 - bufferIn.length - 1) + ); + }); + + it('remove padding', () => { + const expectedSize = 10; + const paddedBuffer = new Uint8Array([ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 128, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + ]); + + const unpaddedMessage = removeMessagePadding(paddedBuffer); + // for message padding, we have [paddedBuffer, 0x80, 0x00, 0x00, 0x00, ...] + expect(unpaddedMessage?.byteLength).to.equal(expectedSize); + expect(new Uint8Array(unpaddedMessage)).to.equalBytes(paddedBuffer.slice(0, expectedSize)); + }); + }); +}); From 81f8870f41afa291b34b861ba30d7db279599951 Mon Sep 17 00:00:00 2001 From: Audric Ackermann Date: Thu, 20 May 2021 13:05:13 +1000 Subject: [PATCH 3/4] Session V1.6.3 (#1647) --- ts/components/session/ActionsPanel.tsx | 16 +++++++++++ ts/fileserver/FileServerApiV2.ts | 31 +++++++++++++++++----- ts/opengroup/opengroupV2/OpenGroupAPIV2.ts | 2 +- ts/receiver/attachments.ts | 5 ++-- 4 files changed, 44 insertions(+), 10 deletions(-) diff --git a/ts/components/session/ActionsPanel.tsx b/ts/components/session/ActionsPanel.tsx index 5ced06163..f7cb86005 100644 --- a/ts/components/session/ActionsPanel.tsx +++ b/ts/components/session/ActionsPanel.tsx @@ -8,6 +8,7 @@ import { UserUtils } from '../../session/utils'; import { syncConfigurationIfNeeded } from '../../session/utils/syncUtils'; import { DAYS, MINUTES } from '../../session/utils/Number'; import { + createOrUpdateItem, generateAttachmentKeyIfEmpty, getItemById, hasSyncedInitialConfigurationItem, @@ -45,6 +46,20 @@ export enum SectionType { Moon, } +const showUnstableAttachmentsDialogIfNeeded = async () => { + const alreadyShown = (await getItemById('showUnstableAttachmentsDialog'))?.value; + + if (!alreadyShown) { + window.confirmationDialog({ + title: 'File server update', + message: + "We're upgrading the way files are stored. File transfer may be unstable for the next 24-48 hours.", + }); + + await createOrUpdateItem({ id: 'showUnstableAttachmentsDialog', value: true }); + } +}; + const Section = (props: { type: SectionType; avatarPath?: string }) => { const ourNumber = useSelector(getOurNumber); const unreadMessageCount = useSelector(getUnreadMessageCount); @@ -158,6 +173,7 @@ const doAppStartUp = (dispatch: Dispatch) => { void OnionPaths.getInstance().buildNewOnionPaths(); } + void showUnstableAttachmentsDialogIfNeeded(); // init the messageQueue. In the constructor, we add all not send messages // this call does nothing except calling the constructor, which will continue sending message in the pipeline void getMessageQueue().processAllPending(); diff --git a/ts/fileserver/FileServerApiV2.ts b/ts/fileserver/FileServerApiV2.ts index 0cbf973c6..cc2262d6e 100644 --- a/ts/fileserver/FileServerApiV2.ts +++ b/ts/fileserver/FileServerApiV2.ts @@ -4,9 +4,14 @@ import { parseStatusCodeFromOnionRequest } from '../opengroup/opengroupV2/OpenGr import { fromArrayBufferToBase64, fromBase64ToArrayBuffer } from '../session/utils/String'; // tslint:disable-next-line: no-http-string -export const fileServerV2URL = 'http://88.99.175.227'; -export const fileServerV2PubKey = +export const oldFileServerV2URL = 'http://88.99.175.227'; +export const oldFileServerV2PubKey = '7cb31905b55cd5580c686911debf672577b3fb0bff81df4ce2d5c4cb3a7aaa69'; +// tslint:disable-next-line: no-http-string +export const fileServerV2URL = 'http://filev2.getsession.org'; + +export const fileServerV2PubKey = + 'da21e1d886c6fbaea313f75298bd64aab03a97ce985b46bb2dad9f2089c8ee59'; export type FileServerV2Request = { method: 'GET' | 'POST' | 'DELETE' | 'PUT'; @@ -14,6 +19,7 @@ export type FileServerV2Request = { // queryParams are used for post or get, but not the same way queryParams?: Record; headers?: Record; + isOldV2server?: boolean; // to remove in a few days }; const FILES_ENDPOINT = 'files'; @@ -67,7 +73,8 @@ export const uploadFileToFsV2 = async ( * @returns the data as an Uint8Array or null */ export const downloadFileFromFSv2 = async ( - fileIdOrCompleteUrl: string + fileIdOrCompleteUrl: string, + isOldV2server: boolean ): Promise => { let fileId = fileIdOrCompleteUrl; if (!fileIdOrCompleteUrl) { @@ -75,13 +82,19 @@ export const downloadFileFromFSv2 = async ( return null; } - const completeUrlPrefix = `${fileServerV2URL}/${FILES_ENDPOINT}/`; - if (fileIdOrCompleteUrl.startsWith(completeUrlPrefix)) { - fileId = fileId.substr(completeUrlPrefix.length); + const oldCompleteUrlPrefix = `${oldFileServerV2URL}/${FILES_ENDPOINT}/`; + const newCompleteUrlPrefix = `${fileServerV2URL}/${FILES_ENDPOINT}/`; + + if (fileIdOrCompleteUrl.startsWith(newCompleteUrlPrefix)) { + fileId = fileId.substr(newCompleteUrlPrefix.length); + } else if (fileIdOrCompleteUrl.startsWith(oldCompleteUrlPrefix)) { + fileId = fileId.substr(oldCompleteUrlPrefix.length); } + const request: FileServerV2Request = { method: 'GET', endpoint: `${FILES_ENDPOINT}/${fileId}`, + isOldV2server, }; const result = await sendApiV2Request(request); @@ -119,7 +132,11 @@ export const buildUrl = (request: FileServerV2Request | OpenGroupV2Request): URL if (isOpenGroupV2Request(request)) { rawURL = `${request.server}/${request.endpoint}`; } else { - rawURL = `${fileServerV2URL}/${request.endpoint}`; + if (request.isOldV2server) { + rawURL = `${oldFileServerV2URL}/${request.endpoint}`; + } else { + rawURL = `${fileServerV2URL}/${request.endpoint}`; + } } if (request.method === 'GET') { diff --git a/ts/opengroup/opengroupV2/OpenGroupAPIV2.ts b/ts/opengroup/opengroupV2/OpenGroupAPIV2.ts index abe7a5b48..41a649adc 100644 --- a/ts/opengroup/opengroupV2/OpenGroupAPIV2.ts +++ b/ts/opengroup/opengroupV2/OpenGroupAPIV2.ts @@ -57,7 +57,7 @@ const getDestinationPubKey = async ( } } else { // this is a fileServer call - return FSv2.fileServerV2PubKey; + return request.isOldV2server ? FSv2.oldFileServerV2PubKey : FSv2.fileServerV2PubKey; } }; diff --git a/ts/receiver/attachments.ts b/ts/receiver/attachments.ts index 36e4a1988..0cda9eb5e 100644 --- a/ts/receiver/attachments.ts +++ b/ts/receiver/attachments.ts @@ -23,18 +23,19 @@ export async function downloadAttachment(attachment: any) { serverUrl ); // is it an attachment hosted on the file server v2 ? + const defaultFsOldV2 = _.startsWith(serverUrl, FSv2.oldFileServerV2URL); const defaultFsV2 = _.startsWith(serverUrl, FSv2.fileServerV2URL); let res: ArrayBuffer | null = null; - if (defaultFsV2) { + if (defaultFsV2 || defaultFsOldV2) { let attachmentId = attachment.id; if (!attachmentId) { // try to get the fileId from the end of the URL attachmentId = attachment.url; } window.log.info('Download v2 file server attachment'); - res = await FSv2.downloadFileFromFSv2(attachmentId); + res = await FSv2.downloadFileFromFSv2(attachmentId, defaultFsOldV2); } else if (!defaultFileserver) { // TODO: we need attachments to remember which API should be used to retrieve them const serverAPI = await window.lokiPublicChatAPI.findOrCreateServer(serverUrl); From 76256383a96c4cecbc2e4d36acc39819d9ce0d32 Mon Sep 17 00:00:00 2001 From: Audric Ackermann Date: Thu, 20 May 2021 14:12:41 +1000 Subject: [PATCH 4/4] bump to 1.6.3 (#1649) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cdf95c932..52d882c81 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "session-desktop", "productName": "Session", "description": "Private messaging from your desktop", - "version": "1.6.2", + "version": "1.6.3", "license": "GPL-3.0", "author": { "name": "Loki Project",