Allow filtering emails via headers
This commit is contained in:
parent
450a9de82d
commit
6a52595fa7
|
@ -19,6 +19,7 @@ type InboxSearch struct {
|
||||||
From string
|
From string
|
||||||
Body string
|
Body string
|
||||||
Subject string
|
Subject string
|
||||||
|
Headers map[string]string
|
||||||
After time.Time
|
After time.Time
|
||||||
Before time.Time
|
Before time.Time
|
||||||
}
|
}
|
||||||
|
@ -149,6 +150,38 @@ func HandleGetInbox(ctx context.Context, qry cqrs.Query) (interface{}, error) {
|
||||||
match = false
|
match = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if req.Search.Headers != nil {
|
||||||
|
found := false
|
||||||
|
|
||||||
|
for searchKey, searchValue := range req.Search.Headers {
|
||||||
|
for headerKey, headerValues := range eml.Headers {
|
||||||
|
if searchKey != headerKey {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, hv := range headerValues {
|
||||||
|
if strings.Contains(hv, searchValue) {
|
||||||
|
found = true
|
||||||
|
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if found {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if found {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !found {
|
||||||
|
match = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if match {
|
if match {
|
||||||
filtered = append(filtered, eml)
|
filtered = append(filtered, eml)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package route
|
package route
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
@ -75,6 +76,16 @@ func createInboxQueryFromRequest(r *http.Request) (*query.GetInboxRequest, error
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var headers map[string]string
|
||||||
|
|
||||||
|
rawHeaders := r.URL.Query().Get("headers")
|
||||||
|
if rawHeaders != "" {
|
||||||
|
headers = make(map[string]string)
|
||||||
|
if err := json.Unmarshal([]byte(rawHeaders), &headers); err != nil {
|
||||||
|
return nil, errors.WithStack(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
search := &query.InboxSearch{}
|
search := &query.InboxSearch{}
|
||||||
if to != "" {
|
if to != "" {
|
||||||
search.To = to
|
search.To = to
|
||||||
|
@ -96,6 +107,10 @@ func createInboxQueryFromRequest(r *http.Request) (*query.GetInboxRequest, error
|
||||||
search.Before = before
|
search.Before = before
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if rawHeaders != "" {
|
||||||
|
search.Headers = headers
|
||||||
|
}
|
||||||
|
|
||||||
inboxRequest := &query.GetInboxRequest{
|
inboxRequest := &query.GetInboxRequest{
|
||||||
OrderBy: orderBy,
|
OrderBy: orderBy,
|
||||||
Reverse: reverse == "y",
|
Reverse: reverse == "y",
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
@baseURL = http://localhost:8080
|
||||||
|
|
||||||
|
### Filter emails via headers
|
||||||
|
|
||||||
|
GET {{ baseURL }}/api/v1/emails?headers={"Mime-Version":"1.0"}
|
Loading…
Reference in New Issue