feat: v1.0.6, support list
This commit is contained in:
47
src/db.rs
47
src/db.rs
@@ -9,6 +9,11 @@ pub struct Key {
|
||||
pub comment: Option<String>,
|
||||
}
|
||||
|
||||
pub struct Keys {
|
||||
pub count: usize,
|
||||
pub keys: Vec<Key>,
|
||||
}
|
||||
|
||||
pub fn make_value_key_name(name: &str) -> String {
|
||||
format!("value:{}", name)
|
||||
}
|
||||
@@ -123,6 +128,48 @@ pub fn update_key(conn: &Connection, key: &Key) -> XResult<()> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn list_keys(conn: &Connection, ty: &str, search: &str, limit: usize) -> XResult<Keys> {
|
||||
let name = format!("{}:%{}%", ty, search);
|
||||
let mut count_stmt = conn.prepare("SELECT count(*) FROM keys WHERE name like ?1")?;
|
||||
let mut count_iter = count_stmt.query_map(params![name], |row| {
|
||||
let count: usize = row.get(0)?;
|
||||
Ok(count)
|
||||
})?;
|
||||
let count = match count_iter.next() {
|
||||
None => 0,
|
||||
Some(Ok(count)) => count,
|
||||
Some(Err(e)) => return simple_error!("List keys failed: {}", e),
|
||||
};
|
||||
log::debug!("found {} keys via: {}, limit: {}", count, name, limit);
|
||||
let mut keys = vec![];
|
||||
if count > 0 {
|
||||
let mut list_stmt =
|
||||
conn.prepare("SELECT id, name, value, comment FROM keys WHERE name like ?1 LIMIT ?2")?;
|
||||
let mut list_iter = list_stmt.query_map(params![name, limit], |row| {
|
||||
Ok(Key {
|
||||
name: row.get(1)?,
|
||||
encrypted_key: row.get(2)?,
|
||||
comment: row.get(3)?,
|
||||
})
|
||||
})?;
|
||||
|
||||
loop {
|
||||
match list_iter.next() {
|
||||
None => {
|
||||
break;
|
||||
}
|
||||
Some(Ok(r)) => {
|
||||
log::debug!("found key name={}", r.name);
|
||||
keys.push(r);
|
||||
}
|
||||
Some(Err(e)) => return simple_error!("List keys failed: {}", e),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Ok(Keys { count, keys })
|
||||
}
|
||||
|
||||
pub fn find_key(conn: &Connection, name: &str) -> XResult<Option<Key>> {
|
||||
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| {
|
||||
|
||||
Reference in New Issue
Block a user