Fresh repository history for elektrine/tarakan hosted at https://git.elektrine.com/elektrine/tarakan.
83 lines
2.7 KiB
Elixir
83 lines
2.7 KiB
Elixir
defmodule TarakanWeb.PageLive do
|
|
@moduledoc """
|
|
Static policy and pricing pages.
|
|
|
|
These have no interactivity, but they are LiveViews so navigating to them
|
|
from the nav is a live patch rather than a full page reload. As plain
|
|
controller pages they were the only routes in the shell without a LiveSocket,
|
|
which made them behave differently from everything around them.
|
|
|
|
One module, one action per page, templates in `page_live/`.
|
|
"""
|
|
use TarakanWeb, :live_view
|
|
|
|
embed_templates "page_live/*"
|
|
|
|
@impl true
|
|
def mount(_params, _session, socket) do
|
|
{:ok, assign(socket, :security_contact, Application.get_env(:tarakan, :security_contact))}
|
|
end
|
|
|
|
@impl true
|
|
def handle_params(_params, _uri, socket) do
|
|
{:noreply, apply_action(socket, socket.assigns.live_action)}
|
|
end
|
|
|
|
defp apply_action(socket, :disclosure) do
|
|
socket
|
|
|> assign(:page_title, "Disclosure policy")
|
|
|> assign(
|
|
:meta_description,
|
|
"Tarakan is public disclosure by default: visibility levels, verification quorum, " <>
|
|
"vendor notification, and abuse reporting."
|
|
)
|
|
|> assign(:canonical_path, ~p"/policies/disclosure")
|
|
end
|
|
|
|
defp apply_action(socket, :content) do
|
|
socket
|
|
|> assign(:page_title, "Content policy")
|
|
|> assign(
|
|
:meta_description,
|
|
"What may and may not be published to the Tarakan public security record, and how " <>
|
|
"takedowns and appeals work."
|
|
)
|
|
|> assign(:canonical_path, ~p"/policies/content")
|
|
end
|
|
|
|
defp apply_action(socket, :pricing) do
|
|
take_rate_percent =
|
|
Tarakan.Market.take_rate()
|
|
|> Decimal.mult(100)
|
|
|> Decimal.normalize()
|
|
|> Decimal.to_string(:normal)
|
|
|
|
socket
|
|
|> assign(:page_title, "Pricing")
|
|
|> assign(:take_rate_percent, take_rate_percent)
|
|
|> assign(
|
|
:meta_description,
|
|
"Tarakan is free: read, submit, and check security findings at no cost. Post a " <>
|
|
"contract to get specific code reviewed; Tarakan keeps #{take_rate_percent}% when " <>
|
|
"the work is accepted."
|
|
)
|
|
|> assign(:canonical_path, ~p"/pricing")
|
|
end
|
|
|
|
defp apply_action(socket, :managed_disclosure) do
|
|
socket
|
|
|> assign(:page_title, "Managed disclosure")
|
|
|> assign(
|
|
:meta_description,
|
|
"Managed disclosure: Tarakan staff triage findings with the vendor under an SLA. " <>
|
|
"Handling, not suppression - the public record is unchanged."
|
|
)
|
|
|> assign(:canonical_path, ~p"/services/disclosure")
|
|
end
|
|
|
|
@impl true
|
|
def render(%{live_action: :disclosure} = assigns), do: disclosure(assigns)
|
|
def render(%{live_action: :content} = assigns), do: content(assigns)
|
|
def render(%{live_action: :pricing} = assigns), do: pricing(assigns)
|
|
def render(%{live_action: :managed_disclosure} = assigns), do: managed_disclosure(assigns)
|
|
end
|