Connectors

Systeme verbinden, mit DSGVO-Kontrollen

VerfügbarGrundlagenmanifest

Wofür sie gedacht ist ​

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.

Was das Paket leistet und was nicht ​

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

Modelle ​

connector_provider ​

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

Lesegruppe: connectors.user. Schreibgruppe: connectors.admin.

FeldArtDatenklassePersonenbezogene DatenGruppeAgenten sehenBeschreibung
nametextnoneneinconnectors.userim KlartextName of the provider
categoryselect (generic, messaging, payments, developer, calendar_contacts, automation)noneneinconnectors.userim KlartextKind of service
maturityselect (working, generic_adapter, definition_only)noneneinconnectors.userim KlartextHow much of it exists: working, generic adapter or definition only
engineselect (webhook_out, webhook_in, rest_pull, csv_export, none)noneneinconnectors.userim KlartextThe generic engine that runs it
auth_kindselect (api_key, bearer_token, basic, oauth2, webhook_in, webhook_out, none)noneneinconnectors.userim KlartextHow the connection authenticates
directionselect (inbound, outbound, both)noneneinconnectors.userim KlartextWhether data flows in, out or both ways
max_classestextnoneneinconnectors.userim KlartextData classes the provider may receive at most, comma separated
purposelongtextnoneneinconnectors.userim KlartextWhat the provider is used for
descriptionlongtextnoneneinconnectors.userim KlartextHow it works and what is tested
legal_nametextnoneneinconnectors.userim KlartextLegal name of the recipient (sub-processor information)
countrytextnoneneinconnectors.userim KlartextCountry of the recipient
dpa_urltextnoneneinconnectors.userim KlartextWhere the provider publishes its data processing agreement
eu_adequateselect (yes, no, verify)noneneinconnectors.userim KlartextWhether transfers rest on EU or adequate-country processing: yes, no or verify with the provider
verify_notelongtextnoneneinconnectors.userim KlartextWhat to confirm with the provider before relying on these facts
allowed_hoststextnoneneinconnectors.userim KlartextHosts the provider connects to, comma separated; empty means the connection names its own
config_fieldslongtextnoneneinconnectors.userim KlartextSettings and credentials the provider needs, as a JSON list
setuplongtextnoneneinconnectors.userim KlartextSetup instructions
webhook_schemeselect (standard, github, stripe)noneneinconnectors.userim KlartextSignature scheme of inbound webhooks
oauth_scopestextnoneneinconnectors.userim KlartextOAuth scopes requested, for OAuth providers
enabledboolnoneneinconnectors.userim KlartextAn administrator enabled the provider
users_may_useboolnoneneinconnectors.userim KlartextPeople may connect their own accounts with it
dpa_recordedboolnoneneinconnectors.userim KlartextThe agreement with the provider is recorded
legal_basisselect (consent, contract, legitimate_interest, legal_obligation)noneneinconnectors.userim KlartextLegal basis the administrator set for this provider
legal_basis_textlongtextnoneneinconnectors.userim KlartextText 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

Lesegruppe: connectors.admin. Schreibgruppe: connectors.admin.

FeldArtDatenklassePersonenbezogene DatenGruppeAgenten sehenBeschreibung
providertextnoneneinconnectors.adminim KlartextId of the provider this policy is for
enabledboolnoneneinconnectors.adminim KlartextThe provider may be connected at all
users_may_useboolnoneneinconnectors.adminim KlartextPeople with connectors.user may connect their own accounts
allowed_grouptextnoneneinconnectors.adminim KlartextPermission group that may use it; empty means connectors.user
legal_basisselect (consent, contract, legitimate_interest, legal_obligation)noneneinconnectors.adminim KlartextLegal basis recorded for connections of this provider
legal_basis_textlongtextnoneneinconnectors.adminim KlartextText shown to people when they are asked for consent
dpa_recordedboolnoneneinconnectors.adminim KlartextA data processing agreement with the provider is in place
dpa_referencetextnoneneinconnectors.adminim KlartextWhere the agreement is kept or its reference
default_policylongtextnoneneinconnectors.adminim KlartextPolicy JSON that new connections of this provider start with
oauth_client_idtextinternalneinconnectors.adminim KlartextOAuth client id you registered with the provider
oauth_client_secretlongtextsecretneinconnectors.adminzurückgehaltenOAuth client secret; write-only, stored encrypted

connection ​

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

Lesegruppe: connectors.user. Schreibgruppe: connectors.user.

FeldArtDatenklassePersonenbezogene DatenGruppeAgenten sehenBeschreibung
nametextnoneneinconnectors.userim KlartextA name that tells you what the connection is for
providertextnoneneinconnectors.userim KlartextId of the provider from the catalogue
owner_scopeselect (instance, user)noneneinconnectors.userim KlartextWhether the connection belongs to the instance or to one person
owner_usertextinternaljaconnectors.usermaskiertThe person who owns the connection
owner_groupstextnoneneinconnectors.adminim KlartextPermission groups the owner held when the connection was last changed
stateselect (draft, connected, paused, error, revoked)noneneinconnectors.userim KlartextWhere the connection is: draft, connected, paused, error or revoked
configlongtextnoneneinconnectors.userim KlartextNon-secret settings as a JSON object
credentialslongtextsecretneinconnectors.userzurückgehaltenCredentials as a JSON object; write-only, stored encrypted, never returned
credentials_hinttextnoneneinconnectors.userim KlartextWhether credentials are set, with at most the last four characters
oauth_tokenslongtextsecretneinconnectors.userzurückgehaltenOAuth tokens; write-only, stored encrypted, never returned
field_allowlistlongtextnoneneinconnectors.userim KlartextFields that may leave or be accepted, as a JSON object of model to field names; empty means nothing
policylongtextnoneneinconnectors.userim KlartextTreatment overrides by class or field and impact-assessment acknowledgements, as JSON
rate_limit_per_hournumbernoneneinconnectors.userim KlartextMost flows per hour
volume_cap_per_daynumbernoneneinconnectors.userim KlartextMost records per day
retention_daysnumbernoneneinconnectors.userim KlartextDays flow logs and runs are kept
created_attextnoneneinconnectors.userim KlartextWhen the connection was created
last_sync_attextnoneneinconnectors.userim KlartextWhen the connection last ran
last_errortextnoneneinconnectors.userim KlartextSummary of the last failure, without payloads
resultlongtextnoneneinconnectors.userim KlartextOutput 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

Lesegruppe: connectors.user. Schreibgruppe: connectors.user.

FeldArtDatenklassePersonenbezogene DatenGruppeAgenten sehenBeschreibung
connectionref → connectionnoneneinconnectors.userim KlartextThe connection this basis is for
owner_usertextinternaljaconnectors.usermaskiertOwner of the connection
stateselect (active, withdrawn, superseded)noneneinconnectors.userim Klartextactive, withdrawn, or superseded by a newer record
subject_kindselect (user, party, instance)noneneinconnectors.userim KlartextWhose basis it is: a user, a party or the instance
subjecttextinternaljaconnectors.usermaskiertId of the party when the subject is a party
given_bytextinternaljaconnectors.usermaskiertWho recorded it
purposelongtextnoneneinconnectors.userim KlartextThe purpose the data is processed for
legal_basisselect (consent, contract, legitimate_interest, legal_obligation)noneneinconnectors.userim Klartextconsent, contract, legitimate interest or legal obligation
notelongtextnoneneinconnectors.userim KlartextExplanation; for legitimate interest the balancing test
classestextnoneneinconnectors.userim KlartextData classes that may flow under this record, computed from the connection
fields_summarylongtextnoneneinconnectors.userim KlartextModels and fields that may flow, computed from the connection
recorded_attextnoneneinconnectors.userim KlartextWhen it was recorded
withdrawn_attextnoneneinconnectors.userim KlartextWhen it was withdrawn, if it was
withdrawn_bytextinternaljaconnectors.usermaskiertWho withdrew it

