Commit Graph

135 Commits

Author SHA1 Message Date
Bryan Frimin
3e4a7d3638 Add OIDC login support to compliance page
Add Google and Microsoft sign-in buttons to the trust center connect
page, matching the console sign-in experience. The backend OIDC flow
already supports flexible continue URLs, so only the GraphQL schema
and frontend needed changes.

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-23 14:17:44 +01:00
Bryan Frimin
190baeebed Use actual MIME type for trust center file exports
The export endpoint was hardcoding application/pdf for all trust center
files. Now the real MIME type from the stored file metadata is threaded
through the service layer and returned as a data URI, so non-PDF files
are handled correctly on the frontend. Watermarking is only applied when
the file is actually a PDF.

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-20 18:01:00 +01:00
Bryan Frimin
bedfd61168 Rename Vendor to Subprocessor in trust API surface
Rename Vendor → Subprocessor, VendorConnection → SubprocessorConnection, and VendorEdge → SubprocessorEdge across the GraphQL schema, Go resolvers, and React frontend components. Internal coredata types remain unchanged. User-facing labels in console app updated to reflect terminology change.

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-20 09:52:37 +01:00
Sacha Al Himdani
1db8e7133e Add document archiving
Documents can be archived and unarchived. Archived documents are
read-only, excluded from the trust center, and moved to a dedicated
Archived tab in the document list.

- Add archived_at timestamp and status (ACTIVE/ARCHIVED) PG enum column
- Rename DocumentStatus → DocumentVersionStatus, introduce DocumentStatus
- Archive/unarchive mutations in GraphQL, MCP, and CLI
- Bulk archive/unarchive mutations with Active/Archived tabs in the list
- ABAC policies: write actions denied on archived docs, unarchive denied
  on active docs
- Remove control/risk mappings and reset trust center visibility on archive
- Exclude archived documents from mapping dialogs and trust center tab

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-19 14:15:54 +01:00
Bryan Frimin
4f54241382 Add document types filtering and rename ISMS to GOVERNANCE
Adds 5 new document types (PLAN, REGISTER, RECORD, REPORT, TEMPLATE), renames ISMS to GOVERNANCE, and implements type-based filtering across GraphQL, MCP, and frontend. Includes migration, enum updates, filter implementation with SQL array support, and frontend dropdown UI with Relay refetch pattern.

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-19 12:31:39 +01:00
Sacha Al Himdani
73d5dbb5db Replace panic calls with proper error handling in resolvers
All panic(fmt.Errorf(...)) calls in the console and trust center
GraphQL resolvers are replaced with structured error logging via
r.logger.ErrorCtx and gqlutils.Internal(ctx) returns.

