Commit Graph

5495 Commits

Author SHA1 Message Date
Ludovic Vielle
e5bc0c441e Release @probo/n8n-nodes-probo/v0.206.1
Signed-off-by: Ludovic Vielle <ludovic@probo.com>
2026-07-22 17:01:19 +02:00
Ludovic Vielle
7ede7cd904 Release probod/v0.232.0
Signed-off-by: Ludovic Vielle <ludovic@probo.com>
2026-07-22 17:01:04 +02:00
Ludovic Vielle
cbd0387490 Expose ACME cooldown end time and error details
Operators could see that a rate-limit cooldown was active, but not
when it ends, and failure logs omitted most of the CA problem
document. Add a until-timestamp gauge and log the full acme.Error
surface so cooldowns and ACME responses are diagnosable.

Signed-off-by: Ludovic Vielle <ludovic@probo.com>
2026-07-22 16:38:11 +02:00
Sacha Al Himdani
6313278c0d Fix n8n Organization queries for moved compliance portal fields
Drop removed Connect Organization profile fields that break Get Many,
and return those fields from Compliance Portal Get.

Signed-off-by: Sacha Al Himdani <sacha@probo.com>
2026-07-22 16:09:34 +02:00
Émile Ré
00f5d0c4ba Remove orphaned apps/trust frontend
Compliance portal already embeds and serves the public SPA, so the
old @probo/trust app was unused. Drop its Makefile/CI stubs, Relay
project, CORS port, and the helper that only it imported.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-22 14:19:41 +02:00
Bryan Frimin
a77ada6f27 Release probod/v0.231.0 2026-07-22 14:18:06 +02:00
Bryan Frimin
c67530d126 Release @probo/n8n-nodes-probo/v0.206.0 2026-07-22 14:17:37 +02:00
Bryan Frimin
a9a8cba1e2 Release prb/v0.203.0 2026-07-22 14:17:03 +02:00
Bryan Frimin
9f6a0c1d40 Fixes cubic review
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-22 13:57:56 +02:00
Bryan Frimin
3f202002d9 Fix parsing int error
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-22 13:20:53 +02:00
Bryan Frimin
81b7ee5fad Close cert provisioning correctness gaps
Several race and validity gaps could leave certificate provisioning
stuck, unusable, or noisy:

- Accept the HTTP-01 challenge only after the key authorization is
  committed, so the CA cannot hit the token before this instance can
  serve it and invalidate the order.
- Persist challenge metadata under a blocking write-back lock; a row
  merely locked by a competing transaction no longer silently drops the
  accepted order.
- Abandon a recovered VALID order and restart instead of issuing it
  with a freshly generated key that cannot match the existing cert.
- Exclude rate-limited rows from the ten-minute stale reset so the
  resumable order survives the ACME cooldown.
- Size the provisioning poll lease to exceed the max processing window
  so a released claim lock cannot let another worker process the same
  row concurrently.
- Parse Retry-After as unsigned seconds and clamp overflow so malformed
  values fall back to the default cooldown instead of disabling it.
- Normalize the acme_errors problem_type label to the RFC 8555 set to
  bound Prometheus cardinality.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-22 13:20:53 +02:00
Bryan Frimin
45c45ac5a0 Style
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-22 13:20:52 +02:00
Bryan Frimin
121d4dcf93 Fix certmanager provisioning retry and metrics
Address several provisioning defects that either stalled the retry
budget or crashed the process:

- Classify CAA resolver/transport failures apart from a real CAA policy
  denial. Both shared the "caa records" wording, so a transient resolver
  error was persisted as customer misconfiguration and retried forever
  without consuming the retry budget. A new ErrCAANotPermitted sentinel
  now marks the genuine misconfiguration; other CAA errors are treated
  as ordinary transient failures.

- Honor an explicit Retry-After: 0 (or a past date) as permission for an
  immediate retry instead of promoting it to the one-hour default
  cooldown. acme.RateLimit collapses zero, invalid, and absent headers
  to a zero duration, so the header is now parsed directly to tell an
  explicit zero apart from a missing one.

- Reuse already-registered Prometheus collectors when a second
  ACMEService shares a registerer. The fixed-name collectors were
  MustRegistered, so a duplicate registration panicked the process.

- Persist provisioning failures on a context detached from the process
  tick deadline. A timed-out attempt reached persistFailure with an
  expired context, so the write-back failed and the retry budget never
  advanced, leaving the certificate indefinitely retriable.

