Skip to content

Commit

Permalink
feat: Improve Stronghold README with usage examples (#1013)
Browse files Browse the repository at this point in the history
* docs: add example password hashing using rust-argon2 crate

* feat: add client side usage

* update the todo  comment

Committed via a GitHub action: https://github.com/tauri-apps/plugins-workspace/actions/runs/8142621106

Co-authored-by: amrbashir <[email protected]>
  • Loading branch information
2 people authored and tauri-bot committed Mar 4, 2024
1 parent dba7f49 commit 93ae2f6
Showing 1 changed file with 69 additions and 4 deletions.
73 changes: 69 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,25 @@ First you need to register the core plugin with Tauri:
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_stronghold::Builder::new(|password| {
// TODO: hash the password here with e.g. argon2, blake2b or any other secure algorithm
todo!()
// Hash the password here with e.g. argon2, blake2b or any other secure algorithm
// Here is an example implementation using the `rust-argon2` crate for hashing the password

use argon2::{hash_raw, Config, Variant, Version};

let config = Config {
lanes: 4,
mem_cost: 10_000,
time_cost: 10,
variant: Variant::Argon2id,
version: Version::Version13,
..Default::default()
};

let salt = "your-salt".as_bytes();

let key = hash_raw(password.as_ref(), salt, &config).expect("failed to hash password");

key.to_vec()
})
.build())
.run(tauri::generate_context!())
Expand All @@ -55,9 +72,57 @@ fn main() {
Afterwards all the plugin's APIs are available through the JavaScript guest bindings:

```javascript
import { Stronghold, Location } from "tauri-plugin-stronghold-api";
import { Stronghold, Location, Client } from "tauri-plugin-stronghold-api";
import { appDataDir } from "@tauri-apps/api/path";

const initStrongHold = async () => {
const vaultPath = `${await appDataDir()}/vault.hold`;

const vaultKey = "The key to the vault";

const stronghold = await Stronghold.load(vaultPath, vaultKey);

let client: Client;

const clientName = "name your client";

try {
client = await hold.loadClient(clientName);
} catch {
client = await hold.createClient(clientName);
}

return {
stronghold,
client,
};
};

const { stronghold, client } = await initStrongHold();

const store = client.getStore();

const key = "my_key";

// Insert a record to the store

const data = Array.from(new TextEncoder().encode("Hello, World!"));

await store.insert(key, data);

// Read a record from store

const data = await store.get(key);

const value = new TextDecoder().decode(new Uint8Array(data));

// Save your updates

await stronghold.save();

// Remove a record from store

// TODO
await store.remove(key);
```

## Contributing
Expand Down

0 comments on commit 93ae2f6

Please sign in to comment.