Changeset 3338906
- Timestamp:
- 08/04/2025 11:13:07 AM (8 months ago)
- Location:
- secure-passkeys/trunk
- Files:
-
- 2 added
- 13 deleted
- 28 edited
-
assets/admin/css/profile.css (modified) (1 diff)
-
assets/admin/js/settings.js (modified) (3 diffs)
-
assets/banner-1544x500.png (deleted)
-
assets/banner-772x250.png (deleted)
-
assets/frontend/css/login.css (modified) (1 diff)
-
assets/frontend/css/register.css (modified) (1 diff)
-
assets/icon-128x128.png (deleted)
-
assets/icon-256x256.png (deleted)
-
assets/screenshot-1.png (deleted)
-
assets/screenshot-2.png (deleted)
-
assets/screenshot-3.png (deleted)
-
assets/screenshot-4.png (deleted)
-
assets/screenshot-5.png (deleted)
-
assets/screenshot-6.png (deleted)
-
assets/screenshot-7.png (deleted)
-
assets/screenshot-8.png (deleted)
-
assets/screenshot-9.png (deleted)
-
readme.txt (modified) (5 diffs)
-
secure-passkeys.php (modified) (2 diffs)
-
src/ajax/secure-passkeys-adminarea-ajax.php (modified) (1 diff)
-
src/ajax/secure-passkeys-frontend-ajax.php (modified) (3 diffs)
-
src/core/secure-passkeys-application.php (modified) (3 diffs)
-
src/includes/secure-passkeys-frontend.php (modified) (5 diffs)
-
src/languages/secure-passkeys-ar.mo (modified) (previous)
-
src/languages/secure-passkeys-ar.po (modified) (34 diffs)
-
src/models/secure-passkeys-challenge.php (modified) (1 diff)
-
src/models/secure-passkeys-log.php (modified) (1 diff)
-
src/settings/secure-passkeys-advanced-settings.php (modified) (3 diffs)
-
src/settings/secure-passkeys-display-settings.php (modified) (3 diffs)
-
src/settings/secure-passkeys-general-settings.php (modified) (3 diffs)
-
src/utils/secure-passkeys-helper.php (modified) (4 diffs)
-
src/utils/secure-passkeys-i18n.php (modified) (2 diffs)
-
src/utils/secure-passkeys-webauthn-helper.php (modified) (1 diff)
-
src/views/admin/vue/components/settings/advanced-settings.vue.php (modified) (2 diffs)
-
src/views/admin/vue/components/settings/display-settings.vue.php (modified) (1 diff)
-
src/views/admin/vue/components/settings/general-settings.vue.php (modified) (1 diff)
-
src/views/admin/vue/profile.php (modified) (1 diff)
-
src/views/frontend/default/login.shortcode.php (modified) (1 diff)
-
src/views/frontend/default/login.ultimate_member.php (added)
-
src/views/frontend/default/register.php (modified) (1 diff)
-
src/views/frontend/yootheme/login.shortcode.php (modified) (1 diff)
-
src/views/frontend/yootheme/login.ultimate_member.php (added)
-
src/views/frontend/yootheme/register.php (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
secure-passkeys/trunk/assets/admin/css/profile.css
r3262385 r3338906 102 102 .secure-passkeys .register-passkey-card .regular-text { 103 103 padding: 4px; 104 } 105 106 .secure-passkeys .register-passkey-card .multiline-text { 107 white-space: pre-line; 104 108 } 105 109 -
secure-passkeys/trunk/assets/admin/js/settings.js
r3262385 r3338906 8 8 registration_maximum_passkeys_per_user: 3, 9 9 excluded_roles_registration_login: [], 10 auto_generate_security_key_name: 0, 10 11 registration_timeout: 5, 11 12 registration_exclude_credentials_enabled: 1, … … 111 112 display_passkey_login_memberpress_enabled: 1, 112 113 display_passkey_login_edd_enabled: 1, 114 display_passkey_login_ultimate_member_enabled: 1, 113 115 display_passkey_users_list_enabled: 1, 114 116 display_passkey_edit_user_enabled: 1, … … 208 210 challenge_cleanup_days: 0, 209 211 log_cleanup_days: 0, 212 stop_log_records_enabled: 0, 210 213 }, 211 214 defaults: {}, -
secure-passkeys/trunk/assets/frontend/css/login.css
r3262385 r3338906 91 91 padding: 10px !important; 92 92 } 93 94 /* Ultimate Member */ 95 .secure-passkey-login-ultimate-member-wrapper .is-error { 96 margin-top: 10px; 97 margin-bottom: 10px; 98 } 99 100 .secure-passkey-login-ultimate-member-wrapper .is-success { 101 margin-top: 10px !important; 102 margin-bottom: 10px !important; 103 } -
secure-passkeys/trunk/assets/frontend/css/register.css
r3262385 r3338906 289 289 line-height: inherit; 290 290 } 291 292 #passkey_app .multiline-text { 293 white-space: pre-line; 294 } -
secure-passkeys/trunk/readme.txt
r3262385 r3338906 4 4 Requires at least: 6.0 5 5 Requires PHP: 7.4 6 Tested up to: 6. 77 Stable tag: 1. 0.06 Tested up to: 6.8 7 Stable tag: 1.1.0 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 28 28 * MemberPress login form 29 29 * Easy Digital Downloads login form 30 * Ultimate Member login form 30 31 * **Admin Management:** Administrators can delete, activate, or deactivate users directly from plugin settings or user profiles. 31 32 * **Activity Logging:** Monitor activity logs and track last login/registration of passkeys. … … 70 71 After activating the plugin, a "Secure Passkeys" menu item will appear in your WordPress admin dashboard's sidebar. 71 72 72 = How can I add a n ew theme for frontend shortc? =73 = How can I add a new theme for frontend shortcodes? = 73 74 74 75 You can add a custom theme for frontend shortcodes using the `secure_passkeys_themes` and `secure_passkeys_themes_paths` filters. … … 99 100 **Override Template Files:** Copy the template files you wish to customize from `secure-passkeys/src/views/frontend/default/` to your custom theme's folder (your/path/to/new/theme/folder). Any files not copied to your custom theme folder will be loaded from the plugin's default theme, providing a fallback mechanism. This allows you to customize only the files you need to change. 100 101 102 = How can I redirect users to a custom page after they log in using a passkey? = 103 104 Yes, you can redirect users after a passkey login by using the `secure_passkeys_login_redirect_url` filter. You can add the following code snippets to your theme's `functions.php` file. 105 106 **Example – Redirect to a Specific URL:** 107 108 This example redirects all users to a specific URL after they log in. 109 110 ` 111 <?php 112 113 add_filter('secure_passkeys_login_redirect_url', function ($redirect_to) { 114 // Redirect users to a custom URL after logging in with a passkey 115 return 'https://your-domain.com/your-custom-path'; 116 }); 117 ` 118 119 **Example – Redirect Based on User Role:** 120 121 This example redirects users based on their assigned role. 122 123 ` 124 <?php 125 126 add_filter('secure_passkeys_login_redirect_url', function ($redirect_to) { 127 $user = wp_get_current_user(); 128 129 // Redirect administrators to the WP admin dashboard 130 if (in_array('administrator', $user->roles)) { 131 return admin_url(); 132 } 133 134 // Redirect subscribers to a custom dashboard page 135 if (in_array('subscriber', $user->roles)) { 136 return home_url('/dashboard'); 137 } 138 139 // Default fallback URL 140 return $redirect_to; 141 }); 142 ` 143 101 144 = Are there other filters and actions? = 102 145 … … 106 149 107 150 == Changelog == 151 = 1.1.0 2025-08-04 = 152 * Add - Added support for the Ultimate Member plugin. 153 * Add - Added an option to automatically generate security key name for new passkeys, so users are no longer required to enter one manually. 154 * Add - Added an option to disable the logging of user activity. 155 * Tweak - Added `extra_wrapper_classes` and `extra_button_classes` attributes to the `[secure_passkeys_login_form]` shortcode for easier CSS customization. 156 * Fix - Corrected an issue where the `used_at` timestamp for a challenge was not being updated correctly in the database. 157 * Fix - Removed the `Accept-Encoding` header from the fingerprint calculation to prevent potential validation errors. 158 * Fix - Improved localization by removing HTML from translatable strings, ensuring they can be translated properly. 159 * Fix - Resolved a PHP warning on the "Activity Log" caused by an attempt to process a non-existent `is_active` property on log records. 160 108 161 = 1.0.0 2025-03-05 = 109 162 * Initial release. -
secure-passkeys/trunk/secure-passkeys.php
r3262385 r3338906 7 7 * Author: Mohamed Endisha 8 8 * Author URI: https://endisha.ly 9 * Version: 1. 0.09 * Version: 1.1.0 10 10 * Text Domain: secure-passkeys 11 11 * Domain Path: /src/languages/ … … 18 18 defined('ABSPATH') || exit; 19 19 20 define('SECURE_PASSKEYS_VERSION', '1. 0.0');20 define('SECURE_PASSKEYS_VERSION', '1.1.0'); 21 21 define('SECURE_PASSKEYS_PLUGIN_FILE', __FILE__); 22 22 define('SECURE_PASSKEYS_PLUGIN_DIR', __DIR__); -
secure-passkeys/trunk/src/ajax/secure-passkeys-adminarea-ajax.php
r3262385 r3338906 216 216 array_map(function ($record) { 217 217 $aaguid_friendly_name = Secure_Passkeys_Webauthn_Helper::get_friendly_name($record->aaguid); 218 $record->is_active = intval($record->is_active);219 218 $record->localized_log_type = Secure_Passkeys_Log::get_localized_log_type($record->log_type); 220 219 $record->description = Secure_Passkeys_Log::get_log_line($record->log_type, $record->security_key_name, $aaguid_friendly_name); -
secure-passkeys/trunk/src/ajax/secure-passkeys-frontend-ajax.php
r3262385 r3338906 3 3 namespace Secure_Passkeys\Ajax; 4 4 5 use DateTime; 5 6 use Exception; 6 7 use Secure_Passkeys\Actions\Secure_Passkeys_Web_Authn_Enable_Action; … … 141 142 $user_id = get_current_user_id(); 142 143 $challenge = sanitize_text_field(wp_unslash($_POST['challenge'] ?? '')); 143 $security_key_name = sanitize_text_field(wp_unslash($_POST['security_key_name'] ?? '')); 144 145 $is_auto_generate_security_key_name_enabled = Secure_Passkeys_Helper::is_auto_generate_security_key_name_enabled(); 146 147 if (!$is_auto_generate_security_key_name_enabled) { 148 $security_key_name = sanitize_text_field(wp_unslash($_POST['security_key_name'] ?? '')); 149 } else { 150 $security_key_name = (new DateTime())->format('YmdHis'); 151 $security_key_name = apply_filters('secure_passkeys_auto_generate_security_key_name', 'Passkey-' . $security_key_name, $user_id, $security_key_name); 152 } 144 153 145 154 try { … … 155 164 } 156 165 157 if (empty($security_key_name)) { 158 wp_send_json_error('EMPTY_SECURITY_KEY_NAME'); 159 } elseif (mb_strlen($security_key_name) < 3) { 160 wp_send_json_error(__('Security key name must be at least 3 characters long.', 'secure-passkeys')); 161 } elseif (mb_strlen($security_key_name) > 30) { 162 wp_send_json_error(__('Security key name must be at most 30 characters long.', 'secure-passkeys')); 163 } elseif (!preg_match('/^[A-Za-z0-9\s\-_]+$/', $security_key_name)) { 164 wp_send_json_error(__('Please use only letters, numbers, spaces, hyphens, or underscores.', 'secure-passkeys')); 166 if (!$is_auto_generate_security_key_name_enabled) { 167 if (empty($security_key_name)) { 168 wp_send_json_error('EMPTY_SECURITY_KEY_NAME'); 169 } elseif (mb_strlen($security_key_name) < 3) { 170 wp_send_json_error(__('Security key name must be at least 3 characters long.', 'secure-passkeys')); 171 } elseif (mb_strlen($security_key_name) > 30) { 172 wp_send_json_error(__('Security key name must be at most 30 characters long.', 'secure-passkeys')); 173 } elseif (!preg_match('/^[A-Za-z0-9\s\-_]+$/', $security_key_name)) { 174 wp_send_json_error(__('Please use only letters, numbers, spaces, hyphens, or underscores.', 'secure-passkeys')); 175 } 165 176 } 166 177 -
secure-passkeys/trunk/src/core/secure-passkeys-application.php
r3262385 r3338906 19 19 register_activation_hook(SECURE_PASSKEYS_PLUGIN_FILE, [$this, 'register_default_settings']); 20 20 21 register_deactivation_hook(SECURE_PASSKEYS_PLUGIN_FILE, [$this, 'unregister ']);21 register_deactivation_hook(SECURE_PASSKEYS_PLUGIN_FILE, [$this, 'unregister_jobs']); 22 22 23 23 add_action('activated_plugin', [$this, 'activation']); … … 125 125 $jobs = Secure_Passkeys_Loader::folder_loader(SECURE_PASSKEYS_JOBS_DIR, SECURE_PASSKEYS_PLUGIN_DIR); 126 126 127 if ( !empty($jobs)) {128 foreach ($jobs as $instance) {129 if ($instance instanceof Secure_Passkeys_Scheduler) {130 if (method_exists($instance, 'boot')) { 131 $instance->boot();132 }133 }127 if (empty($jobs)) { 128 return; 129 } 130 131 foreach ($jobs as $instance) { 132 if ($instance instanceof Secure_Passkeys_Scheduler && method_exists($instance, 'boot')) { 133 $instance->boot(); 134 134 } 135 135 } … … 139 139 * Unregister jobs 140 140 */ 141 public function unregister ()141 public function unregister_jobs() 142 142 { 143 143 $jobs = Secure_Passkeys_Loader::folder_loader(SECURE_PASSKEYS_JOBS_DIR, SECURE_PASSKEYS_PLUGIN_DIR); 144 144 145 if (!empty($jobs)) { 146 foreach ($jobs as $instance) { 147 if ($instance instanceof Secure_Passkeys_Scheduler) { 148 $instance->unregister(); 149 } 145 if (empty($jobs)) { 146 return; 147 } 148 149 foreach ($jobs as $instance) { 150 if ($instance instanceof Secure_Passkeys_Scheduler) { 151 $instance->unregister(); 150 152 } 151 153 } -
secure-passkeys/trunk/src/includes/secure-passkeys-frontend.php
r3262385 r3338906 26 26 add_action('edd_login_fields_after', [$this, 'add_to_edd_login_page']); 27 27 add_action('mepr-login-form-after-submit', [$this, 'add_to_memberpress_login_page']); 28 add_action('um_after_login_fields', [$this, 'add_to_ultimate_member_login_page'], 10005); 28 29 29 30 add_action('wp_enqueue_scripts', [$this, 'enqueue_register_script']); … … 67 68 public function add_to_woocommerce_login_page() 68 69 { 69 if (!Secure_Passkeys_Helper::get_option('display_passkey_login_woocommerce_enabled', 1)) {70 if (!Secure_Passkeys_Helper::get_option('display_passkey_login_woocommerce_enabled', 0)) { 70 71 return; 71 72 } … … 84 85 public function add_to_memberpress_login_page() 85 86 { 86 if (!Secure_Passkeys_Helper::get_option('display_passkey_login_memberpress_enabled', 1)) {87 if (!Secure_Passkeys_Helper::get_option('display_passkey_login_memberpress_enabled', 0)) { 87 88 return; 88 89 } … … 101 102 public function add_to_edd_login_page() 102 103 { 103 if (!Secure_Passkeys_Helper::get_option('display_passkey_login_edd_enabled', 1)) {104 if (!Secure_Passkeys_Helper::get_option('display_passkey_login_edd_enabled', 0)) { 104 105 return; 105 106 } … … 116 117 } 117 118 118 public function render_shortcode_login_form() 119 { 120 if (is_user_logged_in()) { 121 return; 122 } 123 124 wp_enqueue_script($this->login_handle); 125 126 wp_enqueue_style($this->login_handle); 127 128 return Secure_Passkeys_Frontend_Helper::include_view_frontend_file('login.shortcode', [], true); 119 public function add_to_ultimate_member_login_page() 120 { 121 if (!Secure_Passkeys_Helper::get_option('display_passkey_login_ultimate_member_enabled', 0)) { 122 return; 123 } 124 125 if (is_user_logged_in()) { 126 return; 127 } 128 129 wp_enqueue_script($this->login_handle); 130 131 wp_enqueue_style($this->login_handle); 132 133 return Secure_Passkeys_Frontend_Helper::include_view_frontend_file('login.ultimate_member'); 134 } 135 136 137 public function render_shortcode_login_form($atts) 138 { 139 if (is_user_logged_in()) { 140 return; 141 } 142 143 wp_enqueue_script($this->login_handle); 144 145 wp_enqueue_style($this->login_handle); 146 147 $custom_atts = apply_filters('secure_passkeys_login_form_shortcode_atts', [ 148 'extra_wrapper_classes' => '', 149 'extra_button_classes' => '' 150 ]); 151 152 $atts = shortcode_atts($custom_atts, $atts, 'secure_passkeys_login_form'); 153 154 return Secure_Passkeys_Frontend_Helper::include_view_frontend_file('login.shortcode', $atts, true); 129 155 } 130 156 -
secure-passkeys/trunk/src/languages/secure-passkeys-ar.po
r3262385 r3338906 3 3 "Project-Id-Version: Secure Passkeys\n" 4 4 "Report-Msgid-Bugs-To: \n" 5 "POT-Creation-Date: 2025-0 2-25 18:00+0200\n"6 "PO-Revision-Date: 2025-0 2-25 18:00+0200\n"5 "POT-Creation-Date: 2025-08-04 12:17+0200\n" 6 "PO-Revision-Date: 2025-08-04 12:17+0200\n" 7 7 "Last-Translator: \n" 8 8 "Language-Team: Arabic\n" … … 46 46 msgstr "تم تعطيل مفتاح المرور بنجاح" 47 47 48 #: src/ajax/secure-passkeys-adminarea-ajax.php:23 649 #: src/ajax/secure-passkeys-adminarea-ajax.php:26 148 #: src/ajax/secure-passkeys-adminarea-ajax.php:235 49 #: src/ajax/secure-passkeys-adminarea-ajax.php:260 50 50 #: src/ajax/secure-passkeys-adminarea-settings-ajax.php:121 51 51 #: src/ajax/secure-passkeys-adminarea-settings-ajax.php:145 … … 53 53 msgstr "ليس لديك صلاحيات لتقديم هذا الطلب." 54 54 55 #: src/ajax/secure-passkeys-adminarea-ajax.php:23 855 #: src/ajax/secure-passkeys-adminarea-ajax.php:237 56 56 #: src/ajax/secure-passkeys-adminarea-settings-ajax.php:123 57 #: src/ajax/secure-passkeys-frontend-ajax.php:2 2857 #: src/ajax/secure-passkeys-frontend-ajax.php:239 58 58 msgid "The request method must be POST." 59 59 msgstr "يجب أن تكون طريقة الطلب POST." 60 60 61 #: src/ajax/secure-passkeys-adminarea-ajax.php:2 4061 #: src/ajax/secure-passkeys-adminarea-ajax.php:239 62 62 #: src/ajax/secure-passkeys-adminarea-settings-ajax.php:125 63 #: src/ajax/secure-passkeys-frontend-ajax.php:2 3063 #: src/ajax/secure-passkeys-frontend-ajax.php:241 64 64 msgid "Token mismatch, please refresh the page." 65 65 msgstr "رمز الصفحة غير مطابق ، يرجى تحديث الصفحة." 66 66 67 #: src/ajax/secure-passkeys-adminarea-ajax.php:26 968 #: src/ajax/secure-passkeys-frontend-ajax.php:2 2669 #: src/ajax/secure-passkeys-frontend-ajax.php:2 4167 #: src/ajax/secure-passkeys-adminarea-ajax.php:268 68 #: src/ajax/secure-passkeys-frontend-ajax.php:237 69 #: src/ajax/secure-passkeys-frontend-ajax.php:252 70 70 msgid "You are not allowed to make this request." 71 71 msgstr "لا يمكنك تقديم هذا الطلب." … … 75 75 msgstr "تم تحديث الإعدادات بنجاح." 76 76 77 #: src/ajax/secure-passkeys-frontend-ajax.php:7 477 #: src/ajax/secure-passkeys-frontend-ajax.php:75 78 78 msgid "Passkey authentication failed. Please try again." 79 79 msgstr "فشلت مصادقة مفتاح المرور. يرجى المحاولة مرة أخرى." 80 80 81 #: src/ajax/secure-passkeys-frontend-ajax.php:15 081 #: src/ajax/secure-passkeys-frontend-ajax.php:159 82 82 #: src/utils/secure-passkeys-i18n.php:39 src/utils/secure-passkeys-i18n.php:107 83 83 msgid "The maximum number of registered passkeys has been reached." 84 84 msgstr "تم الوصول إلى الحد الأقصى لعدد مفاتيح المرور المسجلة." 85 85 86 #: src/ajax/secure-passkeys-frontend-ajax.php:1 5286 #: src/ajax/secure-passkeys-frontend-ajax.php:161 87 87 msgid "This passkey is already registered. Please use a different one." 88 88 msgstr "مفتاح المرور هذا مسجل بالفعل. يرجى استخدام مفتاح مرور آخر." 89 89 90 #: src/ajax/secure-passkeys-frontend-ajax.php:1 5491 #: src/ajax/secure-passkeys-frontend-ajax.php:1 7590 #: src/ajax/secure-passkeys-frontend-ajax.php:163 91 #: src/ajax/secure-passkeys-frontend-ajax.php:186 92 92 msgid "Failed to register the passkey. Please try again later." 93 93 msgstr "فشل تسجيل مفتاح المرور. يرجى المحاولة مرة أخرى لاحقاً." 94 94 95 #: src/ajax/secure-passkeys-frontend-ajax.php:1 6095 #: src/ajax/secure-passkeys-frontend-ajax.php:170 96 96 #: src/utils/secure-passkeys-i18n.php:52 97 97 msgid "Security key name must be at least 3 characters long." 98 98 msgstr "يجب أن يكون اسم مفتاح الأمان مكوناً من 3 أحرف على الأقل." 99 99 100 #: src/ajax/secure-passkeys-frontend-ajax.php:1 62100 #: src/ajax/secure-passkeys-frontend-ajax.php:172 101 101 msgid "Security key name must be at most 30 characters long." 102 102 msgstr "يجب ألا يزيد طول اسم مفتاح الأمان عن 30 حرفاً على الأكثر." 103 103 104 #: src/ajax/secure-passkeys-frontend-ajax.php:1 64104 #: src/ajax/secure-passkeys-frontend-ajax.php:174 105 105 #: src/utils/secure-passkeys-i18n.php:51 src/utils/secure-passkeys-i18n.php:117 106 106 msgid "Please use only letters, numbers, spaces, hyphens, or underscores." 107 107 msgstr "يُرجى استخدام الأحرف والأرقام والمسافات والواصلات والشرطات السفلية فقط." 108 108 109 #: src/ajax/secure-passkeys-frontend-ajax.php:2 09109 #: src/ajax/secure-passkeys-frontend-ajax.php:220 110 110 msgid "You do not have permission to remove this passkey." 111 111 msgstr "ليس لديك إذن لإزالة مفتاح المرور هذا." … … 137 137 msgstr "سجل النشاط" 138 138 139 #: src/models/secure-passkeys-log.php:7 2139 #: src/models/secure-passkeys-log.php:77 140 140 #: src/views/admin/vue/components/activity/app.vue.php:59 141 141 msgid "Login" 142 142 msgstr "دخول" 143 143 144 #: src/models/secure-passkeys-log.php:7 3144 #: src/models/secure-passkeys-log.php:78 145 145 #: src/views/admin/vue/components/activity/app.vue.php:62 146 146 msgid "Register" 147 147 msgstr "تسجيل" 148 148 149 #: src/models/secure-passkeys-log.php:7 4149 #: src/models/secure-passkeys-log.php:79 150 150 #: src/views/admin/vue/components/activity/app.vue.php:68 151 151 msgid "Remove" 152 152 msgstr "إزالة" 153 153 154 #: src/models/secure-passkeys-log.php: 75src/utils/secure-passkeys-i18n.php:80154 #: src/models/secure-passkeys-log.php:80 src/utils/secure-passkeys-i18n.php:80 155 155 #: src/views/admin/vue/components/activity/app.vue.php:65 156 156 #: src/views/admin/vue/components/passkeys/app.vue.php:266 … … 158 158 msgstr "حذف" 159 159 160 #: src/models/secure-passkeys-log.php: 76src/utils/secure-passkeys-i18n.php:78160 #: src/models/secure-passkeys-log.php:81 src/utils/secure-passkeys-i18n.php:78 161 161 #: src/views/admin/vue/components/activity/app.vue.php:71 162 162 #: src/views/admin/vue/components/passkeys/app.vue.php:241 … … 166 166 msgstr "تفعيل" 167 167 168 #: src/models/secure-passkeys-log.php: 77src/utils/secure-passkeys-i18n.php:79168 #: src/models/secure-passkeys-log.php:82 src/utils/secure-passkeys-i18n.php:79 169 169 #: src/views/admin/vue/components/activity/app.vue.php:74 170 170 #: src/views/admin/vue/components/passkeys/app.vue.php:248 … … 174 174 msgstr "تعطيل" 175 175 176 #: src/models/secure-passkeys-log.php:9 2176 #: src/models/secure-passkeys-log.php:97 177 177 #, php-format 178 178 msgid "User logged in using the passkey (%1$s) with the authenticator (%2$s)." … … 181 181 "(%2$s)." 182 182 183 #: src/models/secure-passkeys-log.php:9 4183 #: src/models/secure-passkeys-log.php:99 184 184 #, php-format 185 185 msgid "" … … 188 188 msgstr "تم تسجيل مفتاح المرور بنجاح مع الاسم (%1$s) باستخدام المصادقة (%2$s)." 189 189 190 #: src/models/secure-passkeys-log.php: 96190 #: src/models/secure-passkeys-log.php:101 191 191 #, php-format 192 192 msgid "Passkey (%1$s) associated with the authenticator (%2$s) was removed." 193 193 msgstr "تمت إزالة مفتاح المرور (%1$s) المرتبط بالمصادقة (%2$s)." 194 194 195 #: src/models/secure-passkeys-log.php: 98195 #: src/models/secure-passkeys-log.php:103 196 196 #, php-format 197 197 msgid "" … … 200 200 msgstr "تم حذف مفتاح المرور (%1$s) المرتبط بالمصادقة (%2$s) من قبل المسؤول." 201 201 202 #: src/models/secure-passkeys-log.php:10 0202 #: src/models/secure-passkeys-log.php:105 203 203 #, php-format 204 204 msgid "" … … 207 207 msgstr "تم تنشيط مفتاح المرور (%1$s) المرتبط بالمصادقة (%2$s) من قبل المسؤول." 208 208 209 #: src/models/secure-passkeys-log.php:10 2209 #: src/models/secure-passkeys-log.php:107 210 210 #, php-format 211 211 msgid "" … … 215 215 "تم إلغاء تنشيط مفتاح المرور (%1$s) المرتبط بالمصادقة (%2$s) من قبل المسؤول." 216 216 217 #: src/settings/secure-passkeys-advanced-settings.php:4 0217 #: src/settings/secure-passkeys-advanced-settings.php:42 218 218 msgid "The challenge cleanup period is not correct." 219 219 msgstr "الفترة الزمنية المحددة لمسح التحديات غير صحيحة." 220 220 221 #: src/settings/secure-passkeys-advanced-settings.php:4 4221 #: src/settings/secure-passkeys-advanced-settings.php:46 222 222 msgid "The log cleanup period is not correct." 223 223 msgstr "الفترة الزمنية المحددة لمسح النشاطات غير صحيحة." 224 224 225 #: src/settings/secure-passkeys-display-settings.php:4 7225 #: src/settings/secure-passkeys-display-settings.php:49 226 226 msgid "The theme does not exist." 227 227 msgstr "السمة غير موجودة." 228 228 229 #: src/settings/secure-passkeys-display-settings.php: 49229 #: src/settings/secure-passkeys-display-settings.php:51 230 230 msgid "The path associated with the theme does not exist." 231 231 msgstr "المسار المرتبط بالسمة غير موجودة." … … 235 235 msgstr "إعدادات غير صحيحة." 236 236 237 #: src/settings/secure-passkeys-general-settings.php:4 5237 #: src/settings/secure-passkeys-general-settings.php:47 238 238 msgid "The maximum number of passkeys per user must be greater than 0." 239 239 msgstr "يجب أن يكون الحد الأقصى لعدد مفاتيح المرور لكل مستخدم أكبر من 0." 240 240 241 #: src/settings/secure-passkeys-general-settings.php:4 7241 #: src/settings/secure-passkeys-general-settings.php:49 242 242 msgid "The maximum number of passkeys must be less than 10." 243 243 msgstr "الحد الأقصى لعدد مفاتيح المرور يجب أن يكون أقل من 10." 244 244 245 #: src/settings/secure-passkeys-general-settings.php:5 1245 #: src/settings/secure-passkeys-general-settings.php:53 246 246 msgid "The excluded roles must be a valid role." 247 247 msgstr "أحد المجموعات المستبعدة ليست مجموعة صحيحة." 248 248 249 #: src/settings/secure-passkeys-general-settings.php:5 5249 #: src/settings/secure-passkeys-general-settings.php:57 250 250 msgid "The login user verification must be required, preferred, or discouraged." 251 251 msgstr "" 252 252 "يجب أن يكون التحقق من تسجيل الدخول للمستخدم مطلوبًا أو مفضلًا أو غير مستحسن." 253 253 254 #: src/settings/secure-passkeys-general-settings.php: 59254 #: src/settings/secure-passkeys-general-settings.php:61 255 255 msgid "The registration timeout must be greater than 0." 256 256 msgstr "يجب أن تكون مهلة التسجيل أكبر من 0." 257 257 258 #: src/settings/secure-passkeys-general-settings.php:6 3258 #: src/settings/secure-passkeys-general-settings.php:65 259 259 msgid "The login timeout must be greater than 0." 260 260 msgstr "يجب أن تكون مهلة تسجيل الدخول أكبر من 0." … … 278 278 msgstr "YOOtheme (UiKit)" 279 279 280 #: src/utils/secure-passkeys-helper.php:14 9280 #: src/utils/secure-passkeys-helper.php:148 281 281 #, php-format 282 282 msgid "%s ago" … … 366 366 msgid "" 367 367 "This passkey can work across multiple devices - pick a nickname that will " 368 "help you identify it later. <br /> For example, the name of your password"369 " manager or account provider."368 "help you identify it later.\n" 369 " For example, the name of your password manager or account provider." 370 370 msgstr "" 371 371 "يمكن لهذا المفتاح أن يعمل عبر أجهزة متعددة - اختر اسمًا مستعارًا يساعدك في " 372 "التعرف عليه لاحقًا.<br /> على سبيل المثال، اسم مدير كلمات المرور أو مزود " 373 "الحساب الخاص بك." 372 "التعرف عليه لاحقًا.\n" 373 "\n" 374 "على سبيل المثال، اسم مدير كلمات المرور أو مزود الحساب الخاص بك." 374 375 375 376 #: src/utils/secure-passkeys-i18n.php:35 src/utils/secure-passkeys-i18n.php:102 … … 681 682 msgstr "إدارة الخيارات المتقدمة لصيانة الإضافة." 682 683 683 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:4 9684 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:48 684 685 msgid "Delete passkey challenge records older than" 685 686 msgstr "حذف سجلات تحديات مفاتيح المرور الأقدم من" 686 687 687 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:6 6688 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:10 2688 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:65 689 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:101 689 690 msgid "Never" 690 691 msgstr "أبدا" 691 692 692 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:6 9693 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:10 5693 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:68 694 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:104 694 695 msgid "Older than" 695 696 msgstr "أقدم من" 696 697 697 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:7 1698 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:10 7698 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:70 699 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:106 699 700 msgid "days" 700 701 msgstr "أيام" 701 702 702 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:7 6703 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:75 703 704 msgid "" 704 705 "Automatically removes outdated passkey challenge records to optimize database " … … 708 709 "إذا تم الضبط على \"أبداً\"، لن يتم حذف السجلات." 709 710 710 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:8 5711 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:84 711 712 msgid "Delete log records older than" 712 713 msgstr "حذف سجلات النشاطات الأقدم من" 713 714 714 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:11 2715 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:111 715 716 msgid "" 716 717 "(Not recommended) Automatically deletes outdated log records. If set to " … … 720 721 "تم ضبطه على “أبدًا”، فلن تتم إزالة السجلات." 721 722 722 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:11 5723 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:114 723 724 msgid "This results in the loss of activity log history." 724 725 msgstr "يؤدي هذا إلى فقدان ومسح سجل النشاطات." 725 726 726 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:141 727 #: src/views/admin/vue/components/settings/display-settings.vue.php:345 728 #: src/views/admin/vue/components/settings/general-settings.vue.php:274 727 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:124 728 msgid "Disable Activity Log Recording" 729 msgstr "تعطيل سجلات النشاط" 730 731 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:138 732 msgid "Disable the creation of new activity log records." 733 msgstr "منع إنشاء سجلات نشاط جديدة." 734 735 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:140 736 msgid "This will prevent new activity log records from being created." 737 msgstr "سيؤدي هذا إلى منع إنشاء سجلات نشاط جديدة." 738 739 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:165 740 #: src/views/admin/vue/components/settings/display-settings.vue.php:374 741 #: src/views/admin/vue/components/settings/general-settings.vue.php:299 729 742 msgid "Save Changes" 730 743 msgstr "حفظ التغييرات" 731 744 732 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:1 44733 #: src/views/admin/vue/components/settings/display-settings.vue.php:3 48734 #: src/views/admin/vue/components/settings/general-settings.vue.php: 277745 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:168 746 #: src/views/admin/vue/components/settings/display-settings.vue.php:377 747 #: src/views/admin/vue/components/settings/general-settings.vue.php:302 735 748 msgid "Saving..." 736 749 msgstr "جاري الحفظ…" 737 750 738 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:1 56751 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:180 739 752 msgid "Configuring Cron Jobs" 740 753 msgstr "تكوين مهام Cron" 741 754 742 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:1 57755 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:181 743 756 msgid "" 744 757 "To ensure these options work as expected, it is recommended to set up a cron " … … 750 763 "كيفية إعداد مهمة cron:" 751 764 752 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:1 61765 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:185 753 766 msgid "Log in to your web server control panel, such as cPanel or Plesk." 754 767 msgstr "" … … 756 769 "Plesk." 757 770 758 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:1 64771 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:188 759 772 msgid "Find the option to manage cron jobs and select it." 760 773 msgstr "ابحث عن خيار إدارة مهام cron jobs وحدده." 761 774 762 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:1 67775 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:191 763 776 msgid "" 764 777 "In the “Add New Cron Job” section, specify the frequency at which you want " … … 768 781 "به، على سبيل المثال، كل دقيقة." 769 782 770 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:1 70783 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:194 771 784 msgid "In the “Command” field, enter the following command:" 772 785 msgstr "في حقل “Command”، أدخل الأمر التالي:" 773 786 774 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:1 73787 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:197 775 788 msgid "Save the cron job." 776 789 msgstr "احفظ مهمة cron job." 777 790 778 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:1 75791 #: src/views/admin/vue/components/settings/advanced-settings.vue.php:199 779 792 msgid "Add the following code to your \"wp-config.php\" file:" 780 793 msgstr "أضف الكود التالي إلى ملف “wp-config.php”:" … … 834 847 #: src/views/admin/vue/components/settings/display-settings.vue.php:173 835 848 #: src/views/admin/vue/components/settings/display-settings.vue.php:202 849 #: src/views/admin/vue/components/settings/display-settings.vue.php:231 836 850 #, php-format 837 851 msgid "The %s plugin must be installed and activated to work correctly." … … 857 871 "Digital Downloads." 858 872 859 #: src/views/admin/vue/components/settings/display-settings.vue.php:215 873 #: src/views/admin/vue/components/settings/display-settings.vue.php:211 874 msgid "Login for Ultimate Member" 875 msgstr "تسجيل الدخول لـ Ultimate Member" 876 877 #: src/views/admin/vue/components/settings/display-settings.vue.php:225 878 msgid "Enable Passkey Login for Ultimate Member login form." 879 msgstr "" 880 "تمكين الدخول بمفتاح المرور لصفحة تسجيل الدخول بإستخدام نموذج دخول Ultimate " 881 "Member." 882 883 #: src/views/admin/vue/components/settings/display-settings.vue.php:244 860 884 msgid "" 861 885 "Use the following shortcodes to embed the passkey login and registration " … … 871 895 "وقد لا تحتاج إلى إدارة هذا الأمر ما لم تكن تعمل مع صفحة مخصصة." 872 896 873 #: src/views/admin/vue/components/settings/display-settings.vue.php:2 23897 #: src/views/admin/vue/components/settings/display-settings.vue.php:252 874 898 msgid "Login Short Code" 875 899 msgstr "رمز شفرة تسجيل الدخول" 876 900 877 #: src/views/admin/vue/components/settings/display-settings.vue.php:2 37901 #: src/views/admin/vue/components/settings/display-settings.vue.php:266 878 902 msgid "" 879 903 "This shortcode to embed the \"Login via Passkey\" login button,this allows " … … 883 907 "الدخول باستخدام بيانات اعتماد المفتاح المرور الخاصة بهم." 884 908 885 #: src/views/admin/vue/components/settings/display-settings.vue.php:2 39909 #: src/views/admin/vue/components/settings/display-settings.vue.php:268 886 910 msgid "If the user is already logged in, the form will not be displayed." 887 911 msgstr "إذا كان المستخدم قد قام بتسجيل الدخول بالفعل، فلن يتم عرض زر الدخول." 888 912 889 #: src/views/admin/vue/components/settings/display-settings.vue.php:2 48913 #: src/views/admin/vue/components/settings/display-settings.vue.php:277 890 914 msgid "Register Short Code" 891 915 msgstr "رمز شفرة تسجيل إنشاء رموز المرور" 892 916 893 #: src/views/admin/vue/components/settings/display-settings.vue.php:2 62917 #: src/views/admin/vue/components/settings/display-settings.vue.php:291 894 918 msgid "" 895 919 "This shortcode to embed the passkey registration form. This allows logged-in " … … 899 923 "المسجلين بإنشاء وإدارة بيانات اعتماد مفتاح المرور الخاصة بهم." 900 924 901 #: src/views/admin/vue/components/settings/display-settings.vue.php:2 64925 #: src/views/admin/vue/components/settings/display-settings.vue.php:293 902 926 msgid "If the user is not logged in, the form will not be displayed." 903 927 msgstr "إذا لم يقم المستخدم بتسجيل الدخول، فلن يتم عرض النموذج." 904 928 905 #: src/views/admin/vue/components/settings/display-settings.vue.php: 275929 #: src/views/admin/vue/components/settings/display-settings.vue.php:304 906 930 msgid "Adminarea Options" 907 931 msgstr "خيارات الواجهة الخلفية والادارة" 908 932 909 #: src/views/admin/vue/components/settings/display-settings.vue.php: 277933 #: src/views/admin/vue/components/settings/display-settings.vue.php:306 910 934 msgid "Configure the options available in the admin area." 911 935 msgstr "قم بتكوين الخيارات المتاحة في منطقة الادارة." 912 936 913 #: src/views/admin/vue/components/settings/display-settings.vue.php: 286937 #: src/views/admin/vue/components/settings/display-settings.vue.php:315 914 938 msgid "Display Passkeys in Users List" 915 939 msgstr "عرض مفاتيح المرور في قائمة المستخدمين" 916 940 917 #: src/views/admin/vue/components/settings/display-settings.vue.php:3 00941 #: src/views/admin/vue/components/settings/display-settings.vue.php:329 918 942 msgid "" 919 943 "Enable this option to show the passkeys as a column in the users list in the " … … 923 947 "الإدارة." 924 948 925 #: src/views/admin/vue/components/settings/display-settings.vue.php:3 07949 #: src/views/admin/vue/components/settings/display-settings.vue.php:336 926 950 msgid "Display Passkeys in Edit User/Profile" 927 951 msgstr "عرض مفاتيح المرور في صفحة تعديل المستخدم/الملف الشخصي" 928 952 929 #: src/views/admin/vue/components/settings/display-settings.vue.php:3 21953 #: src/views/admin/vue/components/settings/display-settings.vue.php:350 930 954 msgid "" 931 955 "Enable this option to show the passkeys on the Edit User and Profile page in " … … 981 1005 "shortscode لتسجيل مفتاح المرور." 982 1006 983 #: src/views/admin/vue/components/settings/general-settings.vue.php:134 1007 #: src/views/admin/vue/components/settings/general-settings.vue.php:131 1008 msgid "Auto Generate Security Key Name" 1009 msgstr "إنشاء اسم مفتاح الأمان تلقائياً" 1010 1011 #: src/views/admin/vue/components/settings/general-settings.vue.php:145 1012 msgid "Enable or disable the automatic generation of a security key name." 1013 msgstr "تمكين أو تعطيل الإنشاء التلقائي لاسم مفتاح الأمان." 1014 1015 #: src/views/admin/vue/components/settings/general-settings.vue.php:147 1016 msgid "" 1017 "If enabled, users will not be prompted to enter a security key name manually " 1018 "when registering a passkey." 1019 msgstr "" 1020 "في حالة التمكين، لن تتم مطالبة المستخدمين بإدخال اسم مفتاح الأمان يدوياً عند " 1021 "عملية تسجيل مفتاح مرور." 1022 1023 #: src/views/admin/vue/components/settings/general-settings.vue.php:159 984 1024 msgid "" 985 1025 "Configure the WebAuthn and Passkeys login and registration options., we " … … 991 1031 "WebAuthn." 992 1032 993 #: src/views/admin/vue/components/settings/general-settings.vue.php:1 451033 #: src/views/admin/vue/components/settings/general-settings.vue.php:170 994 1034 msgid "Exclude Existing Credentials" 995 1035 msgstr "استبعاد بيانات الاعتماد الموجودة" 996 1036 997 #: src/views/admin/vue/components/settings/general-settings.vue.php:1 591037 #: src/views/admin/vue/components/settings/general-settings.vue.php:184 998 1038 msgid "" 999 1039 "Enable this option to prevent users from registering passkeys that are " … … 1003 1043 "(موصى به: ممكّن)." 1004 1044 1005 #: src/views/admin/vue/components/settings/general-settings.vue.php:1 661045 #: src/views/admin/vue/components/settings/general-settings.vue.php:191 1006 1046 msgid "Registration Timeout" 1007 1047 msgstr "وقت مهلة التسجيل" 1008 1048 1009 #: src/views/admin/vue/components/settings/general-settings.vue.php: 1791049 #: src/views/admin/vue/components/settings/general-settings.vue.php:204 1010 1050 msgid "Set the expiration timeout for passkey registration (in minutes)." 1011 1051 msgstr "تعيين مهلة انتهاء صلاحية تسجيل مفتاح المرور (بالدقائق)." 1012 1052 1013 #: src/views/admin/vue/components/settings/general-settings.vue.php: 1861053 #: src/views/admin/vue/components/settings/general-settings.vue.php:211 1014 1054 msgid "Login Timeout" 1015 1055 msgstr "وقت مهلة الدخول" 1016 1056 1017 #: src/views/admin/vue/components/settings/general-settings.vue.php: 1991057 #: src/views/admin/vue/components/settings/general-settings.vue.php:224 1018 1058 msgid "Set the expiration timeout for passkey login (in minutes)." 1019 1059 msgstr "تعيين مهلة انتهاء صلاحية الدخول بمفتاح المرور (بالدقائق)." 1020 1060 1021 #: src/views/admin/vue/components/settings/general-settings.vue.php:2 081061 #: src/views/admin/vue/components/settings/general-settings.vue.php:233 1022 1062 msgid "Enable User Verifications" 1023 1063 msgstr "التحقق من المستخدم" 1024 1064 1025 #: src/views/admin/vue/components/settings/general-settings.vue.php:2 221065 #: src/views/admin/vue/components/settings/general-settings.vue.php:247 1026 1066 msgid "" 1027 1067 "Choose the level of user verification required during passkey registration " … … 1031 1071 "ممكّن)." 1032 1072 1033 #: src/views/admin/vue/components/settings/general-settings.vue.php:2 291073 #: src/views/admin/vue/components/settings/general-settings.vue.php:254 1034 1074 msgid "Login User Verification" 1035 1075 msgstr "التحقق من تسجيل الدخول للمستخدم" 1036 1076 1037 #: src/views/admin/vue/components/settings/general-settings.vue.php:2 401077 #: src/views/admin/vue/components/settings/general-settings.vue.php:265 1038 1078 msgid "Required" 1039 1079 msgstr "إجباري" 1040 1080 1041 #: src/views/admin/vue/components/settings/general-settings.vue.php:2 431081 #: src/views/admin/vue/components/settings/general-settings.vue.php:268 1042 1082 msgid "Preferred" 1043 1083 msgstr "مفضل" 1044 1084 1045 #: src/views/admin/vue/components/settings/general-settings.vue.php:2 461085 #: src/views/admin/vue/components/settings/general-settings.vue.php:271 1046 1086 msgid "Discouraged" 1047 1087 msgstr "معطل" 1048 1088 1049 #: src/views/admin/vue/components/settings/general-settings.vue.php:2 501089 #: src/views/admin/vue/components/settings/general-settings.vue.php:275 1050 1090 msgid "Choose the level of user verification required during passkey login." 1051 1091 msgstr "" … … 1072 1112 #: src/views/frontend/default/login.memberpress.php:14 1073 1113 #: src/views/frontend/default/login.shortcode.php:14 1114 #: src/views/frontend/default/login.ultimate_member.php:14 1074 1115 #: src/views/frontend/default/login.woocommerce.php:14 1075 1116 #: src/views/frontend/yootheme/login.edd.php:14 1076 1117 #: src/views/frontend/yootheme/login.memberpress.php:14 1077 1118 #: src/views/frontend/yootheme/login.shortcode.php:14 1119 #: src/views/frontend/yootheme/login.ultimate_member.php:14 1078 1120 #: src/views/frontend/yootheme/login.woocommerce.php:14 1079 1121 msgid "Login via Passkey.." … … 1084 1126 #: src/views/frontend/default/login.memberpress.php:15 1085 1127 #: src/views/frontend/default/login.shortcode.php:15 1128 #: src/views/frontend/default/login.ultimate_member.php:15 1086 1129 #: src/views/frontend/default/login.woocommerce.php:15 1087 1130 #: src/views/frontend/yootheme/login.edd.php:15 1088 1131 #: src/views/frontend/yootheme/login.memberpress.php:15 1089 1132 #: src/views/frontend/yootheme/login.shortcode.php:15 1133 #: src/views/frontend/yootheme/login.ultimate_member.php:15 1090 1134 #: src/views/frontend/yootheme/login.woocommerce.php:15 1091 1135 msgid "Login via Passkey" -
secure-passkeys/trunk/src/models/secure-passkeys-challenge.php
r3262385 r3338906 83 83 public function mark_as_used_challenge(string $challenge): void 84 84 { 85 $this->update([' challenge' => $challenge], ['used_at' => (new DateTime())->format('Y-m-d H:i:s')]);85 $this->update(['used_at' => (new DateTime())->format('Y-m-d H:i:s')], ['challenge' => $challenge]); 86 86 } 87 87 -
secure-passkeys/trunk/src/models/secure-passkeys-log.php
r3262385 r3338906 48 48 ?string $ip_address = null 49 49 ) { 50 51 if (Secure_Passkeys_Helper::is_stop_log_records_enabled()) { 52 return false; 53 } 54 50 55 if (is_null($ip_address)) { 51 56 $ip_address = Secure_Passkeys_Helper::get_ip_address(); -
secure-passkeys/trunk/src/settings/secure-passkeys-advanced-settings.php
r3262385 r3338906 26 26 'challenge_cleanup_days', 27 27 'log_cleanup_days', 28 'stop_log_records_enabled', 28 29 ]; 29 30 } … … 33 34 $challenge_cleanup_days = intval($_POST['settings']['challenge_cleanup_days'] ?? 0); 34 35 $log_cleanup_days = intval($_POST['settings']['log_cleanup_days'] ?? 0); 36 $stop_log_records_enabled = intval($_POST['settings']['stop_log_records_enabled'] ?? 0); 35 37 36 38 $challenge_cleanup_days_periods = apply_filters('secure_passkeys_challenge_cleanup_allowed_days_periods', [0, 30, 60, 90]); … … 47 49 $data = [ 48 50 'challenge_cleanup_days' => $challenge_cleanup_days, 49 'log_cleanup_days' => $log_cleanup_days 51 'log_cleanup_days' => $log_cleanup_days, 52 'stop_log_records_enabled' => $stop_log_records_enabled 50 53 ]; 51 54 -
secure-passkeys/trunk/src/settings/secure-passkeys-display-settings.php
r3262385 r3338906 26 26 'display_passkey_login_memberpress_enabled', 27 27 'display_passkey_login_edd_enabled', 28 'display_passkey_login_ultimate_member_enabled', 28 29 'display_passkey_users_list_enabled', 29 30 'display_passkey_edit_user_enabled', … … 38 39 $display_passkey_login_memberpress_enabled = intval($_POST['settings']['display_passkey_login_memberpress_enabled'] ?? 1); 39 40 $display_passkey_login_edd_enabled = intval($_POST['settings']['display_passkey_login_edd_enabled'] ?? 1); 41 $display_passkey_login_ultimate_member_enabled = intval($_POST['settings']['display_passkey_login_ultimate_member_enabled'] ?? 1); 40 42 $display_passkey_users_list_enabled = intval($_POST['settings']['display_passkey_users_list_enabled'] ?? 1); 41 43 $display_passkey_edit_user_enabled = intval($_POST['settings']['display_passkey_edit_user_enabled'] ?? 1); … … 56 58 'display_passkey_login_memberpress_enabled' => $display_passkey_login_memberpress_enabled, 57 59 'display_passkey_login_edd_enabled' => $display_passkey_login_edd_enabled, 60 'display_passkey_login_ultimate_member_enabled' => $display_passkey_login_ultimate_member_enabled, 58 61 'display_passkey_users_list_enabled' => $display_passkey_users_list_enabled, 59 62 'display_passkey_edit_user_enabled' => $display_passkey_edit_user_enabled, -
secure-passkeys/trunk/src/settings/secure-passkeys-general-settings.php
r3262385 r3338906 23 23 'registration_maximum_passkeys_per_user', 24 24 'excluded_roles_registration_login', 25 'auto_generate_security_key_name', 25 26 'registration_timeout', 26 27 'registration_exclude_credentials_enabled', … … 36 37 $registration_maximum_passkeys_per_user = intval($_POST['settings']['registration_maximum_passkeys_per_user'] ?? 3); 37 38 $excluded_roles_registration_login = map_deep(wp_unslash($_POST['settings']['excluded_roles_registration_login'] ?? []), 'sanitize_text_field'); 39 $auto_generate_security_key_name = intval($_POST['settings']['auto_generate_security_key_name'] ?? 0); 38 40 $registration_timeout = intval($_POST['settings']['registration_timeout'] ?? 0); 39 41 $registration_exclude_credentials_enabled = intval($_POST['settings']['registration_exclude_credentials_enabled'] ?? 1); … … 68 70 'registration_maximum_passkeys_per_user' => $registration_maximum_passkeys_per_user, 69 71 'excluded_roles_registration_login' => $excluded_roles_registration_login, 72 'auto_generate_security_key_name' => $auto_generate_security_key_name, 70 73 'registration_timeout' => $registration_timeout, 71 74 'registration_exclude_credentials_enabled' => $registration_exclude_credentials_enabled, -
secure-passkeys/trunk/src/utils/secure-passkeys-helper.php
r3262385 r3338906 73 73 return $roles; 74 74 } 75 76 75 77 76 public static function are_allowed_empty_roles(?array $roles = []) … … 167 166 $ipAddress = self::get_ip_address() ?? 'unknown'; 168 167 $acceptLanguage = sanitize_text_field(wp_unslash($_SERVER['HTTP_ACCEPT_LANGUAGE'] ?? 'unknown')); 169 $acceptEncoding = sanitize_text_field(wp_unslash($_SERVER['HTTP_ACCEPT_ENCODING'] ?? 'unknown')); 170 171 $fingerprintData = $userAgent . '|' . $ipAddress . '|' . $acceptLanguage . '|' . $acceptEncoding; 168 169 $fingerprintData = $userAgent . '|' . $ipAddress . '|' . $acceptLanguage; 172 170 173 171 $fingerprintHash = hash('sha256', $fingerprintData); 174 172 175 173 return $fingerprintHash; 174 } 175 176 public static function is_auto_generate_security_key_name_enabled(): int 177 { 178 $enabled = apply_filters( 179 'secure_passkeys_auto_generate_security_key_name_enabled', 180 self::get_option('auto_generate_security_key_name', 0) 181 ); 182 183 return intval($enabled); 184 } 185 186 public static function is_stop_log_records_enabled(): int 187 { 188 $enabled = apply_filters( 189 'secure_passkeys_stop_log_records_enabled', 190 self::get_option('stop_log_records_enabled', 0) 191 ); 192 193 return intval($enabled); 176 194 } 177 195 … … 218 236 'registration_maximum_passkeys_per_user' => 3, 219 237 'excluded_roles_registration_login' => [], 238 'auto_generate_security_key_name' => 0, 220 239 'registration_timeout' => 5, 221 240 'registration_exclude_credentials_enabled' => 1, … … 228 247 'display_passkey_login_memberpress_enabled' => 1, 229 248 'display_passkey_login_edd_enabled' => 1, 249 'display_passkey_login_ultimate_member_enabled' => 1, 230 250 'display_passkey_users_list_enabled' => 1, 231 251 'display_passkey_edit_user_enabled' => 1, 232 252 'challenge_cleanup_days' => 0, 233 253 'log_cleanup_days' => 0, 254 'stop_log_records_enabled' => 0, 234 255 ]; 235 256 } -
secure-passkeys/trunk/src/utils/secure-passkeys-i18n.php
r3262385 r3338906 32 32 'last_used' => __('Last used', 'secure-passkeys'), 33 33 'security_key_name' => __('Name your security key', 'secure-passkeys'), 34 'security_key_description' => __( 'This passkey can work across multiple devices - pick a nickname that will help you identify it later.<br /> For example, the name of your password manager or account provider.', 'secure-passkeys'),34 'security_key_description' => __("This passkey can work across multiple devices - pick a nickname that will help you identify it later.\n For example, the name of your password manager or account provider.", 'secure-passkeys'), 35 35 'security_key_name_placeholder' => __('Enter Security Key Name', 'secure-passkeys'), 36 36 'inactive' => __('Inactive', 'secure-passkeys'), … … 99 99 'last_used' => __('Last used', 'secure-passkeys'), 100 100 'security_key_name' => __('Name your security key', 'secure-passkeys'), 101 'security_key_description' => __( 'This passkey can work across multiple devices - pick a nickname that will help you identify it later.<br /> For example, the name of your password manager or account provider.', 'secure-passkeys'),101 'security_key_description' => __("This passkey can work across multiple devices - pick a nickname that will help you identify it later.\n For example, the name of your password manager or account provider.", 'secure-passkeys'), 102 102 'security_key_name_placeholder' => __('Enter Security Key Name', 'secure-passkeys'), 103 103 'inactive' => __('Inactive', 'secure-passkeys'), -
secure-passkeys/trunk/src/utils/secure-passkeys-webauthn-helper.php
r3262385 r3338906 130 130 "name" => "LogMeOnce", 131 131 "icon" => "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAyMDQ4IDIwNDgiIHdpZHRoPSIxMjgiIGhlaWdodD0iMTI4IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSg5OTEpIiBkPSJtMCAwaDcxbDI0IDggMjAgNiAxMiA1IDE1IDggMTYgMTEgMTYgMTIgMTUgMTIgMTEgOSAyOCAyNCAxMiAxMSAxMSA5IDEyIDExIDggNyAxNSAxMyAxNCAxMSAxMiAxMCAxOCAxMyAxNyAxMiAxMSA3IDI0IDE0IDMyIDE3IDI0IDExIDIxIDkgMjggMTEgMjggOSAzMyAxMCAyMiA2IDI3IDYgNTMgOSA0MyA3IDM0IDcgMjMgNiAxNiA2IDE5IDEwIDE1IDEwIDE0IDExIDIwIDIwIDEzIDE3IDEwIDE2IDggMTUgNyAxOSA1IDI1IDExIDg5IDQgMzQgMyAzNyAxIDI1djExOWwtMiAzOC0zIDM0LTUgMzYtNSAzNS02IDUwLTUgMjktMTIgNTUtMTYgNjYtMTUgNDktMTYgNTAtMTkgNTEtMTggNDMtMTIgMjgtMTcgMzYtMTUgMzEtMjQgNDQtMTAgMTgtMTEgMTgtMTUgMjUtMTUgMjMtMTAgMTYtMTQgMjAtMTAgMTQtMTUgMjItMTYgMjEtMTEgMTQtMTMgMTYtOCAxMS0xMSAxMy05IDExLTEyIDEzLTcgOC05IDEwLTcgOC0xNiAxNy04IDloLTJsLTIgNC00OSA0OS04IDctNyA3LTggNy03IDctMTEgOS0zIDNoLTJ2MmwtMTEgOS0xMSAxMC05IDctMTEgMTAtMTQgMTEtMTggMTMtMTEgOS0xMSA4LTE4IDEzLTM1IDI0LTIxIDE0LTI0IDE1LTE5IDExLTE4IDEwLTI4IDE0LTIxIDgtMjcgNy0xMiAzLTEgMWgtNDhsLTQ0LTExLTIwLTctMjAtOS0xNi04LTI0LTEzLTIxLTEzLTE1LTEwLTIwLTE0LTE2LTExLTEyLTktMTktMTQtMTMtMTAtMTYtMTItMTctMTQtMTAtOC0xNy0xNC0yNi0yMi0xMy0xMi04LTctMTYtMTUtMTctMTYtNTctNTctNy04LTEwLTEwLTctOC0xMS0xMi0xMC0xMS05LTExLTI4LTM0LTEzLTE2LTEzLTE3LTExLTE1LTE0LTE5LTEzLTE4LTEzLTE5LTEwLTE1LTEzLTIwLTEzLTIxLTE5LTMyLTE0LTI1LTE1LTI4LTIxLTQyLTE1LTMzLTE2LTM4LTE0LTM2LTEwLTI5LTctMTgtMTQtNDUtMTgtNjQtNi0yNi0xMS01Mi0xMi02My00LTI5LTYtNjItNi03Mi0zLTUyLTEtMzB2LTU5bDItNjEgMy00NyA1LTQ1IDYtMzUgNi0xOCA5LTE5IDEwLTE4IDEwLTE1IDgtMTAgNS02aDJsMi00IDgtOCAxMS05IDEwLTcgMjEtMTMgMTYtOCAxNy02IDM0LTggMzItNyA2NC0xMSA0OS05IDMwLTggMjMtOCA0Mi0xNCAyMS05IDMzLTE1IDIzLTExIDIxLTEyIDE4LTEwIDIxLTE0IDIwLTEzIDExLTggMTMtMTAgMTQtMTEgMTEtOSAxMy0xMSA4LTcgOS05aDJ2LTJsOC03IDEwLTEwaDJsMS0zIDgtNyAxMy0xMyAxMS05IDctNyAxOS0xNCAxNC05IDE5LTExIDE5LTcgMjMtNyAxMC0zeiIgZmlsbD0iI0YxODQyOSIvPgo8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDIxLDYyMikiIGQ9Im0wIDAgMjEgMSAyOCA0IDIxIDYgMjEgOCAyMCAxMSAxNiAxMSAxNSAxMyAxNCAxNHYyaDJsMTggMjQgMTAgMTggNSAxMSA1IDEzIDcgMjYgMyAxNCAxIDEwdjMybC00IDI1LTcgMjYtNyAxOC0xMCAxOS0xNCAyMS05IDEwLTcgOC0xMyAxMy0xMSA5LTEzIDktMTYgOS0xMyA1IDEgMTIgOCAzNiAxNSA2MyAxOSA4NSAxNCA2MyA0IDI1IDIgMTR2MjVsLTMgMTQtNyAxMC05IDgtMTEgNS02IDItMjEgMmgtNjhsLTgzIDFoLTMybC0xNC0zLTctNC0xMy0xMS04LTEwLTQtOC0yLTh2LTE1bDUtMzAgNy0zMiAxNS02MCAxNi03MiAxMi01MiA3LTM2IDMtMjUtNi0yLTE2LTgtMTItNy0xMi05LTEwLTktOC03LTktOS0xMS0xNC0xMS0xNy0xMC0xOS04LTIwLTYtMjAtMy0xNy0xLTl2LTMwbDMtMjAgNi0yNyA3LTIxIDE3LTMzIDExLTE1IDctOCAxMS0xMiAxNS0xMyAxNi0xMiAyMS0xMiAxOC04IDIyLTYgMTktM3oiIGZpbGw9IiNGRUZGRkUiLz4KPC9zdmc+Cg==" 132 ] 132 ], 133 "a10c6dd9-465e-4226-8198-c7c44b91c555" => [ 134 "name" => "Kaspersky Password Manager", 135 "icon" => "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzc0ODRfODc0NSkiPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMV83NDg0Xzg3NDUpIj48ZyBjbGlwLXBhdGg9InVybCgjY2xpcDJfNzQ4NF84NzQ1KSI+PHBhdGggZD0iTTI4MS45NjQgNi45NjE3MUMyNjUuODkzIC0yLjI5OTc0IDI0Ni4xMDcgLTIuMjk5NzQgMjMwLjAzNiA2Ljk2MTcxTDQ2LjAzNjUgMTEzLjAwMkMyOS45MjcxIDEyMi4yODYgMjAgMTM5LjQ2NiAyMCAxNTguMDZWMzUzLjk3MkMyMCAzNzIuNTY2IDI5LjkyNzEgMzg5Ljc0NSA0Ni4wMzY1IDM5OS4wMjlMMjMwLjAzNiA1MDUuMDdDMjQ2LjEwNyA1MTQuMzMxIDI2NS44OTMgNTE0LjMzMSAyODEuOTY0IDUwNS4wN0w0NjUuOTY0IDM5OS4wMjlDNDgyLjA3MyAzODkuNzQ1IDQ5MiAzNzIuNTY2IDQ5MiAzNTMuOTcyVjE1OC4wNkM0OTIgMTM5LjQ2NiA0ODIuMDczIDEyMi4yODYgNDY1Ljk2NCAxMTMuMDAyTDI4MS45NjQgNi45NjE3MVoiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl83NDg0Xzg3NDUpIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00NTMuOTggMTMzLjc5OEwyNjkuOTggMjcuNzU3NEMyNjEuMzI3IDIyLjc3MDQgMjUwLjY3MyAyMi43NzA0IDI0Mi4wMiAyNy43NTc0TDU4LjAxOTYgMTMzLjc5OEM0OS4zNDUzIDEzOC43OTcgNDQgMTQ4LjA0NyA0NCAxNTguMDZWMzUzLjk3MkM0NCAzNjMuOTg0IDQ5LjM0NTMgMzczLjIzNCA1OC4wMTk2IDM3OC4yMzNMMjQyLjAyIDQ4NC4yNzRDMjUwLjY3MyA0ODkuMjYxIDI2MS4zMjcgNDg5LjI2MSAyNjkuOTggNDg0LjI3NEw0NTMuOTggMzc4LjIzM0M0NjIuNjU1IDM3My4yMzQgNDY4IDM2My45ODQgNDY4IDM1My45NzJWMTU4LjA2QzQ2OCAxNDguMDQ3IDQ2Mi42NTUgMTM4Ljc5NyA0NTMuOTggMTMzLjc5OFpNMjgxLjk2NCA2Ljk2MTcxQzI2NS44OTMgLTIuMjk5NzQgMjQ2LjEwNyAtMi4yOTk3NCAyMzAuMDM2IDYuOTYxNzFMNDYuMDM2NSAxMTMuMDAyQzI5LjkyNzEgMTIyLjI4NiAyMCAxMzkuNDY2IDIwIDE1OC4wNlYzNTMuOTcyQzIwIDM3Mi41NjYgMjkuOTI3MSAzODkuNzQ1IDQ2LjAzNjUgMzk5LjAyOUwyMzAuMDM2IDUwNS4wN0MyNDYuMTA3IDUxNC4zMzEgMjY1Ljg5MyA1MTQuMzMxIDI4MS45NjQgNTA1LjA3TDQ2NS45NjQgMzk5LjAyOUM0ODIuMDczIDM4OS43NDUgNDkyIDM3Mi41NjYgNDkyIDM1My45NzJWMTU4LjA2QzQ5MiAxMzkuNDY2IDQ4Mi4wNzMgMTIyLjI4NiA0NjUuOTY0IDExMy4wMDJMMjgxLjk2NCA2Ljk2MTcxWiIgZmlsbD0iYmxhY2siLz48L2c+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yNTYgMTQwQzI0Mi43NDUgMTQwIDIzMiAxNTAuNzQ1IDIzMiAxNjRDMjMyIDE3Ny4yNTUgMjQyLjc0NSAxODggMjU2IDE4OEMyNjkuMjU1IDE4OCAyODAgMTc3LjI1NSAyODAgMTY0QzI4MCAxNTAuNzQ1IDI2OS4yNTUgMTQwIDI1NiAxNDBaTTI0OCAxNjRDMjQ4IDE1OS41ODIgMjUxLjU4MiAxNTYgMjU2IDE1NkMyNjAuNDE4IDE1NiAyNjQgMTU5LjU4MiAyNjQgMTY0QzI2NCAxNjguNDE4IDI2MC40MTggMTcyIDI1NiAxNzJDMjUxLjU4MiAxNzIgMjQ4IDE2OC40MTggMjQ4IDE2NFoiIGZpbGw9ImJsYWNrIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNzIgMTkyQzE3MiAxNDUuNjA4IDIwOS42MDggMTA4IDI1NiAxMDhDMzAyLjM5MiAxMDggMzQwIDE0NS42MDggMzQwIDE5MkMzNDAgMjI3LjA2MSAzMTguNTE5IDI1Ny4xMDUgMjg4IDI2OS42OVYzODYuNjdDMjg4IDM5Mi4zOTEgMjg0Ljk0NiAzOTcuNjc2IDI3OS45ODkgNDAwLjUzM0wyNjMuOTg5IDQwOS43NTNDMjU5LjA0NCA0MTIuNjAzIDI1Mi45NTYgNDEyLjYwMyAyNDguMDExIDQwOS43NTNMMjMyLjAxMSA0MDAuNTMzQzIyNy4wNTQgMzk3LjY3NiAyMjQgMzkyLjM5MSAyMjQgMzg2LjY3VjM3MkMyMjQgMzY5Ljg3OCAyMjQuODQzIDM2Ny44NDQgMjI2LjM0MyAzNjYuMzQzTDIzNiAzNTYuNjg2VjM1NS4zMTRMMjI2LjM0MyAzNDUuNjU3QzIyNC44NDMgMzQ0LjE1NyAyMjQgMzQyLjEyMiAyMjQgMzQwVjMzMkMyMjQgMzI5Ljg3OCAyMjQuODQzIDMyNy44NDQgMjI2LjM0MyAzMjYuMzQzTDIzNiAzMTYuNjg2VjMxNS4zMTRMMjI2LjM0MyAzMDUuNjU3QzIyNC44NDMgMzA0LjE1NyAyMjQgMzAyLjEyMiAyMjQgMzAwVjI2OS42OUMxOTMuNDgxIDI1Ny4xMDUgMTcyIDIyNy4wNjEgMTcyIDE5MlpNMjU2IDEyNEMyMTguNDQ1IDEyNCAxODggMTU0LjQ0NSAxODggMTkyQzE4OCAyMjkuNTU1IDIxOC40NDUgMjYwIDI1NiAyNjBDMjkzLjU1NSAyNjAgMzI0IDIyOS41NTUgMzI0IDE5MkMzMjQgMTU0LjQ0NSAyOTMuNTU1IDEyNCAyNTYgMTI0Wk0yNTYgMjc2QzI2MS40NzEgMjc2IDI2Ni44MiAyNzUuNDc3IDI3MiAyNzQuNDc4VjM4Ni42N0wyNTYgMzk1Ljg5TDI0MCAzODYuNjdWMzc1LjMxNEwyNDkuNjU3IDM2NS42NTdDMjUxLjE1NyAzNjQuMTU3IDI1MiAzNjIuMTIyIDI1MiAzNjBWMzUyQzI1MiAzNDkuODc4IDI1MS4xNTcgMzQ3Ljg0NCAyNDkuNjU3IDM0Ni4zNDNMMjQwIDMzNi42ODZWMzM1LjMxNEwyNDkuNjU3IDMyNS42NTdDMjUxLjE1NyAzMjQuMTU3IDI1MiAzMjIuMTIyIDI1MiAzMjBWMzEyQzI1MiAzMDkuODc4IDI1MS4xNTcgMzA3Ljg0NCAyNDkuNjU3IDMwNi4zNDNMMjQwIDI5Ni42ODZWMjc0LjQ3OEMyNDUuMTggMjc1LjQ3NyAyNTAuNTI5IDI3NiAyNTYgMjc2WiIgZmlsbD0iYmxhY2siLz48L2c+PC9nPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl83NDg0Xzg3NDUiIHgxPSIzOTMuODY1IiB5MT0iNjMuMjc5NiIgeDI9Ijk5LjIwNDMiIHkyPSI0MjkuOTk4IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzRERkY4OCIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzNERThDQSIvPjwvbGluZWFyR3JhZGllbnQ+PGNsaXBQYXRoIGlkPSJjbGlwMF83NDg0Xzg3NDUiPjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPjwvY2xpcFBhdGg+PGNsaXBQYXRoIGlkPSJjbGlwMV83NDg0Xzg3NDUiPjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPjwvY2xpcFBhdGg+PGNsaXBQYXRoIGlkPSJjbGlwMl83NDg0Xzg3NDUiPjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg==" 136 ], 137 "d350af52-0351-4ba2-acd3-dfeeadc3f764" => [ 138 "name" => "pwSafe", 139 "icon" => "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiIGlkPSJzdmcyIiB3aWR0aD0iMTc3Ljc3NzMzIiBoZWlnaHQ9IjE3Ny43NzczMyIgdmlld0JveD0iMCAwIDE3Ny43NzczMyAxNzcuNzc3MzMiIHN0eWxlPSJ6b29tOiAxOyI+PGRlZnMgaWQ9ImRlZnM2Ij48Y2xpcFBhdGggY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJjbGlwUGF0aDE2Ij48cGF0aCBkPSJNIDAsMTMyLjMzMyBIIDEzMy4zMzMgViAwIEggMCBaIiBpZD0icGF0aDE0Ij48L3BhdGg+PC9jbGlwUGF0aD48L2RlZnM+PGcgaWQ9Imc4IiB0cmFuc2Zvcm09Im1hdHJpeCgxLjMzMzMzMzMsMCwwLC0xLjMzMzMzMzMsMCwxNzYuNDQ0KSI+PGcgaWQ9ImcxMCI+PGcgaWQ9ImcxMiIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMTYpIj48ZyBpZD0iZzE4IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMTMuMTQ5NCw4NC42NjE2KSI+PHBhdGggZD0iTTAsMCBjLTkuNjIxLDE2LjI2NCAtMjMuNzA0LDI5Ljg4OCAtMzcuMjU0LDQwLjQzMyBjLTEuMDQyLDAuODEyIC0yLjA4MiwxLjYwNSAtMy4xMTQsMi4zOCBjLTEuODExLDEuMzU1IC0zLjYwMywyLjY1NCAtNS4zNjUsMy44OTYgYy0wLjUxOCwtMC4zNTYgLTEuMDM4LC0wLjcxOCAtMS41NjEsLTEuMDg0IGMtMTIuODUyLC05LjAxMiAtMjcuMjkyLC0yMS4wOTggLTM4LjU2NCwtMzUuODM2IGMtMi45NDMsLTMuODQ4IC01LjY3LC03Ljg3NiAtOC4wOTYsLTEyLjA3OCBjLTcuNDUsLTEyLjkwMiAtMTIuMDY1LC0yNy40NDEgLTE0Ljg4NSwtNDEuMzg4IGMtMS41ODIsLTcuODI0IC0yLjU5OSwtMTUuNDYyIC0zLjIzNSwtMjIuNTIxIGMxOC4xNTIsLTguNjMzIDQyLjM0NSwtMTcuMjYgNjYuNTQsLTE3LjI2IGMyMy4yNTcsMCA0Ni41MTQsNy45NzIgNjQuNDA3LDE2LjI1OSBjLTEuNiwyMC4wMzYgLTYuMjI1LDQ1LjMwNCAtMTguMzIyLDY2LjI1NyBDMC4zNjgsLTAuNjI2IDAuMTg2LC0wLjMxMyAwLDAgIiBpZD0icGF0aDIwIiBzdHlsZT0iZmlsbDojMjYzMjQ4O2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIj48L3BhdGg+PC9nPjxnIGlkPSJnMjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDk3LjE2MTEsNzQuNDk0NikiPjxwYXRoIGQ9Ik0wLDAgYy02LjQxNCwxMC44NDIgLTE1LjgwMywxOS45MjUgLTI0LjgzNSwyNi45NTUgYy0wLjY5NiwwLjU0MiAtMS4zODgsMS4wNjkgLTIuMDc3LDEuNTg3IGMtMS4yMDYsMC45MDMgLTIuNDAxLDEuNzY5IC0zLjU3NiwyLjU5NyBjLTAuMzQ2LC0wLjIzOCAtMC42OTQsLTAuNDc5IC0xLjA0MSwtMC43MjMgYy04LjU2OSwtNi4wMDggLTE4LjE5NiwtMTQuMDY1IC0yNS43MSwtMjMuODkgYy0xLjk2MiwtMi41NjYgLTMuNzgsLTUuMjUxIC01LjM5NywtOC4wNTIgYy00Ljk2NywtOC42MDEgLTguMDQzLC0xOC4yOTQgLTkuOTI0LC0yNy41OTMgYy0xLjA1NSwtNS4yMTYgLTEuNzMyLC0xMC4zMDggLTIuMTU2LC0xNS4wMTMgYzEyLjEwMiwtNS43NTUgMjguMjMxLC0xMS41MDYgNDQuMzYxLC0xMS41MDYgYzE1LjUwMywtMC4wMDEgMzEuMDA4LDUuMzE0IDQyLjkzNywxMC44MzkgQzExLjUxNiwtMzEuNDQyIDguNDMzLC0xNC41OTcgMC4zNjcsLTAuNjI3IEMwLjI0NiwtMC40MTggMC4xMjQsLTAuMjA5IDAsMCAiIGlkPSJwYXRoMjQiIHN0eWxlPSJmaWxsOiM3Zjg5YTE7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiPjwvcGF0aD48L2c+PGcgaWQ9ImcyNiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODEuNjI4OSw2NS4zMzc5KSI+PHBhdGggZD0iTTAsMC43NTAwNSBjLTMuMjA4LDUuNDIxIC03LjkwMiw5Ljk2MiAtMTIuNDIsMTMuNDc4IGMtMC4zNDcsMC4yNyAtMC42OTMsMC41MzQgLTEuMDM4LDAuNzkzIGMtMC42MDQsMC40NTIgLTEuMiwwLjg4NSAtMS43ODcsMS4yOTkgYy0wLjE3MywtMC4xMiAtMC4zNDgsLTAuMjQgLTAuNTIxLC0wLjM2MiBjLTQuMjg0LC0zLjAwNCAtOS4wOTcsLTcuMDMyIC0xMi44NTUsLTExLjk0NSBjLTAuOTgxLC0xLjI4MyAtMS44OSwtMi42MjYgLTIuNjk4LC00LjAyNyBjLTIuNDgzLC00LjI5OSAtNC4wMjIsLTkuMTQ3IC00Ljk2MiwtMTMuNzk2IGMtMC41MjcsLTIuNjA4IC0wLjg2NywtNS4xNTQgLTEuMDc4LC03LjUwNiBjNi4wNSwtMi44NzggMTQuMTE1LC01Ljc1MyAyMi4xOCwtNS43NTMgYzcuNzUyLDAgMTUuNTA0LDIuNjU3IDIxLjQ2OSw1LjQyIEM1Ljc1OCwtMTQuOTcxOTUxIDQuMjE1LC02LjU0Nzk1IDAuMTgyLDAuNDM2MDUgQzAuMTIyLDAuNTQyMDUgMC4wNjEsMC42NDYwNSAwLDAuNzUwMDUgIiBpZD0icGF0aDI4IiBzdHlsZT0iZmlsbDojZjc5NzFkO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIj48L3BhdGg+PC9nPjwvZz48L2c+PC9nPjwvc3ZnPg==" 140 ], 133 141 ]; 134 142 -
secure-passkeys/trunk/src/views/admin/vue/components/settings/advanced-settings.vue.php
r3262385 r3338906 43 43 <table class="form-table" :class="{'loading-blur': isLoading}" width="100%"> 44 44 <tbody> 45 <!-- Challenge Cleanup Settings -->46 45 <tr> 47 46 <th style="width: 200px"> … … 115 114 ><?php esc_html_e('This results in the loss of activity log history.', 'secure-passkeys'); ?></span 116 115 > 116 </p> 117 </label> 118 </td> 119 </tr> 120 121 <tr> 122 <th style="width: 200px"> 123 <label for="stop_log_records_enabled" class="inline-label"> 124 <?php esc_html_e('Disable Activity Log Recording', 'secure-passkeys'); ?> 125 </label> 126 </th> 127 <td> 128 <label for="stop_log_records_enabled"> 129 <input 130 name="stop_log_records_enabled" 131 type="checkbox" 132 id="stop_log_records_enabled" 133 v-model="settings.stop_log_records_enabled" 134 true-value="1" 135 false-value="0" 136 :disabled="submitting || isLoading" 137 /> 138 <?php esc_html_e('Disable the creation of new activity log records.', 'secure-passkeys'); ?> 139 <p class="help"> 140 <?php esc_html_e('This will prevent new activity log records from being created.', 'secure-passkeys'); ?> 117 141 </p> 118 142 </label> -
secure-passkeys/trunk/src/views/admin/vue/components/settings/display-settings.vue.php
r3262385 r3338906 206 206 </td> 207 207 </tr> 208 <tr> 209 <th style="width: 200px"> 210 <label for="display_passkey_login_ultimate_member_enabled" class="inline-label"> 211 <?php esc_html_e('Login for Ultimate Member', 'secure-passkeys'); ?> 212 </label> 213 </th> 214 <td> 215 <label for="display_passkey_login_ultimate_member_enabled"> 216 <input 217 name="display_passkey_login_ultimate_member_enabled" 218 type="checkbox" 219 id="display_passkey_login_ultimate_member_enabled" 220 v-model="settings.display_passkey_login_ultimate_member_enabled" 221 true-value="1" 222 false-value="0" 223 :disabled="submitting || isLoading" 224 /> 225 <?php esc_html_e('Enable Passkey Login for Ultimate Member login form.', 'secure-passkeys'); ?> 226 </label> 227 <div> 228 <p class="help"> 229 <?php 230 // translators: %s represents the name of the required plugin (e.g., "Ultimate Member"). 231 printf(esc_html__('The %s plugin must be installed and activated to work correctly.', 'secure-passkeys'), 'Ultimate Member'); 232 ?> 233 </p> 234 </div> 235 </td> 236 </tr> 208 237 </tbody> 209 238 </table> -
secure-passkeys/trunk/src/views/admin/vue/components/settings/general-settings.vue.php
r3262385 r3338906 125 125 </td> 126 126 </tr> 127 128 <tr> 129 <th> 130 <label for="auto_generate_security_key_name" class="inline-label" 131 ><?php esc_html_e('Auto Generate Security Key Name', 'secure-passkeys'); ?></label 132 > 133 </th> 134 <td> 135 <label for="auto_generate_security_key_name"> 136 <input 137 name="auto_generate_security_key_name" 138 type="checkbox" 139 id="auto_generate_security_key_name" 140 v-model="settings.auto_generate_security_key_name" 141 true-value="1" 142 false-value="0" 143 :disabled="submitting || isLoading" 144 /> 145 <?php esc_html_e('Enable or disable the automatic generation of a security key name.', 'secure-passkeys'); ?> 146 <p class="help"> 147 <?php esc_html_e('If enabled, users will not be prompted to enter a security key name manually when registering a passkey.', 'secure-passkeys'); ?> 148 </p> 149 </label> 150 </td> 151 </tr> 127 152 </tbody> 128 153 </table> -
secure-passkeys/trunk/src/views/admin/vue/profile.php
r3262385 r3338906 85 85 <strong>{{ i18n.security_key_name }}</strong> 86 86 <br /> 87 <span v- html="i18n.security_key_description"></span>87 <span v-text="i18n.security_key_description" class="multiline-text"></span> 88 88 </p> 89 89 <div class="input-wrapper"> -
secure-passkeys/trunk/src/views/frontend/default/login.shortcode.php
r3262385 r3338906 8 8 defined('ABSPATH') || exit; 9 9 ?> 10 <div class="secure-passkey-login-short-code-wrapper " id="secure-passkey-login-wrapper">10 <div class="secure-passkey-login-short-code-wrapper <?php echo esc_attr($extra_wrapper_classes ?? ''); ?>" id="secure-passkey-login-wrapper"> 11 11 <div id="errorMessage" class="notice notice-error" style="display: none;"></div> 12 12 <div id="successMessage" class="notice notice-success" style="display: none;"></div> 13 <button id="login-via-passkey" class="button button-large login-via-passkey ">13 <button id="login-via-passkey" class="button button-large login-via-passkey <?php echo esc_attr($extra_button_classes ?? ''); ?>"> 14 14 <span id="spinnerText" style="display: none;"><?php esc_html_e('Login via Passkey..', 'secure-passkeys') ;?></span> 15 15 <span id="buttonText"><?php esc_html_e('Login via Passkey', 'secure-passkeys') ;?></span> -
secure-passkeys/trunk/src/views/frontend/default/register.php
r3262385 r3338906 70 70 <strong>{{ i18n.security_key_name }}</strong> 71 71 <br /> 72 <span v- html="i18n.security_key_description"></span>72 <span v-text="i18n.security_key_description" class="multiline-text"></span> 73 73 </p> 74 74 <div class="input-wrapper"> -
secure-passkeys/trunk/src/views/frontend/yootheme/login.shortcode.php
r3262385 r3338906 8 8 defined('ABSPATH') || exit; 9 9 ?> 10 <div class="uk-container uk-text-center " id="secure-passkey-login-wrapper">10 <div class="uk-container uk-text-center <?php echo esc_attr($extra_wrapper_classes ?? ''); ?>" id="secure-passkey-login-wrapper"> 11 11 <div id="errorMessage" class="uk-alert-danger" uk-alert style="display: none;"></div> 12 12 <div id="successMessage" class="uk-alert-success" uk-alert style="display: none;"></div> 13 <button id="login-via-passkey" class="uk-button uk-button-default ">13 <button id="login-via-passkey" class="uk-button uk-button-default <?php echo esc_attr($extra_button_classes ?? ''); ?>"> 14 14 <span id="spinnerText" style="display: none;"><?php esc_html_e('Login via Passkey..', 'secure-passkeys'); ?></span> 15 15 <span id="buttonText"><?php esc_html_e('Login via Passkey', 'secure-passkeys'); ?></span> -
secure-passkeys/trunk/src/views/frontend/yootheme/register.php
r3262385 r3338906 55 55 <strong>{{ i18n.security_key_name }}</strong 56 56 ><br /> 57 <span v- html="i18n.security_key_description"></span>57 <span v-text="i18n.security_key_description" class="multiline-text"></span> 58 58 </p> 59 59 <div class="uk-inline uk-width-1-1">
Note: See TracChangeset
for help on using the changeset viewer.