115 lines
5.0 KiB
TypeScript
115 lines
5.0 KiB
TypeScript
import { RequestCluster } from '../../../request-cluster';
|
|
import { dataLocationToText, wordlist } from '../../../util';
|
|
import { ExplainerKey } from '../explainers';
|
|
import { v } from '../verbs';
|
|
import { Problem } from './problem';
|
|
|
|
export class UnknownPurposes extends Problem {
|
|
getNecessaryExplainers(): ExplainerKey[] {
|
|
const has_cookies = this.getAffectedClusters().some((cluster) => cluster.hasCookies());
|
|
if (has_cookies) {
|
|
return ['cookies_are_pii'];
|
|
} else {
|
|
return [];
|
|
}
|
|
}
|
|
|
|
isHostAffected(host: string) {
|
|
const answers = this.answers.hosts[host];
|
|
if (!answers) {
|
|
return false;
|
|
}
|
|
return (
|
|
['not_mentioned', 'not_before_making_a_choice'].includes(answers.present) &&
|
|
['no', 'not_sure'].includes(answers.was_processing_necessary) &&
|
|
(this.clusters[host].hasCookies() || this.clusters[host].exposesOrigin())
|
|
);
|
|
}
|
|
|
|
qualifies(): boolean {
|
|
return Object.keys(this.answers.hosts).some((host) => this.isHostAffected(host));
|
|
}
|
|
|
|
getAffectedClusters(): RequestCluster[] {
|
|
return Object.keys(this.answers.hosts)
|
|
.filter((host) => this.isHostAffected(host))
|
|
.map((host) => this.clusters[host]);
|
|
}
|
|
|
|
getEmailContent({ mode, tone }: { mode: 'email' | 'report'; tone: 'official' | 'polite' }) {
|
|
const _ = (key: string) => v(key, this.answers.zaimek);
|
|
const affected_clusters = this.getAffectedClusters();
|
|
const has_history = affected_clusters.some((cluster) => cluster.exposesOrigin());
|
|
const has_cookies = affected_clusters.some((cluster) => cluster.hasCookies());
|
|
|
|
return (
|
|
<>
|
|
<h2>Cele przetwarzania danych</h2>
|
|
<p>
|
|
Państwa strona{' '}
|
|
{mode == 'email'
|
|
? `ujawniła dane ${_('mnie')} dotyczące`
|
|
: 'ujawnia dane dotyczące użytkowników'}{' '}
|
|
w zakresie{' '}
|
|
{wordlist([
|
|
...(has_cookies ? ['treści plików cookies'] : []),
|
|
...(has_history
|
|
? [
|
|
mode === 'email'
|
|
? `części ${_('mojej')} historii przeglądania`
|
|
: `części historii przeglądania`,
|
|
]
|
|
: []),
|
|
])}{' '}
|
|
podmiotom, które są właścicielami nastepujących domen:
|
|
</p>
|
|
<ul>
|
|
{affected_clusters.map((cluster, index) => {
|
|
const locations = cluster.exposesOriginWhere();
|
|
return (
|
|
<li>
|
|
<strong>{cluster.id}</strong>:{' '}
|
|
{wordlist([
|
|
...(cluster.hasCookies() ? ['treść plików cookies'] : []),
|
|
...(cluster.exposesOrigin()
|
|
? [
|
|
(mode === 'email'
|
|
? `część ${_('mojej')} historii przeglądania`
|
|
: `część historii przeglądania użytkownika`) +
|
|
' (' +
|
|
wordlist(
|
|
locations.map((l) => dataLocationToText(l))
|
|
) +
|
|
')',
|
|
]
|
|
: []),
|
|
])}
|
|
{index === affected_clusters.length - 1 ? '.' : ';'}
|
|
</li>
|
|
);
|
|
})}
|
|
</ul>
|
|
{mode === 'email' ? (
|
|
tone === 'official' ? (
|
|
<p>
|
|
Proszę o wskazanie, jakie są cele takiego przetwarzania danych, które
|
|
mnie dotyczą.
|
|
</p>
|
|
) : (
|
|
<p>
|
|
Apeluję o umieszczenie informacji na temat na Państwa stronie, aby jej
|
|
użytkownicy mogli podejmować w pełni świadome wybory dotyczące
|
|
przetwarzania danych ich dotyczących.
|
|
</p>
|
|
)
|
|
) : (
|
|
<p>
|
|
<strong>Zalecenie</strong>: warto dodać informacje o tym, jakie są cele
|
|
ujawniania wyżej opisanych danych wyżej opisanym podmiotom trzecim.
|
|
</p>
|
|
)}
|
|
</>
|
|
);
|
|
}
|
|
}
|