diff options
Diffstat (limited to 'server.go')
-rw-r--r-- | server.go | 53 |
1 files changed, 47 insertions, 6 deletions
@@ -23,15 +23,20 @@ type Server struct { pool *ConnPool } + + smtp struct { + host string + tls bool + insecure bool + } } -func NewServer(imapURL string) (*Server, error) { +func (s *Server) parseIMAPURL(imapURL string) error { u, err := url.Parse(imapURL) if err != nil { - return nil, fmt.Errorf("failed to parse IMAP server URL: %v", err) + return fmt.Errorf("failed to parse IMAP server URL: %v", err) } - s := &Server{} s.imap.host = u.Host switch u.Scheme { case "imap": @@ -41,11 +46,47 @@ func NewServer(imapURL string) (*Server, error) { case "imap+insecure": s.imap.insecure = true default: - return nil, fmt.Errorf("unrecognized IMAP URL scheme: %s", u.Scheme) + return fmt.Errorf("unrecognized IMAP URL scheme: %s", u.Scheme) + } + + return nil +} + +func (s *Server) parseSMTPURL(smtpURL string) error { + u, err := url.Parse(smtpURL) + if err != nil { + return fmt.Errorf("failed to parse SMTP server URL: %v", err) + } + + s.smtp.host = u.Host + switch u.Scheme { + case "smtp": + // This space is intentionally left blank + case "smtps": + s.smtp.tls = true + case "smtp+insecure": + s.smtp.insecure = true + default: + return fmt.Errorf("unrecognized SMTP URL scheme: %s", u.Scheme) } + return nil +} + +func NewServer(imapURL, smtpURL string) (*Server, error) { + s := &Server{} + + if err := s.parseIMAPURL(imapURL); err != nil { + return nil, err + } s.imap.pool = NewConnPool() + if smtpURL != "" { + if err := s.parseSMTPURL(smtpURL); err != nil { + return nil, err + } + } + return s, nil } @@ -159,10 +200,10 @@ func handleCompose(ectx echo.Context) error { return ctx.Render(http.StatusOK, "compose.html", nil) } -func New(imapURL string) *echo.Echo { +func New(imapURL, smtpURL string) *echo.Echo { e := echo.New() - s, err := NewServer(imapURL) + s, err := NewServer(imapURL, smtpURL) if err != nil { e.Logger.Fatal(err) } |