Define custom errors
This commit is contained in:
		
							parent
							
								
									f720dcbe9a
								
							
						
					
					
						commit
						6eee4b0b65
					
				| @ -9,6 +9,9 @@ use crate::activity_pub::{ap_accept_header, AP_CONTENT_TYPE}; | ||||
| 
 | ||||
| const PLUME_USER_AGENT: &str = concat!("Plume/", env!("CARGO_PKG_VERSION")); | ||||
| 
 | ||||
| #[derive(Debug)] | ||||
| pub struct Error(); | ||||
| 
 | ||||
| pub struct Digest(String); | ||||
| 
 | ||||
| impl Digest { | ||||
| @ -61,16 +64,16 @@ impl Digest { | ||||
|         base64::decode(&self.0[pos..]).expect("Digest::value: invalid encoding error") | ||||
|     } | ||||
| 
 | ||||
|     pub fn from_header(dig: &str) -> Result<Self, ()> { | ||||
|     pub fn from_header(dig: &str) -> Result<Self, Error> { | ||||
|         if let Some(pos) = dig.find('=') { | ||||
|             let pos = pos + 1; | ||||
|             if base64::decode(&dig[pos..]).is_ok() { | ||||
|                 Ok(Digest(dig.to_owned())) | ||||
|             } else { | ||||
|                 Err(()) | ||||
|                 Err(Error()) | ||||
|             } | ||||
|         } else { | ||||
|             Err(()) | ||||
|             Err(Error()) | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| @ -109,7 +112,7 @@ pub fn headers() -> HeaderMap { | ||||
|     headers | ||||
| } | ||||
| 
 | ||||
| pub fn signature<S: Signer>(signer: &S, headers: &HeaderMap) -> Result<HeaderValue, ()> { | ||||
| pub fn signature<S: Signer>(signer: &S, headers: &HeaderMap) -> Result<HeaderValue, Error> { | ||||
|     let signed_string = headers | ||||
|         .iter() | ||||
|         .map(|(h, v)| { | ||||
| @ -129,7 +132,7 @@ pub fn signature<S: Signer>(signer: &S, headers: &HeaderMap) -> Result<HeaderVal | ||||
|         .join(" ") | ||||
|         .to_lowercase(); | ||||
| 
 | ||||
|     let data = signer.sign(&signed_string).map_err(|_| ())?; | ||||
|     let data = signer.sign(&signed_string).map_err(|_| Error())?; | ||||
|     let sign = base64::encode(&data); | ||||
| 
 | ||||
|     HeaderValue::from_str(&format!( | ||||
| @ -137,5 +140,5 @@ pub fn signature<S: Signer>(signer: &S, headers: &HeaderMap) -> Result<HeaderVal | ||||
|         key_id = signer.get_key_id(), | ||||
|         signed_headers = signed_headers, | ||||
|         signature = sign | ||||
|     )).map_err(|_| ()) | ||||
|     )).map_err(|_| Error()) | ||||
| } | ||||
|  | ||||
| @ -17,6 +17,9 @@ pub fn gen_keypair() -> (Vec<u8>, Vec<u8>) { | ||||
|     ) | ||||
| } | ||||
| 
 | ||||
| #[derive(Debug)] | ||||
| pub struct Error(); | ||||
| 
 | ||||
| pub trait Signer { | ||||
|     type Error; | ||||
| 
 | ||||
| @ -29,7 +32,7 @@ pub trait Signer { | ||||
| } | ||||
| 
 | ||||
| pub trait Signable { | ||||
|     fn sign<T>(&mut self, creator: &T) -> Result<&mut Self, ()> | ||||
|     fn sign<T>(&mut self, creator: &T) -> Result<&mut Self, Error> | ||||
|     where | ||||
|         T: Signer; | ||||
|     fn verify<T>(self, creator: &T) -> bool | ||||
| @ -43,7 +46,7 @@ pub trait Signable { | ||||
| } | ||||
| 
 | ||||
| impl Signable for serde_json::Value { | ||||
|     fn sign<T: Signer>(&mut self, creator: &T) -> Result<&mut serde_json::Value, ()> { | ||||
|     fn sign<T: Signer>(&mut self, creator: &T) -> Result<&mut serde_json::Value, Error> { | ||||
|         let creation_date = Utc::now().to_rfc3339(); | ||||
|         let mut options = json!({ | ||||
|             "type": "RsaSignature2017", | ||||
| @ -61,7 +64,7 @@ impl Signable for serde_json::Value { | ||||
|         let document_hash = Self::hash(&self.to_string()); | ||||
|         let to_be_signed = options_hash + &document_hash; | ||||
| 
 | ||||
|         let signature = base64::encode(&creator.sign(&to_be_signed).map_err(|_| ())?); | ||||
|         let signature = base64::encode(&creator.sign(&to_be_signed).map_err(|_| Error())?); | ||||
| 
 | ||||
|         options["signatureValue"] = serde_json::Value::String(signature); | ||||
|         self["signature"] = options; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user