Connectors

Connecter des systèmes, avec contrôles RGPD

DisponibleFondationsmanifest

À quoi elle sert ​

Connect other systems to the instance and let people connect their own accounts, with the controls that support GDPR compliance built in. Nothing leaves or enters without a recorded legal basis and a field allowlist; personal data goes out as keyed pseudonyms unless you decide otherwise, the sensitive classes stay withheld, every flow is logged without its payload, and withdrawing consent disconnects the service and purges its credentials. A processing register for Article 30 is generated from the connections. It provides technical controls; it is not legal advice or a certification, and the catalogue says for every service how much of it is implemented.

Ce que fait et ne fait pas le paquet ​

Connect external systems and let people connect their own accounts, with the controls that support GDPR compliance built in.

Modèles ​

connector_provider ​

A service or protocol a connection can use, from the catalogue shipped with obop

Groupe de lecture: connectors.user. Groupe d'écriture: connectors.admin.

ChampTypeClasse de donnéesDonnées personnellesGroupeVu par les agentsDescription
nametextnonenonconnectors.useren clairName of the provider
categoryselect (generic, messaging, payments, developer, calendar_contacts, automation)nonenonconnectors.useren clairKind of service
maturityselect (working, generic_adapter, definition_only)nonenonconnectors.useren clairHow much of it exists: working, generic adapter or definition only
engineselect (webhook_out, webhook_in, rest_pull, csv_export, none)nonenonconnectors.useren clairThe generic engine that runs it
auth_kindselect (api_key, bearer_token, basic, oauth2, webhook_in, webhook_out, none)nonenonconnectors.useren clairHow the connection authenticates
directionselect (inbound, outbound, both)nonenonconnectors.useren clairWhether data flows in, out or both ways
max_classestextnonenonconnectors.useren clairData classes the provider may receive at most, comma separated
purposelongtextnonenonconnectors.useren clairWhat the provider is used for
descriptionlongtextnonenonconnectors.useren clairHow it works and what is tested
legal_nametextnonenonconnectors.useren clairLegal name of the recipient (sub-processor information)
countrytextnonenonconnectors.useren clairCountry of the recipient
dpa_urltextnonenonconnectors.useren clairWhere the provider publishes its data processing agreement
eu_adequateselect (yes, no, verify)nonenonconnectors.useren clairWhether transfers rest on EU or adequate-country processing: yes, no or verify with the provider
verify_notelongtextnonenonconnectors.useren clairWhat to confirm with the provider before relying on these facts
allowed_hoststextnonenonconnectors.useren clairHosts the provider connects to, comma separated; empty means the connection names its own
config_fieldslongtextnonenonconnectors.useren clairSettings and credentials the provider needs, as a JSON list
setuplongtextnonenonconnectors.useren clairSetup instructions
webhook_schemeselect (standard, github, stripe)nonenonconnectors.useren clairSignature scheme of inbound webhooks
oauth_scopestextnonenonconnectors.useren clairOAuth scopes requested, for OAuth providers
enabledboolnonenonconnectors.useren clairAn administrator enabled the provider
users_may_useboolnonenonconnectors.useren clairPeople may connect their own accounts with it
dpa_recordedboolnonenonconnectors.useren clairThe agreement with the provider is recorded
legal_basisselect (consent, contract, legitimate_interest, legal_obligation)nonenonconnectors.useren clairLegal basis the administrator set for this provider
legal_basis_textlongtextnonenonconnectors.useren clairText shown to people when they are asked for consent

provider_policy ​

What an administrator decided about one provider: enabled, for whom, legal basis, agreement and OAuth client

Groupe de lecture: connectors.admin. Groupe d'écriture: connectors.admin.

ChampTypeClasse de donnéesDonnées personnellesGroupeVu par les agentsDescription
providertextnonenonconnectors.adminen clairId of the provider this policy is for
enabledboolnonenonconnectors.adminen clairThe provider may be connected at all
users_may_useboolnonenonconnectors.adminen clairPeople with connectors.user may connect their own accounts
allowed_grouptextnonenonconnectors.adminen clairPermission group that may use it; empty means connectors.user
legal_basisselect (consent, contract, legitimate_interest, legal_obligation)nonenonconnectors.adminen clairLegal basis recorded for connections of this provider
legal_basis_textlongtextnonenonconnectors.adminen clairText shown to people when they are asked for consent
dpa_recordedboolnonenonconnectors.adminen clairA data processing agreement with the provider is in place
dpa_referencetextnonenonconnectors.adminen clairWhere the agreement is kept or its reference
default_policylongtextnonenonconnectors.adminen clairPolicy JSON that new connections of this provider start with
oauth_client_idtextinternalnonconnectors.adminen clairOAuth client id you registered with the provider
oauth_client_secretlongtextsecretnonconnectors.adminnon communiquéOAuth client secret; write-only, stored encrypted

