Ahorrando un calendario/contacta la integración nunca en blanco o suelta sus credenciales almacenadas

FixEmailService
Se descapó
17 de septiembre de 2026 a las 4:31 UTC
Autor
Kamo
Compromit
d35858f

Las credenciales de una integración de contactoJson fue reemplazado por cualquier salvado enviado. La pestaña org CalDAV/CardDAV envía todo cuatro campos de servidor (vacía - nunca muestran lo que se almacena) en cada guardar de una manzana o servidor personalizado, por lo que Pulsado Guardar para cambiar un interruptor de sincronización sobrescribe la dirección almacenada, el nombre de usuario y la contraseña con cadenas vacías. El El diálogo de la página de contactos envía sólo los campos mecanografiados, por lo que cambiar una contraseña dejó caer la dirección y el nombre de usuario. IntegrationSettingsService ahora distingue los dos tipos de credencial Escribir: - Una configuración guarda (org PUT, miembro POST/PUT) MERGES: un campo en blanco o nulo "no se suministra" y mantiene su almacenamiento valor; todos los campos en blanco no cambian nada; un campo mecanografiado sustituye a su contraparte almacenada y a cualquier otra persona almacenada el campo se queda. Un ahorro que cambia el proveedor comienza de la nada, por lo que una beca de OAuth nunca se lleva en las credenciales de Apple ID o al revés. Una contraseña almacenada se une al caldavUrl, carddavUrl y nombre de usuario con el que se salvó: cambiar cualquiera de ellos sin teclear la contraseña se rechaza con un 400 en lugar de Enviando la antigua contraseña a un servidor o cuenta diferente. Se almacena una credencial que no es un objeto JSON como enviado, como antes. - Un consentimiento de OAuth REPLACES la subvención completa (nuevo saveOrgOAuthGrant para la callback de org; saveMemberOAuth). Una fusión allí mantendría un refresco que el proveedor no se reeditaba, o el correo electrónico de otra cuenta. El controlador responde a IllegalArgumentException de estos ahorros con 400 en lugar de 500. Los refrescos simberos (aquí y en daemonservice) lea y reescribe todo el mapa descifrado en la entidad, y ProveedorRegistry / GenéricoDavProvider sólo lo lee; ninguno de ellos cambia. No hay hileras de contactos en la producción, así que Aún no se borró nada. IntegraciónConfiguraciónServiceTest: campos en blanco mantienen el servidor, un campo mecanografiado se reemplaza solo a sí mismo, un nuevo la dirección/cuenta sin la contraseña se rechaza y no cambia nada (la misma dirección resent no es un cambio), un interruptor de proveedor deja que las teclas del otro proveedor, org y las subvenciones de OAuth de suplir sustraísmen. Controlado por mutación: sustitución en lugar de fusionarse, eliminar la unión de la contraseña, ignorar el interruptor del proveedor y fusionar la subvención OAuth cada uno falla una prueba. Suite completa: 1763 pruebas, 0 fallos.

Todos los cambios

Como lo que ves enviaste?

Todo llega a su espacio de trabajo por sí solo. Comience en el plan gratuito y lea esta página de nuevo en un mes.

Arranzar gratis para siempreVer Precios