aboutsummaryrefslogtreecommitdiff
path: root/shardweb/lib/controllers
diff options
context:
space:
mode:
Diffstat (limited to 'shardweb/lib/controllers')
-rw-r--r--shardweb/lib/controllers/chat_controller.ex13
-rw-r--r--shardweb/lib/controllers/identity_controller.ex44
-rw-r--r--shardweb/lib/controllers/page_controller.ex31
3 files changed, 88 insertions, 0 deletions
diff --git a/shardweb/lib/controllers/chat_controller.ex b/shardweb/lib/controllers/chat_controller.ex
new file mode 100644
index 0000000..45b7d34
--- /dev/null
+++ b/shardweb/lib/controllers/chat_controller.ex
@@ -0,0 +1,13 @@
+defmodule ShardWeb.ChatController do
+ use ShardWeb, :controller
+
+ def chat(conn, %{"room" => room}) do
+ conn = put_gon(conn, chat_room: room)
+ render conn, "chat.html",
+ room: room
+ end
+
+ def privchat(_conn, %{"pk" => _pk}) do
+ # TODO
+ end
+end
diff --git a/shardweb/lib/controllers/identity_controller.ex b/shardweb/lib/controllers/identity_controller.ex
new file mode 100644
index 0000000..fdaefd0
--- /dev/null
+++ b/shardweb/lib/controllers/identity_controller.ex
@@ -0,0 +1,44 @@
+defmodule ShardWeb.IdentityController do
+ use ShardWeb, :controller
+
+ def list(conn, _params) do
+ render conn, "list.html"
+ end
+
+ def self(conn, _params) do
+ render conn, "self.html"
+ end
+
+ def update(conn, params) do
+ pid = SApp.Identity.find_proc(conn.assigns.pk)
+ info = GenServer.call(pid, :get_info)
+ info = %{info | nick: params["nick"]}
+ GenServer.call(pid, {:set_info, info})
+ redirect conn, to: identity_path(conn, :view)
+ end
+
+ def switch(conn, params) do
+ case Base.decode16(params["pk"]) do
+ {:ok, pk} ->
+ if Shard.Keys.have_sk? pk do
+ conn
+ |> put_session(:pk, pk)
+ |> redirect(to: identity_path(conn, :view))
+ else
+ conn
+ |> put_flash(:error, "No secret key found")
+ |> render("view.html")
+ end
+ _ ->
+ conn
+ |> put_flash(:error, "Bad argument")
+ |> render("view.html")
+ end
+ end
+
+ def create(conn, _params) do
+ pk = Shard.Keys.new_identity
+ conn = put_session(conn, :pk, pk)
+ redirect conn, to: identity_path(conn, :view)
+ end
+end
diff --git a/shardweb/lib/controllers/page_controller.ex b/shardweb/lib/controllers/page_controller.ex
new file mode 100644
index 0000000..ebe2099
--- /dev/null
+++ b/shardweb/lib/controllers/page_controller.ex
@@ -0,0 +1,31 @@
+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 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, :index)
+ end
+end