git: 4dd578f0274a - main - mail/pizauth: Add new port

From: Nicola Vitale <nivit_at_FreeBSD.org>
Date: Sun, 15 Sep 2024 16:15:42 UTC
The branch main has been updated by nivit:

URL: https://cgit.FreeBSD.org/ports/commit/?id=4dd578f0274af86f1055d62658f852712c846437

commit 4dd578f0274af86f1055d62658f852712c846437
Author:     Nicola Vitale <nivit@FreeBSD.org>
AuthorDate: 2024-09-15 16:14:07 +0000
Commit:     Nicola Vitale <nivit@FreeBSD.org>
CommitDate: 2024-09-15 16:14:07 +0000

    mail/pizauth: Add new port
    
    pizauth is a simple program for requesting, showing, and refreshing OAuth2
    access tokens. pizauth is formed of two components: a persistent server which
    interacts with the user to request tokens, and refreshes them as necessary; and
    a command-line interface which can be used by programs such as fdm, neomutt, or
    msmtp to authenticate with OAuth2.
    
    https://tratt.net/laurie/src/pizauth/
---
 mail/Makefile                |   1 +
 mail/pizauth/Makefile        |  27 ++++
 mail/pizauth/Makefile.crates | 154 +++++++++++++++++++++
 mail/pizauth/distinfo        | 311 +++++++++++++++++++++++++++++++++++++++++++
 mail/pizauth/pkg-descr       |   5 +
 5 files changed, 498 insertions(+)

diff --git a/mail/Makefile b/mail/Makefile
index ed6f3cea5142..589e738ce277 100644
--- a/mail/Makefile
+++ b/mail/Makefile
@@ -474,6 +474,7 @@
     SUBDIR += phpmailer
     SUBDIR += phpmailer6
     SUBDIR += pine-pgp-filters
+    SUBDIR += pizauth
     SUBDIR += pm-lib
     SUBDIR += policyd2
     SUBDIR += popa3d
diff --git a/mail/pizauth/Makefile b/mail/pizauth/Makefile
new file mode 100644
index 000000000000..a23a445e6451
--- /dev/null
+++ b/mail/pizauth/Makefile
@@ -0,0 +1,27 @@
+PORTNAME=	pizauth
+DISTVERSION=	1.0.5
+CATEGORIES=	mail
+
+MAINTAINER=	nivit@FreeBSD.org
+COMMENT=	Command-line OAuth2 authentication daemon
+WWW=		https://tratt.net/laurie/src/pizauth/
+
+LICENSE=	APACHE20 MIT
+LICENSE_COMB=	dual
+LICENSE_FILE=	${WRKSRC}/COPYRIGHT
+
+USES=		cargo tar:tgz
+USE_GITHUB=	yes
+GH_ACCOUNT=	ltratt
+GH_TAGNAME=	${PORTNAME}-${DISTVERSION}
+
+PLIST_FILES=	bin/pizauth \
+		share/man/man1/pizauth.1.gz \
+		share/man/man5/pizauth.conf.5.gz
+
+post-install:
+	(cd ${WRKSRC} && \
+		${INSTALL_MAN} pizauth.1 ${STAGEDIR}${PREFIX}/share/man/man1/ && \
+		${INSTALL_MAN} pizauth.conf.5 ${STAGEDIR}${PREFIX}/share/man/man5/)
+
+.include <bsd.port.mk>
diff --git a/mail/pizauth/Makefile.crates b/mail/pizauth/Makefile.crates
new file mode 100644
index 000000000000..f85b4a04f36e
--- /dev/null
+++ b/mail/pizauth/Makefile.crates
@@ -0,0 +1,154 @@
+CARGO_CRATES=	adler-1.0.2 \
+		aead-0.5.2 \
+		aho-corasick-1.1.3 \
+		android-tzdata-0.1.1 \
+		android_system_properties-0.1.5 \
+		anyhow-1.0.86 \
+		autocfg-1.3.0 \
+		base64-0.22.1 \
+		bincode-1.3.3 \
+		bitflags-1.3.2 \
+		bitflags-2.5.0 \
+		block-buffer-0.10.4 \
+		bstr-1.9.1 \
+		bumpalo-3.16.0 \
+		cactus-1.0.7 \
+		cc-1.0.98 \
+		cfg-if-1.0.0 \
+		cfg_aliases-0.2.1 \
+		cfgrammar-0.13.5 \
+		chacha20-0.9.1 \
+		chacha20poly1305-0.10.1 \
+		chrono-0.4.38 \
+		cipher-0.4.4 \
+		core-foundation-sys-0.8.6 \
+		cpufeatures-0.2.12 \
+		crc32fast-1.4.2 \
+		crossbeam-deque-0.8.5 \
+		crossbeam-epoch-0.9.18 \
+		crossbeam-utils-0.8.20 \
+		crypto-common-0.1.6 \
+		deranged-0.3.11 \
+		digest-0.10.7 \
+		equivalent-1.0.1 \
+		error-chain-0.12.4 \
+		filetime-0.2.23 \
+		flate2-1.0.30 \
+		fnv-1.0.7 \
+		form_urlencoded-1.2.1 \
+		generic-array-0.14.7 \
+		getopts-0.2.21 \
+		getrandom-0.2.15 \
+		globset-0.4.14 \
+		hashbrown-0.14.5 \
+		hermit-abi-0.3.9 \
+		hostname-0.3.1 \
+		iana-time-zone-0.1.60 \
+		iana-time-zone-haiku-0.1.2 \
+		idna-0.5.0 \
+		ignore-0.4.22 \
+		indexmap-2.2.6 \
+		inout-0.1.3 \
+		is-terminal-0.4.12 \
+		itoa-1.0.11 \
+		js-sys-0.3.69 \
+		lazy_static-1.4.0 \
+		libc-0.2.155 \
+		log-0.4.21 \
+		lrlex-0.13.5 \
+		lrpar-0.13.5 \
+		lrtable-0.13.5 \
+		match_cfg-0.1.0 \
+		memchr-2.7.2 \
+		miniz_oxide-0.7.3 \
+		nix-0.29.0 \
+		num-conv-0.1.0 \
+		num-traits-0.2.19 \
+		num_threads-0.1.7 \
+		once_cell-1.19.0 \
+		opaque-debug-0.3.1 \
+		packedvec-1.2.4 \
+		percent-encoding-2.3.1 \
+		pledge-0.4.2 \
+		poly1305-0.8.0 \
+		powerfmt-0.2.0 \
+		ppv-lite86-0.2.17 \
+		proc-macro2-1.0.84 \
+		quote-1.0.36 \
+		rand-0.8.5 \
+		rand_chacha-0.3.1 \
+		rand_core-0.6.4 \
+		redox_syscall-0.4.1 \
+		regex-1.10.4 \
+		regex-automata-0.4.6 \
+		regex-syntax-0.8.3 \
+		rerun_except-1.0.0 \
+		ring-0.17.8 \
+		rustc_version-0.4.0 \
+		rustls-0.22.4 \
+		rustls-pki-types-1.7.0 \
+		rustls-webpki-0.102.4 \
+		rustversion-1.0.17 \
+		ryu-1.0.18 \
+		same-file-1.0.6 \
+		semver-1.0.23 \
+		serde-1.0.203 \
+		serde_derive-1.0.203 \
+		serde_json-1.0.117 \
+		sha2-0.10.8 \
+		sparsevec-0.2.0 \
+		spin-0.9.8 \
+		static_assertions-1.1.0 \
+		stderrlog-0.6.0 \
+		subtle-2.5.0 \
+		syn-2.0.66 \
+		syslog-6.1.1 \
+		termcolor-1.1.3 \
+		thread_local-1.1.8 \
+		time-0.3.36 \
+		time-core-0.1.2 \
+		time-macros-0.2.18 \
+		tinyvec-1.6.0 \
+		tinyvec_macros-0.1.1 \
+		typenum-1.17.0 \
+		unicode-bidi-0.3.15 \
+		unicode-ident-1.0.12 \
+		unicode-normalization-0.1.23 \
+		unicode-width-0.1.12 \
+		universal-hash-0.5.1 \
+		untrusted-0.9.0 \
+		unveil-0.3.2 \
+		ureq-2.9.7 \
+		url-2.5.0 \
+		urlencoding-2.1.3 \
+		vergen-8.3.1 \
+		version_check-0.9.4 \
+		vob-3.0.3 \
+		wait-timeout-0.2.0 \
+		walkdir-2.5.0 \
+		wasi-0.11.0+wasi-snapshot-preview1 \
+		wasite-0.1.0 \
+		wasm-bindgen-0.2.92 \
+		wasm-bindgen-backend-0.2.92 \
+		wasm-bindgen-macro-0.2.92 \
+		wasm-bindgen-macro-support-0.2.92 \
+		wasm-bindgen-shared-0.2.92 \
+		web-sys-0.3.69 \
+		webpki-roots-0.26.1 \
+		whoami-1.5.1 \
+		winapi-0.3.9 \
+		winapi-i686-pc-windows-gnu-0.4.0 \
+		winapi-util-0.1.8 \
+		winapi-x86_64-pc-windows-gnu-0.4.0 \
+		windows-core-0.52.0 \
+		windows-sys-0.52.0 \
+		windows-targets-0.52.5 \
+		windows_aarch64_gnullvm-0.52.5 \
+		windows_aarch64_msvc-0.52.5 \
+		windows_i686_gnu-0.52.5 \
+		windows_i686_gnullvm-0.52.5 \
+		windows_i686_msvc-0.52.5 \
+		windows_x86_64_gnu-0.52.5 \
+		windows_x86_64_gnullvm-0.52.5 \
+		windows_x86_64_msvc-0.52.5 \
+		zeroize-1.8.1
diff --git a/mail/pizauth/distinfo b/mail/pizauth/distinfo
new file mode 100644
index 000000000000..eb075e1790ba
--- /dev/null
+++ b/mail/pizauth/distinfo
@@ -0,0 +1,311 @@
+TIMESTAMP = 1726327148
+SHA256 (rust/crates/adler-1.0.2.crate) = f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe
+SIZE (rust/crates/adler-1.0.2.crate) = 12778
+SHA256 (rust/crates/aead-0.5.2.crate) = d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0
+SIZE (rust/crates/aead-0.5.2.crate) = 15509
+SHA256 (rust/crates/aho-corasick-1.1.3.crate) = 8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916
+SIZE (rust/crates/aho-corasick-1.1.3.crate) = 183311
+SHA256 (rust/crates/android-tzdata-0.1.1.crate) = e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0
+SIZE (rust/crates/android-tzdata-0.1.1.crate) = 7674
+SHA256 (rust/crates/android_system_properties-0.1.5.crate) = 819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311
+SIZE (rust/crates/android_system_properties-0.1.5.crate) = 5243
+SHA256 (rust/crates/anyhow-1.0.86.crate) = b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da
+SIZE (rust/crates/anyhow-1.0.86.crate) = 46741
+SHA256 (rust/crates/autocfg-1.3.0.crate) = 0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0
+SIZE (rust/crates/autocfg-1.3.0.crate) = 16524
+SHA256 (rust/crates/base64-0.22.1.crate) = 72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6
+SIZE (rust/crates/base64-0.22.1.crate) = 81597
+SHA256 (rust/crates/bincode-1.3.3.crate) = b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad
+SIZE (rust/crates/bincode-1.3.3.crate) = 28958
+SHA256 (rust/crates/bitflags-1.3.2.crate) = bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a
+SIZE (rust/crates/bitflags-1.3.2.crate) = 23021
+SHA256 (rust/crates/bitflags-2.5.0.crate) = cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1
+SIZE (rust/crates/bitflags-2.5.0.crate) = 43821
+SHA256 (rust/crates/block-buffer-0.10.4.crate) = 3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71
+SIZE (rust/crates/block-buffer-0.10.4.crate) = 10538
+SHA256 (rust/crates/bstr-1.9.1.crate) = 05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706
+SIZE (rust/crates/bstr-1.9.1.crate) = 380305
+SHA256 (rust/crates/bumpalo-3.16.0.crate) = 79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c
+SIZE (rust/crates/bumpalo-3.16.0.crate) = 85677
+SHA256 (rust/crates/cactus-1.0.7.crate) = acbc26382d871df4b7442e3df10a9402bf3cf5e55cbd66f12be38861425f0564
+SIZE (rust/crates/cactus-1.0.7.crate) = 6749
+SHA256 (rust/crates/cc-1.0.98.crate) = 41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f
+SIZE (rust/crates/cc-1.0.98.crate) = 76780
+SHA256 (rust/crates/cfg-if-1.0.0.crate) = baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd
+SIZE (rust/crates/cfg-if-1.0.0.crate) = 7934
+SHA256 (rust/crates/cfg_aliases-0.2.1.crate) = 613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724
+SIZE (rust/crates/cfg_aliases-0.2.1.crate) = 6355
+SHA256 (rust/crates/cfgrammar-0.13.5.crate) = 163348850b1cd34fa99ef1592b5d598ea7e6752f18aff2125b67537e887edb36
+SIZE (rust/crates/cfgrammar-0.13.5.crate) = 38058
+SHA256 (rust/crates/chacha20-0.9.1.crate) = c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818
+SIZE (rust/crates/chacha20-0.9.1.crate) = 23424
+SHA256 (rust/crates/chacha20poly1305-0.10.1.crate) = 10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35
+SIZE (rust/crates/chacha20poly1305-0.10.1.crate) = 68485
+SHA256 (rust/crates/chrono-0.4.38.crate) = a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401
+SIZE (rust/crates/chrono-0.4.38.crate) = 220559
+SHA256 (rust/crates/cipher-0.4.4.crate) = 773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad
+SIZE (rust/crates/cipher-0.4.4.crate) = 19073
+SHA256 (rust/crates/core-foundation-sys-0.8.6.crate) = 06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f
+SIZE (rust/crates/core-foundation-sys-0.8.6.crate) = 37629
+SHA256 (rust/crates/cpufeatures-0.2.12.crate) = 53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504
+SIZE (rust/crates/cpufeatures-0.2.12.crate) = 12837
+SHA256 (rust/crates/crc32fast-1.4.2.crate) = a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3
+SIZE (rust/crates/crc32fast-1.4.2.crate) = 38491
+SHA256 (rust/crates/crossbeam-deque-0.8.5.crate) = 613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d
+SIZE (rust/crates/crossbeam-deque-0.8.5.crate) = 21726
+SHA256 (rust/crates/crossbeam-epoch-0.9.18.crate) = 5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e
+SIZE (rust/crates/crossbeam-epoch-0.9.18.crate) = 46875
+SHA256 (rust/crates/crossbeam-utils-0.8.20.crate) = 22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80
+SIZE (rust/crates/crossbeam-utils-0.8.20.crate) = 42487
+SHA256 (rust/crates/crypto-common-0.1.6.crate) = 1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3
+SIZE (rust/crates/crypto-common-0.1.6.crate) = 8760
+SHA256 (rust/crates/deranged-0.3.11.crate) = b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4
+SIZE (rust/crates/deranged-0.3.11.crate) = 18043
+SHA256 (rust/crates/digest-0.10.7.crate) = 9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292
+SIZE (rust/crates/digest-0.10.7.crate) = 19557
+SHA256 (rust/crates/equivalent-1.0.1.crate) = 5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5
+SIZE (rust/crates/equivalent-1.0.1.crate) = 6615
+SHA256 (rust/crates/error-chain-0.12.4.crate) = 2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc
+SIZE (rust/crates/error-chain-0.12.4.crate) = 29274
+SHA256 (rust/crates/filetime-0.2.23.crate) = 1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd
+SIZE (rust/crates/filetime-0.2.23.crate) = 14942
+SHA256 (rust/crates/flate2-1.0.30.crate) = 5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae
+SIZE (rust/crates/flate2-1.0.30.crate) = 75511
+SHA256 (rust/crates/fnv-1.0.7.crate) = 3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1
+SIZE (rust/crates/fnv-1.0.7.crate) = 11266
+SHA256 (rust/crates/form_urlencoded-1.2.1.crate) = e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456
+SIZE (rust/crates/form_urlencoded-1.2.1.crate) = 8969
+SHA256 (rust/crates/generic-array-0.14.7.crate) = 85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a
+SIZE (rust/crates/generic-array-0.14.7.crate) = 15950
+SHA256 (rust/crates/getopts-0.2.21.crate) = 14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5
+SIZE (rust/crates/getopts-0.2.21.crate) = 18457
+SHA256 (rust/crates/getrandom-0.2.15.crate) = c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7
+SIZE (rust/crates/getrandom-0.2.15.crate) = 37163
+SHA256 (rust/crates/globset-0.4.14.crate) = 57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1
+SIZE (rust/crates/globset-0.4.14.crate) = 25090
+SHA256 (rust/crates/hashbrown-0.14.5.crate) = e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1
+SIZE (rust/crates/hashbrown-0.14.5.crate) = 141498
+SHA256 (rust/crates/hermit-abi-0.3.9.crate) = d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024
+SIZE (rust/crates/hermit-abi-0.3.9.crate) = 16165
+SHA256 (rust/crates/hostname-0.3.1.crate) = 3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867
+SIZE (rust/crates/hostname-0.3.1.crate) = 9272
+SHA256 (rust/crates/iana-time-zone-0.1.60.crate) = e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141
+SIZE (rust/crates/iana-time-zone-0.1.60.crate) = 27074
+SHA256 (rust/crates/iana-time-zone-haiku-0.1.2.crate) = f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f
+SIZE (rust/crates/iana-time-zone-haiku-0.1.2.crate) = 7185
+SHA256 (rust/crates/idna-0.5.0.crate) = 634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6
+SIZE (rust/crates/idna-0.5.0.crate) = 271940
+SHA256 (rust/crates/ignore-0.4.22.crate) = b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1
+SIZE (rust/crates/ignore-0.4.22.crate) = 55462
+SHA256 (rust/crates/indexmap-2.2.6.crate) = 168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26
+SIZE (rust/crates/indexmap-2.2.6.crate) = 82420
+SHA256 (rust/crates/inout-0.1.3.crate) = a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5
+SIZE (rust/crates/inout-0.1.3.crate) = 10743
+SHA256 (rust/crates/is-terminal-0.4.12.crate) = f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b
+SIZE (rust/crates/is-terminal-0.4.12.crate) = 7470
+SHA256 (rust/crates/itoa-1.0.11.crate) = 49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b
+SIZE (rust/crates/itoa-1.0.11.crate) = 10563
+SHA256 (rust/crates/js-sys-0.3.69.crate) = 29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d
+SIZE (rust/crates/js-sys-0.3.69.crate) = 81083
+SHA256 (rust/crates/lazy_static-1.4.0.crate) = e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646
+SIZE (rust/crates/lazy_static-1.4.0.crate) = 10443
+SHA256 (rust/crates/libc-0.2.155.crate) = 97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c
+SIZE (rust/crates/libc-0.2.155.crate) = 743539
+SHA256 (rust/crates/log-0.4.21.crate) = 90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c
+SIZE (rust/crates/log-0.4.21.crate) = 43442
+SHA256 (rust/crates/lrlex-0.13.5.crate) = 77ff18e1bd3ed77d7bc2800a0f8b0e922a3c7ba525505be8bab9cf45dfc4984b
+SIZE (rust/crates/lrlex-0.13.5.crate) = 32918
+SHA256 (rust/crates/lrpar-0.13.5.crate) = efea5a41b9988b5ae41ea9b2375a52cfa0e483f0210357209caa8d361a24a368
+SIZE (rust/crates/lrpar-0.13.5.crate) = 37142
+SHA256 (rust/crates/lrtable-0.13.5.crate) = ff5668c3bfd279ed24d5b0d24568c48dc993f9beabd51f74d1865a78c1d206ab
+SIZE (rust/crates/lrtable-0.13.5.crate) = 21206
+SHA256 (rust/crates/match_cfg-0.1.0.crate) = ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4
+SIZE (rust/crates/match_cfg-0.1.0.crate) = 7153
+SHA256 (rust/crates/memchr-2.7.2.crate) = 6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d
+SIZE (rust/crates/memchr-2.7.2.crate) = 96220
+SHA256 (rust/crates/miniz_oxide-0.7.3.crate) = 87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae
+SIZE (rust/crates/miniz_oxide-0.7.3.crate) = 55774
+SHA256 (rust/crates/nix-0.29.0.crate) = 71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46
+SIZE (rust/crates/nix-0.29.0.crate) = 318248
+SHA256 (rust/crates/num-conv-0.1.0.crate) = 51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9
+SIZE (rust/crates/num-conv-0.1.0.crate) = 7444
+SHA256 (rust/crates/num-traits-0.2.19.crate) = 071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841
+SIZE (rust/crates/num-traits-0.2.19.crate) = 51631
+SHA256 (rust/crates/num_threads-0.1.7.crate) = 5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9
+SIZE (rust/crates/num_threads-0.1.7.crate) = 7455
+SHA256 (rust/crates/once_cell-1.19.0.crate) = 3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92
+SIZE (rust/crates/once_cell-1.19.0.crate) = 33046
+SHA256 (rust/crates/opaque-debug-0.3.1.crate) = c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381
+SIZE (rust/crates/opaque-debug-0.3.1.crate) = 7066
+SHA256 (rust/crates/packedvec-1.2.4.crate) = bde3c690ec20e4a2b4fb46f0289a451181eb50011a1e2acc8d85e2fde9062a45
+SIZE (rust/crates/packedvec-1.2.4.crate) = 9295
+SHA256 (rust/crates/percent-encoding-2.3.1.crate) = e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e
+SIZE (rust/crates/percent-encoding-2.3.1.crate) = 10235
+SHA256 (rust/crates/pledge-0.4.2.crate) = 252599417b7d9a43b7fdc63dd790b0848666a8910b2ebe1a25118309c3c981e5
+SIZE (rust/crates/pledge-0.4.2.crate) = 4779
+SHA256 (rust/crates/poly1305-0.8.0.crate) = 8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf
+SIZE (rust/crates/poly1305-0.8.0.crate) = 32633
+SHA256 (rust/crates/powerfmt-0.2.0.crate) = 439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391
+SIZE (rust/crates/powerfmt-0.2.0.crate) = 15165
+SHA256 (rust/crates/ppv-lite86-0.2.17.crate) = 5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de
+SIZE (rust/crates/ppv-lite86-0.2.17.crate) = 22242
+SHA256 (rust/crates/proc-macro2-1.0.84.crate) = ec96c6a92621310b51366f1e28d05ef11489516e93be030060e5fc12024a49d6
+SIZE (rust/crates/proc-macro2-1.0.84.crate) = 48922
+SHA256 (rust/crates/quote-1.0.36.crate) = 0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7
+SIZE (rust/crates/quote-1.0.36.crate) = 28507
+SHA256 (rust/crates/rand-0.8.5.crate) = 34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404
+SIZE (rust/crates/rand-0.8.5.crate) = 87113
+SHA256 (rust/crates/rand_chacha-0.3.1.crate) = e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88
+SIZE (rust/crates/rand_chacha-0.3.1.crate) = 15251
+SHA256 (rust/crates/rand_core-0.6.4.crate) = ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c
+SIZE (rust/crates/rand_core-0.6.4.crate) = 22666
+SHA256 (rust/crates/redox_syscall-0.4.1.crate) = 4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa
+SIZE (rust/crates/redox_syscall-0.4.1.crate) = 24858
+SHA256 (rust/crates/regex-1.10.4.crate) = c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c
+SIZE (rust/crates/regex-1.10.4.crate) = 253191
+SHA256 (rust/crates/regex-automata-0.4.6.crate) = 86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea
+SIZE (rust/crates/regex-automata-0.4.6.crate) = 617565
+SHA256 (rust/crates/regex-syntax-0.8.3.crate) = adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56
+SIZE (rust/crates/regex-syntax-0.8.3.crate) = 347497
+SHA256 (rust/crates/rerun_except-1.0.0.crate) = 89974a5bef01d82b843f85cbab168e8554b3776f875dcc7a66bf03c757db5ab1
+SIZE (rust/crates/rerun_except-1.0.0.crate) = 4305
+SHA256 (rust/crates/ring-0.17.8.crate) = c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d
+SIZE (rust/crates/ring-0.17.8.crate) = 4188554
+SHA256 (rust/crates/rustc_version-0.4.0.crate) = bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366
+SIZE (rust/crates/rustc_version-0.4.0.crate) = 12175
+SHA256 (rust/crates/rustls-0.22.4.crate) = bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432
+SIZE (rust/crates/rustls-0.22.4.crate) = 333681
+SHA256 (rust/crates/rustls-pki-types-1.7.0.crate) = 976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d
+SIZE (rust/crates/rustls-pki-types-1.7.0.crate) = 29555
+SHA256 (rust/crates/rustls-webpki-0.102.4.crate) = ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e
+SIZE (rust/crates/rustls-webpki-0.102.4.crate) = 200657
+SHA256 (rust/crates/rustversion-1.0.17.crate) = 955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6
+SIZE (rust/crates/rustversion-1.0.17.crate) = 17621
+SHA256 (rust/crates/ryu-1.0.18.crate) = f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f
+SIZE (rust/crates/ryu-1.0.18.crate) = 47713
+SHA256 (rust/crates/same-file-1.0.6.crate) = 93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502
+SIZE (rust/crates/same-file-1.0.6.crate) = 10183
+SHA256 (rust/crates/semver-1.0.23.crate) = 61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b
+SIZE (rust/crates/semver-1.0.23.crate) = 30622
+SHA256 (rust/crates/serde-1.0.203.crate) = 7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094
+SIZE (rust/crates/serde-1.0.203.crate) = 77935
+SHA256 (rust/crates/serde_derive-1.0.203.crate) = 500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba
+SIZE (rust/crates/serde_derive-1.0.203.crate) = 55867
+SHA256 (rust/crates/serde_json-1.0.117.crate) = 455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3
+SIZE (rust/crates/serde_json-1.0.117.crate) = 146921
+SHA256 (rust/crates/sha2-0.10.8.crate) = 793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8
+SIZE (rust/crates/sha2-0.10.8.crate) = 26357
+SHA256 (rust/crates/sparsevec-0.2.0.crate) = 35df5d2e580b29f3f7ec5b4ed49b0ab3acf7f3624122b3e823cafb9630f293b8
+SIZE (rust/crates/sparsevec-0.2.0.crate) = 6788
+SHA256 (rust/crates/spin-0.9.8.crate) = 6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67
+SIZE (rust/crates/spin-0.9.8.crate) = 38958
+SHA256 (rust/crates/static_assertions-1.1.0.crate) = a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f
+SIZE (rust/crates/static_assertions-1.1.0.crate) = 18480
+SHA256 (rust/crates/stderrlog-0.6.0.crate) = 61c910772f992ab17d32d6760e167d2353f4130ed50e796752689556af07dc6b
+SIZE (rust/crates/stderrlog-0.6.0.crate) = 25914
+SHA256 (rust/crates/subtle-2.5.0.crate) = 81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc
+SIZE (rust/crates/subtle-2.5.0.crate) = 13909
+SHA256 (rust/crates/syn-2.0.66.crate) = c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5
+SIZE (rust/crates/syn-2.0.66.crate) = 264855
+SHA256 (rust/crates/syslog-6.1.1.crate) = dfc7e95b5b795122fafe6519e27629b5ab4232c73ebb2428f568e82b1a457ad3
+SIZE (rust/crates/syslog-6.1.1.crate) = 10017
+SHA256 (rust/crates/termcolor-1.1.3.crate) = bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755
+SIZE (rust/crates/termcolor-1.1.3.crate) = 17242
+SHA256 (rust/crates/thread_local-1.1.8.crate) = 8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c
+SIZE (rust/crates/thread_local-1.1.8.crate) = 13962
+SHA256 (rust/crates/time-0.3.36.crate) = 5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885
+SIZE (rust/crates/time-0.3.36.crate) = 119805
+SHA256 (rust/crates/time-core-0.1.2.crate) = ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3
+SIZE (rust/crates/time-core-0.1.2.crate) = 7191
+SHA256 (rust/crates/time-macros-0.2.18.crate) = 3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf
+SIZE (rust/crates/time-macros-0.2.18.crate) = 24361
+SHA256 (rust/crates/tinyvec-1.6.0.crate) = 87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50
+SIZE (rust/crates/tinyvec-1.6.0.crate) = 45991
+SHA256 (rust/crates/tinyvec_macros-0.1.1.crate) = 1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20
+SIZE (rust/crates/tinyvec_macros-0.1.1.crate) = 5865
+SHA256 (rust/crates/typenum-1.17.0.crate) = 42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825
+SIZE (rust/crates/typenum-1.17.0.crate) = 42849
+SHA256 (rust/crates/unicode-bidi-0.3.15.crate) = 08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75
+SIZE (rust/crates/unicode-bidi-0.3.15.crate) = 56811
+SHA256 (rust/crates/unicode-ident-1.0.12.crate) = 3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b
+SIZE (rust/crates/unicode-ident-1.0.12.crate) = 42168
+SHA256 (rust/crates/unicode-normalization-0.1.23.crate) = a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5
+SIZE (rust/crates/unicode-normalization-0.1.23.crate) = 122649
+SHA256 (rust/crates/unicode-width-0.1.12.crate) = 68f5e5f3158ecfd4b8ff6fe086db7c8467a2dfdac97fe420f2b7c4aa97af66d6
+SIZE (rust/crates/unicode-width-0.1.12.crate) = 24062
+SHA256 (rust/crates/universal-hash-0.5.1.crate) = fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea
+SIZE (rust/crates/universal-hash-0.5.1.crate) = 9146
+SHA256 (rust/crates/untrusted-0.9.0.crate) = 8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1
+SIZE (rust/crates/untrusted-0.9.0.crate) = 14447
+SHA256 (rust/crates/unveil-0.3.2.crate) = 5e7fa867d559102001ec694165ed17d5f82e95213060a65f9c8b6280084bbfec
+SIZE (rust/crates/unveil-0.3.2.crate) = 7280
+SHA256 (rust/crates/ureq-2.9.7.crate) = d11a831e3c0b56e438a28308e7c810799e3c118417f342d30ecec080105395cd
+SIZE (rust/crates/ureq-2.9.7.crate) = 113834
+SHA256 (rust/crates/url-2.5.0.crate) = 31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633
+SIZE (rust/crates/url-2.5.0.crate) = 78605
+SHA256 (rust/crates/urlencoding-2.1.3.crate) = daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da
+SIZE (rust/crates/urlencoding-2.1.3.crate) = 6538
+SHA256 (rust/crates/vergen-8.3.1.crate) = e27d6bdd219887a9eadd19e1c34f32e47fa332301184935c6d9bca26f3cca525
+SIZE (rust/crates/vergen-8.3.1.crate) = 44665
+SHA256 (rust/crates/version_check-0.9.4.crate) = 49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f
+SIZE (rust/crates/version_check-0.9.4.crate) = 14895
+SHA256 (rust/crates/vob-3.0.3.crate) = c058f4c41e71a043c67744cb76dcc1ae63ece328c1732a72489ccccc2dec23e6
+SIZE (rust/crates/vob-3.0.3.crate) = 17698
+SHA256 (rust/crates/wait-timeout-0.2.0.crate) = 9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6
+SIZE (rust/crates/wait-timeout-0.2.0.crate) = 12441
+SHA256 (rust/crates/walkdir-2.5.0.crate) = 29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b
+SIZE (rust/crates/walkdir-2.5.0.crate) = 23951
+SHA256 (rust/crates/wasi-0.11.0+wasi-snapshot-preview1.crate) = 9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423
+SIZE (rust/crates/wasi-0.11.0+wasi-snapshot-preview1.crate) = 28131
+SHA256 (rust/crates/wasite-0.1.0.crate) = b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b
+SIZE (rust/crates/wasite-0.1.0.crate) = 2346
+SHA256 (rust/crates/wasm-bindgen-0.2.92.crate) = 4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8
+SIZE (rust/crates/wasm-bindgen-0.2.92.crate) = 184119
+SHA256 (rust/crates/wasm-bindgen-backend-0.2.92.crate) = 614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da
+SIZE (rust/crates/wasm-bindgen-backend-0.2.92.crate) = 28348
+SHA256 (rust/crates/wasm-bindgen-macro-0.2.92.crate) = a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726
+SIZE (rust/crates/wasm-bindgen-macro-0.2.92.crate) = 13835
+SHA256 (rust/crates/wasm-bindgen-macro-support-0.2.92.crate) = e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7
+SIZE (rust/crates/wasm-bindgen-macro-support-0.2.92.crate) = 20092
+SHA256 (rust/crates/wasm-bindgen-shared-0.2.92.crate) = af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96
+SIZE (rust/crates/wasm-bindgen-shared-0.2.92.crate) = 7263
+SHA256 (rust/crates/web-sys-0.3.69.crate) = 77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef
+SIZE (rust/crates/web-sys-0.3.69.crate) = 728877
+SHA256 (rust/crates/webpki-roots-0.26.1.crate) = b3de34ae270483955a94f4b21bdaaeb83d508bb84a01435f393818edb0012009
+SIZE (rust/crates/webpki-roots-0.26.1.crate) = 249748
+SHA256 (rust/crates/whoami-1.5.1.crate) = a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9
+SIZE (rust/crates/whoami-1.5.1.crate) = 24026
+SHA256 (rust/crates/winapi-0.3.9.crate) = 5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419
+SIZE (rust/crates/winapi-0.3.9.crate) = 1200382
+SHA256 (rust/crates/winapi-i686-pc-windows-gnu-0.4.0.crate) = ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6
+SIZE (rust/crates/winapi-i686-pc-windows-gnu-0.4.0.crate) = 2918815
+SHA256 (rust/crates/winapi-util-0.1.8.crate) = 4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b
+SIZE (rust/crates/winapi-util-0.1.8.crate) = 12416
+SHA256 (rust/crates/winapi-x86_64-pc-windows-gnu-0.4.0.crate) = 712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f
+SIZE (rust/crates/winapi-x86_64-pc-windows-gnu-0.4.0.crate) = 2947998
+SHA256 (rust/crates/windows-core-0.52.0.crate) = 33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9
+SIZE (rust/crates/windows-core-0.52.0.crate) = 42154
+SHA256 (rust/crates/windows-sys-0.52.0.crate) = 282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d
+SIZE (rust/crates/windows-sys-0.52.0.crate) = 2576877
+SHA256 (rust/crates/windows-targets-0.52.5.crate) = 6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb
+SIZE (rust/crates/windows-targets-0.52.5.crate) = 6376
+SHA256 (rust/crates/windows_aarch64_gnullvm-0.52.5.crate) = 7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263
+SIZE (rust/crates/windows_aarch64_gnullvm-0.52.5.crate) = 433266
+SHA256 (rust/crates/windows_aarch64_msvc-0.52.5.crate) = 9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6
+SIZE (rust/crates/windows_aarch64_msvc-0.52.5.crate) = 827944
+SHA256 (rust/crates/windows_i686_gnu-0.52.5.crate) = 88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670
+SIZE (rust/crates/windows_i686_gnu-0.52.5.crate) = 875699
+SHA256 (rust/crates/windows_i686_gnullvm-0.52.5.crate) = 87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9
+SIZE (rust/crates/windows_i686_gnullvm-0.52.5.crate) = 473064
+SHA256 (rust/crates/windows_i686_msvc-0.52.5.crate) = db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf
+SIZE (rust/crates/windows_i686_msvc-0.52.5.crate) = 895404
+SHA256 (rust/crates/windows_x86_64_gnu-0.52.5.crate) = 4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9
+SIZE (rust/crates/windows_x86_64_gnu-0.52.5.crate) = 831539
+SHA256 (rust/crates/windows_x86_64_gnullvm-0.52.5.crate) = 852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596
+SIZE (rust/crates/windows_x86_64_gnullvm-0.52.5.crate) = 433246
+SHA256 (rust/crates/windows_x86_64_msvc-0.52.5.crate) = bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0
+SIZE (rust/crates/windows_x86_64_msvc-0.52.5.crate) = 827905
+SHA256 (rust/crates/zeroize-1.8.1.crate) = ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde
+SIZE (rust/crates/zeroize-1.8.1.crate) = 20029
+SHA256 (ltratt-pizauth-1.0.5-pizauth-1.0.5_GH0.tar.gz) = 3bad722f1ae2ef5f4312ad527fe593c55797cd7a99d98f32e92eabeb0c0fa52d
+SIZE (ltratt-pizauth-1.0.5-pizauth-1.0.5_GH0.tar.gz) = 55706
diff --git a/mail/pizauth/pkg-descr b/mail/pizauth/pkg-descr
new file mode 100644
index 000000000000..682151d8f775
--- /dev/null
+++ b/mail/pizauth/pkg-descr
@@ -0,0 +1,5 @@
+pizauth is a simple program for requesting, showing, and refreshing OAuth2
+access tokens. pizauth is formed of two components: a persistent server which
+interacts with the user to request tokens, and refreshes them as necessary; and
+a command-line interface which can be used by programs such as fdm, neomutt, or
+msmtp to authenticate with OAuth2.