defmodule SsoBsnWeb.UserSettingsLive do use SsoBsnWeb, :live_view alias SsoBsn.Accounts def render(assigns) do ~H""" <.header class="text-center"> Account Settings
<.header>Keys
  1. <%= key.key_id %>
<.button id="settings-add-key" phx-hook="registrationHook" phx-click="register"> Register additional key
<%= if !@login_url do %> <.button id="show-login-url" phx-click="show-login-url">Show login url <% else %>
<%= @login_url %>
<% end %>
""" end def mount(_params, _session, socket) do {:ok, socket |> assign(login_url: nil)} end def handle_event("register", _, socket) do {challenge, challenge_client} = Accounts.registration_challenge(socket.assigns.current_user) {:noreply, socket |> assign(challenge: challenge) |> push_event("registration-challenge", challenge_client)} end def handle_event("registration-complete", params, socket) do %{current_user: user, challenge: challenge} = socket.assigns case Accounts.register_key(user, challenge, params) do {:ok, _key} -> {:noreply, socket |> assign(current_user: Accounts.reload_user(socket.assigns.current_user))} {:error, error} -> dbg(error) {:noreply, socket |> put_flash(:error, "An error occured")} end end def handle_event("show-login-url", %{}, socket) do token = Accounts.generate_user_login_token(socket.assigns.current_user) {:noreply, socket |> assign(login_url: url(socket, ~p"/users/log_in/#{token}"))} end def handle_event("error", payload, socket), do: {:noreply, socket |> put_flash(:error, inspect(payload))} end