diff --git a/ts/components/session/ActionsPanel.tsx b/ts/components/session/ActionsPanel.tsx index c8e42cef0..cbc555ce8 100644 --- a/ts/components/session/ActionsPanel.tsx +++ b/ts/components/session/ActionsPanel.tsx @@ -36,6 +36,7 @@ import { getMessages, getModerators, postMessage, + uploadFileOpenGroupV2, } from '../../opengroup/opengroupV2/OpenGroupAPIV2'; import { OpenGroupMessageV2 } from '../../opengroup/opengroupV2/OpenGroupMessageV2'; // tslint:disable-next-line: no-import-side-effect no-submodule-imports @@ -194,22 +195,25 @@ export const ActionsPanel = () => { if (parsedRoom) { setTimeout(async () => { await joinOpenGroupV2(parsedRoom); - const oldMessages = await getMessages({ - serverUrl: parsedRoom.serverUrl, - roomId: parsedRoom.roomId, - }); - const msg = new OpenGroupMessageV2({ - base64EncodedData: 'dffdldfkldf', - sentTimestamp: Date.now(), - }); - const postedMessage = await postMessage(msg, { - serverUrl: parsedRoom.serverUrl, - roomId: parsedRoom.roomId, - }); - const newMessages = await getMessages({ - serverUrl: parsedRoom.serverUrl, - roomId: parsedRoom.roomId, - }); + // const oldMessages = await getMessages({ + // serverUrl: parsedRoom.serverUrl, + // roomId: parsedRoom.roomId, + // }); + // const msg = new OpenGroupMessageV2({ + // base64EncodedData: 'dffdldfkldf', + // sentTimestamp: Date.now(), + // }); + // const postedMessage = await postMessage(msg, { + // serverUrl: parsedRoom.serverUrl, + // roomId: parsedRoom.roomId, + // }); + const fileID = await uploadFileOpenGroupV2( + new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9]), + { + serverUrl: parsedRoom.serverUrl, + roomId: parsedRoom.roomId, + } + ); }, 6000); } }, []); diff --git a/ts/opengroup/opengroupV2/OpenGroupAPIV2.ts b/ts/opengroup/opengroupV2/OpenGroupAPIV2.ts index 953e77e75..ee4c52b51 100644 --- a/ts/opengroup/opengroupV2/OpenGroupAPIV2.ts +++ b/ts/opengroup/opengroupV2/OpenGroupAPIV2.ts @@ -6,7 +6,11 @@ import { import { ConversationController } from '../../session/conversations'; import { sendViaOnion } from '../../session/onions/onionSend'; import { allowOnlyOneAtATime } from '../../session/utils/Promise'; -import { fromBase64ToArrayBuffer, toHex } from '../../session/utils/String'; +import { + fromArrayBufferToBase64, + fromBase64ToArrayBuffer, + toHex, +} from '../../session/utils/String'; import { getIdentityKeyPair, getOurPubKeyStrFromCache, @@ -71,11 +75,16 @@ async function sendOpenGroupV2Request( return null; } headers.Authorization = token; - const res = await sendViaOnion(roomDetails.serverPublicKey, builtUrl, { - method: request.method, - headers, - body, - }); + const res = await sendViaOnion( + roomDetails.serverPublicKey, + builtUrl, + { + method: request.method, + headers, + body, + }, + { noJson: true } + ); const statusCode = parseStatusCodeFromOnionRequest(res); if (!statusCode) { @@ -514,17 +523,62 @@ export const getMemberCount = async ( * File upload and download */ -export const downloadFile = async ( +export const downloadFileOpenGroupV2 = async ( fileId: number, roomInfos: OpenGroupRequestCommonType -): Promise => { +): Promise => { const request: OpenGroupV2Request = { method: 'GET', room: roomInfos.roomId, server: roomInfos.serverUrl, isAuthRequired: true, - endpoint: `files${fileId}`, + endpoint: `files/${fileId}`, }; const result = await sendOpenGroupV2Request(request); + const statusCode = parseStatusCodeFromOnionRequest(result); + if (statusCode !== 200) { + return null; + } + + // we should probably change the logic of sendOnionRequest to not have all those levels + const base64Data = (result as any)?.result?.result as string | undefined; + + if (!base64Data) { + return null; + } + return new Uint8Array(fromBase64ToArrayBuffer(base64Data)); +}; + +/** + * Returns the id on which the file is saved, or null + */ +export const uploadFileOpenGroupV2 = async ( + fileContent: Uint8Array, + roomInfos: OpenGroupRequestCommonType +): Promise => { + if (!fileContent || !fileContent.length) { + return null; + } + const queryParams = { + file: fromArrayBufferToBase64(fileContent), + }; + const request: OpenGroupV2Request = { + method: 'POST', + room: roomInfos.roomId, + server: roomInfos.serverUrl, + isAuthRequired: true, + endpoint: 'files', + queryParams, + }; + + const result = await sendOpenGroupV2Request(request); + const statusCode = parseStatusCodeFromOnionRequest(result); + if (statusCode !== 200) { + return null; + } + + // we should probably change the logic of sendOnionRequest to not have all those levels + const fileId = (result as any)?.result?.result as number | undefined; + return fileId || null; };