Compare commits

..

No commits in common. "468391489ccd9514fd719a794a69ab2e52a8a248" and "54e5040348a374e60ebcfc4e6b91c2aa3fd82936" have entirely different histories.

6 changed files with 328 additions and 343 deletions

View File

@ -39,7 +39,6 @@ export default function EmailContent({
</p> </p>
{problems.map((problem) => problem.getEmailContent())} {problems.map((problem) => problem.getEmailContent())}
{explainers.map((explainer) => explainer(answers.zaimek))} {explainers.map((explainer) => explainer(answers.zaimek))}
<h2>Państwa rola jako współadministratora danych osobowych</h2>
<p> <p>
{_('Zwracam')} Państwa uwagę na fakt, że w myśl{' '} {_('Zwracam')} Państwa uwagę na fakt, że w myśl{' '}
<a href="https://curia.europa.eu/juris/document/document.jsf?text=&docid=216555&pageIndex=0&doclang=PL&mode=lst&dir=&occ=first&part=1&cid=1254905"> <a href="https://curia.europa.eu/juris/document/document.jsf?text=&docid=216555&pageIndex=0&doclang=PL&mode=lst&dir=&occ=first&part=1&cid=1254905">
@ -48,10 +47,10 @@ export default function EmailContent({
poprzez wysyłanie moich danych w wyżej opisanym zakresie stają się Państwo 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 współadministratorem moich danych osobowych, dlatego ciąży na Państwu obowiązek
odpowiedzi na moje pytanie na mocy Art. 12 i 13 Rozporządzenia 2016/679 Parlamentu odpowiedzi na moje pytanie 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 Europejskiego i Rady (UE) z dnia 27 kwietnia 2016 r. w sprawie ochrony osób
związku z przetwarzaniem danych osobowych i w sprawie swobodnego przepływu takich danych fizycznych w związku z przetwarzaniem danych osobowych i w sprawie swobodnego
oraz uchylenia dyrektywy 95/46/WE (ogólne rozporządzenie o ochronie danych, dalej: przepływu takich danych oraz uchylenia dyrektywy 95/46/WE (ogólne rozporządzenie o
RODO). ochronie danych, dalej: RODO).
</p> </p>
</div> </div>
); );

View File

@ -3,7 +3,7 @@ export type ExplainerKey = 'cookies_are_pii';
export const Explainers: Record<ExplainerKey, (zaimek_index: 0 | 1 | 2 | 3) => JSX.Element> = { export const Explainers: Record<ExplainerKey, (zaimek_index: 0 | 1 | 2 | 3) => JSX.Element> = {
cookies_are_pii: () => ( cookies_are_pii: () => (
<> <>
<h2>Ciasteczka stanowią dane osobowe</h2> <h3>Ciasteczka stanowią dane osobowe</h3>
<p> <p>
Sztucznie wygenerowane identyfikatory przechowywane w plikach Cookies stanowią dane Sztucznie wygenerowane identyfikatory przechowywane w plikach Cookies stanowią dane
osobowe. Wskazuje na to wprost Art. 4. pkt 1. RODO, wymieniając identyfikator osobowe. Wskazuje na to wprost Art. 4. pkt 1. RODO, wymieniając identyfikator

View File

@ -1,5 +1,4 @@
import { RequestCluster } from '../../request-cluster'; import { RequestCluster } from '../../request-cluster';
import { wordlist } from '../../util';
import { ExplainerKey } from '../explainers'; import { ExplainerKey } from '../explainers';
import { ParsedAnswers } from '../parse-answers'; import { ParsedAnswers } from '../parse-answers';
import { v } from '../verbs'; import { v } from '../verbs';
@ -146,7 +145,7 @@ export class UnlawfulCookieAccess extends Problem {
{unnecessary_hosts.length > 0 ? ( {unnecessary_hosts.length > 0 ? (
<p> <p>
W {_('mojej')} ocenie odczytywanie przez Państwa stronę treści plików cookies z{' '} 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 {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 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 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{' '} Państwa stronę od wielu innych stron, które realizują te same funkcjonalności{' '}
@ -160,16 +159,12 @@ export class UnlawfulCookieAccess extends Problem {
takiego przetwarzania {_('moich')} danych osobowych, czy przetwarzali je państwo bez takiego przetwarzania {_('moich')} danych osobowych, czy przetwarzali je państwo bez
ważnej podstawy prawnej? ważnej podstawy prawnej?
</p> </p>
{maybe_unnecessary_hosts.length > 1 ? (
<p> <p>
{_('Proszę')} też o wskazanie, czy dostęp do treści plików cookie z {_('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? {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 Jeżeli tak, to {_('proszę')} wskazać, w jaki sposób. Co sprawia, że strona nie może
może działać bez nich? działać bez nich?
</p> </p>
) : (
''
)}
</> </>
); );
} }

View File

@ -1,6 +1,15 @@
@import '../sidebar/fonts.scss'; @import '../sidebar/fonts.scss';
@import '../sidebar/colors.scss'; @import '../sidebar/colors.scss';
* {
margin: 0px;
box-sizing: border-box;
text-rendering: optimizelegibility;
font-smooth: auto;
-webkit-font-smoothing: auto;
user-select: none;
}
html { html {
font-size: 1rem; font-size: 1rem;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell,

View File

@ -10,13 +10,10 @@ import { parseAnswers, ParsedAnswers } from './parse-answers';
function Report() { function Report() {
try { try {
const url = new URL(document.location.toString()); const origin = new URL(document.location.toString()).searchParams.get('origin');
const origin = url.searchParams.get('origin');
const [counter] = useEmitter(getMemory()); const [counter] = useEmitter(getMemory());
const [answers, setAnswers] = React.useState<ParsedAnswers>( const [answers, setAnswers] = React.useState<ParsedAnswers>(null);
url.searchParams.get('answers') ? JSON.parse(url.searchParams.get('answers')) : null const [mode, setMode] = React.useState('survey');
);
const [mode, setMode] = React.useState(url.searchParams.get('mode') || 'survey');
const clusters = getMemory().getClustersForOrigin(origin); const clusters = getMemory().getClustersForOrigin(origin);
/* const [entries, setEntries] = React.useState<StolenDataEntry[]>([]); */ /* const [entries, setEntries] = React.useState<StolenDataEntry[]>([]); */
/* React.useEffect(() => { /* React.useEffect(() => {
@ -33,14 +30,6 @@ function Report() {
/* if (entries.length == 0) { /* if (entries.length == 0) {
* return <>Wczytywanie...</>; * return <>Wczytywanie...</>;
* } */ * } */
React.useEffect(() => {
const url = new URL(document.location.toString());
url.searchParams.set('origin', origin);
url.searchParams.set('answers', JSON.stringify(answers));
url.searchParams.set('mode', mode);
history.pushState({}, 'Rentgen', url.toString());
}, [mode, answers, origin]);
const visited_url = Object.values(clusters) const visited_url = Object.values(clusters)
.find((cluster) => cluster.getMarkedRequests().length > 0) .find((cluster) => cluster.getMarkedRequests().length > 0)
?.getMarkedRequests()[0].originalURL; ?.getMarkedRequests()[0].originalURL;

View File

@ -269,10 +269,3 @@ export function safeDecodeURIComponent(s: string) {
export function normalizeForClassname(string: string) { export function normalizeForClassname(string: string) {
return string.replace(/[^a-z0-9]/gi, '-'); return string.replace(/[^a-z0-9]/gi, '-');
} }
export function wordlist(words: string[]) {
return words.reduce(
(acc, word, i) => `${acc}${i > 0 ? (i < words.length - 1 ? ',' : ' i') : ''} ${word}`,
''
);
}