mirror of
https://gitlab.com/ric_harvey/MailHog.git
synced 2025-02-17 08:15:55 +00:00
Add message list api
This commit is contained in:
parent
4f4f921013
commit
305672472a
4 changed files with 44 additions and 11 deletions
|
@ -8,6 +8,8 @@ import (
|
|||
"github.com/ian-kent/MailHog/mailhog"
|
||||
)
|
||||
|
||||
type Messages []Message
|
||||
|
||||
type Message struct {
|
||||
Id string
|
||||
From *Path
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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>
|
||||
`;
|
||||
}
|
Loading…
Add table
Reference in a new issue