import { RequestCluster } from '../request-cluster'; import { ExplainerKey } from './explainers'; import { ParsedAnswers } from './parse-answers'; import { v } from './verbs'; abstract class Problem { constructor(public answers: ParsedAnswers, public clusters: Record) {} getMarkedClusters() { return Object.values(this.clusters).filter((c) => c.hasMarks()); } abstract getEmailContent(): JSX.Element; abstract getNecessaryExplainers(): ExplainerKey[]; } function formatRange(cluster: RequestCluster) { const parts = [] as string[]; console.log(cluster); if (cluster.hasMarkedCookies()) { parts.push('mojego identyfikatora internetowego pozyskanego z Cookie'); } if (cluster.exposesOrigin()) { parts.push('części mojej historii przeglądania'); } return parts.join(' oraz '); } class NoInformationAtAllProblem extends Problem { getEmailContent() { 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:

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:

); } getNecessaryExplainers() { const explainers = [] as Array; if ( this.getMarkedClusters().some((cluster) => { console.log(cluster); return cluster.hasMarkedCookies(); }) ) { explainers.push('cookies_are_pii'); } return explainers; } } class UnlawfulCookieAccess extends Problem { getNecessaryExplainers(): ExplainerKey[] { return []; } getEmailContent() { 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 ( <>

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:

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:

  1. Użytkownik wyraził zgodę na takie przetwarzanie danych po tym, jak został poinformowany bezpośrednio o celu uzyskania dostępu do tej informacji;
  2. Dostęp do treści plików cookies jest konieczny do dostarczania usługi świadczonej drogą elektroniczną zażądanej przez użytkownika.
{(() => { if (this.answers.popup_type == 'none' || this.answers.popup_type == 'page') { return (

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 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{' '} 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{' '} {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{' '} 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?

{_('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?

); } static qualifies(answers: ParsedAnswers, clusters: RequestCluster[]): boolean { // są cookiesy, nie było zgody, nie są konieczne do działania strony const cookie_clusters = Object.values(clusters).filter((c) => c.hasMarkedCookies()); return cookie_clusters.some((cluster) => { const hostAnswers = answers.hosts[cluster.id]; return ( (hostAnswers.present == 'not_mentioned' || hostAnswers.present == 'not_before_making_a_choice' || ['none', 'closed_popup', 'deny_all'].includes(hostAnswers.popup_action)) && hostAnswers.was_processing_necessary != 'yes' ); }); } } export default function deduceProblems( answers: ParsedAnswers, clusters: Record ): Problem[] { const problems = []; if (answers.popup_type === 'none') { problems.push(new NoInformationAtAllProblem(answers, clusters)); } if (UnlawfulCookieAccess.qualifies(answers, Object.values(clusters))) { problems.push(new UnlawfulCookieAccess(answers, clusters)); } return problems; }