diff options
author | Simon Ser <contact@emersion.fr> | 2019-12-02 17:31:34 +0100 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2019-12-02 17:31:34 +0100 |
commit | 640bd497317891eae8c34255c077956183d526ae (patch) | |
tree | 14993f7704d5b1e8176691cda2533f90b70bc1ca | |
parent | 8b84d81f9b56c02a53d1224eb20b25ba93609aa1 (diff) | |
download | alps-640bd497317891eae8c34255c077956183d526ae.tar.gz alps-640bd497317891eae8c34255c077956183d526ae.zip |
List mailboxes
-rw-r--r-- | public/index.html | 7 | ||||
-rw-r--r-- | server.go | 28 |
2 files changed, 31 insertions, 4 deletions
diff --git a/public/index.html b/public/index.html index 9dbc3fe..4a9566a 100644 --- a/public/index.html +++ b/public/index.html @@ -2,4 +2,11 @@ <h1>koushin</h1> +<p>Mailboxes:</p> +<ul> + {{range .Mailboxes}} + <li>{{.Name}}</li> + {{end}} +</ul> + {{template "foot"}} @@ -7,6 +7,7 @@ import ( "time" "github.com/labstack/echo/v4" + "github.com/emersion/go-imap" imapclient "github.com/emersion/go-imap/client" ) @@ -132,7 +133,12 @@ func New(imapURL string) *echo.Echo { cookie, err := ctx.Cookie(cookieName) if err == http.ErrNoCookie { - return next(ctx) + // Require auth for all pages except /login + if ctx.Path() == "/login" { + return next(ctx) + } else { + return ctx.Redirect(http.StatusFound, "/login") + } } else if err != nil { return err } @@ -156,11 +162,25 @@ func New(imapURL string) *echo.Echo { e.GET("/", func(ectx echo.Context) error { ctx := ectx.(*context) - if ctx.conn == nil { - return ctx.Redirect(http.StatusFound, "/login") + + ch := make(chan *imap.MailboxInfo, 10) + done := make(chan error, 1) + go func () { + done <- ctx.conn.List("", "*", ch) + }() + + var mailboxes []*imap.MailboxInfo + for mbox := range ch { + mailboxes = append(mailboxes, mbox) + } + + if err := <-done; err != nil { + return err } - return ctx.Render(http.StatusOK, "index.html", nil) + return ctx.Render(http.StatusOK, "index.html", map[string]interface{}{ + "Mailboxes": mailboxes, + }) }) e.GET("/login", handleLogin) |