- Manage your account email address, password, and security settings -
-- Update your name and timezone preferences. -
-- Update your email address. You'll receive a confirmation link to verify the new address. -
-- Update your password. You'll be logged out and need to sign in again with your new password. -
-- This password has appeared {@password_breach_count} - {if @password_breach_count == 1, do: "time", else: "times"} in known data breaches. We strongly recommend choosing a different, - more unique password to protect your account. -
-- Create API tokens to access Towerops programmatically. Tokens are scoped to a specific organization. -
-- Get started by creating a new API token. -
-- {token.name} -
-{token.organization.name}
- -- <%= if token.last_used_at do %> - Last used {Calendar.strftime(token.last_used_at, "%B %d, %Y")} - <% else %> - Never used - <% end %> -
-- Manage mobile devices that receive push notifications for alerts. -
-- Add a mobile device to receive push notifications for alerts. -
-- {session.device_name || "Unknown Device"} -
- <%= if session.alerts_enabled do %> - - <.icon name="hero-bell" class="h-3 w-3" /> Alerts On - - <% else %> - - <.icon name="hero-bell-slash" class="h-3 w-3" /> Alerts Off - - <% end %> -{session.device_os} • {session.app_version}
- -Last used {Calendar.strftime(session.last_used_at, "%B %d, %Y")}
-- We detected {@failed_login_count} failed login attempts in the last 24 hours. - Please review your login history below and ensure all activity is authorized. -
-- Manage browser sessions where you're currently logged in. -
-- Your current session will appear here after your next login. -
-- {format_browser_info(session)} -
- <%= if is_current do %> - - Current Session - - <% end %> -- Recent login attempts to your account, including successful and failed attempts. -
-- Your login attempts will appear here. -
-| - Date & Time - | -- Status - | -- Method - | -- Location - | -- IP Address - | -
|---|---|---|---|---|
| - {format_timestamp_in_timezone( - attempt.inserted_at, - @current_scope.timezone - )} - | -- <%= if attempt.success do %> - - <.icon name="hero-check-circle" class="h-3 w-3" /> Success - - <% else %> - - <.icon name="hero-x-circle" class="h-3 w-3" /> Failed - - <% end %> - | -- <% {icon, text} = login_method_info(attempt.method) %> - - <.icon name={icon} class="h-3 w-3" /> {text} - - | -- {format_location(attempt)} - | -- {attempt.ip_address} - | -
- Showing - - {(@login_history_pagination.page - 1) * @login_history_pagination.per_page + - 1} - - to - - {min( - @login_history_pagination.page * @login_history_pagination.per_page, - @login_history_pagination.total_count - )} - - of {@login_history_pagination.total_count} - results -
-- Manage TOTP devices for two-factor authentication. You must have at least one device configured. -
-- Add your first authenticator app to enable two-factor authentication. -
-- {device.name} -
-- Added {Calendar.strftime(device.inserted_at, "%B %d, %Y")} -
- <%= if device.last_used_at do %> - -- Last used {format_relative_time(device.last_used_at)} -
- <% end %> -- Single-use backup codes for account access if you lose your authenticator app. -
-- <%= if @unused_recovery_codes_count == 0 do %> - - No recovery codes available - - - Generate new codes immediately - <% else %> - You have - - {@unused_recovery_codes_count} - - unused recovery code{if @unused_recovery_codes_count != 1, do: "s"} - <% end %> -
-- You have no recovery codes available. If you lose access to your authenticator app, - you won't be able to log in. Generate new codes now. -
-- This will log you out from all other browsers and devices. Your current session will remain active. -
-- Give this token a name and select the organization it will have access to. -
-- Copy this token now. You won't be able to see it again. -
-- Click the token to select all, or use the Copy button -
-- Give this device a name to help you identify it (e.g., "iPhone 15", "iPad Pro"). -
-- Scan this QR code with your authenticator app (Google Authenticator, Authy, 1Password, etc.). -
-- Enter the 6-digit code from your app to verify -
- <.form for={%{}} as={:verification} phx-submit="verify_new_device"> -- Save these codes in a secure location. Each code can only be used once. -
-- These codes won't be shown again. Store them securely (password manager, encrypted file, etc.). - If you lose your authenticator and these codes, you won't be able to access your account. -
-- Give this passkey a name to help you identify it later (e.g., "MacBook Touch ID", "iPhone"). -
-+ Manage your account email address, password, and security settings +
++ Update your name and timezone preferences. +
++ Update your email address. You'll receive a confirmation link to verify the new address. +
++ Update your password. You'll be logged out and need to sign in again with your new password. +
++ This password has appeared {@password_breach_count} + {if @password_breach_count == 1, do: "time", else: "times"} in known data breaches. We strongly recommend choosing a different, + more unique password to protect your account. +
++ Create API tokens to access Towerops programmatically. Tokens are scoped to a specific organization. +
++ Get started by creating a new API token. +
++ {token.name} +
+{token.organization.name}
+ ++ <%= if token.last_used_at do %> + Last used {Calendar.strftime(token.last_used_at, "%B %d, %Y")} + <% else %> + Never used + <% end %> +
++ Manage mobile devices that receive push notifications for alerts. +
++ Add a mobile device to receive push notifications for alerts. +
++ {session.device_name || "Unknown Device"} +
+ <%= if session.alerts_enabled do %> + + <.icon name="hero-bell" class="h-3 w-3" /> Alerts On + + <% else %> + + <.icon name="hero-bell-slash" class="h-3 w-3" /> Alerts Off + + <% end %> +{session.device_os} • {session.app_version}
+ +Last used {Calendar.strftime(session.last_used_at, "%B %d, %Y")}
++ We detected {@failed_login_count} failed login attempts in the last 24 hours. + Please review your login history below and ensure all activity is authorized. +
++ Manage browser sessions where you're currently logged in. +
++ Your current session will appear here after your next login. +
++ {format_browser_info(session)} +
+ <%= if is_current do %> + + Current Session + + <% end %> ++ Recent login attempts to your account, including successful and failed attempts. +
++ Your login attempts will appear here. +
+| + Date & Time + | ++ Status + | ++ Method + | ++ Location + | ++ IP Address + | +
|---|---|---|---|---|
| + {format_timestamp_in_timezone( + attempt.inserted_at, + @current_scope.timezone + )} + | ++ <%= if attempt.success do %> + + <.icon name="hero-check-circle" class="h-3 w-3" /> Success + + <% else %> + + <.icon name="hero-x-circle" class="h-3 w-3" /> Failed + + <% end %> + | ++ <% {icon, text} = login_method_info(attempt.method) %> + + <.icon name={icon} class="h-3 w-3" /> {text} + + | ++ {format_location(attempt)} + | ++ {attempt.ip_address} + | +
+ Showing + + {(@login_history_pagination.page - 1) * @login_history_pagination.per_page + + 1} + + to + + {min( + @login_history_pagination.page * @login_history_pagination.per_page, + @login_history_pagination.total_count + )} + + of {@login_history_pagination.total_count} + results +
++ Manage TOTP devices for two-factor authentication. You must have at least one device configured. +
++ Add your first authenticator app to enable two-factor authentication. +
++ {device.name} +
++ Added {Calendar.strftime(device.inserted_at, "%B %d, %Y")} +
+ <%= if device.last_used_at do %> + ++ Last used {format_relative_time(device.last_used_at)} +
+ <% end %> ++ Single-use backup codes for account access if you lose your authenticator app. +
++ <%= if @unused_recovery_codes_count == 0 do %> + + No recovery codes available + + - Generate new codes immediately + <% else %> + You have + + {@unused_recovery_codes_count} + + unused recovery code{if @unused_recovery_codes_count != 1, do: "s"} + <% end %> +
++ You have no recovery codes available. If you lose access to your authenticator app, + you won't be able to log in. Generate new codes now. +
++ This will log you out from all other browsers and devices. Your current session will remain active. +
++ Give this token a name and select the organization it will have access to. +
++ Copy this token now. You won't be able to see it again. +
++ Click the token to select all, or use the Copy button +
++ Give this device a name to help you identify it (e.g., "iPhone 15", "iPad Pro"). +
++ Scan this QR code with your authenticator app (Google Authenticator, Authy, 1Password, etc.). +
++ Enter the 6-digit code from your app to verify +
+ <.form for={%{}} as={:verification} phx-submit="verify_new_device"> ++ Save these codes in a secure location. Each code can only be used once. +
++ These codes won't be shown again. Store them securely (password manager, encrypted file, etc.). + If you lose your authenticator and these codes, you won't be able to access your account. +
++ Give this passkey a name to help you identify it later (e.g., "MacBook Touch ID", "iPhone"). +
+