mirror of
https://github.com/jhillyerd/inbucket.git
synced 2025-12-17 09:37:02 +00:00
Use enum for MailboxNaming for #33
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package config
|
package config
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -29,10 +30,33 @@ var (
|
|||||||
BuildDate = ""
|
BuildDate = ""
|
||||||
)
|
)
|
||||||
|
|
||||||
// Root wraps all other configurations.
|
// mbNaming represents a mailbox naming strategy.
|
||||||
|
type mbNaming int
|
||||||
|
|
||||||
|
// Mailbox naming strategies.
|
||||||
|
const (
|
||||||
|
UnknownNaming mbNaming = iota
|
||||||
|
LocalNaming
|
||||||
|
FullNaming
|
||||||
|
)
|
||||||
|
|
||||||
|
// Decode a naming strategy from string.
|
||||||
|
func (n *mbNaming) Decode(v string) error {
|
||||||
|
switch strings.ToLower(v) {
|
||||||
|
case "local":
|
||||||
|
*n = LocalNaming
|
||||||
|
case "full":
|
||||||
|
*n = FullNaming
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("Unknown MailboxNaming strategy: %q", v)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Root contains global configuration, and structs with for specific sub-systems.
|
||||||
type Root struct {
|
type Root struct {
|
||||||
LogLevel string `required:"true" default:"info" desc:"debug, info, warn, or error"`
|
LogLevel string `required:"true" default:"info" desc:"debug, info, warn, or error"`
|
||||||
MailboxNaming string `required:"true" default:"local" desc:"local or full"`
|
MailboxNaming mbNaming `required:"true" default:"local" desc:"local or full"`
|
||||||
SMTP SMTP
|
SMTP SMTP
|
||||||
POP3 POP3
|
POP3 POP3
|
||||||
Web Web
|
Web Web
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ func (a *Addressing) ExtractMailbox(address string) (string, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
if a.Config.MailboxNaming == "local" {
|
if a.Config.MailboxNaming == config.LocalNaming {
|
||||||
return local, nil
|
return local, nil
|
||||||
}
|
}
|
||||||
if domain == "" {
|
if domain == "" {
|
||||||
|
|||||||
@@ -123,8 +123,8 @@ func TestShouldStoreDomain(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestExtractMailboxValid(t *testing.T) {
|
func TestExtractMailboxValid(t *testing.T) {
|
||||||
localPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: "local"}}
|
localPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: config.LocalNaming}}
|
||||||
fullPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: "full"}}
|
fullPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: config.FullNaming}}
|
||||||
|
|
||||||
testTable := []struct {
|
testTable := []struct {
|
||||||
input string // Input to test
|
input string // Input to test
|
||||||
@@ -251,8 +251,8 @@ func TestExtractMailboxValid(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestExtractMailboxInvalid(t *testing.T) {
|
func TestExtractMailboxInvalid(t *testing.T) {
|
||||||
localPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: "local"}}
|
localPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: config.LocalNaming}}
|
||||||
fullPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: "full"}}
|
fullPolicy := policy.Addressing{Config: &config.Root{MailboxNaming: config.FullNaming}}
|
||||||
// Test local mailbox naming policy.
|
// Test local mailbox naming policy.
|
||||||
localInvalidTable := []struct {
|
localInvalidTable := []struct {
|
||||||
input, msg string
|
input, msg string
|
||||||
|
|||||||
Reference in New Issue
Block a user