Merge release/hzm into devel

This commit is contained in:
Jakub
2021-02-01 13:42:46 +01:00
6 changed files with 45 additions and 9 deletions

View File

@ -31,7 +31,7 @@ import (
type storeUserProvider interface { type storeUserProvider interface {
UserID() string UserID() string
GetSpace() (usedSpace, maxSpace uint, err error) GetSpace() (usedSpace, maxSpace uint, err error)
GetMaxUpload() (uint, error) GetMaxUpload() (int64, error)
GetAddress(addressID string) (storeAddressProvider, error) GetAddress(addressID string) (storeAddressProvider, error)

View File

@ -33,4 +33,5 @@ type storeUserProvider interface {
attachedPublicKeyName string, attachedPublicKeyName string,
parentID string) (*pmapi.Message, []*pmapi.Attachment, error) parentID string) (*pmapi.Message, []*pmapi.Attachment, error)
SendMessage(messageID string, req *pmapi.SendMessageReq) error SendMessage(messageID string, req *pmapi.SendMessageReq) error
GetMaxUpload() (int64, error)
} }

View File

@ -20,9 +20,11 @@
package smtp package smtp
import ( import (
"bytes"
"encoding/base64" "encoding/base64"
"fmt" "fmt"
"io" "io"
"io/ioutil"
"mime" "mime"
"net/mail" "net/mail"
"strings" "strings"
@ -319,6 +321,12 @@ func (su *smtpUser) Send(returnPath string, to []string, messageReader io.Reader
return nil return nil
} }
if ok, err := su.isTotalSizeOkay(message, attReaders); err != nil {
return err
} else if !ok {
return errors.New("message is too large")
}
su.backend.sendRecorder.addMessage(sendRecorderMessageHash) su.backend.sendRecorder.addMessage(sendRecorderMessageHash)
message, atts, err := su.storeUser.CreateDraft(kr, message, attReaders, attachedPublicKey, attachedPublicKeyName, parentID) message, atts, err := su.storeUser.CreateDraft(kr, message, attReaders, attachedPublicKey, attachedPublicKeyName, parentID)
if err != nil { if err != nil {
@ -527,3 +535,24 @@ func (su *smtpUser) Logout() error {
log.Debug("SMTP client logged out user ", su.addressID) log.Debug("SMTP client logged out user ", su.addressID)
return nil return nil
} }
func (su *smtpUser) isTotalSizeOkay(message *pmapi.Message, attReaders []io.Reader) (bool, error) {
maxUpload, err := su.storeUser.GetMaxUpload()
if err != nil {
return false, err
}
var attSize int64
for i := range attReaders {
b, err := ioutil.ReadAll(attReaders[i])
if err != nil {
return false, err
}
attSize += int64(len(b))
attReaders[i] = bytes.NewBuffer(b)
}
return message.Size+attSize <= maxUpload, nil
}

View File

@ -31,11 +31,11 @@ func (store *Store) GetSpace() (usedSpace, maxSpace uint, err error) {
return uint(apiUser.UsedSpace), uint(apiUser.MaxSpace), nil return uint(apiUser.UsedSpace), uint(apiUser.MaxSpace), nil
} }
// GetMaxUpload returns max size of attachment in bytes. // GetMaxUpload returns max size of message + all attachments in bytes.
func (store *Store) GetMaxUpload() (uint, error) { func (store *Store) GetMaxUpload() (int64, error) {
apiUser, err := store.client().CurrentUser() apiUser, err := store.client().CurrentUser()
if err != nil { if err != nil {
return 0, err return 0, err
} }
return uint(apiUser.MaxUpload), nil return apiUser.MaxUpload, nil
} }

View File

@ -2,23 +2,28 @@
"users": { "users": {
"user": { "user": {
"ID": "1", "ID": "1",
"Name": "user" "Name": "user",
"MaxUpload": 26214400
}, },
"user2fa": { "user2fa": {
"ID": "2", "ID": "2",
"Name": "user2fa" "Name": "user2fa",
"MaxUpload": 26214400
}, },
"userAddressWithCapitalLetter": { "userAddressWithCapitalLetter": {
"ID": "3", "ID": "3",
"Name": "userAddressWithCapitalLetter" "Name": "userAddressWithCapitalLetter",
"MaxUpload": 26214400
}, },
"userMoreAddresses": { "userMoreAddresses": {
"ID": "4", "ID": "4",
"Name": "userMoreAddresses" "Name": "userMoreAddresses",
"MaxUpload": 26214400
}, },
"userDisabledPrimaryAddress": { "userDisabledPrimaryAddress": {
"ID": "5", "ID": "5",
"Name": "userDisabledPrimaryAddress" "Name": "userDisabledPrimaryAddress",
"MaxUpload": 26214400
} }
}, },
"addresses": { "addresses": {

View File

@ -5,6 +5,7 @@ Changelog [format](http://keepachangelog.com/en/1.0.0/)
## Unreleased ## Unreleased
### Added ### Added
* GODT-928 Reject messages which are too large.
### Removed ### Removed
* Remove dependency on go-apple-mobileconfig. * Remove dependency on go-apple-mobileconfig.