sync_run ​

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

Lesegruppe: connectors.user. Schreibgruppe: connectors.admin.

FeldArtDatenklassePersonenbezogene DatenGruppeAgenten sehenBeschreibung
connectionref → connectionnoneneinconnectors.userim KlartextThe connection that ran
owner_usertextinternaljaconnectors.usermaskiertOwner of the connection
directionselect (inbound, outbound)noneneinconnectors.userim KlartextWhether data went out or came in
kindselect (manual, event, pull, webhook, test)noneneinconnectors.userim KlartextWhat started it
started_attextnoneneinconnectors.userim KlartextWhen it started
finished_attextnoneneinconnectors.userim KlartextWhen it ended
statusselect (running, succeeded, partial, failed, retrying, dead_letter)noneneinconnectors.userim KlartextHow it ended
recordsnumbernoneneinconnectors.userim KlartextRecords sent or accepted
rejectednumbernoneneinconnectors.userim KlartextRecords refused
proposednumbernoneneinconnectors.userim KlartextChanges held for approval
error_summarytextnoneneinconnectors.userim KlartextWhy 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

Lesegruppe: connectors.user. Schreibgruppe: connectors.admin.

FeldArtDatenklassePersonenbezogene DatenGruppeAgenten sehenBeschreibung
connectionref → connectionnoneneinconnectors.userim KlartextThe connection the flow belongs to
owner_usertextinternaljaconnectors.usermaskiertOwner of the connection
attextnoneneinconnectors.userim KlartextWhen it happened
directionselect (outbound, inbound)noneneinconnectors.userim KlartextWhether data went out or came in
modeltextnoneneinconnectors.userim KlartextThe model the records belong to
record_countnumbernoneneinconnectors.userim KlartextHow many records
fields_senttextnoneneinconnectors.userim KlartextFields that left or were accepted, comma separated
fields_deniedtextnoneneinconnectors.userim KlartextFields the policy withheld, comma separated
masking_modetextnoneneinconnectors.userim KlartextTreatments applied, for example pseudonymise=2;allow=1
payload_hashtextnoneneinconnectors.userim KlartextSHA-256 of the payload after treatment
outcomeselect (released, received, refused, rejected, erased)noneneinconnectors.userim Klartextreleased, received, refused, rejected or erased
reasontextnoneneinconnectors.userim KlartextWhy 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

Lesegruppe: connectors.admin. Schreibgruppe: connectors.admin.

FeldArtDatenklassePersonenbezogene DatenGruppeAgenten sehenBeschreibung
connectionref → connectionnoneneinconnectors.adminim KlartextThe connection this row describes
nametextnoneneinconnectors.adminim KlartextName of the connection
statetextnoneneinconnectors.adminim KlartextState of the connection
owner_scopetextnoneneinconnectors.adminim KlartextInstance or user
owner_usertextinternaljaconnectors.adminmaskiertOwner of the connection
providertextnoneneinconnectors.adminim KlartextProvider id
recipientlongtextnoneneinconnectors.adminim KlartextWho receives the data (legal name)
recipient_countrytextnoneneinconnectors.adminim KlartextWhere the recipient is
purposelongtextnoneneinconnectors.adminim KlartextPurpose of the processing
legal_basistextnoneneinconnectors.adminim KlartextRecorded legal basis
consent_recorded_attextnoneneinconnectors.adminim KlartextWhen the basis was recorded
data_subjectslongtextnoneneinconnectors.adminim KlartextCategories of data subjects
personal_data_categorieslongtextnoneneinconnectors.adminim KlartextCategories of personal data, with class and treatment
transfer_basislongtextnoneneinconnectors.adminim KlartextBasis for transfers to third countries
agreement_recordedtextnoneneinconnectors.adminim KlartextWhether the agreement with the recipient is recorded
retention_daystextnoneneinconnectors.adminim KlartextRetention of logs, in days
safeguardslongtextnoneneinconnectors.adminim KlartextTechnical and organisational measures
csvlongtextnoneneinconnectors.adminim KlartextThe 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

