Put and Read: content on the socket, for clients that share no files
The system daemon runs as its own user behind ProtectHome, so it can neither read a file a desktop app wrote for Add nor write one back for Materialize - redoal on the system varde failed every get with EACCES. Put imports base64 bytes carried in the request and Read returns a raw blob's bytes in the reply, both up to MAX_INLINE_BYTES (16 MiB). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
c9dbc4a576
commit
687af8bd2a
@@ -371,6 +371,39 @@ impl Daemon {
|
||||
bytes,
|
||||
})
|
||||
}
|
||||
Request::Put { data } => {
|
||||
use base64::Engine as _;
|
||||
let bytes = base64::engine::general_purpose::STANDARD
|
||||
.decode(data.as_bytes())
|
||||
.map_err(|e| OpError::InvalidArgument(format!("put: data is not base64: {e}")))?;
|
||||
if bytes.len() as u64 > varde_proto::MAX_INLINE_BYTES {
|
||||
return Err(OpError::InvalidArgument(format!(
|
||||
"put: {} bytes, more than {} inline; add it by path",
|
||||
bytes.len(),
|
||||
varde_proto::MAX_INLINE_BYTES
|
||||
)));
|
||||
}
|
||||
let (hash, bytes) = self.store.add_bytes(bytes).await?;
|
||||
self.meta.record_format(&hash.to_hex(), StoredFormat::Raw)?;
|
||||
Ok(ResponseData::Added {
|
||||
hash: hash.to_hex().to_string(),
|
||||
bytes,
|
||||
})
|
||||
}
|
||||
Request::Read { hash } => {
|
||||
use base64::Engine as _;
|
||||
let parsed = parse_hash(&hash)?;
|
||||
if self.meta.format_of(&parsed.to_hex()) == StoredFormat::HashSeq {
|
||||
return Err(OpError::InvalidArgument(format!(
|
||||
"read: {} is a collection; materialize it",
|
||||
parsed.to_hex()
|
||||
)));
|
||||
}
|
||||
let bytes = self.store.read_bytes(parsed, varde_proto::MAX_INLINE_BYTES).await?;
|
||||
Ok(ResponseData::Bytes {
|
||||
data: base64::engine::general_purpose::STANDARD.encode(bytes),
|
||||
})
|
||||
}
|
||||
Request::Pin { hash, policy } => {
|
||||
let parsed = parse_hash(&hash)?;
|
||||
self.meta.pin(&parsed.to_hex(), policy)?;
|
||||
|
||||
Reference in New Issue
Block a user