Add e-mail preview to abuse reporter page

This commit is contained in:
2024-09-23 19:47:46 +02:00
parent a31cccb341
commit da9886ecdd
5 changed files with 88 additions and 77 deletions

View File

@@ -9,10 +9,8 @@ will be removed when reported.
* **Copyright violation**: Works which are shared without permission from the
copyright holder. For copyright reports we need a formal DMCA takedown request
originating from the copyright holder or a representative. If your request is
not valid it will be ignored. Takedown requests which are sent to any other
address than abuse@pixeldrain.com will also be ignored. See the chapter
[Copyright infringement](#copyright-infringement) below.
originating from the copyright holder or a representative. See the chapter
[E-Mail reporting rules](#toc_2) below.
* **Porn**: Pornographic material is not strictly banned on pixeldrain. But in
order to comply with international regulations I have to prevent it from
spreading too far. For this reason pornographic videos and images can be
@@ -42,25 +40,46 @@ Violating these rules will result in your IP address being banned from uploading
to pixeldrain.
If you have found content which falls in any of these categories on pixeldrain
please report it _using the report button on the download page_ of the file. Do
not send an e-mail, it will be ignored. When a file has received enough reports
of the same type it will automatically be blocked. I will also manually review
reported files occasionally.
please report it with the report button on the download page or by sending an
e-mail. When reporting links through e-mail pay attention to the rules described
below.
## Copyright infringement
## E-Mail reporting rules
If you have found content which infringes on your copyright you can send a
formal DMCA take-down request to
[abuse@pixeldrain.com](mailto:abuse@pixeldrain.com) and I will review it. In
your e-mail you need to swear under penalty of perjury that you (or your
company) own exclusive rights to the claimed content. Please state the name of
your organisation so the report can be properly categorised. Please put all
relevant information in the e-mail body itself, **no attachments**! PDF files
will not be reviewed.
Due to the large number of abuse reports pixeldrain receives every day we were
forced to automate the process. Messages sent to
[abuse@pixeldrain.com](mailto:abuse@pixeldrain.com) are automatically scanned
for pixeldrain links and processed. The first report we receive from a sender is
manually reviewed. If the report is approved then your e-mail address will be
added to our whitelist and all following messages are processed automatically.
For this to work efficiently we have to set some requirements on the mails we
receive:
Abuse mails from repeated senders are automatically processed. This only works
if you send the reports to abuse@pixeldrain.com. Do **not** send abuse reports
to support, sales or any other e-mail address, your report will be ignored.
* Messages are categorized based on their contents. Make sure the report
contains a description of the type of content and that it mentions one of the
abuse categories listed above.
* Do not add attachments to your e-mail reports. Only the e-mail body is checked
for download links. The message scanning system will not check your
attachments and download links within the files are not detected.
* Do not obfuscate the pixeldrain links. The reported download links need to be
complete and valid.
* The e-mail must include a
[Message-ID](https://en.wikipedia.org/wiki/Message-ID) header. The Message-ID
is used to reference messages in our system, mails without a Message-ID are
not processed.
* The e-mail must include either a valid [DKIM
signature](https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail) or a [SPF
header](https://en.wikipedia.org/wiki/Sender_Policy_Framework). Since the
sender address is used as a verification method we must use these methods to
combat message spoofing.
* Only send abuse reports to
[abuse@pixeldrain.com](mailto:abuse@pixeldrain.com). Messages sent to any
other e-mail address are ignored.
* Do not repeatedly send reports about files which have already been removed in
the past. We will block your e-mail address if this happens.
If your abuse report is rejected for one of the above reasons then you will
receive a reply with instructions on how to fix it.
## Disclaimer

View File

@@ -1,9 +1,21 @@
<script>
import { createEventDispatcher } from "svelte";
import { formatDate } from "../util/Formatting.svelte";
import Modal from "../util/Modal.svelte"
let dispatch = createEventDispatcher()
export let reporters = []
let modal
let preview_subject = ""
let preview_html = ""
let preview_text = ""
const toggle_preview = (rep) => {
preview_subject = rep.last_message_subject
preview_text = rep.last_message_text
preview_html = rep.last_message_html
modal.show()
}
</script>
<table>
@@ -25,6 +37,9 @@ export let reporters = []
<td>{formatDate(rep.last_used, true, true, false)}</td>
<td>{formatDate(rep.created, false, false, false)}</td>
<td>
<button on:click|preventDefault={() => toggle_preview(rep)} class="button round">
<i class="icon">visibility</i>
</button>
<button on:click|preventDefault={() => {dispatch("edit", rep)}} class="button round">
<i class="icon">edit</i>
</button>
@@ -45,3 +60,26 @@ export let reporters = []
</tr>
{/each}
</table>
<Modal bind:this={modal} title={preview_subject} width="1000px">
{#if preview_html !== ""}
<div class="message_html">{@html preview_html}</div>
{:else if preview_text !== ""}
<div class="message_pre">{preview_text}</div>
{/if}
</Modal>
<style>
.message_html {
padding: 8px;
text-align: initial;
white-space: normal;
overflow: hidden;
}
.message_pre {
padding: 8px;
text-align: initial;
white-space: pre-wrap;
overflow: hidden;
}
</style>

View File

@@ -17,11 +17,12 @@ const filter_visual = type => {
type.startsWith("video/") ||
type === "application/pdf"
}
const filter_audio = type => {
return type.startsWith("audio/")
}
const filter_audiovisual = type => {
return type.startsWith("image/") ||
type.startsWith("video/") ||
type.startsWith("audio/") ||
type === "application/pdf"
return filter_visual(type) || filter_audio(type)
}
const filter_app = type => {
return type.startsWith("application/") ||
@@ -30,10 +31,6 @@ const filter_app = type => {
const abuse_categories = [
{
type: "copyright", name: "Copyright",
desc: `Protected content which is shared without constent from the
rightsholder`,
}, {
type: "porn", name: "Porn",
desc: `Sexually explicit videos or images`,
filter: filter_visual,
@@ -143,22 +140,10 @@ let submit = async e => {
}
let description = ""
let copyright_rightsholder = ""
let copyright_email = ""
let copyright_sources = ""
let malware_proof = ""
let child_abuse_password = ""
const report_description = () => {
if (abuse_type === "copyright") {
return "Rightholder name: " + copyright_rightsholder + "\n" +
"Contact e-mail: " + copyright_email + "\n" +
"Sources:\n" + copyright_sources + "\n\n" +
"Description:\n" + description;
} else if (abuse_type === "malware") {
return "Proof: " + malware_proof + "\n" +
"Description:\n" + description;
} else if (abuse_type === "child_abuse") {
if (abuse_type === "child_abuse") {
return "Password: " + child_abuse_password + "\n" +
"Description:\n" + description;
} else {
@@ -171,7 +156,8 @@ const report_description = () => {
<p>
If you think this file violates pixeldrain's
<a href="/abuse">content policy</a> you can report it for moderation
with this form.
with this form. Please submit copyright infringement notices through our
<a href="/abuse#toc_2">abuse e-mail address</a>.
</p>
<form on:submit={submit} style="width: 100%" class="report_form">
<h3>Abuse type</h3>
@@ -206,38 +192,7 @@ const report_description = () => {
<h3>Description</h3>
{#if abuse_type === "copyright"}
<div class="highlight_yellow" style="text-align: initial;">
<p>
Copyright claims can only be submitted by the copyright
owner or an authorized agent. If you do not own the rights
to this file then you don't have the rights to file a
copyright claim.
</p>
</div>
<br/>
<div>Name rightsholder (can be a registered company name)</div>
<input type="text" bind:value={copyright_rightsholder} required/>
<div>Contact e-mail</div>
<input type="email" bind:value={copyright_email} required/>
<div>Source URLs (links to the places where the original content was sold/provided)</div>
<textarea bind:value={copyright_sources} placeholder="https://some.store.com" required></textarea>
{:else if abuse_type === "malware"}
<div>
Proof that this file is malware. This can be a link to
<a href="https://www.virustotal.com/"target="_blank">VirusTotal</a>
scan results, or some other security vendor which has
information about this file
</div>
<input type="text" bind:value={malware_proof} required/>
{:else if abuse_type === "child_abuse"}
{#if abuse_type === "child_abuse"}
<div class="highlight_yellow" style="text-align: initial;">
<p>
@@ -340,7 +295,6 @@ input[type="radio"]:checked+div {
width: 100%;
}
.report_form > input[type="text"],
.report_form > input[type="email"],
.report_form > textarea {
width: 100%;
margin: 0 0 0.5em 0;

View File

@@ -59,7 +59,7 @@ onMount(() => {
Downloading
</div>
<div class="feature_cell free_feat">
<span class="bold">5 GB per day</span><br/>
<span class="bold">6 GB per day</span><br/>
Download speed is reduced to 1 MiB/s when exceeded. Max 5 concurrent
downloads

View File

@@ -189,7 +189,7 @@ onMount(() => {
<div class="feat_normal round_br" class:feat_highlight={subscription === ""}>
<ul>
<li>Standard free plan, files expire after 120 days.</li>
<li>Download limit of 5 GB per day</li>
<li>Download limit of 6 GB per day</li>
</ul>
</div>
</div>