mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-07 15:03:09 -06:00
mediaapi/writers/download: Factor out createRemoteRequest
This commit is contained in:
parent
ef7dc8c8c5
commit
6c3dbb9b48
|
|
@ -235,6 +235,48 @@ func respondFromLocalFile(w http.ResponseWriter, logger *log.Entry, mediaMetadat
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func createRemoteRequest(mediaMetadata *types.MediaMetadata, logger *log.Entry) (*http.Response, *util.JSONResponse) {
|
||||||
|
urls := getMatrixUrls(mediaMetadata.Origin)
|
||||||
|
|
||||||
|
logger.Printf("Connecting to remote %q\n", urls[0])
|
||||||
|
|
||||||
|
remoteReqAddr := urls[0] + "/_matrix/media/v1/download/" + string(mediaMetadata.Origin) + "/" + string(mediaMetadata.MediaID)
|
||||||
|
remoteReq, err := http.NewRequest("GET", remoteReqAddr, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, &util.JSONResponse{
|
||||||
|
Code: 500,
|
||||||
|
JSON: jsonerror.Unknown(fmt.Sprintf("File with media ID %q could not be downloaded from %q", mediaMetadata.MediaID, mediaMetadata.Origin)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
remoteReq.Header.Set("Host", string(mediaMetadata.Origin))
|
||||||
|
|
||||||
|
client := http.Client{}
|
||||||
|
resp, err := client.Do(remoteReq)
|
||||||
|
if err != nil {
|
||||||
|
return nil, &util.JSONResponse{
|
||||||
|
Code: 502,
|
||||||
|
JSON: jsonerror.Unknown(fmt.Sprintf("File with media ID %q could not be downloaded from %q", mediaMetadata.MediaID, mediaMetadata.Origin)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if resp.StatusCode != 200 {
|
||||||
|
logger.Printf("Server responded with %d\n", resp.StatusCode)
|
||||||
|
if resp.StatusCode == 404 {
|
||||||
|
return nil, &util.JSONResponse{
|
||||||
|
Code: 404,
|
||||||
|
JSON: jsonerror.NotFound(fmt.Sprintf("File with media ID %q does not exist", mediaMetadata.MediaID)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil, &util.JSONResponse{
|
||||||
|
Code: 502,
|
||||||
|
JSON: jsonerror.Unknown(fmt.Sprintf("File with media ID %q could not be downloaded from %q", mediaMetadata.MediaID, mediaMetadata.Origin)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
func respondFromRemoteFile(w http.ResponseWriter, logger *log.Entry, mediaMetadata *types.MediaMetadata, cfg config.MediaAPI, db *storage.Database, activeRemoteRequests *types.ActiveRemoteRequests) {
|
func respondFromRemoteFile(w http.ResponseWriter, logger *log.Entry, mediaMetadata *types.MediaMetadata, cfg config.MediaAPI, db *storage.Database, activeRemoteRequests *types.ActiveRemoteRequests) {
|
||||||
logger.WithFields(log.Fields{
|
logger.WithFields(log.Fields{
|
||||||
"MediaID": mediaMetadata.MediaID,
|
"MediaID": mediaMetadata.MediaID,
|
||||||
|
|
@ -259,50 +301,13 @@ func respondFromRemoteFile(w http.ResponseWriter, logger *log.Entry, mediaMetada
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
// create request for remote file
|
resp, errorResponse := createRemoteRequest(mediaMetadata, logger)
|
||||||
urls := getMatrixUrls(mediaMetadata.Origin)
|
if errorResponse != nil {
|
||||||
|
jsonErrorResponse(w, *errorResponse, logger)
|
||||||
logger.Printf("Connecting to remote %q\n", urls[0])
|
|
||||||
|
|
||||||
remoteReqAddr := urls[0] + "/_matrix/media/v1/download/" + string(mediaMetadata.Origin) + "/" + string(mediaMetadata.MediaID)
|
|
||||||
remoteReq, err := http.NewRequest("GET", remoteReqAddr, nil)
|
|
||||||
if err != nil {
|
|
||||||
jsonErrorResponse(w, util.JSONResponse{
|
|
||||||
Code: 500,
|
|
||||||
JSON: jsonerror.Unknown(fmt.Sprintf("File with media ID %q could not be downloaded from %q", mediaMetadata.MediaID, mediaMetadata.Origin)),
|
|
||||||
}, logger)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
remoteReq.Header.Set("Host", string(mediaMetadata.Origin))
|
|
||||||
|
|
||||||
client := http.Client{}
|
|
||||||
resp, err := client.Do(remoteReq)
|
|
||||||
if err != nil {
|
|
||||||
jsonErrorResponse(w, util.JSONResponse{
|
|
||||||
Code: 502,
|
|
||||||
JSON: jsonerror.Unknown(fmt.Sprintf("File with media ID %q could not be downloaded from %q", mediaMetadata.MediaID, mediaMetadata.Origin)),
|
|
||||||
}, logger)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
|
|
||||||
if resp.StatusCode != 200 {
|
|
||||||
logger.Printf("Server responded with %d\n", resp.StatusCode)
|
|
||||||
if resp.StatusCode == 404 {
|
|
||||||
jsonErrorResponse(w, util.JSONResponse{
|
|
||||||
Code: 404,
|
|
||||||
JSON: jsonerror.NotFound(fmt.Sprintf("File with media ID %q does not exist", mediaMetadata.MediaID)),
|
|
||||||
}, logger)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
jsonErrorResponse(w, util.JSONResponse{
|
|
||||||
Code: 502,
|
|
||||||
JSON: jsonerror.Unknown(fmt.Sprintf("File with media ID %q could not be downloaded from %q", mediaMetadata.MediaID, mediaMetadata.Origin)),
|
|
||||||
}, logger)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// get metadata from request and set metadata on response
|
// get metadata from request and set metadata on response
|
||||||
contentLength, err := strconv.ParseInt(resp.Header.Get("Content-Length"), 10, 64)
|
contentLength, err := strconv.ParseInt(resp.Header.Get("Content-Length"), 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue