~bigbes/core-go

ref: 6eae2199abdb5aeef125202d9a6854a099d8dd4a core-go/email d---------
17315205 — Robin Jarry 1 year, 8 months ago
config: factorize integer parsing

Add a new GetInt() function to parse an integer value from a parsed
ini.File. Use that function instead of duplicated code.

Signed-off-by: Robin Jarry <robin@jarry.cc>
78cfc5d8 — Robin Jarry 1 year, 8 months ago
email: allow sending raw emails

The current email.Enqueue() function only allows sending messages with
the server's default settings.

In order to support sending any arbitrary message, we need to expose
a lower level API taking a raw message.Entity pointer. This new API will
be reused in a future reimplementation of the lists.sr.ht ingress agent
to forward messages to subscribers.

Add email.EnqueueRaw() that calls email.SendRaw(). Retry sending 10
times in the case of failure.

Signed-off-by: Robin Jarry <robin@jarry.cc>
bbcb2a10 — Robin Jarry 1 year, 8 months ago
email: keep smtp client connection alive

Instead of connecting and disconnecting each and every time we need to
send an email, keep the SMTP connection alive attached to a context
variable.

Before sending an email, check if the connection is still valid and
reconnect if it is not.

Signed-off-by: Robin Jarry <robin@jarry.cc>
7457c44b — Robin Jarry 1 year, 8 months ago
treewide: update to new multi worker dowork api

The work.Queue() implementation has changed and now allows scheduling
tasks from multiple goroutines in parallel. Also, it requires a new
argument for limiting the queue buffer size in order to apply back
pressure.

Define new configuration variables to allow tuning the queue sizes and
number of workers per service:

  [mail]
  # Maximum size of the outgoing email queue (default 512).
  egress-queue-size = 512

  [$service_name]
  # Number of parallel workers per queue (default 1).
  # There are multiple queues (for egress email, webhooks, etc.).
  # This setting is applied on a per-queue basis.
  queue-workers = 1

  [webhooks]
  # Maximum size of the webhooks queue (default 512).
  queue-size = 512

Use these new settings to configure the queues and workers accordingly.

Fix unit tests as well.

Link: https://git.sr.ht/~sircmpwn/dowork/commit/95719cfc0118
Signed-off-by: Robin Jarry <robin@jarry.cc>
5a81e2cb — Conrad Hoffmann 1 year, 8 months ago
email: set Content-Type to format=flowed

This allows us to start sending emails in flowed format. It does not
actually change anything, until the templates in the services get
updated.

As format=flowed is designed to be backwards-compatible, it also doesn't
break anything. All emails will still look like before, with static line
breaks. However, changing the templates to flowed will now produce
emails that render as flowed successfully. Tested on plain (signed) and
encrypted mails.

See https://www.ietf.org/rfc/rfc2646.txt
069c77be — Drew DeVault 2 years ago
email: update StartTLS usage per go-smtp changes
1063e5b6 — Simon Ser 2 years ago
email: make PGP private key optional

Services other than meta.sr.ht don't really have a use for the
private PGP key.

Add a CanPGPSign method so that meta.sr.ht can emit a warning or
error when the PGP key is missing.
a88277c1 — Simon Ser 2 years ago
email: improve mail.ParseAddress error message
bf4fe19c — наб 2 years ago
email: EnqueueStd: set Content-Type with charset=UTF-8 instead of just text/plain

Mails are now
	--11d2cbf164a9ae0dfbb310faf818762607dcfd20aa74e07c7be0eec1458d
	Mime-Version: 1.0
	Content-Transfer-Encoding: quoted-printable
	Content-Type: text/plain; charset=UTF-8

	=D1=82=D1=80=D1=83=D0=BF=D0=B08

	--=20
	View on the web: http://192.168.1.101:5003/~nab2/trupa/8
	--11d2cbf164a9ae0dfbb310faf818762607dcfd20aa74e07c7be0eec1458d
	Content-Type: application/pgp-signature

	-----BEGIN PGP MESSAGE-----

	wnUEARYIACcFAmUavj0JkKdioLsBS5scFiEE+ts/9LaoXcZuSmrHp2KguwFLmxwA
	AIm9AP9KB4cZyiby7jiiRMRESDeJXrdb4kNqyA3D3nVOt14bKgD/UiDfUKE1MwiV
	pOqj/S0wiJdChKW52zRAkwuQ7PtKkgI=
	=AiY9
	-----END PGP MESSAGE-----
	--11d2cbf164a9ae0dfbb310faf818762607dcfd20aa74e07c7be0eec1458d--
which is correct, and decodes correctly in neomutt.

Fixes: https://lists.sr.ht/~sircmpwn/sr.ht-discuss/%3C4uxbrlspm45s5i4bhhmqgmry374i22oqcxedtowda5zrzd7bpf2%405pyosds5owty%3E
78b6f723 — Conrad Hoffmann 3 years ago
email: remove content headers of passed-in message

The email has already been parsed according to the headers, but they are
still present. However, signing or encrypting the email will change the
content format, so remove any such headers before continuing.
2fd72e9f — Dennis Schön 3 years ago
email: handle error from Enqueue() in EnqueueStd()
bb33e3e7 — Simon Ser 3 years ago
email/worker: add more context to errors

For instance, failure to open the private PGP key would just fail
with an unhelpful "panic: open : no such file or directory" error.
8c2729f4 — Adnan Maolood 4 years ago
email.EnqueueStd: Don't overwrite headers

Sometimes we need to specify the Message-Id, From, and Reply-To headers
(e.g. for todo.sr.ht ticket notifications). Don't overwrite these
headers if they are present.
3f80f677 — Conrad Hoffmann 4 years ago
email: handle failure to encrypt notifications

Currently, failure to encrypt the notification email - e.g. due to an
expired key - will make the entire request fail. Instead, fall back to
sending an unencrypted email and let the request succeed (unless that
fails also, which is unlikely).
e28d47cf — Adnan Maolood 4 years ago
go fmt
f762ad22 — Peter Sanchez 4 years ago
Bugfix, mail config placed in wrong setting.
dd20891a — Julien Moutinho 4 years ago
Replace x/crypto package by ProtonMail/go-crypto to support ed25519 OpenPGP keys
31e77bac — Peter Sanchez 4 years ago
Add support for mail setups that don't support TLS or Auth
f44afb10 — Simon Ser 4 years ago
go fmt
48250772 — Simon Ser 4 years ago
Remove %e formatting verbs

%e is not valid for formatting error values:

> %e	scientific notation, e.g. -1.234456e+78

Instead, use %w when using fmt.Errorf (for error wrapping) and
%v when using log.Printf (%w is not valid in that context).
Next