connection ​

A link to one external system, with its credentials, field allowlist, policy and state

Groupe de lecture: connectors.user. Groupe d'écriture: connectors.user.

ChampTypeClasse de donnéesDonnées personnellesGroupeVu par les agentsDescription
nametextnonenonconnectors.useren clairA name that tells you what the connection is for
providertextnonenonconnectors.useren clairId of the provider from the catalogue
owner_scopeselect (instance, user)nonenonconnectors.useren clairWhether the connection belongs to the instance or to one person
owner_usertextinternalouiconnectors.usermasquéThe person who owns the connection
owner_groupstextnonenonconnectors.adminen clairPermission groups the owner held when the connection was last changed
stateselect (draft, connected, paused, error, revoked)nonenonconnectors.useren clairWhere the connection is: draft, connected, paused, error or revoked
configlongtextnonenonconnectors.useren clairNon-secret settings as a JSON object
credentialslongtextsecretnonconnectors.usernon communiquéCredentials as a JSON object; write-only, stored encrypted, never returned
credentials_hinttextnonenonconnectors.useren clairWhether credentials are set, with at most the last four characters
oauth_tokenslongtextsecretnonconnectors.usernon communiquéOAuth tokens; write-only, stored encrypted, never returned
field_allowlistlongtextnonenonconnectors.useren clairFields that may leave or be accepted, as a JSON object of model to field names; empty means nothing
policylongtextnonenonconnectors.useren clairTreatment overrides by class or field and impact-assessment acknowledgements, as JSON
rate_limit_per_hournumbernonenonconnectors.useren clairMost flows per hour
volume_cap_per_daynumbernonenonconnectors.useren clairMost records per day
retention_daysnumbernonenonconnectors.useren clairDays flow logs and runs are kept
created_attextnonenonconnectors.useren clairWhen the connection was created
last_sync_attextnonenonconnectors.useren clairWhen the connection last ran
last_errortextnonenonconnectors.useren clairSummary of the last failure, without payloads
resultlongtextnonenonconnectors.useren clairOutput of the last command (test, sync, authorisation link); never stored

The legal basis recorded for a connection: who, why, which data classes, and whether it was withdrawn

Groupe de lecture: connectors.user. Groupe d'écriture: connectors.user.

ChampTypeClasse de donnéesDonnées personnellesGroupeVu par les agentsDescription
connectionref → connectionnonenonconnectors.useren clairThe connection this basis is for
owner_usertextinternalouiconnectors.usermasquéOwner of the connection
stateselect (active, withdrawn, superseded)nonenonconnectors.useren clairactive, withdrawn, or superseded by a newer record
subject_kindselect (user, party, instance)nonenonconnectors.useren clairWhose basis it is: a user, a party or the instance
subjecttextinternalouiconnectors.usermasquéId of the party when the subject is a party
given_bytextinternalouiconnectors.usermasquéWho recorded it
purposelongtextnonenonconnectors.useren clairThe purpose the data is processed for
legal_basisselect (consent, contract, legitimate_interest, legal_obligation)nonenonconnectors.useren clairconsent, contract, legitimate interest or legal obligation
notelongtextnonenonconnectors.useren clairExplanation; for legitimate interest the balancing test
classestextnonenonconnectors.useren clairData classes that may flow under this record, computed from the connection
fields_summarylongtextnonenonconnectors.useren clairModels and fields that may flow, computed from the connection
recorded_attextnonenonconnectors.useren clairWhen it was recorded
withdrawn_attextnonenonconnectors.useren clairWhen it was withdrawn, if it was
withdrawn_bytextinternalouiconnectors.usermasquéWho withdrew it

sync_run ​

One run of a connection: when, how many records, and how it ended; never the data

