Commit Graph

94 Commits

Author SHA1 Message Date
Bryan Frimin
ada92790bc Release probod/v0.198.0
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-05-28 14:08:23 -07:00
Bryan Frimin
5e78b11f08 Release probod/v0.197.0
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-05-28 09:54:57 -07:00
Bryan Frimin
f0b9acb748 Release probod/v0.196.1
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-05-27 19:27:13 -07:00
Bryan Frimin
31995aa0ca Release probod/v0.196.0
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-05-27 18:19:34 -07:00
Bryan Frimin
bc5244d9f4 Release prb/v0.190.0
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-05-27 13:47:24 -07:00
Bryan Frimin
aa3042584c Release probod/v0.195.0
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-05-27 13:46:23 -07:00
Bryan Frimin
caba961d7c Release probo-agent/v0.1.0
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-05-26 16:22:06 -07:00
Bryan Frimin
96e127a814 Release probod/v0.194.0
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-05-26 15:51:42 -07:00
Bryan Frimin
712f00f434 Update copyright year
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-05-26 13:59:17 -07:00
Bryan Frimin
5c73886faf Fix label name
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-05-26 13:47:14 -07:00
Bryan Frimin
e040851a4c Style
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-05-26 13:45:57 -07:00
Bryan Frimin
842081b66e Parse macOS postinstall conf without eval
Read KEY=VALUE lines from /tmp/probo-agent.conf directly so a
user-controlled temp file cannot execute arbitrary shell as root.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-05-26 13:45:55 -07:00
Bryan Frimin
22e50b3f11 Add probo-agent CLI and deviceagent library
Introduce the standalone device agent binary and shared library
for enrollment, posture checks, self-update, and OS service
integration. Include build targets, module deps, and release
workflow so the agent can ship independently of server changes.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-05-26 13:45:54 -07:00
Bryan Frimin
4cdf7699e8 Release probod/v0.193.1 2026-05-26 11:48:15 -07:00
Sacha Al Himdani
08d1256ac0 Release probod/v0.193.0
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-05-26 18:30:27 +02:00
Sacha Al Himdani
b25b1e6b59 Release prb/v0.189.0
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-05-26 18:26:07 +02:00
Bryan Frimin
5b199062ca Release probod/v0.192.0
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-05-25 17:06:17 -07:00
Émile Ré
85a2f43e72 Release probod/v0.191.0
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-05-22 13:58:22 +02:00
Émile Ré
1ebbffcef9 Release prb/v0.188.0
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-05-22 13:58:07 +02:00
Émile Ré
d44272bb9e Release probod/v0.190.1 2026-05-20 15:19:12 +04:00
Émile Ré
3b5b4251b2 Release proboctl/v0.1.0
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-05-20 13:49:31 +04:00
Émile Ré
1c445d6597 Release probod/v0.190.0
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-05-20 13:48:57 +04:00
Émile Ré
9156d6a16a Add wsl linter and fix
Signed-off-by: Émile Ré <emile@probo.com>
2026-05-20 09:27:28 +04:00
Émile Ré
ed41b354b0 Allow domains to belong to multiple third parties
Change the unique constraint on common_third_party_domains from (domain)
to (common_third_party_id, domain) so a domain like google.com can be
associated with Google, Google Analytics, Google AdSense, etc.

Also fix Beamer domain (was hotjar.com, now getbeamer.com) and preserve
the original url.Parse error in pgconn DSN parsing.

Signed-off-by: Émile Ré <emile@probo.com>
2026-05-18 19:05:11 +04:00
Émile Ré
48a494461e Add proboctl CLI and move seed commands into it
Introduce a new proboctl Cobra CLI for Probo instance management
that connects directly to PostgreSQL. Move the standalone
common-third-parties-import and common-tracker-patterns-import
commands into proboctl as `proboctl seed common-third-parties`
and `proboctl seed common-tracker-patterns`, replacing flag-based
PG connection with a shared factory pattern.

Signed-off-by: Émile Ré <emile@probo.com>
2026-05-18 19:05:09 +04:00
Émile Ré
844817543d Handle LoadByID errors explicitly instead of silently falling through to auto-create
Signed-off-by: Émile Ré <emile@probo.com>
2026-05-18 19:05:09 +04:00
Émile Ré
53e1260d4d Add slug-based dedup and auto-create third parties from OCD
Add a slug column to common_third_parties for stable cross-source
deduplication. The OCD tracker patterns importer now resolves third
parties via a three-step cascade (slug lookup, domain fallback,
auto-create) instead of silently dropping unmatched links.

