Expand description of article 173

This commit is contained in:
Kuba Orlik 2022-02-10 17:07:47 +01:00
parent 5cf640e686
commit cc881fddbe
5 changed files with 641 additions and 508 deletions

View File

@ -1,5 +1,5 @@
trailingComma: "es5" trailingComma: "es5"
tabWidth: 4 tabWidth: 3
printWidth: 100 printWidth: 100
semi: true semi: true
singleQuote: true singleQuote: true

View File

@ -33,8 +33,7 @@ class NoInformationAtAllProblem extends Problem {
<> <>
<h2>Brak informacji na temat przetwarzania danych osobowych</h2> <h2>Brak informacji na temat przetwarzania danych osobowych</h2>
<p> <p>
{_('Moje')} dane osobowe zostały ujawnione podmiotom, które właścicielami {_('Moje')} dane osobowe zostały ujawnione podmiotom, które właścicielami domen:
domen:
</p> </p>
<ul> <ul>
{this.getMarkedClusters().map((cluster) => ( {this.getMarkedClusters().map((cluster) => (
@ -44,8 +43,8 @@ class NoInformationAtAllProblem extends Problem {
))} ))}
</ul> </ul>
<p> <p>
Na stronie brakuje jednak jakichkolwiek informacji o tym, jakie cele Na stronie brakuje jednak jakichkolwiek informacji o tym, jakie cele przetwarzania
przetwarzania takich danych oraz jakie podstawy prawne takiego przetwarzania. takich danych oraz jakie podstawy prawne takiego przetwarzania.
</p> </p>
<p>Zwracam się zatem do Państwa z następującymi pytaniami:</p> <p>Zwracam się zatem do Państwa z następującymi pytaniami:</p>
<ul> <ul>
@ -80,6 +79,13 @@ class UnlawfulCookieAccess extends Problem {
} }
getEmailContent() { getEmailContent() {
const cookie_clusters = Object.values(this.clusters).filter((c) => c.hasMarkedCookies()); 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')
.map(([host]) => host);
const maybe_unnecessary_hosts = Object.entries(this.answers.hosts)
.filter(([, answers]) => answers.was_processing_necessary === 'not_sure')
.map(([host]) => host);
const _ = (key: string) => v(key, this.answers.zaimek);
return ( return (
<> <>
<h2>Dostęp do cookies niezgodny z ustawą Prawo Telekomunikacyjne</h2> <h2>Dostęp do cookies niezgodny z ustawą Prawo Telekomunikacyjne</h2>
@ -110,6 +116,108 @@ class UnlawfulCookieAccess extends Problem {
); );
})} })}
</ul> </ul>
<p>
Zgodnie z treścią Art. 173.{' '}
<a href="https://isap.sejm.gov.pl/isap.nsf/download.xsp/WDU20041711800/U/D20041800Lj.pdf">
ustawy Prawo Telekomunikacyjne
</a>
, strona może pozyskać dostęp do treści plików cookies pod warunkiem spełnienia
jednego z następujących warunków:
</p>
<ol>
<li>
Użytkownik wyraził zgodę na takie przetwarzanie danych <em>po</em> tym, jak został
poinformowany bezpośrednio o celu uzyskania dostępu do tej informacji;
</li>
<li>
Dostęp do treści plików cookies jest konieczny do dostarczania usługi świadczonej
drogą elektroniczną zażądanej przez użytkownika.
</li>
</ol>
{(() => {
if (this.answers.popup_type == 'none' || this.answers.popup_type == 'page') {
return (
<p>
Jako, że strona nie pytała {_('mnie')} nigdy o zgodę, nie jest spełniony
warunek 1.
</p>
);
} else if (this.answers.popup_type === 'passive_popup') {
return (
<p>
Państwa strona nie dała mi nigdy faktycznego wyboru dotyczacego 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{' '}
<a href="https://assets.midline.pl/pisma/2021-12-16%20odpowiedz%20UODO%20na%20skarg%C4%99%20i(n)Secure.pdf">
stanowisko polskiego UODO
</a>
.
</>
) : (
''
)}
</p>
);
} else if (this.answers.popup_type === 'some_choice') {
if (this.answers.popup_action === 'none') {
return (
<p>
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.
</p>
);
} else if (this.answers.popup_action === 'closed_popup') {
return (
<p>
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.
</p>
);
} else if (this.answers.popup_action == 'deny_all') {
return (
<p>
{this.answers.popup_deny_all_how.trim()}
{this.answers.popup_closed_how.trim().at(-1) != '.' ? '.' : ''} Zatem nie
jest spełniony warunek 1.
</p>
);
}
}
})()}
{unnecessary_hosts.length > 0 ? (
<p>
W {_('mojej')} ocenie odczytywanie przez Państwa stronę treści plików cookies z{' '}
{unnecessary_hosts.join(', ')} 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{' '}
<em>bez</em> korzystania z plików Cookie.
</p>
) : (
''
)}
<p>
{_('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?
</p>
<p>
{_('Proszę')} też o wskazanie, czy dostęp do treści plików cookie z $
{maybe_unnecessary_hosts.join(', ')} 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?
</p>
</> </>
); );
} }

