110 lines
4.8 KiB
TypeScript
110 lines
4.8 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[] {
|
||
|
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>
|
||
|
)}
|
||
|
</>
|
||
|
);
|
||
|
}
|
||
|
}
|