Change Input of dp trait to use String

This commit is contained in:
Leon Tan 2019-02-22 22:37:01 +01:00
parent fbe795eafc
commit 7d98970eba
5 changed files with 34 additions and 15 deletions

View File

@ -9,7 +9,7 @@ use tempfile;
use url;
use pathdiff::diff_paths;
use sequoia_openpgp::armor::{Writer, Kind};
//use sequoia_openpgp::armor::{Writer, Kind};
use database::{Database, Delete, Verify};
use types::{Email, Fingerprint, KeyID};
@ -178,7 +178,7 @@ impl Database for Filesystem {
}
fn update(
&self, fpr: &Fingerprint, new: Option<&[u8]>,
&self, fpr: &Fingerprint, new: Option<String>,
) -> Result<()> {
let target = self.path_to_fingerprint(fpr);
let dir = self.base.join("scratch_pad");
@ -190,13 +190,7 @@ impl Database for Filesystem {
.rand_bytes(16)
.tempfile_in(dir)?;
{
let mut armor_writer = Writer::new(&mut tmp, Kind::PublicKey,
&[][..])?;
armor_writer.write_all(new)?;
}
tmp.write_all(new.as_bytes()).unwrap();
let _ = tmp.persist(ensure_parent(&target)?)?;
// fix permissions to 640

View File

@ -52,12 +52,12 @@ impl Database for Memory {
}
fn update(
&self, fpr: &Fingerprint, new: Option<&[u8]>,
&self, fpr: &Fingerprint, new: Option<String>,
) -> Result<()> {
let mut fprs = self.fpr.lock();
if let Some(new) = new {
fprs.insert(fpr.clone(), String::from_utf8_lossy(new).to_string());
fprs.insert(fpr.clone(), new);
} else {
fprs.remove(fpr);
}

View File

@ -9,6 +9,9 @@ use sequoia_openpgp::{
};
use sequoia_openpgp::PacketPile;
use std::io::Write;
use sequoia_openpgp::armor::{Writer, Kind};
use serde::{Deserialize, Deserializer, Serializer};
use time;
use types::{Email, Fingerprint, KeyID};
@ -108,7 +111,7 @@ pub trait Database: Sync + Send {
//
// Note: it is up to the caller to serialize writes.
fn update(
&self, fpr: &Fingerprint, new: Option<&[u8]>,
&self, fpr: &Fingerprint, new: Option<String>,
) -> Result<()>;
fn link_email(&self, email: &Email, fpr: &Fingerprint) -> Result<()>;
@ -271,7 +274,17 @@ pub trait Database: Sync + Send {
}
};
self.update(&fpr, Some(&data))?;
let mut buf = std::io::Cursor::new(vec![]);
{
let mut armor_writer = Writer::new(&mut buf, Kind::PublicKey,
&[][..])?;
armor_writer.write_all(&data)?;
};
let armored = String::from_utf8_lossy(buf.get_ref());
self.update(&fpr, Some(armored.into_owned()))?;
self.link_subkeys(&fpr, subkeys)?;
for email in verified_uids {
@ -308,7 +321,17 @@ pub trait Database: Sync + Send {
.unwrap().into_children().collect::<Vec<_>>();
let new = tpk.merge_packets(packet_pile).unwrap();
self.update(&fpr, Some(&Self::tpk_into_bytes(&new).unwrap()))?;
let mut buf = std::io::Cursor::new(vec![]);
{
let mut armor_writer = Writer::new(&mut buf, Kind::PublicKey,
&[][..])?;
armor_writer.write_all(&Self::tpk_into_bytes(&new).unwrap())?;
};
let armored = String::from_utf8_lossy(buf.get_ref());
self.update(&fpr, Some(armored.into_owned()))?;
self.link_email(&email, &fpr)?;
return Ok(Some((email.clone(), fpr.clone())));
}

View File

@ -31,7 +31,7 @@ impl Database for Polymorphic {
}
fn update(
&self, fpr: &Fingerprint, new: Option<&[u8]>,
&self, fpr: &Fingerprint, new: Option<String>,
) -> Result<()> {
match self {
&Polymorphic::Memory(ref db) => {

View File

@ -313,6 +313,7 @@ fn key_to_hkp_index<'a>(armored: String) -> MyResponse {
}
MyResponse::plain(out)
}
#[get("/by-fingerprint/<fpr>")]
@ -463,6 +464,7 @@ fn files(file: PathBuf, static_dir: State<StaticDir>) -> Option<NamedFile> {
fn lookup(
db: rocket::State<Polymorphic>, domain: rocket::State<Domain>, key: Option<queries::Hkp>,
) -> MyResponse {
let (maybe_key, index) = match key {
Some(queries::Hkp::Fingerprint { ref fpr, index }) => {
(db.by_fpr(fpr), index)