From ff3a4264cf66148da027fca563e77bf725c8cd78 Mon Sep 17 00:00:00 2001 From: James Hillyerd Date: Sat, 6 Oct 2012 20:35:33 -0700 Subject: [PATCH] utils A couple email address related utils --- .gitignore | 6 ++++++ app/inbucket/utils.go | 28 ++++++++++++++++++++++++++++ app/inbucket/utils_test.go | 28 ++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 app/inbucket/utils.go create mode 100644 app/inbucket/utils_test.go diff --git a/.gitignore b/.gitignore index 0026861..49c434d 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,9 @@ _cgo_export.* _testmain.go *.exe + +# vim swp files +*.swp + +# revel tmp +app/tmp diff --git a/app/inbucket/utils.go b/app/inbucket/utils.go new file mode 100644 index 0000000..8ae9130 --- /dev/null +++ b/app/inbucket/utils.go @@ -0,0 +1,28 @@ +package inbucket + +import ( + "crypto/sha1" + "fmt" + "io" + "strings" +) + +// Take "user+ext@host.com" and return "user", aka the mailbox we'll store it in +func ParseMailboxName(emailAddress string) (result string) { + result = strings.ToLower(emailAddress) + if idx := strings.Index(result, "@"); idx > -1 { + result = result[0:idx] + } + if idx := strings.Index(result, "+"); idx > -1 { + result = result[0:idx] + } + return result +} + +// Take a mailbox name and hash it into the directory we'll store it in +func HashMailboxName(mailbox string) string { + h := sha1.New() + io.WriteString(h, mailbox) + return fmt.Sprintf("%x", h.Sum(nil)) +} + diff --git a/app/inbucket/utils_test.go b/app/inbucket/utils_test.go new file mode 100644 index 0000000..af12e16 --- /dev/null +++ b/app/inbucket/utils_test.go @@ -0,0 +1,28 @@ +package inbucket + +import "testing" + +func TestParseMailboxName(t *testing.T) { + in, out := "MailBOX", "mailbox" + if x := ParseMailboxName(in); x != out { + t.Errorf("ParseMailboxName(%v) = %v, want %v", in, x, out) + } + + in, out = "MailBox@Host.Com", "mailbox" + if x := ParseMailboxName(in); x != out { + t.Errorf("ParseMailboxName(%v) = %v, want %v", in, x, out) + } + + in, out = "Mail+extra@Host.Com", "mail" + if x := ParseMailboxName(in); x != out { + t.Errorf("ParseMailboxName(%v) = %v, want %v", in, x, out) + } +} + +func TestHashMailboxName(t *testing.T) { + in, out := "mail", "1d6e1cf70ec6f9ab28d3ea4b27a49a77654d370e" + if x := HashMailboxName(in); x != out { + t.Errorf("HashMailboxName(%v) = %v, want %v", in, x, out) + } +} +