diff --git a/build.rs b/build.rs index 8a3d162..3e2515c 100644 --- a/build.rs +++ b/build.rs @@ -1,5 +1,3 @@ -extern crate vergen; - use vergen::{ConstantsFlags, generate_cargo_keys}; fn main() { diff --git a/database/src/fs.rs b/database/src/fs.rs index f7461fb..dfd55a5 100644 --- a/database/src/fs.rs +++ b/database/src/fs.rs @@ -9,6 +9,8 @@ use std::path::{Path, PathBuf}; use pathdiff::diff_paths; use std::time::SystemTime; +use anyhow::{anyhow, format_err}; +use log::info; use url::form_urlencoded; use crate::Result; @@ -21,7 +23,7 @@ use crate::wkd; use tempfile::NamedTempFile; use crate::openpgp_utils::POLICY; -use openpgp::Cert; +use sequoia_openpgp::Cert; use crate::DatabaseTransaction; @@ -837,7 +839,7 @@ fn path_merge(path: &Path) -> String { mod tests { use super::*; use crate::test; - use openpgp::cert::CertBuilder; + use sequoia_openpgp::cert::CertBuilder; use tempfile::TempDir; #[test] diff --git a/database/src/lib.rs b/database/src/lib.rs index f3855b2..ef0a283 100644 --- a/database/src/lib.rs +++ b/database/src/lib.rs @@ -3,33 +3,12 @@ use std::convert::TryFrom; use std::str::FromStr; -use openpgp::serialize::SerializeInto; +use sequoia_openpgp::{serialize::SerializeInto, Cert, packet::UserID, parse::Parse, types::KeyFlags}; use chrono::prelude::Utc; -#[macro_use] -extern crate anyhow; -use anyhow::Result; -extern crate fs2; -extern crate idna; -#[macro_use] -extern crate log; -extern crate chrono; -extern crate hex; -extern crate pathdiff; -extern crate r2d2_sqlite; -extern crate rand; -extern crate self_cell; -extern crate serde; -extern crate serde_json; -extern crate tempfile; -extern crate time; -extern crate url; -extern crate walkdir; -extern crate zbase32; - -extern crate sequoia_openpgp as openpgp; -use openpgp::{Cert, packet::UserID, parse::Parse, types::KeyFlags}; +use anyhow::{anyhow, Result}; +use log::{info, error}; pub mod types; use types::{Email, Fingerprint, KeyID}; diff --git a/database/src/openpgp_utils.rs b/database/src/openpgp_utils.rs index f25486a..053faff 100644 --- a/database/src/openpgp_utils.rs +++ b/database/src/openpgp_utils.rs @@ -1,7 +1,7 @@ -use openpgp::Result; use std::convert::TryFrom; -use openpgp::{ +use sequoia_openpgp::{ + Result, Cert, cert::prelude::*, policy::StandardPolicy, serialize::SerializeInto as _, types::RevocationStatus, }; diff --git a/database/src/sqlite.rs b/database/src/sqlite.rs index e250bf1..5d04a7a 100644 --- a/database/src/sqlite.rs +++ b/database/src/sqlite.rs @@ -6,13 +6,11 @@ use std::path::PathBuf; use std::str::FromStr; use std::time::{SystemTime, UNIX_EPOCH}; - +use anyhow::format_err; use crate::Result; use crate::types::{Email, Fingerprint, KeyID}; use crate::{Database, Query}; -use openpgp::policy::StandardPolicy; - -use openpgp::Cert; +use sequoia_openpgp::{Cert, policy::StandardPolicy}; use r2d2_sqlite::SqliteConnectionManager; use r2d2_sqlite::rusqlite::OptionalExtension; @@ -483,7 +481,7 @@ impl<'a> Database<'a> for Sqlite { mod tests { use super::*; use crate::test; - use openpgp::cert::CertBuilder; + use sequoia_openpgp::cert::CertBuilder; use tempfile::TempDir; const DATA_1: &str = "data, content doesn't matter"; diff --git a/database/src/stateful_tokens.rs b/database/src/stateful_tokens.rs index 51d9d72..de0466a 100644 --- a/database/src/stateful_tokens.rs +++ b/database/src/stateful_tokens.rs @@ -3,7 +3,7 @@ use std::io::{Read, Write}; use std::path::PathBuf; use std::str; - +use log::info; use crate::Result; pub struct StatefulTokens { diff --git a/database/src/test.rs b/database/src/test.rs index 7524748..2b98b10 100644 --- a/database/src/test.rs +++ b/database/src/test.rs @@ -20,13 +20,12 @@ use std::str::FromStr; use crate::types::{Email, Fingerprint, KeyID}; use crate::{Database, Query}; -use openpgp::cert::{CertBuilder, UserIDRevocationBuilder}; -use openpgp::types::{KeyFlags, ReasonForRevocation, SignatureType}; -use openpgp::{ +use sequoia_openpgp::{ + cert::{CertBuilder, UserIDRevocationBuilder}, Cert, Packet, packet::{UserID, signature::*}, parse::Parse, - types::RevocationStatus, + types::{KeyFlags, ReasonForRevocation, SignatureType, RevocationStatus}, }; use crate::openpgp_utils::POLICY; @@ -1353,7 +1352,7 @@ pub fn test_no_selfsig<'a>(db: &'a mut impl Database<'a>) { /// Makes sure that attested key signatures are correctly handled. pub fn attested_key_signatures<'a>(db: &'a mut impl Database<'a>) -> Result<()> { - use openpgp::types::*; + use sequoia_openpgp::types::*; use std::time::{Duration, SystemTime}; let t0 = SystemTime::now() - Duration::new(5 * 60, 0); let t1 = SystemTime::now() - Duration::new(4 * 60, 0); diff --git a/database/src/types.rs b/database/src/types.rs index 4caabb2..2d89a73 100644 --- a/database/src/types.rs +++ b/database/src/types.rs @@ -4,9 +4,9 @@ use std::result; use std::str::FromStr; use crate::Result; -use anyhow::Error; +use anyhow::{anyhow, Error}; use hex::ToHex; -use openpgp::packet::UserID; +use sequoia_openpgp::packet::UserID; use r2d2_sqlite::rusqlite::types::FromSql; use r2d2_sqlite::rusqlite::types::FromSqlError; use r2d2_sqlite::rusqlite::types::FromSqlResult; diff --git a/database/src/wkd.rs b/database/src/wkd.rs index 75d202d..35ae170 100644 --- a/database/src/wkd.rs +++ b/database/src/wkd.rs @@ -1,5 +1,6 @@ +use anyhow::anyhow; use super::Result; -use crate::openpgp::types::HashAlgorithm; +use sequoia_openpgp::types::HashAlgorithm; use zbase32; // cannibalized from diff --git a/hagridctl/src/import.rs b/hagridctl/src/import.rs index d810e5f..81c3ec7 100644 --- a/hagridctl/src/import.rs +++ b/hagridctl/src/import.rs @@ -8,13 +8,11 @@ use std::thread; use anyhow::Result; -extern crate tempfile; - -extern crate sequoia_openpgp as openpgp; +use sequoia_openpgp as openpgp; use openpgp::Packet; use openpgp::parse::{PacketParser, PacketParserResult, Parse}; -extern crate hagrid_database as database; +use hagrid_database as database; use database::{Database, EmailAddressStatus, ImportResult, KeyDatabase}; use indicatif::{MultiProgress, ProgressBar, ProgressStyle}; diff --git a/hagridctl/src/main.rs b/hagridctl/src/main.rs index f325455..b7531d4 100644 --- a/hagridctl/src/main.rs +++ b/hagridctl/src/main.rs @@ -1,14 +1,3 @@ -extern crate anyhow; -extern crate clap; -extern crate hagrid_database as database; -extern crate sequoia_openpgp as openpgp; -extern crate tempfile; -#[macro_use] -extern crate serde_derive; -extern crate indicatif; -extern crate toml; -extern crate walkdir; - use std::fs; use std::path::PathBuf; use std::str::FromStr; @@ -16,6 +5,7 @@ use std::str::FromStr; use anyhow::Result; use clap::{App, Arg, SubCommand}; +use serde_derive::Deserialize; mod import; diff --git a/src/anonymize_utils.rs b/src/anonymize_utils.rs index a08c15f..2cf927e 100644 --- a/src/anonymize_utils.rs +++ b/src/anonymize_utils.rs @@ -1,7 +1,7 @@ use lazy_static::lazy_static; use std::collections::HashSet; -use crate::database::types::Email; +use hagrid_database::types::Email; // from https://github.com/mailcheck/mailcheck/wiki/List-of-Popular-Domains lazy_static! { diff --git a/src/counters.rs b/src/counters.rs index 876ec71..4a64220 100644 --- a/src/counters.rs +++ b/src/counters.rs @@ -3,7 +3,7 @@ use rocket_prometheus::prometheus; use crate::anonymize_utils; -use crate::database::types::Email; +use hagrid_database::types::Email; lazy_static! { static ref KEY_UPLOAD: LabelCounter = diff --git a/src/delete.rs b/src/delete.rs index 784df45..8429c1a 100644 --- a/src/delete.rs +++ b/src/delete.rs @@ -3,14 +3,11 @@ use std::convert::TryInto; use std::path::PathBuf; -extern crate anyhow; use anyhow::Result; -extern crate structopt; use structopt::StructOpt; -extern crate hagrid_database as database; -use crate::database::{Database, KeyDatabase, Query}; +use hagrid_database::{Database, KeyDatabase, Query, types::Fingerprint}; #[derive(Debug, StructOpt)] #[structopt( @@ -70,7 +67,7 @@ fn delete(db: &KeyDatabase, query: &Query, all_bindings: bool, mut all: bool) -> .lookup(query)? .ok_or_else(|| anyhow::format_err!("No TPK matching {:?}", query))?; - let fp: database::types::Fingerprint = tpk.fingerprint().try_into()?; + let fp: Fingerprint = tpk.fingerprint().try_into()?; let mut results = Vec::new(); // First, delete the bindings. diff --git a/src/i18n_helpers.rs b/src/i18n_helpers.rs index c85a4ec..ffd814a 100644 --- a/src/i18n_helpers.rs +++ b/src/i18n_helpers.rs @@ -1,4 +1,4 @@ -use crate::database::Query; +use hagrid_database::Query; use gettext_macros::i18n; use rocket_i18n::I18n; diff --git a/src/mail.rs b/src/mail.rs index efd3321..baa890a 100644 --- a/src/mail.rs +++ b/src/mail.rs @@ -1,5 +1,5 @@ use std::path::{Path, PathBuf}; - +use anyhow::anyhow; use crate::counters; use lettre::message::{Mailbox, MultiPart, SinglePart, header}; use lettre::{FileTransport, SendmailTransport, SmtpTransport, Transport as LettreTransport}; @@ -13,9 +13,11 @@ use rocket_i18n::I18n; use crate::template_helpers; use crate::Result; -use crate::database::types::Email; +use hagrid_database::types::Email; mod context { + use serde_derive::Serialize; + #[derive(Serialize, Clone)] pub struct Verification { pub lang: String, diff --git a/src/main.rs b/src/main.rs index ca2ceb0..c35d036 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,20 +1,7 @@ #![recursion_limit = "1024"] -#[macro_use] -extern crate anyhow; use anyhow::Result; - -#[macro_use] -extern crate serde_derive; - -#[macro_use] -extern crate rocket; - -#[cfg(test)] -extern crate regex; - -extern crate hagrid_database as database; - +use rocket::launch; use gettext_macros::init_i18n; #[cfg(debug_assertions)] diff --git a/src/tokens.rs b/src/tokens.rs index 9a3b6c3..1608922 100644 --- a/src/tokens.rs +++ b/src/tokens.rs @@ -1,7 +1,9 @@ +use anyhow::anyhow; use crate::sealed_state::SealedState; use crate::Result; use serde::{Serialize, de::DeserializeOwned}; +use serde_derive::Deserialize; pub trait StatelessSerializable: Serialize + DeserializeOwned {} diff --git a/src/web/debug_web.rs b/src/web/debug_web.rs index 8ce1107..2fbe691 100644 --- a/src/web/debug_web.rs +++ b/src/web/debug_web.rs @@ -1,12 +1,13 @@ use std::io; - +use anyhow::anyhow; use rocket_i18n::I18n; +use rocket::get; use crate::dump::{self, Kind}; use crate::i18n_helpers::describe_query_error; use crate::web::MyResponse; -use crate::database::{Database, KeyDatabase, Query}; +use hagrid_database::{Database, KeyDatabase, Query}; #[get("/debug?")] pub fn debug_info(db: &rocket::State, i18n: I18n, q: String) -> MyResponse { diff --git a/src/web/hkp.rs b/src/web/hkp.rs index a29b35b..dafe84b 100644 --- a/src/web/hkp.rs +++ b/src/web/hkp.rs @@ -7,10 +7,10 @@ use std::time::SystemTime; use rocket::Data; use rocket::http::ContentType; use rocket_i18n::I18n; +use rocket::{get, post}; use url::percent_encoding::{DEFAULT_ENCODE_SET, utf8_percent_encode}; -use crate::database::types::{Email, Fingerprint, KeyID}; -use crate::database::{Database, KeyDatabase, Query}; +use hagrid_database::{Database, KeyDatabase, Query, types::{Email, Fingerprint, KeyID}}; use crate::i18n_helpers::describe_query_error; use crate::rate_limiter::RateLimiter; diff --git a/src/web/maintenance.rs b/src/web/maintenance.rs index 3af6db4..7bb1db2 100644 --- a/src/web/maintenance.rs +++ b/src/web/maintenance.rs @@ -1,13 +1,14 @@ use rocket::fairing::{Fairing, Info, Kind}; use rocket::http::Method; use rocket::{Data, Request}; +use rocket::{async_trait, uri, get}; use rocket_dyn_templates::Template; use rocket_i18n::I18n; use serde_json::json; use std::fs; use std::path::PathBuf; - +use serde_derive::Serialize; use crate::web::MyResponse; use super::util::get_commit_sha; @@ -17,6 +18,8 @@ pub struct MaintenanceMode { } mod templates { + use serde_derive::Serialize; + #[derive(Serialize)] pub struct MaintenanceMode { pub message: String, diff --git a/src/web/manage.rs b/src/web/manage.rs index c822878..d1a167b 100644 --- a/src/web/manage.rs +++ b/src/web/manage.rs @@ -1,18 +1,23 @@ +use anyhow::anyhow; use rocket::form::Form; +use rocket::{get, post, uri}; use rocket_i18n::I18n; use crate::Result; use gettext_macros::i18n; - +use serde_derive::{Deserialize, Serialize}; use crate::counters; -use crate::database::{Database, KeyDatabase, types::Email, types::Fingerprint}; +use hagrid_database::{Database, KeyDatabase, types::Email, types::Fingerprint, Query}; use crate::mail; use crate::rate_limiter::RateLimiter; use crate::tokens::{self, StatelessSerializable}; use crate::web::vks_web; use crate::web::{MyResponse, RequestOrigin}; +use std::convert::TryFrom; +use std::convert::TryInto; + #[derive(Debug, Serialize, Deserialize)] struct StatelessVerifyToken { fpr: Fingerprint, @@ -20,6 +25,8 @@ struct StatelessVerifyToken { impl StatelessSerializable for StatelessVerifyToken {} mod templates { + use serde_derive::Serialize; + #[derive(Serialize)] pub struct ManageKey { pub key_fpr: String, @@ -42,6 +49,8 @@ mod templates { } pub mod forms { + use rocket::FromForm; + #[derive(FromForm)] pub struct ManageRequest { pub search_term: String, @@ -67,10 +76,8 @@ pub fn vks_manage_key( token: String, token_service: &rocket::State, ) -> MyResponse { - use crate::database::types::Fingerprint; - use std::convert::TryFrom; if let Ok(StatelessVerifyToken { fpr }) = token_service.check(&token) { - match db.lookup(&database::Query::ByFingerprint(fpr)) { + match db.lookup(&Query::ByFingerprint(fpr)) { Ok(Some(tpk)) => { let fp = Fingerprint::try_from(tpk.fingerprint()).unwrap(); let mut emails: Vec = tpk @@ -124,8 +131,6 @@ pub fn vks_manage_post( request: Form, token_service: &rocket::State, ) -> MyResponse { - use std::convert::TryInto; - let email = match request.search_term.parse::() { Ok(email) => email, Err(_) => { @@ -138,7 +143,7 @@ pub fn vks_manage_post( } }; - let tpk = match db.lookup(&database::Query::ByEmail(email.clone())) { + let tpk = match db.lookup(&Query::ByEmail(email.clone())) { Ok(Some(tpk)) => tpk, Ok(None) => { return MyResponse::not_found( diff --git a/src/web/mod.rs b/src/web/mod.rs index ade9894..769b368 100644 --- a/src/web/mod.rs +++ b/src/web/mod.rs @@ -3,7 +3,7 @@ use rocket::figment::Figment; use rocket::fs::NamedFile; use rocket::http::{Header, Status}; use rocket::outcome::Outcome; -use rocket::request; +use rocket::{async_trait, request, get, routes}; use rocket::response::status::Custom; use rocket::response::{Responder, Response}; use rocket_dyn_templates::{Engines, Template}; @@ -27,8 +27,7 @@ use crate::template_helpers::TemplateOverrides; use crate::tokens; use crate::Result; -use crate::database::types::Fingerprint; -use crate::database::{Database, KeyDatabase, Query}; +use hagrid_database::{Database, KeyDatabase, Query, types::Fingerprint, StatefulTokens}; use std::convert::TryInto; @@ -209,6 +208,7 @@ impl MyResponse { } mod templates { + use serde_derive::Serialize; use super::{I18n, RequestOrigin, util::get_commit_sha}; #[derive(Serialize)] @@ -539,9 +539,9 @@ fn configure_hagrid_state(config: &Figment) -> Result { }) } -fn configure_stateful_token_service(config: &Figment) -> Result { +fn configure_stateful_token_service(config: &Figment) -> Result { let token_dir: PathBuf = config.extract_inner("token_dir")?; - database::StatefulTokens::new(token_dir) + StatefulTokens::new(token_dir) } fn configure_stateless_token_service(config: &Figment) -> Result { @@ -1115,7 +1115,7 @@ pub mod tests { &format!("/pks/lookup?op=get&options=mr&search={}", addr), ); - let (wkd_hash, domain) = crate::database::wkd::encode_wkd(addr).unwrap(); + let (wkd_hash, domain) = hagrid_database::wkd::encode_wkd(addr).unwrap(); check_null_response( client, &format!("/.well-known/openpgpkey/{}/hu/{}", domain, wkd_hash), @@ -1149,7 +1149,7 @@ pub mod tests { check_hr_response(client, &format!("/search?q={}", addr), tpk, nr_uids); check_hr_response_onion(client, &format!("/search?q={}", addr), tpk, nr_uids); - let (wkd_hash, domain) = crate::database::wkd::encode_wkd(addr).unwrap(); + let (wkd_hash, domain) = hagrid_database::wkd::encode_wkd(addr).unwrap(); check_wkd_response( client, &format!("/.well-known/openpgpkey/{}/hu/{}", domain, wkd_hash), diff --git a/src/web/vks.rs b/src/web/vks.rs index bff1efa..1e1d88a 100644 --- a/src/web/vks.rs +++ b/src/web/vks.rs @@ -1,9 +1,8 @@ use crate::Result; use crate::counters; -use crate::database::types::{Email, Fingerprint}; -use crate::database::{ - Database, EmailAddressStatus, ImportResult, KeyDatabase, StatefulTokens, TpkStatus, +use hagrid_database::{ + Database, EmailAddressStatus, ImportResult, KeyDatabase, StatefulTokens, TpkStatus, types::{Email, Fingerprint} }; use crate::mail; use crate::rate_limiter::RateLimiter; @@ -21,10 +20,13 @@ use sequoia_openpgp::parse::{Dearmor, PacketParserBuilder, Parse}; use std::collections::HashMap; use std::convert::TryFrom; use std::io::Read; - +use anyhow::anyhow; +use serde_derive::{Deserialize, Serialize}; use self::response::*; pub mod request { + use serde_derive::Deserialize; + #[derive(Deserialize)] pub struct UploadRequest { pub keytext: String, @@ -38,7 +40,10 @@ pub mod request { } pub mod response { - use crate::database::types::Email; + use hagrid_database::types::Email; + + use std::collections::HashMap; + use serde_derive::{Deserialize, Serialize}; #[derive(Debug, Serialize, Deserialize, PartialEq, Eq)] pub enum EmailStatus { @@ -52,8 +57,6 @@ pub mod response { Revoked, } - use std::collections::HashMap; - pub enum UploadResponse { Ok { token: String, diff --git a/src/web/vks_api.rs b/src/web/vks_api.rs index c18291b..f26b8fb 100644 --- a/src/web/vks_api.rs +++ b/src/web/vks_api.rs @@ -1,3 +1,4 @@ +use rocket::{get, post}; use rocket::http::{ContentType, Status}; use rocket::request::Request; use rocket::response::{self, Responder, Response}; @@ -6,8 +7,7 @@ use rocket_i18n::{I18n, Translations}; use serde_json::json; use std::io::Cursor; -use crate::database::types::{Email, Fingerprint, KeyID}; -use crate::database::{KeyDatabase, Query, StatefulTokens}; +use hagrid_database::{types::{Email, Fingerprint, KeyID}, KeyDatabase, Query, StatefulTokens}; use crate::mail; use crate::rate_limiter::RateLimiter; use crate::tokens; @@ -22,6 +22,7 @@ use rocket::serde::json::Error as JsonError; pub mod json { use crate::web::vks::response::EmailStatus; use std::collections::HashMap; + use serde_derive::{Deserialize, Serialize}; #[derive(Deserialize)] pub struct VerifyRequest { diff --git a/src/web/vks_web.rs b/src/web/vks_web.rs index e9bba36..d3ab119 100644 --- a/src/web/vks_web.rs +++ b/src/web/vks_web.rs @@ -11,9 +11,11 @@ use rocket::form::Form; use rocket::form::ValueField; use rocket::http::ContentType; use rocket_i18n::I18n; +use rocket::uri; +use rocket::{get, post, put}; use url::percent_encoding::percent_decode; -use crate::database::{Database, KeyDatabase, Query, StatefulTokens}; +use hagrid_database::{Database, KeyDatabase, Query, StatefulTokens}; use crate::i18n_helpers::describe_query_error; use crate::mail; use crate::rate_limiter::RateLimiter; @@ -22,13 +24,16 @@ use crate::web::{MyResponse, RequestOrigin}; use std::collections::HashMap; use std::io::Cursor; - +use anyhow::anyhow; use crate::web::vks; use crate::web::vks::response::*; const UPLOAD_LIMIT: ByteUnit = ByteUnit::Mebibyte(1); mod forms { + use rocket::FromForm; + use serde_derive::Deserialize; + #[derive(FromForm, Deserialize)] pub struct VerifyRequest { pub token: String, @@ -42,6 +47,8 @@ mod forms { } mod template { + use serde_derive::Serialize; + #[derive(Serialize)] pub struct VerifyForm { pub token: String, diff --git a/src/web/wkd.rs b/src/web/wkd.rs index 245f339..3e30de5 100644 --- a/src/web/wkd.rs +++ b/src/web/wkd.rs @@ -1,5 +1,6 @@ -use crate::database::{Database, KeyDatabase}; +use hagrid_database::{Database, KeyDatabase}; use crate::web::MyResponse; +use rocket::get; // WKD queries #[get("/.well-known/openpgpkey//hu/")] diff --git a/tester/src/generate.rs b/tester/src/generate.rs index f5ae565..eee873c 100644 --- a/tester/src/generate.rs +++ b/tester/src/generate.rs @@ -3,7 +3,7 @@ use std::{fs::File, io::Write, path::Path}; use anyhow::Result; use indicatif::{ProgressBar, ProgressStyle}; -use openpgp::{cert::CertBuilder, serialize::Serialize}; +use sequoia_openpgp::{cert::CertBuilder, serialize::Serialize}; use crate::util; diff --git a/tester/src/main.rs b/tester/src/main.rs index 0f650e0..775eeb0 100644 --- a/tester/src/main.rs +++ b/tester/src/main.rs @@ -1,10 +1,3 @@ -extern crate anyhow; -extern crate clap; -extern crate indicatif; -extern crate rand; -extern crate sequoia_openpgp as openpgp; -extern crate serde_derive; - use std::path::PathBuf; use anyhow::Result;