Add subscriber
This commit is contained in:
parent
fa441b5b81
commit
24da4a34dd
31
components/report-window/email-content.scss
Normal file
31
components/report-window/email-content.scss
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
@import './../../styles/colors.scss';
|
||||||
|
|
||||||
|
.mail-container {
|
||||||
|
box-shadow: rgba(12, 12, 13, 0.1) 0px 1px 4px 0px;
|
||||||
|
background-color: #fff;
|
||||||
|
max-width: 40rem;
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
|
||||||
|
&__header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
|
||||||
|
&--control {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&__content {
|
||||||
|
height: 75vh;
|
||||||
|
overflow-y: scroll;
|
||||||
|
padding: 1rem 2rem;
|
||||||
|
color: $black-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 1.125rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,6 +4,7 @@ import deduceProblems from './deduce-problems';
|
||||||
import { Explainers } from './explainers';
|
import { Explainers } from './explainers';
|
||||||
import { ParsedAnswers } from './parse-answers';
|
import { ParsedAnswers } from './parse-answers';
|
||||||
import { v } from './verbs';
|
import { v } from './verbs';
|
||||||
|
import './email-content.scss';
|
||||||
|
|
||||||
declare var PLUGIN_NAME: string;
|
declare var PLUGIN_NAME: string;
|
||||||
declare var PLUGIN_URL: string;
|
declare var PLUGIN_URL: string;
|
||||||
|
@ -27,15 +28,22 @@ export default function EmailContent({
|
||||||
)
|
)
|
||||||
).map((explainer_key) => Explainers[explainer_key]);
|
).map((explainer_key) => Explainers[explainer_key]);
|
||||||
return (
|
return (
|
||||||
<div style={{ padding: '1rem' }}>
|
<div className="mail-container">
|
||||||
<pre>{JSON.stringify(answers, null, 3)}</pre>
|
<div className="mail-container__header">
|
||||||
|
<div className="mail-container__header--control">
|
||||||
|
<button>Kopiuj</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* <pre>{JSON.stringify(answers, null, 3)}</pre> */}
|
||||||
|
<article className="mail-container__content">
|
||||||
<p>Dzień dobry,</p>
|
<p>Dzień dobry,</p>
|
||||||
<p>
|
<p>
|
||||||
w dniu {getDate()} {_('odwiedziłem')} stronę {visited_url}. Po podejrzeniu ruchu
|
w dniu {getDate()} {_('odwiedziłem')} stronę {visited_url}. Po podejrzeniu ruchu
|
||||||
sieciowego generowanego przez tę stronę za pomocą wtyczki{' '}
|
sieciowego generowanego przez tę stronę za pomocą wtyczki{' '}
|
||||||
<a href={PLUGIN_URL}>{PLUGIN_NAME}</a> w przeglądarce Firefox {_('mam')} pytania
|
<a href={PLUGIN_URL}>{PLUGIN_NAME}</a> w przeglądarce Firefox {_('mam')} pytania
|
||||||
dotyczące przetwarzania {_('moich')} danych osobowych, na które nie {_('znalazłem')}{' '}
|
dotyczące przetwarzania {_('moich')} danych osobowych, na które nie{' '}
|
||||||
odpowiedzi nigdzie na Państwa stronie.
|
{_('znalazłem')} odpowiedzi nigdzie na Państwa stronie.
|
||||||
</p>
|
</p>
|
||||||
{problems.map((problem) => problem.getEmailContent())}
|
{problems.map((problem) => problem.getEmailContent())}
|
||||||
{explainers.map((explainer) => explainer(answers.zaimek))}
|
{explainers.map((explainer) => explainer(answers.zaimek))}
|
||||||
|
@ -47,12 +55,13 @@ export default function EmailContent({
|
||||||
</a>{' '}
|
</a>{' '}
|
||||||
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 pytania na mocy Art. 12 i 13 Rozporządzenia 2016/679 Parlamentu
|
odpowiedzi na moje pytania na mocy Art. 12 i 13 Rozporządzenia 2016/679
|
||||||
Europejskiego i Rady (UE) z dnia 27 kwietnia 2016 r. w sprawie ochrony osób
|
Parlamentu Europejskiego i Rady (UE) z dnia 27 kwietnia 2016 r. w sprawie
|
||||||
fizycznych w związku z przetwarzaniem danych osobowych i w sprawie swobodnego
|
ochrony osób fizycznych w związku z przetwarzaniem danych osobowych i w sprawie
|
||||||
przepływu takich danych oraz uchylenia dyrektywy 95/46/WE (ogólne rozporządzenie o
|
swobodnego przepływu takich danych oraz uchylenia dyrektywy 95/46/WE (ogólne
|
||||||
ochronie danych, dalej: „RODO”).
|
rozporządzenie o ochronie danych, dalej: „RODO”).
|
||||||
</p>
|
</p>
|
||||||
|
</article>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import './report-window.scss';
|
||||||
import Questions from './questions';
|
import Questions from './questions';
|
||||||
import EmailContent from './email-content';
|
import EmailContent from './email-content';
|
||||||
import { parseAnswers, ParsedAnswers } from './parse-answers';
|
import { parseAnswers, ParsedAnswers } from './parse-answers';
|
||||||
|
import ScreenshotGenerator from './screenshot-generator';
|
||||||
|
|
||||||
function Report() {
|
function Report() {
|
||||||
try {
|
try {
|
||||||
|
@ -54,12 +55,17 @@ function Report() {
|
||||||
.map((cluster) => cluster.id)}
|
.map((cluster) => cluster.id)}
|
||||||
onComplete={(answers) => {
|
onComplete={(answers) => {
|
||||||
setAnswers(parseAnswers(answers));
|
setAnswers(parseAnswers(answers));
|
||||||
setMode('preview');
|
setMode('screenshots');
|
||||||
}}
|
}}
|
||||||
></Questions>
|
></Questions>
|
||||||
) : (
|
) : (
|
||||||
''
|
''
|
||||||
)}
|
)}
|
||||||
|
{mode === 'screenshots' ? (
|
||||||
|
<ScreenshotGenerator {...{ visited_url, clusters }} />
|
||||||
|
) : (
|
||||||
|
''
|
||||||
|
)}
|
||||||
{mode === 'preview' ? <EmailContent {...{ answers, visited_url, clusters }} /> : ''}
|
{mode === 'preview' ? <EmailContent {...{ answers, visited_url, clusters }} /> : ''}
|
||||||
{/* <HARConverter {...{ entries }} /> */}
|
{/* <HARConverter {...{ entries }} /> */}
|
||||||
</div>
|
</div>
|
||||||
|
|
0
components/report-window/screenshot-generator.scss
Normal file
0
components/report-window/screenshot-generator.scss
Normal file
83
components/report-window/screenshot-generator.tsx
Normal file
83
components/report-window/screenshot-generator.tsx
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
import React, { Fragment } from 'react';
|
||||||
|
import { RequestCluster } from '../../request-cluster';
|
||||||
|
import './screenshot-generator.scss';
|
||||||
|
|
||||||
|
function createTaskEndpoint(visited_url: string, domains: string[]) {
|
||||||
|
return `http://65.108.60.135:3000/api/requests?url=${visited_url}${domains.reduce(
|
||||||
|
(prev: string, curr: string) => prev + '&domains[]=' + curr,
|
||||||
|
''
|
||||||
|
)}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function createTask(visited_url: string, domains: string[]) {
|
||||||
|
return fetch(createTaskEndpoint(visited_url, domains), { method: 'POST' });
|
||||||
|
}
|
||||||
|
|
||||||
|
async function subscribe(path: string) {
|
||||||
|
let request = await fetch(path, { method: 'GET' });
|
||||||
|
const response = await request.json();
|
||||||
|
|
||||||
|
if (response.status === 'running' || response.status === 'waiting') {
|
||||||
|
console.debug(response.status);
|
||||||
|
|
||||||
|
await new Promise((resolve) => setTimeout(resolve, 1000));
|
||||||
|
await subscribe(path);
|
||||||
|
} else if (response.status === 'finished') {
|
||||||
|
console.log('response', response);
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function ScreenshotGenerator({
|
||||||
|
visited_url,
|
||||||
|
clusters,
|
||||||
|
}: {
|
||||||
|
visited_url: string;
|
||||||
|
clusters: Record<string, RequestCluster>;
|
||||||
|
}) {
|
||||||
|
const [isLoading, setLoading] = React.useState<boolean>(false);
|
||||||
|
const [output, setOutput] = React.useState<string[]>([]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="generator-container">
|
||||||
|
{!isLoading ? (
|
||||||
|
<Fragment>
|
||||||
|
<h1>Przygotowanie zrzutów ekranów</h1>
|
||||||
|
<p>
|
||||||
|
Dla potwierdzenia przechwyconych danych, warto załączyć zrzuty ekranów
|
||||||
|
narzędzi deweloperskich do maila dla administratora oraz Urzędzu Ochrony
|
||||||
|
Danych Osobowych.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Jeżeli nie wiesz jak wykonać zrzuty ekranów, skorzystaj z{' '}
|
||||||
|
<a href="">naszej instrukcji</a> lub wtyczka Rentgen może wygenerować je za
|
||||||
|
Ciebie.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<button>Pomiń</button>
|
||||||
|
<button
|
||||||
|
onClick={async () => {
|
||||||
|
setLoading(true);
|
||||||
|
const task = await createTask(visited_url, Object.keys(clusters));
|
||||||
|
const response = await subscribe(task.url);
|
||||||
|
|
||||||
|
setOutput(response.files);
|
||||||
|
console.log('output', response);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Wygeneruj
|
||||||
|
</button>
|
||||||
|
</Fragment>
|
||||||
|
) : (
|
||||||
|
<Fragment>
|
||||||
|
<h1>Przygotowujemy zrzuty ekranów</h1>
|
||||||
|
|
||||||
|
<pre>{createTaskEndpoint(visited_url, Object.keys(clusters))}</pre>
|
||||||
|
|
||||||
|
{JSON.stringify(output)}
|
||||||
|
<button>In progress</button>
|
||||||
|
</Fragment>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
|
@ -175,9 +175,8 @@ const Sidebar = () => {
|
||||||
{infoDataDialogAck ? (
|
{infoDataDialogAck ? (
|
||||||
<section className="dialog-container dialog-container--info">
|
<section className="dialog-container dialog-container--info">
|
||||||
<span>
|
<span>
|
||||||
<strong>Uwaga!</strong> Wtyczka Rentgen automatycznie zaznacza
|
<strong>Rentgen automatycznie zaznacza wybrane domeny</strong>,
|
||||||
wybrane domeny, możesz teraz przejść do generowania raportu lub
|
możesz teraz przejść do generowania raportu lub dokonać korekty.
|
||||||
dokonać korekty.
|
|
||||||
</span>
|
</span>
|
||||||
<button
|
<button
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
$ultra-black-color: #000;
|
$ultra-black-color: #000;
|
||||||
$black-color: hwb(217.5 18.4% 78.4%);
|
$black-color: #1b1c1d;
|
||||||
$disabled-grey: #8a949f;
|
$disabled-grey: #8a949f;
|
||||||
$light-grey: #d1d1d1;
|
$light-grey: #d1d1d1;
|
||||||
$ultra-light-grey: #ededed;
|
$ultra-light-grey: #ededed;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user