diff --git a/components/report-window/email-content.tsx b/components/report-window/email-content.tsx index 37e6efc..9d50ff3 100644 --- a/components/report-window/email-content.tsx +++ b/components/report-window/email-content.tsx @@ -1,14 +1,12 @@ import { RequestCluster } from '../../request-cluster'; -import { getDate } from '../../util'; import deduceProblems from './deduce-problems'; import { Explainers } from './explainers'; import { ParsedAnswers } from './parse-answers'; import { v } from './verbs'; import './email-content.scss'; import { Fragment, useState } from 'react'; - -declare var PLUGIN_NAME: string; -declare var PLUGIN_URL: string; +import emailIntro from './email-intro'; +import { reportIntro } from './report-intro'; export default function EmailContent({ answers, @@ -41,41 +39,53 @@ export default function EmailContent({ setCopy(true); } + const mode = answers.user_role === 'user' ? 'email' : 'report'; + const email_tone = answers.email_type === 'polite_information' ? 'polite' : 'official'; + return (
-

Treść maila

+

Treść {mode === 'email' ? 'maila' : 'raportu'}

-

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())} + {mode === 'email' + ? emailIntro(email_tone, _, visited_url) + : reportIntro(visited_url)} + {problems.map((problem) => problem.getEmailContent(mode, email_tone))} {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”). -

+ {mode == 'email' ? ( +

+ {_('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, nawet + jeżeli nie są Państwo bezpośrednimi autorami osadzonych na Państwa + stronie skryptów czy innych zasobów ujawniających dane użytkowników + Państwa strony podmiotom trzecim. 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) – RODO +

+ ) : ( +

+ W myśl{' '} + + treści wyroku TSUE w sprawie C-40/17 + + , ponoszą Państwo współodpowiedzialność za skrypty i inne zasoby + ujawniajace dane osobowe na Państwa stronie, nawet jeżeli nie są + Państwo ich bezpośrednimi autorami. +

+ )}
diff --git a/components/report-window/email-intro.tsx b/components/report-window/email-intro.tsx new file mode 100644 index 0000000..53bd8ae --- /dev/null +++ b/components/report-window/email-intro.tsx @@ -0,0 +1,32 @@ +import { getDate } from '../../util'; + +declare var PLUGIN_NAME: string; +declare var PLUGIN_URL: string; + +export default function emailIntro( + tone: 'polite' | 'official', + _: (verb: string) => string, + visited_url: string +) { + return ( + <> +

{tone == 'polite' ? 'Szanowni Państwo' : '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{' '} + {tone == 'polite' ? ( + <> + {_('chciałbym')} zwrócić Państwa uwagę na kilka potencjalnych problemów ze + zgodnością RODO na Państwa stronie. + + ) : ( + <> + {_('mam')} pytania dotyczące przetwarzania {_('moich')} danych osobowych, na + które nie {_('znalazłem')} odpowiedzi nigdzie na Państwa stronie. + + )} +

+ + ); +} diff --git a/components/report-window/generate-survey-questions.ts b/components/report-window/generate-survey-questions.ts index 3f1da8b..c0f8714 100644 --- a/components/report-window/generate-survey-questions.ts +++ b/components/report-window/generate-survey-questions.ts @@ -24,7 +24,7 @@ function generateHostPage( type: 'radiogroup', name: f('present'), isRequired: true, - title: `Cel ujawnienia danych (${danych}) właścicielowi domeny ${domain}`, + title: `Strona udostępniła właścicielowi domeny ${domain} ${danych}. Cel takiego przetwarzania danych:`, ...defaultValue('present'), visibleIf: '{popup_type} != "none"', choices: [ @@ -169,28 +169,53 @@ export default function generateSurveyQuestions(clusters: RequestCluster[]) { clearInvisibleValues: 'onHidden', pages: [ { - title: 'Tytuł - co to za ankieta?', + title: 'Dodatkowe pytania', elements: [ { type: 'html', name: 'intro', html: /* HTML */ `

- Analiza ruchu strony zakończona. Aby lepiej oszacować, gdzie są - potencjalne obszary robocze pod względem zgodności z RODO, możesz - udzielić odpowiedzi na pytania dotyczące funkcjonowania strony. Wtyczka - wtedy wygeneruje raport lub treść maila, którą możesz wysłać do - administratora strony. + Analiza ruchu sieciowego generowanego przez stronę została zakończona. + Teraz, aby lepiej oszacować, gdzie są potencjalne obszary robocze pod + względem zgodności z RODO, możesz udzielić odpowiedzi na pytania + dotyczące funkcjonowania strony. Wtyczka wtedy wygeneruje raport lub + treść maila, którą możesz wysłać do administratora strony.

`, }, ], }, { - title: 'Zaimki', + title: 'Kontekst analizy', elements: [ + { + type: 'radiogroup', + name: 'user_role', + title: 'Jestem:', + choices: [ + { value: 'user', text: 'użytkownikiem strony' }, + { value: 'admin', text: 'administratorem strony' }, + ], + }, + { + type: 'radiogroup', + name: 'email_type', + title: 'Chcę:', + visibleIf: "{user_role} = 'user'", + choices: [ + { + value: 'polite_information', + text: 'uprzejmie poinformować administratora strony o potencjalnych problemach ze zgodnością z RODO na jego stronie', + }, + { + value: 'official_request', + text: 'wysłać formalne zapytanie do administratora strony, na które ma obowiązek odpowiedzieć. Jeżeli administrator nie odpowie na takie zapytanie, może to być podstawą złożenia skargi do UODO', + }, + ], + }, { type: 'radiogroup', name: 'zaimek', - title: 'Forma czasownika:', + title: 'Forma czasownika, jaka będzie użyta w raporcie:', isRequired: true, choices: [ { value: 0, text: 'Wysłałem' }, @@ -312,7 +337,7 @@ export default function generateSurveyQuestions(clusters: RequestCluster[]) { }, { value: 'yes', - text: 'Nie. {Muszę} wykonać więcej czynności aby odmówić wszystkich zgód, albo opcja niewyrażenia zgody jest mało widoczna.', + text: 'Nie. {Muszę} wykonać więcej czynności (np. kliknięć) aby odmówić wszystkich zgód, albo opcja niewyrażenia zgody jest mało widoczna.', }, ], }, diff --git a/components/report-window/parse-answers.ts b/components/report-window/parse-answers.ts index 6467164..f11be81 100644 --- a/components/report-window/parse-answers.ts +++ b/components/report-window/parse-answers.ts @@ -42,6 +42,8 @@ function parseHostAnswers( export function parseAnswers({ zaimek, + user_role, + email_type, is_incognito_different, policy_readable, popup_type, @@ -55,6 +57,8 @@ export function parseAnswers({ }: RawAnswers): ParsedAnswers { return { zaimek, + user_role, + email_type, is_incognito_different, policy_readable, popup_type, diff --git a/components/report-window/problems/no-information-at-all.tsx b/components/report-window/problems/no-information-at-all.tsx index 58b06f3..e12d55b 100644 --- a/components/report-window/problems/no-information-at-all.tsx +++ b/components/report-window/problems/no-information-at-all.tsx @@ -6,27 +6,46 @@ export default class NoInformationAtAllProblem extends Problem { qualifies() { return this.answers.popup_type === 'none'; } - getEmailContent() { + getEmailContent(mode: 'email' | 'report', tone: 'official' | 'polite') { const _ = (word: string) => v(word, this.answers.zaimek); return ( <>

Brak informacji na temat przetwarzania danych osobowych

-

- {_('Moje')} dane osobowe zostały ujawnione podmiotom, które są właścicielami - domen: -

+ {mode == 'email' ? ( + tone == 'official' ? ( +

+ {_('Moje')} dane osobowe zostały ujawnione podmiotom, które są + właścicielami domen: +

+ ) : ( +

+ Państwa strona ujawnia dane użytkowników podmiotom, które są + właścicielami następujących domen: +

+ ) + ) : ( +

+ Poprzez skrypty osadzone na stronie dane osobowe użytkownika końcowego są + przekazywane podmiotom, którzy są właścicielami następujacych domen: +

+ )} {this.getRangeDescription()}

Na stronie brakuje jednak jakichkolwiek informacji o tym, jakie są cele przetwarzania takich danych oraz jakie są podstawy prawne takiego przetwarzania.

-

Zwracam się zatem do Państwa z następującymi pytaniami:

+ {mode == 'email' ? ( +

Zwracam się zatem do Państwa z następującymi pytaniami:

+ ) : ( +

Na stronie należy zawrzeć odpowiedzi na następujące pytania:

+ )}
  • Jaka jest tożsamość właścicieli tych domen?
  • Jaki jest cel takiego przetwarzania danych przez Państwa stronę?
  • - Jaka jest podstawa prawna takiego przetwarzania moich danych osobowych przez - Państwa stronę? + Jaka jest podstawa prawna takiego przetwarzania{' '} + {mode == 'email' ? _('moich') : ''} danych osobowych $ + {mode == 'report' ? 'użytkowników końcowych' : ''} przez Państwa stronę?
diff --git a/components/report-window/problems/problem.tsx b/components/report-window/problems/problem.tsx index 0c667a1..edfaf96 100644 --- a/components/report-window/problems/problem.tsx +++ b/components/report-window/problems/problem.tsx @@ -17,7 +17,7 @@ function formatRange(cluster: RequestCluster) { export abstract class Problem { constructor(public answers: ParsedAnswers, public clusters: Record) {} - abstract getEmailContent(): JSX.Element; + abstract getEmailContent(mode: 'email' | 'report', tone: 'polite' | 'official'): JSX.Element; abstract getNecessaryExplainers(): ExplainerKey[]; abstract qualifies(): boolean; diff --git a/components/report-window/problems/transfer-outside-eu.tsx b/components/report-window/problems/transfer-outside-eu.tsx index 12e49b7..e4f29b2 100644 --- a/components/report-window/problems/transfer-outside-eu.tsx +++ b/components/report-window/problems/transfer-outside-eu.tsx @@ -20,43 +20,69 @@ export class TransferOutsideEU extends Problem { .map(([id]) => this.clusters[id]); } - getEmailContent() { + getEmailContent(mode: 'email' | 'report') { const clusters = this.getRelatedClusters(); const _ = (key: string) => v(key, this.answers.zaimek); return ( <>

Transfer danych osobowych poza Europejski Obszar Gospodarczy

-

- Państwa strona przetworzyła {_('moje')} dane osobowe poprzez przesłanie danych - do: -

+ {mode == 'email' ? ( +

+ Państwa strona przetworzyła {_('moje')} dane osobowe poprzez przesłanie + danych do: +

+ ) : ( +

+ Strona przetwarza dane osobowe użytkowników końcowych poprzez przesłanie + przekazanie ich do: +

+ )}
    {clusters.map((cluster) => (
  • - Właściciela domeny {cluster.id}: (w zakresie:{' '} - {cluster.getDataTypeDescription('mojej')}); + właściciela domeny {cluster.id}: (w zakresie:{' '} + {cluster.getDataTypeDescription(mode == 'email' ? 'mojej' : '')});
  • ))}
-

- Według {_('mojej')} najlepszej wiedzy, każdy z tych podmiotów utrzymuje swoje - serwery poza Europejskim Obszarem Gospodarczym. Zatem Państwa strona przesłała - {_('moje')} dane osobowe poza EOG. Jeżeli tak jest, to takie przetwarzanie - danych jest niezgodne z prawem, gdyż dane trafiają do krajów, które nie - gwarantują ochrony danych w stopniu, jakiego wymaga RODO, a tzw. „Tarcza - Prywatności” została unieważniona w 2020r. Zob.{' '} - - artykuł Fundacji Panoptykon w tej sprawie - - . -

-

- {_('Zwracam')} się zatem do Państwa z pytaniem:{' '} - - czy wyżej wymienione podmioty, którym Państwa strona ujawniła moje dane - osobowe, przechowują moje dane poza EOG? - -

+ {mode == 'email' ? ( +

+ Według {_('mojej')} najlepszej wiedzy, każdy z tych podmiotów utrzymuje + swoje serwery poza Europejskim Obszarem Gospodarczym. Zatem Państwa strona + przesłała + {_('moje')} dane osobowe poza EOG. Jeżeli tak jest, to takie przetwarzanie + danych jest niezgodne z prawem, gdyż dane trafiają do krajów, które nie + gwarantują ochrony danych w stopniu, jakiego wymaga RODO, a tzw. „Tarcza + Prywatności” została unieważniona w 2020r. Zob.{' '} + + artykuł Fundacji Panoptykon w tej sprawie + + . +

+ ) : ( +

+ Te podmioty utrzymują swoje centra danych poza Europejskim Obszarem + Gospodarczym. Jako, że tzw. „Tarcza Prywatności” zostałą unieważniona w + 2020r., nie można przesyłać danych osobowych obywateli Unii Europejskiej do + krajów, które nie zapewniają ochrony danych o sile odpowiadającej RODO. + Przykłądem kraju, do którego nie można przekazywać danych osobowych + obywateli UE są Stany Zjednoczone. +

+ )} + {mode == 'email' ? ( +

+ {_('Zwracam')} się zatem do Państwa z pytaniem:{' '} + + czy wyżej wymienione podmioty, którym Państwa strona ujawniła moje dane + osobowe, przechowują moje dane poza EOG? + +

+ ) : ( +

+ Zaleca się rezygnację z korzystania z usług firm, które przetwarzają dane + osobowe użytkowników, a których centra danych znajdują się poza EOG. +

+ )} ); } diff --git a/components/report-window/problems/unknown-legal-basis.tsx b/components/report-window/problems/unknown-legal-basis.tsx index 3aa048e..fc13e35 100644 --- a/components/report-window/problems/unknown-legal-basis.tsx +++ b/components/report-window/problems/unknown-legal-basis.tsx @@ -36,37 +36,81 @@ export class UnknownLegalBasis extends Problem { ); } - getEmailContent() { + getEmailContent(mode: 'email' | 'report', tone: 'polite' | 'official') { const clusters = this.getRelatedClusters(); const _ = (key: string) => v(key, this.answers.zaimek); return ( <>

Przetwarzanie danych osobowych bez podania podstawy prawnej

-

Państwa strona przetworzyła {_('moje')} dane osobowe poprzez ujawnienie:

+ {mode == 'email' ? ( +

Państwa strona przetworzyła {_('moje')} dane osobowe poprzez ujawnienie:

+ ) : ( +

Państwa strona przetwarza dane osobowe użytkowników poprzez ujawnienie

+ )}
    {clusters.map((cluster) => (
  • - Właścicielowi domeny {cluster.id}:{' '} - {cluster.getDataTypeDescription('mojej')} + właścicielowi domeny {cluster.id}:{' '} + {cluster.getDataTypeDescription(mode == 'email' ? 'mojej' : '')}
  • ))}
-

- {_('Moja')} historia przeglądania stanowi {_('moje')} dane osobowe. Zgodnie z - treścią Artykułu 13 p. 1 lit. c){' '} - - RODO - - , aby przetwarzać dane osobowe, trzeba poinformować osobę, której dane dotyczą, - o tym, jaka jest podstawa prawna takiego przetwarzania danych. -

-

- Zwracam się zatem z pytaniem:{' '} - - jakie były podstawy prawne ujawnienia moich danych każdemu z wyżej - wymienionych podmiotów przez Państwa stronę? - -

+ {mode == 'email' ? ( +

+ {_('Moja')} historia przeglądania stanowi {_('moje')} dane osobowe. Zgodnie + z treścią Artykułu 13 p. 1 lit. c){' '} + + RODO + + , aby przetwarzać dane osobowe, trzeba poinformować osobę, której dane + dotyczą, o tym, jaka jest podstawa prawna takiego przetwarzania danych. +

+ ) : ( +

+ Na stronie nie znajdują się informacje o tym, jaka jest podstawa prawna + takiego przetwarzania danych osobowych, jakimi jest część historii + przeglądania. Zgodnie z treścią Artykułu 13. p. 1 lit. c) RODO, aby + przetwarzać dane osobowe, trzeba poinformować osobę, któ©ej dane dotyczą, o + tym, jak ajest podstaw aprawna takiego przetwarzania danych. +

+ )} + {mode == 'email' ? ( + tone == 'official' ? ( +

+ Zwracam się zatem z pytaniem:{' '} + + jakie były podstawy prawne ujawnienia moich danych każdemu z wyżej + wymienionych podmiotów przez Państwa stronę? + +

+ ) : ( +

+ Dodanie do Państwa strony informacji o tym, jakie są podstawy prawne (w + znaczeniu Art. 6 pkt. 1 RODO) dla każdego z tych procesów przetwarzania + miałoby pozytywny wpływ na przejrzystość informacji dla użytkowników + końcowych, jak i na zgodność strony z obowiązującymi przepisami. +

+ ) + ) : ( + <> +

Możliwe działania:

+
    +
  • rezygnacja z niektórych skryptów śledzących;
  • +
  • + przeniesienie assetów z CDN-a na samohostowanie (przy korzystaniu z + HTTP2 to może dać zwiększoną wydajność wzgłędem CDN); +
  • +
  • + konfiguracja nagłówka{' '} + + Referrer-Policy + {' '} + tak, aby nie ujawniać historii przeglądania właścicielom zasobów z + domen podmiotów trzecich. +
  • +
+ + )} ); } diff --git a/components/report-window/problems/unlawful-cookies.tsx b/components/report-window/problems/unlawful-cookies.tsx index 3a4e74a..76c40eb 100644 --- a/components/report-window/problems/unlawful-cookies.tsx +++ b/components/report-window/problems/unlawful-cookies.tsx @@ -23,7 +23,7 @@ export class UnlawfulCookieAccess extends Problem { }); } - getEmailContent() { + getEmailContent(mode: 'email' | 'report', tone: 'official' | 'polite') { const cookie_clusters = Object.values(this.clusters).filter((c) => c.hasMarkedCookies()); const unnecessary_hosts = Object.entries(this.answers.hosts) .filter(([, answers]) => answers.was_processing_necessary === 'no') @@ -36,8 +36,12 @@ export class UnlawfulCookieAccess extends Problem { <>

Dostęp do cookies niezgodny z ustawą Prawo Telekomunikacyjne

- Państwa strona dokonała odczytu plików Cookie zapisanych na dysku twardym mojego - komputera. Dotyczy to plików cookie przypisanych do domen: + Państwa strona {mode == 'email' ? 'dokonała' : 'dokonuje'} odczytu plików Cookie + zapisanych na dysku twardym{' '} + {mode === 'email' + ? _('mojego') + ' komputera.' + : 'komputerach użytkowników końcowych.'} + . Dotyczy to plików cookie przypisanych do domen:

    {cookie_clusters.map((cluster, index) => { @@ -75,7 +79,8 @@ export class UnlawfulCookieAccess extends Problem { Użytkownik wyraził zgodę na takie przetwarzanie danych po tym, jak został poinformowany bezpośrednio o celu uzyskania dostępu do tej informacji. Zgodnie z Art. 174 ustawy Prawo Telekomunikacyjne, taka zgoda - musiałaby spełniać warunki zgody ustalone przez RODO; + musi spełniać warunki zgody ustalone przez RODO, aby mogła być jako podstawa + prawna uzyskania dostępu do cookies i podobnych technologii w przeglądarce;
  • Dostęp do treści plików cookies jest konieczny do dostarczania usługi @@ -84,25 +89,47 @@ export class UnlawfulCookieAccess extends Problem { {(() => { if (this.answers.popup_type == 'none' || this.answers.popup_type == 'page') { - return ( + return mode === 'email' ? (

    Jako, że strona nie pytała {_('mnie')} nigdy o zgodę, nie jest spełniony warunek 1.

    + ) : ( +

    + Strona nie ma zaimplementowanego mechanizmu pozyskiwania zgód, zatem + nie spełnia warunku opisanego w punkcie 1. +

    ); } else if (this.answers.popup_type === 'passive_popup') { return (

    - Państwa strona nie dała mi nigdy faktycznego wyboru dotyczącego - wyrażenia lub odmówienia zgody na takie przetwarzanie danych - osobowych, dlatego nie jest spełniony warunek 1.{' '} + {mode === 'email' ? ( + <> + Państwa strona nie dała mi nigdy faktycznego wyboru + dotyczącego wyrażenia lub odmówienia zgody na takie + przetwarzanie danych osobowych. Aby zgoda była ważna w + świetle RODO, musi być dobrowolna. Brak możliwości + odmówienia zgody sprawia, że tak wyrażona „zgoda” nie jest + ważna w świetle RODO. Dlatego nie jest spełniony warunek 1.{' '} + + ) : ( + <> + Aktualnie zaimplementowane okienko o przetwarzaniu danych + osobowych nie daje użytkownikom końcowym możliwości odmowy + wyrażenia zgody, przez co tak wyrażona „zgoda” nie spełnia + warunku dobrowolności opisanego w motywie (32) RODO. Z tego + powodu nie jest spełniony warunek opisany w punkcie 1. + powyżej, zatem tak pozyskana "zgoda" nie może stanowić + podstawy prawnej dostępu do cookiesów użytkownika końcowego. + + )}{' '} {this.answers.mentions_passive_consent ? ( <> - Zgody wyrażonej w sposób bierny lub milczący nie można uznać - za ważną w świetle obowiązujących przepisów rozporządzenia - 2016/679. Dlatego zaniechanie zmiany ustawień przeglądarki - lub po prostu korzystanie ze strony nie stanowi ważnej - zgody. Takie jest{' '} + Należy nadmienić także, że zgody wyrażonej w sposób bierny + lub milczący nie można uznać za ważną w świetle + obowiązujących przepisów rozporządzenia 2016/679. Dlatego + zaniechanie zmiany ustawień przeglądarki lub po prostu + korzystanie ze strony nie stanowi ważnej zgody. Takie jest{' '} stanowisko polskiego UODO @@ -115,15 +142,26 @@ export class UnlawfulCookieAccess extends Problem { ); } else if (this.answers.popup_type === 'some_choice') { if (this.answers.popup_action === 'none') { - return ( + return mode == 'email' ? (

    Nie {_('wyraziłem')} zgody na takie przetwarzanie {_('moich')}{' '} danych osobowych. W okienku pytającym o zgodę nic nie{' '} {_('kliknąłem')}. Nie jest zatem spełniony warunek 1.

    + ) : ( +

    + Skrypty pozyskujące dostęp do plików cookie uruchamiają się + zanim użytkownik końcowy zdąży wybrać jakąkolwiek opcję w + okienku pytającym o zgodę. Aby zgoda była ważna, musi być + pozyskana zanim nastąpi proces przetwarzania + danych, którego ta zgoda dotyczy. Z tego powodu nie jest + spełniony warunek 1. Nie można używać tak pozyskanej „zgody” + jako podstawy prawnej dostępu do plików cookies na urządzeniu + użytkownika końcowego. +

    ); } else if (this.answers.popup_action === 'closed_popup') { - return ( + return mode == 'email' ? (

    Nie {_('wyraziłem')} zgody na takie przetwarzanie {_('moich')}{' '} danych osobowych. {this.answers.popup_closed_how.trim()} @@ -135,9 +173,19 @@ export class UnlawfulCookieAccess extends Problem { jednoznaczności opisanego w Art. 4, pkt 11 RODO. Nie jest zatem spełniony warunek 1.

    + ) : ( +

    + Gdy użytkownik końcowy strony nie wyrazi jednoznacznej zgody w + wyskakującym okienku, a zamiast tego po prostu zamknie to + okienko, strona nadal pozyskuje dostęp do plików cookies na + urządzeniu użytkownika. Zamknięcia okienka (np. przyciskiem „x”) + nie można uznać za ważną zgodę, gdyż taka czyność nie spełnia + warunku jednoznaczności opisanego w Art. 4. pkt 11. RODO. Nie + jest zatem spełniony warunek 1. +

    ); } else if (this.answers.popup_action == 'deny_all') { - return ( + return mode == 'email' ? (

    {this.answers.popup_deny_all_how.trim()} {this.answers.popup_closed_how.trim().at(-1) != '.' @@ -145,31 +193,78 @@ export class UnlawfulCookieAccess extends Problem { : ''}{' '} Zatem nie jest spełniony warunek 1.

    + ) : ( +

    + Gdy użytkownik jednoznacznie odmówi zgód na wszystkie cele + przetwarzania, strona nadal pozyskuje dostęp do plików cookies + na urządzeniu użytkownika. Jeżeli uzytkownik nie odmówił zgody, + to nie powinny załączać się procesy przetwarzania powołujące się + na zgodę jako podstawę prawną. +

    ); } } })()} {unnecessary_hosts.length > 0 ? ( -

    - W {_('mojej')} ocenie odczytywanie przez Państwa stronę treści plików - cookies z {wordlist(unnecessary_hosts)} nie jest konieczne do wyświetlenia - treści Państwa strony, dlatego nie jest dla nich spełniony warunek 2. Jeżeli - Państwa zdaniem jest inaczej, {_('proszę')} o wskazanie, co jest źródłem tej - konieczności i co odróżnia Państwa stronę od wielu innych stron, które - realizują te same funkcjonalności bez korzystania z plików Cookie. -

    + mode == 'email' ? ( +

    + W {_('mojej')} ocenie odczytywanie przez Państwa stronę treści plików + cookies z {wordlist(unnecessary_hosts)} nie jest konieczne do + wyświetlenia treści Państwa strony, dlatego nie jest dla nich spełniony + warunek 2. Jeżeli według Państwa oceny jest inaczej, {_('proszę')} o + wskazanie, co jest źródłem tej konieczności i co odróżnia Państwa stronę + od wielu innych stron, które realizują te same funkcjonalności{' '} + bez korzystania z plików Cookie. +

    + ) : ( +

    + Warto, aby informacje na stronie opisywały w zrozumiały sposob, które z + podmiotów, których skrypty uruchamiają się na stronie ( + {wordlist(unnecessary_hosts)}) są konieczne do działania strony, jaki + zakres danych przetwarzają i w jakim celu. +

    + ) ) : ( '' )} -

    - {_('Proszę')} o wskazanie,{' '} - - czy być może stosowali Państwo inną podstawę prawną do takiego przetwarzania{' '} - {_('moich')} danych osobowych, czy przetwarzali je państwo bez ważnej - podstawy prawnej? - -

    - {maybe_unnecessary_hosts.length > 1 ? ( + {mode == 'email' ? ( + tone === 'official' ? ( +

    + {_('Proszę')} o wskazanie,{' '} + + czy być może stosowali Państwo inną podstawę prawną do takiego + przetwarzania {_('moich')} danych osobowych, czy być może + przetwarzali je Państwo bez ważnej podstawy prawnej? + +

    + ) : ( +

    + Apeluję o wdrożenie zmian na Państwa stronie tak, aby użytkownik miał + faktyczny wybór dotyczący procesów przetwarzania jego danych osobowych, + jakie zachodzą w trakcie odwiedzin tej strony. +

    + ) + ) : ( +

    + Jeżeli zgoda nadal ma być używana jako podstawa prawna do odczytu cookiesów + przez skrypty wyżej wymienionych podmiotów, to należy zmienić mechanizm + zgody tak, aby:{' '} +

      +
    • + dawał użytkownikowi końcowemu możliwość odmowy zgody w sposób równie + łatwy i dostępny, jak na wyrażenie zgody; +
    • +
    • + skrypty śledzące uruchamiały się dopiero po uzyskaniu ważnej zgody; +
    • +
    • + skrypty śledzące nie uruchamiały się, jeżeli użytkownik nie wyraził + na nie zgody. +
    • +
    +

    + )} + {maybe_unnecessary_hosts.length > 1 && mode == 'email' && tone == 'official' ? (

    {_('Proszę')} też o wskazanie, czy dostęp do treści plików cookie z {wordlist(maybe_unnecessary_hosts)} jest konieczny do poprawnego działania diff --git a/components/report-window/raw-answers.ts b/components/report-window/raw-answers.ts index a1e9e08..b40b327 100644 --- a/components/report-window/raw-answers.ts +++ b/components/report-window/raw-answers.ts @@ -16,6 +16,8 @@ export type HostRawAnswers = { export type BasicRawAnswers = { zaimek: 0 | 1 | 2 | 3; + user_role: 'user' | 'admin'; + email_type: 'polite_information' | 'official_request'; is_incognito_different: [] | ['incognito_is_the_same']; policy_readable: 'yes' | 'vague' | 'cant_find'; popup_action: 'none' | 'closed_popup' | 'accept_all' | 'deny_all' | 'other'; diff --git a/components/report-window/report-intro.tsx b/components/report-window/report-intro.tsx new file mode 100644 index 0000000..b8a5748 --- /dev/null +++ b/components/report-window/report-intro.tsx @@ -0,0 +1,3 @@ +export function reportIntro(visited_url: string) { + return

    Analiza skryptów śledzących na ${visited_url} - raport

    ; +} diff --git a/components/report-window/verbs.ts b/components/report-window/verbs.ts index cf23b42..860ddda 100644 --- a/components/report-window/verbs.ts +++ b/components/report-window/verbs.ts @@ -1,5 +1,6 @@ const words = { ciebie: ['ciebie', 'ciebie', 'ciebie', 'was'], + chciałbym: ['chciałbym', 'chciałabym', 'chciałobym', 'chcielibyśmy'], dokonałeś: ['dokonałeś', 'dokonałaś', 'dokonałoś', 'dokonaliście'], jesteś: ['jesteś', 'jesteś', 'jesteś', 'jesteście'], kliknąłem: ['kliknąłem', 'kliknęłam', 'klinkęłom', 'kliknęliśmy'], @@ -8,6 +9,7 @@ const words = { mnie: ['mnie', 'mnie', 'mnie', 'nas'], moich: ['moich', 'moich', 'moich', 'naszych'], moje: ['moje', 'moje', 'moje', 'nasze'], + mojego: ['mojefo', 'mojego', 'mojego', 'naszego'], moja: ['moja', 'moja', 'moja', 'nasza'], mojej: ['mojej', 'mojej', 'mojej', 'naszej'], muszę: ['muszę', 'muszę', 'muszę', 'musimy'], diff --git a/request-cluster.ts b/request-cluster.ts index 7379228..8264804 100644 --- a/request-cluster.ts +++ b/request-cluster.ts @@ -191,6 +191,10 @@ export class RequestCluster extends SaferEmitter { if (this.hasMarkedCookies()) { types_of_data.push('unikalne ID z cookies'); } + if (types_of_data.length > 1) { + types_of_data[types_of_data.length - 1] = + 'oraz ' + types_of_data[types_of_data.length - 1]; + } return types_of_data.join(', '); } }