Mutation resolvers for Create, Update, Upload, Import, and Assess
operations now check for validator.ValidationErrors before returning
an internal error, surfacing field-level INVALID errors to clients
via gqlutils.InvalidValidationErrors.

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-17 16:15:51 +01:00
Sacha Al Himdani
16b966b8fb Fix multiline function call style violations
Expand mixed inline/multiline function calls so each argument
is on its own line, matching the one-argument-per-line rule.

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-17 15:59:26 +01:00
Bryan Frimin
7ffb2d5e94 Add document viewer with proper 404 handling for trust center
Move document download/view to a dedicated viewer page with PDF preview,
access request flow, and a proper 404 error boundary when documents are
not found. The backend now returns NOT_FOUND instead of INTERNAL for
missing documents and reports.

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-16 19:13:21 +01:00
Sacha Al Himdani
dc8e6d0817 Add validation to mailman service
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-16 17:46:32 +01:00
Bryan Frimin
807213d384 Stop tracking generated files
Run make generate in CI lint and test jobs since generated files are
now gitignored. Also include Relay codegen for frontend apps in the
generate target.

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-16 16:19:47 +01:00
Sacha Al Himdani
0b7c0e0806 Add validation to mailman service
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-16 14:37:34 +01:00
Bryan Frimin
ef76a8d2e1 Remove deadcode
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-13 17:18:02 +01:00
Sacha Al Himdani
d5c62a9383 Run go fmt/fix
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-13 14:48:13 +01:00
Émile Ré
6ad808c966 Move and rename EnsureAccess method in trust.Service
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-03-13 16:58:10 +04:00
Émile Ré
ea8253ea78 Add membership provisioning middleware to compliance page
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-03-13 16:58:10 +04:00
Sacha Al Himdani
b8ba213fcb Compliance updates should be public
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-12 13:46:19 +01:00
Sacha Al Himdani
85ec106cd6 Send mailing list emails
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-11 15:34:37 +01:00
Sacha Al Himdani
aa01c40184 Remove with tenant from mailman
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-11 15:34:36 +01:00
Sacha Al Himdani
4d2cb793b6 Add compliance page mailing list base
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-11 15:34:36 +01:00
Sacha Al Himdani
fe241fc136 Add social links
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-11 12:10:57 +01:00
Émile Ré
97e957f394 Implement guard on empty full name before NDA is signed
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-03-05 17:07:58 +04:00
Émile Ré
e856817d2b Remove full name input from nda page
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-03-05 11:19:19 +04:00
Émile Ré
323cd602a1 Update business logic
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-03-05 10:36:08 +04:00
Émile Ré
9e106a8875 Add fullName to magic link form
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-03-05 10:36:07 +04:00
Émile Ré
54e0353833 Fix typo
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-03-04 20:38:56 +04:00
Émile Ré
1af887e4d1 Respond with unauthenticated on compliance page missing membership
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-03-04 20:25:58 +04:00
Sacha Al Himdani
3bf6e67729 Fix style
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-04 16:55:36 +01:00
Sacha Al Himdani
7a48ba65a0 Add missing file
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-04 16:46:06 +01:00
Sacha Al Himdani
0483d7b343 Fix compliance graphql schema
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-04 16:44:23 +01:00
Sacha Al Himdani
c17c53e80f Add compliance frameworks
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-04 10:19:39 +01:00
Émile Ré
8dc5fffa58 Fix misc bugs
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-03-04 11:04:47 +04:00
Émile Ré
a160dc1f47 Fix request mutations on complete store updates
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-03-03 22:07:02 +04:00
Émile Ré
5703bccc9a Remove unused gql field
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-03-03 22:07:02 +04:00
Émile Ré
c4b06ddc7d Add compliange page base URL in context and use it to validate redirect URLs
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-03-03 22:07:01 +04:00
Émile Ré
823fc64c37 Implement nda check as a directive
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-03-03 22:07:01 +04:00
Émile Ré
23491a7976 Remove saferedirect check
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-03-03 22:07:01 +04:00
Émile Ré
9da8cc2e3d Add nda signature middleware
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-03-03 22:07:01 +04:00
Émile Ré
bb8d477495 Add request param presence callback to request accesses
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-03-03 22:07:01 +04:00
Émile Ré
316e81f938 Implement continue on verify magic link
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-03-03 22:07:00 +04:00
Émile Ré
3c70b1e3eb Generate go files after gqlgen & mcpgen upgrades
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-03-03 12:54:43 +04:00
Sacha Al Himdani
067c3c1680 Use audit name in compliance page
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-02-27 18:36:52 +01:00
Bryan Frimin
bb28cbec0b Create access at login time
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-02-23 09:38:33 +01:00
Bryan Frimin
537797d35b Only keep clean IP address
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-02-23 09:38:32 +01:00
Bryan Frimin
95d7d3c389 Fix legacy access blocked
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-02-23 09:38:30 +01:00
Bryan Frimin
33747c46eb Add file stamp
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-02-23 09:38:28 +01:00
Bryan Frimin
16503a7df4 Use electronic signature for compliage page NDA
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-02-23 09:38:27 +01:00
Bryan Frimin
c191d25e9a Add electronic signature
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-02-23 09:38:27 +01:00
Bryan Frimin
c5ef46b9b4 Fix files alwasy requested even when not
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-02-11 16:02:38 +01:00
Émile Ré
a388aa4999 Redirect when already authenticated
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-05 11:49:33 +04:00
Émile Ré
ad122f8b2e Rework the UI of vendor row on compliance page
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-04 18:38:48 +04:00