mguessan / davmail

DavMail POP/IMAP/SMTP/Caldav/Carddav/LDAP Exchange and Office 365 Gateway - Synced with main subversion repository at
http://davmail.sourceforge.net
GNU General Public License v2.0
576 stars 85 forks source link

Add support for retrieving user certificates #353

Open singe opened 4 months ago

singe commented 4 months ago

It's possible to add a public S/MIME certificate for a user to the GAL. These are used when a user wants to encrypt a mail to another user, or validate their signature. The public certificate of the recipient is required. Being able to look them up rather than engage in a manual or offline synchornisation process makes this easier, as well as fetching updated certificates when they're changed.

The bulk of this work was done by @krutelp in https://github.com/mguessan/davmail/pull/98 I merely extended it to support the UserSMIMECertificate field in addition to the MSExchangeCertificate field.

These are both part of the EWS Contact: https://learn.microsoft.com/en-us/dotnet/api/microsoft.exchange.webservices.data.contact?view=exchange-ews-api

I tried to do it without using ContactDataShape.AllProperties but like @krutelp couldn't find a method that would return the certificates.

I extended the ignored tags based on what was returned by our Microsoft365 instance, but not all of the fields listed under the Contact type above.

I slightly modified the original PR to use Dos line endings in ResolveNamesMethod.java so exact changes could be observed instead of the entire file being changed.

I also added the keys to the contact in ExchangeSession.java as KEY1 and KEY2.

Finally, I undid the small changes in LdapConnection.java to the isMatch() methods to have them take an ExchangeSession.Contact and put them back to Map<String, String>. This was mostly done to limit the changes in the patch to those necessary.

singe commented 4 months ago

@mguessan anything else you'd like to see in this?

mguessan commented 3 months ago

@singe looks good, need some time to validate.

Previous attempt broke thing on synchronisation.