Changelog
Ce qui est nouveau.
Chaque amélioration apportée à la plateforme, à mesure qu'elle est livrée.
· SecurityService
Retransmission de la passerelle pour promouvoir un bulletin révisé
M Fermeture de catalyseur/crémence de la bulletine, miroir de promotion-guide (porte guet éligible, org server-stangé). Promouvoir intégréBulletin dans le test des points d'extrémité non gardés (garde déléguée, comme ses 14 frères et sœurs).
· SecurityService
Persist SecurityService PHI accalbum jusqu'à phi-access-log
La piste '164.312(b) était allée à Slf4jPhiAccessLogWriter: plate-forme de 14 jours le maintien d'une obligation de six ans, et rien qui puisse être interrogé. Le les lectures de départ et les exportations CSV/HMDA de ce service sont les accès a La comptabilisation de 164,528 dollars est assemblée à partir de, de sorte que la piste doit survivre dans un tableau. Echanges de disques en JpaPhiAccessLogWriter via un haricot PhiAccessRecorder passe ObjectProvider.getIfUnique - pas de site d'appel dans PhiAccessAuditor change. Le contrepartie de l'entrée de l'audit com.kamo.zshared.phi. ce même engagement: le haricot ne peut être construit sans le dépôt, et déclarer l'un sans l'autre est ce que CrashLooped login plus tôt aujourd'hui.
· kamo-login
Compléter une connexion qui s'est arrêtée au deuxième facteur
SecurityService relie désormais la connexion à un deuxième facteur (- 164,312(d)). Quand on est qui lui a créé la session, mais retient sa clé unique, en retournant une Un mot de défi de courte durée à la place - une session que personne n'a d'OTK pour est inatteignable. Ce BFF s'attendait à un oneTimeKey inconditionnellement, de sorte qu'un défi de l'AMF est tombé dans la branche "pas de clé de session reçue" et est venue à l'utilisateur en tant que 500. Il est maintenant reconnaît le défi et passe mfaRequired/mfaToken au client. /api/login/mfa le complète. À partir de l'OTK, il remue la connexion existante l'envoi de l'itinéraire mot et résolution à partir de Redis, des biscuits clairs, définir le nouveau, parce que deux mises en œuvre de la session dériveraient et celle utilisée Moins souvent serait celle qui pourrit. Un mauvais code retourne 401 avec mfaRequired toujours vrai et le même mfaToken: SecurityService ne consomme délibérément pas le défi en cas d'échec, de sorte que l'utilisateur réarime le code plutôt que le mot de passe. Force d'un nouveau mot de passe sur un La faute clé est la façon dont les gens finissent par désactiver l'AMF. Inerte jusqu'à ce que quelqu'un s'inscrive; personne n'en a.
· VOIPService
Persister la piste VOIP PHI à phi-access-log
Les enregistrements d'appel, l'audio de la messagerie vocale et les transcriptions ont été vérifiés dans le journal. qui maintient 14 jours contre une obligation de 164,528 ans et ne peut pas être interrogés par la ressource - donc "qui a écouté cet appel" est resté inexorablement même pendant son enregistrement. Câblage JpaPhiAccessLogWriter en tant qu'écrivain Le haricot déplace le repli Slf4j que PhiAccessRecorder résout par ObjectProvider.getIfUnique, donc les sites d'appel existants de CallRecordingAuditor sont les suivants: inchangé. Les navires d'entrée de l'Engille JpaRepositories dans ce même engagement par nécessité: Besoupçon PhiAccessLogRepository, et la liste de scan explicite est la seule chose qui le crée. Déclarer l'un sans l'autre échoue au démarrage du contexte.
· AIService
Persist AI conversation PHI accalum
Les conversations d'assistant stockées sont les moins en mesure de se permettre de payer un jour de 14 jours. flux de journal inquéliorable: le module se trouve en dehors de la limite de conformité, de sorte que Les demandes d'incitation concernant les emprunteurs persistent indéfiniment et une comptabilité de 164,528 dollars doit être assemblé à partir de cette piste exactement six ans plus tard. Défaut déjà fermé sur une écriture qu'il ne peut pas faire, ce qui signifie seulement quelque chose Une fois que l'écriture a atterri quelque part, elle est durable. Déclare le hayon JpaPhiAccessLogWriter et ajoute com.kamo.z.shared.phi.audit à «EnableJpaRepositories dans le même engagement». La bibliothèque quitte l'écrivain non annotés de sorte que les services de 40 dollars ne le construisent pas tous, ce qui fait le haricot et le haricot l'entrée de la numérisation une seule modification indivisible - le haricot seul feuilles PhiAccessLogRepository sans définition de haricots et CrashLoops le service.
· MediaService
Persist MediaService PHI piste d'accès à phi-access-log
Les lectures de messages de discussion ont été enregistrées via l'auteur par défaut de Slf4j, qui met la piste b) du montant de 164,312 b) dans un flux de log de 14 jours contre une rétention de six ans obligation - et laisse "qui lire cette conversation" inexorable, puisque un log flux ne peut pas être interrogé par un membre ou par une ressource. Le haricot JpaPhiAccessLogWriter et la compagnie de l'audit com.kamo.zshared.phi.audit EnableJpaRepositories se chargent délibérément ensemble: «ComponentScan("com.kamo") choisit la configuration, mais la liste du dépôt est explicite, donc le haricot sans la saisie de balayage, le PhiAccessLogRepository n'a pas de fèce et le contexte ne démarre pas. ChatMessageAccessAuditor n'a pas besoin de changement - PhiAccessRecorder résout son écrivain via ObjectProvider.getIfUnique, de sorte que l'écrivain de l'AJP se déplace le repli Slf4j sur chaque site d'appel existant.
· SecurityService
Injecter la clé de cryptage secret TOTP
Cartes de KAMO-FAMA-SECRET-KEY à la clé kamo.mfa.secret par la reliure décontractée de Spring, et est ce que MfaEnrollmentService utilise pour chiffrer les secrets TOTP stockés au repos. Sans lui, le service commence toujours - délibérément, de sorte que le déploiement du code et la configuration de la clé n'est pas une opération atomique sur l'ensemble de la plate-forme, mais l'inscription jette plutôt que d'écrire un secret de second facteur en clair. Que dégrade la fonctionnalité, jamais le service. Clé générée sur le lisier (32 octets aléatoires, base64) comme la clé secrète «mfa-enc-key»; la valeur n'existe qu'à Kubernetes et n'a jamais été imprimée ou engagée. En le faisant tourner invalide les inscriptions existantes, c'est pourquoi il s'agit de son propre secret plutôt que être plié en un pli existant.
· DocsService
Persister la piste d'audit de l'IPS de ce service vers la base de données
DocsService sert des octets de documents, donc sa trace est ce qu'une comptabilité de Les informations visées au paragraphe 164.528 sont en fait assemblées à partir de celles-ci. Il écrivait à un jour de 14 jours un flux de log contre une obligation de six ans, sans surface d'interrogation. Le haricot et les «Repositories » de l'EnableJpaRepositories sont en train de voir le même acte d'entrée délibérément. JpaPhiAccessLogWriter n'est pas annoté dans la bibliothèque précisément donc les services optent en un à la fois; déclarer le fève sans l'analyse correspondante est ce qui a pris chaque login sur la plate-forme plus tôt aujourd'hui, et séparant ces deux les éditer à travers les engagements reproduiraient exactement cet échec.
· kamo-shared-library
Trail d'audit durable et maintien de l'accès à l'IPH, appendice uniquement
Fait apparaître le paragraphe 114.312 b) à partir d'une ligne de connexion en preuve. La couche de capture a été câblée sur sept services pendant un certain temps, mais il a écrit via Slf4jPhiAccessLogWriter Rétention de 14 jours contre une obligation de six ans, et inquiéquence. Le contrôle était Sur le plan architectural et manifestement inutile. PhiAccessLog est applié uniquement: «Pempérez-le-démarrer la mutation des déchets, en raison d'une mutation de la perte de déchets» La piste d'audit que l'application peut éditer n'est pas une preuve. La moitié de la base de données (REVOKE) UPDATE/DELETE) fait partie de la migration KamoInitializer. Il porte des identifiants et ne se contente jamais, et un test affirme que l'entité n'a pas champ en forme de contenu. Une piste qui reproduit ce qu'elle vérifie s'est simplement déplacée le PHI dans une deuxième réserve - une qui, par conception, n'est jamais supprimée. JpaPhiAccessLogWriter n'est pas délibérément annoté en haricot. Chaque service component-scans com.kamo, donc un stéréotype ferait construire tout '40', et étant donné qu'il a besoin d'un référentiel chacun devrait alors ajouter ce paquet à son propre liste explicite de «EnableJpaRepositories» ou ne pas commencer. Cette erreur exacte a été prise chaque connexion sur la plate-forme plus tôt aujourd'hui. Un service qui souhaite un audit durable déclare le haricot et ajoute l'analyse; le reste maintient le Slf4j par défaut non affecté. SharedLibBeanSafetyTest impose cette application. Les champs sont tronqués plutôt que autorisés à jeter. En cas de défaillance d'accès à l'écoute L'exception refuse ici la lecture de l'utilisateur, donc un agent utilisateur pathologique ou 4KB perdre la ligne refuserait également un accès légitime - la couche d'audit ne doit jamais être la chose qui casse le produit. La table existe déjà dans le groupe (KamoInitializer fb89b3d), donc rien n'est armé.
· InitializerService
Créer la piste d'audit durable de 164,312(b)
Jusqu'à présent, l'accès à l'IPH n'était enregistré qu'à un flux de logarithme avec maintien de 14 jours. contre une obligation de six ans, et sans surface de requête. Comptabilité Les informations visées au paragraphe 164.528 sont des requêtes; stdout ne peut pas être interrogé. Les index sont choisis pour les trois questions réellement posées: tout ce qui touche un record, tout ce qu'un membre de la main-d'œuvre a touché dans une fenêtre, et tout dans un locataire dans une fenêtre (l'examen d'activité a) 1) ii)(D) du montant de 164.08(a)(A). REVOKE UPDATE/DELETE est la moitié de la base de données de l'appendice uniquement; l'entité est la moitié de l'application. Soit seul est faible - la garde de l'entité est court-circuité par un SQL brut, une subvention peut être ré-ajoutée, mais ensemble, l'application en cours d'exécution ne peut pas réécrire discrètement une ligne d'audit. Meilleur effort: CockroachDB permet à un propriétaire de table conserver des privilèges, de sorte qu'un échec est exploité plutôt qu'alotical. Tableau vérifié présent avec les 14 colonnes et les trois indices avant l'entité a été poussée, donc aucun service ne peut construire contre une cartographie sans tableau.
· kamo-shared-library
Monnaie, l'identifiant de prêt universel (ULI) et stocker l'org LEI
Ajoute l'HMDA ULI à l'exportation LAR. UliMinter construit l'ULI et l'org LEI(20) Numéro de prêt - deux chiffres de contrôle ISO 7064 MOD 97-10 (Mod97CheckDigit et IBAN algorithme, transcrit à partir de l'appendice C C 12 C3 du Rig C et fixé à l'encontre de son Exemple de travail, PAS la variante MERS Luhn). Nouvelle colonne Organisation.lei annulaire (KI-appliqué) avec un chemin d'écriture org-patch; HmdaLarService émet l'ULI lorsque le org a un LEI valide - un numéro de prêt, sinon DEGRADES au numéro de prêt à nu, de sorte qu'un ULI malformé que la plate-forme CFPB rejetterait n'est jamais écrite. Emdicteur de garantie de type type prend l'initiative UNIVERSAL-LOAN-IDENTIFIER (d'origine: org LEI et LoanFile.loanNumber et check).
· kamo-internal
Définir l'org LEI dans Company Info (active le HMDA ULI)
La carte d'entreprise Info acquiert un champ d'identification d'entité légale (20 carres, supérieure boed), envoyé par l'intermédiaire de l'organisme existant PUT et OrganizationController deserializes sur Organization.lei et OrganizationService l'applique. Avec un ensemble LEI, HmdaLarService emporte l'identifiant universel de prêt de l'emprunteur; sans un, se dégradent au nombre de prêts, donc c'est ce qui transforme l'ULI par org.
· kamo-internal
Promouvoir une version directrice ingérée à partir de la console
Pour un document source GUIDELINE, le panel d'ingestion montre un "Promouvoir comme perfide de la version directrice (étiquette de sélection et de révision du produit). La carte de la feuille de cadence est maintenant caché pour les documents de directives également. ingestionApi.promoteGuideline Postes à le nouveau relais.
· SecurityService
Relais de passerelle pour promouvoir une ligne directrice ingérée dans une version
M Fermeture de catalyseur/ventilation de l'obtention du client, promotion de la réalisation éligibilité: porte éligible dieu, serveur d'organisationId estampillé via write().
· kamo-register
Auto-login après vérification par e-mail via une clé unique
Quand /verify-email répond avec l'additif otk et autoLoginHost champs (rétroduite par SecurityService sur la première vérification), lien profond directement à l'adresse suivante: https://-host-/validate?otk-... utilisations par flux entrant - atterrissant le nouvel élément sur le domicile interne (FirstOrgCta) au lieu de les rebondir sur le formulaire de connexion pour un le réidentification et un troisième de l'article. - PostCompletionScreen (chemin de code et carte vérifiée): auto-session rediriger avec la redirection de la page de connexion conservée comme repli chaque fois que l'OTK est absent; l'incendie d'abord de l'événement vérifié par courrier électronique existant, plus un nouvel événement d'analyse d'auto-session sur le chemin OTK. /verification (chemin de liaison par courrier électronique): la réponse à la vérification du jeton est la celui qui porte l'OTK, de sorte qu'il redirige de la même manière; le registre onglet surveillant SSE maintient son repli de connexion (l'OTK est simple utiliser et vit dans l'onglet liaison). - registerApi: vérifier les appels désormais tapés comme VerifyEmailResponse.
· kamo-marketing
Phase 3-4 - convertir le trafic qui arrive déjà
- changelog (plus de 2 destinations) obtient un bloc de conversion; les carrières montrent l'état honnête d'exclusion - /s'adhégocier page : le plan de dépôt de l'état d'inscription a un terrain réel (a été un établissement de paiement 404) - prix: FindYourPlanQuiz, mid-page CTA, reassurance strip, répartition externe/interne CTA, Contacts d'entreprise utilise le thème de la vente (sujet a été simulé) - page d'accueil: expédition récemment retirée du véritable changelog, Caractéristiques/UseCases onward links, JumpToBar correspond aux sections réelles et aux offres - / Page du programme design-partner partenaires; about about à une section fondatrice/intégrée dans la section ouverte - SEO: tous les canoniques - www - URL de 200 unités de service préfixées par local; hreflang local et x-default sur le 4 modèles de programmation; non-traduction des lieux non indexés; sitemap loc/alternates fixed (en-es seulement); robots.txt abandonne le bloc de site JSON /calculateur; les métadonnées du blog lisent les traductions réelles (Tout de suite indexé précédemment indexé 'Article introuvable') - llms.txt/llms-full.txt: prix réels, URL estampillées UTM (les saisines de l'AI deviennent un canal mesuré) - la page d'intégration icewarp a été approfondie dans une véritable page d'accueil (l'entrée organique no 2);
· SecurityService
Mint auto-connexion OTK sur la première vérification par e-mail
Achèvement de la vérification des e-mails de l'assistant du registre (code à 6 chiffres ou lien e-mail) s'avère déjà la possession de la boîte de réception, mais le nouvel utilisateur était rebondit sur la page de connexion pour retotyper les identifiants et résoudre un tiers -. Réutiliser l'entrée en tant que primitive à la place: sur le PREMIER succès vérification, lorsque l'utilisateur vérifié détient une adhésion éligible dans leur g) de registre, la menthe, un équivalent de connexion PostAuth-Service et enveloppez-le dans le même usage unique 180s OTK qui la page /validate de kamo-internal est déjà consommée. - EmailVerificationService: vérifier les méthodes de retour maintenant VérificationRésultat (utilisateurId, première vérification) donc revérification un compte déjà vérifié (par exemple après un renvoi) ne peut jamais être retre-l'emroutré; solveRootDomain exposé à statique pour la résolution de l'hôte. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - l'adhésion inéligible (les conditions d'enregistrement/de l'équipe) redirection), domaine non résolu, configuration SSL de domaine personnalisé incomplet, ou Erreur - le succès de la vérification lui-même n'est jamais affecté. - /verify-email response gagne des champs otk additif et autoLoginHost; une forme inchangée lorsque la frappe est sautée.
· kamo-marketing
Modules de contenu connexes et reciblement de l'ACC sur les modèles programmatiques
Les solutions, les intégrations, les alternatives et les glossaires étaient organiques. sans objectifs: pas de liens internes liés et de CTA "Start free" pointant vers /prix au lieu de l'inscription. Nouveau bloc de contenu connexe partagé (modules de carte/pièce de piment) utilisant la liaison i18n ainsi la localisation est préservée; chaque lien connexe incendies encliquetant encliquetant avec le cible href en tant qu'élément d'événement. - Solutions : 3 à 4 entreprises de fabrication artisanale d'INDUSTRIE-CATÉGORIES plus 2 l'industrie copie des gouttes de nom. - Intégrations : 3 à 4 intégrations de la même catégorie, complétées pour les petites entreprises catégories; bande de blurb de conversion au-dessus du CTA du pied de page. - Alternatives: puces "constamment" pour les 8 autres concurrents, jusqu'à 2 les pages/solutions, le CTA final de l'angle de migration (commutateur de la touche), et une bande de flou de conversion. - Glossaire: conditions connexes remplies à 3-4 par le biais de la repli de la même catégorie plus a lien plein-glossaire. - Tous les CTA principaux sans démarrage sont maintenant touchés - avec cta-start-free / instrumentation de localisation; /tarification reste joignable en tant que Lien de prix de visualisation secondaire sur chaque modèle.
· SecurityService
Connexion de la porte sur le deuxième facteur
Complète l'AMF. Le noyau a atterri en kamo-shared-library; c'est le fil qui tourne Configuration stockée dans une porte réelle. La porte est petite parce que la logine avait déjà la bonne forme: elle crée le et le remet au client UNIQUEMENT comme clé à usage unique dans le corps de réponse - non Le cookie est placé à l'aide de la connexion. Donc tout le mécanisme est de retenir l'OTK jusqu'à la Un deuxième facteur est prouvé. Une session pour laquelle personne n'est OXYD est inaccessible, qui signifie que la création de session elle-même n'a pas besoin d'une intervention chirurgicale du tout. MfaChallengeService détient le «Id» sous un jeton opaque à usage unique, de 5 minutes. Le client ne reçoit jamais l'id de session, et le jeton est sans valeur sans code. À court terme: un état à moitié authentifié survit à un compromis de mot de passe. POST /api/security/mfa/challenge complète la connexion, libérant l'OTK de sorte que le Le client reprend exactement le flux qu'il aurait eu sans l'AMF. Un mauvais code ne libère rien et - délibérément - NE riscule pas le défi, parce que le forçage un utilisateur à travers le mot de passe sur une faute de frappe est la façon dont le MFA est désactivé. Le Le lock-out de l'inscription compte de ces défaillances. Un succès absorbe le défi. il ne peut pas être rejoué. Les codes de récupération le complètent également, et ne sont jamais aussi essayés comme a TOTP. Les critères d'inclusion (/souciance, /confirmer, /statuaire) nécessitent une session et l'inscription d'un facteur est une action authentifiée sur votre propre compte. non, parce que son appelant est intermédiaire par définition. INERT AUJOURD'HUI: la porte ne fait que l'incendie de hasConfirmedFactor, et personne n'est inscrit, donc le chemin de connexion existant est octet-identique. C'est le point - cela peut se déployer avant qu'un client ne le soutienne. Le cliquet d'extrémité a attrapé mes trois responsables de l'enrôlement en tant que sans surveillance. Ils sont gardé, par l'intermédiaire d'un userIdFromSession helper, le balayage à une méthode ne peut pas suivre, Donc la solution était d'enseigner GUARD qui aide plutôt que de les baser. Je suis également documenter la limitation inverse de la même exposition: completeChallenge n'éclaire l'analyse que parce qu'il se trouve toucher kSessionService.
· kamo-marketing
Phase 0-1 est l'instrument de l'entonnoir réel, débloquer la première peinture
- transmission des supports de données à travers MagneticButton/RippleButton (événements n'ont jamais atteint le DOM) - instrument PartainNavigation, Hero, PreviewBanner, section CTA; ?ref- sur chaque lien de registre - supprimer les éléments morts et 16 autres composants orphelins - page d'accueil: pas de porte de précharge, sections SSR'd, 16x10 sections, prix des catalogues en direct - inscription honnête: un registre de liaison approfondie dans un champ de courrier électronique avec pré-remplissage; termes réels/liens de protection de la vie privée - tuer 10MB favicon.svg et logo.svg, drop react-world-flags (3.7MB) pour drapeaux emoji, chute trois.js deps - génération statique (pas de force-dynamique), têtes de boue longue pour /img /logos/favicon - analyses: valeur vitales de performance de données, DNT drop supprimé; widget de chat lazyOnload; préconnects - héros: retournement local de bgs immédiatement (thème d'échange sans blocage), Watch Demo - /demo, Parlez-nous CTA, statistiques honnêtes
· kamo-shared-library
Deuxième facteur TOTP : 164,312 (d)
L'évaluation de la conformité appelée absence de dernier facteur disqualifiant de son côté, et en vertu de la règle de sécurité 2025, les zones franches industrielles cessent d'être traitées à l'adresse suivante: tous. Le mot de passe du nom d'utilisateur monofactorielle était le seul chemin d'authentification interactif. sur la plate-forme. TOTP est vérifié par rapport aux vecteurs de test RFC 6238 Appendix B plutôt qu'à contre apprécie cette mise en œuvre. Cette distinction est tout le jeu de balles: a TOTP home-duc qui n'est d'accord qu'avec lui-même authentifie que n'est Google de personne Authentificateur, et les surfaces de défaillance au déploiement avec chaque utilisateur bloqué. En écrivant ces tests immédiatement pris que j'avais passé unix secondes où le Le HMAC veut un compteur - hors d'un facteur de trente - donc générer la division et aucun appelant ne doit s'en souvenir. Propriétés qui séparent le MFA réel de son apparence, chacune épinglée par un Essai: - Les codes à usage unique sont à usage unique. Un TOTP reste valable pour toute sa 30-deuxième étape, donc sans lastUsedTimeStep un code intercepté ou épaule-surfed fonctionne à nouveau à l'intérieur de sa propre fenêtre. Une étape antérieure encore à l'intérieur de la tolérance est refusée Une fois par la suite, un a été accepté. - Les inscriptions non confirmées ne comptent pas. Inscriptions débutantes et abandon avant de prouver la possession ne doit pas satisfaire à une exigence de la demande d'AMF. - Le verrouillage est réel: un code correct est refusé alors qu'il est verrouillé, sinon le confinement est décoratif. - commence L'inscription refuse de remplacer un facteur confirmé. Silentement écrasant permettrait à toute personne d'atteindre le point d'extrémité d'échange de l'authentifiant de la victime pour les leurs. - Le secret est crypté au repos et renvoyé exactement une fois; les codes de récupération sont hachés et à usage unique. Ni l'un ni l'autre ne peut être récupéré par le personnel, de sorte qu'un dispositif perdu signifie la réinscription - la transaction correcte pour un certificat qui contourne le mot de passe. - La vérification est comparée en temps constant. Corde.equals revient sur le premier chiffre différent, qui tend à féroder le nombre de doigts principaux et s'effondre 10x6 espace dans environ 60 suppositions. Les codes de récupération sont SHA-256 plutôt que bcrypt délibérément: 80 bits de L'entropie générée par machine n'a pas de dictionnaire contre, et un hachage lent Il n'achèterait qu'un déni de service sur le chemin de connexion. Des tableaux existent déjà dans le groupe (KamoInitializer c65a233), de sorte que rien n'est armé par cette poussée. Les critères d'inscription et de défis sont la prochaine étape; rien n'appelle Cela est encore le cas.
· kamo-login
Ajouter des analyses analytiques - ?registered-1 avis de bienvenue
- Composante client de l'analysage du mont Analytics dans la mise en page racine: next/script chargeur pour analytics.kamocrm.com portée via des domaines de données à login.kamocrm.com uniquement (le site est marqué en blanc; les domaines de l'orge locataire doivent ne jamais être suivi), avec des dactylographies de fenêtre.analytics de garde. - Suivre un événement de connexion-succès juste avant les feux de redirection post-logine. - Manu droit à l'enregistrement 1 à partir du site du registre avec un avis de succès ("Votre compte a été créé. S'inscrire pour continuer."), en précombant le e-mail à partir de ?email (en anglais) (en anglais) (en anglais) (en anglais) (en anglais) (en anglais)
· InitializerService
Créer les tableaux du deuxième facteur
Backs UserMfaEnrollment et MfaRecoveryCode en diplomate-scordiaire Authentification de la personne ou de l'entité, l'écart de l'évaluation de la conformité appelé disqualifier par elle-même. Les deux tableaux vérifiés présents dans le groupe avec la forme attendue avant les entités ont été poussées, de sorte qu'aucun service ne peut être construit contre une carte dont la table fait n'existent pas. Trois détails ne méritent pas de perdre à cause d'une simplification ultérieure: - SECRET-CIPHERTEXT contient du texte chiffré. Le service refuse d'écrire un inscription du tout, lorsqu'aucune clé n'est configurée, plutôt que dégradante en clair. - LAST-USED-TIME-STEP est ce qui fait un code à usage unique. Un TOTP est valable pour son une étape entière de 30 secondes, donc sans elle un code intercepté rejoue à l'intérieur de son propre fenêtre. - Les codes de récupération obtiennent une ligne chacun plutôt qu'une liste sérialisée, donc l'échange d'une liste est une mise à jour ciblée au lieu d'une lecture-modifier-écriture sur l'ensemble - qui sous La simultanéité est exactement la façon dont un code à usage unique est utilisé deux fois.
· VOIPService
Exiger de VEW-CALL-LOGS pour la lecture d'appels dans les orages de traitement de l'IPP
Enregistrement et lecture de messagerie vocale vérifiés et rien d'autre: tout membre de l'organisation de possession pourrait tirer n'importe quel appel, transcription inclus, sur les extensions qui n'étaient pas les leurs. Exiger de VUE-CALL-LOGS n'était pas une option - un droit peut existent dans l'enum et être accordé à personne, donc l'allumer pour tout le monde prend le softphone loin des membres qui l'utilisent aujourd'hui. L'application est donc portée à la limite de conformité qui la rend nécessaire. Pour une og avec poignéesPhi set, enregistrement audio, pistes à la jambe, audio de messagerie vocale et la transcription à l'intérieur des métadonnées d'enregistrement exige la bonne; le refus est un 403 et atterrit dans la piste d'audit de l'Institut de visualisation des antécédents en pèlerinage, de sorte que le sondage est visible. Pour tous les autres org - tous aujourd'hui - rien ne change, qui C'est ce que les cas s'enfoncent. Conséquence connue: la session "retour" ne porte que (orgId, memberId), donc dans le cadre d'un locataire de PHI, le chemin d'atudio échoue jusqu'à ce que le jeton porte la subvention. Enregistré dans un test plutôt que laissé à découvrir.
· kamo-internal
Déconnectation automatique après inactivité (HIPAA 164.312 a) 2) iii))
Une session laissée ouverte sur un poste de travail sans surveillance est restée utilisable indéfiniment. Ceci le termine après 15 minutes d'absence d'interaction, avec un avertissement de 60 secondes Personne n'est donc jeté à mi-têt. Les règles de synchronisation en direct dans app/lib/idleTimeout.ts en tant que contrôleur pur (unité testés avec de faux minuteurs); le composant n'est qu'une couche d'entrée. Trois décisions Il vaut la peine de savoir: - Seuls les événements de pointage, de clé, de roue, de défilement, de toucher et de visibilité sont considérés comme présence. Les trames, les élévateurs et les minuteries Websocket ne sont pas des écrans kamo-internes se rafraîchir constamment, et traiter cela comme un humain au bureau serait rendre le contrôle décoratif. - La présence est mesurée sur l'ensemble de l'origine, car le sujet du contrôle est une machine sans surveillance, pas une languette sans surveillance. Le travail en un seul onglet garde son les frères et sœurs vivants; quand chaque onglet se taise, ils expirent ensemble, donc non l'agencement des onglets laisse une session utilisable sur un écran abandonné. - La fin d'une session est annoncée sous tous les onglets. L'id est vivant dans chacun d'eux b) Un sillon partagé Redis, donc un frère ou une sœur qui ne l'est jamais raconté continue de montrer un espace de travail authentifié au cours d'une session qui n'est plus existe. La décote automatique et la page ordinaire /logout maintenant diffusée. La terminaison passe par la page /logout existante et la déconnexion du service de sécurité, Redis suppression de clé, effacement des cookies, vers le kamo-login - parce que la compensation L'état client seul laisse la session du serveur en vie et n'est pas une déconnexion. Copie expédiée avant cela dans le dictionnaire de kamo-traduction (c39dfb9).
· DocsService
Vérifier les points d'extrémité de la teneur en WOPI et combler les dernières lacunes en matière de traitement des octets
WOPI sert des documents entiers à Docs et n'enregistre rien. GET /wopi/files/-id-/contents est la même divulgation que /download, relayé de la même manière à travers APIService, sans piste du tout - ouvrir un document dans L'éditeur était introuvable. L'identité vient du jeton d'accès WOPI, pas une session -: DocumentContollateur le cornet avec l'orge de l'organe d'ouverture et les identificateurs membres et Docs le retourne sur chaque rappel, donc ces revendications sont la seule identité ces critères d'évaluation ont, et le seul checkFileInfo est déjà autorisé contre. L'auditeur les prend directement plutôt que de résoudre un membre d'une deuxième voie qui pouvait être en désaccord avec le jeton par lequel la demande était autorisée. Un jeton qui ne peuvent pas être lues des dossiers contre la sentinelle non résolue au lieu de être abandonnés. PutFile records comme VUE, pas DOWNLOAD: a save sends bytes in plutôt que out, donc l'appeler une divulgation doublerait le GetFile qui a ouvert le la session, et VIEW échoue à ouvrir, de sorte qu'un puits d'audit de maladie ne peut pas détruire non-saudé le travail. CheckFileInfo et les opérations de verrouillage restent non enregistrés, sans contenu, et Les documents appellent les deux à plusieurs reprises à travers une session, ce qui enterrerait la ligne Cela signifie que les octets sont en fait déplacés. Le balayage des chemins de service à l'octet restant a trouvé deux autres: - /api/docs/binders/zid-/render chaque document dans un liant en un seul PDF. Il s'agit d'un téléchargement en vrac dans une enveloppe différente et n'a rien enregistré. un événement par document intégré, séparateurs et pages générées exclus. - - n'a écrit qu'une ligne ImgLogDownload. Que est un enregistrement de domaine d'imagerie lu par le panneau de téléchargement, pas le la trace transversale - de sorte que la comptabilisation des informations a montré les flux, exportations et modèles de PDF tout en omettant l'octet le plus utilisé du service chemin. Les deux dossiers sont maintenant rédigés; ils répondent à différentes questions. Aucune entité, «Column» ou changement de bibliothèque partagée.
· kamo-internal
Promouvoir une matrice d'éligibilité ingérée à partir de la console
Pour un document de référence ELIGIBILITY-MATRIX, le panneau d'ingestion présente maintenant un Carte "Promouvoir la matrice d'éligibilité": choisissez le produit, type limite (MAX-LTV/CLTV/DTI), occupation et destination, et chaque ligne de limitation de la FICO approuvée devient une cellule d'éligibilité - la porte qui permet au produit d'être payé. Le La carte de publication de la feuille de taux est désormais cachée pour les documents LLPA et l'éligibilité (chacune a ingestionApi.promotione Messages d'éligibilité au nouveau relais.
· SecurityService
Relais de passerelle pour promouvoir une matrice d'éligibilité ingérée
- Acquérir une éligibilité à la promotion, à la réalisation promote-adréglements: porte éligible à la dieu, organisationId server-stamped via write(), en aval 4xx relayé mot pour mot.
· kamo-internal
Auteur de l'UI et de la liste, éditeur de l'élément de ligne, gestion de liens de partage
Achève le système de citation/estimation: le personnel peut maintenant construire un devis, le prix, la menthe un lien de partage et un courriel, le tout à partir du pipeline. app/lib/quotesApi.ts client dactylographié pour la surface du service de sécurité - proxy, reflète le POS un (passage du jeton X-z) PipelineQuotesTap liste et filtre d'état, câblé sous-onglet RETAIL App/commerce/quotes/voiture de détail [uid) QuoteEditor PipelineRecordLayout avec détails/partage/onglets d'activité QuoteLineItemEditor maille de ligne réutilisable QuoteShareLinkMin de menton, copie, e-mail, révoquer, voir le nombre QuoteLineItemEditor est délibérément son propre composant. Le gazoduc est déjà transporté cinq éditeurs de lignes roulés à la main (ordres/nouveaux, OrderEditDialog, grille de commande d'abonnement, table d'achat, travail de la main-d'œuvre/pièces) avec rien Partage entre eux; les nouveaux travaux devraient s'appuyer sur ce point plutôt que d'ajouter un sixième. Les totaux de l'éditeur sont un PRÉVISION LOCAL et sont étiquetés comme tels alors qu'ils sont sales. Ils Mirr QuoteTotals exactement - rabais de ligne d'abord, puis la réduction au niveau des devis, puis taxe et expédition - donc l'avant-première n'est jamais en désaccord avec le document sauvegardé, et la réponse du serveur les remplace à chaque sauvegarde. Rien ici ne peut fixer un total. L'impôt reste honnête dans l'interface Unis là-même: le mode MOTEUR rend "non configuré" plutôt qu'un une figure fabriquée, correspondant à ce que les rapports de l'API. Un lien de partage fraîchement frappé est montré une fois avec un avertissement de copie de maintenant, car seul son SHA-256 est maintenu et l'URL ne peut pas être récupérée. La liste peut afficher un Un préfixe symbolique et rien de plus. Droits liés à l'ensemble: MANAGE-QUOTES pour créer/éditer, ENVOYER-QUOTES à la Monnaie ou à la révoquer les liens. Citations de terminaux - verrouillez l'éditeur et offrir une révision à la place. Câblé en direct à l'API dès le début - pas de solutions de générationMock, contrairement à plusieurs tablets de pipeline de scie demi-train. Si les tableaux de devis n'existent pas encore les surfaces d'erreur honnêtement plutôt que d'être masqué par des rangées d'espaces réservés.
· SecurityService
Enregistrer les lecteurs de plomb et refuser les exportations non vérifiables
HIPAA 164,312 b) pour le service de sécurité. La plateforme enregistre chaque exemple CHANGE (LeadHistory) et chaque login (SystemAccessLog) et les enregistrements non Lire du tout, donc "qui a regardé cet emprunteur" - la première question a L'évaluation de la violation par le paragraphe 164,402 demande l'absence de réponse. PhiAccessAuditor organise des événements à partir de la carte de session OTK/- le point d'extrémité déjà résolu, de sorte que l'identité dans la ligne d'audit est la même l'identité qui a autorisé la demande. Le client IP provient X-Forwarded-Ford-For; derrière Traefik, remoteAddr enregistre la barre d'entrée et est sans valeur pour la détection. Les dénis sont également enregistrés - sonder, c'est ce que la détection recherche - et un appelant sans session atterrit sur une org sentinelle plutôt que d'être abandonnés. Lire la suite: guichet unique de plomb et de VEW, grille et un événement LIST par plomb en fait expédiés (exposés des DTO projetés, donc une sonde filtrée par VOIR-UNASSIGNED-LEADS n'apparaît jamais comme un seul qui a été lu). 401/403/404 tous enregistrent un démenti. Les exportations échouent fermées et le CSV d'accès, HMDA LAR, le corps de formation du contrôle de la qualité et le corpus d'extraction à l'échelle de la plate-forme. Chaque enregistrement est un événement par AVANT que le fichier soit construit, et un échec d'écriture d'audit retourne 503: "nous avons distribué les données mais perdu l'enregistrement" est la seule réponse que ne peut pas être rebroché. Le corpus de l'échelle de la plate-forme traverse tous les locataires, donc chaque enregistrement est attribué à l'organe qui le possède, et non à celui de l'opérateur. Seuls les identifiants sont enregistrés, jamais de contenu. membreId) a disparu: une exportation a maintenant de tenir ses rangées pour enregistrer qui était en eux.

Votre univers vous attend.
Commencez gratuitement en quelques minutes. Ajoutez des produits quand vous êtes prêt. Pas de migration, pas de nouvelles connexions.
Gratuit pour toujours — aucune carte de crédit requise