Add peer card discovery scaffold
This commit is contained in:
parent
cf5a405276
commit
81149605bc
11 changed files with 271 additions and 15 deletions
|
|
@ -250,6 +250,45 @@ impl Store {
|
|||
.map_err(StoreError::from)
|
||||
}
|
||||
|
||||
pub fn upsert_peer_card(&self, peer_card: &StoredPeerCard) -> Result<(), StoreError> {
|
||||
self.conn.execute(
|
||||
"INSERT OR REPLACE INTO peer_cards(peer_id, card_json, updated_at_ms) VALUES (?1, ?2, ?3)",
|
||||
params![peer_card.peer_id, peer_card.card_json, peer_card.updated_at_ms],
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn get_peer_card(&self, peer_id: &str) -> Result<Option<StoredPeerCard>, StoreError> {
|
||||
let mut stmt = self.conn.prepare(
|
||||
"SELECT peer_id, card_json, updated_at_ms FROM peer_cards WHERE peer_id = ?1",
|
||||
)?;
|
||||
let mut rows = stmt.query(params![peer_id])?;
|
||||
if let Some(row) = rows.next()? {
|
||||
Ok(Some(StoredPeerCard {
|
||||
peer_id: row.get(0)?,
|
||||
card_json: row.get(1)?,
|
||||
updated_at_ms: row.get(2)?,
|
||||
}))
|
||||
} else {
|
||||
Ok(None)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn list_peer_cards(&self) -> Result<Vec<StoredPeerCard>, StoreError> {
|
||||
let mut stmt = self
|
||||
.conn
|
||||
.prepare("SELECT peer_id, card_json, updated_at_ms FROM peer_cards ORDER BY peer_id")?;
|
||||
let rows = stmt.query_map([], |row| {
|
||||
Ok(StoredPeerCard {
|
||||
peer_id: row.get(0)?,
|
||||
card_json: row.get(1)?,
|
||||
updated_at_ms: row.get(2)?,
|
||||
})
|
||||
})?;
|
||||
rows.collect::<Result<Vec<_>, _>>()
|
||||
.map_err(StoreError::from)
|
||||
}
|
||||
|
||||
pub fn insert_ssh_cert_request(
|
||||
&self,
|
||||
request: &StoredSshCertRequest,
|
||||
|
|
@ -430,6 +469,13 @@ pub struct CasObject {
|
|||
pub path: String,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
pub struct StoredPeerCard {
|
||||
pub peer_id: String,
|
||||
pub card_json: String,
|
||||
pub updated_at_ms: i64,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
pub struct StoredSshCertRequest {
|
||||
pub request_id: String,
|
||||
|
|
@ -527,4 +573,20 @@ mod tests {
|
|||
vec![revocation]
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn peer_card_roundtrip() {
|
||||
let store = Store::open_memory().expect("open");
|
||||
let peer_card = StoredPeerCard {
|
||||
peer_id: "node:laptop".to_owned(),
|
||||
card_json: r#"{"node_id":"node:laptop"}"#.to_owned(),
|
||||
updated_at_ms: 10,
|
||||
};
|
||||
store.upsert_peer_card(&peer_card).expect("insert");
|
||||
assert_eq!(
|
||||
store.get_peer_card("node:laptop").expect("get"),
|
||||
Some(peer_card.clone())
|
||||
);
|
||||
assert_eq!(store.list_peer_cards().expect("list"), vec![peer_card]);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue