aboutsummaryrefslogtreecommitdiff
path: root/shardweb/lib/controllers/page_controller.ex
blob: baf72b90428f77d9977cf6bd8f886e46e6cbdc6a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
defmodule ShardWeb.PageController do
  use ShardWeb, :controller

  def peer_list(conn, _params) do
    render conn, "peer_list.html"
  end

  def shard_list(conn, _params) do
    render conn, "shard_list.html"
  end

  def shard_action(conn, %{"shard_id" => shard_id, "action" => action}) do
    shard_id = Base.decode16! shard_id
    case action do
      "delete" -> Shard.Manager.delete(shard_id)
    end
    redirect conn, to: page_path(conn, :shard_list)
  end

  def add_peer(conn, _params) do
    try do
      ip = conn.params["ip"]
      port = conn.params["port"]
      {:ok, ip_tuple} = case :inet.parse_address(to_charlist(ip)) do
        {:ok, tup} -> {:ok, tup}
        _ ->
          case :inet.gethostbyname(to_charlist(ip)) do
            {:ok, {:hostent, _, _, :inet, 4, [ip_tup | _]}} -> {:ok, ip_tup}
            _ -> :error
          end
      end
      {port_num, _} = Integer.parse port
      SNet.Manager.add_peer({:inet, ip_tuple, port_num})
    rescue
      _ -> nil
    end
    redirect conn, to: page_path(conn, :peer_list)
  end
end