017bcc9ce1
- Fix indentation - Split awkward initializer into separate methods - Rename credentials to passkeys - Simplify authenticator registry loading - Flatten nested errors under ActionPack::WebAuthn - Set passkey current params only requests that use it - Inline anemic methods - Replace custom validation with ActiveModel::Validation - Rename identity to holder in Passkey - Rename credentials to passkeys in JS - Extract framework library out of controllers - Pass params hashes down to ActionPack - Attempt to simplify public interface - Push data decoding down to the classes representing the data - Introduce has_passkeys - Add CBOR bigint support - Rename ActionPack::WebAuthn::Passkey to ActionPack::Passkey - Add create_passkey_button helper - Rename public-key to creation-options - Add sign_in_with_passkey_button helper - Dispatch events for the whole Passkey lifecycle - Add ED25519 support - Prevent crash on missing meta tag - Validate resident key options - Don't clobber existing ActionPack config options - Validate cryptographic params - Move CurrentWebAuthnRequest into ActionPack::Passkey - Use ActiveModel::Attributes for Options objects - Implement expiring challanges - Add lifecycle events - Extract param helpers into Request - Add passkey_creation_options and passkey_request_options helpers - Add create_passkey_challenge to make it easier to override the create method if needed - Prefix all view helpers with passkey_ - Auto-include ActionPack::Passkey::Holder - Make the passkey challange url configurable - Add a reminder about Passkeys to the magic link email
69 lines
2.9 KiB
Plaintext
69 lines
2.9 KiB
Plaintext
<% @page_title = @user.name %>
|
|
<% me_or_you = Current.user == @user ? "me" : @user.first_name %>
|
|
|
|
<div class="settings settings--profile">
|
|
<div class="settings__panel panel shadow txt-align-center">
|
|
<div class="flex flex-column gap position-relative">
|
|
<% if Current.user == @user %>
|
|
<%= link_to edit_user_path(@user), class: "user-edit-link btn", data: { controller: "tooltip" } do %>
|
|
<%= icon_tag "pencil" %>
|
|
<span class="for-screen-reader">Edit profile</span>
|
|
<% end %>
|
|
<% end %>
|
|
|
|
<div class="avatar txt-xx-large center fill-white btn--circle hide-focus-ring">
|
|
<%= image_tag user_avatar_path(@user), alt: "Profile avatar for #{@user.name}" %>
|
|
</div>
|
|
|
|
<div class="flex flex-column gap-half margin-block-end">
|
|
<h1 class="txt-x-large margin-none"><%= @user.name %></h1>
|
|
<div class="txt-medium">
|
|
<% if !@user.active? %>
|
|
<%= @user.name %> is no longer on this account
|
|
<% elsif !@user.verified? %>
|
|
Unverified
|
|
<div class="txt-small txt-tinted">A sign-in code has been sent to this email address, but the user has not yet logged in to confirm their identity.</div>
|
|
<% else %>
|
|
<%= mail_to @user.identity.email_address %>
|
|
<% end %>
|
|
</div>
|
|
</div>
|
|
|
|
<% if @user.verified? %>
|
|
<div class="flex-inline center justify-center flex-wrap gap">
|
|
<%= link_to "Which cards are assigned to #{me_or_you}?",
|
|
cards_path(assignee_ids: [ @user.id ], sorted_by: "newest"), class: "btn btn--link", data: { turbo_frame: "_top" } %>
|
|
<%= link_to "Which cards were added by #{me_or_you}?",
|
|
cards_path(creator_ids: [ @user.id ], sorted_by: "newest"), class: "btn btn--link", data: { turbo_frame: "_top" } %>
|
|
</div>
|
|
<% end %>
|
|
|
|
<% if Current.user == @user %>
|
|
<hr class="separator--horizontal full-width flex-item-grow margin-block-start-double" style="--border-color: var(--color-ink-light);" aria-hidden="true">
|
|
|
|
<%= link_to my_passkeys_path, class: "btn txt-x-small center" do %>
|
|
<%= icon_tag "authentication" %>
|
|
<span>Manage passkeys</span>
|
|
<% end %>
|
|
|
|
<%= button_to session_path(script_name: nil), method: :delete, class: "btn txt-x-small center", form: { data: { turbo: false, controller: "clear-offline-cache", action: "submit->clear-offline-cache#clearCache" } } do %>
|
|
<span>Sign out of Fizzy on this device</span>
|
|
<% end %>
|
|
<% end %>
|
|
</div>
|
|
</div>
|
|
|
|
<% if Current.user == @user %>
|
|
<div class="settings__panel panel shadow hide-on-native">
|
|
<%= render "users/theme" %>
|
|
<%= render "users/transfer", user: @user %>
|
|
<%= render "users/access_tokens" %>
|
|
<%= render "users/data_export" %>
|
|
</div>
|
|
<% end %>
|
|
</div>
|
|
|
|
<% if @user.verified? %>
|
|
<%= turbo_frame_tag "user_events", src: user_events_path(@user) %>
|
|
<% end %>
|