- Use pgx.StrictNamedArgs in the certificate FOR UPDATE loaders to match
  the coredata SQL contract.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-22 13:20:52 +02:00
Bryan Frimin
9724a2ce50 Harden cert provisioning failure and write-back
Rate limits no longer inflate ssl_retry_count into an instant FAILED
path. Centralize outcomes in decideProvisioningOutcome, keep ACME
order state on transient and rate-limit errors, bound each Process
tick with a timeout, and block on FOR UPDATE when persisting a
freshly issued certificate.

Signed-off-by: Ludovic Vielle <ludovic@probo.com>
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-22 13:20:52 +02:00
Émile Ré
397f548937 Avoid Turkish locative on dynamic names
A hardcoded 'de breaks vowel harmony for many
entity names. Use "için" instead so the hero
title stays grammatical for any {{name}}.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-22 13:08:03 +02:00
Émile Ré
f1136cb748 Use entity name as CIMD client name
OAuth client_name should be the short brand
label, not the composed English hero heading.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-22 13:08:03 +02:00
Émile Ré
cb4fb1f3f4 Align hero titles with compliance wording
Non-English heroTitle strings still used "trust"
equivalents. Switch them to each locale's IT
compliance term so they match English and the
portal tagline.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-22 13:08:02 +02:00
Émile Ré
465242eb17 Fix lint issues
Signed-off-by: Émile Ré <emile@probo.com>
2026-07-22 13:08:02 +02:00
Émile Ré
0d832508c9 Replace portal title with entity name
Store a short entity name instead of the full home
heading so orgs can brand portals for sub-entities.
Restore hero i18n composition and keep the English
document title composed from the entity name.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-22 13:08:02 +02:00
Émile Ré
0fe814cfe4 Fix deprecated use of proxyproto.ConnStrictWhiteListPolicy
Signed-off-by: Émile Ré <emile@probo.com>
2026-07-22 13:07:52 +02:00
Émile Ré
381a585871 Remove duplicated makefile target
Signed-off-by: Émile Ré <emile@probo.com>
2026-07-22 12:54:07 +02:00
Émile Ré
9146a4ac1d Update gqlgen generated comments
Signed-off-by: Émile Ré <emile@probo.com>
2026-07-22 12:53:45 +02:00
Émile Ré
695523b04b Update go deps
Signed-off-by: Émile Ré <emile@probo.com>
2026-07-22 12:50:54 +02:00
Émile Ré
a9a476a343 Fix mobile locale select under drawer
Select menus portal at z-3 while drawers sit at z-5, so
the popup opened behind the drawer. Portal into the drawer
panel instead. Point .env.example VITE_API_URL at the slug
subdomain with a local Vite note.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-22 12:32:01 +02:00
Émile Ré
52310dbf65 Read portal SEO origin from request context
SNI middleware already stores scheme://host; SEOFromRequest
no longer takes a base URL or re-strips the path. Expose
context helpers and drop the obsolete strip tests.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-22 12:19:25 +02:00
Émile Ré
9ee0df4d3f Document portal env and log SNI failures
Restore VITE_API_URL to :8080 in .env.example with notes
for local Vite (:5174 + proxy target). Log compliance
portal lookup errors in the SNI middleware with context.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-22 12:05:56 +02:00
Émile Ré
ee3136a0d2 Fix lint issues
Signed-off-by: Émile Ré <emile@probo.com>
2026-07-22 10:13:49 +02:00
Émile Ré
6024a2e803 Omit SEO links for relative base URLs
portalOrigin fell back to the raw input when scheme or host
was missing, so paths like /fr/documents still produced
canonical and hreflang tags. Return an empty origin instead.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-21 19:08:55 +02:00
Émile Ré
59f053e8f9 Fix portal SEO, Korean copy, and favicon
Custom-domain base URLs included the request path, so
canonical/hreflang doubled routes; emit SEO links only with
an absolute origin. Rewrite Korean mismatch strings to avoid
literal particle parentheses, rename HtmlLang to HTMLLang, and
ship public favicons so Vite no longer 404s the fallback icon.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-21 18:50:34 +02:00
Émile Ré
e47091e5b5 Fix lint issues
Signed-off-by: Émile Ré <emile@probo.com>
2026-07-21 18:43:50 +02:00
Émile Ré
418bb5a8f8 Address review feedback on portal i18n
Swallow locale mutation rejections after the toast, close the
mobile drawer on locale change, escape SEO paths, share the
IAM locale list with SEO, and finish dropping /trust leftovers.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-21 18:43:50 +02:00
Émile Ré
e4260d50d3 Drop leftover /trust path prefix handling
Portals are host-routed on slug subdomains, so SEO path
stripping and the frontend basename helper were dead code.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-21 18:43:49 +02:00
Émile Ré
48c7585797 Proxy GraphQL through a slug-based env host
Hardcoding the trust-center origin broke local portal
development. Read COMPLIANCE_PORTAL_PROXY_TARGET so each
slug can point Vite's /graphql proxy at the right HTTPS host.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-21 18:43:49 +02:00
Émile Ré
87033df505 Smooth locale switches with a React transition
Schedule persist and navigate together, and defer the
mismatch banner so a one-frame URL/identity desync does
not flash during language changes from the menu.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-21 18:43:49 +02:00
Émile Ré
03252b4883 Close the menu cleanly when changing locale
Dismiss the user menu on language pick, and update the
URL together with an optimistic identity write so the
mismatch callout does not flash mid-switch.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-21 18:43:49 +02:00
Émile Ré
53b14b3984 Match body background to the page surface
Use sand-2 on body so Chrome overscroll does not flash
the lighter sand-1 behind the layout.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-21 18:43:49 +02:00
Émile Ré
5d161173c8 Localize mismatch actions and polish locale UI
Render the switch-to-saved button in the identity locale,
translate remaining locale stubs, and use a checkmark for
selected dropdown radio items.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-21 18:43:49 +02:00
Émile Ré
199289b42b Polish the locale mismatch banner layout
Use a full-bleed bar with clearer actions and a stacked
mobile layout so long language labels stay usable.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-21 18:43:48 +02:00
Émile Ré
acd41b72f3 Seed identity locale from the URL when null
Signed-in viewers with no saved preference get the current
URL locale once so later unprefixed visits have a default.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-21 18:43:48 +02:00
Émile Ré
5b57333994 Strip Go HTML templates in Vite serve
index.html doubles as a production Go template; Vite does not
execute it, so bare {{if}}/{{range}} leaked into the page.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-21 18:43:48 +02:00
Émile Ré
c223873e96 Put locale in compliance portal URLs
Path-segment locales make each language crawlable with self
canonical and hreflang, while identity.locale persists an
explicit choice without client storage or cookie banners.

