diff --git a/components/report-window/email-content.scss b/components/report-window/email-content.scss new file mode 100644 index 0000000..3fa4b50 --- /dev/null +++ b/components/report-window/email-content.scss @@ -0,0 +1,31 @@ +@import './../../styles/colors.scss'; + +.mail-container { + box-shadow: rgba(12, 12, 13, 0.1) 0px 1px 4px 0px; + background-color: #fff; + max-width: 40rem; + margin-top: 0.5rem; + + &__header { + display: flex; + justify-content: flex-end; + + &--control { + } + } + + &__content { + height: 75vh; + overflow-y: scroll; + padding: 1rem 2rem; + color: $black-color; + } + + h2 { + font-size: 1.125rem; + } + + p { + font-size: 1rem; + } +} diff --git a/components/report-window/email-content.tsx b/components/report-window/email-content.tsx index b2ae6b8..85aa4a3 100644 --- a/components/report-window/email-content.tsx +++ b/components/report-window/email-content.tsx @@ -4,6 +4,7 @@ import deduceProblems from './deduce-problems'; import { Explainers } from './explainers'; import { ParsedAnswers } from './parse-answers'; import { v } from './verbs'; +import './email-content.scss'; declare var PLUGIN_NAME: string; declare var PLUGIN_URL: string; @@ -27,32 +28,40 @@ export default function EmailContent({ ) ).map((explainer_key) => Explainers[explainer_key]); return ( -
-
{JSON.stringify(answers, null, 3)}
-

Dzień dobry,

-

- w dniu {getDate()} {_('odwiedziłem')} stronę {visited_url}. Po podejrzeniu ruchu - sieciowego generowanego przez tę stronę za pomocą wtyczki{' '} - {PLUGIN_NAME} w przeglądarce Firefox {_('mam')} pytania - dotyczące przetwarzania {_('moich')} danych osobowych, na które nie {_('znalazłem')}{' '} - odpowiedzi nigdzie na Państwa stronie. -

- {problems.map((problem) => problem.getEmailContent())} - {explainers.map((explainer) => explainer(answers.zaimek))} -

Państwa rola jako współadministratora danych osobowych

-

- {_('Zwracam')} Państwa uwagę na fakt, że w myśl{' '} - - treści wyroku TSUE w sprawie C-40/17 - {' '} - poprzez wysyłanie moich danych w wyżej opisanym zakresie stają się Państwo - współadministratorem moich danych osobowych, dlatego ciąży na Państwu obowiązek - odpowiedzi na moje pytania na mocy Art. 12 i 13 Rozporządzenia 2016/679 Parlamentu - Europejskiego i Rady (UE) z dnia 27 kwietnia 2016 r. w sprawie ochrony osób - fizycznych w związku z przetwarzaniem danych osobowych i w sprawie swobodnego - przepływu takich danych oraz uchylenia dyrektywy 95/46/WE (ogólne rozporządzenie o - ochronie danych, dalej: „RODO”). -

+
+
+
+ +
+
+ + {/*
{JSON.stringify(answers, null, 3)}
*/} +
+

Dzień dobry,

+

+ w dniu {getDate()} {_('odwiedziłem')} stronę {visited_url}. Po podejrzeniu ruchu + sieciowego generowanego przez tę stronę za pomocą wtyczki{' '} + {PLUGIN_NAME} w przeglądarce Firefox {_('mam')} pytania + dotyczące przetwarzania {_('moich')} danych osobowych, na które nie{' '} + {_('znalazłem')} odpowiedzi nigdzie na Państwa stronie. +

+ {problems.map((problem) => problem.getEmailContent())} + {explainers.map((explainer) => explainer(answers.zaimek))} +

Państwa rola jako współadministratora danych osobowych

+

+ {_('Zwracam')} Państwa uwagę na fakt, że w myśl{' '} + + treści wyroku TSUE w sprawie C-40/17 + {' '} + poprzez wysyłanie moich danych w wyżej opisanym zakresie stają się Państwo + współadministratorem moich danych osobowych, dlatego ciąży na Państwu obowiązek + odpowiedzi na moje pytania na mocy Art. 12 i 13 Rozporządzenia 2016/679 + Parlamentu Europejskiego i Rady (UE) z dnia 27 kwietnia 2016 r. w sprawie + ochrony osób fizycznych w związku z przetwarzaniem danych osobowych i w sprawie + swobodnego przepływu takich danych oraz uchylenia dyrektywy 95/46/WE (ogólne + rozporządzenie o ochronie danych, dalej: „RODO”). +

+
); } diff --git a/components/report-window/report-window.tsx b/components/report-window/report-window.tsx index 737acd5..ff281ca 100644 --- a/components/report-window/report-window.tsx +++ b/components/report-window/report-window.tsx @@ -7,6 +7,7 @@ import './report-window.scss'; import Questions from './questions'; import EmailContent from './email-content'; import { parseAnswers, ParsedAnswers } from './parse-answers'; +import ScreenshotGenerator from './screenshot-generator'; function Report() { try { @@ -54,12 +55,17 @@ function Report() { .map((cluster) => cluster.id)} onComplete={(answers) => { setAnswers(parseAnswers(answers)); - setMode('preview'); + setMode('screenshots'); }} > ) : ( '' )} + {mode === 'screenshots' ? ( + + ) : ( + '' + )} {mode === 'preview' ? : ''} {/* */}
diff --git a/components/report-window/screenshot-generator.scss b/components/report-window/screenshot-generator.scss new file mode 100644 index 0000000..e69de29 diff --git a/components/report-window/screenshot-generator.tsx b/components/report-window/screenshot-generator.tsx new file mode 100644 index 0000000..03ed9cc --- /dev/null +++ b/components/report-window/screenshot-generator.tsx @@ -0,0 +1,83 @@ +import React, { Fragment } from 'react'; +import { RequestCluster } from '../../request-cluster'; +import './screenshot-generator.scss'; + +function createTaskEndpoint(visited_url: string, domains: string[]) { + return `http://65.108.60.135:3000/api/requests?url=${visited_url}${domains.reduce( + (prev: string, curr: string) => prev + '&domains[]=' + curr, + '' + )}`; +} + +function createTask(visited_url: string, domains: string[]) { + return fetch(createTaskEndpoint(visited_url, domains), { method: 'POST' }); +} + +async function subscribe(path: string) { + let request = await fetch(path, { method: 'GET' }); + const response = await request.json(); + + if (response.status === 'running' || response.status === 'waiting') { + console.debug(response.status); + + await new Promise((resolve) => setTimeout(resolve, 1000)); + await subscribe(path); + } else if (response.status === 'finished') { + console.log('response', response); + return response; + } +} + +export default function ScreenshotGenerator({ + visited_url, + clusters, +}: { + visited_url: string; + clusters: Record; +}) { + const [isLoading, setLoading] = React.useState(false); + const [output, setOutput] = React.useState([]); + + return ( +
+ {!isLoading ? ( + +

Przygotowanie zrzutów ekranów

+

+ Dla potwierdzenia przechwyconych danych, warto załączyć zrzuty ekranów + narzędzi deweloperskich do maila dla administratora oraz Urzędzu Ochrony + Danych Osobowych. +

+

+ Jeżeli nie wiesz jak wykonać zrzuty ekranów, skorzystaj z{' '} + naszej instrukcji lub wtyczka Rentgen może wygenerować je za + Ciebie. +

+ + + +
+ ) : ( + +

Przygotowujemy zrzuty ekranów

+ +
{createTaskEndpoint(visited_url, Object.keys(clusters))}
+ + {JSON.stringify(output)} + +
+ )} +
+ ); +} diff --git a/components/sidebar/sidebar.tsx b/components/sidebar/sidebar.tsx index 0884dec..57e15f7 100644 --- a/components/sidebar/sidebar.tsx +++ b/components/sidebar/sidebar.tsx @@ -175,9 +175,8 @@ const Sidebar = () => { {infoDataDialogAck ? (
- Uwaga! Wtyczka Rentgen automatycznie zaznacza - wybrane domeny, możesz teraz przejść do generowania raportu lub - dokonać korekty. + Rentgen automatycznie zaznacza wybrane domeny, + możesz teraz przejść do generowania raportu lub dokonać korekty.