Compare commits

..

No commits in common. "06a952251443742f45e731dd6e47b683d589c62b" and "d2755f82c94c3951f34e5aece06e1ce9457c2fe4" have entirely different histories.

3 changed files with 56 additions and 64 deletions

View file

@ -22,15 +22,11 @@ struct Opts {
#[derive(Parser)]
enum Action {
Upload {
/// The OmegaUpload instance to upload data to.
url: Url,
/// Encrypt the uploaded paste with the provided password, preventing
/// public access.
#[clap(short, long)]
password: Option<SecretString>,
},
Download {
/// The paste to download.
url: ParsedUrl,
},
}

View file

@ -39,12 +39,13 @@ pub fn decrypt(
nonce: Nonce,
maybe_password: Option<Key>,
) -> Result<DecryptedData, PasteCompleteConstructionError> {
let container = &mut container;
log!("Stage 1 decryption started.");
let start = now();
if let Some(password) = maybe_password {
crate::render_message("Decrypting Stage 1...".into());
open_in_place(&mut container, &nonce.increment(), &password).map_err(|_| {
open_in_place(container, &nonce.increment(), &password).map_err(|_| {
crate::render_message("Unable to decrypt paste with the provided password.".into());
PasteCompleteConstructionError::StageOneFailure
})?;
@ -54,7 +55,7 @@ pub fn decrypt(
log!("Stage 2 decryption started.");
let start = now();
crate::render_message("Decrypting Stage 2...".into());
open_in_place(&mut container, &nonce, &key).map_err(|_| {
open_in_place(container, &nonce, &key).map_err(|_| {
crate::render_message(
"Unable to decrypt paste with the provided encryption key and nonce.".into(),
);
@ -62,7 +63,10 @@ pub fn decrypt(
})?;
log!(format!("Stage 2 completed in {}ms", now() - start));
let mime_type = tree_magic_mini::from_u8(&container);
if let Ok(decrypted) = std::str::from_utf8(container) {
Ok(DecryptedData::String(Arc::new(decrypted.to_owned())))
} else {
let mime_type = tree_magic_mini::from_u8(container);
log!("Mimetype: ", mime_type);
log!("Blob conversion started.");
@ -76,17 +80,15 @@ pub fn decrypt(
let mut blob_props = BlobPropertyBag::new();
blob_props.type_(mime_type);
let blob = Arc::new(
Blob::new_with_u8_array_sequence_and_options(blob_chunks.dyn_ref().unwrap(), &blob_props)
Blob::new_with_u8_array_sequence_and_options(
blob_chunks.dyn_ref().unwrap(),
&blob_props,
)
.unwrap(),
);
log!(format!("Blob conversion completed in {}ms", now() - start));
if mime_type.starts_with("text/") {
String::from_utf8(container)
.map(Arc::new)
.map(DecryptedData::String)
.map_err(|_| PasteCompleteConstructionError::InvalidEncoding)
} else if mime_type.starts_with("image/") || mime_type == "application/x-riff" {
if mime_type.starts_with("image/") || mime_type == "application/x-riff" {
Ok(DecryptedData::Image(blob, container.len()))
} else if mime_type.starts_with("audio/") {
Ok(DecryptedData::Audio(blob))
@ -121,12 +123,12 @@ pub fn decrypt(
Ok(DecryptedData::Blob(blob))
}
}
}
#[derive(Debug)]
pub enum PasteCompleteConstructionError {
StageOneFailure,
StageTwoFailure,
InvalidEncoding,
}
impl std::error::Error for PasteCompleteConstructionError {}
@ -140,10 +142,6 @@ impl Display for PasteCompleteConstructionError {
PasteCompleteConstructionError::StageTwoFailure => {
write!(f, "Failed to decrypt stage two.")
}
PasteCompleteConstructionError::InvalidEncoding => write!(
f,
"Got an file with a text/* mime type, but was unable to parsed as valid UTF-8?"
),
}
}
}

View file

@ -177,8 +177,6 @@ function createArchivePasteUi({ expiration, data, entries }) {
return a.name.toLowerCase().localeCompare(b.name.toLowerCase());
});
// This doesn't get sub directories and their folders, but hey it's close
// enough
entries.sort((a, b) => {
return b.name.includes("/") - a.name.includes("/");
});