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 {
UserID() string
GetSpace() (usedSpace, maxSpace uint, err error)
GetMaxUpload() (uint, error)
GetMaxUpload() (int64, error)
GetAddress(addressID string) (storeAddressProvider, error)

View File

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

View File

@ -20,9 +20,11 @@
package smtp
import (
"bytes"
"encoding/base64"
"fmt"
"io"
"io/ioutil"
"mime"
"net/mail"
"strings"
@ -319,6 +321,12 @@ func (su *smtpUser) Send(returnPath string, to []string, messageReader io.Reader
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)
message, atts, err := su.storeUser.CreateDraft(kr, message, attReaders, attachedPublicKey, attachedPublicKeyName, parentID)
if err != nil {
@ -527,3 +535,24 @@ func (su *smtpUser) Logout() error {
log.Debug("SMTP client logged out user ", su.addressID)
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
}
// GetMaxUpload returns max size of attachment in bytes.
func (store *Store) GetMaxUpload() (uint, error) {
// GetMaxUpload returns max size of message + all attachments in bytes.
func (store *Store) GetMaxUpload() (int64, error) {
apiUser, err := store.client().CurrentUser()
if err != nil {
return 0, err
}
return uint(apiUser.MaxUpload), nil
return apiUser.MaxUpload, nil
}

View File

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

View File

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