Initial commit on Forgejo
Fresh repository history for elektrine/tarakan hosted at https://git.elektrine.com/elektrine/tarakan.
This commit is contained in:
commit
af6077b9c3
455 changed files with 78366 additions and 0 deletions
89
lib/tarakan_web/live/moderation_report_live/new.ex
Normal file
89
lib/tarakan_web/live/moderation_report_live/new.ex
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
defmodule TarakanWeb.ModerationReportLive.New do
|
||||
use TarakanWeb, :live_view
|
||||
|
||||
alias Tarakan.Moderation
|
||||
|
||||
@subject_options [
|
||||
{"Repository", "repository"},
|
||||
{"Account", "account"},
|
||||
{"Scan", "scan"},
|
||||
{"Finding", "finding"},
|
||||
{"Job", "review_task"},
|
||||
{"Contribution", "contribution"}
|
||||
]
|
||||
|
||||
@reason_options [
|
||||
{"Spam", "spam"},
|
||||
{"Unsafe disclosure", "unsafe_disclosure"},
|
||||
{"Harassment", "harassment"},
|
||||
{"Plagiarism", "plagiarism"},
|
||||
{"Malicious instructions", "malicious_instructions"},
|
||||
{"Fabricated evidence", "fabricated_evidence"},
|
||||
{"Secrets or personal data", "secrets_or_pii"},
|
||||
{"Other", "other"}
|
||||
]
|
||||
|
||||
@impl true
|
||||
def mount(params, _session, socket) do
|
||||
{:ok,
|
||||
socket
|
||||
|> assign(:page_title, "Report content")
|
||||
|> assign(:subject_options, @subject_options)
|
||||
|> assign(:reason_options, @reason_options)
|
||||
|> assign(:form, report_form(initial_params(params)))}
|
||||
end
|
||||
|
||||
@impl true
|
||||
def handle_event("submit", %{"report" => attrs}, socket) do
|
||||
case Moderation.report(socket.assigns.current_scope, attrs) do
|
||||
{:ok, case_record} ->
|
||||
{:noreply,
|
||||
socket
|
||||
|> put_flash(:info, "Report submitted for restricted moderator review.")
|
||||
|> push_navigate(to: ~p"/moderation/cases/#{case_record.id}")}
|
||||
|
||||
{:error, %Ecto.Changeset{} = changeset} ->
|
||||
{:noreply, assign(socket, :form, to_form(changeset, as: :report))}
|
||||
|
||||
error ->
|
||||
{:noreply,
|
||||
socket
|
||||
|> assign(:form, report_form(attrs))
|
||||
|> put_flash(:error, error_message(error))}
|
||||
end
|
||||
end
|
||||
|
||||
def handle_event("submit", _params, socket) do
|
||||
{:noreply, put_flash(socket, :error, "Complete the report before submitting it.")}
|
||||
end
|
||||
|
||||
defp initial_params(params) do
|
||||
%{
|
||||
"subject_type" => query_value(params, "subject_type", "repository"),
|
||||
"subject_id" => query_value(params, "subject_id", ""),
|
||||
"reason" => query_value(params, "reason", "unsafe_disclosure"),
|
||||
"description" => ""
|
||||
}
|
||||
end
|
||||
|
||||
defp query_value(params, key, default) do
|
||||
case Map.get(params, key) do
|
||||
value when is_binary(value) -> value
|
||||
_other -> default
|
||||
end
|
||||
end
|
||||
|
||||
defp report_form(attrs), do: to_form(attrs, as: :report)
|
||||
|
||||
defp error_message({:error, :rate_limited}),
|
||||
do: "You have reached the daily report limit. Try again later."
|
||||
|
||||
defp error_message({:error, :subject_not_found}),
|
||||
do: "That content could not be found or is not visible to your account."
|
||||
|
||||
defp error_message({:error, :unauthorized}),
|
||||
do: "Your account is not authorized to submit this report."
|
||||
|
||||
defp error_message({:error, :invalid_report}), do: "The report is incomplete."
|
||||
defp error_message({:error, _reason}), do: "The report could not be submitted."
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue