add release notes for 0.2.1

This commit is contained in:
Ian Kent 2016-09-04 19:20:07 +01:00
parent 1e17d0d8c1
commit 9a9b06d801
6 changed files with 26 additions and 11 deletions

View file

@ -1,4 +1,4 @@
VERSION=0.2.0 VERSION=0.2.1
all: deps fmt combined all: deps fmt combined

View file

@ -1,6 +1,21 @@
MailHog Releases MailHog Releases
================ ================
### [v0.2.1](https://github.com/mailhog/MailHog/releases/v0.2.1)
- Update .travis.yml to Go 1.6 and tip
- Fix builds broken by out of date mgo import path
- #82 - fix configuration documentation, thanks @riking
- #83 - add search query parameter to Swagger JSON, thanks @kkrauth
- #86 - vendor all dependencies
- #89 - add missing iso88591_map.js and sjis_map.js
- #90 - update broken link in documentation, thanks @espen
- #91 - add assets/js/filesize-3.1.2.min.js
- #93 - starting MailHog as a service using brew, thanks @espen
- #95 - fix UTF-8 encoding bug in attachment names
- #97 - fix header case sensitivity bug
- #102 - merge multiple PRs adding WebSocket support, thanks @GREsau
- mailhog/smtp#2 - use file modification time for Created field, thanks @esiqveland
### [v0.2.0](https://github.com/mailhog/MailHog/releases/v0.2.0) ### [v0.2.0](https://github.com/mailhog/MailHog/releases/v0.2.0)
- mailhog/storage#1 - fix MongoDB storage bug, and implement search, thanks @HokieTT - mailhog/storage#1 - fix MongoDB storage bug, and implement search, thanks @HokieTT
- #13 - implement file based storage backend (currently without search) - #13 - implement file based storage backend (currently without search)

View file

@ -1,10 +1,10 @@
package storage package storage
import ( import (
"log"
"github.com/mailhog/data" "github.com/mailhog/data"
"gopkg.in/mgo.v2" "gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson" "gopkg.in/mgo.v2/bson"
"log"
) )
// MongoDB represents MongoDB backed storage backend // MongoDB represents MongoDB backed storage backend
@ -54,10 +54,10 @@ func (mongo *MongoDB) Search(kind, query string, start, limit int) (*data.Messag
var count = 0 var count = 0
var field = "raw.data" var field = "raw.data"
switch kind { switch kind {
case "to": case "to":
field = "raw.to" field = "raw.to"
case "from": case "from":
field = "raw.from" field = "raw.from"
} }
err := mongo.Collection.Find(bson.M{field: bson.RegEx{Pattern: query, Options: "i"}}).Skip(start).Limit(limit).Sort("-created").Select(bson.M{ err := mongo.Collection.Find(bson.M{field: bson.RegEx{Pattern: query, Options: "i"}}).Skip(start).Limit(limit).Sort("-created").Select(bson.M{
"id": 1, "id": 1,

View file

@ -279,7 +279,7 @@ var nullBytes = []byte("null")
func (id *ObjectId) UnmarshalJSON(data []byte) error { func (id *ObjectId) UnmarshalJSON(data []byte) error {
if len(data) > 0 && (data[0] == '{' || data[0] == 'O') { if len(data) > 0 && (data[0] == '{' || data[0] == 'O') {
var v struct { var v struct {
Id json.RawMessage `json:"$oid"` Id json.RawMessage `json:"$oid"`
Func struct { Func struct {
Id json.RawMessage Id json.RawMessage
} `json:"$oidFunc"` } `json:"$oidFunc"`

View file

@ -773,7 +773,7 @@ func (d *decodeState) isNull(off int) bool {
// name consumes a const or function from d.data[d.off-1:], decoding into the value v. // name consumes a const or function from d.data[d.off-1:], decoding into the value v.
// the first byte of the function name has been read already. // the first byte of the function name has been read already.
func (d *decodeState) name(v reflect.Value) { func (d *decodeState) name(v reflect.Value) {
if d.isNull(d.off-1) { if d.isNull(d.off - 1) {
d.literal(v) d.literal(v)
return return
} }
@ -1076,9 +1076,9 @@ func (d *decodeState) storeKeyed(v reflect.Value) bool {
} }
var ( var (
trueBytes = []byte("true") trueBytes = []byte("true")
falseBytes = []byte("false") falseBytes = []byte("false")
nullBytes = []byte("null") nullBytes = []byte("null")
) )
func (d *decodeState) storeValue(v reflect.Value, from interface{}) { func (d *decodeState) storeValue(v reflect.Value, from interface{}) {

View file

@ -133,7 +133,7 @@ func (c *Client) Step(in []byte) bool {
func (c *Client) step1(in []byte) error { func (c *Client) step1(in []byte) error {
if len(c.clientNonce) == 0 { if len(c.clientNonce) == 0 {
const nonceLen = 6 const nonceLen = 6
buf := make([]byte, nonceLen + b64.EncodedLen(nonceLen)) buf := make([]byte, nonceLen+b64.EncodedLen(nonceLen))
if _, err := rand.Read(buf[:nonceLen]); err != nil { if _, err := rand.Read(buf[:nonceLen]); err != nil {
return fmt.Errorf("cannot read random SCRAM-SHA-1 nonce from operating system: %v", err) return fmt.Errorf("cannot read random SCRAM-SHA-1 nonce from operating system: %v", err)
} }