change to /mirror endpoint

This commit is contained in:
hzrd149
2024-05-31 10:50:16 -05:00
parent f47e567147
commit 0476b37945

View File

@@ -1,29 +1,39 @@
BUD-04
======
Efficiently mirroring blobs
Mirroring blobs
---------------------
`draft` `optional`
If a server supports the `/upload` endpoint defined in [BUD-02](./02.md) it MAY also support an optional `url` query parameter in the URL ( eg. `/upload?url=https://cdn.satellite.earth/b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553.pdf` )
Defines the `/mirror` endpoint
If the `url` query parameter is specified the server MUST ignore the body and `Content-Type` of the request and download the raw binary blob data from the URL
## PUT /mirror - Mirror Blob
The server MUST verify the sha256 hash of the downloaded blob matches the `x` tag in the upload [authorization event](./02.md#upload-authorization-required)
A server may expose a `PUT /mirror` endpoint to allow users to copy a blob from a URL instead of uploading it
The server should re-use the `Content-Type` header returned from the URL to know the mime type of the blob. if none is returned it may use the file extension in the URL
Clients MUST pass the URL of the remote blob as a stringified JSON object in the request body
```json
// request body
{ "url": "https://cdn.satellite.earth/b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553.pdf" }
```
Clients MUST set the `Authorization` header to an upload authorization event defined in [BUD-02](./02.md#upload-authorization-required)
The `/mirror` endpoint MUST download the blob from the specified URL and verify the sha256 hash matches the `x` tag in the upload authorization event
The endpoint MUST return a [Blob Descriptor](#blob-descriptor) if the mirroring was successful or an error object if it was not
If no `url` query parameter is specified the server MUST follow the rules layed out in [BUD-02](./02.md)
Servers should re-use the `Content-Type` header returned from the URL to discover the mime type of the blob. if none is returned it may use the file extension in the URL
Servers MAY reject a mirror request for any reason and should respond with the appropriate HTTP `4xx` status code and an error message explaining the reason for the rejection
## Example Flow
1. Client requests lists of blobs from Server A
1. Client signs an upload auth event for X
1. Client makes request `https://cdn.server-b.com/upload?url=https://cdn.server-a.com/<sha256>.png` with authorization header
1. Server B receives request
1. Server B downloads blob from Server A using url query parameter
1. Server B verifies downloaded blob hash matches `x` tag in authorization header
1. Client signs authorization event and uploads blob to Server A
1. Server A returns blob descriptor with `url`
1. Client sends the `url` to Server B `/mirror` using the original authorization event
1. Server B downloads blob from Server A using the url
1. Server B verifies downloaded blob hash matches `x` tag in authorization event
1. Server B returns [Blob Descriptor](./02.md#blob-descriptor)