all repos — postern

@ v0.1.0-alpha

Modern mail management

clone
git clone https:///postern.git

internal/dkim/sign_test.go (view raw)

 1package dkim
 2
 3import (
 4	"bytes"
 5	"context"
 6	"crypto/rand"
 7	"os"
 8	"path"
 9	"testing"
10
11	"postern/internal/db"
12	"postern/internal/persistence"
13
14	"go.turscar.ie/dkim2"
15)
16
17type lookup struct {
18	pubRecord string
19}
20
21func (l lookup) LookupTXT(_ context.Context, _ string) ([]string, error) {
22	return []string{l.pubRecord}, nil
23}
24
25func TestSign(t *testing.T) {
26	d := setupTestCommand(t)
27
28	pubRecord, err := d.Add(t.Context(), "sel1", "example.com")
29	if err != nil {
30		t.Fatal(err)
31	}
32	err = d.SetEnabled(t.Context(), "sel1", "example.com", true)
33	if err != nil {
34		t.Fatal(err)
35	}
36
37	signedMessage, err := d.Sign(t.Context(), []byte(exampleMessage), "<raphael@example.com>", []string{"<someone@example.net>"})
38	if err != nil {
39		t.Fatal(err)
40	}
41
42	result := dkim2.Verify(t.Context(), bytes.NewReader(signedMessage), dkim2.VerifyOptions{
43		IgnoreTimestamp: false,
44		Resolver:        lookup{pubRecord},
45		MailFrom:        "<raphael@example.com>",
46		RcptTo:          []string{"<someone@example.net>"},
47	})
48
49	if result.Err != nil {
50		t.Fatal(result.Err)
51	}
52}
53
54func setupTestCommand(t *testing.T) *DKIM {
55	t.Helper()
56	f := t.TempDir()
57
58	mkeyPath := path.Join(f, "masterkey")
59	secretKey := make([]byte, 32)
60	_, _ = rand.Read(secretKey)
61	if err := os.WriteFile(mkeyPath, secretKey, 0666); err != nil {
62		t.Fatal(err)
63	}
64
65	p, err := persistence.New(persistence.Config{
66		BlobRoot:      path.Join(f, "blobs"),
67		MasterkeyFile: mkeyPath,
68	})
69	if err != nil {
70		t.Fatal(err)
71	}
72
73	posternDB, err := db.OpenDB(&db.Config{
74		DBPath: path.Join(f, "meta.db"),
75	})
76	if err != nil {
77		t.Fatal(err)
78	}
79
80	dkim := New(&Config{
81		DB:          posternDB,
82		Persistence: p,
83	})
84	return dkim
85}
86
87var exampleMessage = `Message-ID: <WIULIIOKPTXYAOVEIXQJJ@p25.dev>
88From: "aw@example.com" <aw@example.com>
89To: <raphael@p25.dev>
90Subject: Hello from Postern!
91Date: Sat, 18 Jun 2005 01:57:22 +0100
92
93Hello test message.
94`