Saltar al contenido
KAMOUniverse

Changelog

Qué hay de nuevo.

Cada mejora de la plataforma, a medida que se envía.

  1. · SecurityService

    Graba plomo y rechaza exportaciones no auditables

    HIPAA no 164.312 (b) para SecurityService. La plataforma registra todas las pistas CHANGE (LíderHistory) y cada login (SystemAccessLog) y grabaciones no LEER en absoluto, así que "quién miró a este prestatario" - la primera pregunta a La evaluación de incumplimiento no es de 164.402 solicitudes no contestables. PhiAccessAuditor construye eventos a partir del mapa de sesión de OTK/*** el endpoint ya resuelto, por lo que la identidad en la fila de auditoría es la misma identidad que autorizó la solicitud. Cliente IP viene de X-Forwarded-For; detrás de Traefik, RemoteAddr registra la cápsula de entrada y No vale nada para la detección. Las negaciones también se registran - la investigación es lo que detección busca y un llamante sin sesiones aterriza en un org centinela en lugar de ser eliminado. Lea: single lead titch = VIEW, grid = un evento LIST por plomo en realidad enviado (tomado de los DTO proyectados, por lo que una pista filtrada por VIEW-UNASSIGNED-LEADS nunca aparece como uno que se lee). 401/403/404 todos registran una negación. Las exportaciones fallan cerradas CSV, HMDA LAR, el corpus de entrenamiento QC y el corpus de extracción de toda la plataforma. Cada uno registra un evento por Registro ANTES de que el archivo se construya, y una auditoría fallida de escritura de escritura de auditoría 503: "repartamos los datos pero perdimos el registro" es la única respuesta que No se puede volver caminando. El corpus de toda la plataforma cruza a cada inquilino, así que cada registro se atribuye a la org que lo posee, no al operador. Sólo se registran identificadores, nunca contentos. ************* miembroId) se ha ido: una exportación ahora ha para mantener sus filas para grabar quién estaba en ellos.

  2. · kamo-signer-monorepo

    Public branded quote/estimar documento en /-locale-/q/-token.

    La superficie orientada al cliente para el sistema de cotización del comercio. Servidor-render así que el La marca de org está en la primera pintura, un destello sin marca en un documento comercial es exactamente lo que esto no debe hacer, y es por eso que la página emite la marca personalizada propiedades en línea a través de QuoteBrandVars en lugar de intercambiarlos después de hidratación. Vive en kamo-signer porque esa aplicación ya tiene el HostRegexp ingress, autocert cobertura, alias DNS y el paquete temático con el nombre de hostOverrder y porque cito -Aceptar -E-sign es entonces un salto, ya que EsignGenericEnvelope ata a cualquier registro a través de (contexto, context-id). Reutilizarlo sólo era viable una vez el /-locale/ El trabajo i18n aterrizó; las 31 cuerdas son las claves de traducción que provienen del diccionario. Dinero y fechas formato a través de siguiente-intl utilizando la propia moneda de la cotización y la Zona temporal de servidor (miembro receptor - org - UTC), nunca el dispositivo del visor. Una expiración en la zona equivocada puede nombrar una fecha en la que la oferta ya está - muerto. Añade el primer bloque de impresión real de la plataforma. "Print Invoice" en kamo-internal siempre ha impreso todo el chromo de la aplicación porque no existía una regla de impresión multimedia en cualquier lugar; aquí las mismas huellas de marcación que un documento de Carta limpio con la marca acento conservado (impresión-color-ajuste: exacto - una cita incolora lee como borrador), la barra de acción suprimida, y el rompe-páginas-en el interior: evitar en las filas y los totales. Los estados terminales son deliberadamente asimétricos: se hace una página de marca honesta nombrar la fecha y los datos de contacto de la org, seguro porque el llamante ya probada la posesión de una ficha de 256 bits; desconocida/revocada/erróne de orifa se derrumba a uno página genérica para que la superficie no se pueda sondear. El cliente blanco lista la razón antes de la representación. El símbolo nunca viaja en adelante en una URL. la resolución del lado del servidor la publica en un cuerpo, y el BFF reenvía la IP del cliente real explícitamente porque los sellos APIService X-Forwarded-For de su propia petición entrante, que de otra manera pondría cada visor en un cubo de un límite de tarifa teclado a la IP de la cápsula. Añade SEGURIDADSERVICE-URL al configmap (verificado: existe el servicio de seguridad de kamows en el espacio de nombre de kamo).

  3. · SecurityService

    Cita REST Superficie . Gestión del personal y enlaces de acciones públicas

    Puntos finales del personal en /api/security/commerce/cuartelaciones y un solucionador no autenticado en /api/security/public/quotes. CitaController extiende BaseLosController en lugar de copiar POSController's preámbulo: CallerSessionResolver acepta el atributo X-OTK, el X-***-Token cabecera Y la galleta ***, donde POSController privado getOrgId lee sólo el Atributo OTK. Cada manejador está equipado con derechos (VIEW/MANAGE/SEND-QUOTES). La mayoría de la comercio superficie es sólo sesión - cualquier miembro autenticado de cualquier org puede mutar órdenes y eso deliberadamente no se repite aquí, porque una cita comete el org a un precio delante de un cliente. CitaPublicController no necesita seguridad-config talve-out: la cadena de primavera es cualquier petición ().permitAll() y OTKPreAuthFilter sólo actúa sobre una cabecera X-OTK, que un navegador siguiendo un enlace por correo electrónico nunca envía. Puntos de diseño: - El símbolo llega al cuerpo POST, nunca una URL. APIApp.forward() solicitud de registros líneas, y una credencial portador en un camino aterrizaría en esos troncos. - No es un oráculo de enumeración: fichas desconocidas, revocadas y maltrechadas devolver un fallo genérico indistinguible. Sólo se consigue un específico, respuesta honesta, que es segura porque el llamante ya demostró la posesión de un Sintura de 256 bits. - El org derivado de la solicitud de huésped se coteja con el org en el fila de enlace. Sin ella, un enlace válido para org A abierto bajo el anfitrión de org B sería renders A's pricing wearing B's branding - un phishing primitente. - sin-tére / Referrer-Policy: no-referrer / X-Robots-Tag: noindex en cada respuesta. La página carga logotipos de tema.org, y un Referer llevaría el Token fuera de origen. PublicLinkRateLimiter está Redis-backed porque SecurityService es multi-réplica . Los contadores en el proceso serían un limitador de nombre solamente. Es explícitamente DoS y Protección de higien log, NO el control anti-adipo: 256 bits de entropía lo es. Los fracasos se cuentan con mucha más dureza que los éxitos, ya que una oficina abre un La cita transmitida cincuenta veces es normal, mientras que cincuenta faltas no lo es. Fracasa abierto, así que a Redis apagado no puede quitar la página de la cita. QuoteEmailClient reutiliza la ruta transaccional de EmailService (X-Internal-Auth, plantilla QUOTE-SENT) y envía sólo la figura de titular más el enlace nunca el Precios itemised, por lo que un correo electrónico enviado no es en sí mismo la divulgación. Fallas de prueba preexistentes sin cambios por esta comisión (verificadas escondiendo este trabajo y re-running en HEAD limpio): ************* NPE en una null EntityManager, y el legado com.retval SecurityServiceApplicationTests faltan a Configuración de botas de primavera. REQUIRES a KamoInitializerServicio corrido antes de que estos endpoints funcionen: las tablas de presupuestos son nuevos y ddl-auto no es ninguno aquí, por lo que las botas de servicio normalmente y sólo la cita El punto 500 en una relación faltante hasta que KI haya corrido.

  4. · kamo-shared-library

    Cita/estima dominio de entidades, motor de precios, enlaces de acciones

    Añade una cotización de primera clase junto a la columna vertebral comercial existente. El preexistente "ServiceQuote" es una Intención más una mancha JSON llevando una oferta y un piso cantidad, sin destinatario, sin caducidad y sin IU; no es una fundación. Ampliación La intención también fue rechazada directamente: el comercio-intente es compartido por LOAN-APPLICATION, RENTAL.REQUEST, SUBSCRIPTION-SIGNUP y PURCHASE-REQUEST, así que 25 columnas de cotización NULLs permanentes en las vías hipotecarias y de alquiler. Entidades ********************** Cita de engagement-linked, versionado, valid-intil . valido. QuoteLineItem instantáneas nombre/sku/precio para que una cita enviada nunca vuelva a precios QuoteShareLink bearer credential, SHA-256 en reposo, revoca/expiry/view counts QuoteLinkView por apertura de auditoría (ip, agente de usuario) CitaEvent solo para adivinar ruta de ciclo de vida Los totales son de servidor-autorita. CitaTotals es el escritor de cada dinero el campo y la solicitud DTO no llevan ningún total en absoluto a diferencia de createRetailOrder, que toma subtotal/impuesto/total literalmente y se le puede entregar un orden poblado con total = 0. Se aplican descuentos de línea antes del nivel de cotización Descuento, los descuentos nunca pueden superar su base, las matemáticas intermedias se quedan en escala 4 y sólo las grandes rondas totales a la unidad menor de la moneda. Compartir fichas: 32 bytes de SecureRandom como 43 bases64url chars (256 bits). Igual entropía como el fichaje de signo electrónico pero 21 caracteres más corto, manteniendo la URL enviada por correo electrónico bajo el límite de 76-char de texto plano. Sólo se mantiene el SHA-256. El impuesto es honesto en lugar de inventado: la plataforma no tiene motor fiscal (TaxClass/ TaxZone/TaxRate son autorables y leen sin cálculo), por lo que modo ENGINE NO-CONFIGURAD en lugar de inventar una figura en un documento comercial. QuoteLineItem.taxClassId es UUID, que coincide con el PK real de TaxClass. Oferta.taxClassId es un Largo contra una mesa UUID y es estructuralmente irresoluble. También: derechos 178-180 (VIEW/MANAGE/SEND-QUOTES) y el correo electrónico canónico QUOTE-SENT plantilla, registrada en CANONICAL-KEYS (ausente hay un 404). 35 pruebas que cubren el motor de fijación de precios y la higiene simbética. Suite completa: 896 pasando. Nota de esquema: se trata de nuevas tablas. KamoInitializerService debe correr antes SecurityService sirve a los endpoints de cotización . ddl-auto no hay ninguno allí, por lo que el las botas de servicio fina y el endpoints 500 en una relación perdida hasta que lo haga.

  5. · KlusterServices

    Contención de entrada para el avatar, como CiliumNetworkPolicy

    Reintegró lo que 8f6c672 revirtió, en la única forma que realmente funciona aquí. El intento anterior fracasó porque una política llana no puede expresar esto La topología del grupo. De las cuatro dependencias críticas de Seguridad-Service viven en directo el nodo, no en la red de vainas de cucaracha-0 y nats-k1m1-0 de ejecución hostNetwork, y MinIO es un proceso de host. por lo que un podSelector nunca puede igualarlos. El parte no obvia, y la razón por la que el primer intento de parche también fracasó, es que un ipBlock para la subred de nodos tampoco lo fija: Cilium clasifica el nodo como la identidad reservada de host/nodo-nódote, y las normas CIDR deliberadamente no coinciden Identidades reservadas. a las Entidades es la única construcción que lo expresa. Ambos modos de falla fueron reproducidos contra una cápsula canaria desechable antes de escribir esto, más que contra la producción. El canario llevaba la misma regla establecida una etiqueta distinta, que es como la versión ipBlock fue atrapada bloqueando silenciosamente CockroachDB, NATS y MinIO mientras se ve perfectamente razonable. Verificado en el canario, luego confirmado en SecurityService sin reinicias y sin errores de conexión: ALLOW dns, crdb:26257, nats:4222, minio:9000, redis:6379, hermanos:80, mundo:443 BLOCK node:22, nodo:443, kube-api:443, redis-via-node:6379, 169.254.169.254, loopback:9000 Los cuatro últimos son el punto: una SSRF en el banndo ahora no tiene adónde ir. El guardia en código sigue siendo el control principal - es la única capa que entiende DNS reencuadernación y esto es defensa detrás de ella. La cabecera lleva el procedimiento canario. Cualquiera que cambie esto debería volver a ejecutarlo más bien. que la razón al respecto; el modelo de identidad de Cilium no se comporta de la manera clara La intuición de NetworkPolicy sugiere, y no hay ambiente de escenificación.

  6. · kamo-internal

    Muestra cara de conversación en grupo

    Un hilo con cinco personas en él estaba representado por una cara arbitraria, que Lee como un mensaje de una persona. Hasta tres participantes ahora se superponen, así que "varias personas" es legible de un vistazo sin necesidad de analizar la línea de nombres. Capturado a las tres: pasados que los círculos se encogen por debajo de la reconocibilidad y la fila se convierte en textura en lugar de información, y el resto ya está declarado en el texto de "y N otros" justo al lado. El lector se filtra fuera de su propia lista de rosca, y el otro partido lidera. caras lean de izquierda a derecha, por lo que el corresponsal principal tiene que ser el más izquierdista y el que llevaba la placa sin leer. Cada cara tiene un anillo en la fila color de fondo; sin ella una pila de fotos similares se fusiona en una sola forma. La resolución ahora abarca a los primeros pocos participantes y no sólo al plomo, De lo contrario, la segunda y tercera caras se sentarían como monogramas permanentemente.

  7. · SecurityService

    Instrumento de la cadena, cosechar entradas vencidas, información registral

    Cada modo de falla en esta característica es silencioso. Un interruptor de circuito cerrado, un trabajador cola desechando cada tarea, un proveedor que comenzó a devolver HTML. exactamente como "este corresponsal no tiene foto", que es también lo correcto El comportamiento parece. No hay diferencia visible del usuario entre trabajar y completamente muerto, por lo que tiene que medirse. Métrics (Prometheus ya estaba conectado, así que esto es principalmente nombrar): caché golpeado relación, duración de la cadena etiquetada por el nivel que respondió, por-proveedor golpe/miss, la profundidad de la cola de los trabajadores y un total de tareas desechados. Ese último usado anteriormente DescartePolicy, que cae silenciosamente por diseño; ahora aumenta un contador, y el mostrador se declara ante el albacea porque los inicializadores de campo corren en El orden de la fuente y confiar en la captura perezosa se rompería en un reordenamiento inofensivo. Las revelaciones van a su propio leñador. Sólo el nivel de identidad es personal divulgación: los niveles de dominio transmiten la parte derecha de una dirección, que no identifica a nadie y se registra antes de la llamada en lugar de después, por lo que el El rastro existe incluso cuando la solicitud falla. La dirección está escrita en su totalidad y deliberadamente: el punto es responder "quién era el dato de esta persona compartido con", y un hash no puede responder a eso. El segador cierra una fuga: borrarEmpiar antes de existir y nada lo llamó, así que La identidad de los remitentes creció para siempre. Un buzón ocupado toca a miles de corresponsales una vez cada uno y deja una fila negativa atrás para cada uno. Las pruebas cubren el buscador contra un enchufe real, porque los casos interesantes son todos los comportamientos del proveedor en lugar de la lógica: un 404 portando una imagen válida (DuckDuckGo), un HTML de servicio suave de 404, un origen subestimando Content-Length, a 1x1 stal, y una redireccion dirigida a la red de vainas. El cliente de producción no puede ser apuntado a un servidor de pruebas de loopback - su pin DNS se niega a resolver cualquier cosa privado, que es todo el punto - por lo que los que corren contra un cliente relajado y el el pin se afirma por separado.

  8. · kamo-internal

    Promover una matriz LLPA ingerida en ajustes de la consola

    El panel de ingestión sólo podía publicar una hoja de tarifas. Para una fuente LLPA-MATRIX documento que ahora muestra una tarjeta "Promotar como ajustes de LLPA": elija la existente la versión de la hoja de tarifa, los LLPA se ajustan (un grupo opcional), y cada uno aprobado El cubo FICO/LTV se convierte en un ajuste de precios condicional. El resultado nombra cómo muchos eran de autor y, honestamente, cuántas filas se saltaron porque un cubo no se podía leer con seguridad o ya estaba presente. ingestiónApi.promoteAjustes postes al nuevo relevo de pasarela.

  9. · SecurityService

    Relevo de portón para promover una matriz LLPA en ajustes condicionales

    **************** ganan los ajustes de promoción, reflejando el relé de hoja de tarifa: puerta de destino diódo, organizaciónId server-sted en la carga útil a través de write(), aguas abajo 4xx retransmándose literalmente. Deja que un mayordodo g convierta una vuelta revisado la matriz LLPA en ajustes de precios reales por escenario de la consola.

  10. · VOIPService

    Graba grabación de llamadas, buzón de voz y acceso a la transcripción

    La reproducción de la grabación no dejó rastro. Una llamada grabada es el PHI más denso el tiendas de plataformas - la conversación sin canjear y "quien escuchó esto llamada" era incontestable, que es la primera pregunta de una infracción de 164.402. la evaluación pregunta. Llamada de acuchillosRegidorAuditor en cada lectura que lo revele: - GET /grabaciones/-id-/audio CALL-RECORDING / DOWNLOAD - GET ************* CALL-RECORDING / DOWNLOAD - GET /grabaciones/-id-CALL-RECORDING - TRANSCRIPT / VIEW - GET ************* CALL-RECORDING / DOWNLOAD - GET /instances/-id-/voicemails TRANSCRIPT / LIST, per row La transcripción es la que se esconde. No es una descarga mediática; cabalga dentro de los metadatos JSON y dentro de cada fila de correo de voz, y es el mismo PHI como el audio en una forma que se engrandece. Tiene su propio evento porque un La contabilidad de las revelaciones se ensambla por recurso. El servicio de byte falla cerrado, por lo que PhiAuditDisponibilidadAdvice convierte un inlogácica Leer en un 503 en lugar de 500 la solicitud estaba bien, decodificamos a Servir a PHI no pudimos explicar. Las negativas también se registran; la investigación es Qué busca la detección. También se cierra un hueco de autorización encontrado mientras se cablea esta: POST /Registros/lookup tomó una instanciaId del cuerpo de solicitud y nunca Revisó el org del llamante, así que resolvió el proveedor de otro inquilino. llama a los ids a sus ids de grabación. Cada otra instancia de punto de acceso en el El servicio ya pasa por findByIdAndOrgId; este ahora también. La autorización de reproducción de la grabación se deja como está y documenta en su lugar: org la propiedad es el único cheque, por lo que cualquier miembro puede reproducir cualquier grabación en su org. Estrecharlo significa decidir si la "extensión propia" es el límite y que la derecha lo levanta - que es una decisión de producto, no una adivinar para hacer aquí, y cada acceso está al menos registrado ahora.

  11. · AIService

    Graba acceso PHI en cada lectura del historial de conversación de IA almacenado

    Alambres la columna compartida de 164.312 libras (b) en los caminos que leían persistió los prompts y terminaciones. El asistente es el módulo la evaluación de cumplimiento puesta OUTSIDE el límite - impulsa a los proveedores externos bajo ningún BAA y se mantienen indefinidamente, por lo que las lecturas de esa tienda son las revelaciones más en necesidad de un rastro, y no tenían ninguno. Auditoría: la lista de sesión y la búsqueda de historia (un evento por conversación, no uno por petición), los metadatos de una sola conversación y sus mensajes, el público widget leyendo su propia transcripción hacia atrás, y el paquete de entrega. Las despreciaciones son grabados también - sondear los guidos de otro org es lo que la detección busca El intento no autentictado se atribuye al org centenel en lugar de caer, ya que la grabadora rechaza lo que no puede atribuir y ese es el evento más Vale la pena mantenerlo. El paquete de entrega es un DISCLOSE, no una VER: lleva un visitante conversación fuera de AIService y delante de un humano en otro producto. Eso el tipo falla cerrada, así que un registro perdido ahora retenga la transcripción y respuestas 503 en lugar de servir datos que no puede explicar. Identificadores sólo. Nunca un cuerpo de mensaje, un título, o el término de búsqueda - un miembro Buscando en su historia asistente escribe el nombre del prestatario en él, y un rastro de auditoría que reprodujo el prompt acaba de haber movido el PHI en el Corrida de registro. Completa d428ee3, que una sesión simultánea barrió en medio cambio: el auditor Faltaba récordDeniedInternalView, y el de PublicAiChatController nuevo El argumento de la constructora no había llegado a su prueba.

  12. · MediaService

    Mensaje de chat de grabación lee en los endpoints que devuelven cuerpos

    Enviando un mensaje a la izquierda una fila; leer uno no dejó nada. Cada chat, apoyo y hilo social en la plataforma se desprende de un púdiz aquí, y ninguno de ellos grabaron cualquier cosa, así que "quién leía esta conversación" no tuvo respuesta, que es la primera pregunta que hace una evaluación de incumplimiento 164.402. ChatMessageAccessAuditor emite un PhiAccessEvent (CHAT-MESSAGE) de los cinco caminos que le dan un mensaje de mensaje: GET ************* LIST GET /api/media/esiones/chat LIST POST ************* . . . . . . . . . . . . . . . . . . . GET ************* LIST POST ************* . . . . . . . . . . . . . . . . . . . Un evento por mensaje, no uno por petición. "Abrieron el hilo" no es un respuesta a "fue divulgado este individuo", y los ids de mensaje son ya en el sitio de cada call, por lo que una fila en forma de petición habría sido un elección en lugar de una limitación. El hilo lee registros DESPUES del filtro mudo, Así que una fila significa un cuerpo que llamó en realidad fue entregado. La lista de chat está en el alcance porque cada fila lleva hasta 140 caracteres de la el último mensaje de hilo que es contenido, no metadatos. Filas con un preestreno vacío No grabes nada. Deliberadamente NO registrado: conteos no leídos, presencia, último visto, mecscribiendo, leído recibos, listas de miembros de sesión, mudos, detalle de ticket (metadatos más estado historia, sin órganos) y apoyo a los agregados de presentación de informes. Un rastro sólo es útil si un fila significa que alguien vio contenido; filas que no representan nada enterran las que lo hacen. Las negativas se registran también, contra el hilo guid. No hay mensaje id todavía en el punto de denegación, y las reiteradas negativas contra los guidos de hilo es la forma La segunción sí. Un lector no autentticado se atribuye a un org centinela en vez de La grabadora rechaza eventos inatribuibles, y eso es el más interesante evento que este sendero puede sostener. La IP cliente viene de X-Forwarded-For con RemoteAddr como revolver . todo Llega vía Traefik, tan remota soloAddr registra la vaina de entrada. Chat público toma un segundo salto a través de APIService, que establece X-Fored-For al visitante dirección y mueve el Usuario-Agente de Usuario a X-Original-User-Agent, por lo que el El auditor prefiere esa cabecera; el literal Usuario-Agente en ese salto es de APIService propio cliente HTTP e no identifica a nadie. Las lecturas de visitantes se atribuyen al org de X-Public-Chat-Org-Id sin id miembro: un visitante no tiene identidad de miembro de propia, pero la org posee los registros, por lo que la lectura se mantiene atribuible. Identificadores solamente, nunca envíen texto. Un rastro de auditoría que reproduce el mensaje Sólo ha copiado el PHI en la corriente de registro. También completa eed3817, que barrió esta obra en medio de la editar y dejó MediaController la referencia a PhiAccessKind antes de la importación, que la revisión no se refiere compilar. Este lo hace: la prueba mvn -o es 16/16 de verde.

  13. · DocsService

    Registro acceso byte en las cuatro rutas de documentos que no registraron nada

    /download ya registrado a través de ******************* y era el el único lugar de inyección de acceso a byte. Los endpoints hermanos sirven a la exactos bytes /stream, /bulk-download, la plantilla convertida-PDF y la la miniatura de la página de plantilla no grabó nada, por lo que cualquiera que quisiera el documento bytes sin dejar rastro sólo tuvo que elegir una URL diferente. Los cuatro emiten ahora un PhiAccessEvent en el punto de acceso se ha verificado y la Los bytes están a punto de ser servidos. La descarga a granel emite un evento por documento en lugar de uno por solicitud. "Ellos exportar 400 documentos" no es una respuesta a "fue el registro de este individuo revelados", y las filas por documento son las que hacen que eso responda seis años después inferior a 164.528. Client IP viene de X-Forwarded-For con remoteAddr como repositor: cada solicitud llega a través de Traefik, tan remota solo Addr grabaría la vaina de entrada para Cada acceso y no valga la pena para la detección. Un intento poco autenticado se atribuye a una organización centenera en lugar de la grabadora rechaza eventos no atribuibles, y una solicitud de documento bytes sin sesión es exactamente el evento que vale la pena mantener. Esto se encuentra junto a las filas existentes de ImgLogDownload en lugar de reemplazarlas: esos son registros de dominio de imágenes, esta es la pista de la superficie cruzada de una contabilidad de Las revelaciones se ensamblan desde. Nota ImgLogService, que lee esas filas, todavía tiene cero llamadas en cualquier parte de la plataforma.

  14. · KlusterServices

    Contienen egresos del avatar; anotan la piscina de desahucio de Redis

    SecurityService ahora dirige un buscador cuya URL de destino es elegida por un no desconfiado partido - un registro BIMI es contenido DNS publicado por quien sea dueño de un dominio de envío, y cualquiera se convierte en un dominio de envío enviando correos electrónicos a un inquilino. Nada en este grupo limitada a dónde podría ir tal petición: Redis responde sin autenhenticado al 6379, MinIO en 9000 con credenciales de raíz, CockroachDB en 26257, y los metadatos de nodos endpoint es accesible desde cualquier vaina. El solucionador hace cumplir sus propios controles en código, y los que se quedan en las primarias defensa porque son la única capa que entiende la reencuadernación del DNS. Esto es el segundo, por lo que un error todavía no puede llegar a una dirección privada. Deliberadamente permite la mayoría en lugar de permitir la lista. Estos servicios alcanzan legítimamente anfitriones, por lo que enumerar destinos sería inmanejable y se rompería En silencio. En su lugar permite el Internet público con todos los rangos privados exceptuados, Luego vuelve apermitir los puertos específicos en el lugar de los grupos realmente necesarios. Alcance de las vainas que realizar las capturas no desconfiadas. Aplicarlo en todo el espacio se cortaría servicios cuya salida nunca ha sido auditada. El cambio de Redis es un comentario y un bache de bases de datos, no un cambio de comportamiento. Es registra por qué el remitente-valla tienda sólo cadenas de metadatos cortos: maxmemory 2gb con todos los permisos-lru desaloja en toda la instancia, y DB 0 tiene cada en vivo sesión, para que una caché de byte a granel aquí firmaría a los usuarios al azar bajo presión y ser mal diagnosticado durante días.

  15. · kamo-internal

    Mostrar fotos de remitente y destinatario

    El buzón hizo una sola carta en un solo gradiente compartido para todos, así que cada fila se veía igual y el círculo no llevaba información. Ahora muestra el la foto real del corresponsal cuando se conoce a uno, y un monograma de dos letras cuando No lo es. Un SenderAvatar reemplaza siete círculos iniciales enrollados a mano. Eso importaba. más que consistencia: cada uno llevaba su propia idea de cómo dividir una dirección, y el abatar caché está en la división, por lo que cualquier desacuerdo entre la lista y el panel de lectura reduciría silenciosamente a la mitad el ritmo de éxito y mostraría a la misma persona dos diferentes maneras en una pantalla. parseDireress es ahora el único lugar un RFC 5322 La dirección está desmontada. La lista y las vistas de hilos también dejan de imprimir cabeceras en bruto como "Jane Doe, Jane-acme.com" y muestra el nombre. La identidad vive en su propia tienda tecla por dirección, nunca en los objetos de mensaje. Ambas listas ven la encuesta cada 30s y en cada notificación de websocket, cada vez sustituir su matriz de mensajes al por mayor de la red de mensajes. borrado dos veces por minuto, para que una bandeja inboxeada parpadeaba fotos a monograma y de vuelta - Para siempre. La clave por dirección también significa que una respuesta tardía no puede pintar la fila equivocada, porque las filas no son lo que está llave. Las peticiones se vuelven coaleadas en un lote por pantalla: cincuenta filas pidiendo independientemente serían cincuenta peticiones, y ya que cada llamada a este servicio vacía una clave de una sola vez, En realidad cien. Una falta se vuelve a preguntar una vez después de los 45, porque el lado del servidor La resolución es en dos fases y una dirección desconocida se responde sólo en una llamada posterior. ConversationListView está virtualizado. Consiguió 50 filas por página y se vuelve a presentar todos ellos dentro de una AnimatePresencia con un escalofrésped por índice en cada encuesta; La adición de una imagen a cada uno la convirtió en la superficie más pesada del buzón. Los remitentes de no-respon y correo-daemon put get un punto neutro en lugar de un monograma a La cara junto a un aviso de rebote es activamente engañosa. Las fotos son decorativas (alt="") porque el nombre siempre es texto visible a su lado, y lleva referrrpolicy="no-referrer" por lo que un identificador de hilos nunca llega a un host de imagen. Cada avatar se sirve desde nuestro propio origen, las imágenes de terceros son buscadas, servidor validado y re-hosted lado del servidor que es lo que permite la nueva petición per-request La política img-src se mantiene atento a los propios dominios del inquilino. Esa política está incorporada. el proxy en lugar de next.config porque esta plataforma está etiquetada en blanco: a La política estática tendría que nombrar a un inquilino y rompería imágenes para el resto. También cierra un vector de seguimiento-pixel almacenado preexistente, desde Contact.photoUrl es una URL de texto libre que se renderiza directamente en varios src. la imagen siguiente/imágena ya no acepta SVG remoto. Ese era un riesgo aceptable cuando el único SVGs eran nuestro propio logotipo de tema; no es ahora que la plataforma ingiere marcas publicado en DNS, tercero. Los que llaman dejan caer el ORG-ID de código duro = 1 y el parámetro de consulta orgId, que coinja con el cambio de backend que deriva el alquiler de la sesión.

  16. · EmailService

    Avatar endpoints; arreglar la accesibilidad no autenticticada y el alquiler de contacto

    Añade el buzón del buzón de los avatares remitentes, y arregla tres agujeros preexistentes esto De lo contrario, el trabajo se habría construido encima de. AUTHENTICATION. OTKPreAuthFilter solía rechazar un *malo* OTK pero trata *no* OTK como anónimo-y-perseado, cayendo directamente a través de la cadena de filtros - y el La cadena de Spring Security aquí es cualquier petición ().permitAll (). Cada buzón, contacto y el calendario fue, por lo tanto, legible por cualquier cosa que pudiera llegar a la ClusterIP. Los prefijos protegidos fracasan ahora cerrados. La solución vive en el filtro más bien que en la cadena de seguridad deliberadamente: remodelar la cadena tocaría treinta superficies no relacionadas a la vez, incluyendo dos servicios y los endpoints DAV. El la lista de entradas está el conjunto completo de puntos de entrada sin sesión genuinamente sin sesión CAN-SPAM enlace de exclusión, el objetivo de dirección OAuth donde el inquilino cabalga en el parámetro estado firmado, y las superficies de servidor a servidor que se autentifican con X-Internal-Auth. CONTACTO TENANCY. Cada endpoint de contactos tomó orgId como parámetro de consulta, o llegó a un libro por id sin control de propiedad en absoluto, así que cambiando un número en el URL lea los contactos de otro inquilino, nombres, números de teléfono, notas. El org ahora viene de la sesión y cada operación de libro o grupo-scoped prueba el objetivo le pertenece. Objetivos ausentes devuelvan 404 en lugar de 403, así que un identificador en No se confirma que exista otro inquilino. orgId sigue siendo aceptado en la lista de los dos Analistas e ignorados, para que los clientes no se rompan en el medio despliegue. Ese cambio también corrige un error silencioso: searchContacts derived orgId de bookId y pasado nulo cuando no se seleccionó ningún libro, en una consulta cuyo primer predicado es contactoBook.organization.id = :orgId. La búsqueda sin libro, por lo tanto, siempre devuelta nada que es exactamente como lo llama el autocompleto de correo. EMAILLOGOSERVICE. Consiguió una URL suministrada por el operador sin esquema ni dirección comprobar, y transcodificar el resultado en un Batik que resuelve las referencias externas por - default. Un logo SVG que contiene el sitio web ******************* han sido despreferenciados desde dentro del cúmulo. Ahora vigilado en ambos extremos. MESSAGEINDEXER. resoluciónMemberIdFromEmail tiró de la mesa de los miembros entera montón y lo filtró en Java, una vez por mensaje indexado, en una cápsula de 1Gi - el código lo ha dicho en un TODO. Mismo semántico, una consulta indexada. La superficie del avatar es un endpoint por lotes en lugar de un campo en el mensaje DTO. Ambas listas consultan encuesta cada 30 y reemplazan su matriz de mensajes al por mayor, para que un avatar llevado en un mensaje fuera borrado dos veces por minuto y la IU flicker forever; y EmailMessage es compartido por la lista de carpetas, leyendo pane, vista de hilo y búsqueda, por lo que cambiar su forma los tocaría a todos a la vez. El directorio-foto endpoint es servidor-a-servidor sólo expuesto a un navegador. sería un órúreo de enumeración para el inquilino.

  17. · SecurityService

    Cadena de resolución Sender-avatar para el buzón

    Resuelve la dirección de correo electrónico de un corresponsal a una foto, trabajando hacia afuera de lo que Kamo ya lo sabe: foto de miembro, luego una foto alguien apegado a un contacto, entonces el directorio Microsoft/Google conectado del inquilino, luego el dominio del remitente BIMI marca, luego su favicon, luego Gravatar. Cualquier cosa sin resolver lo hace un monograma, por lo que la cadena siempre termina localmente. El nivel del directorio vale la pena llamar: los flujos de conexión aquí ya solicitan admin.directory.user (Google) y Usuario.ReadWrite.Todo . Directorio.Todo (Microsoft) junto con los alcances de correo, por lo que para Workspace y 365 inquilinos esto devuelve fotos autorizadas sin re-consentimiento y sin tercera persona involucrada. Es debe vencer cualquier cosa en el internet público y por lo general. Dos fases, nunca una. Una petición lee sólo caché; las incógnitas van a un límite trabajador con descarciadoPolicy - a la tarea desbordada en el llamante entregaría un solicitud de hilo a un tercero anfitrión, y una resolución descartada no cuesta nada porque la próxima encuesta vuelve a preguntar. Una cadena de falta completa es DNS más cuatro llamadas HTTP, y una página lleva docenas de direcciones; nada sobre abrir una carpeta puede depender sobre la disponibilidad de terceros. El desacoplamiento también evita correlacionarse la resolución con un humano abriendo un mensaje, lo que haría un recibo de lectura. comportamiento el buzón ya bloquea por defecto para imágenes remotas. Este es el primer buscador de la plataforma cuya URL de destino es elegida por un no desconfiado Parte: un registro de BIMI es el contenido de DNS publicado por quien sea dueño de un dominio de envío, y cualquiera se convierte en un dominio de envío enviando correos electrónicos a un inquilino. No hay salida NetworkPolicy y sin proxy hacia adelante, por lo que los controles están en código. SafeImageFetcher pines DNS - una resolución personalizada manos OkHttp sólo las direcciones que pasaron PublicHostGuard, cerrando la ventana de reencuadernación que derrota a un ingenuo prevuelo comprobar los rechaces de redirecciones, tapones bytes a medida que fluye en lugar de confiar en Content-Length, y requiere un contenido de imagen tipo. SvgSanitizer analiza y re-serializa contra una lista de autorización en lugar de rasterizando. Batik 1.17 resuelve recursos externos por defecto, por lo que entregárselo a El advertido SVG despreciaría la imagen **************** de dentro del racimo después de la comprobación de URL ya pasada. El pequeño perfil de PS Prohibir eso es una declaración sobre la conformidad de los archivos, no sobre bytes cotched de la URL de un atacante. Proveedor de la semántica son todos diferentes y todos los envenenamientos por caché si se tratan como hits: A Gravatar se le pregunta con d=404 porque cada otro default devuelve 200 con un lugarholder; El no-match de Google es un 404 llevando un globo de byte-idéntico, por lo que lo es rechazado por el hash de contenido; DuckDuckGo devuelve 404 con un cuerpo de imagen real, así que El estatus decide. Bytes se rep-hosted bajo un nombre aleatorio nunca uno derivado de la dirección, que permitiría a cualquiera sondear si una persona dada se corresponde con esta plataforma y servida a través de una ruta autenticada. Redis tiene metadatos solamente. Esa instancia es de 2GB con todokeys-lru en un vacíaDir, compartir un espacio clave con cada sesión en vivo; el chasquido de imágenes de bytes allí se desalojaría sesiones y señalizar a los usuarios al azar.

  18. · kamo-shared-library

    Modelo de identidad del remitente . org-scoped correo electrónico de correo electrónico por lotes

    Tienda de apoyo y consultas para la cadena de remitente-avatar de buzón. SenderIdentityEntity es el nivel duradero de la caché de avatar. org. .id es parte de la clave natural en lugar de la decoración: USERS.EMAIL es único sólo por seguridad proveedor, por lo que una respuesta derivada de los datos de los inquilinos no debe ser visible para otro inquilino. Las respuestas de los niveles externos (BIMI/favicon/Gravatar) son realmente globales y acciones un org centenel para que cada inquilino comparta la tasa de golpe. Las señorías se almacenan como filas, no ausencias sin eso, cada remitente irresoluble vuelve a correr el todo cadena de proveedores en cada encuesta de bandeja de entrada. OrgAvatarSettingsEntity divide la cadena por lo que realmente sale del edificio. El nivel de identidad falla OFF porque revela un resumen de un corresponsal Dirección completa a un tercero, que sobre una CRM de préstamos es una decisión sobre una identificador de prestatario en lugar de una preferencia de visualización. Las adiciones del repositorio existen porque nada de esto era accesible antes: - ContactEmailRepository no tenía vista previa por dirección en todos. para el autocompletar, por lo que un contacto que tenía una foto no se pudo resolver desde a De: cabecera. - Los buscadores de lotes de miembros/Usuarios son org-scoped y toman entradas pre-baubres. LOWER() se aplica sólo a la columna almacenada; los correos electrónicos se perseveran literalmente (EmbEmail no tiene normalizador) y la igualdad de CockroachDB es sensible a los casos. - Las proyecciones de avatar-id vuelven ids en lugar de entidades a propósito. Ambos Miembro.avatar y User.avatar son asociaciones perezosas en una jerarquía JOINED: una persona que se llama fuera de una transacción recibe LazyInitializationException, y una dentro consigue un proxy de tipo base que nunca se estrecha a AvatarPhoto, poniendo el archivo extensión necesaria para construir la URL fuera de alcance. - **************** reemplace un findAll() escaneo de mesa completa que se corrió una vez por mensaje indexado. PublicHostGuard es compartido en lugar de duplicado porque es una seguridad control: decide si una dirección es alguna parte en la que enviaremos una solicitud que un partido desconfiado eligió. Probado contra las técnicas de bypass reales. IPv4-mapped IPv6, 6 a4, NAT64, CGNAT y metadatos locales de enlace. Derecha 177 puertas la decisión de divulgación.

  19. · kamo-shared-library

    Espina de auditoría para acceso PHI - 164.312 (b)

    La Regla de Seguridad requiere registrar el acceso a ePHI, lo que significa que se lee. El registros de la plataforma cambian bien - Historial de plomo, SystemAccessLog, Historial de Usuario, LoanAuditEvent y lee casi en ninguna parte, por eso "quién vio este disco" Actualmente es incontestable. Esta es también la primera pregunta de una infracción de 164.402 libras. la evaluación pregunta, por lo que esta única brecha bloquea tanto el control de la auditoría como el de cuatro factores análisis. Captura solamente; sin esquema. La tienda duradera se encuentra detrás de PhiAccessLogWriter así que Los sitios de llamadas se pueden cablear ahora y el fregadero puede evolucionar. Adentro-sólo con una cadena de hachís, luego una exportación firmada para el almacenamiento bloqueado por objeto. sin volver a pasar por cientos de sitios de llamadas. Dos propiedades llevan el peso: - El mal manejo pertenece al tipo de acceso, no al que llama. EXPORT, DOWNLOAD y DISCLOSE falla cerrado: una exportación a granel desenganchada es exactamente el evento que usted no se puede reconstruir después, y "servimos los datos pero perdimos el registro" es la peor respuesta para dar a un investigador. VIEW, LIST y Búsqueda fracasan abiertas y log fuerte, porque perder una línea no vale la pena derribar el producto. Eso la asimetría es deliberada y quiere firmar en lugar de asumir. Llamadas bajo presión resuelven las cuestiones de política en cualquier dirección las desbloquea, así que la política no está en el lugar de la llamada. - Una lectura negada sigue siendo una lectura. Se registran intentos desprendidos, porque el acceso patrón de alguien que está sondeando registros que no puede alcanzar es lo que la detección necesita y es invisible si sólo se registran éxitos. Seguridad de inicio, que casi salió mal: PhiAccessRecorder es un "Component" y cada componente de servicio-escaba com.kamo, tan difícil dependencia de un frijol escritor habría fallado el inicio de contexto en 40 servicios a la vez, una plataforma entera Apagón de una función que nada había llamado. La primera solución, una configuración con ConditionalOn MisssingBean, no funciona: la configuración escaneada de componentes es un procesado junto con la configuración del usuario en lugar de después de él, por lo que ambos escritores registrar y la inyección falla en la ambiguedad. PhiAuditContextWiringTest atrincó eso. El retroceso ahora vive en la grabadora a través de ObjectProvider.getIfUnique, donde no Existe una pregunta de pedido, y los escritores ambiguos se degradan al default en lugar de Fallo de la puesta en marcha. El escritor predeterminado de Slf4j es un punto de partida, no el destino y las líneas de registro son no ser evidente y la retención es de 14 días contra una obligación de seis años. Es existe para que el cableado del sitio de llamadas no espere en la tienda. Los identificadores están registrados, el contenido nunca lo es: una pista de auditoría que reproduce el récord que audita acaba de Movió el PHI en el flujo de registro.

  20. · SecurityService

    403 en lugar de 500 cuando se niega la frontera de cumplimiento

    Dos sitios de llamadas de característicasService.enableLa naturaleza ahora entiende el límite HIPAA: - / mapas habilitados PhiModuleNotPermitidoExcepción a 403 llevando la razón, reflejando el manejo de AppliedModelViolationException directamente por encima de él. Sin Esto la amplia captura de abajo convirtió una negativa deliberada de política en un 500. - El bucle automático en la ruta de listado pre-checks con isPhiPermitted y Salteos. Corre sobre cada ServiceType completado mientras simplemente *listing* an Características de la organización, así que tirar en el primer módulo bloqueado habría hecho las características de la página descargable para un inquilino de PHI en lugar de ocultar una entrada. Inerte hoy en día. Cada organización es mangoPhi=false.

  21. · kamo-shared-library

    Aplicar el límite de cumplimiento en el interruptor de la función

    Wires PhiTenantGuard en FeatureService, el único punto de estrangulamiento a través del cual un El módulo se enciende para una organización. Aquí es donde la frontera deja de ser una política objetiva y empieza a ser la aplicación. Ambas mitades, porque cualquiera de las dos solas deja un huevo: - enableFeature lanza PhiModuleNotPermittedException, por lo que un inquilino de PHI no puede Enciende un módulo Kamo no puede apoyarse como socio de negocios. - isFeatureEnabled(Organization, ServiceType) informa de un módulo deshabilitado siempre el inquilino maneja PHI y el módulo está fuera del límite, sea cual sea el OrgFeature row dice. La fila puede decir legítimamente activa. antes de que el inquilino se convirtió en un inquilino de PHI, y habilitarFeature no vuelve a funcionar esa transición. esPhiPermitted es la forma de no tirar para los que llaman que iteran. CaracteristaController auto-encables cada función completada mientras *listing*, así que un lanzamiento en el primero El módulo bloqueado fallaría toda la página de características en lugar de saltarse una entrada. PhiServiceTypeMapping une ServiceType a PhiModule y es total, con una prueba que falla la construcción sobre cualquier valor sin tapujos. Esa prueba le valió la primera vez Correr: atrapó ServiceType.STORAGE, que un gruñido de la enum había perdido, y luego AI-CHAT, DOC-MANAGER, DOCS-EDITOR y DOC-CLASSIFIER. Sin él, cinco servicios tipos habrían estado en silencio fuera de la frontera. El constructor de PhiModule se cierra, reintrodució una capa. Nuevos módulos para los tipos de servicio previamente desmapeado, cada uno con un disposición: almacenamiento de objetos, editor de documentos y clasificador, tickets de apoyo, HR, inventario, legal, calculadora y pienso de actividad están dentro; casa club y juegos son BLOCKED-PENDING-WORK con el argumento de que no han sido evaluados, lo cual es un razón para bloquear en lugar de asumir. Cada organización se manejaPhi=false hoy, así que esto no cambia ningún comportamiento en la producción. Se vuelve cargante en el momento en que el primer inquilino está marcado.

  22. · kamo-shared-library

    Auto-asignar un número de préstamo compatible con MERS en la creación de aplicaciones

    LoanFile.loanNumber fue nulo en creación (tanto decre en blanco como de plomo-promoto) y sólo se establece cuando un mayordomo mecanografió uno que bloqueó duro MERS MIN acuñando (un segmento de 10 dígitos de MIN ES el número de préstamo) y cada aguas abajo identificador de un préstamo originario de cabeza. AppMortgageService ahora asigna un número de préstamo en ambos sitios de creación: un limpio numérico de 10 dígitos (MinMinter tira sin dígitos y necesita un segmento de 10 dígitos, por lo que una numeria pura es la única forma segura), única por org a través de la Indice de (orgánid, préstamo-número) con un replique limitado. Presuntamente se abre a la anulación en un raya de colisión o un repo no disponible degradar al manual anterior comportamiento en lugar de romper nunca la creación de aplicaciones. Un prestamista-suministrado El número sigue anulando a través de la ruta de parche de préstamo. Sin cambio de esquema (el la columna ya existe, indexada).

  23. · kamo-signer-monorepo

    Fechas de señalización en la zona horaria resuelta del destinatario

    SigningSession gana un requerido "timeZone" (IANA id) que ESigService resuelve de la zona de miembro del destinatario, luego de la org, luego de UTC. BienvenidoScreen ahora lo pasa explícitamente a la forma de salida, por lo que la fecha de caducidad no depende de la Configuración del dispositivo del espesor ni el predeterminado UTC del proveedor. Hacer el campo requerido en lugar de opcional atcogió el único sitio de construcción de sesión literal (preview.ts) a tiempo de compilación. También: - llamada setRequestLocale en el diseño local para que las traducciones se unen a la URL segmento en lugar de confiar en la cabecera de middleware solo - afirmar en el Dockerfile que los mensajes/ sobrevivieron a la cirune de .turbo, y documentar por qué .dockerignore debe mantener .gitignore fuera del contexto de construcción; sin eso El acoplamiento de la poda deja caer las traducciones y las naves de imagen que hacen llaves crudas sin nada que fallar hasta que un firmante abra el documento

  24. · ESigService

    Resolver la zona de tiempo de visualización del miembro, luego org

    Las fechas de firma se entregaron en cualquier zona a la que el cliente falló, así que un Sobre que vence 2026-08-03T05:00Z podría leer "Ago 3" a un firmante del Pacífico para quien el enlace ya está muerto en la noche del 2 de agosto. SigningSession ahora lleva un servidor IANA timeZone: el destinatario's miembro.timezona cuando es miembro y se ha fijado uno, de lo contrario el envío Organization.timezone, de lo contrario UTC. SignerZone es un solucionador puro con pruebas, incluyendo uno que afirma que cada TimezoneType mapea a su propia zonaId así que un nuevo valor enum no puede enviar un RangeError del lado del cliente. También corrigió SigningSession.locale, que emitió el nombre enum ("SPANISH") en lugar del código BCP-47 ("es") utilizado en el segmento local de la URL de la dirección de firma.

  25. · InitializerService

    Crea HANDLES-PHI y PHI-EFFECTIVE-DATE en orgs

    Espeja los dos nuevos campos de la Organización, tras la OrgBrandingFieldsMigration convención, por lo que las columnas son reproducibles en cualquier medio ambiente en lugar de sólo existir donde un pase de ddl-auto corrió. HANDLES-PHI NO es NULL DEFAULT FALSE por lo que los inquilinos existentes están explícitamente fuera la frontera de cumplimiento. PHI-EFFECTIVE-DATE es TIMESTAMP, no TIMESTAMPTZ, porque el campo de la entidad es un localDateTime. La prueba es una guardia de deriva, no una reafirmación: lee los nombres de la columna de la entidad por reflexión y falla la construcción cuando un campo de entidad no tiene ALTER. Eso es el modo de fracaso real de esta convención - alguien añade un campo, olvida el migración, y con ddl-auto:none en los servicios que sale a la superficie como una producción error de consulta en lugar de en el momento de la construcción. Verificado por mutación: extirpándose el PHI-EFFECTIVE-DATE ALTER hace que fracase con el mensaje accionable, restareciéndolo se vuelve verde. Ambas columnas ya están presentes en el cúmulo; estos ALTER son idempotentes.

  26. · kamo-shared-library

    Mango PersistaPhi y phiEffectiveDate on Organization

    Backs PhiTenantGuard con una columna real. HANDLES-PHI NO es NULL DEFAULT FALSE siguiendo el patrón ****************, por lo que cada inquilino existente está explícitamente fuera de la frontera de cumplimiento en lugar de en silencio dentro de ella. PHI-EFFECTIVE-DATE ve una evaluación de incumplimiento y una obligación de retención con la ventana derecha "desde cuándo" es la primera pregunta hecha después de "qué fue expuesto". Convertir a la política con **************** El guardia mantenerse libre de la entidad, por lo que un llamante sólo celebraba una bandera acalada en sesión no tiene que cargar una fila. Seguro para empujar: ambas columnas ya existen en el cúmulo y cada una de las 12 organizaciones lee falso. Verificado en contra de la información. Schema antes de aterrizar handles.phi boolean NOT NULL DEFAULT false, phi-effective-date timestamp NULL. Véase la migración KamoInitiializer para la forma reproducible.

  27. · kamo-shared-library

    PhiTenantGuard y el límite de cumplimiento del módulo

    La piedra angular del límite de cumplimiento de la HIPAA: qué módulos pueden llegar a un inquilino, dado que ese inquilino maneja información de salud protegida. Todo las llaves aguas abajo de la misma - qué integraciones están deshabilitadas, si el MFA es forzado, qué sesiones obtienen el tiempo de espera más estricto, lo que la columna vertebral de auditoría debe cubrir. No lleva a la dependencia de esquemas. Un intento anterior colgó esto de nuevo Organización.handles Columna de Philip y tuvo que ser revertido: servicio CI clones lablibiría compartida principal en el momento de la construcción mientras KamoInitializer se ejecuta a mano, así que un La columna de la entidad en la principal rompe el siguiente servicio se despliega hasta que alguien migra. La disociación de la política de la entidad significa que aterriza y se puede hacer cumplir ahora, y la columna se convierte en un paso independiente. Tres propiedades que el diseño se construye alrededor de: - Fallece cerrado. El constructor de PhiModule requiere una PhiDisposición y una razón, por lo que un módulo añadido más tarde no puede heredar el permiso por omisión - no compilar sin una decisión, y cualquier otra cosa que no sea PERMITTED niega. Eso es el modo de falla que tiene que sobrevivir un límite de cumplimiento: un módulo nave, nadie piensa en PHI, una clínica comienza a usarlo. - Un inquilino sin resolver no es un inquilino seguro. El guardia toma un triestado PhiTenantStatus en lugar de booleano, por lo que "no podía cargar la organización" no se puede delecrillar de la misma manera que "esta organización no es PHI". Con un boolean, la ruta de error es Permitido (falso, ...) - fácil de alcanzar, imposible de detectar en la revisión. UNKNOWN lo niega todo. - No hay nada que elevar. La decisión es una función pura de (estatuto, módulo) sin llamar, sesión, parámetro de la derecha o de Dios. "Nuestro personal de apoyo puede convertirlo "es la respuesta que falla la revisión de una entidad cubierta. Las posiciones siguen el análisis de alcance en kamo-internal ******************* Permiso: CRM, contactos, bóveda de documentos, Correo electrónico auto-anfijado, e-sign, notas, tareas, calendario, chat interno, el en-cluster Transcripción/apiladora de traducción, MLOS. Bloqueado sin obtenible BAA: social mensajería, Canva, sincronización de comercio electrónico, pasarela MCP. Bloqueado a la espera de trabajo nombrado: el Enrador de IA, búsqueda de RAG, grabaciones de reuniones, grabaciones de VOIP, campañas de marketing, la exportación analítica. Nada llama al guardia todavía, así que esto es inerto hasta que está conectado.

  28. · InitializerService

    Crea HANDLES-PHI y PHI-EFFECTIVE-DATE en orgs

    Espejos de los dos nuevos campos de la entidad de la Organización en la biblioteca compartida de kamo, siguiendo la convención de OrgBrandingFieldsMigration. HANDLES-PHI NO es NULL DEFAULT FALSE para que cada inquilino existente esté explícitamente fuera del cumplimiento límite en lugar de en silencio dentro de ella. PHI-EFFECTIVE-DATE es TIMESTAMP, no TIMESTAMPTZ, porque el campo de la entidad es un Hora de Tartaje local. SEQUENCING - esto necesita funcionar antes del próximo despliegue de servicio. Alfiler de servicios liberta-libria compartida de kamo en una versión fija que se republica en su lugar, por lo que el primero servicio para reconstruir después de ese cambio de biblioteca comienza a seleccionar estas columnas, y con ddl-auto:one en los servicios que fracasan hasta que este corredor ha ejecutado. La prueba de acompañamiento es una guardia de deriva, no una reafirmación: lee la columna nombres de la entidad por reflexión y quiebra la construcción si un campo de entidad no tiene ALTER. Ese es el modo de fracaso que tiene toda la convención. olvida la migración, y aparece como un error de consulta de producción en lugar de Construye el tiempo. Verificado por mutación: eliminar el ALTER PHI-EFFECTIVE-DATE lo hace fracasar con el mensaje accionable, restaurarlo se vuelve verde.

  29. · ESigService

    Emita el segmento local de firmantes en la firma de enlaces

    Extrae el byte-for-byte duplicado buildSignLink into SignLinkder y añade un segmento local de origen de Organización.language, que cae volver al inglés para los cuatro valores de LanguageType sin traducciones. Requiere que el kamo-signer /-locale/ ruta se despliegue primero.

  30. · kamo-shared-library

    Añadir las mangosPhi bandera del inquilino y PhiTenantGuard

    La piedra angular del límite de cumplimiento de HIPAA: una bandera por organización más un guardia decidir a qué módulos puede llegar esa organización. Todo aguas abajo las llaves de ello - qué integraciones están deshabilitadas, si se obliga a MFA, que sesiones tienen el tiempo fuera más estricto, lo que la columna vertebral de auditoría tiene que cubrir. Organización gana HANDLES-PHI (BOOL DEFAULT FALSE) y PHI-EFFECTIVE-DATE, siguiendo el patrón existente ****************. Falleces falsos, por lo que esto es inerte para la hipoteca existente y el libro de CRM. Tres propiedades que el diseño se construye alrededor de: - Fallece cerrado. El constructor de PhiModule requiere una PhiDisposición y una razón, por lo que un módulo añadido más tarde no puede heredar el permiso por omisión. compilar sin una decisión, y cualquier otra cosa que no sea PERMITTED niega. Eso es el modo de falla específico que un límite de cumplimiento tenga que sobrevivir: un módulo de buques, Nadie piensa en PHI, una clínica empieza a usarlo. - No desfasurable. La decisión es una función pura de (organización, módulo) con sin llamar, sesión, parámetro correcto o de modo dios, así que no hay nada que Eleva. "Nuestro personal de apoyo puede apagarlo" es la respuesta que falla una cobertura Revisión de la entidad. - Las negaciones llevan una razón, porque un "neited" desnudo no es utilizable por un apoyo ingeniero o cliente. Las posiciones siguen el análisis de análisis en kamo-internal **************** hoy: CRM, contactos, documento bóveda, correo electrónico auto-anfitrión, e-sign, notas, tareas, calendario, chat interno, el en-cluster transcripción/pilar de traducción, y MLOS. Bloqueado sin obtener BAA: mensajería social, Canva, sincronización del comercio electrónico, pasarela MCP. Bloqueado pendiente de nombre trabajo: el router de IA, búsqueda de RAG, grabaciones de reuniones, grabaciones VOIP, marketing campañas, exportación analítica. Nota de esquema: HANDLES-PHI y PHI-EFFECTIVE-DATE se materializan en el siguiente KamoInitializer run, después de que CI publique esta construcción de la biblioteca compartida. Nada lee la bandera aún, así que el pedido es seguro.

Tu universo está esperando.

Comience gratis en minutos y agregue productos cuando esté listo, sin migración ni nuevos inicios de sesión.

Gratis para siempre: no se requiere tarjeta de crédito