added more shit
This commit is contained in:
1 parent
3f4e3d3ed1
commit
9cc566c9d5
2 files changed
+48
-5
No files matched your search
@@ -5,6 +5,10 @@ use base64::{Engine as _, engine::general_purpose};
|
||||
struct LedgerInternal {}
|
||||
|
||||
impl LedgerInternal {
|
||||
pub fn new() -> LedgerInternal {
|
||||
LedgerInternal {}
|
||||
}
|
||||
|
||||
fn _decode_cookie_secret(row: &Row) -> Result<Vec<u8>> {
|
||||
let encoded: String = row.get(0)?;
|
||||
let ret = general_purpose::STANDARD.decode(encoded).unwrap();
|
||||
@@ -14,26 +18,63 @@ impl LedgerInternal {
|
||||
pub fn get_cookie_secret(&self, tx: &Transaction) -> CustomResult<Vec<u8>> {
|
||||
let q = "SELECT cookie_secret
|
||||
FROM ledger_internal
|
||||
ORDER BY cookie_secret DESC
|
||||
ORDER BY id DESC
|
||||
LIMIT 1";
|
||||
tx.query_row(q, params![], Self::_decode_cookie_secret)
|
||||
.map_err(Error::SqlError)
|
||||
}
|
||||
|
||||
pub fn set_cookie_secret(&self, tx: &Transaction, secret: &Vec<u8>) {
|
||||
pub fn set_cookie_secret(&self, tx: &mut Transaction, secret: &Vec<u8>) -> CustomResult<()> {
|
||||
let encoded = general_purpose::STANDARD.encode(&secret);
|
||||
let q = "CREATE TEMPORARY TABLE foo
|
||||
AS SELECT * FROM ledger_internal
|
||||
ORDER BY cookie_secret DESC
|
||||
ORDER BY id DESC
|
||||
LIMIT 1";
|
||||
tx.execute(q, params![]).map_err(Error::SqlError)?;
|
||||
|
||||
let q = "UPDATE foo SET id = NULL, cookie_secret = ?1";
|
||||
tx.execute(q, params![encoded]).map_err(Error::SqlError)?;
|
||||
|
||||
let q = "INSERT INTO ledger_internal SELECT * FROM foo";
|
||||
tx.execute(q, params![]).map_err(Error::SqlError)?;
|
||||
|
||||
let q = "DROP TABLE foo";
|
||||
tx.execute(q, params![]).map_err(Error::SqlError)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test_ledger_internal {
|
||||
use crate::migration;
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_foo() {
|
||||
fn test_initial_cookie_secret() -> CustomResult<()>{
|
||||
let mut conn = Connection::open_in_memory().unwrap();
|
||||
migration::apply_migrations(&mut conn).unwrap();
|
||||
let tx = conn.transaction().unwrap();
|
||||
let service = LedgerInternal::new();
|
||||
let foo = service.get_cookie_secret(&tx)?;
|
||||
assert!(foo.len() >= 32);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_cookie_secret() -> CustomResult<()> {
|
||||
let mut conn = Connection::open_in_memory().unwrap();
|
||||
migration::apply_migrations(&mut conn).unwrap();
|
||||
let mut tx = conn.transaction().unwrap();
|
||||
let service = LedgerInternal::new();
|
||||
service.set_cookie_secret(&mut tx, &vec![3u8])?;
|
||||
let foo = service.get_cookie_secret(&tx)?;
|
||||
assert_eq!(foo, vec![3u8]);
|
||||
|
||||
service.set_cookie_secret(&mut tx, &vec![7u8, 1u8, 4u8])?;
|
||||
let foo = service.get_cookie_secret(&tx)?;
|
||||
assert_eq!(foo, vec![7u8, 1u8, 4u8]);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user