Groupe de lecture: connectors.user. Groupe d'écriture: connectors.admin.

ChampTypeClasse de donnéesDonnées personnellesGroupeVu par les agentsDescription
connectionref → connectionnonenonconnectors.useren clairThe connection that ran
owner_usertextinternalouiconnectors.usermasquéOwner of the connection
directionselect (inbound, outbound)nonenonconnectors.useren clairWhether data went out or came in
kindselect (manual, event, pull, webhook, test)nonenonconnectors.useren clairWhat started it
started_attextnonenonconnectors.useren clairWhen it started
finished_attextnonenonconnectors.useren clairWhen it ended
statusselect (running, succeeded, partial, failed, retrying, dead_letter)nonenonconnectors.useren clairHow it ended
recordsnumbernonenonconnectors.useren clairRecords sent or accepted
rejectednumbernonenonconnectors.useren clairRecords refused
proposednumbernonenonconnectors.useren clairChanges held for approval
error_summarytextnonenonconnectors.useren clairWhy it failed, without payloads

data_flow_log ​

Append-only record of every flow: when, what, how many, which fields, how treated, and a hash of the payload; never the payload

Groupe de lecture: connectors.user. Groupe d'écriture: connectors.admin.

ChampTypeClasse de donnéesDonnées personnellesGroupeVu par les agentsDescription
connectionref → connectionnonenonconnectors.useren clairThe connection the flow belongs to
owner_usertextinternalouiconnectors.usermasquéOwner of the connection
attextnonenonconnectors.useren clairWhen it happened
directionselect (outbound, inbound)nonenonconnectors.useren clairWhether data went out or came in
modeltextnonenonconnectors.useren clairThe model the records belong to
record_countnumbernonenonconnectors.useren clairHow many records
fields_senttextnonenonconnectors.useren clairFields that left or were accepted, comma separated
fields_deniedtextnonenonconnectors.useren clairFields the policy withheld, comma separated
masking_modetextnonenonconnectors.useren clairTreatments applied, for example pseudonymise=2;allow=1
payload_hashtextnonenonconnectors.useren clairSHA-256 of the payload after treatment
outcomeselect (released, received, refused, rejected, erased)nonenonconnectors.useren clairreleased, received, refused, rejected or erased
reasontextnonenonconnectors.useren clairWhy a flow was refused or a record rejected

processing_register ​

The record of processing activities (GDPR Article 30) generated from the connections; exportable as CSV

Groupe de lecture: connectors.admin. Groupe d'écriture: connectors.admin.

ChampTypeClasse de donnéesDonnées personnellesGroupeVu par les agentsDescription
connectionref → connectionnonenonconnectors.adminen clairThe connection this row describes
nametextnonenonconnectors.adminen clairName of the connection
statetextnonenonconnectors.adminen clairState of the connection
owner_scopetextnonenonconnectors.adminen clairInstance or user
owner_usertextinternalouiconnectors.adminmasquéOwner of the connection
providertextnonenonconnectors.adminen clairProvider id
recipientlongtextnonenonconnectors.adminen clairWho receives the data (legal name)
recipient_countrytextnonenonconnectors.adminen clairWhere the recipient is
purposelongtextnonenonconnectors.adminen clairPurpose of the processing
legal_basistextnonenonconnectors.adminen clairRecorded legal basis
consent_recorded_attextnonenonconnectors.adminen clairWhen the basis was recorded
data_subjectslongtextnonenonconnectors.adminen clairCategories of data subjects
personal_data_categorieslongtextnonenonconnectors.adminen clairCategories of personal data, with class and treatment
transfer_basislongtextnonenonconnectors.adminen clairBasis for transfers to third countries
agreement_recordedtextnonenonconnectors.adminen clairWhether the agreement with the recipient is recorded
retention_daystextnonenonconnectors.adminen clairRetention of logs, in days
safeguardslongtextnonenonconnectors.adminen clairTechnical and organisational measures
csvlongtextnonenonconnectors.adminen clairThe register as CSV; filled by the export command, never stored

egress_policy ​

Instance-wide switches for data flows: the master switch, EU-only providers, the agreement requirement and the host allow-list

Groupe de lecture: connectors.admin. Groupe d'écriture: connectors.admin.

