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 violation**: Works which are shared without permission from the
copyright holder. For copyright reports we need a formal DMCA takedown request copyright holder. For copyright reports we need a formal DMCA takedown request
originating from the copyright holder or a representative. If your request is originating from the copyright holder or a representative. See the chapter
not valid it will be ignored. Takedown requests which are sent to any other [E-Mail reporting rules](#toc_2) below.
address than abuse@pixeldrain.com will also be ignored. See the chapter
[Copyright infringement](#copyright-infringement) below.
* **Porn**: Pornographic material is not strictly banned on pixeldrain. But in * **Porn**: Pornographic material is not strictly banned on pixeldrain. But in
order to comply with international regulations I have to prevent it from order to comply with international regulations I have to prevent it from
spreading too far. For this reason pornographic videos and images can be 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. to pixeldrain.
If you have found content which falls in any of these categories on 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 please report it with the report button on the download page or by sending an
not send an e-mail, it will be ignored. When a file has received enough reports e-mail. When reporting links through e-mail pay attention to the rules described
of the same type it will automatically be blocked. I will also manually review below.
reported files occasionally.
## Copyright infringement ## E-Mail reporting rules
If you have found content which infringes on your copyright you can send a Due to the large number of abuse reports pixeldrain receives every day we were
formal DMCA take-down request to forced to automate the process. Messages sent to
[abuse@pixeldrain.com](mailto:abuse@pixeldrain.com) and I will review it. In [abuse@pixeldrain.com](mailto:abuse@pixeldrain.com) are automatically scanned
your e-mail you need to swear under penalty of perjury that you (or your for pixeldrain links and processed. The first report we receive from a sender is
company) own exclusive rights to the claimed content. Please state the name of manually reviewed. If the report is approved then your e-mail address will be
your organisation so the report can be properly categorised. Please put all added to our whitelist and all following messages are processed automatically.
relevant information in the e-mail body itself, **no attachments**! PDF files For this to work efficiently we have to set some requirements on the mails we
will not be reviewed. receive:
Abuse mails from repeated senders are automatically processed. This only works * Messages are categorized based on their contents. Make sure the report
if you send the reports to abuse@pixeldrain.com. Do **not** send abuse reports contains a description of the type of content and that it mentions one of the
to support, sales or any other e-mail address, your report will be ignored. 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 ## Disclaimer

View File

@@ -1,9 +1,21 @@
<script> <script>
import { createEventDispatcher } from "svelte"; import { createEventDispatcher } from "svelte";
import { formatDate } from "../util/Formatting.svelte"; import { formatDate } from "../util/Formatting.svelte";
import Modal from "../util/Modal.svelte"
let dispatch = createEventDispatcher() let dispatch = createEventDispatcher()
export let reporters = [] 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> </script>
<table> <table>
@@ -25,6 +37,9 @@ export let reporters = []
<td>{formatDate(rep.last_used, true, true, false)}</td> <td>{formatDate(rep.last_used, true, true, false)}</td>
<td>{formatDate(rep.created, false, false, false)}</td> <td>{formatDate(rep.created, false, false, false)}</td>
<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"> <button on:click|preventDefault={() => {dispatch("edit", rep)}} class="button round">
<i class="icon">edit</i> <i class="icon">edit</i>
</button> </button>
@@ -45,3 +60,26 @@ export let reporters = []
</tr> </tr>
{/each} {/each}
</table> </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.startsWith("video/") ||
type === "application/pdf" type === "application/pdf"
} }
const filter_audio = type => {
return type.startsWith("audio/")
}
const filter_audiovisual = type => { const filter_audiovisual = type => {
return type.startsWith("image/") || return filter_visual(type) || filter_audio(type)
type.startsWith("video/") ||
type.startsWith("audio/") ||
type === "application/pdf"
} }
const filter_app = type => { const filter_app = type => {
return type.startsWith("application/") || return type.startsWith("application/") ||
@@ -30,10 +31,6 @@ const filter_app = type => {
const abuse_categories = [ const abuse_categories = [
{ {
type: "copyright", name: "Copyright",
desc: `Protected content which is shared without constent from the
rightsholder`,
}, {
type: "porn", name: "Porn", type: "porn", name: "Porn",
desc: `Sexually explicit videos or images`, desc: `Sexually explicit videos or images`,
filter: filter_visual, filter: filter_visual,
@@ -143,22 +140,10 @@ let submit = async e => {
} }
let description = "" let description = ""
let copyright_rightsholder = ""
let copyright_email = ""
let copyright_sources = ""
let malware_proof = ""
let child_abuse_password = "" let child_abuse_password = ""
const report_description = () => { const report_description = () => {
if (abuse_type === "copyright") { if (abuse_type === "child_abuse") {
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") {
return "Password: " + child_abuse_password + "\n" + return "Password: " + child_abuse_password + "\n" +
"Description:\n" + description; "Description:\n" + description;
} else { } else {
@@ -171,7 +156,8 @@ const report_description = () => {
<p> <p>
If you think this file violates pixeldrain's If you think this file violates pixeldrain's
<a href="/abuse">content policy</a> you can report it for moderation <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> </p>
<form on:submit={submit} style="width: 100%" class="report_form"> <form on:submit={submit} style="width: 100%" class="report_form">
<h3>Abuse type</h3> <h3>Abuse type</h3>
@@ -206,38 +192,7 @@ const report_description = () => {
<h3>Description</h3> <h3>Description</h3>
{#if abuse_type === "copyright"} {#if abuse_type === "child_abuse"}
<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"}
<div class="highlight_yellow" style="text-align: initial;"> <div class="highlight_yellow" style="text-align: initial;">
<p> <p>
@@ -340,7 +295,6 @@ input[type="radio"]:checked+div {
width: 100%; width: 100%;
} }
.report_form > input[type="text"], .report_form > input[type="text"],
.report_form > input[type="email"],
.report_form > textarea { .report_form > textarea {
width: 100%; width: 100%;
margin: 0 0 0.5em 0; margin: 0 0 0.5em 0;

View File

@@ -59,7 +59,7 @@ onMount(() => {
Downloading Downloading
</div> </div>
<div class="feature_cell free_feat"> <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 Download speed is reduced to 1 MiB/s when exceeded. Max 5 concurrent
downloads downloads

View File

@@ -189,7 +189,7 @@ onMount(() => {
<div class="feat_normal round_br" class:feat_highlight={subscription === ""}> <div class="feat_normal round_br" class:feat_highlight={subscription === ""}>
<ul> <ul>
<li>Standard free plan, files expire after 120 days.</li> <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> </ul>
</div> </div>
</div> </div>