Browse Source

List mailboxes

master
Simon Ser 4 years ago
parent
commit
640bd49731
No known key found for this signature in database GPG Key ID: FDE7BE0E88F5E48
2 changed files with 31 additions and 4 deletions
  1. +7
    -0
      public/index.html
  2. +24
    -4
      server.go

+ 7
- 0
public/index.html View File

@@ -2,4 +2,11 @@

<h1>koushin</h1>

<p>Mailboxes:</p>
<ul>
{{range .Mailboxes}}
<li>{{.Name}}</li>
{{end}}
</ul>

{{template "foot"}}

+ 24
- 4
server.go View File

@@ -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)


Loading…
Cancel
Save