Signed-off-by: Émile Ré <emile@probo.com>
2026-05-18 19:05:08 +04:00
Émile Ré
a16821802e Fix PR review findings
- Replace copy-pasted New Relic URLs in Resend third-party entry
  with correct resend.com URLs and drop inapplicable fields
- Escape single '%' instead of '%%' in LIKE pattern conversion so
  literal percent signs are not treated as wildcards
- Return actual row ID from CommonTrackerPattern.Upsert via
  RETURNING id so conflict-path callers get the existing ID
- Add ORDER BY id ASC to vendor-by-common-third-party query for
  deterministic LIMIT 1 selection

Signed-off-by: Émile Ré <emile@getprobo.com>
Signed-off-by: Émile Ré <emile@probo.com>
2026-05-18 19:05:08 +04:00
Émile Ré
ad74bb2ed6 Switch tracker patterns import to Open Cookie Database
Replace the local data.json source with a live clone of the
Open Cookie Database repository. The importer now reads
open-cookie-database.json, maps OCD entries to tracker pattern
rows, and resolves third-party links via case-insensitive
platform name lookup.

Signed-off-by: Émile Ré <emile@getprobo.com>
Signed-off-by: Émile Ré <emile@probo.com>
2026-05-18 19:05:07 +04:00
Émile Ré
f0483d5280 Add tracker pattern seed data and domain aliases
Seed common_tracker_patterns from Open Cookie Database (2300
patterns with max_age_seconds where available). Add domain
aliases to all 92 vendors in data.json. Extend third-parties
import to upsert domain aliases. Add dedicated import command
for tracker patterns with third-party name cache.

Signed-off-by: Émile Ré <emile@getprobo.com>
Signed-off-by: Émile Ré <emile@probo.com>
2026-05-18 19:05:06 +04:00
Sacha Al Himdani
3ff66757ad Remove deprecated snapshot system
The register/document model has fully replaced the snapshot system.
Delete every snapshot-scoped row and strip the application code that
referenced them: SnapshotID/SourceID struct fields, snapshot_id IS NULL
filters, snapshot columns from SELECT/INSERT statements and named args,
and the eight migrate-*-snapshots-to-documents one-shot tools.

The remaining snapshot_id / source_id columns, the snapshots and
controls_snapshots tables, the snapshots_type enum, and the
snapshot-scoped indexes are now unused; they are dropped in a follow-up
schema migration so this change can roll back cleanly without leaving
orphaned data.

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-05-15 23:26:02 +02:00
Sacha Al Himdani
0360cfe3b4 Release probod/v0.189.0
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-05-15 09:27:11 +02:00
Sacha Al Himdani
0bca4456d7 Release prb/v0.187.0
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-05-15 09:24:52 +02:00
Sacha Al Himdani
eecbe4c46c Rename vendors to third parties
Renames the user-facing 'vendor' concept to 'third party' across the
entire codebase. The shared common_third_parties reference table is
unchanged.

Migration. Renames the vendor_category enum, the vendors and
vendor_<entity> tables (contacts, services, compliance_reports,
business_associate_agreements, data_privacy_agreements,
risk_assessments) and their vendor_id columns, the asset_vendors /
data_vendors / processing_activity_vendors junction tables,
generated_documents.vendors_document_id, the webhook_event_type
'vendor:<verb>' values, and the snapshots_type 'VENDORS' value.

Backend. Renames coredata models and SQL queries, probo services,
GraphQL / MCP API surface, console / trust / webhook resolvers and
types, the CLI (prb vendor* -> prb third-party*; pkg/cmd/vendormgmt
-> pkg/cmd/thirdpartymgmt), the document generator, vetting agent
prompts, and the common-third-parties-import command.

Frontend, packages, n8n, e2e. Renames apps/console pages, components,
hooks, routes, dialogs, and tabs; the shared @probo/vendors package
(now @probo/third-parties); the @probo/ui Vendors atoms (now
ThirdParties, VendorLogo -> ThirdPartyLogo); the n8n community node
actions/vendor folder (now actions/thirdParty); and the e2e Go test
suite (console and MCP). Filesystem and URL paths use kebab-case
(third-parties), GraphQL fields and TypeScript identifiers use
camelCase (thirdParty / thirdParties), Go types use PascalCase
(ThirdParty), and human-facing text uses 'third party' with a space.

