smtp: choose the private key for the right address
This commit is contained in:
parent
a219374bdf
commit
ee7dae2c2f
23
smtp/smtp.go
23
smtp/smtp.go
|
@ -71,6 +71,26 @@ func (u *user) Send(from string, to []string, r io.Reader) error {
|
||||||
if fromAddr == nil {
|
if fromAddr == nil {
|
||||||
return errors.New("unknown sender address")
|
return errors.New("unknown sender address")
|
||||||
}
|
}
|
||||||
|
if len(fromAddr.Keys) == 0 {
|
||||||
|
return errors.New("sender address has no private key")
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: get appropriate private key
|
||||||
|
encryptedPrivateKey, err := fromAddr.Keys[0].Entity()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("cannot parse sender private key: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var privateKey *openpgp.Entity
|
||||||
|
for _, e := range u.privateKeys {
|
||||||
|
if e.PrimaryKey.KeyId == encryptedPrivateKey.PrimaryKey.KeyId {
|
||||||
|
privateKey = e
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if privateKey == nil {
|
||||||
|
return errors.New("sender address key hasn't been decrypted")
|
||||||
|
}
|
||||||
|
|
||||||
msg := &protonmail.Message{
|
msg := &protonmail.Message{
|
||||||
ToList: toPMAddressList(toList),
|
ToList: toPMAddressList(toList),
|
||||||
|
@ -119,7 +139,6 @@ func (u *user) Send(from string, to []string, r io.Reader) error {
|
||||||
|
|
||||||
msg.MIMEType = bodyType
|
msg.MIMEType = bodyType
|
||||||
|
|
||||||
privateKey := u.privateKeys[0]
|
|
||||||
plaintext, err := msg.Encrypt([]*openpgp.Entity{privateKey}, privateKey)
|
plaintext, err := msg.Encrypt([]*openpgp.Entity{privateKey}, privateKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -223,6 +242,8 @@ func (be *backend) Login(username, password string) (smtp.User, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: decrypt private keys in u.Addresses
|
||||||
|
|
||||||
return &user{c, u, privateKeys}, nil
|
return &user{c, u, privateKeys}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue