From bd6dad85e1be53ffe8166f1f659c9281d544cbd3 Mon Sep 17 00:00:00 2001
From: Graham McIntire
Date: Mon, 2 Feb 2026 10:20:59 -0600
Subject: [PATCH] purge more passkey and gettext updates
---
lib/towerops/accounts/login_attempt.ex | 6 +-
.../controllers/api_docs_html/index.html.heex | 1 -
.../user_registration_html/new.html.heex | 55 ++---
.../user_reset_password_html/edit.html.heex | 12 +-
.../user_reset_password_html/new.html.heex | 10 +-
.../user_session_html/new.html.heex | 47 ++---
.../live/org/settings_live.html.heex | 2 +-
lib/towerops_web/live/user_settings_live.ex | 2 +-
.../live/user_settings_live.html.heex | 74 -------
.../live/user_settings_live/helpers.ex | 1 -
priv/gettext/auth.pot | 199 ++++++++++++++++++
priv/gettext/default.pot | 5 +
priv/gettext/en/LC_MESSAGES/auth.po | 199 ++++++++++++++++++
priv/gettext/en/LC_MESSAGES/default.po | 5 +
.../controllers/user_session_html_test.exs | 1 -
.../live/org/settings_live_test.exs | 27 +--
16 files changed, 473 insertions(+), 173 deletions(-)
diff --git a/lib/towerops/accounts/login_attempt.ex b/lib/towerops/accounts/login_attempt.ex
index 4477df22..b3de223d 100644
--- a/lib/towerops/accounts/login_attempt.ex
+++ b/lib/towerops/accounts/login_attempt.ex
@@ -16,8 +16,8 @@ defmodule Towerops.Accounts.LoginAttempt do
@primary_key {:id, :binary_id, autogenerate: true}
@foreign_key_type :binary_id
- @valid_methods ~w(password magic_link webauthn mobile_qr)
- @valid_failure_reasons ~w(invalid_credentials invalid_totp invalid_magic_link invalid_passkey account_disabled)
+ @valid_methods ~w(password magic_link mobile_qr)
+ @valid_failure_reasons ~w(invalid_credentials invalid_totp invalid_magic_link account_disabled)
schema "login_attempts" do
field :email, :string
@@ -46,7 +46,7 @@ defmodule Towerops.Accounts.LoginAttempt do
## Required fields
- `:success` - Boolean indicating if login was successful
- - `:method` - Login method (password, magic_link, webauthn, mobile_qr)
+ - `:method` - Login method (password, magic_link, mobile_qr)
- `:ip_address` - IP address of the login attempt
## Conditional validation
diff --git a/lib/towerops_web/controllers/api_docs_html/index.html.heex b/lib/towerops_web/controllers/api_docs_html/index.html.heex
index 2d597a7c..8f113fd4 100644
--- a/lib/towerops_web/controllers/api_docs_html/index.html.heex
+++ b/lib/towerops_web/controllers/api_docs_html/index.html.heex
@@ -1178,7 +1178,6 @@ curl -X DELETE https://towerops.net/api/v1/devices/650e8400-e29b-41d4-a716-44665
Profile information (email, name, timezone)
- WebAuthn credentials and passkeys
Organizations and membership roles
Devices across all organizations
Recent alerts (last 90 days)
diff --git a/lib/towerops_web/controllers/user_registration_html/new.html.heex b/lib/towerops_web/controllers/user_registration_html/new.html.heex
index 915619da..5c74ece7 100644
--- a/lib/towerops_web/controllers/user_registration_html/new.html.heex
+++ b/lib/towerops_web/controllers/user_registration_html/new.html.heex
@@ -3,41 +3,38 @@
<.header>
<%= if @invitation do %>
- Join {@invitation.organization.name}
+ {t_auth("Join %{organization}", organization: @invitation.organization.name)}
<% else %>
- Register for an account
+ {t_auth("Register for an account")}
<% end %>
<:subtitle>
- Already registered?
+ {t_auth("Already registered?")}
<.link
navigate={~p"/users/log-in"}
class="font-semibold text-blue-600 hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300"
>
- Log in
+ {t_auth("Log in")}
- to your account now.
+ {t_auth("to your account now.")}
<%= if @invitation do %>
- You've been invited to join
- {@invitation.organization.name}
- as
- a {@invitation.role}.
+ {t_auth("You've been invited to join %{organization} as a %{role}.", organization: @invitation.organization.name, role: @invitation.role)}
<% else %>
- Free tier includes:
+ {t_auth("Free tier includes:")}
- ✓ Monitor up to 10 devices
- ✓ Real-time alerts and notifications
- ✓ Performance charts and historical data
- ✓ No credit card required
+ {t_auth("✓ Monitor up to 10 devices")}
+ {t_auth("✓ Real-time alerts and notifications")}
+ {t_auth("✓ Performance charts and historical data")}
+ {t_auth("✓ No credit card required")}
<% end %>
@@ -52,7 +49,7 @@
<.input
field={f[:email]}
type="email"
- label="Email"
+ label={t_auth("Email")}
autocomplete="email"
required
phx-mounted={JS.focus()}
@@ -60,7 +57,7 @@
<.input
field={f[:password]}
type="password"
- label="Password"
+ label={t_auth("Password")}
autocomplete="new-password"
required
/>
@@ -70,8 +67,8 @@
name="user[organization_name]"
value=""
type="text"
- label="Organization Name"
- placeholder="My Company"
+ label={t_auth("Organization Name")}
+ placeholder={t_auth("My Company")}
required
/>
<% end %>
@@ -89,14 +86,7 @@
- I agree to the
- <.link
- href={~p"/privacy"}
- target="_blank"
- class="font-medium text-blue-600 hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300"
- >
- Privacy Policy
-
+ {t_auth("I agree to the %{link}", link: raw(~s(#{t_auth("Privacy Policy")} )))}
*
@@ -114,22 +104,15 @@
- I agree to the
- <.link
- href={~p"/terms"}
- target="_blank"
- class="font-medium text-blue-600 hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300"
- >
- Terms of Service
-
+ {t_auth("I agree to the %{link}", link: raw(~s(#{t_auth("Terms of Service")} )))}
*
- <.button phx-disable-with="Creating account..." class="w-full mt-6" variant="primary">
- {if @invitation, do: "Accept invitation and create account", else: "Create an account"}
+ <.button phx-disable-with={t_auth("Creating account...")} class="w-full mt-6" variant="primary">
+ {if @invitation, do: t_auth("Accept invitation and create account"), else: t_auth("Create an account")}
diff --git a/lib/towerops_web/controllers/user_reset_password_html/edit.html.heex b/lib/towerops_web/controllers/user_reset_password_html/edit.html.heex
index d7747b80..3fbfdc5d 100644
--- a/lib/towerops_web/controllers/user_reset_password_html/edit.html.heex
+++ b/lib/towerops_web/controllers/user_reset_password_html/edit.html.heex
@@ -2,9 +2,9 @@
<.header>
- Reset password
+ {t_auth("Reset password")}
<:subtitle>
- Enter your new password below.
+ {t_auth("Enter your new password below.")}
@@ -14,7 +14,7 @@
<.input
field={f[:password]}
type="password"
- label="New password"
+ label={t_auth("New password")}
autocomplete="new-password"
required
phx-mounted={JS.focus()}
@@ -22,13 +22,13 @@
<.input
field={f[:password_confirmation]}
type="password"
- label="Confirm new password"
+ label={t_auth("Confirm new password")}
autocomplete="new-password"
required
/>
<.button class="w-full" variant="primary">
- Reset password
+ {t_auth("Reset password")}
@@ -38,7 +38,7 @@
navigate={~p"/users/log-in"}
class="text-sm font-semibold text-blue-600 hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300"
>
- Back to log in
+ {t_auth("Back to log in")}
diff --git a/lib/towerops_web/controllers/user_reset_password_html/new.html.heex b/lib/towerops_web/controllers/user_reset_password_html/new.html.heex
index 3c1dd2dd..a7a10cb8 100644
--- a/lib/towerops_web/controllers/user_reset_password_html/new.html.heex
+++ b/lib/towerops_web/controllers/user_reset_password_html/new.html.heex
@@ -2,9 +2,9 @@
<.header>
- Forgot your password?
+ {t_auth("Forgot your password?")}
<:subtitle>
- Enter your email address and we'll send you a link to reset your password.
+ {t_auth("Enter your email address and we'll send you a link to reset your password.")}
@@ -14,14 +14,14 @@
<.input
field={f[:email]}
type="email"
- label="Email"
+ label={t_auth("Email")}
autocomplete="email"
required
phx-mounted={JS.focus()}
/>
<.button class="w-full" variant="primary">
- Send reset instructions
+ {t_auth("Send reset instructions")}
@@ -31,7 +31,7 @@
navigate={~p"/users/log-in"}
class="text-sm font-semibold text-blue-600 hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300"
>
- Back to log in
+ {t_auth("Back to log in")}
diff --git a/lib/towerops_web/controllers/user_session_html/new.html.heex b/lib/towerops_web/controllers/user_session_html/new.html.heex
index c623de49..c97a6469 100644
--- a/lib/towerops_web/controllers/user_session_html/new.html.heex
+++ b/lib/towerops_web/controllers/user_session_html/new.html.heex
@@ -2,19 +2,19 @@
<.header>
- Log in
+ {t_auth("Log in")}
<:subtitle>
<%= if @current_scope do %>
- You need to reauthenticate to perform sensitive actions on your account.
+ {t_auth("You need to reauthenticate to perform sensitive actions on your account.")}
<% else %>
- Don't have an account?
+ {t_auth("Don't have an account?")}
<.link
navigate={~p"/users/register"}
class="font-semibold text-blue-600 hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300"
>
- Sign up
+ {t_auth("Sign up")}
- for an account now.
+ {t_auth("for an account now.")}
<% end %>
@@ -31,10 +31,10 @@
/>
- You are running the local mail adapter.
+ {t_auth("You are running the local mail adapter.")}
- To see sent emails, visit <.link href="/dev/mailbox" class="font-medium underline">the mailbox page.
+ {t_auth("To see sent emails, visit %{link}.", link: raw(~s(#{t_auth("the mailbox page")} )))}
@@ -47,7 +47,7 @@
readonly={!!@current_scope}
field={f[:email]}
type="email"
- label="Email"
+ label={t_auth("Email")}
autocomplete="email"
required
phx-mounted={JS.focus()}
@@ -55,7 +55,7 @@
<.input
field={f[:password]}
type="password"
- label="Password"
+ label={t_auth("Password")}
autocomplete="current-password"
required
/>
@@ -64,12 +64,12 @@
navigate={~p"/users/reset-password"}
class="text-sm font-semibold text-blue-600 hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300"
>
- Forgot password?
+ {t_auth("Forgot password?")}
<.button class="w-full" variant="primary" name={@form[:remember_me].name} value="true">
- Log in →
+ {t_auth("Log in")} →
@@ -80,42 +80,25 @@
- or
+ {t("or")}
-
+
<.form :let={f} for={@form} as={:user} id="login_form_magic" action={~p"/users/log-in"}>
<.input
readonly={!!@current_scope}
field={f[:email]}
type="email"
- label="Email"
+ label={t_auth("Email")}
autocomplete="email"
required
/>
<.button class="w-full">
- Send me a login link instead
+ {t_auth("Send me a login link instead")}
-
-
-
-
-
- <.icon name="hero-key" class="h-5 w-5" /> Log in with passkey
-
-
diff --git a/lib/towerops_web/live/org/settings_live.html.heex b/lib/towerops_web/live/org/settings_live.html.heex
index f110f863..62a6d4ea 100644
--- a/lib/towerops_web/live/org/settings_live.html.heex
+++ b/lib/towerops_web/live/org/settings_live.html.heex
@@ -118,7 +118,7 @@
-
+
<.input
field={@form[:mikrotik_enabled]}
type="checkbox"
diff --git a/lib/towerops_web/live/user_settings_live.ex b/lib/towerops_web/live/user_settings_live.ex
index f5335f2f..b28b998b 100644
--- a/lib/towerops_web/live/user_settings_live.ex
+++ b/lib/towerops_web/live/user_settings_live.ex
@@ -2,7 +2,7 @@ defmodule ToweropsWeb.UserSettingsLive do
@moduledoc """
LiveView for managing user account settings.
- Allows users to update email, password, manage passkeys, and mobile sessions.
+ Allows users to update email, password, and mobile sessions.
"""
use ToweropsWeb, :live_view
diff --git a/lib/towerops_web/live/user_settings_live.html.heex b/lib/towerops_web/live/user_settings_live.html.heex
index 609f33e4..70342c37 100644
--- a/lib/towerops_web/live/user_settings_live.html.heex
+++ b/lib/towerops_web/live/user_settings_live.html.heex
@@ -1583,78 +1583,4 @@
<% end %>
-
-
-
-
-
-
-
-
-
-
-
-
-
- <.icon name="hero-key" class="h-6 w-6 text-blue-600 dark:text-blue-400" />
-
-
-
- Add Passkey
-
-
-
- Give this passkey a name to help you identify it later (e.g., "MacBook Touch ID", "iPhone").
-
-
-
-
-
-
-
-
-
-
- Continue
-
-
- Cancel
-
-
-
-
-
diff --git a/lib/towerops_web/live/user_settings_live/helpers.ex b/lib/towerops_web/live/user_settings_live/helpers.ex
index 7d59c083..03c3f443 100644
--- a/lib/towerops_web/live/user_settings_live/helpers.ex
+++ b/lib/towerops_web/live/user_settings_live/helpers.ex
@@ -82,7 +82,6 @@ defmodule ToweropsWeb.UserSettingsLive.Helpers do
case method do
"password" -> {"hero-lock-closed", "Password"}
"magic_link" -> {"hero-envelope", "Magic Link"}
- "webauthn" -> {"hero-key", "Passkey"}
"mobile_qr" -> {"hero-device-phone-mobile", "Mobile QR"}
_ -> {"hero-question-mark-circle", method}
end
diff --git a/priv/gettext/auth.pot b/priv/gettext/auth.pot
index c6c7f389..f4189eab 100644
--- a/priv/gettext/auth.pot
+++ b/priv/gettext/auth.pot
@@ -13,3 +13,202 @@
msgid ""
msgstr ""
"Language: en\n"
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:115
+#, elixir-autogen, elixir-format
+msgid "Accept invitation and create account"
+msgstr ""
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:11
+#, elixir-autogen, elixir-format
+msgid "Already registered?"
+msgstr ""
+
+#: lib/towerops_web/controllers/user_reset_password_html/edit.html.heex:41
+#: lib/towerops_web/controllers/user_reset_password_html/new.html.heex:34
+#, elixir-autogen, elixir-format
+msgid "Back to log in"
+msgstr ""
+
+#: lib/towerops_web/controllers/user_reset_password_html/edit.html.heex:25
+#, elixir-autogen, elixir-format
+msgid "Confirm new password"
+msgstr ""
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:115
+#, elixir-autogen, elixir-format
+msgid "Create an account"
+msgstr ""
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:114
+#, elixir-autogen, elixir-format
+msgid "Creating account..."
+msgstr ""
+
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:10
+#, elixir-autogen, elixir-format
+msgid "Don't have an account?"
+msgstr ""
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:52
+#: lib/towerops_web/controllers/user_reset_password_html/new.html.heex:17
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:50
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:94
+#, elixir-autogen, elixir-format
+msgid "Email"
+msgstr ""
+
+#: lib/towerops_web/controllers/user_reset_password_html/new.html.heex:7
+#, elixir-autogen, elixir-format
+msgid "Enter your email address and we'll send you a link to reset your password."
+msgstr ""
+
+#: lib/towerops_web/controllers/user_reset_password_html/edit.html.heex:7
+#, elixir-autogen, elixir-format
+msgid "Enter your new password below."
+msgstr ""
+
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:67
+#, elixir-autogen, elixir-format
+msgid "Forgot password?"
+msgstr ""
+
+#: lib/towerops_web/controllers/user_reset_password_html/new.html.heex:5
+#, elixir-autogen, elixir-format
+msgid "Forgot your password?"
+msgstr ""
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:31
+#, elixir-autogen, elixir-format
+msgid "Free tier includes:"
+msgstr ""
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:89
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:107
+#, elixir-autogen, elixir-format
+msgid "I agree to the %{link}"
+msgstr ""
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:6
+#, elixir-autogen, elixir-format
+msgid "Join %{organization}"
+msgstr ""
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:16
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:5
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:72
+#, elixir-autogen, elixir-format
+msgid "Log in"
+msgstr ""
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:71
+#, elixir-autogen, elixir-format
+msgid "My Company"
+msgstr ""
+
+#: lib/towerops_web/controllers/user_reset_password_html/edit.html.heex:17
+#, elixir-autogen, elixir-format
+msgid "New password"
+msgstr ""
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:70
+#, elixir-autogen, elixir-format
+msgid "Organization Name"
+msgstr ""
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:60
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:58
+#, elixir-autogen, elixir-format
+msgid "Password"
+msgstr ""
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:89
+#, elixir-autogen, elixir-format
+msgid "Privacy Policy"
+msgstr ""
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:8
+#, elixir-autogen, elixir-format
+msgid "Register for an account"
+msgstr ""
+
+#: lib/towerops_web/controllers/user_reset_password_html/edit.html.heex:5
+#: lib/towerops_web/controllers/user_reset_password_html/edit.html.heex:31
+#, elixir-autogen, elixir-format
+msgid "Reset password"
+msgstr ""
+
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:99
+#, elixir-autogen, elixir-format
+msgid "Send me a login link instead"
+msgstr ""
+
+#: lib/towerops_web/controllers/user_reset_password_html/new.html.heex:24
+#, elixir-autogen, elixir-format
+msgid "Send reset instructions"
+msgstr ""
+
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:15
+#, elixir-autogen, elixir-format
+msgid "Sign up"
+msgstr ""
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:107
+#, elixir-autogen, elixir-format
+msgid "Terms of Service"
+msgstr ""
+
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:37
+#, elixir-autogen, elixir-format
+msgid "To see sent emails, visit %{link}."
+msgstr ""
+
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:34
+#, elixir-autogen, elixir-format
+msgid "You are running the local mail adapter."
+msgstr ""
+
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:8
+#, elixir-autogen, elixir-format
+msgid "You need to reauthenticate to perform sensitive actions on your account."
+msgstr ""
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:25
+#, elixir-autogen, elixir-format
+msgid "You've been invited to join %{organization} as a %{role}."
+msgstr ""
+
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:17
+#, elixir-autogen, elixir-format
+msgid "for an account now."
+msgstr ""
+
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:37
+#, elixir-autogen, elixir-format
+msgid "the mailbox page"
+msgstr ""
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:18
+#, elixir-autogen, elixir-format
+msgid "to your account now."
+msgstr ""
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:34
+#, elixir-autogen, elixir-format
+msgid "✓ Monitor up to 10 devices"
+msgstr ""
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:37
+#, elixir-autogen, elixir-format
+msgid "✓ No credit card required"
+msgstr ""
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:36
+#, elixir-autogen, elixir-format
+msgid "✓ Performance charts and historical data"
+msgstr ""
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:35
+#, elixir-autogen, elixir-format
+msgid "✓ Real-time alerts and notifications"
+msgstr ""
diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot
index b3e7becb..645674d2 100644
--- a/priv/gettext/default.pot
+++ b/priv/gettext/default.pot
@@ -86,3 +86,8 @@ msgstr ""
#, elixir-autogen, elixir-format
msgid "close"
msgstr ""
+
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:83
+#, elixir-autogen, elixir-format
+msgid "or"
+msgstr ""
diff --git a/priv/gettext/en/LC_MESSAGES/auth.po b/priv/gettext/en/LC_MESSAGES/auth.po
index 0dde1207..ce3e907f 100644
--- a/priv/gettext/en/LC_MESSAGES/auth.po
+++ b/priv/gettext/en/LC_MESSAGES/auth.po
@@ -10,3 +10,202 @@ msgid ""
msgstr ""
"Language: en\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:115
+#, elixir-autogen, elixir-format
+msgid "Accept invitation and create account"
+msgstr "Accept invitation and create account"
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:11
+#, elixir-autogen, elixir-format
+msgid "Already registered?"
+msgstr "Already registered?"
+
+#: lib/towerops_web/controllers/user_reset_password_html/edit.html.heex:41
+#: lib/towerops_web/controllers/user_reset_password_html/new.html.heex:34
+#, elixir-autogen, elixir-format
+msgid "Back to log in"
+msgstr "Back to log in"
+
+#: lib/towerops_web/controllers/user_reset_password_html/edit.html.heex:25
+#, elixir-autogen, elixir-format
+msgid "Confirm new password"
+msgstr "Confirm new password"
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:115
+#, elixir-autogen, elixir-format
+msgid "Create an account"
+msgstr "Create an account"
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:114
+#, elixir-autogen, elixir-format
+msgid "Creating account..."
+msgstr "Creating account..."
+
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:10
+#, elixir-autogen, elixir-format
+msgid "Don't have an account?"
+msgstr "Don't have an account?"
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:52
+#: lib/towerops_web/controllers/user_reset_password_html/new.html.heex:17
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:50
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:94
+#, elixir-autogen, elixir-format
+msgid "Email"
+msgstr "Email"
+
+#: lib/towerops_web/controllers/user_reset_password_html/new.html.heex:7
+#, elixir-autogen, elixir-format
+msgid "Enter your email address and we'll send you a link to reset your password."
+msgstr "Enter your email address and we'll send you a link to reset your password."
+
+#: lib/towerops_web/controllers/user_reset_password_html/edit.html.heex:7
+#, elixir-autogen, elixir-format
+msgid "Enter your new password below."
+msgstr "Enter your new password below."
+
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:67
+#, elixir-autogen, elixir-format
+msgid "Forgot password?"
+msgstr "Forgot password?"
+
+#: lib/towerops_web/controllers/user_reset_password_html/new.html.heex:5
+#, elixir-autogen, elixir-format
+msgid "Forgot your password?"
+msgstr "Forgot your password?"
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:31
+#, elixir-autogen, elixir-format
+msgid "Free tier includes:"
+msgstr "Free tier includes:"
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:89
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:107
+#, elixir-autogen, elixir-format
+msgid "I agree to the %{link}"
+msgstr "I agree to the %{link}"
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:6
+#, elixir-autogen, elixir-format
+msgid "Join %{organization}"
+msgstr "Join %{organization}"
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:16
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:5
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:72
+#, elixir-autogen, elixir-format
+msgid "Log in"
+msgstr "Log in"
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:71
+#, elixir-autogen, elixir-format
+msgid "My Company"
+msgstr "My Company"
+
+#: lib/towerops_web/controllers/user_reset_password_html/edit.html.heex:17
+#, elixir-autogen, elixir-format
+msgid "New password"
+msgstr "New password"
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:70
+#, elixir-autogen, elixir-format
+msgid "Organization Name"
+msgstr "Organization Name"
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:60
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:58
+#, elixir-autogen, elixir-format
+msgid "Password"
+msgstr "Password"
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:89
+#, elixir-autogen, elixir-format
+msgid "Privacy Policy"
+msgstr "Privacy Policy"
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:8
+#, elixir-autogen, elixir-format
+msgid "Register for an account"
+msgstr "Register for an account"
+
+#: lib/towerops_web/controllers/user_reset_password_html/edit.html.heex:5
+#: lib/towerops_web/controllers/user_reset_password_html/edit.html.heex:31
+#, elixir-autogen, elixir-format
+msgid "Reset password"
+msgstr "Reset password"
+
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:99
+#, elixir-autogen, elixir-format
+msgid "Send me a login link instead"
+msgstr "Send me a login link instead"
+
+#: lib/towerops_web/controllers/user_reset_password_html/new.html.heex:24
+#, elixir-autogen, elixir-format
+msgid "Send reset instructions"
+msgstr "Send reset instructions"
+
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:15
+#, elixir-autogen, elixir-format
+msgid "Sign up"
+msgstr "Sign up"
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:107
+#, elixir-autogen, elixir-format
+msgid "Terms of Service"
+msgstr "Terms of Service"
+
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:37
+#, elixir-autogen, elixir-format
+msgid "To see sent emails, visit %{link}."
+msgstr "To see sent emails, visit %{link}."
+
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:34
+#, elixir-autogen, elixir-format
+msgid "You are running the local mail adapter."
+msgstr "You are running the local mail adapter."
+
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:8
+#, elixir-autogen, elixir-format
+msgid "You need to reauthenticate to perform sensitive actions on your account."
+msgstr "You need to reauthenticate to perform sensitive actions on your account."
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:25
+#, elixir-autogen, elixir-format
+msgid "You've been invited to join %{organization} as a %{role}."
+msgstr "You've been invited to join %{organization} as a %{role}."
+
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:17
+#, elixir-autogen, elixir-format
+msgid "for an account now."
+msgstr "for an account now."
+
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:37
+#, elixir-autogen, elixir-format
+msgid "the mailbox page"
+msgstr "the mailbox page"
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:18
+#, elixir-autogen, elixir-format
+msgid "to your account now."
+msgstr "to your account now."
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:34
+#, elixir-autogen, elixir-format
+msgid "✓ Monitor up to 10 devices"
+msgstr "✓ Monitor up to 10 devices"
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:37
+#, elixir-autogen, elixir-format
+msgid "✓ No credit card required"
+msgstr "✓ No credit card required"
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:36
+#, elixir-autogen, elixir-format
+msgid "✓ Performance charts and historical data"
+msgstr "✓ Performance charts and historical data"
+
+#: lib/towerops_web/controllers/user_registration_html/new.html.heex:35
+#, elixir-autogen, elixir-format
+msgid "✓ Real-time alerts and notifications"
+msgstr "✓ Real-time alerts and notifications"
diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po
index 03588dd8..1b084c4d 100644
--- a/priv/gettext/en/LC_MESSAGES/default.po
+++ b/priv/gettext/en/LC_MESSAGES/default.po
@@ -86,3 +86,8 @@ msgstr "We can't find the internet"
#, elixir-autogen, elixir-format
msgid "close"
msgstr "close"
+
+#: lib/towerops_web/controllers/user_session_html/new.html.heex:83
+#, elixir-autogen, elixir-format
+msgid "or"
+msgstr "or"
diff --git a/test/towerops_web/controllers/user_session_html_test.exs b/test/towerops_web/controllers/user_session_html_test.exs
index 24cafd7c..0f5c95e0 100644
--- a/test/towerops_web/controllers/user_session_html_test.exs
+++ b/test/towerops_web/controllers/user_session_html_test.exs
@@ -19,7 +19,6 @@ defmodule ToweropsWeb.UserSessionHTMLTest do
assert html =~ "Log in"
assert html =~ "Sign up"
- assert html =~ "Log in with passkey"
assert html =~ "Send me a login link instead"
# Password login is now the default (no longer separated by "or use password")
assert html =~ "Password"
diff --git a/test/towerops_web/live/org/settings_live_test.exs b/test/towerops_web/live/org/settings_live_test.exs
index 3d595449..6a35ee93 100644
--- a/test/towerops_web/live/org/settings_live_test.exs
+++ b/test/towerops_web/live/org/settings_live_test.exs
@@ -62,11 +62,12 @@ defmodule ToweropsWeb.Org.SettingsLiveTest do
|> log_in_user(user)
|> live(~p"/orgs/#{org.slug}/settings")
- assert view
- |> form("#organization-form", organization: %{name: "Updated Name"})
- |> render_submit()
+ html =
+ view
+ |> form("#organization-form", organization: %{name: "Updated Name"})
+ |> render_submit()
- assert_redirected(view, ~p"/orgs/#{org.slug}")
+ assert html =~ "Settings saved successfully"
# Verify the organization was actually updated
updated_org = Towerops.Organizations.get_organization!(org.id)
@@ -81,11 +82,12 @@ defmodule ToweropsWeb.Org.SettingsLiveTest do
|> log_in_user(user)
|> live(~p"/orgs/#{org.slug}/settings")
- assert view
- |> form("#organization-form", organization: %{default_agent_token_id: agent_token.id})
- |> render_submit()
+ html =
+ view
+ |> form("#organization-form", organization: %{default_agent_token_id: agent_token.id})
+ |> render_submit()
- assert_redirected(view, ~p"/orgs/#{org.slug}")
+ assert html =~ "Settings saved successfully"
# Verify the default agent was set
updated_org = Towerops.Organizations.get_organization!(org.id)
@@ -107,11 +109,12 @@ defmodule ToweropsWeb.Org.SettingsLiveTest do
|> live(~p"/orgs/#{org.slug}/settings")
# Now clear it
- assert view
- |> form("#organization-form", organization: %{default_agent_token_id: ""})
- |> render_submit()
+ html =
+ view
+ |> form("#organization-form", organization: %{default_agent_token_id: ""})
+ |> render_submit()
- assert_redirected(view, ~p"/orgs/#{org.slug}")
+ assert html =~ "Settings saved successfully"
# Verify the default agent was cleared
updated_org = Towerops.Organizations.get_organization!(org.id)