defmodule SsoBsnWeb.UserSettingsLive do
use SsoBsnWeb, :live_view
alias SsoBsn.Accounts
def render(assigns) do
~H"""
<.header class="text-center">
Account Settings
<.header>Keys
<%= 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