Add message list api

This commit is contained in:
Ian Kent 2014-04-20 16:05:50 +01:00
parent 4f4f921013
commit 305672472a
4 changed files with 44 additions and 11 deletions

View file

@ -8,6 +8,8 @@ import (
"github.com/ian-kent/MailHog/mailhog"
)
type Messages []Message
type Message struct {
Id string
From *Path

View file

@ -1,30 +1,32 @@
package http
import (
"fmt"
"encoding/json"
"net/http"
"github.com/ian-kent/MailHog/mailhog"
"github.com/ian-kent/MailHog/mailhog/templates"
"github.com/ian-kent/MailHog/mailhog/storage"
"github.com/ian-kent/MailHog/mailhog/templates/images"
"github.com/ian-kent/MailHog/mailhog/templates/js"
)
var exitChannel chan int
var config *mailhog.Config
func web_exit(w http.ResponseWriter, r *http.Request) {
web_headers(w)
fmt.Fprint(w, "Exiting MailHog!")
w.Write([]byte("Exiting MailHog!"))
exitChannel <- 1
}
func web_index(w http.ResponseWriter, r *http.Request) {
web_headers(w)
fmt.Fprint(w, web_render(templates.Index()))
w.Write([]byte(web_render(templates.Index())))
}
func web_jscontroller(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/javascript")
fmt.Fprint(w, js.Controllers())
w.Write([]byte(js.Controllers()))
}
func web_imgcontroller(w http.ResponseWriter, r *http.Request) {
@ -40,11 +42,23 @@ func web_headers(w http.ResponseWriter) {
w.Header().Set("Content-Type", "text/html")
}
func api_messages(w http.ResponseWriter, r *http.Request) {
messages, _ := storage.List(config, 0, 1000)
bytes, _ := json.Marshal(messages)
w.Header().Set("Content-Type", "text/json")
w.Write(bytes)
}
func Start(exitCh chan int, conf *mailhog.Config) {
exitChannel = exitCh
config = conf
http.HandleFunc("/exit", web_exit)
http.HandleFunc("/js/controllers.js", web_jscontroller)
http.HandleFunc("/images/hog.png", web_imgcontroller)
http.HandleFunc("/", web_index)
http.HandleFunc("/api/v1/messages", api_messages)
//http.HandleFunc("/api/v1/messages/delete", api_delete_all)
//http.HandleFunc("/api/v1/messages/:message_id/delete", api_delete_message)
http.ListenAndServe(conf.HTTPBindAddr, nil)
}

View file

@ -24,6 +24,22 @@ func Store(c *mailhog.Config, m *data.SMTPMessage) (string, error) {
return msg.Id, nil
}
func List(c *mailhog.Config, start int, limit int) (*data.Messages, error) {
session, err := mgo.Dial(c.MongoUri)
if(err != nil) {
log.Printf("Error connecting to MongoDB: %s", err)
return nil, err
}
defer session.Close()
messages := &data.Messages{}
err = session.DB(c.MongoDb).C(c.MongoColl).Find(bson.M{}).Skip(start).Limit(limit).All(messages)
if err != nil {
log.Printf("Error loading messages: %s", err)
return nil, err
}
return messages, nil;
}
func Load(c *mailhog.Config, id string) (*data.Message, error) {
session, err := mgo.Dial(c.MongoUri)
if(err != nil) {

View file

@ -5,6 +5,7 @@ func Index() string {
<style>
.messages {
height: 30%;
overflow-y: scroll;
}
.preview {
height: 70%;
@ -53,18 +54,18 @@ func Index() string {
<tbody>
<tr ng-repeat="message in messages" ng-click="selectMessage(message)" ng-class="{ selected: message == preview }">
<td>
{{ message.from.mailbox }}@{{ message.from.domain }}
{{ message.From.Mailbox }}@{{ message.From.Domain }}
</td>
<td>
<span ng-repeat="to in message.to">
{{ to.mailbox }}@{{ to.domain }}
<span ng-repeat="to in message.To">
{{ to.Mailbox }}@{{ to.Domain }}
</span>
</td>
<td>
{{ message.content.headers.Subject }}
{{ message.Content.Headers.Subject }}
</td>
<td>
{{ date(message.created) }}
{{ date(message.Created) }}
</td>
<td>
<button class="btn btn-xs btn-default" title="Delete" ng-click="deleteOne(message)"><span class="glyphicon glyphicon-remove"></span></button>
@ -75,7 +76,7 @@ func Index() string {
</div>
<div class="preview">
<table class="table" id="headers">
<tr ng-repeat="(header, value) in preview.content.headers">
<tr ng-repeat="(header, value) in preview.Content.Headers">
<td>
{{ header }}
</td>
@ -84,7 +85,7 @@ func Index() string {
</td>
</tr>
</table>
{{ preview.content.body }}
{{ preview.Content.Body }}
</div>
`;
}