mirror of
https://github.com/hzrd149/blossom.git
synced 2025-12-10 07:28:50 +00:00
change to /mirror endpoint
This commit is contained in:
34
buds/04.md
34
buds/04.md
@@ -1,29 +1,39 @@
|
|||||||
BUD-04
|
BUD-04
|
||||||
======
|
======
|
||||||
|
|
||||||
Efficiently mirroring blobs
|
Mirroring blobs
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
`draft` `optional`
|
`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
|
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
|
## Example Flow
|
||||||
|
|
||||||
1. Client requests lists of blobs from Server A
|
1. Client signs authorization event and uploads blob to Server A
|
||||||
1. Client signs an upload auth event for X
|
1. Server A returns blob descriptor with `url`
|
||||||
1. Client makes request `https://cdn.server-b.com/upload?url=https://cdn.server-a.com/<sha256>.png` with authorization header
|
1. Client sends the `url` to Server B `/mirror` using the original authorization event
|
||||||
1. Server B receives request
|
1. Server B downloads blob from Server A using the url
|
||||||
1. Server B downloads blob from Server A using url query parameter
|
1. Server B verifies downloaded blob hash matches `x` tag in authorization event
|
||||||
1. Server B verifies downloaded blob hash matches `x` tag in authorization header
|
|
||||||
1. Server B returns [Blob Descriptor](./02.md#blob-descriptor)
|
1. Server B returns [Blob Descriptor](./02.md#blob-descriptor)
|
||||||
|
|||||||
Reference in New Issue
Block a user