Co-authored-by: Bryan Frimin <bryan@getprobo.com>
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-05-13 21:21:39 +02:00
Émile Ré
004ea564f4 Release probod/v0.188.0
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-05-13 15:22:30 +04:00
Émile Ré
d90cad8a58 Release prb/v0.186.0
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-05-13 15:20:15 +04:00
Émile Ré
85c028b537 Release probod/v0.187.0
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-05-12 18:49:33 +04:00
Émile Ré
fa55c0fb6e Fix SSRF protection bypass in common-third-parties-import
The HTTP transport was replaced after WithSSRFProtection() was applied,
discarding the protected dialer. Wrap the existing transport with
userAgentTransport instead of replacing it.

Signed-off-by: Émile Ré <emile@getprobo.com>
2026-05-12 16:43:38 +04:00
Émile Ré
10ac52eff3 Fix PR review feedback
- Preserve SSRF protection by wrapping the existing transport
  instead of replacing it with a bare http.Transport
- Strip DSN from url.Parse error to avoid leaking credentials
- Gate CommonThirdPartyCombobox on search length to prevent
  showing stale results when input is shortened
- Handle multi-value and uppercase sizes attributes in
  parseSizeAttr for correct icon-size ranking
- Match rel tokens containing "icon" (e.g. "shortcut icon")
  instead of requiring an exact match
- Limit HTML response body to 10 MiB before parsing
- Reject sslmode=prefer explicitly in both import tools

Signed-off-by: Émile Ré <emile@getprobo.com>
2026-05-12 16:43:37 +04:00
Émile Ré
f7dd08d432 Optimize website logo get
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-05-12 16:43:37 +04:00
Émile Ré
bf8c622bcd Extract webinspect package for logo discovery
Replace the Google Favicons API with HTML head tag parsing
to find higher-quality logos (SVG, apple-touch-icon, large
PNG icons, msapplication-TileImage). The new pkg/webinspect
package parses a website's DOM tree and is extensible for
future resource extraction (footer links, etc.).

Signed-off-by: Émile Ré <emile@getprobo.com>
2026-05-12 16:43:36 +04:00
Émile Ré
684fadea3e Remove unused description column from common_third_parties
The description field was never surfaced in the UI and added no value.
Drop it from the database, Go structs, GraphQL schema, import tool,
frontend fragment, and vendor seed data.

Signed-off-by: Émile Ré <emile@getprobo.com>
2026-05-12 16:43:36 +04:00
Émile Ré
4a405ce16c Self-host common third party logos via S3
Fetch favicons at import time instead of calling Google's favicon
service per page load. Logos are stored as public files in S3 and
served through the existing /api/files/v1/{id} endpoint.

Signed-off-by: Émile Ré <emile@getprobo.com>
2026-05-12 16:43:36 +04:00
Émile Ré
c76711e8b7 Use unsecure TLS
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-05-12 16:43:35 +04:00
Émile Ré
361fe1d713 Add common_third_parties shared reference table
Introduce a globally-shared, non-tenant-scoped common_third_parties
table that mirrors the public subset of vendor metadata, plus a
one-shot cmd/common-third-parties-import CLI that seeds it from
packages/vendors/data.json. The catalog will back future flows (e.g.
vendor autocomplete) so each tenant no longer needs to duplicate the
same baseline data.

The importer is idempotent via ON CONFLICT (lower(name)) DO UPDATE
and prints inserted/updated counts. GIDs use gid.NilTenant since the
table is not tenant-scoped; uniqueness still comes from the entity
type plus 14 bytes of timestamp/random suffix.

Signed-off-by: Émile Ré <emile@getprobo.com>
2026-05-12 16:43:35 +04:00
Émile Ré
95271e3f4e Release probod/v0.186.1
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-05-12 14:25:20 +04:00
Sacha Al Himdani
97c902ddf1 Release probod/v0.186.0
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-05-12 10:10:59 +02:00
Sacha Al Himdani
cc185f66dd Release prb/v0.185.0
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-05-12 10:08:28 +02:00
Émile Ré
d7f27e73d7 Release probod/v0.185.0
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-05-12 10:50:29 +04:00
Émile Ré
b6615d4279 Release prb/v0.184.0
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-05-12 10:49:55 +04:00