{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))} -- {_('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))} ++ {_('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”). +
+- Sztucznie wygenerowane identyfikatory przechowywane w plikach Cookies stanowią dane - osobowe. Wskazuje na to wprost Art. 4. pkt 1. RODO, wymieniając „identyfikator - internetowy” i „numer identyfikacyjny” jako przykłady danych osobowych. -
- > - ), + cookies_are_pii: () => ( + <> ++ Sztucznie wygenerowane identyfikatory przechowywane w plikach Cookies stanowią dane + osobowe. Wskazuje na to wprost Art. 4. pkt 1. RODO, wymieniając „identyfikator + internetowy” i „numer identyfikacyjny” jako przykłady danych osobowych. +
+ > + ), }; diff --git a/components/report-window/generate-survey-questions.ts b/components/report-window/generate-survey-questions.ts index 12fc78b..2485ce2 100644 --- a/components/report-window/generate-survey-questions.ts +++ b/components/report-window/generate-survey-questions.ts @@ -1,382 +1,382 @@ function generateHostPage( - host: string, - index: number, - all_hosts: string[] + host: string, + index: number, + all_hosts: string[] ): { title: string; elements: any[]; visibleIf: string } { - function f(name: string, h = host) { - return `${h.replace(/\./g, '_')}|${name}`; - } - const previous_host: string | null = index > 0 ? all_hosts[index - 1] : null; - function defaultValue(name: string) { - if (!previous_host) { - return {}; - } - return { defaultValueExpression: `{${f(name, previous_host)}}` }; - } - return { - title: host, - elements: [ - { - type: 'radiogroup', - name: f('present'), - isRequired: true, - title: `Cel ujawnienia danych właścicielowi domeny ${host}`, - ...defaultValue('present'), - visibleIf: '{popup_type} != "none"', - choices: [ - { - value: 'not_mentioned', - text: 'nie jest podany nigdzie na stronie', - visibleIf: "{policy_readable} = 'yes' ", - }, - { - value: 'not_before_making_a_choice', - text: 'nie jest podany w żadnym miejscu na stronie, do którego można się dostać bez podejmowania wyboru dotyczącego przetwarzania danych osobowych', - }, - { - value: 'mentioned_in_policy', - text: 'jest podany w polityce prywatności', - visibleIf: "{policy_readable} = 'yes' ", - }, + function f(name: string, h = host) { + return `${h.replace(/\./g, '_')}|${name}`; + } + const previous_host: string | null = index > 0 ? all_hosts[index - 1] : null; + function defaultValue(name: string) { + if (!previous_host) { + return {}; + } + return { defaultValueExpression: `{${f(name, previous_host)}}` }; + } + return { + title: host, + elements: [ + { + type: 'radiogroup', + name: f('present'), + isRequired: true, + title: `Cel ujawnienia danych właścicielowi domeny ${host}`, + ...defaultValue('present'), + visibleIf: '{popup_type} != "none"', + choices: [ + { + value: 'not_mentioned', + text: 'nie jest podany nigdzie na stronie', + visibleIf: "{policy_readable} = 'yes' ", + }, + { + value: 'not_before_making_a_choice', + text: 'nie jest podany w żadnym miejscu na stronie, do którego można się dostać bez podejmowania wyboru dotyczącego przetwarzania danych osobowych', + }, + { + value: 'mentioned_in_policy', + text: 'jest podany w polityce prywatności', + visibleIf: "{policy_readable} = 'yes' ", + }, - { - value: 'mentioned_in_popup', - text: 'jest podany w okienku RODO', - visibleIf: "{popup_type} != 'none' ", - }, - ], - }, - { - type: 'radiogroup', - name: f('legal_basis_type'), - ...defaultValue('legal_basis_type'), - isRequired: true, - title: `Podstawa prawna dla tego konkretnego celu`, - visibleIf: `{${f('present')}} notempty and {${f( - 'present' - )}} != "not_mentioned" and {${f('present')}} != "not_before_making_a_choice"`, - choices: [ - { value: 'consent', text: 'to zgoda.' }, - { - value: 'legitimate_interest', - text: 'to uzasadniony interes.', - }, - { value: 'not_mentioned', text: 'nie jest wskazana nigdzie na stronie.' }, - ], - }, - { - type: 'radiogroup', - name: f('consent_problems'), - ...defaultValue('consent_problems'), - isRequired: true, - title: `Jak ma się ta podstawa prawna do stanu faktycznego?`, - visibleIf: `{${f('legal_basis_type')}} = "consent"`, - defaultValueExpression: - 'iif({popup_action} = "none" or {popup_action} = "closed_popup", "claims_consent_but_sends_before_consent", iif({popup_action} = "accept_all" and {rejection_is_hard} = "yes", "claims_consent_but_there_was_no_easy_refuse", ""))', - choices: [ - { - value: 'claims_consent_but_sends_before_consent', - text: `Strona wysłała {moje} dane do ${host} zanim {wyraziłem} na to zgodę`, - }, - { - value: 'claims_consent_but_there_was_no_easy_refuse', - text: '{Kliknąłem} przycisk od wyrażania zgody, ale w okienku o zgodę nie było natychmiastowo dostępnego przycisku do niewyrażenia zgody jednym kliknięciem', - }, - { value: 'none', text: 'żadne z powyższych.' }, - ], - }, - { - type: 'radiogroup', - name: f('legitimate_interest_activity_specified'), - ...defaultValue('legitimate_interest_activity_specified'), - isRequired: true, - title: /* HTML */ `Czy administrator strony opisał szczegółowo, na czym polega - uzasadniony interes w kontekście tego celu?`, - visibleIf: `{${f('legal_basis_type')}} = "legitimate_interest"`, - choices: [ - { - value: 'precise', - text: /* HTML */ `Tak, wskazuje jasno na bieżące działania lub korzyści wynikające - z takiego przetwarzania danych.`, - }, - { - value: 'vague', - text: `Wskazuje tylko ogólnie, jak np. „marketing” czy „statystyki”.`, - }, - { - value: 'no', - text: `Nie. Nie wiadomo, na czym ten uzasadniony interes polega.`, - }, - ], - }, - { - type: 'text', - title: `Jak administrator opisał to, na czym polega uzasadniony interes w kontekście ${host}?`, - name: f('legitimate_interest_description'), - visibleIf: `{${f('legitimate_interest_activity_specified')}} = 'vague'`, - placeholder: 'marketing', - defaultValueExpression: - index == 0 - ? 'marketing' - : `{${f('legitimate_interest_description', previous_host)}}`, - }, - { - type: 'radiogroup', - title: `Czy domena ${host} należy do podmiotu spoza Europy (np. Google, Facebook)?`, - name: f('outside_eu'), - ...defaultValue('outside_eu'), - visibleIf: `{${f('legitimate_interest_activity_specified')}} = "precise" or {${f( - 'consent_problems' - )}} = "none"`, - choices: [ - { value: 'yes', text: 'Tak' }, - { value: 'no', text: 'Nie' }, - { value: 'not_sure', text: 'Nie wiem' }, - ], - }, - { - type: 'radiogroup', - title: `Czy w {Twojej} ocenie wysłanie {Twoich} danych do właściciela domeny ${host} było konieczne do świadczenia zażądanej przez {Ciebie} usługi drogą elektroniczną?`, - name: f('was_processing_necessary'), - ...defaultValue('was_processing_necessary'), - visibleIf: `{${f('legal_basis_type')}} = "legitimate_interest" or {${f( - 'present' - )}} = "not_mentioned" or {popup_type} = "none"`, - choices: [ - { value: 'yes', text: 'Tak, było konieczne' }, - { value: 'no', text: 'Nie, nie było konieczne' }, - { value: 'not_sure', text: 'Nie mam zdania' }, - ], - }, - ], - }; + { + value: 'mentioned_in_popup', + text: 'jest podany w okienku RODO', + visibleIf: "{popup_type} != 'none' ", + }, + ], + }, + { + type: 'radiogroup', + name: f('legal_basis_type'), + ...defaultValue('legal_basis_type'), + isRequired: true, + title: `Podstawa prawna dla tego konkretnego celu`, + visibleIf: `{${f('present')}} notempty and {${f( + 'present' + )}} != "not_mentioned" and {${f('present')}} != "not_before_making_a_choice"`, + choices: [ + { value: 'consent', text: 'to zgoda.' }, + { + value: 'legitimate_interest', + text: 'to uzasadniony interes.', + }, + { value: 'not_mentioned', text: 'nie jest wskazana nigdzie na stronie.' }, + ], + }, + { + type: 'radiogroup', + name: f('consent_problems'), + ...defaultValue('consent_problems'), + isRequired: true, + title: `Jak ma się ta podstawa prawna do stanu faktycznego?`, + visibleIf: `{${f('legal_basis_type')}} = "consent"`, + defaultValueExpression: + 'iif({popup_action} = "none" or {popup_action} = "closed_popup", "claims_consent_but_sends_before_consent", iif({popup_action} = "accept_all" and {rejection_is_hard} = "yes", "claims_consent_but_there_was_no_easy_refuse", ""))', + choices: [ + { + value: 'claims_consent_but_sends_before_consent', + text: `Strona wysłała {moje} dane do ${host} zanim {wyraziłem} na to zgodę`, + }, + { + value: 'claims_consent_but_there_was_no_easy_refuse', + text: '{Kliknąłem} przycisk od wyrażania zgody, ale w okienku o zgodę nie było natychmiastowo dostępnego przycisku do niewyrażenia zgody jednym kliknięciem', + }, + { value: 'none', text: 'żadne z powyższych.' }, + ], + }, + { + type: 'radiogroup', + name: f('legitimate_interest_activity_specified'), + ...defaultValue('legitimate_interest_activity_specified'), + isRequired: true, + title: /* HTML */ `Czy administrator strony opisał szczegółowo, na czym polega + uzasadniony interes w kontekście tego celu?`, + visibleIf: `{${f('legal_basis_type')}} = "legitimate_interest"`, + choices: [ + { + value: 'precise', + text: /* HTML */ `Tak, wskazuje jasno na bieżące działania lub korzyści + wynikające z takiego przetwarzania danych.`, + }, + { + value: 'vague', + text: `Wskazuje tylko ogólnie, jak np. „marketing” czy „statystyki”.`, + }, + { + value: 'no', + text: `Nie. Nie wiadomo, na czym ten uzasadniony interes polega.`, + }, + ], + }, + { + type: 'text', + title: `Jak administrator opisał to, na czym polega uzasadniony interes w kontekście ${host}?`, + name: f('legitimate_interest_description'), + visibleIf: `{${f('legitimate_interest_activity_specified')}} = 'vague'`, + placeholder: 'marketing', + defaultValueExpression: + index == 0 + ? 'marketing' + : `{${f('legitimate_interest_description', previous_host)}}`, + }, + { + type: 'radiogroup', + title: `Czy domena ${host} należy do podmiotu spoza Europy (np. Google, Facebook)?`, + name: f('outside_eu'), + ...defaultValue('outside_eu'), + visibleIf: `{${f('legitimate_interest_activity_specified')}} = "precise" or {${f( + 'consent_problems' + )}} = "none"`, + choices: [ + { value: 'yes', text: 'Tak' }, + { value: 'no', text: 'Nie' }, + { value: 'not_sure', text: 'Nie wiem' }, + ], + }, + { + type: 'radiogroup', + title: `Czy w {Twojej} ocenie wysłanie {Twoich} danych do właściciela domeny ${host} było konieczne do świadczenia zażądanej przez {Ciebie} usługi drogą elektroniczną?`, + name: f('was_processing_necessary'), + ...defaultValue('was_processing_necessary'), + visibleIf: `{${f('legal_basis_type')}} = "legitimate_interest" or {${f( + 'present' + )}} = "not_mentioned" or {popup_type} = "none"`, + choices: [ + { value: 'yes', text: 'Tak, było konieczne' }, + { value: 'no', text: 'Nie, nie było konieczne' }, + { value: 'not_sure', text: 'Nie mam zdania' }, + ], + }, + ], + }; } export default function generateSurveyQuestions(hosts: string[]) { - return { - showQuestionNumbers: 'off', - showProgressBar: 'top', - clearInvisibleValues: 'onHidden', - pages: [ - { - title: 'Zaimki', - elements: [ - { - type: 'radiogroup', - name: 'zaimek', - title: 'Forma czasownika:', - isRequired: true, - choices: [ - { value: 0, text: 'Wysłałem' }, - { value: 1, text: 'Wysłałam' }, - { value: 2, text: 'Wysłałom' }, - { value: 3, text: 'Wysłaliśmy' }, - ], - }, - ], - }, - { - title: 'Obowiązek informacyjny i machanizm pozyskiwania zgody', - elements: [ - { - type: 'radiogroup', - title: 'Jaką formę informacji o przetwarzaniu danych osobowych stosuje ta strona?', - name: 'popup_type', - isRequired: true, - choices: [ - { value: 'none', text: 'Brak informacji' }, - { - value: 'page', - text: 'Tylko w postaci tekstu na podstronie np. "prywatność" lub "polityka cookies"', - }, - { - value: 'passive_popup', - text: /* HTML */ `Okienko o cookiesach, bez możliwości podjęcia żadnego - wyboru (np. tylko opcja „zamknij”)`, - }, - { - value: 'some_choice', - text: 'Okienko o cookiesach, z możliwością podjęcia wyboru', - }, - ], - }, - { - type: 'checkbox', - title: /* HTML */ `Istnieje możliwość, że okienko z informacjami i wyborami - dotyczącymi przetwarzania {Twoich} danych osobowych ukazało się dawno temu w - trakcie {twojej} wcześniejszej wizyty i wtedy je {odkliknąłeś}. {Otwórz} tę samą - stronę w Trybie Prywatnym (Incognito). Co {widzisz}?`, - visibleIf: "{popup_type} = 'none' or {popup_type} = 'page'", - name: 'is_incognito_different', - isRequired: true, - choices: [ - { - value: 'incognito_is_the_same', - text: 'W Trybie prywatnym {widzę} to samo, co {widziałem} w normalnym trybie', - }, - ], - }, - { - type: 'html', - visibleIf: - '{is_incognito_different} != "no" and ({popup_type} = "none" or {popup_type} = "page") ', - html: /* HTML */ `Jeżeli w trybie incognito widzisz więcej okienek z informacjami - o przetwarzaniu danych osobowych, wykonaj analizę w normalnym trybie ponownie - - ale najpierw usuń pliki cookies tej strony. - - Zobacz, jak to zrobić - `, - }, - { - type: 'radiogroup', - name: 'mentions_passive_consent', - isRequired: true, - visibleIf: '{popup_type} = "passive_popup"', - title: 'Czy treść okienka wskazuje na zgodę wyrażoną pasywnie, np. „Korzystając z naszej strony wyrażasz zgodę”, „Brak zmiany ustawień przeglądarki oznacza zgodę”, „Klikając przycisk "X" (zamknij) wyrażasz zgodę”?', - choices: [ - { - value: 'yes', - text: 'Tak', - }, - { - value: 'no', - text: 'Nie', - }, - ], - }, - { - type: 'text', - name: 'passive_consent_description', - isRequired: true, - visibleIf: '{mentions_passive_consent} = "yes"', - title: 'Jakimi słowami administrator opisuje to pasywne wyrażenie zgody? Zacytuj wprost. Na przykład: „Korzystając ze strony wyrażasz zgodę”, albo „Pozostawiając ustawienia przeglądarki bez zmian (..) wyrażasz zgodę”', - defaultValue: 'Korzystając ze strony wyrażasz zgodę', - }, - { - type: 'radiogroup', - name: 'cookie_wall', - isRequired: true, - visibleIf: '{popup_type} = "passive_popup"', - title: 'Czy treść strony jest wygodnie czytelna bez odkliknięcia tego okienka o RODO?', - choices: [ - { - value: 'no', // wiem, że tu jest "no", a odpowiedź brzmi "tak" - ale nazwa pytania dotyczy obecności cookie walla - text: 'Tak, jest czytelna', - }, - { - value: 'yes', - text: 'Nie. Jest zupełnie niewidoczna albo jest przesłonięta w stopniu uniemożliwiającym lub znacznie utrudniającym czytanie treści strony.', - }, - ], - }, - { - type: 'radiogroup', - name: 'rejection_is_hard', - isRequired: true, - visibleIf: '{popup_type} = "some_choice"', - title: 'Czy wyrażenie zgody na wszystkie cele jest dokładnie tak samo łatwe, jak odmowa zgody na wszystkie cele?', - choices: [ - { - value: 'no', // wiem, że tu jest "no", a odpowiedź brzmi "tak" - ale nazwa pytania dotyczy braku równowagi - text: 'Tak. Opcja odmowy zgody na wszystkie cele jest równie widoczna i łatwo dostępna, co opcja wyrażenia zgody.', - }, - { - 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.', - }, - ], - }, - { - type: 'radiogroup', - name: 'popup_action', - isRequired: true, - visibleIf: '{popup_type} = "some_choice" or {popup_type} = "passive_popup"', - title: 'Jaką akcję {podjąłeś} w ramach wyskakującego okienka?', - choices: [ - { - value: 'none', - text: 'Nic nie {kliknąłem}', - }, - { - value: 'closed_popup', - text: '{Zamknąłem} okienko za pomocą przycisku „X” lub „Zamknij”, lub podobnego', - }, - { - value: 'accept_all', - text: '{Kliknąłem} przycisk od akceptacji wszystkich zgód', - }, - { - value: 'deny_all', - text: '{Odmówiłem} wyrażenia zgody na wszystkie cele', - }, - { - value: 'other', - text: 'Coś innego', - }, - ], - }, - { - type: 'text', - name: 'popup_closed_how', - isRequired: true, - visibleIf: '{popup_action} = "closed_popup"', - title: 'W jaki sposób {zamknąłeś} okienko o zgodę? Opisz pełnym zdaniem', - defaultValueExpression: '{Kliknąłem} przycisk „X”.', - }, - { - type: 'text', - name: 'popup_deny_all_how', - isRequired: true, - visibleIf: '{popup_action} = "deny_all"', - title: 'W jaki sposób {zamknąłeś} okienko o zgodę? Opisz pełnym zdaniem, np.: „{Kliknąłem} przycisk- {_('Moje')} dane osobowe zostały ujawnione podmiotom, które są właścicielami 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:
-+ {_('Moje')} dane osobowe zostały ujawnione podmiotom, które są właścicielami + 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:
+- 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 dokonała odczytu plików Cookie zapisanych na dysku twardym mojego + komputera. Dotyczy to plików cookie przypisanych do domen: +
+- Zgodnie z treścią Art. 173.{' '} - - ustawy Prawo Telekomunikacyjne - - , strona może pozyskać dostęp do treści plików cookies pod warunkiem spełnienia - jednego z następujących warunków: -
-- Jako, że strona nie pytała {_('mnie')} nigdy o zgodę, nie jest spełniony - warunek 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.{' '} - {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{' '} - - stanowisko polskiego UODO - - . - > - ) : ( - '' - )} -
- ); - } else if (this.answers.popup_type === 'some_choice') { - if (this.answers.popup_action === 'none') { - return ( -- Nie {_('wyraziłem')} zgody na takie przetwarzanie {_('moich')} danych - osobowych. W okienku pytającym o zgodję nic nie {_('kliknąłem')}. Nie - jest zatem spełniony warunek 1. -
- ); - } else if (this.answers.popup_action === 'closed_popup') { - return ( -- Nie {_('wyraziłem')} zgody na takie przetwarzanie {_('moich')} danych - osobowych. {this.answers.popup_closed_how.trim()} - {this.answers.popup_closed_how.trim().at(-1) != '.' ? '.' : ''} Takiego - działania nie można uznać za ważną zgodę na przetwarzanie danych - osobowych, gdyż 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 ( -- {this.answers.popup_deny_all_how.trim()} - {this.answers.popup_closed_how.trim().at(-1) != '.' ? '.' : ''} Zatem nie - jest spełniony warunek 1. -
- ); - } - } - })()} - {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. -
- ) : ( - '' - )} -- {_('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 ? ( -- {_('Proszę')} też o wskazanie, czy dostęp do treści plików cookie z - {wordlist(maybe_unnecessary_hosts)} jest konieczny do poprawnego działania strony? - Jeżeli tak, to {_('proszę')} wskazać, w jaki sposób. Co sprawia, że strona nie - może działać bez nich? -
- ) : ( - '' - )} - > - ); - } + return ( ++ Zgodnie z treścią Art. 173.{' '} + + ustawy Prawo Telekomunikacyjne + + , strona może pozyskać dostęp do treści plików cookies pod warunkiem spełnienia + jednego z następujących warunków: +
++ Jako, że strona nie pytała {_('mnie')} nigdy o zgodę, nie jest + spełniony warunek 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.{' '} + {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{' '} + + stanowisko polskiego UODO + + . + > + ) : ( + '' + )} +
+ ); + } else if (this.answers.popup_type === 'some_choice') { + if (this.answers.popup_action === 'none') { + return ( ++ Nie {_('wyraziłem')} zgody na takie przetwarzanie {_('moich')}{' '} + danych osobowych. W okienku pytającym o zgodję nic nie{' '} + {_('kliknąłem')}. Nie jest zatem spełniony warunek 1. +
+ ); + } else if (this.answers.popup_action === 'closed_popup') { + return ( ++ Nie {_('wyraziłem')} zgody na takie przetwarzanie {_('moich')}{' '} + danych osobowych. {this.answers.popup_closed_how.trim()} + {this.answers.popup_closed_how.trim().at(-1) != '.' + ? '.' + : ''}{' '} + Takiego działania nie można uznać za ważną zgodę na + przetwarzanie danych osobowych, gdyż 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 ( ++ {this.answers.popup_deny_all_how.trim()} + {this.answers.popup_closed_how.trim().at(-1) != '.' + ? '.' + : ''}{' '} + Zatem nie jest spełniony warunek 1. +
+ ); + } + } + })()} + {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. +
+ ) : ( + '' + )} ++ {_('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 ? ( ++ {_('Proszę')} też o wskazanie, czy dostęp do treści plików cookie z + {wordlist(maybe_unnecessary_hosts)} jest konieczny do poprawnego działania + strony? Jeżeli tak, to {_('proszę')} wskazać, w jaki sposób. Co sprawia, że + strona nie może działać bez nich? +
+ ) : ( + '' + )} + > + ); + } } diff --git a/components/report-window/problems/unlawful-data.tsx b/components/report-window/problems/unlawful-data.tsx index 9b2433c..8bd8e99 100644 --- a/components/report-window/problems/unlawful-data.tsx +++ b/components/report-window/problems/unlawful-data.tsx @@ -7,29 +7,30 @@ import { Problem } from './problem'; type UnlawfulDataClassification = 'no_purpose'; export function classifyUnlawfulData( - hostAnswers: ParsedHostAnswers, - cluster: RequestCluster + hostAnswers: ParsedHostAnswers, + cluster: RequestCluster ): UnlawfulDataClassification { - if (hostAnswers.present == 'not_mentioned' && hostAnswers.was_processing_necessary == 'no') { - return 'no_purpose'; - } + if (hostAnswers.present == 'not_mentioned' && hostAnswers.was_processing_necessary == 'no') { + return 'no_purpose'; + } } export class UnlawfulData extends Problem { - static qualifies(answers: ParsedAnswers, clusters: RequestCluster[]): boolean {} - getEmailContent() { - const _ = (key: string) => v(key, this.answers.zaimek); - return ( - <> -- {_('Moje')} dane osobowe zostały ujawnione podmiotom, które są właścicielami domen: -
- {this.getRangeDescription()} - > - ); - } - getNecessaryExplainers() { - return [] as ExplainerKey[]; - } + static qualifies(answers: ParsedAnswers, clusters: RequestCluster[]): boolean {} + getEmailContent() { + const _ = (key: string) => v(key, this.answers.zaimek); + return ( + <> ++ {_('Moje')} dane osobowe zostały ujawnione podmiotom, które są właścicielami + domen: +
+ {this.getRangeDescription()} + > + ); + } + getNecessaryExplainers() { + return [] as ExplainerKey[]; + } } diff --git a/components/report-window/raw-answers.ts b/components/report-window/raw-answers.ts index b93775e..a1e9e08 100644 --- a/components/report-window/raw-answers.ts +++ b/components/report-window/raw-answers.ts @@ -1,58 +1,58 @@ export type HostRawAnswers = { - [key: `${string}|present`]: - | 'not_mentioned' - | 'not_before_making_a_choice' - | 'mentioned_in_policy' - | 'mentioned_in_popup'; - [key: `${string}|legal_basis_type`]: 'consent' | 'legitimate_interest' | 'not_mentioned'; - [key: `${string}|consent`]: - | 'claims_consent_but_sends_before_consent' - | 'claims_consent_but_there_was_no_easy_refuse' - | 'none'; - [key: `${string}|legitimate_interest_activity_specified`]: 'precise' | 'vague' | 'no'; - [key: `${string}|legitimate_interest_description`]: string; - [key: `${string}|outside_eu`]: 'yes' | 'no' | 'not_sure'; + [key: `${string}|present`]: + | 'not_mentioned' + | 'not_before_making_a_choice' + | 'mentioned_in_policy' + | 'mentioned_in_popup'; + [key: `${string}|legal_basis_type`]: 'consent' | 'legitimate_interest' | 'not_mentioned'; + [key: `${string}|consent`]: + | 'claims_consent_but_sends_before_consent' + | 'claims_consent_but_there_was_no_easy_refuse' + | 'none'; + [key: `${string}|legitimate_interest_activity_specified`]: 'precise' | 'vague' | 'no'; + [key: `${string}|legitimate_interest_description`]: string; + [key: `${string}|outside_eu`]: 'yes' | 'no' | 'not_sure'; }; export type BasicRawAnswers = { - zaimek: 0 | 1 | 2 | 3; - is_incognito_different: [] | ['incognito_is_the_same']; - policy_readable: 'yes' | 'vague' | 'cant_find'; - popup_action: 'none' | 'closed_popup' | 'accept_all' | 'deny_all' | 'other'; - popup_closed_how: string; - popup_deny_all_how: string; + zaimek: 0 | 1 | 2 | 3; + is_incognito_different: [] | ['incognito_is_the_same']; + policy_readable: 'yes' | 'vague' | 'cant_find'; + popup_action: 'none' | 'closed_popup' | 'accept_all' | 'deny_all' | 'other'; + popup_closed_how: string; + popup_deny_all_how: string; } & ( - | ({ - popup_type: 'passive_popup'; - cookie_wall: 'yes' | 'no'; - rejection_is_hard: undefined; - administrator_identity_available_before_choice: undefined; - } & ( - | { - mentions_passive_consent?: 'yes'; - passive_consent_description: string; - } - | { - mentions_passive_consent?: 'no'; - passive_consent_description: undefined; - } - )) - | { - popup_type: 'some_choice'; - rejection_is_hard: 'yes' | 'no'; - administrator_identity_available_before_choice: 'yes' | 'no'; - cookie_wall: undefined; - passive_consent_description: undefined; - mentions_passive_consent: undefined; - } - | { - popup_type: 'none' | 'page'; - cookie_wall: undefined; - passive_consent_description: undefined; - mentions_passive_consent: undefined; - rejection_is_hard: undefined; - administrator_identity_available_before_choice: undefined; - } + | ({ + popup_type: 'passive_popup'; + cookie_wall: 'yes' | 'no'; + rejection_is_hard: undefined; + administrator_identity_available_before_choice: undefined; + } & ( + | { + mentions_passive_consent?: 'yes'; + passive_consent_description: string; + } + | { + mentions_passive_consent?: 'no'; + passive_consent_description: undefined; + } + )) + | { + popup_type: 'some_choice'; + rejection_is_hard: 'yes' | 'no'; + administrator_identity_available_before_choice: 'yes' | 'no'; + cookie_wall: undefined; + passive_consent_description: undefined; + mentions_passive_consent: undefined; + } + | { + popup_type: 'none' | 'page'; + cookie_wall: undefined; + passive_consent_description: undefined; + mentions_passive_consent: undefined; + rejection_is_hard: undefined; + administrator_identity_available_before_choice: undefined; + } ); type RawAnswers = BasicRawAnswers & HostRawAnswers; diff --git a/components/report-window/report-window.tsx b/components/report-window/report-window.tsx index c71034e..2a9b4e1 100644 --- a/components/report-window/report-window.tsx +++ b/components/report-window/report-window.tsx @@ -9,70 +9,70 @@ import EmailContent from './email-content'; import { parseAnswers, ParsedAnswers } from './parse-answers'; function Report() { - try { - const url = new URL(document.location.toString()); - const origin = url.searchParams.get('origin'); - const [counter] = useEmitter(getMemory()); - const [answers, setAnswers] = React.useState