analytics/lib/plausible_web/controllers/page_controller.ex

87 lines
2.2 KiB
Elixir
Raw Normal View History

2019-09-02 14:29:19 +03:00
defmodule PlausibleWeb.PageController do
use PlausibleWeb, :controller
use Plausible.Repo
@demo_referrers [
{"indiehackers.com", 30},
{"Twitter", 17},
{"Google", 6},
{"DuckDuckGo", 4},
{"Bing", 2},
]
@demo_countries [
{"United Kingdom", 41},
{"United States", 38},
{"France", 13},
{"India", 7},
{"Netherlands", 6},
]
def index(conn, _params) do
if conn.assigns[:current_user] do
Plausible.Tracking.event(conn, "Sites: View Page")
user = conn.assigns[:current_user] |> Repo.preload(:sites)
render(conn, "sites.html", sites: user.sites)
else
Plausible.Tracking.event(conn, "Landing: View Page")
render(conn, "index.html", demo_referrers: @demo_referrers, demo_countries: @demo_countries, landing_nav: true)
end
end
defmodule Token do
use Joken.Config
end
defp sign_token!(user) do
claims = %{
id: user.id,
email: user.email,
name: user.name,
}
signer = Joken.Signer.create("HS256", "4d1d2ae6-4595-4d0b-b98a-8ca5b1f2095a")
{:ok, token, _} = Token.generate_and_sign(claims, signer)
token
end
def feedback(conn, _params) do
if conn.assigns[:current_user] do
token = sign_token!(conn.assigns[:current_user])
redirect(conn, external: "https://feedback.plausible.io/sso/#{token}")
else
redirect(conn, external: "https://feedback.plausible.io")
end
end
def roadmap(conn, _params) do
if conn.assigns[:current_user] do
token = sign_token!(conn.assigns[:current_user])
redirect(conn, external: "https://feedback.plausible.io/sso/#{token}?returnUrl=https://feedback.plausible.io/roadmap")
else
redirect(conn, external: "https://feedback.plausible.io/roadmap")
end
end
def contact_form(conn, _params) do
render(conn, "contact_form.html")
end
def submit_contact_form(conn, %{"text" => text, "email" => email}) do
PlausibleWeb.Email.feedback(email, text) |> Plausible.Mailer.deliver_now
render(conn, "contact_thanks.html")
end
def privacy(conn, _params) do
render(conn, "privacy.html")
end
def data_policy(conn, _params) do
render(conn, "data_policy.html")
end
def terms(conn, _params) do
render(conn, "terms.html")
end
end