feat: v3.2
This commit is contained in:
30
src/db.rs
30
src/db.rs
@@ -6,6 +6,7 @@ pub const DEFAULT_MASTER_KEY_VERIFICATION_KEY: &'static str = "__master_verifica
|
||||
pub struct Key {
|
||||
pub name: String,
|
||||
pub encrypted_key: String,
|
||||
pub comment: Option<String>,
|
||||
}
|
||||
|
||||
pub fn make_db_key_name(name: &str) -> String {
|
||||
@@ -19,7 +20,8 @@ pub fn open_db(db: &str) -> XResult<Connection> {
|
||||
}
|
||||
|
||||
pub fn init_db(conn: &Connection) -> XResult<bool> {
|
||||
let mut stmt = conn.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='keys'")?;
|
||||
let mut stmt = conn.prepare(
|
||||
"SELECT name FROM sqlite_master WHERE type='table' AND name='keys'")?;
|
||||
let mut rows = stmt.query(())?;
|
||||
if rows.next()?.is_some() {
|
||||
information!("Table keys exists, skip init");
|
||||
@@ -30,7 +32,8 @@ pub fn init_db(conn: &Connection) -> XResult<bool> {
|
||||
CREATE TABLE keys (
|
||||
id INTEGER PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
value TEXT
|
||||
value TEXT,
|
||||
comment TEXT
|
||||
)
|
||||
"##, ())?;
|
||||
success!("Table keys created");
|
||||
@@ -38,27 +41,36 @@ pub fn init_db(conn: &Connection) -> XResult<bool> {
|
||||
}
|
||||
|
||||
pub fn insert_key(conn: &Connection, key: &Key) -> XResult<()> {
|
||||
let default_comment = "".to_string();
|
||||
let _ = conn.execute(
|
||||
"INSERT INTO keys (name, value) VALUES (?1, ?2)",
|
||||
(&key.name, &key.encrypted_key),
|
||||
"INSERT INTO keys (name, value, comment) VALUES (?1, ?2, ?3)",
|
||||
(&key.name, &key.encrypted_key, key.comment.as_ref().unwrap_or_else(|| &default_comment)),
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn update_key(conn: &Connection, key: &Key) -> XResult<()> {
|
||||
let _ = conn.execute(
|
||||
"UPDATE keys SET value = ?1 WHERE name = ?2",
|
||||
(&key.encrypted_key, &key.name),
|
||||
)?;
|
||||
if let Some(comment) = &key.comment {
|
||||
let _ = conn.execute(
|
||||
"UPDATE keys SET value = ?1, comment = ?2 WHERE name = ?3",
|
||||
(&key.encrypted_key, comment, &key.name),
|
||||
)?;
|
||||
} else {
|
||||
let _ = conn.execute(
|
||||
"UPDATE keys SET value = ?1 WHERE name = ?2",
|
||||
(&key.encrypted_key, &key.name),
|
||||
)?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn find_key(conn: &Connection, name: &str) -> XResult<Option<Key>> {
|
||||
let mut stmt = conn.prepare("SELECT id, name, value FROM keys WHERE name = ?1")?;
|
||||
let mut stmt = conn.prepare("SELECT id, name, value, comment FROM keys WHERE name = ?1")?;
|
||||
let mut key_iter = stmt.query_map(params![name], |row| {
|
||||
Ok(Key {
|
||||
name: row.get(1)?,
|
||||
encrypted_key: row.get(2)?,
|
||||
comment: Some(row.get(3)?),
|
||||
})
|
||||
})?;
|
||||
match key_iter.next() {
|
||||
|
||||
Reference in New Issue
Block a user