Files
sso-bsn/lib/sso_bsn_web/live/user_settings_live.ex
bluepython508 092930a24f WebAuthN auth
2023-11-05 01:12:02 +00:00

70 lines
2.0 KiB
Elixir

defmodule SsoBsnWeb.UserSettingsLive do
use SsoBsnWeb, :live_view
alias SsoBsn.Accounts
def render(assigns) do
~H"""
<.header class="text-center">
Account Settings
</.header>
<div class="space-y-12 divide-y">
<div class="space-y-2">
<.header>Keys</.header>
<ol>
<li :for={key <- @current_user.keys}><pre class="truncate"><%= key.key_id %></pre></li>
</ol>
<.button id="settings-add-key" phx-hook="registrationHook" phx-click="register">
Register additional key
</.button>
</div>
<div class="space-y-2">
<%= if !@login_url do %>
<.button id="show-login-url" phx-click="show-login-url">Show login url</.button>
<% else %>
<pre><%= @login_url %></pre>
<% end %>
</div>
</div>
"""
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