Page MenuHomePhabricator

D13959.diff
No OneTemporary

D13959.diff

diff --git a/keyserver/src/services/blob.js b/keyserver/src/services/blob.js
--- a/keyserver/src/services/blob.js
+++ b/keyserver/src/services/blob.js
@@ -3,9 +3,9 @@
import blobService from 'lib/facts/blob-service.js';
import type { BlobHashAndHolder } from 'lib/types/holder-types.js';
import {
- getBlobFetchableURL,
makeBlobServiceEndpointURL,
downloadBlob,
+ assignBlobHolder,
} from 'lib/utils/blob-service.js';
import {
uploadBlob,
@@ -45,26 +45,9 @@
async function assignHolder(
params: BlobDescriptor,
): Promise<BlobOperationResult> {
- const { hash, holder } = params;
+ const { hash: blobHash, holder } = params;
const headers = await createRequestHeaders();
- const assignHolderResponse = await fetch(
- makeBlobServiceEndpointURL(blobService.httpEndpoints.ASSIGN_HOLDER),
- {
- method: blobService.httpEndpoints.ASSIGN_HOLDER.method,
- body: JSON.stringify({
- holder,
- blob_hash: hash,
- }),
- headers,
- },
- );
-
- if (!assignHolderResponse.ok) {
- const { status, statusText } = assignHolderResponse;
- return { success: false, reason: 'OTHER', status, statusText };
- }
-
- return { success: true };
+ return assignBlobHolder({ blobHash, holder }, headers);
}
async function uploadBlobKeyserverWrapper(
@@ -113,7 +96,6 @@
+blob: Blob,
};
async function download(hash: string): Promise<BlobDownloadResult> {
- const url = getBlobFetchableURL(hash);
const headers = await createRequestHeaders();
const blobResult = await downloadBlob(hash, headers);
diff --git a/lib/actions/upload-actions.js b/lib/actions/upload-actions.js
--- a/lib/actions/upload-actions.js
+++ b/lib/actions/upload-actions.js
@@ -28,13 +28,11 @@
makeBlobServiceEndpointURL,
makeBlobServiceURI,
generateBlobHolder,
+ assignBlobHolder,
} from '../utils/blob-service.js';
import { getMessageForException } from '../utils/errors.js';
import { useDispatch } from '../utils/redux-utils.js';
-import {
- handleHTTPResponseError,
- createDefaultHTTPRequestHeaders,
-} from '../utils/services-utils.js';
+import { createDefaultHTTPRequestHeaders } from '../utils/services-utils.js';
export type MultimediaUploadCallbacks = Partial<{
+onProgress: (percent: number) => void,
@@ -126,24 +124,16 @@
// 1. Assign new holder for blob with given blobHash
let blobAlreadyExists: boolean;
try {
- const assignHolderEndpoint = blobService.httpEndpoints.ASSIGN_HOLDER;
- const assignHolderResponse = await fetch(
- makeBlobServiceEndpointURL(assignHolderEndpoint),
- {
- method: assignHolderEndpoint.method,
- body: JSON.stringify({
- holder: blobHolder,
- blob_hash: blobHash,
- }),
- headers: {
- ...defaultHeaders,
- 'content-type': 'application/json',
- },
- },
+ const assignHolderResult = await assignBlobHolder(
+ { blobHash, holder: blobHolder },
+ defaultHeaders,
);
- handleHTTPResponseError(assignHolderResponse);
+ if (!assignHolderResult.success) {
+ const { status, statusText } = assignHolderResult;
+ throw new Error(`Server responded with HTTP ${status}: ${statusText}`);
+ }
const { data_exists: dataExistsResponse } =
- await assignHolderResponse.json();
+ await assignHolderResult.response.json();
blobAlreadyExists = dataExistsResponse;
} catch (e) {
throw new Error(
@@ -303,22 +293,14 @@
// 1. Assign new holder for blob with given blobHash
try {
- const assignHolderEndpoint = blobService.httpEndpoints.ASSIGN_HOLDER;
- const assignHolderResponse = await fetch(
- makeBlobServiceEndpointURL(assignHolderEndpoint),
- {
- method: assignHolderEndpoint.method,
- body: JSON.stringify({
- holder: blobHolder,
- blob_hash: blobHash,
- }),
- headers: {
- ...defaultHeaders,
- 'content-type': 'application/json',
- },
- },
+ const assignHolderResult = await assignBlobHolder(
+ { blobHash, holder: blobHolder },
+ defaultHeaders,
);
- handleHTTPResponseError(assignHolderResponse);
+ if (!assignHolderResult.success) {
+ const { status, statusText } = assignHolderResult;
+ throw new Error(`Server responded with HTTP ${status}: ${statusText}`);
+ }
} catch (e) {
throw new Error(
`Failed to assign holder: ${
diff --git a/lib/utils/blob-service.js b/lib/utils/blob-service.js
--- a/lib/utils/blob-service.js
+++ b/lib/utils/blob-service.js
@@ -75,6 +75,7 @@
export type BlobOperationResult =
| {
+success: true,
+ +response: Response,
}
| {
+success: false,
@@ -139,7 +140,35 @@
};
}
- return { success: true };
+ return { success: true, response: uploadBlobResponse };
+}
+
+async function assignBlobHolder(
+ blobInfo: BlobInfo,
+ headers: { [string]: string },
+): Promise<BlobOperationResult> {
+ const { blobHash, holder } = blobInfo;
+ const response = await fetch(
+ makeBlobServiceEndpointURL(blobServiceConfig.httpEndpoints.ASSIGN_HOLDER),
+ {
+ method: blobServiceConfig.httpEndpoints.ASSIGN_HOLDER.method,
+ body: JSON.stringify({
+ holder,
+ blob_hash: blobHash,
+ }),
+ headers: {
+ ...headers,
+ 'content-type': 'application/json',
+ },
+ },
+ );
+
+ if (!response.ok) {
+ const { status, statusText } = response;
+ return { success: false, reason: 'OTHER', status, statusText };
+ }
+
+ return { success: true, response };
}
async function assignMultipleHolders(
@@ -243,6 +272,7 @@
makeBlobServiceEndpointURL,
downloadBlob,
uploadBlob,
+ assignBlobHolder,
assignMultipleHolders,
removeMultipleHolders,
};
diff --git a/lib/utils/services-utils.js b/lib/utils/services-utils.js
--- a/lib/utils/services-utils.js
+++ b/lib/utils/services-utils.js
@@ -18,13 +18,6 @@
// an authoritative keyserver for things like DMs.
const relyingOnAuthoritativeKeyserver = true;
-function handleHTTPResponseError(response: Response): void {
- if (!response.ok) {
- const { status, statusText } = response;
- throw new Error(`Server responded with HTTP ${status}: ${statusText}`);
- }
-}
-
function createHTTPAuthorizationHeader(authMetadata: AuthMetadata): string {
// explicit destructure to make it future-proof
const { userID, deviceID, accessToken } = authMetadata;
@@ -43,7 +36,6 @@
}
export {
- handleHTTPResponseError,
usingCommServicesAccessToken,
supportingMultipleKeyservers,
relyingOnAuthoritativeKeyserver,

File Metadata

Mime Type
text/plain
Expires
Tue, Nov 19, 6:37 PM (22 h, 12 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2540121
Default Alt Text
D13959.diff (6 KB)

Event Timeline