diff --git a/svelte/src/admin_panel/AbuseReporterTable.svelte b/svelte/src/admin_panel/AbuseReporterTable.svelte new file mode 100644 index 0000000..fe37098 --- /dev/null +++ b/svelte/src/admin_panel/AbuseReporterTable.svelte @@ -0,0 +1,40 @@ + + + + + + + + + + + + + {#each reporters as rep (rep.from_address, rep.mail_server)} + + + + + + + + + + {/each} +
Address / Mail serverNameReportsBlockedLast usedCreated
+ {rep.from_address}
+ {rep.mail_server} +
{rep.name}{rep.reports_sent}{rep.files_blocked}{formatDate(rep.last_used, true, true, false)}{formatDate(rep.created, false, false, false)} + + +
diff --git a/svelte/src/admin_panel/AbuseReporters.svelte b/svelte/src/admin_panel/AbuseReporters.svelte index 91b1d8b..25cc652 100644 --- a/svelte/src/admin_panel/AbuseReporters.svelte +++ b/svelte/src/admin_panel/AbuseReporters.svelte @@ -2,9 +2,12 @@ import { onMount, tick } from "svelte"; import { formatDate, formatDuration } from "../util/Formatting.svelte"; import Spinner from "../util/Spinner.svelte"; +import AbuseReporterTable from "./AbuseReporterTable.svelte"; let loading = true -let reporters = [] +let reporters_pending = [] +let reporters_trusted = [] +let reporters_rejected = [] const get_reporters = async () => { loading = true; @@ -13,7 +16,26 @@ const get_reporters = async () => { if(resp.status >= 400) { throw new Error(await resp.text()); } - reporters = await resp.json(); + let reporters = await resp.json(); + + reporters_pending = reporters.reduce((acc, val) => { + if (val.status === "pending") { + acc.push(val) + } + return acc + }, []) + reporters_trusted = reporters.reduce((acc, val) => { + if (val.status === "trusted") { + acc.push(val) + } + return acc + }, []) + reporters_rejected = reporters.reduce((acc, val) => { + if (val.status === "rejected") { + acc.push(val) + } + return acc + }, []) } catch (err) { alert(err); } finally { @@ -75,14 +97,16 @@ const edit_reporter = async reporter => { new_reporter_status = reporter.status } -const delete_reporter = async (address, server) => { - if (!confirm("Delete this reporter address?\n\n"+address)) { +const delete_reporter = async reporter => { + if (!confirm("Delete this reporter address?\n\n"+reporter.from_address)) { return } try { const resp = await fetch( - window.api_endpoint+"/admin/abuse_reporter/"+encodeURI(address)+"/"+encodeURI(server), + window.api_endpoint+"/admin/abuse_reporter/"+ + encodeURI(reporter.from_address)+"/"+ + encodeURI(reporter.mail_server), { method: "DELETE" } ); if(resp.status >= 400) { @@ -153,39 +177,27 @@ onMount(get_reporters);
- - - - - - - - - - - - - {#each reporters as r (r.email)} - - - - - - - - - - - - {/each} -
AddressServerNameStatusReportsBlockedLast usedCreated
{r.from_address}{r.mail_server}{r.name}{r.status}{r.reports_sent}{r.files_blocked}{formatDate(r.last_used, true, true, false)}{formatDate(r.created, false, false, false)} - - -
+

Pending reporters

+ edit_reporter(e.detail)} + on:delete={e => delete_reporter(e.detail)}> + + + +

Trusted reporters

+ edit_reporter(e.detail)} + on:delete={e => delete_reporter(e.detail)}> + + +

Rejected reporters

+ edit_reporter(e.detail)} + on:delete={e => delete_reporter(e.detail)}> +