Port sq autocrypt's examples to the example framework.

- Port `sq autocrypt`'s examples to the example framework.

  - See #196.
This commit is contained in:
Justus Winter 2024-06-20 15:47:56 +02:00
parent 815fd5df3b
commit e78bcf248f
No known key found for this signature in database
GPG Key ID: 686F55B4AB2B3386
3 changed files with 267 additions and 24 deletions

View File

@ -7,6 +7,11 @@ use super::types::FileOrStdin;
use super::types::FileOrStdout;
use super::types::SessionKey;
use crate::cli::examples;
use examples::Action;
use examples::Actions;
use examples::Example;
#[derive(Parser, Debug)]
#[clap(
name = "autocrypt",
@ -36,6 +41,19 @@ pub enum Subcommands {
EncodeSender(EncodeSenderCommand),
}
const IMPORT_EXAMPLES: Actions = Actions {
actions: &[
Action::Example(Example {
comment: "\
Imports all certificates from a mail.",
command: &[
"sq", "autocrypt", "import", "autocrypt.eml",
],
}),
]
};
test_examples!(sq_autocrypt_import, IMPORT_EXAMPLES);
#[derive(Debug, Args)]
#[clap(
about = "Import Autocrypt-encoded certificates",
@ -44,11 +62,7 @@ pub enum Subcommands {
Given a mail containing autocrypt headers (or an key-gossip headers),
this command extracts and imports the certificates encoded within it.
",
after_help = "EXAMPLES:
# Imports all certificates from a mail
$ sq autocrypt import autocrypt.eml
"
after_help = IMPORT_EXAMPLES,
)]
pub struct ImportCommand {
#[clap(
@ -73,6 +87,19 @@ pub struct ImportCommand {
pub input: FileOrStdin,
}
const DECODE_EXAMPLES: Actions = Actions {
actions: &[
Action::Example(Example {
comment: "\
Extract all certificates from a mail.",
command: &[
"sq", "autocrypt", "decode", "autocrypt.eml",
],
}),
]
};
test_examples!(sq_autocrypt_decode, DECODE_EXAMPLES);
#[derive(Debug, Args)]
#[clap(
about = "Read Autocrypt-encoded certificates",
@ -83,11 +110,7 @@ extracts the certificate encoded within it.
The converse operation is `sq autocrypt encode-sender`.
",
after_help = "EXAMPLES:
# Extract all certificates from a mail
$ sq autocrypt decode autocrypt.eml
"
after_help = DECODE_EXAMPLES,
)]
pub struct DecodeCommand {
#[clap(
@ -108,7 +131,35 @@ pub struct DecodeCommand {
pub binary: bool,
}
//#[derive(Subcommand)]
const ENCODE_SENDER_EXAMPLES: Actions = Actions {
actions: &[
Action::Example(Example {
comment: "\
Encodes a certificate.",
command: &[
"sq", "autocrypt", "encode-sender", "juliet.pgp",
],
}),
Action::Example(Example {
comment: "\
Encodes a certificate with an explicit sender address.",
command: &[
"sq", "autocrypt", "encode-sender",
"--email", "juliet@example.org", "juliet.pgp",
],
}),
Action::Example(Example {
comment: "\
Encodes a certificate while indicating the willingness to encrypt.",
command: &[
"sq", "autocrypt", "encode-sender",
"--prefer-encrypt", "mutual", "juliet.pgp",
],
}),
]
};
test_examples!(sq_autocrypt_encode_sender, ENCODE_SENDER_EXAMPLES);
#[derive(Debug, Args)]
#[clap(
name = "encode-sender",
@ -123,17 +174,7 @@ information).
The converse operation is `sq autocrypt decode`.
",
after_help = "EXAMPLES:
# Encodes a certificate
$ sq autocrypt encode-sender juliet.pgp
# Encodes a certificate with an explicit sender address
$ sq autocrypt encode-sender --email juliet@example.org juliet.pgp
# Encodes a certificate while indicating the willingness to encrypt
$ sq autocrypt encode-sender --prefer-encrypt mutual juliet.pgp
"
after_help = ENCODE_SENDER_EXAMPLES,
)]
pub struct EncodeSenderCommand {
#[clap(

View File

@ -86,14 +86,13 @@ use std::time::Duration;
use clap::{Command, CommandFactory, Parser, Subcommand};
use clap::builder::StyledStr;
pub mod autocrypt;
use sequoia_openpgp as openpgp;
use openpgp::Fingerprint;
#[macro_use]
pub mod examples;
pub mod autocrypt;
pub mod cert;
pub mod decrypt;
pub mod encrypt;

View File

@ -0,0 +1,203 @@
Return-Path: <pink@probier.email>
Delivered-To: teythoon@fump.uberspace.de
Received: (qmail 15250 invoked by uid 1114); 29 Jan 2024 11:21:46 -0000
Delivered-To: teythoon-sequoia@teythoon.uber.space
Received: (qmail 15246 invoked by uid 989); 29 Jan 2024 11:21:46 -0000
Received: from paddington.uberspace.de (paddington.uberspace.de [185.26.156.85])
by fump.uberspace.de (Haraka/3.0.1) with ESMTPS id 55C892D2-DC4B-4400-8769-94317B144188.1
envelope-from <pink@probier.email>
tls TLS_DHE_RSA_WITH_AES_256_GCM_SHA384;
Mon, 29 Jan 2024 12:21:40 +0100
Received: (qmail 12189 invoked by uid 1282); 29 Jan 2024 11:21:35 -0000
Delivered-To: sequoia-justus@sequoia-pgp.org
Received: (qmail 12182 invoked by uid 500); 29 Jan 2024 11:21:35 -0000
Received: from unknown (HELO unkown) (::1)
by paddington.uberspace.de (Haraka/3.0.1) with ESMTPSA; Mon, 29 Jan 2024 12:21:34 +0100
Date: Mon, 29 Jan 2024 12:21:32 +0100
From: Justus <pink@probier.email>
To: Hilal Maria <hilal-maria@probier.email>,
Justus Winter <justus@sequoia-pgp.org>
Subject: Re: hioh
User-Agent: K-9 Mail for Android
In-Reply-To: <215356b8-8dfa-40ed-b23e-814e162aa516@probier.email>
References: <215356b8-8dfa-40ed-b23e-814e162aa516@probier.email>
Message-ID: <E43FF9D5-ABE5-42D4-852F-4692FB643B10@probier.email>
Autocrypt: addr=pink@probier.email; prefer-encrypt=mutual; keydata=
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
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Type: multipart/encrypted; boundary="----CQ7LFIZB0YIJVS4GLSH9FSOOCUE5GD";
protocol="application/pgp-encrypted"
Original-Authentication-Results: paddington.uberspace.de;
auth=pass (plain)
X-Rspamd-Bar: /
X-Rspamd-Report: R_DKIM_ALLOW(-0.2) MIME_GOOD(-0.2) FORGED_RECIPIENTS(1) ENCRYPTED_PGP(-0.5) R_SPF_ALLOW(-0.2)
X-Rspamd-Score: -0.099999
------CQ7LFIZB0YIJVS4GLSH9FSOOCUE5GD
Content-Type: application/pgp-encrypted
Content-Transfer-Encoding: quoted-printable
Version: 1
------CQ7LFIZB0YIJVS4GLSH9FSOOCUE5GD
Content-Type: application/octet-stream; name="encrypted.asc"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="encrypted.asc"
-----BEGIN PGP MESSAGE-----
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
qSem94uRIuWwTPICuYVIddB7pOMoege7RZ8=
=XFTZ
-----END PGP MESSAGE-----
------CQ7LFIZB0YIJVS4GLSH9FSOOCUE5GD--