Skip to content

Commit

Permalink
feat: expose AccessKey encode/decode api
Browse files Browse the repository at this point in the history
  • Loading branch information
Gozala committed Jul 1, 2023
1 parent 25c5215 commit d67ddd0
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 0 deletions.
10 changes: 10 additions & 0 deletions wnfs-wasm/src/fs/private/access_key.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,14 @@ impl AccessKey {
pub fn get_content_cid(&self) -> Vec<u8> {
self.0.get_content_cid().to_bytes()
}

#[wasm_bindgen(js_name = "toBytes")]
pub fn into_bytes(&self) -> Vec<u8> {
Vec::<u8>::from(&self.0)
}

#[wasm_bindgen(js_name = "fromBytes")]
pub fn from_bytes(bytes: &[u8]) -> Self {
Self(WnfsAccessKey::from(bytes).into())
}
}
2 changes: 2 additions & 0 deletions wnfs-wasm/tests/mock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {
Namefilter,
PrivateDirectory,
PrivateForest,
AccessKey,
PublicDirectory,
} from "../pkg";

Expand Down Expand Up @@ -190,4 +191,5 @@ export {
createRecipientExchangeRoot,
PrivateKey,
ExchangeKey,
AccessKey,
};
33 changes: 33 additions & 0 deletions wnfs-wasm/tests/private.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -613,3 +613,36 @@ test.describe("PrivateForest", () => {
expect(result).toBeDefined();
});
});

test.describe("AccessKey", () => {
test("can encode / decode an access key", async ({ page }) => {
const [metadataBefore, metadataAfter] = await page.evaluate(async () => {
const {
wnfs: { AccessKey, Namefilter, PrivateFile, PrivateNode, PrivateForest },
mock: { MemoryBlockStore, Rng },
} = await window.setup();


const rng = new Rng();
const store = new MemoryBlockStore();
const time = new Date();
const file = new PrivateFile(new Namefilter(), time, rng);
const node = file.asNode();
const forest = new PrivateForest();
const [accessKey, newForest] = await node.store(forest, store, rng);

const encodedAccessKey = accessKey.toBytes();
const decodedAccessKey = AccessKey.fromBytes(encodedAccessKey);

const fetched = await PrivateNode.load(decodedAccessKey, newForest, store);
const metadataBefore = node.asFile().metadata();
const metadataAfter = fetched.asFile().metadata();
return [metadataBefore, metadataAfter];
});

expect(metadataBefore).toBeDefined();
expect(metadataAfter).toBeDefined();
expect(metadataBefore.created).toEqual(metadataAfter.created);
expect(metadataBefore.modified).toEqual(metadataAfter.modified);
});
});
12 changes: 12 additions & 0 deletions wnfs/src/private/keys/access.rs
Original file line number Diff line number Diff line change
Expand Up @@ -101,3 +101,15 @@ impl From<&PrivateRef> for SnapshotAccessKey {
}
}
}

impl From<&[u8]> for AccessKey {
fn from(bytes: &[u8]) -> Self {
serde_ipld_dagcbor::from_slice(bytes).unwrap()
}
}

impl From<&AccessKey> for Vec<u8> {
fn from(key: &AccessKey) -> Self {
serde_ipld_dagcbor::to_vec(key).unwrap()
}
}

0 comments on commit d67ddd0

Please sign in to comment.