Initial commit on Forgejo
All checks were successful
CI and deploy / Test (push) Successful in 4m52s
CI and deploy / Deploy production (push) Successful in 23s

Fresh repository history for elektrine/tarakan hosted at
https://git.elektrine.com/elektrine/tarakan.
This commit is contained in:
Maxfield Luke 2026-07-29 04:43:40 -04:00
commit af6077b9c3
455 changed files with 78366 additions and 0 deletions

View 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