writing and reading notes
This commit is contained in:
parent
3c3b7f835e
commit
38c67e3c27
58
src/db.rs
58
src/db.rs
@ -31,8 +31,16 @@ pub struct DbNamespace {
|
|||||||
pub name: EncryptedValue,
|
pub name: EncryptedValue,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
pub struct DbNote {
|
pub struct DbNote {
|
||||||
|
pub id: i64,
|
||||||
|
pub namespace: DbNamespace,
|
||||||
|
pub category: String,
|
||||||
|
pub title: EncryptedValue,
|
||||||
|
pub value: EncryptedValue,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct Note {
|
||||||
pub id: i64,
|
pub id: i64,
|
||||||
pub namespace: String,
|
pub namespace: String,
|
||||||
pub category: String,
|
pub category: String,
|
||||||
@ -91,6 +99,54 @@ impl DbHandle {
|
|||||||
Ok(rowid)
|
Ok(rowid)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn write_note(&mut self, master_key: [u8; 32], note: Note) {
|
||||||
|
let namespace_id = self.get_namespace_id(¬e.namespace, master_key).unwrap();
|
||||||
|
let encrypted_title = crypt::encrypt_value(¬e.title, master_key);
|
||||||
|
let encrypted_value = crypt::encrypt_value(¬e.value, master_key);
|
||||||
|
self.conn
|
||||||
|
.execute(
|
||||||
|
"INSERT INTO notes (namespace, category, title, value) VALUES ($1, $2, $3, $4);",
|
||||||
|
params![
|
||||||
|
namespace_id,
|
||||||
|
note.category,
|
||||||
|
encrypted_title,
|
||||||
|
encrypted_value
|
||||||
|
],
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn read_notes(&mut self, master_key: [u8; 32]) -> rusqlite::Result<Vec<Note>> {
|
||||||
|
let mut stmt = self.conn.prepare("SELECT notes.id, notes.category, notes.title, notes.value, namespaces.id, namespaces.name FROM notes JOIN namespaces ON notes.namespace=namespaces.id").unwrap();
|
||||||
|
let rows = stmt.query_map(params![], |row| {
|
||||||
|
Ok(DbNote {
|
||||||
|
id: row.get(0)?,
|
||||||
|
category: row.get(1)?,
|
||||||
|
title: row.get(2)?,
|
||||||
|
value: row.get(3)?,
|
||||||
|
namespace: DbNamespace {
|
||||||
|
id: row.get(4)?,
|
||||||
|
name: row.get(5)?,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
})?;
|
||||||
|
|
||||||
|
let notes: Result<Vec<Note>, _> = rows
|
||||||
|
.map(|note_result| match note_result {
|
||||||
|
Ok(note) => Ok(Note {
|
||||||
|
id: note.id,
|
||||||
|
namespace: note.namespace.name.decrypt_to_string(master_key).unwrap(),
|
||||||
|
category: note.category,
|
||||||
|
title: note.title.decrypt_to_string(master_key).unwrap(),
|
||||||
|
value: note.value.decrypt_to_string(master_key).unwrap(),
|
||||||
|
}),
|
||||||
|
Err(e) => return Err(e),
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
notes
|
||||||
|
}
|
||||||
|
|
||||||
pub fn get_db_property(&self, name: &str) -> Result<Option<String>, Box<dyn Error>> {
|
pub fn get_db_property(&self, name: &str) -> Result<Option<String>, Box<dyn Error>> {
|
||||||
let mut stmt = self
|
let mut stmt = self
|
||||||
.conn
|
.conn
|
||||||
|
Loading…
x
Reference in New Issue
Block a user