ChampTypeClasse de donnéesDonnées personnellesGroupeVu par les agentsDescription
flows_enabledboolnonenonconnectors.adminen clairMaster switch: when off nothing leaves and nothing is accepted
eu_onlyboolnonenonconnectors.adminen clairPersonal data only goes to providers with an EU or adequacy basis
require_dpaboolnonenonconnectors.adminen clairPersonal data, even pseudonymised, only goes to providers whose agreement is recorded
host_allowlisttextnonenonconnectors.adminen clairHosts connections may reach, comma separated; empty means no extra restriction
default_retention_daysnumbernonenonconnectors.adminen clairRetention for logs of connections that no longer exist
resultlongtextnonenonconnectors.adminen clairOutput of the last command (checklist, purge); never stored

privacy_preview ​

What a sample outbound record looks like after the policy: the exact payload and the treatment of each field

Groupe de lecture: connectors.user. Groupe d'écriture: connectors.user.

ChampTypeClasse de donnéesDonnées personnellesGroupeVu par les agentsDescription
providertextnonenonconnectors.useren clairProvider the preview is for
connectiontextnonenonconnectors.useren clairAn existing connection to preview, instead of a provider
target_modeltextnonenonconnectors.useren clairThe model to preview
record_idtextnonenonconnectors.useren clairA record to use as the sample; empty means the first one
field_allowlistlongtextnonenonconnectors.useren clairFields to include, as a JSON object of model to field names
policylongtextnonenonconnectors.useren clairPolicy JSON to preview
payloadlongtextnonenonconnectors.useren clairThe payload after treatment, as JSON; never stored
treatmentslongtextnonenonconnectors.useren clairEach field with its class and treatment, as JSON; never stored

Flux de travail ​

connection ​

ActionTransitionQui peut l'exécuterApprobation
connection.connectstate: draft → connectedconnectors.useroui
connection.pausestate: connected → pausedconnectors.useroui
connection.resumestate: paused → connectedconnectors.useroui
connection.retrystate: error → connectedconnectors.useroui
connection.revokestate: * → revokedconnectors.useroui
connection.test-connectors.usernon
connection.sync-connectors.useroui
connection.oauth_start-connectors.usernon
ActionTransitionQui peut l'exécuterApprobation
consent.withdrawstate: active → withdrawnconnectors.useroui

processing_register ​

ActionTransitionQui peut l'exécuterApprobation
processing_register.export_csv-connectors.adminnon

egress_policy ​

ActionTransitionQui peut l'exécuterApprobation
egress_policy.checklist-connectors.adminnon
egress_policy.purge-connectors.adminoui

privacy_preview ​

ActionTransitionQui peut l'exécuterApprobation
privacy_preview.render-connectors.usernon

Groupes de permissions ​

Groupes utilisés par cette application :

  • connectors.admin
  • connectors.user

Étapes d'approbation ​

Étapes qu'un agent ne peut que proposer :

  • connection.connect
  • connection.pause
  • connection.resume
  • connection.retry
  • connection.revoke
  • connection.sync
  • consent.withdraw
  • egress_policy.purge

Ce que les agents peuvent et ne peuvent pas faire ​

Un agent peut lire, rechercher, créer et modifier les enregistrements de cette application, et exécuter les actions qui ne requièrent pas d'approbation, dans les limites des groupes de permissions de son jeton.

Il ne peut que proposer ces étapes, qu'une personne doit approuver : connection.connect, connection.pause, connection.resume, connection.retry, connection.revoke, connection.sync, consent.withdraw, egress_policy.purge, connector_provider.delete, provider_policy.delete, connection.delete, consent.delete, sync_run.delete, data_flow_log.delete, processing_register.delete, egress_policy.delete, privacy_preview.delete.

Les données personnelles sont masquées sous forme de jetons de substitution : connection.owner_user, consent.owner_user, consent.subject, consent.given_by, consent.withdrawn_by, sync_run.owner_user, data_flow_log.owner_user, processing_register.owner_user.

Ces champs ne sont pas communiqués aux agents : provider_policy.oauth_client_secret, connection.credentials, connection.oauth_tokens.

Dépendances ​

Aucune.

Installation ​

Intégrée. Elle est disponible dans chaque instance et ne peut pas être supprimée.

Créer la vôtre ​

Le guide des modules montre comment sont écrites les applications de ce type