diff options
author | René 'Necoro' Neumann <necoro@necoro.eu> | 2020-04-23 20:48:17 +0200 |
---|---|---|
committer | René 'Necoro' Neumann <necoro@necoro.eu> | 2020-04-23 20:48:17 +0200 |
commit | c883470c2ef977b8675b12428591bb003694e235 (patch) | |
tree | 09cd8fa950594e1ea13aa52492ce8116e07ef30b /internal/imap/url.go | |
parent | 6bd87a567ef481b922f6baec2b475ec376c45443 (diff) | |
download | feed2imap-go-c883470c2ef977b8675b12428591bb003694e235.tar.gz feed2imap-go-c883470c2ef977b8675b12428591bb003694e235.tar.bz2 feed2imap-go-c883470c2ef977b8675b12428591bb003694e235.zip |
Restructure imap pkg
Diffstat (limited to '')
-rw-r--r-- | internal/imap/url.go | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/internal/imap/url.go b/internal/imap/url.go new file mode 100644 index 0000000..6ffea72 --- /dev/null +++ b/internal/imap/url.go @@ -0,0 +1,76 @@ +package imap + +import ( + "net" + "net/url" + + "github.com/Necoro/feed2imap-go/internal/log" +) + +// Our own convenience wrapper +type URL struct { + *url.URL + // url.URL has no port field and splits it everytime from Host + port *string +} + +const ( + imapsPort = "993" + imapPort = "143" + imapsSchema = "imaps" + imapSchema = "imap" +) + +func (url *URL) Port() string { + if url.port == nil { + port := url.URL.Port() + url.port = &port + } + return *url.port +} + +func (url *URL) ForceTLS() bool { + return url.Scheme == imapsSchema || url.Port() == imapsPort +} + +func (url *URL) setDefaultScheme() { + switch url.Scheme { + case imapSchema, imapsSchema: + return + default: + oldScheme := url.Scheme + if url.Port() == imapsPort { + url.Scheme = imapsSchema + } else { + url.Scheme = imapSchema + } + + if oldScheme != "" { + log.Warnf("Unknown scheme '%s', defaulting to '%s'", oldScheme, url.Scheme) + } + } +} + +func (url *URL) setDefaultPort() { + if url.Port() == "" { + var port string + if url.Scheme == imapsSchema { + port = imapsPort + } else { + port = imapPort + } + url.port = &port + url.Host = net.JoinHostPort(url.Host, port) + } +} + +func (url *URL) sanitizeUrl() { + url.setDefaultScheme() + url.setDefaultPort() +} + +func NewUrl(url *url.URL) *URL { + u := URL{URL: url} + u.sanitizeUrl() + return &u +}
\ No newline at end of file |