feat(GODT-3048): Add X-PM-ENCRYPT-UNTRUSTED to vcard parser

This commit is contained in:
Leander Beernaert
2023-11-08 11:43:05 +01:00
committed by LBeernaertProton
parent 5f248dfc82
commit fb55d3bd8b
3 changed files with 47 additions and 9 deletions

View File

@@ -11,10 +11,11 @@ import (
)
const (
FieldPMScheme = "X-PM-SCHEME"
FieldPMSign = "X-PM-SIGN"
FieldPMEncrypt = "X-PM-ENCRYPT"
FieldPMMIMEType = "X-PM-MIMETYPE"
FieldPMScheme = "X-PM-SCHEME"
FieldPMSign = "X-PM-SIGN"
FieldPMEncrypt = "X-PM-ENCRYPT"
FieldPMEncryptUntrusted = "X-PM-ENCRYPT-UNTRUSTED"
FieldPMMIMEType = "X-PM-MIMETYPE"
)
type Cards []*Card

View File

@@ -49,6 +49,7 @@ func TestContactSettings(t *testing.T) {
settings.SetScheme(proton.PGPInlineScheme)
settings.SetSign(true)
settings.SetEncrypt(true)
settings.SetEncryptUntrusted(true)
settings.AddKey(key)
err = contact.SetSettings(nil, "user@user", proton.CardTypeClear, settings)
@@ -61,6 +62,7 @@ func TestContactSettings(t *testing.T) {
require.Equal(t, *settings.Scheme, proton.PGPInlineScheme)
require.Equal(t, *settings.Sign, true)
require.Equal(t, *settings.Encrypt, true)
require.Equal(t, *settings.EncryptUntrusted, true)
require.Equal(t, len(settings.Keys), 1)
kr, err := crypto.NewKeyRing(settings.Keys[0])
require.NoError(t, err)

View File

@@ -19,11 +19,12 @@ const (
)
type ContactSettings struct {
MIMEType *rfc822.MIMEType
Scheme *EncryptionScheme
Sign *bool
Encrypt *bool
Keys []*crypto.Key
MIMEType *rfc822.MIMEType
Scheme *EncryptionScheme
Sign *bool
Encrypt *bool
EncryptUntrusted *bool
Keys []*crypto.Key
}
type Contact struct {
@@ -59,6 +60,13 @@ func (cs *ContactSettings) SetEncrypt(enabled bool) {
*cs.Encrypt = enabled
}
func (cs *ContactSettings) SetEncryptUntrusted(enabled bool) {
if cs.EncryptUntrusted == nil {
cs.EncryptUntrusted = new(bool)
}
*cs.EncryptUntrusted = enabled
}
func (cs *ContactSettings) AddKey(key *crypto.Key) {
cs.Keys = append(cs.Keys, key)
}
@@ -128,6 +136,20 @@ func (c *Contact) GetSettings(kr *crypto.KeyRing, email string, cardType CardTyp
settings.Encrypt = newPtr(encrypt)
}
encryptUntrusted, err := group.Get(FieldPMEncryptUntrusted)
if err != nil {
return ContactSettings{}, err
}
if len(encryptUntrusted) > 0 {
b, err := strconv.ParseBool(encryptUntrusted[0])
if err != nil {
return ContactSettings{}, err
}
settings.EncryptUntrusted = newPtr(b)
}
keys, err := group.Get(vcard.FieldKey)
if err != nil {
return ContactSettings{}, err
@@ -227,6 +249,19 @@ func (c *Contact) SetSettings(kr *crypto.KeyRing, email string, cardType CardTyp
}
}
// X-PM-ENCRYPT-UNTRUSTED:
if settings.EncryptUntrusted != nil {
if *settings.EncryptUntrusted {
if err := group.Set(FieldPMEncryptUntrusted, "true", vcard.Params{}); err != nil {
return err
}
} else {
if err := group.Set(FieldPMEncryptUntrusted, "false", vcard.Params{}); err != nil {
return err
}
}
}
// KEY
if settings.Keys != nil && len(settings.Keys) > 0 {
var keys = ""