@tantainnovative/ndpr-toolkit 1.0.3 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/next-env.d.ts +5 -0
- package/package.json +1 -1
- package/packages/ndpr-toolkit/dist/components/breach/BreachNotificationManager.d.ts +62 -0
- package/packages/ndpr-toolkit/dist/components/breach/BreachReportForm.d.ts +66 -0
- package/packages/ndpr-toolkit/dist/components/breach/BreachRiskAssessment.d.ts +50 -0
- package/packages/ndpr-toolkit/dist/components/breach/RegulatoryReportGenerator.d.ts +94 -0
- package/packages/ndpr-toolkit/dist/components/consent/ConsentBanner.d.ts +79 -0
- package/packages/ndpr-toolkit/dist/components/consent/ConsentManager.d.ts +73 -0
- package/packages/ndpr-toolkit/dist/components/consent/ConsentStorage.d.ts +41 -0
- package/packages/ndpr-toolkit/dist/components/dpia/DPIAQuestionnaire.d.ts +70 -0
- package/packages/ndpr-toolkit/dist/components/dpia/DPIAReport.d.ts +40 -0
- package/packages/ndpr-toolkit/dist/components/dpia/StepIndicator.d.ts +64 -0
- package/packages/ndpr-toolkit/dist/components/dsr/DSRDashboard.d.ts +58 -0
- package/packages/ndpr-toolkit/dist/components/dsr/DSRRequestForm.d.ts +74 -0
- package/packages/ndpr-toolkit/dist/components/dsr/DSRTracker.d.ts +56 -0
- package/packages/ndpr-toolkit/dist/components/policy/PolicyExporter.d.ts +65 -0
- package/packages/ndpr-toolkit/dist/components/policy/PolicyGenerator.d.ts +54 -0
- package/packages/ndpr-toolkit/dist/components/policy/PolicyPreview.d.ts +71 -0
- package/packages/ndpr-toolkit/dist/hooks/useBreach.d.ts +97 -0
- package/packages/ndpr-toolkit/dist/hooks/useConsent.d.ts +63 -0
- package/packages/ndpr-toolkit/dist/hooks/useDPIA.d.ts +92 -0
- package/packages/ndpr-toolkit/dist/hooks/useDSR.d.ts +72 -0
- package/packages/ndpr-toolkit/dist/hooks/usePrivacyPolicy.d.ts +87 -0
- package/packages/ndpr-toolkit/dist/index.d.ts +31 -0
- package/packages/ndpr-toolkit/dist/index.esm.js +2 -0
- package/packages/ndpr-toolkit/dist/index.esm.js.map +1 -0
- package/packages/ndpr-toolkit/dist/index.js +2 -0
- package/packages/ndpr-toolkit/dist/index.js.map +1 -0
- package/packages/ndpr-toolkit/dist/setupTests.d.ts +2 -0
- package/packages/ndpr-toolkit/dist/types/breach.d.ts +239 -0
- package/packages/ndpr-toolkit/dist/types/consent.d.ts +95 -0
- package/packages/ndpr-toolkit/dist/types/dpia.d.ts +196 -0
- package/packages/ndpr-toolkit/dist/types/dsr.d.ts +162 -0
- package/packages/ndpr-toolkit/dist/types/privacy.d.ts +204 -0
- package/packages/ndpr-toolkit/dist/utils/breach.d.ts +14 -0
- package/packages/ndpr-toolkit/dist/utils/consent.d.ts +10 -0
- package/packages/ndpr-toolkit/dist/utils/dpia.d.ts +12 -0
- package/packages/ndpr-toolkit/dist/utils/dsr.d.ts +11 -0
- package/packages/ndpr-toolkit/dist/utils/privacy.d.ts +12 -0
- package/src/components/consent/ConsentBanner.tsx +82 -48
- package/src/components/data-subject-rights/DataSubjectRequestForm.tsx +240 -129
- package/src/components/dpia/DPIAQuestionnaire.tsx +162 -122
- package/src/components/privacy-policy/PolicyGenerator.tsx +5 -5
- package/src/components/privacy-policy/steps/CustomSectionsStep.tsx +103 -77
- package/src/components/privacy-policy/steps/PolicyPreviewStep.tsx +117 -63
- package/src/hooks/useConsent.ts +16 -10
- package/src/lib/consentService.ts +44 -37
- package/src/lib/dpiaQuestions.ts +139 -99
- package/src/lib/requestService.ts +21 -17
- package/src/types/index.ts +13 -8
- package/.claude/settings.local.json +0 -20
- package/.eslintrc.json +0 -10
- package/.github/workflows/ci.yml +0 -36
- package/.github/workflows/nextjs.yml +0 -104
- package/.husky/commit-msg +0 -4
- package/.husky/pre-commit +0 -4
- package/.lintstagedrc.js +0 -4
- package/.nvmrc +0 -1
- package/.versionrc +0 -17
- package/CLAUDE.md +0 -90
- package/commitlint.config.js +0 -36
- package/jest.config.js +0 -31
- package/jest.setup.js +0 -15
- package/packages/ndpr-toolkit/jest.config.js +0 -23
- package/packages/ndpr-toolkit/src/__tests__/components/consent/ConsentBanner.test.tsx +0 -119
- package/packages/ndpr-toolkit/src/__tests__/components/consent/ConsentManager.test.tsx +0 -122
- package/packages/ndpr-toolkit/src/__tests__/components/consent/ConsentStorage.test.tsx +0 -270
- package/packages/ndpr-toolkit/src/__tests__/components/dsr/DSRDashboard.test.tsx +0 -199
- package/packages/ndpr-toolkit/src/__tests__/components/dsr/DSRRequestForm.test.tsx +0 -224
- package/packages/ndpr-toolkit/src/__tests__/components/dsr/DSRTracker.test.tsx +0 -104
- package/packages/ndpr-toolkit/src/__tests__/hooks/useConsent.test.tsx +0 -161
- package/packages/ndpr-toolkit/src/__tests__/hooks/useDSR.test.tsx +0 -330
- package/packages/ndpr-toolkit/src/__tests__/utils/breach.test.ts +0 -149
- package/packages/ndpr-toolkit/src/__tests__/utils/consent.test.ts +0 -88
- package/packages/ndpr-toolkit/src/__tests__/utils/dpia.test.ts +0 -160
- package/packages/ndpr-toolkit/src/__tests__/utils/dsr.test.ts +0 -110
- package/packages/ndpr-toolkit/src/__tests__/utils/privacy.test.ts +0 -97
- package/src/__tests__/example.test.ts +0 -13
- package/src/__tests__/requestService.test.ts +0 -57
- package/src/app/docs/components/DocLayout.tsx +0 -267
- package/src/app/docs/components/breach-notification/page.tsx +0 -797
- package/src/app/docs/components/consent-management/page.tsx +0 -576
- package/src/app/docs/components/data-subject-rights/page.tsx +0 -511
- package/src/app/docs/components/dpia-questionnaire/layout.tsx +0 -15
- package/src/app/docs/components/dpia-questionnaire/metadata.ts +0 -31
- package/src/app/docs/components/dpia-questionnaire/page.tsx +0 -666
- package/src/app/docs/components/hooks/page.tsx +0 -305
- package/src/app/docs/components/page.tsx +0 -84
- package/src/app/docs/components/privacy-policy-generator/page.tsx +0 -634
- package/src/app/docs/guides/breach-notification-process/components/BestPractices.tsx +0 -123
- package/src/app/docs/guides/breach-notification-process/components/ImplementationSteps.tsx +0 -328
- package/src/app/docs/guides/breach-notification-process/components/Introduction.tsx +0 -28
- package/src/app/docs/guides/breach-notification-process/components/NotificationTimeline.tsx +0 -91
- package/src/app/docs/guides/breach-notification-process/components/Resources.tsx +0 -118
- package/src/app/docs/guides/breach-notification-process/page.tsx +0 -39
- package/src/app/docs/guides/conducting-dpia/page.tsx +0 -593
- package/src/app/docs/guides/data-subject-requests/page.tsx +0 -666
- package/src/app/docs/guides/managing-consent/page.tsx +0 -738
- package/src/app/docs/guides/ndpr-compliance-checklist/components/ComplianceChecklist.tsx +0 -296
- package/src/app/docs/guides/ndpr-compliance-checklist/components/ImplementationTools.tsx +0 -145
- package/src/app/docs/guides/ndpr-compliance-checklist/components/Introduction.tsx +0 -33
- package/src/app/docs/guides/ndpr-compliance-checklist/components/KeyRequirements.tsx +0 -99
- package/src/app/docs/guides/ndpr-compliance-checklist/components/Resources.tsx +0 -159
- package/src/app/docs/guides/ndpr-compliance-checklist/page.tsx +0 -38
- package/src/app/docs/guides/page.tsx +0 -67
- package/src/app/docs/layout.tsx +0 -15
- package/src/app/docs/metadata.ts +0 -31
- package/src/app/docs/page.tsx +0 -572
- package/src/components/docs/DocLayout.tsx +0 -289
- package/src/components/docs/index.ts +0 -2
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import { Card, CardContent } from '@/components/ui/Card';
|
|
4
|
-
|
|
5
|
-
export default function BestPractices() {
|
|
6
|
-
return (
|
|
7
|
-
<section id="best-practices" className="mb-8">
|
|
8
|
-
<h2 className="text-2xl font-bold mb-4">Best Practices</h2>
|
|
9
|
-
<p className="mb-4">
|
|
10
|
-
Implementing an effective breach notification process requires more than just the right tools.
|
|
11
|
-
Here are some best practices to ensure your process is robust and compliant with the NDPR:
|
|
12
|
-
</p>
|
|
13
|
-
|
|
14
|
-
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
|
|
15
|
-
<Card>
|
|
16
|
-
<CardContent className="p-6">
|
|
17
|
-
<h3 className="font-bold text-lg mb-2">Prepare in Advance</h3>
|
|
18
|
-
<p className="text-gray-600 dark:text-gray-300 text-sm">
|
|
19
|
-
don't wait for a breach to occur before developing your response plan. Have templates,
|
|
20
|
-
procedures, and roles defined in advance so you can respond quickly when a breach happens.
|
|
21
|
-
</p>
|
|
22
|
-
</CardContent>
|
|
23
|
-
</Card>
|
|
24
|
-
|
|
25
|
-
<Card>
|
|
26
|
-
<CardContent className="p-6">
|
|
27
|
-
<h3 className="font-bold text-lg mb-2">Train Your Team</h3>
|
|
28
|
-
<p className="text-gray-600 dark:text-gray-300 text-sm">
|
|
29
|
-
Ensure that all staff members know how to identify and report a potential data breach.
|
|
30
|
-
Conduct regular training sessions and drills to keep the breach response process fresh in everyone's minds.
|
|
31
|
-
</p>
|
|
32
|
-
</CardContent>
|
|
33
|
-
</Card>
|
|
34
|
-
|
|
35
|
-
<Card>
|
|
36
|
-
<CardContent className="p-6">
|
|
37
|
-
<h3 className="font-bold text-lg mb-2">Document Everything</h3>
|
|
38
|
-
<p className="text-gray-600 dark:text-gray-300 text-sm">
|
|
39
|
-
Maintain detailed records of all breaches, including those that don't require notification.
|
|
40
|
-
Document the facts of the breach, its effects, and the remedial actions taken. This is a requirement under the NDPR.
|
|
41
|
-
</p>
|
|
42
|
-
</CardContent>
|
|
43
|
-
</Card>
|
|
44
|
-
|
|
45
|
-
<Card>
|
|
46
|
-
<CardContent className="p-6">
|
|
47
|
-
<h3 className="font-bold text-lg mb-2">Establish Clear Criteria</h3>
|
|
48
|
-
<p className="text-gray-600 dark:text-gray-300 text-sm">
|
|
49
|
-
Develop clear criteria for determining when a breach requires notification to NITDA and/or data subjects.
|
|
50
|
-
This helps ensure consistent decision-making and compliance with the NDPR.
|
|
51
|
-
</p>
|
|
52
|
-
</CardContent>
|
|
53
|
-
</Card>
|
|
54
|
-
|
|
55
|
-
<Card>
|
|
56
|
-
<CardContent className="p-6">
|
|
57
|
-
<h3 className="font-bold text-lg mb-2">Involve Legal Counsel</h3>
|
|
58
|
-
<p className="text-gray-600 dark:text-gray-300 text-sm">
|
|
59
|
-
Involve legal counsel in the development of your breach notification process and in the review of
|
|
60
|
-
notifications before they are sent. This helps ensure that your notifications meet legal requirements.
|
|
61
|
-
</p>
|
|
62
|
-
</CardContent>
|
|
63
|
-
</Card>
|
|
64
|
-
|
|
65
|
-
<Card>
|
|
66
|
-
<CardContent className="p-6">
|
|
67
|
-
<h3 className="font-bold text-lg mb-2">Regular Testing</h3>
|
|
68
|
-
<p className="text-gray-600 dark:text-gray-300 text-sm">
|
|
69
|
-
Regularly test your breach notification process through tabletop exercises or simulations.
|
|
70
|
-
This helps identify and address any weaknesses in your process before a real breach occurs.
|
|
71
|
-
</p>
|
|
72
|
-
</CardContent>
|
|
73
|
-
</Card>
|
|
74
|
-
|
|
75
|
-
<Card>
|
|
76
|
-
<CardContent className="p-6">
|
|
77
|
-
<h3 className="font-bold text-lg mb-2">Learn from Incidents</h3>
|
|
78
|
-
<p className="text-gray-600 dark:text-gray-300 text-sm">
|
|
79
|
-
After each breach, conduct a post-incident review to identify lessons learned and opportunities for improvement.
|
|
80
|
-
Update your breach notification process based on these insights.
|
|
81
|
-
</p>
|
|
82
|
-
</CardContent>
|
|
83
|
-
</Card>
|
|
84
|
-
|
|
85
|
-
<Card>
|
|
86
|
-
<CardContent className="p-6">
|
|
87
|
-
<h3 className="font-bold text-lg mb-2">Maintain Contact Information</h3>
|
|
88
|
-
<p className="text-gray-600 dark:text-gray-300 text-sm">
|
|
89
|
-
Keep up-to-date contact information for NITDA, your Data Protection Officer, legal counsel,
|
|
90
|
-
IT security team, and other key stakeholders who need to be involved in the breach response process.
|
|
91
|
-
</p>
|
|
92
|
-
</CardContent>
|
|
93
|
-
</Card>
|
|
94
|
-
</div>
|
|
95
|
-
|
|
96
|
-
<div className="mt-8 bg-red-50 dark:bg-red-900/20 p-4 rounded-md">
|
|
97
|
-
<h3 className="text-red-800 dark:text-red-200 font-bold mb-2">Common Pitfalls to Avoid</h3>
|
|
98
|
-
<ul className="list-disc pl-6 text-red-700 dark:text-red-300 text-sm">
|
|
99
|
-
<li>
|
|
100
|
-
<strong>Delayed Response:</strong> Failing to act quickly once a breach is detected. Remember, the 72-hour clock
|
|
101
|
-
starts ticking as soon as you become aware of the breach.
|
|
102
|
-
</li>
|
|
103
|
-
<li>
|
|
104
|
-
<strong>Incomplete Notifications:</strong> Omitting required information from breach notifications, such as the
|
|
105
|
-
nature of the breach, likely consequences, or measures taken.
|
|
106
|
-
</li>
|
|
107
|
-
<li>
|
|
108
|
-
<strong>Inadequate Documentation:</strong> Failing to maintain detailed records of the breach and your response,
|
|
109
|
-
which are required under the NDPR.
|
|
110
|
-
</li>
|
|
111
|
-
<li>
|
|
112
|
-
<strong>Poor Communication:</strong> Not communicating clearly with affected data subjects about the breach and
|
|
113
|
-
what they should do to protect themselves.
|
|
114
|
-
</li>
|
|
115
|
-
<li>
|
|
116
|
-
<strong>Neglecting Follow-up:</strong> Failing to follow up on remedial actions or to provide additional information
|
|
117
|
-
to NITDA as it becomes available.
|
|
118
|
-
</li>
|
|
119
|
-
</ul>
|
|
120
|
-
</div>
|
|
121
|
-
</section>
|
|
122
|
-
);
|
|
123
|
-
}
|
|
@@ -1,328 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
export default function ImplementationSteps() {
|
|
4
|
-
return (
|
|
5
|
-
<section id="implementation-steps" className="mb-8">
|
|
6
|
-
<h2 className="text-2xl font-bold mb-4">Implementation Steps</h2>
|
|
7
|
-
<p className="mb-4">
|
|
8
|
-
Implementing a comprehensive breach notification process involves several key components from the NDPR Toolkit.
|
|
9
|
-
Here's how to set up each part of the process:
|
|
10
|
-
</p>
|
|
11
|
-
|
|
12
|
-
<div className="space-y-8">
|
|
13
|
-
<div>
|
|
14
|
-
<h3 className="text-xl font-bold mb-3">1. Breach Detection and Reporting</h3>
|
|
15
|
-
<p className="mb-3">
|
|
16
|
-
The first step is to implement a system for detecting and reporting potential data breaches. The NDPR Toolkit's
|
|
17
|
-
BreachReportForm component provides a structured way for staff to report suspected breaches.
|
|
18
|
-
</p>
|
|
19
|
-
<div className="bg-gray-800 text-gray-200 p-4 rounded-md overflow-x-auto">
|
|
20
|
-
<pre><code>{`import { BreachReportForm } from '@tantainnovative/ndpr-toolkit';
|
|
21
|
-
|
|
22
|
-
function BreachReportingPage() {
|
|
23
|
-
const breachCategories = [
|
|
24
|
-
{ id: 'unauthorized-access', label: 'Unauthorized Access' },
|
|
25
|
-
{ id: 'data-loss', label: 'Data Loss' },
|
|
26
|
-
{ id: 'system-compromise', label: 'System Compromise' },
|
|
27
|
-
{ id: 'phishing', label: 'Phishing Attack' },
|
|
28
|
-
{ id: 'other', label: 'Other' }
|
|
29
|
-
];
|
|
30
|
-
|
|
31
|
-
const handleSubmitReport = (reportData) => {
|
|
32
|
-
// Save report to your backend
|
|
33
|
-
console.log('Breach report submitted:', reportData);
|
|
34
|
-
|
|
35
|
-
// Example: Send to backend API
|
|
36
|
-
fetch('/api/breach-reports', {
|
|
37
|
-
method: 'POST',
|
|
38
|
-
headers: {
|
|
39
|
-
'Content-Type': 'application/json',
|
|
40
|
-
},
|
|
41
|
-
body: JSON.stringify(reportData),
|
|
42
|
-
})
|
|
43
|
-
.then(response => response.json())
|
|
44
|
-
.then(data => {
|
|
45
|
-
// Show confirmation to user with reference number
|
|
46
|
-
setBreachId(data.id);
|
|
47
|
-
setSubmitted(true);
|
|
48
|
-
});
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
const [submitted, setSubmitted] = useState(false);
|
|
52
|
-
const [breachId, setBreachId] = useState(null);
|
|
53
|
-
|
|
54
|
-
return (
|
|
55
|
-
<div>
|
|
56
|
-
<h1>Report a Data Breach</h1>
|
|
57
|
-
|
|
58
|
-
{!submitted ? (
|
|
59
|
-
<>
|
|
60
|
-
<p>
|
|
61
|
-
Use this form to report a suspected data breach. All breaches must be
|
|
62
|
-
reported internally within 24 hours of discovery.
|
|
63
|
-
</p>
|
|
64
|
-
|
|
65
|
-
<BreachReportForm
|
|
66
|
-
onSubmit={handleSubmitReport}
|
|
67
|
-
categories={breachCategories}
|
|
68
|
-
/>
|
|
69
|
-
</>
|
|
70
|
-
) : (
|
|
71
|
-
<div>
|
|
72
|
-
<h2>Breach Reported</h2>
|
|
73
|
-
<p>
|
|
74
|
-
The breach has been reported successfully. Reference number: <strong>{breachId}</strong>
|
|
75
|
-
</p>
|
|
76
|
-
<p>
|
|
77
|
-
The breach response team has been notified and will begin investigating immediately.
|
|
78
|
-
</p>
|
|
79
|
-
</div>
|
|
80
|
-
)}
|
|
81
|
-
</div>
|
|
82
|
-
);
|
|
83
|
-
}`}</code></pre>
|
|
84
|
-
</div>
|
|
85
|
-
</div>
|
|
86
|
-
|
|
87
|
-
<div>
|
|
88
|
-
<h3 className="text-xl font-bold mb-3">2. Risk Assessment</h3>
|
|
89
|
-
<p className="mb-3">
|
|
90
|
-
Once a breach is reported, you need to assess the risk to determine if notification is required and to whom.
|
|
91
|
-
The BreachRiskAssessment component guides users through this process.
|
|
92
|
-
</p>
|
|
93
|
-
<div className="bg-gray-800 text-gray-200 p-4 rounded-md overflow-x-auto">
|
|
94
|
-
<pre><code>{`import { BreachRiskAssessment } from '@tantainnovative/ndpr-toolkit';
|
|
95
|
-
|
|
96
|
-
function RiskAssessmentPage({ breachData }) {
|
|
97
|
-
const handleRiskAssessmentComplete = (assessment) => {
|
|
98
|
-
// Save assessment to your backend
|
|
99
|
-
console.log('Risk assessment completed:', assessment);
|
|
100
|
-
|
|
101
|
-
// Example: Update breach record with assessment
|
|
102
|
-
fetch(\`/api/breach-reports/\${breachData.id}/assessment\`, {
|
|
103
|
-
method: 'POST',
|
|
104
|
-
headers: {
|
|
105
|
-
'Content-Type': 'application/json',
|
|
106
|
-
},
|
|
107
|
-
body: JSON.stringify(assessment),
|
|
108
|
-
})
|
|
109
|
-
.then(response => response.json())
|
|
110
|
-
.then(data => {
|
|
111
|
-
// Update UI based on assessment results
|
|
112
|
-
setAssessmentComplete(true);
|
|
113
|
-
setRequiresNotification(assessment.requiresNitdaNotification);
|
|
114
|
-
});
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
const [assessmentComplete, setAssessmentComplete] = useState(false);
|
|
118
|
-
const [requiresNotification, setRequiresNotification] = useState(false);
|
|
119
|
-
|
|
120
|
-
return (
|
|
121
|
-
<div>
|
|
122
|
-
<h1>Breach Risk Assessment</h1>
|
|
123
|
-
<p>Breach ID: {breachData.id}</p>
|
|
124
|
-
|
|
125
|
-
{!assessmentComplete ? (
|
|
126
|
-
<>
|
|
127
|
-
<p>
|
|
128
|
-
Complete this assessment to determine the risk level of the breach and whether
|
|
129
|
-
notification to NITDA and/or data subjects is required.
|
|
130
|
-
</p>
|
|
131
|
-
|
|
132
|
-
<BreachRiskAssessment
|
|
133
|
-
breachData={breachData}
|
|
134
|
-
onComplete={handleRiskAssessmentComplete}
|
|
135
|
-
/>
|
|
136
|
-
</>
|
|
137
|
-
) : (
|
|
138
|
-
<div>
|
|
139
|
-
<h2>Assessment Complete</h2>
|
|
140
|
-
{requiresNotification ? (
|
|
141
|
-
<p>
|
|
142
|
-
This breach requires notification to NITDA within 72 hours. Please proceed
|
|
143
|
-
to the notification preparation step.
|
|
144
|
-
</p>
|
|
145
|
-
) : (
|
|
146
|
-
<p>
|
|
147
|
-
Based on the assessment, this breach does not require notification to NITDA.
|
|
148
|
-
However, you should still document the breach and the actions taken.
|
|
149
|
-
</p>
|
|
150
|
-
)}
|
|
151
|
-
</div>
|
|
152
|
-
)}
|
|
153
|
-
</div>
|
|
154
|
-
);
|
|
155
|
-
}`}</code></pre>
|
|
156
|
-
</div>
|
|
157
|
-
</div>
|
|
158
|
-
|
|
159
|
-
<div>
|
|
160
|
-
<h3 className="text-xl font-bold mb-3">3. Notification Management</h3>
|
|
161
|
-
<p className="mb-3">
|
|
162
|
-
For breaches that require notification, you need a system to manage the notification process.
|
|
163
|
-
The BreachNotificationManager component provides a dashboard for tracking notifications.
|
|
164
|
-
</p>
|
|
165
|
-
<div className="bg-gray-800 text-gray-200 p-4 rounded-md overflow-x-auto">
|
|
166
|
-
<pre><code>{`import { BreachNotificationManager } from '@tantainnovative/ndpr-toolkit';
|
|
167
|
-
|
|
168
|
-
function NotificationManagementPage() {
|
|
169
|
-
const [breaches, setBreaches] = useState([]);
|
|
170
|
-
|
|
171
|
-
useEffect(() => {
|
|
172
|
-
// Fetch breaches that require notification
|
|
173
|
-
fetch('/api/breach-reports?requiresNotification=true')
|
|
174
|
-
.then(response => response.json())
|
|
175
|
-
.then(data => setBreaches(data));
|
|
176
|
-
}, []);
|
|
177
|
-
|
|
178
|
-
const handleUpdateStatus = (breachId, status) => {
|
|
179
|
-
// Update breach status in your backend
|
|
180
|
-
fetch(\`/api/breach-reports/\${breachId}/status\`, {
|
|
181
|
-
method: 'PUT',
|
|
182
|
-
headers: {
|
|
183
|
-
'Content-Type': 'application/json',
|
|
184
|
-
},
|
|
185
|
-
body: JSON.stringify({ status }),
|
|
186
|
-
})
|
|
187
|
-
.then(response => response.json())
|
|
188
|
-
.then(data => {
|
|
189
|
-
// Update local state
|
|
190
|
-
setBreaches(breaches.map(breach =>
|
|
191
|
-
breach.id === breachId ? { ...breach, status } : breach
|
|
192
|
-
));
|
|
193
|
-
});
|
|
194
|
-
};
|
|
195
|
-
|
|
196
|
-
const handleSendNotification = (breachId, notification) => {
|
|
197
|
-
// Record notification in your backend
|
|
198
|
-
fetch(\`/api/breach-reports/\${breachId}/notifications\`, {
|
|
199
|
-
method: 'POST',
|
|
200
|
-
headers: {
|
|
201
|
-
'Content-Type': 'application/json',
|
|
202
|
-
},
|
|
203
|
-
body: JSON.stringify(notification),
|
|
204
|
-
})
|
|
205
|
-
.then(response => response.json())
|
|
206
|
-
.then(data => {
|
|
207
|
-
// Update local state
|
|
208
|
-
setBreaches(breaches.map(breach =>
|
|
209
|
-
breach.id === breachId ? {
|
|
210
|
-
...breach,
|
|
211
|
-
notifications: [...breach.notifications, data]
|
|
212
|
-
} : breach
|
|
213
|
-
));
|
|
214
|
-
});
|
|
215
|
-
};
|
|
216
|
-
|
|
217
|
-
return (
|
|
218
|
-
<div>
|
|
219
|
-
<h1>Breach Notification Management</h1>
|
|
220
|
-
|
|
221
|
-
<BreachNotificationManager
|
|
222
|
-
breaches={breaches}
|
|
223
|
-
onUpdateStatus={handleUpdateStatus}
|
|
224
|
-
onSendNotification={handleSendNotification}
|
|
225
|
-
/>
|
|
226
|
-
</div>
|
|
227
|
-
);
|
|
228
|
-
}`}</code></pre>
|
|
229
|
-
</div>
|
|
230
|
-
</div>
|
|
231
|
-
|
|
232
|
-
<div>
|
|
233
|
-
<h3 className="text-xl font-bold mb-3">4. Regulatory Report Generation</h3>
|
|
234
|
-
<p className="mb-3">
|
|
235
|
-
For breaches that require notification to NITDA, you need to prepare a formal report.
|
|
236
|
-
The RegulatoryReportGenerator component helps create NDPR-compliant breach notification reports.
|
|
237
|
-
</p>
|
|
238
|
-
<div className="bg-gray-800 text-gray-200 p-4 rounded-md overflow-x-auto">
|
|
239
|
-
<pre><code>{`import { RegulatoryReportGenerator } from '@tantainnovative/ndpr-toolkit';
|
|
240
|
-
|
|
241
|
-
function ReportGenerationPage({ breachData }) {
|
|
242
|
-
const organizationInfo = {
|
|
243
|
-
name: 'Example Company Ltd.',
|
|
244
|
-
address: '123 Main Street, Lagos, Nigeria',
|
|
245
|
-
dpoName: 'John Doe',
|
|
246
|
-
dpoEmail: 'dpo@example.com',
|
|
247
|
-
dpoPhone: '+234 123 456 7890'
|
|
248
|
-
};
|
|
249
|
-
|
|
250
|
-
const handleGenerateReport = (report) => {
|
|
251
|
-
// Save report to your backend
|
|
252
|
-
console.log('Report generated:', report);
|
|
253
|
-
|
|
254
|
-
// Example: Save report and update breach record
|
|
255
|
-
fetch(\`/api/breach-reports/\${breachData.id}/regulatory-report\`, {
|
|
256
|
-
method: 'POST',
|
|
257
|
-
headers: {
|
|
258
|
-
'Content-Type': 'application/json',
|
|
259
|
-
},
|
|
260
|
-
body: JSON.stringify(report),
|
|
261
|
-
})
|
|
262
|
-
.then(response => response.json())
|
|
263
|
-
.then(data => {
|
|
264
|
-
// Update UI to show report has been generated
|
|
265
|
-
setReportGenerated(true);
|
|
266
|
-
});
|
|
267
|
-
};
|
|
268
|
-
|
|
269
|
-
const [reportGenerated, setReportGenerated] = useState(false);
|
|
270
|
-
|
|
271
|
-
return (
|
|
272
|
-
<div>
|
|
273
|
-
<h1>Generate NITDA Notification Report</h1>
|
|
274
|
-
<p>Breach ID: {breachData.id}</p>
|
|
275
|
-
|
|
276
|
-
{!reportGenerated ? (
|
|
277
|
-
<>
|
|
278
|
-
<p>
|
|
279
|
-
Generate a NITDA breach notification report for submission. This report must be
|
|
280
|
-
submitted within 72 hours of becoming aware of the breach.
|
|
281
|
-
</p>
|
|
282
|
-
|
|
283
|
-
<RegulatoryReportGenerator
|
|
284
|
-
breachData={breachData}
|
|
285
|
-
organizationInfo={organizationInfo}
|
|
286
|
-
onGenerate={handleGenerateReport}
|
|
287
|
-
/>
|
|
288
|
-
</>
|
|
289
|
-
) : (
|
|
290
|
-
<div>
|
|
291
|
-
<h2>Report Generated</h2>
|
|
292
|
-
<p>
|
|
293
|
-
The NITDA notification report has been generated successfully. Please review
|
|
294
|
-
the report and submit it to NITDA as soon as possible.
|
|
295
|
-
</p>
|
|
296
|
-
<button>Download Report</button>
|
|
297
|
-
<button>Submit to NITDA</button>
|
|
298
|
-
</div>
|
|
299
|
-
)}
|
|
300
|
-
</div>
|
|
301
|
-
);
|
|
302
|
-
}`}</code></pre>
|
|
303
|
-
</div>
|
|
304
|
-
</div>
|
|
305
|
-
</div>
|
|
306
|
-
|
|
307
|
-
<div className="mt-8">
|
|
308
|
-
<h3 className="text-xl font-bold mb-3">Putting It All Together</h3>
|
|
309
|
-
<p className="mb-3">
|
|
310
|
-
To implement a complete breach notification process, you need to integrate these components into a cohesive workflow.
|
|
311
|
-
This typically involves:
|
|
312
|
-
</p>
|
|
313
|
-
<ul className="list-disc pl-6 mb-4">
|
|
314
|
-
<li>Creating a breach response plan that defines roles, responsibilities, and procedures</li>
|
|
315
|
-
<li>Implementing the NDPR Toolkit components as part of your breach response system</li>
|
|
316
|
-
<li>Setting up automated notifications to alert the breach response team when a breach is reported</li>
|
|
317
|
-
<li>Establishing clear escalation paths based on the risk assessment results</li>
|
|
318
|
-
<li>Creating templates for common types of notifications to speed up the response process</li>
|
|
319
|
-
<li>Regularly testing the breach response process through tabletop exercises or simulations</li>
|
|
320
|
-
</ul>
|
|
321
|
-
<p>
|
|
322
|
-
The NDPR Toolkit provides all the necessary components to implement this workflow, but it's important to
|
|
323
|
-
adapt it to your organization's specific needs and integrate it with your existing systems.
|
|
324
|
-
</p>
|
|
325
|
-
</div>
|
|
326
|
-
</section>
|
|
327
|
-
);
|
|
328
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
'use client';
|
|
3
|
-
|
|
4
|
-
export default function Introduction() {
|
|
5
|
-
return (
|
|
6
|
-
<section id="introduction" className="mb-8">
|
|
7
|
-
<h2 className="text-2xl font-bold mb-4">Introduction</h2>
|
|
8
|
-
<p className="mb-4">
|
|
9
|
-
The Nigeria Data Protection Regulation (NDPR) requires organizations to report certain types of data breaches
|
|
10
|
-
to the National Information Technology Development Agency (NITDA) within 72 hours of becoming aware of the breach.
|
|
11
|
-
Organizations must also notify affected data subjects without undue delay. This guide will help you implement
|
|
12
|
-
a comprehensive breach notification process using the NDPR Toolkit.
|
|
13
|
-
</p>
|
|
14
|
-
<div className="bg-blue-50 dark:bg-blue-900/20 p-4 rounded-md">
|
|
15
|
-
<h4 className="text-blue-800 dark:text-blue-200 font-medium mb-2">NDPR Breach Notification Requirements</h4>
|
|
16
|
-
<p className="text-blue-700 dark:text-blue-300 text-sm mb-2">
|
|
17
|
-
Under the NDPR, organizations must:
|
|
18
|
-
</p>
|
|
19
|
-
<ul className="list-disc pl-6 text-blue-700 dark:text-blue-300 text-sm">
|
|
20
|
-
<li>Report breaches to NITDA within 72 hours of becoming aware of the breach</li>
|
|
21
|
-
<li>Notify affected data subjects without undue delay</li>
|
|
22
|
-
<li>Maintain a record of all data breaches, including the facts of the breach, its effects, and remedial actions taken</li>
|
|
23
|
-
<li>Include specific information in breach notifications, such as the nature of the breach, contact details of the Data Protection Officer, likely consequences of the breach, and measures taken to address the breach</li>
|
|
24
|
-
</ul>
|
|
25
|
-
</div>
|
|
26
|
-
</section>
|
|
27
|
-
);
|
|
28
|
-
}
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
export default function NotificationTimeline() {
|
|
4
|
-
return (
|
|
5
|
-
<section id="notification-timeline" className="mb-8">
|
|
6
|
-
<h2 className="text-2xl font-bold mb-4">72-Hour Notification Timeline</h2>
|
|
7
|
-
<p className="mb-4">
|
|
8
|
-
The 72-hour deadline for notifying NITDA about a data breach begins from the moment you become aware of the breach.
|
|
9
|
-
This timeline is tight, so having a well-defined process in place is essential. Here's a recommended timeline for
|
|
10
|
-
handling breaches using the NDPR Toolkit components:
|
|
11
|
-
</p>
|
|
12
|
-
|
|
13
|
-
<div className="relative border-l-2 border-blue-500 pl-8 pb-8 space-y-10">
|
|
14
|
-
<div className="relative">
|
|
15
|
-
<div className="absolute -left-10 mt-1.5 h-6 w-6 rounded-full bg-blue-500 flex items-center justify-center">
|
|
16
|
-
<span className="text-white font-bold text-sm">1</span>
|
|
17
|
-
</div>
|
|
18
|
-
<h3 className="text-xl font-bold">Hour 0-4: Initial Response</h3>
|
|
19
|
-
<p className="text-gray-600 dark:text-gray-300 mt-2">
|
|
20
|
-
As soon as a breach is detected or reported, the initial response should focus on:
|
|
21
|
-
</p>
|
|
22
|
-
<ul className="list-disc pl-6 mt-2 text-gray-600 dark:text-gray-300">
|
|
23
|
-
<li>Documenting the breach using the BreachReportForm component</li>
|
|
24
|
-
<li>Assembling the breach response team</li>
|
|
25
|
-
<li>Implementing immediate containment measures</li>
|
|
26
|
-
<li>Preserving evidence for investigation</li>
|
|
27
|
-
<li>Notifying key stakeholders within the organization</li>
|
|
28
|
-
</ul>
|
|
29
|
-
</div>
|
|
30
|
-
|
|
31
|
-
<div className="relative">
|
|
32
|
-
<div className="absolute -left-10 mt-1.5 h-6 w-6 rounded-full bg-blue-500 flex items-center justify-center">
|
|
33
|
-
<span className="text-white font-bold text-sm">2</span>
|
|
34
|
-
</div>
|
|
35
|
-
<h3 className="text-xl font-bold">Hour 4-24: Risk Assessment</h3>
|
|
36
|
-
<p className="text-gray-600 dark:text-gray-300 mt-2">
|
|
37
|
-
Once the initial response is underway, conduct a risk assessment to determine the severity of the breach:
|
|
38
|
-
</p>
|
|
39
|
-
<ul className="list-disc pl-6 mt-2 text-gray-600 dark:text-gray-300">
|
|
40
|
-
<li>Use the BreachRiskAssessment component to evaluate the risk to individuals</li>
|
|
41
|
-
<li>Determine if the breach is notifiable to NITDA and affected data subjects</li>
|
|
42
|
-
<li>Continue containment and investigation efforts</li>
|
|
43
|
-
<li>Begin preparing notification drafts if required</li>
|
|
44
|
-
</ul>
|
|
45
|
-
</div>
|
|
46
|
-
|
|
47
|
-
<div className="relative">
|
|
48
|
-
<div className="absolute -left-10 mt-1.5 h-6 w-6 rounded-full bg-blue-500 flex items-center justify-center">
|
|
49
|
-
<span className="text-white font-bold text-sm">3</span>
|
|
50
|
-
</div>
|
|
51
|
-
<h3 className="text-xl font-bold">Hour 24-48: Notification Preparation</h3>
|
|
52
|
-
<p className="text-gray-600 dark:text-gray-300 mt-2">
|
|
53
|
-
If the breach requires notification, prepare the necessary documents and communications:
|
|
54
|
-
</p>
|
|
55
|
-
<ul className="list-disc pl-6 mt-2 text-gray-600 dark:text-gray-300">
|
|
56
|
-
<li>Use the RegulatoryReportGenerator to prepare the NITDA notification</li>
|
|
57
|
-
<li>Draft data subject notifications if required</li>
|
|
58
|
-
<li>Have notifications reviewed by legal and management</li>
|
|
59
|
-
<li>Continue investigation and remediation efforts</li>
|
|
60
|
-
</ul>
|
|
61
|
-
</div>
|
|
62
|
-
|
|
63
|
-
<div className="relative">
|
|
64
|
-
<div className="absolute -left-10 mt-1.5 h-6 w-6 rounded-full bg-blue-500 flex items-center justify-center">
|
|
65
|
-
<span className="text-white font-bold text-sm">4</span>
|
|
66
|
-
</div>
|
|
67
|
-
<h3 className="text-xl font-bold">Hour 48-72: Notification Submission</h3>
|
|
68
|
-
<p className="text-gray-600 dark:text-gray-300 mt-2">
|
|
69
|
-
In the final phase before the deadline, submit notifications and document the process:
|
|
70
|
-
</p>
|
|
71
|
-
<ul className="list-disc pl-6 mt-2 text-gray-600 dark:text-gray-300">
|
|
72
|
-
<li>Submit the notification to NITDA</li>
|
|
73
|
-
<li>Begin notifying affected data subjects if required</li>
|
|
74
|
-
<li>Document all notification activities using the BreachNotificationManager</li>
|
|
75
|
-
<li>Continue remediation and post-breach activities</li>
|
|
76
|
-
</ul>
|
|
77
|
-
</div>
|
|
78
|
-
</div>
|
|
79
|
-
|
|
80
|
-
<div className="bg-yellow-50 dark:bg-yellow-900/20 p-4 rounded-md mt-6">
|
|
81
|
-
<h4 className="text-yellow-800 dark:text-yellow-200 font-medium mb-2">Important Note on the 72-Hour Deadline</h4>
|
|
82
|
-
<p className="text-yellow-700 dark:text-yellow-300 text-sm">
|
|
83
|
-
The 72-hour deadline applies even if you don't have all the details about the breach. If you can't provide
|
|
84
|
-
complete information within 72 hours, you should still make the initial notification with the information
|
|
85
|
-
available and follow up with additional details as they become available. The NDPR Toolkit's
|
|
86
|
-
RegulatoryReportGenerator component supports both initial and supplementary notifications.
|
|
87
|
-
</p>
|
|
88
|
-
</div>
|
|
89
|
-
</section>
|
|
90
|
-
);
|
|
91
|
-
}
|