Signed-off-by: Émile Ré <emile@probo.com>
2026-07-21 18:43:48 +02:00
Bryan Frimin
2a250ab7d4 Release @probo/n8n-nodes-probo/v0.205.0 2026-07-21 18:24:44 +02:00
Bryan Frimin
1f47bcae3c Release probod/v0.230.0 2026-07-21 18:24:25 +02:00
Bryan Frimin
9a23f6c9d0 Release prb/v0.202.0 2026-07-21 18:24:02 +02:00
Bryan Frimin
63dffe801e Store full portal titles as home headings
The UI composed "Compliance at {{name}}." via i18n while the
DB only held the org name. Persist the full heading, backfill
existing rows, and drop the unused heroTitle locale keys.

Also use clientip.Extract for NDA signing events and default
the portal base domain to probopage.localhost for local runs.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-21 15:44:29 +02:00
Bryan Frimin
a3d6c120d7 Mint certificate GIDs with entity type 106
Certificate backfill migrations used entity type 104, which belongs to
commitment groups. Use 106 so migrated certificate IDs decode correctly.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-21 15:44:28 +02:00
Bryan Frimin
8402e0c31e Rename portal service locals to portal
Use portal and portalID in management portal_service helpers and align
error messages with the Compliance Portal product name.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-21 15:44:28 +02:00
Bryan Frimin
d0090e8c65 Use portal visibility fields in console lists
Stop aliasing compliancePortalVisibility to compliancePageVisibility in
document, file, and audit list items so the console matches the renamed
GraphQL field.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-21 15:44:28 +02:00
Bryan Frimin
0aec27adf5 Remove magic-link auth strings from portal locales
OAuth /initiate replaced magic-link sign-in, but eleven non-English
locale files still carried the old auth copy. Drop those keys so every
catalog matches en-US and fr-FR.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-21 15:44:27 +02:00
Bryan Frimin
3f6795001a Finish compliance portal rename leftovers across portal, trust, and n8n.
Update mailing list queries to currentCompliancePortal, and include regenerated console resolvers plus sorted n8n/frontend imports from the rename.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-07-21 15:44:27 +02:00