package subjectpass import ( "errors" "fmt" "strings" "testing" "time" "github.com/mjl-/mox/mlog" "github.com/mjl-/mox/smtp" ) func TestSubjectPass(t *testing.T) { log := mlog.New("subjectpass", nil) key := []byte("secret token") addr, _ := smtp.ParseAddress("mox@mox.example") sig := Generate(log.Logger, addr, key, time.Now()) message := fmt.Sprintf("From: \r\nSubject: let me in %s\r\n\r\nthe message", sig) if err := Verify(log.Logger, strings.NewReader(message), key, time.Hour); err != nil { t.Fatalf("verifyPassToken: %s", err) } if err := Verify(log.Logger, strings.NewReader(message), []byte("bad key"), time.Hour); err == nil { t.Fatalf("verifyPassToken did not fail") } sig = Generate(log.Logger, addr, key, time.Now().Add(-time.Hour-257)) message = fmt.Sprintf("From: \r\nSubject: let me in %s\r\n\r\nthe message", sig) if err := Verify(log.Logger, strings.NewReader(message), key, time.Hour); !errors.Is(err, ErrExpired) { t.Fatalf("verifyPassToken should have expired") } }