philomena/lib/philomena_web/controllers/ip_profile_controller.ex
2019-12-16 14:24:38 -05:00

35 lines
861 B
Elixir

defmodule PhilomenaWeb.IpProfileController do
use PhilomenaWeb, :controller
alias Philomena.UserIps.UserIp
alias Philomena.Bans.Subnet
alias Philomena.Repo
import Ecto.Query
plug :authorize_ip
def show(conn, %{"id" => ip}) do
{:ok, ip} = EctoNetwork.INET.cast(ip)
user_ips =
UserIp
|> where(ip: ^ip)
|> order_by(desc: :updated_at)
|> preload(:user)
|> Repo.all()
subnet_bans =
Subnet
|> where([s], fragment("? >>= ?", s.specification, ^ip))
|> Repo.all()
render(conn, "show.html", title: "#{ip}'s IP profile", ip: ip, user_ips: user_ips, subnet_bans: subnet_bans)
end
defp authorize_ip(conn, _opts) do
case Canada.Can.can?(conn.assigns.current_user, :show, :ip_address) do
false -> PhilomenaWeb.NotAuthorizedPlug.call(conn)
true -> conn
end
end
end