Packages
livebook
0.19.8
0.19.8
0.19.7
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.6
0.18.5
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.3
0.17.2
0.17.1
0.17.0
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.14.0-rc.1
0.14.0-rc.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.2
0.1.1
0.1.0
Automate code & data workflows with interactive notebooks
Current section
Files
Jump to
Current section
Files
lib/livebook_web/live/hooks/user_hook.ex
defmodule LivebookWeb.UserHook do
use LivebookWeb, :verified_routes
import Phoenix.Component
import Phoenix.LiveView
def on_mount(:default, _params, session, socket) do
socket =
socket
|> assign_new(:current_user, fn ->
connect_params = get_connect_params(socket) || %{}
identity_data = session["identity_data"]
# user_data from connect params takes precedence, since the
# cookie may have been altered by the client.
user_data = connect_params["user_data"] || session["user_data"]
LivebookWeb.UserPlug.build_current_user(session, identity_data, user_data)
end)
|> assign_new(:teams_auth, fn ->
LivebookWeb.AuthPlug.teams_auth(session)
end)
|> attach_hook(:user_handle_info_subscription, :handle_info, &handle_info/2)
if connected?(socket) do
Livebook.Users.subscribe(socket.assigns.current_user.id)
Livebook.Teams.Broadcasts.subscribe(:app_server)
end
Logger.metadata(Livebook.Utils.logger_users_metadata([socket.assigns.current_user]))
{:cont, socket}
end
defp handle_info(
{:user_change, %{id: id} = user},
%{assigns: %{current_user: %{id: id}}} = socket
) do
{:halt, assign(socket, :current_user, user)}
end
defp handle_info({:server_authorization_updated, %{hub_id: hub_id}}, socket) do
# Since we checks if the updated deployment group we received belongs
# to the current app server, we don't need to check here.
current_user = socket.assigns.current_user
if current_user.payload do
metadata = Livebook.ZTA.LivebookTeams.build_metadata(hub_id, current_user.payload)
case Livebook.Users.update_user(current_user, metadata) do
{:ok, user} -> {:cont, assign(socket, :current_user, user)}
_otherwise -> {:cont, socket}
end
else
{:cont, socket}
end
end
defp handle_info(_message, socket), do: {:cont, socket}
end