Skip to content

Commit 1c6745d

Browse files
committed
fix: store session controller impl
1 parent 31ee841 commit 1c6745d

File tree

5 files changed

+45
-19
lines changed

5 files changed

+45
-19
lines changed

assets/js/app.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -774,9 +774,7 @@ window.addEventListener("phx:store-session", (event) => {
774774
.querySelector('meta[name="csrf-token"]')
775775
.getAttribute("content");
776776

777-
console.log(event.detail);
778-
779-
fetch("/store-session", {
777+
fetch("/api/store_session", {
780778
method: "POST",
781779
headers: {
782780
"Content-Type": "application/json",
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
defmodule AlgoraWeb.API.StoreSessionController do
2+
use AlgoraWeb, :controller
3+
4+
require Logger
5+
6+
def create(conn, %{"encrypted" => encrypted}) do
7+
updated_conn =
8+
case decrypt(encrypted) do
9+
{:ok, data} ->
10+
Enum.reduce(data, conn, fn {key, value}, acc_conn -> put_session(acc_conn, key, value) end)
11+
12+
error ->
13+
Logger.error("Failed to decrypt session: #{inspect(error)}")
14+
conn
15+
end
16+
17+
send_resp(updated_conn, 200, "")
18+
end
19+
20+
def store_session(socket, data) do
21+
Phoenix.LiveView.push_event(socket, "store-session", %{encrypted: encrypt(data)})
22+
end
23+
24+
defp default_ttl, do: Algora.config([:local_store, :ttl])
25+
defp salt, do: "store_session_controller" <> Algora.config([:local_store, :salt])
26+
27+
defp encrypt(data) do
28+
Phoenix.Token.encrypt(AlgoraWeb.Endpoint, salt(), :erlang.term_to_binary(data), max_age: default_ttl())
29+
end
30+
31+
defp decrypt(data) do
32+
case Phoenix.Token.decrypt(AlgoraWeb.Endpoint, salt(), data, max_age: default_ttl()) do
33+
{:ok, data} -> {:ok, :erlang.binary_to_term(data, [:safe])}
34+
error -> error
35+
end
36+
end
37+
end

lib/algora_web/controllers/store_session_controller.ex

Lines changed: 0 additions & 14 deletions
This file was deleted.

lib/algora_web/router.ex

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ defmodule AlgoraWeb.Router do
2121

2222
pipeline :api do
2323
plug :accepts, ["json"]
24+
plug :fetch_session
25+
plug Plug.Parsers, parsers: [:urlencoded, {:json, json_decoder: Jason}]
2426
end
2527

2628
# Legacy tRPC pipeline
@@ -145,12 +147,11 @@ defmodule AlgoraWeb.Router do
145147

146148
live "/0/bounties/:id", OG.BountyLive, :show
147149
get "/og/*path", OGImageController, :generate
148-
149-
post "/store-session", StoreSessionController, :create
150150
end
151151

152152
scope "/api", AlgoraWeb.API do
153153
pipe_through :api
154+
post "/store_session", StoreSessionController, :create
154155

155156
# Legacy tRPC endpoints
156157
scope "/trpc" do

lib/algora_web/util.ex

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,8 @@ defmodule AlgoraWeb.Util do
5454
_other -> nil
5555
end)
5656
end
57+
58+
def store_session(socket, data) do
59+
AlgoraWeb.API.StoreSessionController.store_session(socket, data)
60+
end
5761
end

0 commit comments

Comments
 (0)