Lesegruppe: connectors.admin. Schreibgruppe: connectors.admin.

FeldArtDatenklassePersonenbezogene DatenGruppeAgenten sehenBeschreibung
flows_enabledboolnoneneinconnectors.adminim KlartextMaster switch: when off nothing leaves and nothing is accepted
eu_onlyboolnoneneinconnectors.adminim KlartextPersonal data only goes to providers with an EU or adequacy basis
require_dpaboolnoneneinconnectors.adminim KlartextPersonal data, even pseudonymised, only goes to providers whose agreement is recorded
host_allowlisttextnoneneinconnectors.adminim KlartextHosts connections may reach, comma separated; empty means no extra restriction
default_retention_daysnumbernoneneinconnectors.adminim KlartextRetention for logs of connections that no longer exist
resultlongtextnoneneinconnectors.adminim KlartextOutput 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

Lesegruppe: connectors.user. Schreibgruppe: connectors.user.

FeldArtDatenklassePersonenbezogene DatenGruppeAgenten sehenBeschreibung
providertextnoneneinconnectors.userim KlartextProvider the preview is for
connectiontextnoneneinconnectors.userim KlartextAn existing connection to preview, instead of a provider
target_modeltextnoneneinconnectors.userim KlartextThe model to preview
record_idtextnoneneinconnectors.userim KlartextA record to use as the sample; empty means the first one
field_allowlistlongtextnoneneinconnectors.userim KlartextFields to include, as a JSON object of model to field names
policylongtextnoneneinconnectors.userim KlartextPolicy JSON to preview
payloadlongtextnoneneinconnectors.userim KlartextThe payload after treatment, as JSON; never stored
treatmentslongtextnoneneinconnectors.userim KlartextEach field with its class and treatment, as JSON; never stored

Workflows ​

connection ​

AktionBewegtWer sie ausführen darfFreigabe
connection.connectstate: draft → connectedconnectors.userja
connection.pausestate: connected → pausedconnectors.userja
connection.resumestate: paused → connectedconnectors.userja
connection.retrystate: error → connectedconnectors.userja
connection.revokestate: * → revokedconnectors.userja
connection.test-connectors.usernein
connection.sync-connectors.userja
connection.oauth_start-connectors.usernein
AktionBewegtWer sie ausführen darfFreigabe
consent.withdrawstate: active → withdrawnconnectors.userja

processing_register ​

AktionBewegtWer sie ausführen darfFreigabe
processing_register.export_csv-connectors.adminnein

egress_policy ​

AktionBewegtWer sie ausführen darfFreigabe
egress_policy.checklist-connectors.adminnein
egress_policy.purge-connectors.adminja

privacy_preview ​

AktionBewegtWer sie ausführen darfFreigabe
privacy_preview.render-connectors.usernein

Berechtigungsgruppen ​

Von dieser App verwendete Gruppen:

  • connectors.admin
  • connectors.user

Freigabeschritte ​

Schritte, die ein Agent nur vorschlagen kann:

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

Was Agenten tun können und was nicht ​

Ein Agent kann Datensätze dieser App lesen, durchsuchen, anlegen und aktualisieren sowie Aktionen ausführen, die keine Freigabe brauchen, und zwar innerhalb der Berechtigungsgruppen seines Tokens.

Diese Schritte kann er nur vorschlagen, und eine Person muss sie freigeben: 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.

Personenbezogene Daten werden als Platzhalter maskiert: 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.

Diese Felder werden Agenten vollständig vorenthalten: provider_policy.oauth_client_secret, connection.credentials, connection.oauth_tokens.

Abhängigkeiten ​

Keine.

Installation ​

Integriert. Sie ist in jeder Instanz verfügbar und kann nicht entfernt werden.

Selbst bauen ​

Der Modulleitfaden zeigt, wie Apps wie diese geschrieben werden