Skip to content

Commit fa9bc65

Browse files
committed
proxy back upstream BadRequests
1 parent f427071 commit fa9bc65

File tree

2 files changed

+43
-8
lines changed

2 files changed

+43
-8
lines changed

slingshot/src/record.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,8 @@ struct RecordResponseObject {
5858

5959
#[derive(Debug, Deserialize)]
6060
pub struct ErrorResponseObject {
61-
error: String,
62-
#[allow(dead_code)]
63-
message: String,
61+
pub error: String,
62+
pub message: String,
6463
}
6564

6665
#[derive(Clone)]

slingshot/src/server.rs

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
use crate::{CachedRecord, Identity, Repo, error::ServerError};
1+
use crate::{
2+
CachedRecord, ErrorResponseObject, Identity, Repo,
3+
error::{RecordError, ServerError},
4+
};
25
use atrium_api::types::string::{Cid, Did, Handle, Nsid, RecordKey};
36
use foyer::HybridCache;
47
use serde::Serialize;
@@ -201,7 +204,7 @@ impl Xrpc {
201204

202205
let at_uri = format!("at://{}/{}/{}", &*did, &*collection, &*rkey);
203206

204-
let entry = self
207+
let fr = self
205208
.cache
206209
.fetch(at_uri.clone(), {
207210
let cid = cid.clone();
@@ -213,10 +216,43 @@ impl Xrpc {
213216
.map_err(|e| foyer::Error::Other(Box::new(e)))
214217
}
215218
})
216-
.await
217-
.unwrap(); // todo
219+
.await;
218220

219-
// TODO: actual 404
221+
let entry = match fr {
222+
Ok(e) => e,
223+
Err(foyer::Error::Other(e)) => {
224+
let record_error = match e.downcast::<RecordError>() {
225+
Ok(e) => e,
226+
Err(e) => {
227+
log::error!("error (foyer other) getting cache entry, {e:?}");
228+
return GetRecordResponse::ServerError(xrpc_error(
229+
"ServerError",
230+
"sorry, something went wrong",
231+
));
232+
}
233+
};
234+
let RecordError::UpstreamBadRequest(ErrorResponseObject { error, message }) =
235+
*record_error
236+
else {
237+
log::error!("RecordError getting cache entry, {record_error:?}");
238+
return GetRecordResponse::ServerError(xrpc_error(
239+
"ServerError",
240+
"sorry, something went wrong",
241+
));
242+
};
243+
return GetRecordResponse::BadRequest(xrpc_error(
244+
error,
245+
format!("Upstream bad request: {message}"),
246+
));
247+
}
248+
Err(e) => {
249+
log::error!("error (foyer) getting cache entry, {e:?}");
250+
return GetRecordResponse::ServerError(xrpc_error(
251+
"ServerError",
252+
"sorry, something went wrong",
253+
));
254+
}
255+
};
220256

221257
match *entry {
222258
CachedRecord::Found(ref raw) => {

0 commit comments

Comments
 (0)