diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/aggiedit_web/channels/post_channel.ex | 22 | ||||
-rw-r--r-- | lib/aggiedit_web/channels/user_socket.ex | 17 | ||||
-rw-r--r-- | lib/aggiedit_web/endpoint.ex | 2 | ||||
-rw-r--r-- | lib/aggiedit_web/live/post_live/index.ex | 1 | ||||
-rw-r--r-- | lib/aggiedit_web/live/post_live/show.html.heex | 5 | ||||
-rw-r--r-- | lib/aggiedit_web/templates/layout/root.html.heex | 2 |
6 files changed, 47 insertions, 2 deletions
diff --git a/lib/aggiedit_web/channels/post_channel.ex b/lib/aggiedit_web/channels/post_channel.ex new file mode 100644 index 0000000..308c6de --- /dev/null +++ b/lib/aggiedit_web/channels/post_channel.ex @@ -0,0 +1,22 @@ +defmodule AggieditWeb.PostChannel do + use AggieditWeb, :channel + + alias Aggiedit.Roles + alias Aggiedit.Rooms + + @impl true + def join("post:" <> post_id, _payload, socket) do + post = Rooms.get_post!(post_id) + if Roles.guard?(socket.assigns.current_user, :show, post) do + {:ok, socket} + else + {:error, "You do not have permission to view this post."} + end + end + + @impl true + def handle_in("send", body, socket) do + broadcast!(socket, "shout", body) + {:reply, :ok, socket} + end +end
\ No newline at end of file diff --git a/lib/aggiedit_web/channels/user_socket.ex b/lib/aggiedit_web/channels/user_socket.ex new file mode 100644 index 0000000..b7c0124 --- /dev/null +++ b/lib/aggiedit_web/channels/user_socket.ex @@ -0,0 +1,17 @@ +defmodule AggieditWeb.UserSocket do + alias Aggiedit.Accounts + use Phoenix.Socket + + channel "post:*", AggieditWeb.PostChannel + + @impl true + def connect(_params, socket, %{:session => %{"user_token" => token}}) do + case Accounts.get_user_by_session_token(token) do + user=%Accounts.User{} -> {:ok, assign(socket, %{:current_user => user})} + _ -> {:error, "Invalid user token."} + end + end + + @impl true + def id(_socket), do: nil +end
\ No newline at end of file diff --git a/lib/aggiedit_web/endpoint.ex b/lib/aggiedit_web/endpoint.ex index 95577f0..d431553 100644 --- a/lib/aggiedit_web/endpoint.ex +++ b/lib/aggiedit_web/endpoint.ex @@ -12,6 +12,8 @@ defmodule AggieditWeb.Endpoint do socket "/live", Phoenix.LiveView.Socket, websocket: [connect_info: [session: @session_options]] + socket "/socket", AggieditWeb.UserSocket, websocket: [connect_info: [session: @session_options]], longpoll: false + # Serve at "/" the static files from "priv/static" directory. # # You should set gzip to true if you are running phx.digest diff --git a/lib/aggiedit_web/live/post_live/index.ex b/lib/aggiedit_web/live/post_live/index.ex index 6b2be56..59ec234 100644 --- a/lib/aggiedit_web/live/post_live/index.ex +++ b/lib/aggiedit_web/live/post_live/index.ex @@ -29,7 +29,6 @@ defmodule AggieditWeb.PostLive.Index do @impl true def handle_params(params, _url, socket) do - IO.puts(inspect(params)) {:noreply, apply_action(socket, socket.assigns.live_action, params)} end diff --git a/lib/aggiedit_web/live/post_live/show.html.heex b/lib/aggiedit_web/live/post_live/show.html.heex index ba71c75..107a3a6 100644 --- a/lib/aggiedit_web/live/post_live/show.html.heex +++ b/lib/aggiedit_web/live/post_live/show.html.heex @@ -30,3 +30,8 @@ <span><%= live_patch "Edit", to: Routes.post_show_path(@socket, :edit, @room, @post), class: "button" %></span> | <span><%= live_redirect "Back", to: Routes.post_index_path(@socket, :index, @room) %></span> + +<script> + window.userSocket.connect(); + window.RoomChat.init(window.userSocket, <%= @post.id %>) +</script> diff --git a/lib/aggiedit_web/templates/layout/root.html.heex b/lib/aggiedit_web/templates/layout/root.html.heex index 3fb7d93..a164571 100644 --- a/lib/aggiedit_web/templates/layout/root.html.heex +++ b/lib/aggiedit_web/templates/layout/root.html.heex @@ -7,7 +7,7 @@ <%= csrf_meta_tag() %> <%= live_title_tag assigns[:page_title] || "Aggiedit" %> <link phx-track-static rel="stylesheet" href={Routes.static_path(@conn, "/assets/app.css")}/> - <script defer phx-track-static type="text/javascript" src={Routes.static_path(@conn, "/assets/app.js")}></script> + <script phx-track-static type="text/javascript" src={Routes.static_path(@conn, "/assets/app.js")}></script> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous"> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script> |