119 Commits

Author SHA1 Message Date
Bryan Frimin
f17fb7bf49 Upgrade to kit v0.3.0
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-04-03 11:56:06 +02:00
Bryan Frimin
d1e4f31d07 Fix empty search_engine_indexing on trust centers
Trust centers were created without setting SearchEngineIndexing,
defaulting to an empty string in the database. This caused scan
errors when loading trust centers.

Add a migration to fix corrupted rows, set a DEFAULT on the
column, and add a CHECK constraint. Also set the field explicitly
when creating new trust centers.

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-26 10:13:00 +01:00
Bryan Frimin
e74c0a11c6 Update copyright headers to 2025-2026 for modified files
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-25 15:19:47 +01:00
Bryan Frimin
d24712344e Add GraphQL dataloaders for batched record lookups
Introduce dataloadgen-based dataloaders to batch individual
record-by-ID fetches in GraphQL resolvers into single SQL
queries. Each entity type (organization, framework, control,
vendor, document, risk, measure, task, file, report, profile)
gets a LoadByIDs method in coredata and a GetByIDs service
method with variadic arguments and dedicated collection return
types. Resolvers now use dataloader.FromContext instead of
direct service calls for single-record lookups.

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-25 15:19:46 +01:00
Bryan Frimin
784c88895a Allow editing non-SCIM fields on SCIM-managed profiles
Contract start and end dates are never synced by SCIM, so they
should remain editable even when a profile is SCIM-managed.
The backend now skips overwriting SCIM-synced fields (fullName,
kind, position, additionalEmailAddresses) for SCIM profiles,
and the frontend disables only those fields instead of the
entire form.

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-24 16:44:53 +01:00
Bryan Frimin
7b320916af Add audit log feature for recording all actions
Adds audit logging that records all authorized actions performed by
users and API keys. The audit log is automatically populated whenever
the authorizer approves an action, and is queryable via GraphQL, MCP,
and CLI interfaces. Permission checks are excluded via a dry-run flag
to avoid phantom entries on page loads.

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-21 19:16:19 +01:00
Bryan Frimin
b87ea87c42 Fix organization profile using owner's full name instead of org name
When creating an organization, the owner's membership profile was being set with the organization name as the full name instead of the owner's actual full name. Fetch the identity's full name and use it for the profile.

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-19 11:38:04 +01:00
Bryan Frimin
a5743729f7 Add file visibility (PRIVATE/PUBLIC) + public files API
Adds a visibility enum to files with PRIVATE (default) and PUBLIC states.
PUBLIC files are accessible via an unauthenticated /api/files/v1/{fileID}
endpoint that redirects to a presigned S3 URL. Introduces pkg/file service
to manage file operations. Logo uploads (trust centers, organizations,
frameworks, references) are marked PUBLIC; other files are PRIVATE.
Includes database migration and backfill for existing logos.

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-18 19:19:04 +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
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
4d2cb793b6 Add compliance page mailing list base
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-11 15:34:36 +01:00
Bryan Frimin
e1643d1e3a Add missing validation
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-11 13:09:02 +01:00
Bryan Frimin
e393411333 Move kind to string
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-11 13:09:02 +01:00
Émile Ré
87415c0324 Remove useless encryption key injections
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-03-11 14:42:37 +04:00
Émile Ré
909beeb606 Migrate some trust_center_access columns to profiles
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-03-05 10:36:08 +04:00
Sacha Al Himdani
6905472fba Add user webhooks
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-02-27 10:14:53 +01:00
Émile Ré
f75bde75f1 Remove unused schema fields
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-20 18:24:57 +04:00
Émile Ré
872a1e3dd7 Set email address on create to get it in reponse payload
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-20 18:09:46 +04:00
Émile Ré
9941a6a66a Disable activation on scim profiles
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-19 16:13:02 +04:00
Émile Ré
ab5fe8e5e2 Fix e2e tests
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-19 16:13:01 +04:00
Émile Ré
47aba96b69 Reimplement invitations
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-19 16:12:58 +04:00
Émile Ré
a42fc4fa61 Reimplement remove / create in console
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-19 16:12:57 +04:00
Émile Ré
f931bda10f Reimplement remove and invite user
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-19 16:12:56 +04:00
Émile Ré
196738f876 Implement create user
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-19 16:12:56 +04:00
Émile Ré
7794563e94 Remove duplicate membership method
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-19 16:12:56 +04:00
Émile Ré
56ec0ab3c3 Move source and state from membership to profile
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-19 16:12:55 +04:00
Émile Ré
baeb758a4f Implement resolvers
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-19 16:12:53 +04:00
Émile Ré
c115e2c9dc Update graphql schema
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-19 16:12:53 +04:00
Émile Ré
108e9cb85d Remove coredata.MembershipProfile MemerhipID field
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-19 16:12:52 +04:00
Émile Ré
00cc91c102 Fix assume SAML required error redirect
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-18 15:16:00 +04:00
Émile Ré
e85d92ec36 Wrap errors
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-12 16:21:14 +04:00
Émile Ré
00a4d9fff0 Fix profiles totalcount
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-12 16:21:14 +04:00
Émile Ré
f884c6bb05 Fix profiles list + implement resolver methods
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-12 16:21:13 +04:00
Émile Ré
29371662e2 Fix referenced columns used in certain SQL queries + minor front fixes
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-12 16:21:13 +04:00
Émile Ré
3a459f1992 Rework console pages and implement profile update
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-12 16:21:12 +04:00
Émile Ré
a3b49db43e Add organization_id on profiles and implement ListProfiles
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-12 16:21:11 +04:00
Émile Ré
8d20220c86 Fix e2e tests
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-12 16:21:11 +04:00
Émile Ré
ae6c6719d2 Update console gql schema and resolver
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-12 16:21:09 +04:00
Émile Ré
6328952c6f Load identity email_address on coredata.MembershipProfile
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-12 16:21:09 +04:00
Sacha Al Himdani
1494707cb5 Exclude users from google workspace bridge
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-02-10 12:42:24 +01:00
Émile Ré
6189a8ed81 Generate presigned URL for email assets at render time
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-05 12:41:35 +04:00
Émile Ré
27821632c6 Serve email static assets from object store
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-04 18:32:52 +04:00
Émile Ré
d9c07ecdef Fix bot review
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-02 13:32:58 +04:00
Émile Ré
e13ff134ed Extract email presentation configuration layer to streamline email branding
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-02 13:32:57 +04:00
Émile Ré
d381c5fc88 Add logos to trust_centers and auto fill with organization logo
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-02 13:32:56 +04:00
Émile Ré
88ca5f6968 Remove unused func and create probo vendor on org creation
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-02 13:32:55 +04:00
Bryan Frimin
269d4d3d58 Remove deadcode
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-02-02 09:14:39 +01:00
Bryan Frimin
bc5bbdae81 Add scim bridge with connector
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-02-02 09:14:38 +01:00
Bryan Frimin
53bfc36bff Fix internal error when create new org
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-01-17 12:34:03 -08:00
Bryan Frimin
1ff443c475 Fix missing trust center object
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-01-17 12:30:31 -08:00