View File

@ -15,7 +15,6 @@ function generateHostPage(
} }
return { return {
title: host, title: host,
visibleIf: "{popup_type} != 'none'",
elements: [ elements: [
{ {
type: 'radiogroup', type: 'radiogroup',
@ -96,8 +95,8 @@ function generateHostPage(
choices: [ choices: [
{ {
value: 'precise', value: 'precise',
text: /* HTML */ `Tak, wskazuje jasno na bieżące działania lub korzyści text: /* HTML */ `Tak, wskazuje jasno na bieżące działania lub korzyści wynikające
wynikające z takiego przetwarzania danych.`, z takiego przetwarzania danych.`,
}, },
{ {
value: 'vague', value: 'vague',
@ -191,8 +190,8 @@ export default function generateSurveyQuestions(hosts: string[]) {
}, },
{ {
value: 'passive_popup', value: 'passive_popup',
text: /* HTML */ `Okienko o cookiesach, bez możliwości podjęcia text: /* HTML */ `Okienko o cookiesach, bez możliwości podjęcia żadnego
żadnego wyboru (np. tylko opcja zamknij)`, wyboru (np. tylko opcja zamknij)`,
}, },
{ {
value: 'some_choice', value: 'some_choice',
@ -204,8 +203,8 @@ export default function generateSurveyQuestions(hosts: string[]) {
type: 'checkbox', type: 'checkbox',
title: /* HTML */ `Istnieje możliwość, że okienko z informacjami i wyborami title: /* HTML */ `Istnieje możliwość, że okienko z informacjami i wyborami
dotyczącymi przetwarzania {Twoich} danych osobowych ukazało się dawno temu w dotyczącymi przetwarzania {Twoich} danych osobowych ukazało się dawno temu w
trakcie {twojej} wcześniejszej wizyty i wtedy je {odkliknąłeś}. {Otwórz} trakcie {twojej} wcześniejszej wizyty i wtedy je {odkliknąłeś}. {Otwórz} samą
samą stronę w Trybie Prywatnym (Incognito). Co {widzisz}?`, stronę w Trybie Prywatnym (Incognito). Co {widzisz}?`,
visibleIf: "{popup_type} = 'none' or {popup_type} = 'page'", visibleIf: "{popup_type} = 'none' or {popup_type} = 'page'",
name: 'is_incognito_different', name: 'is_incognito_different',
isRequired: true, isRequired: true,
@ -220,9 +219,9 @@ export default function generateSurveyQuestions(hosts: string[]) {
type: 'html', type: 'html',
visibleIf: visibleIf:
'{is_incognito_different} != "no" and ({popup_type} = "none" or {popup_type} = "page") ', '{is_incognito_different} != "no" and ({popup_type} = "none" or {popup_type} = "page") ',
html: /* HTML */ `Jeżeli w trybie incognito widzisz więcej okienek z html: /* HTML */ `Jeżeli w trybie incognito widzisz więcej okienek z informacjami
informacjami o przetwarzaniu danych osobowych, wykonaj analizę w o przetwarzaniu danych osobowych, wykonaj analizę w normalnym trybie ponownie -
normalnym trybie ponownie - ale najpierw usuń pliki cookies tej strony. ale najpierw usuń pliki cookies tej strony.
<a <a
href="https://support.mozilla.org/pl/kb/usuwanie-ciasteczek-i-danych-stron-firefox?redirectslug=usuwanie-ciasteczek&redirectlocale=pl" href="https://support.mozilla.org/pl/kb/usuwanie-ciasteczek-i-danych-stron-firefox?redirectslug=usuwanie-ciasteczek&redirectlocale=pl"
target="_blank" target="_blank"
@ -252,7 +251,7 @@ export default function generateSurveyQuestions(hosts: string[]) {
name: 'passive_consent_description', name: 'passive_consent_description',
isRequired: true, isRequired: true,
visibleIf: '{mentions_passive_consent} = "yes"', visibleIf: '{mentions_passive_consent} = "yes"',
title: 'Jakimi słowami administrator opisuje to pasywne wyrażenie zgody? Zacytuj wprost', 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ę', defaultValue: 'Korzystając ze strony wyrażasz zgodę',
}, },
{ {
@ -310,7 +309,7 @@ export default function generateSurveyQuestions(hosts: string[]) {
}, },
{ {
value: 'deny_all', value: 'deny_all',
text: '{Kliknąłem} przycisk do odmówienia zgody na wszystkie cele', text: '{Odmówiłem} wyrażenia zgody na wszystkie cele',
}, },
{ {
value: 'other', value: 'other',
@ -318,6 +317,22 @@ export default function generateSurveyQuestions(hosts: string[]) {
}, },
], ],
}, },
{
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 <Odrzuć wszystkie>” lub „{Odznaczyłem} wszystkie opcje w ustawieniach zaawansowanych”',
defaultValueExpression: '{Kliknąłem} przycisk „odmawiam wyrażenia zgody”.',
},
{ {
type: 'radiogroup', type: 'radiogroup',
name: 'administrator_identity_available_before_choice', name: 'administrator_identity_available_before_choice',

View File

@ -19,6 +19,8 @@ export type BasicRawAnswers = {
is_incognito_different: [] | ['incognito_is_the_same']; is_incognito_different: [] | ['incognito_is_the_same'];
policy_readable: 'yes' | 'vague' | 'cant_find'; policy_readable: 'yes' | 'vague' | 'cant_find';
popup_action: 'none' | 'closed_popup' | 'accept_all' | 'deny_all' | 'other'; popup_action: 'none' | 'closed_popup' | 'accept_all' | 'deny_all' | 'other';
popup_closed_how: string;
popup_deny_all_how: string;
} & ( } & (
| ({ | ({
popup_type: 'passive_popup'; popup_type: 'passive_popup';

View File

@ -3,6 +3,7 @@ const words = {
szukałem: ['szukałem', 'szukałam', 'szukałom', 'szukaliśmy'], szukałem: ['szukałem', 'szukałam', 'szukałom', 'szukaliśmy'],
znalazłem: ['znalazłem', 'znalazłam', 'znalazłom', 'znaleźliśmy'], znalazłem: ['znalazłem', 'znalazłam', 'znalazłom', 'znaleźliśmy'],
moje: ['moje', 'moje', 'moje', 'nasze'], moje: ['moje', 'moje', 'moje', 'nasze'],
mojej: ['mojej', 'mojej', 'mojej', 'naszej'],
wyraziłem: ['wyraziłem', 'wyraziłam', 'wyraziłom', 'wyraziliśmy'], wyraziłem: ['wyraziłem', 'wyraziłam', 'wyraziłom', 'wyraziliśmy'],
kliknąłem: ['kliknąłem', 'kliknęłam', 'klinkęłom', 'kliknęliśmy'], kliknąłem: ['kliknąłem', 'kliknęłam', 'klinkęłom', 'kliknęliśmy'],
odwiedzałeś: ['odwiedzałeś', 'odwiedzałaś', 'odwiedzałoś', 'odwiedzaliście'], odwiedzałeś: ['odwiedzałeś', 'odwiedzałaś', 'odwiedzałoś', 'odwiedzaliście'],
@ -19,10 +20,17 @@ const words = {
odwiedziłem: ['odwiedziłem', 'odwiedziłam', 'odwiedziłom', 'odwiedziliśmy'], odwiedziłem: ['odwiedziłem', 'odwiedziłam', 'odwiedziłom', 'odwiedziliśmy'],
mam: ['mam', 'mam', 'mam', 'mamy'], mam: ['mam', 'mam', 'mam', 'mamy'],
podjąłeś: ['podjąłeś', 'podjęłaś', 'podjęłoś', 'podjęliście'], podjąłeś: ['podjąłeś', 'podjęłaś', 'podjęłoś', 'podjęliście'],
zamknąłem: ['zamknąłem', 'zamknęłaś', 'zamknęłoś', 'zamknęliście'], zamknąłem: ['zamknąłem', 'zamknęłom', 'zamknęłom', 'zamknęliśmy'],
zamknąłeś: ['zamknąłeś', 'zamknęłaś', 'zamknęłoś', 'zamknęliście'],
zwracam: ['zwracam', 'zwracam', 'zwracam', 'zwracamy'], zwracam: ['zwracam', 'zwracam', 'zwracam', 'zwracamy'],
moich: ['moich', 'moich', 'moich', 'naszych'], moich: ['moich', 'moich', 'moich', 'naszych'],
ciebie: ['ciebie', 'ciebie', 'ciebie', 'was'], ciebie: ['ciebie', 'ciebie', 'ciebie', 'was'],
mnie: ['mnie', 'mnie', 'mnie', 'nas'],
podjąłem: ['podjąłem', 'podjęłam', 'podjęłom', 'podjęliśmy'],
dokonałeś: ['dokonałeś', 'dokonałaś', 'dokonałoś', 'dokonaliście'],
odmówiłeś: ['odmówiłeś', 'odmówiłaś', 'odmówiłoś', 'odmówiliście'],
odznaczyłem: ['odznaczyłem', 'odznaczyłam', 'odznaczyłom', 'odznaczyliśmy'],
proszę: ['proszę', 'proszę', 'proszę', 'prosimy'],
} as { [key: string]: string[] }; } as { [key: string]: string[] };
export default words; export default words;