docs(identity-trust): add complete German trust guidance
Module Package Release / publish-packages (push) Successful in 12s
Module Package Release / publish-packages (push) Successful in 12s
This commit is contained in:
+2
-2
@@ -4,13 +4,13 @@ build-backend = "setuptools.build_meta"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "govoplan-identity-trust"
|
name = "govoplan-identity-trust"
|
||||||
version = "0.1.18"
|
version = "0.1.19"
|
||||||
description = "Public device-key, assurance, and key-epoch trust services for GovOPlaN."
|
description = "Public device-key, assurance, and key-epoch trust services for GovOPlaN."
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
requires-python = ">=3.12"
|
requires-python = ">=3.12"
|
||||||
license = "AGPL-3.0-or-later"
|
license = "AGPL-3.0-or-later"
|
||||||
authors = [{ name = "GovOPlaN" }]
|
authors = [{ name = "GovOPlaN" }]
|
||||||
dependencies = ["govoplan-core>=0.1.18"]
|
dependencies = ["govoplan-core>=0.1.37"]
|
||||||
|
|
||||||
[tool.setuptools.packages.find]
|
[tool.setuptools.packages.find]
|
||||||
where = ["src"]
|
where = ["src"]
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ from govoplan_core.core.module_guards import (
|
|||||||
)
|
)
|
||||||
from govoplan_core.core.modules import (
|
from govoplan_core.core.modules import (
|
||||||
CapabilityDocumentation,
|
CapabilityDocumentation,
|
||||||
|
DocumentationCondition,
|
||||||
DocumentationLink,
|
DocumentationLink,
|
||||||
DocumentationTopic,
|
DocumentationTopic,
|
||||||
FrontendModule,
|
FrontendModule,
|
||||||
@@ -35,7 +36,7 @@ from govoplan_identity_trust.backend.service import SqlIdentityTrustService
|
|||||||
|
|
||||||
MODULE_ID = "identity_trust"
|
MODULE_ID = "identity_trust"
|
||||||
MODULE_NAME = "Identity Trust"
|
MODULE_NAME = "Identity Trust"
|
||||||
MODULE_VERSION = "0.1.18"
|
MODULE_VERSION = "0.1.19"
|
||||||
DEVICE_READ_SCOPE = "identity_trust:device:read"
|
DEVICE_READ_SCOPE = "identity_trust:device:read"
|
||||||
DEVICE_WRITE_SCOPE = "identity_trust:device:write"
|
DEVICE_WRITE_SCOPE = "identity_trust:device:write"
|
||||||
KEY_ACCESS_SCOPE = "identity_trust:key_access:approve"
|
KEY_ACCESS_SCOPE = "identity_trust:key_access:approve"
|
||||||
@@ -246,6 +247,7 @@ manifest = ModuleManifest(
|
|||||||
audience=("user", "administrator", "security_officer", "auditor"),
|
audience=("user", "administrator", "security_officer", "auditor"),
|
||||||
related_modules=("core", "access", "encryption", "postbox"),
|
related_modules=("core", "access", "encryption", "postbox"),
|
||||||
metadata={
|
metadata={
|
||||||
|
"kind": "reference",
|
||||||
"help_contexts": [
|
"help_contexts": [
|
||||||
"identity_trust.settings.devices",
|
"identity_trust.settings.devices",
|
||||||
"identity_trust.admin.trust",
|
"identity_trust.admin.trust",
|
||||||
@@ -263,6 +265,42 @@ manifest = ModuleManifest(
|
|||||||
),
|
),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
translations={
|
||||||
|
"de": {
|
||||||
|
"title": "Datenschutzanfragen zu Identity Trust",
|
||||||
|
"summary": (
|
||||||
|
"Mandantenbezogene Gerätevertrauens-, Assurance-, Epochen- und "
|
||||||
|
"Schlüsselzugriffsnachweise ohne private oder operative Schlüsselmaterialien exportieren."
|
||||||
|
),
|
||||||
|
"body": (
|
||||||
|
"Identity Trust gleicht im aktiven Mandanten exakte Konto- und Identitätskennungen ab "
|
||||||
|
"und kann Ergebnisse auf ein bestimmtes Gerät oder einen bestimmten Schlüssel eingrenzen. "
|
||||||
|
"Das Auskunftspaket enthält begrenzte Registrierungsfelder öffentlicher Schlüssel, den "
|
||||||
|
"Assurance-Status, passende Schlüsselepochen und Schlüsselzugriffsentscheidungen. Private "
|
||||||
|
"JWK-Parameter, Anforderungsprüfsummen, Idempotenzschlüssel und beliebige "
|
||||||
|
"Provenienzinhalte werden niemals exportiert. Der Widerruf eines Geräteschlüssels erfordert "
|
||||||
|
"eine manuelle Prüfung der Wiederherstellung, aktiver verschlüsselter Ressourcen und der "
|
||||||
|
"aktuellen Epoche. Assurance-, Epochen- und Zugriffsentscheidungsdatensätze bleiben "
|
||||||
|
"unveränderliche Sicherheitsnachweise."
|
||||||
|
),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
structured_translation_version="1",
|
||||||
|
structured_translations={
|
||||||
|
"de": {
|
||||||
|
"consequence_classes": {
|
||||||
|
"export_trust_state": (
|
||||||
|
"Gibt ausschließlich begrenzte öffentliche Vertrauens- und Assurance-Nachweise zurück."
|
||||||
|
),
|
||||||
|
"review_device_revocation": (
|
||||||
|
"Erfordert eine Prüfung der Wiederherstellung und der Auswirkungen auf verschlüsselte Ressourcen."
|
||||||
|
),
|
||||||
|
"retain_security_evidence": (
|
||||||
|
"Bewahrt die Historie von Epochen, Assurance und Zugriffsentscheidungen auf."
|
||||||
|
),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
),
|
),
|
||||||
DocumentationTopic(
|
DocumentationTopic(
|
||||||
id="identity-trust.device-keys",
|
id="identity-trust.device-keys",
|
||||||
@@ -274,6 +312,102 @@ manifest = ModuleManifest(
|
|||||||
layer="available",
|
layer="available",
|
||||||
documentation_types=("admin", "user"),
|
documentation_types=("admin", "user"),
|
||||||
audience=("user", "administrator", "security_officer", "auditor"),
|
audience=("user", "administrator", "security_officer", "auditor"),
|
||||||
|
conditions=(
|
||||||
|
DocumentationCondition(
|
||||||
|
any_scopes=(DEVICE_READ_SCOPE, ASSURANCE_READ_SCOPE)
|
||||||
|
),
|
||||||
|
),
|
||||||
|
related_modules=("access", "audit", "policy", "encryption", "postbox"),
|
||||||
|
metadata={
|
||||||
|
"kind": "workflow",
|
||||||
|
"help_contexts": [
|
||||||
|
"identity_trust.settings.devices",
|
||||||
|
"identity_trust.admin.trust",
|
||||||
|
],
|
||||||
|
"purpose": (
|
||||||
|
"Review public device-key trust and rotate or revoke trust evidence without handling private keys."
|
||||||
|
),
|
||||||
|
"prerequisites": [
|
||||||
|
"The actor has device or assurance read access; consequential actions require their dedicated scopes.",
|
||||||
|
"Access has already authorized the account and protected resource independently.",
|
||||||
|
],
|
||||||
|
"steps": [
|
||||||
|
"Review registered public device keys and their assurance provenance in Settings.",
|
||||||
|
"Inspect the current key epoch and any recorded key-access decisions before changing trust state.",
|
||||||
|
"Assess recovery and encrypted-resource impact before revoking a device key.",
|
||||||
|
"Security officers may rotate a subject epoch or record assurance only with the corresponding authority.",
|
||||||
|
"Reload stale evidence before retrying a revision-bound revoke or rotation action.",
|
||||||
|
],
|
||||||
|
"limitations": [
|
||||||
|
"Identity Trust stores public trust metadata only and provides neither private-key custody nor content encryption.",
|
||||||
|
"Trust metadata is not device certification or proof that plaintext was never obtained.",
|
||||||
|
],
|
||||||
|
"operational_consequences": {
|
||||||
|
"revoke_device": "Blocks future trust decisions for the device but cannot erase plaintext already obtained.",
|
||||||
|
"rotate_epoch": "Changes the epoch accepted by future key-access decisions and requires impact review.",
|
||||||
|
"record_assurance": "Appends immutable provenance evidence; it does not replace Access authorization.",
|
||||||
|
},
|
||||||
|
"verification": [
|
||||||
|
"The displayed key contains public parameters only and names its current status and revision.",
|
||||||
|
"Every consequential action records the actor, revision, reason, and resulting trust state.",
|
||||||
|
"Access authorization and Identity Trust decisions remain separately auditable.",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
translations={
|
||||||
|
"de": {
|
||||||
|
"title": "Geräteschlüssel und Schlüsselepochen",
|
||||||
|
"summary": (
|
||||||
|
"Anmeldeberechtigung von öffentlichen Geräteschlüsseln und dem Vertrauen für "
|
||||||
|
"kryptografische Zugriffe trennen."
|
||||||
|
),
|
||||||
|
"body": (
|
||||||
|
"Identity Trust speichert ausschließlich öffentliche Schlüssel. Benutzer können ihre "
|
||||||
|
"Geräteschlüssel in den Einstellungen prüfen und widerrufen sowie die Herkunft von "
|
||||||
|
"Assurance-Nachweisen einsehen. Sicherheitsverantwortliche können ein berechtigtes Konto "
|
||||||
|
"auswählen, Nachweise zu widerrufenen oder kompromittierten Geräten prüfen, "
|
||||||
|
"Schlüsselepochen einer betroffenen Person rotieren und Schlüsselzugriffsentscheidungen "
|
||||||
|
"in der Administration nachvollziehen. Access entscheidet zuerst, ob ein Konto eine "
|
||||||
|
"geschützte Ressource erreichen darf; Identity Trust prüft anschließend das aktuelle Gerät "
|
||||||
|
"und die Schlüsselepoche und zeichnet eine nachvollziehbare Entscheidung auf. Historische "
|
||||||
|
"Freigaben für Funktionen und Postbox sind ausdrückliche Epochenrichtlinien. Ein Widerruf "
|
||||||
|
"kann bereits erhaltenen Klartext nicht löschen. Jeder Widerruf und jede Rotation ist an "
|
||||||
|
"eine Revision gebunden; veraltete Aktionen müssen neu geladen werden."
|
||||||
|
),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
structured_translation_version="1",
|
||||||
|
structured_translations={
|
||||||
|
"de": {
|
||||||
|
"purpose": (
|
||||||
|
"Das Vertrauen in öffentliche Geräteschlüssel prüfen und Vertrauensnachweise rotieren oder widerrufen, ohne private Schlüssel zu verarbeiten."
|
||||||
|
),
|
||||||
|
"prerequisites": [
|
||||||
|
"Die handelnde Person darf Geräte oder Assurance lesen; folgenreiche Aktionen erfordern ihre jeweils eigenen Berechtigungen.",
|
||||||
|
"Access hat das Konto und die geschützte Ressource bereits unabhängig autorisiert.",
|
||||||
|
],
|
||||||
|
"steps": [
|
||||||
|
"Registrierte öffentliche Geräteschlüssel und die Herkunft ihrer Assurance-Nachweise in den Einstellungen prüfen.",
|
||||||
|
"Vor einer Änderung des Vertrauensstatus die aktuelle Schlüsselepoche und aufgezeichnete Schlüsselzugriffsentscheidungen prüfen.",
|
||||||
|
"Vor dem Widerruf eines Geräteschlüssels Wiederherstellung und Auswirkungen auf verschlüsselte Ressourcen bewerten.",
|
||||||
|
"Sicherheitsverantwortliche dürfen eine Epoche rotieren oder Assurance nur mit der jeweiligen Berechtigung aufzeichnen.",
|
||||||
|
"Veraltete Nachweise neu laden, bevor eine revisionsgebundene Widerrufs- oder Rotationsaktion wiederholt wird.",
|
||||||
|
],
|
||||||
|
"limitations": [
|
||||||
|
"Identity Trust speichert nur öffentliche Vertrauensmetadaten und bietet weder private Schlüsselverwahrung noch Inhaltsverschlüsselung.",
|
||||||
|
"Vertrauensmetadaten sind keine Gerätezertifizierung und kein Nachweis dafür, dass niemals Klartext erhalten wurde.",
|
||||||
|
],
|
||||||
|
"operational_consequences": {
|
||||||
|
"revoke_device": "Blockiert künftige Vertrauensentscheidungen für das Gerät, kann aber bereits erhaltenen Klartext nicht löschen.",
|
||||||
|
"rotate_epoch": "Ändert die für künftige Schlüsselzugriffsentscheidungen akzeptierte Epoche und erfordert eine Folgenprüfung.",
|
||||||
|
"record_assurance": "Fügt unveränderliche Herkunftsnachweise an und ersetzt nicht die Autorisierung durch Access.",
|
||||||
|
},
|
||||||
|
"verification": [
|
||||||
|
"Der angezeigte Schlüssel enthält nur öffentliche Parameter und nennt aktuellen Status und Revision.",
|
||||||
|
"Jede folgenreiche Aktion zeichnet Akteur, Revision, Begründung und resultierenden Vertrauensstatus auf.",
|
||||||
|
"Access-Autorisierung und Identity-Trust-Entscheidung bleiben getrennt nachvollziehbar.",
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
links=(
|
links=(
|
||||||
DocumentationLink(
|
DocumentationLink(
|
||||||
label="Device-key trust and recovery boundary",
|
label="Device-key trust and recovery boundary",
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
from govoplan_core.core.modules import (
|
||||||
|
documentation_structured_translation_issues,
|
||||||
|
user_workflow_scope_condition_issues,
|
||||||
|
)
|
||||||
|
from govoplan_identity_trust.backend.manifest import manifest
|
||||||
|
|
||||||
|
|
||||||
|
class IdentityTrustDocumentationTests(unittest.TestCase):
|
||||||
|
def test_public_topics_have_complete_german_reference_content(self) -> None:
|
||||||
|
self.assertEqual(2, len(manifest.documentation))
|
||||||
|
for topic in manifest.documentation:
|
||||||
|
translation = topic.translations.get("de", {})
|
||||||
|
self.assertTrue(
|
||||||
|
all(translation.get(key) for key in ("title", "summary", "body"))
|
||||||
|
)
|
||||||
|
self.assertEqual((), documentation_structured_translation_issues(topic))
|
||||||
|
|
||||||
|
def test_documentation_has_scope_conditioned_workflow_and_reference(self) -> None:
|
||||||
|
kinds = {topic.metadata.get("kind") for topic in manifest.documentation}
|
||||||
|
self.assertIn("workflow", kinds)
|
||||||
|
self.assertIn("reference", kinds)
|
||||||
|
for topic in manifest.documentation:
|
||||||
|
self.assertEqual((), user_workflow_scope_condition_issues(topic))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
unittest.main()
|
||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@govoplan/identity-trust-webui",
|
"name": "@govoplan/identity-trust-webui",
|
||||||
"version": "0.1.18",
|
"version": "0.1.19",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
|
|||||||
Reference in New Issue
Block a user