Shield Security for WordPress - Version 14.0.0

Version Description

Download this release

Release Info

Developer paultgoodchild
Plugin Icon 128x128 Shield Security for WordPress
Version 14.0.0
Comparing to
See all releases

Code changes from version 13.0.6 to 14.0.0

Files changed (186) hide show
  1. cl.json +89 -0
  2. config/admin_access_restriction.json +3 -2
  3. config/audit_trail.json +4 -1
  4. config/autoupdates.json +4 -1
  5. config/comments_filter.json +6 -3
  6. config/data.json +51 -2
  7. config/deprecated/admin_access_restriction.php +3 -2
  8. config/deprecated/audit_trail.php +4 -1
  9. config/deprecated/autoupdates.php +4 -1
  10. config/deprecated/comments_filter.php +6 -3
  11. config/deprecated/data.php +51 -2
  12. config/deprecated/firewall.php +3 -0
  13. config/deprecated/hack_protect.php +9 -37
  14. config/deprecated/headers.php +3 -0
  15. config/deprecated/ips.php +6 -3
  16. config/deprecated/license.php +19 -16
  17. config/deprecated/lockdown.php +8 -9
  18. config/deprecated/login_protect.php +94 -36
  19. config/deprecated/plugin.php +3 -0
  20. config/deprecated/reporting.php +3 -0
  21. config/deprecated/sessions.php +2 -2
  22. config/deprecated/traffic.php +9 -6
  23. config/deprecated/user_management.php +10 -7
  24. config/firewall.json +3 -0
  25. config/hack_protect.json +9 -37
  26. config/headers.json +3 -0
  27. config/ips.json +6 -3
  28. config/license.json +19 -16
  29. config/lockdown.json +3 -0
  30. config/login_protect.json +94 -36
  31. config/plugin.json +3 -0
  32. config/reporting.json +3 -0
  33. config/sessions.json +2 -2
  34. config/traffic.json +9 -6
  35. config/user_management.json +10 -7
  36. icwp-wpsf.php +1 -1
  37. init.php +15 -7
  38. languages/wp-simple-firewall-en_GB.mo +0 -0
  39. languages/wp-simple-firewall-en_GB.po +8785 -5867
  40. languages/wp-simple-firewall-nl_NL.mo +0 -0
  41. plugin-spec.php +37 -29
  42. plugin.json +37 -29
  43. readme.txt +1 -1
  44. resources/css/plugin.css +35 -36
  45. resources/css/shield/login2fa.css +37 -0
  46. resources/js/login/u2f.js +0 -42
  47. resources/js/plugin.js +26 -12
  48. resources/js/shield/audit_trail.js +2 -0
  49. resources/js/shield/login2fa.js +144 -0
  50. resources/js/shield/notbot.js +2 -2
  51. resources/js/shield/userprofile.js +79 -2
  52. src/lib/functions/functions.php +10 -18
  53. src/lib/src/Controller/Admin/MainAdminMenu.php +10 -5
  54. src/lib/src/Controller/Ajax/Init.php +1 -1
  55. src/lib/src/Controller/Assets/Enqueue.php +3 -1
  56. src/lib/src/Controller/Assets/Paths.php +7 -1
  57. src/lib/src/Controller/Controller.php +33 -36
  58. src/lib/src/Controller/I18n/LoadTextDomain.php +3 -3
  59. src/lib/src/Databases/Common/AlignTableWithSchema.php +0 -4
  60. src/lib/src/Databases/Common/TableSchema.php +0 -2
  61. src/lib/src/Databases/Events/Common.php +0 -4
  62. src/lib/src/Functions/functions.php +68 -0
  63. src/lib/src/Modules/AuditTrail/AjaxHandler.php +1 -1
  64. src/lib/src/Modules/AuditTrail/Lib/AuditLogger.php +13 -1
  65. src/lib/src/Modules/AuditTrail/Lib/AuditMessageBuilder.php +3 -1
  66. src/lib/src/Modules/AuditTrail/Lib/LogTable/DelegateAjaxHandler.php +0 -4
  67. src/lib/src/Modules/AuditTrail/Lib/LogTable/LoadRawTableData.php +3 -4
  68. src/lib/src/Modules/AuditTrail/ModCon.php +0 -8
  69. src/lib/src/Modules/AuditTrail/WpCli.php +4 -7
  70. src/lib/src/Modules/Base/ModCon.php +8 -24
  71. src/lib/src/Modules/Base/Options.php +25 -15
  72. src/lib/src/Modules/Base/Options/BuildForDisplay.php +0 -2
  73. src/lib/src/Modules/Base/Strings.php +1 -1
  74. src/lib/src/Modules/Base/UI.php +1 -1
  75. src/lib/src/Modules/Base/WpCli.php +35 -15
  76. src/lib/src/Modules/Base/WpCli/BaseWpCliCmd.php +16 -25
  77. src/lib/src/Modules/Base/WpCli/ModuleStandard.php +16 -20
  78. src/lib/src/Modules/BaseShield/WpCli.php +12 -0
  79. src/lib/src/Modules/Data/DB/UserMeta/MetaRecords.php +45 -0
  80. src/lib/src/Modules/Data/DB/UserMeta/Ops/Common.php +24 -0
  81. src/lib/src/Modules/Data/DB/UserMeta/Ops/Delete.php +10 -0
  82. src/lib/src/Modules/Data/DB/UserMeta/Ops/Handler.php +9 -0
  83. src/lib/src/Modules/Data/DB/UserMeta/Ops/Insert.php +9 -0
  84. src/lib/src/Modules/Data/DB/UserMeta/Ops/Record.php +29 -0
  85. src/lib/src/Modules/Data/DB/UserMeta/Ops/Select.php +10 -0
  86. src/lib/src/Modules/Data/ModCon.php +6 -0
  87. src/lib/src/Modules/Events/Lib/EventsListener.php +14 -13
  88. src/lib/src/Modules/Events/Lib/EventsService.php +1 -10
  89. src/lib/src/Modules/HackGuard/Lib/FileLocker/FileLockerController.php +0 -10
  90. src/lib/src/Modules/HackGuard/Lib/Snapshots/StoreAction/Base.php +18 -0
  91. src/lib/src/Modules/HackGuard/Lib/Snapshots/StoreAction/BaseAction.php +4 -5
  92. src/lib/src/Modules/HackGuard/Lib/Snapshots/StoreAction/BaseBulk.php +3 -0
  93. src/lib/src/Modules/HackGuard/Lib/Snapshots/StoreAction/CleanStale.php +31 -0
  94. src/lib/src/Modules/HackGuard/Lib/Snapshots/StoreAction/CreateNew.php +2 -3
  95. src/lib/src/Modules/HackGuard/Lib/Snapshots/StoreAction/DeleteAll.php +5 -6
  96. src/lib/src/Modules/HackGuard/Lib/Snapshots/StoreAction/Load.php +2 -3
  97. src/lib/src/Modules/HackGuard/Lib/Snapshots/StoreAction/ScheduleBuildAll.php +18 -19
  98. src/lib/src/Modules/HackGuard/Lib/Snapshots/StoreAction/TouchAll.php +13 -11
  99. src/lib/src/Modules/HackGuard/ModCon.php +5 -19
  100. src/lib/src/Modules/HackGuard/Render/ScanResults/SectionMalware.php +1 -7
  101. src/lib/src/Modules/HackGuard/Render/ScanResults/SectionPluginThemesBase.php +0 -1
  102. src/lib/src/Modules/HackGuard/Scan/Controller/Afs.php +5 -4
  103. src/lib/src/Modules/HackGuard/Scan/Controller/Base.php +0 -24
  104. src/lib/src/Modules/HackGuard/Scan/Controller/Mal.php +0 -37
  105. src/lib/src/Modules/HackGuard/Scan/Controller/Ptg.php +0 -56
  106. src/lib/src/Modules/HackGuard/Scan/Controller/Ufc.php +0 -24
  107. src/lib/src/Modules/HackGuard/Scan/Controller/Wcf.php +0 -45
  108. src/lib/src/Modules/HackGuard/Scan/Queue/Controller.php +0 -6
  109. src/lib/src/Modules/HackGuard/Scan/Queue/QueueProcessorConsumer.php +0 -30
  110. src/lib/src/Modules/HackGuard/Scan/Utilities/ConvertLegacyResults.php +0 -201
  111. src/lib/src/Modules/HackGuard/UI.php +6 -3
  112. src/lib/src/Modules/HackGuard/Upgrade.php +0 -4
  113. src/lib/src/Modules/HackGuard/WpCli.php +4 -7
  114. src/lib/src/Modules/Headers/Processor.php +0 -15
  115. src/lib/src/Modules/IPs/Components/QueryIpBlock.php +0 -4
  116. src/lib/src/Modules/IPs/Lib/BlockRequest.php +60 -57
  117. src/lib/src/Modules/IPs/Lib/Bots/BotEventListener.php +1 -1
  118. src/lib/src/Modules/IPs/Lib/Bots/BotSignalsController.php +1 -1
  119. src/lib/src/Modules/IPs/Lib/Bots/NotBot/InsertNotBotJs.php +1 -1
  120. src/lib/src/Modules/IPs/Lib/Bots/NotBot/NotBotHandler.php +1 -1
  121. src/lib/src/Modules/IPs/Lib/Bots/ShieldNET/BuildData.php +1 -1
  122. src/lib/src/Modules/IPs/Strings.php +0 -3
  123. src/lib/src/Modules/IPs/Upgrade.php +0 -1
  124. src/lib/src/Modules/IPs/WpCli.php +6 -9
  125. src/lib/src/Modules/Integrations/Lib/Bots/Spam/Handlers/Base.php +5 -0
  126. src/lib/src/Modules/Integrations/Lib/Bots/Spam/Handlers/ContactForm7.php +13 -2
  127. src/lib/src/Modules/Integrations/Lib/Bots/Spam/Handlers/ElementorPro.php +1 -2
  128. src/lib/src/Modules/Integrations/Lib/Bots/Spam/Handlers/FluentForms.php +1 -2
  129. src/lib/src/Modules/Integrations/Lib/Bots/Spam/Handlers/KaliForms.php +1 -1
  130. src/lib/src/Modules/Integrations/Lib/Bots/Spam/Handlers/SuperForms.php +1 -1
  131. src/lib/src/Modules/Integrations/Lib/Bots/Spam/Handlers/SupportCandy.php +1 -2
  132. src/lib/src/Modules/Integrations/Lib/Bots/Spam/Handlers/WPForms.php +1 -1
  133. src/lib/src/Modules/Integrations/Options.php +0 -12
  134. src/lib/src/Modules/License/Lib/LicenseHandler.php +29 -17
  135. src/lib/src/Modules/License/Lib/WpHashes/ApiTokenManager.php +1 -1
  136. src/lib/src/Modules/License/UI.php +37 -27
  137. src/lib/src/Modules/License/WpCli.php +4 -7
  138. src/lib/src/Modules/Lockdown/ModCon.php +0 -3
  139. src/lib/src/Modules/LoginGuard/AjaxHandler.php +210 -20
  140. src/lib/src/Modules/LoginGuard/Lib/AntiBot/AntibotSetup.php +1 -1
  141. src/lib/src/Modules/LoginGuard/Lib/Rename/RenameLogin.php +39 -24
  142. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Exceptions/CouldNotValidate2FA.php +7 -0
  143. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Exceptions/LoginCancelException.php +7 -0
  144. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Exceptions/NoActiveProvidersForUserException.php +7 -0
  145. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Exceptions/NoLoginIntentForUserException.php +7 -0
  146. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Exceptions/NotValidUserException.php +7 -0
  147. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Exceptions/TooManyAttemptsException.php +7 -0
  148. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/LoginIntentPage.php +0 -170
  149. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/LoginIntentRequestCapture.php +153 -0
  150. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/LoginIntentRequestValidate.php +68 -0
  151. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/LoginRequestCapture.php +90 -0
  152. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaController.php +98 -237
  153. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaProfilesController.php +85 -33
  154. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Profiles/RenderCustomForms.php +2 -1
  155. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BackupCodes.php +20 -39
  156. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BaseProvider.php +105 -133
  157. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Email.php +92 -172
  158. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php +61 -122
  159. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/ProviderInterface.php +0 -55
  160. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Sms.php +199 -0
  161. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/U2F.php +105 -130
  162. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Yubikey.php +28 -40
  163. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Render/RenderBase.php +137 -0
  164. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Render/RenderLoginIntentPage.php +101 -0
  165. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Render/RenderWpLoginReplica.php +294 -0
  166. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/UserProfile.php +0 -33
  167. src/lib/src/Modules/LoginGuard/Lib/TwoFactor/ValidateLoginIntentRequest.php +0 -66
  168. src/lib/src/Modules/LoginGuard/ModCon.php +35 -32
  169. src/lib/src/Modules/LoginGuard/Options.php +19 -16
  170. src/lib/src/Modules/LoginGuard/Processor.php +2 -7
  171. src/lib/src/Modules/LoginGuard/Strings.php +48 -11
  172. src/lib/src/Modules/Plugin/AjaxHandler.php +6 -6
  173. src/lib/src/Modules/Plugin/Lib/Debug/Collate.php +1 -1
  174. src/lib/src/Modules/Plugin/Lib/TestCacheDirWrite.php +10 -3
  175. src/lib/src/Modules/Plugin/ModCon.php +1 -1
  176. src/lib/src/Modules/Plugin/WpCli.php +7 -10
  177. src/lib/src/Modules/SecurityAdmin/Lib/SecurityAdmin/Restrictions/Users.php +4 -4
  178. src/lib/src/Modules/SecurityAdmin/WpCli.php +7 -10
  179. src/lib/src/Modules/Traffic/Lib/TrafficTable/LoadRawTableData.php +3 -3
  180. src/lib/src/Modules/Traffic/ModCon.php +0 -8
  181. src/lib/src/Modules/UserManagement/Lib/Password/UserPasswordHandler.php +16 -19
  182. src/lib/src/Modules/UserManagement/Lib/Registration/EmailValidate.php +17 -19
  183. src/lib/src/Modules/UserManagement/Lib/Suspend/Base.php +10 -11
  184. src/lib/src/Modules/UserManagement/Lib/Suspend/Idle.php +8 -14
  185. src/lib/src/Modules/UserManagement/Lib/Suspend/PasswordExpiry.php +8 -31
  186. src/{lib/src/Modules/UserManagement/Lib/Suspend/Suspended.php → li} +0 -0
cl.json CHANGED
@@ -1,4 +1,93 @@
1
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  "13.0": {
3
  "version": "13.0",
4
  "released_at": 1636970660,
1
  {
2
+ "14.0": {
3
+ "version": "14.0",
4
+ "released_at": 1643364060,
5
+ "hrefs": {
6
+ "release": "https://shsec.io/shieldrelease140",
7
+ "upgrade": "https://shsec.io/shieldupgradeguide140"
8
+ },
9
+ "title": "Two-Factor Authentication Overhaul",
10
+ "description": [
11
+ ],
12
+ "items": [
13
+ {
14
+ "type": "new",
15
+ "pro_only": false,
16
+ "title": "WP Login Style 2FA Screen",
17
+ "description": [
18
+ "Users can complete their 2FA login using the UI they're most familiar with."
19
+ ]
20
+ },
21
+ {
22
+ "type": "new",
23
+ "pro_only": false,
24
+ "title": "Custom Redirect For Hide WP Login & Admin",
25
+ "description": [
26
+ "Rather than display an unfriendly 404 error page for the hidden login page, you can decide to redirect requests to any page you wish."
27
+ ]
28
+ },
29
+ {
30
+ "type": "new",
31
+ "pro_only": false,
32
+ "title": "Easier Access To User 2FA Settings with WP Admin Menu",
33
+ "description": [
34
+ "Users can now update their 2FA account settings from a dedicated WP admin page."
35
+ ]
36
+ },
37
+ {
38
+ "type": "new",
39
+ "pro_only": false,
40
+ "title": "Improved 2FA User Experience",
41
+ "description": [
42
+ "Smoother, faster, more reliable and more secure 2FA experience."
43
+ ]
44
+ },
45
+ {
46
+ "type": "changed",
47
+ "pro_only": false,
48
+ "title": "Mutli-factor Authentication Removed",
49
+ "description": [
50
+ "The option to force users to supply ALL two-factor authentication options has been removed."
51
+ ]
52
+ },
53
+ {
54
+ "type": "improved",
55
+ "pro_only": false,
56
+ "title": "Dedicated table for User meta information",
57
+ "description": [
58
+ "This allows for new filters and better user status on the WP Admin User page."
59
+ ]
60
+ },
61
+ {
62
+ "type": "improved",
63
+ "pro_only": false,
64
+ "title": "Updated Translations - Dutch (thanks J.P.!)",
65
+ "description": [
66
+ ]
67
+ },
68
+ {
69
+ "type": "improved",
70
+ "pro_only": false,
71
+ "title": "Further page caching mitigation for NotBot",
72
+ "description": [
73
+ ]
74
+ },
75
+ {
76
+ "type": "changed",
77
+ "pro_only": false,
78
+ "title": "Updated Bootstrap Libraries",
79
+ "description": [
80
+ ]
81
+ },
82
+ {
83
+ "type": "fixed",
84
+ "pro_only": false,
85
+ "title": "Various bugs and errors",
86
+ "description": [
87
+ ]
88
+ }
89
+ ]
90
+ },
91
  "13.0": {
92
  "version": "13.0",
93
  "released_at": 1636970660,
config/admin_access_restriction.json CHANGED
@@ -17,7 +17,8 @@
17
  "order": 20
18
  },
19
  "wpcli": {
20
- "root": "secadmin"
 
21
  },
22
  "admin_notices": {
23
  "certain-options-restricted": {
@@ -127,8 +128,8 @@
127
  "key": "admin_access_timeout",
128
  "section": "section_security_admin_settings",
129
  "advanced": true,
130
- "default": 30,
131
  "type": "integer",
 
132
  "min": 1,
133
  "link_info": "https://shsec.io/41",
134
  "link_blog": "",
17
  "order": 20
18
  },
19
  "wpcli": {
20
+ "enabled": true,
21
+ "cmd_base": "secadmin"
22
  },
23
  "admin_notices": {
24
  "certain-options-restricted": {
128
  "key": "admin_access_timeout",
129
  "section": "section_security_admin_settings",
130
  "advanced": true,
 
131
  "type": "integer",
132
+ "default": 30,
133
  "min": 1,
134
  "link_info": "https://shsec.io/41",
135
  "link_blog": "",
config/audit_trail.json CHANGED
@@ -16,6 +16,9 @@
16
  "run_if_wpcli": true,
17
  "order": 110
18
  },
 
 
 
19
  "menu_items": [
20
  {
21
  "title": "Audit Trail",
@@ -137,9 +140,9 @@
137
  {
138
  "key": "audit_trail_auto_clean",
139
  "section": "section_localdb",
 
140
  "default": 7,
141
  "min": 1,
142
- "type": "integer",
143
  "link_info": "https://shsec.io/a2",
144
  "link_blog": "https://shsec.io/a1",
145
  "beacon_id": 375,
16
  "run_if_wpcli": true,
17
  "order": 110
18
  },
19
+ "wpcli": {
20
+ "enabled": true
21
+ },
22
  "menu_items": [
23
  {
24
  "title": "Audit Trail",
140
  {
141
  "key": "audit_trail_auto_clean",
142
  "section": "section_localdb",
143
+ "type": "integer",
144
  "default": 7,
145
  "min": 1,
 
146
  "link_info": "https://shsec.io/a2",
147
  "link_blog": "https://shsec.io/a1",
148
  "beacon_id": 375,
config/autoupdates.json CHANGED
@@ -16,6 +16,9 @@
16
  "run_if_wpcli": true,
17
  "order": 60
18
  },
 
 
 
19
  "sections": [
20
  {
21
  "slug": "section_automatic_updates_for_wordpress_components",
@@ -130,8 +133,8 @@
130
  "key": "update_delay",
131
  "section": "section_options",
132
  "premium": true,
133
- "default": "0",
134
  "type": "integer",
 
135
  "link_info": "https://shsec.io/e5",
136
  "link_blog": "",
137
  "beacon_id": 137,
16
  "run_if_wpcli": true,
17
  "order": 60
18
  },
19
+ "wpcli": {
20
+ "enabled": true
21
+ },
22
  "sections": [
23
  {
24
  "slug": "section_automatic_updates_for_wordpress_components",
133
  "key": "update_delay",
134
  "section": "section_options",
135
  "premium": true,
 
136
  "type": "integer",
137
+ "default": 0,
138
  "link_info": "https://shsec.io/e5",
139
  "link_blog": "",
140
  "beacon_id": 137,
config/comments_filter.json CHANGED
@@ -16,6 +16,9 @@
16
  "run_if_wpcli": false,
17
  "order": 50
18
  },
 
 
 
19
  "admin_notices": {
20
  "akismet-running": {
21
  "id": "akismet-running",
@@ -98,9 +101,9 @@
98
  {
99
  "key": "trusted_commenter_minimum",
100
  "section": "section_bot_comment_spam_common",
 
101
  "default": 1,
102
  "min": 1,
103
- "type": "integer",
104
  "link_info": "https://shsec.io/fu",
105
  "link_blog": "",
106
  "beacon_id": 152,
@@ -309,9 +312,9 @@
309
  {
310
  "key": "comments_cooldown",
311
  "section": "section_non_ui",
 
312
  "default": 10,
313
- "min": 0,
314
- "type": "integer"
315
  },
316
  {
317
  "key": "human_spam_items",
16
  "run_if_wpcli": false,
17
  "order": 50
18
  },
19
+ "wpcli": {
20
+ "enabled": true
21
+ },
22
  "admin_notices": {
23
  "akismet-running": {
24
  "id": "akismet-running",
101
  {
102
  "key": "trusted_commenter_minimum",
103
  "section": "section_bot_comment_spam_common",
104
+ "type": "integer",
105
  "default": 1,
106
  "min": 1,
 
107
  "link_info": "https://shsec.io/fu",
108
  "link_blog": "",
109
  "beacon_id": 152,
312
  {
313
  "key": "comments_cooldown",
314
  "section": "section_non_ui",
315
+ "type": "integer",
316
  "default": 10,
317
+ "min": 0
 
318
  },
319
  {
320
  "key": "human_spam_items",
config/data.json CHANGED
@@ -23,8 +23,9 @@
23
  ],
24
  "definitions": {
25
  "db_handler_classes": {
26
- "ips": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\Data\\DB\\IPs\\Ops\\Handler",
27
- "req_logs": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\Data\\DB\\ReqLogs\\Ops\\Handler"
 
28
  },
29
  "db_table_ips": {
30
  "autoexpire": 0,
@@ -68,6 +69,54 @@
68
  "macro_type": "meta"
69
  }
70
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
  }
72
  }
73
  }
23
  ],
24
  "definitions": {
25
  "db_handler_classes": {
26
+ "ips": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\Data\\DB\\IPs\\Ops\\Handler",
27
+ "req_logs": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\Data\\DB\\ReqLogs\\Ops\\Handler",
28
+ "user_meta": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\Data\\DB\\UserMeta\\Ops\\Handler"
29
  },
30
  "db_table_ips": {
31
  "autoexpire": 0,
69
  "macro_type": "meta"
70
  }
71
  }
72
+ },
73
+ "db_table_user_meta": {
74
+ "slug": "user_meta",
75
+ "autoexpire": 0,
76
+ "has_updated_at": true,
77
+ "has_deleted_at": false,
78
+ "cols_custom": {
79
+ "user_id": {
80
+ "macro_type": "unsigned_int",
81
+ "type": "bigint",
82
+ "length": 11,
83
+ "attr": [
84
+ "UNIQUE"
85
+ ]
86
+ }
87
+ },
88
+ "cols_timestamps": {
89
+ "backupcode_ready_at": {
90
+ "comment": "Backup Code Ready"
91
+ },
92
+ "email_ready_at": {
93
+ "comment": "Email Ready"
94
+ },
95
+ "ga_ready_at": {
96
+ "comment": "Google Auth Ready"
97
+ },
98
+ "u2f_ready_at": {
99
+ "comment": "U2F Ready"
100
+ },
101
+ "yubi_ready_at": {
102
+ "comment": "Yubikey Ready"
103
+ },
104
+ "first_seen_at": {
105
+ "comment": "User First Seen"
106
+ },
107
+ "last_login_at": {
108
+ "comment": "Last Login At"
109
+ },
110
+ "last_2fa_verified_at": {
111
+ "comment": "Last 2FA Verified"
112
+ },
113
+ "hard_suspended_at": {
114
+ "comment": "Hard Suspend"
115
+ },
116
+ "pass_started_at": {
117
+ "comment": "Password First Seen or Set"
118
+ }
119
+ }
120
  }
121
  }
122
  }
config/deprecated/admin_access_restriction.php CHANGED
@@ -17,7 +17,8 @@
17
  "order": 20
18
  },
19
  "wpcli": {
20
- "root": "secadmin"
 
21
  },
22
  "admin_notices": {
23
  "certain-options-restricted": {
@@ -127,8 +128,8 @@
127
  "key": "admin_access_timeout",
128
  "section": "section_security_admin_settings",
129
  "advanced": true,
130
- "default": 30,
131
  "type": "integer",
 
132
  "min": 1,
133
  "link_info": "https://shsec.io/41",
134
  "link_blog": "",
17
  "order": 20
18
  },
19
  "wpcli": {
20
+ "enabled": true,
21
+ "cmd_base": "secadmin"
22
  },
23
  "admin_notices": {
24
  "certain-options-restricted": {
128
  "key": "admin_access_timeout",
129
  "section": "section_security_admin_settings",
130
  "advanced": true,
 
131
  "type": "integer",
132
+ "default": 30,
133
  "min": 1,
134
  "link_info": "https://shsec.io/41",
135
  "link_blog": "",
config/deprecated/audit_trail.php CHANGED
@@ -16,6 +16,9 @@
16
  "run_if_wpcli": true,
17
  "order": 110
18
  },
 
 
 
19
  "menu_items": [
20
  {
21
  "title": "Audit Trail",
@@ -137,9 +140,9 @@
137
  {
138
  "key": "audit_trail_auto_clean",
139
  "section": "section_localdb",
 
140
  "default": 7,
141
  "min": 1,
142
- "type": "integer",
143
  "link_info": "https://shsec.io/a2",
144
  "link_blog": "https://shsec.io/a1",
145
  "beacon_id": 375,
16
  "run_if_wpcli": true,
17
  "order": 110
18
  },
19
+ "wpcli": {
20
+ "enabled": true
21
+ },
22
  "menu_items": [
23
  {
24
  "title": "Audit Trail",
140
  {
141
  "key": "audit_trail_auto_clean",
142
  "section": "section_localdb",
143
+ "type": "integer",
144
  "default": 7,
145
  "min": 1,
 
146
  "link_info": "https://shsec.io/a2",
147
  "link_blog": "https://shsec.io/a1",
148
  "beacon_id": 375,
config/deprecated/autoupdates.php CHANGED
@@ -16,6 +16,9 @@
16
  "run_if_wpcli": true,
17
  "order": 60
18
  },
 
 
 
19
  "sections": [
20
  {
21
  "slug": "section_automatic_updates_for_wordpress_components",
@@ -130,8 +133,8 @@
130
  "key": "update_delay",
131
  "section": "section_options",
132
  "premium": true,
133
- "default": "0",
134
  "type": "integer",
 
135
  "link_info": "https://shsec.io/e5",
136
  "link_blog": "",
137
  "beacon_id": 137,
16
  "run_if_wpcli": true,
17
  "order": 60
18
  },
19
+ "wpcli": {
20
+ "enabled": true
21
+ },
22
  "sections": [
23
  {
24
  "slug": "section_automatic_updates_for_wordpress_components",
133
  "key": "update_delay",
134
  "section": "section_options",
135
  "premium": true,
 
136
  "type": "integer",
137
+ "default": 0,
138
  "link_info": "https://shsec.io/e5",
139
  "link_blog": "",
140
  "beacon_id": 137,
config/deprecated/comments_filter.php CHANGED
@@ -16,6 +16,9 @@
16
  "run_if_wpcli": false,
17
  "order": 50
18
  },
 
 
 
19
  "admin_notices": {
20
  "akismet-running": {
21
  "id": "akismet-running",
@@ -98,9 +101,9 @@
98
  {
99
  "key": "trusted_commenter_minimum",
100
  "section": "section_bot_comment_spam_common",
 
101
  "default": 1,
102
  "min": 1,
103
- "type": "integer",
104
  "link_info": "https://shsec.io/fu",
105
  "link_blog": "",
106
  "beacon_id": 152,
@@ -309,9 +312,9 @@
309
  {
310
  "key": "comments_cooldown",
311
  "section": "section_non_ui",
 
312
  "default": 10,
313
- "min": 0,
314
- "type": "integer"
315
  },
316
  {
317
  "key": "human_spam_items",
16
  "run_if_wpcli": false,
17
  "order": 50
18
  },
19
+ "wpcli": {
20
+ "enabled": true
21
+ },
22
  "admin_notices": {
23
  "akismet-running": {
24
  "id": "akismet-running",
101
  {
102
  "key": "trusted_commenter_minimum",
103
  "section": "section_bot_comment_spam_common",
104
+ "type": "integer",
105
  "default": 1,
106
  "min": 1,
 
107
  "link_info": "https://shsec.io/fu",
108
  "link_blog": "",
109
  "beacon_id": 152,
312
  {
313
  "key": "comments_cooldown",
314
  "section": "section_non_ui",
315
+ "type": "integer",
316
  "default": 10,
317
+ "min": 0
 
318
  },
319
  {
320
  "key": "human_spam_items",
config/deprecated/data.php CHANGED
@@ -23,8 +23,9 @@
23
  ],
24
  "definitions": {
25
  "db_handler_classes": {
26
- "ips": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\Data\\DB\\IPs\\Ops\\Handler",
27
- "req_logs": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\Data\\DB\\ReqLogs\\Ops\\Handler"
 
28
  },
29
  "db_table_ips": {
30
  "autoexpire": 0,
@@ -68,6 +69,54 @@
68
  "macro_type": "meta"
69
  }
70
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
  }
72
  }
73
  }
23
  ],
24
  "definitions": {
25
  "db_handler_classes": {
26
+ "ips": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\Data\\DB\\IPs\\Ops\\Handler",
27
+ "req_logs": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\Data\\DB\\ReqLogs\\Ops\\Handler",
28
+ "user_meta": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Modules\\Data\\DB\\UserMeta\\Ops\\Handler"
29
  },
30
  "db_table_ips": {
31
  "autoexpire": 0,
69
  "macro_type": "meta"
70
  }
71
  }
72
+ },
73
+ "db_table_user_meta": {
74
+ "slug": "user_meta",
75
+ "autoexpire": 0,
76
+ "has_updated_at": true,
77
+ "has_deleted_at": false,
78
+ "cols_custom": {
79
+ "user_id": {
80
+ "macro_type": "unsigned_int",
81
+ "type": "bigint",
82
+ "length": 11,
83
+ "attr": [
84
+ "UNIQUE"
85
+ ]
86
+ }
87
+ },
88
+ "cols_timestamps": {
89
+ "backupcode_ready_at": {
90
+ "comment": "Backup Code Ready"
91
+ },
92
+ "email_ready_at": {
93
+ "comment": "Email Ready"
94
+ },
95
+ "ga_ready_at": {
96
+ "comment": "Google Auth Ready"
97
+ },
98
+ "u2f_ready_at": {
99
+ "comment": "U2F Ready"
100
+ },
101
+ "yubi_ready_at": {
102
+ "comment": "Yubikey Ready"
103
+ },
104
+ "first_seen_at": {
105
+ "comment": "User First Seen"
106
+ },
107
+ "last_login_at": {
108
+ "comment": "Last Login At"
109
+ },
110
+ "last_2fa_verified_at": {
111
+ "comment": "Last 2FA Verified"
112
+ },
113
+ "hard_suspended_at": {
114
+ "comment": "Hard Suspend"
115
+ },
116
+ "pass_started_at": {
117
+ "comment": "Password First Seen or Set"
118
+ }
119
+ }
120
  }
121
  }
122
  }
config/deprecated/firewall.php CHANGED
@@ -16,6 +16,9 @@
16
  "run_if_wpcli": false,
17
  "order": 30
18
  },
 
 
 
19
  "sections": [
20
  {
21
  "slug": "section_firewall_blocking_options",
16
  "run_if_wpcli": false,
17
  "order": 30
18
  },
19
+ "wpcli": {
20
+ "enabled": true
21
+ },
22
  "sections": [
23
  {
24
  "slug": "section_firewall_blocking_options",
config/deprecated/hack_protect.php CHANGED
@@ -17,7 +17,8 @@
17
  "run_if_wpcli": true
18
  },
19
  "wpcli": {
20
- "root": "hack_guard"
 
21
  },
22
  "menu_items": [
23
  {
@@ -358,18 +359,18 @@
358
  {
359
  "key": "realtime_scan_last_at",
360
  "section": "section_non_ui",
361
- "transferable": false,
362
- "tracking_exclude": true,
363
  "type": "integer",
364
- "default": 0
 
 
365
  },
366
  {
367
  "key": "legacy_db_conversion_at",
368
  "section": "section_non_ui",
369
- "transferable": false,
370
- "tracking_exclude": true,
371
  "type": "integer",
372
- "default": 0
 
 
373
  }
374
  ],
375
  "definitions": {
@@ -539,9 +540,7 @@
539
  }
540
  },
541
  "db_classes": {
542
- "filelocker": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Databases\\FileLocker\\Handler",
543
- "scanner": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Databases\\Scanner\\Handler",
544
- "scanq": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Databases\\ScanQueue\\Handler"
545
  },
546
  "db_table_filelocker": {
547
  "slug": "filelocker",
@@ -559,33 +558,6 @@
559
  "notified_at": "Notification Sent"
560
  }
561
  },
562
- "db_table_scanner": {
563
- "slug": "scanner",
564
- "cols_custom": {
565
- "hash": "varchar(32) NOT NULL DEFAULT '' COMMENT 'Unique Item Hash'",
566
- "meta": "text COMMENT 'Relevant Item Data'",
567
- "scan": "varchar(10) NOT NULL DEFAULT 0 COMMENT 'Scan Type'",
568
- "severity": "int(3) NOT NULL DEFAULT 1 COMMENT 'Severity'"
569
- },
570
- "cols_timestamps": {
571
- "ignored_at": "Scan Result Ignored",
572
- "notified_at": "Scan Notifiation Sent",
573
- "attempt_repair_at": "Attempted Repair At"
574
- }
575
- },
576
- "db_table_scanq": {
577
- "slug": "scanq",
578
- "cols_custom": {
579
- "scan": "varchar(3) NOT NULL DEFAULT '' COMMENT 'Scan Slug'",
580
- "items": "text COMMENT 'Array of scan items'",
581
- "results": "text COMMENT 'Array of results'",
582
- "meta": "text COMMENT 'Meta Data'"
583
- },
584
- "cols_timestamps": {
585
- "started_at": "Scan Started",
586
- "finished_at": "Scan Completed"
587
- }
588
- },
589
  "table_name_filelocker": "filelocker",
590
  "url_mal_sigs_simple": "https://raw.githubusercontent.com/scr34m/php-malware-scanner/master/definitions/patterns_raw.txt",
591
  "url_mal_sigs_regex": "https://raw.githubusercontent.com/scr34m/php-malware-scanner/master/definitions/patterns_re.txt",
17
  "run_if_wpcli": true
18
  },
19
  "wpcli": {
20
+ "enabled": true,
21
+ "root": "hack_guard"
22
  },
23
  "menu_items": [
24
  {
359
  {
360
  "key": "realtime_scan_last_at",
361
  "section": "section_non_ui",
 
 
362
  "type": "integer",
363
+ "default": 0,
364
+ "transferable": false,
365
+ "tracking_exclude": true
366
  },
367
  {
368
  "key": "legacy_db_conversion_at",
369
  "section": "section_non_ui",
 
 
370
  "type": "integer",
371
+ "default": 0,
372
+ "transferable": false,
373
+ "tracking_exclude": true
374
  }
375
  ],
376
  "definitions": {
540
  }
541
  },
542
  "db_classes": {
543
+ "filelocker": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Databases\\FileLocker\\Handler"
 
 
544
  },
545
  "db_table_filelocker": {
546
  "slug": "filelocker",
558
  "notified_at": "Notification Sent"
559
  }
560
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
561
  "table_name_filelocker": "filelocker",
562
  "url_mal_sigs_simple": "https://raw.githubusercontent.com/scr34m/php-malware-scanner/master/definitions/patterns_raw.txt",
563
  "url_mal_sigs_regex": "https://raw.githubusercontent.com/scr34m/php-malware-scanner/master/definitions/patterns_re.txt",
config/deprecated/headers.php CHANGED
@@ -16,6 +16,9 @@
16
  "run_if_wpcli": false,
17
  "order": 80
18
  },
 
 
 
19
  "sections": [
20
  {
21
  "primary": true,
16
  "run_if_wpcli": false,
17
  "order": 80
18
  },
19
+ "wpcli": {
20
+ "enabled": true
21
+ },
22
  "sections": [
23
  {
24
  "primary": true,
config/deprecated/ips.php CHANGED
@@ -16,6 +16,9 @@
16
  "run_if_wpcli": false,
17
  "order": 100
18
  },
 
 
 
19
  "menu_items": [
20
  {
21
  "title": "IP Manager",
@@ -154,8 +157,8 @@
154
  {
155
  "key": "antibot_high_reputation_minimum",
156
  "section": "section_antibot",
157
- "default": 200,
158
  "type": "integer",
 
159
  "min": 0,
160
  "link_info": "https://shsec.io/jy",
161
  "link_blog": "https://shsec.io/jz",
@@ -180,8 +183,8 @@
180
  {
181
  "key": "transgression_limit",
182
  "section": "section_auto_black_list",
183
- "default": 10,
184
  "type": "integer",
 
185
  "link_info": "https://shsec.io/wpsf24",
186
  "link_blog": "https://shsec.io/wpsf26",
187
  "beacon_id": 207,
@@ -715,7 +718,7 @@
715
  }
716
  },
717
  "db_classes": {
718
- "ip_lists": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Databases\\IPs\\Handler"
719
  },
720
  "ip_lists_table_name": "ip_lists",
721
  "db_table_ip_lists": {
16
  "run_if_wpcli": false,
17
  "order": 100
18
  },
19
+ "wpcli": {
20
+ "enabled": true
21
+ },
22
  "menu_items": [
23
  {
24
  "title": "IP Manager",
157
  {
158
  "key": "antibot_high_reputation_minimum",
159
  "section": "section_antibot",
 
160
  "type": "integer",
161
+ "default": 200,
162
  "min": 0,
163
  "link_info": "https://shsec.io/jy",
164
  "link_blog": "https://shsec.io/jz",
183
  {
184
  "key": "transgression_limit",
185
  "section": "section_auto_black_list",
 
186
  "type": "integer",
187
+ "default": 10,
188
  "link_info": "https://shsec.io/wpsf24",
189
  "link_blog": "https://shsec.io/wpsf26",
190
  "beacon_id": 207,
718
  }
719
  },
720
  "db_classes": {
721
+ "ip_lists": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Databases\\IPs\\Handler"
722
  },
723
  "ip_lists_table_name": "ip_lists",
724
  "db_table_ip_lists": {
config/deprecated/license.php CHANGED
@@ -16,6 +16,9 @@
16
  "run_if_verified_bot": true,
17
  "run_if_wpcli": true
18
  },
 
 
 
19
  "admin_notices": {
20
  "wphashes-token-fail": {
21
  "id": "wphashes-token-fail",
@@ -60,37 +63,37 @@
60
  {
61
  "key": "license_activated_at",
62
  "section": "section_non_ui",
63
- "transferable": false,
64
  "type": "integer",
65
- "default": 0
 
66
  },
67
  {
68
  "key": "license_deactivated_at",
69
  "section": "section_non_ui",
70
- "transferable": false,
71
  "type": "integer",
72
- "default": 0
 
73
  },
74
  {
75
  "key": "license_last_checked_at",
76
  "section": "section_non_ui",
77
- "transferable": false,
78
  "type": "integer",
79
- "default": 0
 
80
  },
81
  {
82
  "key": "last_warning_email_sent_at",
83
  "section": "section_non_ui",
84
- "transferable": false,
85
  "type": "integer",
86
- "default": 0
 
87
  },
88
  {
89
  "key": "last_deactivated_email_sent_at",
90
  "section": "section_non_ui",
91
- "transferable": false,
92
  "type": "integer",
93
- "default": 0
 
94
  },
95
  {
96
  "key": "last_errors",
@@ -102,10 +105,10 @@
102
  {
103
  "key": "last_error_at",
104
  "section": "section_non_ui",
105
- "sensitive": true,
106
- "transferable": false,
107
  "type": "integer",
108
- "default": 0
 
 
109
  },
110
  {
111
  "key": "keyless_handshake_hash",
@@ -118,10 +121,10 @@
118
  {
119
  "key": "keyless_handshake_until",
120
  "section": "section_non_ui",
121
- "sensitive": true,
122
- "transferable": false,
123
  "type": "integer",
124
- "default": 0
 
 
125
  },
126
  {
127
  "key": "license_data",
16
  "run_if_verified_bot": true,
17
  "run_if_wpcli": true
18
  },
19
+ "wpcli": {
20
+ "enabled": true
21
+ },
22
  "admin_notices": {
23
  "wphashes-token-fail": {
24
  "id": "wphashes-token-fail",
63
  {
64
  "key": "license_activated_at",
65
  "section": "section_non_ui",
 
66
  "type": "integer",
67
+ "default": 0,
68
+ "transferable": false
69
  },
70
  {
71
  "key": "license_deactivated_at",
72
  "section": "section_non_ui",
 
73
  "type": "integer",
74
+ "default": 0,
75
+ "transferable": false
76
  },
77
  {
78
  "key": "license_last_checked_at",
79
  "section": "section_non_ui",
 
80
  "type": "integer",
81
+ "default": 0,
82
+ "transferable": false
83
  },
84
  {
85
  "key": "last_warning_email_sent_at",
86
  "section": "section_non_ui",
 
87
  "type": "integer",
88
+ "default": 0,
89
+ "transferable": false
90
  },
91
  {
92
  "key": "last_deactivated_email_sent_at",
93
  "section": "section_non_ui",
 
94
  "type": "integer",
95
+ "default": 0,
96
+ "transferable": false
97
  },
98
  {
99
  "key": "last_errors",
105
  {
106
  "key": "last_error_at",
107
  "section": "section_non_ui",
 
 
108
  "type": "integer",
109
+ "default": 0,
110
+ "sensitive": true,
111
+ "transferable": false
112
  },
113
  {
114
  "key": "keyless_handshake_hash",
121
  {
122
  "key": "keyless_handshake_until",
123
  "section": "section_non_ui",
 
 
124
  "type": "integer",
125
+ "default": 0,
126
+ "sensitive": true,
127
+ "transferable": false
128
  },
129
  {
130
  "key": "license_data",
config/deprecated/lockdown.php CHANGED
@@ -16,6 +16,9 @@
16
  "run_if_wpcli": false,
17
  "order": 90
18
  },
 
 
 
19
  "sections": [
20
  {
21
  "primary": true,
@@ -103,11 +106,14 @@
103
  },
104
  {
105
  "key": "api_namespace_exclusions",
106
- "section": "section_non_ui",
107
  "default": [
108
  "contact-form-7",
109
  "jetpack",
110
- "woocommerce"
 
 
 
111
  ],
112
  "type": "array",
113
  "link_info": "",
@@ -175,13 +181,6 @@
175
  }
176
  ],
177
  "definitions": {
178
- "default_restapi_exclusions": [
179
- "contact-form-7",
180
- "jetpack",
181
- "tho",
182
- "wpstatistics",
183
- "woocommerce"
184
- ],
185
  "events": {
186
  "block_anonymous_restapi": {
187
  "audit_params": [
16
  "run_if_wpcli": false,
17
  "order": 90
18
  },
19
+ "wpcli": {
20
+ "enabled": true
21
+ },
22
  "sections": [
23
  {
24
  "primary": true,
106
  },
107
  {
108
  "key": "api_namespace_exclusions",
109
+ "section": "section_apixml",
110
  "default": [
111
  "contact-form-7",
112
  "jetpack",
113
+ "tho",
114
+ "woocommerce",
115
+ "tribe",
116
+ "wpstatistics"
117
  ],
118
  "type": "array",
119
  "link_info": "",
181
  }
182
  ],
183
  "definitions": {
 
 
 
 
 
 
 
184
  "events": {
185
  "block_anonymous_restapi": {
186
  "audit_params": [
config/deprecated/login_protect.php CHANGED
@@ -16,6 +16,9 @@
16
  "run_if_wpcli": false,
17
  "order": 40
18
  },
 
 
 
19
  "admin_notices": {
20
  "email-verification-sent": {
21
  "id": "email-verification-sent",
@@ -142,33 +145,81 @@
142
  "link_info": "https://shsec.io/5q",
143
  "link_blog": "https://shsec.io/5r",
144
  "beacon_id": 316,
145
- "name": "Hide Login Page",
146
- "summary": "Rename The WordPress Login Page",
147
  "description": "Creating a path here will disable your 'wp-login.php'. Only letters and numbers are permitted: abc123"
148
  },
149
  {
150
- "key": "enable_chained_authentication",
151
- "section": "section_multifactor_authentication",
152
- "default": "N",
153
- "type": "checkbox",
154
- "link_info": "https://shsec.io/9r",
155
- "link_blog": "https://shsec.io/84",
156
- "beacon_id": 326,
157
- "name": "Multi-Factor Authentication",
158
- "summary": "Require All Active Authentication Factors",
159
- "description": "When enabled, all multi-factor authentication methods will be applied to a user login. Disable to only require one to pass."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
160
  },
161
  {
162
  "key": "mfa_skip",
163
  "section": "section_multifactor_authentication",
164
  "premium": true,
 
165
  "default": 0,
166
  "min": 0,
167
- "type": "integer",
168
  "link_info": "https://shsec.io/b1",
169
  "link_blog": "",
170
  "beacon_id": 141,
171
- "name": "Multi-Factor Bypass",
172
  "summary": "A User Can Bypass Multi-Factor Authentication (MFA) For The Set Number Of Days",
173
  "description": "Enter the number of days a user can bypass future MFA after a successful MFA-login. 0 to disable."
174
  },
@@ -197,6 +248,19 @@
197
  "summary": "Allow Users To Use Google Authenticator",
198
  "description": "When enabled, users will have the option to add Google Authenticator to their WordPress user profile."
199
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
200
  {
201
  "key": "enable_email_authentication",
202
  "section": "section_2fa_email",
@@ -210,22 +274,22 @@
210
  "description": "All users will be required to verify their login by email-based two-factor authentication."
211
  },
212
  {
213
- "key": "two_factor_auth_user_roles",
214
- "section": "section_2fa_email",
215
- "advanced": true,
216
- "type": "array",
217
- "default": [
218
  "contributor",
219
  "author",
220
  "editor",
221
  "administrator"
222
  ],
223
- "link_info": "https://shsec.io/4v",
224
- "link_blog": "",
225
- "beacon_id": 243,
226
- "name": "Enforce - Email Authentication",
227
- "summary": "All User Roles Subject To Email Authentication",
228
- "description": "Enforces email-based authentication on all users with the selected roles. Note: This setting only applies to email authentication."
229
  },
230
  {
231
  "key": "email_any_user_set",
@@ -287,9 +351,9 @@
287
  {
288
  "key": "login_limit_interval",
289
  "section": "section_brute_force_login_protection",
290
- "default": "5",
291
- "min": 0,
292
  "type": "integer",
 
 
293
  "link_info": "https://shsec.io/3q",
294
  "link_blog": "https://shsec.io/9o",
295
  "beacon_id": 242,
@@ -448,18 +512,12 @@
448
  "sensitive": true,
449
  "type": "text",
450
  "default": ""
451
- },
452
- {
453
- "key": "use_login_intent_page",
454
- "section": "section_non_ui",
455
- "transferable": false,
456
- "type": "boolean",
457
- "value": true
458
  }
459
  ],
460
  "definitions": {
461
- "login_intent_timeout": 5,
462
- "events": {
 
463
  "2fa_verify_success": {
464
  "audit_params": [
465
  "user_login",
16
  "run_if_wpcli": false,
17
  "order": 40
18
  },
19
+ "wpcli": {
20
+ "enabled": true
21
+ },
22
  "admin_notices": {
23
  "email-verification-sent": {
24
  "id": "email-verification-sent",
145
  "link_info": "https://shsec.io/5q",
146
  "link_blog": "https://shsec.io/5r",
147
  "beacon_id": 316,
148
+ "name": "Hide WP Login & Admin",
149
+ "summary": "Hide The WordPress Login And Admin Areas",
150
  "description": "Creating a path here will disable your 'wp-login.php'. Only letters and numbers are permitted: abc123"
151
  },
152
  {
153
+ "key": "rename_wplogin_redirect",
154
+ "section": "section_rename_wplogin",
155
+ "advanced": true,
156
+ "sensitive": true,
157
+ "default": "",
158
+ "type": "text",
159
+ "link_info": "https://shsec.io/5q",
160
+ "link_blog": "https://shsec.io/5r",
161
+ "beacon_id": 455,
162
+ "name": "WP Login & Admin Redirect",
163
+ "summary": "Automatic Redirect URL For Hidden Pages",
164
+ "description": "Automatically redirect requests to this location for the hidden pages."
165
+ },
166
+ {
167
+ "key": "mfa_verify_page",
168
+ "section": "section_multifactor_authentication",
169
+ "default": "custom_shield",
170
+ "type": "select",
171
+ "value_options": [
172
+ {
173
+ "value_key": "custom_shield",
174
+ "text": "Custom Shield MFA Page"
175
+ },
176
+ {
177
+ "value_key": "wp_login",
178
+ "text": "WP Login Page (beta)"
179
+ }
180
+ ],
181
+ "link_info": "",
182
+ "link_blog": "",
183
+ "beacon_id": 0,
184
+ "name": "MFA Verification Page",
185
+ "summary": "Type Of MFA Verification Page",
186
+ "description": "Choose the page type for MFA verification"
187
+ },
188
+ {
189
+ "key": "mfa_user_setup_pages",
190
+ "section": "section_multifactor_authentication",
191
+ "type": "multiple_select",
192
+ "default": [
193
+ "profile"
194
+ ],
195
+ "value_options": [
196
+ {
197
+ "value_key": "profile",
198
+ "text": "WP User Profile Page"
199
+ },
200
+ {
201
+ "value_key": "dedicated",
202
+ "text": "Dedicated WP Admin Page"
203
+ }
204
+ ],
205
+ "link_info": "",
206
+ "link_blog": "",
207
+ "beacon_id": 456,
208
+ "name": "User 2FA Setup",
209
+ "summary": "User 2FA Setup Page Locations",
210
+ "description": "Pages available to users to configure 2FA."
211
  },
212
  {
213
  "key": "mfa_skip",
214
  "section": "section_multifactor_authentication",
215
  "premium": true,
216
+ "type": "integer",
217
  "default": 0,
218
  "min": 0,
 
219
  "link_info": "https://shsec.io/b1",
220
  "link_blog": "",
221
  "beacon_id": 141,
222
+ "name": "2FA Remember Me",
223
  "summary": "A User Can Bypass Multi-Factor Authentication (MFA) For The Set Number Of Days",
224
  "description": "Enter the number of days a user can bypass future MFA after a successful MFA-login. 0 to disable."
225
  },
248
  "summary": "Allow Users To Use Google Authenticator",
249
  "description": "When enabled, users will have the option to add Google Authenticator to their WordPress user profile."
250
  },
251
+ {
252
+ "key": "enable_sms_auth",
253
+ "section": "section_non_ui",
254
+ "premium": true,
255
+ "default": "N",
256
+ "type": "checkbox",
257
+ "link_info": "",
258
+ "link_blog": "",
259
+ "beacon_id": 245,
260
+ "name": "Enable SMS Auth",
261
+ "summary": "Enable SMS Authentication",
262
+ "description": "When enabled, users will have the option to add SMS Auth to their WordPress user profile."
263
+ },
264
  {
265
  "key": "enable_email_authentication",
266
  "section": "section_2fa_email",
274
  "description": "All users will be required to verify their login by email-based two-factor authentication."
275
  },
276
  {
277
+ "key": "two_factor_auth_user_roles",
278
+ "section": "section_2fa_email",
279
+ "advanced": true,
280
+ "type": "array",
281
+ "default": [
282
  "contributor",
283
  "author",
284
  "editor",
285
  "administrator"
286
  ],
287
+ "link_info": "https://shsec.io/4v",
288
+ "link_blog": "",
289
+ "beacon_id": 243,
290
+ "name": "Enforce - Email Authentication",
291
+ "summary": "All User Roles Subject To Email Authentication",
292
+ "description": "Enforces email-based authentication on all users with the selected roles. Note: This setting only applies to email authentication."
293
  },
294
  {
295
  "key": "email_any_user_set",
351
  {
352
  "key": "login_limit_interval",
353
  "section": "section_brute_force_login_protection",
 
 
354
  "type": "integer",
355
+ "default": 5,
356
+ "min": 0,
357
  "link_info": "https://shsec.io/3q",
358
  "link_blog": "https://shsec.io/9o",
359
  "beacon_id": 242,
512
  "sensitive": true,
513
  "type": "text",
514
  "default": ""
 
 
 
 
 
 
 
515
  }
516
  ],
517
  "definitions": {
518
+ "login_intent_timeout": 5,
519
+ "login_intent_max_attempts": 5,
520
+ "events": {
521
  "2fa_verify_success": {
522
  "audit_params": [
523
  "user_login",
config/deprecated/plugin.php CHANGED
@@ -17,6 +17,9 @@
17
  "run_if_wpcli": true,
18
  "order": 10
19
  },
 
 
 
20
  "admin_notices": {
21
  "plugin-too-old": {
22
  "id": "plugin-too-old",
17
  "run_if_wpcli": true,
18
  "order": 10
19
  },
20
+ "wpcli": {
21
+ "enabled": true
22
+ },
23
  "admin_notices": {
24
  "plugin-too-old": {
25
  "id": "plugin-too-old",
config/deprecated/reporting.php CHANGED
@@ -14,6 +14,9 @@
14
  "run_if_wpcli": true,
15
  "tracking_exclude": true
16
  },
 
 
 
17
  "menu_items": [
18
  {
19
  "title": "Stats (beta)",
14
  "run_if_wpcli": true,
15
  "tracking_exclude": true
16
  },
17
+ "wpcli": {
18
+ "enabled": true
19
+ },
20
  "menu_items": [
21
  {
22
  "title": "Stats (beta)",
config/deprecated/sessions.php CHANGED
@@ -50,8 +50,8 @@
50
  "key": "autoadd_sessions_started_at",
51
  "section": "section_non_ui",
52
  "type": "integer",
53
- "transferable": false,
54
- "default": 0
55
  }
56
  ],
57
  "definitions": {
50
  "key": "autoadd_sessions_started_at",
51
  "section": "section_non_ui",
52
  "type": "integer",
53
+ "default": 0,
54
+ "transferable": false
55
  }
56
  ],
57
  "definitions": {
config/deprecated/traffic.php CHANGED
@@ -16,6 +16,9 @@
16
  "run_if_wpcli": false,
17
  "order": 110
18
  },
 
 
 
19
  "menu_items": [
20
  {
21
  "title": "Traffic Log",
@@ -165,9 +168,9 @@
165
  "key": "auto_clean",
166
  "section": "section_traffic_options",
167
  "advanced": true,
 
168
  "default": 7,
169
  "min": 1,
170
- "type": "integer",
171
  "link_info": "",
172
  "link_blog": "",
173
  "name": "Auto Expiry Cleaning",
@@ -190,9 +193,9 @@
190
  {
191
  "key": "limit_requests",
192
  "section": "section_traffic_limiter",
193
- "default": "60",
194
- "min": 0,
195
  "type": "integer",
 
 
196
  "link_info": "",
197
  "link_blog": "",
198
  "name": "Max Request Limit",
@@ -202,9 +205,9 @@
202
  {
203
  "key": "limit_time_span",
204
  "section": "section_traffic_limiter",
205
- "default": "60",
206
- "min": 0,
207
  "type": "integer",
 
 
208
  "link_info": "",
209
  "link_blog": "",
210
  "name": "Request Limit Time Interval",
@@ -213,7 +216,7 @@
213
  }
214
  ],
215
  "definitions": {
216
- "events": {
217
  "request_limit_exceeded": {
218
  "audit_params": [
219
  "requests",
16
  "run_if_wpcli": false,
17
  "order": 110
18
  },
19
+ "wpcli": {
20
+ "enabled": true
21
+ },
22
  "menu_items": [
23
  {
24
  "title": "Traffic Log",
168
  "key": "auto_clean",
169
  "section": "section_traffic_options",
170
  "advanced": true,
171
+ "type": "integer",
172
  "default": 7,
173
  "min": 1,
 
174
  "link_info": "",
175
  "link_blog": "",
176
  "name": "Auto Expiry Cleaning",
193
  {
194
  "key": "limit_requests",
195
  "section": "section_traffic_limiter",
 
 
196
  "type": "integer",
197
+ "default": 60,
198
+ "min": 0,
199
  "link_info": "",
200
  "link_blog": "",
201
  "name": "Max Request Limit",
205
  {
206
  "key": "limit_time_span",
207
  "section": "section_traffic_limiter",
 
 
208
  "type": "integer",
209
+ "default": 60,
210
+ "min": 0,
211
  "link_info": "",
212
  "link_blog": "",
213
  "name": "Request Limit Time Interval",
216
  }
217
  ],
218
  "definitions": {
219
+ "events": {
220
  "request_limit_exceeded": {
221
  "audit_params": [
222
  "requests",
config/deprecated/user_management.php CHANGED
@@ -16,6 +16,9 @@
16
  "run_if_wpcli": false,
17
  "order": 40
18
  },
 
 
 
19
  "sections": [
20
  {
21
  "slug": "section_user_session_management",
@@ -129,9 +132,9 @@
129
  {
130
  "key": "session_timeout_interval",
131
  "section": "section_user_session_management",
 
132
  "default": 2,
133
  "min": 0,
134
- "type": "integer",
135
  "link_info": "",
136
  "link_blog": "",
137
  "name": "Session Timeout",
@@ -141,9 +144,9 @@
141
  {
142
  "key": "session_idle_timeout_interval",
143
  "section": "section_user_session_management",
 
144
  "default": 48,
145
  "min": 0,
146
- "type": "integer",
147
  "link_info": "https://support.getshieldsecurity.com/support/solutions/articles/3000070590",
148
  "link_blog": "",
149
  "beacon_id": 397,
@@ -166,9 +169,9 @@
166
  {
167
  "key": "session_username_concurrent_limit",
168
  "section": "section_user_session_management",
 
169
  "default": 0,
170
  "min": 0,
171
- "type": "integer",
172
  "link_info": "",
173
  "link_blog": "",
174
  "name": "Max Simultaneous Sessions",
@@ -269,7 +272,7 @@
269
  "section": "section_passwords",
270
  "premium": true,
271
  "type": "integer",
272
- "default": "12",
273
  "link_info": "",
274
  "link_blog": "",
275
  "name": "Minimum Length",
@@ -327,7 +330,7 @@
327
  "section": "section_passwords",
328
  "premium": true,
329
  "type": "integer",
330
- "default": "60",
331
  "min": 0,
332
  "link_info": "",
333
  "link_blog": "",
@@ -395,9 +398,9 @@
395
  {
396
  "key": "autoadd_sessions_started_at",
397
  "section": "section_non_ui",
398
- "transferable": false,
399
  "type": "integer",
400
- "default": 0
 
401
  },
402
  {
403
  "key": "hard_suspended_userids",
16
  "run_if_wpcli": false,
17
  "order": 40
18
  },
19
+ "wpcli": {
20
+ "enabled": true
21
+ },
22
  "sections": [
23
  {
24
  "slug": "section_user_session_management",
132
  {
133
  "key": "session_timeout_interval",
134
  "section": "section_user_session_management",
135
+ "type": "integer",
136
  "default": 2,
137
  "min": 0,
 
138
  "link_info": "",
139
  "link_blog": "",
140
  "name": "Session Timeout",
144
  {
145
  "key": "session_idle_timeout_interval",
146
  "section": "section_user_session_management",
147
+ "type": "integer",
148
  "default": 48,
149
  "min": 0,
 
150
  "link_info": "https://support.getshieldsecurity.com/support/solutions/articles/3000070590",
151
  "link_blog": "",
152
  "beacon_id": 397,
169
  {
170
  "key": "session_username_concurrent_limit",
171
  "section": "section_user_session_management",
172
+ "type": "integer",
173
  "default": 0,
174
  "min": 0,
 
175
  "link_info": "",
176
  "link_blog": "",
177
  "name": "Max Simultaneous Sessions",
272
  "section": "section_passwords",
273
  "premium": true,
274
  "type": "integer",
275
+ "default": 12,
276
  "link_info": "",
277
  "link_blog": "",
278
  "name": "Minimum Length",
330
  "section": "section_passwords",
331
  "premium": true,
332
  "type": "integer",
333
+ "default": 60,
334
  "min": 0,
335
  "link_info": "",
336
  "link_blog": "",
398
  {
399
  "key": "autoadd_sessions_started_at",
400
  "section": "section_non_ui",
 
401
  "type": "integer",
402
+ "default": 0,
403
+ "transferable": false
404
  },
405
  {
406
  "key": "hard_suspended_userids",
config/firewall.json CHANGED
@@ -16,6 +16,9 @@
16
  "run_if_wpcli": false,
17
  "order": 30
18
  },
 
 
 
19
  "sections": [
20
  {
21
  "slug": "section_firewall_blocking_options",
16
  "run_if_wpcli": false,
17
  "order": 30
18
  },
19
+ "wpcli": {
20
+ "enabled": true
21
+ },
22
  "sections": [
23
  {
24
  "slug": "section_firewall_blocking_options",
config/hack_protect.json CHANGED
@@ -17,7 +17,8 @@
17
  "run_if_wpcli": true
18
  },
19
  "wpcli": {
20
- "root": "hack_guard"
 
21
  },
22
  "menu_items": [
23
  {
@@ -358,18 +359,18 @@
358
  {
359
  "key": "realtime_scan_last_at",
360
  "section": "section_non_ui",
361
- "transferable": false,
362
- "tracking_exclude": true,
363
  "type": "integer",
364
- "default": 0
 
 
365
  },
366
  {
367
  "key": "legacy_db_conversion_at",
368
  "section": "section_non_ui",
369
- "transferable": false,
370
- "tracking_exclude": true,
371
  "type": "integer",
372
- "default": 0
 
 
373
  }
374
  ],
375
  "definitions": {
@@ -539,9 +540,7 @@
539
  }
540
  },
541
  "db_classes": {
542
- "filelocker": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Databases\\FileLocker\\Handler",
543
- "scanner": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Databases\\Scanner\\Handler",
544
- "scanq": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Databases\\ScanQueue\\Handler"
545
  },
546
  "db_table_filelocker": {
547
  "slug": "filelocker",
@@ -559,33 +558,6 @@
559
  "notified_at": "Notification Sent"
560
  }
561
  },
562
- "db_table_scanner": {
563
- "slug": "scanner",
564
- "cols_custom": {
565
- "hash": "varchar(32) NOT NULL DEFAULT '' COMMENT 'Unique Item Hash'",
566
- "meta": "text COMMENT 'Relevant Item Data'",
567
- "scan": "varchar(10) NOT NULL DEFAULT 0 COMMENT 'Scan Type'",
568
- "severity": "int(3) NOT NULL DEFAULT 1 COMMENT 'Severity'"
569
- },
570
- "cols_timestamps": {
571
- "ignored_at": "Scan Result Ignored",
572
- "notified_at": "Scan Notifiation Sent",
573
- "attempt_repair_at": "Attempted Repair At"
574
- }
575
- },
576
- "db_table_scanq": {
577
- "slug": "scanq",
578
- "cols_custom": {
579
- "scan": "varchar(3) NOT NULL DEFAULT '' COMMENT 'Scan Slug'",
580
- "items": "text COMMENT 'Array of scan items'",
581
- "results": "text COMMENT 'Array of results'",
582
- "meta": "text COMMENT 'Meta Data'"
583
- },
584
- "cols_timestamps": {
585
- "started_at": "Scan Started",
586
- "finished_at": "Scan Completed"
587
- }
588
- },
589
  "table_name_filelocker": "filelocker",
590
  "url_mal_sigs_simple": "https://raw.githubusercontent.com/scr34m/php-malware-scanner/master/definitions/patterns_raw.txt",
591
  "url_mal_sigs_regex": "https://raw.githubusercontent.com/scr34m/php-malware-scanner/master/definitions/patterns_re.txt",
17
  "run_if_wpcli": true
18
  },
19
  "wpcli": {
20
+ "enabled": true,
21
+ "root": "hack_guard"
22
  },
23
  "menu_items": [
24
  {
359
  {
360
  "key": "realtime_scan_last_at",
361
  "section": "section_non_ui",
 
 
362
  "type": "integer",
363
+ "default": 0,
364
+ "transferable": false,
365
+ "tracking_exclude": true
366
  },
367
  {
368
  "key": "legacy_db_conversion_at",
369
  "section": "section_non_ui",
 
 
370
  "type": "integer",
371
+ "default": 0,
372
+ "transferable": false,
373
+ "tracking_exclude": true
374
  }
375
  ],
376
  "definitions": {
540
  }
541
  },
542
  "db_classes": {
543
+ "filelocker": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Databases\\FileLocker\\Handler"
 
 
544
  },
545
  "db_table_filelocker": {
546
  "slug": "filelocker",
558
  "notified_at": "Notification Sent"
559
  }
560
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
561
  "table_name_filelocker": "filelocker",
562
  "url_mal_sigs_simple": "https://raw.githubusercontent.com/scr34m/php-malware-scanner/master/definitions/patterns_raw.txt",
563
  "url_mal_sigs_regex": "https://raw.githubusercontent.com/scr34m/php-malware-scanner/master/definitions/patterns_re.txt",
config/headers.json CHANGED
@@ -16,6 +16,9 @@
16
  "run_if_wpcli": false,
17
  "order": 80
18
  },
 
 
 
19
  "sections": [
20
  {
21
  "primary": true,
16
  "run_if_wpcli": false,
17
  "order": 80
18
  },
19
+ "wpcli": {
20
+ "enabled": true
21
+ },
22
  "sections": [
23
  {
24
  "primary": true,
config/ips.json CHANGED
@@ -16,6 +16,9 @@
16
  "run_if_wpcli": false,
17
  "order": 100
18
  },
 
 
 
19
  "menu_items": [
20
  {
21
  "title": "IP Manager",
@@ -154,8 +157,8 @@
154
  {
155
  "key": "antibot_high_reputation_minimum",
156
  "section": "section_antibot",
157
- "default": 200,
158
  "type": "integer",
 
159
  "min": 0,
160
  "link_info": "https://shsec.io/jy",
161
  "link_blog": "https://shsec.io/jz",
@@ -180,8 +183,8 @@
180
  {
181
  "key": "transgression_limit",
182
  "section": "section_auto_black_list",
183
- "default": 10,
184
  "type": "integer",
 
185
  "link_info": "https://shsec.io/wpsf24",
186
  "link_blog": "https://shsec.io/wpsf26",
187
  "beacon_id": 207,
@@ -715,7 +718,7 @@
715
  }
716
  },
717
  "db_classes": {
718
- "ip_lists": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Databases\\IPs\\Handler"
719
  },
720
  "ip_lists_table_name": "ip_lists",
721
  "db_table_ip_lists": {
16
  "run_if_wpcli": false,
17
  "order": 100
18
  },
19
+ "wpcli": {
20
+ "enabled": true
21
+ },
22
  "menu_items": [
23
  {
24
  "title": "IP Manager",
157
  {
158
  "key": "antibot_high_reputation_minimum",
159
  "section": "section_antibot",
 
160
  "type": "integer",
161
+ "default": 200,
162
  "min": 0,
163
  "link_info": "https://shsec.io/jy",
164
  "link_blog": "https://shsec.io/jz",
183
  {
184
  "key": "transgression_limit",
185
  "section": "section_auto_black_list",
 
186
  "type": "integer",
187
+ "default": 10,
188
  "link_info": "https://shsec.io/wpsf24",
189
  "link_blog": "https://shsec.io/wpsf26",
190
  "beacon_id": 207,
718
  }
719
  },
720
  "db_classes": {
721
+ "ip_lists": "\\FernleafSystems\\Wordpress\\Plugin\\Shield\\Databases\\IPs\\Handler"
722
  },
723
  "ip_lists_table_name": "ip_lists",
724
  "db_table_ip_lists": {
config/license.json CHANGED
@@ -16,6 +16,9 @@
16
  "run_if_verified_bot": true,
17
  "run_if_wpcli": true
18
  },
 
 
 
19
  "admin_notices": {
20
  "wphashes-token-fail": {
21
  "id": "wphashes-token-fail",
@@ -60,37 +63,37 @@
60
  {
61
  "key": "license_activated_at",
62
  "section": "section_non_ui",
63
- "transferable": false,
64
  "type": "integer",
65
- "default": 0
 
66
  },
67
  {
68
  "key": "license_deactivated_at",
69
  "section": "section_non_ui",
70
- "transferable": false,
71
  "type": "integer",
72
- "default": 0
 
73
  },
74
  {
75
  "key": "license_last_checked_at",
76
  "section": "section_non_ui",
77
- "transferable": false,
78
  "type": "integer",
79
- "default": 0
 
80
  },
81
  {
82
  "key": "last_warning_email_sent_at",
83
  "section": "section_non_ui",
84
- "transferable": false,
85
  "type": "integer",
86
- "default": 0
 
87
  },
88
  {
89
  "key": "last_deactivated_email_sent_at",
90
  "section": "section_non_ui",
91
- "transferable": false,
92
  "type": "integer",
93
- "default": 0
 
94
  },
95
  {
96
  "key": "last_errors",
@@ -102,10 +105,10 @@
102
  {
103
  "key": "last_error_at",
104
  "section": "section_non_ui",
105
- "sensitive": true,
106
- "transferable": false,
107
  "type": "integer",
108
- "default": 0
 
 
109
  },
110
  {
111
  "key": "keyless_handshake_hash",
@@ -118,10 +121,10 @@
118
  {
119
  "key": "keyless_handshake_until",
120
  "section": "section_non_ui",
121
- "sensitive": true,
122
- "transferable": false,
123
  "type": "integer",
124
- "default": 0
 
 
125
  },
126
  {
127
  "key": "license_data",
16
  "run_if_verified_bot": true,
17
  "run_if_wpcli": true
18
  },
19
+ "wpcli": {
20
+ "enabled": true
21
+ },
22
  "admin_notices": {
23
  "wphashes-token-fail": {
24
  "id": "wphashes-token-fail",
63
  {
64
  "key": "license_activated_at",
65
  "section": "section_non_ui",
 
66
  "type": "integer",
67
+ "default": 0,
68
+ "transferable": false
69
  },
70
  {
71
  "key": "license_deactivated_at",
72
  "section": "section_non_ui",
 
73
  "type": "integer",
74
+ "default": 0,
75
+ "transferable": false
76
  },
77
  {
78
  "key": "license_last_checked_at",
79
  "section": "section_non_ui",
 
80
  "type": "integer",
81
+ "default": 0,
82
+ "transferable": false
83
  },
84
  {
85
  "key": "last_warning_email_sent_at",
86
  "section": "section_non_ui",
 
87
  "type": "integer",
88
+ "default": 0,
89
+ "transferable": false
90
  },
91
  {
92
  "key": "last_deactivated_email_sent_at",
93
  "section": "section_non_ui",
 
94
  "type": "integer",
95
+ "default": 0,
96
+ "transferable": false
97
  },
98
  {
99
  "key": "last_errors",
105
  {
106
  "key": "last_error_at",
107
  "section": "section_non_ui",
 
 
108
  "type": "integer",
109
+ "default": 0,
110
+ "sensitive": true,
111
+ "transferable": false
112
  },
113
  {
114
  "key": "keyless_handshake_hash",
121
  {
122
  "key": "keyless_handshake_until",
123
  "section": "section_non_ui",
 
 
124
  "type": "integer",
125
+ "default": 0,
126
+ "sensitive": true,
127
+ "transferable": false
128
  },
129
  {
130
  "key": "license_data",
config/lockdown.json CHANGED
@@ -16,6 +16,9 @@
16
  "run_if_wpcli": false,
17
  "order": 90
18
  },
 
 
 
19
  "sections": [
20
  {
21
  "primary": true,
16
  "run_if_wpcli": false,
17
  "order": 90
18
  },
19
+ "wpcli": {
20
+ "enabled": true
21
+ },
22
  "sections": [
23
  {
24
  "primary": true,
config/login_protect.json CHANGED
@@ -16,6 +16,9 @@
16
  "run_if_wpcli": false,
17
  "order": 40
18
  },
 
 
 
19
  "admin_notices": {
20
  "email-verification-sent": {
21
  "id": "email-verification-sent",
@@ -142,33 +145,81 @@
142
  "link_info": "https://shsec.io/5q",
143
  "link_blog": "https://shsec.io/5r",
144
  "beacon_id": 316,
145
- "name": "Hide Login Page",
146
- "summary": "Rename The WordPress Login Page",
147
  "description": "Creating a path here will disable your 'wp-login.php'. Only letters and numbers are permitted: abc123"
148
  },
149
  {
150
- "key": "enable_chained_authentication",
151
- "section": "section_multifactor_authentication",
152
- "default": "N",
153
- "type": "checkbox",
154
- "link_info": "https://shsec.io/9r",
155
- "link_blog": "https://shsec.io/84",
156
- "beacon_id": 326,
157
- "name": "Multi-Factor Authentication",
158
- "summary": "Require All Active Authentication Factors",
159
- "description": "When enabled, all multi-factor authentication methods will be applied to a user login. Disable to only require one to pass."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
160
  },
161
  {
162
  "key": "mfa_skip",
163
  "section": "section_multifactor_authentication",
164
  "premium": true,
 
165
  "default": 0,
166
  "min": 0,
167
- "type": "integer",
168
  "link_info": "https://shsec.io/b1",
169
  "link_blog": "",
170
  "beacon_id": 141,
171
- "name": "Multi-Factor Bypass",
172
  "summary": "A User Can Bypass Multi-Factor Authentication (MFA) For The Set Number Of Days",
173
  "description": "Enter the number of days a user can bypass future MFA after a successful MFA-login. 0 to disable."
174
  },
@@ -197,6 +248,19 @@
197
  "summary": "Allow Users To Use Google Authenticator",
198
  "description": "When enabled, users will have the option to add Google Authenticator to their WordPress user profile."
199
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
200
  {
201
  "key": "enable_email_authentication",
202
  "section": "section_2fa_email",
@@ -210,22 +274,22 @@
210
  "description": "All users will be required to verify their login by email-based two-factor authentication."
211
  },
212
  {
213
- "key": "two_factor_auth_user_roles",
214
- "section": "section_2fa_email",
215
- "advanced": true,
216
- "type": "array",
217
- "default": [
218
  "contributor",
219
  "author",
220
  "editor",
221
  "administrator"
222
  ],
223
- "link_info": "https://shsec.io/4v",
224
- "link_blog": "",
225
- "beacon_id": 243,
226
- "name": "Enforce - Email Authentication",
227
- "summary": "All User Roles Subject To Email Authentication",
228
- "description": "Enforces email-based authentication on all users with the selected roles. Note: This setting only applies to email authentication."
229
  },
230
  {
231
  "key": "email_any_user_set",
@@ -287,9 +351,9 @@
287
  {
288
  "key": "login_limit_interval",
289
  "section": "section_brute_force_login_protection",
290
- "default": "5",
291
- "min": 0,
292
  "type": "integer",
 
 
293
  "link_info": "https://shsec.io/3q",
294
  "link_blog": "https://shsec.io/9o",
295
  "beacon_id": 242,
@@ -448,18 +512,12 @@
448
  "sensitive": true,
449
  "type": "text",
450
  "default": ""
451
- },
452
- {
453
- "key": "use_login_intent_page",
454
- "section": "section_non_ui",
455
- "transferable": false,
456
- "type": "boolean",
457
- "value": true
458
  }
459
  ],
460
  "definitions": {
461
- "login_intent_timeout": 5,
462
- "events": {
 
463
  "2fa_verify_success": {
464
  "audit_params": [
465
  "user_login",
16
  "run_if_wpcli": false,
17
  "order": 40
18
  },
19
+ "wpcli": {
20
+ "enabled": true
21
+ },
22
  "admin_notices": {
23
  "email-verification-sent": {
24
  "id": "email-verification-sent",
145
  "link_info": "https://shsec.io/5q",
146
  "link_blog": "https://shsec.io/5r",
147
  "beacon_id": 316,
148
+ "name": "Hide WP Login & Admin",
149
+ "summary": "Hide The WordPress Login And Admin Areas",
150
  "description": "Creating a path here will disable your 'wp-login.php'. Only letters and numbers are permitted: abc123"
151
  },
152
  {
153
+ "key": "rename_wplogin_redirect",
154
+ "section": "section_rename_wplogin",
155
+ "advanced": true,
156
+ "sensitive": true,
157
+ "default": "",
158
+ "type": "text",
159
+ "link_info": "https://shsec.io/5q",
160
+ "link_blog": "https://shsec.io/5r",
161
+ "beacon_id": 455,
162
+ "name": "WP Login & Admin Redirect",
163
+ "summary": "Automatic Redirect URL For Hidden Pages",
164
+ "description": "Automatically redirect requests to this location for the hidden pages."
165
+ },
166
+ {
167
+ "key": "mfa_verify_page",
168
+ "section": "section_multifactor_authentication",
169
+ "default": "custom_shield",
170
+ "type": "select",
171
+ "value_options": [
172
+ {
173
+ "value_key": "custom_shield",
174
+ "text": "Custom Shield MFA Page"
175
+ },
176
+ {
177
+ "value_key": "wp_login",
178
+ "text": "WP Login Page (beta)"
179
+ }
180
+ ],
181
+ "link_info": "",
182
+ "link_blog": "",
183
+ "beacon_id": 0,
184
+ "name": "MFA Verification Page",
185
+ "summary": "Type Of MFA Verification Page",
186
+ "description": "Choose the page type for MFA verification"
187
+ },
188
+ {
189
+ "key": "mfa_user_setup_pages",
190
+ "section": "section_multifactor_authentication",
191
+ "type": "multiple_select",
192
+ "default": [
193
+ "profile"
194
+ ],
195
+ "value_options": [
196
+ {
197
+ "value_key": "profile",
198
+ "text": "WP User Profile Page"
199
+ },
200
+ {
201
+ "value_key": "dedicated",
202
+ "text": "Dedicated WP Admin Page"
203
+ }
204
+ ],
205
+ "link_info": "",
206
+ "link_blog": "",
207
+ "beacon_id": 456,
208
+ "name": "User 2FA Setup",
209
+ "summary": "User 2FA Setup Page Locations",
210
+ "description": "Pages available to users to configure 2FA."
211
  },
212
  {
213
  "key": "mfa_skip",
214
  "section": "section_multifactor_authentication",
215
  "premium": true,
216
+ "type": "integer",
217
  "default": 0,
218
  "min": 0,
 
219
  "link_info": "https://shsec.io/b1",
220
  "link_blog": "",
221
  "beacon_id": 141,
222
+ "name": "2FA Remember Me",
223
  "summary": "A User Can Bypass Multi-Factor Authentication (MFA) For The Set Number Of Days",
224
  "description": "Enter the number of days a user can bypass future MFA after a successful MFA-login. 0 to disable."
225
  },
248
  "summary": "Allow Users To Use Google Authenticator",
249
  "description": "When enabled, users will have the option to add Google Authenticator to their WordPress user profile."
250
  },
251
+ {
252
+ "key": "enable_sms_auth",
253
+ "section": "section_non_ui",
254
+ "premium": true,
255
+ "default": "N",
256
+ "type": "checkbox",
257
+ "link_info": "",
258
+ "link_blog": "",
259
+ "beacon_id": 245,
260
+ "name": "Enable SMS Auth",
261
+ "summary": "Enable SMS Authentication",
262
+ "description": "When enabled, users will have the option to add SMS Auth to their WordPress user profile."
263
+ },
264
  {
265
  "key": "enable_email_authentication",
266
  "section": "section_2fa_email",
274
  "description": "All users will be required to verify their login by email-based two-factor authentication."
275
  },
276
  {
277
+ "key": "two_factor_auth_user_roles",
278
+ "section": "section_2fa_email",
279
+ "advanced": true,
280
+ "type": "array",
281
+ "default": [
282
  "contributor",
283
  "author",
284
  "editor",
285
  "administrator"
286
  ],
287
+ "link_info": "https://shsec.io/4v",
288
+ "link_blog": "",
289
+ "beacon_id": 243,
290
+ "name": "Enforce - Email Authentication",
291
+ "summary": "All User Roles Subject To Email Authentication",
292
+ "description": "Enforces email-based authentication on all users with the selected roles. Note: This setting only applies to email authentication."
293
  },
294
  {
295
  "key": "email_any_user_set",
351
  {
352
  "key": "login_limit_interval",
353
  "section": "section_brute_force_login_protection",
 
 
354
  "type": "integer",
355
+ "default": 5,
356
+ "min": 0,
357
  "link_info": "https://shsec.io/3q",
358
  "link_blog": "https://shsec.io/9o",
359
  "beacon_id": 242,
512
  "sensitive": true,
513
  "type": "text",
514
  "default": ""
 
 
 
 
 
 
 
515
  }
516
  ],
517
  "definitions": {
518
+ "login_intent_timeout": 5,
519
+ "login_intent_max_attempts": 5,
520
+ "events": {
521
  "2fa_verify_success": {
522
  "audit_params": [
523
  "user_login",
config/plugin.json CHANGED
@@ -17,6 +17,9 @@
17
  "run_if_wpcli": true,
18
  "order": 10
19
  },
 
 
 
20
  "admin_notices": {
21
  "plugin-too-old": {
22
  "id": "plugin-too-old",
17
  "run_if_wpcli": true,
18
  "order": 10
19
  },
20
+ "wpcli": {
21
+ "enabled": true
22
+ },
23
  "admin_notices": {
24
  "plugin-too-old": {
25
  "id": "plugin-too-old",
config/reporting.json CHANGED
@@ -14,6 +14,9 @@
14
  "run_if_wpcli": true,
15
  "tracking_exclude": true
16
  },
 
 
 
17
  "menu_items": [
18
  {
19
  "title": "Stats (beta)",
14
  "run_if_wpcli": true,
15
  "tracking_exclude": true
16
  },
17
+ "wpcli": {
18
+ "enabled": true
19
+ },
20
  "menu_items": [
21
  {
22
  "title": "Stats (beta)",
config/sessions.json CHANGED
@@ -50,8 +50,8 @@
50
  "key": "autoadd_sessions_started_at",
51
  "section": "section_non_ui",
52
  "type": "integer",
53
- "transferable": false,
54
- "default": 0
55
  }
56
  ],
57
  "definitions": {
50
  "key": "autoadd_sessions_started_at",
51
  "section": "section_non_ui",
52
  "type": "integer",
53
+ "default": 0,
54
+ "transferable": false
55
  }
56
  ],
57
  "definitions": {
config/traffic.json CHANGED
@@ -16,6 +16,9 @@
16
  "run_if_wpcli": false,
17
  "order": 110
18
  },
 
 
 
19
  "menu_items": [
20
  {
21
  "title": "Traffic Log",
@@ -165,9 +168,9 @@
165
  "key": "auto_clean",
166
  "section": "section_traffic_options",
167
  "advanced": true,
 
168
  "default": 7,
169
  "min": 1,
170
- "type": "integer",
171
  "link_info": "",
172
  "link_blog": "",
173
  "name": "Auto Expiry Cleaning",
@@ -190,9 +193,9 @@
190
  {
191
  "key": "limit_requests",
192
  "section": "section_traffic_limiter",
193
- "default": "60",
194
- "min": 0,
195
  "type": "integer",
 
 
196
  "link_info": "",
197
  "link_blog": "",
198
  "name": "Max Request Limit",
@@ -202,9 +205,9 @@
202
  {
203
  "key": "limit_time_span",
204
  "section": "section_traffic_limiter",
205
- "default": "60",
206
- "min": 0,
207
  "type": "integer",
 
 
208
  "link_info": "",
209
  "link_blog": "",
210
  "name": "Request Limit Time Interval",
@@ -213,7 +216,7 @@
213
  }
214
  ],
215
  "definitions": {
216
- "events": {
217
  "request_limit_exceeded": {
218
  "audit_params": [
219
  "requests",
16
  "run_if_wpcli": false,
17
  "order": 110
18
  },
19
+ "wpcli": {
20
+ "enabled": true
21
+ },
22
  "menu_items": [
23
  {
24
  "title": "Traffic Log",
168
  "key": "auto_clean",
169
  "section": "section_traffic_options",
170
  "advanced": true,
171
+ "type": "integer",
172
  "default": 7,
173
  "min": 1,
 
174
  "link_info": "",
175
  "link_blog": "",
176
  "name": "Auto Expiry Cleaning",
193
  {
194
  "key": "limit_requests",
195
  "section": "section_traffic_limiter",
 
 
196
  "type": "integer",
197
+ "default": 60,
198
+ "min": 0,
199
  "link_info": "",
200
  "link_blog": "",
201
  "name": "Max Request Limit",
205
  {
206
  "key": "limit_time_span",
207
  "section": "section_traffic_limiter",
 
 
208
  "type": "integer",
209
+ "default": 60,
210
+ "min": 0,
211
  "link_info": "",
212
  "link_blog": "",
213
  "name": "Request Limit Time Interval",
216
  }
217
  ],
218
  "definitions": {
219
+ "events": {
220
  "request_limit_exceeded": {
221
  "audit_params": [
222
  "requests",
config/user_management.json CHANGED
@@ -16,6 +16,9 @@
16
  "run_if_wpcli": false,
17
  "order": 40
18
  },
 
 
 
19
  "sections": [
20
  {
21
  "slug": "section_user_session_management",
@@ -129,9 +132,9 @@
129
  {
130
  "key": "session_timeout_interval",
131
  "section": "section_user_session_management",
 
132
  "default": 2,
133
  "min": 0,
134
- "type": "integer",
135
  "link_info": "",
136
  "link_blog": "",
137
  "name": "Session Timeout",
@@ -141,9 +144,9 @@
141
  {
142
  "key": "session_idle_timeout_interval",
143
  "section": "section_user_session_management",
 
144
  "default": 48,
145
  "min": 0,
146
- "type": "integer",
147
  "link_info": "https://support.getshieldsecurity.com/support/solutions/articles/3000070590",
148
  "link_blog": "",
149
  "beacon_id": 397,
@@ -166,9 +169,9 @@
166
  {
167
  "key": "session_username_concurrent_limit",
168
  "section": "section_user_session_management",
 
169
  "default": 0,
170
  "min": 0,
171
- "type": "integer",
172
  "link_info": "",
173
  "link_blog": "",
174
  "name": "Max Simultaneous Sessions",
@@ -269,7 +272,7 @@
269
  "section": "section_passwords",
270
  "premium": true,
271
  "type": "integer",
272
- "default": "12",
273
  "link_info": "",
274
  "link_blog": "",
275
  "name": "Minimum Length",
@@ -327,7 +330,7 @@
327
  "section": "section_passwords",
328
  "premium": true,
329
  "type": "integer",
330
- "default": "60",
331
  "min": 0,
332
  "link_info": "",
333
  "link_blog": "",
@@ -395,9 +398,9 @@
395
  {
396
  "key": "autoadd_sessions_started_at",
397
  "section": "section_non_ui",
398
- "transferable": false,
399
  "type": "integer",
400
- "default": 0
 
401
  },
402
  {
403
  "key": "hard_suspended_userids",
16
  "run_if_wpcli": false,
17
  "order": 40
18
  },
19
+ "wpcli": {
20
+ "enabled": true
21
+ },
22
  "sections": [
23
  {
24
  "slug": "section_user_session_management",
132
  {
133
  "key": "session_timeout_interval",
134
  "section": "section_user_session_management",
135
+ "type": "integer",
136
  "default": 2,
137
  "min": 0,
 
138
  "link_info": "",
139
  "link_blog": "",
140
  "name": "Session Timeout",
144
  {
145
  "key": "session_idle_timeout_interval",
146
  "section": "section_user_session_management",
147
+ "type": "integer",
148
  "default": 48,
149
  "min": 0,
 
150
  "link_info": "https://support.getshieldsecurity.com/support/solutions/articles/3000070590",
151
  "link_blog": "",
152
  "beacon_id": 397,
169
  {
170
  "key": "session_username_concurrent_limit",
171
  "section": "section_user_session_management",
172
+ "type": "integer",
173
  "default": 0,
174
  "min": 0,
 
175
  "link_info": "",
176
  "link_blog": "",
177
  "name": "Max Simultaneous Sessions",
272
  "section": "section_passwords",
273
  "premium": true,
274
  "type": "integer",
275
+ "default": 12,
276
  "link_info": "",
277
  "link_blog": "",
278
  "name": "Minimum Length",
330
  "section": "section_passwords",
331
  "premium": true,
332
  "type": "integer",
333
+ "default": 60,
334
  "min": 0,
335
  "link_info": "",
336
  "link_blog": "",
398
  {
399
  "key": "autoadd_sessions_started_at",
400
  "section": "section_non_ui",
 
401
  "type": "integer",
402
+ "default": 0,
403
+ "transferable": false
404
  },
405
  {
406
  "key": "hard_suspended_userids",
icwp-wpsf.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Shield Security
4
  * Plugin URI: https://shsec.io/2f
5
  * Description: Powerful, Easy-To-Use #1 Rated WordPress Security System
6
- * Version: 13.0.6
7
  * Text Domain: wp-simple-firewall
8
  * Domain Path: /languages
9
  * Author: Shield Security
3
  * Plugin Name: Shield Security
4
  * Plugin URI: https://shsec.io/2f
5
  * Description: Powerful, Easy-To-Use #1 Rated WordPress Security System
6
+ * Version: 14.0.0
7
  * Text Domain: wp-simple-firewall
8
  * Domain Path: /languages
9
  * Author: Shield Security
init.php CHANGED
@@ -16,32 +16,39 @@ class ICWP_WPSF_Shield_Security {
16
  */
17
  private static $oInstance = null;
18
 
 
 
 
 
 
19
  /**
20
  * @param Shield\Controller\Controller $controller
21
  */
22
  private function __construct( Shield\Controller\Controller $controller ) {
23
- $controller->loadAllFeatures();
 
 
 
 
24
  }
25
 
26
  /**
27
- * @return Shield\Controller\Controller
28
  * @throws \Exception
29
  */
30
- public function getController() {
31
  return Shield\Controller\Controller::GetInstance();
32
  }
33
 
34
  /**
35
- * @param Shield\Controller\Controller $oController
36
  * @return self
37
  * @throws \Exception
38
  */
39
- public static function GetInstance( Shield\Controller\Controller $oController = null ) {
40
  if ( is_null( self::$oInstance ) ) {
41
- if ( !$oController instanceof Shield\Controller\Controller ) {
42
  throw new \Exception( 'Trying to create a Shield Plugin instance without a valid Controller' );
43
  }
44
- self::$oInstance = new self( $oController );
45
  }
46
  return self::$oInstance;
47
  }
@@ -50,6 +57,7 @@ class ICWP_WPSF_Shield_Security {
50
  try {
51
  $oICWP_Wpsf_Controller = Shield\Controller\Controller::GetInstance( $rootFile );
52
  $oICWP_Wpsf = ICWP_WPSF_Shield_Security::GetInstance( $oICWP_Wpsf_Controller );
 
53
  }
54
  catch ( \Exception $e ) {
55
  if ( is_admin() ) {
16
  */
17
  private static $oInstance = null;
18
 
19
+ /**
20
+ * @var Shield\Controller\Controller
21
+ */
22
+ private $con;
23
+
24
  /**
25
  * @param Shield\Controller\Controller $controller
26
  */
27
  private function __construct( Shield\Controller\Controller $controller ) {
28
+ $this->con = $controller;
29
+ }
30
+
31
+ public function start() {
32
+ $this->con->loadAllFeatures();
33
  }
34
 
35
  /**
 
36
  * @throws \Exception
37
  */
38
+ public function getController() :Shield\Controller\Controller {
39
  return Shield\Controller\Controller::GetInstance();
40
  }
41
 
42
  /**
 
43
  * @return self
44
  * @throws \Exception
45
  */
46
+ public static function GetInstance( Shield\Controller\Controller $con = null ) {
47
  if ( is_null( self::$oInstance ) ) {
48
+ if ( !$con instanceof Shield\Controller\Controller ) {
49
  throw new \Exception( 'Trying to create a Shield Plugin instance without a valid Controller' );
50
  }
51
+ self::$oInstance = new self( $con );
52
  }
53
  return self::$oInstance;
54
  }
57
  try {
58
  $oICWP_Wpsf_Controller = Shield\Controller\Controller::GetInstance( $rootFile );
59
  $oICWP_Wpsf = ICWP_WPSF_Shield_Security::GetInstance( $oICWP_Wpsf_Controller );
60
+ $oICWP_Wpsf->start();
61
  }
62
  catch ( \Exception $e ) {
63
  if ( is_admin() ) {
languages/wp-simple-firewall-en_GB.mo CHANGED
Binary file
languages/wp-simple-firewall-en_GB.po CHANGED
@@ -1,19 +1,19 @@
1
  msgid ""
2
  msgstr ""
3
  "Project-Id-Version: WPSF v2.0\n"
4
- "POT-Creation-Date: 2019-09-30 17:43+0100\n"
5
- "PO-Revision-Date: 2019-09-30 17:43+0100\n"
6
  "Last-Translator: \n"
7
  "Language-Team: \n"
8
  "Language: en_GB\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
- "X-Generator: Poedit 2.2.4\n"
 
13
  "X-Poedit-KeywordsList: _wpsf__;gettext;gettext_noop;_wpsf_e;_n;_n:1,2;__;_e\n"
14
  "X-Poedit-Basepath: ..\n"
15
  "X-Poedit-SourceCharset: UTF-8\n"
16
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
17
  "X-Poedit-SearchPath-0: .\n"
18
  "X-Poedit-SearchPathExcluded-0: .git\n"
19
  "X-Poedit-SearchPathExcluded-1: .idea\n"
@@ -22,10385 +22,13303 @@ msgstr ""
22
  "X-Poedit-SearchPathExcluded-4: src/lib/vendor\n"
23
  "X-Poedit-SearchPathExcluded-5: resources\n"
24
 
25
- #: src/features/admin_access_restriction.php:332
26
- #: src/features/admin_access_restriction.php:334
27
- msgid "Security Admin session has timed-out."
28
- msgstr ""
29
-
30
- #: src/features/admin_access_restriction.php:332
31
- msgid "Reload now?"
32
- msgstr ""
33
-
34
- #: src/features/admin_access_restriction.php:333
35
- msgid "Security Admin session has nearly timed-out."
36
- msgstr ""
37
-
38
- #: src/features/admin_access_restriction.php:351
39
- #: src/features/admin_access_restriction.php:364
40
- #: src/lib/src/Modules/Plugin/Strings.php:399
41
- #: src/lib/src/Modules/Plugin/Strings.php:401
42
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:35
43
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:38
44
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:102
45
- #: src/lib/src/Tables/Render/Sessions.php:36 src/wizards/base_wpsf.php:59
46
- msgid "Security Admin"
47
- msgstr ""
48
-
49
- #: src/features/admin_access_restriction.php:352
50
- #, php-format
51
- msgid "Prevent Tampering With %s Settings"
52
- msgstr ""
53
-
54
- #: src/features/admin_access_restriction.php:367
55
- msgid "Security plugin is protected against tampering"
56
- msgstr ""
57
-
58
- #: src/features/admin_access_restriction.php:368
59
- msgid "Security plugin is vulnerable to tampering"
60
  msgstr ""
61
 
62
- #: src/features/admin_access_restriction.php:375
63
- msgid "Important Options"
64
  msgstr ""
65
 
66
- #: src/features/admin_access_restriction.php:378
67
- msgid "Important WP options are protected against tampering"
 
 
68
  msgstr ""
69
 
70
- #: src/features/admin_access_restriction.php:379
71
- msgid "Important WP options aren't protected against tampering"
 
 
72
  msgstr ""
73
 
74
- #: src/features/admin_access_restriction.php:386
75
- msgid "WP Admins"
 
 
76
  msgstr ""
77
 
78
- #: src/features/admin_access_restriction.php:389
79
- msgid "Admin users are protected against tampering"
80
  msgstr ""
81
 
82
- #: src/features/admin_access_restriction.php:390
83
- msgid "Admin users aren't protected against tampering"
84
  msgstr ""
85
 
86
- #: src/features/admin_access_restriction.php:407
87
- msgid "Security Admin Protection"
 
88
  msgstr ""
89
 
90
- #: src/features/admin_access_restriction.php:414
91
- msgid "Security Plugin Unprotected"
92
  msgstr ""
93
 
94
- #: src/features/admin_access_restriction.php:416
95
- msgid "The Security Admin protection is not active."
 
 
 
 
 
 
 
 
 
96
  msgstr ""
97
 
98
- #: src/features/admin_access_restriction.php:420
99
- #: src/features/autoupdates.php:168 src/features/hack_protect.php:754
100
- #: src/features/hack_protect.php:775 src/features/hack_protect.php:796
101
- #: src/features/hack_protect.php:817 src/features/hack_protect.php:838
102
- #: src/features/hack_protect.php:859 src/features/insights.php:274
103
- #: src/features/insights.php:662 src/features/insights.php:675
104
- #: src/features/insights.php:702 src/features/insights.php:715
105
- #: src/features/insights.php:741 src/features/insights.php:753
106
- #: src/features/lockdown.php:81 src/features/user_management.php:313
107
  #, php-format
108
- msgid "Go To %s"
109
- msgstr ""
110
-
111
- #: src/features/admin_access_restriction.php:420
112
- #: src/features/autoupdates.php:168 src/features/hack_protect.php:754
113
- #: src/features/hack_protect.php:775 src/features/hack_protect.php:796
114
- #: src/features/hack_protect.php:817 src/features/hack_protect.php:838
115
- #: src/features/hack_protect.php:859 src/features/insights.php:275
116
- #: src/features/insights.php:753 src/features/lockdown.php:81
117
- #: src/features/user_management.php:313 src/lib/src/Modules/Base/Strings.php:36
118
- #: src/lib/src/Modules/Base/Strings.php:53
119
- #: src/lib/src/Modules/Insights/Strings.php:66
120
- msgid "Options"
121
  msgstr ""
122
 
123
- #: src/features/admin_access_restriction.php:421
124
- msgid "Security Admin should be turned-on to protect your security settings."
125
  msgstr ""
126
 
127
- #: src/features/admin_access_restriction.php:491
128
- msgid ""
129
- "Sorry, this plugin is protected against unauthorised attempts to disable it."
130
  msgstr ""
131
 
132
- #: src/features/admin_access_restriction.php:494
133
- msgid "You'll just need to authenticate first and try again."
 
 
 
 
 
 
 
 
 
134
  msgstr ""
135
 
136
- #: src/features/audit_trail.php:56
137
  #, php-format
138
  msgid "[%s] Audit Trail Entries"
139
  msgstr ""
140
 
141
- #: src/features/audit_trail.php:120
142
- msgid "Activity Audit Log"
143
- msgstr ""
144
-
145
- #: src/features/audit_trail.php:121
146
- msgid "Track Activity: What, Who, When, Where"
147
- msgstr ""
148
-
149
- #: src/features/audit_trail.php:134
150
- msgid "users"
151
- msgstr ""
152
-
153
- #: src/features/audit_trail.php:135
154
- msgid "plugins"
155
- msgstr ""
156
-
157
- #: src/features/audit_trail.php:136
158
- msgid "themes"
159
  msgstr ""
160
 
161
- #: src/features/audit_trail.php:137
162
- msgid "posts"
163
  msgstr ""
164
 
165
- #: src/features/audit_trail.php:138
166
- msgid "emails"
167
  msgstr ""
168
 
169
- #: src/features/audit_trail.php:143 src/features/audit_trail.php:152
170
- #: src/lib/src/Modules/AuditTrail/Strings.php:141
171
- msgid "Audit Areas"
172
  msgstr ""
173
 
174
- #: src/features/audit_trail.php:145
175
- msgid "All important events on your site are being logged"
176
  msgstr ""
177
 
178
- #: src/features/audit_trail.php:154
179
- #, php-format
180
- msgid "No areas are set to be audited: %s"
181
  msgstr ""
182
 
183
- #: src/features/audit_trail.php:161
184
- msgid "Audit Events"
 
185
  msgstr ""
186
 
187
- #: src/features/audit_trail.php:163
188
- #, php-format
189
- msgid "Important events aren't being audited: %s"
190
  msgstr ""
191
 
192
- #: src/features/audit_trail.php:170 src/features/insights.php:80
193
- #: src/features/insights.php:292 src/lib/src/Modules/AuditTrail/Strings.php:122
194
- #: src/lib/src/Modules/Plugin/Strings.php:402 src/wizards/plugin.php:481
195
- #: src/wizards/plugin.php:486
196
- msgid "Audit Trail"
197
  msgstr ""
198
 
199
- #: src/features/audit_trail.php:172
200
- #, php-format
201
- msgid "Maximum Audit Trail entries limited to %s"
202
  msgstr ""
203
 
204
- #: src/features/autoupdates.php:157 src/features/autoupdates.php:189
205
- #: src/lib/src/Modules/Autoupdates/Strings.php:25
206
- #: src/lib/src/Modules/HackGuard/Strings.php:226
207
- #: src/lib/src/Modules/Plugin/Strings.php:405
208
- msgid "Automatic Updates"
209
  msgstr ""
210
 
211
- #: src/features/autoupdates.php:166
212
- msgid "Automatic Updates Are Not Disabled As Expected."
213
  msgstr ""
214
 
215
- #: src/features/autoupdates.php:169
216
- #, php-format
217
  msgid ""
218
- "A plugin/theme other than %s is affecting your automatic update settings."
219
- msgstr ""
220
-
221
- #: src/features/autoupdates.php:190
222
- msgid "Control WordPress Automatic Updates"
223
  msgstr ""
224
 
225
- #: src/features/autoupdates.php:204
226
- msgid "Disabled All"
227
  msgstr ""
228
 
229
- #: src/features/autoupdates.php:207
230
- msgid "All automatic updates on this site are disabled"
 
231
  msgstr ""
232
 
233
- #: src/features/autoupdates.php:208
234
- msgid "The automatic updates system is enabled"
235
  msgstr ""
236
 
237
- #: src/features/autoupdates.php:216
238
- msgid "Core Updates"
239
  msgstr ""
240
 
241
- #: src/features/autoupdates.php:219
242
- msgid "Minor WP Core updates will be installed automatically"
243
  msgstr ""
244
 
245
- #: src/features/autoupdates.php:220
246
- msgid "Minor WP Core updates will not be installed automatically"
 
247
  msgstr ""
248
 
249
- #: src/features/autoupdates.php:227
250
- #: src/lib/src/Modules/Autoupdates/Strings.php:159
251
- msgid "Update Delay"
252
  msgstr ""
253
 
254
- #: src/features/autoupdates.php:230
255
- msgid "Automatic updates are applied after a short delay"
 
256
  msgstr ""
257
 
258
- #: src/features/autoupdates.php:231
259
- msgid "Automatic updates are applied immediately"
260
  msgstr ""
261
 
262
- #: src/features/autoupdates.php:240
263
- msgid "Self Auto-Update"
264
  msgstr ""
265
 
266
- #: src/features/autoupdates.php:243
267
- #, php-format
268
- msgid "%s is automatically updated"
 
 
 
269
  msgstr ""
270
 
271
- #: src/features/autoupdates.php:244
272
- #, php-format
273
- msgid "%s isn't automatically updated"
274
  msgstr ""
275
 
276
- #: src/features/base.php:809 src/lib/src/Modules/Base/BaseModCon.php:732
277
- #: src/wizards/plugin.php:482 src/wizards/plugin.php:515
278
- #: src/wizards/plugin.php:550 src/wizards/plugin.php:695
279
- msgid "Disabled"
280
  msgstr ""
281
 
282
- #: src/features/base.php:1118 src/lib/src/Modules/Base/BaseModCon.php:1033
283
- msgid ""
284
- "Unfortunately your WordPress and/or PHP versions are too old to support this "
285
- "feature."
286
  msgstr ""
287
 
288
- #: src/features/base.php:1273 src/lib/src/Modules/Base/BaseModCon.php:1187
289
- msgid "You don't currently have permission to save settings."
290
  msgstr ""
291
 
292
- #: src/features/base.php:1367 src/lib/src/Modules/Base/BaseModCon.php:1281
293
- msgid "Password values do not match."
294
  msgstr ""
295
 
296
- #: src/features/base.php:1593 src/lib/src/Modules/AuditTrail/Strings.php:197
297
- #: src/lib/src/Modules/Base/BaseModCon.php:1507
298
- #: src/lib/src/Modules/HackGuard/Strings.php:195
299
- #: src/lib/src/Modules/HackGuard/Strings.php:269
300
- #: src/lib/src/Modules/LoginGuard/Strings.php:265
301
- #: src/lib/src/Modules/LoginGuard/Strings.php:308
302
- #: src/lib/src/Modules/LoginGuard/Strings.php:315
303
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:130
304
- #: src/lib/src/Modules/UserManagement/Strings.php:138
305
- #: src/lib/src/Modules/UserManagement/Strings.php:233
306
- msgid "Default"
307
  msgstr ""
308
 
309
- #: src/features/base.php:1600 src/lib/src/Modules/Base/BaseModCon.php:1514
310
- msgid "For more information:"
311
  msgstr ""
312
 
313
- #: src/features/base.php:1601 src/lib/src/Modules/Base/BaseModCon.php:1515
314
- #: src/lib/src/Modules/Plugin/Strings.php:432
315
- msgid "Support Forums"
316
  msgstr ""
317
 
318
- #: src/features/base_wpsf.php:402
319
- msgid "Module Disabled"
320
  msgstr ""
321
 
322
- #: src/features/base_wpsf.php:404
323
- msgid "All features of this module are completely disabled"
324
  msgstr ""
325
 
326
- #: src/features/comments_filter.php:60
327
- msgid "I'm not a spammer."
328
  msgstr ""
329
 
330
- #: src/features/comments_filter.php:63
331
- msgid "Please check the box to confirm you're not a spammer."
 
 
332
  msgstr ""
333
 
334
- #: src/features/comments_filter.php:66
335
- #, php-format
336
- msgid "Please wait %s seconds before posting your comment."
337
  msgstr ""
338
 
339
- #: src/features/comments_filter.php:69
340
- msgid "Please reload this page to post a comment."
341
  msgstr ""
342
 
343
- #: src/features/comments_filter.php:115
344
- msgid "SPAM Blocking"
345
  msgstr ""
346
 
347
- #: src/features/comments_filter.php:116
348
- msgid "Block Bot & Human Comment SPAM"
349
  msgstr ""
350
 
351
- #: src/features/comments_filter.php:127
352
- #: src/lib/src/Modules/CommentsFilter/Strings.php:60
353
- msgid "Bot SPAM"
354
  msgstr ""
355
 
356
- #: src/features/comments_filter.php:130
357
- msgid "Bot SPAM comments are blocked"
358
  msgstr ""
359
 
360
- #: src/features/comments_filter.php:131
361
- msgid "There is no protection against Bot SPAM comments"
362
  msgstr ""
363
 
364
- #: src/features/comments_filter.php:136
365
- #: src/lib/src/Modules/CommentsFilter/Strings.php:79
366
- msgid "Human SPAM"
367
  msgstr ""
368
 
369
- #: src/features/comments_filter.php:139
370
- msgid "Comments posted by humans are checked for SPAM"
371
  msgstr ""
372
 
373
- #: src/features/comments_filter.php:140
374
- msgid "Comments posted by humans aren't checked for SPAM"
375
  msgstr ""
376
 
377
- #: src/features/comments_filter.php:162
378
- #, php-format
379
- msgid "Please remember to supply reCAPTCHA keys: %s"
 
380
  msgstr ""
381
 
382
- #: src/features/comments_filter.php:163
383
- msgid "reCAPTCHA Settings"
384
  msgstr ""
385
 
386
- #: src/features/firewall.php:59
387
- #, php-format
388
- msgid "You were blocked by the %s."
 
389
  msgstr ""
390
 
391
- #: src/features/firewall.php:86 src/features/firewall.php:98
392
- #: src/lib/src/Modules/Events/Strings.php:174
393
- #: src/lib/src/Modules/Events/Strings.php:178
394
- #: src/lib/src/Modules/Events/Strings.php:182
395
- #: src/lib/src/Modules/Events/Strings.php:186
396
- #: src/lib/src/Modules/Events/Strings.php:190
397
- #: src/lib/src/Modules/Events/Strings.php:194
398
- #: src/lib/src/Modules/Events/Strings.php:198
399
- #: src/lib/src/Modules/Events/Strings.php:202
400
- #: src/lib/src/Modules/Firewall/Strings.php:24
401
- #: src/lib/src/Modules/Plugin/Strings.php:411
402
- msgid "Firewall"
403
  msgstr ""
404
 
405
- #: src/features/firewall.php:87
406
- msgid "Block Malicious Requests"
 
 
 
407
  msgstr ""
408
 
409
- #: src/features/firewall.php:101
410
- msgid "Your site is protected against malicious requests"
 
 
 
411
  msgstr ""
412
 
413
- #: src/features/firewall.php:102
414
- msgid "Your site is not protected against malicious requests"
415
  msgstr ""
416
 
417
- #: src/features/firewall.php:110
418
- msgid "Ignore Admins"
419
  msgstr ""
420
 
421
- #: src/features/firewall.php:113
422
- msgid "Firewall rules are also applied to admins"
423
  msgstr ""
424
 
425
- #: src/features/firewall.php:114
426
- msgid "Firewall rules aren't applied to admins"
 
427
  msgstr ""
428
 
429
- #: src/features/hack_protect.php:165
430
- #, php-format
431
- msgid "%s per day"
 
432
  msgstr ""
433
 
434
- #: src/features/hack_protect.php:479
435
- msgid "Re-install First"
 
 
436
  msgstr ""
437
 
438
- #: src/features/hack_protect.php:480
439
- msgid "Then Activate"
 
 
 
 
 
 
 
 
 
 
 
440
  msgstr ""
441
 
442
- #: src/features/hack_protect.php:482 src/features/license.php:551
443
- #: src/lib/src/Modules/Base/Strings.php:42 src/lib/src/Tables/Build/Ip.php:54
444
- #: src/lib/src/Tables/Build/ScanBase.php:62
445
- #: src/lib/src/Tables/Build/Sessions.php:68
446
- #: src/lib/src/Tables/Build/Traffic.php:109
447
- msgid "Yes"
448
  msgstr ""
449
 
450
- #: src/features/hack_protect.php:482
451
- msgid "Re-Install It"
 
 
 
 
 
 
 
 
 
 
 
 
452
  msgstr ""
453
 
454
- #: src/features/hack_protect.php:483
455
- msgid "Activate Only"
 
456
  msgstr ""
457
 
458
- #: src/features/hack_protect.php:484
459
- msgid "Cancel"
460
  msgstr ""
461
 
462
- #: src/features/hack_protect.php:528 src/features/license.php:543
463
- #: src/lib/src/Modules/Base/Strings.php:44
464
- #: src/lib/src/Modules/Plugin/Strings.php:325
465
- #: src/processors/hack_protect.php:87 src/processors/hack_protect.php:117
466
- msgid "Never"
 
 
 
 
 
 
 
 
 
 
467
  msgstr ""
468
 
469
- #: src/features/hack_protect.php:529
470
- #, php-format
471
- msgid "Last Scan Time: %s"
 
 
 
 
 
 
 
 
 
 
 
 
472
  msgstr ""
473
 
474
- #: src/features/hack_protect.php:545
 
 
 
 
 
 
 
 
 
 
 
 
475
  #, php-format
476
- msgid ""
477
- "Sorry, this feature is not available because we cannot write to disk at this "
478
- "location: \"%s\""
479
  msgstr ""
480
 
481
- #: src/features/hack_protect.php:551
482
- #, php-format
483
- msgid "Not available because the %s extension is not available."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
484
  msgstr ""
485
 
486
- #: src/features/hack_protect.php:554
487
  msgid ""
488
- "Not available because PHP/WordPress doesn't have direct filesystem access."
489
- msgstr ""
490
-
491
- #: src/features/hack_protect.php:559
492
- #, php-format
493
- msgid "The %s file isn't writable and so can't be further protected."
494
- msgstr ""
495
-
496
- #: src/features/hack_protect.php:744 src/features/insights.php:290
497
- msgid "Scans"
498
  msgstr ""
499
 
500
- #: src/features/hack_protect.php:752
501
- msgid "Core File scanner is not enabled."
502
- msgstr ""
503
-
504
- #: src/features/hack_protect.php:755
505
- msgid "Automatic WordPress Core File scanner should be turned-on."
506
- msgstr ""
507
-
508
- #: src/features/hack_protect.php:761
509
- msgid "Modified WordPress core files found."
510
- msgstr ""
511
-
512
- #: src/features/hack_protect.php:763 src/features/hack_protect.php:784
513
- #: src/features/hack_protect.php:805 src/features/hack_protect.php:826
514
- #: src/features/hack_protect.php:847 src/features/hack_protect.php:868
515
- msgid "Run Scan"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
516
  msgstr ""
517
 
518
- #: src/features/hack_protect.php:764
519
- msgid "Scan WP core files and repair any files that are flagged as modified."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
520
  msgstr ""
521
 
522
- #: src/features/hack_protect.php:773
523
- msgid "Unrecognised File scanner is not enabled."
 
524
  msgstr ""
525
 
526
- #: src/features/hack_protect.php:776
527
- msgid "Automatic scanning for non-WordPress core files is recommended."
528
  msgstr ""
529
 
530
- #: src/features/hack_protect.php:782
531
- msgid "Unrecognised files found in WordPress Core directory."
 
 
532
  msgstr ""
533
 
534
- #: src/features/hack_protect.php:785
535
- msgid ""
536
- "Scan and remove any files that are not meant to be in the WP core "
537
- "directories."
538
  msgstr ""
539
 
540
- #: src/features/hack_protect.php:794
541
- msgid "Automatic Plugin/Themes Guard is not enabled."
542
  msgstr ""
543
 
544
- #: src/features/hack_protect.php:797
545
- msgid "Automatic detection of plugin/theme modifications is recommended."
 
 
 
 
 
 
 
 
 
 
 
 
 
546
  msgstr ""
547
 
548
- #: src/features/hack_protect.php:803
549
- msgid "A plugin/theme was found to have been modified."
 
 
 
 
 
 
 
 
 
 
 
550
  msgstr ""
551
 
552
- #: src/features/hack_protect.php:806
553
- msgid "Reviewing modifications to your plugins/themes is recommended."
 
 
 
 
 
 
 
 
 
 
 
 
554
  msgstr ""
555
 
556
- #: src/features/hack_protect.php:815
557
- msgid "Vulnerability Scanner is not enabled."
558
  msgstr ""
559
 
560
- #: src/features/hack_protect.php:818
561
- msgid "Automatic detection of vulnerabilities is recommended."
562
  msgstr ""
563
 
564
- #: src/features/hack_protect.php:824
565
- msgid "At least 1 item has known vulnerabilities."
566
  msgstr ""
567
 
568
- #: src/features/hack_protect.php:827
569
  msgid ""
570
- "Items with known vulnerabilities should be updated, removed, or replaced."
 
571
  msgstr ""
572
 
573
- #: src/features/hack_protect.php:836
574
- msgid "Abandoned Plugins Scanner is not enabled."
 
575
  msgstr ""
576
 
577
- #: src/features/hack_protect.php:839
578
- msgid "Automatic detection of abandoned plugins is recommended."
579
  msgstr ""
580
 
581
- #: src/features/hack_protect.php:845
582
- msgid "At least 1 plugin on your site is abandoned."
583
  msgstr ""
584
 
585
- #: src/features/hack_protect.php:848
586
  msgid ""
587
- "Plugins that have been abandoned represent a potential risk to your site."
 
588
  msgstr ""
589
 
590
- #: src/features/hack_protect.php:857 src/features/hack_protect.php:1000
591
- #: src/features/hack_protect.php:1012
592
  #, php-format
593
- msgid "%s Scanner is not enabled."
594
- msgstr ""
595
-
596
- #: src/features/hack_protect.php:860
597
- msgid "Automatic detection of Malware is recommended."
598
  msgstr ""
599
 
600
- #: src/features/hack_protect.php:866
601
- msgid "At least 1 file with potential Malware has been discovered."
602
- msgstr ""
603
-
604
- #: src/features/hack_protect.php:869
605
- msgid ""
606
- "Files identified as potential malware should be examined as soon as possible."
607
  msgstr ""
608
 
609
- #: src/features/hack_protect.php:893
610
- #: src/lib/src/Modules/HackGuard/Strings.php:94
611
- #: src/lib/src/Modules/Plugin/Strings.php:413
612
- msgid "Hack Guard"
613
  msgstr ""
614
 
615
- #: src/features/hack_protect.php:894
616
- msgid "Threats/Intrusions Detection & Repair"
617
  msgstr ""
618
 
619
- #: src/features/hack_protect.php:906
620
- msgid "Scan Frequency"
621
  msgstr ""
622
 
623
- #: src/features/hack_protect.php:909
624
- msgid "Automatic scanners run more than once per day"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
625
  msgstr ""
626
 
627
- #: src/features/hack_protect.php:910
628
- msgid "Automatic scanners only run once per day"
 
629
  msgstr ""
630
 
631
- #: src/features/hack_protect.php:917
632
- msgid "WP Core File Scan"
633
  msgstr ""
634
 
635
- #: src/features/hack_protect.php:920
636
- msgid "Core files scanned regularly for hacks"
637
  msgstr ""
638
 
639
- #: src/features/hack_protect.php:921
640
- msgid "Core files are never scanned for hacks!"
641
  msgstr ""
642
 
643
- #: src/features/hack_protect.php:927
644
- msgid "WP Core File Repair"
645
  msgstr ""
646
 
647
- #: src/features/hack_protect.php:930
648
- msgid "Core files are automatically repaired"
649
  msgstr ""
650
 
651
- #: src/features/hack_protect.php:931
652
- msgid "Core files aren't automatically repaired!"
653
  msgstr ""
654
 
655
- #: src/features/hack_protect.php:939 src/lib/src/Modules/Events/Strings.php:107
656
- #: src/lib/src/Modules/Events/Strings.php:131
657
- #: src/lib/src/Modules/HackGuard/Strings.php:26
658
- #: src/lib/src/Modules/HackGuard/Strings.php:118
659
- msgid "Unrecognised Files"
660
  msgstr ""
661
 
662
- #: src/features/hack_protect.php:942
663
- msgid "Core directories scanned regularly for unrecognised files"
664
  msgstr ""
665
 
666
- #: src/features/hack_protect.php:943
667
- msgid "WP Core is never scanned for unrecognised files!"
 
668
  msgstr ""
669
 
670
- #: src/features/hack_protect.php:949
671
- msgid "Unrecognised Files Removal"
672
  msgstr ""
673
 
674
- #: src/features/hack_protect.php:952
675
- msgid "Unrecognised files are automatically removed"
676
  msgstr ""
677
 
678
- #: src/features/hack_protect.php:953
679
- msgid "Unrecognised files aren't automatically removed!"
680
  msgstr ""
681
 
682
- #: src/features/hack_protect.php:961
683
- msgid "Vulnerability Scan"
 
684
  msgstr ""
685
 
686
- #: src/features/hack_protect.php:964
687
- msgid "Regularly scanning for known vulnerabilities"
 
688
  msgstr ""
689
 
690
- #: src/features/hack_protect.php:965
691
- msgid "Plugins/Themes never scanned for vulnerabilities!"
692
  msgstr ""
693
 
694
- #: src/features/hack_protect.php:971
695
- msgid "Auto Update"
 
 
 
 
696
  msgstr ""
697
 
698
- #: src/features/hack_protect.php:974
699
- msgid "Vulnerable items are automatically updated"
 
 
 
 
 
700
  msgstr ""
701
 
702
- #: src/features/hack_protect.php:975
703
- msgid "Vulnerable items aren't automatically updated!"
 
 
704
  msgstr ""
705
 
706
- #: src/features/hack_protect.php:984 src/lib/src/Modules/Events/Strings.php:103
707
- #: src/lib/src/Modules/Events/Strings.php:127
708
- #: src/lib/src/Modules/HackGuard/Strings.php:24
709
- msgid "Plugin/Theme Guard"
 
710
  msgstr ""
711
 
712
- #: src/features/hack_protect.php:987
713
- msgid "Plugins and Themes are guarded against tampering"
714
  msgstr ""
715
 
716
- #: src/features/hack_protect.php:988
717
- msgid "Plugins and Themes are never scanned for tampering!"
718
  msgstr ""
719
 
720
- #: src/features/hack_protect.php:999 src/features/hack_protect.php:1011
721
  #, php-format
722
- msgid "%s Scanner is enabled."
723
  msgstr ""
724
 
725
- #: src/features/headers.php:133
726
- msgid "HTTP Security Headers"
727
  msgstr ""
728
 
729
- #: src/features/headers.php:134
730
- msgid "Protect Visitors With Powerful HTTP Headers"
731
  msgstr ""
732
 
733
- #: src/features/headers.php:147 src/lib/src/Modules/Plugin/Strings.php:414
734
- msgid "HTTP Headers"
735
  msgstr ""
736
 
737
- #: src/features/headers.php:150
738
- msgid "All important security Headers have been set"
 
739
  msgstr ""
740
 
741
- #: src/features/headers.php:151
742
- msgid "At least one of the HTTP Headers hasn't been set"
743
  msgstr ""
744
 
745
- #: src/features/headers.php:157
746
- msgid "Content Security Policies"
 
747
  msgstr ""
748
 
749
- #: src/features/headers.php:160
750
- msgid "Content Security Policy is turned on"
751
  msgstr ""
752
 
753
- #: src/features/headers.php:161
754
- msgid "Content Security Policies aren't active"
 
755
  msgstr ""
756
 
757
- #: src/features/insights.php:81
758
- msgid "Audit Trail Filters"
759
  msgstr ""
760
 
761
- #: src/features/insights.php:82 src/features/insights.php:176
762
- msgid "Providing a username will cause the 'logged-in' filter to be ignored."
763
  msgstr ""
764
 
765
- #: src/features/insights.php:83 src/features/insights.php:174
766
- msgid "Exclude Your Current IP"
767
  msgstr ""
768
 
769
- #: src/features/insights.php:84 src/features/insights.php:175
770
- msgid "Exclude Your IP From Results"
 
771
  msgstr ""
772
 
773
- #: src/features/insights.php:85
774
- msgid "Context"
775
  msgstr ""
776
 
777
- #: src/features/insights.php:86 src/lib/src/Modules/AuditTrail/Strings.php:97
778
- msgid "Event"
 
 
 
779
  msgstr ""
780
 
781
- #: src/features/insights.php:87
782
- msgid "show results that occurred after"
783
  msgstr ""
784
 
785
- #: src/features/insights.php:88
786
- msgid "show results that occurred before"
 
787
  msgstr ""
788
 
789
- #: src/features/insights.php:110
790
- #, php-format
791
- msgid "Offenses required for IP block: %s"
792
  msgstr ""
793
 
794
- #: src/features/insights.php:114
795
  #, php-format
796
- msgid "Black listed IPs auto-expire after: %s"
797
  msgstr ""
798
 
799
- #: src/features/insights.php:121 src/lib/src/Modules/Plugin/Strings.php:380
800
- msgid "IP Whitelist"
801
  msgstr ""
802
 
803
- #: src/features/insights.php:122
804
- msgid "IP Blacklist"
 
 
805
  msgstr ""
806
 
807
- #: src/features/insights.php:123
 
808
  #, php-format
809
- msgid "IP addresses that are never blocked by %s."
810
  msgstr ""
811
 
812
- #: src/features/insights.php:124
813
- #, php-format
814
- msgid "IP addresses that have tripped %s defenses."
815
  msgstr ""
816
 
817
- #: src/features/insights.php:125
818
- msgid "Enter IP address to block"
 
 
819
  msgstr ""
820
 
821
- #: src/features/insights.php:126
822
- msgid "Enter IP address to whitelist"
823
  msgstr ""
824
 
825
- #: src/features/insights.php:127
826
- msgid "Label for IP"
 
 
827
  msgstr ""
828
 
829
- #: src/features/insights.php:128
830
- msgid "New IP"
831
  msgstr ""
832
 
833
- #: src/features/insights.php:129
834
- msgid "Block IP"
 
835
  msgstr ""
836
 
837
- #: src/features/insights.php:147
838
- msgid "Administrator Notes"
839
  msgstr ""
840
 
841
- #: src/features/insights.php:148
842
- msgid "Use this feature to make ongoing notes and to-dos"
 
 
 
843
  msgstr ""
844
 
845
- #: src/features/insights.php:149
846
- msgid "Add Note"
847
  msgstr ""
848
 
849
- #: src/features/insights.php:150
850
- msgid "New Note"
851
  msgstr ""
852
 
853
- #: src/features/insights.php:151
854
- msgid "Enter new note here"
855
  msgstr ""
856
 
857
- #: src/features/insights.php:169
858
- msgid "Traffic Table Filters"
859
  msgstr ""
860
 
861
- #: src/features/insights.php:170
862
- msgid "Traffic Watch"
863
  msgstr ""
864
 
865
- #: src/features/insights.php:171
866
- msgid "Watch and review requests to your site"
867
  msgstr ""
868
 
869
- #: src/features/insights.php:172 src/lib/src/Tables/Build/Traffic.php:148
870
- #: src/lib/src/Tables/Render/Traffic.php:14
871
- msgid "Response"
872
  msgstr ""
873
 
874
- #: src/features/insights.php:173
875
- msgid "Page/Path Contains"
876
  msgstr ""
877
 
878
- #: src/features/insights.php:212
879
- msgid "Sessions Table Filters"
880
  msgstr ""
881
 
882
- #: src/features/insights.php:213 src/processors/events.php:53
883
- msgid "User Sessions"
884
  msgstr ""
885
 
886
- #: src/features/insights.php:214
887
- msgid "Review and manage current user sessions"
 
 
888
  msgstr ""
889
 
890
- #: src/features/insights.php:215
891
- msgid ""
892
- "Some sessions may have expired but haven't been automatically cleaned from "
893
- "the database yet"
894
  msgstr ""
895
 
896
- #: src/features/insights.php:216 src/lib/src/Modules/AuditTrail/Strings.php:99
897
- #: src/lib/src/Modules/Base/Strings.php:49
898
- #: src/lib/src/Modules/UserManagement/Strings.php:16
899
- #: src/lib/src/Tables/Render/AdminNotes.php:31
900
- #: src/processors/loginprotect_intentprovider_backup.php:164
901
- #: src/processors/loginprotect_intentprovider_email.php:155
902
- #: src/processors/user_management.php:203
903
- #: src/processors/user_management.php:235
904
- msgid "Username"
905
  msgstr ""
906
 
907
- #: src/features/insights.php:268
908
- msgid "Recent Events Log"
 
 
909
  msgstr ""
910
 
911
- #: src/features/insights.php:269
912
- msgid "Security Notices"
 
 
913
  msgstr ""
914
 
915
- #: src/features/insights.php:270
916
- msgid "Potential security issues on your site right now"
917
  msgstr ""
918
 
919
- #: src/features/insights.php:271
920
- msgid "Plugin Configuration Summary"
921
  msgstr ""
922
 
923
- #: src/features/insights.php:272
924
- msgid "click to toggle"
 
 
925
  msgstr ""
926
 
927
- #: src/features/insights.php:277 src/lib/src/Modules/License/Strings.php:31
928
- msgid "Key"
929
- msgstr ""
930
-
931
- #: src/features/insights.php:278
932
- msgid "Positive Security"
933
- msgstr ""
934
-
935
- #: src/features/insights.php:279
936
- msgid "Potential Warning"
937
- msgstr ""
938
-
939
- #: src/features/insights.php:280
940
- msgid "Potential Danger"
941
  msgstr ""
942
 
943
- #: src/features/insights.php:281
944
- msgid "Information"
945
  msgstr ""
946
 
947
- #: src/features/insights.php:288 src/lib/src/Modules/Base/Strings.php:39
948
- msgid "Settings"
 
949
  msgstr ""
950
 
951
- #: src/features/insights.php:289
952
- msgid "Overview"
953
  msgstr ""
954
 
955
- #: src/features/insights.php:291
956
- msgid "IP Lists"
 
957
  msgstr ""
958
 
959
- #: src/features/insights.php:293 src/features/user_management.php:291
960
- #: src/lib/src/Modules/AuditTrail/Strings.php:90
961
- msgid "Users"
962
  msgstr ""
963
 
964
- #: src/features/insights.php:294 src/features/insights.php:302
965
- msgid "Pro"
 
966
  msgstr ""
967
 
968
- #: src/features/insights.php:295
969
- msgid "Traffic"
970
  msgstr ""
971
 
972
- #: src/features/insights.php:296
973
- msgid "Notes"
974
  msgstr ""
975
 
976
- #: src/features/insights.php:298 src/lib/src/Modules/Plugin/Strings.php:80
977
- #: src/lib/src/Modules/Plugin/Strings.php:85
978
- msgid "Import"
 
 
979
  msgstr ""
980
 
981
- #: src/features/insights.php:298 src/lib/src/Modules/Plugin/Strings.php:80
982
- #: src/lib/src/Modules/Plugin/Strings.php:85
983
- msgid "Export"
984
  msgstr ""
985
 
986
- #: src/features/insights.php:480 src/processors/plugin_importexport.php:74
987
- msgid "Downloading file, please wait..."
988
  msgstr ""
989
 
990
- #: src/features/insights.php:481 src/processors/plugin_importexport.php:75
991
- msgid "There was a problem downloading the file."
 
 
992
  msgstr ""
993
 
994
- #: src/features/insights.php:482
995
- msgid "Please select an action to perform."
996
  msgstr ""
997
 
998
- #: src/features/insights.php:483 src/processors/hackprotect_scan_ptg.php:157
999
- msgid "Are you sure?"
1000
  msgstr ""
1001
 
1002
- #: src/features/insights.php:577
1003
- msgid "Site"
1004
  msgstr ""
1005
 
1006
- #: src/features/insights.php:601
1007
- msgid "SSL certificate for this site has expired."
1008
  msgstr ""
1009
 
1010
- #: src/features/insights.php:604
1011
  #, php-format
1012
- msgid "SSL certificate will expire soon (in %s days)"
 
 
1013
  msgstr ""
1014
 
1015
- #: src/features/insights.php:611
1016
- msgid "Check or renew your SSL certificate."
 
 
1017
  msgstr ""
1018
 
1019
- #: src/features/insights.php:634
1020
- msgid "DB Password appears to be weak."
 
 
 
1021
  msgstr ""
1022
 
1023
- #: src/features/insights.php:636
1024
- msgid "The database password should be strong."
 
1025
  msgstr ""
1026
 
1027
- #: src/features/insights.php:651 src/features/insights.php:662
1028
- #: src/lib/src/Modules/AuditTrail/Strings.php:91
1029
- #: src/lib/src/Modules/AuditTrail/Strings.php:213
1030
- #: src/lib/src/Modules/AuditTrail/Strings.php:214
1031
- #: src/lib/src/Modules/Autoupdates/Strings.php:123
1032
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:143
1033
- msgid "Plugins"
1034
  msgstr ""
1035
 
1036
- #: src/features/insights.php:659
1037
- msgid "Inactive"
1038
  msgstr ""
1039
 
1040
- #: src/features/insights.php:660
1041
- #, php-format
1042
- msgid "%s inactive plugin(s)"
 
 
 
 
 
 
 
1043
  msgstr ""
1044
 
1045
- #: src/features/insights.php:663
1046
- msgid "Unused plugins should be removed."
1047
  msgstr ""
1048
 
1049
- #: src/features/insights.php:673
1050
- #, php-format
1051
- msgid "%s plugin update(s)"
1052
  msgstr ""
1053
 
1054
- #: src/features/insights.php:675 src/features/insights.php:715
1055
- #: src/features/insights.php:741
1056
- msgid "Updates"
 
1057
  msgstr ""
1058
 
1059
- #: src/features/insights.php:676 src/features/insights.php:716
1060
- #: src/features/insights.php:742
1061
- msgid "Updates should be applied as early as possible."
1062
  msgstr ""
1063
 
1064
- #: src/features/insights.php:691 src/features/insights.php:702
1065
- #: src/lib/src/Modules/AuditTrail/Strings.php:92
1066
- #: src/lib/src/Modules/AuditTrail/Strings.php:219
1067
- #: src/lib/src/Modules/AuditTrail/Strings.php:220
1068
- #: src/lib/src/Modules/Autoupdates/Strings.php:135
1069
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:162
1070
- msgid "Themes"
1071
  msgstr ""
1072
 
1073
- #: src/features/insights.php:700
1074
- #, php-format
1075
- msgid "%s inactive themes(s)"
1076
  msgstr ""
1077
 
1078
- #: src/features/insights.php:703
1079
- msgid "Unused themes should be removed."
1080
  msgstr ""
1081
 
1082
- #: src/features/insights.php:713
1083
- #, php-format
1084
- msgid "%s theme update(s)"
 
 
 
1085
  msgstr ""
1086
 
1087
- #: src/features/insights.php:731
1088
- msgid "WordPress Core"
 
 
1089
  msgstr ""
1090
 
1091
- #: src/features/insights.php:739
1092
- msgid "WordPress Core has an update available."
1093
  msgstr ""
1094
 
1095
- #: src/features/insights.php:751
1096
- msgid "WordPress does not automatically install updates."
 
 
 
 
1097
  msgstr ""
1098
 
1099
- #: src/features/insights.php:754
1100
- msgid "Minor WordPress upgrades should be applied automatically."
1101
  msgstr ""
1102
 
1103
- #: src/features/insights.php:780 src/processors/events.php:45
1104
- msgid "Login Blocks"
 
1105
  msgstr ""
1106
 
1107
- #: src/features/insights.php:782
1108
- msgid "Total login attempts blocked."
1109
  msgstr ""
1110
 
1111
- #: src/features/insights.php:785 src/processors/events.php:41
1112
- msgid "Firewall Blocks"
1113
  msgstr ""
1114
 
1115
- #: src/features/insights.php:787
1116
- msgid "Total requests blocked by firewall rules."
1117
  msgstr ""
1118
 
1119
- #: src/features/insights.php:790 src/processors/events.php:33
1120
- msgid "Comment Blocks"
 
1121
  msgstr ""
1122
 
1123
- #: src/features/insights.php:796
1124
- msgid "Total SPAM comments blocked."
1125
  msgstr ""
1126
 
1127
- #: src/features/insights.php:799 src/lib/src/Tables/Render/IpBase.php:23
1128
- #: src/lib/src/Tables/Render/IpBlack.php:14
1129
- msgid "Offenses"
1130
  msgstr ""
1131
 
1132
- #: src/features/insights.php:801
1133
- msgid "Total offenses against the site."
 
 
1134
  msgstr ""
1135
 
1136
- #: src/features/insights.php:804 src/processors/events.php:57
1137
- msgid "IP Blocks"
 
 
 
 
1138
  msgstr ""
1139
 
1140
- #: src/features/insights.php:806
1141
- msgid "Total connections blocked/killed after too many offenses."
 
 
 
 
1142
  msgstr ""
1143
 
1144
- #: src/features/insights.php:809
1145
- msgid "Blacklist IPs"
 
 
 
 
 
1146
  msgstr ""
1147
 
1148
- #: src/features/insights.php:817
1149
- msgid "Current IP addresses with offenses against the site."
1150
  msgstr ""
1151
 
1152
- #: src/features/insights.php:863
1153
- msgid "Not yet recorded"
1154
  msgstr ""
1155
 
1156
- #: src/features/ips.php:91 src/lib/src/Modules/HackGuard/Strings.php:45
1157
- #: src/lib/src/Modules/HackGuard/Strings.php:204
1158
- #: src/lib/src/Modules/Headers/Strings.php:140
1159
- #: src/lib/src/Modules/LoginGuard/Strings.php:81
1160
- #: src/lib/src/Modules/LoginGuard/Strings.php:109
1161
- #: src/lib/src/Modules/LoginGuard/Strings.php:118
1162
- #: src/lib/src/Modules/LoginGuard/Strings.php:136
1163
- #: src/lib/src/Modules/LoginGuard/Strings.php:213
1164
- #: src/lib/src/Modules/LoginGuard/Strings.php:221
1165
- #: src/lib/src/Modules/LoginGuard/Strings.php:235
1166
- #: src/lib/src/Modules/Plugin/Strings.php:101
1167
- #: src/lib/src/Modules/Plugin/Strings.php:105
1168
- #: src/lib/src/Modules/Plugin/Strings.php:201
1169
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:120
1170
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:139
1171
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:146
1172
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:167
1173
- #: src/lib/src/Modules/Traffic/Strings.php:127
1174
- #: src/lib/src/Tables/Render/AdminNotes.php:30
1175
- #: src/processors/hackprotect_scan_ptg.php:161
1176
- msgid "Note"
1177
  msgstr ""
1178
 
1179
- #: src/features/ips.php:91
1180
- msgid "IP blocking is turned-off because the offenses limit is set to 0."
1181
  msgstr ""
1182
 
1183
- #: src/features/ips.php:99
1184
- msgid "Since the offenses limit is set to 0, these options have no effect."
1185
  msgstr ""
1186
 
1187
- #: src/features/ips.php:103
1188
- msgid ""
1189
- "Your User Agent appears to be empty. We recommend not turning on this option."
 
1190
  msgstr ""
1191
 
1192
- #: src/features/ips.php:121 src/features/ips.php:128
1193
- #: src/lib/src/Modules/Firewall/Strings.php:138
1194
- #: src/lib/src/Modules/HackGuard/Strings.php:259
1195
- #: src/lib/src/Modules/HackGuard/Strings.php:283
1196
- #: src/lib/src/Modules/HackGuard/Strings.php:284
1197
- #: src/lib/src/Modules/HackGuard/Strings.php:367
1198
- #: src/lib/src/Modules/IPs/Strings.php:66
1199
- #: src/lib/src/Modules/Lockdown/Strings.php:130
1200
- #: src/lib/src/Modules/Lockdown/Strings.php:143
1201
- #: src/lib/src/Modules/Plugin/AdminNotices.php:88
1202
- #: src/lib/src/Modules/Plugin/Strings.php:217
1203
- #: src/lib/src/Modules/Traffic/Strings.php:54
1204
- #: src/processors/hackprotect_scan_apc.php:100
1205
- #: src/processors/hackprotect_scan_mal.php:119
1206
- #: src/processors/hackprotect_scan_ptg.php:617
1207
- #: src/processors/hackprotect_scan_ufc.php:85
1208
- #: src/processors/hackprotect_scan_wcf.php:71
1209
- #: src/processors/hackprotect_scan_wpv.php:261
1210
- #: src/processors/loginprotect_wplogin.php:75
1211
- #: src/processors/loginprotect_wplogin.php:93
1212
- msgid "Warning"
1213
  msgstr ""
1214
 
1215
- #: src/features/ips.php:122
1216
- msgid ""
1217
- "Repeated login attempts that fail will result in a complete ban of your IP "
1218
- "Address."
1219
  msgstr ""
1220
 
1221
- #: src/features/ips.php:129
1222
- #, php-format
1223
- msgid ""
1224
- "You have %s remaining offenses(s) against this site and then your IP address "
1225
- "will be completely blocked."
1226
  msgstr ""
1227
 
1228
- #: src/features/ips.php:130
1229
- msgid "Seriously, stop repeating what you are doing or you will be locked out."
1230
  msgstr ""
1231
 
1232
- #: src/features/license.php:116
1233
- msgid "Automatic license verification failed."
1234
  msgstr ""
1235
 
1236
- #: src/features/license.php:211
1237
- msgid "Attempts to verify Shield Pro license has just failed."
1238
  msgstr ""
1239
 
1240
- #: src/features/license.php:212 src/features/license.php:239
1241
- #, php-format
1242
- msgid "Please check your license on-site: %s"
1243
  msgstr ""
1244
 
1245
- #: src/features/license.php:213 src/features/license.php:240
1246
- #, php-format
1247
- msgid "If this problem persists, please contact support: %s"
1248
  msgstr ""
1249
 
1250
- #: src/features/license.php:238
1251
- msgid "All attempts to verify Shield Pro license have failed."
1252
  msgstr ""
1253
 
1254
- #: src/features/license.php:551
1255
- msgid "Not Active"
1256
  msgstr ""
1257
 
1258
- #: src/features/lockdown.php:70 src/lib/src/Modules/Plugin/Strings.php:418
1259
- msgid "WP Lockdown"
1260
  msgstr ""
1261
 
1262
- #: src/features/lockdown.php:78 src/features/lockdown.php:113
1263
- msgid "File Editing via WP"
1264
  msgstr ""
1265
 
1266
- #: src/features/lockdown.php:79
1267
- msgid "Direct editing of plugin/theme files is permitted."
1268
  msgstr ""
1269
 
1270
- #: src/features/lockdown.php:82
1271
- msgid "WP Plugin file editing should be disabled."
1272
  msgstr ""
1273
 
1274
- #: src/features/lockdown.php:100
1275
- msgid "WordPress Lockdown"
 
 
 
1276
  msgstr ""
1277
 
1278
- #: src/features/lockdown.php:101
1279
- msgid "Restrict WP Functionality e.g. XMLRPC & REST API"
1280
  msgstr ""
1281
 
1282
- #: src/features/lockdown.php:116
1283
- msgid "File editing is disabled"
1284
  msgstr ""
1285
 
1286
- #: src/features/lockdown.php:117
1287
- msgid "File editing is permitted through WP admin"
1288
  msgstr ""
1289
 
1290
- #: src/features/lockdown.php:124 src/lib/src/Modules/Events/Strings.php:234
1291
- msgid "XML-RPC"
 
1292
  msgstr ""
1293
 
1294
- #: src/features/lockdown.php:127
1295
- msgid "XML-RPC is disabled"
 
 
1296
  msgstr ""
1297
 
1298
- #: src/features/lockdown.php:128
1299
- msgid "XML-RPC is not blocked"
 
 
1300
  msgstr ""
1301
 
1302
- #: src/features/lockdown.php:135
1303
- msgid "REST API"
1304
  msgstr ""
1305
 
1306
- #: src/features/lockdown.php:138
1307
- msgid "Anonymous REST API is disabled"
 
 
1308
  msgstr ""
1309
 
1310
- #: src/features/lockdown.php:139
1311
- msgid "Anonymous REST API is allowed"
 
1312
  msgstr ""
1313
 
1314
- #: src/features/login_protect.php:71
1315
- msgid "Email verification completed successfully."
 
 
1316
  msgstr ""
1317
 
1318
- #: src/features/login_protect.php:75
1319
- msgid "Email verification could not be completed."
 
 
1320
  msgstr ""
1321
 
1322
- #: src/features/login_protect.php:93
1323
- msgid ""
1324
- "Before enabling 2-factor email authentication for your WordPress site, you "
1325
- "must verify you can receive this email."
1326
  msgstr ""
1327
 
1328
- #: src/features/login_protect.php:94
1329
  msgid ""
1330
- "This verifies your website can send email and that your account can receive "
1331
- "emails sent from your site."
1332
  msgstr ""
1333
 
1334
- #: src/features/login_protect.php:99
1335
- #, php-format
1336
- msgid "Click the verify link: %s"
1337
  msgstr ""
1338
 
1339
- #: src/features/login_protect.php:102
1340
- #, php-format
1341
- msgid "Here's your code for the guided wizard: %s"
1342
  msgstr ""
1343
 
1344
- #: src/features/login_protect.php:105
1345
- msgid "Email Sending Verification"
 
1346
  msgstr ""
1347
 
1348
- #: src/features/login_protect.php:171
1349
- msgid "Subscribers"
1350
  msgstr ""
1351
 
1352
- #: src/features/login_protect.php:172
1353
- msgid "Contributors"
1354
  msgstr ""
1355
 
1356
- #: src/features/login_protect.php:173
1357
- msgid "Authors"
1358
  msgstr ""
1359
 
1360
- #: src/features/login_protect.php:174
1361
- msgid "Editors"
1362
  msgstr ""
1363
 
1364
- #: src/features/login_protect.php:175
1365
- #: src/lib/src/Modules/Firewall/Strings.php:160
1366
- #: src/lib/src/Modules/Firewall/Strings.php:161
1367
- msgid "Administrators"
1368
  msgstr ""
1369
 
1370
- #: src/features/login_protect.php:458
1371
- msgid "I'm a human."
1372
  msgstr ""
1373
 
1374
- #: src/features/login_protect.php:462
1375
- msgid "Please check the box to show us you're a human."
 
1376
  msgstr ""
1377
 
1378
- #: src/features/login_protect.php:497
1379
- #, php-format
1380
- msgid "Support for login protection with %s is a Pro-only feature."
1381
  msgstr ""
1382
 
1383
- #: src/features/login_protect.php:503
1384
- msgid ""
1385
- "2FA by email demands that your WP site is properly configured to send email."
1386
  msgstr ""
1387
 
1388
- #: src/features/login_protect.php:504
1389
  msgid ""
1390
- "This is a common problem and you may get locked out in the future if you "
1391
- "ignore this."
1392
  msgstr ""
1393
 
1394
- #: src/features/login_protect.php:505
1395
- #: src/lib/src/Modules/Plugin/AdminNotices.php:194
1396
- #: src/processors/lockdown.php:96
1397
- msgid "Learn More."
1398
  msgstr ""
1399
 
1400
- #: src/features/login_protect.php:586
1401
- #: src/lib/src/Modules/LoginGuard/Strings.php:71
1402
- #: src/lib/src/Modules/Plugin/Strings.php:420 src/wizards/plugin.php:549
1403
- #: src/wizards/plugin.php:554
1404
- msgid "Login Guard"
1405
  msgstr ""
1406
 
1407
- #: src/features/login_protect.php:587
1408
- msgid "Brute Force Protection & Identity Verification"
1409
  msgstr ""
1410
 
1411
- #: src/features/login_protect.php:603
1412
- msgid "Brute Force Login"
 
 
1413
  msgstr ""
1414
 
1415
- #: src/features/login_protect.php:606
1416
- msgid "Login forms are protected against bot attacks"
1417
  msgstr ""
1418
 
1419
- #: src/features/login_protect.php:607
1420
- msgid "Login forms are not protected against brute force bot attacks"
 
1421
  msgstr ""
1422
 
1423
- #: src/features/login_protect.php:612
1424
- msgid "Bot User Register"
 
1425
  msgstr ""
1426
 
1427
- #: src/features/login_protect.php:615
1428
- msgid "Registration forms are protected against bot attacks"
 
 
1429
  msgstr ""
1430
 
1431
- #: src/features/login_protect.php:616
1432
- msgid "Registration forms are not protected against automated bots"
 
1433
  msgstr ""
1434
 
1435
- #: src/features/login_protect.php:621
1436
- msgid "Brute Force Lost Password"
 
1437
  msgstr ""
1438
 
1439
- #: src/features/login_protect.php:624
1440
- msgid "Lost Password forms are protected against bot attacks"
 
1441
  msgstr ""
1442
 
1443
- #: src/features/login_protect.php:625
1444
- msgid "Lost Password forms are not protected against automated bots"
 
1445
  msgstr ""
1446
 
1447
- #: src/features/login_protect.php:633
1448
- msgid "Identity Verification"
 
1449
  msgstr ""
1450
 
1451
- #: src/features/login_protect.php:636
1452
- msgid "At least 1 2FA option is enabled"
 
1453
  msgstr ""
1454
 
1455
- #: src/features/login_protect.php:637
1456
- msgid "No 2FA options, such as Google Authenticator, are active"
 
1457
  msgstr ""
1458
 
1459
- #: src/features/plugin.php:165 src/lib/src/Modules/Plugin/AjaxHandler.php:243
1460
- msgid "Options imported successfully"
1461
  msgstr ""
1462
 
1463
- #: src/features/plugin.php:710 src/lib/src/Modules/Plugin/Strings.php:377
1464
- #: src/processors/plugin_importexport.php:63
1465
- msgid "General Settings"
1466
  msgstr ""
1467
 
1468
- #: src/features/plugin.php:711
1469
- #, php-format
1470
- msgid "General %s Settings"
1471
  msgstr ""
1472
 
1473
- #: src/features/plugin.php:724
1474
- msgid "Visitor IP"
1475
  msgstr ""
1476
 
1477
- #: src/features/plugin.php:726
1478
- #, php-format
1479
- msgid "Visitor IP address source is: %s"
1480
  msgstr ""
1481
 
1482
- #: src/features/plugin.php:734
1483
- msgid "Reporting Email"
 
 
1484
  msgstr ""
1485
 
1486
- #: src/features/plugin.php:737
1487
- #, php-format
1488
- msgid "Email address for reports set to: %s"
1489
  msgstr ""
1490
 
1491
- #: src/features/plugin.php:738
1492
  #, php-format
1493
- msgid "No address provided - defaulting to: %s"
1494
  msgstr ""
1495
 
1496
- #: src/features/plugin.php:746 src/lib/src/Modules/Events/Strings.php:222
1497
- msgid "reCAPTCHA"
1498
  msgstr ""
1499
 
1500
- #: src/features/plugin.php:749
1501
- msgid "Google reCAPTCHA keys have been provided"
1502
  msgstr ""
1503
 
1504
- #: src/features/plugin.php:750
1505
- msgid "Google reCAPTCHA keys haven't been provided"
1506
  msgstr ""
1507
 
1508
- #: src/features/traffic.php:57
1509
- msgid ""
1510
- "Traffic Watcher will not run because visitor IP address detection is not "
1511
- "correctly configured."
1512
  msgstr ""
1513
 
1514
- #: src/features/traffic.php:63
1515
  #, php-format
1516
- msgid "%s is a Pro-only feature."
1517
  msgstr ""
1518
 
1519
- #: src/features/traffic.php:63
1520
- msgid "Traffic Limiting"
 
1521
  msgstr ""
1522
 
1523
- #: src/features/user_management.php:143
1524
- #: src/lib/src/Modules/Plugin/Strings.php:370
1525
- msgid "Very Weak"
 
1526
  msgstr ""
1527
 
1528
- #: src/features/user_management.php:144
1529
- #: src/lib/src/Modules/Plugin/Strings.php:371
1530
- msgid "Weak"
1531
  msgstr ""
1532
 
1533
- #: src/features/user_management.php:145
1534
- #: src/lib/src/Modules/Plugin/Strings.php:372
1535
- #: src/lib/src/Modules/Plugin/Strings.php:441
1536
- msgid "Medium"
1537
  msgstr ""
1538
 
1539
- #: src/features/user_management.php:146
1540
- #: src/lib/src/Modules/Plugin/Strings.php:373
1541
- msgid "Strong"
 
1542
  msgstr ""
1543
 
1544
- #: src/features/user_management.php:147
1545
- #: src/lib/src/Modules/Plugin/Strings.php:374
1546
- msgid "Very Strong"
1547
  msgstr ""
1548
 
1549
- #: src/features/user_management.php:300
1550
- msgid "Default 'admin' user still available."
 
 
1551
  msgstr ""
1552
 
1553
- #: src/features/user_management.php:302
1554
- msgid "Default 'admin' user should be disabled or removed."
1555
  msgstr ""
1556
 
1557
- #: src/features/user_management.php:310 src/features/user_management.php:380
1558
- #: src/lib/src/Modules/Base/Strings.php:26
1559
- #: src/lib/src/Modules/UserManagement/Strings.php:45
1560
- #: src/lib/src/Modules/UserManagement/Strings.php:46
1561
- msgid "Password Policies"
1562
  msgstr ""
1563
 
1564
- #: src/features/user_management.php:311
1565
- msgid "Strong password policies are not enforced."
 
1566
  msgstr ""
1567
 
1568
- #: src/features/user_management.php:314
1569
- msgid "Password policies should be turned-on."
1570
  msgstr ""
1571
 
1572
- #: src/features/user_management.php:332
1573
- #: src/lib/src/Modules/Plugin/Strings.php:429
1574
- #: src/lib/src/Modules/Sessions/Strings.php:24
1575
- #: src/lib/src/Modules/Traffic/Strings.php:43
1576
- #: src/lib/src/Modules/Traffic/Strings.php:53
1577
- #: src/lib/src/Modules/UserManagement/Strings.php:40
1578
- msgid "User Management"
1579
  msgstr ""
1580
 
1581
- #: src/features/user_management.php:333
1582
- msgid "Sessions Control & Password Policies"
 
1583
  msgstr ""
1584
 
1585
- #: src/features/user_management.php:345
1586
- msgid "Idle Users"
1587
  msgstr ""
1588
 
1589
- #: src/features/user_management.php:348
1590
- #, php-format
1591
- msgid "Idle sessions are terminated after %s hours"
1592
  msgstr ""
1593
 
1594
- #: src/features/user_management.php:349
1595
- msgid "Idle sessions wont be terminated"
1596
  msgstr ""
1597
 
1598
- #: src/features/user_management.php:356
1599
- msgid "Lock To IP"
1600
  msgstr ""
1601
 
1602
- #: src/features/user_management.php:359
1603
- msgid "Sessions are locked to IP address"
1604
  msgstr ""
1605
 
1606
- #: src/features/user_management.php:360
1607
- msgid "Sessions aren't locked to IP address"
1608
  msgstr ""
1609
 
1610
- #: src/features/user_management.php:369
1611
- msgid "Pwned Passwords"
 
1612
  msgstr ""
1613
 
1614
- #: src/features/user_management.php:372
1615
- msgid "Pwned passwords are blocked on this site"
1616
  msgstr ""
1617
 
1618
- #: src/features/user_management.php:373
1619
- msgid "Pwned passwords are allowed on this site"
1620
  msgstr ""
1621
 
1622
- #: src/features/user_management.php:383
1623
- msgid "Several password policies are active"
 
 
 
 
 
1624
  msgstr ""
1625
 
1626
- #: src/features/user_management.php:384
1627
- msgid "Limited or no password polices are active"
1628
  msgstr ""
1629
 
1630
- #: src/lib/src/Controller/Controller.php:730
1631
- msgid "Update Now To Keep Your Security Current With The Latest Features."
1632
  msgstr ""
1633
 
1634
- #: src/lib/src/Modules/AuditTrail/AjaxHandler.php:42
1635
- msgid "Invalid audit entry selected for this action"
1636
  msgstr ""
1637
 
1638
- #: src/lib/src/Modules/AuditTrail/AjaxHandler.php:51
1639
- msgid "Audit entry could not be loaded."
1640
  msgstr ""
1641
 
1642
- #: src/lib/src/Modules/AuditTrail/AjaxHandler.php:58
1643
- msgid "Parameter associated with this audit entry could not be found."
1644
  msgstr ""
1645
 
1646
- #: src/lib/src/Modules/AuditTrail/AjaxHandler.php:64
1647
  #, php-format
1648
- msgid "Parameter \"%s\" whitelisted successfully"
1649
  msgstr ""
1650
 
1651
- #: src/lib/src/Modules/AuditTrail/Auditors/Emails.php:21
1652
- msgid "not provided"
1653
  msgstr ""
1654
 
1655
- #: src/lib/src/Modules/AuditTrail/Strings.php:15
1656
- #, php-format
1657
- msgid "Plugin \"%s\" was activated."
1658
  msgstr ""
1659
 
1660
- #: src/lib/src/Modules/AuditTrail/Strings.php:18
1661
  #, php-format
1662
- msgid "Plugin \"%s\" was deactivated."
1663
  msgstr ""
1664
 
1665
- #: src/lib/src/Modules/AuditTrail/Strings.php:21
1666
  #, php-format
1667
- msgid ""
1668
- "An attempt was made to edit the plugin file \"%s\" directly through the "
1669
- "WordPress editor."
1670
  msgstr ""
1671
 
1672
- #: src/lib/src/Modules/AuditTrail/Strings.php:24
1673
- #, php-format
1674
- msgid "Theme \"%s\" was activated."
 
 
1675
  msgstr ""
1676
 
1677
- #: src/lib/src/Modules/AuditTrail/Strings.php:27
1678
- #, php-format
1679
- msgid ""
1680
- "An attempt was made to edit the theme file \"%s\" directly through the "
1681
- "WordPress editor."
1682
  msgstr ""
1683
 
1684
- #: src/lib/src/Modules/AuditTrail/Strings.php:30
1685
- #, php-format
1686
- msgid "WordPress Core was updated from \"%s\" to \"%s\"."
1687
  msgstr ""
1688
 
1689
- #: src/lib/src/Modules/AuditTrail/Strings.php:33
1690
- #, php-format
1691
- msgid "WordPress Permalinks Structure was updated from \"%s\" to \"%s\"."
1692
  msgstr ""
1693
 
1694
- #: src/lib/src/Modules/AuditTrail/Strings.php:36
1695
- #, php-format
1696
- msgid "WordPress Post entitled \"%s\" was permanently deleted from trash."
1697
  msgstr ""
1698
 
1699
- #: src/lib/src/Modules/AuditTrail/Strings.php:39
1700
- #, php-format
1701
- msgid "Post entitled \"%s\" was trashed."
1702
  msgstr ""
1703
 
1704
- #: src/lib/src/Modules/AuditTrail/Strings.php:40
1705
- #: src/lib/src/Modules/AuditTrail/Strings.php:44
1706
- #: src/lib/src/Modules/AuditTrail/Strings.php:48
1707
- #: src/lib/src/Modules/AuditTrail/Strings.php:52
1708
- #: src/lib/src/Modules/AuditTrail/Strings.php:56
1709
- #, php-format
1710
- msgid "Post Type: %s"
1711
  msgstr ""
1712
 
1713
- #: src/lib/src/Modules/AuditTrail/Strings.php:43
1714
- #, php-format
1715
- msgid "Post entitled \"%s\" was recoverd from trash."
1716
  msgstr ""
1717
 
1718
- #: src/lib/src/Modules/AuditTrail/Strings.php:47
1719
- #, php-format
1720
- msgid "Post entitled \"%s\" was updated."
 
 
 
 
1721
  msgstr ""
1722
 
1723
- #: src/lib/src/Modules/AuditTrail/Strings.php:51
1724
- #, php-format
1725
- msgid "Post entitled \"%s\" was published."
1726
  msgstr ""
1727
 
1728
- #: src/lib/src/Modules/AuditTrail/Strings.php:55
1729
- #, php-format
1730
- msgid "Post entitled \"%s\" was unpublished."
1731
  msgstr ""
1732
 
1733
- #: src/lib/src/Modules/AuditTrail/Strings.php:59
 
 
 
 
1734
  #, php-format
1735
- msgid "Attempted user login by \"%s\" was successful."
 
 
1736
  msgstr ""
1737
 
1738
- #: src/lib/src/Modules/AuditTrail/Strings.php:62
1739
- msgid "New WordPress user registered."
1740
  msgstr ""
1741
 
1742
- #: src/lib/src/Modules/AuditTrail/Strings.php:63
1743
- #, php-format
1744
- msgid "New username is \"%s\" with email address \"%s\"."
1745
  msgstr ""
1746
 
1747
- #: src/lib/src/Modules/AuditTrail/Strings.php:66
1748
- msgid "WordPress user deleted."
1749
  msgstr ""
1750
 
1751
- #: src/lib/src/Modules/AuditTrail/Strings.php:67
1752
- #, php-format
1753
- msgid "Username was \"%s\" with email address \"%s\"."
1754
  msgstr ""
1755
 
1756
- #: src/lib/src/Modules/AuditTrail/Strings.php:70
1757
  #, php-format
1758
- msgid "Deleted user posts were reassigned to user \"%s\"."
1759
  msgstr ""
1760
 
1761
- #: src/lib/src/Modules/AuditTrail/Strings.php:73
1762
- msgid "There was an attempt to send an email using the \"wp_mail\" function."
1763
  msgstr ""
1764
 
1765
- #: src/lib/src/Modules/AuditTrail/Strings.php:74
1766
- msgid ""
1767
- "This log entry doesn't mean it was sent or received successfully, but only "
1768
- "that an attempt was made."
1769
  msgstr ""
1770
 
1771
- #: src/lib/src/Modules/AuditTrail/Strings.php:75
1772
- #, php-format
1773
- msgid "It was sent to \"%s\" with the subject \"%s\"."
 
 
 
 
 
 
 
 
 
 
1774
  msgstr ""
1775
 
1776
- #: src/lib/src/Modules/AuditTrail/Strings.php:77
1777
  #, php-format
1778
- msgid "The \"wp_mail\" function was called from the file \"%s\" on line %s."
1779
  msgstr ""
1780
 
1781
- #: src/lib/src/Modules/AuditTrail/Strings.php:80
1782
- #, php-format
1783
- msgid "Attempting to log email, but data was not of the correct type (%s)"
1784
  msgstr ""
1785
 
1786
- #: src/lib/src/Modules/AuditTrail/Strings.php:93
1787
- msgid "WordPress"
 
 
1788
  msgstr ""
1789
 
1790
- #: src/lib/src/Modules/AuditTrail/Strings.php:94
1791
- msgid "Posts"
1792
  msgstr ""
1793
 
1794
- #: src/lib/src/Modules/AuditTrail/Strings.php:95
1795
- #: src/lib/src/Modules/AuditTrail/Strings.php:237
1796
- #: src/lib/src/Modules/AuditTrail/Strings.php:238
1797
- msgid "Emails"
1798
  msgstr ""
1799
 
1800
- #: src/lib/src/Modules/AuditTrail/Strings.php:96
1801
- #: src/processors/user_management.php:237
1802
- msgid "Time"
1803
  msgstr ""
1804
 
1805
- #: src/lib/src/Modules/AuditTrail/Strings.php:98
1806
- #: src/lib/src/Modules/IPs/Strings.php:226
1807
- #: src/lib/src/Tables/Render/AuditTrail.php:69
1808
- msgid "Message"
1809
  msgstr ""
1810
 
1811
- #: src/lib/src/Modules/AuditTrail/Strings.php:100
1812
- msgid "Category"
 
 
1813
  msgstr ""
1814
 
1815
- #: src/lib/src/Modules/AuditTrail/Strings.php:101
1816
- #: src/lib/src/Modules/Base/Strings.php:59
1817
- #: src/lib/src/Modules/Plugin/Strings.php:391
1818
- #: src/lib/src/Tables/Render/IpBase.php:21
1819
- #: src/lib/src/Tables/Render/IpBlack.php:16
1820
- #: src/lib/src/Tables/Render/IpWhite.php:12 src/processors/firewall.php:403
1821
- #: src/processors/loginprotect_intentprovider_backup.php:165
1822
- #: src/processors/loginprotect_intentprovider_email.php:156
1823
- #: src/processors/user_management.php:205
1824
- #: src/processors/user_management.php:236
1825
- msgid "IP Address"
1826
  msgstr ""
1827
 
1828
- #: src/lib/src/Modules/AuditTrail/Strings.php:102
1829
- #: src/lib/src/Tables/Build/AuditTrail.php:126
1830
- #: src/lib/src/Tables/Build/Sessions.php:72
1831
- #: src/lib/src/Tables/Build/Traffic.php:136
1832
- msgid "You"
1833
  msgstr ""
1834
 
1835
- #: src/lib/src/Modules/AuditTrail/Strings.php:103
1836
- msgid "There are currently no audit entries in this section."
1837
  msgstr ""
1838
 
1839
- #: src/lib/src/Modules/AuditTrail/Strings.php:117
1840
- #: src/lib/src/Modules/Autoupdates/Strings.php:21
1841
- #: src/lib/src/Modules/Base/Strings.php:40
1842
- #: src/lib/src/Modules/CommentsFilter/Strings.php:38
1843
- #: src/lib/src/Modules/Firewall/Strings.php:19
1844
- #: src/lib/src/Modules/HackGuard/Strings.php:90
1845
- #: src/lib/src/Modules/Headers/Strings.php:19
1846
- #: src/lib/src/Modules/IPs/Strings.php:24
1847
- #: src/lib/src/Modules/Lockdown/Strings.php:30
1848
- #: src/lib/src/Modules/LoginGuard/Strings.php:68
1849
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:34
1850
- #: src/lib/src/Modules/Sessions/Strings.php:20
1851
- #: src/lib/src/Modules/Statistics/Strings.php:20
1852
- #: src/lib/src/Modules/Statistics/Strings.php:29
1853
- #: src/lib/src/Modules/Traffic/Strings.php:31
1854
- #: src/lib/src/Modules/UserManagement/Strings.php:36
1855
- msgid "On"
1856
  msgstr ""
1857
 
1858
- #: src/lib/src/Modules/AuditTrail/Strings.php:117
1859
- #: src/lib/src/Modules/Autoupdates/Strings.php:21
1860
- #: src/lib/src/Modules/Base/Strings.php:41
1861
- #: src/lib/src/Modules/CommentsFilter/Strings.php:38
1862
- #: src/lib/src/Modules/Firewall/Strings.php:19
1863
- #: src/lib/src/Modules/HackGuard/Strings.php:90
1864
- #: src/lib/src/Modules/Headers/Strings.php:19
1865
- #: src/lib/src/Modules/IPs/Strings.php:24
1866
- #: src/lib/src/Modules/Lockdown/Strings.php:30
1867
- #: src/lib/src/Modules/LoginGuard/Strings.php:68
1868
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:34
1869
- #: src/lib/src/Modules/Sessions/Strings.php:20
1870
- #: src/lib/src/Modules/Statistics/Strings.php:20
1871
- #: src/lib/src/Modules/Statistics/Strings.php:29
1872
- #: src/lib/src/Modules/Traffic/Strings.php:31
1873
- #: src/lib/src/Modules/UserManagement/Strings.php:36
1874
- msgid "Off"
1875
  msgstr ""
1876
 
1877
- #: src/lib/src/Modules/AuditTrail/Strings.php:118
1878
- #: src/lib/src/Modules/Autoupdates/Strings.php:22
1879
- #: src/lib/src/Modules/CommentsFilter/Strings.php:39
1880
- #: src/lib/src/Modules/Firewall/Strings.php:20
1881
- #: src/lib/src/Modules/HackGuard/Strings.php:91
1882
- #: src/lib/src/Modules/Headers/Strings.php:20
1883
- #: src/lib/src/Modules/IPs/Strings.php:25
1884
- #: src/lib/src/Modules/Lockdown/Strings.php:31
1885
- #: src/lib/src/Modules/LoginGuard/Strings.php:66
1886
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:35
1887
- #: src/lib/src/Modules/Sessions/Strings.php:21
1888
- #: src/lib/src/Modules/Statistics/Strings.php:21
1889
- #: src/lib/src/Modules/Statistics/Strings.php:30
1890
- #: src/lib/src/Modules/Traffic/Strings.php:32
1891
- #: src/lib/src/Modules/UserManagement/Strings.php:37
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1892
  #, php-format
1893
- msgid "Enable Module: %s"
1894
  msgstr ""
1895
 
1896
- #: src/lib/src/Modules/AuditTrail/Strings.php:121
1897
- #: src/lib/src/Modules/AuditTrail/Strings.php:129
1898
- #: src/lib/src/Modules/AuditTrail/Strings.php:138
1899
- #: src/lib/src/Modules/Autoupdates/Strings.php:24
1900
- #: src/lib/src/Modules/Autoupdates/Strings.php:32
1901
- #: src/lib/src/Modules/Autoupdates/Strings.php:42
1902
- #: src/lib/src/Modules/Autoupdates/Strings.php:53
1903
- #: src/lib/src/Modules/Autoupdates/Strings.php:63
1904
- #: src/lib/src/Modules/Base/Strings.php:147
1905
- #: src/lib/src/Modules/CommentsFilter/Strings.php:41
1906
- #: src/lib/src/Modules/CommentsFilter/Strings.php:50
1907
- #: src/lib/src/Modules/CommentsFilter/Strings.php:57
1908
- #: src/lib/src/Modules/CommentsFilter/Strings.php:67
1909
- #: src/lib/src/Modules/CommentsFilter/Strings.php:75
1910
- #: src/lib/src/Modules/Firewall/Strings.php:23
1911
- #: src/lib/src/Modules/HackGuard/Strings.php:76
1912
- #: src/lib/src/Modules/HackGuard/Strings.php:84
1913
- #: src/lib/src/Modules/HackGuard/Strings.php:93
1914
- #: src/lib/src/Modules/HackGuard/Strings.php:102
1915
- #: src/lib/src/Modules/HackGuard/Strings.php:112
1916
- #: src/lib/src/Modules/HackGuard/Strings.php:121
1917
- #: src/lib/src/Modules/HackGuard/Strings.php:130
1918
- #: src/lib/src/Modules/HackGuard/Strings.php:140
1919
- #: src/lib/src/Modules/HackGuard/Strings.php:149
1920
- #: src/lib/src/Modules/HackGuard/Strings.php:158
1921
- #: src/lib/src/Modules/Headers/Strings.php:22
1922
- #: src/lib/src/Modules/Headers/Strings.php:30
1923
- #: src/lib/src/Modules/Headers/Strings.php:39
1924
- #: src/lib/src/Modules/IPs/Strings.php:27
1925
- #: src/lib/src/Modules/IPs/Strings.php:37
1926
- #: src/lib/src/Modules/Lockdown/Strings.php:34
1927
- #: src/lib/src/Modules/Lockdown/Strings.php:42
1928
- #: src/lib/src/Modules/Lockdown/Strings.php:51
1929
- #: src/lib/src/Modules/Lockdown/Strings.php:60
1930
- #: src/lib/src/Modules/LoginGuard/Strings.php:70
1931
- #: src/lib/src/Modules/LoginGuard/Strings.php:79
1932
- #: src/lib/src/Modules/LoginGuard/Strings.php:89
1933
- #: src/lib/src/Modules/LoginGuard/Strings.php:98
1934
- #: src/lib/src/Modules/LoginGuard/Strings.php:107
1935
- #: src/lib/src/Modules/LoginGuard/Strings.php:117
1936
- #: src/lib/src/Modules/LoginGuard/Strings.php:126
1937
- #: src/lib/src/Modules/LoginGuard/Strings.php:135
1938
- #: src/lib/src/Modules/Plugin/Strings.php:67
1939
- #: src/lib/src/Modules/Plugin/Strings.php:75
1940
- #: src/lib/src/Modules/Plugin/Strings.php:82
1941
- #: src/lib/src/Modules/Plugin/Strings.php:97
1942
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:37
1943
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:46
1944
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:55
1945
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:65
1946
- #: src/lib/src/Modules/Sessions/Strings.php:23
1947
- #: src/lib/src/Modules/Statistics/Strings.php:23
1948
- #: src/lib/src/Modules/Statistics/Strings.php:32
1949
- #: src/lib/src/Modules/Statistics/Strings.php:40
1950
- #: src/lib/src/Modules/Traffic/Strings.php:34
1951
- #: src/lib/src/Modules/Traffic/Strings.php:42
1952
- #: src/lib/src/Modules/Traffic/Strings.php:52
1953
- #: src/lib/src/Modules/UserManagement/Strings.php:39
1954
- #: src/lib/src/Modules/UserManagement/Strings.php:48
1955
- #: src/lib/src/Modules/UserManagement/Strings.php:57
1956
- #: src/lib/src/Modules/UserManagement/Strings.php:66
1957
- #: src/lib/src/Modules/UserManagement/Strings.php:75
1958
- #: src/lib/src/Modules/UserManagement/Strings.php:85
1959
- msgid "Purpose"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1960
  msgstr ""
1961
 
1962
- #: src/lib/src/Modules/AuditTrail/Strings.php:121
1963
- msgid ""
1964
- "The Audit Trail is designed so you can look back on events and analyse what "
1965
- "happened and what may have gone wrong."
1966
  msgstr ""
1967
 
1968
- #: src/lib/src/Modules/AuditTrail/Strings.php:122
1969
- #: src/lib/src/Modules/AuditTrail/Strings.php:130
1970
- #: src/lib/src/Modules/AuditTrail/Strings.php:139
1971
- #: src/lib/src/Modules/Autoupdates/Strings.php:25
1972
- #: src/lib/src/Modules/Autoupdates/Strings.php:33
1973
- #: src/lib/src/Modules/Autoupdates/Strings.php:45
1974
- #: src/lib/src/Modules/Autoupdates/Strings.php:54
1975
- #: src/lib/src/Modules/Base/Strings.php:148
1976
- #: src/lib/src/Modules/CommentsFilter/Strings.php:42
1977
- #: src/lib/src/Modules/CommentsFilter/Strings.php:58
1978
- #: src/lib/src/Modules/CommentsFilter/Strings.php:68
1979
- #: src/lib/src/Modules/CommentsFilter/Strings.php:76
1980
- #: src/lib/src/Modules/Firewall/Strings.php:24
1981
- #: src/lib/src/Modules/Firewall/Strings.php:32
1982
- #: src/lib/src/Modules/Firewall/Strings.php:43
1983
- #: src/lib/src/Modules/Firewall/Strings.php:52
1984
- #: src/lib/src/Modules/HackGuard/Strings.php:85
1985
- #: src/lib/src/Modules/HackGuard/Strings.php:94
1986
- #: src/lib/src/Modules/HackGuard/Strings.php:103
1987
- #: src/lib/src/Modules/HackGuard/Strings.php:113
1988
- #: src/lib/src/Modules/HackGuard/Strings.php:122
1989
- #: src/lib/src/Modules/HackGuard/Strings.php:132
1990
- #: src/lib/src/Modules/HackGuard/Strings.php:141
1991
- #: src/lib/src/Modules/HackGuard/Strings.php:150
1992
- #: src/lib/src/Modules/HackGuard/Strings.php:159
1993
- #: src/lib/src/Modules/Headers/Strings.php:23
1994
- #: src/lib/src/Modules/Headers/Strings.php:31
1995
- #: src/lib/src/Modules/Headers/Strings.php:40
1996
- #: src/lib/src/Modules/IPs/Strings.php:28
1997
- #: src/lib/src/Modules/IPs/Strings.php:38
1998
- #: src/lib/src/Modules/IPs/Strings.php:54
1999
- #: src/lib/src/Modules/IPs/Strings.php:64
2000
- #: src/lib/src/Modules/IPs/Strings.php:77
2001
- #: src/lib/src/Modules/IPs/Strings.php:88
2002
- #: src/lib/src/Modules/Lockdown/Strings.php:35
2003
- #: src/lib/src/Modules/Lockdown/Strings.php:43
2004
- #: src/lib/src/Modules/Lockdown/Strings.php:52
2005
- #: src/lib/src/Modules/Lockdown/Strings.php:61
2006
- #: src/lib/src/Modules/LoginGuard/Strings.php:71
2007
- #: src/lib/src/Modules/LoginGuard/Strings.php:80
2008
- #: src/lib/src/Modules/LoginGuard/Strings.php:90
2009
- #: src/lib/src/Modules/LoginGuard/Strings.php:108
2010
- #: src/lib/src/Modules/LoginGuard/Strings.php:127
2011
- #: src/lib/src/Modules/LoginGuard/Strings.php:242
2012
- #: src/lib/src/Modules/Plugin/Strings.php:99
2013
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:38
2014
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:47
2015
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:56
2016
- #: src/lib/src/Modules/Sessions/Strings.php:24
2017
- #: src/lib/src/Modules/Statistics/Strings.php:24
2018
- #: src/lib/src/Modules/Statistics/Strings.php:33
2019
- #: src/lib/src/Modules/Statistics/Strings.php:41
2020
- #: src/lib/src/Modules/Traffic/Strings.php:35
2021
- #: src/lib/src/Modules/Traffic/Strings.php:43
2022
- #: src/lib/src/Modules/Traffic/Strings.php:53
2023
- #: src/lib/src/Modules/UserManagement/Strings.php:40
2024
- #: src/lib/src/Modules/UserManagement/Strings.php:49
2025
- #: src/lib/src/Modules/UserManagement/Strings.php:58
2026
- #: src/lib/src/Modules/UserManagement/Strings.php:67
2027
- #: src/lib/src/Modules/UserManagement/Strings.php:76
2028
- #: src/lib/src/Modules/UserManagement/Strings.php:86
2029
- msgid "Recommendation"
2030
  msgstr ""
2031
 
2032
- #: src/lib/src/Modules/AuditTrail/Strings.php:122
2033
- #: src/lib/src/Modules/Autoupdates/Strings.php:25
2034
- #: src/lib/src/Modules/CommentsFilter/Strings.php:42
2035
- #: src/lib/src/Modules/Firewall/Strings.php:24
2036
- #: src/lib/src/Modules/HackGuard/Strings.php:94
2037
- #: src/lib/src/Modules/HackGuard/Strings.php:103
2038
- #: src/lib/src/Modules/HackGuard/Strings.php:113
2039
- #: src/lib/src/Modules/HackGuard/Strings.php:122
2040
- #: src/lib/src/Modules/IPs/Strings.php:28
2041
- #: src/lib/src/Modules/IPs/Strings.php:38
2042
- #: src/lib/src/Modules/Lockdown/Strings.php:35
2043
- #: src/lib/src/Modules/LoginGuard/Strings.php:71
2044
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:38
2045
- #: src/lib/src/Modules/Sessions/Strings.php:24
2046
- #: src/lib/src/Modules/Statistics/Strings.php:24
2047
- #: src/lib/src/Modules/Statistics/Strings.php:33
2048
- #: src/lib/src/Modules/UserManagement/Strings.php:40
2049
- #, php-format
2050
- msgid "Keep the %s feature turned on."
2051
  msgstr ""
2052
 
2053
- #: src/lib/src/Modules/AuditTrail/Strings.php:127
2054
- #: src/lib/src/Modules/AuditTrail/Strings.php:132
2055
- msgid "Audit Trail Options"
2056
  msgstr ""
2057
 
2058
- #: src/lib/src/Modules/AuditTrail/Strings.php:129
2059
- msgid "Provides finer control over the audit trail itself."
2060
  msgstr ""
2061
 
2062
- #: src/lib/src/Modules/AuditTrail/Strings.php:130
2063
- #: src/lib/src/Modules/AuditTrail/Strings.php:139
2064
- #: src/lib/src/Modules/Traffic/Strings.php:43
2065
- #: src/lib/src/Modules/Traffic/Strings.php:53
2066
- msgid "These settings are dependent on your requirements."
2067
  msgstr ""
2068
 
2069
- #: src/lib/src/Modules/AuditTrail/Strings.php:136
2070
- msgid "Enable Audit Areas"
2071
  msgstr ""
2072
 
2073
- #: src/lib/src/Modules/AuditTrail/Strings.php:138
2074
- msgid "Specify which types of actions on your site are logged."
2075
  msgstr ""
2076
 
2077
- #: src/lib/src/Modules/AuditTrail/Strings.php:188
2078
- #: src/lib/src/Modules/Autoupdates/Strings.php:90
2079
- #: src/lib/src/Modules/CommentsFilter/Strings.php:104
2080
- #: src/lib/src/Modules/Firewall/Strings.php:80
2081
- #: src/lib/src/Modules/HackGuard/Strings.php:187
2082
- #: src/lib/src/Modules/Headers/Strings.php:67
2083
- #: src/lib/src/Modules/IPs/Strings.php:117
2084
- #: src/lib/src/Modules/Lockdown/Strings.php:89
2085
- #: src/lib/src/Modules/LoginGuard/Strings.php:164
2086
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:102
2087
- #: src/lib/src/Modules/Sessions/Strings.php:50
2088
- #: src/lib/src/Modules/Traffic/Strings.php:83
2089
- #: src/lib/src/Modules/UserManagement/Strings.php:113
2090
- #, php-format
2091
- msgid "Enable %s Module"
2092
  msgstr ""
2093
 
2094
- #: src/lib/src/Modules/AuditTrail/Strings.php:189
2095
- #: src/lib/src/Modules/Autoupdates/Strings.php:91
2096
- #: src/lib/src/Modules/Firewall/Strings.php:81
2097
- #: src/lib/src/Modules/HackGuard/Strings.php:188
2098
- #: src/lib/src/Modules/Headers/Strings.php:68
2099
- #: src/lib/src/Modules/IPs/Strings.php:118
2100
- #: src/lib/src/Modules/Lockdown/Strings.php:90
2101
- #: src/lib/src/Modules/LoginGuard/Strings.php:165
2102
- #: src/lib/src/Modules/Sessions/Strings.php:51
2103
- #: src/lib/src/Modules/Traffic/Strings.php:84
2104
- #: src/lib/src/Modules/UserManagement/Strings.php:114
2105
- #, php-format
2106
- msgid "Enable (or Disable) The %s Module"
2107
  msgstr ""
2108
 
2109
- #: src/lib/src/Modules/AuditTrail/Strings.php:190
2110
- #: src/lib/src/Modules/Autoupdates/Strings.php:92
2111
- #: src/lib/src/Modules/CommentsFilter/Strings.php:106
2112
- #: src/lib/src/Modules/Firewall/Strings.php:82
2113
- #: src/lib/src/Modules/HackGuard/Strings.php:189
2114
- #: src/lib/src/Modules/Headers/Strings.php:69
2115
- #: src/lib/src/Modules/IPs/Strings.php:119
2116
- #: src/lib/src/Modules/Lockdown/Strings.php:91
2117
- #: src/lib/src/Modules/LoginGuard/Strings.php:166
2118
- #: src/lib/src/Modules/Sessions/Strings.php:52
2119
- #: src/lib/src/Modules/Traffic/Strings.php:85
2120
- #: src/lib/src/Modules/UserManagement/Strings.php:115
2121
- #, php-format
2122
- msgid "Un-Checking this option will completely disable the %s module."
2123
  msgstr ""
2124
 
2125
- #: src/lib/src/Modules/AuditTrail/Strings.php:194
2126
- msgid "Max Trail Length"
2127
  msgstr ""
2128
 
2129
- #: src/lib/src/Modules/AuditTrail/Strings.php:195
2130
- msgid "Maximum Audit Trail Length To Keep"
2131
  msgstr ""
2132
 
2133
- #: src/lib/src/Modules/AuditTrail/Strings.php:196
2134
- msgid ""
2135
- "Automatically remove any audit trail entries when this limit is exceeded."
2136
  msgstr ""
2137
 
2138
- #: src/lib/src/Modules/AuditTrail/Strings.php:201
2139
- msgid "Auto Clean"
2140
  msgstr ""
2141
 
2142
- #: src/lib/src/Modules/AuditTrail/Strings.php:202
2143
- msgid "Automatically Purge Audit Log Entries Older Than The Set Number Of Days"
 
 
 
 
 
 
 
 
 
 
 
 
 
2144
  msgstr ""
2145
 
2146
- #: src/lib/src/Modules/AuditTrail/Strings.php:203
2147
- msgid ""
2148
- "Events older than the number of days specified will be automatically cleaned "
2149
- "from the database."
2150
  msgstr ""
2151
 
2152
- #: src/lib/src/Modules/AuditTrail/Strings.php:207
2153
- #: src/lib/src/Modules/AuditTrail/Strings.php:208
2154
- #: src/lib/src/Modules/AuditTrail/Strings.php:209
2155
- msgid "Users And Logins"
2156
  msgstr ""
2157
 
2158
- #: src/lib/src/Modules/AuditTrail/Strings.php:208
2159
- #: src/lib/src/Modules/AuditTrail/Strings.php:214
2160
- #: src/lib/src/Modules/AuditTrail/Strings.php:220
2161
- #: src/lib/src/Modules/AuditTrail/Strings.php:226
2162
- #: src/lib/src/Modules/AuditTrail/Strings.php:232
2163
- #: src/lib/src/Modules/AuditTrail/Strings.php:238
2164
- #: src/lib/src/Modules/AuditTrail/Strings.php:244
2165
- #, php-format
2166
- msgid "Enable Audit Context - %s"
2167
  msgstr ""
2168
 
2169
- #: src/lib/src/Modules/AuditTrail/Strings.php:209
2170
- #: src/lib/src/Modules/AuditTrail/Strings.php:215
2171
- #: src/lib/src/Modules/AuditTrail/Strings.php:221
2172
- #: src/lib/src/Modules/AuditTrail/Strings.php:227
2173
- #: src/lib/src/Modules/AuditTrail/Strings.php:233
2174
- #: src/lib/src/Modules/AuditTrail/Strings.php:239
2175
- #: src/lib/src/Modules/AuditTrail/Strings.php:245
2176
- #, php-format
2177
- msgid ""
2178
- "When this context is enabled, the audit trail will track activity relating "
2179
- "to: %s"
2180
  msgstr ""
2181
 
2182
- #: src/lib/src/Modules/AuditTrail/Strings.php:215
2183
- msgid "WordPress Plugins"
2184
  msgstr ""
2185
 
2186
- #: src/lib/src/Modules/AuditTrail/Strings.php:221
2187
- msgid "WordPress Themes"
2188
  msgstr ""
2189
 
2190
- #: src/lib/src/Modules/AuditTrail/Strings.php:225
2191
- #: src/lib/src/Modules/AuditTrail/Strings.php:226
2192
- msgid "Posts And Pages"
2193
  msgstr ""
2194
 
2195
- #: src/lib/src/Modules/AuditTrail/Strings.php:227
2196
- msgid "Editing and publishing of posts and pages"
 
 
2197
  msgstr ""
2198
 
2199
- #: src/lib/src/Modules/AuditTrail/Strings.php:231
2200
- #: src/lib/src/Modules/AuditTrail/Strings.php:232
2201
- msgid "WordPress And Settings"
2202
  msgstr ""
2203
 
2204
- #: src/lib/src/Modules/AuditTrail/Strings.php:233
2205
- msgid "WordPress upgrades and changes to particular WordPress settings"
 
2206
  msgstr ""
2207
 
2208
- #: src/lib/src/Modules/AuditTrail/Strings.php:239
2209
- msgid "Email Sending"
2210
  msgstr ""
2211
 
2212
- #: src/lib/src/Modules/AuditTrail/Strings.php:249
2213
- msgid "Site Change Tracking"
2214
  msgstr ""
2215
 
2216
- #: src/lib/src/Modules/AuditTrail/Strings.php:250
2217
- msgid "Track Major Changes To Your Site"
2218
  msgstr ""
2219
 
2220
- #: src/lib/src/Modules/AuditTrail/Strings.php:251
2221
- msgid ""
2222
- "Tracking major changes to your site will help you monitor and catch "
2223
- "malicious damage."
2224
  msgstr ""
2225
 
2226
- #: src/lib/src/Modules/AuditTrail/Strings.php:255
2227
- msgid "Snapshot Per Week"
2228
  msgstr ""
2229
 
2230
- #: src/lib/src/Modules/AuditTrail/Strings.php:256
2231
- msgid "Number Of Snapshots To Take Per Week"
2232
  msgstr ""
2233
 
2234
- #: src/lib/src/Modules/AuditTrail/Strings.php:257
2235
- msgid ""
2236
- "The number of snapshots to take per week. For daily snapshots, select 7."
2237
  msgstr ""
2238
 
2239
- #: src/lib/src/Modules/AuditTrail/Strings.php:258
2240
- msgid "Data storage in your database increases with the number of snapshots."
2241
  msgstr ""
2242
 
2243
- #: src/lib/src/Modules/AuditTrail/Strings.php:259
2244
- msgid ""
2245
- "However, increased snapshots provide more granular information on when major "
2246
- "site changes occurred."
2247
  msgstr ""
2248
 
2249
- #: src/lib/src/Modules/AuditTrail/Strings.php:263
2250
- msgid "Max Snapshots"
2251
  msgstr ""
2252
 
2253
- #: src/lib/src/Modules/AuditTrail/Strings.php:264
2254
- msgid "Maximum Number Of Snapshots To Retain"
2255
  msgstr ""
2256
 
2257
- #: src/lib/src/Modules/AuditTrail/Strings.php:265
 
 
 
 
 
 
 
 
 
 
 
 
2258
  msgid ""
2259
- "The more snapshots you retain, the further back you can look at changes over "
2260
- "your site."
2261
  msgstr ""
2262
 
2263
- #: src/lib/src/Modules/AuditTrail/Strings.php:266
 
2264
  msgid ""
2265
- "You will need to consider the implications to database storage requirements."
 
2266
  msgstr ""
2267
 
2268
- #: src/lib/src/Modules/Autoupdates/AjaxHandler.php:35
2269
- msgid "You do not have permissions to perform this action."
2270
  msgstr ""
2271
 
2272
- #: src/lib/src/Modules/Autoupdates/AjaxHandler.php:43
2273
- #, php-format
2274
- msgid "Plugin \"%s\" will %s."
 
 
 
 
2275
  msgstr ""
2276
 
2277
- #: src/lib/src/Modules/Autoupdates/AjaxHandler.php:46
2278
- msgid "update automatically"
2279
  msgstr ""
2280
 
2281
- #: src/lib/src/Modules/Autoupdates/AjaxHandler.php:47
2282
- msgid "not update automatically"
2283
  msgstr ""
2284
 
2285
- #: src/lib/src/Modules/Autoupdates/AjaxHandler.php:52
2286
- msgid "Failed to change the update status of the plugin."
 
2287
  msgstr ""
2288
 
2289
- #: src/lib/src/Modules/Autoupdates/Strings.php:24
2290
  msgid ""
2291
- "Automatic Updates lets you manage the WordPress automatic updates engine so "
2292
- "you choose what exactly gets updated automatically."
2293
  msgstr ""
2294
 
2295
- #: src/lib/src/Modules/Autoupdates/Strings.php:30
2296
- msgid "Disable ALL WordPress Automatic Updates"
 
 
2297
  msgstr ""
2298
 
2299
- #: src/lib/src/Modules/Autoupdates/Strings.php:32
2300
- msgid ""
2301
- "If you never want WordPress to automatically update anything on your site, "
2302
- "turn on this option."
2303
  msgstr ""
2304
 
2305
- #: src/lib/src/Modules/Autoupdates/Strings.php:33
2306
- msgid "Do not turn on this option unless you really need to block updates."
 
2307
  msgstr ""
2308
 
2309
- #: src/lib/src/Modules/Autoupdates/Strings.php:35
2310
- #: src/processors/plugin_importexport.php:66
2311
- msgid "Turn Off"
2312
  msgstr ""
2313
 
2314
- #: src/lib/src/Modules/Autoupdates/Strings.php:39
2315
- msgid "Automatic Plugin Self-Update"
2316
  msgstr ""
2317
 
2318
- #: src/lib/src/Modules/Autoupdates/Strings.php:43
2319
- #, php-format
2320
- msgid ""
2321
- "Allows the %s plugin to automatically update itself when an update is "
2322
- "available."
2323
  msgstr ""
2324
 
2325
- #: src/lib/src/Modules/Autoupdates/Strings.php:45
2326
- msgid "Keep this option turned on."
2327
  msgstr ""
2328
 
2329
- #: src/lib/src/Modules/Autoupdates/Strings.php:47
2330
- msgid "Self-Update"
2331
  msgstr ""
2332
 
2333
- #: src/lib/src/Modules/Autoupdates/Strings.php:51
2334
- msgid "Automatic Updates For WordPress Components"
2335
  msgstr ""
2336
 
2337
- #: src/lib/src/Modules/Autoupdates/Strings.php:53
2338
- msgid "Control how automatic updates for each WordPress component is handled."
2339
  msgstr ""
2340
 
2341
- #: src/lib/src/Modules/Autoupdates/Strings.php:54
2342
- msgid "You should at least allow minor updates for the WordPress core."
2343
  msgstr ""
2344
 
2345
- #: src/lib/src/Modules/Autoupdates/Strings.php:56
2346
- msgid "WordPress Components"
2347
  msgstr ""
2348
 
2349
- #: src/lib/src/Modules/Autoupdates/Strings.php:60
2350
- #: src/lib/src/Modules/Autoupdates/Strings.php:61
2351
- msgid "Auto-Update Options"
2352
  msgstr ""
2353
 
2354
- #: src/lib/src/Modules/Autoupdates/Strings.php:63
2355
- msgid "Make adjustments to how automatic updates are handled on your site."
2356
  msgstr ""
2357
 
2358
- #: src/lib/src/Modules/Autoupdates/Strings.php:96
2359
- msgid "Disable All"
2360
  msgstr ""
2361
 
2362
- #: src/lib/src/Modules/Autoupdates/Strings.php:97
2363
- msgid "Completely Disable WordPress Automatic Updates"
2364
  msgstr ""
2365
 
2366
- #: src/lib/src/Modules/Autoupdates/Strings.php:98
2367
- msgid ""
2368
- "When selected, regardless of any other settings, all WordPress automatic "
2369
- "updates on this site will be completely disabled!"
 
 
 
 
 
 
2370
  msgstr ""
2371
 
2372
- #: src/lib/src/Modules/Autoupdates/Strings.php:102
2373
- msgid "Auto Update Plugin"
2374
  msgstr ""
2375
 
2376
- #: src/lib/src/Modules/Autoupdates/Strings.php:103
2377
- msgid "Always Automatically Update This Plugin"
 
 
2378
  msgstr ""
2379
 
2380
- #: src/lib/src/Modules/Autoupdates/Strings.php:105
2381
- #, php-format
2382
- msgid ""
2383
- "Regardless of any other settings, automatically update the \"%s\" plugin."
2384
  msgstr ""
2385
 
2386
- #: src/lib/src/Modules/Autoupdates/Strings.php:111
2387
- msgid "WordPress Core Updates"
2388
  msgstr ""
2389
 
2390
- #: src/lib/src/Modules/Autoupdates/Strings.php:112
2391
- msgid "Decide how the WordPress Core will automatically update, if at all"
 
 
2392
  msgstr ""
2393
 
2394
- #: src/lib/src/Modules/Autoupdates/Strings.php:113
2395
- msgid ""
2396
- "At least automatically upgrading minor versions is recommended (and is the "
2397
- "WordPress default)."
2398
  msgstr ""
2399
 
2400
- #: src/lib/src/Modules/Autoupdates/Strings.php:117
2401
- msgid "Translations"
 
2402
  msgstr ""
2403
 
2404
- #: src/lib/src/Modules/Autoupdates/Strings.php:118
2405
- msgid "Automatically Update Translations"
2406
  msgstr ""
2407
 
2408
- #: src/lib/src/Modules/Autoupdates/Strings.php:119
2409
- msgid ""
2410
- "Note: Automatic updates for translations are enabled on WordPress by default."
2411
  msgstr ""
2412
 
2413
- #: src/lib/src/Modules/Autoupdates/Strings.php:124
2414
- msgid "Automatically Update All Plugins"
2415
  msgstr ""
2416
 
2417
- #: src/lib/src/Modules/Autoupdates/Strings.php:125
2418
- msgid ""
2419
- "Note: Automatic updates for plugins are disabled on WordPress by default."
2420
  msgstr ""
2421
 
2422
- #: src/lib/src/Modules/Autoupdates/Strings.php:129
2423
- msgid "Individually Select Plugins"
2424
  msgstr ""
2425
 
2426
- #: src/lib/src/Modules/Autoupdates/Strings.php:130
2427
- msgid "Select Individual Plugins To Automatically Update"
 
 
2428
  msgstr ""
2429
 
2430
- #: src/lib/src/Modules/Autoupdates/Strings.php:131
2431
- msgid ""
2432
- "Turning this on will provide an option on the plugins page to select whether "
2433
- "a plugin is automatically updated."
2434
  msgstr ""
2435
 
2436
- #: src/lib/src/Modules/Autoupdates/Strings.php:136
2437
- msgid "Automatically Update Themes"
 
2438
  msgstr ""
2439
 
2440
- #: src/lib/src/Modules/Autoupdates/Strings.php:137
2441
- msgid ""
2442
- "Note: Automatic updates for themes are disabled on WordPress by default."
2443
  msgstr ""
2444
 
2445
- #: src/lib/src/Modules/Autoupdates/Strings.php:141
2446
- msgid "Ignore Version Control"
2447
  msgstr ""
2448
 
2449
- #: src/lib/src/Modules/Autoupdates/Strings.php:142
2450
- msgid "Ignore Version Control Systems Such As GIT and SVN"
2451
  msgstr ""
2452
 
2453
- #: src/lib/src/Modules/Autoupdates/Strings.php:143
2454
- msgid ""
2455
- "If you use SVN or GIT and WordPress detects it, automatic updates are "
2456
- "disabled by default. Check this box to ignore version control systems and "
2457
- "allow automatic updates."
2458
  msgstr ""
2459
 
2460
- #: src/lib/src/Modules/Autoupdates/Strings.php:147
2461
- msgid "Send Report Email"
2462
  msgstr ""
2463
 
2464
- #: src/lib/src/Modules/Autoupdates/Strings.php:148
2465
- msgid "Send email notices after automatic updates"
2466
  msgstr ""
2467
 
2468
- #: src/lib/src/Modules/Autoupdates/Strings.php:149
2469
  msgid ""
2470
- "You can turn on/off email notices from automatic updates by un/checking this "
2471
- "box."
2472
  msgstr ""
2473
 
2474
- #: src/lib/src/Modules/Autoupdates/Strings.php:153
2475
- msgid "Report Email Address"
 
 
2476
  msgstr ""
2477
 
2478
- #: src/lib/src/Modules/Autoupdates/Strings.php:154
2479
- msgid "Where to send upgrade notification reports"
2480
  msgstr ""
2481
 
2482
- #: src/lib/src/Modules/Autoupdates/Strings.php:155
2483
- msgid "If this is empty, it will default to the Site Admin email address"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2484
  msgstr ""
2485
 
2486
- #: src/lib/src/Modules/Autoupdates/Strings.php:160
2487
- msgid "Delay Automatic Updates For Period Of Stability"
 
 
2488
  msgstr ""
2489
 
2490
- #: src/lib/src/Modules/Autoupdates/Strings.php:161
2491
  #, php-format
2492
  msgid ""
2493
- "%s will delay upgrades until the new update has been available for the set "
2494
- "number of days."
2495
  msgstr ""
2496
 
2497
- #: src/lib/src/Modules/Autoupdates/Strings.php:162
2498
- msgid ""
2499
- "This helps ensure updates are more stable before they're automatically "
2500
- "applied to your site."
2501
  msgstr ""
2502
 
2503
- #: src/lib/src/Modules/Base/AjaxHandlerShield.php:58
2504
- #, php-format
2505
- msgid "%s Plugin options updated successfully."
2506
  msgstr ""
2507
 
2508
- #: src/lib/src/Modules/Base/AjaxHandlerShield.php:62
2509
- #, php-format
2510
- msgid "Failed to update %s plugin options."
 
 
 
2511
  msgstr ""
2512
 
2513
- #: src/lib/src/Modules/Base/Strings.php:19
2514
- msgid "Customer Support"
 
 
2515
  msgstr ""
2516
 
2517
- #: src/lib/src/Modules/Base/Strings.php:20
2518
- msgid "More Scans"
 
 
2519
  msgstr ""
2520
 
2521
- #: src/lib/src/Modules/Base/Strings.php:21
2522
- #: src/lib/src/Modules/HackGuard/Strings.php:147
2523
- msgid "Malware Scanner"
 
2524
  msgstr ""
2525
 
2526
- #: src/lib/src/Modules/Base/Strings.php:22
2527
- msgid "Scan Every Hour"
2528
  msgstr ""
2529
 
2530
- #: src/lib/src/Modules/Base/Strings.php:23
2531
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:62
2532
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:75
2533
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:180
2534
- msgid "White Label"
2535
  msgstr ""
2536
 
2537
- #: src/lib/src/Modules/Base/Strings.php:24
2538
- #: src/processors/plugin_importexport.php:63
2539
- msgid "Import/Export"
 
2540
  msgstr ""
2541
 
2542
- #: src/lib/src/Modules/Base/Strings.php:25
2543
- msgid "Better Bot Detection"
2544
  msgstr ""
2545
 
2546
- #: src/lib/src/Modules/Base/Strings.php:27
2547
- msgid "WooCommerce Support"
2548
  msgstr ""
2549
 
2550
- #: src/lib/src/Modules/Base/Strings.php:30
2551
- msgid "and much more!"
 
 
2552
  msgstr ""
2553
 
2554
- #: src/lib/src/Modules/Base/Strings.php:34
2555
- msgid "Watch Help Video"
2556
  msgstr ""
2557
 
2558
- #: src/lib/src/Modules/Base/Strings.php:35
2559
- msgid "Save Options"
2560
  msgstr ""
2561
 
2562
- #: src/lib/src/Modules/Base/Strings.php:37
2563
- #: src/lib/src/Modules/Base/Strings.php:57
2564
- msgid "Help"
 
 
2565
  msgstr ""
2566
 
2567
- #: src/lib/src/Modules/Base/Strings.php:38
2568
- msgid "Wizards"
 
 
2569
  msgstr ""
2570
 
2571
- #: src/lib/src/Modules/Base/Strings.php:38
2572
- msgid "No Wizards"
 
2573
  msgstr ""
2574
 
2575
- #: src/lib/src/Modules/Base/Strings.php:43 src/lib/src/Tables/Build/Ip.php:54
2576
- #: src/lib/src/Tables/Build/ScanBase.php:62
2577
- #: src/lib/src/Tables/Build/Sessions.php:68
2578
- #: src/lib/src/Tables/Build/Traffic.php:85
2579
- #: src/lib/src/Tables/Build/Traffic.php:109
2580
- msgid "No"
2581
  msgstr ""
2582
 
2583
- #: src/lib/src/Modules/Base/Strings.php:45
2584
- msgid "Until"
2585
  msgstr ""
2586
 
2587
- #: src/lib/src/Modules/Base/Strings.php:46
2588
- msgid "Since"
2589
  msgstr ""
2590
 
2591
- #: src/lib/src/Modules/Base/Strings.php:47
2592
- msgid "Info"
2593
  msgstr ""
2594
 
2595
- #: src/lib/src/Modules/Base/Strings.php:48
2596
- #: src/lib/src/Tables/Build/Traffic.php:141
2597
- #: src/lib/src/Tables/Render/Sessions.php:38
2598
- msgid "Logged-In"
2599
  msgstr ""
2600
 
2601
- #: src/lib/src/Modules/Base/Strings.php:50
2602
- msgid "Blog"
 
 
2603
  msgstr ""
2604
 
2605
- #: src/lib/src/Modules/Base/Strings.php:51
2606
- #, php-format
2607
- msgid "Save %s Settings"
2608
  msgstr ""
2609
 
2610
- #: src/lib/src/Modules/Base/Strings.php:54
2611
- msgid "Configure Module"
2612
  msgstr ""
2613
 
2614
- #: src/lib/src/Modules/Base/Strings.php:55
2615
- msgid "Actions and Info"
 
2616
  msgstr ""
2617
 
2618
- #: src/lib/src/Modules/Base/Strings.php:56
2619
- msgid "Perform actions for this module"
 
2620
  msgstr ""
2621
 
2622
- #: src/lib/src/Modules/Base/Strings.php:58
2623
- msgid "Learn More"
2624
  msgstr ""
2625
 
2626
- #: src/lib/src/Modules/Base/Strings.php:60
2627
- msgid "Select"
 
2628
  msgstr ""
2629
 
2630
- #: src/lib/src/Modules/Base/Strings.php:61
2631
- msgid "Clear Filters"
 
 
2632
  msgstr ""
2633
 
2634
- #: src/lib/src/Modules/Base/Strings.php:62
2635
- msgid "Apply Filters"
2636
  msgstr ""
2637
 
2638
- #: src/lib/src/Modules/Base/Strings.php:63
2639
- msgid "Find Plugin Option"
2640
  msgstr ""
2641
 
2642
- #: src/lib/src/Modules/Base/Strings.php:64
2643
- msgid "Type below to search all plugin options"
 
 
2644
  msgstr ""
2645
 
2646
- #: src/lib/src/Modules/Base/Strings.php:65
2647
- #: src/processors/loginprotect_intentprovider_yubikey.php:30
2648
- #: src/processors/loginprotect_intentprovider_yubikey.php:37
2649
- msgid "Pro Only"
2650
  msgstr ""
2651
 
2652
- #: src/lib/src/Modules/Base/Strings.php:66
2653
- msgid "This is a pro-only feature"
 
2654
  msgstr ""
2655
 
2656
- #: src/lib/src/Modules/Base/Strings.php:67
2657
- msgid "Go Pro!"
 
 
2658
  msgstr ""
2659
 
2660
- #: src/lib/src/Modules/Base/Strings.php:69
2661
- msgid "Please upgrade to Pro to control this option"
 
 
2662
  msgstr ""
2663
 
2664
- #: src/lib/src/Modules/Base/Strings.php:71
2665
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:205
2666
- msgid "Description"
 
2667
  msgstr ""
2668
 
2669
- #: src/lib/src/Modules/Base/Strings.php:72 src/processors/ips.php:283
2670
- #: src/processors/loginprotect_gasp.php:31
2671
- msgid "Loading"
2672
  msgstr ""
2673
 
2674
- #: src/lib/src/Modules/Base/Strings.php:73
2675
- msgid "Plugin Access Restricted"
2676
  msgstr ""
2677
 
2678
- #: src/lib/src/Modules/Base/Strings.php:74
2679
  msgid ""
2680
- "This security plugin is restricted to administrators with the Security "
2681
- "Access Key."
2682
  msgstr ""
2683
 
2684
- #: src/lib/src/Modules/Base/Strings.php:75
2685
- msgid "Please provide the Security Access Key to manage this plugin."
 
 
2686
  msgstr ""
2687
 
2688
- #: src/lib/src/Modules/Base/Strings.php:76
2689
- msgid "To manage this plugin you must enter the access key."
2690
  msgstr ""
2691
 
2692
- #: src/lib/src/Modules/Base/Strings.php:77
2693
- msgid "Enter Access Key"
2694
  msgstr ""
2695
 
2696
- #: src/lib/src/Modules/Base/Strings.php:78
2697
- msgid "Submit Security Admin Key"
 
2698
  msgstr ""
2699
 
2700
- #: src/lib/src/Modules/Base/Strings.php:79
2701
- msgid "Forgotten Key"
 
 
2702
  msgstr ""
2703
 
2704
- #: src/lib/src/Modules/Base/Strings.php:80
2705
- msgid "Supply Password"
 
 
2706
  msgstr ""
2707
 
2708
- #: src/lib/src/Modules/Base/Strings.php:81
2709
- msgid "Confirm Password"
 
 
2710
  msgstr ""
2711
 
2712
- #: src/lib/src/Modules/Base/Strings.php:82
2713
- msgid "Show help video for this section"
 
 
2714
  msgstr ""
2715
 
2716
- #: src/lib/src/Modules/Base/Strings.php:84
2717
- msgid "offense"
 
 
2718
  msgstr ""
2719
 
2720
- #: src/lib/src/Modules/Base/Strings.php:85
2721
- msgid "Debug"
2722
  msgstr ""
2723
 
2724
- #: src/lib/src/Modules/Base/Strings.php:87
2725
- msgid "Agree To Privacy Policy"
2726
  msgstr ""
2727
 
2728
- #: src/lib/src/Modules/Base/Strings.php:88
2729
- msgid "I confirm that I've read and I agree to the Privacy Policy"
 
 
 
 
 
 
 
 
2730
  msgstr ""
2731
 
2732
- #: src/lib/src/Modules/Base/Strings.php:89
2733
  msgid ""
2734
- "We treat your information under our strict, and GDPR-compliant, privacy "
2735
- "policy."
2736
  msgstr ""
2737
 
2738
- #: src/lib/src/Modules/Base/Strings.php:90
2739
- msgid "Privacy Policy"
2740
  msgstr ""
2741
 
2742
- #: src/lib/src/Modules/Base/Strings.php:91
2743
- msgid "We never SPAM and you can remove yourself at any time."
2744
  msgstr ""
2745
 
2746
- #: src/lib/src/Modules/Base/Strings.php:93
2747
- msgid "Pro features include"
2748
  msgstr ""
2749
 
2750
- #: src/lib/src/Modules/Base/Strings.php:94
2751
  msgid ""
2752
- "Join The 1,000s Who've Already Upgraded Their WordPress Security To Better "
2753
- "Protect Their Sites."
2754
  msgstr ""
2755
 
2756
- #: src/lib/src/Modules/Base/Strings.php:96
2757
- msgid "Upgrade To Pro Protection"
 
2758
  msgstr ""
2759
 
2760
- #: src/lib/src/Modules/Base/Strings.php:144
2761
- msgid "User Messages"
2762
  msgstr ""
2763
 
2764
- #: src/lib/src/Modules/Base/Strings.php:145
2765
- msgid "Messages"
2766
  msgstr ""
2767
 
2768
- #: src/lib/src/Modules/Base/Strings.php:147
2769
- msgid "Customize the messages displayed to the user."
 
2770
  msgstr ""
2771
 
2772
- #: src/lib/src/Modules/Base/Strings.php:148
2773
  msgid ""
2774
- "Use this section if you need to communicate to the user in a particular "
2775
- "manner."
2776
  msgstr ""
2777
 
2778
- #: src/lib/src/Modules/Base/Strings.php:149
2779
- msgid "Hint"
 
 
2780
  msgstr ""
2781
 
2782
- #: src/lib/src/Modules/Base/Strings.php:149
2783
- #, php-format
2784
- msgid "To reset any message to its default, enter the text exactly: %s"
2785
  msgstr ""
2786
 
2787
- #: src/lib/src/Modules/CommentsFilter/AdminNotices.php:37
2788
- msgid "Akismet Anti-SPAM plugin is also running"
2789
  msgstr ""
2790
 
2791
- #: src/lib/src/Modules/CommentsFilter/AdminNotices.php:38
2792
  msgid ""
2793
- "It appears you have Akismet Anti-SPAM running alongside the our human Anti-"
2794
- "SPAM filter."
2795
- msgstr ""
2796
-
2797
- #: src/lib/src/Modules/CommentsFilter/AdminNotices.php:39
2798
- msgid "This is not recommended and you should disable Akismet."
2799
  msgstr ""
2800
 
2801
- #: src/lib/src/Modules/CommentsFilter/AdminNotices.php:40
2802
- msgid "Click to deactivate Akismet now."
2803
  msgstr ""
2804
 
2805
- #: src/lib/src/Modules/CommentsFilter/Scan/Bot.php:32
2806
- #: src/lib/src/Modules/CommentsFilter/Scan/Bot.php:37
2807
- #: src/lib/src/Modules/CommentsFilter/Scan/Bot.php:43
2808
- #: src/lib/src/Modules/CommentsFilter/Scan/Bot.php:47
2809
- #: src/lib/src/Modules/CommentsFilter/Scan/Bot.php:51
2810
- #, php-format
2811
- msgid "Failed Bot Test (%s)"
2812
  msgstr ""
2813
 
2814
- #: src/lib/src/Modules/CommentsFilter/Scan/Bot.php:32
2815
- msgid "checkbox"
2816
  msgstr ""
2817
 
2818
- #: src/lib/src/Modules/CommentsFilter/Scan/Bot.php:37
2819
- msgid "honeypot"
2820
  msgstr ""
2821
 
2822
- #: src/lib/src/Modules/CommentsFilter/Scan/Bot.php:43
2823
- msgid "cooldown"
2824
  msgstr ""
2825
 
2826
- #: src/lib/src/Modules/CommentsFilter/Scan/Bot.php:47
2827
- msgid "expired"
 
 
2828
  msgstr ""
2829
 
2830
- #: src/lib/src/Modules/CommentsFilter/Scan/Bot.php:51
2831
- msgid "token"
2832
  msgstr ""
2833
 
2834
- #: src/lib/src/Modules/CommentsFilter/Scan/Human.php:41
2835
- #: src/lib/src/Modules/CommentsFilter/Strings.php:17
2836
- #, php-format
2837
- msgid "Human SPAM filter found \"%s\" in \"%s\""
2838
  msgstr ""
2839
 
2840
- #: src/lib/src/Modules/CommentsFilter/Scan/Scanner.php:54
2841
- msgid "Trash"
2842
  msgstr ""
2843
 
2844
- #: src/lib/src/Modules/CommentsFilter/Scan/Scanner.php:58
2845
- msgid "Pending Moderation"
 
 
 
2846
  msgstr ""
2847
 
2848
- #: src/lib/src/Modules/CommentsFilter/Scan/Scanner.php:63
2849
- #, php-format
2850
- msgid "%s plugin marked this comment as \"%s\"."
2851
  msgstr ""
2852
 
2853
- #: src/lib/src/Modules/CommentsFilter/Scan/Scanner.php:64
2854
- #, php-format
2855
- msgid "Reason: %s"
2856
  msgstr ""
2857
 
2858
- #: src/lib/src/Modules/CommentsFilter/Strings.php:16
2859
- msgid "Blocked human SPAM comment containing suspicious content."
 
 
2860
  msgstr ""
2861
 
2862
- #: src/lib/src/Modules/CommentsFilter/Strings.php:20
2863
- msgid "Blocked SPAM comment from Bot."
2864
  msgstr ""
2865
 
2866
- #: src/lib/src/Modules/CommentsFilter/Strings.php:23
2867
- msgid "Blocked SPAM comment that failed reCAPTCHA."
 
2868
  msgstr ""
2869
 
2870
- #: src/lib/src/Modules/CommentsFilter/Strings.php:39
2871
- msgid "Comments SPAM Protection"
2872
  msgstr ""
2873
 
2874
- #: src/lib/src/Modules/CommentsFilter/Strings.php:41
2875
- #, php-format
2876
- msgid ""
2877
- "The Comments Filter can block 100% of automated spam bots and also offer the "
2878
- "option to analyse human-generated spam."
2879
  msgstr ""
2880
 
2881
- #: src/lib/src/Modules/CommentsFilter/Strings.php:42
2882
- msgid "Comments Filter"
2883
  msgstr ""
2884
 
2885
- #: src/lib/src/Modules/CommentsFilter/Strings.php:47
2886
- msgid "Common Settings"
2887
  msgstr ""
2888
 
2889
- #: src/lib/src/Modules/CommentsFilter/Strings.php:48
2890
- msgid "Common Settings For All SPAM Scanning"
2891
  msgstr ""
2892
 
2893
- #: src/lib/src/Modules/CommentsFilter/Strings.php:50
2894
- msgid "Settings that apply to all comment SPAM scanning."
2895
  msgstr ""
2896
 
2897
- #: src/lib/src/Modules/CommentsFilter/Strings.php:55
2898
- #, php-format
2899
- msgid "%s Comment SPAM Protection"
2900
  msgstr ""
2901
 
2902
- #: src/lib/src/Modules/CommentsFilter/Strings.php:55
2903
- msgid "Automatic Bot"
2904
  msgstr ""
2905
 
2906
- #: src/lib/src/Modules/CommentsFilter/Strings.php:57
2907
- #, php-format
2908
- msgid "Blocks 100% of all automated bot-generated comment SPAM."
2909
  msgstr ""
2910
 
2911
- #: src/lib/src/Modules/CommentsFilter/Strings.php:58
2912
- #: src/lib/src/Modules/CommentsFilter/Strings.php:76
2913
- #: src/lib/src/Modules/LoginGuard/Strings.php:108
2914
- #: src/lib/src/Modules/LoginGuard/Strings.php:127
2915
- #: src/lib/src/Modules/Plugin/Strings.php:100
2916
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:47
2917
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:56
2918
- #: src/lib/src/Modules/UserManagement/Strings.php:49
2919
- #: src/lib/src/Modules/UserManagement/Strings.php:58
2920
- #: src/lib/src/Modules/UserManagement/Strings.php:67
2921
- #: src/lib/src/Modules/UserManagement/Strings.php:76
2922
- #: src/lib/src/Modules/UserManagement/Strings.php:86
2923
- msgid "Use of this feature is highly recommend."
2924
  msgstr ""
2925
 
2926
- #: src/lib/src/Modules/CommentsFilter/Strings.php:67
2927
- msgid "Adds Google reCAPTCHA to the Comment Forms."
2928
  msgstr ""
2929
 
2930
- #: src/lib/src/Modules/CommentsFilter/Strings.php:68
2931
- #: src/lib/src/Modules/LoginGuard/Strings.php:80
2932
- msgid "Keep this turned on."
2933
  msgstr ""
2934
 
2935
- #: src/lib/src/Modules/CommentsFilter/Strings.php:73
2936
- #, php-format
2937
- msgid "%s Comment SPAM Protection Filter"
2938
  msgstr ""
2939
 
2940
- #: src/lib/src/Modules/CommentsFilter/Strings.php:73
2941
- #: src/lib/src/Modules/Events/Strings.php:226
2942
- msgid "Human"
2943
  msgstr ""
2944
 
2945
- #: src/lib/src/Modules/CommentsFilter/Strings.php:75
2946
- msgid "Uses a 3rd party SPAM dictionary to detect human-based comment SPAM."
2947
  msgstr ""
2948
 
2949
- #: src/lib/src/Modules/CommentsFilter/Strings.php:77
2950
- msgid ""
2951
- "This tool, unlike other SPAM tools such as Akismet, will not send your "
2952
- "comment data to 3rd party services for analysis."
2953
  msgstr ""
2954
 
2955
- #: src/lib/src/Modules/CommentsFilter/Strings.php:105
2956
- msgid "Enable (or Disable) The Comment SPAM Protection Feature"
2957
  msgstr ""
2958
 
2959
- #: src/lib/src/Modules/CommentsFilter/Strings.php:106
2960
- #: src/wizards/plugin.php:694 src/wizards/plugin.php:699
2961
- msgid "Comment SPAM Protection"
2962
  msgstr ""
2963
 
2964
- #: src/lib/src/Modules/CommentsFilter/Strings.php:110
2965
- msgid "Trusted Commenter Minimum"
2966
  msgstr ""
2967
 
2968
- #: src/lib/src/Modules/CommentsFilter/Strings.php:111
2969
- msgid "Minimum Number Of Approved Comments Before Commenter Is Trusted"
2970
  msgstr ""
2971
 
2972
- #: src/lib/src/Modules/CommentsFilter/Strings.php:112
2973
- msgid ""
2974
- "Specify how many approved comments must exist before a commenter is trusted "
2975
- "and their comments are no longer scanned."
2976
  msgstr ""
2977
 
2978
- #: src/lib/src/Modules/CommentsFilter/Strings.php:113
2979
- msgid "Normally WordPress will trust after 1 comment."
2980
  msgstr ""
2981
 
2982
- #: src/lib/src/Modules/CommentsFilter/Strings.php:117
2983
- msgid "Trusted User Roles"
2984
  msgstr ""
2985
 
2986
- #: src/lib/src/Modules/CommentsFilter/Strings.php:118
2987
- msgid "Comments From Users With These Roles Will Never Be Scanned"
2988
  msgstr ""
2989
 
2990
- #: src/lib/src/Modules/CommentsFilter/Strings.php:119
2991
- msgid ""
2992
- "Shield doesn't normally scan comments from logged-in or registered users."
2993
  msgstr ""
2994
 
2995
- #: src/lib/src/Modules/CommentsFilter/Strings.php:120
2996
- msgid "Specify user roles here that shouldn't be scanned."
 
2997
  msgstr ""
2998
 
2999
- #: src/lib/src/Modules/CommentsFilter/Strings.php:121
3000
- #: src/lib/src/Modules/HackGuard/Strings.php:342
3001
- #: src/lib/src/Modules/HackGuard/Strings.php:343
3002
- #: src/lib/src/Modules/HackGuard/Strings.php:368
3003
- #: src/lib/src/Modules/LoginGuard/Strings.php:222
3004
- #: src/lib/src/Modules/Plugin/Strings.php:242
3005
- #: src/lib/src/Modules/Plugin/Strings.php:249
3006
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:70
3007
- #: src/lib/src/Modules/UserManagement/Strings.php:213
3008
- #: src/lib/src/Modules/UserManagement/Strings.php:230
3009
- #: src/processors/hackprotect_scan_mal.php:148
3010
- #: src/processors/loginprotect_intentprovider_backup.php:29
3011
- msgid "Important"
3012
  msgstr ""
3013
 
3014
- #: src/lib/src/Modules/CommentsFilter/Strings.php:121
3015
- #: src/lib/src/Modules/UserManagement/Strings.php:230
3016
- msgid "Take a new line for each user role."
3017
  msgstr ""
3018
 
3019
- #: src/lib/src/Modules/CommentsFilter/Strings.php:122
3020
- #: src/lib/src/Modules/UserManagement/Strings.php:231
3021
- msgid "Available Roles"
3022
  msgstr ""
3023
 
3024
- #: src/lib/src/Modules/CommentsFilter/Strings.php:127
3025
- #: src/lib/src/Modules/CommentsFilter/Strings.php:128
3026
- msgid "Human SPAM Filter"
3027
  msgstr ""
3028
 
3029
- #: src/lib/src/Modules/CommentsFilter/Strings.php:128
3030
  #, php-format
3031
- msgid "Enable (or Disable) The %s Feature"
3032
  msgstr ""
3033
 
3034
- #: src/lib/src/Modules/CommentsFilter/Strings.php:129
3035
- msgid ""
3036
- "Scans the content of WordPress comments for keywords that are indicative of "
3037
- "SPAM and marks the comment according to your preferred setting below."
3038
  msgstr ""
3039
 
3040
- #: src/lib/src/Modules/CommentsFilter/Strings.php:133
3041
- msgid "Comment Filter Items"
3042
  msgstr ""
3043
 
3044
- #: src/lib/src/Modules/CommentsFilter/Strings.php:134
3045
- msgid "Select The Items To Scan For SPAM"
3046
  msgstr ""
3047
 
3048
- #: src/lib/src/Modules/CommentsFilter/Strings.php:135
3049
- msgid ""
3050
- "When a user submits a comment, only the selected parts of the comment data "
3051
- "will be scanned for SPAM content."
3052
  msgstr ""
3053
 
3054
- #: src/lib/src/Modules/CommentsFilter/Strings.php:135
3055
- #, php-format
3056
- msgid "Recommended: %s"
3057
  msgstr ""
3058
 
3059
- #: src/lib/src/Modules/CommentsFilter/Strings.php:135
3060
- msgid "All"
3061
  msgstr ""
3062
 
3063
- #: src/lib/src/Modules/CommentsFilter/Strings.php:139
3064
- #: src/lib/src/Modules/CommentsFilter/Strings.php:152
3065
- msgid "Default SPAM Action"
3066
  msgstr ""
3067
 
3068
- #: src/lib/src/Modules/CommentsFilter/Strings.php:140
3069
- #: src/lib/src/Modules/CommentsFilter/Strings.php:153
3070
- msgid "How To Categorise Comments When Identified To Be SPAM"
3071
  msgstr ""
3072
 
3073
- #: src/lib/src/Modules/CommentsFilter/Strings.php:141
3074
- #: src/lib/src/Modules/CommentsFilter/Strings.php:154
3075
- #, php-format
3076
- msgid ""
3077
- "When a comment is detected as being SPAM from %s, the comment will be "
3078
- "categorised based on this setting."
3079
  msgstr ""
3080
 
3081
- #: src/lib/src/Modules/CommentsFilter/Strings.php:141
3082
- msgid "a human commenter"
3083
  msgstr ""
3084
 
3085
- #: src/lib/src/Modules/CommentsFilter/Strings.php:145
3086
- msgid "SPAM Bot Protection"
 
 
3087
  msgstr ""
3088
 
3089
- #: src/lib/src/Modules/CommentsFilter/Strings.php:146
3090
- msgid "Block 100% Comment SPAM From Automated Bots"
 
 
3091
  msgstr ""
3092
 
3093
- #: src/lib/src/Modules/CommentsFilter/Strings.php:147
3094
- msgid "Highly effective detection for the most common types of comment SPAM."
3095
  msgstr ""
3096
 
3097
- #: src/lib/src/Modules/CommentsFilter/Strings.php:148
3098
- msgid "Bonus"
 
3099
  msgstr ""
3100
 
3101
- #: src/lib/src/Modules/CommentsFilter/Strings.php:148
3102
- msgid ""
3103
- "Unlike Akismet, your data is never sent off-site to 3rd party processing "
3104
- "servers."
3105
  msgstr ""
3106
 
3107
- #: src/lib/src/Modules/CommentsFilter/Strings.php:154
3108
- msgid "an automatic bot"
3109
  msgstr ""
3110
 
3111
- #: src/lib/src/Modules/CommentsFilter/Strings.php:158
3112
- msgid "Comments Cooldown"
3113
  msgstr ""
3114
 
3115
- #: src/lib/src/Modules/CommentsFilter/Strings.php:159
3116
- msgid "Limit posting comments to X seconds after the page has loaded"
3117
  msgstr ""
3118
 
3119
- #: src/lib/src/Modules/CommentsFilter/Strings.php:160
3120
- msgid ""
3121
- "By forcing a comments cooldown period, you restrict a Spambot's ability to "
3122
- "post multiple times to your posts."
3123
  msgstr ""
3124
 
3125
- #: src/lib/src/Modules/CommentsFilter/Strings.php:164
3126
- msgid "Comment Token Expire"
3127
  msgstr ""
3128
 
3129
- #: src/lib/src/Modules/CommentsFilter/Strings.php:165
3130
- msgid "A visitor has X seconds within which to post a comment"
3131
  msgstr ""
3132
 
3133
- #: src/lib/src/Modules/CommentsFilter/Strings.php:166
3134
- msgid ""
3135
- "Default: 600 seconds (10 minutes). Each visitor is given a unique 'Token' so "
3136
- "they can comment. This restricts spambots, but we need to force these tokens "
3137
- "to expire and at the same time not bother the visitors."
3138
  msgstr ""
3139
 
3140
- #: src/lib/src/Modules/CommentsFilter/Strings.php:170
3141
- msgid "GASP Checkbox Message"
3142
  msgstr ""
3143
 
3144
- #: src/lib/src/Modules/CommentsFilter/Strings.php:171
3145
- msgid "If you want a custom checkbox message, please provide this here"
 
 
3146
  msgstr ""
3147
 
3148
- #: src/lib/src/Modules/CommentsFilter/Strings.php:172
3149
- msgid "You can customise the message beside the checkbox."
3150
  msgstr ""
3151
 
3152
- #: src/lib/src/Modules/CommentsFilter/Strings.php:173
3153
- #: src/lib/src/Modules/CommentsFilter/Strings.php:192
3154
- #: src/lib/src/Modules/CommentsFilter/Strings.php:199
3155
- #: src/lib/src/Modules/CommentsFilter/Strings.php:206
3156
- #, php-format
3157
- msgid "Default Message: %s"
3158
  msgstr ""
3159
 
3160
- #: src/lib/src/Modules/CommentsFilter/Strings.php:173
3161
- #: src/lib/src/Modules/CommentsFilter/Strings.php:192
3162
- msgid "Please check the box to confirm you're not a spammer"
3163
  msgstr ""
3164
 
3165
- #: src/lib/src/Modules/CommentsFilter/Strings.php:178
3166
- msgid "Enable Google reCAPTCHA For Comments"
 
 
 
3167
  msgstr ""
3168
 
3169
- #: src/lib/src/Modules/CommentsFilter/Strings.php:179
3170
- msgid "Use Google reCAPTCHA on the comments form to prevent bot-spam comments."
3171
  msgstr ""
3172
 
3173
- #: src/lib/src/Modules/CommentsFilter/Strings.php:183
3174
- #: src/lib/src/Modules/LoginGuard/Strings.php:226
3175
- #: src/lib/src/Modules/Plugin/Strings.php:253
3176
- msgid "reCAPTCHA Style"
3177
  msgstr ""
3178
 
3179
- #: src/lib/src/Modules/CommentsFilter/Strings.php:184
3180
- #: src/lib/src/Modules/LoginGuard/Strings.php:227
3181
- msgid "How Google reCAPTCHA Will Be Displayed"
3182
  msgstr ""
3183
 
3184
- #: src/lib/src/Modules/CommentsFilter/Strings.php:185
3185
- #: src/lib/src/Modules/LoginGuard/Strings.php:228
3186
- #: src/lib/src/Modules/Plugin/Strings.php:255
3187
- msgid ""
3188
- "You can choose the reCAPTCHA display format that best suits your site, "
3189
- "including the new Invisible Recaptcha"
3190
  msgstr ""
3191
 
3192
- #: src/lib/src/Modules/CommentsFilter/Strings.php:189
3193
- msgid "GASP Alert Message"
3194
  msgstr ""
3195
 
3196
- #: src/lib/src/Modules/CommentsFilter/Strings.php:190
3197
- msgid "If you want a custom alert message, please provide this here"
 
3198
  msgstr ""
3199
 
3200
- #: src/lib/src/Modules/CommentsFilter/Strings.php:191
3201
- msgid ""
3202
- "This alert message is displayed when a visitor attempts to submit a comment "
3203
- "without checking the box."
3204
  msgstr ""
3205
 
3206
- #: src/lib/src/Modules/CommentsFilter/Strings.php:196
3207
- msgid "GASP Wait Message"
3208
  msgstr ""
3209
 
3210
- #: src/lib/src/Modules/CommentsFilter/Strings.php:197
3211
- msgid ""
3212
- "If you want a custom submit-button wait message, please provide this here."
3213
  msgstr ""
3214
 
3215
- #: src/lib/src/Modules/CommentsFilter/Strings.php:198
3216
- #, php-format
3217
  msgid ""
3218
- "Where you see the '%s' this will be the number of seconds. You must ensure "
3219
- "you include 1, and only 1, of these."
3220
  msgstr ""
3221
 
3222
- #: src/lib/src/Modules/CommentsFilter/Strings.php:199
3223
- #, php-format
3224
- msgid "Please wait %s seconds before posting your comment"
3225
  msgstr ""
3226
 
3227
- #: src/lib/src/Modules/CommentsFilter/Strings.php:203
3228
- msgid "GASP Reload Message"
3229
  msgstr ""
3230
 
3231
- #: src/lib/src/Modules/CommentsFilter/Strings.php:204
 
 
 
 
 
3232
  msgid ""
3233
- "If you want a custom message when the comment token has expired, please "
3234
- "provide this here."
3235
  msgstr ""
3236
 
3237
- #: src/lib/src/Modules/CommentsFilter/Strings.php:205
 
 
 
 
 
 
3238
  msgid ""
3239
- "This message is displayed on the submit-button when the comment token is "
3240
- "expired"
3241
  msgstr ""
3242
 
3243
- #: src/lib/src/Modules/CommentsFilter/Strings.php:206
3244
- msgid "Please reload this page to post a comment"
 
 
3245
  msgstr ""
3246
 
3247
- #: src/lib/src/Modules/Email/Strings.php:20
3248
- #: src/lib/src/Modules/Email/Strings.php:21
3249
- msgid "Email Options"
3250
  msgstr ""
3251
 
3252
- #: src/lib/src/Modules/Email/Strings.php:47
3253
- msgid "Email Throttle Limit"
3254
  msgstr ""
3255
 
3256
- #: src/lib/src/Modules/Email/Strings.php:48
3257
- msgid "Limit Emails Per Second"
3258
  msgstr ""
3259
 
3260
- #: src/lib/src/Modules/Email/Strings.php:49
3261
- msgid ""
3262
- "You throttle emails sent by this plugin by limiting the number of emails "
3263
- "sent every second. This is useful in case you get hit by a bot attack. Zero "
3264
- "(0) turns this off. Suggested: 10"
3265
  msgstr ""
3266
 
3267
- #: src/lib/src/Modules/Events/Strings.php:24
3268
- msgid "Test Cron Run"
 
3269
  msgstr ""
3270
 
3271
- #: src/lib/src/Modules/Events/Strings.php:25
3272
- msgid "Import Notify Sent"
 
 
3273
  msgstr ""
3274
 
3275
- #: src/lib/src/Modules/Events/Strings.php:26
3276
- msgid "Import Notify Received"
3277
  msgstr ""
3278
 
3279
- #: src/lib/src/Modules/Events/Strings.php:27
3280
- msgid "Options Exported"
 
3281
  msgstr ""
3282
 
3283
- #: src/lib/src/Modules/Events/Strings.php:28
3284
- msgid "Options Imported"
 
 
3285
  msgstr ""
3286
 
3287
- #: src/lib/src/Modules/Events/Strings.php:29
3288
- msgid "Whitelist Site Added"
 
3289
  msgstr ""
3290
 
3291
- #: src/lib/src/Modules/Events/Strings.php:30
3292
- msgid "Whitelist Site Removed"
 
 
3293
  msgstr ""
3294
 
3295
- #: src/lib/src/Modules/Events/Strings.php:31
3296
- msgid "Master Site URL Set"
 
3297
  msgstr ""
3298
 
3299
- #: src/lib/src/Modules/Events/Strings.php:32
3300
- msgid "Google reCAPTCHA Test Success"
3301
  msgstr ""
3302
 
3303
- #: src/lib/src/Modules/Events/Strings.php:33
3304
- #: src/lib/src/Modules/Plugin/Strings.php:48
3305
- msgid "Google reCAPTCHA Test Fail"
3306
  msgstr ""
3307
 
3308
- #: src/lib/src/Modules/Events/Strings.php:34
3309
- msgid "Security Admin Key Authentication Success"
3310
  msgstr ""
3311
 
3312
- #: src/lib/src/Modules/Events/Strings.php:35
3313
- msgid "Security Admin Key Authentication Failed"
 
3314
  msgstr ""
3315
 
3316
- #: src/lib/src/Modules/Events/Strings.php:36
3317
- msgid "Custom Offense"
3318
  msgstr ""
3319
 
3320
- #: src/lib/src/Modules/Events/Strings.php:37
3321
- msgid "Connection Killed"
3322
  msgstr ""
3323
 
3324
- #: src/lib/src/Modules/Events/Strings.php:38
3325
- msgid "Offense Triggered"
3326
  msgstr ""
3327
 
3328
- #: src/lib/src/Modules/Events/Strings.php:39
3329
- msgid "IP Blocked"
 
3330
  msgstr ""
3331
 
3332
- #: src/lib/src/Modules/Events/Strings.php:40
3333
- msgid "IP Unblocked Using Flag File"
 
3334
  msgstr ""
3335
 
3336
- #: src/lib/src/Modules/Events/Strings.php:42
3337
- #: src/lib/src/Modules/Events/Strings.php:46
3338
- #: src/lib/src/Modules/Events/Strings.php:50
3339
- #: src/lib/src/Modules/Events/Strings.php:54
3340
- #: src/lib/src/Modules/Events/Strings.php:58
3341
- #: src/lib/src/Modules/Events/Strings.php:62
3342
- #: src/lib/src/Modules/Events/Strings.php:66
3343
- msgid "Bot Detection"
3344
  msgstr ""
3345
 
3346
- #: src/lib/src/Modules/Events/Strings.php:47
3347
- #: src/lib/src/Modules/IPs/Strings.php:192
3348
- msgid "Fake Web Crawler"
3349
  msgstr ""
3350
 
3351
- #: src/lib/src/Modules/Events/Strings.php:51
3352
- #: src/lib/src/Modules/IPs/Strings.php:172
3353
- msgid "Link Cheese"
3354
  msgstr ""
3355
 
3356
- #: src/lib/src/Modules/Events/Strings.php:55
3357
- #: src/lib/src/Modules/IPs/Strings.php:186
3358
- msgid "Failed Login"
3359
  msgstr ""
3360
 
3361
- #: src/lib/src/Modules/Events/Strings.php:59
3362
- msgid "Invalid Username Login"
3363
  msgstr ""
3364
 
3365
- #: src/lib/src/Modules/Events/Strings.php:63
3366
- msgid "Invalid User-Agent"
3367
  msgstr ""
3368
 
3369
- #: src/lib/src/Modules/Events/Strings.php:70
3370
- #: src/lib/src/Modules/Events/Strings.php:74
3371
- #: src/lib/src/Modules/Events/Strings.php:78
3372
- #: src/lib/src/Modules/Events/Strings.php:82
3373
- #: src/lib/src/Modules/Events/Strings.php:86
3374
- #: src/lib/src/Modules/Events/Strings.php:90
3375
- msgid "Alert Sent"
3376
  msgstr ""
3377
 
3378
- #: src/lib/src/Modules/Events/Strings.php:71
3379
- msgid "Abandoned Plugin Detected"
3380
  msgstr ""
3381
 
3382
- #: src/lib/src/Modules/Events/Strings.php:75
3383
- msgid "Malware Detected"
3384
  msgstr ""
3385
 
3386
- #: src/lib/src/Modules/Events/Strings.php:79
3387
- msgid "Modified Plugin/Theme Detected"
 
3388
  msgstr ""
3389
 
3390
- #: src/lib/src/Modules/Events/Strings.php:83
3391
- msgid "Unrecognised File Detected"
 
3392
  msgstr ""
3393
 
3394
- #: src/lib/src/Modules/Events/Strings.php:87
3395
- msgid "Modified/Missing WP Core File Detected"
 
3396
  msgstr ""
3397
 
3398
- #: src/lib/src/Modules/Events/Strings.php:91
3399
- msgid "Vulnerable Plugin Detected"
3400
  msgstr ""
3401
 
3402
- #: src/lib/src/Modules/Events/Strings.php:94
3403
- #: src/lib/src/Modules/Events/Strings.php:98
3404
- #: src/lib/src/Modules/Events/Strings.php:102
3405
- #: src/lib/src/Modules/Events/Strings.php:106
3406
- #: src/lib/src/Modules/Events/Strings.php:110
3407
- #: src/lib/src/Modules/Events/Strings.php:114
3408
- msgid "Scan Completed"
3409
  msgstr ""
3410
 
3411
- #: src/lib/src/Modules/Events/Strings.php:95
3412
- #: src/lib/src/Modules/Events/Strings.php:119
3413
- #: src/lib/src/Modules/HackGuard/Strings.php:23
3414
- #: src/lib/src/Modules/HackGuard/Strings.php:128
3415
- msgid "Abandoned Plugins"
3416
  msgstr ""
3417
 
3418
- #: src/lib/src/Modules/Events/Strings.php:99
3419
- #: src/lib/src/Modules/Events/Strings.php:123
3420
- #: src/lib/src/Modules/HackGuard/Strings.php:25
3421
- #: src/lib/src/Modules/HackGuard/Strings.php:146
3422
- msgid "Malware"
3423
  msgstr ""
3424
 
3425
- #: src/lib/src/Modules/Events/Strings.php:111
3426
- #: src/lib/src/Modules/Events/Strings.php:135
3427
- #: src/lib/src/Modules/HackGuard/Strings.php:27
3428
- msgid "WP Core Files"
3429
  msgstr ""
3430
 
3431
- #: src/lib/src/Modules/Events/Strings.php:115
3432
- #: src/lib/src/Modules/Events/Strings.php:139
3433
- #: src/lib/src/Modules/HackGuard/Strings.php:28
3434
- #: src/lib/src/Modules/HackGuard/Strings.php:99
3435
- msgid "Vulnerabilities"
3436
  msgstr ""
3437
 
3438
- #: src/lib/src/Modules/Events/Strings.php:118
3439
- #: src/lib/src/Modules/Events/Strings.php:122
3440
- #: src/lib/src/Modules/Events/Strings.php:126
3441
- #: src/lib/src/Modules/Events/Strings.php:130
3442
- #: src/lib/src/Modules/Events/Strings.php:134
3443
- #: src/lib/src/Modules/Events/Strings.php:138
3444
- msgid "Scan Item Discovered"
3445
  msgstr ""
3446
 
3447
- #: src/lib/src/Modules/Events/Strings.php:172
3448
- #: src/lib/src/Modules/Insights/Strings.php:46
3449
- msgid "Firewall Block"
3450
  msgstr ""
3451
 
3452
- #: src/lib/src/Modules/Events/Strings.php:175
3453
- #: src/lib/src/Modules/Firewall/Strings.php:194 src/processors/firewall.php:430
3454
- msgid "Directory Traversal"
3455
  msgstr ""
3456
 
3457
- #: src/lib/src/Modules/Events/Strings.php:179
3458
- #: src/lib/src/Modules/Firewall/Strings.php:104
3459
- #: src/lib/src/Modules/Firewall/Strings.php:197 src/processors/firewall.php:433
3460
- msgid "WordPress Terms"
3461
  msgstr ""
3462
 
3463
- #: src/lib/src/Modules/Events/Strings.php:183
3464
- #: src/lib/src/Modules/Firewall/Strings.php:110
3465
- #: src/lib/src/Modules/Firewall/Strings.php:200 src/processors/firewall.php:436
3466
- msgid "Field Truncation"
3467
  msgstr ""
3468
 
3469
- #: src/lib/src/Modules/Events/Strings.php:187
3470
- #: src/lib/src/Modules/Firewall/Strings.php:98
3471
- #: src/lib/src/Modules/Firewall/Strings.php:203 src/processors/firewall.php:439
3472
- msgid "SQL Queries"
3473
  msgstr ""
3474
 
3475
- #: src/lib/src/Modules/Events/Strings.php:191
3476
- #: src/lib/src/Modules/Firewall/Strings.php:206 src/processors/firewall.php:445
3477
- msgid "Leading Schema"
3478
  msgstr ""
3479
 
3480
- #: src/lib/src/Modules/Events/Strings.php:195
3481
- #: src/lib/src/Modules/Firewall/Strings.php:209 src/processors/firewall.php:451
3482
- msgid "Aggressive Rules"
3483
  msgstr ""
3484
 
3485
- #: src/lib/src/Modules/Events/Strings.php:199
3486
- #: src/lib/src/Modules/Firewall/Strings.php:116
3487
- #: src/lib/src/Modules/Firewall/Strings.php:212 src/processors/firewall.php:448
3488
- msgid "PHP Code"
3489
  msgstr ""
3490
 
3491
- #: src/lib/src/Modules/Events/Strings.php:203
3492
- #: src/lib/src/Modules/Firewall/Strings.php:215 src/processors/firewall.php:442
3493
- msgid "EXE File Uploads"
3494
  msgstr ""
3495
 
3496
- #: src/lib/src/Modules/Events/Strings.php:205
3497
- msgid "Session Not Found"
 
3498
  msgstr ""
3499
 
3500
- #: src/lib/src/Modules/Events/Strings.php:206
3501
- msgid "Session Expired"
 
3502
  msgstr ""
3503
 
3504
- #: src/lib/src/Modules/Events/Strings.php:207
3505
- msgid "Session Idle"
 
3506
  msgstr ""
3507
 
3508
- #: src/lib/src/Modules/Events/Strings.php:208
3509
- msgid "Session Locked To IP"
 
3510
  msgstr ""
3511
 
3512
- #: src/lib/src/Modules/Events/Strings.php:209
3513
- msgid "Session Locked To Browser"
 
3514
  msgstr ""
3515
 
3516
- #: src/lib/src/Modules/Events/Strings.php:210
3517
- msgid "Session Unverified"
 
3518
  msgstr ""
3519
 
3520
- #: src/lib/src/Modules/Events/Strings.php:211
3521
- msgid "Password Expired"
3522
  msgstr ""
3523
 
3524
- #: src/lib/src/Modules/Events/Strings.php:212
3525
- msgid "Forced Password Change"
3526
  msgstr ""
3527
 
3528
- #: src/lib/src/Modules/Events/Strings.php:213
3529
- msgid "Password Change Blocked"
3530
  msgstr ""
3531
 
3532
- #: src/lib/src/Modules/Events/Strings.php:214
3533
- msgid "User Hard-Suspended"
3534
  msgstr ""
3535
 
3536
- #: src/lib/src/Modules/Events/Strings.php:215
3537
- msgid "User Hard-Unsuspended"
3538
  msgstr ""
3539
 
3540
- #: src/lib/src/Modules/Events/Strings.php:217
3541
- #: src/lib/src/Modules/Events/Strings.php:221
3542
- #: src/lib/src/Modules/Events/Strings.php:225
3543
- msgid "SPAM Blocked"
3544
  msgstr ""
3545
 
3546
- #: src/lib/src/Modules/Events/Strings.php:218
3547
- msgid "Bot"
3548
  msgstr ""
3549
 
3550
- #: src/lib/src/Modules/Events/Strings.php:229
3551
- #: src/lib/src/Modules/Events/Strings.php:233
3552
- #: src/lib/src/Tables/Render/IpBlack.php:13
3553
- msgid "Blocked"
3554
  msgstr ""
3555
 
3556
- #: src/lib/src/Modules/Events/Strings.php:230
3557
- msgid "Anonymous REST API"
 
3558
  msgstr ""
3559
 
3560
- #: src/lib/src/Modules/Events/Strings.php:236
3561
- msgid "Session Started"
3562
  msgstr ""
3563
 
3564
- #: src/lib/src/Modules/Events/Strings.php:237
3565
- msgid "Session Terminated"
3566
  msgstr ""
3567
 
3568
- #: src/lib/src/Modules/Events/Strings.php:238
3569
- msgid "Plugin Activated"
3570
  msgstr ""
3571
 
3572
- #: src/lib/src/Modules/Events/Strings.php:239
3573
- msgid "Plugin Deactivated"
3574
  msgstr ""
3575
 
3576
- #: src/lib/src/Modules/Events/Strings.php:240
3577
- msgid "Plugin File Edited"
3578
  msgstr ""
3579
 
3580
- #: src/lib/src/Modules/Events/Strings.php:241
3581
- msgid "Theme Activated"
3582
  msgstr ""
3583
 
3584
- #: src/lib/src/Modules/Events/Strings.php:242
3585
- msgid "Theme File Edited"
3586
  msgstr ""
3587
 
3588
- #: src/lib/src/Modules/Events/Strings.php:243
3589
- msgid "WP Core Updated"
 
3590
  msgstr ""
3591
 
3592
- #: src/lib/src/Modules/Events/Strings.php:244
3593
- msgid "Permalinks Updated"
 
3594
  msgstr ""
3595
 
3596
- #: src/lib/src/Modules/Events/Strings.php:245
3597
- msgid "Post Deleted"
3598
  msgstr ""
3599
 
3600
- #: src/lib/src/Modules/Events/Strings.php:246
3601
- msgid "Post Trashed"
3602
  msgstr ""
3603
 
3604
- #: src/lib/src/Modules/Events/Strings.php:247
3605
- msgid "Post Recovered"
3606
  msgstr ""
3607
 
3608
- #: src/lib/src/Modules/Events/Strings.php:248
3609
- msgid "Post Updated"
 
3610
  msgstr ""
3611
 
3612
- #: src/lib/src/Modules/Events/Strings.php:249
3613
- msgid "Post Published"
3614
  msgstr ""
3615
 
3616
- #: src/lib/src/Modules/Events/Strings.php:250
3617
- msgid "Post Unpublished"
3618
  msgstr ""
3619
 
3620
- #: src/lib/src/Modules/Events/Strings.php:251
3621
- msgid "User Login"
 
 
3622
  msgstr ""
3623
 
3624
- #: src/lib/src/Modules/Events/Strings.php:252
3625
- msgid "User Registered"
3626
  msgstr ""
3627
 
3628
- #: src/lib/src/Modules/Events/Strings.php:253
3629
- msgid "User Deleted"
3630
  msgstr ""
3631
 
3632
- #: src/lib/src/Modules/Events/Strings.php:254
3633
- msgid "User Deleted And Reassigned"
3634
  msgstr ""
3635
 
3636
- #: src/lib/src/Modules/Events/Strings.php:255
3637
- msgid "Email Sent"
3638
  msgstr ""
3639
 
3640
- #: src/lib/src/Modules/Events/Strings.php:256
3641
- msgid "Invalid Email Sent"
3642
  msgstr ""
3643
 
3644
- #: src/lib/src/Modules/Events/Strings.php:257
3645
- msgid "License Check Success"
3646
  msgstr ""
3647
 
3648
- #: src/lib/src/Modules/Events/Strings.php:258
3649
- msgid "License Failure Email"
3650
  msgstr ""
3651
 
3652
- #: src/lib/src/Modules/Events/Strings.php:259
3653
- msgid "License Deactivated"
3654
  msgstr ""
3655
 
3656
- #: src/lib/src/Modules/Firewall/Strings.php:23
3657
- msgid ""
3658
- "The Firewall is designed to analyse data sent to your website and block any "
3659
- "requests that appear to be malicious."
3660
  msgstr ""
3661
 
3662
- #: src/lib/src/Modules/Firewall/Strings.php:29
3663
- msgid "Firewall Blocking Options"
3664
  msgstr ""
3665
 
3666
- #: src/lib/src/Modules/Firewall/Strings.php:31
3667
- msgid "Here you choose what kind of malicious data to scan for."
3668
  msgstr ""
3669
 
3670
- #: src/lib/src/Modules/Firewall/Strings.php:33
3671
- msgid "Turn on as many options here as you can."
3672
  msgstr ""
3673
 
3674
- #: src/lib/src/Modules/Firewall/Strings.php:34
3675
- msgid ""
3676
- "If you find an incompatibility or something stops working, un-check 1 option "
3677
- "at a time until you find the problem or review the Audit Trail."
3678
  msgstr ""
3679
 
3680
- #: src/lib/src/Modules/Firewall/Strings.php:36
3681
- msgid "Firewall Blocking"
3682
  msgstr ""
3683
 
3684
- #: src/lib/src/Modules/Firewall/Strings.php:40
3685
- msgid "Choose Firewall Block Response"
3686
  msgstr ""
3687
 
3688
- #: src/lib/src/Modules/Firewall/Strings.php:42
3689
- msgid ""
3690
- "Here you choose how the plugin will respond when it detects malicious data."
3691
  msgstr ""
3692
 
3693
- #: src/lib/src/Modules/Firewall/Strings.php:43
3694
- #, php-format
3695
- msgid "Choose the option \"%s\"."
3696
  msgstr ""
3697
 
3698
- #: src/lib/src/Modules/Firewall/Strings.php:43
3699
- msgid "Die With Message"
3700
  msgstr ""
3701
 
3702
- #: src/lib/src/Modules/Firewall/Strings.php:45
3703
- msgid "Firewall Response"
3704
  msgstr ""
3705
 
3706
- #: src/lib/src/Modules/Firewall/Strings.php:49
3707
- msgid "Whitelists - Pages, Parameters, and Users that by-pass the Firewall"
3708
  msgstr ""
3709
 
3710
- #: src/lib/src/Modules/Firewall/Strings.php:51
3711
- msgid ""
3712
- "In principle you should not need to whitelist anything or anyone unless you "
3713
- "have discovered a collision with another plugin."
3714
  msgstr ""
3715
 
3716
- #: src/lib/src/Modules/Firewall/Strings.php:52
3717
- msgid ""
3718
- "Do not whitelist anything unless you are confident in what you are doing."
3719
  msgstr ""
3720
 
3721
- #: src/lib/src/Modules/Firewall/Strings.php:54
3722
- msgid "Whitelist"
3723
  msgstr ""
3724
 
3725
- #: src/lib/src/Modules/Firewall/Strings.php:86
3726
- msgid "Include Cookies"
3727
  msgstr ""
3728
 
3729
- #: src/lib/src/Modules/Firewall/Strings.php:87
3730
- msgid "Also Test Cookie Values In Firewall Tests"
3731
  msgstr ""
3732
 
3733
- #: src/lib/src/Modules/Firewall/Strings.php:88
3734
- msgid ""
3735
- "The firewall tests GET and POST, but with this option checked it will also "
3736
- "check COOKIE values."
3737
  msgstr ""
3738
 
3739
- #: src/lib/src/Modules/Firewall/Strings.php:92
3740
- msgid "Directory Traversals"
 
 
3741
  msgstr ""
3742
 
3743
- #: src/lib/src/Modules/Firewall/Strings.php:93
3744
- msgid "Block Directory Traversals"
3745
  msgstr ""
3746
 
3747
- #: src/lib/src/Modules/Firewall/Strings.php:94
3748
- #, php-format
3749
  msgid ""
3750
- "This will block directory traversal paths in in application parameters (e.g. "
3751
- "%s, etc)."
3752
  msgstr ""
3753
 
3754
- #: src/lib/src/Modules/Firewall/Strings.php:99
3755
- msgid "Block SQL Queries"
3756
  msgstr ""
3757
 
3758
- #: src/lib/src/Modules/Firewall/Strings.php:100
3759
- #, php-format
3760
- msgid "This will block sql in application parameters (e.g. %s, etc)."
3761
  msgstr ""
3762
 
3763
- #: src/lib/src/Modules/Firewall/Strings.php:105
3764
- msgid "Block WordPress Specific Terms"
 
3765
  msgstr ""
3766
 
3767
- #: src/lib/src/Modules/Firewall/Strings.php:106
 
 
 
 
 
3768
  msgid ""
3769
- "This will block WordPress specific terms in application parameters (wp_, "
3770
- "user_login, etc.)."
3771
  msgstr ""
3772
 
3773
- #: src/lib/src/Modules/Firewall/Strings.php:111
3774
- msgid "Block Field Truncation Attacks"
 
3775
  msgstr ""
3776
 
3777
- #: src/lib/src/Modules/Firewall/Strings.php:112
3778
- msgid "This will block field truncation attacks in application parameters."
3779
  msgstr ""
3780
 
3781
- #: src/lib/src/Modules/Firewall/Strings.php:117
3782
- #, php-format
3783
- msgid "Block %s"
 
3784
  msgstr ""
3785
 
3786
- #: src/lib/src/Modules/Firewall/Strings.php:117
3787
- msgid "PHP Code Includes"
 
3788
  msgstr ""
3789
 
3790
- #: src/lib/src/Modules/Firewall/Strings.php:118
3791
- msgid "This will block any data that appears to try and include PHP files."
 
 
3792
  msgstr ""
3793
 
3794
- #: src/lib/src/Modules/Firewall/Strings.php:119
3795
- msgid "Will probably block saving within the Plugin/Theme file editors."
3796
  msgstr ""
3797
 
3798
- #: src/lib/src/Modules/Firewall/Strings.php:123
3799
- msgid "Exe File Uploads"
 
 
3800
  msgstr ""
3801
 
3802
- #: src/lib/src/Modules/Firewall/Strings.php:124
3803
- msgid "Block Executable File Uploads"
3804
  msgstr ""
3805
 
3806
- #: src/lib/src/Modules/Firewall/Strings.php:125
3807
- msgid "This will block executable file uploads (.php, .exe, etc.)."
3808
  msgstr ""
3809
 
3810
- #: src/lib/src/Modules/Firewall/Strings.php:129
3811
- msgid "Leading Schemas"
 
 
3812
  msgstr ""
3813
 
3814
- #: src/lib/src/Modules/Firewall/Strings.php:130
3815
- msgid "Block Leading Schemas (HTTPS / HTTP)"
 
 
3816
  msgstr ""
3817
 
3818
- #: src/lib/src/Modules/Firewall/Strings.php:131
3819
  msgid ""
3820
- "This will block leading schemas http:// and https:// in application "
3821
- "parameters (off by default; may cause problems with other plugins)."
3822
  msgstr ""
3823
 
3824
- #: src/lib/src/Modules/Firewall/Strings.php:135
3825
- msgid "Aggressive Scan"
 
 
3826
  msgstr ""
3827
 
3828
- #: src/lib/src/Modules/Firewall/Strings.php:136
3829
- msgid "Aggressively Block Data"
 
3830
  msgstr ""
3831
 
3832
- #: src/lib/src/Modules/Firewall/Strings.php:137
3833
- msgid ""
3834
- "Employs a set of aggressive rules to detect and block malicious data "
3835
- "submitted to your site."
3836
  msgstr ""
3837
 
3838
- #: src/lib/src/Modules/Firewall/Strings.php:138
3839
- msgid "May cause an increase in false-positive firewall blocks."
3840
  msgstr ""
3841
 
3842
- #: src/lib/src/Modules/Firewall/Strings.php:142
3843
- msgid "Block Response"
 
3844
  msgstr ""
3845
 
3846
- #: src/lib/src/Modules/Firewall/Strings.php:143
3847
- msgid "Choose how the firewall responds when it blocks a request"
3848
  msgstr ""
3849
 
3850
- #: src/lib/src/Modules/Firewall/Strings.php:144
 
 
 
 
 
3851
  msgid ""
3852
- "We recommend dying with a message so you know what might have occurred when "
3853
- "the firewall blocks you"
3854
  msgstr ""
3855
 
3856
- #: src/lib/src/Modules/Firewall/Strings.php:148
3857
- msgid "Send Email Report"
 
3858
  msgstr ""
3859
 
3860
- #: src/lib/src/Modules/Firewall/Strings.php:149
3861
  msgid ""
3862
- "When a visitor is blocked the firewall will send an email to the configured "
3863
- "email address"
3864
  msgstr ""
3865
 
3866
- #: src/lib/src/Modules/Firewall/Strings.php:150
 
3867
  msgid ""
3868
- "Use with caution - if you get hit by automated bots you may send out too "
3869
- "many emails and you could get blocked by your host"
3870
  msgstr ""
3871
 
3872
- #: src/lib/src/Modules/Firewall/Strings.php:154
3873
- msgid "Whitelist Parameters"
 
3874
  msgstr ""
3875
 
3876
- #: src/lib/src/Modules/Firewall/Strings.php:155
3877
  msgid ""
3878
- "Detail pages and parameters that are whitelisted (ignored by the firewall)"
 
3879
  msgstr ""
3880
 
3881
- #: src/lib/src/Modules/Firewall/Strings.php:156
3882
  msgid ""
3883
- "This should be used with caution and you should only provide parameter names "
3884
- "that you must have excluded"
3885
  msgstr ""
3886
 
3887
- #: src/lib/src/Modules/Firewall/Strings.php:160
3888
- #: src/lib/src/Modules/Firewall/Strings.php:161
3889
- #, php-format
3890
- msgid "Ignore %s"
3891
  msgstr ""
3892
 
3893
- #: src/lib/src/Modules/Firewall/Strings.php:162
3894
  msgid ""
3895
- "Authenticated administrator users will not be processed by the firewall "
3896
- "rules."
3897
  msgstr ""
3898
 
3899
- #: src/lib/src/Modules/Firewall/Strings.php:166
3900
- msgid "Firewall Block Message"
 
3901
  msgstr ""
3902
 
3903
- #: src/lib/src/Modules/Firewall/Strings.php:167
3904
- msgid "Message Displayed To Visitor When A Firewall Block Is Triggered"
 
3905
  msgstr ""
3906
 
3907
- #: src/lib/src/Modules/Firewall/Strings.php:168
3908
- msgid "This is the message displayed to visitors that trigger the firewall."
 
3909
  msgstr ""
3910
 
3911
- #: src/lib/src/Modules/Firewall/Strings.php:191
3912
  #, php-format
3913
- msgid "Skipping firewall checking for this visit: %s."
 
 
 
 
 
 
3914
  msgstr ""
3915
 
3916
- #: src/lib/src/Modules/Firewall/Strings.php:191
3917
- msgid "Parsing the URI failed"
 
3918
  msgstr ""
3919
 
3920
- #: src/lib/src/Modules/Firewall/Strings.php:194
3921
- #: src/lib/src/Modules/Firewall/Strings.php:197
3922
- #: src/lib/src/Modules/Firewall/Strings.php:200
3923
- #: src/lib/src/Modules/Firewall/Strings.php:203
3924
- #: src/lib/src/Modules/Firewall/Strings.php:206
3925
- #: src/lib/src/Modules/Firewall/Strings.php:209
3926
- #: src/lib/src/Modules/Firewall/Strings.php:212
3927
- #: src/lib/src/Modules/Firewall/Strings.php:215 src/processors/firewall.php:203
3928
- #, php-format
3929
- msgid "Firewall Trigger: %s."
3930
  msgstr ""
3931
 
3932
- #: src/lib/src/Modules/Firewall/Strings.php:218
 
3933
  #, php-format
3934
- msgid "Successfully sent Firewall Block email alert to: %s"
3935
  msgstr ""
3936
 
3937
- #: src/lib/src/Modules/Firewall/Strings.php:221
 
3938
  #, php-format
3939
- msgid "Failed to send Firewall Block email alert to: %s"
3940
  msgstr ""
3941
 
3942
- #: src/lib/src/Modules/Firewall/Strings.php:228 src/processors/firewall.php:204
3943
- msgid "Page parameter failed firewall check."
3944
  msgstr ""
3945
 
3946
- #: src/lib/src/Modules/Firewall/Strings.php:229 src/processors/firewall.php:205
3947
- #, php-format
3948
- msgid "The offending parameter was \"%s\" with a value of \"%s\"."
3949
  msgstr ""
3950
 
3951
- #: src/lib/src/Modules/Firewall/Strings.php:236
3952
- msgid "Visitor connection was killed with wp_die()"
3953
  msgstr ""
3954
 
3955
- #: src/lib/src/Modules/Firewall/Strings.php:239
3956
- msgid "Visitor connection was killed with wp_die() and a message"
3957
  msgstr ""
3958
 
3959
- #: src/lib/src/Modules/Firewall/Strings.php:242
3960
- msgid "Visitor was sent HOME"
3961
  msgstr ""
3962
 
3963
- #: src/lib/src/Modules/Firewall/Strings.php:245
3964
- msgid "Visitor was sent 404"
3965
  msgstr ""
3966
 
3967
- #: src/lib/src/Modules/Firewall/Strings.php:248
3968
- #: src/lib/src/Tables/Build/ScanWcf.php:31
3969
- #: src/lib/src/Tables/Build/Traffic.php:118
3970
- #: src/lib/src/Tables/Build/Traffic.php:127
3971
- msgid "Unknown"
3972
  msgstr ""
3973
 
3974
- #: src/lib/src/Modules/Firewall/Strings.php:251
3975
- #, php-format
3976
- msgid "Firewall Block Response: %s."
3977
  msgstr ""
3978
 
3979
- #: src/lib/src/Modules/HackGuard/AjaxHandler.php:159
3980
- msgid "Unsupported scanner"
3981
  msgstr ""
3982
 
3983
- #: src/lib/src/Modules/HackGuard/AjaxHandler.php:162
3984
- msgid "Unsupported item(s) selected"
3985
  msgstr ""
3986
 
3987
- #: src/lib/src/Modules/HackGuard/AjaxHandler.php:180
3988
- msgid "Action successful."
3989
  msgstr ""
3990
 
3991
- #: src/lib/src/Modules/HackGuard/AjaxHandler.php:183
3992
- msgid "An error occurred."
3993
  msgstr ""
3994
 
3995
- #: src/lib/src/Modules/HackGuard/AjaxHandler.php:183
3996
- msgid "Some items may not have been processed."
3997
  msgstr ""
3998
 
3999
- #: src/lib/src/Modules/HackGuard/AjaxHandler.php:189
4000
- msgid "Rescanning"
 
4001
  msgstr ""
4002
 
4003
- #: src/lib/src/Modules/HackGuard/AjaxHandler.php:192
4004
- msgid "Reloading"
4005
  msgstr ""
4006
 
4007
- #: src/lib/src/Modules/HackGuard/AjaxHandler.php:228
4008
- msgid "No scan running."
 
4009
  msgstr ""
4010
 
4011
- #: src/lib/src/Modules/HackGuard/AjaxHandler.php:238
4012
- msgid "Current Scan"
4013
  msgstr ""
4014
 
4015
- #: src/lib/src/Modules/HackGuard/AjaxHandler.php:240
4016
- #, php-format
4017
- msgid "%s of %s scans remaining."
4018
  msgstr ""
4019
 
4020
- #: src/lib/src/Modules/HackGuard/AjaxHandler.php:243
4021
- msgid "Please be patient."
4022
  msgstr ""
4023
 
4024
- #: src/lib/src/Modules/HackGuard/AjaxHandler.php:244
4025
- msgid "Some scans can take quite a while to complete."
4026
  msgstr ""
4027
 
4028
- #: src/lib/src/Modules/HackGuard/AjaxHandler.php:245
4029
- #: src/lib/src/Modules/HackGuard/AjaxHandler.php:296
4030
- msgid "Scans completed."
4031
  msgstr ""
4032
 
4033
- #: src/lib/src/Modules/HackGuard/AjaxHandler.php:245
4034
- #: src/lib/src/Modules/HackGuard/AjaxHandler.php:296
4035
- #: src/lib/src/Modules/License/AjaxHandler.php:88
4036
- msgid "Reloading page"
4037
  msgstr ""
4038
 
4039
- #: src/lib/src/Modules/HackGuard/AjaxHandler.php:261
4040
- msgid "No scans were selected"
 
 
4041
  msgstr ""
4042
 
4043
- #: src/lib/src/Modules/HackGuard/AjaxHandler.php:295
4044
- msgid "Scans started."
4045
  msgstr ""
4046
 
4047
- #: src/lib/src/Modules/HackGuard/AjaxHandler.php:295
4048
- msgid "Please wait, as this will take a few moments."
4049
  msgstr ""
4050
 
4051
- #: src/lib/src/Modules/HackGuard/Strings.php:39
4052
- #, php-format
4053
- msgid "%s scan alert sent."
4054
  msgstr ""
4055
 
4056
- #: src/lib/src/Modules/HackGuard/Strings.php:40
4057
- #, php-format
4058
- msgid "Alert sent to %s via %s."
4059
  msgstr ""
4060
 
4061
- #: src/lib/src/Modules/HackGuard/Strings.php:43
4062
- #, php-format
4063
- msgid "%s scan completed and items were discovered."
4064
  msgstr ""
4065
 
4066
- #: src/lib/src/Modules/HackGuard/Strings.php:46
4067
- msgid ""
4068
- "These items wont display in results if you've previously marked them as "
4069
- "ignored."
4070
  msgstr ""
4071
 
4072
- #: src/lib/src/Modules/HackGuard/Strings.php:50
4073
- #, php-format
4074
- msgid "%s scan repaired a item found in the scan."
4075
  msgstr ""
4076
 
4077
- #: src/lib/src/Modules/HackGuard/Strings.php:51
4078
- #, php-format
4079
- msgid "Item repaired: \"%s\""
4080
  msgstr ""
4081
 
4082
- #: src/lib/src/Modules/HackGuard/Strings.php:54
4083
- #, php-format
4084
- msgid "%s scan could not repair item."
4085
  msgstr ""
4086
 
4087
- #: src/lib/src/Modules/HackGuard/Strings.php:55
4088
- #, php-format
4089
- msgid "Failed repair item: \"%s\""
4090
  msgstr ""
4091
 
4092
- #: src/lib/src/Modules/HackGuard/Strings.php:73
4093
- #: src/lib/src/Modules/HackGuard/Strings.php:74
4094
- #: src/processors/hack_protect.php:126
4095
- msgid "Scan Options"
4096
  msgstr ""
4097
 
4098
- #: src/lib/src/Modules/HackGuard/Strings.php:76
4099
- msgid "Set how frequently the Hack Guard scans will run."
4100
  msgstr ""
4101
 
4102
- #: src/lib/src/Modules/HackGuard/Strings.php:81
4103
- msgid "Realtime"
4104
  msgstr ""
4105
 
4106
- #: src/lib/src/Modules/HackGuard/Strings.php:82
4107
- msgid "Realtime Site Protection"
4108
  msgstr ""
4109
 
4110
- #: src/lib/src/Modules/HackGuard/Strings.php:84
4111
- msgid "Provides realtime protection for certain key files."
4112
  msgstr ""
4113
 
4114
- #: src/lib/src/Modules/HackGuard/Strings.php:85
4115
- msgid "Keep realtime protection turned on to protect key files."
4116
  msgstr ""
4117
 
4118
- #: src/lib/src/Modules/HackGuard/Strings.php:93
4119
- msgid ""
4120
- "Hack Guard is a set of tools to warn you and protect you against hacks on "
4121
- "your site."
4122
  msgstr ""
4123
 
4124
- #: src/lib/src/Modules/HackGuard/Strings.php:100
4125
- #: src/lib/src/Modules/HackGuard/Strings.php:103
4126
- #: src/lib/src/Modules/HackGuard/Strings.php:214
4127
- msgid "Vulnerabilities Scanner"
4128
  msgstr ""
4129
 
4130
- #: src/lib/src/Modules/HackGuard/Strings.php:102
4131
- msgid ""
4132
- "Regularly scan your WordPress plugins and themes for known security "
4133
- "vulnerabilities."
 
 
 
 
 
 
4134
  msgstr ""
4135
 
4136
- #: src/lib/src/Modules/HackGuard/Strings.php:104
 
4137
  msgid ""
4138
- "Ensure this is turned on and you will always know if any of your assets have "
4139
- "known security vulnerabilities."
4140
  msgstr ""
4141
 
4142
- #: src/lib/src/Modules/HackGuard/Strings.php:109
4143
- msgid "Core Files"
 
 
4144
  msgstr ""
4145
 
4146
- #: src/lib/src/Modules/HackGuard/Strings.php:110
4147
- msgid "WordPress Core File Scanner"
 
4148
  msgstr ""
4149
 
4150
- #: src/lib/src/Modules/HackGuard/Strings.php:112
4151
- msgid ""
4152
- "Regularly scan your WordPress core files for changes compared to official "
4153
- "WordPress files."
 
4154
  msgstr ""
4155
 
4156
- #: src/lib/src/Modules/HackGuard/Strings.php:119
4157
- #: src/lib/src/Modules/HackGuard/Strings.php:251
4158
- msgid "Unrecognised Files Scanner"
4159
  msgstr ""
4160
 
4161
- #: src/lib/src/Modules/HackGuard/Strings.php:121
4162
- msgid "Regularly scan your WordPress core folders for files that don't belong."
4163
  msgstr ""
4164
 
4165
- #: src/lib/src/Modules/HackGuard/Strings.php:127
4166
- #: src/lib/src/Modules/HackGuard/Strings.php:316
4167
- msgid "Enable The Abandoned Plugin Scanner"
4168
  msgstr ""
4169
 
4170
- #: src/lib/src/Modules/HackGuard/Strings.php:131
4171
  msgid ""
4172
- "Monitor your site for plugins that have been abandoned by their authors and "
4173
- "are no longer maintained."
4174
  msgstr ""
4175
 
4176
- #: src/lib/src/Modules/HackGuard/Strings.php:132
4177
- msgid "Enable this to alert you to your site running unmaintained code."
4178
  msgstr ""
4179
 
4180
- #: src/lib/src/Modules/HackGuard/Strings.php:137
4181
- msgid "Plugins and Themes Guard"
 
4182
  msgstr ""
4183
 
4184
- #: src/lib/src/Modules/HackGuard/Strings.php:138
4185
- msgid "Plugins/Themes Guard"
4186
  msgstr ""
4187
 
4188
- #: src/lib/src/Modules/HackGuard/Strings.php:140
4189
- msgid "Detect malicious changes to your themes and plugins."
 
 
4190
  msgstr ""
4191
 
4192
- #: src/lib/src/Modules/HackGuard/Strings.php:141
4193
- msgid "Keep the Plugins/Theme Guard feature turned on."
4194
  msgstr ""
4195
 
4196
- #: src/lib/src/Modules/HackGuard/Strings.php:149
4197
- msgid "Monitor and detect presence of Malware signatures."
4198
  msgstr ""
4199
 
4200
- #: src/lib/src/Modules/HackGuard/Strings.php:150
4201
- msgid "Enable this scanner to automatically detect infected files."
4202
  msgstr ""
4203
 
4204
- #: src/lib/src/Modules/HackGuard/Strings.php:155
4205
- #: src/lib/src/Modules/HackGuard/Strings.php:156
4206
- msgid "Integrity Checks"
4207
  msgstr ""
4208
 
4209
- #: src/lib/src/Modules/HackGuard/Strings.php:158
4210
- msgid "Monitor for unrecognised changes to your system."
4211
  msgstr ""
4212
 
4213
- #: src/lib/src/Modules/HackGuard/Strings.php:159
4214
- msgid "Enable these to prevent unauthorized changes to your WordPress site."
4215
  msgstr ""
4216
 
4217
- #: src/lib/src/Modules/HackGuard/Strings.php:193
4218
- msgid "Daily Scan Frequency"
 
 
4219
  msgstr ""
4220
 
4221
- #: src/lib/src/Modules/HackGuard/Strings.php:194
4222
- msgid "Number Of Times To Automatically Run File Scan In 24hrs"
4223
  msgstr ""
4224
 
4225
- #: src/lib/src/Modules/HackGuard/Strings.php:195
4226
- msgid "Once every 24hrs."
 
 
4227
  msgstr ""
4228
 
4229
- #: src/lib/src/Modules/HackGuard/Strings.php:196
4230
- msgid "To improve security, increase the number of scans per day."
 
 
4231
  msgstr ""
4232
 
4233
- #: src/lib/src/Modules/HackGuard/Strings.php:200
4234
- msgid "Repeat Notifications"
 
4235
  msgstr ""
4236
 
4237
- #: src/lib/src/Modules/HackGuard/Strings.php:201
4238
- msgid "Item Repeat Notifications Suppression Interval"
 
4239
  msgstr ""
4240
 
4241
- #: src/lib/src/Modules/HackGuard/Strings.php:202
4242
- msgid ""
4243
- "How long the automated scans should wait before repeating a notification "
4244
- "about an item."
4245
  msgstr ""
4246
 
4247
- #: src/lib/src/Modules/HackGuard/Strings.php:203
4248
- msgid "Specify the number of days to suppress repeat notifications."
 
 
4249
  msgstr ""
4250
 
4251
- #: src/lib/src/Modules/HackGuard/Strings.php:204
4252
- msgid "This is per discovered item or file, not per scan."
 
 
4253
  msgstr ""
4254
 
4255
- #: src/lib/src/Modules/HackGuard/Strings.php:208
4256
- msgid "Email Files List"
4257
  msgstr ""
4258
 
4259
- #: src/lib/src/Modules/HackGuard/Strings.php:209
4260
- msgid "Scan Notification Emails Should Include Full Listing Of Files"
4261
  msgstr ""
4262
 
4263
- #: src/lib/src/Modules/HackGuard/Strings.php:210
4264
  msgid ""
4265
- "Scanner notification emails will include a summary list of all affected "
4266
- "files."
4267
  msgstr ""
4268
 
4269
- #: src/lib/src/Modules/HackGuard/Strings.php:215
4270
  #, php-format
4271
- msgid "Daily Cron - %s"
 
 
4272
  msgstr ""
4273
 
4274
- #: src/lib/src/Modules/HackGuard/Strings.php:215
4275
- msgid "Scans Plugins For Known Vulnerabilities"
 
 
4276
  msgstr ""
4277
 
4278
- #: src/lib/src/Modules/HackGuard/Strings.php:216
4279
- msgid ""
4280
- "Runs a scan of all your plugins against a database of known WordPress plugin "
4281
- "vulnerabilities."
4282
  msgstr ""
4283
 
4284
- #: src/lib/src/Modules/HackGuard/Strings.php:220
4285
- msgid "Vulnerability Scanner"
4286
  msgstr ""
4287
 
4288
- #: src/lib/src/Modules/HackGuard/Strings.php:221
4289
- msgid "Enable The Vulnerability Scanner"
4290
  msgstr ""
4291
 
4292
- #: src/lib/src/Modules/HackGuard/Strings.php:222
4293
  msgid ""
4294
- "Runs a scan of all your plugins against a database of known WordPress "
4295
- "vulnerabilities."
4296
  msgstr ""
4297
 
4298
- #: src/lib/src/Modules/HackGuard/Strings.php:227
4299
- msgid "Apply Updates Automatically To Vulnerable Plugins"
4300
  msgstr ""
4301
 
4302
- #: src/lib/src/Modules/HackGuard/Strings.php:228
4303
- msgid ""
4304
- "When an update becomes available, automatically apply updates to items with "
4305
- "known vulnerabilities."
4306
  msgstr ""
4307
 
4308
- #: src/lib/src/Modules/HackGuard/Strings.php:232
4309
- #: src/lib/src/Modules/HackGuard/Strings.php:321
4310
- msgid "Highlight Plugins"
4311
  msgstr ""
4312
 
4313
- #: src/lib/src/Modules/HackGuard/Strings.php:233
4314
- msgid "Highlight Vulnerable Plugins Upon Display"
 
4315
  msgstr ""
4316
 
4317
- #: src/lib/src/Modules/HackGuard/Strings.php:234
4318
- msgid "Vulnerable plugins will be highlighted on the main plugins page."
4319
  msgstr ""
4320
 
4321
- #: src/lib/src/Modules/HackGuard/Strings.php:238
4322
- msgid "WP Core File Scanner"
4323
  msgstr ""
4324
 
4325
- #: src/lib/src/Modules/HackGuard/Strings.php:239
4326
- msgid "Automatically Scans WordPress Core Files For Changes"
4327
  msgstr ""
4328
 
4329
- #: src/lib/src/Modules/HackGuard/Strings.php:240
4330
  msgid ""
4331
- "Compares all WordPress core files on your site against the official "
4332
- "WordPress files."
4333
  msgstr ""
4334
 
4335
- #: src/lib/src/Modules/HackGuard/Strings.php:241
4336
- msgid "WordPress Core files should never be altered for any reason."
4337
  msgstr ""
4338
 
4339
- #: src/lib/src/Modules/HackGuard/Strings.php:245
4340
- msgid "Auto Repair"
4341
  msgstr ""
4342
 
4343
- #: src/lib/src/Modules/HackGuard/Strings.php:246
4344
- msgid "Automatically Repair WordPress Core Files That Have Been Altered"
4345
  msgstr ""
4346
 
4347
- #: src/lib/src/Modules/HackGuard/Strings.php:247
4348
- msgid ""
4349
- "Attempts to automatically repair WordPress Core files with the official "
4350
- "WordPress file data, for files that have been altered or are missing."
4351
  msgstr ""
4352
 
4353
- #: src/lib/src/Modules/HackGuard/Strings.php:252
4354
- msgid "Automatically Scans For Unrecognised Files In Core Directories"
4355
  msgstr ""
4356
 
4357
- #: src/lib/src/Modules/HackGuard/Strings.php:253
4358
- msgid ""
4359
- "Scans for, and automatically deletes, any files in your core WordPress "
4360
- "folders that are not part of your WordPress installation."
4361
  msgstr ""
4362
 
4363
- #: src/lib/src/Modules/HackGuard/Strings.php:257
4364
- msgid "Scan Uploads"
4365
  msgstr ""
4366
 
4367
- #: src/lib/src/Modules/HackGuard/Strings.php:258
4368
- msgid "Scan Uploads Folder For PHP and Javascript"
 
4369
  msgstr ""
4370
 
4371
- #: src/lib/src/Modules/HackGuard/Strings.php:259
4372
  msgid ""
4373
- "Take care when turning on this option - if you are unsure, leave it disabled."
 
 
 
 
4374
  msgstr ""
4375
 
4376
- #: src/lib/src/Modules/HackGuard/Strings.php:260
4377
  msgid ""
4378
- "The Uploads folder is primarily for media, but could be used to store "
4379
- "nefarious files."
4380
  msgstr ""
4381
 
4382
- #: src/lib/src/Modules/HackGuard/Strings.php:264
4383
- msgid "File Exclusions"
4384
  msgstr ""
4385
 
4386
- #: src/lib/src/Modules/HackGuard/Strings.php:265
4387
- msgid "Provide A List Of Files To Be Excluded From The Scan"
 
4388
  msgstr ""
4389
 
4390
- #: src/lib/src/Modules/HackGuard/Strings.php:267
4391
- msgid "Take a new line for each file you wish to exclude from the scan."
4392
  msgstr ""
4393
 
4394
- #: src/lib/src/Modules/HackGuard/Strings.php:268
4395
- msgid "No commas are necessary."
4396
  msgstr ""
4397
 
4398
- #: src/lib/src/Modules/HackGuard/Strings.php:273
4399
- msgid "Enable Integrity Scan"
4400
  msgstr ""
4401
 
4402
- #: src/lib/src/Modules/HackGuard/Strings.php:274
4403
- msgid "Scans For Critical Changes Made To Your WordPress Site"
4404
  msgstr ""
4405
 
4406
- #: src/lib/src/Modules/HackGuard/Strings.php:275
4407
- msgid "Detects changes made to your WordPress site outside of WordPress."
4408
  msgstr ""
4409
 
4410
- #: src/lib/src/Modules/HackGuard/Strings.php:279
4411
- msgid "Monitor User Accounts"
4412
  msgstr ""
4413
 
4414
- #: src/lib/src/Modules/HackGuard/Strings.php:280
4415
- msgid "Scans For Critical Changes Made To User Accounts"
4416
  msgstr ""
4417
 
4418
- #: src/lib/src/Modules/HackGuard/Strings.php:281
4419
- msgid ""
4420
- "Detects changes made to critical user account information that were made "
4421
- "directly on the database and outside of the WordPress system."
4422
  msgstr ""
4423
 
4424
- #: src/lib/src/Modules/HackGuard/Strings.php:282
4425
- msgid "An example of this might be some form of SQL Injection attack."
4426
  msgstr ""
4427
 
4428
- #: src/lib/src/Modules/HackGuard/Strings.php:283
4429
- msgid ""
4430
- "Enabling this option for every page low may slow down your site with large "
4431
- "numbers of users."
4432
  msgstr ""
4433
 
4434
- #: src/lib/src/Modules/HackGuard/Strings.php:284
4435
- msgid ""
4436
- "This option may cause critical problem with 3rd party plugins that manage "
4437
- "user accounts."
4438
  msgstr ""
4439
 
4440
- #: src/lib/src/Modules/HackGuard/Strings.php:288
4441
- #: src/lib/src/Modules/Headers/Strings.php:98
4442
- #: src/lib/src/Modules/Headers/Strings.php:99
4443
- #: src/lib/src/Modules/LoginGuard/Strings.php:180
4444
- #: src/lib/src/Modules/LoginGuard/Strings.php:198
4445
- #: src/lib/src/Modules/LoginGuard/Strings.php:204
4446
- #, php-format
4447
- msgid "Enable %s"
4448
  msgstr ""
4449
 
4450
- #: src/lib/src/Modules/HackGuard/Strings.php:288
4451
- msgid "Guard"
4452
  msgstr ""
4453
 
4454
- #: src/lib/src/Modules/HackGuard/Strings.php:289
4455
- msgid "Enable The Guard For Plugin And Theme Files"
4456
  msgstr ""
4457
 
4458
- #: src/lib/src/Modules/HackGuard/Strings.php:290
4459
- msgid ""
4460
- "When enabled the Guard will automatically scan for changes to your Plugin "
4461
- "and Theme files."
4462
  msgstr ""
4463
 
4464
- #: src/lib/src/Modules/HackGuard/Strings.php:294
4465
- msgid "Guard/Scan Depth"
4466
  msgstr ""
4467
 
4468
- #: src/lib/src/Modules/HackGuard/Strings.php:295
4469
- msgid "How Deep Into The Plugin Directories To Scan And Guard"
4470
  msgstr ""
4471
 
4472
- #: src/lib/src/Modules/HackGuard/Strings.php:296
4473
- msgid ""
4474
- "The Guard normally scans only the top level of a folder. Increasing depth "
4475
- "will increase scan times."
4476
  msgstr ""
4477
 
4478
- #: src/lib/src/Modules/HackGuard/Strings.php:297
4479
- #, php-format
4480
- msgid ""
4481
- "Setting it to %s will remove this limit and all sub-folders will be scanned "
4482
- "- not recommended"
4483
  msgstr ""
4484
 
4485
- #: src/lib/src/Modules/HackGuard/Strings.php:301
4486
- msgid "Included File Types"
4487
  msgstr ""
4488
 
4489
- #: src/lib/src/Modules/HackGuard/Strings.php:302
4490
- msgid "The File Types (by File Extension) Included In The Scan"
 
4491
  msgstr ""
4492
 
4493
- #: src/lib/src/Modules/HackGuard/Strings.php:303
4494
- msgid "Take a new line for each file extension."
4495
  msgstr ""
4496
 
4497
- #: src/lib/src/Modules/HackGuard/Strings.php:304
4498
- msgid "No commas(,) or periods(.) necessary."
4499
  msgstr ""
4500
 
4501
- #: src/lib/src/Modules/HackGuard/Strings.php:305
4502
- msgid "Remove all extensions to scan all file type (not recommended)."
4503
  msgstr ""
4504
 
4505
- #: src/lib/src/Modules/HackGuard/Strings.php:309
4506
- msgid "Show Re-Install Links"
4507
  msgstr ""
4508
 
4509
- #: src/lib/src/Modules/HackGuard/Strings.php:310
4510
- msgid "Show Re-Install Links For Plugins"
4511
  msgstr ""
4512
 
4513
- #: src/lib/src/Modules/HackGuard/Strings.php:311
4514
- msgid ""
4515
- "Show links to re-install plugins and offer re-install when activating "
4516
- "plugins."
4517
  msgstr ""
4518
 
4519
- #: src/lib/src/Modules/HackGuard/Strings.php:315
4520
- msgid "Abandoned Plugin Scanner"
4521
  msgstr ""
4522
 
4523
- #: src/lib/src/Modules/HackGuard/Strings.php:317
4524
- msgid "Scan your WordPress.org assets for whether they've been abandoned."
4525
  msgstr ""
4526
 
4527
- #: src/lib/src/Modules/HackGuard/Strings.php:322
4528
- msgid "Highlight Abandoned Plugins"
4529
  msgstr ""
4530
 
4531
- #: src/lib/src/Modules/HackGuard/Strings.php:323
4532
- msgid "Abandoned plugins will be highlighted on the main plugins page."
4533
  msgstr ""
4534
 
4535
- #: src/lib/src/Modules/HackGuard/Strings.php:327
4536
- msgid "Automatic Malware Scan"
4537
  msgstr ""
4538
 
4539
- #: src/lib/src/Modules/HackGuard/Strings.php:328
4540
- msgid "Turn On Automatic Malware Scanning"
4541
  msgstr ""
4542
 
4543
- #: src/lib/src/Modules/HackGuard/Strings.php:329
4544
- msgid ""
4545
- "Automatically run scanner to detect files infected with malware signatures."
4546
  msgstr ""
4547
 
4548
- #: src/lib/src/Modules/HackGuard/Strings.php:333
4549
- msgid "Auto-Repair WP Core"
4550
  msgstr ""
4551
 
4552
- #: src/lib/src/Modules/HackGuard/Strings.php:334
4553
- msgid "Automatically Repair WordPress Core Files"
4554
  msgstr ""
4555
 
4556
- #: src/lib/src/Modules/HackGuard/Strings.php:335
4557
- msgid "Automatically reinstall any core files found to have potential malware."
4558
  msgstr ""
4559
 
4560
- #: src/lib/src/Modules/HackGuard/Strings.php:339
4561
- msgid "Auto-Repair WP Plugins"
4562
  msgstr ""
4563
 
4564
- #: src/lib/src/Modules/HackGuard/Strings.php:340
4565
- msgid "Automatically Repair WordPress.org Plugins"
4566
  msgstr ""
4567
 
4568
- #: src/lib/src/Modules/HackGuard/Strings.php:341
4569
- msgid "Automatically repair any plugin files found to have potential malware."
4570
  msgstr ""
4571
 
4572
- #: src/lib/src/Modules/HackGuard/Strings.php:342
4573
- msgid "Only compatible with plugins installed from WordPress.org."
 
4574
  msgstr ""
4575
 
4576
- #: src/lib/src/Modules/HackGuard/Strings.php:343
4577
- msgid ""
4578
- "Also deletes suspected files if they weren't originally distributed with the "
4579
- "plugin."
4580
  msgstr ""
4581
 
4582
- #: src/lib/src/Modules/HackGuard/Strings.php:347
4583
- msgid "Ignore False Positives Threshold"
4584
  msgstr ""
4585
 
4586
- #: src/lib/src/Modules/HackGuard/Strings.php:348
4587
- msgid "Ignore False Positives In Scan Results Automatically"
 
 
4588
  msgstr ""
4589
 
4590
- #: src/lib/src/Modules/HackGuard/Strings.php:349
 
 
4591
  msgid ""
4592
- "You can choose to ignore files with potential malware, depending on whether "
4593
- "the confidence that it's a 'false positive' meets your minimum threshold."
4594
  msgstr ""
4595
 
4596
- #: src/lib/src/Modules/HackGuard/Strings.php:350
 
4597
  msgid ""
4598
- "A false positive happens when a file appears to contain malware and shows up "
4599
- "in scan results, but it's actually clean."
4600
  msgstr ""
4601
 
4602
- #: src/lib/src/Modules/HackGuard/Strings.php:351
 
 
 
 
 
4603
  msgid ""
4604
- "A false positive is similar to when an anti-virus alerts to a file that "
4605
- "doesnt have a virus."
4606
  msgstr ""
4607
 
4608
- #: src/lib/src/Modules/HackGuard/Strings.php:352
4609
  msgid ""
4610
- "The higher the confidence level, the more likely a result is a false "
4611
- "positive."
4612
  msgstr ""
4613
 
4614
- #: src/lib/src/Modules/HackGuard/Strings.php:353
4615
- msgid "A low level means it's less likely to be a false positive."
4616
  msgstr ""
4617
 
4618
- #: src/lib/src/Modules/HackGuard/Strings.php:354
4619
- msgid ""
4620
- "The scan will automatically ignore results whose 'false positive' confidence "
4621
- "level is greater than your chosen threshold."
 
 
4622
  msgstr ""
4623
 
4624
- #: src/lib/src/Modules/HackGuard/Strings.php:355
4625
- msgid ""
4626
- "The higher the confidence threshold you select, the more likely that 'false "
4627
- "positives' will appears in your scan results."
4628
  msgstr ""
4629
 
4630
- #: src/lib/src/Modules/HackGuard/Strings.php:356
4631
- msgid ""
4632
- "Disabling network intelligence turns off 'false positive confidence' levels."
4633
  msgstr ""
4634
 
4635
- #: src/lib/src/Modules/HackGuard/Strings.php:357
4636
- msgid ""
4637
- "You will no longer benefit from the intelligence gathered from the entire "
4638
- "network."
4639
  msgstr ""
4640
 
4641
- #: src/lib/src/Modules/HackGuard/Strings.php:358
4642
- msgid "All data shared is completely anonymous."
4643
  msgstr ""
4644
 
4645
- #: src/lib/src/Modules/HackGuard/Strings.php:359
4646
- #: src/lib/src/Tables/Render/ScanWpv.php:55
4647
- #: src/processors/hackprotect_scan_mal.php:165
4648
- #: src/processors/hackprotect_scan_wcf.php:112
4649
- #: src/processors/hackprotect_scan_wpv.php:201
4650
- #: src/processors/loginprotect_intent.php:285
4651
- msgid "More Info"
4652
  msgstr ""
4653
 
4654
- #: src/lib/src/Modules/HackGuard/Strings.php:360
4655
- msgid ""
4656
- "The more sites that share this information, the stronger and smarter the "
4657
- "network becomes."
4658
  msgstr ""
4659
 
4660
- #: src/lib/src/Modules/HackGuard/Strings.php:364
4661
- msgid "Surgical Auto-Repair"
 
4662
  msgstr ""
4663
 
4664
- #: src/lib/src/Modules/HackGuard/Strings.php:365
4665
- msgid "Automatically Attempt To Surgically Remove Malware Code"
 
 
 
 
4666
  msgstr ""
4667
 
4668
- #: src/lib/src/Modules/HackGuard/Strings.php:366
4669
- msgid "Attempts to automatically remove code from infected files."
 
 
 
 
 
 
 
4670
  msgstr ""
4671
 
4672
- #: src/lib/src/Modules/HackGuard/Strings.php:367
4673
- msgid ""
4674
- "This could break your site if code removal leaves remaining code in an "
4675
- "inconsistent state."
4676
  msgstr ""
4677
 
4678
- #: src/lib/src/Modules/HackGuard/Strings.php:368
4679
- msgid ""
4680
- "Only applies to files that don't fall under the other categories for "
4681
- "automatic repair."
4682
  msgstr ""
4683
 
4684
- #: src/lib/src/Modules/HackGuard/Strings.php:372
4685
- msgid "WP Config"
4686
  msgstr ""
4687
 
4688
- #: src/lib/src/Modules/HackGuard/Strings.php:373
4689
- msgid "Realtime Protection For WP Config File"
4690
  msgstr ""
4691
 
4692
- #: src/lib/src/Modules/HackGuard/Strings.php:374
4693
- msgid "Realtime protection for the wp-config.php file."
4694
  msgstr ""
4695
 
4696
- #: src/lib/src/Modules/Headers/Strings.php:22
4697
- #: src/lib/src/Modules/Headers/Strings.php:30
4698
  msgid ""
4699
- "Protect visitors to your site by implementing increased security response "
4700
- "headers."
4701
  msgstr ""
4702
 
4703
- #: src/lib/src/Modules/Headers/Strings.php:23
4704
- #: src/lib/src/Modules/Headers/Strings.php:31
4705
- #: src/lib/src/Modules/Headers/Strings.php:40
4706
- msgid ""
4707
- "Enabling these features are advised, but you must test them on your site "
4708
- "thoroughly."
4709
  msgstr ""
4710
 
4711
- #: src/lib/src/Modules/Headers/Strings.php:28
4712
- msgid "Advanced Security Headers"
 
4713
  msgstr ""
4714
 
4715
- #: src/lib/src/Modules/Headers/Strings.php:33
4716
- msgid "Security Headers"
4717
  msgstr ""
4718
 
4719
- #: src/lib/src/Modules/Headers/Strings.php:37
4720
- #: src/lib/src/Modules/Headers/Strings.php:42
4721
- #: src/lib/src/Modules/Headers/Strings.php:99
4722
- msgid "Content Security Policy"
4723
  msgstr ""
4724
 
4725
- #: src/lib/src/Modules/Headers/Strings.php:39
4726
- msgid ""
4727
- "Restrict the sources and types of content that may be loaded and processed "
4728
- "by visitor browsers."
4729
  msgstr ""
4730
 
4731
- #: src/lib/src/Modules/Headers/Strings.php:73
4732
- msgid "Block iFrames"
4733
  msgstr ""
4734
 
4735
- #: src/lib/src/Modules/Headers/Strings.php:74
4736
- msgid "Block Remote iFrames Of This Site"
 
 
4737
  msgstr ""
4738
 
4739
- #: src/lib/src/Modules/Headers/Strings.php:75
4740
  msgid ""
4741
- "The setting prevents any external website from embedding your site in an "
4742
- "iFrame."
4743
  msgstr ""
4744
 
4745
- #: src/lib/src/Modules/Headers/Strings.php:76
4746
- msgid "This is useful for preventing so-called \"ClickJack attacks\"."
 
 
4747
  msgstr ""
4748
 
4749
- #: src/lib/src/Modules/Headers/Strings.php:80
4750
- msgid "Referrer Policy"
4751
  msgstr ""
4752
 
4753
- #: src/lib/src/Modules/Headers/Strings.php:81
4754
- msgid "Referrer Policy Header"
4755
  msgstr ""
4756
 
4757
- #: src/lib/src/Modules/Headers/Strings.php:82
4758
- msgid ""
4759
- "The Referrer Policy Header allows you to control when and what referral "
4760
- "information a browser may pass along with links clicked on your site."
4761
  msgstr ""
4762
 
4763
- #: src/lib/src/Modules/Headers/Strings.php:86
4764
- msgid "XSS Protection"
4765
  msgstr ""
4766
 
4767
- #: src/lib/src/Modules/Headers/Strings.php:87
4768
- msgid "Employ Built-In Browser XSS Protection"
 
 
 
4769
  msgstr ""
4770
 
4771
- #: src/lib/src/Modules/Headers/Strings.php:88
 
 
 
4772
  msgid ""
4773
- "Directs compatible browsers to block what they detect as Reflective XSS "
4774
- "attacks."
4775
  msgstr ""
4776
 
4777
- #: src/lib/src/Modules/Headers/Strings.php:92
4778
- msgid "Prevent Mime-Sniff"
4779
  msgstr ""
4780
 
4781
- #: src/lib/src/Modules/Headers/Strings.php:93
4782
- msgid "Turn-Off Browser Mime-Sniff"
 
 
4783
  msgstr ""
4784
 
4785
- #: src/lib/src/Modules/Headers/Strings.php:94
4786
- msgid "Reduces visitor exposure to malicious user-uploaded content."
4787
  msgstr ""
4788
 
4789
- #: src/lib/src/Modules/Headers/Strings.php:100
4790
- msgid ""
4791
- "Allows for permission and restriction of all resources loaded on your site."
4792
  msgstr ""
4793
 
4794
- #: src/lib/src/Modules/Headers/Strings.php:104
4795
- msgid "Self"
4796
  msgstr ""
4797
 
4798
- #: src/lib/src/Modules/Headers/Strings.php:105
4799
- msgid "Allow 'self' Directive"
 
 
4800
  msgstr ""
4801
 
4802
- #: src/lib/src/Modules/Headers/Strings.php:106
4803
- msgid "Using 'self' is generally recommended."
4804
  msgstr ""
4805
 
4806
- #: src/lib/src/Modules/Headers/Strings.php:107
4807
  msgid ""
4808
- "It essentially means that resources from your own host:protocol are "
4809
- "permitted."
4810
  msgstr ""
4811
 
4812
- #: src/lib/src/Modules/Headers/Strings.php:111
4813
- msgid "Inline Entities"
 
4814
  msgstr ""
4815
 
4816
- #: src/lib/src/Modules/Headers/Strings.php:112
4817
- msgid "Allow Inline Scripts and CSS"
4818
  msgstr ""
4819
 
4820
- #: src/lib/src/Modules/Headers/Strings.php:113
4821
- msgid ""
4822
- "Allows parsing of Javascript and CSS declared in-line in your html document."
4823
  msgstr ""
4824
 
4825
- #: src/lib/src/Modules/Headers/Strings.php:117
4826
- msgid "Embedded Data"
4827
  msgstr ""
4828
 
4829
- #: src/lib/src/Modules/Headers/Strings.php:118
4830
- msgid "Allow \"data:\" Directives"
4831
  msgstr ""
4832
 
4833
- #: src/lib/src/Modules/Headers/Strings.php:119
4834
- msgid ""
4835
- "Allows use of embedded data directives, most commonly used for images and "
4836
- "fonts."
4837
  msgstr ""
4838
 
4839
- #: src/lib/src/Modules/Headers/Strings.php:123
4840
- msgid "Allow eval()"
4841
  msgstr ""
4842
 
4843
- #: src/lib/src/Modules/Headers/Strings.php:124
4844
- msgid "Allow Javascript eval()"
4845
  msgstr ""
4846
 
4847
- #: src/lib/src/Modules/Headers/Strings.php:125
4848
- msgid "Permits the use of Javascript the eval() function."
4849
  msgstr ""
4850
 
4851
- #: src/lib/src/Modules/Headers/Strings.php:129
4852
- msgid "HTTPS"
4853
  msgstr ""
4854
 
4855
- #: src/lib/src/Modules/Headers/Strings.php:130
4856
- msgid "HTTPS Resource Loading"
4857
  msgstr ""
4858
 
4859
- #: src/lib/src/Modules/Headers/Strings.php:131
4860
- msgid "Allows loading of any content provided over HTTPS."
4861
  msgstr ""
4862
 
4863
- #: src/lib/src/Modules/Headers/Strings.php:135
4864
- msgid "Permitted Hosts"
 
 
 
 
4865
  msgstr ""
4866
 
4867
- #: src/lib/src/Modules/Headers/Strings.php:136
4868
- msgid "Permitted Hosts and Domains"
4869
  msgstr ""
4870
 
4871
- #: src/lib/src/Modules/Headers/Strings.php:137
4872
- msgid ""
4873
- "You can explicitly state which hosts/domain from which content may be loaded."
4874
  msgstr ""
4875
 
4876
- #: src/lib/src/Modules/Headers/Strings.php:138
4877
- msgid ""
4878
- "Take great care and test your site as you may block legitimate resources."
4879
  msgstr ""
4880
 
4881
- #: src/lib/src/Modules/Headers/Strings.php:139
4882
- msgid "If in-doubt, leave blank or use \"*\" only."
 
 
4883
  msgstr ""
4884
 
4885
- #: src/lib/src/Modules/Headers/Strings.php:140
4886
  msgid ""
4887
- "You can force only HTTPS for a given domain by prefixing it with \"https://"
4888
- "\"."
4889
  msgstr ""
4890
 
4891
- #: src/lib/src/Modules/IPs/AdminNotices.php:36
4892
- #, php-format
4893
- msgid "%s is ignoring you"
4894
  msgstr ""
4895
 
4896
- #: src/lib/src/Modules/IPs/AdminNotices.php:40
4897
- #: src/lib/src/Modules/Plugin/Strings.php:383 src/processors/plugin.php:84
4898
  #, php-format
4899
- msgid "Your IP address is: %s"
4900
  msgstr ""
4901
 
4902
- #: src/lib/src/Modules/IPs/AdminNotices.php:43
4903
- msgid ""
4904
- "Your IP address is whitelisted and NO features you activate apply to you."
 
 
 
4905
  msgstr ""
4906
 
4907
- #: src/lib/src/Modules/IPs/AdminNotices.php:44
4908
- msgid "Including the hiding the WP Login page."
4909
  msgstr ""
4910
 
4911
- #: src/lib/src/Modules/IPs/AjaxHandler.php:49
4912
- msgid "IP address wasn't added to the list"
4913
  msgstr ""
4914
 
4915
- #: src/lib/src/Modules/IPs/AjaxHandler.php:60
4916
- msgid "IP address not provided"
4917
  msgstr ""
4918
 
4919
- #: src/lib/src/Modules/IPs/AjaxHandler.php:63
4920
- msgid "IP list not provided"
4921
  msgstr ""
4922
 
4923
- #: src/lib/src/Modules/IPs/AjaxHandler.php:66
4924
- msgid "IP address isn't either a valid IP or a CIDR range"
4925
  msgstr ""
4926
 
4927
- #: src/lib/src/Modules/IPs/AjaxHandler.php:69
4928
- msgid ""
4929
- "Please upgrade to Pro if you'd like to add IPs to the black list manually."
4930
  msgstr ""
4931
 
4932
- #: src/lib/src/Modules/IPs/AjaxHandler.php:72
4933
- msgid "IP ranges aren't currently supported for blacklisting."
4934
  msgstr ""
4935
 
4936
- #: src/lib/src/Modules/IPs/AjaxHandler.php:75
4937
- msgid "Manually black listing your current IP address is not supported."
4938
  msgstr ""
4939
 
4940
- #: src/lib/src/Modules/IPs/AjaxHandler.php:78
4941
- msgid "This IP is reserved and can't be blacklisted."
4942
  msgstr ""
4943
 
4944
- #: src/lib/src/Modules/IPs/AjaxHandler.php:103
4945
- msgid "IP address added successfully"
4946
  msgstr ""
4947
 
4948
- #: src/lib/src/Modules/IPs/AjaxHandler.php:124
4949
- msgid "Invalid entry selected"
4950
  msgstr ""
4951
 
4952
- #: src/lib/src/Modules/IPs/AjaxHandler.php:127
4953
- msgid "IP address deleted"
 
4954
  msgstr ""
4955
 
4956
- #: src/lib/src/Modules/IPs/AjaxHandler.php:131
4957
- msgid "IP address wasn't deleted from the list"
4958
  msgstr ""
4959
 
4960
- #: src/lib/src/Modules/IPs/Strings.php:27
4961
  msgid ""
4962
- "The IP Manager allows you to whitelist, blacklist and configure auto-"
4963
- "blacklist rules."
4964
  msgstr ""
4965
 
4966
- #: src/lib/src/Modules/IPs/Strings.php:28
4967
- #: src/lib/src/Modules/Plugin/Strings.php:416 src/wizards/plugin.php:514
4968
- #: src/wizards/plugin.php:519
4969
- msgid "IP Manager"
4970
  msgstr ""
4971
 
4972
- #: src/lib/src/Modules/IPs/Strings.php:29
4973
- msgid "You should also carefully review the automatic black list settings."
4974
  msgstr ""
4975
 
4976
- #: src/lib/src/Modules/IPs/Strings.php:34
4977
- msgid "Auto IP Blocking Rules"
4978
  msgstr ""
4979
 
4980
- #: src/lib/src/Modules/IPs/Strings.php:35
4981
- msgid "Auto Blocking Rules"
4982
  msgstr ""
4983
 
4984
- #: src/lib/src/Modules/IPs/Strings.php:37
4985
- msgid ""
4986
- "The Automatic IP Black List system will block the IP addresses of naughty "
4987
- "visitors after a specified number of offenses."
4988
  msgstr ""
4989
 
4990
- #: src/lib/src/Modules/IPs/Strings.php:38
4991
- #: src/lib/src/Modules/IPs/Strings.php:127
4992
- msgid "Automatic IP Black List"
4993
  msgstr ""
4994
 
4995
- #: src/lib/src/Modules/IPs/Strings.php:39
4996
- msgid ""
4997
- "Think of 'offenses' as just a counter for the number of times a visitor does "
4998
- "something bad."
4999
  msgstr ""
5000
 
5001
- #: src/lib/src/Modules/IPs/Strings.php:41
5002
- #, php-format
5003
- msgid ""
5004
- "When the counter reaches the limit below (default: %s), %s will block that "
5005
- "IP completely."
5006
  msgstr ""
5007
 
5008
- #: src/lib/src/Modules/IPs/Strings.php:49
5009
- msgid "Bot-Trap"
5010
  msgstr ""
5011
 
5012
- #: src/lib/src/Modules/IPs/Strings.php:50
5013
- msgid "Identify And Capture Bots Based On Their Site Activity"
5014
  msgstr ""
5015
 
5016
- #: src/lib/src/Modules/IPs/Strings.php:52
5017
  msgid ""
5018
- "A bot doesn't know what's real and what's not, so it probes many different "
5019
- "avenues until it finds something it recognises."
5020
  msgstr ""
5021
 
5022
- #: src/lib/src/Modules/IPs/Strings.php:53
5023
- msgid ""
5024
- "Bot-Trap monitors a set of typical bot behaviours to help identify probing "
5025
- "bots."
5026
  msgstr ""
5027
 
5028
- #: src/lib/src/Modules/IPs/Strings.php:54
5029
- msgid "Enable as many mouse traps as possible."
5030
  msgstr ""
5031
 
5032
- #: src/lib/src/Modules/IPs/Strings.php:59
5033
- msgid "Login Bots"
5034
  msgstr ""
5035
 
5036
- #: src/lib/src/Modules/IPs/Strings.php:60
5037
- msgid "Detect & Capture Login Bots"
5038
  msgstr ""
5039
 
5040
- #: src/lib/src/Modules/IPs/Strings.php:62
5041
- #: src/lib/src/Modules/IPs/Strings.php:75
5042
- #: src/lib/src/Modules/IPs/Strings.php:86
5043
- msgid "Summary"
5044
  msgstr ""
5045
 
5046
- #: src/lib/src/Modules/IPs/Strings.php:63
5047
- msgid ""
5048
- "Certain bots are designed to test your logins and this feature lets you "
5049
- "decide how to handle them."
5050
  msgstr ""
5051
 
5052
- #: src/lib/src/Modules/IPs/Strings.php:65
5053
- #: src/lib/src/Modules/IPs/Strings.php:78
5054
- #: src/lib/src/Modules/IPs/Strings.php:89
5055
- msgid "Enable as many options as possible."
5056
  msgstr ""
5057
 
5058
- #: src/lib/src/Modules/IPs/Strings.php:67
5059
- msgid ""
5060
- "Legitimate users may get their password wrong, so take care not to block "
5061
- "this."
5062
  msgstr ""
5063
 
5064
- #: src/lib/src/Modules/IPs/Strings.php:72
5065
- msgid "Probing Bots"
5066
  msgstr ""
5067
 
5068
- #: src/lib/src/Modules/IPs/Strings.php:73
5069
- msgid "Detect & Capture Probing Bots"
5070
  msgstr ""
5071
 
5072
- #: src/lib/src/Modules/IPs/Strings.php:76
5073
  msgid ""
5074
- "Bots are designed to probe and this feature is dedicated to detecting "
5075
- "probing bots."
5076
  msgstr ""
5077
 
5078
- #: src/lib/src/Modules/IPs/Strings.php:83
5079
- msgid "Bot Behaviours"
5080
  msgstr ""
5081
 
5082
- #: src/lib/src/Modules/IPs/Strings.php:84
5083
- msgid "Detect Behaviours Common To Bots"
5084
  msgstr ""
5085
 
5086
- #: src/lib/src/Modules/IPs/Strings.php:87
5087
- msgid ""
5088
- "Detect characteristics and behaviour commonly associated with illegitimate "
5089
- "bots."
5090
  msgstr ""
5091
 
5092
- #: src/lib/src/Modules/IPs/Strings.php:123
5093
- msgid "Offense Limit"
5094
  msgstr ""
5095
 
5096
- #: src/lib/src/Modules/IPs/Strings.php:124
5097
- msgid ""
5098
- "Visitor IP address will be Black Listed after X bad actions on your site"
5099
  msgstr ""
5100
 
5101
- #: src/lib/src/Modules/IPs/Strings.php:125
 
 
 
 
 
 
 
 
 
 
 
 
 
5102
  #, php-format
5103
- msgid ""
5104
- "A black mark is set against an IP address each time a visitor trips the "
5105
- "defenses of the %s plugin."
5106
  msgstr ""
5107
 
5108
- #: src/lib/src/Modules/IPs/Strings.php:126
5109
- msgid ""
5110
- "When the number of these offenses exceeds the limit, they are automatically "
5111
- "blocked from accessing the site."
5112
  msgstr ""
5113
 
5114
- #: src/lib/src/Modules/IPs/Strings.php:127
5115
  #, php-format
5116
- msgid "Set this to \"0\" to turn off the %s feature."
5117
  msgstr ""
5118
 
5119
- #: src/lib/src/Modules/IPs/Strings.php:131
5120
- msgid "Auto Block Expiration"
5121
  msgstr ""
5122
 
5123
- #: src/lib/src/Modules/IPs/Strings.php:132
5124
- msgid "After 1 \"X\" a black listed IP will be removed from the black list"
5125
  msgstr ""
5126
 
5127
- #: src/lib/src/Modules/IPs/Strings.php:133
5128
- msgid "Permanent and lengthy IP Black Lists are harmful to performance."
5129
  msgstr ""
5130
 
5131
- #: src/lib/src/Modules/IPs/Strings.php:134
5132
- msgid ""
5133
- "You should allow IP addresses on the black list to be eventually removed "
5134
- "over time."
5135
  msgstr ""
5136
 
5137
- #: src/lib/src/Modules/IPs/Strings.php:135
5138
- msgid ""
5139
- "Shorter IP black lists are more efficient and a more intelligent use of an "
5140
- "IP-based blocking system."
5141
  msgstr ""
5142
 
5143
- #: src/lib/src/Modules/IPs/Strings.php:139
5144
- msgid "User Auto Unblock"
5145
  msgstr ""
5146
 
5147
- #: src/lib/src/Modules/IPs/Strings.php:140
5148
- msgid "Allow Visitors To Unblock Their IP"
5149
  msgstr ""
5150
 
5151
- #: src/lib/src/Modules/IPs/Strings.php:141
5152
- msgid ""
5153
- "Allow visitors blocked by the plugin to automatically unblock themselves."
5154
  msgstr ""
5155
 
5156
- #: src/lib/src/Modules/IPs/Strings.php:145
5157
- msgid "Login Failed"
 
 
 
 
 
 
 
5158
  msgstr ""
5159
 
5160
- #: src/lib/src/Modules/IPs/Strings.php:146
5161
- msgid "Visitor Triggers The IP Offense System Through A Failed Login"
 
5162
  msgstr ""
5163
 
5164
- #: src/lib/src/Modules/IPs/Strings.php:147
5165
- msgid "This message is displayed if the visitor fails a login attempt."
5166
  msgstr ""
5167
 
5168
- #: src/lib/src/Modules/IPs/Strings.php:151
5169
- msgid "Remaining Offenses"
5170
  msgstr ""
5171
 
5172
- #: src/lib/src/Modules/IPs/Strings.php:152
5173
- msgid "Visitor Triggers The IP Offenses System Through A Firewall Block"
5174
  msgstr ""
5175
 
5176
- #: src/lib/src/Modules/IPs/Strings.php:153
5177
- msgid ""
5178
- "This message is displayed if the visitor triggered the IP Offense system and "
5179
- "reports how many offenses remain before being blocked."
5180
  msgstr ""
5181
 
5182
- #: src/lib/src/Modules/IPs/Strings.php:157
5183
- msgid "404 Detect"
 
5184
  msgstr ""
5185
 
5186
- #: src/lib/src/Modules/IPs/Strings.php:158
5187
- msgid "Identify A Bot When It Hits A 404"
5188
  msgstr ""
5189
 
5190
- #: src/lib/src/Modules/IPs/Strings.php:159
5191
- msgid "Detect when a visitor tries to load a non-existent page."
5192
  msgstr ""
5193
 
5194
- #: src/lib/src/Modules/IPs/Strings.php:160
5195
- msgid ""
5196
- "Care should be taken to ensure you don't have legitimate links on your site "
5197
- "that are 404s."
5198
  msgstr ""
5199
 
5200
- #: src/lib/src/Modules/IPs/Strings.php:164
5201
- msgid "XML-RPC Access"
5202
  msgstr ""
5203
 
5204
- #: src/lib/src/Modules/IPs/Strings.php:165
5205
- msgid "Identify A Bot When It Accesses XML-RPC"
 
 
5206
  msgstr ""
5207
 
5208
- #: src/lib/src/Modules/IPs/Strings.php:166
5209
  msgid ""
5210
- "If you don't use XML-RPC, there's no reason anything should be accessing it."
 
5211
  msgstr ""
5212
 
5213
- #: src/lib/src/Modules/IPs/Strings.php:167
5214
- msgid ""
5215
- "Be careful the ensure you don't block legitimate XML-RPC traffic if your "
5216
- "site needs it."
5217
  msgstr ""
5218
 
5219
- #: src/lib/src/Modules/IPs/Strings.php:168
5220
- msgid ""
5221
- "We recommend logging here in-case of blocking valid request unless you're "
5222
- "sure."
5223
  msgstr ""
5224
 
5225
- #: src/lib/src/Modules/IPs/Strings.php:173
5226
- msgid "Tempt A Bot With A Fake Link To Follow"
5227
  msgstr ""
5228
 
5229
- #: src/lib/src/Modules/IPs/Strings.php:174
5230
- msgid "Detect a bot when it follows a fake 'no-follow' link."
5231
  msgstr ""
5232
 
5233
- #: src/lib/src/Modules/IPs/Strings.php:175
5234
- msgid ""
5235
- "This works because legitimate web crawlers respect 'robots.txt' and "
5236
- "'nofollow' directives."
5237
  msgstr ""
5238
 
5239
- #: src/lib/src/Modules/IPs/Strings.php:179
5240
- msgid "Invalid Usernames"
5241
  msgstr ""
5242
 
5243
- #: src/lib/src/Modules/IPs/Strings.php:180
5244
- msgid "Detect Attempted Logins With Usernames That Don't Exist"
 
 
5245
  msgstr ""
5246
 
5247
- #: src/lib/src/Modules/IPs/Strings.php:181
5248
- msgid "Identify a Bot when it tries to login with a non-existent username."
5249
  msgstr ""
5250
 
5251
- #: src/lib/src/Modules/IPs/Strings.php:182
5252
- msgid "This includes the default 'admin' if you've removed that account."
5253
  msgstr ""
5254
 
5255
- #: src/lib/src/Modules/IPs/Strings.php:187
5256
- msgid "Detect Failed Login Attempts Using Valid Usernames"
5257
  msgstr ""
5258
 
5259
- #: src/lib/src/Modules/IPs/Strings.php:188
5260
  msgid ""
5261
- "Penalise a visitor when they try to login using a valid username, but it "
5262
- "fails."
5263
  msgstr ""
5264
 
5265
- #: src/lib/src/Modules/IPs/Strings.php:193
5266
- msgid "Detect Fake Search Engine Crawlers"
5267
  msgstr ""
5268
 
5269
- #: src/lib/src/Modules/IPs/Strings.php:194
5270
- msgid ""
5271
- "Identify a Bot when it presents as an official web crawler, but analysis "
5272
- "shows it's fake."
5273
  msgstr ""
5274
 
5275
- #: src/lib/src/Modules/IPs/Strings.php:198
5276
- msgid "Empty User Agents"
5277
  msgstr ""
5278
 
5279
- #: src/lib/src/Modules/IPs/Strings.php:199
5280
- msgid "Detect Requests With Empty User Agents"
5281
  msgstr ""
5282
 
5283
- #: src/lib/src/Modules/IPs/Strings.php:200
5284
- msgid "Identify a bot when the user agent is not provided."
5285
  msgstr ""
5286
 
5287
- #: src/lib/src/Modules/IPs/Strings.php:202
5288
- msgid "Your user agent is"
 
5289
  msgstr ""
5290
 
5291
- #: src/lib/src/Modules/IPs/Strings.php:223
5292
- #, php-format
5293
- msgid "A custom %s offense was registered on the site."
5294
  msgstr ""
5295
 
5296
- #: src/lib/src/Modules/IPs/Strings.php:229
5297
- msgid "Visitor found on the Black List and their connection was killed."
5298
  msgstr ""
5299
 
5300
- #: src/lib/src/Modules/IPs/Strings.php:232
5301
- #, php-format
5302
- msgid "Auto Black List offenses counter was incremented from %s to %s."
5303
  msgstr ""
5304
 
5305
- #: src/lib/src/Modules/IPs/Strings.php:235
5306
- #, php-format
5307
- msgid "IP blocked after incrementing offenses from %s to %s."
5308
  msgstr ""
5309
 
5310
- #: src/lib/src/Modules/IPs/Strings.php:238
5311
- #, php-format
5312
- msgid "IP address '%s' removed from blacklist using 'unblock' file flag."
 
5313
  msgstr ""
5314
 
5315
- #: src/lib/src/Modules/IPs/Strings.php:241
5316
- #, php-format
5317
- msgid "404 detected at \"%s\"."
5318
  msgstr ""
5319
 
5320
- #: src/lib/src/Modules/IPs/Strings.php:244
5321
- #, php-format
5322
- msgid "Fake Web Crawler detected at \"%s\"."
5323
  msgstr ""
5324
 
5325
- #: src/lib/src/Modules/IPs/Strings.php:247
5326
- #, php-format
5327
- msgid "Link cheese access detected at \"%s\"."
 
5328
  msgstr ""
5329
 
5330
- #: src/lib/src/Modules/IPs/Strings.php:250
5331
- #, php-format
5332
- msgid "Attempted login failed by user \"%s\"."
 
5333
  msgstr ""
5334
 
5335
- #: src/lib/src/Modules/IPs/Strings.php:253
5336
- #, php-format
5337
- msgid "Attempted login with invalid user \"%s\"."
5338
  msgstr ""
5339
 
5340
- #: src/lib/src/Modules/IPs/Strings.php:256
5341
- #, php-format
5342
- msgid "Empty user agent detected at \"%s\"."
 
 
5343
  msgstr ""
5344
 
5345
- #: src/lib/src/Modules/IPs/Strings.php:259
5346
- #, php-format
5347
- msgid "Access to XML-RPC detected at \"%s\"."
 
 
5348
  msgstr ""
5349
 
5350
- #: src/lib/src/Modules/Insights/Strings.php:14
5351
- msgid "Successful authentication with Security Admin"
5352
  msgstr ""
5353
 
5354
- #: src/lib/src/Modules/Insights/Strings.php:15
5355
- msgid "Failed authentication with Security Admin"
5356
  msgstr ""
5357
 
5358
- #: src/lib/src/Modules/Insights/Strings.php:16
5359
- msgid "Simple Test Cron"
 
 
5360
  msgstr ""
5361
 
5362
- #: src/lib/src/Modules/Insights/Strings.php:17
5363
- msgid "Scanned for abandoned plugins"
 
5364
  msgstr ""
5365
 
5366
- #: src/lib/src/Modules/Insights/Strings.php:18
5367
- msgid "Scanned for malware"
 
5368
  msgstr ""
5369
 
5370
- #: src/lib/src/Modules/Insights/Strings.php:19
5371
- msgid "Scanned for altered plugin/theme files"
 
 
5372
  msgstr ""
5373
 
5374
- #: src/lib/src/Modules/Insights/Strings.php:20
5375
- msgid "Scanned for unrecognised files"
5376
  msgstr ""
5377
 
5378
- #: src/lib/src/Modules/Insights/Strings.php:21
5379
- msgid "Scanned Core files"
5380
  msgstr ""
5381
 
5382
- #: src/lib/src/Modules/Insights/Strings.php:22
5383
- msgid "Scanned for vulnerabilities"
 
5384
  msgstr ""
5385
 
5386
- #: src/lib/src/Modules/Insights/Strings.php:23
5387
- msgid "Found modified core file"
5388
  msgstr ""
5389
 
5390
- #: src/lib/src/Modules/Insights/Strings.php:24
5391
- msgid "Found abandoned plugin"
5392
  msgstr ""
5393
 
5394
- #: src/lib/src/Modules/Insights/Strings.php:25
5395
- msgid "Found malware in file"
 
 
5396
  msgstr ""
5397
 
5398
- #: src/lib/src/Modules/Insights/Strings.php:26
5399
- msgid "Found altered plugin/themes file"
5400
  msgstr ""
5401
 
5402
- #: src/lib/src/Modules/Insights/Strings.php:27
5403
- msgid "Found unrecognised file"
5404
  msgstr ""
5405
 
5406
- #: src/lib/src/Modules/Insights/Strings.php:28
5407
- msgid "Found vulnerable item"
5408
  msgstr ""
5409
 
5410
- #: src/lib/src/Modules/Insights/Strings.php:29
5411
- msgid "Repaired abandoned plugin"
 
5412
  msgstr ""
5413
 
5414
- #: src/lib/src/Modules/Insights/Strings.php:30
5415
- msgid "Repaired file with malware"
 
5416
  msgstr ""
5417
 
5418
- #: src/lib/src/Modules/Insights/Strings.php:31
5419
- msgid "Repaired plugin/theme file"
5420
  msgstr ""
5421
 
5422
- #: src/lib/src/Modules/Insights/Strings.php:32
5423
- msgid "Repaired/Deleted unrecognised file"
5424
  msgstr ""
5425
 
5426
- #: src/lib/src/Modules/Insights/Strings.php:33
5427
- msgid "Repaired Core file"
5428
  msgstr ""
5429
 
5430
- #: src/lib/src/Modules/Insights/Strings.php:34
5431
- msgid "Repaired vulnerable item"
5432
  msgstr ""
5433
 
5434
- #: src/lib/src/Modules/Insights/Strings.php:35
5435
- msgid "User session terminated and forced to re-login"
 
5436
  msgstr ""
5437
 
5438
- #: src/lib/src/Modules/Insights/Strings.php:36
5439
- msgid "Connection killed for blocked IP address"
5440
  msgstr ""
5441
 
5442
- #: src/lib/src/Modules/Insights/Strings.php:37
5443
- msgid "Offense registered against IP address"
 
 
5444
  msgstr ""
5445
 
5446
- #: src/lib/src/Modules/Insights/Strings.php:38
5447
- msgid "IP address blocked after too many offenses"
5448
  msgstr ""
5449
 
5450
- #: src/lib/src/Modules/Insights/Strings.php:39
5451
- msgid "Detected comment SPAM from bot"
5452
  msgstr ""
5453
 
5454
- #: src/lib/src/Modules/Insights/Strings.php:40
5455
- msgid "Detected comment SPAM from failed reCAPTCHA"
5456
  msgstr ""
5457
 
5458
- #: src/lib/src/Modules/Insights/Strings.php:41
5459
- msgid "Detected human comment SPAM with suspicious content"
 
 
5460
  msgstr ""
5461
 
5462
- #: src/lib/src/Modules/Insights/Strings.php:42
5463
- msgid "Successful 2-FA Login"
5464
  msgstr ""
5465
 
5466
- #: src/lib/src/Modules/Insights/Strings.php:43
5467
- msgid "Blocked Login"
5468
  msgstr ""
5469
 
5470
- #: src/lib/src/Modules/Insights/Strings.php:44
5471
- msgid "Forced password update due to policy"
5472
  msgstr ""
5473
 
5474
- #: src/lib/src/Modules/Insights/Strings.php:45
5475
- msgid "Prevented password update due to policy"
5476
  msgstr ""
5477
 
5478
- #: src/lib/src/Modules/Insights/Strings.php:47
5479
- msgid "Options exported"
 
 
5480
  msgstr ""
5481
 
5482
- #: src/lib/src/Modules/Insights/Strings.php:48
5483
- msgid "Options imported"
5484
  msgstr ""
5485
 
5486
- #: src/lib/src/Modules/Insights/Strings.php:49
5487
- msgid "Blocked anonymous Rest API"
5488
  msgstr ""
5489
 
5490
- #: src/lib/src/Modules/Insights/Strings.php:50
5491
- msgid "Blocked XML-RPC"
 
 
5492
  msgstr ""
5493
 
5494
- #: src/lib/src/Modules/Insights/Strings.php:51
5495
- msgid "User account suspended by administrator"
5496
  msgstr ""
5497
 
5498
- #: src/lib/src/Modules/Insights/Strings.php:61
5499
- #, php-format
5500
- msgid "%s Security Insights"
5501
  msgstr ""
5502
 
5503
- #: src/lib/src/Modules/Insights/Strings.php:62
5504
- msgid "recommendation"
 
 
5505
  msgstr ""
5506
 
5507
- #: src/lib/src/Modules/Insights/Strings.php:63
5508
- msgid "suggestion"
5509
  msgstr ""
5510
 
5511
- #: src/lib/src/Modules/Insights/Strings.php:64
5512
- #, php-format
5513
- msgid "Welcome To %s Security Insights Dashboard"
 
5514
  msgstr ""
5515
 
5516
- #: src/lib/src/Modules/Insights/Strings.php:65
5517
  #, php-format
5518
- msgid "Some of the most recent %s events"
5519
  msgstr ""
5520
 
5521
- #: src/lib/src/Modules/Insights/Strings.php:67
5522
- msgid "Sorry, this feature is included with Pro subscriptions."
 
 
5523
  msgstr ""
5524
 
5525
- #: src/lib/src/Modules/Insights/Strings.php:68
5526
- msgid "This feature isn't currently enabled."
 
 
5527
  msgstr ""
5528
 
5529
- #: src/lib/src/Modules/Insights/Strings.php:69
5530
- msgid "You can get this feature (along with loads more) by going Pro."
5531
  msgstr ""
5532
 
5533
- #: src/lib/src/Modules/Insights/Strings.php:70
5534
- msgid "Please turn on this feature in the options."
5535
  msgstr ""
5536
 
5537
- #: src/lib/src/Modules/Insights/Strings.php:71
5538
- msgid "There are no important security notices at this time."
 
5539
  msgstr ""
5540
 
5541
- #: src/lib/src/Modules/Insights/Strings.php:72
5542
- msgid "This is wonderful!"
5543
  msgstr ""
5544
 
5545
- #: src/lib/src/Modules/Insights/Strings.php:73
5546
- msgid "YYYY-MM-DD"
5547
  msgstr ""
5548
 
5549
- #: src/lib/src/Modules/License/AjaxHandler.php:87
5550
- #: src/processors/loginprotect_intent.php:152
5551
- msgid "Success"
5552
  msgstr ""
5553
 
5554
- #: src/lib/src/Modules/License/AjaxHandler.php:96
5555
- #, php-format
5556
- msgid "Please wait %s before attempting another license check."
5557
  msgstr ""
5558
 
5559
- #: src/lib/src/Modules/License/AjaxHandler.php:97
5560
- #, php-format
5561
- msgid "%s second"
5562
- msgid_plural "%s seconds"
5563
- msgstr[0] ""
5564
- msgstr[1] ""
5565
 
5566
- #: src/lib/src/Modules/License/AjaxHandler.php:103
5567
- msgid "Valid license found."
5568
  msgstr ""
5569
 
5570
- #: src/lib/src/Modules/License/AjaxHandler.php:103
5571
- msgid "Valid license couldn't be found."
5572
  msgstr ""
5573
 
5574
- #: src/lib/src/Modules/License/Strings.php:14
5575
- msgid "License Summary"
5576
  msgstr ""
5577
 
5578
- #: src/lib/src/Modules/License/Strings.php:15
5579
- msgid "License Activation"
 
5580
  msgstr ""
5581
 
5582
- #: src/lib/src/Modules/License/Strings.php:16
5583
- msgid "Check License Availability For This Site"
 
5584
  msgstr ""
5585
 
5586
- #: src/lib/src/Modules/License/Strings.php:17
5587
- msgid "Check License"
 
 
 
 
 
 
5588
  msgstr ""
5589
 
5590
- #: src/lib/src/Modules/License/Strings.php:18
5591
- msgid "Clear License Status"
5592
  msgstr ""
5593
 
5594
- #: src/lib/src/Modules/License/Strings.php:19
5595
- msgid "URL To Activate"
5596
  msgstr ""
5597
 
5598
- #: src/lib/src/Modules/License/Strings.php:21
5599
- #, php-format
5600
- msgid "Activate this site URL in your %s control panel"
5601
  msgstr ""
5602
 
5603
- #: src/lib/src/Modules/License/Strings.php:22
5604
- msgid "Keyless Activation"
5605
  msgstr ""
5606
 
5607
- #: src/lib/src/Modules/License/Strings.php:24
5608
  #, php-format
5609
- msgid "Licenses may be checked once every %s seconds"
5610
  msgstr ""
5611
 
5612
- #: src/lib/src/Modules/License/Strings.php:25
5613
- msgid "more frequent checks will be ignored"
 
5614
  msgstr ""
5615
 
5616
- #: src/lib/src/Modules/License/Strings.php:26
5617
- msgid "In case of activation problems, click the link"
5618
  msgstr ""
5619
 
5620
- #: src/lib/src/Modules/License/Strings.php:28
5621
- msgid "Name"
5622
  msgstr ""
5623
 
5624
- #: src/lib/src/Modules/License/Strings.php:29
5625
- msgid "Active"
 
 
5626
  msgstr ""
5627
 
5628
- #: src/lib/src/Modules/License/Strings.php:30
5629
- #: src/lib/src/Tables/Render/ScanApc.php:36
5630
- #: src/lib/src/Tables/Render/ScanBase.php:46
5631
- #: src/lib/src/Tables/Render/ScanPtg.php:27
5632
- msgid "Status"
5633
  msgstr ""
5634
 
5635
- #: src/lib/src/Modules/License/Strings.php:32
5636
- msgid "Expires"
5637
  msgstr ""
5638
 
5639
- #: src/lib/src/Modules/License/Strings.php:33
5640
- msgid "Owner"
 
5641
  msgstr ""
5642
 
5643
- #: src/lib/src/Modules/License/Strings.php:34
5644
- msgid "Checked"
5645
  msgstr ""
5646
 
5647
- #: src/lib/src/Modules/License/Strings.php:35 src/wizards/base.php:211
5648
- msgid "Error"
5649
  msgstr ""
5650
 
5651
- #: src/lib/src/Modules/License/Strings.php:45
5652
- msgid "Pro License check succeeded."
5653
  msgstr ""
5654
 
5655
- #: src/lib/src/Modules/License/Strings.php:48
5656
- msgid "License check failed. Sending Warning Email."
5657
  msgstr ""
5658
 
5659
- #: src/lib/src/Modules/License/Strings.php:51
5660
- msgid "License check failed. Deactivating Pro."
5661
  msgstr ""
5662
 
5663
- #: src/lib/src/Modules/Lockdown/Strings.php:15
5664
- #, php-format
5665
- msgid "Blocked Anonymous API Access through \"%s\" namespace"
5666
  msgstr ""
5667
 
5668
- #: src/lib/src/Modules/Lockdown/Strings.php:34
5669
  msgid ""
5670
- "Lockdown helps secure-up certain loosely-controlled WordPress settings on "
5671
- "your site."
5672
  msgstr ""
5673
 
5674
- #: src/lib/src/Modules/Lockdown/Strings.php:35
5675
- msgid "Lockdown"
5676
  msgstr ""
5677
 
5678
- #: src/lib/src/Modules/Lockdown/Strings.php:40
5679
- #: src/lib/src/Modules/Lockdown/Strings.php:45
5680
- msgid "API & XML-RPC"
5681
  msgstr ""
5682
 
5683
- #: src/lib/src/Modules/Lockdown/Strings.php:42
5684
- msgid "Lockdown certain core WordPress system features."
5685
  msgstr ""
5686
 
5687
- #: src/lib/src/Modules/Lockdown/Strings.php:43
5688
  msgid ""
5689
- "This depends on your usage and needs for certain WordPress functions and "
5690
- "features."
5691
  msgstr ""
5692
 
5693
- #: src/lib/src/Modules/Lockdown/Strings.php:49
5694
- msgid "Permissions and Access Options"
5695
  msgstr ""
5696
 
5697
- #: src/lib/src/Modules/Lockdown/Strings.php:51
5698
- msgid "Provides finer control of certain WordPress permissions."
5699
  msgstr ""
5700
 
5701
- #: src/lib/src/Modules/Lockdown/Strings.php:52
5702
- msgid "Only enable SSL if you have a valid certificate installed."
5703
  msgstr ""
5704
 
5705
- #: src/lib/src/Modules/Lockdown/Strings.php:54
5706
- msgid "Permissions"
 
 
5707
  msgstr ""
5708
 
5709
- #: src/lib/src/Modules/Lockdown/Strings.php:58
5710
- msgid "WordPress Obscurity Options"
5711
  msgstr ""
5712
 
5713
- #: src/lib/src/Modules/Lockdown/Strings.php:60
5714
- msgid "Obscures certain WordPress settings from public view."
5715
  msgstr ""
5716
 
5717
- #: src/lib/src/Modules/Lockdown/Strings.php:61
5718
  msgid ""
5719
- "Obscurity is not true security and so these settings are down to your "
5720
- "personal tastes."
5721
  msgstr ""
5722
 
5723
- #: src/lib/src/Modules/Lockdown/Strings.php:63
5724
- msgid "Obscurity"
5725
  msgstr ""
5726
 
5727
- #: src/lib/src/Modules/Lockdown/Strings.php:95
5728
- #: src/lib/src/Modules/Plugin/Strings.php:65
5729
- #, php-format
5730
- msgid "Disable %s"
5731
  msgstr ""
5732
 
5733
- #: src/lib/src/Modules/Lockdown/Strings.php:96
5734
- #: src/lib/src/Modules/Lockdown/Strings.php:102
5735
- #, php-format
5736
- msgid "Disable The %s System"
5737
  msgstr ""
5738
 
5739
- #: src/lib/src/Modules/Lockdown/Strings.php:97
5740
- #, php-format
5741
- msgid "Checking this option will completely turn off the whole %s system."
 
5742
  msgstr ""
5743
 
5744
- #: src/lib/src/Modules/Lockdown/Strings.php:101
5745
- #: src/lib/src/Modules/Lockdown/Strings.php:102
5746
- msgid "Anonymous Rest API"
5747
  msgstr ""
5748
 
5749
- #: src/lib/src/Modules/Lockdown/Strings.php:103
5750
- msgid "You can choose to completely disable anonymous access to the REST API."
5751
  msgstr ""
5752
 
5753
- #: src/lib/src/Modules/Lockdown/Strings.php:107
5754
- msgid "Rest API Exclusions"
 
 
5755
  msgstr ""
5756
 
5757
- #: src/lib/src/Modules/Lockdown/Strings.php:108
5758
- msgid "Anonymous REST API Exclusions"
 
 
5759
  msgstr ""
5760
 
5761
- #: src/lib/src/Modules/Lockdown/Strings.php:109
 
 
 
 
5762
  msgid ""
5763
- "Any namespaces provided here will be excluded from the Anonymous API "
5764
- "restriction."
5765
  msgstr ""
5766
 
5767
- #: src/lib/src/Modules/Lockdown/Strings.php:113
5768
- msgid "Disable File Editing"
5769
  msgstr ""
5770
 
5771
- #: src/lib/src/Modules/Lockdown/Strings.php:114
5772
- msgid "Disable Ability To Edit Files From Within WordPress"
5773
  msgstr ""
5774
 
5775
- #: src/lib/src/Modules/Lockdown/Strings.php:115
5776
  msgid ""
5777
- "Removes the option to directly edit any files from within the WordPress "
5778
- "admin area."
5779
  msgstr ""
5780
 
5781
- #: src/lib/src/Modules/Lockdown/Strings.php:116
5782
- msgid "Equivalent to setting \"DISALLOW_FILE_EDIT\" to TRUE."
 
 
5783
  msgstr ""
5784
 
5785
- #: src/lib/src/Modules/Lockdown/Strings.php:120
5786
- msgid "Force SSL Admin"
5787
  msgstr ""
5788
 
5789
- #: src/lib/src/Modules/Lockdown/Strings.php:121
5790
- msgid "Forces WordPress Admin Dashboard To Be Delivered Over SSL"
5791
  msgstr ""
5792
 
5793
- #: src/lib/src/Modules/Lockdown/Strings.php:122
5794
  msgid ""
5795
- "Please only enable this option if you have a valid SSL certificate installed."
 
5796
  msgstr ""
5797
 
5798
- #: src/lib/src/Modules/Lockdown/Strings.php:123
5799
- msgid "Equivalent to setting \"FORCE_SSL_ADMIN\" to TRUE."
5800
  msgstr ""
5801
 
5802
- #: src/lib/src/Modules/Lockdown/Strings.php:127
5803
- msgid "Mask WordPress Version"
5804
  msgstr ""
5805
 
5806
- #: src/lib/src/Modules/Lockdown/Strings.php:128
5807
- msgid "Prevents Public Display Of Your WordPress Version"
 
 
5808
  msgstr ""
5809
 
5810
- #: src/lib/src/Modules/Lockdown/Strings.php:129
5811
- msgid ""
5812
- "Enter how you would like your WordPress version displayed publicly. Leave "
5813
- "blank to disable this feature."
5814
  msgstr ""
5815
 
5816
- #: src/lib/src/Modules/Lockdown/Strings.php:130
5817
- msgid ""
5818
- "This may interfere with WordPress plugins that rely on the $wp_version "
5819
- "variable."
5820
  msgstr ""
5821
 
5822
- #: src/lib/src/Modules/Lockdown/Strings.php:134
5823
- msgid "WP Generator Tag"
 
 
5824
  msgstr ""
5825
 
5826
- #: src/lib/src/Modules/Lockdown/Strings.php:135
5827
- msgid "Remove WP Generator Meta Tag"
5828
  msgstr ""
5829
 
5830
- #: src/lib/src/Modules/Lockdown/Strings.php:136
5831
  msgid ""
5832
- "Remove a meta tag from your WordPress pages that publicly displays that your "
5833
- "site is WordPress and its current version."
5834
  msgstr ""
5835
 
5836
- #: src/lib/src/Modules/Lockdown/Strings.php:140
5837
- msgid "Block Username Fishing"
 
5838
  msgstr ""
5839
 
5840
- #: src/lib/src/Modules/Lockdown/Strings.php:141
5841
- msgid "Block the ability to discover WordPress usernames based on author IDs"
 
 
5842
  msgstr ""
5843
 
5844
- #: src/lib/src/Modules/Lockdown/Strings.php:142
5845
- #, php-format
5846
- msgid "When enabled, any URL requests containing \"%s\" will be killed."
 
5847
  msgstr ""
5848
 
5849
- #: src/lib/src/Modules/Lockdown/Strings.php:143
 
5850
  msgid ""
5851
- "Enabling this option may interfere with expected operations of your site."
 
5852
  msgstr ""
5853
 
5854
- #: src/lib/src/Modules/LoginGuard/AdminNotices.php:38
5855
- msgid "Please verify email has been received"
5856
  msgstr ""
5857
 
5858
- #: src/lib/src/Modules/LoginGuard/AdminNotices.php:39
5859
  msgid ""
5860
- "Before we can activate email 2-factor authentication, we need you to confirm "
5861
- "your website can send emails."
5862
  msgstr ""
5863
 
5864
- #: src/lib/src/Modules/LoginGuard/AdminNotices.php:40
5865
- msgid "Please click the link in the email you received."
 
 
5866
  msgstr ""
5867
 
5868
- #: src/lib/src/Modules/LoginGuard/AdminNotices.php:42
5869
  #, php-format
5870
- msgid "The email has been sent to you at blog admin address: %s"
5871
  msgstr ""
5872
 
5873
- #: src/lib/src/Modules/LoginGuard/AdminNotices.php:45
5874
- msgid "Resend verification email"
 
 
5875
  msgstr ""
5876
 
5877
- #: src/lib/src/Modules/LoginGuard/AdminNotices.php:46
5878
- msgid "Disable 2FA by email"
 
 
5879
  msgstr ""
5880
 
5881
- #: src/lib/src/Modules/LoginGuard/AjaxHandler.php:71
5882
- msgid "Multi-factor login backup code has been removed from your profile"
 
 
5883
  msgstr ""
5884
 
5885
- #: src/lib/src/Modules/LoginGuard/AjaxHandler.php:86
5886
- msgid "2FA by email has been disabled"
5887
  msgstr ""
5888
 
5889
- #: src/lib/src/Modules/LoginGuard/AjaxHandler.php:100
5890
- msgid "Email 2FA option is not currently enabled."
 
 
5891
  msgstr ""
5892
 
5893
- #: src/lib/src/Modules/LoginGuard/AjaxHandler.php:104
5894
- msgid "Email sending has already been verified."
 
5895
  msgstr ""
5896
 
5897
- #: src/lib/src/Modules/LoginGuard/AjaxHandler.php:107
5898
- msgid "Verification email resent."
5899
  msgstr ""
5900
 
5901
- #: src/lib/src/Modules/LoginGuard/Lib/CooldownRedirect.php:40
5902
- msgid "The login page is protected against too many login attempts."
5903
  msgstr ""
5904
 
5905
- #: src/lib/src/Modules/LoginGuard/Lib/CooldownRedirect.php:42
5906
- msgid ""
5907
- "If you attempt to login again too quickly you may be blocked from accessing "
5908
- "this site entirely."
5909
  msgstr ""
5910
 
5911
- #: src/lib/src/Modules/LoginGuard/Lib/CooldownRedirect.php:43
5912
- msgid ""
5913
- "If you share this website with others, you may also block their access to "
5914
- "the site."
5915
  msgstr ""
5916
 
5917
- #: src/lib/src/Modules/LoginGuard/Lib/CooldownRedirect.php:44
 
5918
  msgid ""
5919
- "To ignore this message and return to the login page, please check the box "
5920
- "and click continue."
5921
  msgstr ""
5922
 
5923
- #: src/lib/src/Modules/LoginGuard/Lib/CooldownRedirect.php:46
5924
- msgid "I understand I may block my access to the site."
5925
  msgstr ""
5926
 
5927
- #: src/lib/src/Modules/LoginGuard/Lib/CooldownRedirect.php:47
5928
- msgid "Seconds remaining"
 
5929
  msgstr ""
5930
 
5931
- #: src/lib/src/Modules/LoginGuard/Lib/CooldownRedirect.php:48
5932
- msgid "Proceed To Login Page"
5933
  msgstr ""
5934
 
5935
- #: src/lib/src/Modules/LoginGuard/Strings.php:15
5936
- #, php-format
5937
- msgid "User \"%s\" attempted \"%s\" but Bot checkbox was not found."
5938
  msgstr ""
5939
 
5940
- #: src/lib/src/Modules/LoginGuard/Strings.php:18
5941
- msgid "Login/Register request triggered cooldown and was blocked."
5942
  msgstr ""
5943
 
5944
- #: src/lib/src/Modules/LoginGuard/Strings.php:21
5945
  #, php-format
5946
- msgid "User \"%s\" attempted %s but they were caught by the honeypot."
5947
  msgstr ""
5948
 
5949
- #: src/lib/src/Modules/LoginGuard/Strings.php:24
5950
- #: src/lib/src/Modules/LoginGuard/Strings.php:30
5951
- #: src/lib/src/Modules/LoginGuard/Strings.php:36
5952
- #: src/lib/src/Modules/LoginGuard/Strings.php:42
5953
  #, php-format
5954
- msgid "User \"%s\" verified their identity using %s."
 
 
5955
  msgstr ""
5956
 
5957
- #: src/lib/src/Modules/LoginGuard/Strings.php:27
5958
- #: src/lib/src/Modules/LoginGuard/Strings.php:33
5959
- #: src/lib/src/Modules/LoginGuard/Strings.php:39
5960
- #: src/lib/src/Modules/LoginGuard/Strings.php:45
5961
- #, php-format
5962
- msgid "User \"%s\" failed to verify their identity using %s."
5963
  msgstr ""
5964
 
5965
- #: src/lib/src/Modules/LoginGuard/Strings.php:48
5966
  #, php-format
5967
- msgid "User \"%s\" sent two-factor authentication email to verify identity."
5968
  msgstr ""
5969
 
5970
- #: src/lib/src/Modules/LoginGuard/Strings.php:51
5971
  #, php-format
5972
- msgid "Failed to send user \"%s\" two-factor authentication email."
5973
- msgstr ""
5974
-
5975
- #: src/lib/src/Modules/LoginGuard/Strings.php:70
5976
- msgid ""
5977
- "Login Guard blocks all automated and brute force attempts to log in to your "
5978
- "site."
5979
  msgstr ""
5980
 
5981
- #: src/lib/src/Modules/LoginGuard/Strings.php:79
5982
- msgid "Adds Google reCAPTCHA to the Login Forms."
5983
  msgstr ""
5984
 
5985
- #: src/lib/src/Modules/LoginGuard/Strings.php:81
5986
  msgid ""
5987
- "You will need to register for Google reCAPTCHA keys and store them in the "
5988
- "Shield 'Dashboard' settings."
5989
  msgstr ""
5990
 
5991
- #: src/lib/src/Modules/LoginGuard/Strings.php:86
5992
- msgid "Hide WordPress Login Page"
5993
  msgstr ""
5994
 
5995
- #: src/lib/src/Modules/LoginGuard/Strings.php:87
5996
- msgid "Hide Login"
5997
  msgstr ""
5998
 
5999
- #: src/lib/src/Modules/LoginGuard/Strings.php:89
6000
- msgid ""
6001
- "To hide your wp-login.php page from brute force attacks and hacking attempts "
6002
- "- if your login page cannot be found, no-one can login."
6003
  msgstr ""
6004
 
6005
- #: src/lib/src/Modules/LoginGuard/Strings.php:90
6006
- msgid ""
6007
- "This is not required for complete security and if your site has irregular or "
6008
- "inconsistent configuration it may not work for you."
6009
  msgstr ""
6010
 
6011
- #: src/lib/src/Modules/LoginGuard/Strings.php:95
6012
- #: src/lib/src/Modules/LoginGuard/Strings.php:180
6013
- #: src/lib/src/Modules/UserManagement/Strings.php:69
6014
- msgid "Multi-Factor Authentication"
6015
  msgstr ""
6016
 
6017
- #: src/lib/src/Modules/LoginGuard/Strings.php:96
6018
- msgid "Multi-Factor Auth"
6019
  msgstr ""
6020
 
6021
- #: src/lib/src/Modules/LoginGuard/Strings.php:98
6022
- #: src/lib/src/Modules/UserManagement/Strings.php:66
6023
- msgid ""
6024
- "Verifies the identity of users who log in to your site - i.e. they are who "
6025
- "they say they are."
6026
  msgstr ""
6027
 
6028
- #: src/lib/src/Modules/LoginGuard/Strings.php:99
6029
- #: src/lib/src/Modules/LoginGuard/Strings.php:109
6030
- #: src/lib/src/Modules/LoginGuard/Strings.php:118
6031
- #: src/lib/src/Modules/LoginGuard/Strings.php:136
6032
- msgid "You may combine multiple authentication factors for increased security."
6033
  msgstr ""
6034
 
6035
- #: src/lib/src/Modules/LoginGuard/Strings.php:104
6036
- msgid "Email Two-Factor Authentication"
6037
  msgstr ""
6038
 
6039
- #: src/lib/src/Modules/LoginGuard/Strings.php:105
6040
- msgid "2FA Email"
 
6041
  msgstr ""
6042
 
6043
- #: src/lib/src/Modules/LoginGuard/Strings.php:107
6044
- msgid ""
6045
- "Verifies the identity of users who log in to your site using email-based one-"
6046
- "time-passwords."
6047
  msgstr ""
6048
 
6049
- #: src/lib/src/Modules/LoginGuard/Strings.php:108
6050
- #: src/lib/src/Modules/UserManagement/Strings.php:67
6051
- msgid "However, if your host blocks email sending you may lock yourself out."
6052
  msgstr ""
6053
 
6054
- #: src/lib/src/Modules/LoginGuard/Strings.php:114
6055
- msgid "Google Authenticator Two-Factor Authentication"
6056
  msgstr ""
6057
 
6058
- #: src/lib/src/Modules/LoginGuard/Strings.php:115
6059
- msgid "Google Auth"
6060
  msgstr ""
6061
 
6062
- #: src/lib/src/Modules/LoginGuard/Strings.php:117
6063
- msgid ""
6064
- "Verifies the identity of users who log in to your site using Google "
6065
- "Authenticator one-time-passwords."
6066
  msgstr ""
6067
 
6068
- #: src/lib/src/Modules/LoginGuard/Strings.php:123
6069
- msgid "Brute Force Login Protection"
6070
  msgstr ""
6071
 
6072
- #: src/lib/src/Modules/LoginGuard/Strings.php:124
6073
- msgid "Bots"
 
6074
  msgstr ""
6075
 
6076
- #: src/lib/src/Modules/LoginGuard/Strings.php:126
6077
- msgid ""
6078
- "Blocks brute force hacking attacks against your login and registration pages."
6079
  msgstr ""
6080
 
6081
- #: src/lib/src/Modules/LoginGuard/Strings.php:132
6082
- msgid "Yubikey Two-Factor Authentication"
6083
  msgstr ""
6084
 
6085
- #: src/lib/src/Modules/LoginGuard/Strings.php:133
6086
- #: src/processors/loginprotect_intentprovider_yubikey.php:43
6087
- msgid "Yubikey"
6088
  msgstr ""
6089
 
6090
- #: src/lib/src/Modules/LoginGuard/Strings.php:135
6091
- msgid ""
6092
- "Verifies the identity of users who log in to your site using Yubikey one-"
6093
- "time-passwords."
6094
  msgstr ""
6095
 
6096
- #: src/lib/src/Modules/LoginGuard/Strings.php:170
6097
- msgid "Hide WP Login Page"
6098
  msgstr ""
6099
 
6100
- #: src/lib/src/Modules/LoginGuard/Strings.php:171
6101
- msgid "Hide The WordPress Login Page"
6102
  msgstr ""
6103
 
6104
- #: src/lib/src/Modules/LoginGuard/Strings.php:172
6105
- msgid "Creating a path here will disable your wp-login.php"
6106
  msgstr ""
6107
 
6108
- #: src/lib/src/Modules/LoginGuard/Strings.php:174
 
 
 
 
6109
  #, php-format
6110
- msgid "Only letters and numbers are permitted: %s"
6111
  msgstr ""
6112
 
6113
- #: src/lib/src/Modules/LoginGuard/Strings.php:176
6114
  #, php-format
6115
- msgid "Your current login URL is: %s"
 
6116
  msgstr ""
6117
 
6118
- #: src/lib/src/Modules/LoginGuard/Strings.php:181
6119
- msgid "Require All Active Authentication Factors"
6120
  msgstr ""
6121
 
6122
- #: src/lib/src/Modules/LoginGuard/Strings.php:182
6123
- msgid ""
6124
- "When enabled, all multi-factor authentication methods will be applied to a "
6125
- "user login. Disable to require only one to login."
6126
  msgstr ""
6127
 
6128
- #: src/lib/src/Modules/LoginGuard/Strings.php:186
6129
- msgid "Multi-Factor By-Pass"
6130
  msgstr ""
6131
 
6132
- #: src/lib/src/Modules/LoginGuard/Strings.php:187
6133
- msgid ""
6134
- "A User Can By-Pass Multi-Factor Authentication (MFA) For The Set Number Of "
6135
- "Days"
6136
  msgstr ""
6137
 
6138
- #: src/lib/src/Modules/LoginGuard/Strings.php:188
6139
- msgid ""
6140
- "Enter the number of days a user can by-pass future MFA after a successful "
6141
- "MFA-login. 0 to disable."
6142
  msgstr ""
6143
 
6144
- #: src/lib/src/Modules/LoginGuard/Strings.php:192
6145
- msgid "Allow Backup Codes"
6146
  msgstr ""
6147
 
6148
- #: src/lib/src/Modules/LoginGuard/Strings.php:193
6149
- msgid "Allow Users To Generate A Backup Code"
6150
  msgstr ""
6151
 
6152
- #: src/lib/src/Modules/LoginGuard/Strings.php:194
6153
- msgid ""
6154
- "Allow users to generate a backup code that can be used to login if MFA "
6155
- "factors are unavailable."
6156
  msgstr ""
6157
 
6158
- #: src/lib/src/Modules/LoginGuard/Strings.php:198
6159
- #: src/processors/loginprotect_intentprovider_backup.php:36
6160
- #: src/processors/loginprotect_intentprovider_ga.php:48
6161
- #: src/processors/loginprotect_intentprovider_ga.php:52
6162
- #: src/processors/loginprotect_intentprovider_ga.php:54
6163
- #: src/processors/loginprotect_intentprovider_ga.php:188
6164
- msgid "Google Authenticator"
6165
  msgstr ""
6166
 
6167
- #: src/lib/src/Modules/LoginGuard/Strings.php:199
6168
- msgid "Allow Users To Use Google Authenticator"
6169
  msgstr ""
6170
 
6171
- #: src/lib/src/Modules/LoginGuard/Strings.php:200
6172
- msgid ""
6173
- "When enabled, users will have the option to add Google Authenticator to "
6174
- "their WordPress user profile"
6175
  msgstr ""
6176
 
6177
- #: src/lib/src/Modules/LoginGuard/Strings.php:204
6178
- #: src/lib/src/Modules/LoginGuard/Strings.php:210
6179
- #: src/lib/src/Modules/LoginGuard/Strings.php:213
6180
- #: src/processors/loginprotect_intentprovider_email.php:198
6181
- #: src/processors/loginprotect_intentprovider_email.php:199
6182
- msgid "Email Authentication"
6183
  msgstr ""
6184
 
6185
- #: src/lib/src/Modules/LoginGuard/Strings.php:205
6186
- #, php-format
6187
- msgid "Two-Factor Login Authentication By %s"
6188
  msgstr ""
6189
 
6190
- #: src/lib/src/Modules/LoginGuard/Strings.php:205
6191
- #: src/lib/src/Modules/Plugin/Strings.php:410
6192
- #: src/processors/user_management.php:204
6193
- msgid "Email"
6194
  msgstr ""
6195
 
6196
- #: src/lib/src/Modules/LoginGuard/Strings.php:206
 
6197
  msgid ""
6198
- "All users will be required to verify their login by email-based two-factor "
6199
- "authentication."
6200
  msgstr ""
6201
 
6202
- #: src/lib/src/Modules/LoginGuard/Strings.php:210
6203
- msgid "Enforce"
6204
  msgstr ""
6205
 
6206
- #: src/lib/src/Modules/LoginGuard/Strings.php:211
6207
- msgid "All User Roles Subject To Email Authentication"
6208
  msgstr ""
6209
 
6210
- #: src/lib/src/Modules/LoginGuard/Strings.php:212
 
6211
  msgid ""
6212
- "Enforces email-based authentication on all users with the selected roles."
6213
  msgstr ""
6214
 
6215
- #: src/lib/src/Modules/LoginGuard/Strings.php:213
6216
  #, php-format
6217
- msgid "This setting only applies to %s."
6218
- msgstr ""
6219
-
6220
- #: src/lib/src/Modules/LoginGuard/Strings.php:217
6221
- #: src/lib/src/Modules/Plugin/Strings.php:94
6222
- #: src/lib/src/Modules/Plugin/Strings.php:95
6223
- msgid "Google reCAPTCHA"
6224
  msgstr ""
6225
 
6226
- #: src/lib/src/Modules/LoginGuard/Strings.php:218
6227
- msgid "Protect WordPress Account Access Requests With Google reCAPTCHA"
 
6228
  msgstr ""
6229
 
6230
- #: src/lib/src/Modules/LoginGuard/Strings.php:219
 
6231
  msgid ""
6232
- "Use Google reCAPTCHA on the user account forms such as login, register, etc."
 
6233
  msgstr ""
6234
 
6235
- #: src/lib/src/Modules/LoginGuard/Strings.php:220
6236
- #, php-format
6237
- msgid "Use of any theme other than \"%s\", requires a Pro license."
6238
  msgstr ""
6239
 
6240
- #: src/lib/src/Modules/LoginGuard/Strings.php:220
6241
- #: src/lib/src/Modules/Plugin/Strings.php:433
6242
- msgid "Light Theme"
6243
  msgstr ""
6244
 
6245
- #: src/lib/src/Modules/LoginGuard/Strings.php:221
6246
- msgid ""
6247
- "You'll need to setup your Google reCAPTCHA API Keys in 'General' settings."
6248
  msgstr ""
6249
 
6250
- #: src/lib/src/Modules/LoginGuard/Strings.php:222
 
6251
  msgid ""
6252
- "Some forms are more dynamic than others so if you experience problems, "
6253
- "please use non-Invisible reCAPTCHA."
6254
  msgstr ""
6255
 
6256
- #: src/lib/src/Modules/LoginGuard/Strings.php:232
6257
- msgid "Protection Locations"
6258
  msgstr ""
6259
 
6260
- #: src/lib/src/Modules/LoginGuard/Strings.php:233
6261
- msgid "Which Forms Should Be Protected"
6262
  msgstr ""
6263
 
6264
- #: src/lib/src/Modules/LoginGuard/Strings.php:234
6265
- msgid "Choose the forms for which bot protection measures will be deployed."
6266
  msgstr ""
6267
 
6268
- #: src/lib/src/Modules/LoginGuard/Strings.php:235
6269
- #, php-format
6270
- msgid "Use with 3rd party systems such as %s, requires a Pro license."
6271
  msgstr ""
6272
 
6273
- #: src/lib/src/Modules/LoginGuard/Strings.php:239
6274
- msgid "Bot Protection"
6275
  msgstr ""
6276
 
6277
- #: src/lib/src/Modules/LoginGuard/Strings.php:240
6278
- msgid "Protect WP Login From Automated Login Attempts By Bots"
6279
  msgstr ""
6280
 
6281
- #: src/lib/src/Modules/LoginGuard/Strings.php:241
6282
  msgid ""
6283
- "Adds a dynamically (Javascript) generated checkbox to the login form that "
6284
- "prevents bots using automated login techniques."
6285
  msgstr ""
6286
 
6287
- #: src/lib/src/Modules/LoginGuard/Strings.php:242
6288
- msgid "ON"
 
 
6289
  msgstr ""
6290
 
6291
- #: src/lib/src/Modules/LoginGuard/Strings.php:246
6292
- msgid "AntiBot JS"
6293
  msgstr ""
6294
 
6295
- #: src/lib/src/Modules/LoginGuard/Strings.php:247
6296
- msgid "Use AntiBot JS Includes For Custom 3rd Party Forms"
6297
  msgstr ""
6298
 
6299
- #: src/lib/src/Modules/LoginGuard/Strings.php:248
6300
- msgid ""
6301
- "Important: This is experimental. Please contact support for further "
6302
- "assistance."
6303
  msgstr ""
6304
 
6305
- #: src/lib/src/Modules/LoginGuard/Strings.php:252
6306
- msgid "AntiBot Forms"
6307
  msgstr ""
6308
 
6309
- #: src/lib/src/Modules/LoginGuard/Strings.php:253
6310
- msgid ""
6311
- "Enter The Selectors Of The 3rd Party Login Forms For Use With AntiBot JS"
6312
  msgstr ""
6313
 
6314
- #: src/lib/src/Modules/LoginGuard/Strings.php:254
6315
- msgid "For use with the AntiBot JS option."
6316
  msgstr ""
6317
 
6318
- #: src/lib/src/Modules/LoginGuard/Strings.php:255
6319
- msgid "IDs are prefixed with \"#\"."
6320
  msgstr ""
6321
 
6322
- #: src/lib/src/Modules/LoginGuard/Strings.php:256
6323
- msgid "Classes are prefixed with \".\"."
 
6324
  msgstr ""
6325
 
6326
- #: src/lib/src/Modules/LoginGuard/Strings.php:257
6327
- msgid "IDs are preferred over classes."
6328
  msgstr ""
6329
 
6330
- #: src/lib/src/Modules/LoginGuard/Strings.php:261
6331
- msgid "Cooldown Period"
6332
  msgstr ""
6333
 
6334
- #: src/lib/src/Modules/LoginGuard/Strings.php:262
6335
- msgid "Limit account access requests to every X seconds"
6336
  msgstr ""
6337
 
6338
- #: src/lib/src/Modules/LoginGuard/Strings.php:263
6339
  msgid ""
6340
- "WordPress will process only ONE account access attempt per number of seconds "
6341
- "specified."
6342
  msgstr ""
6343
 
6344
- #: src/lib/src/Modules/LoginGuard/Strings.php:264
6345
- msgid "Zero (0) turns this off."
6346
  msgstr ""
6347
 
6348
- #: src/lib/src/Modules/LoginGuard/Strings.php:270
6349
- msgid "User Registration"
6350
  msgstr ""
6351
 
6352
- #: src/lib/src/Modules/LoginGuard/Strings.php:271
6353
- msgid "Apply Brute Force Protection To User Registration And Lost Passwords"
6354
  msgstr ""
6355
 
6356
- #: src/lib/src/Modules/LoginGuard/Strings.php:272
 
6357
  msgid ""
6358
- "When enabled, settings in this section will also apply to new user "
6359
- "registration and users trying to reset passwords."
6360
  msgstr ""
6361
 
6362
- #: src/lib/src/Modules/LoginGuard/Strings.php:276
6363
- msgid "Enable Yubikey Authentication"
6364
  msgstr ""
6365
 
6366
- #: src/lib/src/Modules/LoginGuard/Strings.php:277
6367
- msgid "Turn On / Off Yubikey Authentication On This Site"
6368
  msgstr ""
6369
 
6370
- #: src/lib/src/Modules/LoginGuard/Strings.php:278
6371
  msgid ""
6372
- "Combined with your Yubikey API details this will form the basis of your "
6373
- "Yubikey Authentication"
6374
  msgstr ""
6375
 
6376
- #: src/lib/src/Modules/LoginGuard/Strings.php:282
6377
- msgid "Yubikey App ID"
6378
  msgstr ""
6379
 
6380
- #: src/lib/src/Modules/LoginGuard/Strings.php:283
6381
- msgid "Your Unique Yubikey App ID"
6382
  msgstr ""
6383
 
6384
- #: src/lib/src/Modules/LoginGuard/Strings.php:284
6385
  msgid ""
6386
- "Combined with your Yubikey API Key this will form the basis of your Yubikey "
6387
- "Authentication"
6388
  msgstr ""
6389
 
6390
- #: src/lib/src/Modules/LoginGuard/Strings.php:285
6391
- msgid ""
6392
- "Please review the info link on how to obtain your own Yubikey App ID and API "
6393
- "Key."
6394
  msgstr ""
6395
 
6396
- #: src/lib/src/Modules/LoginGuard/Strings.php:289
6397
- msgid "Yubikey API Key"
6398
  msgstr ""
6399
 
6400
- #: src/lib/src/Modules/LoginGuard/Strings.php:290
6401
- msgid "Your Unique Yubikey App API Key"
6402
  msgstr ""
6403
 
6404
- #: src/lib/src/Modules/LoginGuard/Strings.php:291
6405
  msgid ""
6406
- "Combined with your Yubikey App ID this will form the basis of your Yubikey "
6407
- "Authentication."
6408
  msgstr ""
6409
 
6410
- #: src/lib/src/Modules/LoginGuard/Strings.php:292
6411
- msgid ""
6412
- "Please review the info link on how to get your own Yubikey App ID and API "
6413
- "Key."
6414
  msgstr ""
6415
 
6416
- #: src/lib/src/Modules/LoginGuard/Strings.php:296
6417
- msgid "Yubikey Unique Keys"
6418
  msgstr ""
6419
 
6420
- #: src/lib/src/Modules/LoginGuard/Strings.php:297
6421
- msgid ""
6422
- "This method for Yubikeys is no longer supported. Please see your user profile"
6423
  msgstr ""
6424
 
6425
- #: src/lib/src/Modules/LoginGuard/Strings.php:298
6426
- msgid "Format"
6427
  msgstr ""
6428
 
6429
- #: src/lib/src/Modules/LoginGuard/Strings.php:299
6430
- msgid "Provide Username<->Yubikey Pairs that are usable for this site."
6431
  msgstr ""
6432
 
6433
- #: src/lib/src/Modules/LoginGuard/Strings.php:300
6434
- msgid ""
6435
- "If a Username is not assigned a Yubikey, Yubikey Authentication is OFF for "
6436
- "that user."
 
 
6437
  msgstr ""
6438
 
6439
- #: src/lib/src/Modules/LoginGuard/Strings.php:301
6440
  msgid ""
6441
- "Each [Username,Key] pair should be separated by a new line: you only need to "
6442
- "provide the first 12 characters of the yubikey."
6443
  msgstr ""
6444
 
6445
- #: src/lib/src/Modules/LoginGuard/Strings.php:305
6446
- msgid "GASP Checkbox Text"
6447
  msgstr ""
6448
 
6449
- #: src/lib/src/Modules/LoginGuard/Strings.php:306
6450
- msgid "The User Message Displayed Next To The GASP Checkbox"
6451
  msgstr ""
6452
 
6453
- #: src/lib/src/Modules/LoginGuard/Strings.php:307
6454
  msgid ""
6455
- "You can change the text displayed to the user beside the checkbox if you "
6456
- "need a custom message."
6457
  msgstr ""
6458
 
6459
- #: src/lib/src/Modules/LoginGuard/Strings.php:312
6460
- msgid "GASP Alert Text"
6461
  msgstr ""
6462
 
6463
- #: src/lib/src/Modules/LoginGuard/Strings.php:313
6464
- msgid "The Message Displayed If The User Doesn't Check The Box"
 
6465
  msgstr ""
6466
 
6467
- #: src/lib/src/Modules/LoginGuard/Strings.php:314
6468
  msgid ""
6469
- "You can change the text displayed to the user in the alert message if they "
6470
- "don't check the box."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6471
  msgstr ""
6472
 
6473
- #: src/lib/src/Modules/Plugin/AdminNotices.php:88
6474
  #, php-format
6475
- msgid "%s is not protecting your site"
6476
  msgstr ""
6477
 
6478
- #: src/lib/src/Modules/Plugin/AdminNotices.php:90
6479
  #, php-format
6480
- msgid "Please delete the \"%s\" file to reactivate %s protection"
6481
  msgstr ""
6482
 
6483
- #: src/lib/src/Modules/Plugin/AdminNotices.php:94
6484
- msgid "Click here to automatically delete the file"
6485
  msgstr ""
6486
 
6487
- #: src/lib/src/Modules/Plugin/AdminNotices.php:116
6488
- msgid "Your Name"
 
6489
  msgstr ""
6490
 
6491
- #: src/lib/src/Modules/Plugin/AdminNotices.php:117
6492
- msgid "Your Email"
6493
  msgstr ""
6494
 
6495
- #: src/lib/src/Modules/Plugin/AdminNotices.php:118
6496
- msgid "Sign-Up"
6497
  msgstr ""
6498
 
6499
- #: src/lib/src/Modules/Plugin/AdminNotices.php:126
6500
- msgid "I agree to Ts & Cs"
 
 
6501
  msgstr ""
6502
 
6503
- #: src/lib/src/Modules/Plugin/AdminNotices.php:148
6504
  #, php-format
6505
- msgid "Update available for the %s plugin"
6506
  msgstr ""
6507
 
6508
- #: src/lib/src/Modules/Plugin/AdminNotices.php:149
6509
- msgid "Please click to update immediately"
6510
  msgstr ""
6511
 
6512
- #: src/lib/src/Modules/Plugin/AdminNotices.php:150
6513
- msgid "Dismiss this notice"
6514
  msgstr ""
6515
 
6516
- #: src/lib/src/Modules/Plugin/AdminNotices.php:166
6517
- msgid "I don't need the setup wizard just now"
 
 
 
 
 
 
 
 
 
 
6518
  msgstr ""
6519
 
6520
- #: src/lib/src/Modules/Plugin/AdminNotices.php:167
6521
- #, php-format
6522
- msgid "Get started quickly with the %s Setup Wizard"
6523
  msgstr ""
6524
 
6525
- #: src/lib/src/Modules/Plugin/AdminNotices.php:168
6526
- #, php-format
6527
- msgid ""
6528
- "The welcome wizard will help you get setup quickly and become familiar with "
6529
- "some of the core %s features"
6530
  msgstr ""
6531
 
6532
- #: src/lib/src/Modules/Plugin/AdminNotices.php:169
6533
- msgid "Launch the welcome wizard"
6534
  msgstr ""
6535
 
6536
- #: src/lib/src/Modules/Plugin/AdminNotices.php:188
6537
- #, php-format
6538
- msgid "Make %s even better by sharing usage info?"
6539
  msgstr ""
6540
 
6541
- #: src/lib/src/Modules/Plugin/AdminNotices.php:189
6542
- #, php-format
6543
- msgid "We're hoping to understand how %s is configured and used."
6544
  msgstr ""
6545
 
6546
- #: src/lib/src/Modules/Plugin/AdminNotices.php:190
6547
- msgid "We'd like to understand how effective it is on a global scale."
6548
  msgstr ""
6549
 
6550
- #: src/lib/src/Modules/Plugin/AdminNotices.php:191
6551
  msgid ""
6552
- "The data sent is always completely anonymous and we can never track you or "
6553
- "your site."
6554
  msgstr ""
6555
 
6556
- #: src/lib/src/Modules/Plugin/AdminNotices.php:192
6557
- msgid "It can be turned-off at any time within the plugin options."
6558
  msgstr ""
6559
 
6560
- #: src/lib/src/Modules/Plugin/AdminNotices.php:193
6561
- msgid "Click to see the RAW data that would be sent"
6562
  msgstr ""
6563
 
6564
- #: src/lib/src/Modules/Plugin/AdminNotices.php:196
6565
- msgid "Absolutely"
 
6566
  msgstr ""
6567
 
6568
- #: src/lib/src/Modules/Plugin/AdminNotices.php:197
6569
- msgid "Yes, I'd be happy share this info"
6570
  msgstr ""
6571
 
6572
- #: src/lib/src/Modules/Plugin/AdminNotices.php:198
6573
- msgid "I'd like to learn more, please"
6574
  msgstr ""
6575
 
6576
- #: src/lib/src/Modules/Plugin/AdminNotices.php:199
6577
- msgid "No, I don't want to help"
6578
  msgstr ""
6579
 
6580
- #: src/lib/src/Modules/Plugin/AdminNotices.php:220
6581
- msgid "Can You Help Us With A Quick Review?"
6582
  msgstr ""
6583
 
6584
- #: src/lib/src/Modules/Plugin/AdminNotices.php:221
6585
- msgid "I'd rather not show this support"
 
6586
  msgstr ""
6587
 
6588
- #: src/lib/src/Modules/Plugin/AdminNotices.php:221
6589
- msgid "I've done this already"
6590
  msgstr ""
6591
 
6592
- #: src/lib/src/Modules/Plugin/AjaxHandler.php:124
6593
- #: src/lib/src/Modules/UserManagement/AjaxHandler.php:74
6594
- msgid "No items selected."
6595
  msgstr ""
6596
 
6597
- #: src/lib/src/Modules/Plugin/AjaxHandler.php:127
6598
- #: src/lib/src/Modules/UserManagement/AjaxHandler.php:77
6599
- msgid "Not a supported action."
6600
  msgstr ""
6601
 
6602
- #: src/lib/src/Modules/Plugin/AjaxHandler.php:138
6603
- #: src/lib/src/Modules/UserManagement/AjaxHandler.php:97
6604
- msgid "Selected items were deleted."
6605
  msgstr ""
6606
 
6607
- #: src/lib/src/Modules/Plugin/AjaxHandler.php:156
6608
- msgid "File could not be automatically removed."
6609
  msgstr ""
6610
 
6611
- #: src/lib/src/Modules/Plugin/AjaxHandler.php:185
6612
- msgid "Note not found."
6613
  msgstr ""
6614
 
6615
- #: src/lib/src/Modules/Plugin/AjaxHandler.php:194
6616
- msgid "Note deleted"
6617
  msgstr ""
6618
 
6619
- #: src/lib/src/Modules/Plugin/AjaxHandler.php:197
6620
- msgid "Note couldn't be deleted"
6621
  msgstr ""
6622
 
6623
- #: src/lib/src/Modules/Plugin/AjaxHandler.php:228
6624
- #: src/processors/plugin_importexport.php:221
6625
- msgid "Please check the box to confirm your intent to overwrite settings"
6626
  msgstr ""
6627
 
6628
- #: src/lib/src/Modules/Plugin/AjaxHandler.php:243
6629
- msgid "Options failed to import"
6630
  msgstr ""
6631
 
6632
- #: src/lib/src/Modules/Plugin/AjaxHandler.php:262
6633
- msgid "Sorry, Admin Notes is only available for Pro subscriptions."
 
6634
  msgstr ""
6635
 
6636
- #: src/lib/src/Modules/Plugin/AjaxHandler.php:265
6637
- msgid "Sorry, but it appears your note was empty."
6638
  msgstr ""
6639
 
6640
- #: src/lib/src/Modules/Plugin/AjaxHandler.php:271
6641
- msgid "Note created successfully."
6642
  msgstr ""
6643
 
6644
- #: src/lib/src/Modules/Plugin/AjaxHandler.php:271
6645
- msgid "Note could not be created."
6646
  msgstr ""
6647
 
6648
- #: src/lib/src/Modules/Plugin/Components/BadgeWidget.php:23
6649
- #, php-format
6650
- msgid "%s Plugin Badge"
6651
  msgstr ""
6652
 
6653
- #: src/lib/src/Modules/Plugin/Components/BadgeWidget.php:25
6654
- #, php-format
6655
- msgid ""
6656
- "You can now help spread the word about the %s plugin anywhere on your site"
6657
  msgstr ""
6658
 
6659
- #: src/lib/src/Modules/Plugin/Components/BadgeWidget.php:51
6660
- msgid "Site Secured"
6661
  msgstr ""
6662
 
6663
- #: src/lib/src/Modules/Plugin/Components/PluginBadge.php:76
6664
- #, php-format
6665
- msgid "This Site Is Protected By %s"
6666
  msgstr ""
6667
 
6668
- #: src/lib/src/Modules/Plugin/Strings.php:15
6669
- msgid "Plugin Actions"
6670
  msgstr ""
6671
 
6672
- #: src/lib/src/Modules/Plugin/Strings.php:16
6673
- msgid "E.g. Import/Export"
6674
  msgstr ""
6675
 
6676
- #: src/lib/src/Modules/Plugin/Strings.php:26
6677
- msgid "Sent notifications to whitelisted sites for required options import."
6678
  msgstr ""
6679
 
6680
- #: src/lib/src/Modules/Plugin/Strings.php:29
6681
- msgid "Received notification that options import required."
6682
  msgstr ""
6683
 
6684
- #: src/lib/src/Modules/Plugin/Strings.php:30
6685
  #, php-format
6686
- msgid "Current master site: %s"
6687
  msgstr ""
6688
 
6689
- #: src/lib/src/Modules/Plugin/Strings.php:33
6690
- #, php-format
6691
- msgid "Options exported to site: %s"
 
6692
  msgstr ""
6693
 
6694
- #: src/lib/src/Modules/Plugin/Strings.php:36
6695
- #, php-format
6696
- msgid "Options imported from site: %s"
6697
  msgstr ""
6698
 
6699
- #: src/lib/src/Modules/Plugin/Strings.php:39
6700
- #, php-format
6701
- msgid "Site added to export white list: %s"
6702
  msgstr ""
6703
 
6704
- #: src/lib/src/Modules/Plugin/Strings.php:42
6705
  #, php-format
6706
- msgid "Site removed from export white list: %s"
6707
  msgstr ""
6708
 
6709
- #: src/lib/src/Modules/Plugin/Strings.php:45
6710
- #, php-format
6711
- msgid "Master Site URL set: %s"
6712
  msgstr ""
6713
 
6714
- #: src/lib/src/Modules/Plugin/Strings.php:64
6715
- msgid "Global Security Plugin Disable"
6716
  msgstr ""
6717
 
6718
- #: src/lib/src/Modules/Plugin/Strings.php:67
6719
- msgid "Use this option to completely disable all active Shield Protection."
6720
  msgstr ""
6721
 
6722
- #: src/lib/src/Modules/Plugin/Strings.php:72
6723
- #: src/lib/src/Modules/Plugin/Strings.php:73
6724
- msgid "Plugin Defaults"
6725
  msgstr ""
6726
 
6727
- #: src/lib/src/Modules/Plugin/Strings.php:75
6728
- msgid "Important default settings used throughout the plugin."
 
 
6729
  msgstr ""
6730
 
6731
- #: src/lib/src/Modules/Plugin/Strings.php:82
6732
- msgid ""
6733
- "Automatically import options, and deploy configurations across your entire "
6734
- "network."
6735
  msgstr ""
6736
 
6737
- #: src/lib/src/Modules/Plugin/Strings.php:83
6738
- msgid "This is a Pro-only feature."
6739
  msgstr ""
6740
 
6741
- #: src/lib/src/Modules/Plugin/Strings.php:89
6742
- msgid "General Plugin Options"
6743
  msgstr ""
6744
 
6745
- #: src/lib/src/Modules/Plugin/Strings.php:90
6746
- msgid "General Options"
 
6747
  msgstr ""
6748
 
6749
- #: src/lib/src/Modules/Plugin/Strings.php:97
6750
  #, php-format
6751
- msgid "Setup Google reCAPTCHA for use across %s."
6752
  msgstr ""
6753
 
6754
- #: src/lib/src/Modules/Plugin/Strings.php:101
6755
- msgid "You must create your own Google reCAPTCHA API Keys."
6756
  msgstr ""
6757
 
6758
- #: src/lib/src/Modules/Plugin/Strings.php:103
6759
- msgid "Manage Keys Here"
 
6760
  msgstr ""
6761
 
6762
- #: src/lib/src/Modules/Plugin/Strings.php:105
6763
- #, php-format
6764
- msgid "Invisible Google reCAPTCHA is available with %s Pro."
6765
  msgstr ""
6766
 
6767
- #: src/lib/src/Modules/Plugin/Strings.php:110
6768
- #: src/lib/src/Modules/Plugin/Strings.php:111
6769
- msgid "Duo Security"
6770
  msgstr ""
6771
 
6772
- #: src/lib/src/Modules/Plugin/Strings.php:138
6773
- #, php-format
6774
- msgid "Enable %s Protection"
6775
  msgstr ""
6776
 
6777
- #: src/lib/src/Modules/Plugin/Strings.php:139
6778
- msgid "Switch Off To Disable All Security Protection"
6779
  msgstr ""
6780
 
6781
- #: src/lib/src/Modules/Plugin/Strings.php:140
6782
- msgid ""
6783
- "You can keep the security plugin activated, but temporarily disable all "
6784
- "protection it provides."
6785
  msgstr ""
6786
 
6787
- #: src/lib/src/Modules/Plugin/Strings.php:144
6788
- msgid "Anonymous Usage Statistics"
6789
  msgstr ""
6790
 
6791
- #: src/lib/src/Modules/Plugin/Strings.php:145
6792
- msgid "Permit Anonymous Usage Information Gathering"
6793
  msgstr ""
6794
 
6795
- #: src/lib/src/Modules/Plugin/Strings.php:146
6796
- msgid ""
6797
- "Allows us to gather information on statistics and features in-use across our "
6798
- "client installations."
6799
  msgstr ""
6800
 
6801
- #: src/lib/src/Modules/Plugin/Strings.php:147
6802
- msgid ""
6803
- "This information is strictly anonymous and contains no personally, or "
6804
- "otherwise, identifiable data."
6805
  msgstr ""
6806
 
6807
- #: src/lib/src/Modules/Plugin/Strings.php:148
6808
- msgid "Click to see the exact data that would be sent."
6809
  msgstr ""
6810
 
6811
- #: src/lib/src/Modules/Plugin/Strings.php:152
6812
- msgid "IP Source"
6813
  msgstr ""
6814
 
6815
- #: src/lib/src/Modules/Plugin/Strings.php:153
6816
- msgid "Which IP Address Is Yours"
6817
  msgstr ""
6818
 
6819
- #: src/lib/src/Modules/Plugin/Strings.php:154
6820
- msgid ""
6821
- "There are many possible ways to detect visitor IP addresses. If Auto-Detect "
6822
- "is not working, please select yours from the list."
6823
  msgstr ""
6824
 
6825
- #: src/lib/src/Modules/Plugin/Strings.php:155
6826
- msgid ""
6827
- "If the option you select becomes unavailable, we will revert to auto "
6828
- "detection."
6829
  msgstr ""
6830
 
6831
- #: src/lib/src/Modules/Plugin/Strings.php:157
6832
- #, php-format
6833
- msgid "Current source is: %s (%s)"
6834
  msgstr ""
6835
 
6836
- #: src/lib/src/Modules/Plugin/Strings.php:166
6837
- msgid "Report Email"
6838
  msgstr ""
6839
 
6840
- #: src/lib/src/Modules/Plugin/Strings.php:167
6841
- msgid "Where to send email reports"
6842
  msgstr ""
6843
 
6844
- #: src/lib/src/Modules/Plugin/Strings.php:168
6845
- #, php-format
6846
- msgid "If this is empty, it will default to the blog admin email address: %s"
6847
  msgstr ""
6848
 
6849
- #: src/lib/src/Modules/Plugin/Strings.php:172
6850
- msgid "In-Plugin Notices"
6851
  msgstr ""
6852
 
6853
- #: src/lib/src/Modules/Plugin/Strings.php:173
6854
- msgid "Display Plugin Specific Notices"
6855
  msgstr ""
6856
 
6857
- #: src/lib/src/Modules/Plugin/Strings.php:174
6858
- msgid ""
6859
- "Disable this option to hide certain plugin admin notices about available "
6860
- "updates and post-update notices."
6861
  msgstr ""
6862
 
6863
- #: src/lib/src/Modules/Plugin/Strings.php:178
6864
- msgid "Show Plugin Badge"
 
6865
  msgstr ""
6866
 
6867
- #: src/lib/src/Modules/Plugin/Strings.php:179
6868
- msgid "Display Plugin Badge On Your Site"
6869
  msgstr ""
6870
 
6871
- #: src/lib/src/Modules/Plugin/Strings.php:180
6872
- msgid ""
6873
- "Enabling this option helps support the plugin by spreading the word about it "
6874
- "on your website."
6875
  msgstr ""
6876
 
6877
- #: src/lib/src/Modules/Plugin/Strings.php:181
6878
- msgid ""
6879
- "The plugin badge also lets visitors know your are taking your website "
6880
- "security seriously."
6881
  msgstr ""
6882
 
6883
- #: src/lib/src/Modules/Plugin/Strings.php:182
6884
- msgid "Read this carefully before enabling this option."
 
 
6885
  msgstr ""
6886
 
6887
- #: src/lib/src/Modules/Plugin/Strings.php:186
6888
- msgid "Delete Plugin Settings"
6889
  msgstr ""
6890
 
6891
- #: src/lib/src/Modules/Plugin/Strings.php:187
6892
- msgid "Delete All Plugin Settings Upon Plugin Deactivation"
 
 
6893
  msgstr ""
6894
 
6895
- #: src/lib/src/Modules/Plugin/Strings.php:188
6896
- msgid "Careful: Removes all plugin options when you deactivate the plugin"
6897
  msgstr ""
6898
 
6899
- #: src/lib/src/Modules/Plugin/Strings.php:192
6900
- msgid "XML-RPC Compatibility"
6901
  msgstr ""
6902
 
6903
- #: src/lib/src/Modules/Plugin/Strings.php:193
6904
- msgid "Allow Login Through XML-RPC To By-Pass Accounts Management Rules"
6905
  msgstr ""
6906
 
6907
- #: src/lib/src/Modules/Plugin/Strings.php:194
6908
- msgid ""
6909
- "Enable this if you need XML-RPC functionality e.g. if you use the WordPress "
6910
- "iPhone/Android App."
6911
  msgstr ""
6912
 
6913
- #: src/lib/src/Modules/Plugin/Strings.php:198
6914
- msgid "Allow Import/Export"
 
6915
  msgstr ""
6916
 
6917
- #: src/lib/src/Modules/Plugin/Strings.php:199
6918
- msgid "Allow Import And Export Of Options On This Site"
6919
  msgstr ""
6920
 
6921
- #: src/lib/src/Modules/Plugin/Strings.php:200
6922
- msgid "Uncheck this box to completely disable import and export of options."
 
6923
  msgstr ""
6924
 
6925
- #: src/lib/src/Modules/Plugin/Strings.php:201
6926
- msgid "Import/Export is a premium-only feature."
 
6927
  msgstr ""
6928
 
6929
- #: src/lib/src/Modules/Plugin/Strings.php:205
6930
- msgid "Export Whitelist"
 
 
6931
  msgstr ""
6932
 
6933
- #: src/lib/src/Modules/Plugin/Strings.php:206
6934
- msgid "Whitelisted Sites To Export Options From This Site"
6935
  msgstr ""
6936
 
6937
- #: src/lib/src/Modules/Plugin/Strings.php:207
6938
- msgid "Whitelisted sites may export options from this site without the key."
6939
  msgstr ""
6940
 
6941
- #: src/lib/src/Modules/Plugin/Strings.php:208
6942
- msgid "List each site URL on a new line."
6943
  msgstr ""
6944
 
6945
- #: src/lib/src/Modules/Plugin/Strings.php:209
6946
- msgid "This is to be used in conjunction with the Master Import Site feature."
 
6947
  msgstr ""
6948
 
6949
- #: src/lib/src/Modules/Plugin/Strings.php:213
6950
- msgid "Master Import Site"
6951
  msgstr ""
6952
 
6953
- #: src/lib/src/Modules/Plugin/Strings.php:214
6954
- msgid "Automatically Import Options From This Site URL"
6955
  msgstr ""
6956
 
6957
- #: src/lib/src/Modules/Plugin/Strings.php:215
6958
- msgid "Supplying a site URL here will make this site an 'Options Slave'."
6959
  msgstr ""
6960
 
6961
- #: src/lib/src/Modules/Plugin/Strings.php:216
6962
- msgid "Options will be automatically exported from the Master site each day."
 
6963
  msgstr ""
6964
 
6965
- #: src/lib/src/Modules/Plugin/Strings.php:217
6966
- msgid ""
6967
- "Use of this feature will overwrite existing options and replace them with "
6968
- "those from the Master Import Site."
6969
  msgstr ""
6970
 
6971
- #: src/lib/src/Modules/Plugin/Strings.php:221
6972
- msgid "Notify Whitelist"
 
6973
  msgstr ""
6974
 
6975
- #: src/lib/src/Modules/Plugin/Strings.php:222
6976
- msgid "Notify Sites On The Whitelist To Update Options From Master"
6977
  msgstr ""
6978
 
6979
- #: src/lib/src/Modules/Plugin/Strings.php:223
6980
  msgid ""
6981
- "When enabled, manual options saving will notify sites on the whitelist to "
6982
- "export options from the Master site."
6983
  msgstr ""
6984
 
6985
- #: src/lib/src/Modules/Plugin/Strings.php:227
6986
- #: src/processors/plugin_importexport.php:59
6987
- #: src/processors/plugin_importexport.php:63
6988
- msgid "Secret Key"
6989
  msgstr ""
6990
 
6991
- #: src/lib/src/Modules/Plugin/Strings.php:228
6992
- msgid "Import/Export Secret Key"
6993
  msgstr ""
6994
 
6995
  #: src/lib/src/Modules/Plugin/Strings.php:229
6996
- msgid ""
6997
- "Keep this Secret Key private as it will allow the import and export of "
6998
- "options."
6999
  msgstr ""
7000
 
7001
- #: src/lib/src/Modules/Plugin/Strings.php:233
7002
- msgid "Installation ID"
7003
  msgstr ""
7004
 
7005
- #: src/lib/src/Modules/Plugin/Strings.php:234
7006
- msgid "Unique Plugin Installation ID"
 
 
 
 
7007
  msgstr ""
7008
 
7009
- #: src/lib/src/Modules/Plugin/Strings.php:235
7010
- msgid "Keep this ID private."
 
 
7011
  msgstr ""
7012
 
7013
  #: src/lib/src/Modules/Plugin/Strings.php:239
7014
- msgid "reCAPTCHA Secret"
 
 
7015
  msgstr ""
7016
 
7017
  #: src/lib/src/Modules/Plugin/Strings.php:240
7018
- msgid "Google reCAPTCHA Secret Key"
7019
  msgstr ""
7020
 
7021
- #: src/lib/src/Modules/Plugin/Strings.php:241
7022
- msgid "Enter your Google reCAPTCHA secret key for use throughout the plugin."
7023
  msgstr ""
7024
 
7025
  #: src/lib/src/Modules/Plugin/Strings.php:246
7026
- msgid "reCAPTCHA Site Key"
7027
  msgstr ""
7028
 
7029
- #: src/lib/src/Modules/Plugin/Strings.php:247
7030
- msgid "Google reCAPTCHA Site Key"
 
 
7031
  msgstr ""
7032
 
7033
- #: src/lib/src/Modules/Plugin/Strings.php:248
7034
- msgid "Enter your Google reCAPTCHA site key for use throughout the plugin"
7035
  msgstr ""
7036
 
7037
  #: src/lib/src/Modules/Plugin/Strings.php:254
7038
- msgid "How Google reCAPTCHA Will Be Displayed By Default"
7039
  msgstr ""
7040
 
7041
- #: src/lib/src/Modules/Plugin/Strings.php:305
7042
- msgid "Install"
 
 
7043
  msgstr ""
7044
 
7045
- #: src/lib/src/Modules/Plugin/Strings.php:306
7046
- msgid "Update"
 
 
7047
  msgstr ""
7048
 
7049
- #: src/lib/src/Modules/Plugin/Strings.php:307
7050
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:146
7051
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:172
7052
- msgid "Activate"
7053
  msgstr ""
7054
 
7055
- #: src/lib/src/Modules/Plugin/Strings.php:308
7056
- #: src/lib/src/Tables/Render/AdminNotes.php:20
7057
- #: src/lib/src/Tables/Render/Base.php:203
7058
- #: src/lib/src/Tables/Render/ScanMal.php:35
7059
- #: src/lib/src/Tables/Render/ScanUfc.php:29
7060
- msgid "Delete"
7061
  msgstr ""
7062
 
7063
- #: src/lib/src/Modules/Plugin/Strings.php:309
7064
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:173
7065
- msgid "Edit Theme Options"
7066
  msgstr ""
7067
 
7068
- #: src/lib/src/Modules/Plugin/Strings.php:310
7069
- msgid "Create/Edit"
 
 
7070
  msgstr ""
7071
 
7072
- #: src/lib/src/Modules/Plugin/Strings.php:311
7073
- msgid "Publish"
7074
  msgstr ""
7075
 
7076
- #: src/lib/src/Modules/Plugin/Strings.php:312
7077
- msgid "Author Name"
7078
  msgstr ""
7079
 
7080
- #: src/lib/src/Modules/Plugin/Strings.php:313
7081
- msgid "Author Email"
 
 
7082
  msgstr ""
7083
 
7084
- #: src/lib/src/Modules/Plugin/Strings.php:314
7085
- msgid "Comment Content"
 
 
7086
  msgstr ""
7087
 
7088
- #: src/lib/src/Modules/Plugin/Strings.php:315
7089
- msgid "Browser User Agent"
7090
  msgstr ""
7091
 
7092
- #: src/lib/src/Modules/Plugin/Strings.php:316
7093
- msgid "Login"
7094
  msgstr ""
7095
 
7096
- #: src/lib/src/Modules/Plugin/Strings.php:317
7097
- msgid "Register"
7098
  msgstr ""
7099
 
7100
- #: src/lib/src/Modules/Plugin/Strings.php:318
7101
- msgid "Lost Password"
 
 
7102
  msgstr ""
7103
 
7104
- #: src/lib/src/Modules/Plugin/Strings.php:319
7105
- msgid "Checkout (WooCommerce)"
7106
  msgstr ""
7107
 
7108
- #: src/lib/src/Modules/Plugin/Strings.php:320
7109
- msgid "Simple Requests"
7110
  msgstr ""
7111
 
7112
- #: src/lib/src/Modules/Plugin/Strings.php:321
7113
- msgid "Logged-In Users"
 
 
7114
  msgstr ""
7115
 
7116
- #: src/lib/src/Modules/Plugin/Strings.php:322
7117
- msgid "Search Engines"
 
 
7118
  msgstr ""
7119
 
7120
- #: src/lib/src/Modules/Plugin/Strings.php:323
7121
- msgid "Uptime Monitoring Services"
 
 
7122
  msgstr ""
7123
 
7124
- #: src/lib/src/Modules/Plugin/Strings.php:324
7125
- msgid "Enabled With Email Reports"
7126
  msgstr ""
7127
 
7128
- #: src/lib/src/Modules/Plugin/Strings.php:326
7129
- msgid "Minor Versions Only"
7130
  msgstr ""
7131
 
7132
- #: src/lib/src/Modules/Plugin/Strings.php:327
7133
- msgid "Major and Minor Versions"
7134
  msgstr ""
7135
 
7136
- #: src/lib/src/Modules/Plugin/Strings.php:328
7137
- msgid "Let The Plugin Decide"
7138
  msgstr ""
7139
 
7140
- #: src/lib/src/Modules/Plugin/Strings.php:329
7141
- msgid "As Soon As Possible"
7142
  msgstr ""
7143
 
7144
- #: src/lib/src/Modules/Plugin/Strings.php:330
7145
- msgid "Move To Pending Moderation"
7146
  msgstr ""
7147
 
7148
- #: src/lib/src/Modules/Plugin/Strings.php:331
7149
- msgid "Move To SPAM"
7150
  msgstr ""
7151
 
7152
- #: src/lib/src/Modules/Plugin/Strings.php:332
7153
- msgid "Move To Trash"
7154
  msgstr ""
7155
 
7156
- #: src/lib/src/Modules/Plugin/Strings.php:333
7157
- msgid "Block And Redirect"
7158
  msgstr ""
7159
 
7160
- #: src/lib/src/Modules/Plugin/Strings.php:334
7161
- msgid "Invisible"
 
 
7162
  msgstr ""
7163
 
7164
- #: src/lib/src/Modules/Plugin/Strings.php:335
7165
- msgid "Default Style"
 
 
7166
  msgstr ""
7167
 
7168
- #: src/lib/src/Modules/Plugin/Strings.php:336
7169
- msgid "Redirect To Home Page"
 
 
7170
  msgstr ""
7171
 
7172
- #: src/lib/src/Modules/Plugin/Strings.php:337
7173
- msgid "Return 404"
7174
  msgstr ""
7175
 
7176
- #: src/lib/src/Modules/Plugin/Strings.php:338
7177
- msgid "Die"
7178
  msgstr ""
7179
 
7180
- #: src/lib/src/Modules/Plugin/Strings.php:339
7181
- msgid "Scan Disabled"
7182
  msgstr ""
7183
 
7184
- #: src/lib/src/Modules/Plugin/Strings.php:340
7185
- msgid "Scan Enabled"
 
 
7186
  msgstr ""
7187
 
7188
- #: src/lib/src/Modules/Plugin/Strings.php:341
7189
- msgid "Automatic Scan Disabled"
7190
  msgstr ""
7191
 
7192
- #: src/lib/src/Modules/Plugin/Strings.php:342
7193
- msgid "Automatic Scan Enabled"
7194
  msgstr ""
7195
 
7196
- #: src/lib/src/Modules/Plugin/Strings.php:343
7197
- msgid "Scan Enabled - Send Email Notification"
7198
  msgstr ""
7199
 
7200
- #: src/lib/src/Modules/Plugin/Strings.php:344
7201
- msgid "Scan Enabled - No Email Notification"
7202
  msgstr ""
7203
 
7204
- #: src/lib/src/Modules/Plugin/Strings.php:345
7205
- msgid "Scan Enabled - Automatically Delete Files"
 
 
 
 
7206
  msgstr ""
7207
 
7208
  #: src/lib/src/Modules/Plugin/Strings.php:346
7209
- msgid "Scan Enabled - Delete Files and Send Email Notification"
7210
  msgstr ""
7211
 
7212
  #: src/lib/src/Modules/Plugin/Strings.php:347
7213
- msgid "Off: iFrames Not Blocked"
7214
  msgstr ""
7215
 
7216
  #: src/lib/src/Modules/Plugin/Strings.php:348
7217
- msgid "On: Allow iFrames On The Same Domain"
7218
- msgstr ""
7219
-
7220
- #: src/lib/src/Modules/Plugin/Strings.php:349
7221
- msgid "On: Block All iFrames"
7222
- msgstr ""
7223
-
7224
- #: src/lib/src/Modules/Plugin/Strings.php:350
7225
- msgid "Default: Full Referrer URL (aka 'Unsafe URL')"
7226
- msgstr ""
7227
-
7228
- #: src/lib/src/Modules/Plugin/Strings.php:351
7229
- msgid "No Referrer"
7230
- msgstr ""
7231
-
7232
- #: src/lib/src/Modules/Plugin/Strings.php:352
7233
- msgid "No Referrer When Downgrade"
7234
  msgstr ""
7235
 
7236
  #: src/lib/src/Modules/Plugin/Strings.php:353
7237
- msgid "Same Origin"
7238
  msgstr ""
7239
 
7240
  #: src/lib/src/Modules/Plugin/Strings.php:354
7241
- msgid "Origin"
7242
- msgstr ""
7243
-
7244
- #: src/lib/src/Modules/Plugin/Strings.php:355
7245
- msgid "Strict Origin"
7246
  msgstr ""
7247
 
7248
  #: src/lib/src/Modules/Plugin/Strings.php:356
7249
- msgid "Origin When Cross-Origin"
7250
  msgstr ""
7251
 
7252
  #: src/lib/src/Modules/Plugin/Strings.php:357
7253
- msgid "Strict Origin When Cross-Origin"
7254
  msgstr ""
7255
 
7256
  #: src/lib/src/Modules/Plugin/Strings.php:358
7257
- msgid "Empty Header"
7258
- msgstr ""
7259
-
7260
- #: src/lib/src/Modules/Plugin/Strings.php:359
7261
- msgid "Disabled - Don't Send This Header"
7262
- msgstr ""
7263
-
7264
- #: src/lib/src/Modules/Plugin/Strings.php:360
7265
- msgid "Minute"
7266
- msgstr ""
7267
-
7268
- #: src/lib/src/Modules/Plugin/Strings.php:361
7269
- msgid "Hour"
7270
- msgstr ""
7271
-
7272
- #: src/lib/src/Modules/Plugin/Strings.php:362
7273
- msgid "Day"
7274
  msgstr ""
7275
 
7276
  #: src/lib/src/Modules/Plugin/Strings.php:363
7277
- msgid "Week"
7278
  msgstr ""
7279
 
7280
  #: src/lib/src/Modules/Plugin/Strings.php:364
7281
- msgid "Month"
7282
  msgstr ""
7283
 
7284
  #: src/lib/src/Modules/Plugin/Strings.php:365
7285
- msgid "With Shield Bot Protection"
7286
- msgstr ""
7287
-
7288
- #: src/lib/src/Modules/Plugin/Strings.php:366
7289
- msgid "Audit Log Only"
7290
- msgstr ""
7291
-
7292
- #: src/lib/src/Modules/Plugin/Strings.php:367
7293
- msgid "Increment Offense Counter"
7294
  msgstr ""
7295
 
7296
- #: src/lib/src/Modules/Plugin/Strings.php:368
7297
- msgid "Double-Increment Offense Counter"
7298
  msgstr ""
7299
 
7300
- #: src/lib/src/Modules/Plugin/Strings.php:369
7301
- msgid "Immediate Block"
 
 
7302
  msgstr ""
7303
 
7304
- #: src/lib/src/Modules/Plugin/Strings.php:378
7305
- msgid "Security Dashboard"
7306
  msgstr ""
7307
 
7308
- #: src/lib/src/Modules/Plugin/Strings.php:379
7309
- msgid "Automatically Detect Visitor IP"
7310
  msgstr ""
7311
 
7312
  #: src/lib/src/Modules/Plugin/Strings.php:381
7313
- msgid "IP Address White List"
7314
  msgstr ""
7315
 
7316
  #: src/lib/src/Modules/Plugin/Strings.php:382
7317
- msgid ""
7318
- "Any IP addresses on this list will by-pass all Plugin Security Checking."
7319
  msgstr ""
7320
 
7321
  #: src/lib/src/Modules/Plugin/Strings.php:384
7322
- msgid "Choose IP Addresses To Blacklist"
7323
  msgstr ""
7324
 
7325
  #: src/lib/src/Modules/Plugin/Strings.php:385
7326
- #, php-format
7327
- msgid "Recommendation - %s"
7328
- msgstr ""
7329
-
7330
- #: src/lib/src/Modules/Plugin/Strings.php:386
7331
- msgid "Blacklist"
7332
- msgstr ""
7333
-
7334
- #: src/lib/src/Modules/Plugin/Strings.php:387
7335
- msgid "Logging"
7336
- msgstr ""
7337
-
7338
- #: src/lib/src/Modules/Plugin/Strings.php:388
7339
- #, php-format
7340
- msgid ""
7341
- "User \"%s\" was forcefully logged out as they were not verified by either "
7342
- "cookie or IP address (or both)."
7343
- msgstr ""
7344
-
7345
- #: src/lib/src/Modules/Plugin/Strings.php:389
7346
- #, php-format
7347
  msgid ""
7348
- "User \"%s\" was found to be un-verified at the given IP Address: \"%s\"."
7349
- msgstr ""
7350
-
7351
- #: src/lib/src/Modules/Plugin/Strings.php:390
7352
- msgid "Cookie"
7353
- msgstr ""
7354
-
7355
- #: src/lib/src/Modules/Plugin/Strings.php:392
7356
- #: src/lib/src/Tables/Build/Traffic.php:140
7357
- msgid "IP"
7358
  msgstr ""
7359
 
7360
- #: src/lib/src/Modules/Plugin/Strings.php:393
7361
- msgid ""
7362
- "This will restrict all user login sessions to a single browser. Use this if "
7363
- "your users have dynamic IP addresses."
7364
  msgstr ""
7365
 
7366
  #: src/lib/src/Modules/Plugin/Strings.php:394
7367
- msgid ""
7368
- "All users will be required to authenticate their login by email-based two-"
7369
- "factor authentication, when logging in from a new IP address"
7370
- msgstr ""
7371
-
7372
- #: src/lib/src/Modules/Plugin/Strings.php:395
7373
- msgid "2-Factor Auth"
7374
  msgstr ""
7375
 
7376
- #: src/lib/src/Modules/Plugin/Strings.php:396
7377
- msgid "Include Logged-In Users"
7378
  msgstr ""
7379
 
7380
  #: src/lib/src/Modules/Plugin/Strings.php:397
7381
- msgid "You may also enable GASP for logged in users"
7382
  msgstr ""
7383
 
7384
  #: src/lib/src/Modules/Plugin/Strings.php:398
7385
- msgid ""
7386
- "Since logged-in users would be expected to be vetted already, this is off by "
7387
- "default."
7388
- msgstr ""
7389
-
7390
- #: src/lib/src/Modules/Plugin/Strings.php:400
7391
- msgid "Protect your security plugin not just your WordPress site"
7392
  msgstr ""
7393
 
7394
  #: src/lib/src/Modules/Plugin/Strings.php:403
7395
- msgid "Get a view on what happens on your site, when it happens"
7396
- msgstr ""
7397
-
7398
  #: src/lib/src/Modules/Plugin/Strings.php:404
7399
- msgid "Audit Trail Viewer"
7400
  msgstr ""
7401
 
7402
  #: src/lib/src/Modules/Plugin/Strings.php:406
7403
- msgid "Take back full control of WordPress automatic updates"
7404
  msgstr ""
7405
 
7406
- #: src/lib/src/Modules/Plugin/Strings.php:407
7407
- msgid "Comments SPAM"
7408
  msgstr ""
7409
 
7410
- #: src/lib/src/Modules/Plugin/Strings.php:408
7411
- msgid "Block Bad IPs/Visitors"
7412
  msgstr ""
7413
 
7414
- #: src/lib/src/Modules/Plugin/Strings.php:409
7415
- msgid "Block comment SPAM and retain your privacy"
 
 
7416
  msgstr ""
7417
 
7418
- #: src/lib/src/Modules/Plugin/Strings.php:412
7419
- msgid "Automatically block malicious URLs and data sent to your site"
7420
  msgstr ""
7421
 
7422
- #: src/lib/src/Modules/Plugin/Strings.php:415
7423
- msgid "Control HTTP Security Headers"
7424
  msgstr ""
7425
 
7426
- #: src/lib/src/Modules/Plugin/Strings.php:417
7427
- msgid "Manage Visitor IP Address"
 
 
7428
  msgstr ""
7429
 
7430
- #: src/lib/src/Modules/Plugin/Strings.php:419
7431
- msgid "Harden the more loosely controlled settings of your site"
 
7432
  msgstr ""
7433
 
7434
- #: src/lib/src/Modules/Plugin/Strings.php:421
7435
- msgid ""
7436
- "Block brute force attacks and secure user identities with Two-Factor "
7437
- "Authentication"
7438
  msgstr ""
7439
 
7440
- #: src/lib/src/Modules/Plugin/Strings.php:422
7441
- msgid "Dashboard"
7442
  msgstr ""
7443
 
7444
- #: src/lib/src/Modules/Plugin/Strings.php:423
7445
- msgid "General Plugin Settings"
7446
  msgstr ""
7447
 
7448
- #: src/lib/src/Modules/Plugin/Strings.php:424
7449
- msgid "Statistics"
7450
  msgstr ""
7451
 
7452
- #: src/lib/src/Modules/Plugin/Strings.php:425
7453
- msgid "Summary of the main security actions taken by this plugin"
7454
  msgstr ""
7455
 
7456
- #: src/lib/src/Modules/Plugin/Strings.php:426
7457
- msgid "Stats Viewer"
7458
  msgstr ""
7459
 
7460
- #: src/lib/src/Modules/Plugin/Strings.php:427
7461
- msgid "Premium Support"
7462
  msgstr ""
7463
 
7464
- #: src/lib/src/Modules/Plugin/Strings.php:428
7465
- msgid "Premium Plugin Support Centre"
7466
  msgstr ""
7467
 
7468
- #: src/lib/src/Modules/Plugin/Strings.php:430
7469
- msgid ""
7470
- "Get true user sessions and control account sharing, session duration and "
7471
- "timeouts"
7472
  msgstr ""
7473
 
7474
- #: src/lib/src/Modules/Plugin/Strings.php:431
7475
- msgid "Two-Factor Authentication"
7476
  msgstr ""
7477
 
7478
- #: src/lib/src/Modules/Plugin/Strings.php:434
7479
- msgid "Dark Theme"
7480
  msgstr ""
7481
 
7482
- #: src/lib/src/Modules/Plugin/Strings.php:435
7483
- msgid "Once"
7484
  msgstr ""
7485
 
7486
- #: src/lib/src/Modules/Plugin/Strings.php:436
7487
- msgid "Twice"
7488
  msgstr ""
7489
 
7490
- #: src/lib/src/Modules/Plugin/Strings.php:437
7491
- msgid "Go To Security Dashboard"
7492
  msgstr ""
7493
 
7494
- #: src/lib/src/Modules/Plugin/Strings.php:439
7495
- msgid "None - Turn Off Malware Intelligence Network"
7496
  msgstr ""
7497
 
7498
- #: src/lib/src/Modules/Plugin/Strings.php:440
7499
- msgid "Low"
7500
  msgstr ""
7501
 
7502
- #: src/lib/src/Modules/Plugin/Strings.php:442
7503
- msgid "High"
7504
  msgstr ""
7505
 
7506
- #: src/lib/src/Modules/Plugin/Strings.php:443
7507
- msgid "Full"
7508
  msgstr ""
7509
 
7510
- #: src/lib/src/Modules/SecurityAdmin/AdminNotices.php:42
7511
- #: src/lib/src/Modules/SecurityAdmin/AdminNotices.php:67
7512
- #, php-format
7513
- msgid "%s Security Restrictions Applied"
7514
  msgstr ""
7515
 
7516
- #: src/lib/src/Modules/SecurityAdmin/AdminNotices.php:43
7517
- msgid ""
7518
- "Altering certain options has been restricted by your WordPress security "
7519
- "administrator."
7520
  msgstr ""
7521
 
7522
- #: src/lib/src/Modules/SecurityAdmin/AdminNotices.php:44
7523
- msgid ""
7524
- "Repeated failed attempts to authenticate will probably lock you out of this "
7525
- "site."
7526
  msgstr ""
7527
 
7528
- #: src/lib/src/Modules/SecurityAdmin/AdminNotices.php:50
7529
- msgid "Admin Access Login"
7530
  msgstr ""
7531
 
7532
- #: src/lib/src/Modules/SecurityAdmin/AdminNotices.php:51
7533
- #: src/lib/src/Modules/SecurityAdmin/AdminNotices.php:82
7534
- #, php-format
7535
- msgid "Go here to manage settings and authenticate with the %s plugin."
7536
  msgstr ""
7537
 
7538
- #: src/lib/src/Modules/SecurityAdmin/AdminNotices.php:68
7539
- msgid ""
7540
- "Editing existing administrators, promoting existing users to the "
7541
- "administrator role, or deleting administrator users is currently restricted."
7542
  msgstr ""
7543
 
7544
- #: src/lib/src/Modules/SecurityAdmin/AdminNotices.php:69
7545
- msgid ""
7546
- "Please authenticate with the Security Admin system before attempting any "
7547
- "administrator user modifications."
7548
  msgstr ""
7549
 
7550
- #: src/lib/src/Modules/SecurityAdmin/AdminNotices.php:73
7551
- #: src/lib/src/Modules/SecurityAdmin/AdminNotices.php:81
7552
- #: src/processors/admin_access_restriction.php:494
7553
- msgid "Security Admin Login"
7554
  msgstr ""
7555
 
7556
- #: src/lib/src/Modules/SecurityAdmin/AdminNotices.php:74
7557
- msgid "Unlock Now"
7558
  msgstr ""
7559
 
7560
- #: src/lib/src/Modules/SecurityAdmin/AjaxHandler.php:61
7561
- msgid "Security Admin Access Key Accepted."
7562
  msgstr ""
7563
 
7564
- #: src/lib/src/Modules/SecurityAdmin/AjaxHandler.php:62
7565
- msgid "Please wait"
7566
  msgstr ""
7567
 
7568
- #: src/lib/src/Modules/SecurityAdmin/AjaxHandler.php:65
7569
- msgid "Failed to process key - you may need to re-login to WordPress."
7570
  msgstr ""
7571
 
7572
- #: src/lib/src/Modules/SecurityAdmin/AjaxHandler.php:74
7573
- msgid "Security access key incorrect."
7574
  msgstr ""
7575
 
7576
- #: src/lib/src/Modules/SecurityAdmin/AjaxHandler.php:76
7577
- #, php-format
7578
- msgid "Attempts remaining: %s."
7579
  msgstr ""
7580
 
7581
- #: src/lib/src/Modules/SecurityAdmin/AjaxHandler.php:79
7582
- msgid "No attempts remaining."
7583
  msgstr ""
7584
 
7585
- #: src/lib/src/Modules/SecurityAdmin/AjaxHandler.php:115
7586
- msgid "Enter your Security Admin Access Key"
7587
  msgstr ""
7588
 
7589
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:15
7590
- msgid "Successful authentication using security admin key."
7591
  msgstr ""
7592
 
7593
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:18
7594
- msgid "Failed authentication using security admin key."
7595
  msgstr ""
7596
 
7597
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:37
7598
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:46
7599
- msgid ""
7600
- "Restricts access to this plugin preventing unauthorized changes to your "
7601
- "security settings."
7602
  msgstr ""
7603
 
7604
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:39
7605
- msgid "You need to also enter a new Access Key to enable this feature."
7606
  msgstr ""
7607
 
7608
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:44
7609
- msgid "Security Admin Restriction Settings"
7610
  msgstr ""
7611
 
7612
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:49
7613
- msgid "Security Admin Settings"
7614
  msgstr ""
7615
 
7616
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:53
7617
- msgid "Security Admin Restriction Zones"
7618
  msgstr ""
7619
 
7620
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:55
7621
- msgid ""
7622
- "Restricts access to key WordPress areas for all users not authenticated with "
7623
- "the Security Admin Access system."
7624
  msgstr ""
7625
 
7626
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:58
7627
- msgid "Access Restriction Zones"
7628
  msgstr ""
7629
 
7630
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:66
7631
- #, php-format
7632
- msgid "Rename and re-brand the %s plugin for your client site installations."
7633
  msgstr ""
7634
 
7635
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:71
7636
- msgid "The Security Admin system must be active for these settings to apply."
7637
  msgstr ""
7638
 
7639
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:103
7640
- msgid "Enforce Security Admin Access Restriction"
7641
  msgstr ""
7642
 
7643
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:104
7644
- msgid ""
7645
- "Enable this with great care and consideration. Ensure that you set a key "
7646
- "that you have set an access key that you will remember."
7647
  msgstr ""
7648
 
7649
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:108
7650
- msgid "Security Admin Access Key"
7651
  msgstr ""
7652
 
7653
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:109
7654
- msgid "Provide/Update Security Admin Access Key"
7655
  msgstr ""
7656
 
7657
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:110
7658
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:138
7659
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:145
7660
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:152
7661
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:158
7662
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:164
7663
- msgid "Careful"
7664
  msgstr ""
7665
 
7666
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:110
7667
- msgid ""
7668
- "If you forget this, you could potentially lock yourself out from using this "
7669
- "plugin."
7670
  msgstr ""
7671
 
7672
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:111
7673
- msgid "Security Key Currently Set"
7674
  msgstr ""
7675
 
7676
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:111
7677
- msgid "Security Key NOT Currently Set"
7678
  msgstr ""
7679
 
7680
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:112
7681
- #, php-format
7682
- msgid "To delete the current security key, type exactly \"%s\" and save."
7683
  msgstr ""
7684
 
7685
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:116
7686
- msgid "Security Admins"
7687
  msgstr ""
7688
 
7689
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:117
7690
- msgid "Persistent Security Admins"
7691
  msgstr ""
7692
 
7693
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:118
7694
- msgid ""
7695
- "Users provided will be security admins automatically, without needing the "
7696
- "security key."
7697
  msgstr ""
7698
 
7699
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:119
7700
- msgid "Enter admin username, email or ID."
 
7701
  msgstr ""
7702
 
7703
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:119
7704
- msgid "1 entry per-line."
 
 
7705
  msgstr ""
7706
 
7707
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:120
7708
- msgid "Verified users will be converted to usernames."
 
7709
  msgstr ""
7710
 
7711
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:124
7712
- msgid "Security Admin Timeout"
 
7713
  msgstr ""
7714
 
7715
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:125
7716
- msgid "Specify An Automatic Timeout Interval For Security Admin Access"
7717
  msgstr ""
7718
 
7719
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:126
7720
- msgid "This will automatically expire your Security Admin Session."
7721
  msgstr ""
7722
 
7723
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:136
7724
- msgid "Pages"
7725
  msgstr ""
7726
 
7727
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:137
7728
- msgid "Restrict Access To Key WordPress Posts And Pages Actions"
7729
  msgstr ""
7730
 
7731
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:138
7732
- msgid "This will restrict access to page/post creation, editing and deletion."
7733
  msgstr ""
7734
 
7735
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:139
7736
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:146
7737
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:169
 
 
7738
  #, php-format
7739
- msgid "Selecting \"%s\" will also restrict all other options."
7740
  msgstr ""
7741
 
7742
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:139
7743
- msgid "Edit"
7744
  msgstr ""
7745
 
7746
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:144
7747
- msgid "Restrict Access To Key WordPress Plugin Actions"
7748
  msgstr ""
7749
 
7750
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:145
 
7751
  msgid ""
7752
- "This will restrict access to plugin installation, update, activation and "
7753
- "deletion."
7754
  msgstr ""
7755
 
7756
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:150
7757
- msgid "WordPress Options"
 
 
7758
  msgstr ""
7759
 
7760
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:151
7761
- msgid "Restrict Access To Certain WordPress Admin Options"
7762
  msgstr ""
7763
 
7764
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:152
 
 
 
 
 
 
7765
  msgid ""
7766
- "This will restrict the ability of WordPress administrators from changing key "
7767
- "WordPress settings."
7768
  msgstr ""
7769
 
7770
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:156
7771
- msgid "Admin Users"
 
 
7772
  msgstr ""
7773
 
7774
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:157
7775
- msgid "Restrict Access To Create/Delete/Modify Other Admin Users"
7776
  msgstr ""
7777
 
7778
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:158
7779
- msgid ""
7780
- "This will restrict the ability of WordPress administrators from creating, "
7781
- "modifying or promoting other administrators."
7782
  msgstr ""
7783
 
7784
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:163
7785
- msgid "Restrict Access To WordPress Theme Actions"
7786
  msgstr ""
7787
 
7788
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:164
7789
  msgid ""
7790
- "This will restrict access to theme installation, update, activation and "
7791
- "deletion."
7792
  msgstr ""
7793
 
7794
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:171
7795
- #, php-format
7796
- msgid "%s and %s"
7797
  msgstr ""
7798
 
7799
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:180
7800
- msgid "Enable"
7801
  msgstr ""
7802
 
7803
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:181
7804
- msgid "Activate Your White Label Settings"
7805
  msgstr ""
7806
 
7807
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:182
7808
- msgid "Turn on/off the application of your White Label settings."
7809
  msgstr ""
7810
 
7811
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:185
7812
- msgid "Hide Updates"
7813
  msgstr ""
7814
 
7815
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:186
7816
- msgid "Hide Plugin Updates From Non-Security Admins"
7817
  msgstr ""
7818
 
7819
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:187
7820
- #, php-format
7821
- msgid "Hide available %s updates from non-security administrators."
7822
  msgstr ""
7823
 
7824
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:190
7825
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:197
7826
- msgid "Plugin Name"
7827
  msgstr ""
7828
 
7829
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:191
7830
- msgid "The Name Of The Plugin"
7831
  msgstr ""
7832
 
7833
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:192
7834
- msgid "The name of the plugin that will be displayed to your site users."
7835
  msgstr ""
7836
 
7837
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:195
7838
- msgid "Menu Title"
7839
  msgstr ""
7840
 
7841
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:196
7842
- msgid "The Main Menu Title Of The Plugin"
7843
  msgstr ""
7844
 
7845
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:197
7846
- #, php-format
7847
  msgid ""
7848
- "The Main Menu Title Of The Plugin. If left empty, the \"%s\" will be used."
 
7849
  msgstr ""
7850
 
7851
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:200
7852
- msgid "Company Name"
7853
  msgstr ""
7854
 
7855
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:201
7856
- msgid "The Name Of Your Company"
7857
  msgstr ""
7858
 
7859
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:202
7860
- msgid "Provide the name of your company."
7861
  msgstr ""
7862
 
7863
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:206
7864
- msgid "The Description Of The Plugin"
7865
  msgstr ""
7866
 
7867
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:207
7868
- msgid "The description of the plugin displayed on the plugins page."
7869
  msgstr ""
7870
 
7871
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:210
7872
- msgid "Home URL"
7873
  msgstr ""
7874
 
7875
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:211
7876
- msgid "Plugin Home Page URL"
 
 
 
 
 
7877
  msgstr ""
7878
 
7879
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:212
7880
  msgid ""
7881
- "When a user clicks the home link for this plugin, this is where they'll be "
7882
- "directed."
7883
  msgstr ""
7884
 
7885
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:215
7886
- msgid "Menu Icon"
7887
  msgstr ""
7888
 
7889
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:216
7890
- msgid "Menu Icon URL"
7891
  msgstr ""
7892
 
7893
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:217
7894
- msgid "The URL of the icon to display in the menu."
7895
  msgstr ""
7896
 
7897
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:218
7898
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:224
7899
- #, php-format
7900
- msgid "The %s should measure %s."
7901
  msgstr ""
7902
 
7903
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:218
7904
- msgid "icon"
7905
  msgstr ""
7906
 
7907
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:221
7908
- msgid "Dashboard Logo"
7909
  msgstr ""
7910
 
7911
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:222
7912
- msgid "Dashboard Logo URL"
7913
  msgstr ""
7914
 
7915
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:223
7916
- msgid "The URL of the logo to display in the admin pages."
7917
  msgstr ""
7918
 
7919
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:224
7920
- msgid "logo"
7921
  msgstr ""
7922
 
7923
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:227
7924
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:228
7925
- msgid "2FA Login Logo URL"
7926
  msgstr ""
7927
 
7928
- #: src/lib/src/Modules/SecurityAdmin/Strings.php:229
7929
- msgid ""
7930
- "The URL of the logo to display on the Two-Factor Authentication login page."
7931
  msgstr ""
7932
 
7933
- #: src/lib/src/Modules/Sessions/Strings.php:23
7934
- msgid "Creates and Manages User Sessions."
 
7935
  msgstr ""
7936
 
7937
- #: src/lib/src/Modules/Statistics/Strings.php:23
7938
- msgid "Helps you see at a glance how effective the plugin has been."
 
7939
  msgstr ""
7940
 
7941
- #: src/lib/src/Modules/Statistics/Strings.php:32
7942
- msgid "To track stats and issue reports."
7943
  msgstr ""
7944
 
7945
- #: src/lib/src/Modules/Statistics/Strings.php:38
7946
- msgid "Statistics Sharing"
 
 
7947
  msgstr ""
7948
 
7949
- #: src/lib/src/Modules/Statistics/Strings.php:40
7950
  msgid ""
7951
- "Help us to provide globally accessible statistics on the effectiveness of "
7952
- "the plugin."
7953
  msgstr ""
7954
 
7955
- #: src/lib/src/Modules/Statistics/Strings.php:41
7956
- msgid "Enabling this option helps us improve our plugin over time."
7957
  msgstr ""
7958
 
7959
- #: src/lib/src/Modules/Statistics/Strings.php:42
7960
- msgid "All statistics data collection is 100% anonymous."
7961
  msgstr ""
7962
 
7963
- #: src/lib/src/Modules/Statistics/Strings.php:42
7964
- msgid ""
7965
- "Neither we nor anyone else will be able to trace the data back to the "
7966
- "originating site."
7967
  msgstr ""
7968
 
7969
- #: src/lib/src/Modules/Statistics/Strings.php:45
7970
- msgid "Sharing"
7971
  msgstr ""
7972
 
7973
- #: src/lib/src/Modules/Traffic/Strings.php:15
7974
- #, php-format
7975
- msgid "Visitor exceeded the maximum allowable requests (%s) within %s seconds."
7976
  msgstr ""
7977
 
7978
- #: src/lib/src/Modules/Traffic/Strings.php:34
7979
- msgid "Monitor and review all requests to your site."
7980
  msgstr ""
7981
 
7982
- #: src/lib/src/Modules/Traffic/Strings.php:35
 
 
 
 
7983
  msgid ""
7984
- "Required only if you need to review and investigate and monitor requests to "
7985
- "your site"
7986
  msgstr ""
7987
 
7988
- #: src/lib/src/Modules/Traffic/Strings.php:40
7989
- msgid "Traffic Watch Options"
 
 
7990
  msgstr ""
7991
 
7992
- #: src/lib/src/Modules/Traffic/Strings.php:42
7993
- msgid "Provides finer control over the Traffic Watch system."
7994
  msgstr ""
7995
 
7996
- #: src/lib/src/Modules/Traffic/Strings.php:45
7997
- msgid "Traffic Logging Options"
7998
  msgstr ""
7999
 
8000
- #: src/lib/src/Modules/Traffic/Strings.php:49
8001
- msgid "Traffic Limiter"
8002
  msgstr ""
8003
 
8004
- #: src/lib/src/Modules/Traffic/Strings.php:50
8005
- msgid "Brute Force Traffic Limiter"
8006
  msgstr ""
8007
 
8008
- #: src/lib/src/Modules/Traffic/Strings.php:52
8009
- msgid "Provides ability to restrict excessive requests from a single visitor."
8010
  msgstr ""
8011
 
8012
- #: src/lib/src/Modules/Traffic/Strings.php:54
8013
- msgid "Use this feature with care."
8014
  msgstr ""
8015
 
8016
- #: src/lib/src/Modules/Traffic/Strings.php:55
8017
- msgid ""
8018
- "You could block legitimate visitors who load many pages in quick succession "
8019
- "on your site."
8020
  msgstr ""
8021
 
8022
- #: src/lib/src/Modules/Traffic/Strings.php:89
8023
- msgid "Traffic Log Exclusions"
 
 
8024
  msgstr ""
8025
 
8026
- #: src/lib/src/Modules/Traffic/Strings.php:90
8027
- msgid "Select Which Types Of Requests To Exclude"
8028
  msgstr ""
8029
 
8030
- #: src/lib/src/Modules/Traffic/Strings.php:91
8031
- msgid ""
8032
- "Select request types that you don't want to appear in the traffic viewer."
8033
  msgstr ""
8034
 
8035
- #: src/lib/src/Modules/Traffic/Strings.php:92
8036
- msgid ""
8037
- "If a request matches any exclusion rule, it will not show on the traffic "
8038
- "viewer."
8039
  msgstr ""
8040
 
8041
- #: src/lib/src/Modules/Traffic/Strings.php:96
8042
- msgid "Custom Exclusions"
8043
  msgstr ""
8044
 
8045
- #: src/lib/src/Modules/Traffic/Strings.php:97
8046
- msgid "Provide Custom Traffic Exclusions"
8047
  msgstr ""
8048
 
8049
- #: src/lib/src/Modules/Traffic/Strings.php:98
8050
  msgid ""
8051
- "For each entry, if the text is present in either the User Agent or request "
8052
- "Path, it will be excluded."
8053
  msgstr ""
8054
 
8055
- #: src/lib/src/Modules/Traffic/Strings.php:99
8056
- msgid "Take a new line for each entry."
8057
  msgstr ""
8058
 
8059
- #: src/lib/src/Modules/Traffic/Strings.php:100
8060
- msgid "Comparisons are case-insensitive."
 
 
8061
  msgstr ""
8062
 
8063
- #: src/lib/src/Modules/Traffic/Strings.php:104
8064
- msgid "Auto Expiry Cleaning"
8065
  msgstr ""
8066
 
8067
- #: src/lib/src/Modules/Traffic/Strings.php:105
8068
- msgid "Enable Traffic Log Auto Expiry"
8069
  msgstr ""
8070
 
8071
- #: src/lib/src/Modules/Traffic/Strings.php:106
8072
- msgid "DB cleanup will delete logs older than this maximum value (in days)."
8073
  msgstr ""
8074
 
8075
- #: src/lib/src/Modules/Traffic/Strings.php:110
8076
- msgid "Max Log Length"
8077
  msgstr ""
8078
 
8079
- #: src/lib/src/Modules/Traffic/Strings.php:111
8080
- msgid "Maximum Traffic Log Length To Keep"
8081
  msgstr ""
8082
 
8083
- #: src/lib/src/Modules/Traffic/Strings.php:112
8084
- msgid "DB cleanup will delete logs to maintain this maximum number of records."
8085
  msgstr ""
8086
 
8087
- #: src/lib/src/Modules/Traffic/Strings.php:116
8088
- msgid "Max Request Limit"
8089
  msgstr ""
8090
 
8091
- #: src/lib/src/Modules/Traffic/Strings.php:117
8092
- msgid "Maximum Number Of Requests Allowed In Time Limit"
8093
  msgstr ""
8094
 
8095
- #: src/lib/src/Modules/Traffic/Strings.php:118
 
 
 
 
8096
  msgid ""
8097
- "The maximum number of requests that are allowed in the given request time "
8098
- "limit."
8099
  msgstr ""
8100
 
8101
- #: src/lib/src/Modules/Traffic/Strings.php:119
 
 
 
 
8102
  msgid ""
8103
- "Any visitor that exceeds this number of requests in the given time period "
8104
- "will register an offense against their IP address."
8105
  msgstr ""
8106
 
8107
- #: src/lib/src/Modules/Traffic/Strings.php:120
8108
- msgid "Enough offenses will result in a ban of the IP address."
 
8109
  msgstr ""
8110
 
8111
- #: src/lib/src/Modules/Traffic/Strings.php:124
8112
- msgid "Request Limit Time Interval"
8113
  msgstr ""
8114
 
8115
- #: src/lib/src/Modules/Traffic/Strings.php:125
8116
- msgid "The Time Interval To Test For Excessive Requests"
8117
  msgstr ""
8118
 
8119
- #: src/lib/src/Modules/Traffic/Strings.php:126
8120
  msgid ""
8121
- "The time period within which to monitor for multiple requests that exceed "
8122
- "the max request limit."
8123
  msgstr ""
8124
 
8125
- #: src/lib/src/Modules/Traffic/Strings.php:127
8126
- msgid "Interval is measured in seconds."
8127
  msgstr ""
8128
 
8129
- #: src/lib/src/Modules/Traffic/Strings.php:128
8130
- #: src/lib/src/Modules/Traffic/Strings.php:130
8131
- msgid "Example"
 
8132
  msgstr ""
8133
 
8134
- #: src/lib/src/Modules/Traffic/Strings.php:129
8135
- #: src/lib/src/Modules/Traffic/Strings.php:131
8136
- #, php-format
8137
- msgid "Use %s to test for excessive requests within a %s minutes interval."
8138
  msgstr ""
8139
 
8140
- #: src/lib/src/Modules/Traffic/Strings.php:135
8141
- msgid "Auto Disable"
8142
  msgstr ""
8143
 
8144
- #: src/lib/src/Modules/Traffic/Strings.php:136
8145
- msgid "Auto Disable Traffic Logging After 1 Week"
8146
  msgstr ""
8147
 
8148
- #: src/lib/src/Modules/Traffic/Strings.php:139
8149
- #, php-format
8150
- msgid "Auto Disable At: %s"
 
8151
  msgstr ""
8152
 
8153
- #: src/lib/src/Modules/Traffic/Strings.php:144
8154
- msgid "Turn on to prevent unnecessary long-term traffic logging."
8155
  msgstr ""
8156
 
8157
- #: src/lib/src/Modules/Traffic/Strings.php:145
8158
- msgid "Timer resets after options save."
8159
  msgstr ""
8160
 
8161
- #: src/lib/src/Modules/UserManagement/AjaxHandler.php:84
8162
- #: src/lib/src/Modules/UserManagement/AjaxHandler.php:122
8163
- msgid "Please logout if you want to delete your own session."
8164
  msgstr ""
8165
 
8166
- #: src/lib/src/Modules/UserManagement/AjaxHandler.php:99
8167
- msgid "Your session was retained"
8168
  msgstr ""
8169
 
8170
- #: src/lib/src/Modules/UserManagement/AjaxHandler.php:119
8171
- msgid "Invalid session selected"
8172
  msgstr ""
8173
 
8174
- #: src/lib/src/Modules/UserManagement/AjaxHandler.php:125
8175
- msgid "User session deleted"
8176
  msgstr ""
8177
 
8178
- #: src/lib/src/Modules/UserManagement/AjaxHandler.php:129
8179
- msgid "User session wasn't deleted"
8180
  msgstr ""
8181
 
8182
- #: src/lib/src/Modules/UserManagement/Strings.php:15
8183
- msgid "Current User Sessions"
8184
  msgstr ""
8185
 
8186
- #: src/lib/src/Modules/UserManagement/Strings.php:17
8187
- msgid "Logged In At"
 
 
 
 
8188
  msgstr ""
8189
 
8190
- #: src/lib/src/Modules/UserManagement/Strings.php:18
8191
- #: src/lib/src/Tables/Render/Sessions.php:37
8192
- msgid "Last Activity At"
8193
  msgstr ""
8194
 
8195
- #: src/lib/src/Modules/UserManagement/Strings.php:19
8196
- msgid "Last Activity URI"
8197
  msgstr ""
8198
 
8199
- #: src/lib/src/Modules/UserManagement/Strings.php:20
8200
- msgid "Login IP"
8201
  msgstr ""
8202
 
8203
- #: src/lib/src/Modules/UserManagement/Strings.php:21
8204
- msgid ""
8205
- "You need to enable the User Management feature to view and manage user "
8206
- "sessions."
8207
  msgstr ""
8208
 
8209
- #: src/lib/src/Modules/UserManagement/Strings.php:39
8210
- msgid ""
8211
- "User Management offers real user sessions, finer control over user session "
8212
- "time-out, and ensures users have logged-in in a correct manner."
8213
  msgstr ""
8214
 
8215
- #: src/lib/src/Modules/UserManagement/Strings.php:48
8216
- msgid "Have full control over passwords used by users on the site."
8217
  msgstr ""
8218
 
8219
- #: src/lib/src/Modules/UserManagement/Strings.php:50
8220
- msgid "Requirements"
8221
  msgstr ""
8222
 
8223
- #: src/lib/src/Modules/UserManagement/Strings.php:55
8224
- msgid "Admin Login Notification"
8225
  msgstr ""
8226
 
8227
- #: src/lib/src/Modules/UserManagement/Strings.php:57
8228
- msgid ""
8229
- "So you can be made aware of when a WordPress administrator has logged into "
8230
- "your site when you are not expecting it."
8231
  msgstr ""
8232
 
8233
- #: src/lib/src/Modules/UserManagement/Strings.php:60
8234
- msgid "Notifications"
8235
  msgstr ""
8236
 
8237
- #: src/lib/src/Modules/UserManagement/Strings.php:64
8238
- msgid "Multi-Factor User Authentication"
 
 
8239
  msgstr ""
8240
 
8241
- #: src/lib/src/Modules/UserManagement/Strings.php:73
8242
- msgid "User Session Management"
 
 
8243
  msgstr ""
8244
 
8245
- #: src/lib/src/Modules/UserManagement/Strings.php:75
8246
  msgid ""
8247
- "Allows you to better control user sessions on your site and expire idle "
8248
- "sessions and prevent account sharing."
8249
  msgstr ""
8250
 
8251
- #: src/lib/src/Modules/UserManagement/Strings.php:78
8252
- msgid "Session Options"
8253
  msgstr ""
8254
 
8255
- #: src/lib/src/Modules/UserManagement/Strings.php:82
8256
- msgid "User Suspension"
 
 
8257
  msgstr ""
8258
 
8259
- #: src/lib/src/Modules/UserManagement/Strings.php:83
8260
- msgid "Automatic And Manual User Suspension"
 
 
8261
  msgstr ""
8262
 
8263
- #: src/lib/src/Modules/UserManagement/Strings.php:85
8264
- msgid "Automatically suspends accounts to prevent login by certain users."
 
 
8265
  msgstr ""
8266
 
8267
- #: src/lib/src/Modules/UserManagement/Strings.php:119
8268
- msgid "Admin Login Notification Email"
 
 
8269
  msgstr ""
8270
 
8271
- #: src/lib/src/Modules/UserManagement/Strings.php:120
8272
- msgid "Send An Notification Email When Administrator Logs In"
8273
  msgstr ""
8274
 
8275
- #: src/lib/src/Modules/UserManagement/Strings.php:121
8276
- msgid ""
8277
- "If you would like to be notified every time an administrator user logs into "
8278
- "this WordPress site, enter a notification email address."
8279
  msgstr ""
8280
 
8281
- #: src/lib/src/Modules/UserManagement/Strings.php:122
8282
- msgid "No email address - No Notification."
8283
  msgstr ""
8284
 
8285
- #: src/lib/src/Modules/UserManagement/Strings.php:123
8286
- msgid "Pro customers may provide multiple email address, separated by commas."
8287
  msgstr ""
8288
 
8289
- #: src/lib/src/Modules/UserManagement/Strings.php:127
8290
- msgid "User Login Notification Email"
 
8291
  msgstr ""
8292
 
8293
- #: src/lib/src/Modules/UserManagement/Strings.php:128
8294
- msgid "Send Email Notification To Each User Upon Successful Login"
8295
  msgstr ""
8296
 
8297
- #: src/lib/src/Modules/UserManagement/Strings.php:129
8298
  msgid ""
8299
- "A notification is sent to each user when a successful login occurs for their "
8300
- "account."
8301
  msgstr ""
8302
 
8303
- #: src/lib/src/Modules/UserManagement/Strings.php:133
8304
- msgid "Session Timeout"
 
 
 
 
 
 
 
 
8305
  msgstr ""
8306
 
8307
- #: src/lib/src/Modules/UserManagement/Strings.php:134
8308
- msgid "Specify How Many Days After Login To Automatically Force Re-Login"
8309
  msgstr ""
8310
 
8311
- #: src/lib/src/Modules/UserManagement/Strings.php:135
8312
- msgid ""
8313
- "WordPress default is 2 days, or 14 days if you check the \"Remember Me\" box."
8314
  msgstr ""
8315
 
8316
- #: src/lib/src/Modules/UserManagement/Strings.php:136
8317
- msgid "Think of this as an absolute maximum possible session length."
8318
  msgstr ""
8319
 
8320
- #: src/lib/src/Modules/UserManagement/Strings.php:137
8321
- #, php-format
8322
- msgid "This cannot be less than %s."
8323
  msgstr ""
8324
 
8325
- #: src/lib/src/Modules/UserManagement/Strings.php:142
8326
- msgid "Idle Timeout"
8327
  msgstr ""
8328
 
8329
- #: src/lib/src/Modules/UserManagement/Strings.php:143
8330
- msgid "Specify How Many Hours After Inactivity To Automatically Logout User"
 
8331
  msgstr ""
8332
 
8333
- #: src/lib/src/Modules/UserManagement/Strings.php:144
8334
- msgid ""
8335
- "If the user is inactive for the number of hours specified, they will be "
8336
- "forcefully logged out next time they return."
8337
  msgstr ""
8338
 
8339
- #: src/lib/src/Modules/UserManagement/Strings.php:145
8340
  #, php-format
8341
- msgid "Set to %s to turn off this option."
 
8342
  msgstr ""
8343
 
8344
- #: src/lib/src/Modules/UserManagement/Strings.php:149
8345
- msgid "Lock To Location"
8346
  msgstr ""
8347
 
8348
- #: src/lib/src/Modules/UserManagement/Strings.php:150
8349
- msgid "Locks A User Session To IP address"
 
 
8350
  msgstr ""
8351
 
8352
- #: src/lib/src/Modules/UserManagement/Strings.php:151
8353
  msgid ""
8354
- "When selected, a session is restricted to the same IP address as when the "
8355
- "user logged in."
 
 
 
 
8356
  msgstr ""
8357
 
8358
- #: src/lib/src/Modules/UserManagement/Strings.php:152
 
8359
  msgid ""
8360
- "If a logged-in user's IP address changes, the session will be invalidated "
8361
- "and they'll be forced to re-login to WordPress."
8362
  msgstr ""
8363
 
8364
- #: src/lib/src/Modules/UserManagement/Strings.php:156
8365
- msgid "Max Simultaneous Sessions"
8366
  msgstr ""
8367
 
8368
- #: src/lib/src/Modules/UserManagement/Strings.php:157
8369
- msgid "Limit Simultaneous Sessions For The Same Username"
 
 
8370
  msgstr ""
8371
 
8372
- #: src/lib/src/Modules/UserManagement/Strings.php:158
8373
  msgid ""
8374
- "The number provided here is the maximum number of simultaneous, distinct, "
8375
- "sessions allowed for any given username."
8376
  msgstr ""
8377
 
8378
- #: src/lib/src/Modules/UserManagement/Strings.php:159
8379
- msgid "Zero (0) will allow unlimited simultaneous sessions."
8380
  msgstr ""
8381
 
8382
- #: src/lib/src/Modules/UserManagement/Strings.php:163
8383
- msgid "Enable Password Policies"
 
8384
  msgstr ""
8385
 
8386
- #: src/lib/src/Modules/UserManagement/Strings.php:164
8387
- msgid "Enable The Password Policies Detailed Below"
 
8388
  msgstr ""
8389
 
8390
- #: src/lib/src/Modules/UserManagement/Strings.php:165
8391
- msgid "Turn on/off all password policy settings."
8392
  msgstr ""
8393
 
8394
- #: src/lib/src/Modules/UserManagement/Strings.php:169
8395
- msgid "Prevent Pwned Passwords"
8396
  msgstr ""
8397
 
8398
- #: src/lib/src/Modules/UserManagement/Strings.php:170
8399
- msgid "Prevent Use Of \"Pwned\" Passwords"
 
 
 
 
8400
  msgstr ""
8401
 
8402
- #: src/lib/src/Modules/UserManagement/Strings.php:171
8403
  msgid ""
8404
- "Prevents users from using any passwords found on the public available list "
8405
- "of \"pwned\" passwords."
8406
  msgstr ""
8407
 
8408
- #: src/lib/src/Modules/UserManagement/Strings.php:175
8409
- msgid "Minimum Length"
8410
  msgstr ""
8411
 
8412
- #: src/lib/src/Modules/UserManagement/Strings.php:176
8413
- msgid "Minimum Password Length"
8414
  msgstr ""
8415
 
8416
- #: src/lib/src/Modules/UserManagement/Strings.php:177
8417
- msgid ""
8418
- "All passwords that a user sets must be at least this many characters in "
8419
- "length."
8420
  msgstr ""
8421
 
8422
- #: src/lib/src/Modules/UserManagement/Strings.php:178
8423
- #: src/lib/src/Modules/UserManagement/Strings.php:198
8424
- #: src/lib/src/Modules/UserManagement/Strings.php:223
8425
- msgid "Set to Zero(0) to disable."
8426
  msgstr ""
8427
 
8428
- #: src/lib/src/Modules/UserManagement/Strings.php:182
8429
- msgid "Minimum Strength"
8430
  msgstr ""
8431
 
8432
- #: src/lib/src/Modules/UserManagement/Strings.php:183
8433
- msgid "Minimum Password Strength"
 
 
 
8434
  msgstr ""
8435
 
8436
- #: src/lib/src/Modules/UserManagement/Strings.php:184
8437
- msgid "All passwords that a user sets must meet this minimum strength."
8438
  msgstr ""
8439
 
8440
- #: src/lib/src/Modules/UserManagement/Strings.php:188
8441
- msgid "Apply To Existing Users"
8442
  msgstr ""
8443
 
8444
- #: src/lib/src/Modules/UserManagement/Strings.php:189
8445
- msgid "Apply Password Policies To Existing Users and Their Passwords"
8446
  msgstr ""
8447
 
8448
- #: src/lib/src/Modules/UserManagement/Strings.php:190
8449
  msgid ""
8450
- "Forces existing users to update their passwords if they don't meet "
8451
- "requirements, after they next login."
8452
  msgstr ""
8453
 
8454
- #: src/lib/src/Modules/UserManagement/Strings.php:191
8455
- msgid "Note: You may want to warn users prior to enabling this option."
8456
  msgstr ""
8457
 
8458
- #: src/lib/src/Modules/UserManagement/Strings.php:195
8459
- msgid "Password Expiration"
 
8460
  msgstr ""
8461
 
8462
- #: src/lib/src/Modules/UserManagement/Strings.php:196
8463
- msgid "Passwords Expire After This Many Days"
8464
  msgstr ""
8465
 
8466
- #: src/lib/src/Modules/UserManagement/Strings.php:197
8467
- msgid ""
8468
- "Users will be forced to reset their passwords after the number of days "
8469
- "specified."
8470
  msgstr ""
8471
 
8472
- #: src/lib/src/Modules/UserManagement/Strings.php:202
8473
- msgid "Allow Manual User Suspension"
 
 
8474
  msgstr ""
8475
 
8476
- #: src/lib/src/Modules/UserManagement/Strings.php:203
8477
- msgid "Manually Suspend User Accounts To Prevent Login"
8478
  msgstr ""
8479
 
8480
- #: src/lib/src/Modules/UserManagement/Strings.php:204
8481
- msgid "Users may be suspended by administrators to prevent future login."
 
 
 
 
 
8482
  msgstr ""
8483
 
8484
- #: src/lib/src/Modules/UserManagement/Strings.php:208
8485
- msgid "Auto-Suspend Expired Passwords"
 
 
8486
  msgstr ""
8487
 
8488
- #: src/lib/src/Modules/UserManagement/Strings.php:209
8489
- msgid "Automatically Suspend Users With Expired Passwords"
8490
  msgstr ""
8491
 
8492
- #: src/lib/src/Modules/UserManagement/Strings.php:210
8493
- msgid ""
8494
- "Automatically suspends login by users and requires password reset to "
8495
- "unsuspend."
8496
  msgstr ""
8497
 
8498
- #: src/lib/src/Modules/UserManagement/Strings.php:214
8499
- msgid "Requires password expiration policy to be set."
 
8500
  msgstr ""
8501
 
8502
- #: src/lib/src/Modules/UserManagement/Strings.php:219
8503
- msgid "Auto-Suspend Idle Users"
8504
  msgstr ""
8505
 
8506
- #: src/lib/src/Modules/UserManagement/Strings.php:220
8507
- msgid "Automatically Suspend Idle User Accounts"
8508
  msgstr ""
8509
 
8510
- #: src/lib/src/Modules/UserManagement/Strings.php:221
8511
- msgid ""
8512
- "Automatically suspends login for idle accounts and requires password reset "
8513
- "to unsuspend."
8514
  msgstr ""
8515
 
8516
- #: src/lib/src/Modules/UserManagement/Strings.php:222
8517
- msgid "Specify the number of days since last login to consider a user as idle."
 
 
8518
  msgstr ""
8519
 
8520
- #: src/lib/src/Modules/UserManagement/Strings.php:227
8521
- msgid "Auto-Suspend Idle User Roles"
8522
  msgstr ""
8523
 
8524
- #: src/lib/src/Modules/UserManagement/Strings.php:228
8525
- msgid "Apply Automatic Suspension To Accounts With These Roles"
8526
  msgstr ""
8527
 
8528
- #: src/lib/src/Modules/UserManagement/Strings.php:229
8529
- msgid ""
8530
- "Automatic suspension for idle accounts applies only to the roles you specify."
8531
  msgstr ""
8532
 
8533
- #: src/lib/src/Modules/UserManagement/Strings.php:253
8534
- msgid "Forcing user to update expired password."
8535
  msgstr ""
8536
 
8537
- #: src/lib/src/Modules/UserManagement/Strings.php:256
8538
- msgid "Forcing user to update password that fails to meet policies."
8539
  msgstr ""
8540
 
8541
- #: src/lib/src/Modules/UserManagement/Strings.php:259
8542
- msgid "Blocked attempted password update that failed policy requirements."
8543
  msgstr ""
8544
 
8545
- #: src/lib/src/Modules/UserManagement/Strings.php:262
8546
- msgid "Valid user session could not be found."
8547
  msgstr ""
8548
 
8549
- #: src/lib/src/Modules/UserManagement/Strings.php:263
8550
- #: src/lib/src/Modules/UserManagement/Strings.php:267
8551
- #: src/lib/src/Modules/UserManagement/Strings.php:271
8552
- #: src/lib/src/Modules/UserManagement/Strings.php:275
8553
- #: src/lib/src/Modules/UserManagement/Strings.php:279
8554
- #: src/lib/src/Modules/UserManagement/Strings.php:283
8555
- msgid "Logging out."
8556
  msgstr ""
8557
 
8558
- #: src/lib/src/Modules/UserManagement/Strings.php:266
8559
- msgid "User session has expired."
 
 
8560
  msgstr ""
8561
 
8562
- #: src/lib/src/Modules/UserManagement/Strings.php:270
8563
- msgid "User session has expired due to inactivity."
 
8564
  msgstr ""
8565
 
8566
- #: src/lib/src/Modules/UserManagement/Strings.php:274
8567
- msgid "Access to an established user session from a different IP address."
8568
  msgstr ""
8569
 
8570
- #: src/lib/src/Modules/UserManagement/Strings.php:278
8571
- msgid "Browser signature has changed for this user session."
8572
  msgstr ""
8573
 
8574
- #: src/lib/src/Modules/UserManagement/Strings.php:282
8575
- msgid ""
8576
- "Unable to verify the current User Session. Forcefully logging out session."
8577
  msgstr ""
8578
 
8579
- #: src/lib/src/Modules/UserManagement/Strings.php:286
 
 
8580
  #, php-format
8581
- msgid "User ID %s suspended by admin (%s)"
8582
  msgstr ""
8583
 
8584
- #: src/lib/src/Modules/UserManagement/Strings.php:289
8585
- #, php-format
8586
- msgid "User ID %s unsuspended by admin (%s)"
8587
  msgstr ""
8588
 
8589
- #: src/lib/src/Modules/UserManagement/Suspend/Idle.php:25
8590
- msgid "Sorry, this account is suspended because of inactivity."
8591
  msgstr ""
8592
 
8593
- #: src/lib/src/Modules/UserManagement/Suspend/Idle.php:26
8594
- #: src/lib/src/Modules/UserManagement/Suspend/PasswordExpiry.php:31
8595
- msgid "Please reset your password to regain access."
 
8596
  msgstr ""
8597
 
8598
- #: src/lib/src/Modules/UserManagement/Suspend/Idle.php:29
8599
- #: src/lib/src/Modules/UserManagement/Suspend/PasswordExpiry.php:34
8600
- msgid "Reset"
8601
  msgstr ""
8602
 
8603
- #: src/lib/src/Modules/UserManagement/Suspend/PasswordExpiry.php:30
8604
- msgid "Sorry, this account is suspended because the password has expired."
8605
  msgstr ""
8606
 
8607
- #: src/lib/src/Modules/UserManagement/Suspend/Suspended.php:22
8608
- msgid "Sorry, this account is suspended."
 
 
8609
  msgstr ""
8610
 
8611
- #: src/lib/src/Modules/UserManagement/Suspend/Suspended.php:23
8612
- msgid "Please contact your website administrator."
8613
  msgstr ""
8614
 
8615
- #: src/lib/src/Scans/Mal/Repair.php:108
8616
- #, php-format
8617
- msgid "%s not installed from WordPress.org."
8618
  msgstr ""
8619
 
8620
- #: src/lib/src/Scans/Mal/Repair.php:109 src/processors/hack_protect.php:283
8621
- #: src/processors/hackprotect_scan_apc.php:84
8622
- #: src/processors/hackprotect_scan_wpv.php:241
8623
- msgid "Plugin"
8624
  msgstr ""
8625
 
8626
- #: src/lib/src/Scans/Mal/Repair.php:116
8627
- msgid "Plugin developer doesn't use SVN tags for official releases."
8628
  msgstr ""
8629
 
8630
- #: src/lib/src/Tables/Build/AuditTrail.php:132
8631
- msgid "Not logged-in"
 
 
8632
  msgstr ""
8633
 
8634
- #: src/lib/src/Tables/Build/BaseBuild.php:49
8635
- msgid "There was an error retrieving entries."
 
8636
  msgstr ""
8637
 
8638
- #: src/lib/src/Tables/Build/BaseBuild.php:56
8639
- #: src/processors/hack_protect.php:133
8640
- msgid "No entries to display."
8641
  msgstr ""
8642
 
8643
- #: src/lib/src/Tables/Build/ScanApc.php:35
8644
- msgid "Abandoned"
8645
  msgstr ""
8646
 
8647
- #: src/lib/src/Tables/Build/ScanMal.php:39
8648
- #: src/processors/hackprotect_scan_mal.php:119
8649
- msgid "Potential Malware Detected"
8650
  msgstr ""
8651
 
8652
- #: src/lib/src/Tables/Build/ScanMal.php:40
8653
- msgid "Pattern Detected"
8654
  msgstr ""
8655
 
8656
- #: src/lib/src/Tables/Build/ScanMal.php:41
8657
- msgid "Affected line numbers"
8658
  msgstr ""
8659
 
8660
- #: src/lib/src/Tables/Build/ScanMal.php:45
8661
- msgid "False Positive Confidence"
 
8662
  msgstr ""
8663
 
8664
- #: src/lib/src/Tables/Build/ScanMal.php:52
8665
- msgid "Repair Unavailable"
 
8666
  msgstr ""
8667
 
8668
- #: src/lib/src/Tables/Build/ScanPtg.php:31
8669
- #: src/lib/src/Tables/Build/ScanWcf.php:30
8670
- msgid "Modified"
8671
  msgstr ""
8672
 
8673
- #: src/lib/src/Tables/Build/ScanPtg.php:32
8674
- #: src/lib/src/Tables/Build/ScanWcf.php:31
8675
- msgid "Missing"
8676
  msgstr ""
8677
 
8678
- #: src/lib/src/Tables/Build/ScanPtg.php:32
8679
- #: src/lib/src/Tables/Build/ScanUfc.php:31
8680
- msgid "Unrecognised"
8681
  msgstr ""
8682
 
8683
- #: src/lib/src/Tables/Build/Traffic.php:142
8684
- msgid "Location"
8685
  msgstr ""
8686
 
8687
- #: src/lib/src/Tables/Build/Traffic.php:143
8688
- msgid "User Agent"
 
 
8689
  msgstr ""
8690
 
8691
- #: src/lib/src/Tables/Build/Traffic.php:149
8692
- msgid "Offense"
8693
  msgstr ""
8694
 
8695
- #: src/lib/src/Tables/Render/AdminNotes.php:32
8696
- #: src/lib/src/Tables/Render/AuditTrail.php:70
8697
- #: src/lib/src/Tables/Render/IpBase.php:26
8698
- #: src/lib/src/Tables/Render/Traffic.php:15
8699
- msgid "Date"
8700
  msgstr ""
8701
 
8702
- #: src/lib/src/Tables/Render/AuditTrail.php:26
8703
- msgid "Whitelist Param"
 
 
8704
  msgstr ""
8705
 
8706
- #: src/lib/src/Tables/Render/AuditTrail.php:32
8707
- msgid "Add Parameter To Whitelist"
8708
  msgstr ""
8709
 
8710
- #: src/lib/src/Tables/Render/AuditTrail.php:68
8711
- #: src/lib/src/Tables/Render/IpBlack.php:27
8712
- #: src/lib/src/Tables/Render/Sessions.php:35
8713
- #: src/lib/src/Tables/Render/Traffic.php:13
8714
- msgid "Details"
8715
  msgstr ""
8716
 
8717
- #: src/lib/src/Tables/Render/Base.php:41
8718
- msgid "Refresh"
8719
  msgstr ""
8720
 
8721
- #: src/lib/src/Tables/Render/Base.php:215
8722
- #: src/lib/src/Tables/Render/ScanMal.php:36
8723
- #: src/lib/src/Tables/Render/ScanWcf.php:29
8724
- msgid "Repair"
8725
  msgstr ""
8726
 
8727
- #: src/lib/src/Tables/Render/Base.php:227
8728
- #: src/lib/src/Tables/Render/ScanApc.php:25
8729
- #: src/lib/src/Tables/Render/ScanMal.php:34
8730
- #: src/lib/src/Tables/Render/ScanUfc.php:30
8731
- #: src/lib/src/Tables/Render/ScanWcf.php:30
8732
- #: src/lib/src/Tables/Render/ScanWpv.php:65
8733
- msgid "Ignore"
8734
  msgstr ""
8735
 
8736
- #: src/lib/src/Tables/Render/IpBase.php:22
8737
- #: src/lib/src/Tables/Render/IpWhite.php:13
8738
- msgid "Label"
8739
  msgstr ""
8740
 
8741
- #: src/lib/src/Tables/Render/IpBase.php:24
8742
- msgid "List"
8743
  msgstr ""
8744
 
8745
- #: src/lib/src/Tables/Render/IpBase.php:25
8746
- msgid "Last Access"
 
 
8747
  msgstr ""
8748
 
8749
- #: src/lib/src/Tables/Render/IpBlack.php:15
8750
- msgid "Last Offense"
8751
  msgstr ""
8752
 
8753
- #: src/lib/src/Tables/Render/IpBlack.php:28
8754
- msgid "Auto Expires"
8755
  msgstr ""
8756
 
8757
- #: src/lib/src/Tables/Render/IpWhite.php:14
8758
- msgid "Added"
8759
  msgstr ""
8760
 
8761
- #: src/lib/src/Tables/Render/ScanApc.php:35
8762
- #: src/processors/hackprotect_scan_apc.php:91
8763
- #: src/processors/hackprotect_scan_wpv.php:249
8764
- msgid "Item"
8765
  msgstr ""
8766
 
8767
- #: src/lib/src/Tables/Render/ScanApc.php:37
8768
- #: src/lib/src/Tables/Render/ScanBase.php:47
8769
- #: src/lib/src/Tables/Render/ScanPtg.php:28
8770
- #: src/lib/src/Tables/Render/ScanWpv.php:77
8771
- msgid "Discovered"
8772
  msgstr ""
8773
 
8774
- #: src/lib/src/Tables/Render/ScanBase.php:34
8775
- msgid "Download"
8776
  msgstr ""
8777
 
8778
- #: src/lib/src/Tables/Render/ScanBase.php:45
8779
- #: src/lib/src/Tables/Render/ScanPtg.php:26
8780
- msgid "File"
8781
  msgstr ""
8782
 
8783
- #: src/lib/src/Tables/Render/ScanWpv.php:21
8784
- msgid "Apply Update"
8785
  msgstr ""
8786
 
8787
- #: src/lib/src/Tables/Render/ScanWpv.php:21
8788
- msgid "No Update Available"
8789
  msgstr ""
8790
 
8791
- #: src/lib/src/Tables/Render/ScanWpv.php:31
8792
- msgid "Deactivate"
 
8793
  msgstr ""
8794
 
8795
- #: src/lib/src/Tables/Render/ScanWpv.php:75
8796
- msgid "Vulnerability"
 
 
8797
  msgstr ""
8798
 
8799
- #: src/lib/src/Tables/Render/ScanWpv.php:76
8800
- msgid "Asset Details"
 
 
8801
  msgstr ""
8802
 
8803
- #: src/lib/src/Tables/Render/Sessions.php:16
8804
- #: src/lib/src/Tables/Render/Sessions.php:25
8805
- msgid "Discard"
8806
  msgstr ""
8807
 
8808
- #: src/lib/src/Tables/Render/Traffic.php:12
8809
- msgid "Page"
 
8810
  msgstr ""
8811
 
8812
- #: src/lib/src/Utilities/ReCaptcha/TestRequest.php:40
8813
- #: src/lib/src/Utilities/ReCaptcha/TestRequest.php:47
8814
- msgid "Whoops."
8815
  msgstr ""
8816
 
8817
- #: src/lib/src/Utilities/ReCaptcha/TestRequest.php:40
8818
- msgid "Google reCAPTCHA was not submitted."
8819
  msgstr ""
8820
 
8821
- #: src/lib/src/Utilities/ReCaptcha/TestRequest.php:48
8822
- msgid "Google reCAPTCHA verification failed."
8823
  msgstr ""
8824
 
8825
- #: src/lib/src/Utilities/ReCaptcha/TestRequest.php:50
8826
- msgid "Maybe refresh the page and try again."
8827
  msgstr ""
8828
 
8829
- #: src/processors/admin_access_restriction.php:196
8830
  msgid ""
8831
- "Sorry, deleting administrators is currently restricted to your Security Admin"
8832
  msgstr ""
8833
 
8834
- #: src/processors/admin_access_restriction.php:469
8835
- #: src/processors/hackprotect_scan_ptg.php:167 src/processors/plugin.php:171
8836
- msgid "Editing this option is currently restricted."
8837
  msgstr ""
8838
 
8839
- #: src/processors/admin_access_restriction.php:489
8840
- msgid "Unlock"
8841
  msgstr ""
8842
 
8843
- #: src/processors/autoupdates.php:468
8844
- #, php-format
8845
- msgid ""
8846
- "This is a quick notification from the %s that WordPress Automatic Updates "
8847
- "just completed on your site with the following results."
8848
  msgstr ""
8849
 
8850
- #: src/processors/autoupdates.php:480
8851
- msgid "Plugins Updated:"
 
 
8852
  msgstr ""
8853
 
8854
- #: src/processors/autoupdates.php:488
8855
- #, php-format
8856
- msgid "Plugin \"%s\" auto-updated from \"%s\" to version \"%s\""
8857
  msgstr ""
8858
 
8859
- #: src/processors/autoupdates.php:505
8860
- msgid "Themes Updated:"
8861
  msgstr ""
8862
 
8863
- #: src/processors/autoupdates.php:513
8864
- #, php-format
8865
- msgid "Theme \"%s\" auto-updated from \"%s\" to version \"%s\""
8866
  msgstr ""
8867
 
8868
- #: src/processors/autoupdates.php:528
8869
- msgid "WordPress Core Updated:"
8870
  msgstr ""
8871
 
8872
- #: src/processors/autoupdates.php:547
8873
- msgid "Thank you."
 
8874
  msgstr ""
8875
 
8876
- #: src/processors/autoupdates.php:549
8877
- #: src/processors/loginprotect_intentprovider_backup.php:170
8878
  #, php-format
8879
- msgid "Notice: %s"
8880
- msgstr ""
 
 
8881
 
8882
- #: src/processors/autoupdates.php:549
8883
- msgid "Automatic Updates Completed"
8884
  msgstr ""
8885
 
8886
- #: src/processors/autoupdates.php:571
8887
  msgid ""
8888
- "Automatic updates for this plugin is controlled by another plugin or setting."
8889
- msgstr ""
8890
-
8891
- #: src/processors/email.php:53
8892
- msgid "Hi !"
8893
- msgstr ""
8894
-
8895
- #: src/processors/email.php:65
8896
- #, php-format
8897
- msgid "Email sent from the %s Plugin v%s, on %s."
8898
  msgstr ""
8899
 
8900
- #: src/processors/email.php:70
8901
- msgid "Note: Email delays are caused by website hosting and email providers."
8902
  msgstr ""
8903
 
8904
- #: src/processors/email.php:71
8905
- #, php-format
8906
- msgid "Time Sent: %s"
 
8907
  msgstr ""
8908
 
8909
- #: src/processors/events.php:49
8910
- msgid "Login Verified"
8911
  msgstr ""
8912
 
8913
- #: src/processors/events.php:61
8914
- msgid "Total Offenses"
8915
  msgstr ""
8916
 
8917
- #: src/processors/events.php:67
8918
- #, php-format
8919
- msgid "%s Statistics"
8920
  msgstr ""
8921
 
8922
- #: src/processors/firewall.php:200
8923
- msgid "Something in the URL, Form or Cookie data wasn't appropriate."
8924
  msgstr ""
8925
 
8926
- #: src/processors/firewall.php:400
8927
- #, php-format
8928
- msgid "%s has blocked a page visit to your site."
8929
  msgstr ""
8930
 
8931
- #: src/processors/firewall.php:402
8932
- msgid "Log details for this visitor are below:"
8933
  msgstr ""
8934
 
8935
- #: src/processors/firewall.php:413
8936
- #, php-format
8937
- msgid "You can look up the offending IP Address here: %s"
8938
  msgstr ""
8939
 
8940
- #: src/processors/firewall.php:418
8941
- msgid "Firewall Block Alert"
8942
  msgstr ""
8943
 
8944
- #: src/processors/firewall.php:454
8945
- msgid "Unknown Rules"
 
 
8946
  msgstr ""
8947
 
8948
- #: src/processors/hack_protect.php:84
8949
- #, php-format
8950
- msgid "Last Scan: %s"
8951
  msgstr ""
8952
 
8953
- #: src/processors/hack_protect.php:118
8954
- msgid "Sorry, this scan is not available."
8955
  msgstr ""
8956
 
8957
- #: src/processors/hack_protect.php:119
8958
- msgid "This scan is not currently enabled."
8959
  msgstr ""
8960
 
8961
- #: src/processors/hack_protect.php:120
8962
- msgid "Please turn on this scan in the options."
8963
  msgstr ""
8964
 
8965
- #: src/processors/hack_protect.php:121
8966
- msgid "Click a scan to see its results"
8967
  msgstr ""
8968
 
8969
- #: src/processors/hack_protect.php:122 src/processors/hack_protect.php:123
8970
- msgid "Scan Your Site Now"
 
 
8971
  msgstr ""
8972
 
8973
- #: src/processors/hack_protect.php:124
8974
- msgid "Run the selected scans on your site now to get the latest results"
 
8975
  msgstr ""
8976
 
8977
- #: src/processors/hack_protect.php:125
8978
- msgid "The more scans that are selected, the longer the scan may take."
 
8979
  msgstr ""
8980
 
8981
- #: src/processors/hack_protect.php:127
8982
- msgid "Select Scans To Run"
8983
  msgstr ""
8984
 
8985
- #: src/processors/hack_protect.php:128
8986
- msgid "Clear Ignore Flags"
8987
  msgstr ""
8988
 
8989
- #: src/processors/hack_protect.php:129
8990
  msgid ""
8991
- "Previously ignored results will be revealed (for the selected scans only)"
 
8992
  msgstr ""
8993
 
8994
- #: src/processors/hack_protect.php:130
8995
- msgid "Remove Notification Suppression"
8996
  msgstr ""
8997
 
8998
- #: src/processors/hack_protect.php:131
8999
- msgid "Allow notification emails to be resent (for the selected scans only)"
9000
  msgstr ""
9001
 
9002
- #: src/processors/hack_protect.php:132
9003
- msgid "Run Scans Now"
9004
  msgstr ""
9005
 
9006
- #: src/processors/hack_protect.php:134
9007
- msgid "Scan Progress"
9008
  msgstr ""
9009
 
9010
- #: src/processors/hack_protect.php:147
9011
- msgid "Discover plugins that may have been abandoned by their authors"
9012
  msgstr ""
9013
 
9014
- #: src/processors/hack_protect.php:157
9015
- msgid ""
9016
- "Detect changes to core WordPress files when compared to the official "
9017
- "distribution"
9018
  msgstr ""
9019
 
9020
- #: src/processors/hack_protect.php:167
9021
- msgid ""
9022
- "Detect files which aren't part of the official WordPress.org distribution"
9023
  msgstr ""
9024
 
9025
- #: src/processors/hack_protect.php:177
9026
- msgid "Detect files that may be infected with malware"
 
 
9027
  msgstr ""
9028
 
9029
- #: src/processors/hack_protect.php:187
9030
- msgid "Be alerted to plugins and themes with known security vulnerabilities"
9031
  msgstr ""
9032
 
9033
- #: src/processors/hack_protect.php:251 src/processors/hack_protect.php:259
9034
- #: src/processors/hack_protect.php:260 src/processors/hack_protect.php:279
9035
- #: src/processors/hack_protect.php:280 src/processors/hack_protect.php:300
9036
- #: src/processors/hack_protect.php:308 src/processors/hack_protect.php:309
9037
- #: src/processors/hack_protect.php:310
9038
- msgid "unknown"
9039
  msgstr ""
9040
 
9041
- #: src/processors/hack_protect.php:325
9042
- #: src/processors/hackprotect_scan_apc.php:87
9043
- #: src/processors/hackprotect_scan_wpv.php:244
9044
- msgid "Theme"
9045
  msgstr ""
9046
 
9047
- #: src/processors/hack_protect.php:340
9048
- msgid "Detects unauthorized changes to plugins/themes"
 
 
9049
  msgstr ""
9050
 
9051
- #: src/processors/hack_protect.php:341
9052
- msgid "Files with problems"
9053
  msgstr ""
9054
 
9055
- #: src/processors/hack_protect.php:342
9056
- msgid "Root directory"
 
 
9057
  msgstr ""
9058
 
9059
- #: src/processors/hack_protect.php:343
9060
- msgid "Snapshot taken"
9061
  msgstr ""
9062
 
9063
- #: src/processors/hack_protect.php:344
9064
- #: src/processors/hackprotect_scan_ptg.php:111
9065
- msgid "Re-Install"
9066
  msgstr ""
9067
 
9068
- #: src/processors/hack_protect.php:345
9069
- msgid "Deactivate and Ignore"
 
 
9070
  msgstr ""
9071
 
9072
- #: src/processors/hack_protect.php:346
9073
- msgid "Accept"
9074
  msgstr ""
9075
 
9076
- #: src/processors/hack_protect.php:347
9077
- msgid "Upgrade"
 
9078
  msgstr ""
9079
 
9080
- #: src/processors/hackprotect_scan_apc.php:73
 
9081
  #, php-format
9082
- msgid "%s has detected abandoned plugins installed on your site."
9083
  msgstr ""
9084
 
9085
- #: src/processors/hackprotect_scan_apc.php:74
9086
  msgid ""
9087
- "Running code that hasn't seen any updates for over 2 years is far from ideal."
9088
  msgstr ""
9089
 
9090
- #: src/processors/hackprotect_scan_apc.php:75
9091
- #: src/processors/hackprotect_scan_wpv.php:232
9092
- msgid "Details for the items(s) are below:"
 
9093
  msgstr ""
9094
 
9095
- #: src/processors/hackprotect_scan_apc.php:92
9096
  #, php-format
9097
- msgid "Last Updated: %s"
9098
  msgstr ""
9099
 
9100
- #: src/processors/hackprotect_scan_apc.php:100
9101
- msgid "Abandoned Plugin(s) Discovered On Your Site."
9102
  msgstr ""
9103
 
9104
- #: src/processors/hackprotect_scan_base.php:373
9105
- msgid "Run Scanner"
 
9106
  msgstr ""
9107
 
9108
- #: src/processors/hackprotect_scan_mal.php:147
9109
- #, php-format
9110
- msgid "The %s Malware Scanner found files with potential malware."
9111
  msgstr ""
9112
 
9113
- #: src/processors/hackprotect_scan_mal.php:149
9114
- msgid ""
9115
- "You must examine the file(s) carefully to determine whether suspicious code "
9116
- "is really present."
9117
  msgstr ""
9118
 
9119
- #: src/processors/hackprotect_scan_mal.php:150
9120
- #, php-format
9121
- msgid ""
9122
- "The %s Malware Scanner searches for common malware patterns and so false "
9123
- "positives (detection errors) are to be expected sometimes."
9124
  msgstr ""
9125
 
9126
- #: src/processors/hackprotect_scan_mal.php:151
9127
- #: src/processors/hackprotect_scan_ptg.php:592
9128
- #: src/processors/hackprotect_scan_ufc.php:115
9129
- #: src/processors/hackprotect_scan_wcf.php:98
9130
- #: src/processors/user_management.php:202
9131
- #: src/processors/user_management.php:234
9132
- msgid "Site URL"
9133
  msgstr ""
9134
 
9135
- #: src/processors/hackprotect_scan_mal.php:159
9136
- #: src/processors/hackprotect_scan_wcf.php:106
9137
- #, php-format
9138
- msgid "%s has already attempted to repair the files."
9139
  msgstr ""
9140
 
9141
- #: src/processors/hackprotect_scan_mal.php:160
9142
- #: src/processors/hackprotect_scan_wcf.php:107
9143
- msgid ""
9144
- "But, you should always check these files to ensure everything is as you "
9145
- "expect."
9146
  msgstr ""
9147
 
9148
- #: src/processors/hackprotect_scan_mal.php:163
9149
- #: src/processors/hackprotect_scan_wcf.php:110
9150
- msgid ""
9151
- "You should review these files and replace them with official versions if "
9152
- "required."
9153
  msgstr ""
9154
 
9155
- #: src/processors/hackprotect_scan_mal.php:164
9156
- #: src/processors/hackprotect_scan_wcf.php:111
9157
- msgid ""
9158
- "Alternatively you can have the plugin attempt to repair/replace these files "
9159
- "automatically."
9160
  msgstr ""
9161
 
9162
- #: src/processors/hackprotect_scan_mal.php:170
9163
- #: src/processors/hackprotect_scan_ufc.php:131
9164
- #: src/processors/hackprotect_scan_wcf.php:117
9165
- msgid "We recommend you run the scanner to review your site"
9166
  msgstr ""
9167
 
9168
- #: src/processors/hackprotect_scan_mal.php:175
9169
- #: src/processors/hackprotect_scan_ufc.php:136
9170
- #: src/processors/hackprotect_scan_wcf.php:122
9171
- msgid "More Info On This Scanner"
9172
  msgstr ""
9173
 
9174
- #: src/processors/hackprotect_scan_mal.php:187
9175
- msgid "The following files contain suspected malware:"
9176
  msgstr ""
9177
 
9178
- #: src/processors/hackprotect_scan_ptg.php:158
9179
- msgid "Really Re-Install Plugin"
9180
  msgstr ""
9181
 
9182
- #: src/processors/hackprotect_scan_ptg.php:159
9183
- msgid ""
9184
- "WordPress will now download and install the latest available version of this "
9185
- "plugin."
9186
  msgstr ""
9187
 
9188
- #: src/processors/hackprotect_scan_ptg.php:162
9189
- msgid ""
9190
- "In case of possible failure, it may be better to do this while the plugin is "
9191
- "inactive."
9192
  msgstr ""
9193
 
9194
- #: src/processors/hackprotect_scan_ptg.php:164
9195
- msgid "Re-install first?"
9196
  msgstr ""
9197
 
9198
- #: src/processors/hackprotect_scan_ptg.php:165
9199
- msgid "This ensures files for this plugin haven't been corrupted in any way."
9200
  msgstr ""
9201
 
9202
- #: src/processors/hackprotect_scan_ptg.php:166
9203
- msgid ""
9204
- "You can choose to 'Activate Only' (not recommended), or close this message "
9205
- "to cancel activation."
9206
  msgstr ""
9207
 
9208
- #: src/processors/hackprotect_scan_ptg.php:169
9209
- #, php-format
9210
- msgid ""
9211
- "For best security practices, %s will download and re-install the latest "
9212
- "available version of this plugin."
9213
  msgstr ""
9214
 
9215
- #: src/processors/hackprotect_scan_ptg.php:588
9216
- #, php-format
9217
- msgid ""
9218
- "%s has detected at least 1 Plugins/Themes have been modified on your site."
9219
  msgstr ""
9220
 
9221
- #: src/processors/hackprotect_scan_ptg.php:590
9222
- msgid ""
9223
- "You will receive only 1 email notification about these changes in a 1 week "
9224
- "period."
9225
  msgstr ""
9226
 
9227
- #: src/processors/hackprotect_scan_ptg.php:594
9228
- msgid "Details of the problem items are below:"
9229
  msgstr ""
9230
 
9231
- #: src/processors/hackprotect_scan_ptg.php:599
9232
- msgid "Modified Plugins:"
 
9233
  msgstr ""
9234
 
9235
- #: src/processors/hackprotect_scan_ptg.php:607
9236
- msgid "Modified Themes:"
 
9237
  msgstr ""
9238
 
9239
- #: src/processors/hackprotect_scan_ptg.php:617
9240
- msgid "Plugins/Themes Have Been Altered"
 
 
9241
  msgstr ""
9242
 
9243
- #: src/processors/hackprotect_scan_ufc.php:85
9244
- msgid "Unrecognised WordPress Files Detected"
 
9245
  msgstr ""
9246
 
9247
- #: src/processors/hackprotect_scan_ufc.php:113
9248
- #, php-format
9249
- msgid "The %s Unrecognised File Scanner found files which you need to review."
9250
  msgstr ""
9251
 
9252
- #: src/processors/hackprotect_scan_ufc.php:119
9253
- msgid "Files discovered"
 
9254
  msgstr ""
9255
 
9256
- #: src/processors/hackprotect_scan_ufc.php:126
9257
- #, php-format
9258
- msgid "%s has attempted to delete these files based on your current settings."
9259
  msgstr ""
9260
 
9261
- #: src/processors/hackprotect_scan_wcf.php:71
9262
- msgid "Modified Core WordPress Files Discovered"
9263
  msgstr ""
9264
 
9265
- #: src/processors/hackprotect_scan_wcf.php:97
9266
  #, php-format
9267
- msgid "The %s Core File Scanner found files with potential problems."
9268
  msgstr ""
9269
 
9270
- #: src/processors/hackprotect_scan_wcf.php:137
9271
- msgid "The following files have different content:"
9272
  msgstr ""
9273
 
9274
- #: src/processors/hackprotect_scan_wcf.php:144
9275
- msgid "The following files are missing:"
9276
  msgstr ""
9277
 
9278
- #: src/processors/hackprotect_scan_wpv.php:164
9279
- msgid "Vulnerable"
9280
  msgstr ""
9281
 
9282
- #: src/processors/hackprotect_scan_wpv.php:196
9283
  #, php-format
9284
- msgid ""
9285
- "%s has discovered that the currently installed version of the %s plugin has "
9286
- "known security vulnerabilities."
9287
  msgstr ""
9288
 
9289
- #: src/processors/hackprotect_scan_wpv.php:198
9290
- msgid "Vulnerability Name"
9291
  msgstr ""
9292
 
9293
- #: src/processors/hackprotect_scan_wpv.php:199
9294
- msgid "Vulnerability Type"
9295
  msgstr ""
9296
 
9297
- #: src/processors/hackprotect_scan_wpv.php:200
9298
- msgid "Fixed Versions"
9299
  msgstr ""
9300
 
9301
- #: src/processors/hackprotect_scan_wpv.php:230
9302
- #, php-format
9303
- msgid "%s has detected items with known security vulnerabilities."
9304
  msgstr ""
9305
 
9306
- #: src/processors/hackprotect_scan_wpv.php:231
9307
- msgid "You should update or remove these items at your earliest convenience."
 
9308
  msgstr ""
9309
 
9310
- #: src/processors/hackprotect_scan_wpv.php:250
9311
- #, php-format
9312
- msgid "Vulnerability Title: %s"
9313
  msgstr ""
9314
 
9315
- #: src/processors/hackprotect_scan_wpv.php:251
9316
- #, php-format
9317
- msgid "Vulnerability Type: %s"
9318
  msgstr ""
9319
 
9320
- #: src/processors/hackprotect_scan_wpv.php:252
9321
- #, php-format
9322
- msgid "Fixed Version: %s"
9323
  msgstr ""
9324
 
9325
- #: src/processors/hackprotect_scan_wpv.php:253
9326
- #, php-format
9327
- msgid "Further Information: %s"
9328
  msgstr ""
9329
 
9330
- #: src/processors/hackprotect_scan_wpv.php:261
9331
- msgid "Plugin(s) Discovered With Known Security Vulnerabilities."
9332
  msgstr ""
9333
 
9334
- #: src/processors/ips.php:86
9335
- msgid "No custom message provided."
9336
  msgstr ""
9337
 
9338
- #: src/processors/ips.php:250
9339
- #, php-format
9340
- msgid "You've been blocked by the %s plugin"
9341
  msgstr ""
9342
 
9343
- #: src/processors/ips.php:257
9344
- #, php-format
9345
- msgid "Time remaining on black list: %s"
9346
  msgstr ""
9347
 
9348
- #: src/processors/ips.php:258
9349
- #, php-format
9350
- msgid "%s minute"
9351
- msgid_plural "%s minutes"
9352
- msgstr[0] ""
9353
- msgstr[1] ""
9354
 
9355
- #: src/processors/ips.php:260
9356
- #, php-format
9357
- msgid ""
9358
- "You tripped the security plugin defenses a total of %s times making you a "
9359
- "suspect."
9360
  msgstr ""
9361
 
9362
- #: src/processors/ips.php:261
9363
  msgid ""
9364
- "If you believe this to be in error, please contact the site owner and quote "
9365
- "your IP address below."
9366
  msgstr ""
9367
 
9368
- #: src/processors/ips.php:265
9369
- msgid "Auto-Unblock Your IP"
9370
  msgstr ""
9371
 
9372
- #: src/processors/ips.php:266
9373
- msgid ""
9374
- "You can automatically unblock your IP address by clicking the button below."
9375
  msgstr ""
9376
 
9377
- #: src/processors/ips.php:267
9378
- msgid "Unblock My IP Address"
9379
  msgstr ""
9380
 
9381
- #: src/processors/ips.php:279 src/processors/loginprotect_gasp.php:27
9382
- msgid "You MUST enable Javascript to be able to login"
 
9383
  msgstr ""
9384
 
9385
- #: src/processors/ips.php:509
9386
- msgid "No Label"
 
9387
  msgstr ""
9388
 
9389
- #: src/processors/lockdown.php:93
9390
  #, php-format
9391
  msgid ""
9392
- "The \"author\" query parameter has been blocked by %s to protect against "
9393
- "user login name fishing."
9394
  msgstr ""
9395
 
9396
- #: src/processors/lockdown.php:121
9397
  #, php-format
9398
- msgid "Anonymous access to the WordPress Rest API has been restricted by %s."
9399
  msgstr ""
9400
 
9401
- #: src/processors/loginprotect_cooldown.php:20
9402
- msgid "Request Cooldown in effect."
 
 
9403
  msgstr ""
9404
 
9405
- #: src/processors/loginprotect_cooldown.php:22
9406
- #, php-format
9407
- msgid "You must wait %s seconds before attempting this action again."
9408
  msgstr ""
9409
 
9410
- #: src/processors/loginprotect_gasp.php:68
9411
- msgid "You must check that box to say you're not a bot."
 
9412
  msgstr ""
9413
 
9414
- #: src/processors/loginprotect_gasp.php:80
9415
- msgid "You appear to be a bot."
9416
  msgstr ""
9417
 
9418
- #: src/processors/loginprotect_intent.php:152
9419
- msgid "Thank you for authenticating your login."
 
9420
  msgstr ""
9421
 
9422
- #: src/processors/loginprotect_intent.php:154
9423
- msgid "If you used your Backup Code, you will need to reset it."
9424
  msgstr ""
9425
 
9426
- #: src/processors/loginprotect_intent.php:165
9427
- msgid "One or more of your authentication codes failed or was missing"
 
 
9428
  msgstr ""
9429
 
9430
- #: src/processors/loginprotect_intent.php:246
9431
- msgid "Please supply all authentication codes"
9432
  msgstr ""
9433
 
9434
- #: src/processors/loginprotect_intent.php:249
9435
- msgid "Please supply at least 1 authentication code"
9436
  msgstr ""
9437
 
9438
- #: src/processors/loginprotect_intent.php:279
9439
- msgid "Cancel Login"
9440
  msgstr ""
9441
 
9442
- #: src/processors/loginprotect_intent.php:280
9443
- msgid "Time Remaining"
9444
  msgstr ""
9445
 
9446
- #: src/processors/loginprotect_intent.php:281
9447
- msgid "Calculating"
9448
  msgstr ""
9449
 
9450
- #: src/processors/loginprotect_intent.php:282
9451
- msgid "Seconds"
 
9452
  msgstr ""
9453
 
9454
- #: src/processors/loginprotect_intent.php:283
9455
- msgid "Login Expired"
9456
  msgstr ""
9457
 
9458
- #: src/processors/loginprotect_intent.php:284
9459
- msgid "Verify My Login"
9460
  msgstr ""
9461
 
9462
- #: src/processors/loginprotect_intent.php:286
9463
- msgid "What is this?"
9464
  msgstr ""
9465
 
9466
- #: src/processors/loginprotect_intent.php:288
9467
- #, php-format
9468
- msgid "%s Login Verification"
9469
  msgstr ""
9470
 
9471
- #: src/processors/loginprotect_intent.php:290
9472
- #, php-format
9473
- msgid "Don't ask again on this browser for %s."
 
 
9474
  msgstr ""
9475
 
9476
- #: src/processors/loginprotect_intent.php:291
9477
- #, php-format
9478
- msgid "%s day"
9479
- msgid_plural "%s days"
9480
- msgstr[0] ""
9481
- msgstr[1] ""
9482
-
9483
- #: src/processors/loginprotect_intentprovider_backup.php:24
9484
- msgid "Generate ONE-Time Backup 2FA Login Code"
9485
  msgstr ""
9486
 
9487
- #: src/processors/loginprotect_intentprovider_backup.php:25
9488
- msgid "Delete Login Backup Code"
9489
  msgstr ""
9490
 
9491
- #: src/processors/loginprotect_intentprovider_backup.php:26
9492
- msgid ""
9493
- "Backup login codes are not available if you do not have any other two-factor "
9494
- "authentication modes active."
9495
  msgstr ""
9496
 
9497
- #: src/processors/loginprotect_intentprovider_backup.php:27
9498
- msgid ""
9499
- "Click to generate a backup login code for your two-factor authentication."
9500
  msgstr ""
9501
 
9502
- #: src/processors/loginprotect_intentprovider_backup.php:30
9503
- msgid ""
9504
- "This code will be displayed only once and you may use it to verify your "
9505
- "login only once."
9506
  msgstr ""
9507
 
9508
- #: src/processors/loginprotect_intentprovider_backup.php:31
9509
- msgid "Store it somewhere safe."
 
 
9510
  msgstr ""
9511
 
9512
- #: src/processors/loginprotect_intentprovider_backup.php:32
9513
- msgid "Generating a new code will replace your existing code."
9514
  msgstr ""
9515
 
9516
- #: src/processors/loginprotect_intentprovider_backup.php:33
9517
- #: src/processors/loginprotect_intentprovider_ga.php:45
9518
- msgid ""
9519
- "Use your Google Authenticator app to scan this QR code and enter the one "
9520
- "time password below."
9521
  msgstr ""
9522
 
9523
- #: src/processors/loginprotect_intentprovider_backup.php:34
9524
- #: src/processors/loginprotect_intentprovider_ga.php:46
9525
- msgid ""
9526
- "If you have a problem with scanning the QR code enter this code manually "
9527
- "into the app."
9528
  msgstr ""
9529
 
9530
- #: src/processors/loginprotect_intentprovider_backup.php:35
9531
- #: src/processors/loginprotect_intentprovider_ga.php:47
9532
- msgid "Check the box to remove Google Authenticator login authentication."
9533
  msgstr ""
9534
 
9535
- #: src/processors/loginprotect_intentprovider_backup.php:36
9536
- #: src/processors/loginprotect_intentprovider_ga.php:48
9537
- #, php-format
9538
- msgid "Remove %s"
9539
  msgstr ""
9540
 
9541
- #: src/processors/loginprotect_intentprovider_backup.php:37
9542
- msgid "Create Backup 2FA Login Code"
9543
  msgstr ""
9544
 
9545
- #: src/processors/loginprotect_intentprovider_backup.php:38
9546
- #: src/processors/loginprotect_intentprovider_ga.php:50
9547
- msgid "Manual Code"
9548
  msgstr ""
9549
 
9550
- #: src/processors/loginprotect_intentprovider_backup.php:39
9551
- #: src/processors/loginprotect_intentprovider_ga.php:51
9552
- msgid "Scan This QR Code"
9553
  msgstr ""
9554
 
9555
- #: src/processors/loginprotect_intentprovider_backup.php:40
9556
- msgid "Backup Login Code"
9557
  msgstr ""
9558
 
9559
- #: src/processors/loginprotect_intentprovider_backup.php:41
9560
- #: src/processors/loginprotect_intentprovider_ga.php:53
9561
- #: src/processors/loginprotect_intentprovider_yubikey.php:42
9562
- #, php-format
9563
- msgid "Sorry, %s may not be added to another user's account."
9564
  msgstr ""
9565
 
9566
- #: src/processors/loginprotect_intentprovider_backup.php:42
9567
- #: src/processors/loginprotect_intentprovider_ga.php:54
9568
- #: src/processors/loginprotect_intentprovider_yubikey.php:43
9569
- #, php-format
9570
  msgid ""
9571
- "Sorry, %s may only be removed from another user's account by a Security "
9572
- "Administrator."
9573
  msgstr ""
9574
 
9575
- #: src/processors/loginprotect_intentprovider_backup.php:42
9576
- msgid "Backup Codes"
9577
  msgstr ""
9578
 
9579
- #: src/processors/loginprotect_intentprovider_backup.php:43
9580
- #: src/processors/loginprotect_intentprovider_email.php:201
9581
- #: src/processors/loginprotect_intentprovider_ga.php:55
9582
- #: src/processors/loginprotect_intentprovider_yubikey.php:44
9583
- #, php-format
9584
- msgid "Provided by %s"
9585
  msgstr ""
9586
 
9587
- #: src/processors/loginprotect_intentprovider_backup.php:44
9588
- #: src/processors/loginprotect_intentprovider_ga.php:56
9589
- #: src/processors/loginprotect_intentprovider_yubikey.php:45
9590
- msgid "Understand how to remove Google Authenticator"
9591
  msgstr ""
9592
 
9593
- #: src/processors/loginprotect_intentprovider_backup.php:71
9594
- msgid "Please use your Backup Code to login."
 
 
9595
  msgstr ""
9596
 
9597
- #: src/processors/loginprotect_intentprovider_backup.php:72
9598
- msgid "Login Backup Code"
9599
  msgstr ""
9600
 
9601
- #: src/processors/loginprotect_intentprovider_backup.php:158
9602
- msgid ""
9603
- "This is a quick notice to inform you that your Backup Login code was just "
9604
- "used."
9605
  msgstr ""
9606
 
9607
- #: src/processors/loginprotect_intentprovider_backup.php:159
9608
- msgid "Your WordPress account had only 1 backup login code."
9609
  msgstr ""
9610
 
9611
- #: src/processors/loginprotect_intentprovider_backup.php:160
9612
  msgid ""
9613
- "You must go to your profile and regenerate a new code if you want to use "
9614
- "this method again."
9615
- msgstr ""
9616
-
9617
- #: src/processors/loginprotect_intentprovider_backup.php:162
9618
- #: src/processors/loginprotect_intentprovider_email.php:153
9619
- msgid "Login Details"
9620
  msgstr ""
9621
 
9622
- #: src/processors/loginprotect_intentprovider_backup.php:163
9623
- #: src/processors/loginprotect_intentprovider_email.php:154
9624
- msgid "URL"
9625
  msgstr ""
9626
 
9627
- #: src/processors/loginprotect_intentprovider_backup.php:167
9628
- msgid "Thank You."
9629
  msgstr ""
9630
 
9631
- #: src/processors/loginprotect_intentprovider_backup.php:170
9632
- msgid "Backup Login Code Just Used"
9633
  msgstr ""
9634
 
9635
- #: src/processors/loginprotect_intentprovider_email.php:73
9636
- msgid "This code was just sent to your registered Email address."
9637
  msgstr ""
9638
 
9639
- #: src/processors/loginprotect_intentprovider_email.php:74
9640
- msgid "Email OTP"
9641
  msgstr ""
9642
 
9643
- #: src/processors/loginprotect_intentprovider_email.php:148
9644
- msgid "Someone attempted to login into this WordPress site using your account."
 
 
9645
  msgstr ""
9646
 
9647
- #: src/processors/loginprotect_intentprovider_email.php:149
9648
- msgid "Login requires verification with the following code."
9649
  msgstr ""
9650
 
9651
- #: src/processors/loginprotect_intentprovider_email.php:151
9652
- #, php-format
9653
- msgid "Verification Code: %s"
9654
  msgstr ""
9655
 
9656
- #: src/processors/loginprotect_intentprovider_email.php:161
9657
- msgid "Why no login link?"
9658
  msgstr ""
9659
 
9660
- #: src/processors/loginprotect_intentprovider_email.php:168
9661
- msgid "Two-Factor Login Verification"
9662
  msgstr ""
9663
 
9664
- #: src/processors/loginprotect_intentprovider_email.php:200
9665
- msgid "Check the box to enable email-based login authentication."
 
 
9666
  msgstr ""
9667
 
9668
- #: src/processors/loginprotect_intentprovider_ga.php:43
9669
- msgid "Provide the current code generated by your Google Authenticator app."
9670
  msgstr ""
9671
 
9672
- #: src/processors/loginprotect_intentprovider_ga.php:44
9673
- msgid "To reset this QR Code enter fake data here."
9674
  msgstr ""
9675
 
9676
- #: src/processors/loginprotect_intentprovider_ga.php:49
9677
- #: src/processors/loginprotect_intentprovider_ga.php:210
9678
- msgid "Google Authenticator Code"
9679
  msgstr ""
9680
 
9681
- #: src/processors/loginprotect_intentprovider_ga.php:111
9682
- #: src/processors/loginprotect_intentprovider_ga.php:156
9683
- msgid "Google Authenticator was successfully removed from the account."
9684
  msgstr ""
9685
 
9686
- #: src/processors/loginprotect_intentprovider_ga.php:114
9687
- msgid ""
9688
- "Google Authenticator could not be removed from the account - ensure your "
9689
- "code is correct."
9690
  msgstr ""
9691
 
9692
- #: src/processors/loginprotect_intentprovider_ga.php:148
9693
- #: src/processors/loginprotect_intentprovider_yubikey.php:76
9694
- msgid "One Time Password (OTP) was not valid."
9695
  msgstr ""
9696
 
9697
- #: src/processors/loginprotect_intentprovider_ga.php:148
9698
- #: src/processors/loginprotect_intentprovider_yubikey.php:76
9699
- msgid "Please try again."
9700
  msgstr ""
9701
 
9702
- #: src/processors/loginprotect_intentprovider_ga.php:161
9703
  msgid ""
9704
- "An email has been sent to you in order to confirm Google Authenticator "
9705
- "removal"
9706
  msgstr ""
9707
 
9708
- #: src/processors/loginprotect_intentprovider_ga.php:165
9709
- msgid ""
9710
- "We tried to send an email for you to confirm Google Authenticator removal "
9711
- "but it failed."
9712
  msgstr ""
9713
 
9714
- #: src/processors/loginprotect_intentprovider_ga.php:187
9715
- #, php-format
9716
- msgid "%s was successfully added to your account."
9717
  msgstr ""
9718
 
9719
- #: src/processors/loginprotect_intentprovider_ga.php:209
9720
- msgid "Please use your Google Authenticator App to retrieve your code."
9721
  msgstr ""
9722
 
9723
- #: src/processors/loginprotect_intentprovider_ga.php:228
9724
  msgid ""
9725
- "You have requested the removal of Google Authenticator from your WordPress "
9726
- "account."
9727
  msgstr ""
9728
 
9729
- #: src/processors/loginprotect_intentprovider_ga.php:229
9730
- msgid "Please click the link below to confirm."
 
 
9731
  msgstr ""
9732
 
9733
- #: src/processors/loginprotect_intentprovider_ga.php:234
9734
- msgid "Google Authenticator Removal Confirmation"
9735
  msgstr ""
9736
 
9737
- #: src/processors/loginprotect_intentprovider_ga.php:258
9738
- msgid "Google Authenticator was successfully removed from this account."
9739
  msgstr ""
9740
 
9741
- #: src/processors/loginprotect_intentprovider_yubikey.php:29
9742
- msgid "This is your unique Yubikey Device ID."
 
 
9743
  msgstr ""
9744
 
9745
- #: src/processors/loginprotect_intentprovider_yubikey.php:31
9746
- msgid "Multiple Yubikey Device IDs are separated by a comma."
9747
  msgstr ""
9748
 
9749
- #: src/processors/loginprotect_intentprovider_yubikey.php:32
9750
- msgid "Provide a One Time Password from your Yubikey."
9751
  msgstr ""
9752
 
9753
- #: src/processors/loginprotect_intentprovider_yubikey.php:34
9754
- msgid "This will remove the Yubikey Device ID from your profile."
9755
  msgstr ""
9756
 
9757
- #: src/processors/loginprotect_intentprovider_yubikey.php:35
9758
- msgid "This will add the Yubikey Device ID to your profile."
9759
  msgstr ""
9760
 
9761
- #: src/processors/loginprotect_intentprovider_yubikey.php:37
9762
  msgid ""
9763
- "If you provide a OTP from an alternative Yubikey device, it will also be "
9764
- "added to your profile."
9765
  msgstr ""
9766
 
9767
- #: src/processors/loginprotect_intentprovider_yubikey.php:39
9768
- msgid "Yubikey ID"
9769
  msgstr ""
9770
 
9771
- #: src/processors/loginprotect_intentprovider_yubikey.php:40
9772
- #: src/processors/loginprotect_intentprovider_yubikey.php:254
9773
- msgid "Yubikey OTP"
9774
  msgstr ""
9775
 
9776
- #: src/processors/loginprotect_intentprovider_yubikey.php:41
9777
- msgid "Yubikey Authentication"
 
9778
  msgstr ""
9779
 
9780
- #: src/processors/loginprotect_intentprovider_yubikey.php:95
9781
- #, php-format
9782
- msgid "%s was removed from your profile."
9783
  msgstr ""
9784
 
9785
- #: src/processors/loginprotect_intentprovider_yubikey.php:96
9786
- #: src/processors/loginprotect_intentprovider_yubikey.php:103
9787
- msgid "Yubikey Device"
9788
  msgstr ""
9789
 
9790
- #: src/processors/loginprotect_intentprovider_yubikey.php:102
9791
- #, php-format
9792
- msgid "%s was added to your profile."
9793
  msgstr ""
9794
 
9795
- #: src/processors/loginprotect_intentprovider_yubikey.php:108
9796
- msgid "No changes were made to your Yubikey configuration"
9797
  msgstr ""
9798
 
9799
- #: src/processors/loginprotect_intentprovider_yubikey.php:252
9800
- msgid "Use your Yubikey to generate a new code."
9801
  msgstr ""
9802
 
9803
- #: src/processors/loginprotect_wplogin.php:53
9804
  msgid ""
9805
- "Your login URL is unchanged because the Rename WP Login feature is not "
9806
- "currently supported on WPMS."
9807
  msgstr ""
9808
 
9809
- #: src/processors/loginprotect_wplogin.php:57
9810
- #: src/processors/loginprotect_wplogin.php:61
9811
- #, php-format
9812
- msgid ""
9813
- "Can not use the Rename WP Login feature because you have the \"%s\" plugin "
9814
- "installed and it is active."
9815
  msgstr ""
9816
 
9817
- #: src/processors/loginprotect_wplogin.php:65
9818
- #, php-format
 
 
 
9819
  msgid ""
9820
- "Can not use the Rename WP Login feature because you have not enabled %s."
 
9821
  msgstr ""
9822
 
9823
- #: src/processors/loginprotect_wplogin.php:65
9824
- msgid "Permalinks"
 
 
9825
  msgstr ""
9826
 
9827
- #: src/processors/loginprotect_wplogin.php:69
9828
- #, php-format
9829
- msgid ""
9830
- "Can not use the Rename WP Login feature because you have chosen a path (\"%s"
9831
- "\") that is reserved on your WordPress site."
9832
  msgstr ""
9833
 
9834
- #: src/processors/loginprotect_wplogin.php:94
9835
- msgid ""
9836
- "Your login URL is unchanged because your current hosting/PHP configuration "
9837
- "cannot parse the necessary information."
9838
  msgstr ""
9839
 
9840
- #: src/processors/plugin.php:77
9841
- #, php-format
9842
- msgid "%s is provided by %s"
9843
  msgstr ""
9844
 
9845
- #: src/processors/plugin.php:82
9846
- #, php-format
9847
- msgid "Days Installed: %s"
9848
  msgstr ""
9849
 
9850
- #: src/processors/plugin_importexport.php:41
9851
- msgid "Import From File"
9852
  msgstr ""
9853
 
9854
- #: src/processors/plugin_importexport.php:42
9855
- msgid "Upload an exported options file you downloaded from another site"
 
 
9856
  msgstr ""
9857
 
9858
- #: src/processors/plugin_importexport.php:43
9859
- msgid "Select file to import options from"
9860
  msgstr ""
9861
 
9862
- #: src/processors/plugin_importexport.php:44
9863
- msgid "I Understand Existing Options Will Be Overwritten"
9864
  msgstr ""
9865
 
9866
- #: src/processors/plugin_importexport.php:45
9867
- msgid "Please be sure that this is what you want."
9868
  msgstr ""
9869
 
9870
- #: src/processors/plugin_importexport.php:46
9871
- msgid "This action can't be undone."
 
 
9872
  msgstr ""
9873
 
9874
- #: src/processors/plugin_importexport.php:47
9875
- msgid "Import From Site"
9876
  msgstr ""
9877
 
9878
- #: src/processors/plugin_importexport.php:49
9879
- msgid "Download Options Export File"
9880
  msgstr ""
9881
 
9882
- #: src/processors/plugin_importexport.php:50
9883
- msgid "Use this file to copy options from this site into another site"
9884
  msgstr ""
9885
 
9886
- #: src/processors/plugin_importexport.php:52
9887
- msgid "Import options directly from another site"
9888
  msgstr ""
9889
 
9890
- #: src/processors/plugin_importexport.php:53
9891
- msgid "Master Site URL"
9892
  msgstr ""
9893
 
9894
- #: src/processors/plugin_importexport.php:55
9895
- #, php-format
9896
- msgid "Remember to include %s or %s"
 
9897
  msgstr ""
9898
 
9899
- #: src/processors/plugin_importexport.php:60
9900
- msgid "Master Site Secret Key"
9901
  msgstr ""
9902
 
9903
- #: src/processors/plugin_importexport.php:61
9904
- msgid "Create Shield Network"
9905
  msgstr ""
9906
 
9907
- #: src/processors/plugin_importexport.php:62
9908
- #, php-format
9909
- msgid "The secret key is found in: %s"
9910
  msgstr ""
9911
 
9912
- #: src/processors/plugin_importexport.php:65
9913
- msgid "Turn On"
 
 
9914
  msgstr ""
9915
 
9916
- #: src/processors/plugin_importexport.php:67
9917
- msgid "No Change"
9918
  msgstr ""
9919
 
9920
- #: src/processors/plugin_importexport.php:69
9921
- msgid "Checking this option on will link this site to Master site."
9922
  msgstr ""
9923
 
9924
- #: src/processors/plugin_importexport.php:70
9925
- msgid "Options will be automatically imported from the Master site each night"
9926
  msgstr ""
9927
 
9928
- #: src/processors/plugin_importexport.php:71
9929
  msgid ""
9930
- "When you adjust options on the Master site, they will be reflected in this "
9931
- "site after the automatic import"
9932
  msgstr ""
9933
 
9934
- #: src/processors/plugin_importexport.php:73
9935
- msgid "Import Options"
9936
  msgstr ""
9937
 
9938
- #: src/processors/plugin_importexport.php:217
9939
- msgid "Not currently logged-in as security admin"
9940
  msgstr ""
9941
 
9942
- #: src/processors/plugin_importexport.php:227
9943
- msgid "Please select a file to upload"
 
 
9944
  msgstr ""
9945
 
9946
- #: src/processors/plugin_importexport.php:234
9947
- msgid "Uploading of file failed"
9948
  msgstr ""
9949
 
9950
- #: src/processors/plugin_importexport.php:239
9951
- msgid "Uploaded file was empty"
9952
  msgstr ""
9953
 
9954
- #: src/processors/plugin_importexport.php:250
9955
- msgid "Options data could not be found in uploaded file"
9956
  msgstr ""
9957
 
9958
- #: src/processors/plugin_importexport.php:256
9959
- msgid "Uploaded options data was not of the correct format"
 
9960
  msgstr ""
9961
 
9962
- #: src/processors/plugin_importexport.php:260
9963
- msgid "uploaded file"
 
 
9964
  msgstr ""
9965
 
9966
- #: src/processors/plugin_importexport.php:281
9967
- #: src/processors/plugin_importexport.php:365
9968
- #, php-format
9969
- msgid "Not currently running %s Pro."
9970
  msgstr ""
9971
 
9972
- #: src/processors/plugin_importexport.php:286
9973
- #: src/processors/plugin_importexport.php:370
9974
- msgid "Export of options is currently disabled."
9975
  msgstr ""
9976
 
9977
- #: src/processors/plugin_importexport.php:374
9978
- msgid "Handshake verification failed."
 
9979
  msgstr ""
9980
 
9981
- #: src/processors/sessions.php:95
9982
- msgid "You're already logged-in."
 
9983
  msgstr ""
9984
 
9985
- #: src/processors/sessions.php:99
9986
- msgid "Go To Admin"
 
9987
  msgstr ""
9988
 
9989
- #: src/processors/user_management.php:124
9990
- #: src/processors/usermanagement_suspend.php:111
9991
- msgid "User Status"
9992
  msgstr ""
9993
 
9994
- #: src/processors/user_management.php:131
9995
- msgid "Not Recorded"
9996
  msgstr ""
9997
 
9998
- #: src/processors/user_management.php:142
9999
- msgid "Last Login"
10000
  msgstr ""
10001
 
10002
- #: src/processors/user_management.php:194
10003
- #, php-format
10004
- msgid ""
10005
- "As requested, %s is notifying you of a successful %s login to a WordPress "
10006
- "site that you manage."
10007
  msgstr ""
10008
 
10009
- #: src/processors/user_management.php:199
10010
- #, php-format
10011
- msgid "Important: %s"
10012
  msgstr ""
10013
 
10014
- #: src/processors/user_management.php:199
10015
- msgid ""
10016
- "This user may now be subject to additional Two-Factor Authentication before "
10017
- "completing their login."
10018
  msgstr ""
10019
 
10020
- #: src/processors/user_management.php:201
10021
- msgid "Details for this user are below:"
 
 
 
10022
  msgstr ""
10023
 
10024
- #: src/processors/user_management.php:207
10025
- #: src/processors/user_management.php:241
10026
- msgid "Thanks."
10027
  msgstr ""
10028
 
10029
- #: src/processors/user_management.php:215
10030
- #: src/processors/user_management.php:249
10031
- msgid "Notice"
10032
  msgstr ""
10033
 
10034
- #: src/processors/user_management.php:215
10035
- #, php-format
10036
- msgid "%s Just Logged Into %s"
10037
  msgstr ""
10038
 
10039
- #: src/processors/user_management.php:230
10040
- #, php-format
10041
- msgid "%s is notifying you of a successful login to your WordPress account."
10042
  msgstr ""
10043
 
10044
- #: src/processors/user_management.php:233
10045
- msgid "Details for this login are below:"
 
10046
  msgstr ""
10047
 
10048
- #: src/processors/user_management.php:239
10049
- msgid ""
10050
- "If this is unexpected or suspicious, please contact your site administrator "
10051
- "immediately."
10052
  msgstr ""
10053
 
10054
- #: src/processors/user_management.php:249
10055
- msgid "A login to your WordPress account just occurred"
 
10056
  msgstr ""
10057
 
10058
- #: src/processors/usermanagement_passwords.php:98
10059
- #, php-format
10060
- msgid "Your password has expired (after %s days)."
10061
  msgstr ""
10062
 
10063
- #: src/processors/usermanagement_passwords.php:115
10064
- msgid ""
10065
- "Your password doesn't meet requirements set by your security administrator."
10066
  msgstr ""
10067
 
10068
- #: src/processors/usermanagement_passwords.php:141
10069
- msgid ""
10070
- "For your security, please use the password section below to update your "
10071
- "password."
10072
  msgstr ""
10073
 
10074
- #: src/processors/usermanagement_passwords.php:173
10075
- msgid ""
10076
- "Your security administrator has imposed requirements for password quality."
10077
  msgstr ""
10078
 
10079
- #: src/processors/usermanagement_passwords.php:174
10080
- msgid "Reason"
 
10081
  msgstr ""
10082
 
10083
- #: src/processors/usermanagement_passwords.php:239
10084
- #, php-format
10085
- msgid "Password length (%s) too short (min: %s characters)"
10086
  msgstr ""
10087
 
10088
- #: src/processors/usermanagement_passwords.php:294
10089
- #: src/processors/usermanagement_passwords.php:356
10090
- msgid "Please use a different password."
10091
  msgstr ""
10092
 
10093
- #: src/processors/usermanagement_passwords.php:295
10094
- msgid "This password has already been pwned."
10095
  msgstr ""
10096
 
10097
- #: src/processors/usermanagement_passwords.php:299
10098
- #: src/processors/usermanagement_passwords.php:361
10099
- #, php-format
10100
- msgid "%s times"
10101
  msgstr ""
10102
 
10103
- #: src/processors/usermanagement_passwords.php:357
10104
- msgid "This password has been pwned."
10105
  msgstr ""
10106
 
10107
- #: src/processors/usermanagement_sessions.php:218
10108
- msgid "Your session has expired."
10109
  msgstr ""
10110
 
10111
- #: src/processors/usermanagement_sessions.php:222
10112
- msgid "Your session was idle for too long."
10113
  msgstr ""
10114
 
10115
- #: src/processors/usermanagement_sessions.php:226
10116
- msgid "Your session was locked to another IP Address."
10117
  msgstr ""
10118
 
10119
- #: src/processors/usermanagement_sessions.php:231
10120
  #, php-format
10121
- msgid "You do not currently have a %s user session."
10122
- msgstr ""
 
 
10123
 
10124
- #: src/processors/usermanagement_sessions.php:237
10125
- msgid "Your browser appears to have changed for this session."
10126
  msgstr ""
10127
 
10128
- #: src/processors/usermanagement_sessions.php:242
10129
- msgid "Your session was terminated."
10130
  msgstr ""
10131
 
10132
- #: src/processors/usermanagement_sessions.php:246
10133
- msgid "Please login again."
10134
  msgstr ""
10135
 
10136
- #: src/processors/usermanagement_suspend.php:89
10137
- #: src/processors/usermanagement_suspend.php:123
10138
- #: src/processors/usermanagement_suspend.php:156
10139
- msgid "Suspended"
10140
  msgstr ""
10141
 
10142
- #: src/processors/usermanagement_suspend.php:152
10143
- msgid "Suspend Account"
 
 
 
10144
  msgstr ""
10145
 
10146
- #: src/processors/usermanagement_suspend.php:153
10147
- msgid "Check to un/suspend user account"
 
10148
  msgstr ""
10149
 
10150
- #: src/processors/usermanagement_suspend.php:154
10151
- msgid "The user can never login while their account is suspended."
 
10152
  msgstr ""
10153
 
10154
- #: src/processors/usermanagement_suspend.php:155
10155
- msgid ""
10156
- "Sorry, suspension for this account may only be managed by a security "
10157
- "administrator."
10158
  msgstr ""
10159
 
10160
- #: src/wizards/base.php:208
10161
  msgid "Next Step"
10162
  msgstr ""
10163
 
10164
- #: src/wizards/base.php:360
10165
  #, php-format
10166
  msgid "%s Wizard"
10167
  msgstr ""
10168
 
10169
- #: src/wizards/base.php:502
10170
  msgid "No Access"
10171
  msgstr ""
10172
 
10173
- #: src/wizards/base_wpsf.php:107
10174
- msgid "Security Admin Key was not correct."
10175
  msgstr ""
10176
 
10177
- #: src/wizards/login_protect.php:14
10178
  #, php-format
10179
  msgid "%s Multi-Factor Authentication Wizard"
10180
  msgstr ""
10181
 
10182
- #: src/wizards/login_protect.php:59
10183
  msgid "Invalid email address"
10184
  msgstr ""
10185
 
10186
- #: src/wizards/login_protect.php:66
10187
  msgid "Verification email sent (please check your email including your SPAM)."
10188
  msgstr ""
10189
 
10190
- #: src/wizards/login_protect.php:67
10191
  msgid ""
10192
  "Enter the code from the email into the form above and click the button to "
10193
  "verify."
10194
  msgstr ""
10195
 
10196
- #: src/wizards/login_protect.php:116
10197
- msgid "Code was empty."
10198
- msgstr ""
10199
-
10200
- #: src/wizards/login_protect.php:143
10201
- msgid "Google Authenticator was enabled for the site."
10202
- msgstr ""
10203
-
10204
- #: src/wizards/login_protect.php:158
10205
- #, php-format
10206
- msgid "Multi-Factor Authentication was %s for the site."
10207
- msgstr ""
10208
-
10209
- #: src/wizards/login_protect.php:159
10210
- msgid "enabled"
10211
- msgstr ""
10212
-
10213
- #: src/wizards/login_protect.php:159
10214
- msgid "disabled"
10215
- msgstr ""
10216
-
10217
- #: src/wizards/plugin.php:14
10218
  #, php-format
10219
  msgid "%s Welcome Wizard"
10220
  msgstr ""
10221
 
10222
- #: src/wizards/plugin.php:242
10223
  msgid "Where to find Shield"
10224
  msgstr ""
10225
 
10226
- #: src/wizards/plugin.php:243
10227
  msgid "Accessing Each Module"
10228
  msgstr ""
10229
 
10230
- #: src/wizards/plugin.php:244
10231
  msgid "Accessing Options"
10232
  msgstr ""
10233
 
10234
- #: src/wizards/plugin.php:245
10235
  msgid "Launching Wizards"
10236
  msgstr ""
10237
 
10238
- #: src/wizards/plugin.php:246
10239
  msgid "Finding Help"
10240
  msgstr ""
10241
 
10242
- #: src/wizards/plugin.php:247
10243
  msgid "Actions (not Options)"
10244
  msgstr ""
10245
 
10246
- #: src/wizards/plugin.php:248
10247
  msgid "Help For Each Option"
10248
  msgstr ""
10249
 
10250
- #: src/wizards/plugin.php:249
10251
  msgid "Module On/Off Switch"
10252
  msgstr ""
10253
 
10254
- #: src/wizards/plugin.php:252
10255
  #, php-format
10256
  msgid "You'll find the main %s settings in the left-hand WordPress menu."
10257
  msgstr ""
10258
 
10259
- #: src/wizards/plugin.php:253
10260
  msgid ""
10261
  "Shield is split up into independent modules for accessing the options of "
10262
  "each feature."
10263
  msgstr ""
10264
 
10265
- #: src/wizards/plugin.php:254
10266
  msgid ""
10267
  "When you load a module, you can access the options by clicking on the "
10268
  "Options Panel link."
10269
  msgstr ""
10270
 
10271
- #: src/wizards/plugin.php:255
10272
  msgid "Launch helpful walk-through wizards for modules that have them."
10273
  msgstr ""
10274
 
10275
- #: src/wizards/plugin.php:256
10276
  msgid ""
10277
  "Each module also has a brief overview help section - there is more in-depth "
10278
  "help available."
10279
  msgstr ""
10280
 
10281
- #: src/wizards/plugin.php:257
10282
  msgid ""
10283
  "Certain modules have extra actions and features, e.g. Audit Trail Viewer."
10284
  msgstr ""
10285
 
10286
- #: src/wizards/plugin.php:258
10287
  msgid "Note: Not all modules have the actions section"
10288
  msgstr ""
10289
 
10290
- #: src/wizards/plugin.php:259
10291
  msgid ""
10292
  "Each module has an Enable/Disable checkbox to turn on/off all processing for "
10293
  "that module"
10294
  msgstr ""
10295
 
10296
- #: src/wizards/plugin.php:260
10297
  msgid ""
10298
  "To help you understand each option, most of them have a more info link, and/"
10299
  "or a blog link, to read more"
10300
  msgstr ""
10301
 
10302
- #: src/wizards/plugin.php:336
10303
  msgid "IP address was empty."
10304
  msgstr ""
10305
 
10306
- #: src/wizards/plugin.php:339
10307
  msgid "IP address wasn't a valid public IP address."
10308
  msgstr ""
10309
 
10310
- #: src/wizards/plugin.php:347
10311
- msgid "The address source couldn't be found from this IP."
10312
  msgstr ""
10313
 
10314
- #: src/wizards/plugin.php:355
10315
  msgid "Success!"
10316
  msgstr ""
10317
 
10318
- #: src/wizards/plugin.php:376
10319
  msgid "License was found and successfully installed."
10320
  msgstr ""
10321
 
10322
- #: src/wizards/plugin.php:379
10323
  msgid "License could not be found."
10324
  msgstr ""
10325
 
10326
- #: src/wizards/plugin.php:409
10327
  msgid "Options imported successfully to your site."
10328
  msgstr ""
10329
 
10330
- #: src/wizards/plugin.php:410
10331
  msgid "Secret key was empty."
10332
  msgstr ""
10333
 
10334
- #: src/wizards/plugin.php:411
10335
  msgid "Secret key was not 40 characters long."
10336
  msgstr ""
10337
 
10338
- #: src/wizards/plugin.php:412
10339
  msgid ""
10340
  "Secret key contains invalid characters - it should be letters and numbers "
10341
  "only."
10342
  msgstr ""
10343
 
10344
- #: src/wizards/plugin.php:413
10345
  msgid "Source site URL could not be parsed correctly."
10346
  msgstr ""
10347
 
10348
- #: src/wizards/plugin.php:414
10349
  msgid "Could not parse the response from the site."
10350
  msgstr ""
10351
 
10352
- #: src/wizards/plugin.php:415
10353
  msgid "Check the secret key is correct for the remote site."
10354
  msgstr ""
10355
 
10356
- #: src/wizards/plugin.php:416
10357
  msgid "Failure response returned from the site."
10358
  msgstr ""
10359
 
10360
- #: src/wizards/plugin.php:417
10361
  #, php-format
10362
  msgid "Remote site responded with - %s"
10363
  msgstr ""
10364
 
10365
- #: src/wizards/plugin.php:418
10366
  msgid "Data returned from the site was empty."
10367
  msgstr ""
10368
 
10369
- #: src/wizards/plugin.php:450
10370
- msgid "Security Admin setup was successful."
10371
  msgstr ""
10372
 
10373
- #: src/wizards/plugin.php:469 src/wizards/plugin.php:502
10374
- #: src/wizards/plugin.php:535 src/wizards/plugin.php:571
10375
- #: src/wizards/plugin.php:679
10376
- msgid "No changes were made as no option was selected"
10377
  msgstr ""
10378
 
10379
- #: src/wizards/plugin.php:482 src/wizards/plugin.php:515
10380
- #: src/wizards/plugin.php:550 src/wizards/plugin.php:695
10381
- msgid "Enabled"
10382
  msgstr ""
10383
 
10384
- #: src/wizards/plugin.php:486 src/wizards/plugin.php:519
10385
- #: src/wizards/plugin.php:554 src/wizards/plugin.php:699
10386
- #, php-format
10387
- msgid "%s setting could not be changed at this time."
10388
  msgstr ""
10389
 
10390
- #: src/wizards/plugin.php:581 src/wizards/plugin.php:591
10391
- msgid "Preferences have been saved."
 
 
10392
  msgstr ""
10393
 
10394
- #: src/wizards/plugin.php:643
10395
- msgid "Search item added."
 
 
 
10396
  msgstr ""
10397
 
10398
- #: src/wizards/plugin.php:661
10399
- msgid "All entries were deleted"
 
10400
  msgstr ""
10401
 
10402
- #: src/wizards/plugin.php:664
10403
- msgid "Please check the box to confirm deletion."
10404
  msgstr ""
10405
 
10406
  #~ msgid "Google"
1
  msgid ""
2
  msgstr ""
3
  "Project-Id-Version: WPSF v2.0\n"
4
+ "POT-Creation-Date: 2022-02-01 15:09+0000\n"
5
+ "PO-Revision-Date: 2022-02-01 15:09+0000\n"
6
  "Last-Translator: \n"
7
  "Language-Team: \n"
8
  "Language: en_GB\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
13
+ "X-Generator: Poedit 3.0.1\n"
14
  "X-Poedit-KeywordsList: _wpsf__;gettext;gettext_noop;_wpsf_e;_n;_n:1,2;__;_e\n"
15
  "X-Poedit-Basepath: ..\n"
16
  "X-Poedit-SourceCharset: UTF-8\n"
 
17
  "X-Poedit-SearchPath-0: .\n"
18
  "X-Poedit-SearchPathExcluded-0: .git\n"
19
  "X-Poedit-SearchPathExcluded-1: .idea\n"
22
  "X-Poedit-SearchPathExcluded-4: src/lib/vendor\n"
23
  "X-Poedit-SearchPathExcluded-5: resources\n"
24
 
25
+ #: src/lib/src/Controller/Controller.php:658
26
+ msgid "Update Now To Keep Your Security Current With The Latest Features."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  msgstr ""
28
 
29
+ #: src/lib/src/Modules/AuditTrail/AdminNotices.php:46
30
+ msgid "Your Security Audit Log Is Brand New"
31
  msgstr ""
32
 
33
+ #: src/lib/src/Modules/AuditTrail/AdminNotices.php:48
34
+ msgid ""
35
+ "We've completely completely rewritten the security audit log making it more "
36
+ "detailed, searchable, faster, and more."
37
  msgstr ""
38
 
39
+ #: src/lib/src/Modules/AuditTrail/AdminNotices.php:49
40
+ msgid ""
41
+ "Every effort has been made to convert old data to the new format, but it "
42
+ "wasn't 100% possible."
43
  msgstr ""
44
 
45
+ #: src/lib/src/Modules/AuditTrail/AdminNotices.php:50
46
+ msgid ""
47
+ "Some older events may have missing data, but all new events will populate "
48
+ "properly."
49
  msgstr ""
50
 
51
+ #: src/lib/src/Modules/AuditTrail/AdminNotices.php:52
52
+ msgid "Click here to read more about the changes"
53
  msgstr ""
54
 
55
+ #: src/lib/src/Modules/AuditTrail/Auditors/Emails.php:21
56
+ msgid "not provided"
57
  msgstr ""
58
 
59
+ #: src/lib/src/Modules/AuditTrail/Insights/OverviewCards.php:20
60
+ #: src/lib/src/Modules/AuditTrail/Strings.php:208
61
+ msgid "Audit Areas"
62
  msgstr ""
63
 
64
+ #: src/lib/src/Modules/AuditTrail/Insights/OverviewCards.php:22
65
+ msgid "All important events on your site are being logged"
66
  msgstr ""
67
 
68
+ #: src/lib/src/Modules/AuditTrail/Insights/OverviewCards.php:27
69
+ #: src/lib/src/Modules/AuditTrail/Strings.php:189
70
+ #: src/lib/src/Modules/AuditTrail/UI.php:22
71
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:50
72
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:159
73
+ #: src/lib/src/Modules/Insights/UI.php:199
74
+ #: src/lib/src/Modules/Insights/UI.php:200
75
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:212
76
+ #: src/lib/src/Modules/Plugin/Strings.php:530 src/wizards/plugin.php:591
77
+ #: src/wizards/plugin.php:596
78
+ msgid "Audit Trail"
79
  msgstr ""
80
 
81
+ #: src/lib/src/Modules/AuditTrail/Insights/OverviewCards.php:29
 
 
 
 
 
 
 
 
82
  #, php-format
83
+ msgid "Audit Trail entries limited to maximum %s days"
 
 
 
 
 
 
 
 
 
 
 
 
84
  msgstr ""
85
 
86
+ #: src/lib/src/Modules/AuditTrail/Insights/OverviewCards.php:38
87
+ msgid "Activity Audit Log"
88
  msgstr ""
89
 
90
+ #: src/lib/src/Modules/AuditTrail/Lib/AuditMessageBuilder.php:29
91
+ #, php-format
92
+ msgid "This event repeated %s times in the last 24hrs."
93
  msgstr ""
94
 
95
+ #: src/lib/src/Modules/AuditTrail/Lib/LogTable/LoadRawTableData.php:27
96
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildHistory.php:88
97
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildInfo.php:126
98
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:193
99
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:194
100
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:198
101
+ #: src/lib/src/Modules/Traffic/Lib/TrafficTable/LoadRawTableData.php:60
102
+ #: src/lib/src/Modules/Traffic/Lib/TrafficTable/LoadRawTableData.php:66
103
+ #: src/lib/src/Modules/Traffic/Lib/TrafficTable/LoadRawTableData.php:72
104
+ #: src/lib/src/Modules/Traffic/Lib/TrafficTable/LoadRawTableData.php:100
105
+ msgid "Unknown"
106
  msgstr ""
107
 
108
+ #: src/lib/src/Modules/AuditTrail/ModCon.php:98
109
  #, php-format
110
  msgid "[%s] Audit Trail Entries"
111
  msgstr ""
112
 
113
+ #: src/lib/src/Modules/AuditTrail/ModCon.php:100
114
+ #, php-format
115
+ msgid "[%s] Audit Trail Entries referencing the given user."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
116
  msgstr ""
117
 
118
+ #: src/lib/src/Modules/AuditTrail/Strings.php:15
119
+ msgid "Plugin Activated"
120
  msgstr ""
121
 
122
+ #: src/lib/src/Modules/AuditTrail/Strings.php:17
123
+ msgid "Plugin \"{{plugin}}\" was activated."
124
  msgstr ""
125
 
126
+ #: src/lib/src/Modules/AuditTrail/Strings.php:21
127
+ msgid "Plugin Deactivated"
 
128
  msgstr ""
129
 
130
+ #: src/lib/src/Modules/AuditTrail/Strings.php:23
131
+ msgid "Plugin \"{{plugin}}\" was deactivated."
132
  msgstr ""
133
 
134
+ #: src/lib/src/Modules/AuditTrail/Strings.php:27
135
+ msgid "Plugin Upgraded"
 
136
  msgstr ""
137
 
138
+ #: src/lib/src/Modules/AuditTrail/Strings.php:29
139
+ msgid ""
140
+ "Plugin \"{{plugin}}\" was upgraded from version {{from}} to version {{to}}."
141
  msgstr ""
142
 
143
+ #: src/lib/src/Modules/AuditTrail/Strings.php:33
144
+ msgid "Plugin File Edited"
 
145
  msgstr ""
146
 
147
+ #: src/lib/src/Modules/AuditTrail/Strings.php:35
148
+ msgid ""
149
+ "An attempt was made to edit the plugin file \"{{file}}\" directly through "
150
+ "the WordPress editor."
 
151
  msgstr ""
152
 
153
+ #: src/lib/src/Modules/AuditTrail/Strings.php:39
154
+ msgid "Theme Activated"
 
155
  msgstr ""
156
 
157
+ #: src/lib/src/Modules/AuditTrail/Strings.php:41
158
+ msgid "Theme \"{{theme}}\" was activated."
 
 
 
159
  msgstr ""
160
 
161
+ #: src/lib/src/Modules/AuditTrail/Strings.php:45
162
+ msgid "Theme File Edited"
163
  msgstr ""
164
 
165
+ #: src/lib/src/Modules/AuditTrail/Strings.php:47
 
166
  msgid ""
167
+ "An attempt was made to edit the theme file \"{{file}}\" directly through the "
168
+ "WordPress editor."
 
 
 
169
  msgstr ""
170
 
171
+ #: src/lib/src/Modules/AuditTrail/Strings.php:51
172
+ msgid "Theme Upgraded"
173
  msgstr ""
174
 
175
+ #: src/lib/src/Modules/AuditTrail/Strings.php:53
176
+ msgid ""
177
+ "Theme \"{{theme}}\" was upgraded from version {{from}} to version {{to}}."
178
  msgstr ""
179
 
180
+ #: src/lib/src/Modules/AuditTrail/Strings.php:57
181
+ msgid "WP Core Updated"
182
  msgstr ""
183
 
184
+ #: src/lib/src/Modules/AuditTrail/Strings.php:59
185
+ msgid "WordPress Core was updated from \"{{from}}\" to \"{{to}}\"."
186
  msgstr ""
187
 
188
+ #: src/lib/src/Modules/AuditTrail/Strings.php:63
189
+ msgid "Permalinks Updated"
190
  msgstr ""
191
 
192
+ #: src/lib/src/Modules/AuditTrail/Strings.php:65
193
+ msgid ""
194
+ "WordPress Permalinks Structure was updated from \"{{from}}\" to \"{{to}}\"."
195
  msgstr ""
196
 
197
+ #: src/lib/src/Modules/AuditTrail/Strings.php:69
198
+ msgid "Post Deleted"
 
199
  msgstr ""
200
 
201
+ #: src/lib/src/Modules/AuditTrail/Strings.php:71
202
+ msgid ""
203
+ "WordPress Post entitled \"{{title}}\" was permanently deleted from trash."
204
  msgstr ""
205
 
206
+ #: src/lib/src/Modules/AuditTrail/Strings.php:75
207
+ msgid "Post Trashed"
208
  msgstr ""
209
 
210
+ #: src/lib/src/Modules/AuditTrail/Strings.php:77
211
+ msgid "Post entitled \"{{title}}\" was trashed."
212
  msgstr ""
213
 
214
+ #: src/lib/src/Modules/AuditTrail/Strings.php:78
215
+ #: src/lib/src/Modules/AuditTrail/Strings.php:85
216
+ #: src/lib/src/Modules/AuditTrail/Strings.php:92
217
+ #: src/lib/src/Modules/AuditTrail/Strings.php:99
218
+ #: src/lib/src/Modules/AuditTrail/Strings.php:106
219
+ msgid "Post Type: {{type}}"
220
  msgstr ""
221
 
222
+ #: src/lib/src/Modules/AuditTrail/Strings.php:82
223
+ msgid "Post Recovered"
 
224
  msgstr ""
225
 
226
+ #: src/lib/src/Modules/AuditTrail/Strings.php:84
227
+ msgid "Post entitled \"{{title}}\" was recovered from trash."
 
 
228
  msgstr ""
229
 
230
+ #: src/lib/src/Modules/AuditTrail/Strings.php:89
231
+ msgid "Post Updated"
 
 
232
  msgstr ""
233
 
234
+ #: src/lib/src/Modules/AuditTrail/Strings.php:91
235
+ msgid "Post entitled \"{{title}}\" was updated."
236
  msgstr ""
237
 
238
+ #: src/lib/src/Modules/AuditTrail/Strings.php:96
239
+ msgid "Post Published"
240
  msgstr ""
241
 
242
+ #: src/lib/src/Modules/AuditTrail/Strings.php:98
243
+ msgid "Post entitled \"{{title}}\" was published."
 
 
 
 
 
 
 
 
 
244
  msgstr ""
245
 
246
+ #: src/lib/src/Modules/AuditTrail/Strings.php:103
247
+ msgid "Post Unpublished"
248
  msgstr ""
249
 
250
+ #: src/lib/src/Modules/AuditTrail/Strings.php:105
251
+ msgid "Post entitled \"{{title}}\" was unpublished."
 
252
  msgstr ""
253
 
254
+ #: src/lib/src/Modules/AuditTrail/Strings.php:110
255
+ msgid "User Login"
256
  msgstr ""
257
 
258
+ #: src/lib/src/Modules/AuditTrail/Strings.php:112
259
+ msgid "Attempted user login by \"{{user_login}}\" was successful."
260
  msgstr ""
261
 
262
+ #: src/lib/src/Modules/AuditTrail/Strings.php:116
263
+ msgid "User Login By App Password"
264
  msgstr ""
265
 
266
+ #: src/lib/src/Modules/AuditTrail/Strings.php:118
267
+ msgid ""
268
+ "Attempted login by \"{{user_login}}\" using application password was "
269
+ "successful."
270
  msgstr ""
271
 
272
+ #: src/lib/src/Modules/AuditTrail/Strings.php:122
273
+ msgid "User Registered"
 
274
  msgstr ""
275
 
276
+ #: src/lib/src/Modules/AuditTrail/Strings.php:124
277
+ msgid "New WordPress user registered."
278
  msgstr ""
279
 
280
+ #: src/lib/src/Modules/AuditTrail/Strings.php:125
281
+ msgid "New username is \"{{user_login}}\" with email address \"{{email}}\"."
282
  msgstr ""
283
 
284
+ #: src/lib/src/Modules/AuditTrail/Strings.php:129
285
+ msgid "User Deleted"
286
  msgstr ""
287
 
288
+ #: src/lib/src/Modules/AuditTrail/Strings.php:131
289
+ msgid "WordPress user deleted."
 
290
  msgstr ""
291
 
292
+ #: src/lib/src/Modules/AuditTrail/Strings.php:132
293
+ msgid "Username was \"{{user_login}}\" with email address \"{{email}}\"."
294
  msgstr ""
295
 
296
+ #: src/lib/src/Modules/AuditTrail/Strings.php:136
297
+ msgid "User Deleted And Reassigned"
298
  msgstr ""
299
 
300
+ #: src/lib/src/Modules/AuditTrail/Strings.php:138
301
+ msgid "Deleted user posts were reassigned to user \"{{user_login}}\"."
 
302
  msgstr ""
303
 
304
+ #: src/lib/src/Modules/AuditTrail/Strings.php:142
305
+ msgid "Email Sent"
306
  msgstr ""
307
 
308
+ #: src/lib/src/Modules/AuditTrail/Strings.php:144
309
+ msgid "There was an attempt to send an email using the \"wp_mail\" function."
310
  msgstr ""
311
 
312
+ #: src/lib/src/Modules/AuditTrail/Strings.php:145
313
+ msgid ""
314
+ "This log entry doesn't mean it was sent or received successfully, but only "
315
+ "that an attempt was made."
316
  msgstr ""
317
 
318
+ #: src/lib/src/Modules/AuditTrail/Strings.php:146
319
+ msgid "It was sent to \"{{to}}\" with the subject \"{{subject}}\"."
320
  msgstr ""
321
 
322
+ #: src/lib/src/Modules/AuditTrail/Strings.php:148
323
+ msgid ""
324
+ "The \"wp_mail\" function was called from the file \"{{bt_file}}\" on line "
325
+ "{{bt_line}}."
326
  msgstr ""
327
 
328
+ #: src/lib/src/Modules/AuditTrail/Strings.php:159
329
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:500
330
+ msgid "Users"
 
 
 
 
 
 
 
 
 
331
  msgstr ""
332
 
333
+ #: src/lib/src/Modules/AuditTrail/Strings.php:160
334
+ #: src/lib/src/Modules/Autoupdates/Strings.php:122
335
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionPlugins.php:62
336
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:166
337
+ msgid "Plugins"
338
  msgstr ""
339
 
340
+ #: src/lib/src/Modules/AuditTrail/Strings.php:161
341
+ #: src/lib/src/Modules/Autoupdates/Strings.php:128
342
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionThemes.php:64
343
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:185
344
+ msgid "Themes"
345
  msgstr ""
346
 
347
+ #: src/lib/src/Modules/AuditTrail/Strings.php:162
348
+ msgid "WordPress"
349
  msgstr ""
350
 
351
+ #: src/lib/src/Modules/AuditTrail/Strings.php:163
352
+ msgid "Posts"
353
  msgstr ""
354
 
355
+ #: src/lib/src/Modules/AuditTrail/Strings.php:164
356
+ msgid "Emails"
357
  msgstr ""
358
 
359
+ #: src/lib/src/Modules/AuditTrail/Strings.php:165
360
+ #: src/lib/src/Modules/UserManagement/Processor.php:235
361
+ msgid "Time"
362
  msgstr ""
363
 
364
+ #: src/lib/src/Modules/AuditTrail/Strings.php:166
365
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:422
366
+ #: src/lib/src/Tables/DataTables/Build/AuditTrail/ForAuditTrail.php:43
367
+ msgid "Event"
368
  msgstr ""
369
 
370
+ #: src/lib/src/Modules/AuditTrail/Strings.php:167
371
+ #: src/lib/src/Modules/IPs/Strings.php:154
372
+ #: src/lib/src/Tables/DataTables/Build/AuditTrail/ForAuditTrail.php:128
373
+ msgid "Message"
374
  msgstr ""
375
 
376
+ #: src/lib/src/Modules/AuditTrail/Strings.php:168
377
+ #: src/lib/src/Modules/Base/Strings.php:57
378
+ #: src/lib/src/Modules/IPs/Lib/AutoUnblock.php:205
379
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:236
380
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:420
381
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BackupCodes.php:116
382
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Email.php:108
383
+ #: src/lib/src/Modules/UserManagement/Processor.php:208
384
+ #: src/lib/src/Modules/UserManagement/Processor.php:233
385
+ #: src/lib/src/Modules/UserManagement/Strings.php:89
386
+ #: src/lib/src/Modules/UserManagement/UI.php:32
387
+ #: src/lib/src/Tables/Render/WpListTable/AdminNotes.php:27
388
+ msgid "Username"
389
  msgstr ""
390
 
391
+ #: src/lib/src/Modules/AuditTrail/Strings.php:169
392
+ msgid "Category"
 
 
 
 
393
  msgstr ""
394
 
395
+ #: src/lib/src/Modules/AuditTrail/Strings.php:170
396
+ #: src/lib/src/Modules/Base/Strings.php:68
397
+ #: src/lib/src/Modules/IPs/Lib/AutoUnblock.php:206
398
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BackupCodes.php:117
399
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Email.php:109
400
+ #: src/lib/src/Modules/Plugin/Strings.php:519
401
+ #: src/lib/src/Modules/UserManagement/Processor.php:210
402
+ #: src/lib/src/Modules/UserManagement/Processor.php:234
403
+ #: src/lib/src/Tables/DataTables/Build/AuditTrail/ForAuditTrail.php:87
404
+ #: src/lib/src/Tables/DataTables/Build/Traffic/ForTraffic.php:75
405
+ #: src/lib/src/Tables/Render/WpListTable/IpBase.php:17
406
+ #: src/lib/src/Tables/Render/WpListTable/IpBlack.php:33
407
+ #: src/lib/src/Tables/Render/WpListTable/IpWhite.php:12
408
+ msgid "IP Address"
409
  msgstr ""
410
 
411
+ #: src/lib/src/Modules/AuditTrail/Strings.php:171
412
+ #: src/lib/src/Tables/Build/Ip.php:70 src/lib/src/Tables/Build/Sessions.php:77
413
+ msgid "You"
414
  msgstr ""
415
 
416
+ #: src/lib/src/Modules/AuditTrail/Strings.php:172
417
+ msgid "There are currently no audit entries in this section."
418
  msgstr ""
419
 
420
+ #: src/lib/src/Modules/AuditTrail/Strings.php:184
421
+ #: src/lib/src/Modules/Autoupdates/Strings.php:19
422
+ #: src/lib/src/Modules/Base/Strings.php:46
423
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:71
424
+ #: src/lib/src/Modules/Firewall/Strings.php:19
425
+ #: src/lib/src/Modules/HackGuard/Strings.php:114
426
+ #: src/lib/src/Modules/Headers/Strings.php:19
427
+ #: src/lib/src/Modules/IPs/Strings.php:174
428
+ #: src/lib/src/Modules/Lockdown/Strings.php:39
429
+ #: src/lib/src/Modules/LoginGuard/Strings.php:78
430
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:40
431
+ #: src/lib/src/Modules/Sessions/Strings.php:52
432
+ #: src/lib/src/Modules/Traffic/Strings.php:34
433
+ #: src/lib/src/Modules/UserManagement/Strings.php:109
434
+ msgid "On"
435
  msgstr ""
436
 
437
+ #: src/lib/src/Modules/AuditTrail/Strings.php:184
438
+ #: src/lib/src/Modules/Autoupdates/Strings.php:19
439
+ #: src/lib/src/Modules/Base/Strings.php:47
440
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:71
441
+ #: src/lib/src/Modules/Firewall/Strings.php:19
442
+ #: src/lib/src/Modules/HackGuard/Strings.php:114
443
+ #: src/lib/src/Modules/Headers/Strings.php:19
444
+ #: src/lib/src/Modules/IPs/Strings.php:174
445
+ #: src/lib/src/Modules/Lockdown/Strings.php:39
446
+ #: src/lib/src/Modules/LoginGuard/Strings.php:78
447
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:40
448
+ #: src/lib/src/Modules/Sessions/Strings.php:52
449
+ #: src/lib/src/Modules/Traffic/Strings.php:34
450
+ #: src/lib/src/Modules/UserManagement/Strings.php:109
451
+ msgid "Off"
452
  msgstr ""
453
 
454
+ #: src/lib/src/Modules/AuditTrail/Strings.php:185
455
+ #: src/lib/src/Modules/Autoupdates/Strings.php:20
456
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:72
457
+ #: src/lib/src/Modules/Firewall/Strings.php:20
458
+ #: src/lib/src/Modules/HackGuard/Strings.php:115
459
+ #: src/lib/src/Modules/Headers/Strings.php:20
460
+ #: src/lib/src/Modules/IPs/Strings.php:175
461
+ #: src/lib/src/Modules/Lockdown/Strings.php:40
462
+ #: src/lib/src/Modules/LoginGuard/Strings.php:76
463
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:41
464
+ #: src/lib/src/Modules/Sessions/Strings.php:53
465
+ #: src/lib/src/Modules/Traffic/Strings.php:35
466
+ #: src/lib/src/Modules/UserManagement/Strings.php:110
467
  #, php-format
468
+ msgid "Enable Module: %s"
 
 
469
  msgstr ""
470
 
471
+ #: src/lib/src/Modules/AuditTrail/Strings.php:188
472
+ #: src/lib/src/Modules/AuditTrail/Strings.php:196
473
+ #: src/lib/src/Modules/AuditTrail/Strings.php:205
474
+ #: src/lib/src/Modules/Autoupdates/Strings.php:22
475
+ #: src/lib/src/Modules/Autoupdates/Strings.php:30
476
+ #: src/lib/src/Modules/Autoupdates/Strings.php:40
477
+ #: src/lib/src/Modules/Autoupdates/Strings.php:51
478
+ #: src/lib/src/Modules/Autoupdates/Strings.php:61
479
+ #: src/lib/src/Modules/Base/Strings.php:192
480
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:74
481
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:83
482
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:90
483
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:99
484
+ #: src/lib/src/Modules/Firewall/Strings.php:23
485
+ #: src/lib/src/Modules/HackGuard/Strings.php:109
486
+ #: src/lib/src/Modules/HackGuard/Strings.php:117
487
+ #: src/lib/src/Modules/HackGuard/Strings.php:126
488
+ #: src/lib/src/Modules/HackGuard/Strings.php:136
489
+ #: src/lib/src/Modules/HackGuard/Strings.php:147
490
+ #: src/lib/src/Modules/HackGuard/Strings.php:158
491
+ #: src/lib/src/Modules/HackGuard/Strings.php:223
492
+ #: src/lib/src/Modules/Headers/Strings.php:23
493
+ #: src/lib/src/Modules/Headers/Strings.php:31
494
+ #: src/lib/src/Modules/Headers/Strings.php:40
495
+ #: src/lib/src/Modules/IPs/Strings.php:177
496
+ #: src/lib/src/Modules/IPs/Strings.php:187
497
+ #: src/lib/src/Modules/Lockdown/Strings.php:43
498
+ #: src/lib/src/Modules/Lockdown/Strings.php:51
499
+ #: src/lib/src/Modules/Lockdown/Strings.php:60
500
+ #: src/lib/src/Modules/Lockdown/Strings.php:69
501
+ #: src/lib/src/Modules/LoginGuard/Strings.php:80
502
+ #: src/lib/src/Modules/LoginGuard/Strings.php:89
503
+ #: src/lib/src/Modules/LoginGuard/Strings.php:98
504
+ #: src/lib/src/Modules/LoginGuard/Strings.php:107
505
+ #: src/lib/src/Modules/LoginGuard/Strings.php:117
506
+ #: src/lib/src/Modules/LoginGuard/Strings.php:126
507
+ #: src/lib/src/Modules/LoginGuard/Strings.php:135
508
+ #: src/lib/src/Modules/Plugin/Strings.php:136
509
+ #: src/lib/src/Modules/Plugin/Strings.php:144
510
+ #: src/lib/src/Modules/Plugin/Strings.php:152
511
+ #: src/lib/src/Modules/Plugin/Strings.php:171
512
+ #: src/lib/src/Modules/Reporting/Strings.php:99
513
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:43
514
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:52
515
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:61
516
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:71
517
+ #: src/lib/src/Modules/Sessions/Strings.php:55
518
+ #: src/lib/src/Modules/Traffic/Strings.php:37
519
+ #: src/lib/src/Modules/Traffic/Strings.php:46
520
+ #: src/lib/src/Modules/Traffic/Strings.php:55
521
+ #: src/lib/src/Modules/UserManagement/Strings.php:112
522
+ #: src/lib/src/Modules/UserManagement/Strings.php:121
523
+ #: src/lib/src/Modules/UserManagement/Strings.php:130
524
+ #: src/lib/src/Modules/UserManagement/Strings.php:139
525
+ #: src/lib/src/Modules/UserManagement/Strings.php:148
526
+ #: src/lib/src/Modules/UserManagement/Strings.php:158
527
+ msgid "Purpose"
528
  msgstr ""
529
 
530
+ #: src/lib/src/Modules/AuditTrail/Strings.php:188
531
  msgid ""
532
+ "The Audit Trail is designed so you can look back on events and analyse what "
533
+ "happened and what may have gone wrong."
 
 
 
 
 
 
 
 
534
  msgstr ""
535
 
536
+ #: src/lib/src/Modules/AuditTrail/Strings.php:189
537
+ #: src/lib/src/Modules/AuditTrail/Strings.php:197
538
+ #: src/lib/src/Modules/AuditTrail/Strings.php:206
539
+ #: src/lib/src/Modules/Autoupdates/Strings.php:23
540
+ #: src/lib/src/Modules/Autoupdates/Strings.php:31
541
+ #: src/lib/src/Modules/Autoupdates/Strings.php:43
542
+ #: src/lib/src/Modules/Autoupdates/Strings.php:52
543
+ #: src/lib/src/Modules/Base/Strings.php:193
544
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:75
545
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:91
546
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:100
547
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:186
548
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:215
549
+ #: src/lib/src/Modules/Firewall/Strings.php:24
550
+ #: src/lib/src/Modules/Firewall/Strings.php:32
551
+ #: src/lib/src/Modules/Firewall/Strings.php:43
552
+ #: src/lib/src/Modules/Firewall/Strings.php:52
553
+ #: src/lib/src/Modules/HackGuard/Strings.php:118
554
+ #: src/lib/src/Modules/HackGuard/Strings.php:127
555
+ #: src/lib/src/Modules/HackGuard/Strings.php:138
556
+ #: src/lib/src/Modules/HackGuard/Strings.php:149
557
+ #: src/lib/src/Modules/HackGuard/Strings.php:160
558
+ #: src/lib/src/Modules/HackGuard/Strings.php:224
559
+ #: src/lib/src/Modules/Headers/Strings.php:24
560
+ #: src/lib/src/Modules/Headers/Strings.php:32
561
+ #: src/lib/src/Modules/Headers/Strings.php:41
562
+ #: src/lib/src/Modules/IPs/Strings.php:178
563
+ #: src/lib/src/Modules/IPs/Strings.php:188
564
+ #: src/lib/src/Modules/IPs/Strings.php:204
565
+ #: src/lib/src/Modules/IPs/Strings.php:217
566
+ #: src/lib/src/Modules/IPs/Strings.php:228
567
+ #: src/lib/src/Modules/IPs/Strings.php:393
568
+ #: src/lib/src/Modules/Integrations/Strings.php:54
569
+ #: src/lib/src/Modules/Integrations/Strings.php:67
570
+ #: src/lib/src/Modules/Lockdown/Strings.php:44
571
+ #: src/lib/src/Modules/Lockdown/Strings.php:52
572
+ #: src/lib/src/Modules/Lockdown/Strings.php:61
573
+ #: src/lib/src/Modules/Lockdown/Strings.php:70
574
+ #: src/lib/src/Modules/LoginGuard/Strings.php:81
575
+ #: src/lib/src/Modules/LoginGuard/Strings.php:90
576
+ #: src/lib/src/Modules/LoginGuard/Strings.php:108
577
+ #: src/lib/src/Modules/LoginGuard/Strings.php:127
578
+ #: src/lib/src/Modules/LoginGuard/Strings.php:309
579
+ #: src/lib/src/Modules/Plugin/Strings.php:173
580
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:44
581
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:53
582
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:62
583
+ #: src/lib/src/Modules/Sessions/Strings.php:56
584
+ #: src/lib/src/Modules/Traffic/Strings.php:38
585
+ #: src/lib/src/Modules/Traffic/Strings.php:47
586
+ #: src/lib/src/Modules/UserManagement/Strings.php:113
587
+ #: src/lib/src/Modules/UserManagement/Strings.php:122
588
+ #: src/lib/src/Modules/UserManagement/Strings.php:131
589
+ #: src/lib/src/Modules/UserManagement/Strings.php:140
590
+ #: src/lib/src/Modules/UserManagement/Strings.php:149
591
+ #: src/lib/src/Modules/UserManagement/Strings.php:159
592
+ msgid "Recommendation"
593
  msgstr ""
594
 
595
+ #: src/lib/src/Modules/AuditTrail/Strings.php:189
596
+ #: src/lib/src/Modules/Autoupdates/Strings.php:23
597
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:75
598
+ #: src/lib/src/Modules/Firewall/Strings.php:24
599
+ #: src/lib/src/Modules/HackGuard/Strings.php:118
600
+ #: src/lib/src/Modules/HackGuard/Strings.php:127
601
+ #: src/lib/src/Modules/HackGuard/Strings.php:139
602
+ #: src/lib/src/Modules/IPs/Strings.php:178
603
+ #: src/lib/src/Modules/IPs/Strings.php:188
604
+ #: src/lib/src/Modules/Lockdown/Strings.php:44
605
+ #: src/lib/src/Modules/LoginGuard/Strings.php:81
606
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:44
607
+ #: src/lib/src/Modules/Sessions/Strings.php:56
608
+ #: src/lib/src/Modules/UserManagement/Strings.php:113
609
+ #, php-format
610
+ msgid "Keep the %s feature turned on."
611
  msgstr ""
612
 
613
+ #: src/lib/src/Modules/AuditTrail/Strings.php:194
614
+ #: src/lib/src/Modules/AuditTrail/Strings.php:199
615
+ msgid "Log To DB"
616
  msgstr ""
617
 
618
+ #: src/lib/src/Modules/AuditTrail/Strings.php:196
619
+ msgid "Provides finer control over the audit trail itself."
620
  msgstr ""
621
 
622
+ #: src/lib/src/Modules/AuditTrail/Strings.php:197
623
+ #: src/lib/src/Modules/AuditTrail/Strings.php:206
624
+ #: src/lib/src/Modules/Traffic/Strings.php:47
625
+ msgid "These settings are dependent on your requirements."
626
  msgstr ""
627
 
628
+ #: src/lib/src/Modules/AuditTrail/Strings.php:203
629
+ msgid "Enable Audit Areas"
 
 
630
  msgstr ""
631
 
632
+ #: src/lib/src/Modules/AuditTrail/Strings.php:205
633
+ msgid "Specify which types of actions on your site are logged."
634
  msgstr ""
635
 
636
+ #: src/lib/src/Modules/AuditTrail/Strings.php:234
637
+ #: src/lib/src/Modules/Autoupdates/Strings.php:86
638
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:130
639
+ #: src/lib/src/Modules/Firewall/Strings.php:80
640
+ #: src/lib/src/Modules/HackGuard/Strings.php:183
641
+ #: src/lib/src/Modules/Headers/Strings.php:68
642
+ #: src/lib/src/Modules/IPs/Strings.php:254
643
+ #: src/lib/src/Modules/Lockdown/Strings.php:96
644
+ #: src/lib/src/Modules/LoginGuard/Strings.php:165
645
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:108
646
+ #: src/lib/src/Modules/Sessions/Strings.php:82
647
+ #: src/lib/src/Modules/Traffic/Strings.php:86
648
+ #: src/lib/src/Modules/UserManagement/Strings.php:186
649
+ #, php-format
650
+ msgid "Enable %s Module"
651
  msgstr ""
652
 
653
+ #: src/lib/src/Modules/AuditTrail/Strings.php:235
654
+ #: src/lib/src/Modules/Autoupdates/Strings.php:87
655
+ #: src/lib/src/Modules/Firewall/Strings.php:81
656
+ #: src/lib/src/Modules/HackGuard/Strings.php:184
657
+ #: src/lib/src/Modules/Headers/Strings.php:69
658
+ #: src/lib/src/Modules/IPs/Strings.php:255
659
+ #: src/lib/src/Modules/Lockdown/Strings.php:97
660
+ #: src/lib/src/Modules/LoginGuard/Strings.php:166
661
+ #: src/lib/src/Modules/Sessions/Strings.php:83
662
+ #: src/lib/src/Modules/Traffic/Strings.php:87
663
+ #: src/lib/src/Modules/UserManagement/Strings.php:187
664
+ #, php-format
665
+ msgid "Enable (or Disable) The %s Module"
666
  msgstr ""
667
 
668
+ #: src/lib/src/Modules/AuditTrail/Strings.php:236
669
+ #: src/lib/src/Modules/Autoupdates/Strings.php:88
670
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:132
671
+ #: src/lib/src/Modules/Firewall/Strings.php:82
672
+ #: src/lib/src/Modules/HackGuard/Strings.php:185
673
+ #: src/lib/src/Modules/Headers/Strings.php:70
674
+ #: src/lib/src/Modules/IPs/Strings.php:256
675
+ #: src/lib/src/Modules/Lockdown/Strings.php:98
676
+ #: src/lib/src/Modules/LoginGuard/Strings.php:167
677
+ #: src/lib/src/Modules/Sessions/Strings.php:84
678
+ #: src/lib/src/Modules/Traffic/Strings.php:88
679
+ #: src/lib/src/Modules/UserManagement/Strings.php:188
680
+ #, php-format
681
+ msgid "Un-Checking this option will completely disable the %s module."
682
  msgstr ""
683
 
684
+ #: src/lib/src/Modules/AuditTrail/Strings.php:240
685
+ msgid "Logging Level"
686
  msgstr ""
687
 
688
+ #: src/lib/src/Modules/AuditTrail/Strings.php:241
689
+ msgid "Logging Level For DB-Based Logs"
690
  msgstr ""
691
 
692
+ #: src/lib/src/Modules/AuditTrail/Strings.php:243
693
+ msgid "Specify the logging levels when using the local database."
694
  msgstr ""
695
 
696
+ #: src/lib/src/Modules/AuditTrail/Strings.php:244
697
  msgid ""
698
+ "Debug and Info logging should only be enabled when investigating specific "
699
+ "problems."
700
  msgstr ""
701
 
702
+ #: src/lib/src/Modules/AuditTrail/Strings.php:247
703
+ #: src/lib/src/Modules/AuditTrail/Strings.php:275
704
+ msgid "View all event details and their assigned levels"
705
  msgstr ""
706
 
707
+ #: src/lib/src/Modules/AuditTrail/Strings.php:253
708
+ msgid "Auto Clean"
709
  msgstr ""
710
 
711
+ #: src/lib/src/Modules/AuditTrail/Strings.php:254
712
+ msgid "Automatically Purge Audit Log Entries Older Than The Set Number Of Days"
713
  msgstr ""
714
 
715
+ #: src/lib/src/Modules/AuditTrail/Strings.php:256
716
  msgid ""
717
+ "Events older than the number of days specified will be automatically cleaned "
718
+ "from the database."
719
  msgstr ""
720
 
721
+ #: src/lib/src/Modules/AuditTrail/Strings.php:259
 
722
  #, php-format
723
+ msgid "Upgrade to PRO to increase limit beyond %s days."
 
 
 
 
724
  msgstr ""
725
 
726
+ #: src/lib/src/Modules/AuditTrail/Strings.php:265
727
+ msgid "File Logging Level"
 
 
 
 
 
728
  msgstr ""
729
 
730
+ #: src/lib/src/Modules/AuditTrail/Strings.php:266
731
+ msgid "Logging Level For File-Based Logs"
 
 
732
  msgstr ""
733
 
734
+ #: src/lib/src/Modules/AuditTrail/Strings.php:268
735
+ msgid "Specify the logging levels when using the local filesystem."
736
  msgstr ""
737
 
738
+ #: src/lib/src/Modules/AuditTrail/Strings.php:270
739
+ msgid "Log File Location"
740
  msgstr ""
741
 
742
+ #: src/lib/src/Modules/AuditTrail/Strings.php:278
743
+ #: src/lib/src/Modules/HackGuard/Lib/Reports/ScanAlerts.php:40
744
+ #: src/lib/src/Modules/HackGuard/Scan/Utilities/PtgAddReinstallLinks.php:81
745
+ #: src/lib/src/Modules/HackGuard/Strings.php:48
746
+ #: src/lib/src/Modules/HackGuard/Strings.php:227
747
+ #: src/lib/src/Modules/HackGuard/Strings.php:231
748
+ #: src/lib/src/Modules/HackGuard/Strings.php:255
749
+ #: src/lib/src/Modules/IPs/UI.php:84 src/lib/src/Modules/Integrations/UI.php:34
750
+ #: src/lib/src/Modules/LoginGuard/Strings.php:109
751
+ #: src/lib/src/Modules/LoginGuard/Strings.php:118
752
+ #: src/lib/src/Modules/LoginGuard/Strings.php:136
753
+ #: src/lib/src/Modules/LoginGuard/Strings.php:186
754
+ #: src/lib/src/Modules/LoginGuard/Strings.php:207
755
+ #: src/lib/src/Modules/LoginGuard/Strings.php:209
756
+ #: src/lib/src/Modules/LoginGuard/Strings.php:273
757
+ #: src/lib/src/Modules/LoginGuard/Strings.php:294
758
+ #: src/lib/src/Modules/Plugin/Strings.php:175
759
+ #: src/lib/src/Modules/Plugin/Strings.php:179
760
+ #: src/lib/src/Modules/Plugin/Strings.php:338
761
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:135
762
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:162
763
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:169
764
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:190
765
+ #: src/lib/src/Modules/Traffic/Strings.php:145
766
+ #: src/lib/src/Tables/Render/WpListTable/AdminNotes.php:26
767
+ msgid "Note"
768
  msgstr ""
769
 
770
+ #: src/lib/src/Modules/AuditTrail/Strings.php:279
771
+ #, php-format
772
+ msgid "Log files will be rotated daily up to a limit of %s."
773
  msgstr ""
774
 
775
+ #: src/lib/src/Modules/AuditTrail/UI.php:22
776
+ msgid "Logs"
777
  msgstr ""
778
 
779
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:23
780
+ msgid "Core Update"
781
  msgstr ""
782
 
783
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:26
784
+ msgid "WordPress Core is up-to-date"
785
  msgstr ""
786
 
787
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:27
788
+ msgid "No WordPress Core upgrades waiting to be applied"
789
  msgstr ""
790
 
791
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:29
792
+ msgid "Core upgrades should be applied as early as possible."
793
  msgstr ""
794
 
795
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:34
796
+ msgid "Auto Core Updates"
797
  msgstr ""
798
 
799
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:37
800
+ msgid "Minor WP Core updates will be installed automatically"
 
 
 
801
  msgstr ""
802
 
803
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:38
804
+ msgid "Minor WP Core updates will not be installed automatically"
805
  msgstr ""
806
 
807
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:44
808
+ #: src/lib/src/Modules/Autoupdates/Strings.php:152
809
+ msgid "Update Delay"
810
  msgstr ""
811
 
812
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:47
813
+ msgid "Automatic updates are applied after a short delay"
814
  msgstr ""
815
 
816
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:48
817
+ msgid "Automatic updates are applied immediately"
818
  msgstr ""
819
 
820
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:56
821
+ msgid "Self Auto-Update"
822
  msgstr ""
823
 
824
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:59
825
+ #, php-format
826
+ msgid "%s upgrades are installed automatically"
827
  msgstr ""
828
 
829
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:60
830
+ #, php-format
831
+ msgid "%s upgrades aren't installed automatically"
832
  msgstr ""
833
 
834
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:70
835
+ msgid "Automatic Updates Are Not Disabled As Expected."
836
  msgstr ""
837
 
838
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:72
839
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionPlugins.php:62
840
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionThemes.php:64
841
+ #: src/lib/src/Modules/Insights/UI.php:48
842
+ #, php-format
843
+ msgid "Go To %s"
844
  msgstr ""
845
 
846
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:72
847
+ #: src/lib/src/Modules/Base/Strings.php:42
848
+ #: src/lib/src/Modules/Base/Strings.php:61
849
+ #: src/lib/src/Modules/Base/Strings.php:123
850
+ #: src/lib/src/Modules/Insights/Strings.php:19
851
+ #: src/lib/src/Modules/Insights/UI.php:49
852
+ msgid "Options"
853
  msgstr ""
854
 
855
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:73
856
+ #, php-format
857
+ msgid ""
858
+ "A plugin/theme other than %s is affecting your automatic update settings."
859
  msgstr ""
860
 
861
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:87
862
+ #: src/lib/src/Modules/Autoupdates/Strings.php:23
863
+ #: src/lib/src/Modules/HackGuard/Strings.php:210
864
+ #: src/lib/src/Modules/Plugin/Strings.php:533
865
+ msgid "Automatic Updates"
866
  msgstr ""
867
 
868
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:91
869
+ msgid "Controlling WordPress Automatic Updates"
870
  msgstr ""
871
 
872
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:100
873
+ msgid "Inactive Plugins"
874
  msgstr ""
875
 
876
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:103
877
  #, php-format
878
+ msgid "There are %s inactive and unused plugins"
879
  msgstr ""
880
 
881
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:104
882
+ msgid "There appears to be no unused plugins"
883
  msgstr ""
884
 
885
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:106
886
+ msgid "Unused plugins should be removed."
887
  msgstr ""
888
 
889
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:111
890
+ msgid "Plugin Updates"
891
  msgstr ""
892
 
893
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:114
894
+ #, php-format
895
+ msgid "There are %s plugin updates available to be applied"
896
  msgstr ""
897
 
898
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:115
899
+ msgid "All available plugin updates have been applied"
900
  msgstr ""
901
 
902
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:117
903
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:146
904
+ msgid "Updates should be applied as early as possible."
905
  msgstr ""
906
 
907
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:129
908
+ msgid "Inactive Themes"
909
  msgstr ""
910
 
911
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:132
912
+ #, php-format
913
+ msgid "There are %s inactive and unused themes"
914
  msgstr ""
915
 
916
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:133
917
+ msgid "There appears to be no unused themes"
918
  msgstr ""
919
 
920
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:135
921
+ msgid "Unused themes should be removed."
922
  msgstr ""
923
 
924
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:140
925
+ msgid "Theme Updates"
926
  msgstr ""
927
 
928
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:143
929
+ #, php-format
930
+ msgid "There are %s theme updates available to be applied"
931
  msgstr ""
932
 
933
+ #: src/lib/src/Modules/Autoupdates/Insights/OverviewCards.php:144
934
+ msgid "All available theme updates have been applied"
935
  msgstr ""
936
 
937
+ #: src/lib/src/Modules/Autoupdates/Processor.php:357
938
+ #, php-format
939
+ msgid ""
940
+ "This is a quick notification from the %s that WordPress Automatic Updates "
941
+ "just completed on your site with the following results."
942
  msgstr ""
943
 
944
+ #: src/lib/src/Modules/Autoupdates/Processor.php:370
945
+ msgid "Plugins Updated:"
946
  msgstr ""
947
 
948
+ #: src/lib/src/Modules/Autoupdates/Processor.php:378
949
+ #, php-format
950
+ msgid "Plugin \"%s\" auto-updated from \"%s\" to version \"%s\""
951
  msgstr ""
952
 
953
+ #: src/lib/src/Modules/Autoupdates/Processor.php:395
954
+ msgid "Themes Updated:"
 
955
  msgstr ""
956
 
957
+ #: src/lib/src/Modules/Autoupdates/Processor.php:403
958
  #, php-format
959
+ msgid "Theme \"%s\" auto-updated from \"%s\" to version \"%s\""
960
  msgstr ""
961
 
962
+ #: src/lib/src/Modules/Autoupdates/Processor.php:418
963
+ msgid "WordPress Core Updated:"
964
  msgstr ""
965
 
966
+ #: src/lib/src/Modules/Autoupdates/Processor.php:437
967
+ #: src/lib/src/Modules/SecurityAdmin/Lib/SecurityAdmin/Ops/RemoveSecAdmin.php:45
968
+ #: src/lib/src/Modules/SecurityAdmin/Lib/SecurityAdmin/Ops/RemoveSecAdmin.php:63
969
+ msgid "Thank you."
970
  msgstr ""
971
 
972
+ #: src/lib/src/Modules/Autoupdates/Processor.php:443
973
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BackupCodes.php:108
974
  #, php-format
975
+ msgid "Notice: %s"
976
  msgstr ""
977
 
978
+ #: src/lib/src/Modules/Autoupdates/Processor.php:443
979
+ msgid "Automatic Updates Completed"
 
980
  msgstr ""
981
 
982
+ #: src/lib/src/Modules/Autoupdates/Strings.php:22
983
+ msgid ""
984
+ "Automatic Updates lets you manage the WordPress automatic updates engine so "
985
+ "you choose what exactly gets updated automatically."
986
  msgstr ""
987
 
988
+ #: src/lib/src/Modules/Autoupdates/Strings.php:28
989
+ msgid "Disable ALL WordPress Automatic Updates"
990
  msgstr ""
991
 
992
+ #: src/lib/src/Modules/Autoupdates/Strings.php:30
993
+ msgid ""
994
+ "If you never want WordPress to automatically update anything on your site, "
995
+ "turn on this option."
996
  msgstr ""
997
 
998
+ #: src/lib/src/Modules/Autoupdates/Strings.php:31
999
+ msgid "Do not turn on this option unless you really need to block updates."
1000
  msgstr ""
1001
 
1002
+ #: src/lib/src/Modules/Autoupdates/Strings.php:33
1003
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/ImportExportController.php:192
1004
+ msgid "Turn Off"
1005
  msgstr ""
1006
 
1007
+ #: src/lib/src/Modules/Autoupdates/Strings.php:37
1008
+ msgid "Automatic Plugin Self-Update"
1009
  msgstr ""
1010
 
1011
+ #: src/lib/src/Modules/Autoupdates/Strings.php:41
1012
+ #, php-format
1013
+ msgid ""
1014
+ "Allows the %s plugin to automatically update itself when an update is "
1015
+ "available."
1016
  msgstr ""
1017
 
1018
+ #: src/lib/src/Modules/Autoupdates/Strings.php:43
1019
+ msgid "Keep this option turned on."
1020
  msgstr ""
1021
 
1022
+ #: src/lib/src/Modules/Autoupdates/Strings.php:45
1023
+ msgid "Self-Update"
1024
  msgstr ""
1025
 
1026
+ #: src/lib/src/Modules/Autoupdates/Strings.php:49
1027
+ msgid "Automatic Updates For WordPress Components"
1028
  msgstr ""
1029
 
1030
+ #: src/lib/src/Modules/Autoupdates/Strings.php:51
1031
+ msgid "Control how automatic updates for each WordPress component is handled."
1032
  msgstr ""
1033
 
1034
+ #: src/lib/src/Modules/Autoupdates/Strings.php:52
1035
+ msgid "You should at least allow minor updates for the WordPress core."
1036
  msgstr ""
1037
 
1038
+ #: src/lib/src/Modules/Autoupdates/Strings.php:54
1039
+ msgid "WordPress Components"
1040
  msgstr ""
1041
 
1042
+ #: src/lib/src/Modules/Autoupdates/Strings.php:58
1043
+ #: src/lib/src/Modules/Autoupdates/Strings.php:59
1044
+ msgid "Auto-Update Options"
1045
  msgstr ""
1046
 
1047
+ #: src/lib/src/Modules/Autoupdates/Strings.php:61
1048
+ msgid "Make adjustments to how automatic updates are handled on your site."
1049
  msgstr ""
1050
 
1051
+ #: src/lib/src/Modules/Autoupdates/Strings.php:92
1052
+ msgid "Disable All"
1053
  msgstr ""
1054
 
1055
+ #: src/lib/src/Modules/Autoupdates/Strings.php:93
1056
+ msgid "Completely Disable WordPress Automatic Updates"
1057
  msgstr ""
1058
 
1059
+ #: src/lib/src/Modules/Autoupdates/Strings.php:94
1060
+ msgid ""
1061
+ "When selected, regardless of any other settings, all WordPress automatic "
1062
+ "updates on this site will be completely disabled!"
1063
  msgstr ""
1064
 
1065
+ #: src/lib/src/Modules/Autoupdates/Strings.php:98
1066
+ msgid "Auto Update Plugin"
 
 
1067
  msgstr ""
1068
 
1069
+ #: src/lib/src/Modules/Autoupdates/Strings.php:99
1070
+ msgid "Always Automatically Update This Plugin"
 
 
 
 
 
 
 
1071
  msgstr ""
1072
 
1073
+ #: src/lib/src/Modules/Autoupdates/Strings.php:102
1074
+ #, php-format
1075
+ msgid ""
1076
+ "Regardless of any other settings, automatically update the \"%s\" plugin."
1077
  msgstr ""
1078
 
1079
+ #: src/lib/src/Modules/Autoupdates/Strings.php:105
1080
+ msgid ""
1081
+ "The plugin will normally automatically update after approximately 2 days, if "
1082
+ "left to decide."
1083
  msgstr ""
1084
 
1085
+ #: src/lib/src/Modules/Autoupdates/Strings.php:110
1086
+ msgid "WordPress Core Updates"
1087
  msgstr ""
1088
 
1089
+ #: src/lib/src/Modules/Autoupdates/Strings.php:111
1090
+ msgid "Decide how the WordPress Core will automatically update, if at all"
1091
  msgstr ""
1092
 
1093
+ #: src/lib/src/Modules/Autoupdates/Strings.php:112
1094
+ msgid ""
1095
+ "At least automatically upgrading minor versions is recommended (and is the "
1096
+ "WordPress default)."
1097
  msgstr ""
1098
 
1099
+ #: src/lib/src/Modules/Autoupdates/Strings.php:116
1100
+ msgid "Translations"
 
 
 
 
 
 
 
 
 
 
 
 
1101
  msgstr ""
1102
 
1103
+ #: src/lib/src/Modules/Autoupdates/Strings.php:117
1104
+ msgid "Automatically Update Translations"
1105
  msgstr ""
1106
 
1107
+ #: src/lib/src/Modules/Autoupdates/Strings.php:118
1108
+ msgid ""
1109
+ "Note: Automatic updates for translations are enabled on WordPress by default."
1110
  msgstr ""
1111
 
1112
+ #: src/lib/src/Modules/Autoupdates/Strings.php:123
1113
+ msgid "Automatically Update All Plugins"
1114
  msgstr ""
1115
 
1116
+ #: src/lib/src/Modules/Autoupdates/Strings.php:124
1117
+ msgid ""
1118
+ "Note: Automatic updates for plugins are disabled on WordPress by default."
1119
  msgstr ""
1120
 
1121
+ #: src/lib/src/Modules/Autoupdates/Strings.php:129
1122
+ msgid "Automatically Update Themes"
 
1123
  msgstr ""
1124
 
1125
+ #: src/lib/src/Modules/Autoupdates/Strings.php:130
1126
+ msgid ""
1127
+ "Note: Automatic updates for themes are disabled on WordPress by default."
1128
  msgstr ""
1129
 
1130
+ #: src/lib/src/Modules/Autoupdates/Strings.php:134
1131
+ msgid "Ignore Version Control"
1132
  msgstr ""
1133
 
1134
+ #: src/lib/src/Modules/Autoupdates/Strings.php:135
1135
+ msgid "Ignore Version Control Systems Such As GIT and SVN"
1136
  msgstr ""
1137
 
1138
+ #: src/lib/src/Modules/Autoupdates/Strings.php:136
1139
+ msgid ""
1140
+ "If you use SVN or GIT and WordPress detects it, automatic updates are "
1141
+ "disabled by default. Check this box to ignore version control systems and "
1142
+ "allow automatic updates."
1143
  msgstr ""
1144
 
1145
+ #: src/lib/src/Modules/Autoupdates/Strings.php:140
1146
+ msgid "Send Report Email"
 
1147
  msgstr ""
1148
 
1149
+ #: src/lib/src/Modules/Autoupdates/Strings.php:141
1150
+ msgid "Send email notices after automatic updates"
1151
  msgstr ""
1152
 
1153
+ #: src/lib/src/Modules/Autoupdates/Strings.php:142
1154
+ msgid ""
1155
+ "You can turn on/off email notices from automatic updates by un/checking this "
1156
+ "box."
1157
  msgstr ""
1158
 
1159
+ #: src/lib/src/Modules/Autoupdates/Strings.php:146
1160
+ msgid "Report Email Address"
1161
  msgstr ""
1162
 
1163
+ #: src/lib/src/Modules/Autoupdates/Strings.php:147
1164
+ msgid "Where to send upgrade notification reports"
1165
  msgstr ""
1166
 
1167
+ #: src/lib/src/Modules/Autoupdates/Strings.php:148
1168
+ msgid "If this is empty, it will default to the Site Admin email address"
1169
  msgstr ""
1170
 
1171
+ #: src/lib/src/Modules/Autoupdates/Strings.php:153
1172
+ msgid "Delay Automatic Updates For Period Of Stability"
1173
  msgstr ""
1174
 
1175
+ #: src/lib/src/Modules/Autoupdates/Strings.php:154
1176
  #, php-format
1177
+ msgid ""
1178
+ "%s will delay upgrades until the new update has been available for the set "
1179
+ "number of days."
1180
  msgstr ""
1181
 
1182
+ #: src/lib/src/Modules/Autoupdates/Strings.php:155
1183
+ msgid ""
1184
+ "This helps ensure updates are more stable before they're automatically "
1185
+ "applied to your site."
1186
  msgstr ""
1187
 
1188
+ #: src/lib/src/Modules/Base/Insights/OverviewCards.php:51
1189
+ #: src/wizards/plugin.php:592 src/wizards/plugin.php:625
1190
+ #: src/wizards/plugin.php:660 src/wizards/plugin.php:728
1191
+ #: src/wizards/plugin.php:766
1192
+ msgid "Disabled"
1193
  msgstr ""
1194
 
1195
+ #: src/lib/src/Modules/Base/Insights/OverviewCards.php:52
1196
+ #: src/lib/src/Modules/Base/UI.php:150 src/lib/src/Modules/Base/UI.php:161
1197
+ msgid "All features of this module are completely disabled"
1198
  msgstr ""
1199
 
1200
+ #: src/lib/src/Modules/Base/ModCon.php:839
1201
+ msgid "You don't currently have permission to save settings."
 
 
 
 
 
1202
  msgstr ""
1203
 
1204
+ #: src/lib/src/Modules/Base/ModCon.php:924
1205
+ msgid "Password values do not match."
1206
  msgstr ""
1207
 
1208
+ #: src/lib/src/Modules/Base/ModCon.php:1031
1209
+ #: src/lib/src/Modules/HackGuard/Strings.php:192
1210
+ #: src/lib/src/Modules/HackGuard/Strings.php:290
1211
+ #: src/lib/src/Modules/LoginGuard/Strings.php:332
1212
+ #: src/lib/src/Modules/LoginGuard/Strings.php:386
1213
+ #: src/lib/src/Modules/LoginGuard/Strings.php:393
1214
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:146
1215
+ #: src/lib/src/Modules/UserManagement/Strings.php:211
1216
+ #: src/lib/src/Modules/UserManagement/Strings.php:321
1217
+ msgid "Default"
1218
  msgstr ""
1219
 
1220
+ #: src/lib/src/Modules/Base/ModCon.php:1038
1221
+ msgid "For more information:"
1222
  msgstr ""
1223
 
1224
+ #: src/lib/src/Modules/Base/ModCon.php:1039
1225
+ #: src/lib/src/Modules/Plugin/Strings.php:560
1226
+ msgid "Support Forums"
1227
  msgstr ""
1228
 
1229
+ #: src/lib/src/Modules/Base/Options/BuildForDisplay.php:67
1230
+ msgid ""
1231
+ "Unfortunately your WordPress and/or PHP versions are too old to support this "
1232
+ "feature."
1233
  msgstr ""
1234
 
1235
+ #: src/lib/src/Modules/Base/Options/BuildForDisplay.php:223
1236
+ msgid "unavailable"
 
1237
  msgstr ""
1238
 
1239
+ #: src/lib/src/Modules/Base/Strings.php:23
1240
+ msgid "More Scans"
 
 
 
 
 
1241
  msgstr ""
1242
 
1243
+ #: src/lib/src/Modules/Base/Strings.php:24
1244
+ msgid "Malware Scanner"
 
1245
  msgstr ""
1246
 
1247
+ #: src/lib/src/Modules/Base/Strings.php:25
1248
+ msgid "Scan Every Hour"
1249
  msgstr ""
1250
 
1251
+ #: src/lib/src/Modules/Base/Strings.php:26
1252
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:405
1253
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:68
1254
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:81
1255
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:203
1256
+ msgid "White Label"
1257
  msgstr ""
1258
 
1259
+ #: src/lib/src/Modules/Base/Strings.php:27
1260
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:291
1261
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/ImportExportController.php:189
1262
+ msgid "Import/Export"
1263
  msgstr ""
1264
 
1265
+ #: src/lib/src/Modules/Base/Strings.php:28
1266
+ msgid "Better Bot Detection"
1267
  msgstr ""
1268
 
1269
+ #: src/lib/src/Modules/Base/Strings.php:29
1270
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:488
1271
+ #: src/lib/src/Modules/UserManagement/Insights/OverviewCards.php:54
1272
+ #: src/lib/src/Modules/UserManagement/Strings.php:118
1273
+ #: src/lib/src/Modules/UserManagement/Strings.php:119
1274
+ msgid "Password Policies"
1275
  msgstr ""
1276
 
1277
+ #: src/lib/src/Modules/Base/Strings.php:30
1278
+ msgid "WooCommerce Support"
1279
  msgstr ""
1280
 
1281
+ #: src/lib/src/Modules/Base/Strings.php:31
1282
+ #: src/lib/src/Modules/Integrations/Strings.php:94
1283
+ msgid "MainWP Integration"
1284
  msgstr ""
1285
 
1286
+ #: src/lib/src/Modules/Base/Strings.php:34
1287
+ msgid "and much more!"
1288
  msgstr ""
1289
 
1290
+ #: src/lib/src/Modules/Base/Strings.php:40
1291
+ msgid "Watch Help Video"
1292
  msgstr ""
1293
 
1294
+ #: src/lib/src/Modules/Base/Strings.php:41
1295
+ msgid "Save Options"
1296
  msgstr ""
1297
 
1298
+ #: src/lib/src/Modules/Base/Strings.php:43
1299
+ #: src/lib/src/Modules/Base/Strings.php:65
1300
+ msgid "Help"
1301
  msgstr ""
1302
 
1303
+ #: src/lib/src/Modules/Base/Strings.php:44
1304
+ msgid "Wizards"
1305
  msgstr ""
1306
 
1307
+ #: src/lib/src/Modules/Base/Strings.php:44
1308
+ msgid "No Wizards"
 
1309
  msgstr ""
1310
 
1311
+ #: src/lib/src/Modules/Base/Strings.php:45
1312
+ #: src/lib/src/Modules/Insights/Lib/Requests/DynamicPageLoader.php:84
1313
+ #: src/lib/src/Modules/Insights/UI.php:222
1314
+ msgid "Configuration"
1315
  msgstr ""
1316
 
1317
+ #: src/lib/src/Modules/Base/Strings.php:48
1318
+ #: src/lib/src/Modules/HackGuard/Scan/Utilities/PtgAddReinstallLinks.php:46
1319
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:157
1320
+ #: src/lib/src/Modules/Traffic/Lib/TrafficTable/LoadRawTableData.php:145
1321
+ #: src/lib/src/Tables/Build/Ip.php:65 src/lib/src/Tables/Build/Sessions.php:65
1322
+ msgid "Yes"
1323
  msgstr ""
1324
 
1325
+ #: src/lib/src/Modules/Base/Strings.php:49
1326
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:158
1327
+ #: src/lib/src/Modules/Traffic/Lib/TrafficTable/LoadRawTableData.php:34
1328
+ #: src/lib/src/Modules/Traffic/Lib/TrafficTable/LoadRawTableData.php:145
1329
+ #: src/lib/src/Tables/Build/Ip.php:65 src/lib/src/Tables/Build/Sessions.php:65
1330
+ msgid "No"
1331
  msgstr ""
1332
 
1333
+ #: src/lib/src/Modules/Base/Strings.php:50
1334
+ #: src/lib/src/Modules/HackGuard/UI.php:42
1335
+ #: src/lib/src/Modules/HackGuard/UI.php:120
1336
+ #: src/lib/src/Modules/License/UI.php:34
1337
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/U2F.php:158
1338
+ #: src/lib/src/Modules/Plugin/Strings.php:453
1339
+ msgid "Never"
1340
  msgstr ""
1341
 
1342
+ #: src/lib/src/Modules/Base/Strings.php:51
1343
+ msgid "Until"
1344
  msgstr ""
1345
 
1346
+ #: src/lib/src/Modules/Base/Strings.php:52
1347
+ msgid "Since"
1348
  msgstr ""
1349
 
1350
+ #: src/lib/src/Modules/Base/Strings.php:53
1351
+ #: src/lib/src/Modules/Insights/Lib/OverviewCards.php:27
1352
+ msgid "Info"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1353
  msgstr ""
1354
 
1355
+ #: src/lib/src/Modules/Base/Strings.php:54
1356
+ msgid "Read the HelpDesk article for this option"
1357
  msgstr ""
1358
 
1359
+ #: src/lib/src/Modules/Base/Strings.php:55
1360
+ msgid "Read our Blog article for this option"
1361
  msgstr ""
1362
 
1363
+ #: src/lib/src/Modules/Base/Strings.php:56
1364
+ #: src/lib/src/Modules/Traffic/Lib/TrafficTable/LoadRawTableData.php:118
1365
+ #: src/lib/src/Tables/Render/WpListTable/Sessions.php:40
1366
+ msgid "Logged-In"
1367
  msgstr ""
1368
 
1369
+ #: src/lib/src/Modules/Base/Strings.php:58
1370
+ msgid "Blog"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1371
  msgstr ""
1372
 
1373
+ #: src/lib/src/Modules/Base/Strings.php:59
1374
+ msgid "Save Settings"
 
 
1375
  msgstr ""
1376
 
1377
+ #: src/lib/src/Modules/Base/Strings.php:62
1378
+ msgid "Configure Module"
 
 
 
1379
  msgstr ""
1380
 
1381
+ #: src/lib/src/Modules/Base/Strings.php:63
1382
+ msgid "Actions and Info"
1383
  msgstr ""
1384
 
1385
+ #: src/lib/src/Modules/Base/Strings.php:64
1386
+ msgid "Perform actions for this module"
1387
  msgstr ""
1388
 
1389
+ #: src/lib/src/Modules/Base/Strings.php:66
1390
+ msgid "Learn More"
1391
  msgstr ""
1392
 
1393
+ #: src/lib/src/Modules/Base/Strings.php:67
1394
+ #: src/lib/src/Modules/Plugin/Strings.php:375
1395
+ msgid "Installation ID"
1396
  msgstr ""
1397
 
1398
+ #: src/lib/src/Modules/Base/Strings.php:69
1399
+ msgid "Select"
 
1400
  msgstr ""
1401
 
1402
+ #: src/lib/src/Modules/Base/Strings.php:70
1403
+ msgid "Clear Filters"
1404
  msgstr ""
1405
 
1406
+ #: src/lib/src/Modules/Base/Strings.php:71
1407
+ msgid "Apply Filters"
1408
  msgstr ""
1409
 
1410
+ #: src/lib/src/Modules/Base/Strings.php:72
1411
+ msgid "Jump To Module Settings"
1412
  msgstr ""
1413
 
1414
+ #: src/lib/src/Modules/Base/Strings.php:73
1415
+ msgid "This Page"
1416
  msgstr ""
1417
 
1418
+ #: src/lib/src/Modules/Base/Strings.php:74
1419
+ msgid "Find Plugin Option"
1420
  msgstr ""
1421
 
1422
+ #: src/lib/src/Modules/Base/Strings.php:75
1423
+ msgid "Type below to search all plugin options"
1424
  msgstr ""
1425
 
1426
+ #: src/lib/src/Modules/Base/Strings.php:76
1427
+ #: src/lib/src/Modules/Insights/UI.php:314
1428
+ #: src/lib/src/Modules/Insights/UI.php:352
1429
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Yubikey.php:35
1430
+ msgid "Pro Only"
1431
  msgstr ""
1432
 
1433
+ #: src/lib/src/Modules/Base/Strings.php:77
1434
+ msgid "This is a pro-only feature"
1435
  msgstr ""
1436
 
1437
+ #: src/lib/src/Modules/Base/Strings.php:78
1438
+ msgid "Go Pro!"
1439
  msgstr ""
1440
 
1441
+ #: src/lib/src/Modules/Base/Strings.php:80
1442
+ msgid "Please upgrade to Pro to control this option"
1443
  msgstr ""
1444
 
1445
+ #: src/lib/src/Modules/Base/Strings.php:82
1446
+ #: src/lib/src/Modules/Base/Strings.php:87
1447
+ msgid "Mode"
1448
  msgstr ""
1449
 
1450
+ #: src/lib/src/Modules/Base/Strings.php:83
1451
+ #: src/lib/src/Modules/Base/Strings.php:86
1452
+ #: src/lib/src/Modules/Base/Strings.php:88
1453
+ msgid "Simple"
1454
  msgstr ""
1455
 
1456
+ #: src/lib/src/Modules/Base/Strings.php:84
1457
+ #: src/lib/src/Modules/Base/Strings.php:86
1458
+ #: src/lib/src/Modules/Base/Strings.php:88
1459
+ msgid "Advanced"
1460
  msgstr ""
1461
 
1462
+ #: src/lib/src/Modules/Base/Strings.php:85
1463
+ msgid "Switch To"
1464
  msgstr ""
1465
 
1466
+ #: src/lib/src/Modules/Base/Strings.php:90
1467
+ #: src/lib/src/Modules/Insights/UI.php:193
1468
+ #: src/lib/src/Modules/Plugin/Strings.php:550
1469
+ msgid "Dashboard"
1470
  msgstr ""
1471
 
1472
+ #: src/lib/src/Modules/Base/Strings.php:91
1473
+ #, php-format
1474
+ msgid "%s Dashboard"
1475
  msgstr ""
1476
 
1477
+ #: src/lib/src/Modules/Base/Strings.php:93
1478
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildInfo.php:52
1479
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:233
1480
+ msgid "Description"
1481
  msgstr ""
1482
 
1483
+ #: src/lib/src/Modules/Base/Strings.php:94
1484
+ #: src/lib/src/Modules/LoginGuard/Lib/AntiBot/ProtectionProviders/GaspJs.php:43
1485
+ #: src/lib/src/Modules/LoginGuard/Lib/AntiBot/ProtectionProviders/GaspJs.php:121
1486
+ msgid "Loading"
1487
  msgstr ""
1488
 
1489
+ #: src/lib/src/Modules/Base/Strings.php:95
1490
+ msgid "Plugin Access Restricted"
 
 
1491
  msgstr ""
1492
 
1493
+ #: src/lib/src/Modules/Base/Strings.php:96
1494
  msgid ""
1495
+ "This security plugin is restricted to administrators with the Security Admin "
1496
+ "PIN."
1497
  msgstr ""
1498
 
1499
+ #: src/lib/src/Modules/Base/Strings.php:97
1500
+ msgid "Please provide the Security Admin PIN to manage this plugin."
 
1501
  msgstr ""
1502
 
1503
+ #: src/lib/src/Modules/Base/Strings.php:98
1504
+ msgid "To manage this plugin you must enter the Security Admin PIN."
 
1505
  msgstr ""
1506
 
1507
+ #: src/lib/src/Modules/Base/Strings.php:99
1508
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:114
1509
+ msgid "Security Admin PIN"
1510
  msgstr ""
1511
 
1512
+ #: src/lib/src/Modules/Base/Strings.php:100
1513
+ msgid "Submit Security Admin PIN"
1514
  msgstr ""
1515
 
1516
+ #: src/lib/src/Modules/Base/Strings.php:101
1517
+ msgid "Forgotten PIN"
1518
  msgstr ""
1519
 
1520
+ #: src/lib/src/Modules/Base/Strings.php:102
1521
+ msgid "Supply Password"
1522
  msgstr ""
1523
 
1524
+ #: src/lib/src/Modules/Base/Strings.php:103
1525
+ msgid "Confirm Password"
1526
  msgstr ""
1527
 
1528
+ #: src/lib/src/Modules/Base/Strings.php:104
1529
+ msgid "Show help video for this section"
 
 
1530
  msgstr ""
1531
 
1532
+ #: src/lib/src/Modules/Base/Strings.php:106
1533
+ msgid "offense"
1534
  msgstr ""
1535
 
1536
+ #: src/lib/src/Modules/Base/Strings.php:107
1537
+ #: src/lib/src/Modules/Insights/UI.php:207
1538
+ msgid "Debug"
1539
  msgstr ""
1540
 
1541
+ #: src/lib/src/Modules/Base/Strings.php:109
1542
+ msgid "Agree To Privacy Policy"
 
1543
  msgstr ""
1544
 
1545
+ #: src/lib/src/Modules/Base/Strings.php:110
1546
+ msgid "I confirm that I've read and I agree to the Privacy Policy"
 
1547
  msgstr ""
1548
 
1549
+ #: src/lib/src/Modules/Base/Strings.php:111
1550
  msgid ""
1551
+ "We treat your information under our strict, and GDPR-compliant, privacy "
1552
+ "policy."
1553
  msgstr ""
1554
 
1555
+ #: src/lib/src/Modules/Base/Strings.php:112
1556
+ msgid "Privacy Policy"
 
 
1557
  msgstr ""
1558
 
1559
+ #: src/lib/src/Modules/Base/Strings.php:113
1560
+ msgid "We never SPAM and you can remove yourself at any time."
 
 
 
1561
  msgstr ""
1562
 
1563
+ #: src/lib/src/Modules/Base/Strings.php:115
1564
+ msgid "Pro features include"
1565
  msgstr ""
1566
 
1567
+ #: src/lib/src/Modules/Base/Strings.php:116
1568
+ msgid ""
1569
+ "Join The 1,000s Who've Already Upgraded Their WordPress Security To Better "
1570
+ "Protect Their Sites."
1571
  msgstr ""
1572
 
1573
+ #: src/lib/src/Modules/Base/Strings.php:118
1574
+ msgid "Get Pro Protection"
1575
  msgstr ""
1576
 
1577
+ #: src/lib/src/Modules/Base/Strings.php:120
1578
+ #: src/lib/src/Modules/Insights/Strings.php:16
1579
+ msgid "recommendation"
1580
  msgstr ""
1581
 
1582
+ #: src/lib/src/Modules/Base/Strings.php:121
1583
+ #: src/lib/src/Modules/Insights/Strings.php:17
1584
+ msgid "suggestion"
1585
  msgstr ""
1586
 
1587
+ #: src/lib/src/Modules/Base/Strings.php:122
1588
+ #: src/lib/src/Modules/Insights/Strings.php:18
1589
+ #, php-format
1590
+ msgid "Welcome To %s Security Insights Dashboard"
1591
  msgstr ""
1592
 
1593
+ #: src/lib/src/Modules/Base/Strings.php:124
1594
+ #: src/lib/src/Modules/Insights/Strings.php:20
1595
+ msgid "Sorry, this feature is included with Pro subscriptions."
1596
  msgstr ""
1597
 
1598
+ #: src/lib/src/Modules/Base/Strings.php:125
1599
+ #: src/lib/src/Modules/Insights/Strings.php:21
1600
+ msgid "This feature isn't currently enabled."
1601
  msgstr ""
1602
 
1603
+ #: src/lib/src/Modules/Base/Strings.php:126
1604
+ #: src/lib/src/Modules/Insights/Strings.php:22
1605
+ msgid "You can get this feature (along with loads more) by going Pro."
1606
  msgstr ""
1607
 
1608
+ #: src/lib/src/Modules/Base/Strings.php:127
1609
+ #: src/lib/src/Modules/Insights/Strings.php:23
1610
+ msgid "Please turn on this feature in the options."
1611
  msgstr ""
1612
 
1613
+ #: src/lib/src/Modules/Base/Strings.php:128
1614
+ #: src/lib/src/Modules/Insights/Strings.php:24
1615
+ msgid "There are no important security notices at this time."
1616
  msgstr ""
1617
 
1618
+ #: src/lib/src/Modules/Base/Strings.php:129
1619
+ #: src/lib/src/Modules/Insights/Strings.php:25
1620
+ msgid "This is wonderful!"
1621
  msgstr ""
1622
 
1623
+ #: src/lib/src/Modules/Base/Strings.php:130
1624
+ #: src/lib/src/Modules/Insights/Strings.php:26
1625
+ msgid "YYYY-MM-DD"
1626
  msgstr ""
1627
 
1628
+ #: src/lib/src/Modules/Base/Strings.php:133
1629
+ msgid "Is this option included with import/export?"
1630
  msgstr ""
1631
 
1632
+ #: src/lib/src/Modules/Base/Strings.php:136
1633
+ msgid "Search for a plugin option"
 
1634
  msgstr ""
1635
 
1636
+ #: src/lib/src/Modules/Base/Strings.php:189
1637
+ msgid "User Messages"
 
1638
  msgstr ""
1639
 
1640
+ #: src/lib/src/Modules/Base/Strings.php:190
1641
+ msgid "Messages"
1642
  msgstr ""
1643
 
1644
+ #: src/lib/src/Modules/Base/Strings.php:192
1645
+ msgid "Customize the messages displayed to the user."
 
1646
  msgstr ""
1647
 
1648
+ #: src/lib/src/Modules/Base/Strings.php:193
1649
+ msgid ""
1650
+ "Use this section if you need to communicate to the user in a particular "
1651
+ "manner."
1652
  msgstr ""
1653
 
1654
+ #: src/lib/src/Modules/Base/Strings.php:194
1655
+ msgid "Hint"
 
1656
  msgstr ""
1657
 
1658
+ #: src/lib/src/Modules/Base/Strings.php:194
1659
  #, php-format
1660
+ msgid "To reset any message to its default, enter the text exactly: %s"
1661
  msgstr ""
1662
 
1663
+ #: src/lib/src/Modules/Base/UI.php:149 src/lib/src/Modules/Base/UI.php:159
1664
+ msgid "Module Disabled"
1665
  msgstr ""
1666
 
1667
+ #: src/lib/src/Modules/Base/WpCli/ModuleStandard.php:132
1668
+ msgid "No value set."
1669
  msgstr ""
1670
 
1671
+ #: src/lib/src/Modules/Base/WpCli/ModuleStandard.php:142
1672
+ msgid "\"Y\" = Turned On; \"N\" = Turned Off"
1673
  msgstr ""
1674
 
1675
+ #: src/lib/src/Modules/Base/WpCli/ModuleStandard.php:145
1676
+ #, php-format
1677
+ msgid "Current value: %s"
 
1678
  msgstr ""
1679
 
1680
+ #: src/lib/src/Modules/BaseShield/AjaxHandler.php:49
1681
  #, php-format
1682
+ msgid "%s Plugin options updated successfully."
1683
  msgstr ""
1684
 
1685
+ #: src/lib/src/Modules/BaseShield/AjaxHandler.php:53
1686
+ #, php-format
1687
+ msgid "Failed to update %s plugin options."
1688
  msgstr ""
1689
 
1690
+ #: src/lib/src/Modules/BaseShield/ModCon.php:113
1691
+ msgid ""
1692
+ "If you've forgotten your PIN, a link can be sent to the plugin administrator "
1693
+ "email address to remove this restriction."
1694
  msgstr ""
1695
 
1696
+ #: src/lib/src/Modules/BaseShield/ModCon.php:114
1697
+ msgid "Click here to send the verification email."
 
1698
  msgstr ""
1699
 
1700
+ #: src/lib/src/Modules/BaseShield/ModCon.php:115
1701
+ #, php-format
1702
+ msgid "Email will be sent to %s"
 
1703
  msgstr ""
1704
 
1705
+ #: src/lib/src/Modules/BaseShield/ModCon.php:117
1706
+ msgid ""
1707
+ "The Security Administrator has restricted the use of the email override "
1708
+ "feature."
1709
  msgstr ""
1710
 
1711
+ #: src/lib/src/Modules/CommentsFilter/AdminNotices.php:34
1712
+ msgid "Akismet Anti-SPAM plugin is also running"
 
1713
  msgstr ""
1714
 
1715
+ #: src/lib/src/Modules/CommentsFilter/AdminNotices.php:35
1716
+ msgid ""
1717
+ "It appears you have Akismet Anti-SPAM running alongside the our human Anti-"
1718
+ "SPAM filter."
1719
  msgstr ""
1720
 
1721
+ #: src/lib/src/Modules/CommentsFilter/AdminNotices.php:36
1722
+ msgid "This is not recommended and you should disable Akismet."
1723
  msgstr ""
1724
 
1725
+ #: src/lib/src/Modules/CommentsFilter/AdminNotices.php:37
1726
+ msgid "Click to deactivate Akismet now."
 
 
 
1727
  msgstr ""
1728
 
1729
+ #: src/lib/src/Modules/CommentsFilter/Insights/OverviewCards.php:21
1730
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:93
1731
+ msgid "Bot SPAM"
1732
  msgstr ""
1733
 
1734
+ #: src/lib/src/Modules/CommentsFilter/Insights/OverviewCards.php:24
1735
+ msgid "Bot SPAM comments are blocked"
1736
  msgstr ""
1737
 
1738
+ #: src/lib/src/Modules/CommentsFilter/Insights/OverviewCards.php:25
1739
+ msgid "There is no protection against Bot SPAM comments"
 
 
 
 
 
1740
  msgstr ""
1741
 
1742
+ #: src/lib/src/Modules/CommentsFilter/Insights/OverviewCards.php:29
1743
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:103
1744
+ msgid "Human SPAM"
1745
  msgstr ""
1746
 
1747
+ #: src/lib/src/Modules/CommentsFilter/Insights/OverviewCards.php:32
1748
+ msgid "Comments posted by humans are checked for SPAM"
1749
  msgstr ""
1750
 
1751
+ #: src/lib/src/Modules/CommentsFilter/Insights/OverviewCards.php:33
1752
+ msgid "Comments posted by humans aren't checked for SPAM"
 
1753
  msgstr ""
1754
 
1755
+ #: src/lib/src/Modules/CommentsFilter/Insights/OverviewCards.php:42
1756
+ msgid "SPAM Blocking"
1757
  msgstr ""
1758
 
1759
+ #: src/lib/src/Modules/CommentsFilter/Insights/OverviewCards.php:46
1760
+ msgid "Block Bot & Human Comment SPAM"
1761
  msgstr ""
1762
 
1763
+ #: src/lib/src/Modules/CommentsFilter/ModCon.php:43
1764
+ msgid "I'm not a spammer."
1765
  msgstr ""
1766
 
1767
+ #: src/lib/src/Modules/CommentsFilter/ModCon.php:46
1768
+ msgid "Please check the box to confirm you're not a spammer."
1769
  msgstr ""
1770
 
1771
+ #: src/lib/src/Modules/CommentsFilter/ModCon.php:49
1772
+ #, php-format
1773
+ msgid "Please wait %s seconds before posting your comment."
1774
  msgstr ""
1775
 
1776
+ #: src/lib/src/Modules/CommentsFilter/ModCon.php:52
1777
+ msgid "Please reload this page to post a comment."
1778
  msgstr ""
1779
 
1780
+ #: src/lib/src/Modules/CommentsFilter/Scan/AntiBot.php:21
1781
+ msgid "Failed AntiBot Verification"
1782
  msgstr ""
1783
 
1784
+ #: src/lib/src/Modules/CommentsFilter/Scan/Bot.php:33
1785
+ #: src/lib/src/Modules/CommentsFilter/Scan/Bot.php:38
1786
+ #: src/lib/src/Modules/CommentsFilter/Scan/Bot.php:44
1787
+ #: src/lib/src/Modules/CommentsFilter/Scan/Bot.php:48
1788
+ #: src/lib/src/Modules/CommentsFilter/Scan/Bot.php:52
1789
+ #, php-format
1790
+ msgid "Failed Bot Test (%s)"
1791
  msgstr ""
1792
 
1793
+ #: src/lib/src/Modules/CommentsFilter/Scan/Bot.php:33
1794
+ msgid "checkbox"
1795
  msgstr ""
1796
 
1797
+ #: src/lib/src/Modules/CommentsFilter/Scan/Bot.php:38
1798
+ msgid "honeypot"
1799
  msgstr ""
1800
 
1801
+ #: src/lib/src/Modules/CommentsFilter/Scan/Bot.php:44
1802
+ msgid "cooldown"
1803
  msgstr ""
1804
 
1805
+ #: src/lib/src/Modules/CommentsFilter/Scan/Bot.php:48
1806
+ msgid "expired"
1807
  msgstr ""
1808
 
1809
+ #: src/lib/src/Modules/CommentsFilter/Scan/Bot.php:52
1810
+ msgid "token"
1811
  msgstr ""
1812
 
1813
+ #: src/lib/src/Modules/CommentsFilter/Scan/Human.php:49
1814
  #, php-format
1815
+ msgid "Human SPAM filter found \"%s\" in \"%s\""
1816
  msgstr ""
1817
 
1818
+ #: src/lib/src/Modules/CommentsFilter/Scan/Scanner.php:58
1819
+ msgid "Trash"
1820
  msgstr ""
1821
 
1822
+ #: src/lib/src/Modules/CommentsFilter/Scan/Scanner.php:62
1823
+ msgid "Pending Moderation"
 
1824
  msgstr ""
1825
 
1826
+ #: src/lib/src/Modules/CommentsFilter/Scan/Scanner.php:70
1827
  #, php-format
1828
+ msgid "%s marked this comment as \"%s\"."
1829
  msgstr ""
1830
 
1831
+ #: src/lib/src/Modules/CommentsFilter/Scan/Scanner.php:72
1832
  #, php-format
1833
+ msgid "Reason: %s"
 
 
1834
  msgstr ""
1835
 
1836
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:17
1837
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:26
1838
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:36
1839
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:45
1840
+ msgid "SPAM Blocked"
1841
  msgstr ""
1842
 
1843
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:18
1844
+ msgid "AntiBot System"
 
 
 
1845
  msgstr ""
1846
 
1847
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:21
1848
+ msgid "Blocked SPAM comment that failed AntiBot tests."
 
1849
  msgstr ""
1850
 
1851
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:27
1852
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:97
1853
+ msgid "Human"
1854
  msgstr ""
1855
 
1856
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:30
1857
+ msgid "Blocked human SPAM comment containing suspicious content."
 
1858
  msgstr ""
1859
 
1860
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:31
1861
+ msgid "Human SPAM filter found \"{{word}}\" in \"{{key}}\""
 
1862
  msgstr ""
1863
 
1864
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:37
1865
+ msgid "Bot"
 
 
 
 
 
1866
  msgstr ""
1867
 
1868
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:40
1869
+ msgid "Blocked SPAM comment from Bot."
 
1870
  msgstr ""
1871
 
1872
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:46
1873
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:209
1874
+ #: src/lib/src/Modules/LoginGuard/Strings.php:266
1875
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:42
1876
+ #: src/lib/src/Modules/Plugin/Strings.php:168
1877
+ #: src/lib/src/Modules/Plugin/Strings.php:169
1878
+ msgid "CAPTCHA"
1879
  msgstr ""
1880
 
1881
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:49
1882
+ msgid "Blocked SPAM comment that failed reCAPTCHA."
 
1883
  msgstr ""
1884
 
1885
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:53
1886
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:55
1887
+ msgid "Comment SPAM Blocked."
1888
  msgstr ""
1889
 
1890
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:72
1891
+ msgid "Comments SPAM Protection"
1892
+ msgstr ""
1893
+
1894
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:74
1895
  #, php-format
1896
+ msgid ""
1897
+ "The Comments Filter can block 100% of automated spam bots and also offer the "
1898
+ "option to analyse human-generated spam."
1899
  msgstr ""
1900
 
1901
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:75
1902
+ msgid "Comments Filter"
1903
  msgstr ""
1904
 
1905
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:80
1906
+ msgid "Common Settings"
 
1907
  msgstr ""
1908
 
1909
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:81
1910
+ msgid "Common Settings For All SPAM Scanning"
1911
  msgstr ""
1912
 
1913
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:83
1914
+ msgid "Settings that apply to all comment SPAM scanning."
 
1915
  msgstr ""
1916
 
1917
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:88
1918
  #, php-format
1919
+ msgid "%s Comment SPAM Protection"
1920
  msgstr ""
1921
 
1922
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:88
1923
+ msgid "Automatic Bot"
1924
  msgstr ""
1925
 
1926
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:90
1927
+ #, php-format
1928
+ msgid "Blocks 100% of all automated bot-generated comment SPAM."
 
1929
  msgstr ""
1930
 
1931
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:91
1932
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:100
1933
+ #: src/lib/src/Modules/LoginGuard/Strings.php:108
1934
+ #: src/lib/src/Modules/LoginGuard/Strings.php:127
1935
+ #: src/lib/src/Modules/Plugin/Strings.php:174
1936
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:53
1937
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:62
1938
+ #: src/lib/src/Modules/UserManagement/Strings.php:122
1939
+ #: src/lib/src/Modules/UserManagement/Strings.php:131
1940
+ #: src/lib/src/Modules/UserManagement/Strings.php:140
1941
+ #: src/lib/src/Modules/UserManagement/Strings.php:149
1942
+ #: src/lib/src/Modules/UserManagement/Strings.php:159
1943
+ msgid "Use of this feature is highly recommend."
1944
  msgstr ""
1945
 
1946
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:97
1947
  #, php-format
1948
+ msgid "%s Comment SPAM Protection Filter"
1949
  msgstr ""
1950
 
1951
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:99
1952
+ msgid "Uses a 3rd party SPAM dictionary to detect human-based comment SPAM."
 
1953
  msgstr ""
1954
 
1955
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:101
1956
+ msgid ""
1957
+ "This tool, unlike other SPAM tools such as Akismet, will not send your "
1958
+ "comment data to 3rd party services for analysis."
1959
  msgstr ""
1960
 
1961
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:131
1962
+ msgid "Enable (or Disable) The Comment SPAM Protection Feature"
1963
  msgstr ""
1964
 
1965
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:132
1966
+ #: src/wizards/plugin.php:765 src/wizards/plugin.php:770
1967
+ msgid "Comment SPAM Protection"
 
1968
  msgstr ""
1969
 
1970
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:136
1971
+ msgid "Trusted Commenter Minimum"
 
1972
  msgstr ""
1973
 
1974
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:137
1975
+ msgid "Minimum Number Of Approved Comments Before Commenter Is Trusted"
 
 
1976
  msgstr ""
1977
 
1978
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:138
1979
+ msgid ""
1980
+ "Specify how many approved comments must exist before a commenter is trusted "
1981
+ "and their comments are no longer scanned."
1982
  msgstr ""
1983
 
1984
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:139
1985
+ msgid "Normally WordPress will trust after 1 comment."
 
 
 
 
 
 
 
 
 
1986
  msgstr ""
1987
 
1988
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:143
1989
+ msgid "Trusted User Roles"
 
 
 
1990
  msgstr ""
1991
 
1992
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:144
1993
+ msgid "Comments From Users With These Roles Will Never Be Scanned"
1994
  msgstr ""
1995
 
1996
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:145
1997
+ msgid ""
1998
+ "Shield doesn't normally scan comments from logged-in or registered users."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1999
  msgstr ""
2000
 
2001
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:146
2002
+ msgid "Specify user roles here that shouldn't be scanned."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2003
  msgstr ""
2004
 
2005
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:147
2006
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:159
2007
+ #: src/lib/src/Modules/HackGuard/Strings.php:233
2008
+ #: src/lib/src/Modules/HackGuard/Strings.php:245
2009
+ #: src/lib/src/Modules/HackGuard/Strings.php:256
2010
+ #: src/lib/src/Modules/HackGuard/Strings.php:357
2011
+ #: src/lib/src/Modules/HackGuard/Strings.php:399
2012
+ #: src/lib/src/Modules/IPs/Lib/AutoUnblock.php:208
2013
+ #: src/lib/src/Modules/IPs/UI.php:90 src/lib/src/Modules/IPs/UI.php:98
2014
+ #: src/lib/src/Modules/Integrations/Strings.php:100
2015
+ #: src/lib/src/Modules/Integrations/Strings.php:113
2016
+ #: src/lib/src/Modules/Integrations/UI.php:61
2017
+ #: src/lib/src/Modules/Lockdown/Strings.php:112
2018
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BackupCodes.php:34
2019
+ #: src/lib/src/Modules/LoginGuard/Strings.php:190
2020
+ #: src/lib/src/Modules/LoginGuard/Strings.php:257
2021
+ #: src/lib/src/Modules/LoginGuard/Strings.php:274
2022
+ #: src/lib/src/Modules/LoginGuard/Strings.php:284
2023
+ #: src/lib/src/Modules/Plugin/Strings.php:387
2024
+ #: src/lib/src/Modules/Plugin/Strings.php:398
2025
+ #: src/lib/src/Modules/Plugin/Strings.php:407
2026
+ #: src/lib/src/Modules/SecurityAdmin/Lib/SecurityAdmin/Ops/RemoveSecAdmin.php:36
2027
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:76
2028
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:123
2029
+ #: src/lib/src/Modules/Traffic/Strings.php:56
2030
+ #: src/lib/src/Modules/UserManagement/Strings.php:301
2031
+ #: src/lib/src/Modules/UserManagement/Strings.php:318
2032
+ msgid "Important"
2033
+ msgstr ""
2034
+
2035
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:147
2036
+ #: src/lib/src/Modules/UserManagement/Strings.php:318
2037
+ msgid "Take a new line for each user role."
2038
+ msgstr ""
2039
+
2040
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:148
2041
+ #: src/lib/src/Modules/UserManagement/Strings.php:319
2042
+ msgid "Available Roles"
2043
+ msgstr ""
2044
+
2045
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:153
2046
+ #: src/lib/src/Modules/LoginGuard/Strings.php:278
2047
+ msgid "AntiBot Detection Engine (ADE)"
2048
+ msgstr ""
2049
+
2050
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:154
2051
+ msgid "Use ADE To Detect SPAM Bots And Block Comment SPAM"
2052
+ msgstr ""
2053
+
2054
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:156
2055
+ #: src/lib/src/Modules/LoginGuard/Strings.php:281
2056
+ #, php-format
2057
+ msgid ""
2058
+ "AntiBot Detection Engine is %s's exclusive bot-detection technology that "
2059
+ "removes the needs for CAPTCHA and other challenges."
2060
+ msgstr ""
2061
+
2062
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:158
2063
+ #: src/lib/src/Modules/LoginGuard/Strings.php:283
2064
+ msgid ""
2065
+ "This feature is designed to replace the CAPTCHA and Bot Protection options."
2066
+ msgstr ""
2067
+
2068
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:160
2069
+ #: src/lib/src/Modules/LoginGuard/Strings.php:285
2070
+ msgid ""
2071
+ "Switching on this feature will disable the CAPTCHA and Bot Protection "
2072
+ "settings."
2073
+ msgstr ""
2074
+
2075
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:165
2076
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:166
2077
+ msgid "Human SPAM Filter"
2078
+ msgstr ""
2079
+
2080
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:166
2081
+ #, php-format
2082
+ msgid "Enable (or Disable) The %s Feature"
2083
+ msgstr ""
2084
+
2085
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:168
2086
+ msgid ""
2087
+ "Most SPAM is automatic, by bots, but sometimes Humans also post comments to "
2088
+ "your site and these bypass Bot Detection rules."
2089
+ msgstr ""
2090
+
2091
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:169
2092
+ msgid ""
2093
+ "When this happens, you can scan the content for keywords that are typical of "
2094
+ "SPAM."
2095
+ msgstr ""
2096
+
2097
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:174
2098
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:195
2099
+ msgid "SPAM Action"
2100
+ msgstr ""
2101
+
2102
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:175
2103
+ msgid "How To Categorise Comments When Identified To Be SPAM"
2104
+ msgstr ""
2105
+
2106
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:176
2107
+ #, php-format
2108
+ msgid ""
2109
+ "When a comment is detected as being SPAM from %s, the comment will be "
2110
+ "categorised based on this setting."
2111
+ msgstr ""
2112
+
2113
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:176
2114
+ msgid "a human commenter"
2115
+ msgstr ""
2116
+
2117
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:180
2118
+ msgid "SPAM Bot Protection"
2119
+ msgstr ""
2120
+
2121
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:183
2122
+ msgid "Block 100% Comment SPAM From Automated Bots"
2123
+ msgstr ""
2124
+
2125
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:187
2126
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:216
2127
+ msgid ""
2128
+ "Use the newer AntiBot Detection Engine to detect SPAM instead of CAPTCHAs."
2129
+ msgstr ""
2130
+
2131
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:189
2132
+ msgid "Highly effective detection for the most common types of comment SPAM."
2133
+ msgstr ""
2134
+
2135
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:190
2136
+ msgid "Bonus"
2137
+ msgstr ""
2138
+
2139
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:190
2140
+ msgid ""
2141
+ "Unlike Akismet, your data is never sent off-site to 3rd party processing "
2142
+ "servers."
2143
+ msgstr ""
2144
+
2145
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:196
2146
+ msgid "Where To Put SPAM Comments"
2147
+ msgstr ""
2148
+
2149
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:197
2150
+ #, php-format
2151
+ msgid ""
2152
+ "When a comment is detected as being SPAM, %s will put the comment in the "
2153
+ "specified folder."
2154
+ msgstr ""
2155
+
2156
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:202
2157
+ msgid "GASP Checkbox Message"
2158
+ msgstr ""
2159
+
2160
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:203
2161
+ msgid "If you want a custom checkbox message, please provide this here"
2162
+ msgstr ""
2163
+
2164
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:204
2165
+ msgid "You can customise the message beside the checkbox."
2166
+ msgstr ""
2167
+
2168
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:205
2169
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:233
2170
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:240
2171
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:247
2172
+ #, php-format
2173
+ msgid "Default Message: %s"
2174
+ msgstr ""
2175
+
2176
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:205
2177
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:233
2178
+ msgid "Please check the box to confirm you're not a spammer"
2179
+ msgstr ""
2180
+
2181
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:212
2182
+ msgid "Enable CAPTCHA To Protect Against SPAM Comments"
2183
+ msgstr ""
2184
+
2185
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:217
2186
+ msgid ""
2187
+ "You can choose the CAPTCHA display format that best suits your site, "
2188
+ "including the newer Invisible CAPTCHA, when you upgrade to PRO."
2189
+ msgstr ""
2190
+
2191
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:224
2192
+ msgid "Please remember to provide your CAPTCHA keys."
2193
+ msgstr ""
2194
+
2195
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:230
2196
+ msgid "GASP Alert Message"
2197
+ msgstr ""
2198
+
2199
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:231
2200
+ msgid "If you want a custom alert message, please provide this here"
2201
+ msgstr ""
2202
+
2203
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:232
2204
+ msgid ""
2205
+ "This alert message is displayed when a visitor attempts to submit a comment "
2206
+ "without checking the box."
2207
+ msgstr ""
2208
+
2209
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:237
2210
+ msgid "GASP Wait Message"
2211
+ msgstr ""
2212
+
2213
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:238
2214
+ msgid ""
2215
+ "If you want a custom submit-button wait message, please provide this here."
2216
+ msgstr ""
2217
+
2218
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:239
2219
+ #, php-format
2220
+ msgid ""
2221
+ "Where you see the '%s' this will be the number of seconds. You must ensure "
2222
+ "you include 1, and only 1, of these."
2223
+ msgstr ""
2224
+
2225
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:240
2226
+ #, php-format
2227
+ msgid "Please wait %s seconds before posting your comment"
2228
+ msgstr ""
2229
+
2230
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:244
2231
+ msgid "GASP Reload Message"
2232
+ msgstr ""
2233
+
2234
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:245
2235
+ msgid ""
2236
+ "If you want a custom message when the comment token has expired, please "
2237
+ "provide this here."
2238
+ msgstr ""
2239
+
2240
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:246
2241
+ msgid ""
2242
+ "This message is displayed on the submit-button when the comment token is "
2243
+ "expired"
2244
+ msgstr ""
2245
+
2246
+ #: src/lib/src/Modules/CommentsFilter/Strings.php:247
2247
+ msgid "Please reload this page to post a comment"
2248
+ msgstr ""
2249
+
2250
+ #: src/lib/src/Modules/Comms/Strings.php:15
2251
+ msgid "SureSend Fail"
2252
+ msgstr ""
2253
+
2254
+ #: src/lib/src/Modules/Comms/Strings.php:17
2255
+ msgid "Failed to send email (type: {{slug}}) to \"{{email}}\" using SureSend."
2256
+ msgstr ""
2257
+
2258
+ #: src/lib/src/Modules/Comms/Strings.php:21
2259
+ msgid "SureSend Success"
2260
+ msgstr ""
2261
+
2262
+ #: src/lib/src/Modules/Comms/Strings.php:23
2263
+ msgid ""
2264
+ "Successfully sent email (type: {{slug}}) to \"{{email}}\" using SureSend."
2265
+ msgstr ""
2266
+
2267
+ #: src/lib/src/Modules/Comms/Strings.php:37
2268
+ #: src/lib/src/Modules/Comms/Strings.php:38
2269
+ #: src/lib/src/Modules/Plugin/Strings.php:158
2270
+ #: src/lib/src/Modules/Plugin/Strings.php:159
2271
+ msgid "SureSend Email"
2272
+ msgstr ""
2273
+
2274
+ #: src/lib/src/Modules/Comms/Strings.php:61
2275
+ msgid "SureSend Emails"
2276
+ msgstr ""
2277
+
2278
+ #: src/lib/src/Modules/Comms/Strings.php:62
2279
+ msgid "Select Which Shield Emails Should Be Sent Using SureSend"
2280
+ msgstr ""
2281
+
2282
+ #: src/lib/src/Modules/Comms/Strings.php:64
2283
+ msgid "SureSend is a dedicated email delivery service from Shield Security."
2284
+ msgstr ""
2285
+
2286
+ #: src/lib/src/Modules/Comms/Strings.php:65
2287
+ msgid ""
2288
+ "The purpose is the improve WordPress email reliability for critical emails."
2289
+ msgstr ""
2290
+
2291
+ #: src/lib/src/Modules/Comms/Strings.php:66
2292
+ msgid ""
2293
+ "If you're not using a dedicated email service provider to send WordPress "
2294
+ "emails, you should enable SureSend for these important emails."
2295
+ msgstr ""
2296
+
2297
+ #: src/lib/src/Modules/Comms/Strings.php:67
2298
+ msgid "This isn't a replacement for a dedicated email service."
2299
+ msgstr ""
2300
+
2301
+ #: src/lib/src/Modules/Comms/Strings.php:68
2302
+ msgid ""
2303
+ "Please read the information and blog links below to fully understand this "
2304
+ "service and its limitations."
2305
+ msgstr ""
2306
+
2307
+ #: src/lib/src/Modules/Data/DB/ReqLogs/GetRequestMeta.php:22
2308
+ #: src/lib/src/Tables/DataTables/Build/AuditTrail/ForAuditTrail.php:32
2309
+ #: src/lib/src/Tables/DataTables/Build/Traffic/ForTraffic.php:31
2310
+ msgid "Request ID"
2311
+ msgstr ""
2312
+
2313
+ #: src/lib/src/Modules/Data/DB/ReqLogs/GetRequestMeta.php:28
2314
+ #: src/lib/src/Tables/DataTables/Build/AuditTrail/ForAuditTrail.php:109
2315
+ #: src/lib/src/Tables/DataTables/Build/Traffic/ForTraffic.php:130
2316
+ msgid "User ID"
2317
+ msgstr ""
2318
+
2319
+ #: src/lib/src/Modules/Data/DB/ReqLogs/GetRequestMeta.php:31
2320
+ msgid "Timestamp"
2321
+ msgstr ""
2322
+
2323
+ #: src/lib/src/Modules/Data/DB/ReqLogs/GetRequestMeta.php:34
2324
+ msgid "Method"
2325
+ msgstr ""
2326
+
2327
+ #: src/lib/src/Modules/Data/DB/ReqLogs/GetRequestMeta.php:40
2328
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:301
2329
+ #: src/lib/src/Tables/DataTables/Build/Traffic/ForTraffic.php:119
2330
+ msgid "Path"
2331
+ msgstr ""
2332
+
2333
+ #: src/lib/src/Modules/Data/DB/ReqLogs/GetRequestMeta.php:43
2334
+ #: src/lib/src/Modules/Traffic/Lib/TrafficTable/LoadRawTableData.php:120
2335
+ msgid "User Agent"
2336
+ msgstr ""
2337
+
2338
+ #: src/lib/src/Modules/Email/Processor.php:12
2339
+ msgid "Hi !"
2340
+ msgstr ""
2341
+
2342
+ #: src/lib/src/Modules/Email/Processor.php:51
2343
+ #, php-format
2344
+ msgid "Email sent from the %s Plugin v%s, on %s."
2345
+ msgstr ""
2346
+
2347
+ #: src/lib/src/Modules/Email/Processor.php:56
2348
+ msgid "Note: Email delays are caused by website hosting and email providers."
2349
+ msgstr ""
2350
+
2351
+ #: src/lib/src/Modules/Email/Processor.php:57
2352
+ #, php-format
2353
+ msgid "Time Sent: %s"
2354
+ msgstr ""
2355
+
2356
+ #: src/lib/src/Modules/Events/Lib/Reports/KeyStats.php:64
2357
+ msgid "Top Security Statistics"
2358
+ msgstr ""
2359
+
2360
+ #: src/lib/src/Modules/Events/Lib/UI/BuildDataForStats.php:79
2361
+ msgid "IP Offenses"
2362
+ msgstr ""
2363
+
2364
+ #: src/lib/src/Modules/Events/Lib/UI/BuildDataForStats.php:87
2365
+ msgid "Bot Tracking"
2366
+ msgstr ""
2367
+
2368
+ #: src/lib/src/Modules/Events/Lib/UI/BuildDataForStats.php:102
2369
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:267
2370
+ msgid "Comment SPAM"
2371
+ msgstr ""
2372
+
2373
+ #: src/lib/src/Modules/Events/Lib/UI/BuildDataForStats.php:111
2374
+ #: src/lib/src/Modules/LoginGuard/Insights/OverviewCards.php:66
2375
+ #: src/lib/src/Modules/LoginGuard/Strings.php:81
2376
+ #: src/lib/src/Modules/Plugin/Strings.php:548 src/wizards/plugin.php:659
2377
+ #: src/wizards/plugin.php:664
2378
+ msgid "Login Guard"
2379
+ msgstr ""
2380
+
2381
+ #: src/lib/src/Modules/Events/Processor.php:43
2382
+ #: src/lib/src/Modules/Reporting/UI.php:92
2383
+ msgid "Comment Blocks"
2384
+ msgstr ""
2385
+
2386
+ #: src/lib/src/Modules/Events/Processor.php:51
2387
+ msgid "Firewall Blocks"
2388
+ msgstr ""
2389
+
2390
+ #: src/lib/src/Modules/Events/Processor.php:55
2391
+ #: src/lib/src/Modules/Reporting/UI.php:72
2392
+ msgid "Login Blocks"
2393
+ msgstr ""
2394
+
2395
+ #: src/lib/src/Modules/Events/Processor.php:59
2396
+ msgid "Login Verified"
2397
+ msgstr ""
2398
+
2399
+ #: src/lib/src/Modules/Events/Processor.php:63
2400
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:49
2401
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:234
2402
+ #: src/lib/src/Modules/Insights/UI.php:203
2403
+ #: src/lib/src/Modules/UserManagement/UI.php:29
2404
+ msgid "User Sessions"
2405
+ msgstr ""
2406
+
2407
+ #: src/lib/src/Modules/Events/Processor.php:67
2408
+ msgid "IP Blocks"
2409
+ msgstr ""
2410
+
2411
+ #: src/lib/src/Modules/Events/Processor.php:71
2412
+ msgid "Total Offenses"
2413
+ msgstr ""
2414
+
2415
+ #: src/lib/src/Modules/Events/Processor.php:79
2416
+ #, php-format
2417
+ msgid "%s Statistics"
2418
+ msgstr ""
2419
+
2420
+ #: src/lib/src/Modules/Events/UI.php:22
2421
+ msgid "No stats yet. It wont take long though, so check back here soon."
2422
+ msgstr ""
2423
+
2424
+ #: src/lib/src/Modules/Firewall/Insights/OverviewCards.php:24
2425
+ msgid "Include Admins"
2426
+ msgstr ""
2427
+
2428
+ #: src/lib/src/Modules/Firewall/Insights/OverviewCards.php:25
2429
+ msgid "Ignore Admins"
2430
+ msgstr ""
2431
+
2432
+ #: src/lib/src/Modules/Firewall/Insights/OverviewCards.php:28
2433
+ msgid "Firewall rules are also applied to admins"
2434
+ msgstr ""
2435
+
2436
+ #: src/lib/src/Modules/Firewall/Insights/OverviewCards.php:29
2437
+ msgid "Firewall rules aren't applied to admins"
2438
+ msgstr ""
2439
+
2440
+ #: src/lib/src/Modules/Firewall/Insights/OverviewCards.php:38
2441
+ #: src/lib/src/Modules/Firewall/Insights/OverviewCards.php:48
2442
+ #: src/lib/src/Modules/Firewall/Strings.php:24
2443
+ #: src/lib/src/Modules/Plugin/Strings.php:539
2444
+ msgid "Firewall"
2445
+ msgstr ""
2446
+
2447
+ #: src/lib/src/Modules/Firewall/Insights/OverviewCards.php:42
2448
+ msgid "Block Malicious Requests"
2449
+ msgstr ""
2450
+
2451
+ #: src/lib/src/Modules/Firewall/Insights/OverviewCards.php:51
2452
+ msgid "The Firewall is protecting your site against malicious requests"
2453
+ msgstr ""
2454
+
2455
+ #: src/lib/src/Modules/Firewall/Insights/OverviewCards.php:52
2456
+ msgid ""
2457
+ "The Firewall is disabled so your site isn't protected against malicious "
2458
+ "requests"
2459
+ msgstr ""
2460
+
2461
+ #: src/lib/src/Modules/Firewall/Lib/Scan/FirewallHandler.php:97
2462
+ msgid "Something in the request URL or Form data triggered the firewall."
2463
+ msgstr ""
2464
+
2465
+ #: src/lib/src/Modules/Firewall/Lib/Scan/FirewallHandler.php:118
2466
+ msgid "Firewall Block Alert"
2467
+ msgstr ""
2468
+
2469
+ #: src/lib/src/Modules/Firewall/Lib/Scan/FirewallHandler.php:121
2470
+ #, php-format
2471
+ msgid "%s Firewall has blocked a request to your WordPress site."
2472
+ msgstr ""
2473
+
2474
+ #: src/lib/src/Modules/Firewall/Lib/Scan/FirewallHandler.php:123
2475
+ msgid "Details for the request are given below:"
2476
+ msgstr ""
2477
+
2478
+ #: src/lib/src/Modules/Firewall/Lib/Scan/FirewallHandler.php:124
2479
+ msgid "Request Details"
2480
+ msgstr ""
2481
+
2482
+ #: src/lib/src/Modules/Firewall/Lib/Scan/FirewallHandler.php:125
2483
+ msgid "IP Address Lookup"
2484
+ msgstr ""
2485
+
2486
+ #: src/lib/src/Modules/Firewall/Lib/Scan/FirewallHandler.php:126
2487
+ msgid "This is for informational purposes only."
2488
+ msgstr ""
2489
+
2490
+ #: src/lib/src/Modules/Firewall/Lib/Scan/FirewallHandler.php:127
2491
+ #, php-format
2492
+ msgid "%s has already taken the necessary action of blocking the request."
2493
+ msgstr ""
2494
+
2495
+ #: src/lib/src/Modules/Firewall/Lib/Scan/FirewallHandler.php:135
2496
+ msgid "Visitor IP Address"
2497
+ msgstr ""
2498
+
2499
+ #: src/lib/src/Modules/Firewall/Lib/Scan/FirewallHandler.php:136
2500
+ msgid "Firewall Rule"
2501
+ msgstr ""
2502
+
2503
+ #: src/lib/src/Modules/Firewall/Lib/Scan/FirewallHandler.php:137
2504
+ msgid "Request Path"
2505
+ msgstr ""
2506
+
2507
+ #: src/lib/src/Modules/Firewall/Lib/Scan/FirewallHandler.php:138
2508
+ msgid "Request Parameter"
2509
+ msgstr ""
2510
+
2511
+ #: src/lib/src/Modules/Firewall/Lib/Scan/FirewallHandler.php:139
2512
+ msgid "Request Value"
2513
+ msgstr ""
2514
+
2515
+ #: src/lib/src/Modules/Firewall/Lib/Scan/Handlers/Aggressive.php:10
2516
+ msgid "Aggressive"
2517
+ msgstr ""
2518
+
2519
+ #: src/lib/src/Modules/Firewall/Lib/Scan/Handlers/DirTraversal.php:10
2520
+ #: src/lib/src/Modules/Firewall/Strings.php:221
2521
+ #: src/lib/src/Modules/Firewall/Strings.php:223
2522
+ msgid "Directory Traversal"
2523
+ msgstr ""
2524
+
2525
+ #: src/lib/src/Modules/Firewall/Lib/Scan/Handlers/ExeFiles.php:20
2526
+ msgid "Exe File"
2527
+ msgstr ""
2528
+
2529
+ #: src/lib/src/Modules/Firewall/Lib/Scan/Handlers/FieldTruncation.php:10
2530
+ #: src/lib/src/Modules/Firewall/Strings.php:110
2531
+ #: src/lib/src/Modules/Firewall/Strings.php:229
2532
+ msgid "Field Truncation"
2533
+ msgstr ""
2534
+
2535
+ #: src/lib/src/Modules/Firewall/Lib/Scan/Handlers/LeadingSchema.php:10
2536
+ #: src/lib/src/Modules/Firewall/Strings.php:235
2537
+ msgid "Leading Schema"
2538
+ msgstr ""
2539
+
2540
+ #: src/lib/src/Modules/Firewall/Lib/Scan/Handlers/PhpCode.php:10
2541
+ #: src/lib/src/Modules/Firewall/Strings.php:116
2542
+ #: src/lib/src/Modules/Firewall/Strings.php:241
2543
+ msgid "PHP Code"
2544
+ msgstr ""
2545
+
2546
+ #: src/lib/src/Modules/Firewall/Lib/Scan/Handlers/SqlQueries.php:10
2547
+ #: src/lib/src/Modules/Firewall/Strings.php:98
2548
+ #: src/lib/src/Modules/Firewall/Strings.php:232
2549
+ msgid "SQL Queries"
2550
+ msgstr ""
2551
+
2552
+ #: src/lib/src/Modules/Firewall/Lib/Scan/Handlers/WpTerms.php:10
2553
+ msgid "WP Terms"
2554
+ msgstr ""
2555
+
2556
+ #: src/lib/src/Modules/Firewall/ModCon.php:41
2557
+ #, php-format
2558
+ msgid "You were blocked by the %s Firewall."
2559
+ msgstr ""
2560
+
2561
+ #: src/lib/src/Modules/Firewall/Strings.php:23
2562
+ msgid ""
2563
+ "The Firewall is designed to analyse data sent to your website and block any "
2564
+ "requests that appear to be malicious."
2565
+ msgstr ""
2566
+
2567
+ #: src/lib/src/Modules/Firewall/Strings.php:29
2568
+ msgid "Firewall Blocking Options"
2569
+ msgstr ""
2570
+
2571
+ #: src/lib/src/Modules/Firewall/Strings.php:31
2572
+ msgid "Here you choose what kind of malicious data to scan for."
2573
+ msgstr ""
2574
+
2575
+ #: src/lib/src/Modules/Firewall/Strings.php:33
2576
+ msgid "Turn on as many options here as you can."
2577
+ msgstr ""
2578
+
2579
+ #: src/lib/src/Modules/Firewall/Strings.php:34
2580
+ msgid ""
2581
+ "If you find an incompatibility or something stops working, un-check 1 option "
2582
+ "at a time until you find the problem or review the Audit Trail."
2583
+ msgstr ""
2584
+
2585
+ #: src/lib/src/Modules/Firewall/Strings.php:36
2586
+ msgid "Firewall Blocking"
2587
+ msgstr ""
2588
+
2589
+ #: src/lib/src/Modules/Firewall/Strings.php:40
2590
+ msgid "Choose Firewall Block Response"
2591
+ msgstr ""
2592
+
2593
+ #: src/lib/src/Modules/Firewall/Strings.php:42
2594
+ msgid ""
2595
+ "Here you choose how the plugin will respond when it detects malicious data."
2596
+ msgstr ""
2597
+
2598
+ #: src/lib/src/Modules/Firewall/Strings.php:43
2599
+ #, php-format
2600
+ msgid "Choose the option \"%s\"."
2601
+ msgstr ""
2602
+
2603
+ #: src/lib/src/Modules/Firewall/Strings.php:43
2604
+ msgid "Die With Message"
2605
+ msgstr ""
2606
+
2607
+ #: src/lib/src/Modules/Firewall/Strings.php:45
2608
+ msgid "Firewall Response"
2609
+ msgstr ""
2610
+
2611
+ #: src/lib/src/Modules/Firewall/Strings.php:49
2612
+ msgid "Whitelists - Pages, Parameters, and Users that bypass the Firewall"
2613
+ msgstr ""
2614
+
2615
+ #: src/lib/src/Modules/Firewall/Strings.php:51
2616
+ msgid ""
2617
+ "In principle you should not need to whitelist anything or anyone unless you "
2618
+ "have discovered a collision with another plugin."
2619
+ msgstr ""
2620
+
2621
+ #: src/lib/src/Modules/Firewall/Strings.php:52
2622
+ msgid ""
2623
+ "Do not whitelist anything unless you are confident in what you are doing."
2624
+ msgstr ""
2625
+
2626
+ #: src/lib/src/Modules/Firewall/Strings.php:54
2627
+ msgid "Whitelist"
2628
+ msgstr ""
2629
+
2630
+ #: src/lib/src/Modules/Firewall/Strings.php:86
2631
+ msgid "Include Cookies"
2632
+ msgstr ""
2633
+
2634
+ #: src/lib/src/Modules/Firewall/Strings.php:87
2635
+ msgid "Also Test Cookie Values In Firewall Tests"
2636
+ msgstr ""
2637
+
2638
+ #: src/lib/src/Modules/Firewall/Strings.php:88
2639
+ msgid ""
2640
+ "The firewall tests GET and POST, but with this option checked it will also "
2641
+ "check COOKIE values."
2642
+ msgstr ""
2643
+
2644
+ #: src/lib/src/Modules/Firewall/Strings.php:92
2645
+ msgid "Directory Traversals"
2646
+ msgstr ""
2647
+
2648
+ #: src/lib/src/Modules/Firewall/Strings.php:93
2649
+ msgid "Block Directory Traversals"
2650
+ msgstr ""
2651
+
2652
+ #: src/lib/src/Modules/Firewall/Strings.php:94
2653
+ #, php-format
2654
+ msgid ""
2655
+ "This will block directory traversal paths in in application parameters (e.g. "
2656
+ "%s, etc)."
2657
+ msgstr ""
2658
+
2659
+ #: src/lib/src/Modules/Firewall/Strings.php:99
2660
+ msgid "Block SQL Queries"
2661
+ msgstr ""
2662
+
2663
+ #: src/lib/src/Modules/Firewall/Strings.php:100
2664
+ #, php-format
2665
+ msgid "This will block sql in application parameters (e.g. %s, etc)."
2666
+ msgstr ""
2667
+
2668
+ #: src/lib/src/Modules/Firewall/Strings.php:104
2669
+ #: src/lib/src/Modules/Firewall/Strings.php:226
2670
+ msgid "WordPress Terms"
2671
+ msgstr ""
2672
+
2673
+ #: src/lib/src/Modules/Firewall/Strings.php:105
2674
+ msgid "Block WordPress Specific Terms"
2675
+ msgstr ""
2676
+
2677
+ #: src/lib/src/Modules/Firewall/Strings.php:106
2678
+ msgid ""
2679
+ "This will block WordPress specific terms in application parameters (wp_, "
2680
+ "user_login, etc.)."
2681
+ msgstr ""
2682
+
2683
+ #: src/lib/src/Modules/Firewall/Strings.php:111
2684
+ msgid "Block Field Truncation Attacks"
2685
+ msgstr ""
2686
+
2687
+ #: src/lib/src/Modules/Firewall/Strings.php:112
2688
+ msgid "This will block field truncation attacks in application parameters."
2689
+ msgstr ""
2690
+
2691
+ #: src/lib/src/Modules/Firewall/Strings.php:117
2692
+ #, php-format
2693
+ msgid "Block %s"
2694
+ msgstr ""
2695
+
2696
+ #: src/lib/src/Modules/Firewall/Strings.php:117
2697
+ msgid "PHP Code Includes"
2698
+ msgstr ""
2699
+
2700
+ #: src/lib/src/Modules/Firewall/Strings.php:118
2701
+ msgid "This will block any data that appears to try and include PHP files."
2702
+ msgstr ""
2703
+
2704
+ #: src/lib/src/Modules/Firewall/Strings.php:119
2705
+ msgid "Will probably block saving within the Plugin/Theme file editors."
2706
+ msgstr ""
2707
+
2708
+ #: src/lib/src/Modules/Firewall/Strings.php:123
2709
+ msgid "Exe File Uploads"
2710
+ msgstr ""
2711
+
2712
+ #: src/lib/src/Modules/Firewall/Strings.php:124
2713
+ msgid "Block Executable File Uploads"
2714
+ msgstr ""
2715
+
2716
+ #: src/lib/src/Modules/Firewall/Strings.php:125
2717
+ msgid "This will block executable file uploads (.php, .exe, etc.)."
2718
+ msgstr ""
2719
+
2720
+ #: src/lib/src/Modules/Firewall/Strings.php:129
2721
+ msgid "Leading Schemas"
2722
+ msgstr ""
2723
+
2724
+ #: src/lib/src/Modules/Firewall/Strings.php:130
2725
+ msgid "Block Leading Schemas (HTTPS / HTTP)"
2726
+ msgstr ""
2727
+
2728
+ #: src/lib/src/Modules/Firewall/Strings.php:131
2729
+ msgid ""
2730
+ "This will block leading schemas http:// and https:// in application "
2731
+ "parameters (off by default; may cause problems with other plugins)."
2732
+ msgstr ""
2733
+
2734
+ #: src/lib/src/Modules/Firewall/Strings.php:135
2735
+ msgid "Aggressive Scan"
2736
+ msgstr ""
2737
+
2738
+ #: src/lib/src/Modules/Firewall/Strings.php:136
2739
+ msgid "Aggressively Block Data"
2740
+ msgstr ""
2741
+
2742
+ #: src/lib/src/Modules/Firewall/Strings.php:137
2743
+ msgid ""
2744
+ "Employs a set of aggressive rules to detect and block malicious data "
2745
+ "submitted to your site."
2746
+ msgstr ""
2747
+
2748
+ #: src/lib/src/Modules/Firewall/Strings.php:138
2749
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionBase.php:43
2750
+ #: src/lib/src/Modules/HackGuard/Strings.php:280
2751
+ #: src/lib/src/Modules/HackGuard/Strings.php:304
2752
+ #: src/lib/src/Modules/HackGuard/Strings.php:305
2753
+ #: src/lib/src/Modules/HackGuard/Strings.php:356
2754
+ #: src/lib/src/Modules/IPs/ModCon.php:138
2755
+ #: src/lib/src/Modules/IPs/ModCon.php:145
2756
+ #: src/lib/src/Modules/IPs/Strings.php:206
2757
+ #: src/lib/src/Modules/Insights/Lib/OverviewCards.php:23
2758
+ #: src/lib/src/Modules/License/AdminNotices.php:28
2759
+ #: src/lib/src/Modules/Lockdown/Strings.php:180
2760
+ #: src/lib/src/Modules/LoginGuard/Lib/Rename/RenameLogin.php:102
2761
+ #: src/lib/src/Modules/LoginGuard/Lib/Rename/RenameLogin.php:120
2762
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:92
2763
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:116
2764
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:136
2765
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:155
2766
+ #: src/lib/src/Modules/Plugin/Strings.php:358
2767
+ #: src/lib/src/Modules/Traffic/Strings.php:57
2768
+ msgid "Warning"
2769
+ msgstr ""
2770
+
2771
+ #: src/lib/src/Modules/Firewall/Strings.php:138
2772
+ msgid "May cause an increase in false-positive firewall blocks."
2773
+ msgstr ""
2774
+
2775
+ #: src/lib/src/Modules/Firewall/Strings.php:142
2776
+ msgid "Block Response"
2777
+ msgstr ""
2778
+
2779
+ #: src/lib/src/Modules/Firewall/Strings.php:143
2780
+ msgid "Choose how the firewall responds when it blocks a request"
2781
+ msgstr ""
2782
+
2783
+ #: src/lib/src/Modules/Firewall/Strings.php:144
2784
+ msgid ""
2785
+ "We recommend dying with a message so you know what might have occurred when "
2786
+ "the firewall blocks you"
2787
+ msgstr ""
2788
+
2789
+ #: src/lib/src/Modules/Firewall/Strings.php:148
2790
+ msgid "Send Email Report"
2791
+ msgstr ""
2792
+
2793
+ #: src/lib/src/Modules/Firewall/Strings.php:149
2794
+ msgid ""
2795
+ "When a visitor is blocked the firewall will send an email to the configured "
2796
+ "email address"
2797
+ msgstr ""
2798
+
2799
+ #: src/lib/src/Modules/Firewall/Strings.php:150
2800
+ msgid ""
2801
+ "Use with caution - if you get hit by automated bots you may send out too "
2802
+ "many emails and you could get blocked by your host"
2803
+ msgstr ""
2804
+
2805
+ #: src/lib/src/Modules/Firewall/Strings.php:154
2806
+ msgid "Whitelist Parameters"
2807
+ msgstr ""
2808
+
2809
+ #: src/lib/src/Modules/Firewall/Strings.php:155
2810
+ msgid ""
2811
+ "Detail pages and parameters that are whitelisted (ignored by the firewall)"
2812
+ msgstr ""
2813
+
2814
+ #: src/lib/src/Modules/Firewall/Strings.php:156
2815
+ msgid ""
2816
+ "This should be used with caution and you should only provide parameter names "
2817
+ "that you must have excluded"
2818
+ msgstr ""
2819
+
2820
+ #: src/lib/src/Modules/Firewall/Strings.php:160
2821
+ #: src/lib/src/Modules/Firewall/Strings.php:161
2822
+ #, php-format
2823
+ msgid "Ignore %s"
2824
+ msgstr ""
2825
+
2826
+ #: src/lib/src/Modules/Firewall/Strings.php:160
2827
+ #: src/lib/src/Modules/Firewall/Strings.php:161
2828
+ msgid "Administrators"
2829
+ msgstr ""
2830
+
2831
+ #: src/lib/src/Modules/Firewall/Strings.php:162
2832
+ msgid ""
2833
+ "Authenticated administrator users will not be processed by the firewall "
2834
+ "rules."
2835
+ msgstr ""
2836
+
2837
+ #: src/lib/src/Modules/Firewall/Strings.php:166
2838
+ msgid "Firewall Block Message"
2839
+ msgstr ""
2840
+
2841
+ #: src/lib/src/Modules/Firewall/Strings.php:167
2842
+ msgid "Message Displayed To Visitor When A Firewall Block Is Triggered"
2843
+ msgstr ""
2844
+
2845
+ #: src/lib/src/Modules/Firewall/Strings.php:168
2846
+ msgid "This is the message displayed to visitors that trigger the firewall."
2847
+ msgstr ""
2848
+
2849
+ #: src/lib/src/Modules/Firewall/Strings.php:188
2850
+ msgid "Firewall Block"
2851
+ msgstr ""
2852
+
2853
+ #: src/lib/src/Modules/Firewall/Strings.php:190
2854
+ msgid "Request blocked by firewall rule: {{name}}."
2855
+ msgstr ""
2856
+
2857
+ #: src/lib/src/Modules/Firewall/Strings.php:191
2858
+ msgid "Rule pattern detected: \"{{term}}\"."
2859
+ msgstr ""
2860
+
2861
+ #: src/lib/src/Modules/Firewall/Strings.php:192
2862
+ msgid ""
2863
+ "The offending request parameter was \"{{param}}\" with a value of "
2864
+ "\"{{value}}\"."
2865
+ msgstr ""
2866
+
2867
+ #: src/lib/src/Modules/Firewall/Strings.php:196
2868
+ msgid "Firewall Skip Checking"
2869
+ msgstr ""
2870
+
2871
+ #: src/lib/src/Modules/Firewall/Strings.php:198
2872
+ msgid "Skipping firewall checking for this visit: {{path}}."
2873
+ msgstr ""
2874
+
2875
+ #: src/lib/src/Modules/Firewall/Strings.php:202
2876
+ msgid "Firewall Block Email Success"
2877
+ msgstr ""
2878
+
2879
+ #: src/lib/src/Modules/Firewall/Strings.php:204
2880
+ msgid "Successfully sent Firewall Block email alert to: {{to}}"
2881
+ msgstr ""
2882
+
2883
+ #: src/lib/src/Modules/Firewall/Strings.php:208
2884
+ msgid "Firewall Block Email Fail"
2885
+ msgstr ""
2886
+
2887
+ #: src/lib/src/Modules/Firewall/Strings.php:210
2888
+ msgid "Failed to send Firewall Block email alert to: {{to}}"
2889
+ msgstr ""
2890
+
2891
+ #: src/lib/src/Modules/Firewall/Strings.php:221
2892
+ #, php-format
2893
+ msgid "Firewall Block Triggered: %s."
2894
+ msgstr ""
2895
+
2896
+ #: src/lib/src/Modules/Firewall/Strings.php:223
2897
+ #: src/lib/src/Modules/Firewall/Strings.php:226
2898
+ #: src/lib/src/Modules/Firewall/Strings.php:229
2899
+ #: src/lib/src/Modules/Firewall/Strings.php:232
2900
+ #: src/lib/src/Modules/Firewall/Strings.php:235
2901
+ #: src/lib/src/Modules/Firewall/Strings.php:238
2902
+ #: src/lib/src/Modules/Firewall/Strings.php:241
2903
+ #: src/lib/src/Modules/Firewall/Strings.php:244
2904
+ #, php-format
2905
+ msgid "Firewall Trigger: %s."
2906
+ msgstr ""
2907
+
2908
+ #: src/lib/src/Modules/Firewall/Strings.php:238
2909
+ msgid "Aggressive Rules"
2910
+ msgstr ""
2911
+
2912
+ #: src/lib/src/Modules/Firewall/Strings.php:244
2913
+ msgid "EXE File Uploads"
2914
+ msgstr ""
2915
+
2916
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:70
2917
+ msgid "There have been no changes to the selected file."
2918
+ msgstr ""
2919
+
2920
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:71
2921
+ msgid ""
2922
+ "Please review the changes below and accept them, or restore the original "
2923
+ "file contents."
2924
+ msgstr ""
2925
+
2926
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:72
2927
+ msgid "Restore File"
2928
+ msgstr ""
2929
+
2930
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:73
2931
+ msgid "Accept Changes"
2932
+ msgstr ""
2933
+
2934
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:74
2935
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionBase.php:39
2936
+ #: src/lib/src/Modules/License/Strings.php:54
2937
+ msgid "Name"
2938
+ msgstr ""
2939
+
2940
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:75
2941
+ msgid "File Size"
2942
+ msgstr ""
2943
+
2944
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:76
2945
+ msgid "Locked File"
2946
+ msgstr ""
2947
+
2948
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:77
2949
+ msgid "Modified File"
2950
+ msgstr ""
2951
+
2952
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:78
2953
+ msgid "Locked"
2954
+ msgstr ""
2955
+
2956
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:79
2957
+ msgid "File Modified Timestamp"
2958
+ msgstr ""
2959
+
2960
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:80
2961
+ msgid "File Modified"
2962
+ msgstr ""
2963
+
2964
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:81
2965
+ msgid "Relative Path"
2966
+ msgstr ""
2967
+
2968
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:82
2969
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:90
2970
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:123
2971
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/LoadRawTableData.php:152
2972
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/LoadRawTableData.php:199
2973
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/LoadRawTableData.php:297
2974
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildHistory.php:85
2975
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildInfo.php:123
2976
+ msgid "Modified"
2977
+ msgstr ""
2978
+
2979
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:83
2980
+ msgid "Download"
2981
+ msgstr ""
2982
+
2983
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:84
2984
+ msgid "Change Detected"
2985
+ msgstr ""
2986
+
2987
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:85
2988
+ msgid "Original File Content"
2989
+ msgstr ""
2990
+
2991
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:86
2992
+ msgid "Current File Content"
2993
+ msgstr ""
2994
+
2995
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:87
2996
+ msgid "Download Original"
2997
+ msgstr ""
2998
+
2999
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:88
3000
+ msgid "Download Modified"
3001
+ msgstr ""
3002
+
3003
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:89
3004
+ msgid "File Download"
3005
+ msgstr ""
3006
+
3007
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:90
3008
+ msgid "File Info"
3009
+ msgstr ""
3010
+
3011
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:91
3012
+ msgid "Accept File Changes"
3013
+ msgstr ""
3014
+
3015
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:92
3016
+ msgid "Are you sure you want to keep the file changes?"
3017
+ msgstr ""
3018
+
3019
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:93
3020
+ msgid "Restore Original File"
3021
+ msgstr ""
3022
+
3023
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:94
3024
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:95
3025
+ msgid "Are you sure you want to restore the original file contents?"
3026
+ msgstr ""
3027
+
3028
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:167
3029
+ msgid "Requested action completed successfully."
3030
+ msgstr ""
3031
+
3032
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:170
3033
+ msgid "Requested action failed."
3034
+ msgstr ""
3035
+
3036
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:174
3037
+ msgid "Please check the box to confirm this action"
3038
+ msgstr ""
3039
+
3040
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:218
3041
+ msgid "No scan running."
3042
+ msgstr ""
3043
+
3044
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:224
3045
+ msgid "No scans remaining."
3046
+ msgstr ""
3047
+
3048
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:227
3049
+ #, php-format
3050
+ msgid "%s scans remaining."
3051
+ msgstr ""
3052
+
3053
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:238
3054
+ msgid "Current Scan"
3055
+ msgstr ""
3056
+
3057
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:242
3058
+ msgid "Please be patient."
3059
+ msgstr ""
3060
+
3061
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:243
3062
+ msgid "Some scans can take quite a while to complete."
3063
+ msgstr ""
3064
+
3065
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:244
3066
+ msgid "Scans completed."
3067
+ msgstr ""
3068
+
3069
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:244
3070
+ #: src/lib/src/Modules/License/AjaxHandler.php:73
3071
+ msgid "Reloading page"
3072
+ msgstr ""
3073
+
3074
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:259
3075
+ msgid "No scans were selected"
3076
+ msgstr ""
3077
+
3078
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:271
3079
+ msgid "Scans started."
3080
+ msgstr ""
3081
+
3082
+ #: src/lib/src/Modules/HackGuard/AjaxHandler.php:271
3083
+ msgid "Please wait, as this will take a few moments."
3084
+ msgstr ""
3085
+
3086
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:26
3087
+ msgid "Scan Frequency"
3088
+ msgstr ""
3089
+
3090
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:29
3091
+ msgid "Automatic scanners run more than once per day"
3092
+ msgstr ""
3093
+
3094
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:30
3095
+ msgid "Automatic scanners only run once per day"
3096
+ msgstr ""
3097
+
3098
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:48
3099
+ #: src/lib/src/Modules/HackGuard/Strings.php:118
3100
+ #: src/lib/src/Modules/Plugin/Strings.php:541
3101
+ msgid "Hack Guard"
3102
+ msgstr ""
3103
+
3104
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:52
3105
+ msgid "Threats/Intrusions Detection & Repair"
3106
+ msgstr ""
3107
+
3108
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:67
3109
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:111
3110
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:144
3111
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:174
3112
+ msgid "Scanner"
3113
+ msgstr ""
3114
+
3115
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:70
3116
+ msgid "WP Core files are scanned automatically"
3117
+ msgstr ""
3118
+
3119
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:71
3120
+ msgid "WP Core files aren't automatically scanned!"
3121
+ msgstr ""
3122
+
3123
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:73
3124
+ msgid "Automatic WordPress Core File scanner should be turned-on."
3125
+ msgstr ""
3126
+
3127
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:78
3128
+ msgid "WP Core File Repair"
3129
+ msgstr ""
3130
+
3131
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:81
3132
+ msgid "Core files are automatically repaired"
3133
+ msgstr ""
3134
+
3135
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:82
3136
+ msgid "Core files aren't automatically repaired!"
3137
+ msgstr ""
3138
+
3139
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:90
3140
+ #: src/lib/src/Modules/HackGuard/Scan/Controller/Afs.php:54
3141
+ #: src/lib/src/Modules/HackGuard/Strings.php:86
3142
+ msgid "WordPress Core Files"
3143
+ msgstr ""
3144
+
3145
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:91
3146
+ msgid "WordPress core files have been modified."
3147
+ msgstr ""
3148
+
3149
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:94
3150
+ msgid "Scan WP core files and repair any files that are flagged as modified."
3151
+ msgstr ""
3152
+
3153
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:111
3154
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:123
3155
+ msgid "Plugins & Themes"
3156
+ msgstr ""
3157
+
3158
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:113
3159
+ msgid "Plugins and Themes are guarded against tampering"
3160
+ msgstr ""
3161
+
3162
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:114
3163
+ msgid "Plugins and Themes are never scanned for tampering!"
3164
+ msgstr ""
3165
+
3166
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:117
3167
+ msgid "Automatic detection of plugin/theme modifications is recommended."
3168
+ msgstr ""
3169
+
3170
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:124
3171
+ msgid "A plugin/theme was found to have been modified."
3172
+ msgstr ""
3173
+
3174
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:127
3175
+ msgid "Reviewing modifications to your plugins/themes is recommended."
3176
+ msgstr ""
3177
+
3178
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:146
3179
+ #, php-format
3180
+ msgid "%s Scanner runs automatically."
3181
+ msgstr ""
3182
+
3183
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:147
3184
+ #, php-format
3185
+ msgid "%s Scanner isn't set to run automatically."
3186
+ msgstr ""
3187
+
3188
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:150
3189
+ msgid "Automatic detection of Malware is recommended."
3190
+ msgstr ""
3191
+
3192
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:154
3193
+ msgid "Potential Malware Detected"
3194
+ msgstr ""
3195
+
3196
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:155
3197
+ msgid "Potential Malware files have been discovered."
3198
+ msgstr ""
3199
+
3200
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:158
3201
+ msgid ""
3202
+ "Files identified as potential malware should be examined as soon as possible."
3203
+ msgstr ""
3204
+
3205
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:177
3206
+ #, php-format
3207
+ msgid "%s Scanner is enabled."
3208
+ msgstr ""
3209
+
3210
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:178
3211
+ #, php-format
3212
+ msgid "%s Scanner is not enabled."
3213
+ msgstr ""
3214
+
3215
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:183
3216
+ msgid "Plugin Abandoned"
3217
+ msgstr ""
3218
+
3219
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:184
3220
+ msgid "At least 1 plugin on your site is abandoned."
3221
+ msgstr ""
3222
+
3223
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:187
3224
+ msgid ""
3225
+ "Plugins that have been abandoned represent a potential risk to your site."
3226
+ msgstr ""
3227
+
3228
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:203
3229
+ msgid "Vulnerability Scan"
3230
+ msgstr ""
3231
+
3232
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:206
3233
+ msgid "Regularly scanning for known vulnerabilities"
3234
+ msgstr ""
3235
+
3236
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:207
3237
+ msgid "Plugins/Themes never scanned for vulnerabilities!"
3238
+ msgstr ""
3239
+
3240
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:209
3241
+ msgid "Automatic detection of vulnerabilities is recommended."
3242
+ msgstr ""
3243
+
3244
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:215
3245
+ msgid "Auto Update"
3246
+ msgstr ""
3247
+
3248
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:217
3249
+ msgid "Vulnerable items are automatically updated"
3250
+ msgstr ""
3251
+
3252
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:218
3253
+ msgid "Vulnerable items aren't automatically updated!"
3254
+ msgstr ""
3255
+
3256
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:225
3257
+ msgid "Vulnerable Plugin"
3258
+ msgstr ""
3259
+
3260
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:226
3261
+ msgid "Plugin with vulnerabilities found on site."
3262
+ msgstr ""
3263
+
3264
+ #: src/lib/src/Modules/HackGuard/Insights/OverviewCards.php:229
3265
+ msgid ""
3266
+ "Items with known vulnerabilities should be updated, removed, or replaced."
3267
+ msgstr ""
3268
+
3269
+ #: src/lib/src/Modules/HackGuard/Lib/FileLocker/FileLockerController.php:56
3270
+ #: src/lib/src/Modules/HackGuard/Strings.php:251
3271
+ #: src/lib/src/Modules/HackGuard/UI.php:222
3272
+ msgid "File Locker"
3273
+ msgstr ""
3274
+
3275
+ #: src/lib/src/Modules/HackGuard/Lib/FileLocker/Ops/Diff.php:19
3276
+ msgid "File is missing or could not be read."
3277
+ msgstr ""
3278
+
3279
+ #: src/lib/src/Modules/HackGuard/Lib/FileLocker/Ops/Diff.php:24
3280
+ msgid "File is empty or could not be read."
3281
+ msgstr ""
3282
+
3283
+ #: src/lib/src/Modules/HackGuard/Lib/FileLocker/Ops/PerformAction.php:32
3284
+ msgid "Not a supported file lock action."
3285
+ msgstr ""
3286
+
3287
+ #: src/lib/src/Modules/HackGuard/Lib/Reports/FileLockerAlerts.php:29
3288
+ msgid "File Locker Changes Detected"
3289
+ msgstr ""
3290
+
3291
+ #: src/lib/src/Modules/HackGuard/Lib/Reports/FileLockerAlerts.php:30
3292
+ msgid "Changes have been detected in the contents of critical files."
3293
+ msgstr ""
3294
+
3295
+ #: src/lib/src/Modules/HackGuard/Lib/Reports/FileLockerAlerts.php:31
3296
+ msgid "Total Changed Files"
3297
+ msgstr ""
3298
+
3299
+ #: src/lib/src/Modules/HackGuard/Lib/Reports/FileLockerAlerts.php:32
3300
+ msgid "Click Here To View File Locker Results"
3301
+ msgstr ""
3302
+
3303
+ #: src/lib/src/Modules/HackGuard/Lib/Reports/ScanAlerts.php:38
3304
+ msgid "New Scan Results"
3305
+ msgstr ""
3306
+
3307
+ #: src/lib/src/Modules/HackGuard/Lib/Reports/ScanAlerts.php:39
3308
+ msgid "Click Here To View Scan Results Details"
3309
+ msgstr ""
3310
+
3311
+ #: src/lib/src/Modules/HackGuard/Lib/Reports/ScanAlerts.php:41
3312
+ msgid ""
3313
+ "Depending on previous actions taken on the site or file system changes, "
3314
+ "these results may no longer be available to view."
3315
+ msgstr ""
3316
+
3317
+ #: src/lib/src/Modules/HackGuard/Lib/Reports/ScanRepairs.php:82
3318
+ msgid "Scanner Repairs"
3319
+ msgstr ""
3320
+
3321
+ #: src/lib/src/Modules/HackGuard/Lib/Reports/ScanRepairs.php:83
3322
+ msgid "View all repairs and file deletions in the Audit Trail"
3323
+ msgstr ""
3324
+
3325
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/DelegateAjaxHandler.php:78
3326
+ msgid "Action successful."
3327
+ msgstr ""
3328
+
3329
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/DelegateAjaxHandler.php:81
3330
+ msgid "An error occurred."
3331
+ msgstr ""
3332
+
3333
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/DelegateAjaxHandler.php:82
3334
+ msgid "Some items may not have been processed."
3335
+ msgstr ""
3336
+
3337
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/LoadRawTableData.php:82
3338
+ #: src/lib/src/Modules/HackGuard/Strings.php:78
3339
+ msgid "Malware"
3340
+ msgstr ""
3341
+
3342
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/LoadRawTableData.php:156
3343
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/LoadRawTableData.php:203
3344
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildHistory.php:82
3345
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildInfo.php:120
3346
+ msgid "Missing"
3347
+ msgstr ""
3348
+
3349
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/LoadRawTableData.php:160
3350
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/LoadRawTableData.php:207
3351
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildHistory.php:76
3352
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildInfo.php:117
3353
+ msgid "Unrecognised"
3354
+ msgstr ""
3355
+
3356
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/LoadRawTableData.php:245
3357
+ msgid "View File Details"
3358
+ msgstr ""
3359
+
3360
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/LoadRawTableData.php:254
3361
+ #: src/lib/src/Modules/Plugin/Strings.php:436
3362
+ #: src/lib/src/Tables/Render/WpListTable/AdminNotes.php:16
3363
+ #: src/lib/src/Tables/Render/WpListTable/Base.php:227
3364
+ msgid "Delete"
3365
+ msgstr ""
3366
+
3367
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/LoadRawTableData.php:265
3368
+ #: src/lib/src/Tables/Render/WpListTable/Base.php:239
3369
+ msgid "Repair"
3370
+ msgstr ""
3371
+
3372
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/LoadRawTableData.php:276
3373
+ #: src/lib/src/Tables/Render/WpListTable/Base.php:251
3374
+ msgid "Ignore"
3375
+ msgstr ""
3376
+
3377
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/LoadRawTableData.php:301
3378
+ msgid "Size"
3379
+ msgstr ""
3380
+
3381
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/LoadRawTableData.php:313
3382
+ msgid "View File Contents"
3383
+ msgstr ""
3384
+
3385
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildHistory.php:43
3386
+ #, php-format
3387
+ msgid "File detected as %s by %s scanner."
3388
+ msgstr ""
3389
+
3390
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildHistory.php:79
3391
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildInfo.php:113
3392
+ #: src/lib/src/Modules/HackGuard/Scan/Controller/Afs.php:45
3393
+ msgid "Potential Malware"
3394
+ msgstr ""
3395
+
3396
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildHistory.php:105
3397
+ msgid "File Detected By Scans"
3398
+ msgstr ""
3399
+
3400
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildHistory.php:106
3401
+ msgid "File Repair Attempted"
3402
+ msgstr ""
3403
+
3404
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildHistory.php:107
3405
+ msgid "File Repaired"
3406
+ msgstr ""
3407
+
3408
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildHistory.php:108
3409
+ msgid "File Deleted"
3410
+ msgstr ""
3411
+
3412
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildHistory.php:109
3413
+ msgid "Item Marked As Ignored"
3414
+ msgstr ""
3415
+
3416
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildHistory.php:110
3417
+ msgid "Notification Of Scan Detection Sent"
3418
+ msgstr ""
3419
+
3420
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildInfo.php:45
3421
+ msgid "File Status"
3422
+ msgstr ""
3423
+
3424
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildInfo.php:49
3425
+ msgid "Full Path To File"
3426
+ msgstr ""
3427
+
3428
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildInfo.php:53
3429
+ msgid "View Original File Contents"
3430
+ msgstr ""
3431
+
3432
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildInfo.php:67
3433
+ #, php-format
3434
+ msgid ""
3435
+ "This file is located in a core WordPress directory isn't a recognised core "
3436
+ "file for WordPress %s."
3437
+ msgstr ""
3438
+
3439
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildInfo.php:73
3440
+ #, php-format
3441
+ msgid "This is a recognised core file for WordPress %s."
3442
+ msgstr ""
3443
+
3444
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildInfo.php:80
3445
+ msgid ""
3446
+ "It's located in a WordPress plugin directory, but it's not recognised as an "
3447
+ "official file."
3448
+ msgstr ""
3449
+
3450
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildInfo.php:83
3451
+ msgid ""
3452
+ "It's located in a WordPress plugin directory, and is a recognised official "
3453
+ "file."
3454
+ msgstr ""
3455
+
3456
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildInfo.php:88
3457
+ msgid ""
3458
+ "It's located in a WordPress theme directory, but it's not recognised as an "
3459
+ "official file."
3460
+ msgstr ""
3461
+
3462
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildInfo.php:91
3463
+ msgid ""
3464
+ "It's located in a WordPress theme directory, and is a recognised official "
3465
+ "file."
3466
+ msgstr ""
3467
+
3468
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildInfo.php:95
3469
+ msgid "Contents have been modified from what is expected."
3470
+ msgstr ""
3471
+
3472
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildInfo.php:98
3473
+ msgid "Contents could potentially contain malicious PHP malware."
3474
+ msgstr ""
3475
+
3476
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildInfo.php:99
3477
+ #, php-format
3478
+ msgid "The false positive score of this file is %s."
3479
+ msgstr ""
3480
+
3481
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/BuildInfo.php:101
3482
+ msgid ""
3483
+ "The lower the score the less we know about the file and the more likely it "
3484
+ "contains malicious code."
3485
+ msgstr ""
3486
+
3487
+ #: src/lib/src/Modules/HackGuard/Lib/ScanTables/Modals/ScanItemView.php:110
3488
+ msgid "Download File"
3489
+ msgstr ""
3490
+
3491
+ #: src/lib/src/Modules/HackGuard/ModCon.php:179
3492
+ #, php-format
3493
+ msgid "%s per day"
3494
+ msgstr ""
3495
+
3496
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionBase.php:37
3497
+ msgid "Author"
3498
+ msgstr ""
3499
+
3500
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionBase.php:38
3501
+ #: src/lib/src/Modules/Insights/UI.php:312
3502
+ #: src/lib/src/Modules/Insights/UI.php:350
3503
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/SitesList.php:105
3504
+ msgid "Version"
3505
+ msgstr ""
3506
+
3507
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionBase.php:40
3508
+ msgid "Installation Directory"
3509
+ msgstr ""
3510
+
3511
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionBase.php:41
3512
+ msgid "File Integrity"
3513
+ msgstr ""
3514
+
3515
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionBase.php:42
3516
+ #: src/lib/src/Modules/Insights/Lib/OverviewCards.php:31
3517
+ msgid "Good"
3518
+ msgstr ""
3519
+
3520
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionBase.php:44
3521
+ msgid "Abandoned"
3522
+ msgstr ""
3523
+
3524
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionBase.php:45
3525
+ #: src/lib/src/Modules/HackGuard/Scan/Utilities/WpvAddPluginRows.php:77
3526
+ msgid "Vulnerable"
3527
+ msgstr ""
3528
+
3529
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionBase.php:46
3530
+ msgid "Known vulnerabilities discovered."
3531
+ msgstr ""
3532
+
3533
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionBase.php:47
3534
+ msgid ""
3535
+ "You should upgrade to the latest version or remove it if no updates are "
3536
+ "available."
3537
+ msgstr ""
3538
+
3539
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionBase.php:48
3540
+ msgid "Update Available"
3541
+ msgstr ""
3542
+
3543
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionBase.php:49
3544
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/Data/ClientPluginStatus.php:98
3545
+ msgid "Installed"
3546
+ msgstr ""
3547
+
3548
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionBase.php:50
3549
+ msgid "estimated"
3550
+ msgstr ""
3551
+
3552
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionBase.php:51
3553
+ msgid "relative to WordPress install dir"
3554
+ msgstr ""
3555
+
3556
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionBase.php:52
3557
+ msgid "Linked To Child Theme"
3558
+ msgstr ""
3559
+
3560
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionBase.php:53
3561
+ msgid "Linked To Parent Theme"
3562
+ msgstr ""
3563
+
3564
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionMalware.php:25
3565
+ msgid "Previous scans didn't detect any files suspected of being malware."
3566
+ msgstr ""
3567
+
3568
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionMalware.php:26
3569
+ msgid "Previous scans detected 1 or more files suspected of being malware."
3570
+ msgstr ""
3571
+
3572
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionMalware.php:27
3573
+ msgid "The Malware File Scanner is only available with ShieldPRO."
3574
+ msgstr ""
3575
+
3576
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionPluginThemesBase.php:20
3577
+ #: src/lib/src/Modules/HackGuard/Strings.php:74
3578
+ msgid "Plugin/Theme Guard"
3579
+ msgstr ""
3580
+
3581
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionPluginThemesBase.php:21
3582
+ msgid "The Plugin & Theme File Guard Scanner is only available with ShieldPRO."
3583
+ msgstr ""
3584
+
3585
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionPlugins.php:58
3586
+ msgid ""
3587
+ "Previous scans didn't detect any modified or unrecognised files in any "
3588
+ "plugin directories."
3589
+ msgstr ""
3590
+
3591
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionPlugins.php:59
3592
+ msgid ""
3593
+ "Previous scans didn't detect any modified or unrecognised files in the "
3594
+ "plugin directory."
3595
+ msgstr ""
3596
+
3597
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionPlugins.php:60
3598
+ msgid ""
3599
+ "Previous scans detected 1 or more modified or unrecognised files in the "
3600
+ "plugin directory."
3601
+ msgstr ""
3602
+
3603
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionPlugins.php:61
3604
+ msgid "This plugin isn't active and should be uninstalled."
3605
+ msgstr ""
3606
+
3607
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionThemes.php:60
3608
+ msgid ""
3609
+ "Previous scans didn't detect any modified or unrecognised files in any Theme "
3610
+ "directories."
3611
+ msgstr ""
3612
+
3613
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionThemes.php:61
3614
+ msgid ""
3615
+ "Previous scans didn't detect any modified or unrecognised files in the Theme "
3616
+ "directories."
3617
+ msgstr ""
3618
+
3619
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionThemes.php:62
3620
+ msgid ""
3621
+ "Previous scans detected 1 or more modified or unrecognised files in the "
3622
+ "theme directory."
3623
+ msgstr ""
3624
+
3625
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionThemes.php:63
3626
+ msgid "This theme isn't active and should be uninstalled."
3627
+ msgstr ""
3628
+
3629
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionWordpress.php:25
3630
+ msgid ""
3631
+ "Previous scans didn't detect any modified, missing or unrecognised files in "
3632
+ "the WordPress core directories."
3633
+ msgstr ""
3634
+
3635
+ #: src/lib/src/Modules/HackGuard/Render/ScanResults/SectionWordpress.php:26
3636
+ msgid ""
3637
+ "Previous scans detected 1 or more modified, missing or unrecognised files in "
3638
+ "the WordPress core directories."
3639
+ msgstr ""
3640
+
3641
+ #: src/lib/src/Modules/HackGuard/Scan/Controller/Afs.php:63
3642
+ msgid "Plugin Files"
3643
+ msgstr ""
3644
+
3645
+ #: src/lib/src/Modules/HackGuard/Scan/Controller/Afs.php:72
3646
+ msgid "Theme Files"
3647
+ msgstr ""
3648
+
3649
+ #: src/lib/src/Modules/HackGuard/Scan/Controller/Apc.php:23
3650
+ #: src/lib/src/Modules/HackGuard/Strings.php:70
3651
+ #: src/lib/src/Modules/HackGuard/Strings.php:156
3652
+ msgid "Abandoned Plugins"
3653
+ msgstr ""
3654
+
3655
+ #: src/lib/src/Modules/HackGuard/Scan/Controller/Wpv.php:49
3656
+ msgid "Vulnerable Plugins"
3657
+ msgstr ""
3658
+
3659
+ #: src/lib/src/Modules/HackGuard/Scan/Init/SetScanCompleted.php:72
3660
+ msgid "Only the first 30 items are shown."
3661
+ msgstr ""
3662
+
3663
+ #: src/lib/src/Modules/HackGuard/Scan/Init/SetScanCompleted.php:73
3664
+ msgid "The following items were discovered."
3665
+ msgstr ""
3666
+
3667
+ #: src/lib/src/Modules/HackGuard/Scan/Utilities/PtgAddReinstallLinks.php:43
3668
+ msgid "Re-install First"
3669
+ msgstr ""
3670
+
3671
+ #: src/lib/src/Modules/HackGuard/Scan/Utilities/PtgAddReinstallLinks.php:44
3672
+ msgid "Then Activate"
3673
+ msgstr ""
3674
+
3675
+ #: src/lib/src/Modules/HackGuard/Scan/Utilities/PtgAddReinstallLinks.php:46
3676
+ msgid "Re-Install It"
3677
+ msgstr ""
3678
+
3679
+ #: src/lib/src/Modules/HackGuard/Scan/Utilities/PtgAddReinstallLinks.php:47
3680
+ msgid "Activate Only"
3681
+ msgstr ""
3682
+
3683
+ #: src/lib/src/Modules/HackGuard/Scan/Utilities/PtgAddReinstallLinks.php:48
3684
+ msgid "Cancel"
3685
+ msgstr ""
3686
+
3687
+ #: src/lib/src/Modules/HackGuard/Scan/Utilities/PtgAddReinstallLinks.php:64
3688
+ msgid "Re-Install"
3689
+ msgstr ""
3690
+
3691
+ #: src/lib/src/Modules/HackGuard/Scan/Utilities/PtgAddReinstallLinks.php:77
3692
+ #: src/lib/src/Modules/Insights/ModCon.php:71
3693
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaProfilesController.php:131
3694
+ #: src/lib/src/Modules/SecurityAdmin/Lib/SecurityAdmin/SecurityAdminController.php:88
3695
+ msgid "Are you sure?"
3696
+ msgstr ""
3697
+
3698
+ #: src/lib/src/Modules/HackGuard/Scan/Utilities/PtgAddReinstallLinks.php:78
3699
+ msgid "Really Re-Install Plugin"
3700
+ msgstr ""
3701
+
3702
+ #: src/lib/src/Modules/HackGuard/Scan/Utilities/PtgAddReinstallLinks.php:79
3703
+ msgid ""
3704
+ "WordPress will now download and install the latest available version of this "
3705
+ "plugin."
3706
+ msgstr ""
3707
+
3708
+ #: src/lib/src/Modules/HackGuard/Scan/Utilities/PtgAddReinstallLinks.php:82
3709
+ msgid ""
3710
+ "In case of possible failure, it may be better to do this while the plugin is "
3711
+ "inactive."
3712
+ msgstr ""
3713
+
3714
+ #: src/lib/src/Modules/HackGuard/Scan/Utilities/PtgAddReinstallLinks.php:84
3715
+ msgid "Re-install first?"
3716
+ msgstr ""
3717
+
3718
+ #: src/lib/src/Modules/HackGuard/Scan/Utilities/PtgAddReinstallLinks.php:85
3719
+ msgid "This ensures files for this plugin haven't been corrupted in any way."
3720
+ msgstr ""
3721
+
3722
+ #: src/lib/src/Modules/HackGuard/Scan/Utilities/PtgAddReinstallLinks.php:86
3723
+ msgid ""
3724
+ "You can choose to 'Activate Only' (not recommended), or close this message "
3725
+ "to cancel activation."
3726
+ msgstr ""
3727
+
3728
+ #: src/lib/src/Modules/HackGuard/Scan/Utilities/PtgAddReinstallLinks.php:87
3729
+ #: src/lib/src/Modules/SecurityAdmin/Lib/SecurityAdmin/SecurityAdminController.php:89
3730
+ msgid "Editing this option is currently restricted."
3731
+ msgstr ""
3732
+
3733
+ #: src/lib/src/Modules/HackGuard/Scan/Utilities/PtgAddReinstallLinks.php:89
3734
+ #, php-format
3735
+ msgid ""
3736
+ "For best security practices, %s will download and re-install the latest "
3737
+ "available version of this plugin."
3738
+ msgstr ""
3739
+
3740
+ #: src/lib/src/Modules/HackGuard/Scan/Utilities/WpvAddPluginRows.php:120
3741
+ #, php-format
3742
+ msgid ""
3743
+ "%s has discovered that the currently installed version of the %s plugin has "
3744
+ "known security vulnerabilities."
3745
+ msgstr ""
3746
+
3747
+ #: src/lib/src/Modules/HackGuard/Scan/Utilities/WpvAddPluginRows.php:122
3748
+ #: src/lib/src/Modules/HackGuard/Strings.php:393
3749
+ #: src/lib/src/Modules/IPs/ModCon.php:148
3750
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Render/RenderLoginIntentPage.php:81
3751
+ msgid "More Info"
3752
+ msgstr ""
3753
+
3754
+ #: src/lib/src/Modules/HackGuard/Strings.php:17
3755
+ #: src/lib/src/Modules/HackGuard/Strings.php:19
3756
+ msgid "Scan Completed"
3757
+ msgstr ""
3758
+
3759
+ #: src/lib/src/Modules/HackGuard/Strings.php:23
3760
+ msgid "Scan Item Delete Success"
3761
+ msgstr ""
3762
+
3763
+ #: src/lib/src/Modules/HackGuard/Strings.php:25
3764
+ msgid "Item found in the scan was deleted."
3765
+ msgstr ""
3766
+
3767
+ #: src/lib/src/Modules/HackGuard/Strings.php:26
3768
+ msgid "Item deleted: \"{{path_full}}\""
3769
+ msgstr ""
3770
+
3771
+ #: src/lib/src/Modules/HackGuard/Strings.php:30
3772
+ msgid "Scan Item Repair Success"
3773
+ msgstr ""
3774
+
3775
+ #: src/lib/src/Modules/HackGuard/Strings.php:32
3776
+ msgid "Repaired item found in the scan."
3777
+ msgstr ""
3778
+
3779
+ #: src/lib/src/Modules/HackGuard/Strings.php:33
3780
+ msgid "Item repaired: \"{{path_full}}\""
3781
+ msgstr ""
3782
+
3783
+ #: src/lib/src/Modules/HackGuard/Strings.php:37
3784
+ msgid "Scan Item Repair Failure"
3785
+ msgstr ""
3786
+
3787
+ #: src/lib/src/Modules/HackGuard/Strings.php:39
3788
+ msgid "Failed to repair scan item."
3789
+ msgstr ""
3790
+
3791
+ #: src/lib/src/Modules/HackGuard/Strings.php:40
3792
+ msgid "Failed item: \"{{path_full}}\""
3793
+ msgstr ""
3794
+
3795
+ #: src/lib/src/Modules/HackGuard/Strings.php:44
3796
+ msgid "Items Found In Scan"
3797
+ msgstr ""
3798
+
3799
+ #: src/lib/src/Modules/HackGuard/Strings.php:46
3800
+ msgid "{{scan}}: scan completed and items were discovered."
3801
+ msgstr ""
3802
+
3803
+ #: src/lib/src/Modules/HackGuard/Strings.php:49
3804
+ msgid ""
3805
+ "These items wont display in results if you've previously marked them as "
3806
+ "ignored."
3807
+ msgstr ""
3808
+
3809
+ #: src/lib/src/Modules/HackGuard/Strings.php:66
3810
+ msgid "WordPress Filesystem Scan"
3811
+ msgstr ""
3812
+
3813
+ #: src/lib/src/Modules/HackGuard/Strings.php:67
3814
+ msgid ""
3815
+ "WordPress Filesystem Scan looking for modified, missing and unrecognised "
3816
+ "files throughout the entire site"
3817
+ msgstr ""
3818
+
3819
+ #: src/lib/src/Modules/HackGuard/Strings.php:71
3820
+ msgid "Discover plugins that may have been abandoned by their authors"
3821
+ msgstr ""
3822
+
3823
+ #: src/lib/src/Modules/HackGuard/Strings.php:75
3824
+ msgid "Be alerted to file changes for all your plugins and themes"
3825
+ msgstr ""
3826
+
3827
+ #: src/lib/src/Modules/HackGuard/Strings.php:79
3828
+ #: src/lib/src/Modules/HackGuard/Strings.php:375
3829
+ msgid "Detect files that may be infected with malware"
3830
+ msgstr ""
3831
+
3832
+ #: src/lib/src/Modules/HackGuard/Strings.php:82
3833
+ msgid "Unrecognised Files"
3834
+ msgstr ""
3835
+
3836
+ #: src/lib/src/Modules/HackGuard/Strings.php:83
3837
+ #: src/lib/src/Modules/HackGuard/Strings.php:374
3838
+ msgid ""
3839
+ "Detect files which aren't part of the official WordPress.org distribution"
3840
+ msgstr ""
3841
+
3842
+ #: src/lib/src/Modules/HackGuard/Strings.php:87
3843
+ #: src/lib/src/Modules/HackGuard/Strings.php:373
3844
+ msgid ""
3845
+ "Detect changes to core WordPress files when compared to the official "
3846
+ "distribution"
3847
+ msgstr ""
3848
+
3849
+ #: src/lib/src/Modules/HackGuard/Strings.php:90
3850
+ #: src/lib/src/Modules/HackGuard/Strings.php:123
3851
+ msgid "Vulnerabilities"
3852
+ msgstr ""
3853
+
3854
+ #: src/lib/src/Modules/HackGuard/Strings.php:91
3855
+ msgid "Be alerted to plugins and themes with known security vulnerabilities"
3856
+ msgstr ""
3857
+
3858
+ #: src/lib/src/Modules/HackGuard/Strings.php:106
3859
+ #: src/lib/src/Modules/HackGuard/Strings.php:107
3860
+ #: src/lib/src/Modules/HackGuard/UI.php:49
3861
+ #: src/lib/src/Modules/HackGuard/UI.php:127
3862
+ msgid "Scan Options"
3863
+ msgstr ""
3864
+
3865
+ #: src/lib/src/Modules/HackGuard/Strings.php:109
3866
+ msgid "Set how frequently the Hack Guard scans will run."
3867
+ msgstr ""
3868
+
3869
+ #: src/lib/src/Modules/HackGuard/Strings.php:117
3870
+ msgid ""
3871
+ "Hack Guard is a set of tools to warn you and protect you against hacks on "
3872
+ "your site."
3873
+ msgstr ""
3874
+
3875
+ #: src/lib/src/Modules/HackGuard/Strings.php:124
3876
+ #: src/lib/src/Modules/HackGuard/Strings.php:127
3877
+ #: src/lib/src/Modules/HackGuard/Strings.php:198
3878
+ msgid "Vulnerabilities Scanner"
3879
+ msgstr ""
3880
+
3881
+ #: src/lib/src/Modules/HackGuard/Strings.php:126
3882
+ msgid ""
3883
+ "Regularly scan your WordPress plugins and themes for known security "
3884
+ "vulnerabilities."
3885
+ msgstr ""
3886
+
3887
+ #: src/lib/src/Modules/HackGuard/Strings.php:128
3888
+ msgid ""
3889
+ "Ensure this is turned on and you will always know if any of your assets have "
3890
+ "known security vulnerabilities."
3891
+ msgstr ""
3892
+
3893
+ #: src/lib/src/Modules/HackGuard/Strings.php:133
3894
+ msgid "File Scans and Malware"
3895
+ msgstr ""
3896
+
3897
+ #: src/lib/src/Modules/HackGuard/Strings.php:134
3898
+ msgid "File Scanning and Malware Protection"
3899
+ msgstr ""
3900
+
3901
+ #: src/lib/src/Modules/HackGuard/Strings.php:137
3902
+ msgid ""
3903
+ "Monitor WordPress files and protect against malicious intrusion and hacking."
3904
+ msgstr ""
3905
+
3906
+ #: src/lib/src/Modules/HackGuard/Strings.php:144
3907
+ #: src/lib/src/Modules/HackGuard/Strings.php:145
3908
+ msgid "Realtime Change Detection"
3909
+ msgstr ""
3910
+
3911
+ #: src/lib/src/Modules/HackGuard/Strings.php:148
3912
+ msgid ""
3913
+ "Monitor Your WordPress Site For Changes To Critical Components In Realtime."
3914
+ msgstr ""
3915
+
3916
+ #: src/lib/src/Modules/HackGuard/Strings.php:150
3917
+ msgid "Enable The Realtime Change Detection Features."
3918
+ msgstr ""
3919
+
3920
+ #: src/lib/src/Modules/HackGuard/Strings.php:155
3921
+ #: src/lib/src/Modules/HackGuard/Strings.php:348
3922
+ msgid "Enable The Abandoned Plugin Scanner"
3923
+ msgstr ""
3924
+
3925
+ #: src/lib/src/Modules/HackGuard/Strings.php:159
3926
+ msgid ""
3927
+ "Monitor your site for plugins that have been abandoned by their authors and "
3928
+ "are no longer maintained."
3929
+ msgstr ""
3930
+
3931
+ #: src/lib/src/Modules/HackGuard/Strings.php:160
3932
+ msgid "Enable this to alert you to your site running unmaintained code."
3933
+ msgstr ""
3934
+
3935
+ #: src/lib/src/Modules/HackGuard/Strings.php:189
3936
+ msgid "Daily Scan Frequency"
3937
+ msgstr ""
3938
+
3939
+ #: src/lib/src/Modules/HackGuard/Strings.php:190
3940
+ msgid "Number Of Times To Run All Scans Each Day"
3941
+ msgstr ""
3942
+
3943
+ #: src/lib/src/Modules/HackGuard/Strings.php:192
3944
+ msgid "Once every 24hrs."
3945
+ msgstr ""
3946
+
3947
+ #: src/lib/src/Modules/HackGuard/Strings.php:193
3948
+ msgid "To improve security, increase the number of scans per day."
3949
+ msgstr ""
3950
+
3951
+ #: src/lib/src/Modules/HackGuard/Strings.php:199
3952
+ #, php-format
3953
+ msgid "Daily Cron - %s"
3954
+ msgstr ""
3955
+
3956
+ #: src/lib/src/Modules/HackGuard/Strings.php:199
3957
+ msgid "Scans Plugins For Known Vulnerabilities"
3958
+ msgstr ""
3959
+
3960
+ #: src/lib/src/Modules/HackGuard/Strings.php:200
3961
+ msgid ""
3962
+ "Runs a scan of all your plugins against a database of known WordPress plugin "
3963
+ "vulnerabilities."
3964
+ msgstr ""
3965
+
3966
+ #: src/lib/src/Modules/HackGuard/Strings.php:204
3967
+ msgid "Vulnerability Scanner"
3968
+ msgstr ""
3969
+
3970
+ #: src/lib/src/Modules/HackGuard/Strings.php:205
3971
+ msgid "Enable The Vulnerability Scanner"
3972
+ msgstr ""
3973
+
3974
+ #: src/lib/src/Modules/HackGuard/Strings.php:206
3975
+ msgid ""
3976
+ "Runs a scan of all your plugins against a database of known WordPress "
3977
+ "vulnerabilities."
3978
+ msgstr ""
3979
+
3980
+ #: src/lib/src/Modules/HackGuard/Strings.php:211
3981
+ msgid "Apply Updates Automatically To Vulnerable Plugins"
3982
+ msgstr ""
3983
+
3984
+ #: src/lib/src/Modules/HackGuard/Strings.php:212
3985
+ msgid ""
3986
+ "When an update becomes available, automatically apply updates to items with "
3987
+ "known vulnerabilities."
3988
+ msgstr ""
3989
+
3990
+ #: src/lib/src/Modules/HackGuard/Strings.php:216
3991
+ #, php-format
3992
+ msgid "Automatic %s File Scanner"
3993
+ msgstr ""
3994
+
3995
+ #: src/lib/src/Modules/HackGuard/Strings.php:219
3996
+ #, php-format
3997
+ msgid "Scan And Monitor %s Files For Changes"
3998
+ msgstr ""
3999
+
4000
+ #: src/lib/src/Modules/HackGuard/Strings.php:223
4001
+ msgid "Regularly scan all files on your site for changes."
4002
+ msgstr ""
4003
+
4004
+ #: src/lib/src/Modules/HackGuard/Strings.php:224
4005
+ msgid "Keep this feature turned on, at all times."
4006
+ msgstr ""
4007
+
4008
+ #: src/lib/src/Modules/HackGuard/Strings.php:228
4009
+ msgid ""
4010
+ "Scan areas include: WordPress Core Files, Plugin and Themes, and PHP Malware."
4011
+ msgstr ""
4012
+
4013
+ #: src/lib/src/Modules/HackGuard/Strings.php:232
4014
+ msgid "Scan areas include: WordPress Core Files."
4015
+ msgstr ""
4016
+
4017
+ #: src/lib/src/Modules/HackGuard/Strings.php:234
4018
+ #, php-format
4019
+ msgid ""
4020
+ "To also include scanning Plugins and Themes, and for PHP Malware, please "
4021
+ "upgrade to %s."
4022
+ msgstr ""
4023
+
4024
+ #: src/lib/src/Modules/HackGuard/Strings.php:239
4025
+ msgid "Automatic File Repair"
4026
+ msgstr ""
4027
+
4028
+ #: src/lib/src/Modules/HackGuard/Strings.php:240
4029
+ msgid "Automatically Repair Files That Have Changes Or Malware Infection"
4030
+ msgstr ""
4031
+
4032
+ #: src/lib/src/Modules/HackGuard/Strings.php:242
4033
+ msgid ""
4034
+ "Will attempt to automatically repair files that have been changed, or "
4035
+ "infected with malware."
4036
+ msgstr ""
4037
+
4038
+ #: src/lib/src/Modules/HackGuard/Strings.php:243
4039
+ msgid ""
4040
+ "In the case of WordPress, original files will be downloaded from WordPress."
4041
+ "org to repair any broken files."
4042
+ msgstr ""
4043
+
4044
+ #: src/lib/src/Modules/HackGuard/Strings.php:244
4045
+ msgid ""
4046
+ "In the case of plugins & themes, only those installed from WordPress.org can "
4047
+ "be repaired."
4048
+ msgstr ""
4049
+
4050
+ #: src/lib/src/Modules/HackGuard/Strings.php:245
4051
+ msgid "Auto-Repair will never automatically delete new or unrecognised files."
4052
+ msgstr ""
4053
+
4054
+ #: src/lib/src/Modules/HackGuard/Strings.php:246
4055
+ msgid "Unrecognised files will need to be manually deleted."
4056
+ msgstr ""
4057
+
4058
+ #: src/lib/src/Modules/HackGuard/Strings.php:252
4059
+ msgid "Lock Files Against Tampering And Changes"
4060
+ msgstr ""
4061
+
4062
+ #: src/lib/src/Modules/HackGuard/Strings.php:254
4063
+ msgid ""
4064
+ "Detects changes to the files, then lets you examine contents and revert as "
4065
+ "required."
4066
+ msgstr ""
4067
+
4068
+ #: src/lib/src/Modules/HackGuard/Strings.php:255
4069
+ msgid "Web.Config is only available for Windows/IIS."
4070
+ msgstr ""
4071
+
4072
+ #: src/lib/src/Modules/HackGuard/Strings.php:256
4073
+ msgid "After saving, it may take up to 60 seconds before a new lock is stored."
4074
+ msgstr ""
4075
+
4076
+ #: src/lib/src/Modules/HackGuard/Strings.php:257
4077
+ msgid "It will be displayed below when it's ready."
4078
+ msgstr ""
4079
+
4080
+ #: src/lib/src/Modules/HackGuard/Strings.php:264
4081
+ msgid "Locked Files"
4082
+ msgstr ""
4083
+
4084
+ #: src/lib/src/Modules/HackGuard/Strings.php:272
4085
+ msgid "Unrecognised Files Scanner"
4086
+ msgstr ""
4087
+
4088
+ #: src/lib/src/Modules/HackGuard/Strings.php:273
4089
+ msgid "Automatically Scans For Unrecognised Files In Core Directories"
4090
+ msgstr ""
4091
+
4092
+ #: src/lib/src/Modules/HackGuard/Strings.php:274
4093
+ msgid ""
4094
+ "Scans for, and automatically deletes, any files in your core WordPress "
4095
+ "folders that are not part of your WordPress installation."
4096
+ msgstr ""
4097
+
4098
+ #: src/lib/src/Modules/HackGuard/Strings.php:278
4099
+ msgid "Scan Uploads"
4100
+ msgstr ""
4101
+
4102
+ #: src/lib/src/Modules/HackGuard/Strings.php:279
4103
+ msgid "Scan Uploads Folder For PHP and Javascript"
4104
+ msgstr ""
4105
+
4106
+ #: src/lib/src/Modules/HackGuard/Strings.php:280
4107
+ msgid ""
4108
+ "Take care when turning on this option - if you are unsure, leave it disabled."
4109
+ msgstr ""
4110
+
4111
+ #: src/lib/src/Modules/HackGuard/Strings.php:281
4112
+ msgid ""
4113
+ "The Uploads folder is primarily for media, but could be used to store "
4114
+ "nefarious files."
4115
+ msgstr ""
4116
+
4117
+ #: src/lib/src/Modules/HackGuard/Strings.php:285
4118
+ msgid "File Exclusions"
4119
+ msgstr ""
4120
+
4121
+ #: src/lib/src/Modules/HackGuard/Strings.php:286
4122
+ msgid "Provide A List Of Files To Be Excluded From The Scan"
4123
+ msgstr ""
4124
+
4125
+ #: src/lib/src/Modules/HackGuard/Strings.php:288
4126
+ msgid "Take a new line for each file you wish to exclude from the scan."
4127
+ msgstr ""
4128
+
4129
+ #: src/lib/src/Modules/HackGuard/Strings.php:289
4130
+ msgid "No commas are necessary."
4131
+ msgstr ""
4132
+
4133
+ #: src/lib/src/Modules/HackGuard/Strings.php:294
4134
+ msgid "Enable Integrity Scan"
4135
+ msgstr ""
4136
+
4137
+ #: src/lib/src/Modules/HackGuard/Strings.php:295
4138
+ msgid "Scans For Critical Changes Made To Your WordPress Site"
4139
+ msgstr ""
4140
+
4141
+ #: src/lib/src/Modules/HackGuard/Strings.php:296
4142
+ msgid "Detects changes made to your WordPress site outside of WordPress."
4143
+ msgstr ""
4144
+
4145
+ #: src/lib/src/Modules/HackGuard/Strings.php:300
4146
+ msgid "Monitor User Accounts"
4147
+ msgstr ""
4148
+
4149
+ #: src/lib/src/Modules/HackGuard/Strings.php:301
4150
+ msgid "Scans For Critical Changes Made To User Accounts"
4151
+ msgstr ""
4152
+
4153
+ #: src/lib/src/Modules/HackGuard/Strings.php:302
4154
+ msgid ""
4155
+ "Detects changes made to critical user account information that were made "
4156
+ "directly on the database and outside of the WordPress system."
4157
+ msgstr ""
4158
+
4159
+ #: src/lib/src/Modules/HackGuard/Strings.php:303
4160
+ msgid "An example of this might be some form of SQL Injection attack."
4161
+ msgstr ""
4162
+
4163
+ #: src/lib/src/Modules/HackGuard/Strings.php:304
4164
+ msgid ""
4165
+ "Enabling this option for every page low may slow down your site with large "
4166
+ "numbers of users."
4167
+ msgstr ""
4168
+
4169
+ #: src/lib/src/Modules/HackGuard/Strings.php:305
4170
+ msgid ""
4171
+ "This option may cause critical problem with 3rd party plugins that manage "
4172
+ "user accounts."
4173
+ msgstr ""
4174
+
4175
+ #: src/lib/src/Modules/HackGuard/Strings.php:309
4176
+ msgid "Guard/Scan Depth"
4177
+ msgstr ""
4178
+
4179
+ #: src/lib/src/Modules/HackGuard/Strings.php:310
4180
+ msgid "How Deep Into The Plugin Directories To Scan And Guard"
4181
+ msgstr ""
4182
+
4183
+ #: src/lib/src/Modules/HackGuard/Strings.php:311
4184
+ msgid ""
4185
+ "The Guard normally scans only the top level of a folder. Increasing depth "
4186
+ "will increase scan times."
4187
+ msgstr ""
4188
+
4189
+ #: src/lib/src/Modules/HackGuard/Strings.php:312
4190
+ #, php-format
4191
+ msgid ""
4192
+ "Setting it to %s will remove this limit and all sub-folders will be scanned "
4193
+ "- not recommended"
4194
+ msgstr ""
4195
+
4196
+ #: src/lib/src/Modules/HackGuard/Strings.php:316
4197
+ msgid "Show Re-Install Links"
4198
+ msgstr ""
4199
+
4200
+ #: src/lib/src/Modules/HackGuard/Strings.php:317
4201
+ msgid "Show Re-Install Links For Plugins"
4202
+ msgstr ""
4203
+
4204
+ #: src/lib/src/Modules/HackGuard/Strings.php:318
4205
+ msgid ""
4206
+ "Show links to re-install plugins and offer re-install when activating "
4207
+ "plugins."
4208
+ msgstr ""
4209
+
4210
+ #: src/lib/src/Modules/HackGuard/Strings.php:322
4211
+ msgid "Auto-Filter Results"
4212
+ msgstr ""
4213
+
4214
+ #: src/lib/src/Modules/HackGuard/Strings.php:323
4215
+ msgid "Automatically Filter Results Of Irrelevant Items"
4216
+ msgstr ""
4217
+
4218
+ #: src/lib/src/Modules/HackGuard/Strings.php:325
4219
+ msgid "Automatically remove items from results that are irrelevant."
4220
+ msgstr ""
4221
+
4222
+ #: src/lib/src/Modules/HackGuard/Strings.php:326
4223
+ msgid ""
4224
+ "An example of this is filtering out results for PHP files that don't have "
4225
+ "any executable code."
4226
+ msgstr ""
4227
+
4228
+ #: src/lib/src/Modules/HackGuard/Strings.php:331
4229
+ msgid "Scan Exclusions"
4230
+ msgstr ""
4231
+
4232
+ #: src/lib/src/Modules/HackGuard/Strings.php:332
4233
+ msgid "Scan File And Folder Exclusions"
4234
+ msgstr ""
4235
+
4236
+ #: src/lib/src/Modules/HackGuard/Strings.php:334
4237
+ msgid "A list of file/folder paths that will never be scanned."
4238
+ msgstr ""
4239
+
4240
+ #: src/lib/src/Modules/HackGuard/Strings.php:335
4241
+ msgid "All paths are relative to your WordPress installation directory."
4242
+ msgstr ""
4243
+
4244
+ #: src/lib/src/Modules/HackGuard/Strings.php:336
4245
+ #: src/lib/src/Modules/IPs/Strings.php:290
4246
+ msgid "This is an advanced option and should be used with great care."
4247
+ msgstr ""
4248
+
4249
+ #: src/lib/src/Modules/HackGuard/Strings.php:337
4250
+ #: src/lib/src/Modules/IPs/Strings.php:291
4251
+ msgid "Take a new line for each whitelisted path."
4252
+ msgstr ""
4253
+
4254
+ #: src/lib/src/Modules/HackGuard/Strings.php:338
4255
+ #: src/lib/src/Modules/IPs/Strings.php:292
4256
+ msgid "All characters will be treated as case-insensitive."
4257
+ msgstr ""
4258
+
4259
+ #: src/lib/src/Modules/HackGuard/Strings.php:339
4260
+ msgid "Directories should be provided with a trailing slash (/)."
4261
+ msgstr ""
4262
+
4263
+ #: src/lib/src/Modules/HackGuard/Strings.php:340
4264
+ msgid ""
4265
+ "If a path matches any core WordPress directories, it'll be removed "
4266
+ "automatically."
4267
+ msgstr ""
4268
+
4269
+ #: src/lib/src/Modules/HackGuard/Strings.php:341
4270
+ msgid ""
4271
+ "These aren't regular expression, but you can use asterisk (*) as a wildcard."
4272
+ msgstr ""
4273
+
4274
+ #: src/lib/src/Modules/HackGuard/Strings.php:342
4275
+ msgid "WordPress Installation Directory"
4276
+ msgstr ""
4277
+
4278
+ #: src/lib/src/Modules/HackGuard/Strings.php:347
4279
+ msgid "Abandoned Plugin Scanner"
4280
+ msgstr ""
4281
+
4282
+ #: src/lib/src/Modules/HackGuard/Strings.php:349
4283
+ msgid "Scan your WordPress.org assets for whether they've been abandoned."
4284
+ msgstr ""
4285
+
4286
+ #: src/lib/src/Modules/HackGuard/Strings.php:353
4287
+ msgid "Surgical Auto-Repair"
4288
+ msgstr ""
4289
+
4290
+ #: src/lib/src/Modules/HackGuard/Strings.php:354
4291
+ msgid "Automatically Attempt To Surgically Remove Malware Code"
4292
+ msgstr ""
4293
+
4294
+ #: src/lib/src/Modules/HackGuard/Strings.php:355
4295
+ msgid "Attempts to automatically remove code from infected files."
4296
+ msgstr ""
4297
+
4298
+ #: src/lib/src/Modules/HackGuard/Strings.php:356
4299
+ msgid ""
4300
+ "This could break your site if code removal leaves remaining code in an "
4301
+ "inconsistent state."
4302
+ msgstr ""
4303
+
4304
+ #: src/lib/src/Modules/HackGuard/Strings.php:357
4305
+ msgid ""
4306
+ "Only applies to files that don't fall under the other categories for "
4307
+ "automatic repair."
4308
+ msgstr ""
4309
+
4310
+ #: src/lib/src/Modules/HackGuard/Strings.php:376
4311
+ #, php-format
4312
+ msgid "%s has detected abandoned plugins installed on your site."
4313
+ msgstr ""
4314
+
4315
+ #: src/lib/src/Modules/HackGuard/Strings.php:377
4316
+ msgid ""
4317
+ "Running code that hasn't seen any updates for over 2 years is far from ideal."
4318
+ msgstr ""
4319
+
4320
+ #: src/lib/src/Modules/HackGuard/Strings.php:378
4321
+ #: src/lib/src/Modules/HackGuard/Strings.php:418
4322
+ msgid "Details for the items(s) are below:"
4323
+ msgstr ""
4324
+
4325
+ #: src/lib/src/Modules/HackGuard/Strings.php:379
4326
+ msgid "Abandoned Plugin(s) Discovered On Your Site."
4327
+ msgstr ""
4328
+
4329
+ #: src/lib/src/Modules/HackGuard/Strings.php:380
4330
+ msgid "Unrecognised WordPress Files Detected"
4331
+ msgstr ""
4332
+
4333
+ #: src/lib/src/Modules/HackGuard/Strings.php:381
4334
+ #, php-format
4335
+ msgid "The %s Unrecognised File Scanner found files which you need to review."
4336
+ msgstr ""
4337
+
4338
+ #: src/lib/src/Modules/HackGuard/Strings.php:382
4339
+ #, php-format
4340
+ msgid "%s has attempted to delete these files based on your current settings."
4341
+ msgstr ""
4342
+
4343
+ #: src/lib/src/Modules/HackGuard/Strings.php:383
4344
+ msgid "We recommend you run the scanner to review your site"
4345
+ msgstr ""
4346
+
4347
+ #: src/lib/src/Modules/HackGuard/Strings.php:384
4348
+ msgid "More Info On This Scanner"
4349
+ msgstr ""
4350
+
4351
+ #: src/lib/src/Modules/HackGuard/Strings.php:386
4352
+ msgid "Modified Core WordPress Files Discovered"
4353
+ msgstr ""
4354
+
4355
+ #: src/lib/src/Modules/HackGuard/Strings.php:387
4356
+ #, php-format
4357
+ msgid "The %s Core File Scanner found files with potential problems."
4358
+ msgstr ""
4359
+
4360
+ #: src/lib/src/Modules/HackGuard/Strings.php:389
4361
+ #, php-format
4362
+ msgid "%s has already attempted to repair the files."
4363
+ msgstr ""
4364
+
4365
+ #: src/lib/src/Modules/HackGuard/Strings.php:390
4366
+ msgid ""
4367
+ "But, you should always check these files to ensure everything is as you "
4368
+ "expect."
4369
+ msgstr ""
4370
+
4371
+ #: src/lib/src/Modules/HackGuard/Strings.php:391
4372
+ msgid ""
4373
+ "You should review these files and replace them with official versions if "
4374
+ "required."
4375
+ msgstr ""
4376
+
4377
+ #: src/lib/src/Modules/HackGuard/Strings.php:392
4378
+ msgid ""
4379
+ "Alternatively you can have the plugin attempt to repair/replace these files "
4380
+ "automatically."
4381
+ msgstr ""
4382
+
4383
+ #: src/lib/src/Modules/HackGuard/Strings.php:394
4384
+ msgid "The following files have different content:"
4385
+ msgstr ""
4386
+
4387
+ #: src/lib/src/Modules/HackGuard/Strings.php:395
4388
+ msgid "The following files are missing:"
4389
+ msgstr ""
4390
+
4391
+ #: src/lib/src/Modules/HackGuard/Strings.php:398
4392
+ #, php-format
4393
+ msgid "The %s Malware Scanner found files with potential malware."
4394
+ msgstr ""
4395
+
4396
+ #: src/lib/src/Modules/HackGuard/Strings.php:400
4397
+ msgid ""
4398
+ "You must examine the file(s) carefully to determine whether suspicious code "
4399
+ "is really present."
4400
+ msgstr ""
4401
+
4402
+ #: src/lib/src/Modules/HackGuard/Strings.php:401
4403
+ #, php-format
4404
+ msgid ""
4405
+ "The %s Malware Scanner searches for common malware patterns and so false "
4406
+ "positives (detection errors) are to be expected sometimes."
4407
+ msgstr ""
4408
+
4409
+ #: src/lib/src/Modules/HackGuard/Strings.php:402
4410
+ #: src/lib/src/Modules/Reporting/Lib/ReportingController.php:156
4411
+ #: src/lib/src/Modules/UserManagement/Processor.php:207
4412
+ #: src/lib/src/Modules/UserManagement/Processor.php:232
4413
+ msgid "Site URL"
4414
+ msgstr ""
4415
+
4416
+ #: src/lib/src/Modules/HackGuard/Strings.php:404
4417
+ msgid "The following files contain suspected malware:"
4418
+ msgstr ""
4419
+
4420
+ #: src/lib/src/Modules/HackGuard/Strings.php:407
4421
+ #, php-format
4422
+ msgid ""
4423
+ "%s has detected at least 1 Plugins/Themes have been modified on your site."
4424
+ msgstr ""
4425
+
4426
+ #: src/lib/src/Modules/HackGuard/Strings.php:408
4427
+ msgid ""
4428
+ "You will receive only 1 email notification about these changes in a 1 week "
4429
+ "period."
4430
+ msgstr ""
4431
+
4432
+ #: src/lib/src/Modules/HackGuard/Strings.php:409
4433
+ msgid "Details of the problem items are below:"
4434
+ msgstr ""
4435
+
4436
+ #: src/lib/src/Modules/HackGuard/Strings.php:411
4437
+ msgid "Modified Themes:"
4438
+ msgstr ""
4439
+
4440
+ #: src/lib/src/Modules/HackGuard/Strings.php:412
4441
+ msgid "Modified Plugins:"
4442
+ msgstr ""
4443
+
4444
+ #: src/lib/src/Modules/HackGuard/Strings.php:413
4445
+ msgid "Plugins/Themes Have Been Altered"
4446
+ msgstr ""
4447
+
4448
+ #: src/lib/src/Modules/HackGuard/Strings.php:416
4449
+ #, php-format
4450
+ msgid "%s has detected items with known security vulnerabilities."
4451
+ msgstr ""
4452
+
4453
+ #: src/lib/src/Modules/HackGuard/Strings.php:417
4454
+ msgid "You should update or remove these items at your earliest convenience."
4455
+ msgstr ""
4456
+
4457
+ #: src/lib/src/Modules/HackGuard/Strings.php:421
4458
+ msgid "Item"
4459
+ msgstr ""
4460
+
4461
+ #: src/lib/src/Modules/HackGuard/Strings.php:422
4462
+ #, php-format
4463
+ msgid "Vulnerability Title: %s"
4464
+ msgstr ""
4465
+
4466
+ #: src/lib/src/Modules/HackGuard/Strings.php:423
4467
+ #, php-format
4468
+ msgid "Vulnerability Type: %s"
4469
+ msgstr ""
4470
+
4471
+ #: src/lib/src/Modules/HackGuard/Strings.php:424
4472
+ #, php-format
4473
+ msgid "Fixed Version: %s"
4474
+ msgstr ""
4475
+
4476
+ #: src/lib/src/Modules/HackGuard/Strings.php:425
4477
+ #, php-format
4478
+ msgid "Further Information: %s"
4479
+ msgstr ""
4480
+
4481
+ #: src/lib/src/Modules/HackGuard/Strings.php:427
4482
+ msgid "Run Scanner"
4483
+ msgstr ""
4484
+
4485
+ #: src/lib/src/Modules/HackGuard/UI.php:43
4486
+ #: src/lib/src/Modules/HackGuard/UI.php:121
4487
+ msgid "Sorry, this scan is not available."
4488
+ msgstr ""
4489
+
4490
+ #: src/lib/src/Modules/HackGuard/UI.php:44
4491
+ #: src/lib/src/Modules/HackGuard/UI.php:122
4492
+ msgid "This scan is not currently enabled."
4493
+ msgstr ""
4494
+
4495
+ #: src/lib/src/Modules/HackGuard/UI.php:45
4496
+ #: src/lib/src/Modules/HackGuard/UI.php:123
4497
+ msgid "Please turn on this scan in the options."
4498
+ msgstr ""
4499
+
4500
+ #: src/lib/src/Modules/HackGuard/UI.php:46
4501
+ #: src/lib/src/Modules/HackGuard/UI.php:124
4502
+ msgid "Scan Your Site Now"
4503
+ msgstr ""
4504
+
4505
+ #: src/lib/src/Modules/HackGuard/UI.php:47
4506
+ #: src/lib/src/Modules/HackGuard/UI.php:125
4507
+ msgid "Run the selected scans on your site now to get the latest results"
4508
+ msgstr ""
4509
+
4510
+ #: src/lib/src/Modules/HackGuard/UI.php:48
4511
+ #: src/lib/src/Modules/HackGuard/UI.php:126
4512
+ msgid "The more scans that are selected, the longer the scan may take."
4513
+ msgstr ""
4514
+
4515
+ #: src/lib/src/Modules/HackGuard/UI.php:50
4516
+ #: src/lib/src/Modules/HackGuard/UI.php:129
4517
+ msgid "View Scan Results"
4518
+ msgstr ""
4519
+
4520
+ #: src/lib/src/Modules/HackGuard/UI.php:51
4521
+ #: src/lib/src/Modules/HackGuard/UI.php:130
4522
+ msgid "Clear Ignore Flags"
4523
+ msgstr ""
4524
+
4525
+ #: src/lib/src/Modules/HackGuard/UI.php:52
4526
+ #: src/lib/src/Modules/HackGuard/UI.php:131
4527
+ msgid ""
4528
+ "Previously ignored results will be revealed (for the selected scans only)"
4529
+ msgstr ""
4530
+
4531
+ #: src/lib/src/Modules/HackGuard/UI.php:53
4532
+ #: src/lib/src/Modules/HackGuard/UI.php:132
4533
+ msgid "Remove Notification Suppression"
4534
+ msgstr ""
4535
+
4536
+ #: src/lib/src/Modules/HackGuard/UI.php:54
4537
+ #: src/lib/src/Modules/HackGuard/UI.php:133
4538
+ msgid "Allow notification emails to be resent (for the selected scans only)"
4539
+ msgstr ""
4540
+
4541
+ #: src/lib/src/Modules/HackGuard/UI.php:55
4542
+ #: src/lib/src/Modules/HackGuard/UI.php:134
4543
+ msgid "Run Scans Now"
4544
+ msgstr ""
4545
+
4546
+ #: src/lib/src/Modules/HackGuard/UI.php:56
4547
+ #: src/lib/src/Modules/HackGuard/UI.php:135
4548
+ msgid ""
4549
+ "The previous scan either didn't detect any items that require your attention "
4550
+ "or they've already been repaired."
4551
+ msgstr ""
4552
+
4553
+ #: src/lib/src/Modules/HackGuard/UI.php:57
4554
+ #: src/lib/src/Modules/HackGuard/UI.php:136
4555
+ msgid "Scan Progress"
4556
+ msgstr ""
4557
+
4558
+ #: src/lib/src/Modules/HackGuard/UI.php:58
4559
+ #: src/lib/src/Modules/HackGuard/UI.php:137
4560
+ msgid "This site currently can't make HTTP requests to itself."
4561
+ msgstr ""
4562
+
4563
+ #: src/lib/src/Modules/HackGuard/UI.php:59
4564
+ #: src/lib/src/Modules/HackGuard/UI.php:138
4565
+ msgid ""
4566
+ "Scans can't run because the module that controls them is currently disabled."
4567
+ msgstr ""
4568
+
4569
+ #: src/lib/src/Modules/HackGuard/UI.php:60
4570
+ #: src/lib/src/Modules/HackGuard/UI.php:139
4571
+ msgid "Review Scanner Module configuration"
4572
+ msgstr ""
4573
+
4574
+ #: src/lib/src/Modules/HackGuard/UI.php:128
4575
+ msgid "Select Scans To Run"
4576
+ msgstr ""
4577
+
4578
+ #: src/lib/src/Modules/HackGuard/UI.php:223
4579
+ msgid "Results of file locker monitoring"
4580
+ msgstr ""
4581
+
4582
+ #: src/lib/src/Modules/HackGuard/UI.php:224
4583
+ msgid "Please select a file to review."
4584
+ msgstr ""
4585
+
4586
+ #: src/lib/src/Modules/HackGuard/UI.php:241
4587
+ msgid "Not available as your site cannot handshake with ShieldNET API."
4588
+ msgstr ""
4589
+
4590
+ #: src/lib/src/Modules/HackGuard/UI.php:253
4591
+ msgid ""
4592
+ "Plugin/Theme file scanners are unavailable because we couldn't create a "
4593
+ "temporary directory to store files."
4594
+ msgstr ""
4595
+
4596
+ #: src/lib/src/Modules/HackGuard/WpCli/ScanRun.php:30
4597
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:178
4598
+ msgid "Run Scan"
4599
+ msgstr ""
4600
+
4601
+ #: src/lib/src/Modules/Headers/Insights/OverviewCards.php:22
4602
+ #: src/lib/src/Modules/Plugin/Strings.php:542
4603
+ msgid "HTTP Headers"
4604
+ msgstr ""
4605
+
4606
+ #: src/lib/src/Modules/Headers/Insights/OverviewCards.php:25
4607
+ msgid "All important security Headers have been set"
4608
+ msgstr ""
4609
+
4610
+ #: src/lib/src/Modules/Headers/Insights/OverviewCards.php:26
4611
+ msgid "At least one of the HTTP Headers hasn't been set"
4612
+ msgstr ""
4613
+
4614
+ #: src/lib/src/Modules/Headers/Insights/OverviewCards.php:31
4615
+ msgid "Content Security Policies"
4616
+ msgstr ""
4617
+
4618
+ #: src/lib/src/Modules/Headers/Insights/OverviewCards.php:34
4619
+ msgid "Content Security Policy is turned on"
4620
+ msgstr ""
4621
+
4622
+ #: src/lib/src/Modules/Headers/Insights/OverviewCards.php:35
4623
+ msgid "Content Security Policies aren't active or there are no rules provided"
4624
+ msgstr ""
4625
+
4626
+ #: src/lib/src/Modules/Headers/Insights/OverviewCards.php:44
4627
+ msgid "HTTP Security Headers"
4628
+ msgstr ""
4629
+
4630
+ #: src/lib/src/Modules/Headers/Insights/OverviewCards.php:48
4631
+ msgid "Protect Visitors With Powerful HTTP Headers"
4632
+ msgstr ""
4633
+
4634
+ #: src/lib/src/Modules/Headers/Strings.php:23
4635
+ #: src/lib/src/Modules/Headers/Strings.php:31
4636
+ msgid ""
4637
+ "Protect visitors to your site by implementing increased security response "
4638
+ "headers."
4639
+ msgstr ""
4640
+
4641
+ #: src/lib/src/Modules/Headers/Strings.php:24
4642
+ #: src/lib/src/Modules/Headers/Strings.php:32
4643
+ #: src/lib/src/Modules/Headers/Strings.php:41
4644
+ msgid ""
4645
+ "Enabling these features are advised, but you must test them on your site "
4646
+ "thoroughly."
4647
+ msgstr ""
4648
+
4649
+ #: src/lib/src/Modules/Headers/Strings.php:29
4650
+ msgid "Advanced Security Headers"
4651
+ msgstr ""
4652
+
4653
+ #: src/lib/src/Modules/Headers/Strings.php:34
4654
+ msgid "Security Headers"
4655
+ msgstr ""
4656
+
4657
+ #: src/lib/src/Modules/Headers/Strings.php:38
4658
+ #: src/lib/src/Modules/Headers/Strings.php:43
4659
+ #: src/lib/src/Modules/Headers/Strings.php:100
4660
+ msgid "Content Security Policy"
4661
+ msgstr ""
4662
+
4663
+ #: src/lib/src/Modules/Headers/Strings.php:40
4664
+ msgid ""
4665
+ "Restrict the sources and types of content that may be loaded and processed "
4666
+ "by visitor browsers."
4667
+ msgstr ""
4668
+
4669
+ #: src/lib/src/Modules/Headers/Strings.php:74
4670
+ msgid "Block iFrames"
4671
+ msgstr ""
4672
+
4673
+ #: src/lib/src/Modules/Headers/Strings.php:75
4674
+ msgid "Block Remote iFrames Of This Site"
4675
+ msgstr ""
4676
+
4677
+ #: src/lib/src/Modules/Headers/Strings.php:76
4678
+ msgid ""
4679
+ "The setting prevents any external website from embedding your site in an "
4680
+ "iFrame."
4681
+ msgstr ""
4682
+
4683
+ #: src/lib/src/Modules/Headers/Strings.php:77
4684
+ msgid "This is useful for preventing so-called \"ClickJack attacks\"."
4685
+ msgstr ""
4686
+
4687
+ #: src/lib/src/Modules/Headers/Strings.php:81
4688
+ msgid "Referrer Policy"
4689
+ msgstr ""
4690
+
4691
+ #: src/lib/src/Modules/Headers/Strings.php:82
4692
+ msgid "Referrer Policy Header"
4693
+ msgstr ""
4694
+
4695
+ #: src/lib/src/Modules/Headers/Strings.php:83
4696
+ msgid ""
4697
+ "The Referrer Policy Header allows you to control when and what referral "
4698
+ "information a browser may pass along with links clicked on your site."
4699
+ msgstr ""
4700
+
4701
+ #: src/lib/src/Modules/Headers/Strings.php:87
4702
+ msgid "XSS Protection"
4703
+ msgstr ""
4704
+
4705
+ #: src/lib/src/Modules/Headers/Strings.php:88
4706
+ msgid "Employ Built-In Browser XSS Protection"
4707
+ msgstr ""
4708
+
4709
+ #: src/lib/src/Modules/Headers/Strings.php:89
4710
+ msgid ""
4711
+ "Directs compatible browsers to block what they detect as Reflective XSS "
4712
+ "attacks."
4713
+ msgstr ""
4714
+
4715
+ #: src/lib/src/Modules/Headers/Strings.php:93
4716
+ msgid "Prevent Mime-Sniff"
4717
+ msgstr ""
4718
+
4719
+ #: src/lib/src/Modules/Headers/Strings.php:94
4720
+ msgid "Turn-Off Browser Mime-Sniff"
4721
+ msgstr ""
4722
+
4723
+ #: src/lib/src/Modules/Headers/Strings.php:95
4724
+ msgid "Reduces visitor exposure to malicious user-uploaded content."
4725
+ msgstr ""
4726
+
4727
+ #: src/lib/src/Modules/Headers/Strings.php:99
4728
+ #: src/lib/src/Modules/Headers/Strings.php:100
4729
+ #: src/lib/src/Modules/LoginGuard/Strings.php:197
4730
+ #: src/lib/src/Modules/LoginGuard/Strings.php:236
4731
+ #: src/lib/src/Modules/LoginGuard/Strings.php:242
4732
  #, php-format
4733
+ msgid "Enable %s"
4734
  msgstr ""
4735
 
4736
+ #: src/lib/src/Modules/Headers/Strings.php:102
4737
+ msgid ""
4738
+ "Allows for permission and restriction of all resources loaded on your site."
4739
+ msgstr ""
4740
+
4741
+ #: src/lib/src/Modules/Headers/Strings.php:103
4742
+ msgid ""
4743
+ "Use this in conjunction with the Manual Rules section - you must supply your "
4744
+ "own CSP rules."
4745
+ msgstr ""
4746
+
4747
+ #: src/lib/src/Modules/Headers/Strings.php:108
4748
+ msgid "Manual Rules"
4749
+ msgstr ""
4750
+
4751
+ #: src/lib/src/Modules/Headers/Strings.php:109
4752
+ msgid "Manual CSP Rules"
4753
+ msgstr ""
4754
+
4755
+ #: src/lib/src/Modules/Headers/Strings.php:111
4756
+ msgid "Take a new line per rule."
4757
+ msgstr ""
4758
+
4759
+ #: src/lib/src/Modules/Headers/Strings.php:112
4760
+ msgid ""
4761
+ "We provide this feature as-is: to allow you to add custom CSP rules to your "
4762
+ "site."
4763
+ msgstr ""
4764
+
4765
+ #: src/lib/src/Modules/Headers/Strings.php:113
4766
+ msgid ""
4767
+ "We don't provide support for creating CSP rules and whether they're correct "
4768
+ "for your site."
4769
+ msgstr ""
4770
+
4771
+ #: src/lib/src/Modules/Headers/Strings.php:114
4772
+ msgid ""
4773
+ "Many WordPress caching plugins ignore HTTP Headers - if they're not showing "
4774
+ "up, disable page caching."
4775
+ msgstr ""
4776
+
4777
+ #: src/lib/src/Modules/IPs/AdminNotices.php:33
4778
+ #, php-format
4779
+ msgid "%s is ignoring you"
4780
+ msgstr ""
4781
+
4782
+ #: src/lib/src/Modules/IPs/AdminNotices.php:37
4783
+ #: src/lib/src/Modules/Plugin/Processor.php:57
4784
+ #: src/lib/src/Modules/Plugin/Strings.php:511
4785
+ #, php-format
4786
+ msgid "Your IP address is: %s"
4787
+ msgstr ""
4788
+
4789
+ #: src/lib/src/Modules/IPs/AdminNotices.php:40
4790
+ msgid ""
4791
+ "Your IP address is whitelisted and NO features you activate apply to you."
4792
+ msgstr ""
4793
+
4794
+ #: src/lib/src/Modules/IPs/AdminNotices.php:41
4795
+ msgid "Including the hiding the WP Login page."
4796
+ msgstr ""
4797
+
4798
+ #: src/lib/src/Modules/IPs/AjaxHandler.php:83
4799
+ msgid "IP address wasn't added to the list"
4800
+ msgstr ""
4801
+
4802
+ #: src/lib/src/Modules/IPs/AjaxHandler.php:96
4803
+ msgid "IP address not provided"
4804
+ msgstr ""
4805
+
4806
+ #: src/lib/src/Modules/IPs/AjaxHandler.php:99
4807
+ msgid "IP list not provided"
4808
+ msgstr ""
4809
+
4810
+ #: src/lib/src/Modules/IPs/AjaxHandler.php:102
4811
+ msgid "IP address isn't either a valid IP or a CIDR range"
4812
+ msgstr ""
4813
+
4814
+ #: src/lib/src/Modules/IPs/AjaxHandler.php:105
4815
+ msgid ""
4816
+ "Please upgrade to Pro if you'd like to add IPs to the black list manually."
4817
+ msgstr ""
4818
+
4819
+ #: src/lib/src/Modules/IPs/AjaxHandler.php:108
4820
+ msgid "Manually black listing your current IP address is not supported."
4821
+ msgstr ""
4822
+
4823
+ #: src/lib/src/Modules/IPs/AjaxHandler.php:111
4824
+ msgid "This IP is reserved and can't be blacklisted."
4825
+ msgstr ""
4826
+
4827
+ #: src/lib/src/Modules/IPs/AjaxHandler.php:144
4828
+ msgid "IP address added successfully"
4829
+ msgstr ""
4830
+
4831
+ #: src/lib/src/Modules/IPs/AjaxHandler.php:162
4832
+ msgid "Invalid entry selected"
4833
+ msgstr ""
4834
+
4835
+ #: src/lib/src/Modules/IPs/AjaxHandler.php:176
4836
+ msgid "IP address deleted"
4837
+ msgstr ""
4838
+
4839
+ #: src/lib/src/Modules/IPs/AjaxHandler.php:177
4840
+ msgid "IP address wasn't deleted from the list"
4841
+ msgstr ""
4842
+
4843
+ #: src/lib/src/Modules/IPs/AjaxHandler.php:241
4844
+ msgid "IP provided was invalid."
4845
+ msgstr ""
4846
+
4847
+ #: src/lib/src/Modules/IPs/AjaxHandler.php:244
4848
+ #, php-format
4849
+ msgid "IP can't be processed from this page as it's a known service IP: %s"
4850
+ msgstr ""
4851
+
4852
+ #: src/lib/src/Modules/IPs/AjaxHandler.php:255
4853
+ msgid "IP address blocked."
4854
+ msgstr ""
4855
+
4856
+ #: src/lib/src/Modules/IPs/AjaxHandler.php:256
4857
+ msgid "IP address couldn't be blocked at this time."
4858
+ msgstr ""
4859
+
4860
+ #: src/lib/src/Modules/IPs/AjaxHandler.php:268
4861
+ msgid "IP address unblocked."
4862
+ msgstr ""
4863
+
4864
+ #: src/lib/src/Modules/IPs/AjaxHandler.php:269
4865
+ msgid "IP address couldn't be unblocked at this time."
4866
+ msgstr ""
4867
+
4868
+ #: src/lib/src/Modules/IPs/AjaxHandler.php:281
4869
+ msgid "IP address added to Bypass list."
4870
+ msgstr ""
4871
+
4872
+ #: src/lib/src/Modules/IPs/AjaxHandler.php:282
4873
+ msgid "IP address couldn't be added to Bypass list at this time."
4874
+ msgstr ""
4875
+
4876
+ #: src/lib/src/Modules/IPs/AjaxHandler.php:290
4877
+ msgid "IP address removed from Bypass list."
4878
+ msgstr ""
4879
+
4880
+ #: src/lib/src/Modules/IPs/AjaxHandler.php:291
4881
+ msgid "IP address couldn't be removed from Bypass list at this time."
4882
+ msgstr ""
4883
+
4884
+ #: src/lib/src/Modules/IPs/AjaxHandler.php:303
4885
+ msgid "IP NotBot Score Reset."
4886
+ msgstr ""
4887
+
4888
+ #: src/lib/src/Modules/IPs/AjaxHandler.php:304
4889
+ msgid "IP NotBot Score couldn't be reset at this time."
4890
+ msgstr ""
4891
+
4892
+ #: src/lib/src/Modules/IPs/AjaxHandler.php:308
4893
+ msgid "Unsupported Action."
4894
+ msgstr ""
4895
+
4896
+ #: src/lib/src/Modules/IPs/Lib/AutoUnblock.php:178
4897
+ msgid "Automatic IP Unblock Request"
4898
+ msgstr ""
4899
+
4900
+ #: src/lib/src/Modules/IPs/Lib/AutoUnblock.php:197
4901
+ msgid ""
4902
+ "It looks like you've been blocked and have clicked to have your IP address "
4903
+ "removed from the blocklist."
4904
+ msgstr ""
4905
+
4906
+ #: src/lib/src/Modules/IPs/Lib/AutoUnblock.php:198
4907
+ msgid "Please click the link provided below to do so."
4908
+ msgstr ""
4909
+
4910
+ #: src/lib/src/Modules/IPs/Lib/AutoUnblock.php:199
4911
+ #: src/lib/src/Tables/DataTables/Build/Traffic/ForTraffic.php:53
4912
+ #: src/lib/src/Tables/Render/WpListTable/IpBlack.php:34
4913
+ #: src/lib/src/Tables/Render/WpListTable/Sessions.php:37
4914
+ msgid "Details"
4915
+ msgstr ""
4916
+
4917
+ #: src/lib/src/Modules/IPs/Lib/AutoUnblock.php:201
4918
+ msgid "Unblock My IP"
4919
+ msgstr ""
4920
+
4921
+ #: src/lib/src/Modules/IPs/Lib/AutoUnblock.php:202
4922
+ msgid "Or Copy-Paste"
4923
+ msgstr ""
4924
+
4925
+ #: src/lib/src/Modules/IPs/Lib/AutoUnblock.php:204
4926
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/SitesList.php:100
4927
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BackupCodes.php:115
4928
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Email.php:106
4929
+ msgid "URL"
4930
+ msgstr ""
4931
+
4932
+ #: src/lib/src/Modules/IPs/Lib/AutoUnblock.php:209
4933
+ msgid ""
4934
+ "You'll need to wait for a further 60 minutes if your IP address gets blocked "
4935
+ "again."
4936
+ msgstr ""
4937
+
4938
+ #: src/lib/src/Modules/IPs/Lib/AutoUnblock.php:210
4939
+ msgid ""
4940
+ "This link will ONLY work if it opens in the same web browser that you used "
4941
+ "to request this email."
4942
+ msgstr ""
4943
+
4944
+ #: src/lib/src/Modules/IPs/Lib/BlockRequest.php:86
4945
+ #, php-format
4946
+ msgid "You've been blocked by the %s plugin"
4947
+ msgstr ""
4948
+
4949
+ #: src/lib/src/Modules/IPs/Lib/BlockRequest.php:93
4950
+ #, php-format
4951
+ msgid "Time remaining on black list: %s"
4952
+ msgstr ""
4953
+
4954
+ #: src/lib/src/Modules/IPs/Lib/BlockRequest.php:94
4955
+ #, php-format
4956
+ msgid "%s minute"
4957
+ msgid_plural "%s minutes"
4958
+ msgstr[0] ""
4959
+ msgstr[1] ""
4960
+
4961
+ #: src/lib/src/Modules/IPs/Lib/BlockRequest.php:96
4962
+ #, php-format
4963
+ msgid ""
4964
+ "You tripped the security plugin defenses a total of %s times making you a "
4965
+ "suspect."
4966
+ msgstr ""
4967
+
4968
+ #: src/lib/src/Modules/IPs/Lib/BlockRequest.php:97
4969
+ msgid ""
4970
+ "If you believe this to be in error, please contact the site owner and quote "
4971
+ "your IP address below."
4972
+ msgstr ""
4973
+
4974
+ #: src/lib/src/Modules/IPs/Lib/BlockRequest.php:101
4975
+ msgid "Auto-Unblock Your IP"
4976
+ msgstr ""
4977
+
4978
+ #: src/lib/src/Modules/IPs/Lib/BlockRequest.php:102
4979
+ msgid ""
4980
+ "You can automatically unblock your IP address by clicking the button below."
4981
+ msgstr ""
4982
+
4983
+ #: src/lib/src/Modules/IPs/Lib/BlockRequest.php:103
4984
+ msgid "Unblock My IP Address"
4985
+ msgstr ""
4986
+
4987
+ #: src/lib/src/Modules/IPs/Lib/BlockRequest.php:165
4988
+ msgid ""
4989
+ "You can automatically unblock your IP address by clicking the link below."
4990
+ msgstr ""
4991
+
4992
+ #: src/lib/src/Modules/IPs/Lib/BlockRequest.php:166
4993
+ msgid ""
4994
+ "Clicking the button will send you an email letting you unblock your IP "
4995
+ "address."
4996
+ msgstr ""
4997
+
4998
+ #: src/lib/src/Modules/IPs/Lib/BlockRequest.php:167
4999
+ msgid ""
5000
+ "This assumes that your WordPress site has been properly configured to send "
5001
+ "email - many are not."
5002
+ msgstr ""
5003
+
5004
+ #: src/lib/src/Modules/IPs/Lib/BlockRequest.php:168
5005
+ msgid ""
5006
+ "If you don't receive the email, check your spam and contact your site admin."
5007
+ msgstr ""
5008
+
5009
+ #: src/lib/src/Modules/IPs/Lib/BlockRequest.php:169
5010
+ msgid ""
5011
+ "You may only use this link once every 60 minutes. If you're repeatedly "
5012
+ "blocked, ask your site admin to review the audit trail to determine the "
5013
+ "cause."
5014
+ msgstr ""
5015
+
5016
+ #: src/lib/src/Modules/IPs/Lib/BlockRequest.php:170
5017
+ msgid ""
5018
+ "When you click the link from your email, it must open up in this web browser."
5019
+ msgstr ""
5020
+
5021
+ #: src/lib/src/Modules/IPs/Lib/BlockRequest.php:171
5022
+ msgid "Send Auto-Unblock Link To My Email"
5023
+ msgstr ""
5024
+
5025
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:46
5026
+ #, php-format
5027
+ msgid "Info For IP Address %s"
5028
+ msgstr ""
5029
+
5030
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:47
5031
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:362
5032
+ msgid "Bot Signals"
5033
+ msgstr ""
5034
+
5035
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:48
5036
+ msgid "General Info"
5037
+ msgstr ""
5038
+
5039
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:51
5040
+ msgid "Recent Traffic"
5041
+ msgstr ""
5042
+
5043
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:138
5044
+ msgid "Identifying Info"
5045
+ msgstr ""
5046
+
5047
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:139
5048
+ #: src/lib/src/Modules/Traffic/Lib/TrafficTable/LoadRawTableData.php:117
5049
+ msgid "IP Status"
5050
+ msgstr ""
5051
+
5052
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:141
5053
+ #: src/lib/src/Modules/IPs/UI.php:58
5054
+ msgid "Block IP"
5055
+ msgstr ""
5056
+
5057
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:142
5058
+ msgid "Unblock IP"
5059
+ msgstr ""
5060
+
5061
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:143
5062
+ msgid "Add IP Bypass"
5063
+ msgstr ""
5064
+
5065
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:144
5066
+ msgid "Remove IP Bypass"
5067
+ msgstr ""
5068
+
5069
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:145
5070
+ msgid "Reset For This IP"
5071
+ msgstr ""
5072
+
5073
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:146
5074
+ msgid "See Details"
5075
+ msgstr ""
5076
+
5077
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:149
5078
+ msgid "Is It You?"
5079
+ msgstr ""
5080
+
5081
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:150
5082
+ msgid "Number of offenses"
5083
  msgstr ""
5084
 
5085
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:151
5086
+ msgid "Is Blocked"
 
 
5087
  msgstr ""
5088
 
5089
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:152
5090
+ msgid "Is Bypass IP"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5091
  msgstr ""
5092
 
5093
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:153
5094
+ msgid "IP Reputation Score"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5095
  msgstr ""
5096
 
5097
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:154
5098
+ msgid "ShieldNET IP Reputation Score"
 
5099
  msgstr ""
5100
 
5101
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:161
5102
+ msgid "Is this a known IP address?"
5103
  msgstr ""
5104
 
5105
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:163
5106
+ #: src/lib/src/Tables/DataTables/Build/Traffic/ForTraffic.php:97
5107
+ msgid "Country"
 
 
5108
  msgstr ""
5109
 
5110
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:164
5111
+ msgid "Timezone"
5112
  msgstr ""
5113
 
5114
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:165
5115
+ msgid "Coordinates"
5116
  msgstr ""
5117
 
5118
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:169
5119
+ msgid "Extras"
 
 
 
 
 
 
 
 
 
 
 
 
 
5120
  msgstr ""
5121
 
5122
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:170
5123
+ msgid "IP Whois"
 
 
 
 
 
 
 
 
 
 
 
5124
  msgstr ""
5125
 
5126
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:171
5127
+ msgid "Query IP Whois"
 
 
 
 
 
 
 
 
 
 
 
 
5128
  msgstr ""
5129
 
5130
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:192
5131
+ msgid "Unavailable"
5132
  msgstr ""
5133
 
5134
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:196
5135
+ msgid "Latitude"
5136
  msgstr ""
5137
 
5138
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:197
5139
+ msgid "Longitude"
 
5140
  msgstr ""
5141
 
5142
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:235
5143
+ msgid "No sessions at this IP"
5144
  msgstr ""
5145
 
5146
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:237
5147
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:421
5148
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:477
5149
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:146
5150
+ #: src/lib/src/Modules/Plugin/Strings.php:527
5151
+ #: src/lib/src/Modules/Plugin/Strings.php:529
5152
+ #: src/lib/src/Modules/SecurityAdmin/Insights/OverviewCards.php:20
5153
+ #: src/lib/src/Modules/SecurityAdmin/Insights/OverviewCards.php:28
5154
+ #: src/lib/src/Modules/SecurityAdmin/Insights/OverviewCards.php:59
5155
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:41
5156
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:44
5157
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:108
5158
+ #: src/lib/src/Tables/Render/WpListTable/Sessions.php:38
5159
+ #: src/wizards/base_wpsf.php:61
5160
+ msgid "Security Admin"
5161
  msgstr ""
5162
 
5163
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:238
5164
+ msgid "Logged-In At"
 
 
5165
  msgstr ""
5166
 
5167
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:239
5168
+ msgid "Last Seen At"
 
 
5169
  msgstr ""
5170
 
5171
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:299
5172
+ msgid "Visitor Requests"
 
 
 
 
 
 
 
5173
  msgstr ""
5174
 
5175
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:300
5176
+ msgid "No requests logged for this IP"
 
 
 
 
 
 
 
 
 
5177
  msgstr ""
5178
 
5179
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:302
5180
+ msgid "Query"
5181
  msgstr ""
5182
 
5183
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:303
5184
+ msgid "Verb"
5185
  msgstr ""
5186
 
5187
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:304
5188
+ msgid "Requested At"
 
5189
  msgstr ""
5190
 
5191
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:305
5192
+ #: src/lib/src/Modules/Traffic/Lib/TrafficTable/LoadRawTableData.php:139
5193
+ #: src/lib/src/Tables/DataTables/Build/Traffic/ForTraffic.php:64
5194
+ msgid "Response"
5195
  msgstr ""
5196
 
5197
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:306
5198
+ msgid "Code"
 
5199
  msgstr ""
5200
 
5201
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:307
5202
+ #: src/lib/src/Modules/Traffic/Lib/TrafficTable/LoadRawTableData.php:141
5203
+ msgid "Offense"
5204
  msgstr ""
5205
 
5206
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:344
5207
+ msgid "N/A"
5208
  msgstr ""
5209
 
5210
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:347
5211
+ msgid "Never Recorded"
5212
  msgstr ""
5213
 
5214
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:363
5215
+ msgid "Signal"
5216
  msgstr ""
5217
 
5218
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:364
5219
+ msgid "Score"
 
 
5220
  msgstr ""
5221
 
5222
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:365
5223
+ msgid "Total Reputation Score"
5224
  msgstr ""
5225
 
5226
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:366
5227
+ msgid "When"
5228
  msgstr ""
5229
 
5230
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:367
5231
+ msgid "Bad Bot Probability"
 
5232
  msgstr ""
5233
 
5234
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:368
5235
+ msgid "Delete All Bot Signals"
5236
  msgstr ""
5237
 
5238
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:370
5239
+ msgid "There are no bot signals for this IP address."
 
 
5240
  msgstr ""
5241
 
5242
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:418
5243
+ msgid "Audit Log Entries"
5244
  msgstr ""
5245
 
5246
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:419
5247
+ msgid "No logs at this IP"
5248
  msgstr ""
5249
 
5250
+ #: src/lib/src/Modules/IPs/Lib/IpAnalyse/BuildDisplay.php:423
5251
+ msgid "Logged At"
5252
+ msgstr ""
5253
+
5254
+ #: src/lib/src/Modules/IPs/Lib/Ops/AddIp.php:79
5255
+ msgid "Sorry, this is a PRO-only feature."
5256
+ msgstr ""
5257
+
5258
+ #: src/lib/src/Modules/IPs/Lib/ProcessOffenses.php:72
5259
+ msgid "No custom message provided."
5260
+ msgstr ""
5261
+
5262
+ #: src/lib/src/Modules/IPs/ModCon.php:139
5263
  msgid ""
5264
+ "Repeated login attempts that fail will result in a complete ban of your IP "
5265
+ "Address."
5266
  msgstr ""
5267
 
5268
+ #: src/lib/src/Modules/IPs/ModCon.php:146
5269
+ #, php-format
5270
  msgid ""
5271
+ "You have %s remaining offenses(s) against this site and then your IP address "
5272
+ "will be completely blocked."
5273
  msgstr ""
5274
 
5275
+ #: src/lib/src/Modules/IPs/ModCon.php:147
5276
+ msgid "Seriously, stop repeating what you are doing or you will be locked out."
5277
  msgstr ""
5278
 
5279
+ #: src/lib/src/Modules/IPs/Strings.php:16
5280
+ #: src/lib/src/Modules/Reporting/UI.php:110
5281
+ msgid "Connection Killed"
5282
+ msgstr ""
5283
+
5284
+ #: src/lib/src/Modules/IPs/Strings.php:18
5285
+ msgid "Visitor found on the Black List and their connection was killed."
5286
  msgstr ""
5287
 
5288
+ #: src/lib/src/Modules/IPs/Strings.php:22
5289
+ msgid "Connection Not Killed"
5290
  msgstr ""
5291
 
5292
+ #: src/lib/src/Modules/IPs/Strings.php:24
5293
+ msgid "IP address has a high reputation so connection allowed."
5294
  msgstr ""
5295
 
5296
+ #: src/lib/src/Modules/IPs/Strings.php:28
5297
+ #: src/lib/src/Modules/IPs/Strings.php:461
5298
+ msgid "Offense Triggered"
5299
  msgstr ""
5300
 
5301
+ #: src/lib/src/Modules/IPs/Strings.php:30
5302
  msgid ""
5303
+ "Auto Black List offenses counter was incremented from {{from}} to {{to}}."
 
5304
  msgstr ""
5305
 
5306
+ #: src/lib/src/Modules/IPs/Strings.php:34
5307
+ #: src/lib/src/Modules/IPs/Strings.php:462
5308
+ #: src/lib/src/Modules/Reporting/UI.php:117
5309
+ msgid "IP Blocked"
5310
  msgstr ""
5311
 
5312
+ #: src/lib/src/Modules/IPs/Strings.php:36
5313
+ msgid "IP blocked after incrementing offenses from {{from}} to {{to}}."
 
 
5314
  msgstr ""
5315
 
5316
+ #: src/lib/src/Modules/IPs/Strings.php:40
5317
+ #: src/lib/src/Modules/IPs/Strings.php:463
5318
+ msgid "IP Unblocked"
5319
  msgstr ""
5320
 
5321
+ #: src/lib/src/Modules/IPs/Strings.php:42
5322
+ msgid "IP removed from block list."
 
5323
  msgstr ""
5324
 
5325
+ #: src/lib/src/Modules/IPs/Strings.php:46
5326
+ msgid "IP Unblocked (Flag File)"
5327
  msgstr ""
5328
 
5329
+ #: src/lib/src/Modules/IPs/Strings.php:48
5330
+ msgid "IP address '{{ip}}' removed from blacklist using 'unblock' file flag."
 
 
 
5331
  msgstr ""
5332
 
5333
+ #: src/lib/src/Modules/IPs/Strings.php:52
5334
+ msgid "IP Block List Add (Auto)"
5335
  msgstr ""
5336
 
5337
+ #: src/lib/src/Modules/IPs/Strings.php:54
5338
+ msgid "IP address '{{ip}}' automatically added to block list."
5339
  msgstr ""
5340
 
5341
+ #: src/lib/src/Modules/IPs/Strings.php:58
5342
+ msgid "IP Block List Add (Manual)"
5343
  msgstr ""
5344
 
5345
+ #: src/lib/src/Modules/IPs/Strings.php:60
5346
+ msgid "IP address '{{ip}}' manually added to block list."
5347
  msgstr ""
5348
 
5349
+ #: src/lib/src/Modules/IPs/Strings.php:64
5350
+ msgid "IP Bypass List Add (Manual)"
5351
  msgstr ""
5352
 
5353
+ #: src/lib/src/Modules/IPs/Strings.php:66
5354
+ msgid "IP address '{{ip}}' manually added to bypass list."
5355
  msgstr ""
5356
 
5357
+ #: src/lib/src/Modules/IPs/Strings.php:70
5358
+ msgid "IP Bypass List Removed (Manual)"
 
5359
  msgstr ""
5360
 
5361
+ #: src/lib/src/Modules/IPs/Strings.php:72
5362
+ msgid "IP address '{{ip}}' manually removed from the bypass list."
5363
  msgstr ""
5364
 
5365
+ #: src/lib/src/Modules/IPs/Strings.php:76
5366
+ msgid "NotBot Registration"
5367
  msgstr ""
5368
 
5369
+ #: src/lib/src/Modules/IPs/Strings.php:78
5370
+ msgid "Visitor registered using NotBot."
5371
  msgstr ""
5372
 
5373
+ #: src/lib/src/Modules/IPs/Strings.php:82
5374
+ #: src/lib/src/Modules/IPs/Strings.php:88
5375
+ #: src/lib/src/Modules/IPs/Strings.php:96
5376
+ #: src/lib/src/Modules/IPs/Strings.php:103
5377
+ #: src/lib/src/Modules/IPs/Strings.php:110
5378
+ #: src/lib/src/Modules/IPs/Strings.php:118
5379
+ #: src/lib/src/Modules/IPs/Strings.php:125
5380
+ #: src/lib/src/Modules/IPs/Strings.php:132
5381
+ #: src/lib/src/Modules/Reporting/UI.php:85
5382
+ msgid "Bot Detection"
5383
  msgstr ""
5384
 
5385
+ #: src/lib/src/Modules/IPs/Strings.php:84
5386
+ msgid "404 detected at \"{{path}}\"."
5387
  msgstr ""
5388
 
5389
+ #: src/lib/src/Modules/IPs/Strings.php:89
5390
+ #: src/lib/src/Modules/IPs/Strings.php:399
5391
+ #: src/lib/src/Modules/IPs/Strings.php:445
5392
+ msgid "Fake Web Crawler"
5393
  msgstr ""
5394
 
5395
+ #: src/lib/src/Modules/IPs/Strings.php:91
5396
+ msgid "Fake Web Crawler detected at \"{{path}}\"."
 
 
5397
  msgstr ""
5398
 
5399
+ #: src/lib/src/Modules/IPs/Strings.php:92
5400
+ msgid "Fake Crawler misrepresented itself as \"{{crawler}}\"."
5401
  msgstr ""
5402
 
5403
+ #: src/lib/src/Modules/IPs/Strings.php:97
5404
+ #: src/lib/src/Modules/IPs/Strings.php:368
5405
+ #: src/lib/src/Modules/IPs/Strings.php:446
5406
+ msgid "Link Cheese"
5407
  msgstr ""
5408
 
5409
+ #: src/lib/src/Modules/IPs/Strings.php:99
5410
+ msgid "Link cheese access detected at \"{{path}}\"."
 
 
5411
  msgstr ""
5412
 
5413
+ #: src/lib/src/Modules/IPs/Strings.php:104
5414
+ #: src/lib/src/Modules/IPs/Strings.php:382
5415
+ msgid "Failed Login"
5416
  msgstr ""
5417
 
5418
+ #: src/lib/src/Modules/IPs/Strings.php:106
5419
+ msgid "Attempted login failed by user \"{{user_login}}\"."
5420
  msgstr ""
5421
 
5422
+ #: src/lib/src/Modules/IPs/Strings.php:111
5423
+ msgid "Invalid Username Login"
 
5424
  msgstr ""
5425
 
5426
+ #: src/lib/src/Modules/IPs/Strings.php:113
5427
+ msgid "Attempted login with invalid user \"{{user_login}}\"."
5428
  msgstr ""
5429
 
5430
+ #: src/lib/src/Modules/IPs/Strings.php:119
5431
+ msgid "Invalid User-Agent"
 
5432
  msgstr ""
5433
 
5434
+ #: src/lib/src/Modules/IPs/Strings.php:121
5435
+ msgid "Invalid user agent detected at \"{{useragent}}\"."
5436
  msgstr ""
5437
 
5438
+ #: src/lib/src/Modules/IPs/Strings.php:126
5439
+ #: src/lib/src/Modules/Lockdown/Insights/OverviewCards.php:45
5440
+ #: src/lib/src/Modules/Lockdown/Strings.php:21
5441
+ msgid "XML-RPC"
5442
  msgstr ""
5443
 
5444
+ #: src/lib/src/Modules/IPs/Strings.php:128
5445
+ msgid "Access to XML-RPC detected at \"{{path}}\"."
 
 
5446
  msgstr ""
5447
 
5448
+ #: src/lib/src/Modules/IPs/Strings.php:133
5449
+ #: src/lib/src/Modules/IPs/Strings.php:388
5450
+ msgid "Invalid Script Load"
5451
  msgstr ""
5452
 
5453
+ #: src/lib/src/Modules/IPs/Strings.php:135
5454
+ msgid "Tried to load an invalid WordPress PHP script \"{{script}}\"."
 
5455
  msgstr ""
5456
 
5457
+ #: src/lib/src/Modules/IPs/Strings.php:139
5458
+ msgid "Mark Comment SPAM (Manual)"
5459
  msgstr ""
5460
 
5461
+ #: src/lib/src/Modules/IPs/Strings.php:141
5462
+ msgid "Comment manually marked as SPAM."
5463
  msgstr ""
5464
 
5465
+ #: src/lib/src/Modules/IPs/Strings.php:145
5466
+ #: src/lib/src/Modules/IPs/Strings.php:151
5467
+ msgid "Mark Comment Not SPAM (Manual)"
 
 
5468
  msgstr ""
5469
 
5470
+ #: src/lib/src/Modules/IPs/Strings.php:147
5471
+ msgid "Comment manually marked as not SPAM."
5472
  msgstr ""
5473
 
5474
+ #: src/lib/src/Modules/IPs/Strings.php:153
5475
+ msgid "A custom offense was registered on the site."
5476
  msgstr ""
5477
 
5478
+ #: src/lib/src/Modules/IPs/Strings.php:177
5479
  msgid ""
5480
+ "The IP Manager allows you to whitelist, blacklist and configure auto-"
5481
+ "blacklist rules."
5482
  msgstr ""
5483
 
5484
+ #: src/lib/src/Modules/IPs/Strings.php:178
5485
+ #: src/lib/src/Modules/Plugin/Strings.php:544 src/wizards/plugin.php:624
5486
+ #: src/wizards/plugin.php:629
5487
+ msgid "IP Manager"
5488
  msgstr ""
5489
 
5490
+ #: src/lib/src/Modules/IPs/Strings.php:179
5491
+ msgid "You should also carefully review the automatic black list settings."
5492
  msgstr ""
5493
 
5494
+ #: src/lib/src/Modules/IPs/Strings.php:184
5495
+ msgid "Auto IP Blocking Rules"
5496
+ msgstr ""
5497
+
5498
+ #: src/lib/src/Modules/IPs/Strings.php:185
5499
+ msgid "Auto Blocking Rules"
5500
+ msgstr ""
5501
+
5502
+ #: src/lib/src/Modules/IPs/Strings.php:187
5503
+ msgid ""
5504
+ "The Automatic IP Black List system will block the IP addresses of naughty "
5505
+ "visitors after a specified number of offenses."
5506
+ msgstr ""
5507
+
5508
+ #: src/lib/src/Modules/IPs/Strings.php:188
5509
+ #: src/lib/src/Modules/IPs/Strings.php:265
5510
+ msgid "Automatic IP Black List"
5511
  msgstr ""
5512
 
5513
+ #: src/lib/src/Modules/IPs/Strings.php:189
5514
+ msgid ""
5515
+ "Think of 'offenses' as just a counter for the number of times a visitor does "
5516
+ "something bad."
5517
  msgstr ""
5518
 
5519
+ #: src/lib/src/Modules/IPs/Strings.php:191
5520
  #, php-format
5521
  msgid ""
5522
+ "When the counter reaches the limit below (default: %s), %s will block that "
5523
+ "IP completely."
5524
  msgstr ""
5525
 
5526
+ #: src/lib/src/Modules/IPs/Strings.php:199
5527
+ msgid "Login Bots"
 
 
5528
  msgstr ""
5529
 
5530
+ #: src/lib/src/Modules/IPs/Strings.php:200
5531
+ msgid "Detect & Capture Login Bots"
 
5532
  msgstr ""
5533
 
5534
+ #: src/lib/src/Modules/IPs/Strings.php:202
5535
+ #: src/lib/src/Modules/IPs/Strings.php:215
5536
+ #: src/lib/src/Modules/IPs/Strings.php:226
5537
+ #: src/lib/src/Modules/Integrations/Strings.php:52
5538
+ #: src/lib/src/Modules/Integrations/Strings.php:63
5539
+ msgid "Summary"
5540
  msgstr ""
5541
 
5542
+ #: src/lib/src/Modules/IPs/Strings.php:203
5543
+ msgid ""
5544
+ "Certain bots are designed to test your logins and this feature lets you "
5545
+ "decide how to handle them."
5546
  msgstr ""
5547
 
5548
+ #: src/lib/src/Modules/IPs/Strings.php:205
5549
+ #: src/lib/src/Modules/IPs/Strings.php:218
5550
+ #: src/lib/src/Modules/IPs/Strings.php:229
5551
+ msgid "Enable as many options as possible."
5552
  msgstr ""
5553
 
5554
+ #: src/lib/src/Modules/IPs/Strings.php:207
5555
+ msgid ""
5556
+ "Legitimate users may get their password wrong, so take care not to block "
5557
+ "this."
5558
  msgstr ""
5559
 
5560
+ #: src/lib/src/Modules/IPs/Strings.php:212
5561
+ msgid "Probing Bots"
5562
  msgstr ""
5563
 
5564
+ #: src/lib/src/Modules/IPs/Strings.php:213
5565
+ msgid "Detect & Capture Probing Bots"
 
 
 
5566
  msgstr ""
5567
 
5568
+ #: src/lib/src/Modules/IPs/Strings.php:216
5569
+ msgid ""
5570
+ "Bots are designed to probe and this feature is dedicated to detecting "
5571
+ "probing bots."
5572
  msgstr ""
5573
 
5574
+ #: src/lib/src/Modules/IPs/Strings.php:223
5575
+ msgid "Bot Behaviours"
5576
  msgstr ""
5577
 
5578
+ #: src/lib/src/Modules/IPs/Strings.php:224
5579
+ msgid "Detect Behaviours Common To Bots"
5580
  msgstr ""
5581
 
5582
+ #: src/lib/src/Modules/IPs/Strings.php:227
5583
+ msgid ""
5584
+ "Detect characteristics and behaviour commonly associated with illegitimate "
5585
+ "bots."
5586
  msgstr ""
5587
 
5588
+ #: src/lib/src/Modules/IPs/Strings.php:260
5589
+ msgid "Offense Limit"
5590
  msgstr ""
5591
 
5592
+ #: src/lib/src/Modules/IPs/Strings.php:261
5593
+ msgid "The number of permitted offenses before an IP address will be blocked"
5594
  msgstr ""
5595
 
5596
+ #: src/lib/src/Modules/IPs/Strings.php:263
5597
+ #, php-format
5598
+ msgid ""
5599
+ "An offense is registered against an IP address each time a visitor trips the "
5600
+ "defenses of the %s plugin."
5601
  msgstr ""
5602
 
5603
+ #: src/lib/src/Modules/IPs/Strings.php:264
5604
+ msgid ""
5605
+ "When the number of these offenses exceeds the limit, they are automatically "
5606
+ "blocked from accessing the site."
5607
  msgstr ""
5608
 
5609
+ #: src/lib/src/Modules/IPs/Strings.php:265
5610
+ #, php-format
5611
+ msgid "Set this to \"0\" to turn off the %s feature."
5612
  msgstr ""
5613
 
5614
+ #: src/lib/src/Modules/IPs/Strings.php:270
5615
+ msgid "Auto Block Expiration"
 
 
 
 
5616
  msgstr ""
5617
 
5618
+ #: src/lib/src/Modules/IPs/Strings.php:271
5619
+ msgid "After 1 \"X\" a black listed IP will be removed from the black list"
5620
  msgstr ""
5621
 
5622
+ #: src/lib/src/Modules/IPs/Strings.php:273
5623
+ msgid "Blocked IP addresses are eventually removed."
5624
  msgstr ""
5625
 
5626
+ #: src/lib/src/Modules/IPs/Strings.php:274
5627
+ msgid "This option lets you specify how long they should be kept."
5628
  msgstr ""
5629
 
5630
+ #: src/lib/src/Modules/IPs/Strings.php:275
5631
+ msgid "Large, permanent IP Block Lists will degrade site performance."
 
 
5632
  msgstr ""
5633
 
5634
+ #: src/lib/src/Modules/IPs/Strings.php:276
5635
+ msgid ""
5636
+ "Shorter IP black lists are more efficient and a more intelligent use of an "
5637
+ "IP-based blocking system."
5638
  msgstr ""
5639
 
5640
+ #: src/lib/src/Modules/IPs/Strings.php:281
5641
+ msgid "User Auto Unblock"
 
5642
  msgstr ""
5643
 
5644
+ #: src/lib/src/Modules/IPs/Strings.php:282
5645
+ msgid "Allow Visitors To Unblock Their IP"
5646
  msgstr ""
5647
 
5648
+ #: src/lib/src/Modules/IPs/Strings.php:283
5649
+ msgid ""
5650
+ "Allow visitors blocked by the plugin to automatically unblock themselves."
5651
  msgstr ""
5652
 
5653
+ #: src/lib/src/Modules/IPs/Strings.php:287
5654
+ #: src/lib/src/Modules/IPs/Strings.php:288
5655
+ msgid "Request Path Whitelist"
5656
  msgstr ""
5657
 
5658
+ #: src/lib/src/Modules/IPs/Strings.php:289
5659
+ msgid "A list of request paths that will never trigger an offense."
5660
  msgstr ""
5661
 
5662
+ #: src/lib/src/Modules/IPs/Strings.php:293
5663
+ msgid ""
5664
+ "The paths are compared against only the request path, not the query portion."
5665
  msgstr ""
5666
 
5667
+ #: src/lib/src/Modules/IPs/Strings.php:294
5668
+ msgid ""
5669
+ "If a path you add matches your website root (/), it'll be removed "
5670
+ "automatically."
5671
  msgstr ""
5672
 
5673
+ #: src/lib/src/Modules/IPs/Strings.php:299
5674
+ msgid "AntiBot Minimum Score"
5675
  msgstr ""
5676
 
5677
+ #: src/lib/src/Modules/IPs/Strings.php:300
5678
+ msgid "AntiBot Minimum Score (Percentage)"
5679
  msgstr ""
5680
 
5681
+ #: src/lib/src/Modules/IPs/Strings.php:302
5682
+ msgid ""
5683
+ "Every IP address accessing your site gets its own unique visitor score - the "
5684
+ "higher the score, the better the visitor i.e. the more likely it's human."
5685
  msgstr ""
5686
 
5687
+ #: src/lib/src/Modules/IPs/Strings.php:303
5688
+ msgid ""
5689
+ "A score of '100' would mean it's almost certainly good, a score of '0' means "
5690
+ "it's highly likely to be a bad bot."
5691
  msgstr ""
5692
 
5693
+ #: src/lib/src/Modules/IPs/Strings.php:304
5694
+ msgid ""
5695
+ "When a bot tries to login, or post a comment, we test its visitor score."
5696
  msgstr ""
5697
 
5698
+ #: src/lib/src/Modules/IPs/Strings.php:305
5699
+ msgid ""
5700
+ "If the visitor score fails to meet your Minimum AntiBot Score, we prevent "
5701
+ "the request. If its higher, we allow it."
5702
  msgstr ""
5703
 
5704
+ #: src/lib/src/Modules/IPs/Strings.php:306
5705
+ msgid ""
5706
+ "This means: choose a higher minimum score to be more strict and capture more "
5707
+ "bots (but potentially block someone that appears to be a bot, but isn't)."
5708
  msgstr ""
5709
 
5710
+ #: src/lib/src/Modules/IPs/Strings.php:307
5711
+ msgid ""
5712
+ "Or choose a lower minimum score to perhaps allow through more bots (but "
5713
+ "reduce the chances of accidentally blocking legitimate visitors)."
5714
  msgstr ""
5715
 
5716
+ #: src/lib/src/Modules/IPs/Strings.php:312
5717
+ msgid "High Reputation Bypass"
 
5718
  msgstr ""
5719
 
5720
+ #: src/lib/src/Modules/IPs/Strings.php:313
5721
+ msgid "Prevent Visitors With A High Reputation Scores From Being Blocked"
5722
  msgstr ""
5723
 
5724
+ #: src/lib/src/Modules/IPs/Strings.php:315
5725
  msgid ""
5726
+ "Visitors that have accumulated a high IP reputation and AntiBot score should "
5727
+ "ideally never be blocked."
5728
  msgstr ""
5729
 
5730
+ #: src/lib/src/Modules/IPs/Strings.php:316
5731
+ msgid ""
5732
+ "This option ensures that visitors with a high reputation never have their IP "
5733
+ "blocked by Shield."
5734
  msgstr ""
5735
 
5736
+ #: src/lib/src/Modules/IPs/Strings.php:321
5737
+ msgid "Force NotBot JS"
5738
  msgstr ""
5739
 
5740
+ #: src/lib/src/Modules/IPs/Strings.php:322
5741
+ msgid "Force Loading Of NotBot JS"
5742
  msgstr ""
5743
 
5744
+ #: src/lib/src/Modules/IPs/Strings.php:324
5745
+ #, php-format
5746
+ msgid "%s uses Javascript to help identify bots versus legitimate visitors."
5747
  msgstr ""
5748
 
5749
+ #: src/lib/src/Modules/IPs/Strings.php:326
5750
+ msgid ""
5751
+ "However, caching plugins often interfere, preventing it loading for your "
5752
+ "visitors."
5753
  msgstr ""
5754
 
5755
+ #: src/lib/src/Modules/IPs/Strings.php:327
5756
+ msgid ""
5757
+ "This may cause some of your legitimate users to be identified as bots, when "
5758
+ "they're not."
5759
  msgstr ""
5760
 
5761
+ #: src/lib/src/Modules/IPs/Strings.php:328
5762
+ msgid ""
5763
+ "Turn this option on if you're using an aggressive caching system, to ensure "
5764
+ "NotBot JS is loaded for all visitors."
5765
  msgstr ""
5766
 
5767
+ #: src/lib/src/Modules/IPs/Strings.php:329
5768
+ msgid ""
5769
+ "When this option is disabled we'll automatically optimise loading of the "
5770
+ "Javascript so it's only loaded where it's required."
5771
  msgstr ""
5772
 
5773
+ #: src/lib/src/Modules/IPs/Strings.php:330
5774
+ msgid ""
5775
+ "You should test your site and keep a lookout for user login issues after "
5776
+ "disabling this option."
5777
  msgstr ""
5778
 
5779
+ #: src/lib/src/Modules/IPs/Strings.php:335
5780
+ msgid "Login Failed"
5781
  msgstr ""
5782
 
5783
+ #: src/lib/src/Modules/IPs/Strings.php:336
5784
+ msgid "Visitor Triggers The IP Offense System Through A Failed Login"
5785
  msgstr ""
5786
 
5787
+ #: src/lib/src/Modules/IPs/Strings.php:337
5788
+ msgid "This message is displayed if the visitor fails a login attempt."
5789
+ msgstr ""
5790
+
5791
+ #: src/lib/src/Modules/IPs/Strings.php:341
5792
+ msgid "Remaining Offenses"
5793
+ msgstr ""
5794
+
5795
+ #: src/lib/src/Modules/IPs/Strings.php:342
5796
+ msgid "Visitor Triggers The IP Offenses System Through A Firewall Block"
5797
  msgstr ""
5798
 
5799
+ #: src/lib/src/Modules/IPs/Strings.php:343
5800
  msgid ""
5801
+ "This message is displayed if the visitor triggered the IP Offense system and "
5802
+ "reports how many offenses remain before being blocked."
5803
  msgstr ""
5804
 
5805
+ #: src/lib/src/Modules/IPs/Strings.php:347
5806
+ msgid "404 Detect"
5807
  msgstr ""
5808
 
5809
+ #: src/lib/src/Modules/IPs/Strings.php:348
5810
+ msgid "Identify A Bot When It Hits A 404"
5811
  msgstr ""
5812
 
5813
+ #: src/lib/src/Modules/IPs/Strings.php:350
5814
+ msgid "Detect when a visitor tries to load a non-existent page."
5815
  msgstr ""
5816
 
5817
+ #: src/lib/src/Modules/IPs/Strings.php:351
5818
  msgid ""
5819
+ "Care should be taken to ensure that your website doesn't generate 404 errors "
5820
+ "for normal visitors."
5821
  msgstr ""
5822
 
5823
+ #: src/lib/src/Modules/IPs/Strings.php:353
5824
+ msgid ""
5825
+ "404 errors generated for the following file types won't trigger an offense"
5826
  msgstr ""
5827
 
5828
+ #: src/lib/src/Modules/IPs/Strings.php:360
5829
+ msgid "XML-RPC Access"
5830
  msgstr ""
5831
 
5832
+ #: src/lib/src/Modules/IPs/Strings.php:361
5833
+ msgid "Identify A Bot When It Accesses XML-RPC"
5834
  msgstr ""
5835
 
5836
+ #: src/lib/src/Modules/IPs/Strings.php:362
5837
+ msgid ""
5838
+ "If you don't use XML-RPC, there's no reason anything should be accessing it."
5839
  msgstr ""
5840
 
5841
+ #: src/lib/src/Modules/IPs/Strings.php:363
5842
  msgid ""
5843
+ "Be careful the ensure you don't block legitimate XML-RPC traffic if your "
5844
+ "site needs it."
5845
  msgstr ""
5846
 
5847
+ #: src/lib/src/Modules/IPs/Strings.php:364
5848
+ msgid ""
5849
+ "We recommend logging here in-case of blocking valid request unless you're "
5850
+ "sure."
5851
  msgstr ""
5852
 
5853
+ #: src/lib/src/Modules/IPs/Strings.php:369
5854
+ msgid "Tempt A Bot With A Fake Link To Follow"
 
5855
  msgstr ""
5856
 
5857
+ #: src/lib/src/Modules/IPs/Strings.php:370
5858
+ msgid "Detect a bot when it follows a fake 'no-follow' link."
5859
  msgstr ""
5860
 
5861
+ #: src/lib/src/Modules/IPs/Strings.php:371
5862
  msgid ""
5863
+ "This works because legitimate web crawlers respect 'robots.txt' and "
5864
+ "'nofollow' directives."
 
 
 
 
5865
  msgstr ""
5866
 
5867
+ #: src/lib/src/Modules/IPs/Strings.php:375
5868
+ msgid "Invalid Usernames"
5869
  msgstr ""
5870
 
5871
+ #: src/lib/src/Modules/IPs/Strings.php:376
5872
+ msgid "Detect Attempted Logins With Usernames That Don't Exist"
 
 
 
 
 
5873
  msgstr ""
5874
 
5875
+ #: src/lib/src/Modules/IPs/Strings.php:377
5876
+ msgid "Identify a Bot when it tries to login with a non-existent username."
5877
  msgstr ""
5878
 
5879
+ #: src/lib/src/Modules/IPs/Strings.php:378
5880
+ msgid "This includes the default 'admin' if you've removed that account."
5881
  msgstr ""
5882
 
5883
+ #: src/lib/src/Modules/IPs/Strings.php:383
5884
+ msgid "Detect Failed Login Attempts For Users That Exist"
5885
  msgstr ""
5886
 
5887
+ #: src/lib/src/Modules/IPs/Strings.php:384
5888
+ msgid ""
5889
+ "Penalise a visitor when they try to login using a valid username, but it "
5890
+ "fails."
5891
  msgstr ""
5892
 
5893
+ #: src/lib/src/Modules/IPs/Strings.php:389
5894
+ msgid "Identify Bot Attempts To Load WordPress In A Non-Standard Way"
5895
  msgstr ""
5896
 
5897
+ #: src/lib/src/Modules/IPs/Strings.php:391
5898
+ msgid ""
5899
+ "Detect when a bot tries to load WordPress directly from a file that isn't "
5900
+ "normally used to load WordPress."
5901
  msgstr ""
5902
 
5903
+ #: src/lib/src/Modules/IPs/Strings.php:392
5904
+ msgid "WordPress should only be loaded in a limited number of ways."
5905
  msgstr ""
5906
 
5907
+ #: src/lib/src/Modules/IPs/Strings.php:394
5908
+ #, php-format
5909
+ msgid ""
5910
+ "Set this option to \"%s\" and monitor the Audit Trail, since some plugins, "
5911
+ "themes, or custom integrations may trigger this."
5912
  msgstr ""
5913
 
5914
+ #: src/lib/src/Modules/IPs/Strings.php:394
5915
+ #: src/lib/src/Modules/Plugin/Strings.php:494
5916
+ msgid "Audit Log Only"
5917
  msgstr ""
5918
 
5919
+ #: src/lib/src/Modules/IPs/Strings.php:400
5920
+ msgid "Detect Fake Search Engine Crawlers"
 
5921
  msgstr ""
5922
 
5923
+ #: src/lib/src/Modules/IPs/Strings.php:402
5924
+ msgid ""
5925
+ "Identify a visitor as a Bot when it presents as an official web crawler, but "
5926
+ "analysis shows it's fake."
5927
  msgstr ""
5928
 
5929
+ #: src/lib/src/Modules/IPs/Strings.php:403
5930
+ msgid "Many bots pretend to be a Google Bot."
5931
  msgstr ""
5932
 
5933
+ #: src/lib/src/Modules/IPs/Strings.php:404
5934
+ msgid ""
5935
+ "We can then know that a bot isn't here for anything good and block them."
5936
  msgstr ""
5937
 
5938
+ #: src/lib/src/Modules/IPs/Strings.php:409
5939
+ msgid "Empty User Agents"
5940
  msgstr ""
5941
 
5942
+ #: src/lib/src/Modules/IPs/Strings.php:410
5943
+ msgid "Detect Requests With Empty User Agents"
 
 
 
5944
  msgstr ""
5945
 
5946
+ #: src/lib/src/Modules/IPs/Strings.php:412
5947
+ msgid "Identify a bot when the user agent is not provided."
5948
  msgstr ""
5949
 
5950
+ #: src/lib/src/Modules/IPs/Strings.php:414
5951
+ msgid "For example, your browser user agent is"
5952
  msgstr ""
5953
 
5954
+ #: src/lib/src/Modules/IPs/Strings.php:439
5955
+ msgid "New Visitor Bonus"
5956
  msgstr ""
5957
 
5958
+ #: src/lib/src/Modules/IPs/Strings.php:440
5959
+ msgid "A Known Service Provider/Bot"
5960
  msgstr ""
5961
 
5962
+ #: src/lib/src/Modules/IPs/Strings.php:441
5963
+ msgid "\"Not Bot\" Registration"
 
5964
  msgstr ""
5965
 
5966
+ #: src/lib/src/Modules/IPs/Strings.php:442
5967
+ msgid "Any Frontend Page Visited"
5968
  msgstr ""
5969
 
5970
+ #: src/lib/src/Modules/IPs/Strings.php:443
5971
+ msgid "Login Page Visited"
 
5972
  msgstr ""
5973
 
5974
+ #: src/lib/src/Modules/IPs/Strings.php:444
5975
+ msgid "404 Triggered"
 
 
 
 
 
 
 
 
 
 
 
5976
  msgstr ""
5977
 
5978
+ #: src/lib/src/Modules/IPs/Strings.php:447
5979
+ msgid "Login Fail"
5980
  msgstr ""
5981
 
5982
+ #: src/lib/src/Modules/IPs/Strings.php:448
5983
+ msgid "Invalid User Agent"
 
5984
  msgstr ""
5985
 
5986
+ #: src/lib/src/Modules/IPs/Strings.php:449
5987
+ msgid "XMLRPC Access"
 
5988
  msgstr ""
5989
 
5990
+ #: src/lib/src/Modules/IPs/Strings.php:450
5991
+ msgid "Invalid Login Username"
 
5992
  msgstr ""
5993
 
5994
+ #: src/lib/src/Modules/IPs/Strings.php:451
5995
+ msgid "Invalid Script Access"
5996
  msgstr ""
5997
 
5998
+ #: src/lib/src/Modules/IPs/Strings.php:452
5999
+ msgid "Cooldown Triggered"
 
 
6000
  msgstr ""
6001
 
6002
+ #: src/lib/src/Modules/IPs/Strings.php:453
6003
+ msgid "Comment Triggered Human SPAM Detection"
6004
  msgstr ""
6005
 
6006
+ #: src/lib/src/Modules/IPs/Strings.php:454
6007
+ msgid "Comment Marked As SPAM"
 
6008
  msgstr ""
6009
 
6010
+ #: src/lib/src/Modules/IPs/Strings.php:455
6011
+ msgid "Comment Unmarked As SPAM"
6012
  msgstr ""
6013
 
6014
+ #: src/lib/src/Modules/IPs/Strings.php:456
6015
+ msgid "Authenticated With Site"
6016
  msgstr ""
6017
 
6018
+ #: src/lib/src/Modules/IPs/Strings.php:457
6019
+ #: src/lib/src/Modules/Traffic/Strings.php:15
6020
+ msgid "Rate Limit Exceeded"
 
6021
  msgstr ""
6022
 
6023
+ #: src/lib/src/Modules/IPs/Strings.php:458
6024
+ msgid "Captcha Verification Passed"
6025
  msgstr ""
6026
 
6027
+ #: src/lib/src/Modules/IPs/Strings.php:459
6028
+ msgid "Captcha Verification Failed"
6029
  msgstr ""
6030
 
6031
+ #: src/lib/src/Modules/IPs/Strings.php:460
6032
+ msgid "Firewall Triggered"
6033
  msgstr ""
6034
 
6035
+ #: src/lib/src/Modules/IPs/Strings.php:464
6036
+ msgid "IP Bypassed"
 
6037
  msgstr ""
6038
 
6039
+ #: src/lib/src/Modules/IPs/UI.php:34
6040
+ #, php-format
6041
+ msgid "Offenses required for IP block: %s"
6042
  msgstr ""
6043
 
6044
+ #: src/lib/src/Modules/IPs/UI.php:39
6045
+ #, php-format
6046
+ msgid "IPs on block list auto-expire after: %s"
 
 
 
 
 
 
 
 
 
 
6047
  msgstr ""
6048
 
6049
+ #: src/lib/src/Modules/IPs/UI.php:48
6050
+ msgid "IP Bypass List"
 
6051
  msgstr ""
6052
 
6053
+ #: src/lib/src/Modules/IPs/UI.php:49
6054
+ msgid "IP Block List"
 
6055
  msgstr ""
6056
 
6057
+ #: src/lib/src/Modules/IPs/UI.php:50
6058
+ #, php-format
6059
+ msgid "IP addresses that are never blocked and bypass all %s rules."
6060
  msgstr ""
6061
 
6062
+ #: src/lib/src/Modules/IPs/UI.php:51
6063
  #, php-format
6064
+ msgid "IP addresses that have tripped %s defenses."
6065
  msgstr ""
6066
 
6067
+ #: src/lib/src/Modules/IPs/UI.php:52
6068
+ msgid "Enter IP address to block"
 
 
6069
  msgstr ""
6070
 
6071
+ #: src/lib/src/Modules/IPs/UI.php:53
6072
+ msgid "Supply IP address to add to bypass list"
6073
  msgstr ""
6074
 
6075
+ #: src/lib/src/Modules/IPs/UI.php:54
6076
+ msgid "Enter IP address"
6077
  msgstr ""
6078
 
6079
+ #: src/lib/src/Modules/IPs/UI.php:55
6080
+ msgid "Label for IP"
 
 
6081
  msgstr ""
6082
 
6083
+ #: src/lib/src/Modules/IPs/UI.php:56
6084
+ msgid "New IP"
 
6085
  msgstr ""
6086
 
6087
+ #: src/lib/src/Modules/IPs/UI.php:57
6088
+ msgid "Filter By IP"
6089
  msgstr ""
6090
 
6091
+ #: src/lib/src/Modules/IPs/UI.php:59
6092
+ msgid "Manage Block List"
 
6093
  msgstr ""
6094
 
6095
+ #: src/lib/src/Modules/IPs/UI.php:60
6096
+ msgid "Manage Bypass List"
 
6097
  msgstr ""
6098
 
6099
+ #: src/lib/src/Modules/IPs/UI.php:61 src/lib/src/Tables/Build/BaseBuild.php:205
6100
+ #: src/lib/src/Tables/DataTables/LoadData/BaseLoadTableData.php:28
6101
+ #: src/lib/src/Tables/DataTables/LoadData/BaseLoadTableData.php:35
6102
+ msgid "IP Analysis"
 
 
6103
  msgstr ""
6104
 
6105
+ #: src/lib/src/Modules/IPs/UI.php:84
6106
+ msgid "IP blocking is turned-off because the offenses limit is set to 0."
6107
  msgstr ""
6108
 
6109
+ #: src/lib/src/Modules/IPs/UI.php:91
6110
+ #, php-format
6111
+ msgid ""
6112
+ "The AntiBot Detection Engine is disabled when set to a minimum score of %s."
6113
  msgstr ""
6114
 
6115
+ #: src/lib/src/Modules/IPs/UI.php:99
6116
+ msgid ""
6117
+ "Shield couldn't determine whether the NotBot JS was loading correctly on "
6118
+ "your site."
6119
  msgstr ""
6120
 
6121
+ #: src/lib/src/Modules/IPs/UI.php:108
6122
+ msgid "Since the offenses limit is set to 0, these options have no effect."
6123
  msgstr ""
6124
 
6125
+ #: src/lib/src/Modules/IPs/UI.php:112
6126
+ msgid ""
6127
+ "Your User Agent appears to be empty. We recommend not turning on this option."
6128
  msgstr ""
6129
 
6130
+ #: src/lib/src/Modules/IPs/UI.php:131
6131
+ msgid "Select IP To Analyse"
 
 
6132
  msgstr ""
6133
 
6134
+ #: src/lib/src/Modules/IPs/WpCli/Add.php:51
6135
+ msgid "IP address added successfully."
6136
  msgstr ""
6137
 
6138
+ #: src/lib/src/Modules/IPs/WpCli/Remove.php:42
6139
+ msgid "IP address removed successfully."
6140
  msgstr ""
6141
 
6142
+ #: src/lib/src/Modules/IPs/WpCli/Remove.php:43
6143
+ msgid "IP address couldn't be removed. (It may not be on this list)"
6144
  msgstr ""
6145
 
6146
+ #: src/lib/src/Modules/Insights/Lib/OverviewCards.php:19
6147
+ msgid "Danger"
 
 
6148
  msgstr ""
6149
 
6150
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:33
6151
+ msgid "NO TITLE"
6152
  msgstr ""
6153
 
6154
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:91
6155
+ msgid "Manage IPs"
6156
  msgstr ""
6157
 
6158
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:97
6159
+ msgid "Blocking Rules"
 
 
 
6160
  msgstr ""
6161
 
6162
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:102
6163
+ msgid "AntiBot Rules"
6164
  msgstr ""
6165
 
6166
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:109
6167
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:145
6168
+ #, php-format
6169
+ msgid "Download (%s)"
6170
  msgstr ""
6171
 
6172
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:115
6173
+ msgid "IPs & Bots"
6174
  msgstr ""
6175
 
6176
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:119
6177
+ msgid ""
6178
+ "Protection begins by detecting bad bots - Review and Analyse all visitor IPs "
6179
+ "that have an impact on your site."
 
 
6180
  msgstr ""
6181
 
6182
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:134
6183
+ msgid "View Log"
 
6184
  msgstr ""
6185
 
6186
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:140
6187
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:190
6188
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:448
6189
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:477
6190
+ msgid "Configure"
6191
  msgstr ""
6192
 
6193
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:151
6194
+ msgid "Glossary"
6195
  msgstr ""
6196
 
6197
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:162
6198
+ msgid ""
6199
+ "Track and review all important actions taken on your site - see the Who, "
6200
+ "What and When."
6201
  msgstr ""
6202
 
6203
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:184
6204
+ #: src/lib/src/Modules/Insights/UI.php:195
6205
+ msgid "Scan Results"
6206
  msgstr ""
6207
 
6208
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:195
6209
+ msgid "Guide"
 
 
 
 
6210
  msgstr ""
6211
 
6212
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:203
6213
+ msgid "Scans"
6214
  msgstr ""
6215
 
6216
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:207
6217
+ #, php-format
6218
+ msgid "Run a %s scan at any time, or view the results from the latest scan."
6219
  msgstr ""
6220
 
6221
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:219
6222
+ msgid "Search"
 
 
6223
  msgstr ""
6224
 
6225
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:224
6226
+ msgid "Use Search to find any option within the entire plugin"
6227
  msgstr ""
6228
 
6229
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:239
6230
+ #: src/lib/src/Modules/Insights/UI.php:206
6231
+ msgid "Reports"
6232
  msgstr ""
6233
 
6234
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:244
 
6235
  msgid ""
6236
+ "Reports use the built-in stats to show you how Shield is working to secure "
6237
+ "your site."
6238
  msgstr ""
6239
 
6240
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:249
6241
+ #: src/lib/src/Modules/Reporting/UI.php:128
6242
+ msgid "Stats"
6243
  msgstr ""
6244
 
6245
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:255
6246
+ msgid "Charts"
6247
  msgstr ""
6248
 
6249
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:268
6250
+ msgid "Overview"
6251
+ msgstr ""
6252
+
6253
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:272
6254
+ #, php-format
6255
  msgid ""
6256
+ "Review your entire %s configuration at a glance to see what's working and "
6257
+ "what's not."
6258
  msgstr ""
6259
 
6260
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:302
6261
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:482
6262
+ msgid "Config"
6263
+ msgstr ""
6264
+
6265
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:305
6266
+ #, php-format
6267
  msgid ""
6268
+ "%s is a big plugin split into modules, and each with their own options - use "
6269
+ "these jump-off points to find the specific option you need."
6270
  msgstr ""
6271
 
6272
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:318
6273
+ #: src/lib/src/Modules/Integrations/Strings.php:49
6274
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:362
6275
+ msgid "Integrations"
6276
  msgstr ""
6277
 
6278
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:320
6279
+ msgid ""
6280
+ "Integrate with your favourite plugins to block SPAM and manage Shield better."
6281
  msgstr ""
6282
 
6283
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:325
6284
+ msgid "Contact Form SPAM"
6285
  msgstr ""
6286
 
6287
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:330
6288
+ msgid "Custom Login Forms"
6289
  msgstr ""
6290
 
6291
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:342
6292
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:384
6293
+ msgid "View Docs"
 
 
6294
  msgstr ""
6295
 
6296
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:361
6297
+ #: src/lib/src/Modules/License/Strings.php:43
6298
+ msgid "Check License"
6299
  msgstr ""
6300
 
6301
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:367
6302
+ #: src/lib/src/Modules/Insights/UI.php:29
6303
+ #: src/lib/src/Modules/Insights/UI.php:208
6304
+ msgid "Free Trial"
6305
  msgstr ""
6306
 
6307
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:374
6308
+ msgid "ShieldPRO Features"
6309
  msgstr ""
6310
 
6311
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:382
6312
+ #: src/lib/src/Modules/Insights/UI.php:204
6313
+ msgid "ShieldPRO"
6314
  msgstr ""
6315
 
6316
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:382
6317
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:310
6318
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:317
6319
+ msgid "Go PRO!"
6320
  msgstr ""
6321
 
6322
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:399
6323
+ #: src/lib/src/Modules/Insights/UI.php:205
6324
+ msgid "Import / Export"
6325
  msgstr ""
6326
 
6327
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:410
6328
+ #: src/lib/src/Modules/Insights/UI.php:202
6329
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:330
6330
+ msgid "Admin Notes"
6331
  msgstr ""
6332
 
6333
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:416
6334
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:391
6335
+ msgid "Debug Info"
6336
  msgstr ""
6337
 
6338
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:424
6339
+ msgid "Tools"
6340
  msgstr ""
6341
 
6342
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:427
6343
+ msgid ""
6344
+ "Important security tools, such a import/export, whitelabel and admin notes."
6345
  msgstr ""
6346
 
6347
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:442
6348
+ msgid "View Traffic"
6349
  msgstr ""
6350
 
6351
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:455
6352
+ #: src/lib/src/Modules/Insights/UI.php:201
6353
+ msgid "Traffic"
6354
  msgstr ""
6355
 
6356
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:458
6357
+ msgid "Monitor and watch traffic as it hits your site."
6358
  msgstr ""
6359
 
6360
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:472
6361
+ msgid "View Sessions"
6362
  msgstr ""
6363
 
6364
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:482
6365
+ msgid "Sessions"
6366
  msgstr ""
6367
 
6368
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:493
6369
+ #: src/lib/src/Modules/UserManagement/Strings.php:155
6370
+ msgid "User Suspension"
6371
  msgstr ""
6372
 
6373
+ #: src/lib/src/Modules/Insights/Lib/SideMenuBuilder.php:503
6374
+ msgid ""
6375
+ "View sessions, and configure session timeouts and passwords requirements."
6376
  msgstr ""
6377
 
6378
+ #: src/lib/src/Modules/Insights/ModCon.php:70
6379
+ msgid "Please select an action to perform."
 
 
 
 
 
 
6380
  msgstr ""
6381
 
6382
+ #: src/lib/src/Modules/Insights/ModCon.php:72
6383
+ msgid "Are you absolutely sure?"
 
6384
  msgstr ""
6385
 
6386
+ #: src/lib/src/Modules/Insights/Strings.php:15
6387
+ #, php-format
6388
+ msgid "%s Security Insights"
6389
  msgstr ""
6390
 
6391
+ #: src/lib/src/Modules/Insights/UI.php:27
6392
+ msgid "Updates and Changes"
 
6393
  msgstr ""
6394
 
6395
+ #: src/lib/src/Modules/Insights/UI.php:28
6396
+ msgid "Event Details"
6397
  msgstr ""
6398
 
6399
+ #: src/lib/src/Modules/Insights/UI.php:45
6400
+ msgid "Click To Filter By Security Area or Status"
6401
  msgstr ""
6402
 
6403
+ #: src/lib/src/Modules/Insights/UI.php:46
6404
+ msgid "Clear Filter"
 
 
 
 
 
6405
  msgstr ""
6406
 
6407
+ #: src/lib/src/Modules/Insights/UI.php:191
6408
+ msgid "Quick Stats"
6409
  msgstr ""
6410
 
6411
+ #: src/lib/src/Modules/Insights/UI.php:192
6412
+ msgid "Plugin Settings"
6413
  msgstr ""
6414
 
6415
+ #: src/lib/src/Modules/Insights/UI.php:194
6416
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:113
6417
+ msgid "Security Overview"
6418
  msgstr ""
6419
 
6420
+ #: src/lib/src/Modules/Insights/UI.php:196
6421
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:135
6422
+ msgid "Run Scans"
6423
  msgstr ""
6424
 
6425
+ #: src/lib/src/Modules/Insights/UI.php:197
6426
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:377
6427
+ msgid "Docs"
6428
  msgstr ""
6429
 
6430
+ #: src/lib/src/Modules/Insights/UI.php:198
6431
+ msgid "IP Management and Analysis"
6432
  msgstr ""
6433
 
6434
+ #: src/lib/src/Modules/Insights/UI.php:209
6435
+ msgid "Wizard"
 
 
 
 
 
6436
  msgstr ""
6437
 
6438
+ #: src/lib/src/Modules/Insights/UI.php:313
6439
+ #: src/lib/src/Modules/Insights/UI.php:351
6440
+ msgid "Release Date"
 
 
6441
  msgstr ""
6442
 
6443
+ #: src/lib/src/Modules/Insights/UI.php:315
6444
+ #: src/lib/src/Modules/Insights/UI.php:353
6445
+ msgid "Full Release Announcement"
 
 
6446
  msgstr ""
6447
 
6448
+ #: src/lib/src/Modules/Integrations/Lib/Bots/Spam/Handlers/Base.php:30
6449
+ #, php-format
6450
+ msgid "This appears to be spam as it failed %s AntiBot protection checks."
 
6451
  msgstr ""
6452
 
6453
+ #: src/lib/src/Modules/Integrations/Lib/Bots/Spam/Handlers/FormidableForms.php:15
6454
+ msgid "Your entry appears to be spam!"
 
 
 
6455
  msgstr ""
6456
 
6457
+ #: src/lib/src/Modules/Integrations/Lib/Bots/Spam/Handlers/KaliForms.php:13
6458
+ msgid "SPAM Bot detected."
 
 
 
 
 
6459
  msgstr ""
6460
 
6461
+ #: src/lib/src/Modules/Integrations/Lib/Bots/UserForms/Handlers/Base.php:100
6462
+ #, php-format
6463
+ msgid "%s Bot Check Failed."
6464
  msgstr ""
6465
 
6466
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Client/Actions/ApiActionInit.php:22
6467
+ msgid "ShieldPRO license verified"
 
6468
  msgstr ""
6469
 
6470
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Client/Actions/ApiActionInit.php:23
6471
+ msgid "ShieldPRO license couldn't be found"
 
 
6472
  msgstr ""
6473
 
6474
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Client/Actions/ApiActionInit.php:35
6475
+ msgid "MainWP Integration Enabled"
 
 
6476
  msgstr ""
6477
 
6478
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Client/Actions/ApiActionInit.php:36
6479
+ msgid "MainWP Integration couldn't be enabled."
 
 
6480
  msgstr ""
6481
 
6482
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/Ajax/AjaxHandlerMainwp.php:29
6483
+ #, php-format
6484
+ msgid "Not a supported MainWP+%s action."
6485
  msgstr ""
6486
 
6487
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/Ajax/PerformSiteAction.php:42
6488
+ #, php-format
6489
+ msgid "Failed to activate %s plugin."
6490
  msgstr ""
6491
 
6492
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/Ajax/PerformSiteAction.php:44
6493
+ #, php-format
6494
+ msgid "Successfully activated %s plugin."
 
6495
  msgstr ""
6496
 
6497
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/Ajax/PerformSiteAction.php:54
6498
+ #, php-format
6499
+ msgid "Failed to deactivate %s plugin."
6500
  msgstr ""
6501
 
6502
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/Ajax/PerformSiteAction.php:56
6503
+ #, php-format
6504
+ msgid "Successfully deactivated %s plugin."
6505
  msgstr ""
6506
 
6507
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/Ajax/PerformSiteAction.php:66
6508
+ #, php-format
6509
+ msgid "Failed to install %s plugin."
6510
  msgstr ""
6511
 
6512
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/Ajax/PerformSiteAction.php:68
6513
+ #, php-format
6514
+ msgid "Successfully installed %s plugin."
6515
  msgstr ""
6516
 
6517
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/Ajax/PerformSiteAction.php:102
6518
+ #, php-format
6519
+ msgid "Failed to sync with %s plugin."
6520
  msgstr ""
6521
 
6522
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/Ajax/PerformSiteAction.php:104
6523
+ #, php-format
6524
+ msgid "Successfully synced with %s plugin."
6525
  msgstr ""
6526
 
6527
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/Data/ClientPluginStatus.php:94
6528
+ #: src/lib/src/Modules/License/Strings.php:55
6529
+ msgid "Active"
6530
  msgstr ""
6531
 
6532
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/Data/ClientPluginStatus.php:95
6533
+ msgid "Not Pro"
6534
  msgstr ""
6535
 
6536
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/Data/ClientPluginStatus.php:96
6537
+ msgid "MainWP Option Not Enabled"
6538
  msgstr ""
6539
 
6540
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/Data/ClientPluginStatus.php:97
6541
+ msgid "Sync Required"
6542
  msgstr ""
6543
 
6544
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/Data/ClientPluginStatus.php:99
6545
+ msgid "Not Installed"
6546
  msgstr ""
6547
 
6548
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/Data/ClientPluginStatus.php:100
6549
+ msgid "Update Required"
6550
  msgstr ""
6551
 
6552
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/Data/ClientPluginStatus.php:101
6553
+ msgid "Ahead Of Server"
 
 
6554
  msgstr ""
6555
 
6556
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/ManageSites/SitesListTableHandler.php:80
6557
+ msgid "Shield plugin is installed, but not active."
6558
  msgstr ""
6559
 
6560
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/ManageSites/SitesListTableHandler.php:81
6561
+ msgid ""
6562
+ "The Shield plugin on this site doesn't have an active ShieldPRO license."
 
6563
  msgstr ""
6564
 
6565
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/ManageSites/SitesListTableHandler.php:82
6566
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/SitesList.php:113
6567
+ msgid "Shield's MainWP integration isn't enabled for this site."
6568
  msgstr ""
6569
 
6570
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/ManageSites/SitesListTableHandler.php:83
6571
+ msgid "Shield isn't installed on this site."
6572
  msgstr ""
6573
 
6574
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/ManageSites/SitesListTableHandler.php:84
6575
+ msgid "Sync Required."
6576
  msgstr ""
6577
 
6578
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/ManageSites/SitesListTableHandler.php:85
6579
+ msgid "Shield version on site doesn't match this server."
6580
  msgstr ""
6581
 
6582
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/ManageSites/SitesListTableHandler.php:86
6583
+ msgid "Please update your Shield plugins to the same versions and re-sync."
6584
  msgstr ""
6585
 
6586
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/ManageSites/SitesListTableHandler.php:87
6587
+ msgid "Issues Found"
6588
  msgstr ""
6589
 
6590
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/MwpOutOfDate.php:14
6591
+ msgid "The MainWP Security plugin doesn't meet Shield's minimum requirements."
6592
  msgstr ""
6593
 
6594
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/MwpOutOfDate.php:15
6595
+ msgid "Minimum required MainWP server version"
6596
  msgstr ""
6597
 
6598
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/MwpOutOfDate.php:16
6599
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/PluginOutOfDate.php:14
6600
+ msgid "Go to WordPress Updates"
6601
  msgstr ""
6602
 
6603
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/NotShieldPro.php:12
6604
+ msgid ""
6605
+ "Sorry, the MainWP server integration is available only for ShieldPRO clients."
6606
  msgstr ""
6607
 
6608
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/NotShieldPro.php:13
6609
+ msgid "Upgrade To ShieldPRO"
6610
  msgstr ""
6611
 
6612
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/PluginOutOfDate.php:13
6613
+ msgid "The Shield Security plugin on this site needs to be upgraded."
6614
  msgstr ""
6615
 
6616
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/SitesList.php:61
6617
+ msgid "No Issues"
6618
  msgstr ""
6619
 
6620
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/SitesList.php:98
6621
+ #: src/lib/src/Tables/DataTables/Build/Scans/BaseForScan.php:79
6622
+ msgid "Actions"
6623
  msgstr ""
6624
 
6625
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/SitesList.php:99
6626
+ msgid "Site"
6627
  msgstr ""
6628
 
6629
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/SitesList.php:101
6630
+ msgid "Issues"
6631
  msgstr ""
6632
 
6633
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/SitesList.php:102
6634
+ #: src/lib/src/Modules/License/Strings.php:56
6635
+ #: src/lib/src/Tables/DataTables/Build/Scans/BaseForScan.php:60
6636
+ msgid "Status"
6637
  msgstr ""
6638
 
6639
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/SitesList.php:103
6640
+ msgid "Last Sync"
6641
  msgstr ""
6642
 
6643
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/SitesList.php:104
6644
+ msgid "Last Scan"
6645
  msgstr ""
6646
 
6647
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/SitesList.php:106
6648
+ msgid "Connected"
6649
  msgstr ""
6650
 
6651
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/SitesList.php:107
6652
+ msgid "Disconnected"
6653
  msgstr ""
6654
 
6655
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/SitesList.php:108
6656
+ msgid "With Issues"
6657
  msgstr ""
6658
 
6659
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/SitesList.php:109
6660
+ msgid "Needs Update"
6661
  msgstr ""
6662
 
6663
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/SitesList.php:110
6664
+ msgid "Shield Security plugin is installed but not activated."
6665
  msgstr ""
6666
 
6667
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/SitesList.php:111
6668
+ msgid "Shield Security plugin not detected in last sync."
6669
  msgstr ""
6670
 
6671
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/SitesList.php:112
6672
+ msgid "ShieldPRO isn't activated on this site."
 
 
6673
  msgstr ""
6674
 
6675
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/SitesList.php:114
6676
+ msgid "Shield Security plugin needs to sync."
6677
  msgstr ""
6678
 
6679
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/SitesList.php:115
6680
+ msgid "Shield Security plugin versions are out of sync."
6681
  msgstr ""
6682
 
6683
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/SitesList.php:116
6684
+ msgid "Couldn't determine Shield plugin status."
6685
  msgstr ""
6686
 
6687
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/SitesList.php:117
6688
+ msgid "Sync Shield"
 
 
6689
  msgstr ""
6690
 
6691
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/SitesList.php:118
6692
+ msgid "Activate Shield"
6693
  msgstr ""
6694
 
6695
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/SitesList.php:119
6696
+ msgid "Align Shield"
6697
  msgstr ""
6698
 
6699
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/SitesList.php:120
6700
+ msgid "Deactivate Shield"
 
6701
  msgstr ""
6702
 
6703
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/SitesList.php:121
6704
+ msgid "Install Shield"
 
6705
  msgstr ""
6706
 
6707
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/SitesList.php:122
6708
+ msgid "Upgrade Shield"
6709
  msgstr ""
6710
 
6711
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/SitesList.php:123
6712
+ msgid "Uninstall Shield"
6713
  msgstr ""
6714
 
6715
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/SitesList.php:124
6716
+ msgid "Check ShieldPRO License"
6717
  msgstr ""
6718
 
6719
+ #: src/lib/src/Modules/Integrations/Lib/MainWP/Server/UI/PageRender/SitesList.php:125
6720
+ msgid "Switch-On MainWP Integration"
 
 
6721
  msgstr ""
6722
 
6723
+ #: src/lib/src/Modules/Integrations/Strings.php:15
6724
+ msgid "SPAM Check Pass"
 
6725
  msgstr ""
6726
 
6727
+ #: src/lib/src/Modules/Integrations/Strings.php:17
6728
+ msgid "\"{{form_provider}}\" submission passed SPAM check."
6729
  msgstr ""
6730
 
6731
+ #: src/lib/src/Modules/Integrations/Strings.php:21
6732
+ msgid "SPAM Check Fail"
6733
  msgstr ""
6734
 
6735
+ #: src/lib/src/Modules/Integrations/Strings.php:23
6736
+ msgid "\"{{form_provider}}\" submission failed SPAM check."
6737
  msgstr ""
6738
 
6739
+ #: src/lib/src/Modules/Integrations/Strings.php:27
6740
+ msgid "User Bot Check Pass"
 
 
6741
  msgstr ""
6742
 
6743
+ #: src/lib/src/Modules/Integrations/Strings.php:29
6744
+ msgid ""
6745
+ "\"{{form_provider}}\" submission for form \"{{action}}\" with username "
6746
+ "\"{{username}}\" passed Bot check."
6747
  msgstr ""
6748
 
6749
+ #: src/lib/src/Modules/Integrations/Strings.php:33
6750
+ msgid "User Bot Check Fail"
6751
  msgstr ""
6752
 
6753
+ #: src/lib/src/Modules/Integrations/Strings.php:35
 
6754
  msgid ""
6755
+ "\"{{form_provider}}\" submission for form \"{{action}}\" with username "
6756
+ "\"{{username}}\" failed Bot check."
6757
  msgstr ""
6758
 
6759
+ #: src/lib/src/Modules/Integrations/Strings.php:50
6760
+ msgid "Built-In Shield Integrations"
6761
  msgstr ""
6762
 
6763
+ #: src/lib/src/Modules/Integrations/Strings.php:53
6764
+ msgid "Shield can automatically integrate with 3rd party plugins."
 
6765
  msgstr ""
6766
 
6767
+ #: src/lib/src/Modules/Integrations/Strings.php:55
6768
+ #: src/lib/src/Modules/Integrations/Strings.php:68
6769
+ msgid "Only enable the integrations you require."
6770
  msgstr ""
6771
 
6772
+ #: src/lib/src/Modules/Integrations/Strings.php:60
6773
+ #: src/lib/src/Modules/Integrations/Strings.php:61
6774
+ msgid "User Forms Bot Checking"
6775
+ msgstr ""
6776
+
6777
+ #: src/lib/src/Modules/Integrations/Strings.php:64
6778
  msgid ""
6779
+ "Shield can automatically protect 3rd party login and registration forms "
6780
+ "against Bots."
6781
  msgstr ""
6782
 
6783
+ #: src/lib/src/Modules/Integrations/Strings.php:65
6784
+ msgid ""
6785
+ "It uses our exclusive AntiBot Detection Engine to reliably identify bots."
6786
  msgstr ""
6787
 
6788
+ #: src/lib/src/Modules/Integrations/Strings.php:69
6789
+ msgid "WordPress is always enabled."
6790
  msgstr ""
6791
 
6792
+ #: src/lib/src/Modules/Integrations/Strings.php:95
6793
+ msgid ""
6794
+ "Turn-On Shield's Built-In Extension For MainWP Server And Client "
6795
+ "Installations"
6796
  msgstr ""
6797
 
6798
+ #: src/lib/src/Modules/Integrations/Strings.php:97
6799
+ #: src/lib/src/Modules/Integrations/Strings.php:109
6800
+ msgid "This is a ShieldPRO-only feature."
6801
  msgstr ""
6802
 
6803
+ #: src/lib/src/Modules/Integrations/Strings.php:98
6804
+ msgid ""
6805
+ "Easily integrate Shield Security to help you manage your site security from "
6806
+ "within MainWP."
6807
  msgstr ""
6808
 
6809
+ #: src/lib/src/Modules/Integrations/Strings.php:99
6810
+ msgid "You don't need to install a separate extension for MainWP."
6811
  msgstr ""
6812
 
6813
+ #: src/lib/src/Modules/Integrations/Strings.php:101
6814
+ msgid ""
6815
+ "If this is a MainWP client site, you should add your MainWP Admin Server's "
6816
+ "IP address to your IP bypass list."
6817
  msgstr ""
6818
 
6819
+ #: src/lib/src/Modules/Integrations/Strings.php:106
6820
+ msgid "User Forms Bot Detection"
6821
  msgstr ""
6822
 
6823
+ #: src/lib/src/Modules/Integrations/Strings.php:107
6824
+ msgid "Select The User Forms Provider That You Use"
6825
  msgstr ""
6826
 
6827
+ #: src/lib/src/Modules/Integrations/Strings.php:110
6828
+ msgid ""
6829
+ "Many 3rd party plugins provide custom user login, registration, and lost "
6830
+ "password forms."
6831
  msgstr ""
6832
 
6833
+ #: src/lib/src/Modules/Integrations/Strings.php:111
6834
+ msgid ""
6835
+ "They aren't normally checked for Bots since they require a custom "
6836
+ "integration."
6837
  msgstr ""
6838
 
6839
+ #: src/lib/src/Modules/Integrations/Strings.php:112
6840
  msgid ""
6841
+ "Select your 3rd party providers to have Shield automatically detect Bot "
6842
+ "requests to these forms."
6843
  msgstr ""
6844
 
6845
+ #: src/lib/src/Modules/Integrations/Strings.php:114
6846
+ msgid ""
6847
+ "Only the form types (login, registration, lost password), that you have "
6848
+ "selected in the Login Guard module will be checked."
6849
  msgstr ""
6850
 
6851
+ #: src/lib/src/Modules/Integrations/Strings.php:117
6852
+ #, php-format
6853
+ msgid "Choose the types of forms you want %s to check"
6854
  msgstr ""
6855
 
6856
+ #: src/lib/src/Modules/Integrations/UI.php:20
6857
+ #: src/lib/src/Modules/Plugin/Strings.php:444
6858
+ msgid "Login"
 
6859
  msgstr ""
6860
 
6861
+ #: src/lib/src/Modules/Integrations/UI.php:21
6862
+ msgid "Registration"
6863
  msgstr ""
6864
 
6865
+ #: src/lib/src/Modules/Integrations/UI.php:22
6866
+ #: src/lib/src/Modules/Plugin/Strings.php:446
6867
+ msgid "Lost Password"
6868
  msgstr ""
6869
 
6870
+ #: src/lib/src/Modules/Integrations/UI.php:23
6871
+ msgid "Checkout"
6872
  msgstr ""
6873
 
6874
+ #: src/lib/src/Modules/Integrations/UI.php:28
6875
+ msgid "None"
6876
+ msgstr ""
6877
+
6878
+ #: src/lib/src/Modules/Integrations/UI.php:36
6879
+ #, php-format
6880
  msgid ""
6881
+ "The following types of user forms are protected by AntiBot Detection: %s."
 
6882
  msgstr ""
6883
 
6884
+ #: src/lib/src/Modules/Integrations/UI.php:41
6885
+ #: src/lib/src/Modules/Integrations/UI.php:65
6886
+ msgid "Click here to review those settings."
6887
  msgstr ""
6888
 
6889
+ #: src/lib/src/Modules/Integrations/UI.php:62
6890
  msgid ""
6891
+ "Use of the AntiBot Detection Engine for user forms isn't turned on in the "
6892
+ "Login Guard module."
6893
  msgstr ""
6894
 
6895
+ #: src/lib/src/Modules/Integrations/UI.php:88
6896
+ #, php-format
6897
  msgid ""
6898
+ "%s has an integration available to protect the forms of a 3rd party plugin "
6899
+ "you're using: %s"
6900
  msgstr ""
6901
 
6902
+ #: src/lib/src/Modules/License/AdminNotices.php:29
6903
+ #, php-format
6904
+ msgid "%s API Token Missing"
6905
  msgstr ""
6906
 
6907
+ #: src/lib/src/Modules/License/AdminNotices.php:31
6908
  msgid ""
6909
+ "This site appears to be activated for PRO, but there's been a problem "
6910
+ "obtaining an API token for WPHashes.com."
6911
  msgstr ""
6912
 
6913
+ #: src/lib/src/Modules/License/AdminNotices.php:33
6914
  msgid ""
6915
+ "The WPHashes API is used for many premium features including Malware "
6916
+ "scanning."
6917
  msgstr ""
6918
 
6919
+ #: src/lib/src/Modules/License/AdminNotices.php:34
6920
+ msgid ""
6921
+ "Without a valid API Token, certain Premium features wont work as expected."
 
6922
  msgstr ""
6923
 
6924
+ #: src/lib/src/Modules/License/AdminNotices.php:36
6925
  msgid ""
6926
+ "Please contact us in our support channel if this doesn't sound right, or "
6927
+ "upgrade to PRO."
6928
  msgstr ""
6929
 
6930
+ #: src/lib/src/Modules/License/AdminNotices.php:38
6931
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:141
6932
+ msgid "Click to jump to the relevant option"
6933
  msgstr ""
6934
 
6935
+ #: src/lib/src/Modules/License/AjaxHandler.php:72
6936
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/LoginIntentRequestCapture.php:139
6937
+ msgid "Success"
6938
  msgstr ""
6939
 
6940
+ #: src/lib/src/Modules/License/AjaxHandler.php:81
6941
+ #, php-format
6942
+ msgid "Please wait %s before attempting another license check."
6943
  msgstr ""
6944
 
6945
+ #: src/lib/src/Modules/License/AjaxHandler.php:82
6946
  #, php-format
6947
+ msgid "%s second"
6948
+ msgid_plural "%s seconds"
6949
+ msgstr[0] ""
6950
+ msgstr[1] ""
6951
+
6952
+ #: src/lib/src/Modules/License/AjaxHandler.php:89
6953
+ msgid "Valid license found."
6954
  msgstr ""
6955
 
6956
+ #: src/lib/src/Modules/License/AjaxHandler.php:89
6957
+ #: src/lib/src/Modules/License/WpCli/License.php:106
6958
+ msgid "Valid license couldn't be found."
6959
  msgstr ""
6960
 
6961
+ #: src/lib/src/Modules/License/Lib/LicenseEmails.php:31
6962
+ msgid "Attempts to verify Shield Pro license has just failed."
 
 
 
 
 
 
 
 
6963
  msgstr ""
6964
 
6965
+ #: src/lib/src/Modules/License/Lib/LicenseEmails.php:32
6966
+ #: src/lib/src/Modules/License/Lib/LicenseEmails.php:59
6967
  #, php-format
6968
+ msgid "Please check your license on-site: %s"
6969
  msgstr ""
6970
 
6971
+ #: src/lib/src/Modules/License/Lib/LicenseEmails.php:33
6972
+ #: src/lib/src/Modules/License/Lib/LicenseEmails.php:60
6973
  #, php-format
6974
+ msgid "If this problem persists, please contact support: %s"
6975
  msgstr ""
6976
 
6977
+ #: src/lib/src/Modules/License/Lib/LicenseEmails.php:58
6978
+ msgid "All attempts to verify Shield Pro license have failed."
6979
  msgstr ""
6980
 
6981
+ #: src/lib/src/Modules/License/Lib/Verify.php:53
6982
+ msgid ""
6983
+ "The most recent request to verify the site license encountered a problem."
6984
  msgstr ""
6985
 
6986
+ #: src/lib/src/Modules/License/Strings.php:15
6987
+ msgid "License Check Success"
6988
  msgstr ""
6989
 
6990
+ #: src/lib/src/Modules/License/Strings.php:17
6991
+ msgid "License check succeeded."
6992
  msgstr ""
6993
 
6994
+ #: src/lib/src/Modules/License/Strings.php:21
6995
+ msgid "License Failure Email Sent"
6996
  msgstr ""
6997
 
6998
+ #: src/lib/src/Modules/License/Strings.php:23
6999
+ msgid "License check failed. Sending Warning Email."
7000
  msgstr ""
7001
 
7002
+ #: src/lib/src/Modules/License/Strings.php:27
7003
+ msgid "License Deactivated"
 
 
 
7004
  msgstr ""
7005
 
7006
+ #: src/lib/src/Modules/License/Strings.php:29
7007
+ msgid "License check failed. Deactivating Pro."
 
7008
  msgstr ""
7009
 
7010
+ #: src/lib/src/Modules/License/Strings.php:40
7011
+ msgid "License Summary"
7012
  msgstr ""
7013
 
7014
+ #: src/lib/src/Modules/License/Strings.php:41
7015
+ msgid "License Activation"
7016
  msgstr ""
7017
 
7018
+ #: src/lib/src/Modules/License/Strings.php:42
7019
+ msgid "Check License Availability For This Site"
7020
  msgstr ""
7021
 
7022
+ #: src/lib/src/Modules/License/Strings.php:44
7023
+ msgid "Clear License Status"
7024
  msgstr ""
7025
 
7026
+ #: src/lib/src/Modules/License/Strings.php:45
7027
+ msgid "URL To Activate"
7028
  msgstr ""
7029
 
7030
+ #: src/lib/src/Modules/License/Strings.php:47
7031
+ #, php-format
7032
+ msgid "Activate this site URL in your %s control panel"
7033
  msgstr ""
7034
 
7035
+ #: src/lib/src/Modules/License/Strings.php:48
7036
+ msgid "Keyless Activation"
7037
  msgstr ""
7038
 
7039
+ #: src/lib/src/Modules/License/Strings.php:50
7040
+ #, php-format
7041
+ msgid "Licenses may be checked once every %s seconds"
7042
  msgstr ""
7043
 
7044
+ #: src/lib/src/Modules/License/Strings.php:51
7045
+ msgid "more frequent checks will be ignored"
7046
  msgstr ""
7047
 
7048
+ #: src/lib/src/Modules/License/Strings.php:52
7049
+ msgid "In case of activation problems, click the link"
 
7050
  msgstr ""
7051
 
7052
+ #: src/lib/src/Modules/License/Strings.php:57
7053
+ msgid "Key"
7054
  msgstr ""
7055
 
7056
+ #: src/lib/src/Modules/License/Strings.php:58
7057
+ msgid "Expires"
7058
  msgstr ""
7059
 
7060
+ #: src/lib/src/Modules/License/Strings.php:59
7061
+ msgid "Owner"
 
7062
  msgstr ""
7063
 
7064
+ #: src/lib/src/Modules/License/Strings.php:60
7065
+ msgid "Checked"
 
 
7066
  msgstr ""
7067
 
7068
+ #: src/lib/src/Modules/License/Strings.php:61
7069
+ #: src/lib/src/Modules/Reporting/AjaxHandler.php:48 src/wizards/base.php:202
7070
+ #: src/wizards/base.php:238
7071
+ msgid "Error"
7072
  msgstr ""
7073
 
7074
+ #: src/lib/src/Modules/License/UI.php:45 src/lib/src/Modules/License/UI.php:51
7075
+ msgid "&#10004;"
7076
  msgstr ""
7077
 
7078
+ #: src/lib/src/Modules/License/UI.php:45 src/lib/src/Modules/License/UI.php:51
7079
+ msgid "&#10006;"
7080
  msgstr ""
7081
 
7082
+ #: src/lib/src/Modules/License/WpCli/License.php:66
7083
+ msgid "No license to remove."
 
7084
  msgstr ""
7085
 
7086
+ #: src/lib/src/Modules/License/WpCli/License.php:70
7087
+ msgid "Are you sure you want to remove the ShieldPRO license?"
 
7088
  msgstr ""
7089
 
7090
+ #: src/lib/src/Modules/License/WpCli/License.php:75
7091
+ msgid "License removed successfully."
 
7092
  msgstr ""
7093
 
7094
+ #: src/lib/src/Modules/License/WpCli/License.php:86
7095
+ msgid "Active license found."
 
 
7096
  msgstr ""
7097
 
7098
+ #: src/lib/src/Modules/License/WpCli/License.php:87
7099
+ msgid "No active license present."
 
7100
  msgstr ""
7101
 
7102
+ #: src/lib/src/Modules/License/WpCli/License.php:105
7103
+ msgid "Valid license found and installed."
 
7104
  msgstr ""
7105
 
7106
+ #: src/lib/src/Modules/Lockdown/Insights/OverviewCards.php:22
7107
+ #: src/lib/src/Modules/Lockdown/Insights/OverviewCards.php:31
7108
+ msgid "File Editing via WP"
7109
  msgstr ""
7110
 
7111
+ #: src/lib/src/Modules/Lockdown/Insights/OverviewCards.php:24
7112
+ msgid "File editing from within WordPress admin is disabled"
 
7113
  msgstr ""
7114
 
7115
+ #: src/lib/src/Modules/Lockdown/Insights/OverviewCards.php:34
7116
+ msgid "File editing is allowed even though you've switched it off"
 
 
7117
  msgstr ""
7118
 
7119
+ #: src/lib/src/Modules/Lockdown/Insights/OverviewCards.php:35
7120
+ msgid "File editing from within the WP admin should be disabled"
7121
  msgstr ""
7122
 
7123
+ #: src/lib/src/Modules/Lockdown/Insights/OverviewCards.php:38
7124
+ msgid "Another plugin or theme is interfering with this setting."
7125
  msgstr ""
7126
 
7127
+ #: src/lib/src/Modules/Lockdown/Insights/OverviewCards.php:39
7128
+ msgid "WP Plugin file editing should be disabled wherever possible."
7129
  msgstr ""
7130
 
7131
+ #: src/lib/src/Modules/Lockdown/Insights/OverviewCards.php:48
7132
+ msgid "XML-RPC is disabled"
7133
  msgstr ""
7134
 
7135
+ #: src/lib/src/Modules/Lockdown/Insights/OverviewCards.php:49
7136
+ msgid "XML-RPC access is allowed"
7137
  msgstr ""
7138
 
7139
+ #: src/lib/src/Modules/Lockdown/Insights/OverviewCards.php:55
7140
+ msgid "REST API"
 
 
7141
  msgstr ""
7142
 
7143
+ #: src/lib/src/Modules/Lockdown/Insights/OverviewCards.php:58
7144
+ msgid "Anonymous REST API is disabled"
 
 
7145
  msgstr ""
7146
 
7147
+ #: src/lib/src/Modules/Lockdown/Insights/OverviewCards.php:59
7148
+ msgid "Anonymous REST API is allowed"
7149
+ msgstr ""
7150
+
7151
+ #: src/lib/src/Modules/Lockdown/Insights/OverviewCards.php:68
7152
+ msgid "WordPress Lockdown"
7153
+ msgstr ""
7154
+
7155
+ #: src/lib/src/Modules/Lockdown/Insights/OverviewCards.php:72
7156
+ msgid "Restrict WP Functionality e.g. XMLRPC & REST API"
7157
  msgstr ""
7158
 
7159
+ #: src/lib/src/Modules/Lockdown/Processor.php:98
7160
+ #, php-format
7161
  msgid ""
7162
+ "The \"author\" query parameter has been blocked by %s to protect against "
7163
+ "user login name fishing."
7164
  msgstr ""
7165
 
7166
+ #: src/lib/src/Modules/Lockdown/Processor.php:101
7167
+ #: src/lib/src/Modules/LoginGuard/UI.php:28
7168
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:245
7169
+ msgid "Learn More."
7170
  msgstr ""
7171
 
7172
+ #: src/lib/src/Modules/Lockdown/Processor.php:126
7173
+ #, php-format
7174
+ msgid "Anonymous access to the WordPress Rest API has been restricted by %s."
7175
  msgstr ""
7176
 
7177
+ #: src/lib/src/Modules/Lockdown/Strings.php:15
7178
+ #: src/lib/src/Modules/Lockdown/Strings.php:21
7179
+ #: src/lib/src/Modules/Traffic/Lib/TrafficTable/LoadRawTableData.php:183
7180
+ #: src/lib/src/Tables/Render/WpListTable/IpBlack.php:16
7181
+ msgid "Blocked"
7182
  msgstr ""
7183
 
7184
+ #: src/lib/src/Modules/Lockdown/Strings.php:15
7185
+ msgid "Anonymous REST API"
 
7186
  msgstr ""
7187
 
7188
+ #: src/lib/src/Modules/Lockdown/Strings.php:17
7189
+ msgid "Blocked Anonymous API Access through \"{{namespace}}\" namespace."
7190
  msgstr ""
7191
 
7192
+ #: src/lib/src/Modules/Lockdown/Strings.php:23
7193
+ msgid "XML-RPC Request Blocked."
 
7194
  msgstr ""
7195
 
7196
+ #: src/lib/src/Modules/Lockdown/Strings.php:43
7197
  msgid ""
7198
+ "Lockdown helps secure-up certain loosely-controlled WordPress settings on "
7199
+ "your site."
7200
  msgstr ""
7201
 
7202
+ #: src/lib/src/Modules/Lockdown/Strings.php:44
7203
+ msgid "Lockdown"
7204
  msgstr ""
7205
 
7206
+ #: src/lib/src/Modules/Lockdown/Strings.php:49
7207
+ #: src/lib/src/Modules/Lockdown/Strings.php:54
7208
+ msgid "API & XML-RPC"
7209
  msgstr ""
7210
 
7211
+ #: src/lib/src/Modules/Lockdown/Strings.php:51
7212
+ msgid "Lockdown certain core WordPress system features."
7213
  msgstr ""
7214
 
7215
+ #: src/lib/src/Modules/Lockdown/Strings.php:52
7216
+ msgid ""
7217
+ "This depends on your usage and needs for certain WordPress functions and "
7218
+ "features."
7219
  msgstr ""
7220
 
7221
+ #: src/lib/src/Modules/Lockdown/Strings.php:58
7222
+ msgid "Permissions and Access Options"
7223
  msgstr ""
7224
 
7225
+ #: src/lib/src/Modules/Lockdown/Strings.php:60
7226
+ msgid "Provides finer control of certain WordPress permissions."
7227
  msgstr ""
7228
 
7229
+ #: src/lib/src/Modules/Lockdown/Strings.php:61
7230
+ msgid "Only enable SSL if you have a valid certificate installed."
7231
  msgstr ""
7232
 
7233
+ #: src/lib/src/Modules/Lockdown/Strings.php:63
7234
+ msgid "Permissions"
 
7235
  msgstr ""
7236
 
7237
+ #: src/lib/src/Modules/Lockdown/Strings.php:67
7238
+ msgid "WordPress Obscurity Options"
7239
  msgstr ""
7240
 
7241
+ #: src/lib/src/Modules/Lockdown/Strings.php:69
7242
+ msgid "Obscures certain WordPress settings from public view."
7243
  msgstr ""
7244
 
7245
+ #: src/lib/src/Modules/Lockdown/Strings.php:70
7246
+ msgid ""
7247
+ "Obscurity is not true security and so these settings are down to your "
7248
+ "personal tastes."
7249
  msgstr ""
7250
 
7251
+ #: src/lib/src/Modules/Lockdown/Strings.php:72
7252
+ msgid "Obscurity"
7253
  msgstr ""
7254
 
7255
+ #: src/lib/src/Modules/Lockdown/Strings.php:102
7256
+ #: src/lib/src/Modules/Plugin/Strings.php:134
7257
+ #, php-format
7258
+ msgid "Disable %s"
7259
  msgstr ""
7260
 
7261
+ #: src/lib/src/Modules/Lockdown/Strings.php:103
7262
+ #: src/lib/src/Modules/Lockdown/Strings.php:109
7263
+ #, php-format
7264
+ msgid "Disable The %s System"
7265
  msgstr ""
7266
 
7267
+ #: src/lib/src/Modules/Lockdown/Strings.php:104
7268
+ #, php-format
7269
+ msgid "Checking this option will completely turn off the whole %s system."
7270
  msgstr ""
7271
 
7272
+ #: src/lib/src/Modules/Lockdown/Strings.php:108
7273
+ #: src/lib/src/Modules/Lockdown/Strings.php:109
7274
+ msgid "Anonymous Rest API"
7275
  msgstr ""
7276
 
7277
+ #: src/lib/src/Modules/Lockdown/Strings.php:111
7278
+ msgid "You can completely disable anonymous access to the REST API."
 
 
7279
  msgstr ""
7280
 
7281
+ #: src/lib/src/Modules/Lockdown/Strings.php:112
7282
+ msgid ""
7283
+ "Enabling this option may break plugins that use the REST API for your site "
7284
+ "visitors."
7285
  msgstr ""
7286
 
7287
+ #: src/lib/src/Modules/Lockdown/Strings.php:113
7288
+ msgid ""
7289
+ "Use the exclusions option to allow anonymous access to specific API "
7290
+ "endpoints."
7291
  msgstr ""
7292
 
7293
+ #: src/lib/src/Modules/Lockdown/Strings.php:118
7294
+ msgid "Rest API Exclusions"
7295
  msgstr ""
7296
 
7297
+ #: src/lib/src/Modules/Lockdown/Strings.php:119
7298
+ msgid "Anonymous REST API Exclusions"
7299
  msgstr ""
7300
 
7301
+ #: src/lib/src/Modules/Lockdown/Strings.php:121
7302
  msgid ""
7303
+ "These REST API namespaces will be excluded from the Anonymous API "
7304
+ "restriction."
7305
  msgstr ""
7306
 
7307
+ #: src/lib/src/Modules/Lockdown/Strings.php:122
7308
  #, php-format
7309
+ msgid ""
7310
+ "Some plugins (e.g. %s) use the REST API anonymously so you need to provide "
7311
+ "exclusions for them to work correctly."
7312
  msgstr ""
7313
 
7314
+ #: src/lib/src/Modules/Lockdown/Strings.php:124
7315
+ msgid ""
7316
+ "Please contact the developer of a plugin to ask them for their REST API "
7317
+ "namespace if you need it."
7318
  msgstr ""
7319
 
7320
+ #: src/lib/src/Modules/Lockdown/Strings.php:125
7321
+ msgid "Some common namespaces"
 
 
7322
  msgstr ""
7323
 
7324
+ #: src/lib/src/Modules/Lockdown/Strings.php:141
7325
+ msgid "Disable File Editing"
7326
  msgstr ""
7327
 
7328
+ #: src/lib/src/Modules/Lockdown/Strings.php:142
7329
+ msgid "Disable Ability To Edit Files From Within WordPress"
7330
  msgstr ""
7331
 
7332
+ #: src/lib/src/Modules/Lockdown/Strings.php:144
7333
  msgid ""
7334
+ "Removes the option to directly edit any files from within the WordPress "
7335
+ "admin area."
7336
  msgstr ""
7337
 
7338
+ #: src/lib/src/Modules/Lockdown/Strings.php:145
7339
+ msgid "Equivalent to setting \"DISALLOW_FILE_EDIT\" to TRUE."
7340
  msgstr ""
7341
 
7342
+ #: src/lib/src/Modules/Lockdown/Strings.php:150
7343
+ msgid "Force SSL Admin"
 
 
7344
  msgstr ""
7345
 
7346
+ #: src/lib/src/Modules/Lockdown/Strings.php:151
7347
+ msgid "Forces WordPress Admin Dashboard To Be Delivered Over SSL"
 
7348
  msgstr ""
7349
 
7350
+ #: src/lib/src/Modules/Lockdown/Strings.php:153
7351
+ msgid ""
7352
+ "Please only enable this option if you have a valid SSL certificate installed."
7353
  msgstr ""
7354
 
7355
+ #: src/lib/src/Modules/Lockdown/Strings.php:154
7356
+ msgid "Equivalent to setting \"FORCE_SSL_ADMIN\" to TRUE."
7357
  msgstr ""
7358
 
7359
+ #: src/lib/src/Modules/Lockdown/Strings.php:159
7360
+ msgid "WP Generator Tag"
7361
  msgstr ""
7362
 
7363
+ #: src/lib/src/Modules/Lockdown/Strings.php:160
7364
+ msgid "Remove WP Generator Meta Tag"
7365
  msgstr ""
7366
 
7367
+ #: src/lib/src/Modules/Lockdown/Strings.php:161
7368
  msgid ""
7369
+ "Remove a meta tag from your WordPress pages that publicly displays that your "
7370
+ "site is WordPress and its current version."
7371
  msgstr ""
7372
 
7373
+ #: src/lib/src/Modules/Lockdown/Strings.php:165
7374
+ msgid "Clean WP Files"
7375
  msgstr ""
7376
 
7377
+ #: src/lib/src/Modules/Lockdown/Strings.php:166
7378
+ msgid "Automatically Delete Unnecessary WP Files"
7379
  msgstr ""
7380
 
7381
+ #: src/lib/src/Modules/Lockdown/Strings.php:168
7382
+ msgid "Automatically delete WordPress files that aren't necessary."
7383
  msgstr ""
7384
 
7385
+ #: src/lib/src/Modules/Lockdown/Strings.php:169
7386
+ msgid "The cleanup process runs once each day."
 
 
7387
  msgstr ""
7388
 
7389
+ #: src/lib/src/Modules/Lockdown/Strings.php:170
7390
+ msgid "Files Deleted"
7391
  msgstr ""
7392
 
7393
+ #: src/lib/src/Modules/Lockdown/Strings.php:176
7394
+ msgid "Block Username Fishing"
 
 
7395
  msgstr ""
7396
 
7397
+ #: src/lib/src/Modules/Lockdown/Strings.php:177
7398
+ msgid "Block the ability to discover WordPress usernames based on author IDs"
7399
  msgstr ""
7400
 
7401
+ #: src/lib/src/Modules/Lockdown/Strings.php:179
7402
+ #, php-format
7403
+ msgid "When enabled, any URL requests containing \"%s\" will be killed."
7404
  msgstr ""
7405
 
7406
+ #: src/lib/src/Modules/Lockdown/Strings.php:180
7407
  msgid ""
7408
+ "Enabling this option may interfere with expected operations of your site."
7409
+ msgstr ""
7410
+
7411
+ #: src/lib/src/Modules/LoginGuard/AdminNotices.php:35
7412
+ msgid "Please verify email has been received"
7413
  msgstr ""
7414
 
7415
+ #: src/lib/src/Modules/LoginGuard/AdminNotices.php:36
7416
  msgid ""
7417
+ "Before we can activate email 2-factor authentication, we need you to confirm "
7418
+ "your website can send emails."
7419
  msgstr ""
7420
 
7421
+ #: src/lib/src/Modules/LoginGuard/AdminNotices.php:37
7422
+ msgid "Please click the link in the email you received."
7423
  msgstr ""
7424
 
7425
+ #: src/lib/src/Modules/LoginGuard/AdminNotices.php:39
7426
+ #, php-format
7427
+ msgid "The email has been sent to you at blog admin address: %s"
7428
  msgstr ""
7429
 
7430
+ #: src/lib/src/Modules/LoginGuard/AdminNotices.php:42
7431
+ msgid "Resend verification email"
7432
  msgstr ""
7433
 
7434
+ #: src/lib/src/Modules/LoginGuard/AdminNotices.php:43
7435
+ msgid "Disable 2FA by email"
7436
  msgstr ""
7437
 
7438
+ #: src/lib/src/Modules/LoginGuard/AjaxHandler.php:135
7439
+ msgid "Multi-factor login backup code has been removed from your profile"
7440
  msgstr ""
7441
 
7442
+ #: src/lib/src/Modules/LoginGuard/AjaxHandler.php:139
7443
+ msgid "Your backup login codes have been deleted."
7444
  msgstr ""
7445
 
7446
+ #: src/lib/src/Modules/LoginGuard/AjaxHandler.php:173
7447
+ msgid "Email 2FA activated."
7448
  msgstr ""
7449
 
7450
+ #: src/lib/src/Modules/LoginGuard/AjaxHandler.php:174
7451
+ msgid "Email 2FA deactivated."
7452
  msgstr ""
7453
 
7454
+ #: src/lib/src/Modules/LoginGuard/AjaxHandler.php:177
7455
+ msgid "Email 2FA settings couldn't be changed."
7456
  msgstr ""
7457
 
7458
+ #: src/lib/src/Modules/LoginGuard/AjaxHandler.php:193
7459
+ msgid "2FA by email has been disabled"
 
 
7460
  msgstr ""
7461
 
7462
+ #: src/lib/src/Modules/LoginGuard/AjaxHandler.php:208
7463
+ msgid "U2F registration details were missing in the request."
7464
  msgstr ""
7465
 
7466
+ #: src/lib/src/Modules/LoginGuard/AjaxHandler.php:236
7467
+ msgid "Either the country code or phone number were missing."
 
 
7468
  msgstr ""
7469
 
7470
+ #: src/lib/src/Modules/LoginGuard/AjaxHandler.php:241
7471
+ msgid "The country code was missing."
 
 
7472
  msgstr ""
7473
 
7474
+ #: src/lib/src/Modules/LoginGuard/AjaxHandler.php:244
7475
+ msgid "The phone number was missing."
 
 
 
 
 
 
7476
  msgstr ""
7477
 
7478
+ #: src/lib/src/Modules/LoginGuard/AjaxHandler.php:251
7479
+ msgid "Please confirm the 6-digit code sent to your phone."
7480
  msgstr ""
7481
 
7482
+ #: src/lib/src/Modules/LoginGuard/AjaxHandler.php:278
7483
+ msgid "SMS Registration Removed"
7484
  msgstr ""
7485
 
7486
+ #: src/lib/src/Modules/LoginGuard/AjaxHandler.php:304
7487
+ msgid "One-Time Password was sent to your registered email address."
 
 
7488
  msgstr ""
7489
 
7490
+ #: src/lib/src/Modules/LoginGuard/AjaxHandler.php:305
7491
+ msgid "There was a problem sending the One-Time Password email."
7492
  msgstr ""
7493
 
7494
+ #: src/lib/src/Modules/LoginGuard/AjaxHandler.php:320
7495
+ msgid "One-Time Password was sent to your phone."
7496
  msgstr ""
7497
 
7498
+ #: src/lib/src/Modules/LoginGuard/AjaxHandler.php:347
7499
+ msgid "SMS Verification Failed."
 
 
7500
  msgstr ""
7501
 
7502
+ #: src/lib/src/Modules/LoginGuard/AjaxHandler.php:352
7503
+ msgid "The code provided was empty."
 
 
 
7504
  msgstr ""
7505
 
7506
+ #: src/lib/src/Modules/LoginGuard/AjaxHandler.php:355
7507
+ msgid "The data provided was inconsistent."
7508
  msgstr ""
7509
 
7510
+ #: src/lib/src/Modules/LoginGuard/AjaxHandler.php:361
7511
+ msgid ""
7512
+ "Phone verified and registered successfully for SMS Two-Factor Authentication."
7513
  msgstr ""
7514
 
7515
+ #: src/lib/src/Modules/LoginGuard/AjaxHandler.php:393
7516
+ msgid "Registered U2F device removed from profile."
7517
  msgstr ""
7518
 
7519
+ #: src/lib/src/Modules/LoginGuard/AjaxHandler.php:423
7520
+ msgid "Email 2FA option is not currently enabled."
7521
  msgstr ""
7522
 
7523
+ #: src/lib/src/Modules/LoginGuard/AjaxHandler.php:427
7524
+ msgid "Email sending has already been verified."
7525
  msgstr ""
7526
 
7527
+ #: src/lib/src/Modules/LoginGuard/AjaxHandler.php:430
7528
+ msgid "Verification email resent."
7529
  msgstr ""
7530
 
7531
+ #: src/lib/src/Modules/LoginGuard/Insights/OverviewCards.php:26
7532
+ msgid "Brute Force Login"
7533
  msgstr ""
7534
 
7535
+ #: src/lib/src/Modules/LoginGuard/Insights/OverviewCards.php:29
7536
+ msgid "Login forms are protected against bot attacks"
 
 
7537
  msgstr ""
7538
 
7539
+ #: src/lib/src/Modules/LoginGuard/Insights/OverviewCards.php:30
7540
+ msgid "Login forms aren't protected against brute force bot attacks"
7541
  msgstr ""
7542
 
7543
+ #: src/lib/src/Modules/LoginGuard/Insights/OverviewCards.php:34
7544
+ msgid "Bot User Register"
7545
  msgstr ""
7546
 
7547
+ #: src/lib/src/Modules/LoginGuard/Insights/OverviewCards.php:37
7548
+ msgid "Registration forms are protected against bot attacks"
7549
  msgstr ""
7550
 
7551
+ #: src/lib/src/Modules/LoginGuard/Insights/OverviewCards.php:38
7552
+ msgid "Registration forms aren't protected against automated bots"
7553
  msgstr ""
7554
 
7555
+ #: src/lib/src/Modules/LoginGuard/Insights/OverviewCards.php:42
7556
+ msgid "Brute Force Lost Password"
7557
  msgstr ""
7558
 
7559
+ #: src/lib/src/Modules/LoginGuard/Insights/OverviewCards.php:45
7560
+ msgid "Lost Password forms are protected against bot attacks"
7561
  msgstr ""
7562
 
7563
+ #: src/lib/src/Modules/LoginGuard/Insights/OverviewCards.php:46
7564
+ msgid "Lost Password forms aren't protected against automated bots"
 
7565
  msgstr ""
7566
 
7567
+ #: src/lib/src/Modules/LoginGuard/Insights/OverviewCards.php:53
7568
+ msgid "Identity Verification"
7569
  msgstr ""
7570
 
7571
+ #: src/lib/src/Modules/LoginGuard/Insights/OverviewCards.php:56
7572
+ msgid "At least one 2FA option is available"
7573
  msgstr ""
7574
 
7575
+ #: src/lib/src/Modules/LoginGuard/Insights/OverviewCards.php:57
7576
+ msgid "No 2FA options, such as Google Authenticator, are active."
7577
  msgstr ""
7578
 
7579
+ #: src/lib/src/Modules/LoginGuard/Insights/OverviewCards.php:70
7580
+ msgid "Brute Force Protection & Identity Verification"
7581
  msgstr ""
7582
 
7583
+ #: src/lib/src/Modules/LoginGuard/Lib/AntiBot/ProtectionProviders/AntiBot.php:22
7584
+ msgid "Failed AntiBot Test"
7585
  msgstr ""
7586
 
7587
+ #: src/lib/src/Modules/LoginGuard/Lib/AntiBot/ProtectionProviders/CoolDown.php:21
7588
+ msgid "Request Cooldown in effect."
7589
  msgstr ""
7590
 
7591
+ #: src/lib/src/Modules/LoginGuard/Lib/AntiBot/ProtectionProviders/CoolDown.php:23
7592
+ #, php-format
7593
+ msgid "You must wait %s seconds before attempting this action again."
7594
  msgstr ""
7595
 
7596
+ #: src/lib/src/Modules/LoginGuard/Lib/AntiBot/ProtectionProviders/GaspJs.php:89
7597
+ msgid "Please check that box to say you're human, and not a bot."
 
 
7598
  msgstr ""
7599
 
7600
+ #: src/lib/src/Modules/LoginGuard/Lib/AntiBot/ProtectionProviders/GaspJs.php:101
7601
+ msgid "You appear to be a bot."
7602
  msgstr ""
7603
 
7604
+ #: src/lib/src/Modules/LoginGuard/Lib/Rename/RenameLogin.php:80
7605
+ msgid ""
7606
+ "Your login URL is unchanged because the Rename WP Login feature is not "
7607
+ "currently supported on WPMS."
7608
  msgstr ""
7609
 
7610
+ #: src/lib/src/Modules/LoginGuard/Lib/Rename/RenameLogin.php:84
7611
+ #: src/lib/src/Modules/LoginGuard/Lib/Rename/RenameLogin.php:88
7612
+ #, php-format
7613
  msgid ""
7614
+ "Can not use the Rename WP Login feature because you have the \"%s\" plugin "
7615
+ "installed and it is active."
7616
  msgstr ""
7617
 
7618
+ #: src/lib/src/Modules/LoginGuard/Lib/Rename/RenameLogin.php:92
7619
+ #, php-format
7620
  msgid ""
7621
+ "Can not use the Rename WP Login feature because you have not enabled %s."
 
7622
  msgstr ""
7623
 
7624
+ #: src/lib/src/Modules/LoginGuard/Lib/Rename/RenameLogin.php:92
7625
+ msgid "Permalinks"
7626
+ msgstr ""
7627
+
7628
+ #: src/lib/src/Modules/LoginGuard/Lib/Rename/RenameLogin.php:96
7629
+ #, php-format
7630
  msgid ""
7631
+ "Can not use the Rename WP Login feature because you have chosen a path (\"%s"
7632
+ "\") that is already used on your WordPress site."
7633
  msgstr ""
7634
 
7635
+ #: src/lib/src/Modules/LoginGuard/Lib/Rename/RenameLogin.php:121
7636
  msgid ""
7637
+ "Your login URL is unchanged because your current hosting/PHP configuration "
7638
+ "cannot parse the necessary information."
7639
  msgstr ""
7640
 
7641
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/LoginIntentRequestCapture.php:74
7642
+ msgid "Could not verify your 2FA codes"
7643
  msgstr ""
7644
 
7645
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/LoginIntentRequestCapture.php:134
7646
+ msgid "2FA authentication verified successfully."
7647
+ msgstr ""
7648
+
7649
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/LoginIntentRequestCapture.php:139
7650
+ msgid "Thank you for authenticating your login."
7651
  msgstr ""
7652
 
7653
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/LoginIntentRequestCapture.php:141
7654
+ msgid "If you used your Backup Code, you will need to reset it."
 
 
7655
  msgstr ""
7656
 
7657
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaController.php:49
7658
+ msgid "Too many 2FA verification attempts - please login again."
 
7659
  msgstr ""
7660
 
7661
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaController.php:53
7662
+ msgid "No 2FA login intent found - your login may have expired."
 
 
7663
  msgstr ""
7664
 
7665
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaController.php:57
7666
+ msgid "No 2FA login providers found."
7667
  msgstr ""
7668
 
7669
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaController.php:154
7670
+ #, php-format
7671
+ msgid "All MFA providers removed from user with ID %s."
 
 
 
 
7672
  msgstr ""
7673
 
7674
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaController.php:159
7675
+ #, php-format
7676
+ msgid "User doesn't exist with ID %s."
 
7677
  msgstr ""
7678
 
7679
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaProfilesController.php:66
7680
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaProfilesController.php:67
7681
+ msgid "My Login Security"
7682
  msgstr ""
7683
 
7684
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaProfilesController.php:163
7685
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaProfilesController.php:198
7686
+ #: src/lib/src/Modules/LoginGuard/Strings.php:95
7687
+ #: src/lib/src/Modules/LoginGuard/Strings.php:197
7688
+ #: src/lib/src/Modules/UserManagement/Strings.php:142
7689
+ msgid "Multi-Factor Authentication"
7690
  msgstr ""
7691
 
7692
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaProfilesController.php:164
7693
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaProfilesController.php:199
7694
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BackupCodes.php:42
7695
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Email.php:133
7696
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php:61
7697
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Sms.php:175
7698
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Yubikey.php:44
7699
+ #, php-format
7700
+ msgid "Provided by %s"
7701
  msgstr ""
7702
 
7703
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaProfilesController.php:200
7704
+ msgid "Currently active MFA Providers on this profile are"
 
 
7705
  msgstr ""
7706
 
7707
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaProfilesController.php:201
7708
+ msgid "Remove All MFA Providers"
 
 
7709
  msgstr ""
7710
 
7711
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaProfilesController.php:202
7712
+ msgid "Remove All MFA Providers From This User Profile"
7713
  msgstr ""
7714
 
7715
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaProfilesController.php:203
7716
+ msgid "Certain providers may not be removed if they're enforced."
7717
  msgstr ""
7718
 
7719
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaProfilesController.php:204
7720
+ msgid "There are no MFA providers active on this user account."
7721
  msgstr ""
7722
 
7723
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaProfilesController.php:205
7724
+ #, php-format
7725
  msgid ""
7726
+ "Only %s Security Admins may modify the MFA settings of another admin account."
 
7727
  msgstr ""
7728
 
7729
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaProfilesController.php:207
7730
+ #, php-format
7731
+ msgid "You may authenticate with the %s Security Admin system and return here."
 
 
 
7732
  msgstr ""
7733
 
7734
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Profiles/RenderCustomForms.php:26
7735
+ #, php-format
7736
+ msgid "%s MFA Options"
7737
  msgstr ""
7738
 
7739
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Profiles/RenderCustomForms.php:55
7740
+ msgid "Not currently logged-in."
7741
  msgstr ""
7742
 
7743
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Profiles/RenderCustomForms.php:56
7744
+ msgid "There are currently no 2FA providers available on your account."
 
 
7745
  msgstr ""
7746
 
7747
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BackupCodes.php:29
7748
+ msgid "Generate ONE-Time Backup 2FA Login Code"
 
 
7749
  msgstr ""
7750
 
7751
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BackupCodes.php:30
7752
+ msgid "Delete Login Backup Code"
7753
  msgstr ""
7754
 
7755
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BackupCodes.php:31
7756
+ msgid ""
7757
+ "Backup login codes are not available if you do not have any other two-factor "
7758
+ "authentication modes active."
7759
  msgstr ""
7760
 
7761
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BackupCodes.php:32
7762
  msgid ""
7763
+ "Click to generate a backup login code for your two-factor authentication."
 
7764
  msgstr ""
7765
 
7766
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BackupCodes.php:35
7767
+ msgid ""
7768
+ "This code will be displayed only once and you may use it to verify your "
7769
+ "login only once."
7770
  msgstr ""
7771
 
7772
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BackupCodes.php:36
7773
+ msgid "Store it somewhere safe."
7774
  msgstr ""
7775
 
7776
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BackupCodes.php:37
7777
+ msgid "Generating a new code will replace your existing code."
7778
  msgstr ""
7779
 
7780
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BackupCodes.php:38
7781
+ msgid "Create Backup 2FA Login Code"
 
 
7782
  msgstr ""
7783
 
7784
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BackupCodes.php:39
7785
+ msgid "Backup Login Code"
7786
  msgstr ""
7787
 
7788
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BackupCodes.php:40
7789
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php:59
7790
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Yubikey.php:42
7791
+ #, php-format
7792
+ msgid "Sorry, %s may not be added to another user's account."
7793
  msgstr ""
7794
 
7795
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BackupCodes.php:41
7796
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php:60
7797
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Yubikey.php:43
7798
+ #, php-format
7799
  msgid ""
7800
+ "Sorry, %s may only be removed from another user's account by a Security "
7801
+ "Administrator."
7802
  msgstr ""
7803
 
7804
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BackupCodes.php:41
7805
+ msgid "Backup Codes"
7806
  msgstr ""
7807
 
7808
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BackupCodes.php:44
7809
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php:62
7810
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Yubikey.php:46
7811
+ msgid "Understand how to remove Google Authenticator"
7812
  msgstr ""
7813
 
7814
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BackupCodes.php:55
7815
+ msgid "Please use your Backup Code to login."
7816
  msgstr ""
7817
 
7818
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BackupCodes.php:56
7819
+ msgid "Login Backup Code"
 
7820
  msgstr ""
7821
 
7822
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BackupCodes.php:108
7823
+ msgid "Backup Login Code Just Used"
7824
  msgstr ""
7825
 
7826
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BackupCodes.php:110
7827
+ msgid ""
7828
+ "This is a quick notice to inform you that your Backup Login code was just "
7829
+ "used."
7830
  msgstr ""
7831
 
7832
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BackupCodes.php:111
7833
+ msgid "Your WordPress account had only 1 backup login code."
7834
  msgstr ""
7835
 
7836
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BackupCodes.php:112
7837
  msgid ""
7838
+ "You must go to your profile and regenerate a new code if you want to use "
7839
+ "this method again."
7840
  msgstr ""
7841
 
7842
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BackupCodes.php:114
7843
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Email.php:105
7844
+ msgid "Login Details"
7845
  msgstr ""
7846
 
7847
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BackupCodes.php:119
7848
+ msgid "Thank You."
7849
  msgstr ""
7850
 
7851
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BaseProvider.php:152
7852
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BaseProvider.php:220
7853
+ msgid "This setting is enforced by your security administrator."
7854
  msgstr ""
7855
 
7856
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Email.php:39
7857
+ msgid "A1B2C3"
7858
  msgstr ""
7859
 
7860
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Email.php:40
7861
+ msgid "Email OTP"
7862
  msgstr ""
7863
 
7864
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Email.php:41
7865
+ msgid "Enter code sent to your email"
 
 
7866
  msgstr ""
7867
 
7868
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Email.php:49
7869
+ msgid "Send OTP Code"
7870
  msgstr ""
7871
 
7872
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Email.php:89
7873
+ msgid "Two-Factor Login Verification"
7874
  msgstr ""
7875
 
7876
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Email.php:101
7877
+ msgid "Someone attempted to login into this WordPress site using your account."
7878
  msgstr ""
7879
 
7880
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Email.php:102
7881
+ msgid "Login requires verification with the following code."
7882
  msgstr ""
7883
 
7884
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Email.php:103
7885
+ msgid "Verification Code"
7886
  msgstr ""
7887
 
7888
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Email.php:104
7889
+ msgid "Why no login link?"
7890
  msgstr ""
7891
 
7892
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Email.php:130
7893
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Email.php:131
7894
+ #: src/lib/src/Modules/LoginGuard/Strings.php:242
7895
+ #: src/lib/src/Modules/LoginGuard/Strings.php:254
7896
+ #: src/lib/src/Modules/LoginGuard/Strings.php:257
7897
+ msgid "Email Authentication"
7898
  msgstr ""
7899
 
7900
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Email.php:132
7901
+ msgid "Toggle the option to enable/disable email-based login authentication."
7902
  msgstr ""
7903
 
7904
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php:49
7905
+ msgid "Enter 6-digit Code from App"
 
7906
  msgstr ""
7907
 
7908
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php:50
7909
+ msgid "Provide the current code generated by your Google Authenticator app."
 
7910
  msgstr ""
7911
 
7912
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php:51
7913
+ msgid ""
7914
+ "Use your Google Authenticator app to scan this QR code and enter the 6-digit "
7915
+ "one time password."
7916
  msgstr ""
7917
 
7918
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php:52
7919
  msgid ""
7920
+ "If you have a problem with scanning the QR code enter the long code manually "
7921
+ "into the app."
7922
  msgstr ""
7923
 
7924
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php:53
7925
+ msgid "Click to immediately remove Google Authenticator login authentication."
 
7926
  msgstr ""
7927
 
7928
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php:54
 
7929
  #, php-format
7930
+ msgid "Remove %s"
7931
  msgstr ""
7932
 
7933
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php:54
7934
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php:58
7935
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php:60
7936
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php:123
7937
+ #: src/lib/src/Modules/LoginGuard/Strings.php:236
7938
+ msgid "Google Authenticator"
7939
  msgstr ""
7940
 
7941
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php:55
7942
+ msgid "Google Authenticator Code"
7943
  msgstr ""
7944
 
7945
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php:56
7946
+ msgid "Manual Code"
7947
  msgstr ""
7948
 
7949
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php:57
7950
+ msgid "Scan This QR Code"
7951
  msgstr ""
7952
 
7953
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php:63
7954
+ msgid "Remove Google Authenticator"
7955
  msgstr ""
7956
 
7957
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php:112
7958
+ msgid "Google Authenticator was successfully removed from the account."
7959
  msgstr ""
7960
 
7961
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php:122
7962
+ #, php-format
7963
+ msgid "%s was successfully added to your account."
7964
  msgstr ""
7965
 
7966
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php:128
7967
+ msgid "One Time Password (OTP) was not valid."
7968
  msgstr ""
7969
 
7970
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php:129
7971
+ msgid "Please try again."
7972
  msgstr ""
7973
 
7974
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php:140
7975
+ msgid "123456"
7976
  msgstr ""
7977
 
7978
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php:141
7979
+ msgid "Authenticator OTP"
7980
  msgstr ""
7981
 
7982
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php:142
7983
+ msgid "Enter 6-digit code from your authenticator app"
7984
  msgstr ""
7985
 
7986
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Sms.php:170
7987
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Sms.php:171
7988
+ msgid "SMS Authentication"
7989
  msgstr ""
7990
 
7991
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Sms.php:172
7992
+ msgid "Provide Your Full Mobile Telephone Number"
7993
  msgstr ""
7994
 
7995
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Sms.php:173
7996
  msgid ""
7997
+ "Verifying your number will send an SMS to your phone with a verification "
7998
+ "code."
7999
  msgstr ""
8000
 
8001
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Sms.php:174
8002
+ msgid ""
8003
+ "This will consume your SMS credits, if available, just as with any standard "
8004
+ "2FA SMS."
8005
  msgstr ""
8006
 
8007
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Sms.php:177
8008
+ msgid "Registered Mobile Number"
8009
  msgstr ""
8010
 
8011
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/U2F.php:33
8012
+ msgid "U2F Security Key registration is not supported in this browser"
8013
  msgstr ""
8014
 
8015
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/U2F.php:34
8016
+ msgid "Key registration failed."
8017
  msgstr ""
8018
 
8019
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/U2F.php:35
8020
+ msgid "Perhaps the device isn't supported, or you've already registered it."
 
 
8021
  msgstr ""
8022
 
8023
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/U2F.php:36
8024
+ msgid "Please retry or refresh the page."
 
8025
  msgstr ""
8026
 
8027
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/U2F.php:37
8028
+ msgid "Key registration was successful."
 
 
8029
  msgstr ""
8030
 
8031
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/U2F.php:38
8032
+ msgid "Please now save your profile settings."
 
 
 
8033
  msgstr ""
8034
 
8035
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/U2F.php:39
8036
+ msgid "Please provide a label to identify the new U2F device."
8037
  msgstr ""
8038
 
8039
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/U2F.php:40
8040
+ msgid "Device registration may not proceed without a unique label."
8041
  msgstr ""
8042
 
8043
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/U2F.php:41
8044
  msgid ""
8045
+ "Device label must contain letters, numbers, underscore, or hypen, and be no "
8046
+ "more than 16 characters."
8047
  msgstr ""
8048
 
8049
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/U2F.php:61
8050
+ msgid "Start U2F Auth"
 
 
8051
  msgstr ""
8052
 
8053
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/U2F.php:145
8054
+ msgid "U2F"
8055
  msgstr ""
8056
 
8057
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/U2F.php:146
8058
+ msgid "Register A New U2F Security Key"
8059
  msgstr ""
8060
 
8061
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/U2F.php:147
8062
+ msgid "Click To Register A U2F Device."
8063
  msgstr ""
8064
 
8065
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/U2F.php:156
8066
+ msgid "Used"
 
 
8067
  msgstr ""
8068
 
8069
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/U2F.php:212
8070
+ msgid "U2F Device was successfully registered on your profile."
 
 
8071
  msgstr ""
8072
 
8073
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/U2F.php:217
8074
+ #, php-format
8075
+ msgid "U2F Device registration failed with the following error: %s"
 
8076
  msgstr ""
8077
 
8078
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Yubikey.php:30
8079
+ msgid "Registered Yubikey devices"
 
 
8080
  msgstr ""
8081
 
8082
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Yubikey.php:31
8083
+ msgid "There are no registered Yubikey devices on this profile."
8084
  msgstr ""
8085
 
8086
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Yubikey.php:32
8087
+ msgid "Enter One Time Password From Yubikey"
8088
  msgstr ""
8089
 
8090
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Yubikey.php:33
8091
  msgid ""
8092
+ "To register a new Yubikey device, enter a One Time Password from the Yubikey."
 
8093
  msgstr ""
8094
 
8095
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Yubikey.php:34
8096
+ msgid "To remove a Yubikey device, enter the registered device ID and save."
8097
  msgstr ""
8098
 
8099
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Yubikey.php:36
8100
+ msgid "You may add as many Yubikey devices to your profile as you need to."
8101
  msgstr ""
8102
 
8103
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Yubikey.php:37
8104
+ msgid "This is your unique Yubikey Device ID."
 
 
8105
  msgstr ""
8106
 
8107
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Yubikey.php:38
8108
+ msgid "Provide a One Time Password from your Yubikey."
8109
  msgstr ""
8110
 
8111
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Yubikey.php:39
8112
+ msgid "Yubikey ID"
 
8113
  msgstr ""
8114
 
8115
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Yubikey.php:40
8116
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Yubikey.php:161
8117
+ msgid "Yubikey OTP"
8118
+ msgstr ""
8119
+
8120
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Yubikey.php:41
8121
+ msgid "Yubikey Authentication"
8122
+ msgstr ""
8123
+
8124
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Yubikey.php:43
8125
+ msgid "Yubikey"
8126
+ msgstr ""
8127
+
8128
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Yubikey.php:126
8129
  #, php-format
8130
+ msgid "%s was removed from your profile."
 
 
8131
  msgstr ""
8132
 
8133
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Yubikey.php:127
8134
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Yubikey.php:139
8135
+ msgid "Yubikey Device"
 
8136
  msgstr ""
8137
 
8138
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Yubikey.php:138
8139
  #, php-format
8140
+ msgid "%s was added to your profile."
8141
  msgstr ""
8142
 
8143
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Yubikey.php:162
8144
+ msgid "Use your Yubikey to generate a new code"
8145
  msgstr ""
8146
 
8147
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Render/RenderBase.php:55
8148
+ msgid "Cancel Login"
8149
  msgstr ""
8150
 
8151
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Render/RenderBase.php:56
8152
+ msgid "Time Remaining"
8153
  msgstr ""
8154
 
8155
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Render/RenderBase.php:57
8156
+ msgid "Calculating"
 
 
8157
  msgstr ""
8158
 
8159
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Render/RenderBase.php:58
8160
+ msgid "Seconds"
 
 
8161
  msgstr ""
8162
 
8163
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Render/RenderBase.php:59
8164
+ msgid "Login Expired"
8165
  msgstr ""
8166
 
8167
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Render/RenderBase.php:60
8168
+ msgid "Verify My Login"
8169
  msgstr ""
8170
 
8171
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Render/RenderBase.php:62
8172
+ #, php-format
8173
+ msgid "Remember me for %s"
8174
  msgstr ""
8175
 
8176
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Render/RenderBase.php:63
8177
+ #, php-format
8178
+ msgid "%s day"
8179
+ msgid_plural "%s days"
8180
+ msgstr[0] ""
8181
+ msgstr[1] ""
8182
+
8183
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Render/RenderLoginIntentPage.php:24
8184
+ msgid "What is this?"
8185
  msgstr ""
8186
 
8187
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Render/RenderLoginIntentPage.php:25
8188
+ #, php-format
8189
+ msgid "%s Login Verification"
8190
  msgstr ""
8191
 
8192
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Render/RenderLoginIntentPage.php:77
8193
+ msgid "Please supply at least 1 authentication code"
8194
  msgstr ""
8195
 
8196
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Render/RenderWpLoginReplica.php:24
8197
+ msgid "Login 2FA Verification"
8198
  msgstr ""
8199
 
8200
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Render/RenderWpLoginReplica.php:70
8201
+ msgid "Go Back Home"
8202
  msgstr ""
8203
 
8204
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Render/RenderWpLoginReplica.php:71
8205
+ msgid "Complete Login"
 
 
8206
  msgstr ""
8207
 
8208
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Render/RenderWpLoginReplica.php:117
8209
+ #, php-format
8210
+ msgid "%1$s &lsaquo; %2$s &#8212; WordPress"
8211
  msgstr ""
8212
 
8213
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Render/RenderWpLoginReplica.php:149
8214
+ msgid "https://wordpress.org/"
8215
  msgstr ""
8216
 
8217
+ #: src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Render/RenderWpLoginReplica.php:162
8218
+ msgid "Powered by WordPress"
8219
  msgstr ""
8220
 
8221
+ #: src/lib/src/Modules/LoginGuard/ModCon.php:114
8222
+ msgid "Email verification completed successfully."
 
 
8223
  msgstr ""
8224
 
8225
+ #: src/lib/src/Modules/LoginGuard/ModCon.php:118
8226
+ msgid "Email verification could not be completed."
8227
  msgstr ""
8228
 
8229
+ #: src/lib/src/Modules/LoginGuard/ModCon.php:138
8230
+ msgid ""
8231
+ "Before enabling 2-factor email authentication for your WordPress site, you "
8232
+ "must verify you can receive this email."
8233
  msgstr ""
8234
 
8235
+ #: src/lib/src/Modules/LoginGuard/ModCon.php:139
8236
  msgid ""
8237
+ "This verifies your website can send email and that your account can receive "
8238
+ "emails sent from your site."
8239
  msgstr ""
8240
 
8241
+ #: src/lib/src/Modules/LoginGuard/ModCon.php:145
8242
+ #, php-format
8243
+ msgid "Click the verify link: %s"
 
8244
  msgstr ""
8245
 
8246
+ #: src/lib/src/Modules/LoginGuard/ModCon.php:150
8247
+ #, php-format
8248
+ msgid "Here's your code for the guided wizard: %s"
 
8249
  msgstr ""
8250
 
8251
+ #: src/lib/src/Modules/LoginGuard/ModCon.php:156
8252
+ msgid "Email Sending Verification"
8253
  msgstr ""
8254
 
8255
+ #: src/lib/src/Modules/LoginGuard/ModCon.php:248
8256
+ msgid "I'm a human."
8257
  msgstr ""
8258
 
8259
+ #: src/lib/src/Modules/LoginGuard/ModCon.php:252
8260
+ msgid "Please check the box to show us you're a human."
 
 
8261
  msgstr ""
8262
 
8263
+ #: src/lib/src/Modules/LoginGuard/Strings.php:16
8264
+ msgid "BotBox Fail"
8265
  msgstr ""
8266
 
8267
+ #: src/lib/src/Modules/LoginGuard/Strings.php:18
8268
+ msgid ""
8269
+ "User \"{{user_login}}\" attempted \"{{action}}\" but Bot checkbox was not "
8270
+ "found."
8271
  msgstr ""
8272
 
8273
+ #: src/lib/src/Modules/LoginGuard/Strings.php:22
8274
+ msgid "Cooldown Fail"
8275
  msgstr ""
8276
 
8277
+ #: src/lib/src/Modules/LoginGuard/Strings.php:24
8278
+ msgid "Login/Register request triggered cooldown and was blocked."
8279
  msgstr ""
8280
 
8281
+ #: src/lib/src/Modules/LoginGuard/Strings.php:28
8282
+ msgid "Honeypot Fail"
8283
  msgstr ""
8284
 
8285
+ #: src/lib/src/Modules/LoginGuard/Strings.php:30
8286
  msgid ""
8287
+ "User \"{{user_login}}\" attempted {{action}} but they were caught by the "
8288
+ "honeypot."
8289
  msgstr ""
8290
 
8291
+ #: src/lib/src/Modules/LoginGuard/Strings.php:34
8292
+ msgid "2FA Login Success"
8293
  msgstr ""
8294
 
8295
+ #: src/lib/src/Modules/LoginGuard/Strings.php:36
8296
+ msgid "Successful 2FA Login Verification"
 
 
8297
  msgstr ""
8298
 
8299
+ #: src/lib/src/Modules/LoginGuard/Strings.php:40
8300
+ msgid "2FA Verify Success"
8301
  msgstr ""
8302
 
8303
+ #: src/lib/src/Modules/LoginGuard/Strings.php:42
8304
+ msgid "User \"{{user_login}}\" verified their identity using \"{{method}}\"."
8305
  msgstr ""
8306
 
8307
+ #: src/lib/src/Modules/LoginGuard/Strings.php:46
8308
+ msgid "2FA Verify Fail"
8309
  msgstr ""
8310
 
8311
+ #: src/lib/src/Modules/LoginGuard/Strings.php:48
8312
+ msgid ""
8313
+ "User \"{{user_login}}\" failed to verify their identity using \"{{method}}\"."
8314
  msgstr ""
8315
 
8316
+ #: src/lib/src/Modules/LoginGuard/Strings.php:52
8317
+ msgid "Login Blocked"
 
8318
  msgstr ""
8319
 
8320
+ #: src/lib/src/Modules/LoginGuard/Strings.php:54
8321
+ msgid "Login Blocked."
8322
  msgstr ""
8323
 
8324
+ #: src/lib/src/Modules/LoginGuard/Strings.php:58
8325
+ msgid "Hidden Login URL Fail"
 
8326
  msgstr ""
8327
 
8328
+ #: src/lib/src/Modules/LoginGuard/Strings.php:60
8329
+ msgid "Redirecting wp-login due to hidden login URL"
 
8330
  msgstr ""
8331
 
8332
+ #: src/lib/src/Modules/LoginGuard/Strings.php:80
8333
+ msgid ""
8334
+ "Login Guard blocks all automated and brute force attempts to log in to your "
8335
+ "site."
8336
  msgstr ""
8337
 
8338
+ #: src/lib/src/Modules/LoginGuard/Strings.php:86
8339
+ msgid "Hide WordPress Login Page"
 
8340
  msgstr ""
8341
 
8342
+ #: src/lib/src/Modules/LoginGuard/Strings.php:87
8343
+ msgid "Hide Login"
 
8344
  msgstr ""
8345
 
8346
+ #: src/lib/src/Modules/LoginGuard/Strings.php:89
8347
+ msgid ""
8348
+ "To hide your wp-login.php page from brute force attacks and hacking attempts "
8349
+ "- if your login page cannot be found, no-one can login."
8350
  msgstr ""
8351
 
8352
+ #: src/lib/src/Modules/LoginGuard/Strings.php:90
8353
+ msgid ""
8354
+ "This is not required for complete security and if your site has irregular or "
8355
+ "inconsistent configuration it may not work for you."
8356
  msgstr ""
8357
 
8358
+ #: src/lib/src/Modules/LoginGuard/Strings.php:96
8359
+ msgid "Multi-Factor Auth"
 
8360
  msgstr ""
8361
 
8362
+ #: src/lib/src/Modules/LoginGuard/Strings.php:98
8363
+ #: src/lib/src/Modules/UserManagement/Strings.php:139
8364
+ msgid ""
8365
+ "Verifies the identity of users who log in to your site - i.e. they are who "
8366
+ "they say they are."
8367
  msgstr ""
8368
 
8369
+ #: src/lib/src/Modules/LoginGuard/Strings.php:99
8370
+ #: src/lib/src/Modules/LoginGuard/Strings.php:109
8371
+ #: src/lib/src/Modules/LoginGuard/Strings.php:118
8372
+ #: src/lib/src/Modules/LoginGuard/Strings.php:136
8373
+ msgid "You may combine multiple authentication factors for increased security."
8374
  msgstr ""
8375
 
8376
+ #: src/lib/src/Modules/LoginGuard/Strings.php:104
8377
+ msgid "Email Two-Factor Authentication"
8378
  msgstr ""
8379
 
8380
+ #: src/lib/src/Modules/LoginGuard/Strings.php:105
8381
+ msgid "2FA Email"
8382
  msgstr ""
8383
 
8384
+ #: src/lib/src/Modules/LoginGuard/Strings.php:107
8385
+ msgid ""
8386
+ "Verifies the identity of users who log in to your site using email-based one-"
8387
+ "time-passwords."
8388
  msgstr ""
8389
 
8390
+ #: src/lib/src/Modules/LoginGuard/Strings.php:108
8391
+ #: src/lib/src/Modules/UserManagement/Strings.php:140
8392
+ msgid "However, if your host blocks email sending you may lock yourself out."
8393
  msgstr ""
8394
 
8395
+ #: src/lib/src/Modules/LoginGuard/Strings.php:114
8396
+ #: src/lib/src/Modules/LoginGuard/Strings.php:115
8397
+ msgid "One-Time Passwords"
8398
  msgstr ""
8399
 
8400
+ #: src/lib/src/Modules/LoginGuard/Strings.php:117
8401
+ msgid ""
8402
+ "Verifies the identity of users who log in to your site using Google "
8403
+ "Authenticator one-time-passwords."
8404
  msgstr ""
8405
 
8406
+ #: src/lib/src/Modules/LoginGuard/Strings.php:123
8407
+ msgid "Brute Force Login Protection"
8408
  msgstr ""
8409
 
8410
+ #: src/lib/src/Modules/LoginGuard/Strings.php:124
8411
+ msgid "Bots"
8412
  msgstr ""
8413
 
8414
+ #: src/lib/src/Modules/LoginGuard/Strings.php:126
8415
+ msgid ""
8416
+ "Blocks brute force hacking attacks against your login and registration pages."
8417
  msgstr ""
8418
 
8419
+ #: src/lib/src/Modules/LoginGuard/Strings.php:132
8420
+ msgid "Hardware 2-Factor Authentication"
8421
  msgstr ""
8422
 
8423
+ #: src/lib/src/Modules/LoginGuard/Strings.php:133
8424
+ msgid "Hardware 2FA"
8425
  msgstr ""
8426
 
8427
+ #: src/lib/src/Modules/LoginGuard/Strings.php:135
8428
+ msgid ""
8429
+ "Verifies the identity of users who log in to your site using Yubikey one-"
8430
+ "time-passwords."
8431
  msgstr ""
8432
 
8433
+ #: src/lib/src/Modules/LoginGuard/Strings.php:171
8434
+ msgid "Hide WP Login & Admin"
8435
  msgstr ""
8436
 
8437
+ #: src/lib/src/Modules/LoginGuard/Strings.php:172
8438
+ msgid "Hide The WordPress Login And Admin Areas"
8439
  msgstr ""
8440
 
8441
+ #: src/lib/src/Modules/LoginGuard/Strings.php:174
8442
+ msgid "Creating a path here will disable your wp-login.php"
8443
  msgstr ""
8444
 
8445
+ #: src/lib/src/Modules/LoginGuard/Strings.php:175
8446
+ #, php-format
8447
+ msgid "Only letters and numbers are permitted: %s"
8448
  msgstr ""
8449
 
8450
+ #: src/lib/src/Modules/LoginGuard/Strings.php:176
8451
+ #, php-format
8452
+ msgid "Your current login URL is: %s"
8453
  msgstr ""
8454
 
8455
+ #: src/lib/src/Modules/LoginGuard/Strings.php:181
8456
+ msgid "WP Login & Admin Redirect"
8457
  msgstr ""
8458
 
8459
+ #: src/lib/src/Modules/LoginGuard/Strings.php:182
8460
+ msgid "Automatic Redirect URL For Hidden Pages"
8461
  msgstr ""
8462
 
8463
+ #: src/lib/src/Modules/LoginGuard/Strings.php:184
8464
+ msgid "Automatically redirect requests to this location for the hidden pages."
8465
  msgstr ""
8466
 
8467
+ #: src/lib/src/Modules/LoginGuard/Strings.php:187
8468
+ msgid "Leave this blank to serve a standard \"404 Not Found\" error page."
8469
  msgstr ""
8470
 
8471
+ #: src/lib/src/Modules/LoginGuard/Strings.php:191
8472
+ #, php-format
8473
+ msgid "Use relative paths e.g. %s redirects to your homepage."
8474
  msgstr ""
8475
 
8476
+ #: src/lib/src/Modules/LoginGuard/Strings.php:198
8477
+ msgid "Require All Active Authentication Factors"
8478
  msgstr ""
8479
 
8480
+ #: src/lib/src/Modules/LoginGuard/Strings.php:199
8481
+ msgid ""
8482
+ "When enabled, all multi-factor authentication methods will be applied to a "
8483
+ "user login. Disable to require only one to login."
8484
  msgstr ""
8485
 
8486
+ #: src/lib/src/Modules/LoginGuard/Strings.php:203
8487
+ msgid "MFA Verification Page"
8488
  msgstr ""
8489
 
8490
+ #: src/lib/src/Modules/LoginGuard/Strings.php:204
8491
+ msgid "Type Of MFA Verification Page"
8492
  msgstr ""
8493
 
8494
+ #: src/lib/src/Modules/LoginGuard/Strings.php:206
8495
+ msgid "Choose the type of page provided to users for MFA verification."
8496
  msgstr ""
8497
 
8498
+ #: src/lib/src/Modules/LoginGuard/Strings.php:208
8499
+ msgid ""
8500
+ "Choose the Custom Shield page if there are conflicts or issues with the WP "
8501
+ "Login page for 2FA."
8502
  msgstr ""
8503
 
8504
+ #: src/lib/src/Modules/LoginGuard/Strings.php:210
8505
+ msgid "WP Login page option is only available for WordPress v4.0 and above."
8506
  msgstr ""
8507
 
8508
+ #: src/lib/src/Modules/LoginGuard/Strings.php:215
8509
+ msgid "User 2FA Setup"
8510
  msgstr ""
8511
 
8512
+ #: src/lib/src/Modules/LoginGuard/Strings.php:216
8513
+ msgid "User 2FA Setup Page Locations"
8514
  msgstr ""
8515
 
8516
+ #: src/lib/src/Modules/LoginGuard/Strings.php:218
8517
+ msgid "Specify pages available to users to configure 2FA on their account."
8518
  msgstr ""
8519
 
8520
+ #: src/lib/src/Modules/LoginGuard/Strings.php:219
8521
+ msgid ""
8522
+ "At least 1 option must be provided and defaults to the user profile page "
8523
+ "within the WP admin area."
8524
  msgstr ""
8525
 
8526
+ #: src/lib/src/Modules/LoginGuard/Strings.php:224
8527
+ msgid "2FA Remember Me"
8528
  msgstr ""
8529
 
8530
+ #: src/lib/src/Modules/LoginGuard/Strings.php:225
8531
+ msgid "A User Can Bypass 2FA For The Set Number Of Days"
8532
  msgstr ""
8533
 
8534
+ #: src/lib/src/Modules/LoginGuard/Strings.php:226
8535
+ msgid ""
8536
+ "Enter the number of days a user can bypass future MFA after a successful MFA-"
8537
+ "login. 0 to disable."
8538
  msgstr ""
8539
 
8540
+ #: src/lib/src/Modules/LoginGuard/Strings.php:230
8541
+ msgid "Allow Backup Codes"
8542
  msgstr ""
8543
 
8544
+ #: src/lib/src/Modules/LoginGuard/Strings.php:231
8545
+ msgid "Allow Users To Generate A Backup Code"
 
8546
  msgstr ""
8547
 
8548
+ #: src/lib/src/Modules/LoginGuard/Strings.php:232
8549
+ msgid ""
8550
+ "Allow users to generate a backup code that can be used to login if MFA "
8551
+ "factors are unavailable."
8552
  msgstr ""
8553
 
8554
+ #: src/lib/src/Modules/LoginGuard/Strings.php:237
8555
+ msgid "Allow Users To Use Google Authenticator"
8556
  msgstr ""
8557
 
8558
+ #: src/lib/src/Modules/LoginGuard/Strings.php:238
8559
+ msgid ""
8560
+ "When enabled, users will have the option to add Google Authenticator to "
8561
+ "their WordPress user profile"
8562
  msgstr ""
8563
 
8564
+ #: src/lib/src/Modules/LoginGuard/Strings.php:243
8565
  #, php-format
8566
+ msgid "Two-Factor Login Authentication By %s"
8567
  msgstr ""
8568
 
8569
+ #: src/lib/src/Modules/LoginGuard/Strings.php:243
8570
+ #: src/lib/src/Modules/Plugin/Strings.php:538
8571
+ #: src/lib/src/Modules/UserManagement/Processor.php:209
8572
+ msgid "Email"
8573
  msgstr ""
8574
 
8575
+ #: src/lib/src/Modules/LoginGuard/Strings.php:244
8576
+ msgid ""
8577
+ "All users will be required to verify their login by email-based two-factor "
8578
+ "authentication."
8579
  msgstr ""
8580
 
8581
+ #: src/lib/src/Modules/LoginGuard/Strings.php:248
8582
+ msgid "Allow Any User"
8583
  msgstr ""
8584
 
8585
+ #: src/lib/src/Modules/LoginGuard/Strings.php:249
8586
+ msgid "Allow Any User To Turn-On Two-Factor Authentication By Email."
8587
  msgstr ""
8588
 
8589
+ #: src/lib/src/Modules/LoginGuard/Strings.php:250
8590
+ msgid ""
8591
+ "Any user can turn on two-factor authentication by email from their profile."
8592
  msgstr ""
8593
 
8594
+ #: src/lib/src/Modules/LoginGuard/Strings.php:254
8595
+ msgid "Enforce"
8596
  msgstr ""
8597
 
8598
+ #: src/lib/src/Modules/LoginGuard/Strings.php:255
8599
+ msgid "All User Roles Subject To Email Authentication"
8600
  msgstr ""
8601
 
8602
+ #: src/lib/src/Modules/LoginGuard/Strings.php:257
8603
+ #, php-format
8604
+ msgid "This setting only applies to %s."
8605
  msgstr ""
8606
 
8607
+ #: src/lib/src/Modules/LoginGuard/Strings.php:258
8608
+ msgid ""
8609
+ "Enforces email-based authentication on all users with the selected roles."
8610
  msgstr ""
8611
 
8612
+ #: src/lib/src/Modules/LoginGuard/Strings.php:259
8613
+ msgid ""
8614
+ "If a user has multiple roles assigned to it, all roles will be checked "
8615
+ "against this list."
8616
+ msgstr ""
 
8617
 
8618
+ #: src/lib/src/Modules/LoginGuard/Strings.php:260
8619
+ msgid "All User Roles Available On This Site"
8620
  msgstr ""
8621
 
8622
+ #: src/lib/src/Modules/LoginGuard/Strings.php:269
8623
+ msgid "Protect WordPress Account Access Requests With CAPTCHA"
8624
  msgstr ""
8625
 
8626
+ #: src/lib/src/Modules/LoginGuard/Strings.php:271
8627
+ msgid "Use CAPTCHA on the user account forms such as login, register, etc."
8628
  msgstr ""
8629
 
8630
+ #: src/lib/src/Modules/LoginGuard/Strings.php:272
8631
+ #, php-format
8632
+ msgid "Use of any theme other than \"%s\", requires a Pro license."
8633
  msgstr ""
8634
 
8635
+ #: src/lib/src/Modules/LoginGuard/Strings.php:272
8636
+ #: src/lib/src/Modules/Plugin/Strings.php:561
8637
+ msgid "Light Theme"
8638
  msgstr ""
8639
 
8640
+ #: src/lib/src/Modules/LoginGuard/Strings.php:273
8641
+ msgid "You'll need to setup your CAPTCHA API Keys in 'General' settings."
8642
+ msgstr ""
8643
+
8644
+ #: src/lib/src/Modules/LoginGuard/Strings.php:274
8645
+ msgid ""
8646
+ "Some forms are more dynamic than others so if you experience problems, "
8647
+ "please use non-Invisible CAPTCHA."
8648
  msgstr ""
8649
 
8650
+ #: src/lib/src/Modules/LoginGuard/Strings.php:279
8651
+ msgid "Use ADE To Detect Bots And Block Brute Force Logins"
8652
  msgstr ""
8653
 
8654
+ #: src/lib/src/Modules/LoginGuard/Strings.php:290
8655
+ msgid "Protection Locations"
8656
  msgstr ""
8657
 
8658
+ #: src/lib/src/Modules/LoginGuard/Strings.php:291
8659
+ msgid "Which Forms Should Be Protected"
 
8660
  msgstr ""
8661
 
8662
+ #: src/lib/src/Modules/LoginGuard/Strings.php:293
8663
+ msgid "Choose the forms for which bot protection measures will be deployed."
8664
  msgstr ""
8665
 
8666
+ #: src/lib/src/Modules/LoginGuard/Strings.php:294
8667
  #, php-format
8668
+ msgid "Use with 3rd party systems such as %s, requires a Pro license."
8669
  msgstr ""
8670
 
8671
+ #: src/lib/src/Modules/LoginGuard/Strings.php:297
8672
+ #, php-format
8673
+ msgid "Choose the 3rd party plugins you want %s to also integrate with."
8674
  msgstr ""
8675
 
8676
+ #: src/lib/src/Modules/LoginGuard/Strings.php:302
8677
+ msgid "Bot Protection"
8678
  msgstr ""
8679
 
8680
+ #: src/lib/src/Modules/LoginGuard/Strings.php:305
8681
+ msgid "Protect WP Login From Automated Login Attempts By Bots"
8682
  msgstr ""
8683
 
8684
+ #: src/lib/src/Modules/LoginGuard/Strings.php:308
8685
+ msgid ""
8686
+ "Adds a dynamically (Javascript) generated checkbox to the login form that "
8687
+ "prevents bots using automated login techniques."
8688
  msgstr ""
8689
 
8690
+ #: src/lib/src/Modules/LoginGuard/Strings.php:309
8691
+ msgid "ON"
 
 
 
8692
  msgstr ""
8693
 
8694
+ #: src/lib/src/Modules/LoginGuard/Strings.php:314
8695
+ msgid "AntiBot Forms"
8696
  msgstr ""
8697
 
8698
+ #: src/lib/src/Modules/LoginGuard/Strings.php:317
8699
+ msgid ""
8700
+ "Enter The Selectors Of The 3rd Party Login Forms For Use With AntiBot JS"
8701
  msgstr ""
8702
 
8703
+ #: src/lib/src/Modules/LoginGuard/Strings.php:320
8704
+ msgid "Provide DOM selectors to attach AntiBot protection to any form."
8705
  msgstr ""
8706
 
8707
+ #: src/lib/src/Modules/LoginGuard/Strings.php:321
8708
+ msgid "IDs are prefixed with \"#\"."
8709
  msgstr ""
8710
 
8711
+ #: src/lib/src/Modules/LoginGuard/Strings.php:322
8712
+ msgid "Classes are prefixed with \".\"."
8713
  msgstr ""
8714
 
8715
+ #: src/lib/src/Modules/LoginGuard/Strings.php:323
8716
+ msgid "IDs are preferred over classes."
8717
  msgstr ""
8718
 
8719
+ #: src/lib/src/Modules/LoginGuard/Strings.php:328
8720
+ msgid "Cooldown Period"
8721
  msgstr ""
8722
 
8723
+ #: src/lib/src/Modules/LoginGuard/Strings.php:329
8724
+ msgid "Limit account access requests to every X seconds"
 
8725
  msgstr ""
8726
 
8727
+ #: src/lib/src/Modules/LoginGuard/Strings.php:330
8728
  msgid ""
8729
+ "WordPress will process only ONE account access attempt per number of seconds "
8730
+ "specified."
8731
  msgstr ""
8732
 
8733
+ #: src/lib/src/Modules/LoginGuard/Strings.php:331
8734
+ msgid "Zero (0) turns this off."
8735
  msgstr ""
8736
 
8737
+ #: src/lib/src/Modules/LoginGuard/Strings.php:337
8738
+ msgid "User Registration"
 
8739
  msgstr ""
8740
 
8741
+ #: src/lib/src/Modules/LoginGuard/Strings.php:338
8742
+ msgid "Apply Brute Force Protection To User Registration And Lost Passwords"
8743
  msgstr ""
8744
 
8745
+ #: src/lib/src/Modules/LoginGuard/Strings.php:339
8746
  msgid ""
8747
+ "When enabled, settings in this section will also apply to new user "
8748
+ "registration and users trying to reset passwords."
8749
  msgstr ""
8750
 
8751
+ #: src/lib/src/Modules/LoginGuard/Strings.php:343
8752
+ msgid "Allow U2F"
8753
  msgstr ""
8754
 
8755
+ #: src/lib/src/Modules/LoginGuard/Strings.php:344
8756
+ msgid "Allow Registration Of U2F Devices"
8757
  msgstr ""
8758
 
8759
+ #: src/lib/src/Modules/LoginGuard/Strings.php:346
8760
+ msgid "Allow users to register U2F devices to complete their login."
8761
  msgstr ""
8762
 
8763
+ #: src/lib/src/Modules/LoginGuard/Strings.php:347
8764
+ msgid ""
8765
+ "Currently only U2F keys are supported. Built-in fingerprint scanners aren't "
8766
+ "supported (yet)."
8767
  msgstr ""
8768
 
8769
+ #: src/lib/src/Modules/LoginGuard/Strings.php:352
8770
+ msgid "Allow Yubikey OTP"
8771
  msgstr ""
8772
 
8773
+ #: src/lib/src/Modules/LoginGuard/Strings.php:353
8774
+ msgid "Allow Yubikey Registration For One Time Passwords"
8775
  msgstr ""
8776
 
8777
+ #: src/lib/src/Modules/LoginGuard/Strings.php:354
8778
  msgid ""
8779
+ "Combined with your Yubikey API details this will form the basis of your "
8780
+ "Yubikey Authentication"
8781
  msgstr ""
8782
 
8783
+ #: src/lib/src/Modules/LoginGuard/Strings.php:358
8784
+ msgid "Yubikey App ID"
8785
  msgstr ""
8786
 
8787
+ #: src/lib/src/Modules/LoginGuard/Strings.php:359
8788
+ msgid "Your Unique Yubikey App ID"
 
 
8789
  msgstr ""
8790
 
8791
+ #: src/lib/src/Modules/LoginGuard/Strings.php:361
8792
+ msgid ""
8793
+ "Combined with your Yubikey API Key this will form the basis of your Yubikey "
8794
+ "Authentication"
8795
  msgstr ""
8796
 
8797
+ #: src/lib/src/Modules/LoginGuard/Strings.php:362
8798
+ msgid ""
8799
+ "Please review the info link on how to obtain your own Yubikey App ID and API "
8800
+ "Key."
8801
  msgstr ""
8802
 
8803
+ #: src/lib/src/Modules/LoginGuard/Strings.php:367
8804
+ msgid "Yubikey API Key"
 
8805
  msgstr ""
8806
 
8807
+ #: src/lib/src/Modules/LoginGuard/Strings.php:368
8808
+ msgid "Your Unique Yubikey App API Key"
8809
  msgstr ""
8810
 
8811
+ #: src/lib/src/Modules/LoginGuard/Strings.php:369
8812
+ msgid ""
8813
+ "Combined with your Yubikey App ID this will form the basis of your Yubikey "
8814
+ "Authentication."
8815
  msgstr ""
8816
 
8817
+ #: src/lib/src/Modules/LoginGuard/Strings.php:370
8818
+ msgid ""
8819
+ "Please review the info link on how to get your own Yubikey App ID and API "
8820
+ "Key."
8821
  msgstr ""
8822
 
8823
+ #: src/lib/src/Modules/LoginGuard/Strings.php:374
8824
+ msgid "Yubikey Unique Keys"
8825
+ msgstr ""
8826
+
8827
+ #: src/lib/src/Modules/LoginGuard/Strings.php:375
8828
  msgid ""
8829
+ "This method for Yubikeys is no longer supported. Please see your user profile"
 
8830
  msgstr ""
8831
 
8832
+ #: src/lib/src/Modules/LoginGuard/Strings.php:376
8833
+ msgid "Format"
8834
  msgstr ""
8835
 
8836
+ #: src/lib/src/Modules/LoginGuard/Strings.php:377
8837
+ msgid "Provide Username<->Yubikey Pairs that are usable for this site."
8838
  msgstr ""
8839
 
8840
+ #: src/lib/src/Modules/LoginGuard/Strings.php:378
8841
  msgid ""
8842
+ "If a Username is not assigned a Yubikey, Yubikey Authentication is OFF for "
8843
+ "that user."
8844
  msgstr ""
8845
 
8846
+ #: src/lib/src/Modules/LoginGuard/Strings.php:379
8847
+ msgid ""
8848
+ "Each [Username,Key] pair should be separated by a new line: you only need to "
8849
+ "provide the first 12 characters of the yubikey."
8850
  msgstr ""
8851
 
8852
+ #: src/lib/src/Modules/LoginGuard/Strings.php:383
8853
+ msgid "GASP Checkbox Text"
8854
  msgstr ""
8855
 
8856
+ #: src/lib/src/Modules/LoginGuard/Strings.php:384
8857
+ msgid "The User Message Displayed Next To The GASP Checkbox"
8858
  msgstr ""
8859
 
8860
+ #: src/lib/src/Modules/LoginGuard/Strings.php:385
8861
  msgid ""
8862
+ "You can change the text displayed to the user beside the checkbox if you "
8863
+ "need a custom message."
8864
  msgstr ""
8865
 
8866
+ #: src/lib/src/Modules/LoginGuard/Strings.php:390
8867
+ msgid "GASP Alert Text"
8868
  msgstr ""
8869
 
8870
+ #: src/lib/src/Modules/LoginGuard/Strings.php:391
8871
+ msgid "The Message Displayed If The User Doesn't Check The Box"
8872
  msgstr ""
8873
 
8874
+ #: src/lib/src/Modules/LoginGuard/Strings.php:392
8875
+ msgid ""
8876
+ "You can change the text displayed to the user in the alert message if they "
8877
+ "don't check the box."
8878
  msgstr ""
8879
 
8880
+ #: src/lib/src/Modules/LoginGuard/Strings.php:398
8881
+ msgid "AntiBot JS"
 
 
8882
  msgstr ""
8883
 
8884
+ #: src/lib/src/Modules/LoginGuard/Strings.php:399
8885
+ msgid "Use AntiBot JS Includes For Custom 3rd Party Forms"
 
 
8886
  msgstr ""
8887
 
8888
+ #: src/lib/src/Modules/LoginGuard/Strings.php:400
8889
+ msgid ""
8890
+ "Important: This is experimental. Please contact support for further "
8891
+ "assistance."
8892
  msgstr ""
8893
 
8894
+ #: src/lib/src/Modules/LoginGuard/UI.php:21
8895
+ msgid "The ability of this site to send email hasn't been verified."
8896
  msgstr ""
8897
 
8898
+ #: src/lib/src/Modules/LoginGuard/UI.php:22
8899
  msgid ""
8900
+ "Please click to re-save your settings to trigger another verification email."
 
8901
  msgstr ""
8902
 
8903
+ #: src/lib/src/Modules/LoginGuard/UI.php:26
8904
+ msgid ""
8905
+ "2FA by email demands that your WP site is properly configured to send email."
8906
  msgstr ""
8907
 
8908
+ #: src/lib/src/Modules/LoginGuard/UI.php:27
8909
+ msgid ""
8910
+ "This is a common problem and you may get locked out in the future if you "
8911
+ "ignore this."
8912
  msgstr ""
8913
 
8914
+ #: src/lib/src/Modules/LoginGuard/UI.php:44
8915
+ msgid ""
8916
+ "AntiBot detection isn't being applied to your site because you haven't "
8917
+ "selected any forms to protect, such as Login or Register."
8918
  msgstr ""
8919
 
8920
+ #: src/lib/src/Modules/LoginGuard/UI.php:58
8921
+ #, php-format
8922
  msgid ""
8923
+ "%s has an integration available to protect the login forms of a 3rd party "
8924
+ "plugin you're using: %s"
8925
  msgstr ""
8926
 
8927
+ #: src/lib/src/Modules/LoginGuard/UI.php:62
8928
+ msgid "View the available integrations."
8929
  msgstr ""
8930
 
8931
+ #: src/lib/src/Modules/LoginGuard/UI.php:72
8932
  msgid ""
8933
+ "It appears that your server time configuration is out of sync - Please "
8934
+ "contact your server admin, as features like Google Authenticator wont work."
8935
  msgstr ""
8936
 
8937
+ #: src/lib/src/Modules/LoginGuard/UI.php:85
8938
+ msgid ""
8939
+ "Certain user roles are set for email authentication enforcement that aren't "
8940
+ "currently available"
8941
  msgstr ""
8942
 
8943
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:93
8944
  #, php-format
8945
+ msgid "%s Plugin Is Too Old"
8946
  msgstr ""
8947
 
8948
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:96
8949
+ #, php-format
8950
+ msgid ""
8951
+ "There are at least 2 major upgrades to the %s plugin since your version."
8952
  msgstr ""
8953
 
8954
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:99
8955
+ msgid ""
8956
+ "We recommended keeping your Shield plugin up-to-date with the latest "
8957
+ "features."
8958
  msgstr ""
8959
 
8960
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:100
8961
+ msgid ""
8962
+ "We can't support old versions of Shield and certain features may not be "
8963
+ "working properly as our API develops."
8964
  msgstr ""
8965
 
8966
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:102
8967
+ msgid "Click here to go to the WordPress updates page"
8968
  msgstr ""
8969
 
8970
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:116
8971
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:136
8972
+ #, php-format
8973
+ msgid "%s is not protecting your site"
8974
  msgstr ""
8975
 
8976
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:118
8977
+ #, php-format
8978
+ msgid "Please delete the \"%s\" file to reactivate %s protection"
8979
  msgstr ""
8980
 
8981
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:122
8982
+ msgid "Click here to automatically delete the file"
8983
  msgstr ""
8984
 
8985
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:138
8986
+ msgid "The plugin is currently switched-off completely."
8987
  msgstr ""
8988
 
8989
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:139
8990
+ msgid "All features and any security protection they provide are disabled."
 
 
8991
  msgstr ""
8992
 
8993
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:156
8994
+ msgid "Site Ground Optimizer plugin has a conflict"
 
 
8995
  msgstr ""
8996
 
8997
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:158
8998
+ #, php-format
8999
  msgid ""
9000
+ "The SG Optimizer plugin has 2 settings which are breaking your site and "
9001
+ "certain %s features."
9002
  msgstr ""
9003
 
9004
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:163
9005
+ msgid "Click here to automatically turn off those options."
9006
  msgstr ""
9007
 
9008
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:202
9009
+ #, php-format
9010
+ msgid "Update available for the %s plugin"
9011
  msgstr ""
9012
 
9013
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:203
9014
+ msgid "Please click to update immediately"
9015
  msgstr ""
9016
 
9017
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:204
9018
+ msgid "Dismiss this notice"
 
9019
  msgstr ""
9020
 
9021
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:220
9022
+ msgid "I don't need the setup wizard just now"
9023
  msgstr ""
9024
 
9025
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:221
9026
  #, php-format
9027
+ msgid "Get started quickly with the %s Setup Wizard"
9028
  msgstr ""
9029
 
9030
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:222
 
 
 
9031
  #, php-format
9032
+ msgid ""
9033
+ "The welcome wizard will help you get setup quickly and become familiar with "
9034
+ "some of the core %s features"
9035
  msgstr ""
9036
 
9037
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:223
9038
+ msgid "Launch the welcome wizard"
 
 
 
 
9039
  msgstr ""
9040
 
9041
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:239
9042
  #, php-format
9043
+ msgid "Make %s even better by sharing usage info?"
9044
  msgstr ""
9045
 
9046
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:240
9047
  #, php-format
9048
+ msgid "We're hoping to understand how %s is configured and used."
 
 
 
 
 
 
9049
  msgstr ""
9050
 
9051
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:241
9052
+ msgid "We'd like to understand how effective it is on a global scale."
9053
  msgstr ""
9054
 
9055
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:242
9056
  msgid ""
9057
+ "The data sent is always completely anonymous and we can never track you or "
9058
+ "your site."
9059
  msgstr ""
9060
 
9061
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:243
9062
+ msgid "It can be turned-off at any time within the plugin options."
9063
  msgstr ""
9064
 
9065
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:244
9066
+ msgid "Click to see the RAW data that would be sent"
9067
  msgstr ""
9068
 
9069
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:247
9070
+ msgid "Absolutely"
 
 
9071
  msgstr ""
9072
 
9073
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:248
9074
+ msgid "Yes, I'd be happy share this info"
 
 
9075
  msgstr ""
9076
 
9077
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:249
9078
+ msgid "I'd like to learn more, please"
 
 
9079
  msgstr ""
9080
 
9081
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:250
9082
+ msgid "No, I don't want to help"
9083
  msgstr ""
9084
 
9085
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:268
9086
+ msgid "Can You Help Us With A Quick Review?"
 
 
 
9087
  msgstr ""
9088
 
9089
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:269
9090
+ msgid "I'd rather not show this support"
 
 
 
9091
  msgstr ""
9092
 
9093
+ #: src/lib/src/Modules/Plugin/AdminNotices.php:269
9094
+ msgid "I've done this already"
9095
  msgstr ""
9096
 
9097
+ #: src/lib/src/Modules/Plugin/AjaxHandler.php:110
9098
+ #: src/lib/src/Modules/UserManagement/AjaxHandler.php:67
9099
+ msgid "No items selected."
9100
  msgstr ""
9101
 
9102
+ #: src/lib/src/Modules/Plugin/AjaxHandler.php:113
9103
+ #: src/lib/src/Modules/UserManagement/AjaxHandler.php:70
9104
+ msgid "Not a supported action."
 
9105
  msgstr ""
9106
 
9107
+ #: src/lib/src/Modules/Plugin/AjaxHandler.php:124
9108
+ #: src/lib/src/Modules/UserManagement/AjaxHandler.php:89
9109
+ msgid "Selected items were deleted."
9110
  msgstr ""
9111
 
9112
+ #: src/lib/src/Modules/Plugin/AjaxHandler.php:139
9113
+ msgid "File could not be automatically removed."
9114
  msgstr ""
9115
 
9116
+ #: src/lib/src/Modules/Plugin/AjaxHandler.php:162
9117
+ msgid "Note not found."
9118
  msgstr ""
9119
 
9120
+ #: src/lib/src/Modules/Plugin/AjaxHandler.php:171
9121
+ msgid "Note deleted"
 
 
9122
  msgstr ""
9123
 
9124
+ #: src/lib/src/Modules/Plugin/AjaxHandler.php:174
9125
+ msgid "Note couldn't be deleted"
9126
  msgstr ""
9127
 
9128
+ #: src/lib/src/Modules/Plugin/AjaxHandler.php:199
9129
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/Import.php:83
9130
+ msgid "Please check the box to confirm your intent to overwrite settings"
9131
  msgstr ""
9132
 
9133
+ #: src/lib/src/Modules/Plugin/AjaxHandler.php:218
9134
+ #: src/lib/src/Modules/Plugin/ModCon.php:127
9135
+ msgid "Options imported successfully"
9136
  msgstr ""
9137
 
9138
+ #: src/lib/src/Modules/Plugin/AjaxHandler.php:218
9139
+ msgid "Options failed to import"
9140
  msgstr ""
9141
 
9142
+ #: src/lib/src/Modules/Plugin/AjaxHandler.php:235
9143
+ msgid "Sorry, the Admin Notes feature isn't available."
 
9144
  msgstr ""
9145
 
9146
+ #: src/lib/src/Modules/Plugin/AjaxHandler.php:238
9147
+ msgid "Sorry, but it appears your note was empty."
 
 
9148
  msgstr ""
9149
 
9150
+ #: src/lib/src/Modules/Plugin/AjaxHandler.php:244
9151
+ msgid "Note created successfully."
9152
  msgstr ""
9153
 
9154
+ #: src/lib/src/Modules/Plugin/AjaxHandler.php:244
9155
+ msgid "Note could not be created."
9156
  msgstr ""
9157
 
9158
+ #: src/lib/src/Modules/Plugin/AjaxHandler.php:256
9159
+ msgid "Switching-off conflicting options appears to have been successful."
9160
  msgstr ""
9161
 
9162
+ #: src/lib/src/Modules/Plugin/AjaxHandler.php:257
9163
+ msgid "Switching-off conflicting options appears to have failed."
9164
+ msgstr ""
9165
+
9166
+ #: src/lib/src/Modules/Plugin/Components/BadgeWidget.php:26
9167
  #, php-format
9168
+ msgid "%s Plugin Badge"
9169
  msgstr ""
9170
 
9171
+ #: src/lib/src/Modules/Plugin/Components/BadgeWidget.php:28
9172
  #, php-format
9173
+ msgid ""
9174
+ "You can now help spread the word about the %s plugin anywhere on your site"
9175
  msgstr ""
9176
 
9177
+ #: src/lib/src/Modules/Plugin/Components/BadgeWidget.php:68
9178
+ msgid "Site Secured"
9179
  msgstr ""
9180
 
9181
+ #: src/lib/src/Modules/Plugin/Components/PluginBadge.php:91
9182
+ #, php-format
9183
+ msgid "This Site Is Protected By %s"
 
9184
  msgstr ""
9185
 
9186
+ #: src/lib/src/Modules/Plugin/Insights/AdminNotes.php:34
9187
+ msgid "Administrator Notes"
9188
  msgstr ""
9189
 
9190
+ #: src/lib/src/Modules/Plugin/Insights/AdminNotes.php:35
9191
+ msgid "Use this feature to make ongoing notes and to-dos"
 
 
9192
  msgstr ""
9193
 
9194
+ #: src/lib/src/Modules/Plugin/Insights/AdminNotes.php:36
9195
+ msgid "Add Note"
 
 
9196
  msgstr ""
9197
 
9198
+ #: src/lib/src/Modules/Plugin/Insights/AdminNotes.php:37
9199
+ msgid "New Note"
9200
  msgstr ""
9201
 
9202
+ #: src/lib/src/Modules/Plugin/Insights/AdminNotes.php:38
9203
+ msgid "Enter new note here"
9204
  msgstr ""
9205
 
9206
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:57
9207
+ msgid "Shield Settings"
 
 
9208
  msgstr ""
9209
 
9210
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:60
9211
+ #, php-format
9212
+ msgid "%s settings are arranged into modules."
 
 
 
 
9213
  msgstr ""
9214
 
9215
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:61
9216
+ msgid "Choose the module you need from the dropdown."
9217
  msgstr ""
9218
 
9219
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:65
9220
+ msgid "Go To General Settings"
 
 
9221
  msgstr ""
9222
 
9223
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:69
9224
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:139
9225
+ msgid "Scans & Hack Guard Settings"
 
 
 
9226
  msgstr ""
9227
 
9228
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:75
9229
+ msgid "Select Module"
 
9230
  msgstr ""
9231
 
9232
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:108
9233
+ msgid "No notes made yet."
 
 
9234
  msgstr ""
9235
 
9236
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:116
9237
+ #, php-format
9238
  msgid ""
9239
+ "Review your entire %s security configuration at a glance to see what's "
9240
+ "working and what's not."
9241
  msgstr ""
9242
 
9243
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:120
9244
+ msgid "See My Security Overview"
9245
  msgstr ""
9246
 
9247
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:127
9248
+ msgid "Scans and Protection"
9249
  msgstr ""
9250
 
9251
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:130
9252
+ #, php-format
9253
  msgid ""
9254
+ "Use %s Scans to automatically detect and repair intrusions on your site."
9255
  msgstr ""
9256
 
9257
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:131
9258
  #, php-format
9259
+ msgid ""
9260
+ "%s scans WordPress core files, plugins, themes and will detect Malware "
9261
+ "(ShieldPRO)."
 
 
 
 
9262
  msgstr ""
9263
 
9264
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:148
9265
+ #, php-format
9266
+ msgid "Lock down access to %s itself to specific WP Administrators."
9267
  msgstr ""
9268
 
9269
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:150
9270
+ #, php-format
9271
  msgid ""
9272
+ "Restrict access to %s itself and prevent unwanted changes to your site by "
9273
+ "other administrators."
9274
  msgstr ""
9275
 
9276
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:154
9277
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:55
9278
+ msgid "Security Admin Settings"
9279
  msgstr ""
9280
 
9281
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:161
9282
+ msgid "Reports and Stats"
 
9283
  msgstr ""
9284
 
9285
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:163
9286
+ #, php-format
9287
+ msgid "See the effect on your site security by %s in numbers"
9288
  msgstr ""
9289
 
9290
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:165
9291
+ #, php-format
9292
  msgid ""
9293
+ "Display charts to see how %s is performing over time and in which areas your "
9294
+ "site has been most impacted."
9295
  msgstr ""
9296
 
9297
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:169
9298
+ msgid "View Reports and Stats"
9299
  msgstr ""
9300
 
9301
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:176
9302
+ msgid "Free ShieldPRO Trial"
9303
  msgstr ""
9304
 
9305
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:179
9306
+ msgid "Full, unrestricted access to ShieldPRO with no obligation."
9307
  msgstr ""
9308
 
9309
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:180
9310
+ msgid "Turn-on the ShieldPRO trial within 60 seconds."
 
9311
  msgstr ""
9312
 
9313
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:184
9314
+ msgid "Get The Free Trial"
9315
  msgstr ""
9316
 
9317
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:193
9318
+ msgid "IP Blocking and Bypass"
9319
  msgstr ""
9320
 
9321
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:196
9322
  msgid ""
9323
+ "Shield automatically detects and blocks bad IP addresses based on your "
9324
+ "security settings."
9325
  msgstr ""
9326
 
9327
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:197
9328
+ msgid ""
9329
+ "The IP Analysis Tool shows you all information for a given IP as it relates "
9330
+ "to your site."
9331
  msgstr ""
9332
 
9333
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:201
9334
+ msgid "Analyse & Manage IPs"
9335
  msgstr ""
9336
 
9337
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:205
9338
+ msgid "IP Blocking Settings"
9339
  msgstr ""
9340
 
9341
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:215
9342
+ msgid "Provides in-depth logging for all major WordPress events."
 
 
9343
  msgstr ""
9344
 
9345
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:219
9346
+ msgid "View Audit Log"
9347
  msgstr ""
9348
 
9349
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:223
9350
+ msgid "Audit Trail Settings"
 
9351
  msgstr ""
9352
 
9353
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:230
9354
+ msgid "Traffic Logging"
9355
  msgstr ""
9356
 
9357
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:233
9358
+ msgid "Use traffic logging to monitor visitor requests to your site."
9359
  msgstr ""
9360
 
9361
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:234
9362
+ msgid ""
9363
+ "Traffic Rate Limiting lets you throttle requests from any single visitor."
9364
  msgstr ""
9365
 
9366
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:238
9367
+ msgid "View Traffic Log"
9368
  msgstr ""
9369
 
9370
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:242
9371
+ msgid "Traffic Log Settings"
9372
  msgstr ""
9373
 
9374
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:249
9375
+ msgid "WordPress Users"
9376
  msgstr ""
9377
 
9378
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:252
9379
  msgid ""
9380
+ "Adds fine control over user sessions, account re-use, password strength and "
9381
+ "expiration, and user suspension."
9382
  msgstr ""
9383
 
9384
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:256
9385
+ msgid "View User Sessions"
9386
  msgstr ""
9387
 
9388
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:260
9389
+ msgid "User Settings"
9390
  msgstr ""
9391
 
9392
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:269
9393
+ msgid "Block all Comment SPAM from bots and even detect SPAMMY human comments."
9394
  msgstr ""
9395
 
9396
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:271
9397
+ #, php-format
9398
  msgid ""
9399
+ "Shield blocks 100% of all automated comments by bots (the most common type "
9400
+ "of SPAM)."
9401
  msgstr ""
9402
 
9403
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:272
9404
+ msgid "The Human SPAM filter will look for common spam words and content."
9405
  msgstr ""
9406
 
9407
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:274
9408
+ msgid "Privacy Note"
9409
  msgstr ""
9410
 
9411
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:275
9412
  msgid ""
9413
+ "Unlike Akismet, your comments and data are never sent off-site for analysis."
 
9414
  msgstr ""
9415
 
9416
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:280
9417
+ msgid "Bot SPAM Settings"
9418
  msgstr ""
9419
 
9420
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:284
9421
+ msgid "Human SPAM Settings"
9422
  msgstr ""
9423
 
9424
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:294
9425
  msgid ""
9426
+ "Use the import/export feature to quickly setup a new site based on the "
9427
+ "settings of another site."
9428
  msgstr ""
9429
 
9430
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:295
9431
+ msgid "You can also setup automatic syncing of settings between sites."
 
 
9432
  msgstr ""
9433
 
9434
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:299
9435
+ msgid "Run Import/Export"
9436
  msgstr ""
9437
 
9438
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:303
9439
+ msgid "Import/Export Settings"
9440
  msgstr ""
9441
 
9442
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:313
9443
  msgid ""
9444
+ "By upgrading to ShieldPRO, you support ongoing Shield development and get "
9445
+ "access to exclusive PRO features."
9446
  msgstr ""
9447
 
9448
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:317
9449
+ msgid "Manage PRO"
 
 
9450
  msgstr ""
9451
 
9452
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:321
9453
+ msgid "See Exclusive ShieldPRO Features"
9454
  msgstr ""
9455
 
9456
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:332
9457
+ msgid "Review and Analyse all visitor IPs that have an impact on your site."
 
9458
  msgstr ""
9459
 
9460
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:334
9461
+ msgid "Use these to keep note of important items or to-dos."
9462
  msgstr ""
9463
 
9464
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:339
9465
+ msgid "Manage Admin Notes"
9466
  msgstr ""
9467
 
9468
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:346
9469
+ msgid "Whitelabel"
9470
+ msgstr ""
9471
+
9472
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:349
9473
+ msgid "Re-brand the Shield Security plugin your image."
9474
  msgstr ""
9475
 
9476
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:350
9477
  msgid ""
9478
+ "Use this to enhance and solidify your brand with your clients and visitors."
 
9479
  msgstr ""
9480
 
9481
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:354
9482
+ msgid "Manage White Label"
9483
  msgstr ""
9484
 
9485
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:365
9486
+ msgid "Shield integrates with 3rd party plugins and services."
9487
  msgstr ""
9488
 
9489
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:366
9490
  msgid ""
9491
+ "Determine what integrations Shield should use and manage the settings for "
9492
+ "them."
9493
  msgstr ""
9494
 
9495
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:370
9496
+ msgid "Manage Integrations"
9497
  msgstr ""
9498
 
9499
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:380
9500
+ #, php-format
9501
+ msgid "Important information about %s releases and changes."
9502
  msgstr ""
9503
 
9504
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:394
9505
  msgid ""
9506
+ "If you contact support, they may ask you to show them your Debug Information "
9507
+ "page."
9508
+ msgstr ""
9509
+
9510
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:395
9511
+ msgid ""
9512
+ "It's also an interesting place to see a summary of your WordPress "
9513
+ "configuration in 1 place."
9514
+ msgstr ""
9515
+
9516
+ #: src/lib/src/Modules/Plugin/Insights/DashboardCards.php:399
9517
+ msgid "View Debug Info"
9518
+ msgstr ""
9519
+
9520
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:24
9521
+ msgid "Reporting Email"
9522
  msgstr ""
9523
 
9524
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:27
9525
  #, php-format
9526
+ msgid "Email address for reports set to: %s"
9527
  msgstr ""
9528
 
9529
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:28
9530
  #, php-format
9531
+ msgid "No reporting address provided - defaulting to: %s"
9532
  msgstr ""
9533
 
9534
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:33
9535
+ msgid "Visitor IP Detection"
9536
  msgstr ""
9537
 
9538
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:35
9539
+ #, php-format
9540
+ msgid "Visitor IP address source is: %s"
9541
  msgstr ""
9542
 
9543
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:45
9544
+ msgid "CAPTCHA keys have been provided"
9545
  msgstr ""
9546
 
9547
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:46
9548
+ msgid "CAPTCHA keys haven't been provided"
9549
  msgstr ""
9550
 
9551
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:59
9552
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/ImportExportController.php:189
9553
+ #: src/lib/src/Modules/Plugin/Strings.php:505
9554
+ msgid "General Settings"
9555
  msgstr ""
9556
 
9557
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:63
9558
  #, php-format
9559
+ msgid "General %s Settings"
9560
  msgstr ""
9561
 
9562
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:73
9563
+ msgid "DB Password"
9564
  msgstr ""
9565
 
9566
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:76
9567
+ msgid "WP Database password is very strong"
9568
  msgstr ""
9569
 
9570
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:77
9571
+ msgid "WP Database password appears to be weak"
9572
+ msgstr ""
9573
+
9574
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:79
9575
+ msgid "The database password should be strong."
9576
+ msgstr ""
9577
+
9578
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:97
9579
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:106
9580
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:116
9581
+ msgid "HTTPS"
9582
  msgstr ""
9583
 
9584
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:99
9585
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:108
9586
+ msgid "Site visitor traffic isn't protected by HTTPS"
9587
  msgstr ""
9588
 
9589
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:101
9590
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:120
9591
+ msgid "It's recommended that an SSL certificate is installed on your site."
 
 
9592
  msgstr ""
9593
 
9594
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:110
9595
+ msgid "HTTPS setting for Home URL and Site URL are not consistent."
9596
  msgstr ""
9597
 
9598
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:118
9599
+ msgid "Site visitor traffic set to use HTTPS"
 
9600
  msgstr ""
9601
 
9602
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:137
9603
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:160
9604
+ msgid "SSL Certificate"
9605
  msgstr ""
9606
 
9607
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:139
9608
+ msgid "SSL Certificate remains valid for at least the next 2 weeks"
9609
  msgstr ""
9610
 
9611
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:141
9612
  msgid ""
9613
+ "It's recommended to keep a valid SSL certificate installed at all times."
 
9614
  msgstr ""
9615
 
9616
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:148
9617
+ msgid "SSL certificate for this site has expired."
9618
  msgstr ""
9619
 
9620
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:149
9621
+ msgid "Renew your SSL certificate."
9622
  msgstr ""
9623
 
9624
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:152
9625
+ #, php-format
9626
+ msgid "SSL certificate will expire soon (%s days)"
9627
  msgstr ""
9628
 
9629
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:153
9630
+ msgid "Check or renew your SSL certificate."
9631
  msgstr ""
9632
 
9633
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:162
9634
+ msgid "Couldn't automatically test and verify your site SSL certificate"
9635
  msgstr ""
9636
 
9637
+ #: src/lib/src/Modules/Plugin/Insights/OverviewCards.php:164
9638
+ msgid "Error message"
9639
  msgstr ""
9640
 
9641
+ #: src/lib/src/Modules/Plugin/Lib/Debug/RecentEvents.php:23
9642
+ msgid "Recent Events Log"
9643
  msgstr ""
9644
 
9645
+ #: src/lib/src/Modules/Plugin/Lib/Debug/RecentEvents.php:24
9646
+ #, php-format
9647
+ msgid "Some of the most recent %s events"
9648
  msgstr ""
9649
 
9650
+ #: src/lib/src/Modules/Plugin/Lib/Debug/RecentEvents.php:63
9651
+ msgid "Not yet recorded"
9652
  msgstr ""
9653
 
9654
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/Export.php:54
9655
+ msgid "Handshake verification failed."
 
9656
  msgstr ""
9657
 
9658
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/Import.php:46
9659
+ msgid "Not importing a file that cannot be deleted"
 
9660
  msgstr ""
9661
 
9662
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/Import.php:51
9663
+ msgid "Import file was empty"
 
9664
  msgstr ""
9665
 
9666
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/Import.php:62
9667
+ msgid "Options data could not be found in uploaded file"
9668
  msgstr ""
9669
 
9670
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/Import.php:68
9671
+ msgid "Options data in the file wasn't of the correct format."
9672
  msgstr ""
9673
 
9674
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/Import.php:72
9675
+ msgid "import file"
9676
  msgstr ""
9677
 
9678
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/Import.php:80
9679
+ msgid "Not currently logged-in as security admin"
9680
  msgstr ""
9681
 
9682
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/Import.php:89
9683
+ msgid "Please select a file to upload"
 
9684
  msgstr ""
9685
 
9686
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/Import.php:96
9687
+ msgid "Uploading of file failed"
9688
  msgstr ""
9689
 
9690
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/ImportExportController.php:165
9691
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/ImportExportController.php:167
9692
+ msgid "Import From File"
9693
  msgstr ""
9694
 
9695
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/ImportExportController.php:166
9696
+ msgid "Import From Another Site"
9697
  msgstr ""
9698
 
9699
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/ImportExportController.php:168
9700
+ msgid "Upload an exported options file you downloaded from another site"
9701
  msgstr ""
9702
 
9703
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/ImportExportController.php:169
9704
+ msgid "Select file to import options from"
9705
  msgstr ""
9706
 
9707
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/ImportExportController.php:170
9708
+ msgid "I Understand Existing Options Will Be Overwritten"
 
9709
  msgstr ""
9710
 
9711
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/ImportExportController.php:171
9712
+ msgid "Please be sure that this is what you want."
 
 
9713
  msgstr ""
9714
 
9715
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/ImportExportController.php:172
9716
+ msgid "This action can't be undone."
9717
  msgstr ""
9718
 
9719
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/ImportExportController.php:173
9720
+ msgid "Import From Site"
 
9721
  msgstr ""
9722
 
9723
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/ImportExportController.php:175
9724
+ msgid "Download Options Export File"
9725
  msgstr ""
9726
 
9727
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/ImportExportController.php:176
9728
+ msgid "Use this file to copy options from this site into another site"
9729
  msgstr ""
9730
 
9731
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/ImportExportController.php:178
9732
+ msgid "Import options directly from another site"
9733
  msgstr ""
9734
 
9735
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/ImportExportController.php:179
9736
+ msgid "Master Site URL"
9737
  msgstr ""
9738
 
9739
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/ImportExportController.php:181
9740
  #, php-format
9741
+ msgid "Remember to include %s or %s"
9742
  msgstr ""
9743
 
9744
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/ImportExportController.php:185
9745
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/ImportExportController.php:189
9746
+ #: src/lib/src/Modules/Plugin/Strings.php:369
9747
+ msgid "Secret Key"
9748
  msgstr ""
9749
 
9750
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/ImportExportController.php:186
9751
+ msgid "Master Site Secret Key"
 
9752
  msgstr ""
9753
 
9754
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/ImportExportController.php:187
9755
+ msgid "Create Shield Network"
 
9756
  msgstr ""
9757
 
9758
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/ImportExportController.php:188
9759
  #, php-format
9760
+ msgid "The secret key is found in: %s"
9761
  msgstr ""
9762
 
9763
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/ImportExportController.php:191
9764
+ msgid "Turn On"
 
9765
  msgstr ""
9766
 
9767
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/ImportExportController.php:193
9768
+ msgid "No Change"
9769
  msgstr ""
9770
 
9771
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/ImportExportController.php:195
9772
+ msgid "Checking this option on will link this site to Master site."
9773
  msgstr ""
9774
 
9775
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/ImportExportController.php:196
9776
+ msgid "Options will be automatically imported from the Master site each night"
 
9777
  msgstr ""
9778
 
9779
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/ImportExportController.php:197
9780
+ msgid ""
9781
+ "When you adjust options on the Master site, they will be reflected in this "
9782
+ "site after the automatic import"
9783
  msgstr ""
9784
 
9785
+ #: src/lib/src/Modules/Plugin/Lib/ImportExport/ImportExportController.php:199
9786
+ msgid "Import Options"
 
 
9787
  msgstr ""
9788
 
9789
+ #: src/lib/src/Modules/Plugin/ModCon.php:511
9790
+ msgid "Downloading file, please wait..."
9791
  msgstr ""
9792
 
9793
+ #: src/lib/src/Modules/Plugin/ModCon.php:512
9794
+ msgid "There was a problem downloading the file."
9795
  msgstr ""
9796
 
9797
+ #: src/lib/src/Modules/Plugin/Processor.php:53
9798
+ #, php-format
9799
+ msgid "Days Installed: %s"
9800
  msgstr ""
9801
 
9802
+ #: src/lib/src/Modules/Plugin/Processor.php:54
9803
  #, php-format
9804
+ msgid "%s is provided by %s"
9805
  msgstr ""
9806
 
9807
+ #: src/lib/src/Modules/Plugin/Strings.php:17
9808
+ msgid "Custom Debug"
9809
  msgstr ""
9810
 
9811
+ #: src/lib/src/Modules/Plugin/Strings.php:23
9812
+ #: src/lib/src/Modules/Plugin/Strings.php:30
9813
+ msgid "Loaded"
9814
  msgstr ""
9815
 
9816
+ #: src/lib/src/Modules/Plugin/Strings.php:24
9817
+ msgid "Front Page"
 
9818
  msgstr ""
9819
 
9820
+ #: src/lib/src/Modules/Plugin/Strings.php:26
9821
+ msgid "Front page loaded"
 
9822
  msgstr ""
9823
 
9824
+ #: src/lib/src/Modules/Plugin/Strings.php:31
9825
+ msgid "Login Page"
 
9826
  msgstr ""
9827
 
9828
+ #: src/lib/src/Modules/Plugin/Strings.php:33
9829
+ msgid "Login page loaded"
9830
  msgstr ""
9831
 
9832
+ #: src/lib/src/Modules/Plugin/Strings.php:37
9833
+ msgid "CAPTCHA Pass"
 
 
9834
  msgstr ""
9835
 
9836
+ #: src/lib/src/Modules/Plugin/Strings.php:39
9837
+ msgid "CAPTCHA test successful."
9838
  msgstr ""
9839
 
9840
+ #: src/lib/src/Modules/Plugin/Strings.php:43
9841
+ msgid "CAPTCHA Fail"
9842
  msgstr ""
9843
 
9844
+ #: src/lib/src/Modules/Plugin/Strings.php:45
9845
+ msgid "CAPTCHA test failed."
 
 
9846
  msgstr ""
9847
 
9848
+ #: src/lib/src/Modules/Plugin/Strings.php:49
9849
+ msgid "Test Cron Run"
 
 
9850
  msgstr ""
9851
 
9852
+ #: src/lib/src/Modules/Plugin/Strings.php:51
9853
+ msgid "Test WP Cron ran successfully."
9854
  msgstr ""
9855
 
9856
+ #: src/lib/src/Modules/Plugin/Strings.php:55
9857
+ msgid "Import Notify Sent"
9858
  msgstr ""
9859
 
9860
+ #: src/lib/src/Modules/Plugin/Strings.php:57
9861
+ msgid "Sent notifications to whitelisted sites for required options import."
9862
  msgstr ""
9863
 
9864
+ #: src/lib/src/Modules/Plugin/Strings.php:61
9865
+ msgid "Import Notify Received"
 
 
9866
  msgstr ""
9867
 
9868
+ #: src/lib/src/Modules/Plugin/Strings.php:63
9869
+ msgid "Received notification that options import required."
 
 
9870
  msgstr ""
9871
 
9872
+ #: src/lib/src/Modules/Plugin/Strings.php:64
9873
+ msgid "Current master site: {{master_site}}"
 
9874
  msgstr ""
9875
 
9876
+ #: src/lib/src/Modules/Plugin/Strings.php:68
9877
+ msgid "Options Exported"
9878
  msgstr ""
9879
 
9880
+ #: src/lib/src/Modules/Plugin/Strings.php:70
9881
+ msgid "Options exported to site: {{site}}"
9882
  msgstr ""
9883
 
9884
+ #: src/lib/src/Modules/Plugin/Strings.php:74
9885
+ msgid "Options Imported"
 
9886
  msgstr ""
9887
 
9888
+ #: src/lib/src/Modules/Plugin/Strings.php:76
9889
+ msgid "Options exported from site: {{site}}"
9890
  msgstr ""
9891
 
9892
+ #: src/lib/src/Modules/Plugin/Strings.php:80
9893
+ msgid "Whitelist Site Added"
9894
  msgstr ""
9895
 
9896
+ #: src/lib/src/Modules/Plugin/Strings.php:82
9897
+ msgid "Site added to export white list: {{site}}"
 
 
9898
  msgstr ""
9899
 
9900
+ #: src/lib/src/Modules/Plugin/Strings.php:86
9901
+ #: src/lib/src/Modules/Plugin/Strings.php:92
9902
+ msgid "Whitelist Site Removed"
9903
  msgstr ""
9904
 
9905
+ #: src/lib/src/Modules/Plugin/Strings.php:88
9906
+ msgid "Site removed from export white list: {{site}}"
9907
  msgstr ""
9908
 
9909
+ #: src/lib/src/Modules/Plugin/Strings.php:94
9910
+ msgid "Master Site URL set: {{site}}"
 
 
9911
  msgstr ""
9912
 
9913
+ #: src/lib/src/Modules/Plugin/Strings.php:98
9914
+ msgid "AntiBot Pass"
 
 
9915
  msgstr ""
9916
 
9917
+ #: src/lib/src/Modules/Plugin/Strings.php:100
9918
+ msgid ""
9919
+ "Request passed the AntiBot Test with a Visitor Score of "
9920
+ "\"{{score}}\" (minimum score: {{minimum}})."
9921
  msgstr ""
9922
 
9923
+ #: src/lib/src/Modules/Plugin/Strings.php:104
9924
+ msgid "AntiBot Fail"
9925
  msgstr ""
9926
 
9927
+ #: src/lib/src/Modules/Plugin/Strings.php:106
9928
+ msgid ""
9929
+ "Request failed the AntiBot Test with a Visitor Score of "
9930
+ "\"{{score}}\" (minimum score: {{minimum}})."
9931
  msgstr ""
9932
 
9933
+ #: src/lib/src/Modules/Plugin/Strings.php:117
9934
+ msgid "Plugin Actions"
9935
  msgstr ""
9936
 
9937
+ #: src/lib/src/Modules/Plugin/Strings.php:118
9938
+ msgid "E.g. Import/Export"
9939
  msgstr ""
9940
 
9941
+ #: src/lib/src/Modules/Plugin/Strings.php:133
9942
+ msgid "Global Security Plugin Disable"
9943
  msgstr ""
9944
 
9945
+ #: src/lib/src/Modules/Plugin/Strings.php:136
9946
+ msgid "Use this option to completely disable all active Shield Protection."
 
 
9947
  msgstr ""
9948
 
9949
+ #: src/lib/src/Modules/Plugin/Strings.php:141
9950
+ #: src/lib/src/Modules/Plugin/Strings.php:142
9951
+ msgid "Plugin Defaults"
9952
  msgstr ""
9953
 
9954
+ #: src/lib/src/Modules/Plugin/Strings.php:144
9955
+ msgid "Important default settings used throughout the plugin."
9956
  msgstr ""
9957
 
9958
+ #: src/lib/src/Modules/Plugin/Strings.php:149
9959
+ #: src/lib/src/Modules/Plugin/Strings.php:150
9960
+ msgid "Import"
9961
  msgstr ""
9962
 
9963
+ #: src/lib/src/Modules/Plugin/Strings.php:149
9964
+ #: src/lib/src/Modules/Plugin/Strings.php:150
9965
+ msgid "Export"
9966
  msgstr ""
9967
 
9968
+ #: src/lib/src/Modules/Plugin/Strings.php:152
9969
+ msgid ""
9970
+ "Automatically import options, and deploy configurations across your entire "
9971
+ "network."
9972
  msgstr ""
9973
 
9974
+ #: src/lib/src/Modules/Plugin/Strings.php:153
9975
+ msgid "This is a Pro-only feature."
9976
  msgstr ""
9977
 
9978
+ #: src/lib/src/Modules/Plugin/Strings.php:163
9979
+ msgid "General Plugin Options"
9980
  msgstr ""
9981
 
9982
+ #: src/lib/src/Modules/Plugin/Strings.php:164
9983
+ msgid "General Options"
9984
  msgstr ""
9985
 
9986
+ #: src/lib/src/Modules/Plugin/Strings.php:171
9987
+ #, php-format
9988
+ msgid "Setup CAPTCHA for use across %s."
9989
  msgstr ""
9990
 
9991
+ #: src/lib/src/Modules/Plugin/Strings.php:175
9992
+ msgid "You must create your own CAPTCHA API Keys."
9993
  msgstr ""
9994
 
9995
+ #: src/lib/src/Modules/Plugin/Strings.php:176
9996
+ msgid "Google reCAPTCHA Keys"
9997
  msgstr ""
9998
 
9999
+ #: src/lib/src/Modules/Plugin/Strings.php:177
10000
+ msgid "hCaptcha Keys"
10001
  msgstr ""
10002
 
10003
+ #: src/lib/src/Modules/Plugin/Strings.php:179
10004
+ #, php-format
10005
+ msgid "Invisible CAPTCHA is available with %s Pro."
10006
  msgstr ""
10007
 
10008
+ #: src/lib/src/Modules/Plugin/Strings.php:184
10009
+ #: src/lib/src/Modules/Plugin/Strings.php:185
10010
+ msgid "Duo Security"
 
10011
  msgstr ""
10012
 
10013
+ #: src/lib/src/Modules/Plugin/Strings.php:214
10014
+ #, php-format
10015
+ msgid "Enable %s Protection"
10016
  msgstr ""
10017
 
10018
+ #: src/lib/src/Modules/Plugin/Strings.php:215
10019
+ msgid "Switch Off To Disable All Security Protection"
10020
  msgstr ""
10021
 
10022
+ #: src/lib/src/Modules/Plugin/Strings.php:217
10023
  msgid ""
10024
+ "You can keep the security plugin activated, but temporarily disable all "
10025
+ "protection it provides."
10026
  msgstr ""
10027
 
10028
+ #: src/lib/src/Modules/Plugin/Strings.php:226
10029
+ msgid "Show All Options"
 
 
10030
  msgstr ""
10031
 
10032
+ #: src/lib/src/Modules/Plugin/Strings.php:227
10033
+ msgid "Show All Options Including Those Marked As Advanced"
10034
  msgstr ""
10035
 
10036
  #: src/lib/src/Modules/Plugin/Strings.php:229
10037
+ msgid "Shield hides advanced options from view to simplify display."
 
 
10038
  msgstr ""
10039
 
10040
+ #: src/lib/src/Modules/Plugin/Strings.php:230
10041
+ msgid "Turn this option on to display advanced options at all times."
10042
  msgstr ""
10043
 
10044
+ #: src/lib/src/Modules/Plugin/Strings.php:235
10045
+ msgid "Anonymous Usage Statistics"
10046
+ msgstr ""
10047
+
10048
+ #: src/lib/src/Modules/Plugin/Strings.php:236
10049
+ msgid "Permit Anonymous Usage Information Gathering"
10050
  msgstr ""
10051
 
10052
+ #: src/lib/src/Modules/Plugin/Strings.php:238
10053
+ msgid ""
10054
+ "Allows us to gather information on statistics and features in-use across our "
10055
+ "client installations."
10056
  msgstr ""
10057
 
10058
  #: src/lib/src/Modules/Plugin/Strings.php:239
10059
+ msgid ""
10060
+ "This information is strictly anonymous and contains no personally, or "
10061
+ "otherwise, identifiable data."
10062
  msgstr ""
10063
 
10064
  #: src/lib/src/Modules/Plugin/Strings.php:240
10065
+ msgid "Click to see the exact data that would be sent."
10066
  msgstr ""
10067
 
10068
+ #: src/lib/src/Modules/Plugin/Strings.php:245
10069
+ msgid "Enable ShieldNET"
10070
  msgstr ""
10071
 
10072
  #: src/lib/src/Modules/Plugin/Strings.php:246
10073
+ msgid "Enhanced Website Security Through Network Intelligence"
10074
  msgstr ""
10075
 
10076
+ #: src/lib/src/Modules/Plugin/Strings.php:248
10077
+ msgid ""
10078
+ "By leveraging and sharing information about threats to WordPress sites, "
10079
+ "ShieldNET brings the power of the entire network to your WordPress security."
10080
  msgstr ""
10081
 
10082
+ #: src/lib/src/Modules/Plugin/Strings.php:253
10083
+ msgid "IP Source"
10084
  msgstr ""
10085
 
10086
  #: src/lib/src/Modules/Plugin/Strings.php:254
10087
+ msgid "Which IP Address Is Yours"
10088
  msgstr ""
10089
 
10090
+ #: src/lib/src/Modules/Plugin/Strings.php:256
10091
+ msgid ""
10092
+ "Knowing the real IP address of your visitors is critical to your security, "
10093
+ "but many hosts aren't configured correctly to let us find it easily."
10094
  msgstr ""
10095
 
10096
+ #: src/lib/src/Modules/Plugin/Strings.php:257
10097
+ msgid ""
10098
+ "There are many possible ways to detect visitor IP addresses. If Auto-Detect "
10099
+ "is not working, please select yours from the list."
10100
  msgstr ""
10101
 
10102
+ #: src/lib/src/Modules/Plugin/Strings.php:258
10103
+ msgid ""
10104
+ "Use the link below to find your correct IP address, then select the option "
10105
+ "on the list."
10106
  msgstr ""
10107
 
10108
+ #: src/lib/src/Modules/Plugin/Strings.php:262
10109
+ msgid "What Is My IP Address?"
 
 
 
 
10110
  msgstr ""
10111
 
10112
+ #: src/lib/src/Modules/Plugin/Strings.php:265
10113
+ #, php-format
10114
+ msgid "Current source is: %s (%s)"
10115
  msgstr ""
10116
 
10117
+ #: src/lib/src/Modules/Plugin/Strings.php:269
10118
+ msgid ""
10119
+ "If the option you select becomes unavailable at some point, we will revert "
10120
+ "to auto detection."
10121
  msgstr ""
10122
 
10123
+ #: src/lib/src/Modules/Plugin/Strings.php:274
10124
+ msgid "Report Email"
10125
  msgstr ""
10126
 
10127
+ #: src/lib/src/Modules/Plugin/Strings.php:275
10128
+ msgid "Where to send email reports"
10129
  msgstr ""
10130
 
10131
+ #: src/lib/src/Modules/Plugin/Strings.php:277
10132
+ msgid ""
10133
+ "This lets you customise the default email address for all emails sent by the "
10134
+ "plugin."
10135
  msgstr ""
10136
 
10137
+ #: src/lib/src/Modules/Plugin/Strings.php:278
10138
+ #, php-format
10139
+ msgid ""
10140
+ "The plugin defaults to the site administration email address, which is: %s"
10141
  msgstr ""
10142
 
10143
+ #: src/lib/src/Modules/Plugin/Strings.php:281
10144
+ msgid "Review site settings"
10145
  msgstr ""
10146
 
10147
+ #: src/lib/src/Modules/Plugin/Strings.php:287
10148
+ msgid "In-Plugin Notices"
10149
  msgstr ""
10150
 
10151
+ #: src/lib/src/Modules/Plugin/Strings.php:288
10152
+ msgid "Display Plugin Specific Notices"
10153
  msgstr ""
10154
 
10155
+ #: src/lib/src/Modules/Plugin/Strings.php:289
10156
+ msgid ""
10157
+ "Disable this option to hide certain plugin admin notices about available "
10158
+ "updates and post-update notices."
10159
  msgstr ""
10160
 
10161
+ #: src/lib/src/Modules/Plugin/Strings.php:293
10162
+ msgid "Show Plugin Badge"
10163
  msgstr ""
10164
 
10165
+ #: src/lib/src/Modules/Plugin/Strings.php:294
10166
+ msgid "Display Plugin Security Badge To Your Visitors"
10167
  msgstr ""
10168
 
10169
+ #: src/lib/src/Modules/Plugin/Strings.php:296
10170
+ msgid ""
10171
+ "Enabling this option helps support the plugin by spreading the word about it "
10172
+ "on your website."
10173
  msgstr ""
10174
 
10175
+ #: src/lib/src/Modules/Plugin/Strings.php:297
10176
+ msgid ""
10177
+ "The plugin badge also lets visitors know your are taking your website "
10178
+ "security seriously."
10179
  msgstr ""
10180
 
10181
+ #: src/lib/src/Modules/Plugin/Strings.php:298
10182
+ msgid ""
10183
+ "This also acts as an affiliate link if you're running ShieldPRO so you can "
10184
+ "earn rewards for each referral."
10185
  msgstr ""
10186
 
10187
+ #: src/lib/src/Modules/Plugin/Strings.php:299
10188
+ msgid "Read this carefully before enabling this option."
10189
  msgstr ""
10190
 
10191
+ #: src/lib/src/Modules/Plugin/Strings.php:304
10192
+ msgid "Allow WP-CLI"
10193
  msgstr ""
10194
 
10195
+ #: src/lib/src/Modules/Plugin/Strings.php:305
10196
+ msgid "Allow Access And Control Of This Plugin Via WP-CLI"
10197
  msgstr ""
10198
 
10199
+ #: src/lib/src/Modules/Plugin/Strings.php:306
10200
+ msgid "Turn off this option to disable this plugin's WP-CLI integration."
10201
  msgstr ""
10202
 
10203
+ #: src/lib/src/Modules/Plugin/Strings.php:310
10204
+ msgid "Delete Plugin Settings"
10205
  msgstr ""
10206
 
10207
+ #: src/lib/src/Modules/Plugin/Strings.php:311
10208
+ msgid "Delete All Plugin Settings Upon Plugin Deactivation"
10209
  msgstr ""
10210
 
10211
+ #: src/lib/src/Modules/Plugin/Strings.php:312
10212
+ msgid "Careful: Removes all plugin options when you deactivate the plugin"
10213
  msgstr ""
10214
 
10215
+ #: src/lib/src/Modules/Plugin/Strings.php:316
10216
+ msgid "Locale Override"
10217
  msgstr ""
10218
 
10219
+ #: src/lib/src/Modules/Plugin/Strings.php:317
10220
+ msgid "Set Global Locale For This Plugin For All Users"
10221
  msgstr ""
10222
 
10223
+ #: src/lib/src/Modules/Plugin/Strings.php:319
10224
+ msgid ""
10225
+ "Use this if you want to force a language for this plugin for all users at "
10226
+ "all times."
10227
  msgstr ""
10228
 
10229
+ #: src/lib/src/Modules/Plugin/Strings.php:320
10230
+ msgid ""
10231
+ "We don't recommend setting this unless you're sure of the consequences for "
10232
+ "all users."
10233
  msgstr ""
10234
 
10235
+ #: src/lib/src/Modules/Plugin/Strings.php:321
10236
+ msgid ""
10237
+ "If you provide a locale for which there are no translations, defaults will "
10238
+ "apply."
10239
  msgstr ""
10240
 
10241
+ #: src/lib/src/Modules/Plugin/Strings.php:322
10242
+ msgid "Available Locales"
10243
  msgstr ""
10244
 
10245
+ #: src/lib/src/Modules/Plugin/Strings.php:328
10246
+ msgid "XML-RPC Compatibility"
10247
  msgstr ""
10248
 
10249
+ #: src/lib/src/Modules/Plugin/Strings.php:329
10250
+ msgid "Allow Login Through XML-RPC To Bypass Accounts Management Rules"
10251
  msgstr ""
10252
 
10253
+ #: src/lib/src/Modules/Plugin/Strings.php:330
10254
+ msgid ""
10255
+ "Enable this if you need XML-RPC functionality e.g. if you use the WordPress "
10256
+ "iPhone/Android App."
10257
  msgstr ""
10258
 
10259
+ #: src/lib/src/Modules/Plugin/Strings.php:334
10260
+ msgid "Allow Import/Export"
10261
  msgstr ""
10262
 
10263
+ #: src/lib/src/Modules/Plugin/Strings.php:335
10264
+ msgid "Allow Import And Export Of Options On This Site"
10265
  msgstr ""
10266
 
10267
+ #: src/lib/src/Modules/Plugin/Strings.php:337
10268
+ msgid "Uncheck this box to completely disable import and export of options."
10269
  msgstr ""
10270
 
10271
+ #: src/lib/src/Modules/Plugin/Strings.php:338
10272
+ msgid "Import/Export is a premium-only feature."
10273
  msgstr ""
10274
 
10275
+ #: src/lib/src/Modules/Plugin/Strings.php:343
10276
+ msgid "Export Whitelist"
10277
+ msgstr ""
10278
+
10279
+ #: src/lib/src/Modules/Plugin/Strings.php:344
10280
+ msgid "Whitelisted Sites To Export Options From This Site"
10281
  msgstr ""
10282
 
10283
  #: src/lib/src/Modules/Plugin/Strings.php:346
10284
+ msgid "Whitelisted sites may export options from this site without the key."
10285
  msgstr ""
10286
 
10287
  #: src/lib/src/Modules/Plugin/Strings.php:347
10288
+ msgid "List each site URL on a new line."
10289
  msgstr ""
10290
 
10291
  #: src/lib/src/Modules/Plugin/Strings.php:348
10292
+ msgid "This is to be used in conjunction with the Master Import Site feature."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10293
  msgstr ""
10294
 
10295
  #: src/lib/src/Modules/Plugin/Strings.php:353
10296
+ msgid "Master Import Site"
10297
  msgstr ""
10298
 
10299
  #: src/lib/src/Modules/Plugin/Strings.php:354
10300
+ msgid "Automatically Import Options From This Site URL"
 
 
 
 
10301
  msgstr ""
10302
 
10303
  #: src/lib/src/Modules/Plugin/Strings.php:356
10304
+ msgid "Supplying a site URL here will make this site an 'Options Slave'."
10305
  msgstr ""
10306
 
10307
  #: src/lib/src/Modules/Plugin/Strings.php:357
10308
+ msgid "Options will be automatically exported from the Master site each day."
10309
  msgstr ""
10310
 
10311
  #: src/lib/src/Modules/Plugin/Strings.php:358
10312
+ msgid ""
10313
+ "Use of this feature will overwrite existing options and replace them with "
10314
+ "those from the Master Import Site."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10315
  msgstr ""
10316
 
10317
  #: src/lib/src/Modules/Plugin/Strings.php:363
10318
+ msgid "Notify Whitelist"
10319
  msgstr ""
10320
 
10321
  #: src/lib/src/Modules/Plugin/Strings.php:364
10322
+ msgid "Notify Sites On The Whitelist To Update Options From Master"
10323
  msgstr ""
10324
 
10325
  #: src/lib/src/Modules/Plugin/Strings.php:365
10326
+ msgid ""
10327
+ "When enabled, manual options saving will notify sites on the whitelist to "
10328
+ "export options from the Master site."
 
 
 
 
 
 
10329
  msgstr ""
10330
 
10331
+ #: src/lib/src/Modules/Plugin/Strings.php:370
10332
+ msgid "Import/Export Secret Key"
10333
  msgstr ""
10334
 
10335
+ #: src/lib/src/Modules/Plugin/Strings.php:371
10336
+ msgid ""
10337
+ "Keep this Secret Key private as it will allow the import and export of "
10338
+ "options."
10339
  msgstr ""
10340
 
10341
+ #: src/lib/src/Modules/Plugin/Strings.php:376
10342
+ msgid "Unique Plugin Installation ID"
10343
  msgstr ""
10344
 
10345
+ #: src/lib/src/Modules/Plugin/Strings.php:377
10346
+ msgid "Keep this ID private."
10347
  msgstr ""
10348
 
10349
  #: src/lib/src/Modules/Plugin/Strings.php:381
10350
+ msgid "CAPTCHA Provider"
10351
  msgstr ""
10352
 
10353
  #: src/lib/src/Modules/Plugin/Strings.php:382
10354
+ msgid "Which CAPTCHA Provider To Use Throughout"
 
10355
  msgstr ""
10356
 
10357
  #: src/lib/src/Modules/Plugin/Strings.php:384
10358
+ msgid "You can choose the CAPTCHA provider depending on your preferences."
10359
  msgstr ""
10360
 
10361
  #: src/lib/src/Modules/Plugin/Strings.php:385
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10362
  msgid ""
10363
+ "Ensure your Site Keys and Secret Keys are supplied from the appropriate "
10364
+ "provider."
 
 
 
 
 
 
 
 
10365
  msgstr ""
10366
 
10367
+ #: src/lib/src/Modules/Plugin/Strings.php:388
10368
+ msgid "Keys for different providers are not interchangeable."
 
 
10369
  msgstr ""
10370
 
10371
  #: src/lib/src/Modules/Plugin/Strings.php:394
10372
+ msgid "CAPTCHA Secret"
 
 
 
 
 
 
10373
  msgstr ""
10374
 
10375
+ #: src/lib/src/Modules/Plugin/Strings.php:395
10376
+ msgid "CAPTCHA Secret Key"
10377
  msgstr ""
10378
 
10379
  #: src/lib/src/Modules/Plugin/Strings.php:397
10380
+ msgid "Enter your CAPTCHA secret key for use throughout the plugin."
10381
  msgstr ""
10382
 
10383
  #: src/lib/src/Modules/Plugin/Strings.php:398
10384
+ #: src/lib/src/Modules/Plugin/Strings.php:407
10385
+ msgid "Google reCAPTCHA v3 not supported."
 
 
 
 
 
10386
  msgstr ""
10387
 
10388
  #: src/lib/src/Modules/Plugin/Strings.php:403
 
 
 
10389
  #: src/lib/src/Modules/Plugin/Strings.php:404
10390
+ msgid "CAPTCHA Site Key"
10391
  msgstr ""
10392
 
10393
  #: src/lib/src/Modules/Plugin/Strings.php:406
10394
+ msgid "Enter your CAPTCHA site key for use throughout the plugin."
10395
  msgstr ""
10396
 
10397
+ #: src/lib/src/Modules/Plugin/Strings.php:412
10398
+ msgid "CAPTCHA Style"
10399
  msgstr ""
10400
 
10401
+ #: src/lib/src/Modules/Plugin/Strings.php:413
10402
+ msgid "How CAPTCHA Will Be Displayed By Default"
10403
  msgstr ""
10404
 
10405
+ #: src/lib/src/Modules/Plugin/Strings.php:414
10406
+ msgid ""
10407
+ "You can choose the CAPTCHA display format that best suits your site, "
10408
+ "including the new Invisible CAPTCHA."
10409
  msgstr ""
10410
 
10411
+ #: src/lib/src/Modules/Plugin/Strings.php:433
10412
+ msgid "Install"
10413
  msgstr ""
10414
 
10415
+ #: src/lib/src/Modules/Plugin/Strings.php:434
10416
+ msgid "Update"
10417
  msgstr ""
10418
 
10419
+ #: src/lib/src/Modules/Plugin/Strings.php:435
10420
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:169
10421
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:195
10422
+ msgid "Activate"
10423
  msgstr ""
10424
 
10425
+ #: src/lib/src/Modules/Plugin/Strings.php:437
10426
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:196
10427
+ msgid "Edit Theme Options"
10428
  msgstr ""
10429
 
10430
+ #: src/lib/src/Modules/Plugin/Strings.php:438
10431
+ msgid "Create/Edit"
 
 
10432
  msgstr ""
10433
 
10434
+ #: src/lib/src/Modules/Plugin/Strings.php:439
10435
+ msgid "Publish"
10436
  msgstr ""
10437
 
10438
+ #: src/lib/src/Modules/Plugin/Strings.php:440
10439
+ msgid "Author Name"
10440
  msgstr ""
10441
 
10442
+ #: src/lib/src/Modules/Plugin/Strings.php:441
10443
+ msgid "Author Email"
10444
  msgstr ""
10445
 
10446
+ #: src/lib/src/Modules/Plugin/Strings.php:442
10447
+ msgid "Comment Content"
10448
  msgstr ""
10449
 
10450
+ #: src/lib/src/Modules/Plugin/Strings.php:443
10451
+ msgid "Browser User Agent"
10452
  msgstr ""
10453
 
10454
+ #: src/lib/src/Modules/Plugin/Strings.php:445
10455
+ msgid "Register"
10456
  msgstr ""
10457
 
10458
+ #: src/lib/src/Modules/Plugin/Strings.php:447
10459
+ msgid "Checkout (WooCommerce)"
10460
  msgstr ""
10461
 
10462
+ #: src/lib/src/Modules/Plugin/Strings.php:448
10463
+ msgid "Simple Requests"
 
 
10464
  msgstr ""
10465
 
10466
+ #: src/lib/src/Modules/Plugin/Strings.php:449
10467
+ msgid "Logged-In Users"
10468
  msgstr ""
10469
 
10470
+ #: src/lib/src/Modules/Plugin/Strings.php:450
10471
+ msgid "Search Engines"
10472
  msgstr ""
10473
 
10474
+ #: src/lib/src/Modules/Plugin/Strings.php:451
10475
+ msgid "Uptime Monitoring Services"
10476
  msgstr ""
10477
 
10478
+ #: src/lib/src/Modules/Plugin/Strings.php:452
10479
+ msgid "Enabled With Email Reports"
10480
  msgstr ""
10481
 
10482
+ #: src/lib/src/Modules/Plugin/Strings.php:454
10483
+ msgid "Minor Versions Only"
10484
  msgstr ""
10485
 
10486
+ #: src/lib/src/Modules/Plugin/Strings.php:455
10487
+ msgid "Major and Minor Versions"
10488
  msgstr ""
10489
 
10490
+ #: src/lib/src/Modules/Plugin/Strings.php:456
10491
+ msgid "Let The Plugin Decide"
10492
  msgstr ""
10493
 
10494
+ #: src/lib/src/Modules/Plugin/Strings.php:457
10495
+ msgid "As Soon As Possible"
10496
  msgstr ""
10497
 
10498
+ #: src/lib/src/Modules/Plugin/Strings.php:458
10499
+ msgid "Move To Pending Moderation"
10500
  msgstr ""
10501
 
10502
+ #: src/lib/src/Modules/Plugin/Strings.php:459
10503
+ msgid "Move To SPAM"
 
 
10504
  msgstr ""
10505
 
10506
+ #: src/lib/src/Modules/Plugin/Strings.php:460
10507
+ msgid "Move To Trash"
 
 
10508
  msgstr ""
10509
 
10510
+ #: src/lib/src/Modules/Plugin/Strings.php:461
10511
+ msgid "Block And Redirect"
 
 
10512
  msgstr ""
10513
 
10514
+ #: src/lib/src/Modules/Plugin/Strings.php:462
10515
+ msgid "Invisible"
10516
  msgstr ""
10517
 
10518
+ #: src/lib/src/Modules/Plugin/Strings.php:463
10519
+ msgid "Default Style"
 
 
10520
  msgstr ""
10521
 
10522
+ #: src/lib/src/Modules/Plugin/Strings.php:464
10523
+ msgid "Redirect To Home Page"
 
 
10524
  msgstr ""
10525
 
10526
+ #: src/lib/src/Modules/Plugin/Strings.php:465
10527
+ msgid "Return 404"
 
 
10528
  msgstr ""
10529
 
10530
+ #: src/lib/src/Modules/Plugin/Strings.php:466
10531
+ msgid "Die"
 
 
10532
  msgstr ""
10533
 
10534
+ #: src/lib/src/Modules/Plugin/Strings.php:467
10535
+ msgid "Scan Disabled"
10536
  msgstr ""
10537
 
10538
+ #: src/lib/src/Modules/Plugin/Strings.php:468
10539
+ msgid "Scan Enabled"
10540
  msgstr ""
10541
 
10542
+ #: src/lib/src/Modules/Plugin/Strings.php:469
10543
+ msgid "Automatic Scan Disabled"
10544
  msgstr ""
10545
 
10546
+ #: src/lib/src/Modules/Plugin/Strings.php:470
10547
+ msgid "Automatic Scan Enabled"
10548
  msgstr ""
10549
 
10550
+ #: src/lib/src/Modules/Plugin/Strings.php:471
10551
+ msgid "Scan Enabled - Send Email Notification"
10552
  msgstr ""
10553
 
10554
+ #: src/lib/src/Modules/Plugin/Strings.php:472
10555
+ msgid "Scan Enabled - No Email Notification"
 
10556
  msgstr ""
10557
 
10558
+ #: src/lib/src/Modules/Plugin/Strings.php:473
10559
+ msgid "Scan Enabled - Automatically Delete Files"
10560
  msgstr ""
10561
 
10562
+ #: src/lib/src/Modules/Plugin/Strings.php:474
10563
+ msgid "Scan Enabled - Delete Files and Send Email Notification"
10564
  msgstr ""
10565
 
10566
+ #: src/lib/src/Modules/Plugin/Strings.php:475
10567
+ msgid "Off: iFrames Not Blocked"
10568
  msgstr ""
10569
 
10570
+ #: src/lib/src/Modules/Plugin/Strings.php:476
10571
+ msgid "On: Allow iFrames On The Same Domain"
10572
  msgstr ""
10573
 
10574
+ #: src/lib/src/Modules/Plugin/Strings.php:477
10575
+ msgid "On: Block All iFrames"
 
 
 
10576
  msgstr ""
10577
 
10578
+ #: src/lib/src/Modules/Plugin/Strings.php:478
10579
+ msgid "Default: Full Referrer URL (aka 'Unsafe URL')"
10580
  msgstr ""
10581
 
10582
+ #: src/lib/src/Modules/Plugin/Strings.php:479
10583
+ msgid "No Referrer"
10584
  msgstr ""
10585
 
10586
+ #: src/lib/src/Modules/Plugin/Strings.php:480
10587
+ msgid "No Referrer When Downgrade"
10588
  msgstr ""
10589
 
10590
+ #: src/lib/src/Modules/Plugin/Strings.php:481
10591
+ msgid "Same Origin"
10592
  msgstr ""
10593
 
10594
+ #: src/lib/src/Modules/Plugin/Strings.php:482
10595
+ msgid "Origin"
 
 
10596
  msgstr ""
10597
 
10598
+ #: src/lib/src/Modules/Plugin/Strings.php:483
10599
+ msgid "Strict Origin"
10600
  msgstr ""
10601
 
10602
+ #: src/lib/src/Modules/Plugin/Strings.php:484
10603
+ msgid "Origin When Cross-Origin"
 
10604
  msgstr ""
10605
 
10606
+ #: src/lib/src/Modules/Plugin/Strings.php:485
10607
+ msgid "Strict Origin When Cross-Origin"
10608
  msgstr ""
10609
 
10610
+ #: src/lib/src/Modules/Plugin/Strings.php:486
10611
+ msgid "Empty Header"
10612
  msgstr ""
10613
 
10614
+ #: src/lib/src/Modules/Plugin/Strings.php:487
10615
+ msgid "Disabled - Don't Send This Header"
 
 
10616
  msgstr ""
10617
 
10618
+ #: src/lib/src/Modules/Plugin/Strings.php:488
10619
+ msgid "Minute"
10620
  msgstr ""
10621
 
10622
+ #: src/lib/src/Modules/Plugin/Strings.php:489
10623
+ msgid "Hour"
10624
  msgstr ""
10625
 
10626
+ #: src/lib/src/Modules/Plugin/Strings.php:490
10627
+ msgid "Day"
 
 
 
 
 
10628
  msgstr ""
10629
 
10630
+ #: src/lib/src/Modules/Plugin/Strings.php:491
10631
+ msgid "Week"
 
 
10632
  msgstr ""
10633
 
10634
+ #: src/lib/src/Modules/Plugin/Strings.php:492
10635
+ msgid "Month"
10636
  msgstr ""
10637
 
10638
+ #: src/lib/src/Modules/Plugin/Strings.php:493
10639
+ msgid "With Shield Bot Protection"
10640
  msgstr ""
10641
 
10642
+ #: src/lib/src/Modules/Plugin/Strings.php:495
10643
+ msgid "Increment Offense Counter"
 
10644
  msgstr ""
10645
 
10646
+ #: src/lib/src/Modules/Plugin/Strings.php:496
10647
+ msgid "Double-Increment Offense Counter"
10648
  msgstr ""
10649
 
10650
+ #: src/lib/src/Modules/Plugin/Strings.php:497
10651
+ msgid "Immediate Block"
10652
  msgstr ""
10653
 
10654
+ #: src/lib/src/Modules/Plugin/Strings.php:498
10655
+ #: src/lib/src/Modules/UserManagement/ModCon.php:80
10656
+ msgid "Very Weak"
 
10657
  msgstr ""
10658
 
10659
+ #: src/lib/src/Modules/Plugin/Strings.php:499
10660
+ #: src/lib/src/Modules/UserManagement/ModCon.php:81
10661
+ msgid "Weak"
10662
  msgstr ""
10663
 
10664
+ #: src/lib/src/Modules/Plugin/Strings.php:500
10665
+ #: src/lib/src/Modules/Plugin/Strings.php:569
10666
+ #: src/lib/src/Modules/UserManagement/ModCon.php:82
10667
+ msgid "Medium"
10668
  msgstr ""
10669
 
10670
+ #: src/lib/src/Modules/Plugin/Strings.php:501
10671
+ #: src/lib/src/Modules/UserManagement/ModCon.php:83
10672
+ msgid "Strong"
10673
  msgstr ""
10674
 
10675
+ #: src/lib/src/Modules/Plugin/Strings.php:502
10676
+ #: src/lib/src/Modules/UserManagement/ModCon.php:84
10677
+ msgid "Very Strong"
10678
  msgstr ""
10679
 
10680
+ #: src/lib/src/Modules/Plugin/Strings.php:506
10681
+ msgid "Security Dashboard"
10682
  msgstr ""
10683
 
10684
+ #: src/lib/src/Modules/Plugin/Strings.php:507
10685
+ msgid "Automatically Detect Visitor IP"
10686
  msgstr ""
10687
 
10688
+ #: src/lib/src/Modules/Plugin/Strings.php:508
10689
+ msgid "IP Whitelist"
10690
  msgstr ""
10691
 
10692
+ #: src/lib/src/Modules/Plugin/Strings.php:509
10693
+ msgid "IP Address White List"
10694
  msgstr ""
10695
 
10696
+ #: src/lib/src/Modules/Plugin/Strings.php:510
10697
+ msgid "Any IP addresses on this list will bypass all Plugin Security Checking."
10698
  msgstr ""
10699
 
10700
+ #: src/lib/src/Modules/Plugin/Strings.php:512
10701
+ msgid "Choose IP Addresses To Blacklist"
10702
+ msgstr ""
10703
+
10704
+ #: src/lib/src/Modules/Plugin/Strings.php:513
10705
  #, php-format
10706
+ msgid "Recommendation - %s"
10707
  msgstr ""
10708
 
10709
+ #: src/lib/src/Modules/Plugin/Strings.php:514
10710
+ msgid "Blacklist"
10711
  msgstr ""
10712
 
10713
+ #: src/lib/src/Modules/Plugin/Strings.php:515
10714
+ msgid "Logging"
10715
  msgstr ""
10716
 
10717
+ #: src/lib/src/Modules/Plugin/Strings.php:516
10718
+ #, php-format
10719
  msgid ""
10720
+ "User \"%s\" was forcefully logged out as they were not verified by either "
10721
+ "cookie or IP address (or both)."
10722
  msgstr ""
10723
 
10724
+ #: src/lib/src/Modules/Plugin/Strings.php:517
10725
+ #, php-format
10726
+ msgid ""
10727
+ "User \"%s\" was found to be un-verified at the given IP Address: \"%s\"."
10728
  msgstr ""
10729
 
10730
+ #: src/lib/src/Modules/Plugin/Strings.php:518
10731
+ msgid "Cookie"
10732
  msgstr ""
10733
 
10734
+ #: src/lib/src/Modules/Plugin/Strings.php:520
10735
+ #: src/lib/src/Modules/Traffic/Lib/TrafficTable/LoadRawTableData.php:116
10736
+ #: src/lib/src/Tables/DataTables/Build/AuditTrail/ForAuditTrail.php:98
10737
+ msgid "IP"
10738
+ msgstr ""
10739
+
10740
+ #: src/lib/src/Modules/Plugin/Strings.php:521
10741
  msgid ""
10742
+ "This will restrict all user login sessions to a single browser. Use this if "
10743
+ "your users have dynamic IP addresses."
10744
  msgstr ""
10745
 
10746
+ #: src/lib/src/Modules/Plugin/Strings.php:522
10747
+ msgid ""
10748
+ "All users will be required to authenticate their login by email-based two-"
10749
+ "factor authentication, when logging in from a new IP address"
10750
  msgstr ""
10751
 
10752
+ #: src/lib/src/Modules/Plugin/Strings.php:523
10753
+ msgid "2-Factor Auth"
10754
  msgstr ""
10755
 
10756
+ #: src/lib/src/Modules/Plugin/Strings.php:524
10757
+ msgid "Include Logged-In Users"
 
 
10758
  msgstr ""
10759
 
10760
+ #: src/lib/src/Modules/Plugin/Strings.php:525
10761
+ msgid "You may also enable GASP for logged in users"
10762
  msgstr ""
10763
 
10764
+ #: src/lib/src/Modules/Plugin/Strings.php:526
10765
  msgid ""
10766
+ "Since logged-in users would be expected to be vetted already, this is off by "
10767
+ "default."
10768
  msgstr ""
10769
 
10770
+ #: src/lib/src/Modules/Plugin/Strings.php:528
10771
+ msgid "Protect your security plugin not just your WordPress site"
 
10772
  msgstr ""
10773
 
10774
+ #: src/lib/src/Modules/Plugin/Strings.php:531
10775
+ msgid "Get a view on what happens on your site, when it happens"
10776
  msgstr ""
10777
 
10778
+ #: src/lib/src/Modules/Plugin/Strings.php:532
10779
+ msgid "Audit Trail Viewer"
10780
  msgstr ""
10781
 
10782
+ #: src/lib/src/Modules/Plugin/Strings.php:534
10783
+ msgid "Take back full control of WordPress automatic updates"
10784
  msgstr ""
10785
 
10786
+ #: src/lib/src/Modules/Plugin/Strings.php:535
10787
+ msgid "Comments SPAM"
10788
  msgstr ""
10789
 
10790
+ #: src/lib/src/Modules/Plugin/Strings.php:536
10791
+ msgid "Block Bad IPs/Visitors"
10792
  msgstr ""
10793
 
10794
+ #: src/lib/src/Modules/Plugin/Strings.php:537
10795
+ msgid "Block comment SPAM and retain your privacy"
 
10796
  msgstr ""
10797
 
10798
+ #: src/lib/src/Modules/Plugin/Strings.php:540
10799
+ msgid "Automatically block malicious URLs and data sent to your site"
 
10800
  msgstr ""
10801
 
10802
+ #: src/lib/src/Modules/Plugin/Strings.php:543
10803
+ msgid "Control HTTP Security Headers"
10804
  msgstr ""
10805
 
10806
+ #: src/lib/src/Modules/Plugin/Strings.php:545
10807
+ msgid "Manage Visitor IP Address"
10808
  msgstr ""
10809
 
10810
+ #: src/lib/src/Modules/Plugin/Strings.php:546
10811
+ msgid "WP Lockdown"
10812
  msgstr ""
10813
 
10814
+ #: src/lib/src/Modules/Plugin/Strings.php:547
10815
+ msgid "Harden the more loosely controlled settings of your site"
10816
  msgstr ""
10817
 
10818
+ #: src/lib/src/Modules/Plugin/Strings.php:549
 
10819
  msgid ""
10820
+ "Block brute force attacks and secure user identities with Two-Factor "
10821
+ "Authentication"
10822
  msgstr ""
10823
 
10824
+ #: src/lib/src/Modules/Plugin/Strings.php:551
10825
+ msgid "General Plugin Settings"
10826
  msgstr ""
10827
 
10828
+ #: src/lib/src/Modules/Plugin/Strings.php:552
10829
+ msgid "Statistics"
10830
  msgstr ""
10831
 
10832
+ #: src/lib/src/Modules/Plugin/Strings.php:553
10833
+ msgid "Summary of the main security actions taken by this plugin"
10834
  msgstr ""
10835
 
10836
+ #: src/lib/src/Modules/Plugin/Strings.php:554
10837
+ msgid "Stats Viewer"
10838
  msgstr ""
10839
 
10840
+ #: src/lib/src/Modules/Plugin/Strings.php:555
10841
+ msgid "Premium Support"
10842
  msgstr ""
10843
 
10844
+ #: src/lib/src/Modules/Plugin/Strings.php:556
10845
+ msgid "Premium Plugin Support Centre"
10846
  msgstr ""
10847
 
10848
+ #: src/lib/src/Modules/Plugin/Strings.php:557
10849
+ #: src/lib/src/Modules/Sessions/Strings.php:56
10850
+ #: src/lib/src/Modules/Traffic/Strings.php:47
10851
+ #: src/lib/src/Modules/Traffic/Strings.php:56
10852
+ #: src/lib/src/Modules/UserManagement/Insights/OverviewCards.php:79
10853
+ #: src/lib/src/Modules/UserManagement/Strings.php:113
10854
+ msgid "User Management"
10855
  msgstr ""
10856
 
10857
+ #: src/lib/src/Modules/Plugin/Strings.php:558
10858
  msgid ""
10859
+ "Get true user sessions and control account sharing, session duration and "
10860
+ "timeouts"
10861
  msgstr ""
10862
 
10863
+ #: src/lib/src/Modules/Plugin/Strings.php:559
10864
+ msgid "Two-Factor Authentication"
10865
  msgstr ""
10866
 
10867
+ #: src/lib/src/Modules/Plugin/Strings.php:562
10868
+ msgid "Dark Theme"
10869
  msgstr ""
10870
 
10871
+ #: src/lib/src/Modules/Plugin/Strings.php:563
10872
+ msgid "Once"
10873
  msgstr ""
10874
 
10875
+ #: src/lib/src/Modules/Plugin/Strings.php:564
10876
+ msgid "Twice"
 
 
10877
  msgstr ""
10878
 
10879
+ #: src/lib/src/Modules/Plugin/Strings.php:565
10880
+ msgid "Go To Security Dashboard"
10881
  msgstr ""
10882
 
10883
+ #: src/lib/src/Modules/Plugin/Strings.php:567
10884
+ msgid "None - Turn Off Malware Intelligence Network"
10885
  msgstr ""
10886
 
10887
+ #: src/lib/src/Modules/Plugin/Strings.php:568
10888
+ msgid "Low"
10889
  msgstr ""
10890
 
10891
+ #: src/lib/src/Modules/Plugin/Strings.php:570
10892
+ msgid "High"
10893
  msgstr ""
10894
 
10895
+ #: src/lib/src/Modules/Plugin/Strings.php:571
10896
+ msgid "Full"
10897
  msgstr ""
10898
 
10899
+ #: src/lib/src/Modules/Plugin/Strings.php:573
10900
+ msgid "Last Offense"
 
10901
  msgstr ""
10902
 
10903
+ #: src/lib/src/Modules/Plugin/Strings.php:574
10904
+ msgid "Automatic license verification failed."
 
10905
  msgstr ""
10906
 
10907
+ #: src/lib/src/Modules/Plugin/UI.php:26
10908
+ #, php-format
10909
+ msgid "%s Debug Page"
10910
  msgstr ""
10911
 
10912
+ #: src/lib/src/Modules/Plugin/UI.php:56
10913
+ #, php-format
10914
+ msgid "%s %s Page"
10915
  msgstr ""
10916
 
10917
+ #: src/lib/src/Modules/Plugin/UI.php:94
10918
+ msgid "Your captcha key and secret haven't been verified."
10919
  msgstr ""
10920
 
10921
+ #: src/lib/src/Modules/Plugin/UI.php:95
10922
+ msgid ""
10923
+ "Please double-check and make sure you haven't mixed them about, and then re-"
10924
+ "save."
10925
  msgstr ""
10926
 
10927
+ #: src/lib/src/Modules/Plugin/WpCli/Export.php:49
10928
  msgid ""
10929
+ "File provied wasn't an absolute path, so we're using the following path to "
10930
+ "the export file"
10931
  msgstr ""
10932
 
10933
+ #: src/lib/src/Modules/Plugin/WpCli/Export.php:51
10934
+ msgid "Export file path"
10935
  msgstr ""
10936
 
10937
+ #: src/lib/src/Modules/Plugin/WpCli/Export.php:54
10938
+ msgid "The file specified is an existing directory."
10939
  msgstr ""
10940
 
10941
+ #: src/lib/src/Modules/Plugin/WpCli/Export.php:64
10942
+ #, php-format
10943
+ msgid "Couldn't create the directory: %s"
 
10944
  msgstr ""
10945
 
10946
+ #: src/lib/src/Modules/Plugin/WpCli/Export.php:74
10947
+ msgid "Couldn't create the export file."
10948
  msgstr ""
10949
 
10950
+ #: src/lib/src/Modules/Plugin/WpCli/Export.php:77
10951
+ msgid "The system reports that this file path isn't writable."
 
10952
  msgstr ""
10953
 
10954
+ #: src/lib/src/Modules/Plugin/WpCli/Export.php:84
10955
+ msgid "The system reports that writing the export file failed."
10956
  msgstr ""
10957
 
10958
+ #: src/lib/src/Modules/Plugin/WpCli/Export.php:87
10959
+ msgid "Plugin configuration exported successfully."
10960
+ msgstr ""
10961
+
10962
+ #: src/lib/src/Modules/Plugin/WpCli/Import.php:69
10963
  msgid ""
10964
+ "Please use the `--source=` argument to provide the source site URL or path "
10965
+ "to file."
10966
  msgstr ""
10967
 
10968
+ #: src/lib/src/Modules/Plugin/WpCli/Import.php:73
10969
+ msgid ""
10970
+ "Importing options will overwrite this site's Shield configuration. Are you "
10971
+ "sure?"
10972
  msgstr ""
10973
 
10974
+ #: src/lib/src/Modules/Plugin/WpCli/Import.php:90
10975
+ msgid "The import encountered an error."
10976
  msgstr ""
10977
 
10978
+ #: src/lib/src/Modules/Plugin/WpCli/Import.php:97
10979
+ msgid "Plugin settings imported successfully."
10980
  msgstr ""
10981
 
10982
+ #: src/lib/src/Modules/Plugin/WpCli/Import.php:117
10983
+ msgid "No secret provided so we assume we're a registered slave site."
10984
  msgstr ""
10985
 
10986
+ #: src/lib/src/Modules/Plugin/WpCli/Reset.php:32
10987
+ msgid "Are you sure you want to reset the Shield plugin to defaults?"
10988
  msgstr ""
10989
 
10990
+ #: src/lib/src/Modules/Plugin/WpCli/Reset.php:37
10991
+ msgid "Plugin reset to defaults."
10992
  msgstr ""
10993
 
10994
+ #: src/lib/src/Modules/Reporting/Lib/ReportingController.php:139
10995
+ msgid "Site Report"
10996
  msgstr ""
10997
 
10998
+ #: src/lib/src/Modules/Reporting/Lib/ReportingController.php:154
10999
+ msgid "Please find your site report below."
 
 
11000
  msgstr ""
11001
 
11002
+ #: src/lib/src/Modules/Reporting/Lib/ReportingController.php:155
11003
+ msgid ""
11004
+ "Depending on your settings and cron timings, this report may contain a "
11005
+ "combination of alerts, statistics and other information."
11006
  msgstr ""
11007
 
11008
+ #: src/lib/src/Modules/Reporting/Lib/ReportingController.php:157
11009
+ msgid "Report Generation Date"
11010
  msgstr ""
11011
 
11012
+ #: src/lib/src/Modules/Reporting/Lib/ReportingController.php:158
11013
+ msgid "Please use links provided in each section to review the report details."
 
11014
  msgstr ""
11015
 
11016
+ #: src/lib/src/Modules/Reporting/Lib/ReportingController.php:159
11017
+ msgid "Click here to adjust your reporting settings"
 
 
11018
  msgstr ""
11019
 
11020
+ #: src/lib/src/Modules/Reporting/Lib/Reports/Build/BaseBuilder.php:58
11021
+ msgid "No Time Interval"
11022
  msgstr ""
11023
 
11024
+ #: src/lib/src/Modules/Reporting/Lib/Reports/Build/BuilderAlerts.php:37
11025
+ msgid "Important Alerts"
11026
  msgstr ""
11027
 
11028
+ #: src/lib/src/Modules/Reporting/Lib/Reports/Build/BuilderAlerts.php:38
11029
  msgid ""
11030
+ "The following is a collection of the latest alerts since your previous "
11031
+ "report."
11032
  msgstr ""
11033
 
11034
+ #: src/lib/src/Modules/Reporting/Lib/Reports/Build/BuilderInfo.php:36
11035
+ msgid "Site Information Report"
11036
  msgstr ""
11037
 
11038
+ #: src/lib/src/Modules/Reporting/Lib/Reports/Build/BuilderInfo.php:37
11039
+ msgid ""
11040
+ "The following is a collection of the latest information based on your "
11041
+ "reporting settings."
11042
  msgstr ""
11043
 
11044
+ #: src/lib/src/Modules/Reporting/Lib/Reports/Build/BuilderInfo.php:38
11045
+ msgid "Information is for the following time period."
11046
  msgstr ""
11047
 
11048
+ #: src/lib/src/Modules/Reporting/Lib/Reports/Build/BuilderInfo.php:39
11049
+ msgid "Reporting Period"
11050
  msgstr ""
11051
 
11052
+ #: src/lib/src/Modules/Reporting/Strings.php:15
11053
+ msgid "Report Generated"
11054
  msgstr ""
11055
 
11056
+ #: src/lib/src/Modules/Reporting/Strings.php:17
11057
+ msgid "Report Generated."
11058
  msgstr ""
11059
 
11060
+ #: src/lib/src/Modules/Reporting/Strings.php:18
11061
+ msgid "Type: {{type}}; Interval: {{interval}};"
11062
  msgstr ""
11063
 
11064
+ #: src/lib/src/Modules/Reporting/Strings.php:22
11065
+ msgid "Report Sent"
11066
  msgstr ""
11067
 
11068
+ #: src/lib/src/Modules/Reporting/Strings.php:24
11069
+ msgid "Report Sent (via {{medium}})."
11070
  msgstr ""
11071
 
11072
+ #: src/lib/src/Modules/Reporting/Strings.php:41
11073
+ msgid "Alert Frequency"
11074
  msgstr ""
11075
 
11076
+ #: src/lib/src/Modules/Reporting/Strings.php:42
11077
+ msgid "How Often Important Alerts Will Be Sent To You"
11078
+ msgstr ""
11079
+
11080
+ #: src/lib/src/Modules/Reporting/Strings.php:44
11081
  msgid ""
11082
+ "Choose when you should be sent important and critical alerts about your site "
11083
+ "security."
11084
  msgstr ""
11085
 
11086
+ #: src/lib/src/Modules/Reporting/Strings.php:45
11087
+ msgid "Critical alerts are typically results from your most recent site scans."
11088
+ msgstr ""
11089
+
11090
+ #: src/lib/src/Modules/Reporting/Strings.php:48
11091
  msgid ""
11092
+ "If you wish to receive alerts more quickly, please consider upgrading to "
11093
+ "ShieldPRO."
11094
  msgstr ""
11095
 
11096
+ #: src/lib/src/Modules/Reporting/Strings.php:49
11097
+ #: src/lib/src/Modules/Reporting/Strings.php:62
11098
+ msgid "Upgrade to ShieldPRO"
11099
  msgstr ""
11100
 
11101
+ #: src/lib/src/Modules/Reporting/Strings.php:54
11102
+ msgid "Info Frequency"
11103
  msgstr ""
11104
 
11105
+ #: src/lib/src/Modules/Reporting/Strings.php:55
11106
+ msgid "How Often Informational Reports Will Be Sent To You"
11107
  msgstr ""
11108
 
11109
+ #: src/lib/src/Modules/Reporting/Strings.php:57
11110
  msgid ""
11111
+ "Choose when you should be sent non-critical information and reports about "
11112
+ "your site security."
11113
  msgstr ""
11114
 
11115
+ #: src/lib/src/Modules/Reporting/Strings.php:58
11116
+ msgid "Information and reports are typically statistics."
11117
  msgstr ""
11118
 
11119
+ #: src/lib/src/Modules/Reporting/Strings.php:61
11120
+ msgid ""
11121
+ "If you wish to receive reports more often, please consider upgrading to "
11122
+ "ShieldPRO."
11123
  msgstr ""
11124
 
11125
+ #: src/lib/src/Modules/Reporting/Strings.php:87
11126
+ #: src/lib/src/Modules/Reporting/Strings.php:88
11127
+ msgid "Report Frequencies"
 
11128
  msgstr ""
11129
 
11130
+ #: src/lib/src/Modules/Reporting/Strings.php:90
11131
+ msgid "Receive regular reports from the plugin summarising important events."
11132
  msgstr ""
11133
 
11134
+ #: src/lib/src/Modules/Reporting/Strings.php:97
11135
+ msgid "Update reporting email address"
11136
  msgstr ""
11137
 
11138
+ #: src/lib/src/Modules/Reporting/Strings.php:99
11139
+ msgid ""
11140
+ "Choose the most appropriate frequency to receive alerts from Shield "
11141
+ "according to your schedule."
11142
  msgstr ""
11143
 
11144
+ #: src/lib/src/Modules/Reporting/UI.php:22
11145
+ msgid "Events"
11146
  msgstr ""
11147
 
11148
+ #: src/lib/src/Modules/Reporting/UI.php:23
11149
+ msgid "Interval"
11150
  msgstr ""
11151
 
11152
+ #: src/lib/src/Modules/Reporting/UI.php:24
11153
+ msgid "Build Chart"
 
11154
  msgstr ""
11155
 
11156
+ #: src/lib/src/Modules/Reporting/UI.php:29
11157
+ msgid "Hourly"
11158
  msgstr ""
11159
 
11160
+ #: src/lib/src/Modules/Reporting/UI.php:30
11161
+ msgid "Daily"
11162
  msgstr ""
11163
 
11164
+ #: src/lib/src/Modules/Reporting/UI.php:31
11165
+ msgid "Weekly"
11166
  msgstr ""
11167
 
11168
+ #: src/lib/src/Modules/Reporting/UI.php:32
11169
+ msgid "Monthly"
11170
  msgstr ""
11171
 
11172
+ #: src/lib/src/Modules/Reporting/UI.php:33
11173
+ msgid "Yearly"
11174
  msgstr ""
11175
 
11176
+ #: src/lib/src/Modules/Reporting/UI.php:73
11177
+ #: src/lib/src/Modules/Reporting/UI.php:86
11178
+ #: src/lib/src/Modules/Reporting/UI.php:93
11179
+ #: src/lib/src/Modules/Reporting/UI.php:104
11180
+ #: src/lib/src/Modules/Reporting/UI.php:111
11181
+ msgid "Lifetime Total"
11182
  msgstr ""
11183
 
11184
+ #: src/lib/src/Modules/Reporting/UI.php:75
11185
+ msgid "Total login attempts blocked."
 
11186
  msgstr ""
11187
 
11188
+ #: src/lib/src/Modules/Reporting/UI.php:88
11189
+ msgid "Total requests identified as bots."
11190
  msgstr ""
11191
 
11192
+ #: src/lib/src/Modules/Reporting/UI.php:99
11193
+ msgid "Total SPAM comments blocked."
11194
  msgstr ""
11195
 
11196
+ #: src/lib/src/Modules/Reporting/UI.php:103
11197
+ #: src/lib/src/Tables/Render/WpListTable/IpBase.php:19
11198
+ msgid "Offenses"
 
11199
  msgstr ""
11200
 
11201
+ #: src/lib/src/Modules/Reporting/UI.php:106
11202
+ msgid "Total offenses against the site."
 
 
11203
  msgstr ""
11204
 
11205
+ #: src/lib/src/Modules/Reporting/UI.php:113
11206
+ msgid "Total connections blocked/killed after too many offenses."
11207
  msgstr ""
11208
 
11209
+ #: src/lib/src/Modules/Reporting/UI.php:118
11210
+ msgid "Now"
11211
  msgstr ""
11212
 
11213
+ #: src/lib/src/Modules/Reporting/UI.php:121
11214
+ msgid "IP address exceeds offense limit and is blocked."
11215
  msgstr ""
11216
 
11217
+ #: src/lib/src/Modules/Reporting/UI.php:126
11218
+ #, php-format
11219
+ msgid "previous %s %s"
 
11220
  msgstr ""
11221
 
11222
+ #: src/lib/src/Modules/Reporting/UI.php:126
11223
+ msgid "days"
11224
  msgstr ""
11225
 
11226
+ #: src/lib/src/Modules/SecurityAdmin/AdminNotices.php:39
11227
+ #: src/lib/src/Modules/SecurityAdmin/AdminNotices.php:61
11228
+ #, php-format
11229
+ msgid "%s Security Restrictions Applied"
11230
  msgstr ""
11231
 
11232
+ #: src/lib/src/Modules/SecurityAdmin/AdminNotices.php:40
11233
+ msgid ""
11234
+ "Altering certain options has been restricted by your WordPress security "
11235
+ "administrator."
11236
  msgstr ""
11237
 
11238
+ #: src/lib/src/Modules/SecurityAdmin/AdminNotices.php:41
11239
  msgid ""
11240
+ "Repeated failed attempts to authenticate will probably lock you out of this "
11241
+ "site."
11242
  msgstr ""
11243
 
11244
+ #: src/lib/src/Modules/SecurityAdmin/AdminNotices.php:47
11245
+ msgid "Admin Access Login"
11246
  msgstr ""
11247
 
11248
+ #: src/lib/src/Modules/SecurityAdmin/AdminNotices.php:48
11249
+ #: src/lib/src/Modules/SecurityAdmin/AdminNotices.php:76
11250
+ #, php-format
11251
+ msgid "Go here to manage settings and authenticate with the %s plugin."
11252
  msgstr ""
11253
 
11254
+ #: src/lib/src/Modules/SecurityAdmin/AdminNotices.php:62
11255
+ msgid ""
11256
+ "Editing existing administrators, promoting existing users to the "
11257
+ "administrator role, or deleting administrator users is currently restricted."
11258
  msgstr ""
11259
 
11260
+ #: src/lib/src/Modules/SecurityAdmin/AdminNotices.php:63
11261
+ msgid ""
11262
+ "Please authenticate with the Security Admin system before attempting any "
11263
+ "administrator user modifications."
11264
  msgstr ""
11265
 
11266
+ #: src/lib/src/Modules/SecurityAdmin/AdminNotices.php:67
11267
+ #: src/lib/src/Modules/SecurityAdmin/AdminNotices.php:75
11268
+ #: src/lib/src/Modules/SecurityAdmin/Lib/SecurityAdmin/SecurityAdminController.php:93
11269
+ msgid "Security Admin Login"
11270
  msgstr ""
11271
 
11272
+ #: src/lib/src/Modules/SecurityAdmin/AdminNotices.php:68
11273
+ msgid "Unlock Now"
11274
  msgstr ""
11275
 
11276
+ #: src/lib/src/Modules/SecurityAdmin/AjaxHandler.php:51
11277
+ msgid "Security Admin PIN Accepted."
 
 
11278
  msgstr ""
11279
 
11280
+ #: src/lib/src/Modules/SecurityAdmin/AjaxHandler.php:52
11281
+ msgid "Please wait"
11282
  msgstr ""
11283
 
11284
+ #: src/lib/src/Modules/SecurityAdmin/AjaxHandler.php:59
11285
+ msgid "Security Admin PIN incorrect."
11286
  msgstr ""
11287
 
11288
+ #: src/lib/src/Modules/SecurityAdmin/AjaxHandler.php:61
11289
+ #, php-format
11290
+ msgid "Attempts remaining: %s."
11291
  msgstr ""
11292
 
11293
+ #: src/lib/src/Modules/SecurityAdmin/AjaxHandler.php:64
11294
+ msgid "No attempts remaining."
11295
  msgstr ""
11296
 
11297
+ #: src/lib/src/Modules/SecurityAdmin/AjaxHandler.php:83
11298
  msgid ""
11299
+ "Email sent. Please ensure the confirmation link opens in THIS browser window."
 
11300
  msgstr ""
11301
 
11302
+ #: src/lib/src/Modules/SecurityAdmin/Insights/OverviewCards.php:22
11303
+ msgid "Security plugin is vulnerable to tampering"
11304
+ msgstr ""
11305
+
11306
+ #: src/lib/src/Modules/SecurityAdmin/Insights/OverviewCards.php:30
11307
+ msgid "Security plugin is protected against tampering"
11308
+ msgstr ""
11309
+
11310
+ #: src/lib/src/Modules/SecurityAdmin/Insights/OverviewCards.php:36
11311
+ msgid "Important Options"
11312
  msgstr ""
11313
 
11314
+ #: src/lib/src/Modules/SecurityAdmin/Insights/OverviewCards.php:39
11315
+ msgid "Important WP options are protected against tampering"
11316
  msgstr ""
11317
 
11318
+ #: src/lib/src/Modules/SecurityAdmin/Insights/OverviewCards.php:40
11319
+ msgid "Important WP options aren't protected against tampering"
 
11320
  msgstr ""
11321
 
11322
+ #: src/lib/src/Modules/SecurityAdmin/Insights/OverviewCards.php:46
11323
+ msgid "WP Admins"
11324
  msgstr ""
11325
 
11326
+ #: src/lib/src/Modules/SecurityAdmin/Insights/OverviewCards.php:49
11327
+ msgid "Admin users are protected against tampering"
 
11328
  msgstr ""
11329
 
11330
+ #: src/lib/src/Modules/SecurityAdmin/Insights/OverviewCards.php:50
11331
+ msgid "Admin users aren't protected against tampering"
11332
  msgstr ""
11333
 
11334
+ #: src/lib/src/Modules/SecurityAdmin/Insights/OverviewCards.php:63
11335
+ #, php-format
11336
+ msgid "Prevent Tampering With %s Settings"
11337
  msgstr ""
11338
 
11339
+ #: src/lib/src/Modules/SecurityAdmin/Lib/SecurityAdmin/Ops/RemoveSecAdmin.php:29
11340
+ msgid "Please Confirm Security Admin Removal"
 
 
11341
  msgstr ""
11342
 
11343
+ #: src/lib/src/Modules/SecurityAdmin/Lib/SecurityAdmin/Ops/RemoveSecAdmin.php:31
11344
  #, php-format
11345
+ msgid ""
11346
+ "A WordPress user (%s) has requested to remove the Security Admin restriction."
11347
  msgstr ""
11348
 
11349
+ #: src/lib/src/Modules/SecurityAdmin/Lib/SecurityAdmin/Ops/RemoveSecAdmin.php:33
11350
+ msgid "The purpose of this email is to confirm this action."
11351
  msgstr ""
11352
 
11353
+ #: src/lib/src/Modules/SecurityAdmin/Lib/SecurityAdmin/Ops/RemoveSecAdmin.php:34
11354
+ msgid ""
11355
+ "Please click the link below to confirm the removal of the Security Admin "
11356
+ "restriction."
11357
  msgstr ""
11358
 
11359
+ #: src/lib/src/Modules/SecurityAdmin/Lib/SecurityAdmin/Ops/RemoveSecAdmin.php:37
11360
  msgid ""
11361
+ "This link must be opened in the same browser that was used to make this "
11362
+ "original request."
11363
+ msgstr ""
11364
+
11365
+ #: src/lib/src/Modules/SecurityAdmin/Lib/SecurityAdmin/Ops/RemoveSecAdmin.php:40
11366
+ msgid "Confirmation link"
11367
  msgstr ""
11368
 
11369
+ #: src/lib/src/Modules/SecurityAdmin/Lib/SecurityAdmin/Ops/RemoveSecAdmin.php:43
11370
+ #: src/lib/src/Modules/SecurityAdmin/Lib/SecurityAdmin/Ops/RemoveSecAdmin.php:61
11371
  msgid ""
11372
+ "Please understand that to reinstate the Security Admin features, you'll need "
11373
+ "to provide a new Security Admin PIN."
11374
  msgstr ""
11375
 
11376
+ #: src/lib/src/Modules/SecurityAdmin/Lib/SecurityAdmin/Ops/RemoveSecAdmin.php:55
11377
+ msgid "Security Admin restrictions have been removed"
11378
  msgstr ""
11379
 
11380
+ #: src/lib/src/Modules/SecurityAdmin/Lib/SecurityAdmin/Ops/RemoveSecAdmin.php:57
11381
+ msgid ""
11382
+ "This is an email notification to inform you that the Security Admin "
11383
+ "restriction has been removed."
11384
  msgstr ""
11385
 
11386
+ #: src/lib/src/Modules/SecurityAdmin/Lib/SecurityAdmin/Ops/RemoveSecAdmin.php:58
11387
  msgid ""
11388
+ "This was done using a confirmation email sent to the Security Administrator "
11389
+ "email address."
11390
  msgstr ""
11391
 
11392
+ #: src/lib/src/Modules/SecurityAdmin/Lib/SecurityAdmin/Ops/RemoveSecAdmin.php:59
11393
+ msgid "All restrictions imposed by the Security Admin module have been lifted."
11394
  msgstr ""
11395
 
11396
+ #: src/lib/src/Modules/SecurityAdmin/Lib/SecurityAdmin/Restrictions/Users.php:107
11397
+ msgid ""
11398
+ "Sorry, deleting administrators is currently restricted to your Security Admin"
11399
  msgstr ""
11400
 
11401
+ #: src/lib/src/Modules/SecurityAdmin/Lib/SecurityAdmin/SecurityAdminController.php:85
11402
+ #: src/lib/src/Modules/SecurityAdmin/Lib/SecurityAdmin/SecurityAdminController.php:87
11403
+ msgid "Security Admin session has timed-out."
11404
  msgstr ""
11405
 
11406
+ #: src/lib/src/Modules/SecurityAdmin/Lib/SecurityAdmin/SecurityAdminController.php:85
11407
+ msgid "Click OK to reload and re-authenticate."
11408
  msgstr ""
11409
 
11410
+ #: src/lib/src/Modules/SecurityAdmin/Lib/SecurityAdmin/SecurityAdminController.php:86
11411
+ msgid "Security Admin session has nearly timed-out."
11412
  msgstr ""
11413
 
11414
+ #: src/lib/src/Modules/SecurityAdmin/Lib/SecurityAdmin/SecurityAdminController.php:94
11415
+ msgid "Unlock"
11416
+ msgstr ""
11417
+
11418
+ #: src/lib/src/Modules/SecurityAdmin/Lib/SecurityAdmin/SecurityAdminController.php:170
11419
+ msgid "Enter your Security Admin PIN"
11420
  msgstr ""
11421
 
11422
+ #: src/lib/src/Modules/SecurityAdmin/ModCon.php:148
11423
  msgid ""
11424
+ "Sorry, this plugin is protected against unauthorised attempts to disable it."
 
11425
  msgstr ""
11426
 
11427
+ #: src/lib/src/Modules/SecurityAdmin/ModCon.php:151
11428
+ msgid "You'll just need to authenticate first and try again."
11429
  msgstr ""
11430
 
11431
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:15
11432
+ msgid "Security PIN Pass"
11433
  msgstr ""
11434
 
11435
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:17
11436
+ msgid "Security PIN authentication successful."
 
 
11437
  msgstr ""
11438
 
11439
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:21
11440
+ msgid "Security PIN Fail"
 
 
11441
  msgstr ""
11442
 
11443
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:23
11444
+ msgid "Security PIN authentication failed."
11445
  msgstr ""
11446
 
11447
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:43
11448
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:52
11449
+ msgid ""
11450
+ "Restricts access to this plugin preventing unauthorized changes to your "
11451
+ "security settings."
11452
  msgstr ""
11453
 
11454
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:45
11455
+ msgid "You need to also enter a new Security PIN to enable this feature."
11456
  msgstr ""
11457
 
11458
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:50
11459
+ msgid "Security Admin Restriction Settings"
11460
  msgstr ""
11461
 
11462
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:59
11463
+ msgid "Security Admin Restriction Zones"
11464
  msgstr ""
11465
 
11466
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:61
11467
  msgid ""
11468
+ "Restricts access to key WordPress areas for all users not authenticated with "
11469
+ "the Security Admin Access system."
11470
  msgstr ""
11471
 
11472
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:64
11473
+ msgid "Access Restriction Zones"
11474
  msgstr ""
11475
 
11476
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:72
11477
+ #, php-format
11478
+ msgid "Rename and re-brand the %s plugin for your client site installations."
11479
  msgstr ""
11480
 
11481
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:77
11482
+ msgid "The Security Admin system must be active for these settings to apply."
11483
  msgstr ""
11484
 
11485
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:109
11486
+ msgid "Enforce Security Admin Access Restriction"
 
 
11487
  msgstr ""
11488
 
11489
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:110
11490
+ msgid ""
11491
+ "Enable this with great care and consideration. Ensure that you set an "
11492
+ "Security PIN that you'll remember."
11493
  msgstr ""
11494
 
11495
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:115
11496
+ msgid "Provide/Update Security Admin PIN"
11497
  msgstr ""
11498
 
11499
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:117
11500
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:161
11501
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:168
11502
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:175
11503
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:181
11504
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:187
11505
+ msgid "Careful"
11506
  msgstr ""
11507
 
11508
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:117
11509
+ msgid ""
11510
+ "If you forget this, you could potentially lock yourself out from using this "
11511
+ "plugin."
11512
  msgstr ""
11513
 
11514
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:118
11515
+ msgid "Security PIN Currently Set"
11516
  msgstr ""
11517
 
11518
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:118
11519
+ msgid "Security PIN NOT Currently Set"
 
 
11520
  msgstr ""
11521
 
11522
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:121
11523
+ #, php-format
11524
+ msgid "To delete the current security PIN, type exactly \"%s\" and save."
11525
  msgstr ""
11526
 
11527
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:123
11528
+ msgid "Deleting the PIN will also remove security admin users."
11529
  msgstr ""
11530
 
11531
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:130
11532
+ msgid "Security Admins"
11533
  msgstr ""
11534
 
11535
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:131
11536
+ msgid "Persistent Security Admins"
 
 
11537
  msgstr ""
11538
 
11539
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:133
11540
+ msgid ""
11541
+ "Users provided will be security admins automatically, without needing the "
11542
+ "security PIN."
11543
  msgstr ""
11544
 
11545
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:134
11546
+ msgid "Enter admin username, email or ID."
11547
  msgstr ""
11548
 
11549
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:134
11550
+ msgid "1 entry per-line."
11551
  msgstr ""
11552
 
11553
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:135
11554
+ msgid "Verified users will be converted to usernames."
 
11555
  msgstr ""
11556
 
11557
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:140
11558
+ msgid "Security Admin Timeout"
11559
  msgstr ""
11560
 
11561
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:141
11562
+ msgid "Specify An Automatic Timeout Interval For Security Admin Access"
11563
  msgstr ""
11564
 
11565
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:142
11566
+ msgid "This will automatically expire your Security Admin Session."
11567
  msgstr ""
11568
 
11569
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:152
11570
+ msgid "Allow Email Override"
11571
  msgstr ""
11572
 
11573
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:153
11574
+ msgid "Allow Email Override Of Admin Access Restrictions"
 
 
 
 
 
11575
  msgstr ""
11576
 
11577
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:154
11578
+ msgid ""
11579
+ "Allow the use of verification emails to override and switch off the Security "
11580
+ "Admin restrictions."
11581
  msgstr ""
11582
 
11583
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:155
11584
+ #, php-format
11585
+ msgid "The email address specified in %s's General settings will be used."
11586
  msgstr ""
11587
 
11588
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:159
11589
+ msgid "Pages"
11590
  msgstr ""
11591
 
11592
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:160
11593
+ msgid "Restrict Access To Key WordPress Posts And Pages Actions"
11594
  msgstr ""
11595
 
11596
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:161
11597
+ msgid "This will restrict access to page/post creation, editing and deletion."
 
11598
  msgstr ""
11599
 
11600
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:162
11601
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:169
11602
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:192
11603
  #, php-format
11604
+ msgid "Selecting \"%s\" will also restrict all other options."
11605
  msgstr ""
11606
 
11607
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:162
11608
+ msgid "Edit"
 
11609
  msgstr ""
11610
 
11611
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:167
11612
+ msgid "Restrict Access To Key WordPress Plugin Actions"
11613
  msgstr ""
11614
 
11615
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:168
11616
+ msgid ""
11617
+ "This will restrict access to plugin installation, update, activation and "
11618
+ "deletion."
11619
  msgstr ""
11620
 
11621
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:173
11622
+ msgid "WordPress Options"
 
11623
  msgstr ""
11624
 
11625
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:174
11626
+ msgid "Restrict Access To Certain WordPress Admin Options"
11627
  msgstr ""
11628
 
11629
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:175
11630
+ msgid ""
11631
+ "This will restrict the ability of WordPress administrators from changing key "
11632
+ "WordPress settings."
11633
  msgstr ""
11634
 
11635
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:179
11636
+ msgid "Admin Users"
11637
  msgstr ""
11638
 
11639
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:180
11640
+ msgid "Restrict Access To Create/Delete/Modify Other Admin Users"
 
11641
  msgstr ""
11642
 
11643
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:181
11644
+ msgid ""
11645
+ "This will restrict the ability of WordPress administrators from creating, "
11646
+ "modifying or promoting other administrators."
11647
  msgstr ""
11648
 
11649
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:186
11650
+ msgid "Restrict Access To WordPress Theme Actions"
11651
  msgstr ""
11652
 
11653
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:187
11654
+ msgid ""
11655
+ "This will restrict access to theme installation, update, activation and "
11656
+ "deletion."
11657
  msgstr ""
11658
 
11659
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:194
11660
+ #, php-format
11661
+ msgid "%s and %s"
11662
  msgstr ""
11663
 
11664
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:203
11665
+ msgid "Enable"
 
11666
  msgstr ""
11667
 
11668
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:204
11669
+ msgid "Activate Your White Label Settings"
11670
  msgstr ""
11671
 
11672
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:205
11673
+ msgid "Turn your White Label settings on/off."
 
11674
  msgstr ""
11675
 
11676
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:208
11677
+ msgid "Hide Updates"
11678
  msgstr ""
11679
 
11680
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:209
11681
+ msgid "Hide Plugin Updates From Non-Security Admins"
11682
  msgstr ""
11683
 
11684
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:210
11685
+ #, php-format
11686
+ msgid "Hide available %s updates from non-security administrators."
11687
  msgstr ""
11688
 
11689
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:213
11690
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:225
11691
+ msgid "Plugin Name"
11692
  msgstr ""
11693
 
11694
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:214
11695
+ msgid "The Name Of The Plugin"
 
11696
  msgstr ""
11697
 
11698
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:215
11699
+ msgid "The name of the plugin that will be displayed to your site users."
 
11700
  msgstr ""
11701
 
11702
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:218
11703
+ msgid "Replace Plugin Badge"
 
11704
  msgstr ""
11705
 
11706
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:219
11707
+ msgid "Replace Plugin Badge URL and Images"
11708
  msgstr ""
11709
 
11710
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:220
11711
+ msgid ""
11712
+ "When using the plugin badge, replace the URL and link with your Whitelabel "
11713
+ "settings."
11714
  msgstr ""
11715
 
11716
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:223
11717
+ msgid "Menu Title"
11718
  msgstr ""
11719
 
11720
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:224
11721
+ msgid "The Main Menu Title Of The Plugin"
 
 
 
11722
  msgstr ""
11723
 
11724
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:225
11725
+ #, php-format
11726
+ msgid ""
11727
+ "The Main Menu Title Of The Plugin. If left empty, the \"%s\" will be used."
11728
  msgstr ""
11729
 
11730
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:228
11731
+ msgid "Company Name"
11732
  msgstr ""
11733
 
11734
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:229
11735
+ msgid "The Name Of Your Company"
 
 
 
11736
  msgstr ""
11737
 
11738
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:230
11739
+ msgid "Provide the name of your company."
11740
  msgstr ""
11741
 
11742
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:234
11743
+ msgid "The Description Of The Plugin"
 
 
11744
  msgstr ""
11745
 
11746
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:235
11747
+ msgid "The description of the plugin displayed on the plugins page."
 
 
 
 
 
11748
  msgstr ""
11749
 
11750
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:238
11751
+ msgid "Home URL"
 
11752
  msgstr ""
11753
 
11754
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:239
11755
+ msgid "Plugin Home Page URL"
11756
  msgstr ""
11757
 
11758
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:240
11759
+ msgid ""
11760
+ "When a user clicks the home link for this plugin, this is where they'll be "
11761
+ "directed."
11762
  msgstr ""
11763
 
11764
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:243
11765
+ msgid "Menu Icon"
11766
  msgstr ""
11767
 
11768
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:244
11769
+ msgid "Menu Icon URL"
11770
  msgstr ""
11771
 
11772
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:245
11773
+ msgid "The URL of the icon to display in the menu."
11774
  msgstr ""
11775
 
11776
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:246
11777
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:252
11778
+ #, php-format
11779
+ msgid "The %s should measure %s."
11780
  msgstr ""
11781
 
11782
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:246
11783
+ msgid "icon"
 
 
 
11784
  msgstr ""
11785
 
11786
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:249
11787
+ msgid "Plugin Badge Logo"
11788
  msgstr ""
11789
 
11790
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:250
11791
+ msgid "Plugin Badge Logo URL"
 
11792
  msgstr ""
11793
 
11794
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:251
11795
+ msgid "The URL of the logo to display in the plugin badge."
11796
  msgstr ""
11797
 
11798
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:252
11799
+ msgid "logo"
11800
  msgstr ""
11801
 
11802
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:255
11803
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:256
11804
+ msgid "Dashboard and 2FA Login Logo URL"
11805
  msgstr ""
11806
 
11807
+ #: src/lib/src/Modules/SecurityAdmin/Strings.php:257
11808
+ msgid ""
11809
+ "The URL of the logo to display on the Dashboard and the Two-Factor "
11810
+ "Authentication login page."
11811
  msgstr ""
11812
 
11813
+ #: src/lib/src/Modules/SecurityAdmin/UI.php:18
11814
+ msgid ""
11815
+ "Please also supply a Security Admin PIN, as whitelabel settings are only "
11816
+ "applied when the Security Admin feature is active."
11817
  msgstr ""
11818
 
11819
+ #: src/lib/src/Modules/SecurityAdmin/WpCli/Pin.php:57
11820
+ msgid "Security admin pin removed."
 
11821
  msgstr ""
11822
 
11823
+ #: src/lib/src/Modules/SecurityAdmin/WpCli/Pin.php:65
11824
+ #, php-format
11825
+ msgid "Security admin pin set to: \"%s\""
11826
  msgstr ""
11827
 
11828
+ #: src/lib/src/Modules/SecurityAdmin/WpCli/Pin.php:71
11829
+ msgid "Setting Security admin pin failed."
 
11830
  msgstr ""
11831
 
11832
+ #: src/lib/src/Modules/Sessions/Processor.php:83
11833
+ msgid "You're already logged-in."
11834
  msgstr ""
11835
 
11836
+ #: src/lib/src/Modules/Sessions/Processor.php:87
11837
+ msgid "Go To Admin"
11838
  msgstr ""
11839
 
11840
+ #: src/lib/src/Modules/Sessions/Strings.php:15
11841
+ msgid "Session Started"
11842
  msgstr ""
11843
 
11844
+ #: src/lib/src/Modules/Sessions/Strings.php:17
11845
  msgid ""
11846
+ "Session started for user ({{user_login}}) with session ID {{session_id}}."
11847
  msgstr ""
11848
 
11849
+ #: src/lib/src/Modules/Sessions/Strings.php:21
11850
+ msgid "Session Terminated"
 
11851
  msgstr ""
11852
 
11853
+ #: src/lib/src/Modules/Sessions/Strings.php:23
11854
+ msgid "Session terminated."
11855
  msgstr ""
11856
 
11857
+ #: src/lib/src/Modules/Sessions/Strings.php:27
11858
+ msgid "Current Session Terminated"
 
 
 
11859
  msgstr ""
11860
 
11861
+ #: src/lib/src/Modules/Sessions/Strings.php:29
11862
+ msgid ""
11863
+ "Current session terminated for user ({{user_login}}) with session ID "
11864
+ "{{session_id}}."
11865
  msgstr ""
11866
 
11867
+ #: src/lib/src/Modules/Sessions/Strings.php:33
11868
+ msgid "Login Success"
 
11869
  msgstr ""
11870
 
11871
+ #: src/lib/src/Modules/Sessions/Strings.php:35
11872
+ msgid "Login successful."
11873
  msgstr ""
11874
 
11875
+ #: src/lib/src/Modules/Sessions/Strings.php:55
11876
+ msgid "Creates and Manages User Sessions."
 
11877
  msgstr ""
11878
 
11879
+ #: src/lib/src/Modules/Traffic/Lib/TrafficTable/LoadRawTableData.php:119
11880
+ msgid "Location"
11881
  msgstr ""
11882
 
11883
+ #: src/lib/src/Modules/Traffic/Lib/TrafficTable/LoadRawTableData.php:172
11884
+ #: src/lib/src/Modules/Traffic/Lib/TrafficTable/LoadRawTableData.php:180
11885
+ msgid "No Record"
11886
  msgstr ""
11887
 
11888
+ #: src/lib/src/Modules/Traffic/Lib/TrafficTable/LoadRawTableData.php:188
 
11889
  #, php-format
11890
+ msgid "%s offense"
11891
+ msgid_plural "%s offenses"
11892
+ msgstr[0] ""
11893
+ msgstr[1] ""
11894
 
11895
+ #: src/lib/src/Modules/Traffic/Lib/TrafficTable/LoadRawTableData.php:194
11896
+ msgid "Bypass"
11897
  msgstr ""
11898
 
11899
+ #: src/lib/src/Modules/Traffic/Strings.php:17
11900
  msgid ""
11901
+ "Rate limit ({{count}}) was exceeded with {{requests}} requests within "
11902
+ "{{span}} seconds."
 
 
 
 
 
 
 
 
11903
  msgstr ""
11904
 
11905
+ #: src/lib/src/Modules/Traffic/Strings.php:37
11906
+ msgid "Monitor and review all requests to your site."
11907
  msgstr ""
11908
 
11909
+ #: src/lib/src/Modules/Traffic/Strings.php:38
11910
+ msgid ""
11911
+ "Required only if you need to review and investigate and monitor requests to "
11912
+ "your site"
11913
  msgstr ""
11914
 
11915
+ #: src/lib/src/Modules/Traffic/Strings.php:43
11916
+ msgid "Traffic Logging Options"
11917
  msgstr ""
11918
 
11919
+ #: src/lib/src/Modules/Traffic/Strings.php:44
11920
+ msgid "Traffic Watch Options"
11921
  msgstr ""
11922
 
11923
+ #: src/lib/src/Modules/Traffic/Strings.php:46
11924
+ msgid "Provides finer control over the Traffic Watch system."
 
11925
  msgstr ""
11926
 
11927
+ #: src/lib/src/Modules/Traffic/Strings.php:52
11928
+ msgid "Brute Force Traffic Rate Limiting"
11929
  msgstr ""
11930
 
11931
+ #: src/lib/src/Modules/Traffic/Strings.php:53
11932
+ msgid "Traffic Rate Limiting"
 
11933
  msgstr ""
11934
 
11935
+ #: src/lib/src/Modules/Traffic/Strings.php:55
11936
+ msgid "Prevents excessive requests from a single visitor."
11937
  msgstr ""
11938
 
11939
+ #: src/lib/src/Modules/Traffic/Strings.php:56
11940
+ msgid "This feature is only available while the Traffic Logger is active."
 
11941
  msgstr ""
11942
 
11943
+ #: src/lib/src/Modules/Traffic/Strings.php:57
11944
+ msgid "Use this feature with care."
11945
  msgstr ""
11946
 
11947
+ #: src/lib/src/Modules/Traffic/Strings.php:58
11948
+ msgid ""
11949
+ "You could block legitimate visitors who load too many pages in quick "
11950
+ "succession on your site."
11951
  msgstr ""
11952
 
11953
+ #: src/lib/src/Modules/Traffic/Strings.php:92
11954
+ msgid "Enable Traffic Logger"
 
11955
  msgstr ""
11956
 
11957
+ #: src/lib/src/Modules/Traffic/Strings.php:93
11958
+ msgid "Turn On The Traffic Logging Feature"
11959
  msgstr ""
11960
 
11961
+ #: src/lib/src/Modules/Traffic/Strings.php:94
11962
+ msgid "Enable or disable the ability to log and monitor requests to your site"
11963
  msgstr ""
11964
 
11965
+ #: src/lib/src/Modules/Traffic/Strings.php:98
11966
+ msgid "Traffic Log Exclusions"
11967
  msgstr ""
11968
 
11969
+ #: src/lib/src/Modules/Traffic/Strings.php:99
11970
+ msgid "Select Which Types Of Requests To Exclude"
11971
  msgstr ""
11972
 
11973
+ #: src/lib/src/Modules/Traffic/Strings.php:101
11974
+ msgid ""
11975
+ "There's no need to have unnecessary traffic noise in your logs, so we "
11976
+ "automatically exclude certain types of requests."
11977
  msgstr ""
11978
 
11979
+ #: src/lib/src/Modules/Traffic/Strings.php:102
11980
+ msgid ""
11981
+ "Select request types that you don't want to appear in the traffic viewer."
11982
  msgstr ""
11983
 
11984
+ #: src/lib/src/Modules/Traffic/Strings.php:103
11985
+ msgid ""
11986
+ "If a request matches any exclusion rule, it wont show in the traffic logs."
11987
  msgstr ""
11988
 
11989
+ #: src/lib/src/Modules/Traffic/Strings.php:108
11990
+ msgid "Custom Exclusions"
11991
  msgstr ""
11992
 
11993
+ #: src/lib/src/Modules/Traffic/Strings.php:109
11994
+ msgid "Provide Custom Traffic Exclusions"
11995
  msgstr ""
11996
 
11997
+ #: src/lib/src/Modules/Traffic/Strings.php:111
11998
  msgid ""
11999
+ "For each entry, if the text is present in either the User Agent or request "
12000
+ "Path, it will be excluded."
12001
  msgstr ""
12002
 
12003
+ #: src/lib/src/Modules/Traffic/Strings.php:112
12004
+ msgid "Take a new line for each entry."
12005
  msgstr ""
12006
 
12007
+ #: src/lib/src/Modules/Traffic/Strings.php:113
12008
+ msgid "Comparisons are case-insensitive."
12009
  msgstr ""
12010
 
12011
+ #: src/lib/src/Modules/Traffic/Strings.php:118
12012
+ msgid "Auto Expiry Cleaning"
12013
  msgstr ""
12014
 
12015
+ #: src/lib/src/Modules/Traffic/Strings.php:119
12016
+ msgid "Enable Traffic Log Auto Expiry"
12017
  msgstr ""
12018
 
12019
+ #: src/lib/src/Modules/Traffic/Strings.php:120
12020
+ msgid "DB cleanup will delete logs older than this maximum value (in days)."
12021
  msgstr ""
12022
 
12023
+ #: src/lib/src/Modules/Traffic/Strings.php:124
12024
+ msgid "Enable Rate Limiting"
 
 
12025
  msgstr ""
12026
 
12027
+ #: src/lib/src/Modules/Traffic/Strings.php:125
12028
+ msgid "Turn On The Rate Limiting Feature"
 
12029
  msgstr ""
12030
 
12031
+ #: src/lib/src/Modules/Traffic/Strings.php:126
12032
+ msgid ""
12033
+ "Enable or disable the rate limiting feature according to your rate limiting "
12034
+ "parameters."
12035
  msgstr ""
12036
 
12037
+ #: src/lib/src/Modules/Traffic/Strings.php:130
12038
+ msgid "Max Request Limit"
12039
  msgstr ""
12040
 
12041
+ #: src/lib/src/Modules/Traffic/Strings.php:131
12042
+ msgid "Maximum Number Of Requests Allowed In Time Limit"
 
 
 
 
12043
  msgstr ""
12044
 
12045
+ #: src/lib/src/Modules/Traffic/Strings.php:133
12046
+ msgid ""
12047
+ "The maximum number of requests that are allowed within the given request "
12048
+ "time limit."
12049
  msgstr ""
12050
 
12051
+ #: src/lib/src/Modules/Traffic/Strings.php:134
12052
+ msgid ""
12053
+ "Any visitor that exceeds this number of requests in the given time period "
12054
+ "will register an offense against their IP address."
12055
  msgstr ""
12056
 
12057
+ #: src/lib/src/Modules/Traffic/Strings.php:135
12058
+ msgid "Enough offenses will result in a ban of the IP address."
12059
  msgstr ""
12060
 
12061
+ #: src/lib/src/Modules/Traffic/Strings.php:136
12062
+ msgid ""
12063
+ "Use a larger maximum request limit to reduce the risk of blocking legitimate "
12064
+ "visitors."
12065
  msgstr ""
12066
 
12067
+ #: src/lib/src/Modules/Traffic/Strings.php:141
12068
+ msgid "Request Limit Time Interval"
12069
  msgstr ""
12070
 
12071
+ #: src/lib/src/Modules/Traffic/Strings.php:142
12072
+ msgid "The Time Interval To Test For Excessive Requests"
 
12073
  msgstr ""
12074
 
12075
+ #: src/lib/src/Modules/Traffic/Strings.php:144
12076
+ msgid ""
12077
+ "The time period within which to monitor for multiple requests that exceed "
12078
+ "the max request limit."
12079
  msgstr ""
12080
 
12081
+ #: src/lib/src/Modules/Traffic/Strings.php:145
12082
+ msgid "Interval is measured in seconds."
12083
  msgstr ""
12084
 
12085
+ #: src/lib/src/Modules/Traffic/Strings.php:146
12086
+ #: src/lib/src/Modules/Traffic/Strings.php:148
12087
+ msgid "Example"
12088
  msgstr ""
12089
 
12090
+ #: src/lib/src/Modules/Traffic/Strings.php:147
12091
+ #: src/lib/src/Modules/Traffic/Strings.php:149
12092
  #, php-format
12093
+ msgid "Use %s to test for excessive requests within a %s minutes interval."
12094
  msgstr ""
12095
 
12096
+ #: src/lib/src/Modules/Traffic/Strings.php:150
12097
  msgid ""
12098
+ "Use a smaller interval to reduce the risk of blocking legitimate visitors."
12099
  msgstr ""
12100
 
12101
+ #: src/lib/src/Modules/Traffic/UI.php:49
12102
+ msgid ""
12103
+ "Traffic Watcher will not run because visitor IP address detection is not "
12104
+ "correctly configured."
12105
  msgstr ""
12106
 
12107
+ #: src/lib/src/Modules/Traffic/UI.php:56
12108
  #, php-format
12109
+ msgid "%s may only be enabled if the Traffic Logger feature is also turned on."
12110
  msgstr ""
12111
 
12112
+ #: src/lib/src/Modules/Traffic/UI.php:56 src/lib/src/Modules/Traffic/UI.php:60
12113
+ msgid "Traffic Rate Limiter"
12114
  msgstr ""
12115
 
12116
+ #: src/lib/src/Modules/Traffic/UI.php:60
12117
+ #, php-format
12118
+ msgid "%s is a Pro-only feature."
12119
  msgstr ""
12120
 
12121
+ #: src/lib/src/Modules/UserManagement/AjaxHandler.php:77
12122
+ #: src/lib/src/Modules/UserManagement/AjaxHandler.php:112
12123
+ msgid "Please logout if you want to delete your own session."
12124
  msgstr ""
12125
 
12126
+ #: src/lib/src/Modules/UserManagement/AjaxHandler.php:91
12127
+ msgid "Your session was retained"
 
 
12128
  msgstr ""
12129
 
12130
+ #: src/lib/src/Modules/UserManagement/AjaxHandler.php:109
12131
+ msgid "Invalid session selected"
 
 
 
12132
  msgstr ""
12133
 
12134
+ #: src/lib/src/Modules/UserManagement/AjaxHandler.php:115
12135
+ msgid "User session deleted"
 
 
 
 
 
12136
  msgstr ""
12137
 
12138
+ #: src/lib/src/Modules/UserManagement/AjaxHandler.php:119
12139
+ msgid "User session wasn't deleted"
 
 
12140
  msgstr ""
12141
 
12142
+ #: src/lib/src/Modules/UserManagement/Insights/OverviewCards.php:22
12143
+ msgid "Idle Users"
 
 
 
12144
  msgstr ""
12145
 
12146
+ #: src/lib/src/Modules/UserManagement/Insights/OverviewCards.php:25
12147
+ #, php-format
12148
+ msgid "Idle sessions are terminated after %s hours"
 
 
12149
  msgstr ""
12150
 
12151
+ #: src/lib/src/Modules/UserManagement/Insights/OverviewCards.php:26
12152
+ msgid "Idle sessions wont be terminated"
 
 
 
12153
  msgstr ""
12154
 
12155
+ #: src/lib/src/Modules/UserManagement/Insights/OverviewCards.php:32
12156
+ msgid "Lock To IP"
 
 
12157
  msgstr ""
12158
 
12159
+ #: src/lib/src/Modules/UserManagement/Insights/OverviewCards.php:35
12160
+ msgid "Sessions are locked to IP address"
 
 
12161
  msgstr ""
12162
 
12163
+ #: src/lib/src/Modules/UserManagement/Insights/OverviewCards.php:36
12164
+ msgid "Sessions aren't locked to IP address"
12165
  msgstr ""
12166
 
12167
+ #: src/lib/src/Modules/UserManagement/Insights/OverviewCards.php:44
12168
+ msgid "Pwned Passwords"
12169
  msgstr ""
12170
 
12171
+ #: src/lib/src/Modules/UserManagement/Insights/OverviewCards.php:47
12172
+ msgid "Pwned passwords are blocked on this site"
 
 
12173
  msgstr ""
12174
 
12175
+ #: src/lib/src/Modules/UserManagement/Insights/OverviewCards.php:48
12176
+ msgid "Pwned passwords are allowed on this site"
 
 
12177
  msgstr ""
12178
 
12179
+ #: src/lib/src/Modules/UserManagement/Insights/OverviewCards.php:57
12180
+ msgid "Several password policies are active"
12181
  msgstr ""
12182
 
12183
+ #: src/lib/src/Modules/UserManagement/Insights/OverviewCards.php:58
12184
+ msgid "Limited or no password polices are active"
12185
  msgstr ""
12186
 
12187
+ #: src/lib/src/Modules/UserManagement/Insights/OverviewCards.php:66
12188
+ msgid "Admin User"
 
 
12189
  msgstr ""
12190
 
12191
+ #: src/lib/src/Modules/UserManagement/Insights/OverviewCards.php:68
12192
+ msgid "Default 'admin' user is still available"
 
 
 
12193
  msgstr ""
12194
 
12195
+ #: src/lib/src/Modules/UserManagement/Insights/OverviewCards.php:69
12196
+ msgid "The default 'admin' user is no longer available."
 
 
12197
  msgstr ""
12198
 
12199
+ #: src/lib/src/Modules/UserManagement/Insights/OverviewCards.php:72
12200
+ msgid "The default 'admin' user should be deleted or demoted."
 
 
12201
  msgstr ""
12202
 
12203
+ #: src/lib/src/Modules/UserManagement/Insights/OverviewCards.php:83
12204
+ msgid "Sessions Control & Password Policies"
12205
  msgstr ""
12206
 
12207
+ #: src/lib/src/Modules/UserManagement/Lib/Password/UserPasswordHandler.php:82
12208
+ #, php-format
12209
+ msgid "Your password has expired (after %s days)."
12210
  msgstr ""
12211
 
12212
+ #: src/lib/src/Modules/UserManagement/Lib/Password/UserPasswordHandler.php:96
12213
+ msgid ""
12214
+ "Your password doesn't meet requirements set by your security administrator."
12215
  msgstr ""
12216
 
12217
+ #: src/lib/src/Modules/UserManagement/Lib/Password/UserPasswordHandler.php:121
12218
+ msgid ""
12219
+ "For your security, please use the password section below to update your "
12220
+ "password."
12221
  msgstr ""
12222
 
12223
+ #: src/lib/src/Modules/UserManagement/Lib/Password/UserPasswordHandler.php:159
12224
+ msgid ""
12225
+ "Your security administrator has imposed requirements for password quality."
12226
  msgstr ""
12227
 
12228
+ #: src/lib/src/Modules/UserManagement/Lib/Password/UserPasswordHandler.php:161
12229
+ msgid "Reason"
 
12230
  msgstr ""
12231
 
12232
+ #: src/lib/src/Modules/UserManagement/Lib/Password/UserPasswordHandler.php:200
12233
+ #, php-format
12234
+ msgid "Password length (%s) too short (min: %s characters)"
12235
  msgstr ""
12236
 
12237
+ #: src/lib/src/Modules/UserManagement/Lib/Password/UserPasswordHandler.php:269
12238
+ msgid "Please use a different password."
 
12239
  msgstr ""
12240
 
12241
+ #: src/lib/src/Modules/UserManagement/Lib/Password/UserPasswordHandler.php:270
12242
+ msgid "This password has been pwned."
12243
  msgstr ""
12244
 
12245
+ #: src/lib/src/Modules/UserManagement/Lib/Password/UserPasswordHandler.php:274
12246
  #, php-format
12247
+ msgid "%s times"
12248
  msgstr ""
12249
 
12250
+ #: src/lib/src/Modules/UserManagement/Lib/Session/UserSessionHandler.php:143
12251
+ msgid "Your session has expired."
12252
  msgstr ""
12253
 
12254
+ #: src/lib/src/Modules/UserManagement/Lib/Session/UserSessionHandler.php:147
12255
+ msgid "Your session was idle for too long."
12256
  msgstr ""
12257
 
12258
+ #: src/lib/src/Modules/UserManagement/Lib/Session/UserSessionHandler.php:151
12259
+ msgid "Your session was locked to another IP Address."
12260
  msgstr ""
12261
 
12262
+ #: src/lib/src/Modules/UserManagement/Lib/Session/UserSessionHandler.php:156
12263
  #, php-format
12264
+ msgid "You do not currently have a %s user session."
 
 
12265
  msgstr ""
12266
 
12267
+ #: src/lib/src/Modules/UserManagement/Lib/Session/UserSessionHandler.php:162
12268
+ msgid "Your session was terminated."
12269
  msgstr ""
12270
 
12271
+ #: src/lib/src/Modules/UserManagement/Lib/Session/UserSessionHandler.php:166
12272
+ msgid "Please login again."
12273
  msgstr ""
12274
 
12275
+ #: src/lib/src/Modules/UserManagement/Lib/Suspend/Idle.php:24
12276
+ msgid "Sorry, this account is suspended because of inactivity."
12277
  msgstr ""
12278
 
12279
+ #: src/lib/src/Modules/UserManagement/Lib/Suspend/Idle.php:25
12280
+ #: src/lib/src/Modules/UserManagement/Lib/Suspend/PasswordExpiry.php:21
12281
+ msgid "Please reset your password to regain access."
12282
  msgstr ""
12283
 
12284
+ #: src/lib/src/Modules/UserManagement/Lib/Suspend/Idle.php:28
12285
+ #: src/lib/src/Modules/UserManagement/Lib/Suspend/PasswordExpiry.php:24
12286
+ msgid "Reset"
12287
  msgstr ""
12288
 
12289
+ #: src/lib/src/Modules/UserManagement/Lib/Suspend/PasswordExpiry.php:20
12290
+ msgid "Sorry, this account is suspended because the password has expired."
 
12291
  msgstr ""
12292
 
12293
+ #: src/lib/src/Modules/UserManagement/Lib/Suspend/Suspended.php:19
12294
+ msgid "Sorry, this account is suspended."
 
12295
  msgstr ""
12296
 
12297
+ #: src/lib/src/Modules/UserManagement/Lib/Suspend/Suspended.php:20
12298
+ msgid "Please contact your website administrator."
 
12299
  msgstr ""
12300
 
12301
+ #: src/lib/src/Modules/UserManagement/Lib/Suspend/UserSuspendController.php:59
12302
+ #: src/lib/src/Modules/UserManagement/Lib/Suspend/UserSuspendController.php:196
12303
+ msgid "Suspended"
12304
  msgstr ""
12305
 
12306
+ #: src/lib/src/Modules/UserManagement/Lib/Suspend/UserSuspendController.php:143
12307
+ msgid "Manually Suspended"
12308
  msgstr ""
12309
 
12310
+ #: src/lib/src/Modules/UserManagement/Lib/Suspend/UserSuspendController.php:159
12311
+ msgid "Idle"
12312
  msgstr ""
12313
 
12314
+ #: src/lib/src/Modules/UserManagement/Lib/Suspend/UserSuspendController.php:173
12315
+ #: src/lib/src/Modules/UserManagement/Strings.php:23
12316
+ msgid "Password Expired"
12317
  msgstr ""
12318
 
12319
+ #: src/lib/src/Modules/UserManagement/Lib/Suspend/UserSuspendController.php:192
12320
+ msgid "Suspend Account"
 
12321
  msgstr ""
12322
 
12323
+ #: src/lib/src/Modules/UserManagement/Lib/Suspend/UserSuspendController.php:193
12324
+ msgid "Check to un/suspend user account"
12325
+ msgstr ""
 
 
 
12326
 
12327
+ #: src/lib/src/Modules/UserManagement/Lib/Suspend/UserSuspendController.php:194
12328
+ msgid "The user can never login while their account is suspended."
 
 
 
12329
  msgstr ""
12330
 
12331
+ #: src/lib/src/Modules/UserManagement/Lib/Suspend/UserSuspendController.php:195
12332
  msgid ""
12333
+ "Sorry, suspension for this account may only be managed by a security "
12334
+ "administrator."
12335
  msgstr ""
12336
 
12337
+ #: src/lib/src/Modules/UserManagement/Processor.php:126
12338
+ msgid "User Status"
12339
  msgstr ""
12340
 
12341
+ #: src/lib/src/Modules/UserManagement/Processor.php:132
12342
+ msgid "Not Recorded"
 
12343
  msgstr ""
12344
 
12345
+ #: src/lib/src/Modules/UserManagement/Processor.php:146
12346
+ msgid "Last Login"
12347
  msgstr ""
12348
 
12349
+ #: src/lib/src/Modules/UserManagement/Processor.php:197
12350
+ #: src/lib/src/Modules/UserManagement/Processor.php:226
12351
+ msgid "Notice"
12352
  msgstr ""
12353
 
12354
+ #: src/lib/src/Modules/UserManagement/Processor.php:197
12355
+ #, php-format
12356
+ msgid "%s Just Logged Into %s"
12357
  msgstr ""
12358
 
12359
+ #: src/lib/src/Modules/UserManagement/Processor.php:199
12360
  #, php-format
12361
  msgid ""
12362
+ "As requested, %s is notifying you of a successful %s login to a WordPress "
12363
+ "site that you manage."
12364
  msgstr ""
12365
 
12366
+ #: src/lib/src/Modules/UserManagement/Processor.php:204
12367
  #, php-format
12368
+ msgid "Important: %s"
12369
  msgstr ""
12370
 
12371
+ #: src/lib/src/Modules/UserManagement/Processor.php:204
12372
+ msgid ""
12373
+ "This user may now be subject to additional Two-Factor Authentication before "
12374
+ "completing their login."
12375
  msgstr ""
12376
 
12377
+ #: src/lib/src/Modules/UserManagement/Processor.php:206
12378
+ msgid "Details for this user are below:"
 
12379
  msgstr ""
12380
 
12381
+ #: src/lib/src/Modules/UserManagement/Processor.php:213
12382
+ #: src/lib/src/Modules/UserManagement/Processor.php:239
12383
+ msgid "Thanks."
12384
  msgstr ""
12385
 
12386
+ #: src/lib/src/Modules/UserManagement/Processor.php:226
12387
+ msgid "A login to your WordPress account just occurred"
12388
  msgstr ""
12389
 
12390
+ #: src/lib/src/Modules/UserManagement/Processor.php:228
12391
+ #, php-format
12392
+ msgid "%s is notifying you of a successful login to your WordPress account."
12393
  msgstr ""
12394
 
12395
+ #: src/lib/src/Modules/UserManagement/Processor.php:231
12396
+ msgid "Details for this login are below:"
12397
  msgstr ""
12398
 
12399
+ #: src/lib/src/Modules/UserManagement/Processor.php:237
12400
+ msgid ""
12401
+ "If this is unexpected or suspicious, please contact your site administrator "
12402
+ "immediately."
12403
  msgstr ""
12404
 
12405
+ #: src/lib/src/Modules/UserManagement/Strings.php:16
12406
+ msgid "Invalid User Email Registration"
12407
  msgstr ""
12408
 
12409
+ #: src/lib/src/Modules/UserManagement/Strings.php:18
12410
+ msgid "Detected user registration with invalid email address ({{email}})."
12411
  msgstr ""
12412
 
12413
+ #: src/lib/src/Modules/UserManagement/Strings.php:19
12414
+ msgid "Email verification test that failed: {{reason}}"
12415
  msgstr ""
12416
 
12417
+ #: src/lib/src/Modules/UserManagement/Strings.php:25
12418
+ msgid "Forcing user ({{user_login}}) to update expired password."
12419
  msgstr ""
12420
 
12421
+ #: src/lib/src/Modules/UserManagement/Strings.php:29
12422
+ msgid "Forced Password Change"
12423
  msgstr ""
12424
 
12425
+ #: src/lib/src/Modules/UserManagement/Strings.php:31
12426
+ msgid ""
12427
+ "Forcing user ({{user_login}}) to update password that fails to meet policies."
12428
  msgstr ""
12429
 
12430
+ #: src/lib/src/Modules/UserManagement/Strings.php:35
12431
+ msgid "Password Change Blocked"
12432
  msgstr ""
12433
 
12434
+ #: src/lib/src/Modules/UserManagement/Strings.php:37
12435
+ msgid "Blocked attempted password update that failed policy requirements."
12436
  msgstr ""
12437
 
12438
+ #: src/lib/src/Modules/UserManagement/Strings.php:41
12439
+ msgid "Session Not Found"
12440
  msgstr ""
12441
 
12442
+ #: src/lib/src/Modules/UserManagement/Strings.php:43
12443
+ msgid "Valid user session could not be found ({{user_login}})."
 
12444
  msgstr ""
12445
 
12446
+ #: src/lib/src/Modules/UserManagement/Strings.php:44
12447
+ #: src/lib/src/Modules/UserManagement/Strings.php:51
12448
+ #: src/lib/src/Modules/UserManagement/Strings.php:58
12449
+ #: src/lib/src/Modules/UserManagement/Strings.php:65
12450
+ msgid "Logging out."
12451
  msgstr ""
12452
 
12453
+ #: src/lib/src/Modules/UserManagement/Strings.php:48
12454
+ msgid "Session Expired"
 
 
 
 
 
 
 
12455
  msgstr ""
12456
 
12457
+ #: src/lib/src/Modules/UserManagement/Strings.php:50
12458
+ msgid "User session has expired ({{user_login}})."
12459
  msgstr ""
12460
 
12461
+ #: src/lib/src/Modules/UserManagement/Strings.php:55
12462
+ msgid "Session Idle"
 
 
12463
  msgstr ""
12464
 
12465
+ #: src/lib/src/Modules/UserManagement/Strings.php:57
12466
+ msgid "User session has expired due to inactivity ({{user_login}})."
 
12467
  msgstr ""
12468
 
12469
+ #: src/lib/src/Modules/UserManagement/Strings.php:62
12470
+ msgid "Session Locked To IP"
 
 
12471
  msgstr ""
12472
 
12473
+ #: src/lib/src/Modules/UserManagement/Strings.php:64
12474
+ msgid ""
12475
+ "Access to an established user session ({{user_login}}) from a different IP "
12476
+ "address."
12477
  msgstr ""
12478
 
12479
+ #: src/lib/src/Modules/UserManagement/Strings.php:69
12480
+ msgid "User Manually Suspended"
12481
  msgstr ""
12482
 
12483
+ #: src/lib/src/Modules/UserManagement/Strings.php:71
12484
+ msgid "User \"{{user_login}}\" suspended by admin ({{admin}})"
 
 
 
12485
  msgstr ""
12486
 
12487
+ #: src/lib/src/Modules/UserManagement/Strings.php:75
12488
+ msgid "User Manually Unsuspended"
 
 
 
12489
  msgstr ""
12490
 
12491
+ #: src/lib/src/Modules/UserManagement/Strings.php:77
12492
+ msgid "User \"{{user_login}}\" unsuspended by admin ({{admin}})"
 
12493
  msgstr ""
12494
 
12495
+ #: src/lib/src/Modules/UserManagement/Strings.php:88
12496
+ msgid "Current User Sessions"
 
 
12497
  msgstr ""
12498
 
12499
+ #: src/lib/src/Modules/UserManagement/Strings.php:90
12500
+ msgid "Logged In At"
12501
  msgstr ""
12502
 
12503
+ #: src/lib/src/Modules/UserManagement/Strings.php:91
12504
+ #: src/lib/src/Tables/Render/WpListTable/Sessions.php:39
12505
+ msgid "Last Activity At"
12506
  msgstr ""
12507
 
12508
+ #: src/lib/src/Modules/UserManagement/Strings.php:92
12509
+ msgid "Last Activity URI"
 
12510
  msgstr ""
12511
 
12512
+ #: src/lib/src/Modules/UserManagement/Strings.php:93
12513
+ msgid "Login IP"
12514
  msgstr ""
12515
 
12516
+ #: src/lib/src/Modules/UserManagement/Strings.php:94
12517
+ msgid ""
12518
+ "You need to enable the User Management feature to view and manage user "
12519
+ "sessions."
 
12520
  msgstr ""
12521
 
12522
+ #: src/lib/src/Modules/UserManagement/Strings.php:112
 
 
 
12523
  msgid ""
12524
+ "User Management offers real user sessions, finer control over user session "
12525
+ "time-out, and ensures users have logged-in in a correct manner."
12526
  msgstr ""
12527
 
12528
+ #: src/lib/src/Modules/UserManagement/Strings.php:121
12529
+ msgid "Have full control over passwords used by users on the site."
12530
  msgstr ""
12531
 
12532
+ #: src/lib/src/Modules/UserManagement/Strings.php:123
12533
+ msgid "Requirements"
 
 
 
 
12534
  msgstr ""
12535
 
12536
+ #: src/lib/src/Modules/UserManagement/Strings.php:128
12537
+ msgid "Admin Login Notification"
 
 
12538
  msgstr ""
12539
 
12540
+ #: src/lib/src/Modules/UserManagement/Strings.php:130
12541
+ msgid ""
12542
+ "So you can be made aware of when a WordPress administrator has logged into "
12543
+ "your site when you are not expecting it."
12544
  msgstr ""
12545
 
12546
+ #: src/lib/src/Modules/UserManagement/Strings.php:133
12547
+ msgid "Notifications"
12548
  msgstr ""
12549
 
12550
+ #: src/lib/src/Modules/UserManagement/Strings.php:137
12551
+ msgid "Multi-Factor User Authentication"
 
 
12552
  msgstr ""
12553
 
12554
+ #: src/lib/src/Modules/UserManagement/Strings.php:146
12555
+ msgid "User Session Management"
12556
  msgstr ""
12557
 
12558
+ #: src/lib/src/Modules/UserManagement/Strings.php:148
12559
  msgid ""
12560
+ "Allows you to better control user sessions on your site and expire idle "
12561
+ "sessions and prevent account sharing."
 
 
 
 
 
12562
  msgstr ""
12563
 
12564
+ #: src/lib/src/Modules/UserManagement/Strings.php:151
12565
+ msgid "Session Options"
 
12566
  msgstr ""
12567
 
12568
+ #: src/lib/src/Modules/UserManagement/Strings.php:156
12569
+ msgid "Automatic And Manual User Suspension"
12570
  msgstr ""
12571
 
12572
+ #: src/lib/src/Modules/UserManagement/Strings.php:158
12573
+ msgid "Automatically suspends accounts to prevent login by certain users."
12574
  msgstr ""
12575
 
12576
+ #: src/lib/src/Modules/UserManagement/Strings.php:192
12577
+ msgid "Admin Login Notification Email"
12578
  msgstr ""
12579
 
12580
+ #: src/lib/src/Modules/UserManagement/Strings.php:193
12581
+ msgid "Send An Notification Email When Administrator Logs In"
12582
  msgstr ""
12583
 
12584
+ #: src/lib/src/Modules/UserManagement/Strings.php:194
12585
+ msgid ""
12586
+ "If you would like to be notified every time an administrator user logs into "
12587
+ "this WordPress site, enter a notification email address."
12588
  msgstr ""
12589
 
12590
+ #: src/lib/src/Modules/UserManagement/Strings.php:195
12591
+ msgid "No email address - No Notification."
12592
  msgstr ""
12593
 
12594
+ #: src/lib/src/Modules/UserManagement/Strings.php:196
12595
+ msgid "Pro customers may provide multiple email address, separated by commas."
 
12596
  msgstr ""
12597
 
12598
+ #: src/lib/src/Modules/UserManagement/Strings.php:200
12599
+ msgid "User Login Notification Email"
12600
  msgstr ""
12601
 
12602
+ #: src/lib/src/Modules/UserManagement/Strings.php:201
12603
+ msgid "Send Email Notification To Each User Upon Successful Login"
12604
  msgstr ""
12605
 
12606
+ #: src/lib/src/Modules/UserManagement/Strings.php:202
12607
+ msgid ""
12608
+ "A notification is sent to each user when a successful login occurs for their "
12609
+ "account."
12610
  msgstr ""
12611
 
12612
+ #: src/lib/src/Modules/UserManagement/Strings.php:206
12613
+ msgid "Session Timeout"
12614
  msgstr ""
12615
 
12616
+ #: src/lib/src/Modules/UserManagement/Strings.php:207
12617
+ msgid "Specify How Many Days After Login To Automatically Force Re-Login"
12618
  msgstr ""
12619
 
12620
+ #: src/lib/src/Modules/UserManagement/Strings.php:208
12621
+ msgid ""
12622
+ "WordPress default is 2 days, or 14 days if you check the \"Remember Me\" box."
12623
  msgstr ""
12624
 
12625
+ #: src/lib/src/Modules/UserManagement/Strings.php:209
12626
+ msgid "Think of this as an absolute maximum possible session length."
 
12627
  msgstr ""
12628
 
12629
+ #: src/lib/src/Modules/UserManagement/Strings.php:210
12630
+ #, php-format
12631
+ msgid "This cannot be less than %s."
 
12632
  msgstr ""
12633
 
12634
+ #: src/lib/src/Modules/UserManagement/Strings.php:215
12635
+ msgid "Idle Timeout"
 
12636
  msgstr ""
12637
 
12638
+ #: src/lib/src/Modules/UserManagement/Strings.php:216
12639
+ msgid "Specify How Many Hours After Inactivity To Automatically Logout User"
 
12640
  msgstr ""
12641
 
12642
+ #: src/lib/src/Modules/UserManagement/Strings.php:217
12643
  msgid ""
12644
+ "If the user is inactive for the number of hours specified, they will be "
12645
+ "forcefully logged out next time they return."
12646
  msgstr ""
12647
 
12648
+ #: src/lib/src/Modules/UserManagement/Strings.php:218
12649
+ #, php-format
12650
+ msgid "Set to %s to turn off this option."
 
12651
  msgstr ""
12652
 
12653
+ #: src/lib/src/Modules/UserManagement/Strings.php:222
12654
+ msgid "Lock To Location"
 
12655
  msgstr ""
12656
 
12657
+ #: src/lib/src/Modules/UserManagement/Strings.php:223
12658
+ msgid "Locks A User Session To IP address"
12659
  msgstr ""
12660
 
12661
+ #: src/lib/src/Modules/UserManagement/Strings.php:224
12662
  msgid ""
12663
+ "When selected, a session is restricted to the same IP address as when the "
12664
+ "user logged in."
12665
  msgstr ""
12666
 
12667
+ #: src/lib/src/Modules/UserManagement/Strings.php:225
12668
+ msgid ""
12669
+ "If a logged-in user's IP address changes, the session will be invalidated "
12670
+ "and they'll be forced to re-login to WordPress."
12671
  msgstr ""
12672
 
12673
+ #: src/lib/src/Modules/UserManagement/Strings.php:229
12674
+ msgid "Max Simultaneous Sessions"
12675
  msgstr ""
12676
 
12677
+ #: src/lib/src/Modules/UserManagement/Strings.php:230
12678
+ msgid "Limit Simultaneous Sessions For The Same Username"
12679
  msgstr ""
12680
 
12681
+ #: src/lib/src/Modules/UserManagement/Strings.php:231
12682
+ msgid ""
12683
+ "The number provided here is the maximum number of simultaneous, distinct, "
12684
+ "sessions allowed for any given username."
12685
  msgstr ""
12686
 
12687
+ #: src/lib/src/Modules/UserManagement/Strings.php:232
12688
+ msgid "Zero (0) will allow unlimited simultaneous sessions."
12689
  msgstr ""
12690
 
12691
+ #: src/lib/src/Modules/UserManagement/Strings.php:236
12692
+ msgid "Validate Email Addresses"
12693
  msgstr ""
12694
 
12695
+ #: src/lib/src/Modules/UserManagement/Strings.php:237
12696
+ msgid "Validate Email Addresses When User Attempts To Register"
12697
  msgstr ""
12698
 
12699
+ #: src/lib/src/Modules/UserManagement/Strings.php:239
12700
+ msgid "Validate Email Addresses When User Attempts To Register."
12701
  msgstr ""
12702
 
12703
+ #: src/lib/src/Modules/UserManagement/Strings.php:240
12704
  msgid ""
12705
+ "To validate an email your site sends a request to the WPHashes API and may "
12706
+ "cause a small delay during the user registration request."
12707
  msgstr ""
12708
 
12709
+ #: src/lib/src/Modules/UserManagement/Strings.php:245
12710
+ msgid "Email Validation Checks"
12711
  msgstr ""
12712
 
12713
+ #: src/lib/src/Modules/UserManagement/Strings.php:246
12714
+ msgid "The Email Address Properties That Will Be Tested"
 
12715
  msgstr ""
12716
 
12717
+ #: src/lib/src/Modules/UserManagement/Strings.php:247
12718
+ msgid ""
12719
+ "Select the properties that should be tested during email address validation."
12720
  msgstr ""
12721
 
12722
+ #: src/lib/src/Modules/UserManagement/Strings.php:251
12723
+ msgid "Enable Password Policies"
 
12724
  msgstr ""
12725
 
12726
+ #: src/lib/src/Modules/UserManagement/Strings.php:252
12727
+ msgid "Enable The Password Policies Detailed Below"
 
12728
  msgstr ""
12729
 
12730
+ #: src/lib/src/Modules/UserManagement/Strings.php:253
12731
+ msgid "Turn on/off all password policy settings."
 
12732
  msgstr ""
12733
 
12734
+ #: src/lib/src/Modules/UserManagement/Strings.php:257
12735
+ msgid "Prevent Pwned Passwords"
12736
  msgstr ""
12737
 
12738
+ #: src/lib/src/Modules/UserManagement/Strings.php:258
12739
+ msgid "Prevent Use Of \"Pwned\" Passwords"
12740
  msgstr ""
12741
 
12742
+ #: src/lib/src/Modules/UserManagement/Strings.php:259
12743
  msgid ""
12744
+ "Prevents users from using any passwords found on the public available list "
12745
+ "of \"pwned\" passwords."
12746
  msgstr ""
12747
 
12748
+ #: src/lib/src/Modules/UserManagement/Strings.php:263
12749
+ msgid "Minimum Length"
 
 
 
 
12750
  msgstr ""
12751
 
12752
+ #: src/lib/src/Modules/UserManagement/Strings.php:264
12753
+ msgid "Minimum Password Length"
12754
+ msgstr ""
12755
+
12756
+ #: src/lib/src/Modules/UserManagement/Strings.php:265
12757
  msgid ""
12758
+ "All passwords that a user sets must be at least this many characters in "
12759
+ "length."
12760
  msgstr ""
12761
 
12762
+ #: src/lib/src/Modules/UserManagement/Strings.php:266
12763
+ #: src/lib/src/Modules/UserManagement/Strings.php:286
12764
+ #: src/lib/src/Modules/UserManagement/Strings.php:311
12765
+ msgid "Set to Zero(0) to disable."
12766
  msgstr ""
12767
 
12768
+ #: src/lib/src/Modules/UserManagement/Strings.php:270
12769
+ msgid "Minimum Strength"
 
 
 
12770
  msgstr ""
12771
 
12772
+ #: src/lib/src/Modules/UserManagement/Strings.php:271
12773
+ msgid "Minimum Password Strength"
 
 
12774
  msgstr ""
12775
 
12776
+ #: src/lib/src/Modules/UserManagement/Strings.php:272
12777
+ msgid "All passwords that a user sets must meet this minimum strength."
 
12778
  msgstr ""
12779
 
12780
+ #: src/lib/src/Modules/UserManagement/Strings.php:276
12781
+ msgid "Apply To Existing Users"
 
12782
  msgstr ""
12783
 
12784
+ #: src/lib/src/Modules/UserManagement/Strings.php:277
12785
+ msgid "Apply Password Policies To Existing Users and Their Passwords"
12786
  msgstr ""
12787
 
12788
+ #: src/lib/src/Modules/UserManagement/Strings.php:278
12789
+ msgid ""
12790
+ "Forces existing users to update their passwords if they don't meet "
12791
+ "requirements, after they next login."
12792
  msgstr ""
12793
 
12794
+ #: src/lib/src/Modules/UserManagement/Strings.php:279
12795
+ msgid "Note: You may want to warn users prior to enabling this option."
12796
  msgstr ""
12797
 
12798
+ #: src/lib/src/Modules/UserManagement/Strings.php:283
12799
+ msgid "Password Expiration"
12800
  msgstr ""
12801
 
12802
+ #: src/lib/src/Modules/UserManagement/Strings.php:284
12803
+ msgid "Passwords Expire After This Many Days"
12804
  msgstr ""
12805
 
12806
+ #: src/lib/src/Modules/UserManagement/Strings.php:285
12807
+ msgid ""
12808
+ "Users will be forced to reset their passwords after the number of days "
12809
+ "specified."
12810
  msgstr ""
12811
 
12812
+ #: src/lib/src/Modules/UserManagement/Strings.php:290
12813
+ msgid "Allow Manual User Suspension"
12814
  msgstr ""
12815
 
12816
+ #: src/lib/src/Modules/UserManagement/Strings.php:291
12817
+ msgid "Manually Suspend User Accounts To Prevent Login"
12818
  msgstr ""
12819
 
12820
+ #: src/lib/src/Modules/UserManagement/Strings.php:292
12821
+ msgid "Users may be suspended by administrators to prevent future login."
12822
  msgstr ""
12823
 
12824
+ #: src/lib/src/Modules/UserManagement/Strings.php:296
12825
+ msgid "Auto-Suspend Expired Passwords"
12826
  msgstr ""
12827
 
12828
+ #: src/lib/src/Modules/UserManagement/Strings.php:297
12829
+ msgid "Automatically Suspend Users With Expired Passwords"
12830
  msgstr ""
12831
 
12832
+ #: src/lib/src/Modules/UserManagement/Strings.php:298
12833
+ msgid ""
12834
+ "Automatically suspends login by users and requires password reset to "
12835
+ "unsuspend."
12836
  msgstr ""
12837
 
12838
+ #: src/lib/src/Modules/UserManagement/Strings.php:302
12839
+ msgid "Requires password expiration policy to be set."
12840
  msgstr ""
12841
 
12842
+ #: src/lib/src/Modules/UserManagement/Strings.php:307
12843
+ msgid "Auto-Suspend Idle Users"
12844
  msgstr ""
12845
 
12846
+ #: src/lib/src/Modules/UserManagement/Strings.php:308
12847
+ msgid "Automatically Suspend Idle User Accounts"
 
12848
  msgstr ""
12849
 
12850
+ #: src/lib/src/Modules/UserManagement/Strings.php:309
12851
+ msgid ""
12852
+ "Automatically suspends login for idle accounts and requires password reset "
12853
+ "to unsuspend."
12854
  msgstr ""
12855
 
12856
+ #: src/lib/src/Modules/UserManagement/Strings.php:310
12857
+ msgid "Specify the number of days since last login to consider a user as idle."
12858
  msgstr ""
12859
 
12860
+ #: src/lib/src/Modules/UserManagement/Strings.php:315
12861
+ msgid "Auto-Suspend Idle User Roles"
12862
  msgstr ""
12863
 
12864
+ #: src/lib/src/Modules/UserManagement/Strings.php:316
12865
+ msgid "Apply Automatic Suspension To Accounts With These Roles"
12866
  msgstr ""
12867
 
12868
+ #: src/lib/src/Modules/UserManagement/Strings.php:317
12869
  msgid ""
12870
+ "Automatic suspension for idle accounts applies only to the roles you specify."
 
12871
  msgstr ""
12872
 
12873
+ #: src/lib/src/Modules/UserManagement/UI.php:28
12874
+ msgid "Sessions Table Filters"
12875
  msgstr ""
12876
 
12877
+ #: src/lib/src/Modules/UserManagement/UI.php:30
12878
+ msgid "Review and manage current user sessions"
12879
  msgstr ""
12880
 
12881
+ #: src/lib/src/Modules/UserManagement/UI.php:31
12882
+ msgid ""
12883
+ "Some sessions may have expired but haven't been automatically cleaned from "
12884
+ "the database yet"
12885
  msgstr ""
12886
 
12887
+ #: src/lib/src/Modules/UserManagement/WpCli/SessionTerminate.php:103
12888
+ msgid "All sessions for user have been terminated."
12889
  msgstr ""
12890
 
12891
+ #: src/lib/src/Modules/UserManagement/WpCli/SessionTerminate.php:112
12892
+ msgid "All user sessions have been terminated."
12893
  msgstr ""
12894
 
12895
+ #: src/lib/src/Scans/Afs/Utilities/RepairItem.php:76
12896
+ msgid "Not a WordPress Core file"
12897
  msgstr ""
12898
 
12899
+ #: src/lib/src/Scans/Afs/Utilities/RepairItem.php:85
12900
+ #, php-format
12901
+ msgid "Couldn't load plugin for slug '%s'."
12902
  msgstr ""
12903
 
12904
+ #: src/lib/src/Scans/Afs/Utilities/RepairItem.php:91
12905
+ #: src/lib/src/Scans/Afs/Utilities/RepairItem.php:125
12906
+ #, php-format
12907
+ msgid "%s not installed from WordPress.org."
12908
  msgstr ""
12909
 
12910
+ #: src/lib/src/Scans/Afs/Utilities/RepairItem.php:92
12911
+ msgid "Plugin"
 
 
12912
  msgstr ""
12913
 
12914
+ #: src/lib/src/Scans/Afs/Utilities/RepairItem.php:96
12915
+ msgid "Plugin developer doesn't use SVN tags for official releases."
 
12916
  msgstr ""
12917
 
12918
+ #: src/lib/src/Scans/Afs/Utilities/RepairItem.php:113
12919
+ #, php-format
12920
+ msgid "Couldn't load theme for slug '%s'."
12921
  msgstr ""
12922
 
12923
+ #: src/lib/src/Scans/Afs/Utilities/RepairItem.php:119
12924
+ #, php-format
12925
+ msgid "%s is a child of another theme."
12926
  msgstr ""
12927
 
12928
+ #: src/lib/src/Scans/Afs/Utilities/RepairItem.php:120
12929
+ #: src/lib/src/Scans/Afs/Utilities/RepairItem.php:126
12930
+ msgid "Theme"
12931
  msgstr ""
12932
 
12933
+ #: src/lib/src/Scans/Afs/Utilities/RepairItem.php:132
12934
+ msgid "Theme version doesn't appear to exist."
 
12935
  msgstr ""
12936
 
12937
+ #: src/lib/src/Tables/Build/BaseBuild.php:26
12938
+ msgid "There was an error retrieving entries."
12939
  msgstr ""
12940
 
12941
+ #: src/lib/src/Tables/Build/BaseBuild.php:58
12942
+ msgid "No entries to display."
12943
  msgstr ""
12944
 
12945
+ #: src/lib/src/Tables/DataTables/Build/AuditTrail/ForAuditTrail.php:54
12946
+ msgid "Event Slug"
 
 
 
12947
  msgstr ""
12948
 
12949
+ #: src/lib/src/Tables/DataTables/Build/AuditTrail/ForAuditTrail.php:65
12950
+ #: src/lib/src/Tables/DataTables/Build/AuditTrail/ForAuditTrail.php:76
12951
+ msgid "Severity"
12952
  msgstr ""
12953
 
12954
+ #: src/lib/src/Tables/DataTables/Build/AuditTrail/ForAuditTrail.php:117
12955
+ msgid "User"
 
 
12956
  msgstr ""
12957
 
12958
+ #: src/lib/src/Tables/DataTables/Build/AuditTrail/ForAuditTrail.php:142
12959
+ #: src/lib/src/Tables/DataTables/Build/Traffic/ForTraffic.php:141
12960
+ #: src/lib/src/Tables/Render/WpListTable/AdminNotes.php:28
12961
+ #: src/lib/src/Tables/Render/WpListTable/IpBase.php:22
12962
+ msgid "Date"
12963
  msgstr ""
12964
 
12965
+ #: src/lib/src/Tables/DataTables/Build/AuditTrail/ForAuditTrail.php:153
12966
+ msgid "Meta"
 
12967
  msgstr ""
12968
 
12969
+ #: src/lib/src/Tables/DataTables/Build/Scans/BaseForScan.php:36
12970
+ #: src/lib/src/Tables/DataTables/Build/Scans/BaseForScan.php:44
12971
+ msgid "File"
12972
  msgstr ""
12973
 
12974
+ #: src/lib/src/Tables/DataTables/Build/Scans/BaseForScan.php:52
12975
+ msgid "Type"
 
12976
  msgstr ""
12977
 
12978
+ #: src/lib/src/Tables/DataTables/Build/Scans/BaseForScan.php:71
12979
+ msgid "Detected"
 
12980
  msgstr ""
12981
 
12982
+ #: src/lib/src/Tables/DataTables/Build/Scans/BaseForScan.php:87
12983
+ #: src/lib/src/Tables/DataTables/Build/Scans/ForMalware.php:26
12984
+ msgid "False Positive Confidence"
12985
  msgstr ""
12986
 
12987
+ #: src/lib/src/Tables/DataTables/Build/Scans/BaseForScan.php:95
12988
+ #: src/lib/src/Tables/DataTables/Build/Scans/ForMalware.php:34
12989
+ msgid "Line Numbers"
 
12990
  msgstr ""
12991
 
12992
+ #: src/lib/src/Tables/DataTables/Build/Scans/BaseForScan.php:103
12993
+ #: src/lib/src/Tables/DataTables/Build/Scans/ForMalware.php:42
12994
+ msgid "Pattern Detected"
12995
  msgstr ""
12996
 
12997
+ #: src/lib/src/Tables/DataTables/Build/Traffic/ForTraffic.php:42
12998
+ msgid "Page"
 
12999
  msgstr ""
13000
 
13001
+ #: src/lib/src/Tables/DataTables/Build/Traffic/ForTraffic.php:86
13002
+ msgid "Response Code"
 
13003
  msgstr ""
13004
 
13005
+ #: src/lib/src/Tables/DataTables/Build/Traffic/ForTraffic.php:108
13006
+ msgid "Is Offense"
 
 
13007
  msgstr ""
13008
 
13009
+ #: src/lib/src/Tables/DataTables/LoadData/BaseLoadTableData.php:40
13010
+ msgid "IP Unavailable"
 
13011
  msgstr ""
13012
 
13013
+ #: src/lib/src/Tables/Render/Common/BaseTable.php:30
13014
+ #: src/lib/src/Tables/Render/WpListTable/Base.php:41
13015
+ msgid "Refresh"
13016
  msgstr ""
13017
 
13018
+ #: src/lib/src/Tables/Render/WpListTable/IpBase.php:12
13019
+ msgid "No Label"
 
13020
  msgstr ""
13021
 
13022
+ #: src/lib/src/Tables/Render/WpListTable/IpBase.php:18
13023
+ #: src/lib/src/Tables/Render/WpListTable/IpWhite.php:13
13024
+ msgid "Label"
13025
  msgstr ""
13026
 
13027
+ #: src/lib/src/Tables/Render/WpListTable/IpBase.php:20
13028
+ msgid "List"
13029
  msgstr ""
13030
 
13031
+ #: src/lib/src/Tables/Render/WpListTable/IpBase.php:21
13032
+ #: src/lib/src/Tables/Render/WpListTable/IpBlack.php:23
13033
+ msgid "Last Access"
 
13034
  msgstr ""
13035
 
13036
+ #: src/lib/src/Tables/Render/WpListTable/IpBlack.php:18
13037
+ msgid "IP Range"
13038
  msgstr ""
13039
 
13040
+ #: src/lib/src/Tables/Render/WpListTable/IpBlack.php:18
13041
+ msgid "Single IP"
13042
  msgstr ""
13043
 
13044
+ #: src/lib/src/Tables/Render/WpListTable/IpBlack.php:19
13045
+ msgid "Automatic"
13046
  msgstr ""
13047
 
13048
+ #: src/lib/src/Tables/Render/WpListTable/IpBlack.php:19
13049
+ msgid "Manual"
13050
  msgstr ""
13051
 
13052
+ #: src/lib/src/Tables/Render/WpListTable/IpBlack.php:22
13053
  #, php-format
13054
+ msgid "%s Offense"
13055
+ msgid_plural "%s Offenses"
13056
+ msgstr[0] ""
13057
+ msgstr[1] ""
13058
 
13059
+ #: src/lib/src/Tables/Render/WpListTable/IpBlack.php:35
13060
+ msgid "Auto Expires"
13061
  msgstr ""
13062
 
13063
+ #: src/lib/src/Tables/Render/WpListTable/IpWhite.php:14
13064
+ msgid "Added"
13065
  msgstr ""
13066
 
13067
+ #: src/lib/src/Tables/Render/WpListTable/Sessions.php:17
13068
+ msgid "Discard Session"
13069
  msgstr ""
13070
 
13071
+ #: src/lib/src/Tables/Render/WpListTable/Sessions.php:27
13072
+ msgid "Discard"
 
 
13073
  msgstr ""
13074
 
13075
+ #: src/lib/src/Utilities/HCaptcha/TestRequest.php:24
13076
+ #: src/lib/src/Utilities/HCaptcha/TestRequest.php:40
13077
+ #: src/lib/src/Utilities/ReCaptcha/TestRequest.php:40
13078
+ #: src/lib/src/Utilities/ReCaptcha/TestRequest.php:47
13079
+ msgid "Whoops."
13080
  msgstr ""
13081
 
13082
+ #: src/lib/src/Utilities/HCaptcha/TestRequest.php:24
13083
+ #: src/lib/src/Utilities/ReCaptcha/TestRequest.php:40
13084
+ msgid "CAPTCHA was not submitted."
13085
  msgstr ""
13086
 
13087
+ #: src/lib/src/Utilities/HCaptcha/TestRequest.php:41
13088
+ #: src/lib/src/Utilities/ReCaptcha/TestRequest.php:48
13089
+ msgid "CAPTCHA verification failed."
13090
  msgstr ""
13091
 
13092
+ #: src/lib/src/Utilities/HCaptcha/TestRequest.php:43
13093
+ #: src/lib/src/Utilities/ReCaptcha/TestRequest.php:50
13094
+ msgid "Maybe refresh the page and try again."
 
13095
  msgstr ""
13096
 
13097
+ #: src/wizards/base.php:198 src/wizards/base.php:234
13098
  msgid "Next Step"
13099
  msgstr ""
13100
 
13101
+ #: src/wizards/base.php:365
13102
  #, php-format
13103
  msgid "%s Wizard"
13104
  msgstr ""
13105
 
13106
+ #: src/wizards/base.php:503
13107
  msgid "No Access"
13108
  msgstr ""
13109
 
13110
+ #: src/wizards/base_wpsf.php:106
13111
+ msgid "Security Admin PIN was not correct."
13112
  msgstr ""
13113
 
13114
+ #: src/wizards/login_protect.php:15
13115
  #, php-format
13116
  msgid "%s Multi-Factor Authentication Wizard"
13117
  msgstr ""
13118
 
13119
+ #: src/wizards/login_protect.php:52
13120
  msgid "Invalid email address"
13121
  msgstr ""
13122
 
13123
+ #: src/wizards/login_protect.php:58
13124
  msgid "Verification email sent (please check your email including your SPAM)."
13125
  msgstr ""
13126
 
13127
+ #: src/wizards/login_protect.php:59
13128
  msgid ""
13129
  "Enter the code from the email into the form above and click the button to "
13130
  "verify."
13131
  msgstr ""
13132
 
13133
+ #: src/wizards/plugin.php:17
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13134
  #, php-format
13135
  msgid "%s Welcome Wizard"
13136
  msgstr ""
13137
 
13138
+ #: src/wizards/plugin.php:332
13139
  msgid "Where to find Shield"
13140
  msgstr ""
13141
 
13142
+ #: src/wizards/plugin.php:333
13143
  msgid "Accessing Each Module"
13144
  msgstr ""
13145
 
13146
+ #: src/wizards/plugin.php:334
13147
  msgid "Accessing Options"
13148
  msgstr ""
13149
 
13150
+ #: src/wizards/plugin.php:335
13151
  msgid "Launching Wizards"
13152
  msgstr ""
13153
 
13154
+ #: src/wizards/plugin.php:336
13155
  msgid "Finding Help"
13156
  msgstr ""
13157
 
13158
+ #: src/wizards/plugin.php:337
13159
  msgid "Actions (not Options)"
13160
  msgstr ""
13161
 
13162
+ #: src/wizards/plugin.php:338
13163
  msgid "Help For Each Option"
13164
  msgstr ""
13165
 
13166
+ #: src/wizards/plugin.php:339
13167
  msgid "Module On/Off Switch"
13168
  msgstr ""
13169
 
13170
+ #: src/wizards/plugin.php:342
13171
  #, php-format
13172
  msgid "You'll find the main %s settings in the left-hand WordPress menu."
13173
  msgstr ""
13174
 
13175
+ #: src/wizards/plugin.php:343
13176
  msgid ""
13177
  "Shield is split up into independent modules for accessing the options of "
13178
  "each feature."
13179
  msgstr ""
13180
 
13181
+ #: src/wizards/plugin.php:344
13182
  msgid ""
13183
  "When you load a module, you can access the options by clicking on the "
13184
  "Options Panel link."
13185
  msgstr ""
13186
 
13187
+ #: src/wizards/plugin.php:345
13188
  msgid "Launch helpful walk-through wizards for modules that have them."
13189
  msgstr ""
13190
 
13191
+ #: src/wizards/plugin.php:346
13192
  msgid ""
13193
  "Each module also has a brief overview help section - there is more in-depth "
13194
  "help available."
13195
  msgstr ""
13196
 
13197
+ #: src/wizards/plugin.php:347
13198
  msgid ""
13199
  "Certain modules have extra actions and features, e.g. Audit Trail Viewer."
13200
  msgstr ""
13201
 
13202
+ #: src/wizards/plugin.php:348
13203
  msgid "Note: Not all modules have the actions section"
13204
  msgstr ""
13205
 
13206
+ #: src/wizards/plugin.php:349
13207
  msgid ""
13208
  "Each module has an Enable/Disable checkbox to turn on/off all processing for "
13209
  "that module"
13210
  msgstr ""
13211
 
13212
+ #: src/wizards/plugin.php:350
13213
  msgid ""
13214
  "To help you understand each option, most of them have a more info link, and/"
13215
  "or a blog link, to read more"
13216
  msgstr ""
13217
 
13218
+ #: src/wizards/plugin.php:448
13219
  msgid "IP address was empty."
13220
  msgstr ""
13221
 
13222
+ #: src/wizards/plugin.php:451
13223
  msgid "IP address wasn't a valid public IP address."
13224
  msgstr ""
13225
 
13226
+ #: src/wizards/plugin.php:456
13227
+ msgid "Sorry, we couldn't find an address source from this IP."
13228
  msgstr ""
13229
 
13230
+ #: src/wizards/plugin.php:461
13231
  msgid "Success!"
13232
  msgstr ""
13233
 
13234
+ #: src/wizards/plugin.php:485
13235
  msgid "License was found and successfully installed."
13236
  msgstr ""
13237
 
13238
+ #: src/wizards/plugin.php:488
13239
  msgid "License could not be found."
13240
  msgstr ""
13241
 
13242
+ #: src/wizards/plugin.php:521
13243
  msgid "Options imported successfully to your site."
13244
  msgstr ""
13245
 
13246
+ #: src/wizards/plugin.php:522
13247
  msgid "Secret key was empty."
13248
  msgstr ""
13249
 
13250
+ #: src/wizards/plugin.php:523
13251
  msgid "Secret key was not 40 characters long."
13252
  msgstr ""
13253
 
13254
+ #: src/wizards/plugin.php:524
13255
  msgid ""
13256
  "Secret key contains invalid characters - it should be letters and numbers "
13257
  "only."
13258
  msgstr ""
13259
 
13260
+ #: src/wizards/plugin.php:525
13261
  msgid "Source site URL could not be parsed correctly."
13262
  msgstr ""
13263
 
13264
+ #: src/wizards/plugin.php:526
13265
  msgid "Could not parse the response from the site."
13266
  msgstr ""
13267
 
13268
+ #: src/wizards/plugin.php:527
13269
  msgid "Check the secret key is correct for the remote site."
13270
  msgstr ""
13271
 
13272
+ #: src/wizards/plugin.php:528
13273
  msgid "Failure response returned from the site."
13274
  msgstr ""
13275
 
13276
+ #: src/wizards/plugin.php:529
13277
  #, php-format
13278
  msgid "Remote site responded with - %s"
13279
  msgstr ""
13280
 
13281
+ #: src/wizards/plugin.php:530
13282
  msgid "Data returned from the site was empty."
13283
  msgstr ""
13284
 
13285
+ #: src/wizards/plugin.php:550
13286
+ msgid "Security Admin PIN was empty."
13287
  msgstr ""
13288
 
13289
+ #: src/wizards/plugin.php:553
13290
+ msgid "Security PINs don't match."
 
 
13291
  msgstr ""
13292
 
13293
+ #: src/wizards/plugin.php:560
13294
+ msgid "Security Admin PIN setup was successful."
 
13295
  msgstr ""
13296
 
13297
+ #: src/wizards/plugin.php:579 src/wizards/plugin.php:612
13298
+ #: src/wizards/plugin.php:687
13299
+ msgid "No changes were made as no option was selected"
 
13300
  msgstr ""
13301
 
13302
+ #: src/wizards/plugin.php:592 src/wizards/plugin.php:625
13303
+ #: src/wizards/plugin.php:660 src/wizards/plugin.php:728
13304
+ #: src/wizards/plugin.php:766
13305
+ msgid "Enabled"
13306
  msgstr ""
13307
 
13308
+ #: src/wizards/plugin.php:596 src/wizards/plugin.php:629
13309
+ #: src/wizards/plugin.php:664 src/wizards/plugin.php:732
13310
+ #: src/wizards/plugin.php:770
13311
+ #, php-format
13312
+ msgid "%s setting could not be changed at this time."
13313
  msgstr ""
13314
 
13315
+ #: src/wizards/plugin.php:668 src/wizards/plugin.php:737
13316
+ #: src/wizards/plugin.php:774
13317
+ msgid "No option was selected"
13318
  msgstr ""
13319
 
13320
+ #: src/wizards/plugin.php:727 src/wizards/plugin.php:733
13321
+ msgid "Security Plugin Badge"
13322
  msgstr ""
13323
 
13324
  #~ msgid "Google"
languages/wp-simple-firewall-nl_NL.mo CHANGED
Binary file
plugin-spec.php CHANGED
@@ -1,8 +1,8 @@
1
  {
2
  "properties": {
3
- "version": "13.0.6",
4
- "release_timestamp": 1642088418,
5
- "build": "202201.1301",
6
  "slug_parent": "icwp",
7
  "slug_plugin": "wpsf",
8
  "human_name": "Shield Security",
@@ -83,95 +83,95 @@
83
  },
84
  "register": {
85
  "css": {
86
- "bootstrap": {
87
- "url": "https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.1/css/bootstrap.min.css"
88
  },
89
- "bootstrap-datepicker": {
90
  "url": "https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.8.0/css/bootstrap-datepicker.min.css",
91
  "deps": [
92
  "bootstrap"
93
  ]
94
  },
95
- "bootstrap-select": {
96
  "url": "https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.18/css/bootstrap-select.min.css",
97
  "deps": [
98
  "bootstrap"
99
  ]
100
  },
101
- "select2": {
102
  "url": "https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css",
103
  "deps": [
104
  "plugin"
105
  ]
106
  },
107
- "datatables-bootstrap": {
108
- "url": "https://cdn.datatables.net/1.11.3/css/dataTables.bootstrap4.min.css",
109
  "deps": [
110
  "bootstrap"
111
  ]
112
  },
113
- "datatables-searchpanes": {
114
  "url": "https://cdn.datatables.net/searchpanes/1.4.0/css/searchPanes.dataTables.min.css",
115
  "deps": [
116
  "datatables-bootstrap"
117
  ]
118
  },
119
- "datatables-select": {
120
  "url": "https://cdn.datatables.net/select/1.3.3/css/select.dataTables.min.css",
121
  "deps": [
122
  "datatables-bootstrap"
123
  ]
124
  },
125
- "datatables-buttons": {
126
  "url": "https://cdn.datatables.net/buttons/1.7.1/css/buttons.dataTables.min.css",
127
  "deps": [
128
  "datatables-bootstrap"
129
  ]
130
  },
131
- "global-plugin": {},
132
- "plugin": {
133
  "deps": [
134
  "bootstrap",
135
  "global-plugin"
136
  ]
137
  },
138
- "shield/wizard": {
139
  "deps": [
140
  "bootstrap",
141
  "global-plugin"
142
  ]
143
  },
144
- "jquery/featherlight": {
145
  "url": "https://cdnjs.cloudflare.com/ajax/libs/featherlight/1.7.13/featherlight.min.css"
146
  },
147
- "chartist": {
148
  "url": "https://cdnjs.cloudflare.com/ajax/libs/chartist/0.11.4/chartist.min.css"
149
  },
150
- "chartist-plugin-legend": {
151
  "deps": [
152
  "chartist"
153
  ]
154
  },
155
- "introjs": {
156
  "url": "https://cdnjs.cloudflare.com/ajax/libs/intro.js/3.3.1/introjs.min.css"
157
  },
158
- "shield/userprofile": {
159
  "deps": [],
160
  "footer": true
161
  },
162
- "shield/charts": {
163
  "deps": [
164
  "plugin"
165
  ]
166
  },
167
- "shield/dialog": {
168
  "deps": [
169
  "wp-wp-jquery-ui-dialog"
170
  ],
171
  "footer": true
172
  },
173
- "shield/mainwp": {},
174
- "shield/datatables": {
175
  "deps": [
176
  "datatables-select",
177
  "datatables-buttons",
@@ -180,7 +180,9 @@
180
  "tp/highlightjs"
181
  ]
182
  },
183
- "shield/scanners": {
 
 
184
  "deps": [
185
  "datatables-select",
186
  "datatables-buttons",
@@ -188,13 +190,13 @@
188
  "tp/highlightjs"
189
  ]
190
  },
191
- "tp/highlightjs": {
192
  "url": "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.1.0/styles/default.min.css"
193
  }
194
  },
195
  "js": {
196
  "bootstrap": {
197
- "url": "https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.1/js/bootstrap.bundle.min.js",
198
  "deps": [
199
  "wp-jquery"
200
  ]
@@ -225,7 +227,7 @@
225
  ]
226
  },
227
  "datatables-bootstrap": {
228
- "url": "https://cdn.datatables.net/1.11.3/js/dataTables.bootstrap4.min.js",
229
  "deps": [
230
  "datatables"
231
  ]
@@ -401,6 +403,12 @@
401
  "jquery/steps"
402
  ]
403
  },
 
 
 
 
 
 
404
  "u2f-bundle": {},
405
  "tp/grecaptcha": {
406
  "url": "https://www.google.com/recaptcha/api.js",
1
  {
2
  "properties": {
3
+ "version": "14.0.0",
4
+ "release_timestamp": 1643365205,
5
+ "build": "202202.0601",
6
  "slug_parent": "icwp",
7
  "slug_plugin": "wpsf",
8
  "human_name": "Shield Security",
83
  },
84
  "register": {
85
  "css": {
86
+ "bootstrap": {
87
+ "url": "https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.1.3/css/bootstrap.min.css"
88
  },
89
+ "bootstrap-datepicker": {
90
  "url": "https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.8.0/css/bootstrap-datepicker.min.css",
91
  "deps": [
92
  "bootstrap"
93
  ]
94
  },
95
+ "bootstrap-select": {
96
  "url": "https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.18/css/bootstrap-select.min.css",
97
  "deps": [
98
  "bootstrap"
99
  ]
100
  },
101
+ "select2": {
102
  "url": "https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css",
103
  "deps": [
104
  "plugin"
105
  ]
106
  },
107
+ "datatables-bootstrap": {
108
+ "url": "https://cdn.datatables.net/1.11.3/css/dataTables.bootstrap5.min.css",
109
  "deps": [
110
  "bootstrap"
111
  ]
112
  },
113
+ "datatables-searchpanes": {
114
  "url": "https://cdn.datatables.net/searchpanes/1.4.0/css/searchPanes.dataTables.min.css",
115
  "deps": [
116
  "datatables-bootstrap"
117
  ]
118
  },
119
+ "datatables-select": {
120
  "url": "https://cdn.datatables.net/select/1.3.3/css/select.dataTables.min.css",
121
  "deps": [
122
  "datatables-bootstrap"
123
  ]
124
  },
125
+ "datatables-buttons": {
126
  "url": "https://cdn.datatables.net/buttons/1.7.1/css/buttons.dataTables.min.css",
127
  "deps": [
128
  "datatables-bootstrap"
129
  ]
130
  },
131
+ "global-plugin": {},
132
+ "plugin": {
133
  "deps": [
134
  "bootstrap",
135
  "global-plugin"
136
  ]
137
  },
138
+ "shield/wizard": {
139
  "deps": [
140
  "bootstrap",
141
  "global-plugin"
142
  ]
143
  },
144
+ "jquery/featherlight": {
145
  "url": "https://cdnjs.cloudflare.com/ajax/libs/featherlight/1.7.13/featherlight.min.css"
146
  },
147
+ "chartist": {
148
  "url": "https://cdnjs.cloudflare.com/ajax/libs/chartist/0.11.4/chartist.min.css"
149
  },
150
+ "chartist-plugin-legend": {
151
  "deps": [
152
  "chartist"
153
  ]
154
  },
155
+ "introjs": {
156
  "url": "https://cdnjs.cloudflare.com/ajax/libs/intro.js/3.3.1/introjs.min.css"
157
  },
158
+ "shield/userprofile": {
159
  "deps": [],
160
  "footer": true
161
  },
162
+ "shield/charts": {
163
  "deps": [
164
  "plugin"
165
  ]
166
  },
167
+ "shield/dialog": {
168
  "deps": [
169
  "wp-wp-jquery-ui-dialog"
170
  ],
171
  "footer": true
172
  },
173
+ "shield/mainwp": {},
174
+ "shield/datatables": {
175
  "deps": [
176
  "datatables-select",
177
  "datatables-buttons",
180
  "tp/highlightjs"
181
  ]
182
  },
183
+ "shield/login2fa": {
184
+ },
185
+ "shield/scanners": {
186
  "deps": [
187
  "datatables-select",
188
  "datatables-buttons",
190
  "tp/highlightjs"
191
  ]
192
  },
193
+ "tp/highlightjs": {
194
  "url": "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.1.0/styles/default.min.css"
195
  }
196
  },
197
  "js": {
198
  "bootstrap": {
199
+ "url": "https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.1.3/js/bootstrap.bundle.min.js",
200
  "deps": [
201
  "wp-jquery"
202
  ]
227
  ]
228
  },
229
  "datatables-bootstrap": {
230
+ "url": "https://cdn.datatables.net/1.11.3/js/dataTables.bootstrap5.min.js",
231
  "deps": [
232
  "datatables"
233
  ]
403
  "jquery/steps"
404
  ]
405
  },
406
+ "shield/login2fa": {
407
+ "deps": [
408
+ "u2f-bundle",
409
+ "wp-jquery"
410
+ ]
411
+ },
412
  "u2f-bundle": {},
413
  "tp/grecaptcha": {
414
  "url": "https://www.google.com/recaptcha/api.js",
plugin.json CHANGED
@@ -1,8 +1,8 @@
1
  {
2
  "properties": {
3
- "version": "13.0.6",
4
- "release_timestamp": 1642088418,
5
- "build": "202201.1301",
6
  "slug_parent": "icwp",
7
  "slug_plugin": "wpsf",
8
  "human_name": "Shield Security",
@@ -83,95 +83,95 @@
83
  },
84
  "register": {
85
  "css": {
86
- "bootstrap": {
87
- "url": "https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.1/css/bootstrap.min.css"
88
  },
89
- "bootstrap-datepicker": {
90
  "url": "https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.8.0/css/bootstrap-datepicker.min.css",
91
  "deps": [
92
  "bootstrap"
93
  ]
94
  },
95
- "bootstrap-select": {
96
  "url": "https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.18/css/bootstrap-select.min.css",
97
  "deps": [
98
  "bootstrap"
99
  ]
100
  },
101
- "select2": {
102
  "url": "https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css",
103
  "deps": [
104
  "plugin"
105
  ]
106
  },
107
- "datatables-bootstrap": {
108
- "url": "https://cdn.datatables.net/1.11.3/css/dataTables.bootstrap4.min.css",
109
  "deps": [
110
  "bootstrap"
111
  ]
112
  },
113
- "datatables-searchpanes": {
114
  "url": "https://cdn.datatables.net/searchpanes/1.4.0/css/searchPanes.dataTables.min.css",
115
  "deps": [
116
  "datatables-bootstrap"
117
  ]
118
  },
119
- "datatables-select": {
120
  "url": "https://cdn.datatables.net/select/1.3.3/css/select.dataTables.min.css",
121
  "deps": [
122
  "datatables-bootstrap"
123
  ]
124
  },
125
- "datatables-buttons": {
126
  "url": "https://cdn.datatables.net/buttons/1.7.1/css/buttons.dataTables.min.css",
127
  "deps": [
128
  "datatables-bootstrap"
129
  ]
130
  },
131
- "global-plugin": {},
132
- "plugin": {
133
  "deps": [
134
  "bootstrap",
135
  "global-plugin"
136
  ]
137
  },
138
- "shield/wizard": {
139
  "deps": [
140
  "bootstrap",
141
  "global-plugin"
142
  ]
143
  },
144
- "jquery/featherlight": {
145
  "url": "https://cdnjs.cloudflare.com/ajax/libs/featherlight/1.7.13/featherlight.min.css"
146
  },
147
- "chartist": {
148
  "url": "https://cdnjs.cloudflare.com/ajax/libs/chartist/0.11.4/chartist.min.css"
149
  },
150
- "chartist-plugin-legend": {
151
  "deps": [
152
  "chartist"
153
  ]
154
  },
155
- "introjs": {
156
  "url": "https://cdnjs.cloudflare.com/ajax/libs/intro.js/3.3.1/introjs.min.css"
157
  },
158
- "shield/userprofile": {
159
  "deps": [],
160
  "footer": true
161
  },
162
- "shield/charts": {
163
  "deps": [
164
  "plugin"
165
  ]
166
  },
167
- "shield/dialog": {
168
  "deps": [
169
  "wp-wp-jquery-ui-dialog"
170
  ],
171
  "footer": true
172
  },
173
- "shield/mainwp": {},
174
- "shield/datatables": {
175
  "deps": [
176
  "datatables-select",
177
  "datatables-buttons",
@@ -180,7 +180,9 @@
180
  "tp/highlightjs"
181
  ]
182
  },
183
- "shield/scanners": {
 
 
184
  "deps": [
185
  "datatables-select",
186
  "datatables-buttons",
@@ -188,13 +190,13 @@
188
  "tp/highlightjs"
189
  ]
190
  },
191
- "tp/highlightjs": {
192
  "url": "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.1.0/styles/default.min.css"
193
  }
194
  },
195
  "js": {
196
  "bootstrap": {
197
- "url": "https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.1/js/bootstrap.bundle.min.js",
198
  "deps": [
199
  "wp-jquery"
200
  ]
@@ -225,7 +227,7 @@
225
  ]
226
  },
227
  "datatables-bootstrap": {
228
- "url": "https://cdn.datatables.net/1.11.3/js/dataTables.bootstrap4.min.js",
229
  "deps": [
230
  "datatables"
231
  ]
@@ -401,6 +403,12 @@
401
  "jquery/steps"
402
  ]
403
  },
 
 
 
 
 
 
404
  "u2f-bundle": {},
405
  "tp/grecaptcha": {
406
  "url": "https://www.google.com/recaptcha/api.js",
1
  {
2
  "properties": {
3
+ "version": "14.0.0",
4
+ "release_timestamp": 1643365205,
5
+ "build": "202202.0601",
6
  "slug_parent": "icwp",
7
  "slug_plugin": "wpsf",
8
  "human_name": "Shield Security",
83
  },
84
  "register": {
85
  "css": {
86
+ "bootstrap": {
87
+ "url": "https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.1.3/css/bootstrap.min.css"
88
  },
89
+ "bootstrap-datepicker": {
90
  "url": "https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.8.0/css/bootstrap-datepicker.min.css",
91
  "deps": [
92
  "bootstrap"
93
  ]
94
  },
95
+ "bootstrap-select": {
96
  "url": "https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.18/css/bootstrap-select.min.css",
97
  "deps": [
98
  "bootstrap"
99
  ]
100
  },
101
+ "select2": {
102
  "url": "https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css",
103
  "deps": [
104
  "plugin"
105
  ]
106
  },
107
+ "datatables-bootstrap": {
108
+ "url": "https://cdn.datatables.net/1.11.3/css/dataTables.bootstrap5.min.css",
109
  "deps": [
110
  "bootstrap"
111
  ]
112
  },
113
+ "datatables-searchpanes": {
114
  "url": "https://cdn.datatables.net/searchpanes/1.4.0/css/searchPanes.dataTables.min.css",
115
  "deps": [
116
  "datatables-bootstrap"
117
  ]
118
  },
119
+ "datatables-select": {
120
  "url": "https://cdn.datatables.net/select/1.3.3/css/select.dataTables.min.css",
121
  "deps": [
122
  "datatables-bootstrap"
123
  ]
124
  },
125
+ "datatables-buttons": {
126
  "url": "https://cdn.datatables.net/buttons/1.7.1/css/buttons.dataTables.min.css",
127
  "deps": [
128
  "datatables-bootstrap"
129
  ]
130
  },
131
+ "global-plugin": {},
132
+ "plugin": {
133
  "deps": [
134
  "bootstrap",
135
  "global-plugin"
136
  ]
137
  },
138
+ "shield/wizard": {
139
  "deps": [
140
  "bootstrap",
141
  "global-plugin"
142
  ]
143
  },
144
+ "jquery/featherlight": {
145
  "url": "https://cdnjs.cloudflare.com/ajax/libs/featherlight/1.7.13/featherlight.min.css"
146
  },
147
+ "chartist": {
148
  "url": "https://cdnjs.cloudflare.com/ajax/libs/chartist/0.11.4/chartist.min.css"
149
  },
150
+ "chartist-plugin-legend": {
151
  "deps": [
152
  "chartist"
153
  ]
154
  },
155
+ "introjs": {
156
  "url": "https://cdnjs.cloudflare.com/ajax/libs/intro.js/3.3.1/introjs.min.css"
157
  },
158
+ "shield/userprofile": {
159
  "deps": [],
160
  "footer": true
161
  },
162
+ "shield/charts": {
163
  "deps": [
164
  "plugin"
165
  ]
166
  },
167
+ "shield/dialog": {
168
  "deps": [
169
  "wp-wp-jquery-ui-dialog"
170
  ],
171
  "footer": true
172
  },
173
+ "shield/mainwp": {},
174
+ "shield/datatables": {
175
  "deps": [
176
  "datatables-select",
177
  "datatables-buttons",
180
  "tp/highlightjs"
181
  ]
182
  },
183
+ "shield/login2fa": {
184
+ },
185
+ "shield/scanners": {
186
  "deps": [
187
  "datatables-select",
188
  "datatables-buttons",
190
  "tp/highlightjs"
191
  ]
192
  },
193
+ "tp/highlightjs": {
194
  "url": "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.1.0/styles/default.min.css"
195
  }
196
  },
197
  "js": {
198
  "bootstrap": {
199
+ "url": "https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.1.3/js/bootstrap.bundle.min.js",
200
  "deps": [
201
  "wp-jquery"
202
  ]
227
  ]
228
  },
229
  "datatables-bootstrap": {
230
+ "url": "https://cdn.datatables.net/1.11.3/js/dataTables.bootstrap5.min.js",
231
  "deps": [
232
  "datatables"
233
  ]
403
  "jquery/steps"
404
  ]
405
  },
406
+ "shield/login2fa": {
407
+ "deps": [
408
+ "u2f-bundle",
409
+ "wp-jquery"
410
+ ]
411
+ },
412
  "u2f-bundle": {},
413
  "tp/grecaptcha": {
414
  "url": "https://www.google.com/recaptcha/api.js",
readme.txt CHANGED
@@ -8,7 +8,7 @@ Requires at least: 3.7
8
  Requires PHP: 7.0
9
  Recommended PHP: 7.4
10
  Tested up to: 5.9
11
- Stable tag: 13.0.6
12
 
13
  No-Nonsense Security Hardening that protects WordPress against hackers, malicious bots, and spammers (no captchas!). Now with exclusive ShieldNET Technology.
14
 
8
  Requires PHP: 7.0
9
  Recommended PHP: 7.4
10
  Tested up to: 5.9
11
+ Stable tag: 14.0.0
12
 
13
  No-Nonsense Security Hardening that protects WordPress against hackers, malicious bots, and spammers (no captchas!). Now with exclusive ShieldNET Technology.
14
 
resources/css/plugin.css CHANGED
@@ -697,7 +697,7 @@ input:checked + .icwp-slider:before {
697
  left: -17px;
698
  }
699
  }
700
- #FooterWizardBanner .text-left {
701
  margin-bottom: 0;
702
  }
703
  #FooterWizardBanner .offset-1 {
@@ -1022,17 +1022,8 @@ table.odp-table.scan-table td.column-path code {
1022
  letter-spacing: 0;
1023
  }
1024
  }
1025
- .form-check input[type=radio] {
1026
- margin-top: 4px;
1027
- }
1028
- .form-check .form-check-label {
1029
- margin-left: 8px;
1030
- }
1031
- input[type=radio].form-check-input,
1032
- input[type=checkbox].form-check-input {
1033
- margin-top: 5px;
1034
- margin-left: -20px;
1035
- margin-right: 5px;
1036
  }
1037
  /** copied from bootstrap to override WP admin styles */
1038
  .icwpOptionsForm {
@@ -1079,7 +1070,7 @@ input[type=checkbox].form-check-input {
1079
  border-top: 0 none;
1080
  padding-top: 14px;
1081
  }
1082
- .icwpOptionsForm .form-group.row {
1083
  /*margin-bottom: 20px;*/
1084
  padding: 15px 0 25px;
1085
  border-bottom: 1px dashed rgba(0, 0, 0, 0.08);
@@ -1137,18 +1128,18 @@ input:checked + .icwp-slider {
1137
  dd, li {
1138
  margin-bottom: 0;
1139
  }
1140
- a {
1141
- color: #008000;
1142
- }
1143
- a:hover {
1144
  color: #008000;
 
1145
  }
1146
  a:focus .gravatar, a:focus, a:focus .media-icon img {
1147
  box-shadow: none !important;
1148
  }
1149
  .col-form-label {
1150
  font-weight: bold;
1151
- padding-top: 0;
1152
  }
1153
  #SectionScanResultsAggregate .card-footer a:hover {
1154
  color: #ffffff;
@@ -1202,12 +1193,6 @@ a:focus .gravatar, a:focus, a:focus .media-icon img {
1202
  #SectionIpsWhite .alert {
1203
  border-radius: 0;
1204
  }
1205
- #SectionIpsBlack .form-inline {
1206
- margin: 10px 0 !important;
1207
- }
1208
- #SectionIpsWhite .form-inline {
1209
- margin: 10px 0 !important;
1210
- }
1211
  #SectionIpsBlack .input-group-text {
1212
  background-color: transparent !important;
1213
  }
@@ -1221,6 +1206,7 @@ a[target="_blank"]:not(.option_link_info):not(.card-link):not(.table-link)::afte
1221
  #footer-thankyou {
1222
  display: none;
1223
  }
 
1224
  a.section_title_info {
1225
  cursor: pointer;
1226
  }
@@ -1236,19 +1222,22 @@ dl.pro-features dt:before {
1236
  dl.pro-features dd {
1237
  margin-bottom: 10px;
1238
  }
1239
- .custom-control.custom-radio .custom-control-input:checked ~ .custom-control-label::before,
1240
- .custom-control.custom-checkbox .custom-control-input:checked ~ .custom-control-label::before,
1241
- .option-checkbox.custom-switch .custom-control-input:checked ~ .custom-control-label::before {
1242
- background-color: rgba(69, 119, 0, 1);
1243
- border-color: rgba(69, 119, 0, 1);
1244
  }
1245
- .option-checkbox.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before {
 
 
 
 
 
1246
  background-color: rgba(69, 119, 0, 0.3);
1247
  border-color: rgba(69, 119, 0, 0.3);
1248
  }
1249
- .custom-control.custom-checkbox .custom-control-input:disabled,
1250
- .custom-control.custom-radio .custom-control-input:disabled,
1251
- .option-checkbox.custom-switch .custom-control-input:disabled {
1252
  opacity: 0;
1253
  }
1254
  .importexport-checkbox.custom-switch .custom-control-input:checked ~ .custom-control-label::before {
@@ -1275,6 +1264,9 @@ dl.pro-features dd {
1275
  }
1276
  .overview.card > .card-header {
1277
  }
 
 
 
1278
  .overview.card > .card-footer {
1279
  padding: 10px 15px;
1280
  }
@@ -1596,10 +1588,9 @@ body.folded #FooterBannerGoPro {
1596
  visibility: hidden;
1597
  background-color: rgba(238, 246, 238, 0.99);
1598
  border: 1px solid rgba(177, 216, 178, 0.99);
1599
- /*border-left-width: 0;*/
1600
  position: absolute;
1601
- left: 90%;
1602
- width: 120%;
1603
  z-index: 1000;
1604
  height: auto;
1605
  box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.4);
@@ -1742,4 +1733,12 @@ button.btn.action {
1742
 
1743
  .scan-item-history ul {
1744
  list-style: inside disc;
 
 
 
 
 
 
 
 
1745
  }
697
  left: -17px;
698
  }
699
  }
700
+ #FooterWizardBanner .text-start {
701
  margin-bottom: 0;
702
  }
703
  #FooterWizardBanner .offset-1 {
1022
  letter-spacing: 0;
1023
  }
1024
  }
1025
+ .form-check .form-check-input {
1026
+ margin-top: 0.25em;
 
 
 
 
 
 
 
 
 
1027
  }
1028
  /** copied from bootstrap to override WP admin styles */
1029
  .icwpOptionsForm {
1070
  border-top: 0 none;
1071
  padding-top: 14px;
1072
  }
1073
+ .icwpOptionsForm .option_form_row.row {
1074
  /*margin-bottom: 20px;*/
1075
  padding: 15px 0 25px;
1076
  border-bottom: 1px dashed rgba(0, 0, 0, 0.08);
1128
  dd, li {
1129
  margin-bottom: 0;
1130
  }
1131
+ a,
1132
+ a:hover,
1133
+ a.nav-link,
1134
+ a.nav-link:hover {
1135
  color: #008000;
1136
+ text-decoration: none;
1137
  }
1138
  a:focus .gravatar, a:focus, a:focus .media-icon img {
1139
  box-shadow: none !important;
1140
  }
1141
  .col-form-label {
1142
  font-weight: bold;
 
1143
  }
1144
  #SectionScanResultsAggregate .card-footer a:hover {
1145
  color: #ffffff;
1193
  #SectionIpsWhite .alert {
1194
  border-radius: 0;
1195
  }
 
 
 
 
 
 
1196
  #SectionIpsBlack .input-group-text {
1197
  background-color: transparent !important;
1198
  }
1206
  #footer-thankyou {
1207
  display: none;
1208
  }
1209
+ a.beacon-article,
1210
  a.section_title_info {
1211
  cursor: pointer;
1212
  }
1222
  dl.pro-features dd {
1223
  margin-bottom: 10px;
1224
  }
1225
+ .form-check .form-check-input:checked,
1226
+ .form-check .form-check-input:checked,
1227
+ .option-checkbox.custom-switch .form-check-input:checked {
1228
+ background-color: rgba(69, 119, 0, 1) !important;
1229
+ border-color: rgba(69, 119, 0, 1)!important;
1230
  }
1231
+ .form-check .form-check-input:checked::before ,
1232
+ .form-check .form-check-input:checked::before ,
1233
+ .option-checkbox.custom-switch .form-check-input:checked::before {
1234
+ content: none;
1235
+ }
1236
+ .option-checkbox.custom-switch .form-check-input:disabled:checked {
1237
  background-color: rgba(69, 119, 0, 0.3);
1238
  border-color: rgba(69, 119, 0, 0.3);
1239
  }
1240
+ .form-check .custom-control-input:disabled {
 
 
1241
  opacity: 0;
1242
  }
1243
  .importexport-checkbox.custom-switch .custom-control-input:checked ~ .custom-control-label::before {
1264
  }
1265
  .overview.card > .card-header {
1266
  }
1267
+ .overview.card > .card-header a {
1268
+ text-decoration: none;
1269
+ }
1270
  .overview.card > .card-footer {
1271
  padding: 10px 15px;
1272
  }
1588
  visibility: hidden;
1589
  background-color: rgba(238, 246, 238, 0.99);
1590
  border: 1px solid rgba(177, 216, 178, 0.99);
 
1591
  position: absolute;
1592
+ left: 130px;
1593
+ width: 200px;
1594
  z-index: 1000;
1595
  height: auto;
1596
  box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.4);
1733
 
1734
  .scan-item-history ul {
1735
  list-style: inside disc;
1736
+ }
1737
+
1738
+ .audit-meta ul {
1739
+ padding: 0;
1740
+ }
1741
+
1742
+ .ui-dialog-titlebar .ui-dialog-titlebar-close {
1743
+ float: right;
1744
  }
resources/css/shield/login2fa.css ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ p > label {
2
+ }
3
+ #btn_u2f_start {
4
+ padding: .1875rem .3125rem;
5
+ margin: 0 0 16px 0;
6
+ line-height: 1.4;
7
+ font-size: 24px;
8
+ box-shadow: 0 0 0 transparent;
9
+ border: .0625rem solid #8c8f94;
10
+ cursor: pointer;
11
+ }
12
+ .shield-2fa-wplogin #btn_u2f_start {
13
+ border-radius: 4px;
14
+ width: 100%;
15
+ }
16
+ .shield-2fa-wplogin input[type="text"][name="icwp_wpsf_yubi_otp"] {
17
+ width: 100%;
18
+ }
19
+
20
+ input[type="text"][name="icwp_wpsf_email_otp"],
21
+ input[type="text"][name="icwp_wpsf_ga_otp"] {
22
+ font-family: monospace;
23
+ text-align: center;
24
+ letter-spacing: 10px;
25
+ font-size: 18px;
26
+ font-weight: bolder;
27
+ }
28
+
29
+ .otp-description {
30
+ display: block;
31
+ margin: 6px 0 20px;
32
+ font-size: 12px;
33
+ }
34
+
35
+ input {
36
+ margin-bottom: 0 !important;
37
+ }
resources/js/login/u2f.js DELETED
@@ -1,42 +0,0 @@
1
- jQuery( document ).ready( function () {
2
-
3
- u2fApi.isSupported()
4
- .then( function ( supported ) {
5
-
6
- let $oU2fStart = jQuery( 'input#btn_u2f_start' );
7
-
8
- if ( supported ) {
9
-
10
- $oU2fStart.on( 'click', function () {
11
-
12
- u2fApi.sign( JSON.parse( atob( $oU2fStart.data( 'signs' ) ) ) )
13
- .then( function ( response ) {
14
- let $oForm = $oU2fStart.closest( 'form' );
15
- jQuery( '<input>' ).attr( {
16
- type: 'hidden',
17
- name: 'u2f_signs',
18
- value: $oU2fStart.data( 'signs' )
19
- } ).appendTo( $oForm );
20
- jQuery( '<input>' ).attr( {
21
- type: 'hidden',
22
- name: $oU2fStart.data( 'input_otp' ),
23
- value: JSON.stringify( response )
24
- } ).appendTo( $oForm );
25
- $oU2fStart.prop( 'disabled', true );
26
- $oU2fStart.val( 'U2F successful. Submit the form when ready.' );
27
- } )
28
- .catch( function ( response ) {
29
- alert( 'U2F authentication failed. Reload the page to retry.' );
30
- } );
31
- } );
32
-
33
- }
34
- else {
35
- $oU2fStart.prop( 'disabled', true );
36
- $oU2fStart.val( "U2F Authentication isn't supported on this browser." );
37
- alert( "U2F Authentication isn't supported on this browser." );
38
- }
39
- } )
40
- .catch();
41
-
42
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
resources/js/plugin.js CHANGED
@@ -30,18 +30,19 @@ var iCWP_WPSF_OptionsPages = new function () {
30
  }
31
 
32
  jQuery( function () {
33
- jQuery( 'a.section_title_info' ).popover( {
34
- placement: 'bottom',
35
- trigger: 'click',
36
- delay: 50,
37
- html: true
38
- } );
39
- jQuery( '[data-toggle="tooltip"]' ).tooltip( {
40
- placement: 'left',
41
- trigger: 'hover focus',
42
- delay: 150,
43
- html: false
44
- } );
 
45
  } );
46
  };
47
  }();
@@ -347,6 +348,19 @@ if ( typeof icwp_wpsf_vars_plugin !== 'undefined' ) {
347
  }
348
 
349
  jQuery( document ).ready( function () {
 
 
 
 
 
 
 
 
 
 
 
 
 
350
  jQuery( document ).icwpWpsfTours();
351
  jQuery( document ).icwpWpsfPluginNavigation();
352
  jQuery( '.select2picker.static' ).select2( {
30
  }
31
 
32
  jQuery( function () {
33
+ // jQuery( 'a.section_title_info' ).popover( {
34
+ // placement: 'bottom',
35
+ // trigger: 'click',
36
+ // delay: 50,
37
+ // html: true
38
+ // } );
39
+
40
+ // jQuery( '[data-bs-toggle="tooltip"]' ).tooltip( {
41
+ // placement: 'left',
42
+ // trigger: 'hover focus',
43
+ // delay: 150,
44
+ // html: false
45
+ // } );
46
  } );
47
  };
48
  }();
348
  }
349
 
350
  jQuery( document ).ready( function () {
351
+
352
+ jQuery( document ).ajaxComplete( function () {
353
+ let popoverTriggerList = [].slice.call( document.querySelectorAll( '[data-bs-toggle="popover"]' ) )
354
+ popoverTriggerList.map( function ( popoverTriggerEl ) {
355
+ return new bootstrap.Popover( popoverTriggerEl );
356
+ } );
357
+
358
+ let tooltipTriggerList = [].slice.call( document.querySelectorAll( '[data-bs-toggle="tooltip"]' ) )
359
+ tooltipTriggerList.map( function ( tooltipTriggerEl ) {
360
+ return new bootstrap.Tooltip( tooltipTriggerEl );
361
+ } );
362
+ } );
363
+
364
  jQuery( document ).icwpWpsfTours();
365
  jQuery( document ).icwpWpsfPluginNavigation();
366
  jQuery( '.select2picker.static' ).select2( {
resources/js/shield/audit_trail.js CHANGED
@@ -42,6 +42,8 @@
42
  sanitize: false,
43
  html: true,
44
  animation: true,
 
 
45
  selector: 'td.meta > button[data-toggle="popover"]',
46
  container: 'body',
47
  content: function () {
42
  sanitize: false,
43
  html: true,
44
  animation: true,
45
+ customClass: 'audit-meta',
46
+ placement: 'left',
47
  selector: 'td.meta > button[data-toggle="popover"]',
48
  container: 'body',
49
  content: function () {
resources/js/shield/login2fa.js ADDED
@@ -0,0 +1,144 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery( document ).ready( function () {
2
+
3
+ let $body = jQuery( 'body' );
4
+ let $theForm = jQuery( 'form#loginform' );
5
+ let userID = jQuery( 'input[type=hidden]#wp_user_id' ).val();
6
+ let loginNonce = jQuery( 'input[type=hidden]#login_nonce' ).val();
7
+
8
+ jQuery( 'input[type=text]:first', $theForm ).focus();
9
+
10
+ jQuery( 'input#icwp_wpsf_sms_otp' ).on( 'click', function () {
11
+
12
+ if ( confirm( 'Are you sure?' ) ) {
13
+ let $this = jQuery( this );
14
+ $this.attr( 'disabled', 'disabled' );
15
+ let reqParamsStart = $this.data( 'ajax_intent_sms_send' );
16
+ let ajaxurl = reqParamsStart.ajaxurl;
17
+ delete reqParamsStart.ajaxurl;
18
+
19
+ $body.addClass( 'shield-busy' );
20
+ jQuery.post( ajaxurl, reqParamsStart, function ( response ) {
21
+ let msg = 'Communications error with site.';
22
+
23
+ if ( response.data.success ) {
24
+ alert( response.data.message );
25
+ let newText = document.createElement( "input" );
26
+ newText.classList.add( 'form-control' );
27
+ let $newText = jQuery( newText );
28
+ $newText.attr( 'autocomplete', 'off' );
29
+ $newText.attr( 'placeholder', 'Enter SMS One-Time Password' );
30
+ $newText.attr( 'name', $this.attr( 'name' ) );
31
+ $newText.attr( 'id', $this.attr( 'id' ) );
32
+ $newText.insertBefore( $this );
33
+ $this.remove();
34
+ }
35
+ else {
36
+ if ( response.data.message !== undefined ) {
37
+ msg = response.data.message;
38
+ }
39
+ else {
40
+ msg = 'Sending verification SMS failed';
41
+ }
42
+ alert( msg );
43
+ }
44
+ }
45
+ ).always( function () {
46
+ reqParamsStart.ajaxurl = ajaxurl;
47
+ $body.removeClass( 'shield-busy' );
48
+ $this.removeAttr( 'disabled' );
49
+ }
50
+ );
51
+ }
52
+ } );
53
+
54
+ let ajax_intent_email_send = function () {
55
+ let $this = jQuery( this );
56
+ $this.attr( 'disabled', true );
57
+
58
+ let reqParams = $emailInput.data( 'ajax_intent_email_send' );
59
+ reqParams.wp_user_id = userID;
60
+ reqParams.login_nonce = loginNonce;
61
+ $body.addClass( 'shield-busy' );
62
+ jQuery.post( reqParams.ajaxurl, reqParams, function ( response ) {
63
+ let msg = 'Communications error with site.';
64
+
65
+ if ( response.data.success ) {
66
+ alert( response.data.message );
67
+ }
68
+ else {
69
+ if ( response.data.message !== undefined ) {
70
+ msg = response.data.message;
71
+ }
72
+ else {
73
+ msg = 'Sending Email 2FA failed';
74
+ }
75
+ alert( msg );
76
+ }
77
+ }
78
+ ).always( function () {
79
+ $body.removeClass( 'shield-busy' );
80
+ $this.attr( 'disabled', false );
81
+ }
82
+ );
83
+ };
84
+
85
+ let $emailInput = jQuery( 'input[type=text]#icwp_wpsf_email_otp' );
86
+ if ( $emailInput.length > 0 ) {
87
+ $emailInput.val( '' );
88
+ if ( Number( $emailInput.data( 'auto_send' ) ) === 1 ) {
89
+ ajax_intent_email_send();
90
+ }
91
+ $emailInput.on( 'keyup change keydown', function () {
92
+ this.value = this.value.toUpperCase();
93
+ this.value = this.value.replace( /[^0-9A-Z]/, '' ).substring( 0, 6 );
94
+ } );
95
+ jQuery( 'a#ajax_intent_email_send' ).on( 'click', ajax_intent_email_send );
96
+ }
97
+
98
+ let $gaInput = jQuery( 'input[type=text]#icwp_wpsf_ga_otp' );
99
+ if ( $gaInput.length > 0 ) {
100
+ $gaInput.val( '' );
101
+ $gaInput.on( 'keyup change keydown', function () {
102
+ this.value = this.value.replace( /[^0-9]/, '' ).substring( 0, 6 );
103
+ } );
104
+ }
105
+
106
+ u2fApi.isSupported()
107
+ .then( function ( supported ) {
108
+
109
+ let $u2fStart = jQuery( 'input#btn_u2f_start' );
110
+
111
+ if ( supported ) {
112
+
113
+ $u2fStart.on( 'click', function () {
114
+
115
+ u2fApi.sign( JSON.parse( atob( $u2fStart.data( 'signs' ) ) ) )
116
+ .then( function ( response ) {
117
+ jQuery( '<input>' ).attr( {
118
+ type: 'hidden',
119
+ name: 'u2f_signs',
120
+ value: $u2fStart.data( 'signs' )
121
+ } ).appendTo( $theForm );
122
+ jQuery( '<input>' ).attr( {
123
+ type: 'hidden',
124
+ name: $u2fStart.data( 'input_otp' ),
125
+ value: JSON.stringify( response )
126
+ } ).appendTo( $theForm );
127
+ /** Automatically submit the form for U2F **/
128
+ $theForm[ 0 ].requestSubmit();
129
+ } )
130
+ .catch( function ( response ) {
131
+ alert( 'U2F authentication failed. Reload the page to retry.' );
132
+ } );
133
+ } );
134
+
135
+ }
136
+ else {
137
+ $u2fStart.prop( 'disabled', true );
138
+ $u2fStart.val( "U2F Authentication isn't supported on this browser." );
139
+ alert( "U2F Authentication isn't supported on this browser." );
140
+ }
141
+ } )
142
+ .catch();
143
+
144
+ } );
resources/js/shield/notbot.js CHANGED
@@ -13,14 +13,14 @@ if ( typeof Shield_Antibot === typeof undefined && typeof shield_vars_notbotjs !
13
  /**
14
  * @since 11.2 we no longer wait until DOM is ready.
15
  * @since 12.0.10 we return to using cookies to optimise whether the AJAX request is sent.
16
- * This is mainly AJAX so it's asynchronous and won't hold up any other part of the page load.
17
  * Early execution also helps mitigate the case where login requests are
18
  * sent quickly, before browser has fired NotBot request.
19
  */
20
  delete shield_vars_notbotjs.ajax.not_bot.ajaxurl;
21
  nonce_cook = getCookie( 'shield-notbot-nonce' );
22
  if ( typeof nonce_cook !== typeof undefined && nonce_cook.length > 0 ) {
23
- /** Overcome limitations of page caching by passing nonce via cookie **/
24
  shield_vars_notbotjs.ajax.not_bot.exec_nonce = nonce_cook;
25
  }
26
  if ( shield_vars_notbotjs.flags.run ) {
13
  /**
14
  * @since 11.2 we no longer wait until DOM is ready.
15
  * @since 12.0.10 we return to using cookies to optimise whether the AJAX request is sent.
16
+ * This is AJAX, so it's asynchronous and won't hold up any other part of the page load.
17
  * Early execution also helps mitigate the case where login requests are
18
  * sent quickly, before browser has fired NotBot request.
19
  */
20
  delete shield_vars_notbotjs.ajax.not_bot.ajaxurl;
21
  nonce_cook = getCookie( 'shield-notbot-nonce' );
22
  if ( typeof nonce_cook !== typeof undefined && nonce_cook.length > 0 ) {
23
+ /** Overcome limitations of page caching by passing latest nonce via cookie **/
24
  shield_vars_notbotjs.ajax.not_bot.exec_nonce = nonce_cook;
25
  }
26
  if ( shield_vars_notbotjs.flags.run ) {
resources/js/shield/userprofile.js CHANGED
@@ -45,8 +45,81 @@ jQuery.fn.ShieldUserProfile = function ( options ) {
45
  } );
46
  };
47
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  let initYubi = function ( shield_vars ) {
49
- let $yubiText = jQuery( 'input[type=text]#shield_yubi' );
50
  jQuery( document ).on( 'keydown', $yubiText, function ( evt ) {
51
  if ( evt.key === 'Enter' || evt.keyCode === 13 ) {
52
  evt.preventDefault();
@@ -61,7 +134,7 @@ jQuery.fn.ShieldUserProfile = function ( options ) {
61
  shield_vars.ajax.user_yubikey_toggle.otp = jQuery( evt.currentTarget ).data( 'yubikeyid' );
62
  sendReq( shield_vars.ajax.user_yubikey_toggle );
63
  return false;
64
- } )
65
  };
66
 
67
  let initEmail = function ( shield_vars ) {
@@ -140,6 +213,7 @@ jQuery.fn.ShieldUserProfile = function ( options ) {
140
  ).always( function () {
141
  }
142
  );
 
143
  };
144
 
145
  var showDialog = function ( success, msg ) {
@@ -177,6 +251,9 @@ jQuery.fn.ShieldUserProfile = function ( options ) {
177
  if ( typeof shield_vars_userprofile.vars.providers.backupcode !== typeof undefined ) {
178
  initBackupcodes( shield_vars_userprofile.vars.providers.backupcode );
179
  }
 
 
 
180
  initMfaRemoveAll();
181
  } );
182
  };
45
  } );
46
  };
47
 
48
+ let initSms = function ( shield_vars ) {
49
+
50
+ jQuery( 'a.shield_sms_remove' ).on( 'click', function ( evt ) {
51
+ evt.preventDefault();
52
+ if ( confirm( shield_vars_userprofile.strings.are_you_sure ) ) {
53
+ sendReq( shield_vars.ajax.user_sms2fa_remove );
54
+ }
55
+ return false;
56
+ } );
57
+
58
+ jQuery( document ).on( 'change keyup', '#shield_mfasms_phone', function ( evt ) {
59
+ let $this = jQuery( this );
60
+ const regex = /[^0-9]+/;
61
+ $this.val( $this.val().replace( regex, '' ) );
62
+ if ( $this.val().length > 15 ) {
63
+ $this.val( $this.val().substring( 0, 15 ) );
64
+ }
65
+ } );
66
+
67
+ jQuery( document ).on( 'click', '#shield_mfasms_verify', function ( evt ) {
68
+ let $this = jQuery( this );
69
+ let reqAddParams = shield_vars.ajax.user_sms2fa_add;
70
+
71
+ let $countrySelect = jQuery( 'select#shield_mfasms_country' );
72
+ reqAddParams.sms_country = $countrySelect.val();
73
+ reqAddParams.sms_phone = jQuery( 'input[type=text]#shield_mfasms_phone' ).val();
74
+
75
+ let combined = $countrySelect.find( ':selected' ).data( 'code' ) + ' ' + reqAddParams.sms_phone
76
+
77
+ if ( !(new RegExp( "^[0-9]+$" )).test( reqAddParams.sms_phone ) ) {
78
+ alert( "Phone number should contain only numbers 0-9." )
79
+ }
80
+ else if ( reqAddParams.sms_phone.length < 7 ) {
81
+ alert( "Phone number doesn't seem long enough." )
82
+ }
83
+ else if ( confirm( 'Are you sure this country code and number are correct: ' + combined ) ) {
84
+ $this.attr( 'disabled', 'disabled' );
85
+ let ajaxurl = reqAddParams.ajaxurl;
86
+ delete reqAddParams.ajaxurl;
87
+
88
+ jQuery.post( ajaxurl, reqAddParams, function ( response ) {
89
+ let msg = 'Communications error with site.';
90
+
91
+ if ( response.data.success ) {
92
+
93
+ let verifyCode = prompt( response.data.message )
94
+ if ( verifyCode !== null ) {
95
+ let reqVerifyParams = shield_vars.ajax.user_sms2fa_verify;
96
+ reqVerifyParams.sms_country = jQuery( 'select#shield_mfasms_country' ).val();
97
+ reqVerifyParams.sms_phone = jQuery( 'input[type=text]#shield_mfasms_phone' ).val();
98
+ reqVerifyParams.sms_code = verifyCode;
99
+ sendReq( reqVerifyParams );
100
+ }
101
+ }
102
+ else {
103
+ if ( response.data.message !== undefined ) {
104
+ msg = response.data.message;
105
+ }
106
+ else {
107
+ msg = 'Sending verification SMS failed';
108
+ }
109
+ alert( msg );
110
+ }
111
+ }
112
+ ).always( function () {
113
+ $this.removeAttr( 'disabled', 'disabled' );
114
+ }
115
+ );
116
+ reqAddParams.ajaxurl = ajaxurl;
117
+ }
118
+ } );
119
+ };
120
+
121
  let initYubi = function ( shield_vars ) {
122
+ let $yubiText = jQuery( 'input[type=text]#icwp_wpsf_yubi_otp' );
123
  jQuery( document ).on( 'keydown', $yubiText, function ( evt ) {
124
  if ( evt.key === 'Enter' || evt.keyCode === 13 ) {
125
  evt.preventDefault();
134
  shield_vars.ajax.user_yubikey_toggle.otp = jQuery( evt.currentTarget ).data( 'yubikeyid' );
135
  sendReq( shield_vars.ajax.user_yubikey_toggle );
136
  return false;
137
+ } );
138
  };
139
 
140
  let initEmail = function ( shield_vars ) {
213
  ).always( function () {
214
  }
215
  );
216
+ reqParams.ajaxurl = ajaxurl;
217
  };
218
 
219
  var showDialog = function ( success, msg ) {
251
  if ( typeof shield_vars_userprofile.vars.providers.backupcode !== typeof undefined ) {
252
  initBackupcodes( shield_vars_userprofile.vars.providers.backupcode );
253
  }
254
+ if ( typeof shield_vars_userprofile.vars.providers.sms !== typeof undefined ) {
255
+ initSms( shield_vars_userprofile.vars.providers.sms );
256
+ }
257
  initMfaRemoveAll();
258
  } );
259
  };
src/lib/functions/functions.php CHANGED
@@ -1,39 +1,31 @@
1
  <?php declare( strict_types=1 );
2
 
3
- use FernleafSystems\Wordpress\Plugin\Shield;
4
- use FernleafSystems\Wordpress\Services\Services;
5
 
6
  if ( function_exists( 'shield_security_get_plugin' ) ) {
7
  return;
8
  }
9
 
10
  function shield_security_get_plugin() :ICWP_WPSF_Shield_Security {
11
- return ICWP_WPSF_Shield_Security::GetInstance();
12
  }
13
 
14
  function shield_get_visitor_scores( $IP = null ) :array {
15
- return ( new Shield\Modules\IPs\Lib\Bots\Calculator\CalculateVisitorBotScores() )
16
- ->setMod( shield_security_get_plugin()->getController()->getModule_IPs() )
17
- ->setIP( $IP ?? Services::IP()->getRequestIp() )
18
- ->scores();
19
  }
20
 
21
  function shield_get_visitor_score( $IP = null ) :int {
22
- return ( new Shield\Modules\IPs\Lib\Bots\Calculator\CalculateVisitorBotScores() )
23
- ->setMod( shield_security_get_plugin()->getController()->getModule_IPs() )
24
- ->setIP( $IP ?? Services::IP()->getRequestIp() )
25
- ->probability();
26
  }
27
 
28
  /**
29
- * Calculates the visitor score then compares it against the user-defined score minimum for bots
30
  * @param null $IP - defaults to current visitor
31
- * @return bool - true if bot, false otherwise
32
- * @throws Exception
33
  */
34
  function shield_test_ip_is_bot( $IP = null ) :bool {
35
- return shield_security_get_plugin()->getController()
36
- ->getModule_IPs()
37
- ->getBotSignalsController()
38
- ->isBot( (string)$IP );
 
39
  }
1
  <?php declare( strict_types=1 );
2
 
3
+ use FernleafSystems\Wordpress\Plugin\Shield\Functions;
 
4
 
5
  if ( function_exists( 'shield_security_get_plugin' ) ) {
6
  return;
7
  }
8
 
9
  function shield_security_get_plugin() :ICWP_WPSF_Shield_Security {
10
+ return Functions\get_plugin();
11
  }
12
 
13
  function shield_get_visitor_scores( $IP = null ) :array {
14
+ return Functions\get_visitor_scores( $IP );
 
 
 
15
  }
16
 
17
  function shield_get_visitor_score( $IP = null ) :int {
18
+ return Functions\get_visitor_score( $IP );
 
 
 
19
  }
20
 
21
  /**
 
22
  * @param null $IP - defaults to current visitor
23
+ * @throws \Exception
 
24
  */
25
  function shield_test_ip_is_bot( $IP = null ) :bool {
26
+ return Functions\test_ip_is_bot( $IP );
27
+ }
28
+
29
+ function shield_get_ip_state( string $ip = '' ) :string {
30
+ return Functions\get_ip_state( $ip );
31
  }
src/lib/src/Controller/Admin/MainAdminMenu.php CHANGED
@@ -36,17 +36,17 @@ class MainAdminMenu {
36
  $menuTitle = $con->getHumanName();
37
  }
38
 
39
- $sMenuIcon = $con->urls->forImage( $menu[ 'icon_image' ] );
40
- $sIconUrl = empty( $labels[ 'icon_url_16x16' ] ) ? $sMenuIcon : $labels[ 'icon_url_16x16' ];
41
 
42
  $parentMenuID = $con->getPluginPrefix();
43
  add_menu_page(
44
  $con->getHumanName(),
45
  $menuTitle,
46
- $con->getBasePermissions(),
47
  $parentMenuID,
48
  [ $this, 'onDisplayTopMenu' ],
49
- $sIconUrl
50
  );
51
 
52
  if ( $menu[ 'has_submenu' ] ) {
@@ -63,9 +63,14 @@ class MainAdminMenu {
63
 
64
  private function fixSubmenu() {
65
  global $submenu;
66
- $menuID = $this->getCon()->getPluginPrefix();
 
67
  if ( isset( $submenu[ $menuID ] ) ) {
68
  unset( $submenu[ $menuID ][ 0 ] );
69
  }
 
 
 
 
70
  }
71
  }
36
  $menuTitle = $con->getHumanName();
37
  }
38
 
39
+ $menuIcon = $con->urls->forImage( $menu[ 'icon_image' ] );
40
+ $iconUrl = empty( $labels[ 'icon_url_16x16' ] ) ? $menuIcon : $labels[ 'icon_url_16x16' ];
41
 
42
  $parentMenuID = $con->getPluginPrefix();
43
  add_menu_page(
44
  $con->getHumanName(),
45
  $menuTitle,
46
+ 'read',
47
  $parentMenuID,
48
  [ $this, 'onDisplayTopMenu' ],
49
+ $iconUrl
50
  );
51
 
52
  if ( $menu[ 'has_submenu' ] ) {
63
 
64
  private function fixSubmenu() {
65
  global $submenu;
66
+ $con = $this->getCon();
67
+ $menuID = $con->getPluginPrefix();
68
  if ( isset( $submenu[ $menuID ] ) ) {
69
  unset( $submenu[ $menuID ][ 0 ] );
70
  }
71
+ else {
72
+ // remove entire top-level menu if no submenu items - ASSUMES this plugin MUST have submenu or no menu at all
73
+ remove_menu_page( $menuID );
74
+ }
75
  }
76
  }
src/lib/src/Controller/Ajax/Init.php CHANGED
@@ -28,7 +28,7 @@ class Init {
28
  $req = Services::Request();
29
  $nonceAction = $req->request( 'exec' );
30
 
31
- // if the ajax action is part of the allow list, is may fail the nonce.
32
  // This is work around for front-end caching plugin that screw everything up.
33
  check_ajax_referer( $nonceAction, 'exec_nonce',
34
  $forceDie || !in_array( $nonceAction, $this->getAllowedNoPrivExecs() ) );
28
  $req = Services::Request();
29
  $nonceAction = $req->request( 'exec' );
30
 
31
+ // if the ajax action is part of the "allow" list, it may fail the nonce.
32
  // This is work around for front-end caching plugin that screw everything up.
33
  check_ajax_referer( $nonceAction, 'exec_nonce',
34
  $forceDie || !in_array( $nonceAction, $this->getAllowedNoPrivExecs() ) );
src/lib/src/Controller/Assets/Enqueue.php CHANGED
@@ -193,7 +193,9 @@ class Enqueue {
193
  }
194
 
195
  private function normaliseHandle( string $handle ) :string {
196
- return str_replace( '/', '-', $this->getCon()->prefix( $handle ) );
 
 
197
  }
198
 
199
  private function getAdminAssetsToEnq() {
193
  }
194
 
195
  private function normaliseHandle( string $handle ) :string {
196
+ return str_replace( '/', '-', $this->getCon()->prefix(
197
+ \FernleafSystems\Wordpress\Services\Utilities\File\Paths::RemoveExt( $handle )
198
+ ) );
199
  }
200
 
201
  private function getAdminAssetsToEnq() {
src/lib/src/Controller/Assets/Paths.php CHANGED
@@ -3,6 +3,7 @@
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Controller\Assets;
4
 
5
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\PluginControllerConsumer;
 
6
 
7
  class Paths {
8
 
@@ -41,7 +42,12 @@ class Paths {
41
  }
42
 
43
  public function cacheDir() :string {
44
- return path_join( WP_CONTENT_DIR, $this->getCon()->cfg->paths[ 'cache' ] );
 
 
 
 
 
45
  }
46
 
47
  public function forCacheItem( string $item = '' ) :string {
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Controller\Assets;
4
 
5
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\PluginControllerConsumer;
6
+ use FernleafSystems\Wordpress\Services\Services;
7
 
8
  class Paths {
9
 
42
  }
43
 
44
  public function cacheDir() :string {
45
+ $FS = Services::WpFs();
46
+ $wpContent = path_join( ABSPATH, 'wp-content' );
47
+ if ( !$FS->isDir( $wpContent ) ) {
48
+ $wpContent = WP_CONTENT_DIR;
49
+ }
50
+ return wp_normalize_path( path_join( $wpContent, $this->getCon()->cfg->paths[ 'cache' ] ) );
51
  }
52
 
53
  public function forCacheItem( string $item = '' ) :string {
src/lib/src/Controller/Controller.php CHANGED
@@ -13,7 +13,6 @@ use FernleafSystems\Wordpress\Services\Utilities\Options\Transient;
13
  * @property Shield\Controller\Assets\Urls $urls
14
  * @property Shield\Controller\Assets\Paths $paths
15
  * @property Shield\Controller\Assets\Svgs $svgs
16
- * @property bool $cache_dir_ready
17
  * @property bool $is_activating
18
  * @property bool $is_mode_debug
19
  * @property bool $is_mode_staging
@@ -24,6 +23,7 @@ use FernleafSystems\Wordpress\Services\Utilities\Options\Transient;
24
  * @property bool $plugin_deleting
25
  * @property bool $plugin_reset
26
  * @property bool $rebuild_options
 
27
  * @property bool $user_can_base_permissions
28
  * @property false|string $file_forceoff
29
  * @property string $base_file
@@ -31,6 +31,7 @@ use FernleafSystems\Wordpress\Services\Utilities\Options\Transient;
31
  * @property Shield\Modules\Integrations\Lib\MainWP\Common\MainWPVO $mwpVO
32
  * @property Shield\Utilities\Nonce\Handler $nonce_handler
33
  * @property Shield\Modules\Events\Lib\EventsService $service_events
 
34
  * @property array|Shield\Modules\Base\ModCon[] $modules
35
  * @property Shield\Crons\HourlyCron $cron_hourly
36
  * @property Shield\Crons\DailyCron $cron_daily
@@ -72,12 +73,12 @@ class Controller extends DynPropertiesClass {
72
  * @return Shield\Modules\Events\Lib\EventsService
73
  */
74
  public function loadEventsService() {
75
- if ( !isset( $this->oEventsService ) ) {
76
- $this->oEventsService = ( new Shield\Modules\Events\Lib\EventsService() )
77
  ->setCon( $this );
78
- $this->service_events = $this->oEventsService;
79
  }
80
- return $this->oEventsService;
81
  }
82
 
83
  /**
@@ -124,7 +125,6 @@ class Controller extends DynPropertiesClass {
124
 
125
  switch ( $key ) {
126
 
127
- case 'cache_dir_ready':
128
  case 'is_activating':
129
  case 'is_my_upgrade':
130
  case 'modules_loaded':
@@ -136,6 +136,13 @@ class Controller extends DynPropertiesClass {
136
  $val = (bool)$val;
137
  break;
138
 
 
 
 
 
 
 
 
139
  case 'cfg':
140
  if ( !$val instanceof Config\ConfigVO ) {
141
  $val = $this->loadConfig();
@@ -200,6 +207,12 @@ class Controller extends DynPropertiesClass {
200
  }
201
  break;
202
 
 
 
 
 
 
 
203
  default:
204
  break;
205
  }
@@ -351,29 +364,31 @@ class Controller extends DynPropertiesClass {
351
 
352
  public function onWpActivatePlugin() {
353
  $this->is_activating = true;
354
- $modPlugin = $this->getModule_Plugin();
355
- if ( $modPlugin instanceof Shield\Modules\Base\ModCon ) {
356
- $modPlugin->setActivatedAt();
357
- do_action( 'shield/plugin_activated' );
358
- }
359
  }
360
 
361
- public function getPluginCachePath( $cachePath = '' ) :string {
362
- $cacheDir = ( new Shield\Utilities\CacheDir() )
363
- ->setCon( $this )
364
- ->build();
365
- return empty( $cacheDir ) ? '' : path_join( $cacheDir, $cachePath );
 
366
  }
367
 
 
 
 
368
  public function hasCacheDir() :bool {
369
  return !empty( $this->getPluginCachePath() );
 
370
  }
371
 
372
  protected function doRegisterHooks() {
373
  register_deactivation_hook( $this->getRootFile(), [ $this, 'onWpDeactivatePlugin' ] );
374
 
375
  add_action( 'init', [ $this, 'onWpInit' ], -1000 );
376
- add_action( 'wp_loaded', [ $this, 'onWpLoaded' ] );
377
  add_action( 'admin_init', [ $this, 'onWpAdminInit' ] );
378
 
379
  add_filter( 'all_plugins', [ $this, 'filter_hidePluginFromTableList' ] );
@@ -1331,25 +1346,7 @@ class Controller extends DynPropertiesClass {
1331
  * @return Shield\Users\ShieldUserMeta|null
1332
  */
1333
  public function getUserMeta( $user ) {
1334
- $meta = null;
1335
- try {
1336
- if ( $user instanceof \WP_User ) {
1337
- /** @var Shield\Users\ShieldUserMeta $meta */
1338
- $meta = Shield\Users\ShieldUserMeta::Load( $this->prefix(), $user->ID );
1339
- if ( !$meta instanceof Shield\Users\ShieldUserMeta ) {
1340
- // Weird: user reported an error where it wasn't of the correct type
1341
- $meta = new Shield\Users\ShieldUserMeta( $this->prefix(), $user->ID );
1342
- Shield\Users\ShieldUserMeta::AddToCache( $meta );
1343
- }
1344
- $meta->setPasswordStartedAt( $user->user_pass )
1345
- ->updateFirstSeenAt();
1346
- Services::WpUsers()
1347
- ->updateUserMeta( $this->prefix( 'meta-version' ), $this->getVersionNumeric(), $user->ID );
1348
- }
1349
- }
1350
- catch ( \Exception $e ) {
1351
- }
1352
- return $meta;
1353
  }
1354
 
1355
  /**
13
  * @property Shield\Controller\Assets\Urls $urls
14
  * @property Shield\Controller\Assets\Paths $paths
15
  * @property Shield\Controller\Assets\Svgs $svgs
 
16
  * @property bool $is_activating
17
  * @property bool $is_mode_debug
18
  * @property bool $is_mode_staging
23
  * @property bool $plugin_deleting
24
  * @property bool $plugin_reset
25
  * @property bool $rebuild_options
26
+ * @property Shield\Utilities\CacheDir $cache_dir_handler
27
  * @property bool $user_can_base_permissions
28
  * @property false|string $file_forceoff
29
  * @property string $base_file
31
  * @property Shield\Modules\Integrations\Lib\MainWP\Common\MainWPVO $mwpVO
32
  * @property Shield\Utilities\Nonce\Handler $nonce_handler
33
  * @property Shield\Modules\Events\Lib\EventsService $service_events
34
+ * @property Shield\Users\UserMetas $user_metas
35
  * @property array|Shield\Modules\Base\ModCon[] $modules
36
  * @property Shield\Crons\HourlyCron $cron_hourly
37
  * @property Shield\Crons\DailyCron $cron_daily
73
  * @return Shield\Modules\Events\Lib\EventsService
74
  */
75
  public function loadEventsService() {
76
+ if ( !isset( $this->service_events ) ) {
77
+ $this->service_events = ( new Shield\Modules\Events\Lib\EventsService() )
78
  ->setCon( $this );
79
+ $this->oEventsService = $this->service_events;
80
  }
81
+ return $this->service_events;
82
  }
83
 
84
  /**
125
 
126
  switch ( $key ) {
127
 
 
128
  case 'is_activating':
129
  case 'is_my_upgrade':
130
  case 'modules_loaded':
136
  $val = (bool)$val;
137
  break;
138
 
139
+ case 'cache_dir_handler':
140
+ if ( empty( $val ) ) {
141
+ $val = ( new Shield\Utilities\CacheDir() )->setCon( $this );
142
+ $this->cache_dir_handler = $val;
143
+ }
144
+ break;
145
+
146
  case 'cfg':
147
  if ( !$val instanceof Config\ConfigVO ) {
148
  $val = $this->loadConfig();
207
  }
208
  break;
209
 
210
+ case 'user_metas':
211
+ if ( empty( $val ) ) {
212
+ $val = ( new Shield\Users\UserMetas() )->setCon( $this );
213
+ }
214
+ break;
215
+
216
  default:
217
  break;
218
  }
364
 
365
  public function onWpActivatePlugin() {
366
  $this->is_activating = true;
367
+ $this->getModule_Plugin()->setActivatedAt();
368
+ do_action( 'shield/plugin_activated' );
 
 
 
369
  }
370
 
371
+ public function getPluginCachePath( string $subPath = '' ) :string {
372
+ $path = $this->cache_dir_handler->build();
373
+ if ( !empty( $path ) && !empty( $subPath ) ) {
374
+ $path = path_join( $path, $subPath );
375
+ }
376
+ return $path;
377
  }
378
 
379
+ /**
380
+ * @deprecated 14
381
+ */
382
  public function hasCacheDir() :bool {
383
  return !empty( $this->getPluginCachePath() );
384
+ // return $this->cache_dir_handler->dirExists();
385
  }
386
 
387
  protected function doRegisterHooks() {
388
  register_deactivation_hook( $this->getRootFile(), [ $this, 'onWpDeactivatePlugin' ] );
389
 
390
  add_action( 'init', [ $this, 'onWpInit' ], -1000 );
391
+ add_action( 'wp_loaded', [ $this, 'onWpLoaded' ], 5 );
392
  add_action( 'admin_init', [ $this, 'onWpAdminInit' ] );
393
 
394
  add_filter( 'all_plugins', [ $this, 'filter_hidePluginFromTableList' ] );
1346
  * @return Shield\Users\ShieldUserMeta|null
1347
  */
1348
  public function getUserMeta( $user ) {
1349
+ return $user instanceof \WP_User ? $this->user_metas->forUser( $user ) : null;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1350
  }
1351
 
1352
  /**
src/lib/src/Controller/I18n/LoadTextDomain.php CHANGED
@@ -53,14 +53,14 @@ class LoadTextDomain {
53
  * This isn't ideal, and in-time we'll like full localizations, but we aren't there.
54
  */
55
  $country = substr( $locale, 0, 2 );
56
- $aDuplicateMappings = [
57
  'en' => 'en_GB',
58
  'es' => 'es_ES',
59
  'fr' => 'fr_FR',
60
  'pt' => 'pt_PT',
61
  ];
62
- if ( array_key_exists( $country, $aDuplicateMappings ) ) {
63
- $locale = $aDuplicateMappings[ $country ];
64
  }
65
 
66
  $maybeMo = path_join( $con->getPath_Languages(), $con->getTextDomain().'-'.$locale.'.mo' );
53
  * This isn't ideal, and in-time we'll like full localizations, but we aren't there.
54
  */
55
  $country = substr( $locale, 0, 2 );
56
+ $duplicateMappings = [
57
  'en' => 'en_GB',
58
  'es' => 'es_ES',
59
  'fr' => 'fr_FR',
60
  'pt' => 'pt_PT',
61
  ];
62
+ if ( array_key_exists( $country, $duplicateMappings ) ) {
63
+ $locale = $duplicateMappings[ $country ];
64
  }
65
 
66
  $maybeMo = path_join( $con->getPath_Languages(), $con->getTextDomain().'-'.$locale.'.mo' );
src/lib/src/Databases/Common/AlignTableWithSchema.php CHANGED
@@ -4,10 +4,6 @@ namespace FernleafSystems\Wordpress\Plugin\Shield\Databases\Common;
4
 
5
  use FernleafSystems\Wordpress\Services\Services;
6
 
7
- /**
8
- * Class AlignTableWithSchema
9
- * @package FernleafSystems\Wordpress\Plugin\Shield\Databases\Common
10
- */
11
  class AlignTableWithSchema {
12
 
13
  /**
4
 
5
  use FernleafSystems\Wordpress\Services\Services;
6
 
 
 
 
 
7
  class AlignTableWithSchema {
8
 
9
  /**
src/lib/src/Databases/Common/TableSchema.php CHANGED
@@ -6,8 +6,6 @@ use FernleafSystems\Utilities\Data\Adapter\DynPropertiesClass;
6
  use FernleafSystems\Wordpress\Services\Services;
7
 
8
  /**
9
- * Class TableSchema
10
- * @package FernleafSystems\Wordpress\Plugin\Shield\Databases\Common
11
  * @property string $slug
12
  * @property string $table
13
  * @property string $primary_key
6
  use FernleafSystems\Wordpress\Services\Services;
7
 
8
  /**
 
 
9
  * @property string $slug
10
  * @property string $table
11
  * @property string $primary_key
src/lib/src/Databases/Events/Common.php CHANGED
@@ -2,10 +2,6 @@
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Databases\Events;
4
 
5
- /**
6
- * Trait Filters
7
- * @package FernleafSystems\Wordpress\Plugin\Shield\Databases\Events
8
- */
9
  trait Common {
10
 
11
  /**
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Databases\Events;
4
 
 
 
 
 
5
  trait Common {
6
 
7
  /**
src/lib/src/Functions/functions.php ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare( strict_types=1 );
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Functions;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs;
6
+ use FernleafSystems\Wordpress\Services\Services;
7
+
8
+ function get_plugin() :\ICWP_WPSF_Shield_Security {
9
+ return \ICWP_WPSF_Shield_Security::GetInstance();
10
+ }
11
+
12
+ function get_visitor_scores( $IP = null ) :array {
13
+ return ( new IPs\Lib\Bots\Calculator\CalculateVisitorBotScores() )
14
+ ->setMod( shield_security_get_plugin()->getController()->getModule_IPs() )
15
+ ->setIP( $IP ?? Services::IP()->getRequestIp() )
16
+ ->scores();
17
+ }
18
+
19
+ function get_visitor_score( $IP = null ) :int {
20
+ return ( new IPs\Lib\Bots\Calculator\CalculateVisitorBotScores() )
21
+ ->setMod( shield_security_get_plugin()->getController()->getModule_IPs() )
22
+ ->setIP( $IP ?? Services::IP()->getRequestIp() )
23
+ ->probability();
24
+ }
25
+
26
+ /**
27
+ * Calculates the visitor score then compares it against the user-defined score minimum for bots
28
+ * @param null $IP - defaults to current visitor
29
+ * @throws \Exception
30
+ */
31
+ function test_ip_is_bot( $IP = null ) :bool {
32
+ return shield_security_get_plugin()->getController()
33
+ ->getModule_IPs()
34
+ ->getBotSignalsController()
35
+ ->isBot( (string)$IP );
36
+ }
37
+
38
+ function get_ip_state( string $ip = '' ) :string {
39
+ $mod = get_plugin()->getController()->getModule_IPs();
40
+
41
+ $state = 'none';
42
+
43
+ $ip = ( new IPs\Lib\Ops\LookupIpOnList() )
44
+ ->setDbHandler( $mod->getDbHandler_IPs() )
45
+ ->setIP( empty( $ip ) ? Services::IP()->getRequestIp() : $ip )
46
+ ->lookupIp();
47
+
48
+ if ( !empty( $ip ) ) {
49
+ switch ( $ip->list ) {
50
+
51
+ case $mod::LIST_MANUAL_WHITE:
52
+ $state = 'bypass';
53
+ break;
54
+
55
+ case $mod::LIST_MANUAL_BLACK:
56
+ $state = 'blocked';
57
+ break;
58
+
59
+ case $mod::LIST_AUTO_BLACK:
60
+ $state = $ip->blocked_at ? 'blocked' : 'offense';
61
+ break;
62
+
63
+ default:
64
+ throw new \Exception( 'unknown state:'.$state );
65
+ }
66
+ }
67
+ return $state;
68
+ }
src/lib/src/Modules/AuditTrail/AjaxHandler.php CHANGED
@@ -1,4 +1,4 @@
1
- <?php
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\AuditTrail;
4
 
1
+ <?php declare( strict_types=1 );
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\AuditTrail;
4
 
src/lib/src/Modules/AuditTrail/Lib/AuditLogger.php CHANGED
@@ -39,7 +39,7 @@ class AuditLogger extends EventsListener {
39
  $con->getModule_Traffic()->getRequestLogger()->execute();
40
  }
41
 
42
- if ( $con->hasCacheDir() && $opts->isLogToFile() ) {
43
  try {
44
  $fileHandlerWithFilter = new FilterHandler( new LogFileHandler( $mod ), $opts->getLogLevelsFile() );
45
  if ( $opts->getOpt( 'log_format_file' ) === 'json' ) {
@@ -50,6 +50,18 @@ class AuditLogger extends EventsListener {
50
  catch ( \Exception $e ) {
51
  }
52
  }
 
 
 
 
 
 
 
 
 
 
 
 
53
  }
54
 
55
  public function getLogger() :Logger {
39
  $con->getModule_Traffic()->getRequestLogger()->execute();
40
  }
41
 
42
+ if ( $con->cache_dir_handler->dirExists() && $opts->isLogToFile() ) {
43
  try {
44
  $fileHandlerWithFilter = new FilterHandler( new LogFileHandler( $mod ), $opts->getLogLevelsFile() );
45
  if ( $opts->getOpt( 'log_format_file' ) === 'json' ) {
50
  catch ( \Exception $e ) {
51
  }
52
  }
53
+
54
+ $this->pushCustomHandlers();
55
+ }
56
+
57
+ private function pushCustomHandlers() {
58
+ $custom = apply_filters( 'shield/custom_audit_trail_handlers', [] );
59
+ array_map(
60
+ function ( $handler ) {
61
+ $this->getLogger()->pushHandler( $handler );
62
+ },
63
+ ( $this->getCon()->isPremiumActive() && is_array( $custom ) ) ? $custom : []
64
+ );
65
  }
66
 
67
  public function getLogger() :Logger {
src/lib/src/Modules/AuditTrail/Lib/AuditMessageBuilder.php CHANGED
@@ -4,6 +4,8 @@ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\AuditTrail\Lib;
4
 
5
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\AuditTrail\DB\LogRecord;
6
 
 
 
7
  class AuditMessageBuilder {
8
 
9
  public static function BuildFromLogRecord( LogRecord $log ) :array {
@@ -11,7 +13,7 @@ class AuditMessageBuilder {
11
  }
12
 
13
  public static function Build( string $event, array $substitutions = [] ) :string {
14
- $srvEvents = shield_security_get_plugin()->getController()->loadEventsService();
15
 
16
  $raw = implode( "\n", $srvEvents->getEventAuditStrings( $event ) );
17
 
4
 
5
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\AuditTrail\DB\LogRecord;
6
 
7
+ use function FernleafSystems\Wordpress\Plugin\Shield\Functions\get_plugin;
8
+
9
  class AuditMessageBuilder {
10
 
11
  public static function BuildFromLogRecord( LogRecord $log ) :array {
13
  }
14
 
15
  public static function Build( string $event, array $substitutions = [] ) :string {
16
+ $srvEvents = get_plugin()->getController()->loadEventsService();
17
 
18
  $raw = implode( "\n", $srvEvents->getEventAuditStrings( $event ) );
19
 
src/lib/src/Modules/AuditTrail/Lib/LogTable/DelegateAjaxHandler.php CHANGED
@@ -46,10 +46,6 @@ class DelegateAjaxHandler {
46
  ];
47
  }
48
 
49
- /**
50
- * @return array
51
- * @throws \Exception
52
- */
53
  private function getRequestMeta() :array {
54
  return [
55
  'success' => true,
46
  ];
47
  }
48
 
 
 
 
 
49
  private function getRequestMeta() :array {
50
  return [
51
  'success' => true,
src/lib/src/Modules/AuditTrail/Lib/LogTable/LoadRawTableData.php CHANGED
@@ -94,10 +94,9 @@ class LoadRawTableData extends BaseLoadTableData {
94
 
95
  private function getColumnContent_Meta() :string {
96
  return sprintf(
97
- '<button type="button" class="btn btn-link" '.
98
- 'data-toggle="popover" data-placement="left" '.
99
- 'data-customClass="audit-meta" '.
100
- 'data-rid="%s">%s</button>', $this->log->rid,
101
  sprintf( '<span class="meta-icon">%s</span>',
102
  $this->getCon()->svgs->raw( 'bootstrap/tags.svg' )
103
  )
94
 
95
  private function getColumnContent_Meta() :string {
96
  return sprintf(
97
+ '<button type="button" class="btn btn-link"'.
98
+ ' data-toggle="popover"'.
99
+ ' data-rid="%s">%s</button>', $this->log->rid,
 
100
  sprintf( '<span class="meta-icon">%s</span>',
101
  $this->getCon()->svgs->raw( 'bootstrap/tags.svg' )
102
  )
src/lib/src/Modules/AuditTrail/ModCon.php CHANGED
@@ -137,12 +137,4 @@ class ModCon extends BaseShield\ModCon {
137
  }
138
  return $data;
139
  }
140
-
141
- /**
142
- * @inheritDoc
143
- * @deprecated 13.0
144
- */
145
- public function getDbHandlers( $bInitAll = false ) {
146
- return [];
147
- }
148
  }
137
  }
138
  return $data;
139
  }
 
 
 
 
 
 
 
 
140
  }
src/lib/src/Modules/AuditTrail/WpCli.php CHANGED
@@ -3,16 +3,13 @@
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\AuditTrail;
4
 
5
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\AuditTrail;
6
- use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
7
 
8
- class WpCli extends Base\WpCli {
9
 
10
- /**
11
- * @inheritDoc
12
- */
13
- protected function getCmdHandlers() :array {
14
  return [
15
- new AuditTrail\WpCli\Display()
16
  ];
17
  }
18
  }
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\AuditTrail;
4
 
5
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\AuditTrail;
6
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\BaseShield;
7
 
8
+ class WpCli extends BaseShield\WpCli {
9
 
10
+ protected function enumCmdHandlers() :array {
 
 
 
11
  return [
12
+ AuditTrail\WpCli\Display::class
13
  ];
14
  }
15
  }
src/lib/src/Modules/Base/ModCon.php CHANGED
@@ -114,7 +114,7 @@ abstract class ModCon {
114
  add_action( $con->prefix( 'run_processors' ), [ $this, 'onRunProcessors' ], $nRunPriority );
115
 
116
  add_action( 'init', [ $this, 'onWpInit' ], 1 );
117
- add_action( 'init', [ $this, 'onWpLoaded' ], 1 );
118
 
119
  add_action( $con->prefix( 'plugin_shutdown' ), [ $this, 'onPluginShutdown' ] );
120
  add_action( $con->prefix( 'deactivate_plugin' ), [ $this, 'onPluginDeactivate' ] );
@@ -705,11 +705,9 @@ abstract class ModCon {
705
  }
706
 
707
  /**
708
- * @param string $action
709
- * @param bool $asJson
710
  * @return array|string
711
  */
712
- public function getAjaxActionData( string $action = '', $asJson = false ) {
713
  $data = $this->getNonceActionData( $action );
714
  $data[ 'ajaxurl' ] = admin_url( 'admin-ajax.php' );
715
  return $asJson ? json_encode( (object)$data ) : $data;
@@ -808,18 +806,6 @@ abstract class ModCon {
808
  $this->getOptions()->deleteStorage();
809
  }
810
 
811
- /**
812
- * @deprecated 13.0.6
813
- */
814
- protected function getAllFormOptionsAndTypes() :array {
815
- return array_map(
816
- function ( $optDef ) {
817
- return $optDef[ 'type' ];
818
- },
819
- $this->getOptions()->getVisibleOptions()
820
- );
821
- }
822
-
823
  protected function handleModAction( string $action ) {
824
  switch ( $action ) {
825
  case 'file_download':
@@ -866,16 +852,18 @@ abstract class ModCon {
866
  }
867
 
868
  /**
869
- * @param string $msg
870
- * @param bool $isError
871
- * @param bool $bShowOnLogin
 
872
  * @return $this
873
  */
874
- public function setFlashAdminNotice( $msg, $isError = false, $bShowOnLogin = false ) {
875
  $this->getCon()
876
  ->getAdminNotices()
877
  ->addFlash(
878
  sprintf( '[%s] %s', $this->getCon()->getHumanName(), $msg ),
 
879
  $isError,
880
  $bShowOnLogin
881
  );
@@ -1290,14 +1278,10 @@ abstract class ModCon {
1290
 
1291
  /**
1292
  * @return Shield\Modules\Base\WpCli
1293
- * @throws \Exception
1294
  */
1295
  public function getWpCli() {
1296
  if ( !isset( $this->oWpCli ) ) {
1297
  $this->oWpCli = $this->loadModElement( 'WpCli' );
1298
- if ( !$this->oWpCli instanceof Shield\Modules\Base\WpCli ) {
1299
- throw new \Exception( 'WP-CLI not supported' );
1300
- }
1301
  }
1302
  return $this->oWpCli;
1303
  }
114
  add_action( $con->prefix( 'run_processors' ), [ $this, 'onRunProcessors' ], $nRunPriority );
115
 
116
  add_action( 'init', [ $this, 'onWpInit' ], 1 );
117
+ add_action( 'init', [ $this, 'onWpLoaded' ] );
118
 
119
  add_action( $con->prefix( 'plugin_shutdown' ), [ $this, 'onPluginShutdown' ] );
120
  add_action( $con->prefix( 'deactivate_plugin' ), [ $this, 'onPluginDeactivate' ] );
705
  }
706
 
707
  /**
 
 
708
  * @return array|string
709
  */
710
+ public function getAjaxActionData( string $action = '', bool $asJson = false ) {
711
  $data = $this->getNonceActionData( $action );
712
  $data[ 'ajaxurl' ] = admin_url( 'admin-ajax.php' );
713
  return $asJson ? json_encode( (object)$data ) : $data;
806
  $this->getOptions()->deleteStorage();
807
  }
808
 
 
 
 
 
 
 
 
 
 
 
 
 
809
  protected function handleModAction( string $action ) {
810
  switch ( $action ) {
811
  case 'file_download':
852
  }
853
 
854
  /**
855
+ * @param string $msg
856
+ * @param \WP_User|null $user
857
+ * @param bool $isError
858
+ * @param bool $bShowOnLogin
859
  * @return $this
860
  */
861
+ public function setFlashAdminNotice( $msg, $user = null, $isError = false, $bShowOnLogin = false ) {
862
  $this->getCon()
863
  ->getAdminNotices()
864
  ->addFlash(
865
  sprintf( '[%s] %s', $this->getCon()->getHumanName(), $msg ),
866
+ $user,
867
  $isError,
868
  $bShowOnLogin
869
  );
1278
 
1279
  /**
1280
  * @return Shield\Modules\Base\WpCli
 
1281
  */
1282
  public function getWpCli() {
1283
  if ( !isset( $this->oWpCli ) ) {
1284
  $this->oWpCli = $this->loadModElement( 'WpCli' );
 
 
 
1285
  }
1286
  return $this->oWpCli;
1287
  }
src/lib/src/Modules/Base/Options.php CHANGED
@@ -159,6 +159,9 @@ class Options {
159
  return ( $this->getRawData_FullFeatureConfig()[ 'properties' ] ?? [] )[ $property ] ?? null;
160
  }
161
 
 
 
 
162
  public function getWpCliCfg() :array {
163
  return array_merge(
164
  [
@@ -199,12 +202,32 @@ class Options {
199
  return in_array( $key, $this->getOptionsKeys() );
200
  }
201
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
202
  public function isValidOptionValueType( string $key, $value ) :bool {
203
  switch ( $this->getOptionType( $key ) ) {
204
  case 'array':
205
  case 'multiple_select':
206
  $valid = is_array( $value );
207
  break;
 
 
 
208
  default:
209
  $valid = true;
210
  break;
@@ -323,20 +346,6 @@ class Options {
323
  }, $this->getVisibleOptions() );
324
  }
325
 
326
- /**
327
- * @deprecated 13.0.6
328
- */
329
- public function getOptionsForPluginUse() :array {
330
- return [];
331
- }
332
-
333
- /**
334
- * @deprecated 13.0.6
335
- */
336
- protected function getOptionsForSection( string $slug ) :array {
337
- return [];
338
- }
339
-
340
  public function getAdditionalMenuItems() :array {
341
  return $this->getRawData_FullFeatureConfig()[ 'menu_items' ] ?? [];
342
  }
@@ -364,7 +373,8 @@ class Options {
364
  $value = $this->getOptDefault( $key, $mDefault );
365
  $this->setOpt( $key, $value );
366
  }
367
- return $this->aOptionsValues[ $key ] ?? $mDefault;
 
368
  }
369
 
370
  /**
159
  return ( $this->getRawData_FullFeatureConfig()[ 'properties' ] ?? [] )[ $property ] ?? null;
160
  }
161
 
162
+ /**
163
+ * @deprecated 14.0
164
+ */
165
  public function getWpCliCfg() :array {
166
  return array_merge(
167
  [
202
  return in_array( $key, $this->getOptionsKeys() );
203
  }
204
 
205
+ public function ensureOptValueType( string $key, $value ) {
206
+ switch ( $this->getOptionType( $key ) ) {
207
+ case 'boolean':
208
+ $value = (bool)$value;
209
+ break;
210
+ case 'integer':
211
+ $value = (int)$value;
212
+ break;
213
+ case 'text':
214
+ $value = (string)$value;
215
+ break;
216
+ default:
217
+ break;
218
+ }
219
+ return $value;
220
+ }
221
+
222
  public function isValidOptionValueType( string $key, $value ) :bool {
223
  switch ( $this->getOptionType( $key ) ) {
224
  case 'array':
225
  case 'multiple_select':
226
  $valid = is_array( $value );
227
  break;
228
+ case 'integer':
229
+ $valid = is_numeric( $value );
230
+ break;
231
  default:
232
  $valid = true;
233
  break;
346
  }, $this->getVisibleOptions() );
347
  }
348
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
349
  public function getAdditionalMenuItems() :array {
350
  return $this->getRawData_FullFeatureConfig()[ 'menu_items' ] ?? [];
351
  }
373
  $value = $this->getOptDefault( $key, $mDefault );
374
  $this->setOpt( $key, $value );
375
  }
376
+
377
+ return $this->ensureOptValueType( $key, $this->aOptionsValues[ $key ] ?? $mDefault );
378
  }
379
 
380
  /**
src/lib/src/Modules/Base/Options/BuildForDisplay.php CHANGED
@@ -220,9 +220,7 @@ class BuildForDisplay {
220
 
221
  case 'file_locker':
222
  if ( !Services::Data()->isWindows() ) {
223
- error_log( var_export( $option[ 'value_options' ][ 'root_webconfig' ], true ) );
224
  $option[ 'value_options' ][ 'root_webconfig' ] .= sprintf( ' (%s)', __( 'unavailable', 'wp-simple-firewall' ) );
225
- error_log( var_export( $option, true ) );
226
  }
227
  break;
228
 
220
 
221
  case 'file_locker':
222
  if ( !Services::Data()->isWindows() ) {
 
223
  $option[ 'value_options' ][ 'root_webconfig' ] .= sprintf( ' (%s)', __( 'unavailable', 'wp-simple-firewall' ) );
 
224
  }
225
  break;
226
 
src/lib/src/Modules/Base/Strings.php CHANGED
@@ -81,7 +81,7 @@ class Strings {
81
 
82
  'mode' => __( 'Mode', 'wp-simple-firewall' ),
83
  'mode_simple' => __( 'Simple', 'wp-simple-firewall' ),
84
- 'mode_advanced' => __( '', 'wp-simple-firewall' ),
85
  'mode_switchto' => sprintf( '%s: %s', __( 'Switch To', 'wp-simple-firewall' ),
86
  $bIsAdvanced ? __( 'Simple', 'wp-simple-firewall' ) : __( 'Advanced', 'wp-simple-firewall' ) ),
87
  'mode_switchfrom' => sprintf( '%s: %s', __( 'Mode', 'wp-simple-firewall' ),
81
 
82
  'mode' => __( 'Mode', 'wp-simple-firewall' ),
83
  'mode_simple' => __( 'Simple', 'wp-simple-firewall' ),
84
+ 'mode_advanced' => __( 'Advanced', 'wp-simple-firewall' ),
85
  'mode_switchto' => sprintf( '%s: %s', __( 'Switch To', 'wp-simple-firewall' ),
86
  $bIsAdvanced ? __( 'Simple', 'wp-simple-firewall' ) : __( 'Advanced', 'wp-simple-firewall' ) ),
87
  'mode_switchfrom' => sprintf( '%s: %s', __( 'Mode', 'wp-simple-firewall' ),
src/lib/src/Modules/Base/UI.php CHANGED
@@ -107,7 +107,7 @@ class UI {
107
 
108
  'form_action' => Services::Request()->getUri(),
109
  'css_bootstrap' => $urlBuilder->forCss( 'bootstrap' ),
110
- 'css_pages' => $urlBuilder->forCss( 'pages' ),
111
  'css_steps' => $urlBuilder->forCss( 'jquery.steps' ),
112
  'css_fancybox' => $urlBuilder->forCss( 'jquery.fancybox.min' ),
113
  'css_globalplugin' => $urlBuilder->forCss( 'global-plugin' ),
107
 
108
  'form_action' => Services::Request()->getUri(),
109
  'css_bootstrap' => $urlBuilder->forCss( 'bootstrap' ),
110
+ 'css_pages' => $urlBuilder->forCss( 'shield/pages' ),
111
  'css_steps' => $urlBuilder->forCss( 'jquery.steps' ),
112
  'css_fancybox' => $urlBuilder->forCss( 'jquery.fancybox.min' ),
113
  'css_globalplugin' => $urlBuilder->forCss( 'global-plugin' ),
src/lib/src/Modules/Base/WpCli.php CHANGED
@@ -4,38 +4,58 @@ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
4
 
5
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base\Common\ExecOnceModConsumer;
6
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base\WpCli\ModuleStandard;
 
7
 
8
  class WpCli extends ExecOnceModConsumer {
9
 
 
 
 
 
 
 
10
  protected function run() {
11
  try {
12
- foreach ( $this->getAllCmdHandlers() as $handler ) {
13
- $handler->execute();
14
- }
 
 
 
 
 
15
  }
16
  catch ( \Exception $e ) {
17
  }
18
  }
19
 
20
  /**
21
- * @return WpCli[]
22
  */
23
  protected function getAllCmdHandlers() :array {
24
- return array_map(
25
- function ( $handler ) {
26
- return $handler->setMod( $this->getMod() );
27
- },
28
- array_merge(
29
- [ new ModuleStandard() ],
30
- $this->getCmdHandlers()
31
- )
32
- );
33
  }
34
 
35
  /**
36
- * @return WpCli[]
37
  */
38
- protected function getCmdHandlers() :array {
39
  return [];
40
  }
 
 
 
 
 
 
 
 
 
 
 
 
41
  }
4
 
5
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base\Common\ExecOnceModConsumer;
6
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base\WpCli\ModuleStandard;
7
+ use FernleafSystems\Wordpress\Services\Services;
8
 
9
  class WpCli extends ExecOnceModConsumer {
10
 
11
+ protected function canRun() :bool {
12
+ return Services::WpGeneral()->isWpCli()
13
+ && $this->getCfg()[ 'enabled' ]
14
+ && !empty( $this->getAllCmdHandlers() );
15
+ }
16
+
17
  protected function run() {
18
  try {
19
+ array_map(
20
+ function ( $handlerClass ) {
21
+ return ( new $handlerClass() )
22
+ ->setMod( $this->getMod() )
23
+ ->execute();
24
+ },
25
+ $this->getAllCmdHandlers()
26
+ );
27
  }
28
  catch ( \Exception $e ) {
29
  }
30
  }
31
 
32
  /**
33
+ * @return string[]
34
  */
35
  protected function getAllCmdHandlers() :array {
36
+ $handlers = $this->enumCmdHandlers();
37
+ if ( $this->getCfg()[ 'inc_mod_standard' ] ) {
38
+ $handlers[] = ModuleStandard::class;
39
+ }
40
+ return $handlers;
 
 
 
 
41
  }
42
 
43
  /**
44
+ * @return string[] - FQ class names
45
  */
46
+ protected function enumCmdHandlers() :array {
47
  return [];
48
  }
49
+
50
+ public function getCfg() :array {
51
+ return array_merge(
52
+ [
53
+ 'enabled' => false,
54
+ 'cmd_root' => $this->getCon()->getPluginPrefix(),
55
+ 'cmd_base' => $this->getMod()->getSlug(),
56
+ 'inc_mod_standard' => false,
57
+ ],
58
+ $this->getOptions()->getRawData_FullFeatureConfig()[ 'wpcli' ] ?? []
59
+ );
60
+ }
61
  }
src/lib/src/Modules/Base/WpCli/BaseWpCliCmd.php CHANGED
@@ -2,21 +2,15 @@
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Base\WpCli;
4
 
5
- use FernleafSystems\Wordpress\Plugin\Shield\Modules\ModConsumer;
6
- use FernleafSystems\Wordpress\Plugin\Shield\Modules\Plugin\Options;
7
  use FernleafSystems\Wordpress\Services\Services;
8
 
9
- abstract class BaseWpCliCmd {
10
-
11
- use ModConsumer;
12
- use \FernleafSystems\Utilities\Logic\ExecOnce;
13
 
14
  protected function canRun() :bool {
15
- /** @var Options $pluginModOpts */
16
- $pluginModOpts = $this->getCon()
17
- ->getModule_Plugin()
18
- ->getOptions();
19
- return $this->getOptions()->getWpCliCfg()[ 'enabled' ] && $pluginModOpts->isEnabledWpcli();
20
  }
21
 
22
  /**
@@ -35,20 +29,19 @@ abstract class BaseWpCliCmd {
35
 
36
  protected function buildCmd( array $parts ) :string {
37
  return implode( ' ',
38
- array_filter( array_merge( $this->getBaseCmdParts(), $parts ) )
39
  );
40
  }
41
 
42
  /**
43
  * @return string[]
44
  */
45
- protected function getBaseCmdParts() :array {
46
- return [ 'shield', $this->getBaseCmdKey() ];
47
- }
48
-
49
- protected function getBaseCmdKey() :string {
50
- $root = $this->getOptions()->getWpCliCfg()[ 'root' ];
51
- return empty( $root ) ? $this->getMod()->getModSlug( false ) : $root;
52
  }
53
 
54
  protected function mergeCommonCmdArgs( array $args ) :array {
@@ -74,22 +67,20 @@ abstract class BaseWpCliCmd {
74
  }
75
 
76
  /**
77
- * @param array $args
78
- * @return \WP_User
79
  * @throws \WP_CLI\ExitException
80
  */
81
  protected function loadUserFromArgs( array $args ) :\WP_User {
82
- $oWpUsers = Services::WpUsers();
83
 
84
  $user = null;
85
  if ( isset( $args[ 'uid' ] ) ) {
86
- $user = $oWpUsers->getUserById( $args[ 'uid' ] );
87
  }
88
  elseif ( isset( $args[ 'email' ] ) ) {
89
- $user = $oWpUsers->getUserByEmail( $args[ 'email' ] );
90
  }
91
  elseif ( isset( $args[ 'username' ] ) ) {
92
- $user = $oWpUsers->getUserByUsername( $args[ 'username' ] );
93
  }
94
 
95
  if ( !$user instanceof \WP_User || $user->ID < 1 ) {
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Base\WpCli;
4
 
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base\Common\ExecOnceModConsumer;
 
6
  use FernleafSystems\Wordpress\Services\Services;
7
 
8
+ abstract class BaseWpCliCmd extends ExecOnceModConsumer {
 
 
 
9
 
10
  protected function canRun() :bool {
11
+ return $this->getMod()
12
+ ->getWpCli()
13
+ ->getCfg()[ 'enabled' ];
 
 
14
  }
15
 
16
  /**
29
 
30
  protected function buildCmd( array $parts ) :string {
31
  return implode( ' ',
32
+ array_filter( array_merge( $this->getCmdBase(), $parts ) )
33
  );
34
  }
35
 
36
  /**
37
  * @return string[]
38
  */
39
+ protected function getCmdBase() :array {
40
+ $cfg = $this->getMod()->getWpCli()->getCfg();
41
+ return [
42
+ $cfg[ 'cmd_root' ],
43
+ $cfg[ 'cmd_base' ]
44
+ ];
 
45
  }
46
 
47
  protected function mergeCommonCmdArgs( array $args ) :array {
67
  }
68
 
69
  /**
 
 
70
  * @throws \WP_CLI\ExitException
71
  */
72
  protected function loadUserFromArgs( array $args ) :\WP_User {
73
+ $WPU = Services::WpUsers();
74
 
75
  $user = null;
76
  if ( isset( $args[ 'uid' ] ) ) {
77
+ $user = $WPU->getUserById( $args[ 'uid' ] );
78
  }
79
  elseif ( isset( $args[ 'email' ] ) ) {
80
+ $user = $WPU->getUserByEmail( $args[ 'email' ] );
81
  }
82
  elseif ( isset( $args[ 'username' ] ) ) {
83
+ $user = $WPU->getUserByUsername( $args[ 'username' ] );
84
  }
85
 
86
  if ( !$user instanceof \WP_User || $user->ID < 1 ) {
src/lib/src/Modules/Base/WpCli/ModuleStandard.php CHANGED
@@ -5,7 +5,7 @@ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Base\WpCli;
5
  class ModuleStandard extends BaseWpCliCmd {
6
 
7
  /**
8
- * @throws \Exception
9
  */
10
  protected function addCmds() {
11
  \WP_CLI::add_command(
@@ -149,52 +149,48 @@ class ModuleStandard extends BaseWpCliCmd {
149
  }
150
  }
151
 
152
- /**
153
- * @param array $null
154
- * @param array $args
155
- */
156
  public function cmdOptSet( array $null, array $args ) {
157
  $this->getOptions()->setOpt( $args[ 'key' ], $args[ 'value' ] );
158
  \WP_CLI::success( 'Option updated.' );
159
  }
160
 
161
  public function cmdOptList( array $null, array $args ) {
162
- $oOpts = $this->getOptions();
163
- $oStrings = $this->getMod()->getStrings();
164
- $opts = [];
165
- foreach ( $oOpts->getOptionsForWpCli() as $sKey ) {
166
  try {
167
- $opts[] = [
168
- 'key' => $sKey,
169
- 'name' => $oStrings->getOptionStrings( $sKey )[ 'name' ],
170
- 'type' => $oOpts->getOptionType( $sKey ),
171
- 'current' => $oOpts->getOpt( $sKey ),
172
- 'default' => $oOpts->getOptDefault( $sKey ),
173
  ];
174
  }
175
  catch ( \Exception $e ) {
176
  }
177
  }
178
 
179
- if ( empty( $opts ) ) {
180
  \WP_CLI::log( "This module doesn't have any configurable options." );
181
  }
182
  else {
183
  if ( !\WP_CLI\Utils\get_flag_value( $args, 'full', false ) ) {
184
- $aKeys = [
185
  'key',
186
  'name',
187
  'current'
188
  ];
189
  }
190
  else {
191
- $aKeys = array_keys( $opts[ 0 ] );
192
  }
193
 
194
  \WP_CLI\Utils\format_items(
195
  $args[ 'format' ],
196
- $opts,
197
- $aKeys
198
  );
199
  }
200
  }
5
  class ModuleStandard extends BaseWpCliCmd {
6
 
7
  /**
8
+ * @inheritDoc
9
  */
10
  protected function addCmds() {
11
  \WP_CLI::add_command(
149
  }
150
  }
151
 
 
 
 
 
152
  public function cmdOptSet( array $null, array $args ) {
153
  $this->getOptions()->setOpt( $args[ 'key' ], $args[ 'value' ] );
154
  \WP_CLI::success( 'Option updated.' );
155
  }
156
 
157
  public function cmdOptList( array $null, array $args ) {
158
+ $opts = $this->getOptions();
159
+ $strings = $this->getMod()->getStrings();
160
+ $optsList = [];
161
+ foreach ( $opts->getOptionsForWpCli() as $key ) {
162
  try {
163
+ $optsList[] = [
164
+ 'key' => $key,
165
+ 'name' => $strings->getOptionStrings( $key )[ 'name' ],
166
+ 'type' => $opts->getOptionType( $key ),
167
+ 'current' => $opts->getOpt( $key ),
168
+ 'default' => $opts->getOptDefault( $key ),
169
  ];
170
  }
171
  catch ( \Exception $e ) {
172
  }
173
  }
174
 
175
+ if ( empty( $optsList ) ) {
176
  \WP_CLI::log( "This module doesn't have any configurable options." );
177
  }
178
  else {
179
  if ( !\WP_CLI\Utils\get_flag_value( $args, 'full', false ) ) {
180
+ $allKeys = [
181
  'key',
182
  'name',
183
  'current'
184
  ];
185
  }
186
  else {
187
+ $allKeys = array_keys( $optsList[ 0 ] );
188
  }
189
 
190
  \WP_CLI\Utils\format_items(
191
  $args[ 'format' ],
192
+ $optsList,
193
+ $allKeys
194
  );
195
  }
196
  }
src/lib/src/Modules/BaseShield/WpCli.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare( strict_types=1 );
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\BaseShield;
4
+
5
+ class WpCli extends \FernleafSystems\Wordpress\Plugin\Shield\Modules\Base\WpCli {
6
+
7
+ public function getCfg() :array {
8
+ $cfg = parent::getCfg();
9
+ $cfg[ 'cmd_root' ] = 'shield';
10
+ return $cfg;
11
+ }
12
+ }
src/lib/src/Modules/Data/DB/UserMeta/MetaRecords.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare( strict_types=1 );
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Data\DB\UserMeta;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\Data\ModCon;
6
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\ModConsumer;
7
+
8
+ class MetaRecords {
9
+
10
+ use ModConsumer;
11
+
12
+ /**
13
+ * @return Ops\Record|null
14
+ */
15
+ public function loadMeta( int $userID, bool $autoCreate = true ) {
16
+ /** @var ModCon $mod */
17
+ $mod = $this->getMod();
18
+ $dbh = $mod->getDbH_UserMeta();
19
+ /** @var Ops\Select $select */
20
+ $select = $dbh->getQuerySelector();
21
+ $record = $select->filterByUser( $userID )->first();
22
+
23
+ if ( empty( $record ) && $autoCreate && $this->addMeta( $userID ) ) {
24
+ $record = $this->loadMeta( $userID, false );
25
+ }
26
+
27
+ if ( !empty( $record ) ) {
28
+ $record->setDbHandler( $dbh );
29
+ }
30
+
31
+ return $record;
32
+ }
33
+
34
+ public function addMeta( int $userID ) :bool {
35
+ /** @var ModCon $mod */
36
+ $mod = $this->getMod();
37
+ $dbh = $mod->getDbH_UserMeta();
38
+ /** @var Ops\Insert $insert */
39
+ $insert = $dbh->getQueryInserter();
40
+ /** @var Ops\Record $record */
41
+ $record = $dbh->getRecord();
42
+ $record->user_id = $userID;
43
+ return $insert->insert( $record );
44
+ }
45
+ }
src/lib/src/Modules/Data/DB/UserMeta/Ops/Common.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare( strict_types=1 );
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Data\DB\UserMeta\Ops;
4
+
5
+ trait Common {
6
+
7
+ public function filterByUser( int $userID ) {
8
+ return $this->addWhereEquals( 'user_id', $userID );
9
+ }
10
+
11
+ public function filterByHardSuspended() {
12
+ return $this->addWhereNewerThan( 0, 'hard_suspended_at' );
13
+ }
14
+
15
+ public function filterByPassExpired( int $expiresAt ) {
16
+ return $this->addWhereOlderThan( $expiresAt, 'pass_started_at' );
17
+ }
18
+
19
+ public function filterByIdle( int $expiresAt ) {
20
+ return $this->addWhereOlderThan( $expiresAt, 'first_seen_at' )
21
+ ->addWhereOlderThan( $expiresAt, 'last_login_at' )
22
+ ->addWhereOlderThan( $expiresAt, 'pass_started_at' );
23
+ }
24
+ }
src/lib/src/Modules/Data/DB/UserMeta/Ops/Delete.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare( strict_types=1 );
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Data\DB\UserMeta\Ops;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Core\Databases\Base;
6
+
7
+ class Delete extends Base\Delete {
8
+
9
+ use Common;
10
+ }
src/lib/src/Modules/Data/DB/UserMeta/Ops/Handler.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php declare( strict_types=1 );
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Data\DB\UserMeta\Ops;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Core\Databases\Base;
6
+
7
+ class Handler extends Base\Handler {
8
+
9
+ }
src/lib/src/Modules/Data/DB/UserMeta/Ops/Insert.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php declare( strict_types=1 );
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Data\DB\UserMeta\Ops;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Core\Databases\Base;
6
+
7
+ class Insert extends Base\Insert {
8
+
9
+ }
src/lib/src/Modules/Data/DB/UserMeta/Ops/Record.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare( strict_types=1 );
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Data\DB\UserMeta\Ops;
4
+
5
+ /**
6
+ * @property int $user_id
7
+ * @property int $first_seen_at
8
+ * @property int $last_login_at
9
+ * @property int $last_2fa_verified_at
10
+ * @property int $hard_suspended_at
11
+ * @property int $pass_started_at
12
+ */
13
+ class Record extends \FernleafSystems\Wordpress\Plugin\Core\Databases\Base\Record {
14
+
15
+ /**
16
+ * @param string $key
17
+ * @param mixed $value
18
+ */
19
+ public function __set( string $key, $value ) {
20
+ $dbh = $this->getDbHandler();
21
+ if ( isset( $this->id ) && !empty( $dbh ) ) {
22
+ $dbh->getQueryUpdater()
23
+ ->updateRecord( $this, [
24
+ $key => $value
25
+ ] );
26
+ }
27
+ parent::__set( $key, $value );
28
+ }
29
+ }
src/lib/src/Modules/Data/DB/UserMeta/Ops/Select.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare( strict_types=1 );
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Data\DB\UserMeta\Ops;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Core\Databases\Base;
6
+
7
+ class Select extends Base\Select {
8
+
9
+ use Common;
10
+ }
src/lib/src/Modules/Data/ModCon.php CHANGED
@@ -14,6 +14,10 @@ class ModCon extends BaseShield\ModCon {
14
  return $this->getDbHandler()->loadDbH( 'ips' );
15
  }
16
 
 
 
 
 
17
  public function getDbH_ReqLogs() :DB\ReqLogs\Ops\Handler {
18
  $this->getDbH_IPs();
19
  return $this->getDbHandler()->loadDbH( 'req_logs' );
@@ -46,5 +50,7 @@ class ModCon extends BaseShield\ModCon {
46
  ) )
47
  )
48
  ->query();
 
 
49
  }
50
  }
14
  return $this->getDbHandler()->loadDbH( 'ips' );
15
  }
16
 
17
+ public function getDbH_UserMeta() :DB\UserMeta\Ops\Handler {
18
+ return $this->getDbHandler()->loadDbH( 'user_meta' );
19
+ }
20
+
21
  public function getDbH_ReqLogs() :DB\ReqLogs\Ops\Handler {
22
  $this->getDbH_IPs();
23
  return $this->getDbHandler()->loadDbH( 'req_logs' );
50
  ) )
51
  )
52
  ->query();
53
+
54
+ // TODO 3. Clean User Meta.
55
  }
56
  }
src/lib/src/Modules/Events/Lib/EventsListener.php CHANGED
@@ -3,6 +3,7 @@
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Events\Lib;
4
 
5
  use FernleafSystems\Wordpress\Plugin\Shield\Controller;
 
6
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\PluginControllerConsumer;
7
 
8
  abstract class EventsListener {
@@ -12,17 +13,21 @@ abstract class EventsListener {
12
  /**
13
  * @var bool
14
  */
15
- private $bCommit = false;
16
 
17
  /**
18
- * EventsListener constructor.
19
  * @param Controller\Controller $con
 
20
  */
21
- public function __construct( $con ) {
 
 
 
22
  $this->setCon( $con );
 
23
 
24
- add_action( $con->prefix( 'event' ),
25
- function ( $event, $meta = [], $def = [] ) use ( $con ) {
26
  $this->captureEvent(
27
  (string)$event,
28
  is_array( $meta ) ? $meta : [],
@@ -46,19 +51,15 @@ abstract class EventsListener {
46
 
47
  }
48
 
49
- /**
50
- * @return bool
51
- */
52
- public function isCommit() {
53
- return (bool)$this->bCommit;
54
  }
55
 
56
  /**
57
- * @param bool $bCommit
58
  * @return $this
59
  */
60
- public function setIfCommit( $bCommit ) {
61
- $this->bCommit = $bCommit;
62
  return $this;
63
  }
64
  }
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Events\Lib;
4
 
5
  use FernleafSystems\Wordpress\Plugin\Shield\Controller;
6
+ use FernleafSystems\Wordpress\Plugin\Shield\Functions;
7
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\PluginControllerConsumer;
8
 
9
  abstract class EventsListener {
13
  /**
14
  * @var bool
15
  */
16
+ private $commit;
17
 
18
  /**
 
19
  * @param Controller\Controller $con
20
+ * @throws \Exception
21
  */
22
+ public function __construct( $con = null, bool $commit = false ) {
23
+ if ( !$con instanceof Controller\Controller ) {
24
+ $con = Functions\get_plugin()->getController();
25
+ }
26
  $this->setCon( $con );
27
+ $this->commit = $commit;
28
 
29
+ add_action( 'shield/event',
30
+ function ( $event, $meta = [], $def = [] ) {
31
  $this->captureEvent(
32
  (string)$event,
33
  is_array( $meta ) ? $meta : [],
51
 
52
  }
53
 
54
+ public function isCommit() :bool {
55
+ return $this->commit;
 
 
 
56
  }
57
 
58
  /**
 
59
  * @return $this
60
  */
61
+ public function setIfCommit( bool $commit ) {
62
+ $this->commit = $commit;
63
  return $this;
64
  }
65
  }
src/lib/src/Modules/Events/Lib/EventsService.php CHANGED
@@ -22,7 +22,7 @@ class EventsService {
22
  try {
23
  $this->verifyAuditParams( $event, $meta );
24
  do_action(
25
- $this->getCon()->prefix( 'event' ),
26
  $event,
27
  $meta,
28
  $this->getEventDef( $event )
@@ -136,13 +136,4 @@ class EventsService {
136
  }
137
  return $events;
138
  }
139
-
140
- /**
141
- * @param string $eventKey
142
- * @return bool
143
- * @deprecated 12.1
144
- */
145
- public function isSupportedEvent( string $eventKey ) :bool {
146
- return array_key_exists( $eventKey, $this->getEvents() );
147
- }
148
  }
22
  try {
23
  $this->verifyAuditParams( $event, $meta );
24
  do_action(
25
+ 'shield/event',
26
  $event,
27
  $meta,
28
  $this->getEventDef( $event )
136
  }
137
  return $events;
138
  }
 
 
 
 
 
 
 
 
 
139
  }
src/lib/src/Modules/HackGuard/Lib/FileLocker/FileLockerController.php CHANGED
@@ -207,16 +207,6 @@ class FileLockerController {
207
  }
208
  }
209
 
210
- /**
211
- * @param string $fileKey
212
- * @return File
213
- * @throws \Exception
214
- * @deprecated 12.0.10
215
- */
216
- private function getFile( string $fileKey ) :File {
217
- return ( new Lib\FileLocker\Ops\BuildFileFromFileKey() )->build( $fileKey );
218
- }
219
-
220
  protected function getState() :array {
221
  /** @var HackGuard\Options $opts */
222
  $opts = $this->getOptions();
207
  }
208
  }
209
 
 
 
 
 
 
 
 
 
 
 
210
  protected function getState() :array {
211
  /** @var HackGuard\Options $opts */
212
  $opts = $this->getOptions();
src/lib/src/Modules/HackGuard/Lib/Snapshots/StoreAction/Base.php ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare( strict_types=1 );
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\Snapshots\StoreAction;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\ModConsumer;
6
+
7
+ class Base {
8
+
9
+ use ModConsumer;
10
+
11
+ protected function isTempDirAvailable() :bool {
12
+ return !empty( $this->getTempDir() );
13
+ }
14
+
15
+ protected function getTempDir() :string {
16
+ return $this->getCon()->cache_dir_handler->buildSubDir( 'ptguard' );
17
+ }
18
+ }
src/lib/src/Modules/HackGuard/Lib/Snapshots/StoreAction/BaseAction.php CHANGED
@@ -1,4 +1,4 @@
1
- <?php
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\Snapshots\StoreAction;
4
 
@@ -8,7 +8,7 @@ use FernleafSystems\Wordpress\Plugin\Shield\Modules\ModConsumer;
8
  use FernleafSystems\Wordpress\Services\Core\VOs\Assets\WpPluginVo;
9
  use FernleafSystems\Wordpress\Services\Core\VOs\Assets\WpThemeVo;
10
 
11
- class BaseAction {
12
 
13
  use ModConsumer;
14
 
@@ -34,13 +34,12 @@ class BaseAction {
34
  }
35
 
36
  /**
37
- * @return Snapshots\Store
38
  * @throws \Exception
39
  */
40
- protected function getNewStore() {
41
  /** @var ModCon $mod */
42
  $mod = $this->getMod();
43
  return ( new Snapshots\Store( $this->getAsset() ) )
44
- ->setWorkingDir( $mod->getPtgSnapsBaseDir() );
45
  }
46
  }
1
+ <?php declare( strict_types=1 );
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\Snapshots\StoreAction;
4
 
8
  use FernleafSystems\Wordpress\Services\Core\VOs\Assets\WpPluginVo;
9
  use FernleafSystems\Wordpress\Services\Core\VOs\Assets\WpThemeVo;
10
 
11
+ class BaseAction extends Base {
12
 
13
  use ModConsumer;
14
 
34
  }
35
 
36
  /**
 
37
  * @throws \Exception
38
  */
39
+ protected function getNewStore() :Snapshots\Store {
40
  /** @var ModCon $mod */
41
  $mod = $this->getMod();
42
  return ( new Snapshots\Store( $this->getAsset() ) )
43
+ ->setWorkingDir( $this->getTempDir() );
44
  }
45
  }
src/lib/src/Modules/HackGuard/Lib/Snapshots/StoreAction/BaseBulk.php CHANGED
@@ -4,6 +4,9 @@ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\Snapshot
4
 
5
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\ModConsumer;
6
 
 
 
 
7
  class BaseBulk {
8
 
9
  use ModConsumer;
4
 
5
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\ModConsumer;
6
 
7
+ /**
8
+ * @deprecated 14.0
9
+ */
10
  class BaseBulk {
11
 
12
  use ModConsumer;
src/lib/src/Modules/HackGuard/Lib/Snapshots/StoreAction/CleanStale.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\Snapshots\StoreAction;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\ModCon;
6
+ use FernleafSystems\Wordpress\Plugin\Shield\Scans\Helpers\StandardDirectoryIterator;
7
+ use FernleafSystems\Wordpress\Services\Services;
8
+
9
+ class CleanStale extends Base {
10
+
11
+ public function run() {
12
+ try {
13
+ if ( !$this->isTempDirAvailable() ) {
14
+ throw new \Exception( 'temporary directory is unavailable' );
15
+ }
16
+
17
+ $boundary = Services::Request()
18
+ ->carbon()
19
+ ->subDay()->timestamp;
20
+ $IT = StandardDirectoryIterator::create( $this->getTempDir() );
21
+ foreach ( $IT as $file ) {
22
+ /** @var \SplFileInfo $file */
23
+ if ( $boundary > $file->getMTime() ) {
24
+ Services::WpFs()->deleteFile( $file->getPathname() );
25
+ }
26
+ }
27
+ }
28
+ catch ( \Exception $e ) {
29
+ }
30
+ }
31
+ }
src/lib/src/Modules/HackGuard/Lib/Snapshots/StoreAction/CreateNew.php CHANGED
@@ -1,4 +1,4 @@
1
- <?php
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\Snapshots\StoreAction;
4
 
@@ -8,10 +8,9 @@ class CreateNew extends BaseAction {
8
 
9
  /**
10
  * Will delete any existing stores for the asset
11
- * @return Snapshots\Store
12
  * @throws \Exception
13
  */
14
- public function run() {
15
  ( new Delete() )
16
  ->setMod( $this->getMod() )
17
  ->setAsset( $this->getAsset() )
1
+ <?php declare( strict_types=1 );
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\Snapshots\StoreAction;
4
 
8
 
9
  /**
10
  * Will delete any existing stores for the asset
 
11
  * @throws \Exception
12
  */
13
+ public function run() :Snapshots\Store {
14
  ( new Delete() )
15
  ->setMod( $this->getMod() )
16
  ->setAsset( $this->getAsset() )
src/lib/src/Modules/HackGuard/Lib/Snapshots/StoreAction/DeleteAll.php CHANGED
@@ -1,15 +1,14 @@
1
- <?php
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\Snapshots\StoreAction;
4
 
5
- use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\ModCon;
6
  use FernleafSystems\Wordpress\Services\Services;
7
 
8
- class DeleteAll extends BaseBulk {
9
 
10
  public function run() {
11
- /** @var ModCon $mod */
12
- $mod = $this->getMod();
13
- Services::WpFs()->deleteDir( $mod->getPtgSnapsBaseDir() );
14
  }
15
  }
1
+ <?php declare( strict_types=1 );
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\Snapshots\StoreAction;
4
 
 
5
  use FernleafSystems\Wordpress\Services\Services;
6
 
7
+ class DeleteAll extends Base {
8
 
9
  public function run() {
10
+ if ( $this->isTempDirAvailable() ) {
11
+ Services::WpFs()->deleteDir( $this->getTempDir() );
12
+ }
13
  }
14
  }
src/lib/src/Modules/HackGuard/Lib/Snapshots/StoreAction/Load.php CHANGED
@@ -1,4 +1,4 @@
1
- <?php
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\Snapshots\StoreAction;
4
 
@@ -8,10 +8,9 @@ use FernleafSystems\Wordpress\Services\Services;
8
  class Load extends BaseAction {
9
 
10
  /**
11
- * @return Snapshots\Store
12
  * @throws \Exception
13
  */
14
- public function run() {
15
  $store = $this->getNewStore();
16
 
17
  foreach ( [ $store->getSnapStorePath(), $store->getSnapStoreMetaPath() ] as $path ) {
1
+ <?php declare( strict_types=1 );
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\Snapshots\StoreAction;
4
 
8
  class Load extends BaseAction {
9
 
10
  /**
 
11
  * @throws \Exception
12
  */
13
+ public function run() :Snapshots\Store {
14
  $store = $this->getNewStore();
15
 
16
  foreach ( [ $store->getSnapStorePath(), $store->getSnapStoreMetaPath() ] as $path ) {
src/lib/src/Modules/HackGuard/Lib/Snapshots/StoreAction/ScheduleBuildAll.php CHANGED
@@ -10,8 +10,25 @@ use FernleafSystems\Wordpress\Services\Core\VOs\Assets\{
10
  };
11
  use FernleafSystems\Wordpress\Services\Services;
12
 
13
- class ScheduleBuildAll extends BaseBulk {
14
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  public function build() {
16
  foreach ( $this->getAssetsThatNeedBuilt() as $asset ) {
17
  try {
@@ -46,18 +63,6 @@ class ScheduleBuildAll extends BaseBulk {
46
  }
47
  }
48
 
49
- public function schedule() {
50
- if ( count( $this->getAssetsThatNeedBuilt() ) > 0 ) {
51
- $hook = $this->getCronHook();
52
- if ( is_main_network() ) {
53
- add_action( $hook, [ $this, 'build' ] );
54
- }
55
- if ( wp_next_scheduled( $hook ) === false ) {
56
- wp_schedule_single_event( Services::Request()->ts() + 60, $hook );
57
- }
58
- }
59
- }
60
-
61
  /**
62
  * Only those that don't have a meta file or the versions are different
63
  * @return WpPluginVo[]|WpThemeVo[]
@@ -88,10 +93,4 @@ class ScheduleBuildAll extends BaseBulk {
88
  private function getCronHook() :string {
89
  return $this->getCon()->prefix( 'ptg_build_snapshots' );
90
  }
91
-
92
- /**
93
- * @deprecated 13.0
94
- */
95
- public function hookBuild() {
96
- }
97
  }
10
  };
11
  use FernleafSystems\Wordpress\Services\Services;
12
 
13
+ class ScheduleBuildAll extends Base {
14
 
15
+ public function schedule() {
16
+ if ( $this->isTempDirAvailable() && count( $this->getAssetsThatNeedBuilt() ) > 0 ) {
17
+ $hook = $this->getCronHook();
18
+ if ( is_main_network() ) {
19
+ add_action( $hook, function () {
20
+ $this->build();
21
+ } );
22
+ }
23
+ if ( wp_next_scheduled( $hook ) === false ) {
24
+ wp_schedule_single_event( Services::Request()->ts() + 60, $hook );
25
+ }
26
+ }
27
+ }
28
+
29
+ /**
30
+ * @deprecated 14.0 - make this private
31
+ */
32
  public function build() {
33
  foreach ( $this->getAssetsThatNeedBuilt() as $asset ) {
34
  try {
63
  }
64
  }
65
 
 
 
 
 
 
 
 
 
 
 
 
 
66
  /**
67
  * Only those that don't have a meta file or the versions are different
68
  * @return WpPluginVo[]|WpThemeVo[]
93
  private function getCronHook() :string {
94
  return $this->getCon()->prefix( 'ptg_build_snapshots' );
95
  }
 
 
 
 
 
 
96
  }
src/lib/src/Modules/HackGuard/Lib/Snapshots/StoreAction/TouchAll.php CHANGED
@@ -5,20 +5,22 @@ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\Snapshot
5
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\Snapshots\FindAssetsToSnap;
6
  use FernleafSystems\Wordpress\Services\Services;
7
 
8
- class TouchAll extends BaseBulk {
9
 
10
  public function run() {
11
- foreach ( ( new FindAssetsToSnap() )->setMod( $this->getMod() )->run() as $asset ) {
12
- try {
13
- $store = ( new Load() )
14
- ->setMod( $this->getMod() )
15
- ->setAsset( $asset )
16
- ->run();
17
- foreach ( [ $store->getSnapStorePath(), $store->getSnapStoreMetaPath() ] as $path ) {
18
- Services::WpFs()->touch( $path );
 
 
 
 
19
  }
20
- }
21
- catch ( \Exception $e ) {
22
  }
23
  }
24
  }
5
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Lib\Snapshots\FindAssetsToSnap;
6
  use FernleafSystems\Wordpress\Services\Services;
7
 
8
+ class TouchAll extends Base {
9
 
10
  public function run() {
11
+ if ( $this->isTempDirAvailable() ) {
12
+ foreach ( ( new FindAssetsToSnap() )->setMod( $this->getMod() )->run() as $asset ) {
13
+ try {
14
+ $store = ( new Load() )
15
+ ->setMod( $this->getMod() )
16
+ ->setAsset( $asset )
17
+ ->run();
18
+ foreach ( [ $store->getSnapStorePath(), $store->getSnapStoreMetaPath() ] as $path ) {
19
+ Services::WpFs()->touch( $path );
20
+ }
21
+ }
22
+ catch ( \Exception $e ) {
23
  }
 
 
24
  }
25
  }
26
  }
src/lib/src/Modules/HackGuard/ModCon.php CHANGED
@@ -210,10 +210,11 @@ class ModCon extends BaseShield\ModCon {
210
  $opts->setOpt( 'ufc_exclusions', array_unique( $excl ) );
211
  }
212
 
 
 
 
213
  public function getPtgSnapsBaseDir() :string {
214
- return ( new CacheDir() )
215
- ->setCon( $this->getCon() )
216
- ->buildSubDir( 'ptguard' );
217
  }
218
 
219
  public function hasWizard() :bool {
@@ -231,21 +232,6 @@ class ModCon extends BaseShield\ModCon {
231
  }
232
 
233
  /**
234
- * @deprecated 12.1
235
- */
236
- public function getDbHandler_ScanQueue() :Databases\ScanQueue\Handler {
237
- return $this->getDbH( 'scanq' );
238
- }
239
-
240
- /**
241
- * @deprecated 12.1
242
- */
243
- public function getDbHandler_ScanResults() :Databases\Scanner\Handler {
244
- return $this->getDbH( 'scanner' );
245
- }
246
-
247
- /**
248
- * @return bool
249
  * @throws \Exception
250
  */
251
  protected function isReadyToExecute() :bool {
@@ -268,7 +254,7 @@ class ModCon extends BaseShield\ModCon {
268
 
269
  /**
270
  * @inheritDoc
271
- * @deprecated 13.0
272
  */
273
  public function getDbHandlers( $bInitAll = false ) {
274
  return [];
210
  $opts->setOpt( 'ufc_exclusions', array_unique( $excl ) );
211
  }
212
 
213
+ /**
214
+ * @deprecated 14.0
215
+ */
216
  public function getPtgSnapsBaseDir() :string {
217
+ return $this->getCon()->cache_dir_handler->buildSubDir( 'ptguard' );
 
 
218
  }
219
 
220
  public function hasWizard() :bool {
232
  }
233
 
234
  /**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
235
  * @throws \Exception
236
  */
237
  protected function isReadyToExecute() :bool {
254
 
255
  /**
256
  * @inheritDoc
257
+ * @deprecated 13.1
258
  */
259
  public function getDbHandlers( $bInitAll = false ) {
260
  return [];
src/lib/src/Modules/HackGuard/Render/ScanResults/SectionMalware.php CHANGED
@@ -2,11 +2,7 @@
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Render\ScanResults;
4
 
5
- use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\{
6
- ModCon,
7
- Scan\Controller\Afs,
8
- Scan\Controller\Mal
9
- };
10
  use FernleafSystems\Wordpress\Plugin\Shield\Scans;
11
  use FernleafSystems\Wordpress\Plugin\Shield\Tables\DataTables\Build\Scans\ForMalware;
12
  use FernleafSystems\Wordpress\Services\Services;
@@ -22,8 +18,6 @@ class SectionMalware extends SectionBase {
22
  }
23
 
24
  protected function buildRenderData() :array {
25
- /** @var ModCon $mod */
26
- $mod = $this->getMod();
27
  $data = $this->buildMalwareData();
28
  return Services::DataManipulation()
29
  ->mergeArraysRecursive( $this->getCommonRenderData(), [
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Render\ScanResults;
4
 
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\ModCon;
 
 
 
 
6
  use FernleafSystems\Wordpress\Plugin\Shield\Scans;
7
  use FernleafSystems\Wordpress\Plugin\Shield\Tables\DataTables\Build\Scans\ForMalware;
8
  use FernleafSystems\Wordpress\Services\Services;
18
  }
19
 
20
  protected function buildRenderData() :array {
 
 
21
  $data = $this->buildMalwareData();
22
  return Services::DataManipulation()
23
  ->mergeArraysRecursive( $this->getCommonRenderData(), [
src/lib/src/Modules/HackGuard/Render/ScanResults/SectionPluginThemesBase.php CHANGED
@@ -4,7 +4,6 @@ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Render\ScanR
4
 
5
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\ModCon;
6
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Scan\Controller\Apc;
7
- use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Scan\Controller\Ptg;
8
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Scan\Controller\Wpv;
9
  use FernleafSystems\Wordpress\Plugin\Shield\Scans;
10
  use FernleafSystems\Wordpress\Plugin\Shield\Tables\DataTables\Build\Scans\ForPluginTheme;
4
 
5
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\ModCon;
6
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Scan\Controller\Apc;
 
7
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Scan\Controller\Wpv;
8
  use FernleafSystems\Wordpress\Plugin\Shield\Scans;
9
  use FernleafSystems\Wordpress\Plugin\Shield\Tables\DataTables\Build\Scans\ForPluginTheme;
src/lib/src/Modules/HackGuard/Scan/Controller/Afs.php CHANGED
@@ -3,13 +3,13 @@
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Scan\Controller;
4
 
5
  use FernleafSystems\Wordpress\Plugin\Shield\Crons\PluginCronsConsumer;
6
- use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\DB\ResultItems;
7
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\{
8
  Lib,
9
  ModCon,
10
  Options,
11
  Scan
12
  };
 
13
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\DB\ResultItems\Ops\Update;
14
  use FernleafSystems\Wordpress\Plugin\Shield\Scans;
15
  use FernleafSystems\Wordpress\Services\Services;
@@ -84,10 +84,10 @@ class Afs extends BaseForFiles {
84
  }
85
 
86
  public function runHourlyCron() {
87
- ( new Lib\Snapshots\StoreAction\TouchAll() )
88
  ->setMod( $this->getMod() )
89
  ->run();
90
- ( new Lib\Snapshots\StoreAction\CleanAll() )
91
  ->setMod( $this->getMod() )
92
  ->run();
93
  }
@@ -210,7 +210,8 @@ class Afs extends BaseForFiles {
210
  }
211
 
212
  public function isEnabledPluginThemeScan() :bool {
213
- return $this->isEnabled() && $this->getCon()->hasCacheDir() && !$this->isRestrictedPluginThemeScan();
 
214
  }
215
 
216
  public function isRestrictedMalwareScan() :bool {
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Scan\Controller;
4
 
5
  use FernleafSystems\Wordpress\Plugin\Shield\Crons\PluginCronsConsumer;
 
6
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\{
7
  Lib,
8
  ModCon,
9
  Options,
10
  Scan
11
  };
12
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\DB\ResultItems;
13
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\DB\ResultItems\Ops\Update;
14
  use FernleafSystems\Wordpress\Plugin\Shield\Scans;
15
  use FernleafSystems\Wordpress\Services\Services;
84
  }
85
 
86
  public function runHourlyCron() {
87
+ ( new Lib\Snapshots\StoreAction\CleanStale() )
88
  ->setMod( $this->getMod() )
89
  ->run();
90
+ ( new Lib\Snapshots\StoreAction\TouchAll() )
91
  ->setMod( $this->getMod() )
92
  ->run();
93
  }
210
  }
211
 
212
  public function isEnabledPluginThemeScan() :bool {
213
+ return $this->isEnabled() && !$this->isRestrictedPluginThemeScan()
214
+ && $this->getCon()->cache_dir_handler->dirExists();
215
  }
216
 
217
  public function isRestrictedMalwareScan() :bool {
src/lib/src/Modules/HackGuard/Scan/Controller/Base.php CHANGED
@@ -282,28 +282,4 @@ abstract class Base extends ExecOnceModConsumer {
282
  abstract public function buildScanAction();
283
 
284
  abstract public function buildScanResult( array $rawResult ) :HackGuard\DB\ResultItems\Ops\Record;
285
-
286
- /**
287
- * @deprecated 12.1
288
- */
289
- public function getScanResultsDbHandler() :Databases\Scanner\Handler {
290
- /** @var ModCon $mod */
291
- $mod = $this->getMod();
292
- return $mod->getDbHandler_ScanResults();
293
- }
294
-
295
- /**
296
- * @param ResultItem|mixed $item
297
- * @deprecated 12.1
298
- */
299
- public function isResultItemStale( $item ) :bool {
300
- return false;
301
- }
302
-
303
- /**
304
- * @deprecated 13.0
305
- */
306
- public function getScanHasProblem() :bool {
307
- return false;
308
- }
309
  }
282
  abstract public function buildScanAction();
283
 
284
  abstract public function buildScanResult( array $rawResult ) :HackGuard\DB\ResultItems\Ops\Record;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
285
  }
src/lib/src/Modules/HackGuard/Scan/Controller/Mal.php DELETED
@@ -1,37 +0,0 @@
1
- <?php
2
-
3
- namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Scan\Controller;
4
-
5
- use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\DB\ResultItems;
6
- use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard;
7
- use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\DB\ResultItems\Ops\Update;
8
- use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\ModCon;
9
- use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Options;
10
- use FernleafSystems\Wordpress\Plugin\Shield\Scans;
11
- use FernleafSystems\Wordpress\Services\Services;
12
- use FernleafSystems\Wordpress\Services\Utilities\WpOrg;
13
-
14
- /**
15
- * @deprecated 13.0
16
- */
17
- class Mal extends BaseForFiles {
18
-
19
- const SCAN_SLUG = 'mal';
20
-
21
- /**
22
- * @return Scans\Mal\Utilities\ItemActionHandler
23
- */
24
- protected function newItemActionHandler() {
25
- return new Scans\Mal\Utilities\ItemActionHandler();
26
- }
27
-
28
- /**
29
- * @return Scans\Mal\ScanActionVO
30
- */
31
- public function buildScanAction() {
32
- return ( new Scans\Mal\BuildScanAction() )
33
- ->setScanController( $this )
34
- ->build()
35
- ->getScanActionVO();
36
- }
37
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/lib/src/Modules/HackGuard/Scan/Controller/Ptg.php DELETED
@@ -1,56 +0,0 @@
1
- <?php
2
-
3
- namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Scan\Controller;
4
-
5
- use FernleafSystems\Wordpress\Plugin\Shield\Crons\PluginCronsConsumer;
6
- use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\DB\ResultItems;
7
- use FernleafSystems\Wordpress\Plugin\Shield\Scans;
8
-
9
- /**
10
- * @deprecated 13.0
11
- */
12
- class Ptg extends BaseForFiles {
13
-
14
- const SCAN_SLUG = 'ptg';
15
- use PluginCronsConsumer;
16
-
17
- protected function run() {
18
- parent::run();
19
- }
20
-
21
- public function onWpLoaded() {
22
- }
23
-
24
- public function onModuleShutdown() {
25
- }
26
-
27
- public function runHourlyCron() {
28
- }
29
-
30
- /**
31
- * @param Scans\Ptg\ResultItem $item
32
- */
33
- public function cleanStaleResultItem( $item ) {
34
- }
35
-
36
- /**
37
- * @return Scans\Ptg\Utilities\ItemActionHandler
38
- */
39
- protected function newItemActionHandler() {
40
- return new Scans\Ptg\Utilities\ItemActionHandler();
41
- }
42
-
43
- public function isReady() :bool {
44
- return parent::isReady() && $this->getCon()->hasCacheDir();
45
- }
46
-
47
- /**
48
- * @return Scans\Ptg\ScanActionVO
49
- */
50
- public function buildScanAction() {
51
- return ( new Scans\Ptg\BuildScanAction() )
52
- ->setScanController( $this )
53
- ->build()
54
- ->getScanActionVO();
55
- }
56
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/lib/src/Modules/HackGuard/Scan/Controller/Ufc.php DELETED
@@ -1,24 +0,0 @@
1
- <?php
2
-
3
- namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Scan\Controller;
4
-
5
- use FernleafSystems\Wordpress\Plugin\Shield\Scans;
6
-
7
- /**
8
- * @deprecated 13.0
9
- */
10
- class Ufc extends BaseForFiles {
11
-
12
- const SCAN_SLUG = 'ufc';
13
-
14
- protected function newItemActionHandler() {
15
- return null;
16
- }
17
-
18
- /**
19
- * @return Scans\Ufc\ScanActionVO
20
- */
21
- public function buildScanAction() {
22
- return $this->getScanActionVO();
23
- }
24
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/lib/src/Modules/HackGuard/Scan/Controller/Wcf.php DELETED
@@ -1,45 +0,0 @@
1
- <?php
2
-
3
- namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Scan\Controller;
4
-
5
- use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\{
6
- DB\ResultItems\Ops\Update,
7
- ModCon,
8
- Options
9
- };
10
- use FernleafSystems\Wordpress\Plugin\Shield\Scans;
11
- use FernleafSystems\Wordpress\Services\Services;
12
-
13
- /**
14
- * @deprecated 13.0
15
- */
16
- class Wcf extends BaseForFiles {
17
-
18
- const SCAN_SLUG = 'wcf';
19
-
20
- public function getScanFileExclusions() :string {
21
- return '';
22
- }
23
-
24
- /**
25
- * Builds a regex-ready pattern for matching file names to exclude from scan if they're missing
26
- */
27
- public function getScanExclusionsForMissingItems() :string {
28
- return '';
29
- }
30
-
31
- protected function newItemActionHandler() {
32
- return null;
33
- }
34
-
35
- public function cleanStaleResultItem( $item ) {
36
- return true;
37
- }
38
-
39
- /**
40
- * @return Scans\Wcf\ScanActionVO
41
- */
42
- public function buildScanAction() {
43
- return $this->getScanActionVO();
44
- }
45
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/lib/src/Modules/HackGuard/Scan/Queue/Controller.php CHANGED
@@ -98,10 +98,4 @@ class Controller {
98
  }
99
  return $this->oQueueProcessor;
100
  }
101
-
102
- /**
103
- * @deprecated 13.0
104
- */
105
- public function startScans( $scanSlugs ) {
106
- }
107
  }
98
  }
99
  return $this->oQueueProcessor;
100
  }
 
 
 
 
 
 
101
  }
src/lib/src/Modules/HackGuard/Scan/Queue/QueueProcessorConsumer.php DELETED
@@ -1,30 +0,0 @@
1
- <?php
2
-
3
- namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Scan\Queue;
4
-
5
- /**
6
- * @deprecated 12.1
7
- */
8
- trait QueueProcessorConsumer {
9
-
10
- /**
11
- * @var QueueProcessor
12
- */
13
- private $oQueueProcessor;
14
-
15
- /**
16
- * @return QueueProcessor
17
- */
18
- public function getQueueProcessor() {
19
- return $this->oQueueProcessor;
20
- }
21
-
22
- /**
23
- * @param QueueProcessor $QP
24
- * @return $this
25
- */
26
- public function setQueueProcessor( QueueProcessor $QP ) {
27
- $this->oQueueProcessor = $QP;
28
- return $this;
29
- }
30
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/lib/src/Modules/HackGuard/Scan/Utilities/ConvertLegacyResults.php DELETED
@@ -1,201 +0,0 @@
1
- <?php declare( strict_types=1 );
2
-
3
- namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\Scan\Utilities;
4
-
5
- use FernleafSystems\Wordpress\Plugin\Shield\Databases\Scanner\EntryVO;
6
- use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base\Common\ExecOnceModConsumer;
7
- use FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard\{
8
- DB\ResultItemMeta\Ops as ResultItemMetaDB,
9
- DB\ResultItems\Ops as ResultItemsDB,
10
- ModCon,
11
- Options,
12
- Scan\Controller\Afs,
13
- Scan\Controller\Apc,
14
- Scan\Controller\Mal,
15
- Scan\Controller\Ptg,
16
- Scan\Controller\Ufc,
17
- Scan\Controller\Wcf,
18
- Scan\Controller\Wpv
19
- };
20
- use FernleafSystems\Wordpress\Services\Services;
21
-
22
- class ConvertLegacyResults extends ExecOnceModConsumer {
23
-
24
- protected function canRun() :bool {
25
- /** @var Options $opts */
26
- $opts = $this->getOptions();
27
- return (int)$opts->getOpt( 'legacy_db_conversion_at' ) === 0;
28
- }
29
-
30
- protected function run() {
31
- /** @var ModCon $mod */
32
- $mod = $this->getMod();
33
- /** @var Options $opts */
34
- $opts = $this->getOptions();
35
- /** @var ResultItemsDB\Select $selectResItem */
36
- $dbhResItems = $mod->getDbH_ResultItems();
37
- /** @var ResultItemsDB\Select $selectResItem */
38
- $selectResItem = $dbhResItems->getQuerySelector();
39
-
40
- $legacyResults = $this->getLegacyResults();
41
- foreach ( $legacyResults as $e ) {
42
-
43
- if ( in_array( $e->scan, [ Mal::SCAN_SLUG, Ptg::SCAN_SLUG, Ufc::SCAN_SLUG, Wcf::SCAN_SLUG ] ) ) {
44
- $selectResItem->filterByItemID( $e->meta[ 'path_fragment' ] )
45
- ->filterByTypeFile();
46
- }
47
- else {
48
- // Apc::SCAN_SLUG, Wpv::SCAN_SLUG
49
- $selectResItem->filterByItemID( $e->meta[ 'slug' ] );
50
- if ( strpos( $e->meta[ 'slug' ], '/' ) ) {
51
- $selectResItem->filterByTypePlugin();
52
- }
53
- else {
54
- $selectResItem->filterByTypeTheme();
55
- }
56
- }
57
-
58
- $resultItem = $selectResItem->first();
59
-
60
- if ( empty( $resultItem ) ) {
61
-
62
- $scanResult = $this->convertResult( $e );
63
-
64
- if ( !empty( $scanResult ) ) {
65
- /** @var ResultItemsDB\Insert $selectScans */
66
- $insertResItem = $dbhResItems->getQueryInserter();
67
- $insertResItem->insert( $scanResult );
68
- $resultRecord = $selectResItem->byId( Services::WpDb()->getVar( 'SELECT LAST_INSERT_ID()' ) );
69
-
70
- /** @var ResultItemMetaDB\Delete $metaDeleter */
71
- $metaDeleter = $mod->getDbH_ResultItemMeta()->getQueryDeleter();
72
- $metaDeleter->filterByResultItemRef( $resultRecord->id )->query();
73
-
74
- foreach ( $scanResult->meta as $metaKey => $metaValue ) {
75
- /** @var ResultItemMetaDB\Insert $metaInserter */
76
- $metaInserter = $mod->getDbH_ResultItemMeta()->getQueryInserter();
77
- $metaInserter->setInsertData( [
78
- 'ri_ref' => $resultRecord->id,
79
- 'meta_key' => $metaKey,
80
- 'meta_value' => is_scalar( $metaValue ) ? $metaValue : json_encode( $metaValue ),
81
- ] )->query();
82
- }
83
- }
84
- }
85
-
86
- $mod->getDbHandler_ScanResults()
87
- ->getQueryDeleter()
88
- ->deleteById( $e->id );
89
- }
90
-
91
- if ( !empty( $legacyResults ) ) {
92
- $mod->getScansCon()->startNewScans( $opts->getScanSlugs() );
93
- }
94
-
95
- $mod->getDbHandler_ScanQueue()->tableDelete();
96
- if ( $mod->getDbHandler_ScanResults()->getQuerySelector()->count() === 0 ) {
97
- $mod->getDbHandler_ScanResults()->tableDelete();
98
- $opts->setOpt( 'legacy_db_conversion_at', Services::Request()->ts() );
99
- }
100
- }
101
-
102
- /**
103
- * @return ResultItemsDB\Record|null
104
- */
105
- private function convertResult( EntryVO $e ) {
106
- /** @var ModCon $mod */
107
- $mod = $this->getMod();
108
-
109
- $raw = $e->meta;
110
-
111
- switch ( $e->scan ) {
112
-
113
- case Apc::SCAN_SLUG:
114
- $raw[ 'is_abandoned' ] = 1;
115
- $scanResult = $mod->getScanCon( Apc::SCAN_SLUG )->buildScanResult( $raw );
116
- break;
117
-
118
- case Wpv::SCAN_SLUG:
119
- $raw[ 'is_vulnerable' ] = 1;
120
- $scanResult = $mod->getScanCon( Wpv::SCAN_SLUG )->buildScanResult( $raw );
121
- unset( $raw[ 'wpvuln_id' ], $raw[ 'wpvuln_vo' ] );
122
- break;
123
-
124
- case Mal::SCAN_SLUG:
125
- $raw[ 'mal_fp_confidence' ] = $raw[ 'fp_confidence' ];
126
- unset( $raw[ 'fp_confidence' ] );
127
- $raw[ 'mal_file_lines' ] = base64_encode( json_encode( array_fill_keys( $raw[ 'file_lines' ], '' ) ) );
128
- $raw[ 'mal_fp_lines' ] = json_encode( array_fill_keys( $raw[ 'file_lines' ], 0 ) );
129
- unset( $raw[ 'file_lines' ] );
130
- $scanResult = $mod->getScanCon( Afs::SCAN_SLUG )->buildScanResult( $raw );
131
- break;
132
-
133
- case Ptg::SCAN_SLUG:
134
- if ( strpos( $raw[ 'slug' ], '/' ) ) {
135
- $raw[ 'is_in_plugin' ] = true;
136
- }
137
- else {
138
- $raw[ 'is_in_theme' ] = true;
139
- }
140
-
141
- if ( $raw[ 'is_different' ] ?? false ) {
142
- $raw[ 'is_checksumfail' ] = true;
143
- }
144
- unset( $raw[ 'is_different' ] );
145
-
146
- if ( empty( $raw[ 'is_unrecognised' ] ) ) {
147
- unset( $raw[ 'is_unrecognised' ] );
148
- }
149
-
150
- if ( empty( $raw[ 'is_missing' ] ) ) {
151
- unset( $raw[ 'is_missing' ] );
152
- }
153
-
154
- unset( $raw[ 'context' ] );
155
- $scanResult = $mod->getScanCon( Afs::SCAN_SLUG )->buildScanResult( $raw );
156
- break;
157
-
158
- case Ufc::SCAN_SLUG:
159
- $raw[ 'is_in_core' ] = true;
160
- $raw[ 'is_unrecognised' ] = true;
161
- $scanResult = $mod->getScanCon( Afs::SCAN_SLUG )->buildScanResult( $raw );
162
- break;
163
-
164
- case Wcf::SCAN_SLUG:
165
- default:
166
- $raw[ 'is_in_core' ] = true;
167
-
168
- if ( empty( $raw[ 'is_missing' ] ) ) {
169
- unset( $raw[ 'is_missing' ] );
170
- }
171
-
172
- if ( empty( $raw[ 'is_checksumfail' ] ) ) {
173
- unset( $raw[ 'is_checksumfail' ] );
174
- }
175
-
176
- unset( $raw[ 'is_excluded' ], $raw[ 'md5_file_wp' ] );
177
-
178
- $scanResult = $mod->getScanCon( Afs::SCAN_SLUG )->buildScanResult( $raw );
179
- break;
180
- }
181
-
182
- $scanResult->created_at = $e->created_at;
183
- $scanResult->ignored_at = $e->ignored_at;
184
- $scanResult->notified_at = $e->notified_at;
185
- $scanResult->attempt_repair_at = $e->attempt_repair_at;
186
-
187
- return $scanResult;
188
- }
189
-
190
- /**
191
- * @return EntryVO[]
192
- */
193
- private function getLegacyResults() :array {
194
- /** @var ModCon $mod */
195
- $mod = $this->getMod();
196
- $res = $mod->getDbHandler_ScanResults()
197
- ->getQuerySelector()
198
- ->all();
199
- return empty( $res ) ? [] : $res;
200
- }
201
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/lib/src/Modules/HackGuard/UI.php CHANGED
@@ -240,9 +240,6 @@ class UI extends BaseShield\UI {
240
  if ( !$canHandshake ) {
241
  $warnings[] = sprintf( __( 'Not available as your site cannot handshake with ShieldNET API.', 'wp-simple-firewall' ), 'OpenSSL' );
242
  }
243
- if ( !$this->getCon()->hasCacheDir() ) {
244
- $warnings[] = __( "Certain scanners are unavailable because we couldn't create a temporary directory to store files.", 'wp-simple-firewall' );
245
- }
246
  // if ( !Services::Encrypt()->isSupportedOpenSslDataEncryption() ) {
247
  // $warnings[] = sprintf( __( 'Not available because the %s extension is not available.', 'wp-simple-firewall' ), 'OpenSSL' );
248
  // }
@@ -250,6 +247,12 @@ class UI extends BaseShield\UI {
250
  // $warnings[] = sprintf( __( "Not available because PHP/WordPress doesn't have direct filesystem access.", 'wp-simple-firewall' ), 'OpenSSL' );
251
  // }
252
  break;
 
 
 
 
 
 
253
  }
254
 
255
  return $warnings;
240
  if ( !$canHandshake ) {
241
  $warnings[] = sprintf( __( 'Not available as your site cannot handshake with ShieldNET API.', 'wp-simple-firewall' ), 'OpenSSL' );
242
  }
 
 
 
243
  // if ( !Services::Encrypt()->isSupportedOpenSslDataEncryption() ) {
244
  // $warnings[] = sprintf( __( 'Not available because the %s extension is not available.', 'wp-simple-firewall' ), 'OpenSSL' );
245
  // }
247
  // $warnings[] = sprintf( __( "Not available because PHP/WordPress doesn't have direct filesystem access.", 'wp-simple-firewall' ), 'OpenSSL' );
248
  // }
249
  break;
250
+
251
+ case 'section_file_guard':
252
+ if ( !$this->getCon()->cache_dir_handler->dirExists() ) {
253
+ $warnings[] = __( "Plugin/Theme file scanners are unavailable because we couldn't create a temporary directory to store files.", 'wp-simple-firewall' );
254
+ }
255
+ break;
256
  }
257
 
258
  return $warnings;
src/lib/src/Modules/HackGuard/Upgrade.php CHANGED
@@ -11,10 +11,6 @@ class Upgrade extends Base\Upgrade {
11
  /** @var ModCon $mod */
12
  $mod = $this->getMod();
13
 
14
- ( new Scan\Utilities\ConvertLegacyResults() )
15
- ->setMod( $mod )
16
- ->execute();
17
-
18
  // Ensure AFS scan is selected by default upon upgrade
19
  $uiTrack = $mod->getUiTrack();
20
  $selected = $uiTrack->selected_scans;
11
  /** @var ModCon $mod */
12
  $mod = $this->getMod();
13
 
 
 
 
 
14
  // Ensure AFS scan is selected by default upon upgrade
15
  $uiTrack = $mod->getUiTrack();
16
  $selected = $uiTrack->selected_scans;
src/lib/src/Modules/HackGuard/WpCli.php CHANGED
@@ -2,16 +2,13 @@
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard;
4
 
5
- use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
6
 
7
- class WpCli extends Base\WpCli {
8
 
9
- /**
10
- * @inheritDoc
11
- */
12
- protected function getCmdHandlers() :array {
13
  return [
14
- new WpCli\ScanRun()
15
  ];
16
  }
17
  }
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\HackGuard;
4
 
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\BaseShield;
6
 
7
+ class WpCli extends BaseShield\WpCli {
8
 
9
+ protected function enumCmdHandlers() :array {
 
 
 
10
  return [
11
+ WpCli\ScanRun::class
12
  ];
13
  }
14
  }
src/lib/src/Modules/Headers/Processor.php CHANGED
@@ -154,19 +154,4 @@ class Processor extends BaseShield\Processor {
154
  $this->headers = array_merge( $this->getHeaders(), $header );
155
  }
156
  }
157
-
158
- /**
159
- * @deprecated 13.0.3
160
- */
161
- private function isHeadersPushed() :bool {
162
- return (bool)$this->pushed;
163
- }
164
-
165
- /**
166
- * @deprecated 13.0.3
167
- */
168
- private function setHeadersPushed() :self {
169
- $this->pushed = true;
170
- return $this;
171
- }
172
  }
154
  $this->headers = array_merge( $this->getHeaders(), $header );
155
  }
156
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
157
  }
src/lib/src/Modules/IPs/Components/QueryIpBlock.php CHANGED
@@ -7,10 +7,6 @@ use FernleafSystems\Wordpress\Plugin\Shield\Databases;
7
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs;
8
  use FernleafSystems\Wordpress\Services\Services;
9
 
10
- /**
11
- * Class QueryIpBlock
12
- * @package FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs\Components
13
- */
14
  class QueryIpBlock {
15
 
16
  use Shield\Modules\ModConsumer;
7
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs;
8
  use FernleafSystems\Wordpress\Services\Services;
9
 
 
 
 
 
10
  class QueryIpBlock {
11
 
12
  use Shield\Modules\ModConsumer;
src/lib/src/Modules/IPs/Lib/BlockRequest.php CHANGED
@@ -1,4 +1,4 @@
1
- <?php
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs\Lib;
4
 
@@ -9,26 +9,35 @@ use FernleafSystems\Wordpress\Services\Utilities\Obfuscate;
9
 
10
  class BlockRequest extends ExecOnceModConsumer {
11
 
 
 
12
  protected function run() {
13
- if ( $this->isBlocked() ) {
 
 
 
 
 
 
14
 
15
- if ( $this->isAutoUnBlocked() ) {
16
- Services::Response()->redirectToHome();
17
- }
18
- elseif ( $this->isHighReputationIP() ) {
 
 
 
 
 
 
 
 
 
 
19
  $this->getCon()->fireEvent( 'not_conn_kill_high_rep' );
20
  }
21
- else {
22
- $this->renderKillPage();
23
- }
24
  }
25
- }
26
-
27
- private function isBlocked() :bool {
28
- return ( new IPs\Components\QueryIpBlock() )
29
- ->setMod( $this->getMod() )
30
- ->setIp( Services::IP()->getRequestIp() )
31
- ->run();
32
  }
33
 
34
  private function isHighReputationIP() :bool {
@@ -42,9 +51,10 @@ class BlockRequest extends ExecOnceModConsumer {
42
  }
43
 
44
  private function isAutoUnBlocked() :bool {
45
- return ( new AutoUnblock() )
46
- ->setMod( $this->getMod() )
47
- ->run();
 
48
  }
49
 
50
  private function renderKillPage() {
@@ -114,16 +124,12 @@ class BlockRequest extends ExecOnceModConsumer {
114
  $data = apply_filters( 'shield/render_data_block_page', $data );
115
  }
116
 
117
- Services::WpGeneral()
118
- ->wpDie(
119
- $mod->renderTemplate( '/pages/block/blocklist_die.twig', $data, true )
120
- );
121
  }
122
 
123
- /**
124
- * @return string
125
- */
126
- private function renderEmailMagicLinkContent() {
127
  $con = $this->getCon();
128
  /** @var IPs\ModCon $mod */
129
  $mod = $this->getMod();
@@ -138,36 +144,33 @@ class BlockRequest extends ExecOnceModConsumer {
138
  && $opts->getCanRequestAutoUnblockEmailLink( $user ) ) {
139
 
140
  if ( apply_filters( $con->prefix( 'can_user_magic_link' ), true ) ) {
141
- $content = $mod->renderTemplate(
142
- '/pages/block/magic_link.twig',
143
- [
144
- 'flags' => [
145
- ],
146
- 'hrefs' => [
147
- 'unblock' => add_query_arg(
148
- array_merge(
149
- $mod->getNonceActionData( 'uaum-init-'.substr( sha1( $user->user_login ), 0, 6 ) ),
150
- [
151
- 'ip' => Services::IP()->getRequestIp()
152
- ]
153
- ),
154
- Services::WpGeneral()->getHomeUrl()
155
- )
156
- ],
157
- 'vars' => [
158
- 'email' => Obfuscate::Email( $user->user_email )
159
- ],
160
- 'strings' => [
161
- 'you_may' => __( 'You can automatically unblock your IP address by clicking the link below.', 'wp-simple-firewall' ),
162
- 'this_will_send' => __( 'Clicking the button will send you an email letting you unblock your IP address.', 'wp-simple-firewall' ),
163
- 'assumes_email' => __( 'This assumes that your WordPress site has been properly configured to send email - many are not.', 'wp-simple-firewall' ),
164
- 'dont_receive' => __( "If you don't receive the email, check your spam and contact your site admin.", 'wp-simple-firewall' ),
165
- 'limit_60' => __( "You may only use this link once every 60 minutes. If you're repeatedly blocked, ask your site admin to review the audit trail to determine the cause.", 'wp-simple-firewall' ),
166
- 'same_browser' => __( "When you click the link from your email, it must open up in this web browser.", 'wp-simple-firewall' ),
167
- 'click_to_send' => __( 'Send Auto-Unblock Link To My Email', 'wp-simple-firewall' )
168
- ],
169
- ]
170
- );
171
  }
172
  }
173
 
1
+ <?php declare( strict_types=1 );
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs\Lib;
4
 
9
 
10
  class BlockRequest extends ExecOnceModConsumer {
11
 
12
+ private $ipBlocked;
13
+
14
  protected function run() {
15
+ if ( $this->isAutoUnBlocked() ) {
16
+ Services::Response()->redirectToHome();
17
+ }
18
+ elseif ( $this->isRequestBlocked() ) {
19
+ $this->renderKillPage();
20
+ }
21
+ }
22
 
23
+ private function isRequestBlocked() :bool {
24
+ return (bool)apply_filters( 'shield/is_request_blocked', $this->isIpBlocked() );
25
+ }
26
+
27
+ private function isIpBlocked() :bool {
28
+ if ( !isset( $this->ipBlocked ) ) {
29
+ $this->ipBlocked = ( new IPs\Components\QueryIpBlock() )
30
+ ->setMod( $this->getMod() )
31
+ ->setIp( Services::IP()->getRequestIp() )
32
+ ->run();
33
+
34
+ // do not block IPs with high reputation
35
+ if ( $this->ipBlocked && $this->isHighReputationIP() ) {
36
+ $this->ipBlocked = false;
37
  $this->getCon()->fireEvent( 'not_conn_kill_high_rep' );
38
  }
 
 
 
39
  }
40
+ return $this->ipBlocked;
 
 
 
 
 
 
41
  }
42
 
43
  private function isHighReputationIP() :bool {
51
  }
52
 
53
  private function isAutoUnBlocked() :bool {
54
+ return $this->isIpBlocked()
55
+ && ( new AutoUnblock() )
56
+ ->setMod( $this->getMod() )
57
+ ->run();
58
  }
59
 
60
  private function renderKillPage() {
124
  $data = apply_filters( 'shield/render_data_block_page', $data );
125
  }
126
 
127
+ Services::WpGeneral()->wpDie(
128
+ $mod->renderTemplate( '/pages/block/blocklist_die.twig', $data, true )
129
+ );
 
130
  }
131
 
132
+ private function renderEmailMagicLinkContent() :string {
 
 
 
133
  $con = $this->getCon();
134
  /** @var IPs\ModCon $mod */
135
  $mod = $this->getMod();
144
  && $opts->getCanRequestAutoUnblockEmailLink( $user ) ) {
145
 
146
  if ( apply_filters( $con->prefix( 'can_user_magic_link' ), true ) ) {
147
+ $content = $mod->renderTemplate( '/pages/block/magic_link.twig', [
148
+ 'flags' => [
149
+ ],
150
+ 'hrefs' => [
151
+ 'unblock' => add_query_arg(
152
+ array_merge(
153
+ $mod->getNonceActionData( 'uaum-init-'.substr( sha1( $user->user_login ), 0, 6 ) ),
154
+ [
155
+ 'ip' => Services::IP()->getRequestIp()
156
+ ]
157
+ ),
158
+ Services::WpGeneral()->getHomeUrl()
159
+ )
160
+ ],
161
+ 'vars' => [
162
+ 'email' => Obfuscate::Email( $user->user_email )
163
+ ],
164
+ 'strings' => [
165
+ 'you_may' => __( 'You can automatically unblock your IP address by clicking the link below.', 'wp-simple-firewall' ),
166
+ 'this_will_send' => __( 'Clicking the button will send you an email letting you unblock your IP address.', 'wp-simple-firewall' ),
167
+ 'assumes_email' => __( 'This assumes that your WordPress site has been properly configured to send email - many are not.', 'wp-simple-firewall' ),
168
+ 'dont_receive' => __( "If you don't receive the email, check your spam and contact your site admin.", 'wp-simple-firewall' ),
169
+ 'limit_60' => __( "You may only use this link once every 60 minutes. If you're repeatedly blocked, ask your site admin to review the audit trail to determine the cause.", 'wp-simple-firewall' ),
170
+ 'same_browser' => __( "When you click the link from your email, it must open up in this web browser.", 'wp-simple-firewall' ),
171
+ 'click_to_send' => __( 'Send Auto-Unblock Link To My Email', 'wp-simple-firewall' )
172
+ ],
173
+ ] );
 
 
 
174
  }
175
  }
176
 
src/lib/src/Modules/IPs/Lib/Bots/BotEventListener.php CHANGED
@@ -37,7 +37,7 @@ class BotEventListener extends ExecOnceModConsumer {
37
  }
38
 
39
  protected function run() {
40
- add_action( $this->getCon()->prefix( 'event' ), function ( $event ) {
41
  $this->fireEventForIP( Services::IP()->getRequestIp(), $event );
42
  } );
43
  }
37
  }
38
 
39
  protected function run() {
40
+ add_action( 'shield/event', function ( $event ) {
41
  $this->fireEventForIP( Services::IP()->getRequestIp(), $event );
42
  } );
43
  }
src/lib/src/Modules/IPs/Lib/Bots/BotSignalsController.php CHANGED
@@ -74,8 +74,8 @@ class BotSignalsController extends ExecOnceModConsumer {
74
  foreach ( $this->enumerateBotTrackers() as $botTracker ) {
75
  $botTracker->setMod( $this->getMod() )->execute();
76
  }
77
- $this->getHandlerNotBot()->execute();
78
  } );
 
79
  }
80
 
81
  /**
74
  foreach ( $this->enumerateBotTrackers() as $botTracker ) {
75
  $botTracker->setMod( $this->getMod() )->execute();
76
  }
 
77
  } );
78
+ $this->getHandlerNotBot()->execute();
79
  }
80
 
81
  /**
src/lib/src/Modules/IPs/Lib/Bots/NotBot/InsertNotBotJs.php CHANGED
@@ -52,7 +52,7 @@ class InsertNotBotJs extends ExecOnceModConsumer {
52
  Services::Response()->cookieSet(
53
  'shield-notbot-nonce',
54
  $this->getMod()->getAjaxActionData( 'not_bot' )[ 'exec_nonce' ],
55
- 10
56
  );
57
  }
58
  }
52
  Services::Response()->cookieSet(
53
  'shield-notbot-nonce',
54
  $this->getMod()->getAjaxActionData( 'not_bot' )[ 'exec_nonce' ],
55
+ 15
56
  );
57
  }
58
  }
src/lib/src/Modules/IPs/Lib/Bots/NotBot/NotBotHandler.php CHANGED
@@ -8,7 +8,7 @@ use FernleafSystems\Wordpress\Services\Services;
8
 
9
  class NotBotHandler extends ExecOnceModConsumer {
10
 
11
- const LIFETIME = 60;
12
  const SLUG = 'notbot';
13
 
14
  private $useCookies;
8
 
9
  class NotBotHandler extends ExecOnceModConsumer {
10
 
11
+ const LIFETIME = 120;
12
  const SLUG = 'notbot';
13
 
14
  private $useCookies;
src/lib/src/Modules/IPs/Lib/Bots/ShieldNET/BuildData.php CHANGED
@@ -75,7 +75,7 @@ class BuildData {
75
  return $order;
76
  } );
77
 
78
- return array_slice( $records, 0, 50 );
79
  }
80
 
81
  /**
75
  return $order;
76
  } );
77
 
78
+ return array_slice( $records, 0, 100 );
79
  }
80
 
81
  /**
src/lib/src/Modules/IPs/Strings.php CHANGED
@@ -242,12 +242,9 @@ class Strings extends Base\Strings {
242
  }
243
 
244
  /**
245
- * @param string $key
246
- * @return array
247
  * @throws \Exception
248
  */
249
  public function getOptionStrings( string $key ) :array {
250
-
251
  $pluginName = $this->getCon()->getHumanName();
252
  $modName = $this->getMod()->getMainFeatureName();
253
 
242
  }
243
 
244
  /**
 
 
245
  * @throws \Exception
246
  */
247
  public function getOptionStrings( string $key ) :array {
 
248
  $pluginName = $this->getCon()->getHumanName();
249
  $modName = $this->getMod()->getMainFeatureName();
250
 
src/lib/src/Modules/IPs/Upgrade.php CHANGED
@@ -2,7 +2,6 @@
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs;
4
 
5
- use FernleafSystems\Wordpress\Plugin\Shield\Databases\IPs\Delete;
6
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
7
 
8
  class Upgrade extends Base\Upgrade {
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs;
4
 
 
5
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
6
 
7
  class Upgrade extends Base\Upgrade {
src/lib/src/Modules/IPs/WpCli.php CHANGED
@@ -2,19 +2,16 @@
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs;
4
 
5
- use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
6
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs;
7
 
8
- class WpCli extends Base\WpCli {
9
 
10
- /**
11
- * @inheritDoc
12
- */
13
- protected function getCmdHandlers() :array {
14
  return [
15
- new IPs\WpCli\Add(),
16
- new IPs\WpCli\Remove(),
17
- new IPs\WpCli\Enumerate(),
18
  ];
19
  }
20
  }
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs;
4
 
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\BaseShield;
6
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\IPs;
7
 
8
+ class WpCli extends BaseShield\WpCli {
9
 
10
+ protected function enumCmdHandlers() :array {
 
 
 
11
  return [
12
+ IPs\WpCli\Add::class,
13
+ IPs\WpCli\Remove::class,
14
+ IPs\WpCli\Enumerate::class,
15
  ];
16
  }
17
  }
src/lib/src/Modules/Integrations/Lib/Bots/Spam/Handlers/Base.php CHANGED
@@ -25,4 +25,9 @@ abstract class Base extends BaseHandler {
25
  );
26
  return $isSpam;
27
  }
 
 
 
 
 
28
  }
25
  );
26
  return $isSpam;
27
  }
28
+
29
+ protected function getCommonSpamMessage() :string {
30
+ return sprintf( __( "This appears to be spam as it failed %s AntiBot protection checks.", 'wp-simple-firewall' ),
31
+ $this->getCon()->getHumanName() );
32
+ }
33
  }
src/lib/src/Modules/Integrations/Lib/Bots/Spam/Handlers/ContactForm7.php CHANGED
@@ -5,8 +5,19 @@ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Integrations\Lib\Bots\
5
  class ContactForm7 extends Base {
6
 
7
  protected function run() {
8
- add_filter( 'wpcf7_spam', function ( $wasSpam, $submission ) {
9
- return $wasSpam || $this->isSpam();
 
 
 
 
 
 
 
 
 
 
 
10
  }, 1000, 2 );
11
  }
12
 
5
  class ContactForm7 extends Base {
6
 
7
  protected function run() {
8
+ add_filter( 'wpcf7_spam', function ( $isSpam, $submission ) {
9
+
10
+ if ( !$isSpam && $this->isSpam() ) {
11
+ $isSpam = true;
12
+ add_filter( 'wpcf7_display_message', function ( $msg, $status ) {
13
+ if ( $status === 'spam' ) {
14
+ $msg = $this->getCommonSpamMessage();
15
+ }
16
+ return $msg;
17
+ }, 100, 2 );
18
+ }
19
+
20
+ return $isSpam;
21
  }, 1000, 2 );
22
  }
23
 
src/lib/src/Modules/Integrations/Lib/Bots/Spam/Handlers/ElementorPro.php CHANGED
@@ -8,8 +8,7 @@ class ElementorPro extends Base {
8
  add_action( 'elementor_pro/forms/validation', function ( $form, $ajax_handler ) {
9
  /** @var \ElementorPro\Modules\Forms\Classes\Ajax_Handler $ajax_handler */
10
  if ( empty( $ajax_handler->errors ) && $this->isSpam() ) {
11
- $msg = sprintf( __( "This appears to be spam - failed %s AntiBot protection checks.", 'wp-simple-firewall' ),
12
- $this->getCon()->getHumanName() );
13
  $ajax_handler->add_error( 'shield-antibot', $msg );
14
  $ajax_handler->add_error_message( $msg );
15
  }
8
  add_action( 'elementor_pro/forms/validation', function ( $form, $ajax_handler ) {
9
  /** @var \ElementorPro\Modules\Forms\Classes\Ajax_Handler $ajax_handler */
10
  if ( empty( $ajax_handler->errors ) && $this->isSpam() ) {
11
+ $msg = $this->getCommonSpamMessage();
 
12
  $ajax_handler->add_error( 'shield-antibot', $msg );
13
  $ajax_handler->add_error_message( $msg );
14
  }
src/lib/src/Modules/Integrations/Lib/Bots/Spam/Handlers/FluentForms.php CHANGED
@@ -13,8 +13,7 @@ class FluentForms extends Base {
13
  function () {
14
  if ( $this->isSpam() ) {
15
  wp_send_json( [
16
- 'errors' => sprintf( __( "This appears to be spam - failed %s AntiBot protection checks.", 'wp-simple-firewall' ),
17
- $this->getCon()->getHumanName() )
18
  ], 422 );
19
  }
20
  }, 9, 0 );
13
  function () {
14
  if ( $this->isSpam() ) {
15
  wp_send_json( [
16
+ 'errors' => $this->getCommonSpamMessage()
 
17
  ], 422 );
18
  }
19
  }, 9, 0 );
src/lib/src/Modules/Integrations/Lib/Bots/Spam/Handlers/KaliForms.php CHANGED
@@ -8,7 +8,7 @@ class KaliForms extends Base {
8
  add_filter( 'kaliforms_before_form_process', function ( $data ) {
9
  if ( is_array( $data ) && empty( $data[ 'error_bag' ] ) && $this->isSpam() ) {
10
  $data[ 'admin_stop_execution' ] = true;
11
- $data[ 'admin_stop_reason' ] = __( 'Your entry appears to be spam!', 'wp-simple-firewall' );
12
  $data[ 'error_bag' ] = [
13
  __( 'SPAM Bot detected.', 'wp-simple-firewall' )
14
  ];
8
  add_filter( 'kaliforms_before_form_process', function ( $data ) {
9
  if ( is_array( $data ) && empty( $data[ 'error_bag' ] ) && $this->isSpam() ) {
10
  $data[ 'admin_stop_execution' ] = true;
11
+ $data[ 'admin_stop_reason' ] = $this->getCommonSpamMessage();
12
  $data[ 'error_bag' ] = [
13
  __( 'SPAM Bot detected.', 'wp-simple-firewall' )
14
  ];
src/lib/src/Modules/Integrations/Lib/Bots/Spam/Handlers/SuperForms.php CHANGED
@@ -7,7 +7,7 @@ class SuperForms extends Base {
7
  protected function run() {
8
  add_action( 'super_before_sending_email_hook', function ( $formSubmissionData ) {
9
  if ( $this->isSpam() ) {
10
- \SUPER_Common::output_message( true, esc_html__( 'Shield Anti-Spam detected this form submission as a bot!', 'wp-simple-firewall' ) );
11
  }
12
  }, 1000 );
13
  }
7
  protected function run() {
8
  add_action( 'super_before_sending_email_hook', function ( $formSubmissionData ) {
9
  if ( $this->isSpam() ) {
10
+ \SUPER_Common::output_message( true, esc_html( $this->getCommonSpamMessage() ) );
11
  }
12
  }, 1000 );
13
  }
src/lib/src/Modules/Integrations/Lib/Bots/Spam/Handlers/SupportCandy.php CHANGED
@@ -9,8 +9,7 @@ class SupportCandy extends Base {
9
  protected function run() {
10
  add_filter( 'wpsc_before_create_ticket_args', function ( $args ) {
11
  if ( $this->isSpam() ) {
12
- Services::WpGeneral()->wpDie( sprintf( "Sorry, your request failed %s Bot checking.",
13
- $this->getCon()->getHumanName() ) );
14
  }
15
  return $args;
16
  }, 1000 );
9
  protected function run() {
10
  add_filter( 'wpsc_before_create_ticket_args', function ( $args ) {
11
  if ( $this->isSpam() ) {
12
+ Services::WpGeneral()->wpDie( $this->getCommonSpamMessage() );
 
13
  }
14
  return $args;
15
  }, 1000 );
src/lib/src/Modules/Integrations/Lib/Bots/Spam/Handlers/WPForms.php CHANGED
@@ -19,7 +19,7 @@ class WPForms extends Base {
19
 
20
  if ( empty( $errors[ $this->workingFormID ] ) && $this->isSpam() ) {
21
  $errors[ $this->workingFormID ] = [
22
- 'header' => __( 'Shield detected this as a SPAM Bot submission.' ),
23
  ];
24
  }
25
 
19
 
20
  if ( empty( $errors[ $this->workingFormID ] ) && $this->isSpam() ) {
21
  $errors[ $this->workingFormID ] = [
22
+ 'header' => $this->getCommonSpamMessage(),
23
  ];
24
  }
25
 
src/lib/src/Modules/Integrations/Options.php CHANGED
@@ -9,16 +9,4 @@ class Options extends BaseShield\Options {
9
  public function isEnabledMainWP() :bool {
10
  return $this->isOpt( 'enable_mainwp', 'Y' );
11
  }
12
-
13
- /**
14
- * @deprecated 13.0.5
15
- */
16
- public function getUserFormProviders() :array {
17
- $userForms = $this->getOpt( 'user_form_providers' );
18
- if ( !in_array( 'wordpress', $userForms ) ) {
19
- $userForms[] = 'wordpress';
20
- $this->setOpt( 'user_form_providers', $userForms );
21
- }
22
- return array_unique( $userForms );
23
- }
24
  }
9
  public function isEnabledMainWP() :bool {
10
  return $this->isOpt( 'enable_mainwp', 'Y' );
11
  }
 
 
 
 
 
 
 
 
 
 
 
 
12
  }
src/lib/src/Modules/License/Lib/LicenseHandler.php CHANGED
@@ -12,7 +12,6 @@ class LicenseHandler extends Modules\Base\Common\ExecOnceModConsumer {
12
 
13
  protected function run() {
14
  add_action( $this->getCon()->prefix( 'shield_action' ), function ( $action ) {
15
- $con = $this->getCon();
16
  switch ( $action ) {
17
 
18
  case 'keyless_handshake':
@@ -28,12 +27,7 @@ class LicenseHandler extends Modules\Base\Common\ExecOnceModConsumer {
28
  break;
29
 
30
  case 'license_check':
31
- if ( !wp_next_scheduled( $con->prefix( 'adhoc_cron_license_check' ) ) ) {
32
- wp_schedule_single_event(
33
- Services::Request()->ts() + 20,
34
- $con->prefix( 'adhoc_cron_license_check' )
35
- );
36
- }
37
  break;
38
  }
39
  } );
@@ -44,6 +38,16 @@ class LicenseHandler extends Modules\Base\Common\ExecOnceModConsumer {
44
  } );
45
  }
46
 
 
 
 
 
 
 
 
 
 
 
47
  /**
48
  * Customer reported that they're using a multilingual system with different hostnames for each language.
49
  * This meant that adhoc lookups that happen on the wrong hostname name request would fail and remove
@@ -129,13 +133,13 @@ class LicenseHandler extends Modules\Base\Common\ExecOnceModConsumer {
129
  $mod = $this->getMod();
130
  $opts = $this->getOptions();
131
 
132
- $nVerifiedExpiredDays = $opts->getDef( 'lic_verify_expire_days' )
133
- + $opts->getDef( 'lic_verify_expire_grace_days' );
134
 
135
- $oLic = $mod->getLicenseHandler()->getLicense();
136
  return (int)min(
137
- $oLic->getExpiresAt() + $opts->getDef( 'lic_verify_expire_grace_days' )*DAY_IN_SECONDS,
138
- $oLic->last_verified_at + $nVerifiedExpiredDays*DAY_IN_SECONDS
139
  );
140
  }
141
 
@@ -159,14 +163,14 @@ class LicenseHandler extends Modules\Base\Common\ExecOnceModConsumer {
159
 
160
  public function isLastVerifiedExpired() :bool {
161
  return ( Services::Request()->ts() - $this->getLicense()->last_verified_at )
162
- > $this->getOptions()->getDef( 'lic_verify_expire_days' )*DAY_IN_SECONDS;
163
  }
164
 
165
  public function isLastVerifiedGraceExpired() :bool {
166
- $oOpts = $this->getOptions();
167
- $nGracePeriod = ( $oOpts->getDef( 'lic_verify_expire_days' )
168
- + $oOpts->getDef( 'lic_verify_expire_grace_days' ) )*DAY_IN_SECONDS;
169
- return ( Services::Request()->ts() - $this->getLicense()->last_verified_at ) > $nGracePeriod;
170
  }
171
 
172
  private function isMaybeExpiring() :bool {
@@ -212,4 +216,12 @@ class LicenseHandler extends Modules\Base\Common\ExecOnceModConsumer {
212
  );
213
  return ( Services::Request()->ts() - $mtime ) > MINUTE_IN_SECONDS;
214
  }
 
 
 
 
 
 
 
 
215
  }
12
 
13
  protected function run() {
14
  add_action( $this->getCon()->prefix( 'shield_action' ), function ( $action ) {
 
15
  switch ( $action ) {
16
 
17
  case 'keyless_handshake':
27
  break;
28
 
29
  case 'license_check':
30
+ $this->scheduleAdHocCheck();
 
 
 
 
 
31
  break;
32
  }
33
  } );
38
  } );
39
  }
40
 
41
+ private function scheduleAdHocCheck( int $delay = 20 ) {
42
+ $con = $this->getCon();
43
+ if ( !wp_next_scheduled( $con->prefix( 'adhoc_cron_license_check' ) ) ) {
44
+ wp_schedule_single_event(
45
+ Services::Request()->ts() + $delay,
46
+ $con->prefix( 'adhoc_cron_license_check' )
47
+ );
48
+ }
49
+ }
50
+
51
  /**
52
  * Customer reported that they're using a multilingual system with different hostnames for each language.
53
  * This meant that adhoc lookups that happen on the wrong hostname name request would fail and remove
133
  $mod = $this->getMod();
134
  $opts = $this->getOptions();
135
 
136
+ $verifiedExpiredDays = rand( 9, 14 ) /* $this->getLicVerifyExpireDays() */
137
+ + $opts->getDef( 'lic_verify_expire_grace_days' );
138
 
139
+ $lic = $mod->getLicenseHandler()->getLicense();
140
  return (int)min(
141
+ $lic->getExpiresAt() + $opts->getDef( 'lic_verify_expire_grace_days' )*DAY_IN_SECONDS,
142
+ $lic->last_verified_at + $verifiedExpiredDays*DAY_IN_SECONDS
143
  );
144
  }
145
 
163
 
164
  public function isLastVerifiedExpired() :bool {
165
  return ( Services::Request()->ts() - $this->getLicense()->last_verified_at )
166
+ > rand( 9, 14 )*DAY_IN_SECONDS; /* $this->getLicVerifyExpireDays() */
167
  }
168
 
169
  public function isLastVerifiedGraceExpired() :bool {
170
+ $opts = $this->getOptions();
171
+ $grace = ( rand( 9, 14 ) /* $this->getLicVerifyExpireDays() */
172
+ + $opts->getDef( 'lic_verify_expire_grace_days' ) )*DAY_IN_SECONDS;
173
+ return ( Services::Request()->ts() - $this->getLicense()->last_verified_at ) > $grace;
174
  }
175
 
176
  private function isMaybeExpiring() :bool {
216
  );
217
  return ( Services::Request()->ts() - $mtime ) > MINUTE_IN_SECONDS;
218
  }
219
+
220
+ private function getLicVerifyExpireDays() :int {
221
+ return (int)rand( 9, 14 );
222
+ }
223
+
224
+ private function getLicExpireGraceDays() :int {
225
+ return $this->getOptions()->getDef( 'lic_verify_expire_grace_days' );
226
+ }
227
  }
src/lib/src/Modules/License/Lib/WpHashes/ApiTokenManager.php CHANGED
@@ -19,7 +19,7 @@ class ApiTokenManager {
19
  private $canRequestOverride = false;
20
 
21
  protected function run() {
22
- add_action( $this->getCon()->prefix( 'event' ), function ( $eventTag ) {
23
  switch ( $eventTag ) {
24
  case 'lic_check_success':
25
  $this->setCanRequestOverride( true )->getToken();
19
  private $canRequestOverride = false;
20
 
21
  protected function run() {
22
+ add_action( 'shield/event', function ( $eventTag ) {
23
  switch ( $eventTag ) {
24
  case 'lic_check_success':
25
  $this->setCanRequestOverride( true )->getToken();
src/lib/src/Modules/License/UI.php CHANGED
@@ -16,44 +16,54 @@ class UI extends BaseShield\UI {
16
  $mod = $this->getMod();
17
  $opts = $this->getOptions();
18
  $WP = Services::WpGeneral();
19
- $oCarbon = Services::Request()->carbon();
20
 
21
- $oCurrent = $mod->getLicenseHandler()->getLicense();
22
 
23
- $nExpiresAt = $oCurrent->getExpiresAt();
24
- if ( $nExpiresAt > 0 && $nExpiresAt != PHP_INT_MAX ) {
25
- $sExpiresAt = $oCarbon->setTimestamp( $nExpiresAt )->diffForHumans()
26
- .sprintf( '<br/><small>%s</small>', $WP->getTimeStampForDisplay( $nExpiresAt ) );
 
 
 
 
 
 
 
 
27
  }
28
  else {
29
- $sExpiresAt = 'n/a';
30
  }
31
 
32
- $nLastReqAt = $oCurrent->last_request_at;
33
- if ( empty( $nLastReqAt ) ) {
34
- $sChecked = __( 'Never', 'wp-simple-firewall' );
35
  }
36
  else {
37
- $sChecked = $oCarbon->setTimestamp( $nLastReqAt )->diffForHumans()
38
- .sprintf( '<br/><small>%s</small>', $WP->getTimeStampForDisplay( $nLastReqAt ) );
 
 
39
  }
40
- $aLicenseTableVars = [
41
- 'product_name' => $oCurrent->is_central ?
42
- $opts->getDef( 'license_item_name_sc' ) :
43
- $opts->getDef( 'license_item_name' ),
44
- 'license_active' => $mod->getLicenseHandler()->hasValidWorkingLicense() ?
45
- __( '&#10004;', 'wp-simple-firewall' ) : __( '&#10006;', 'wp-simple-firewall' ),
46
- 'license_expires' => $sExpiresAt,
47
- 'license_email' => $oCurrent->customer_email,
48
- 'last_checked' => $sChecked,
49
- 'last_errors' => $mod->hasLastErrors() ? $mod->getLastErrors( true ) : '',
50
- 'wphashes_token' => $mod->getWpHashesTokenManager()->hasToken() ?
51
- __( '&#10004;', 'wp-simple-firewall' ) : __( '&#10006;', 'wp-simple-firewall' ),
52
- 'installation_id' => $con->getSiteInstallationId(),
53
- ];
54
  return [
55
  'vars' => [
56
- 'license_table' => $aLicenseTableVars,
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  'activation_url' => $WP->getHomeUrl(),
58
  'error' => $mod->getLastErrors( true ),
59
  ],
16
  $mod = $this->getMod();
17
  $opts = $this->getOptions();
18
  $WP = Services::WpGeneral();
19
+ $carb = Services::Request()->carbon();
20
 
21
+ $lic = $mod->getLicenseHandler()->getLicense();
22
 
23
+ $expiresAt = $lic->getExpiresAt();
24
+ if ( $expiresAt > 0 && $expiresAt != PHP_INT_MAX ) {
25
+ // Expires At has a random addition added to disperse future license lookups
26
+ // So we bring the license expiration back down to normal for user display.
27
+ $endOfExpireDay = Services::Request()
28
+ ->carbon()
29
+ ->setTimestamp( $expiresAt )
30
+ ->startOfDay()->timestamp - 1;
31
+ $expiresAtHuman = sprintf( '%s<br/><small>%s</small>',
32
+ $carb->setTimestamp( $endOfExpireDay )->diffForHumans(),
33
+ $WP->getTimeStampForDisplay( $endOfExpireDay )
34
+ );
35
  }
36
  else {
37
+ $expiresAtHuman = 'n/a';
38
  }
39
 
40
+ $lastReqAt = $lic->last_request_at;
41
+ if ( empty( $lastReqAt ) ) {
42
+ $checked = __( 'Never', 'wp-simple-firewall' );
43
  }
44
  else {
45
+ $checked = sprintf( '%s<br/><small>%s</small>',
46
+ $carb->setTimestamp( $lastReqAt )->diffForHumans(),
47
+ $WP->getTimeStampForDisplay( $lastReqAt )
48
+ );
49
  }
50
+
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  return [
52
  'vars' => [
53
+ 'license_table' => [
54
+ 'product_name' => $lic->is_central ?
55
+ $opts->getDef( 'license_item_name_sc' ) :
56
+ $opts->getDef( 'license_item_name' ),
57
+ 'license_active' => $mod->getLicenseHandler()->hasValidWorkingLicense() ?
58
+ __( '&#10004;', 'wp-simple-firewall' ) : __( '&#10006;', 'wp-simple-firewall' ),
59
+ 'license_expires' => $expiresAtHuman,
60
+ 'license_email' => $lic->customer_email,
61
+ 'last_checked' => $checked,
62
+ 'last_errors' => $mod->hasLastErrors() ? $mod->getLastErrors( true ) : '',
63
+ 'wphashes_token' => $mod->getWpHashesTokenManager()->hasToken() ?
64
+ __( '&#10004;', 'wp-simple-firewall' ) : __( '&#10006;', 'wp-simple-firewall' ),
65
+ 'installation_id' => $con->getSiteInstallationId(),
66
+ ],
67
  'activation_url' => $WP->getHomeUrl(),
68
  'error' => $mod->getLastErrors( true ),
69
  ],
src/lib/src/Modules/License/WpCli.php CHANGED
@@ -2,17 +2,14 @@
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\License;
4
 
5
- use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
6
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\License;
7
 
8
- class WpCli extends Base\WpCli {
9
 
10
- /**
11
- * @inheritDoc
12
- */
13
- protected function getCmdHandlers() :array {
14
  return [
15
- new License\WpCli\License()
16
  ];
17
  }
18
  }
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\License;
4
 
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\BaseShield;
6
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\License;
7
 
8
+ class WpCli extends BaseShield\WpCli {
9
 
10
+ protected function enumCmdHandlers() :array {
 
 
 
11
  return [
12
+ License\WpCli\License::class
13
  ];
14
  }
15
  }
src/lib/src/Modules/Lockdown/ModCon.php CHANGED
@@ -20,9 +20,6 @@ class ModCon extends BaseShield\ModCon {
20
  $this->cleanApiExclusions();
21
  }
22
 
23
- /**
24
- * @deprecated 13.0.6
25
- */
26
  private function cleanApiExclusions() {
27
  /** @var Options $opts */
28
  $opts = $this->getOptions();
20
  $this->cleanApiExclusions();
21
  }
22
 
 
 
 
23
  private function cleanApiExclusions() {
24
  /** @var Options $opts */
25
  $opts = $this->getOptions();
src/lib/src/Modules/LoginGuard/AjaxHandler.php CHANGED
@@ -8,6 +8,19 @@ use FernleafSystems\Wordpress\Services\Services;
8
 
9
  class AjaxHandler extends Shield\Modules\BaseShield\AjaxHandler {
10
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  protected function processAjaxAction( string $action ) :array {
12
 
13
  switch ( $action ) {
@@ -27,6 +40,22 @@ class AjaxHandler extends Shield\Modules\BaseShield\AjaxHandler {
27
  $response = $this->ajaxExec_Disable2faEmail();
28
  break;
29
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
  case 'user_ga_toggle':
31
  $response = $this->ajaxExec_UserGaToggle();
32
  break;
@@ -63,7 +92,7 @@ class AjaxHandler extends Shield\Modules\BaseShield\AjaxHandler {
63
  $mod = $this->getMod();
64
  $userID = Services::Request()->post( 'user_id' );
65
  if ( !empty( $userID ) ) {
66
- $result = $mod->getLoginIntentController()->removeAllFactorsForUser( (int)$userID );
67
  $response = [
68
  'success' => $result->success,
69
  'message' => $result->success ? $result->msg_text : $result->error_text,
@@ -83,9 +112,10 @@ class AjaxHandler extends Shield\Modules\BaseShield\AjaxHandler {
83
  /** @var ModCon $mod */
84
  $mod = $this->getMod();
85
  /** @var TwoFactor\Provider\BackupCodes $provider */
86
- $provider = $mod->getLoginIntentController()->getProviders()[ TwoFactor\Provider\BackupCodes::SLUG ];
87
 
88
- $pass = $provider->resetSecret( Services::WpUsers()->getCurrentWpUser() );
 
89
  $pass = implode( '-', str_split( $pass, 5 ) );
90
 
91
  return [
@@ -99,9 +129,11 @@ class AjaxHandler extends Shield\Modules\BaseShield\AjaxHandler {
99
  /** @var ModCon $mod */
100
  $mod = $this->getMod();
101
  /** @var TwoFactor\Provider\BackupCodes $provider */
102
- $provider = $mod->getLoginIntentController()->getProviders()[ TwoFactor\Provider\BackupCodes::SLUG ];
103
- $provider->deleteSecret( Services::WpUsers()->getCurrentWpUser() );
104
- $mod->setFlashAdminNotice( __( 'Multi-factor login backup code has been removed from your profile', 'wp-simple-firewall' ) );
 
 
105
 
106
  return [
107
  'message' => __( 'Your backup login codes have been deleted.', 'wp-simple-firewall' ),
@@ -113,12 +145,11 @@ class AjaxHandler extends Shield\Modules\BaseShield\AjaxHandler {
113
  /** @var ModCon $mod */
114
  $mod = $this->getMod();
115
  /** @var TwoFactor\Provider\GoogleAuth $provider */
116
- $provider = $mod->getLoginIntentController()->getProviders()[ TwoFactor\Provider\GoogleAuth::SLUG ];
 
117
 
118
  $otp = Services::Request()->post( 'ga_otp', '' );
119
- $result = empty( $otp ) ?
120
- $provider->removeGaOnAccount( Services::WpUsers()->getCurrentWpUser() )
121
- : $provider->activateGaOnAccount( Services::WpUsers()->getCurrentWpUser(), $otp );
122
 
123
  return [
124
  'success' => $result->success,
@@ -131,11 +162,12 @@ class AjaxHandler extends Shield\Modules\BaseShield\AjaxHandler {
131
  /** @var ModCon $mod */
132
  $mod = $this->getMod();
133
  /** @var TwoFactor\Provider\Email $provider */
134
- $provider = $mod->getLoginIntentController()->getProviders()[ TwoFactor\Provider\Email::SLUG ];
135
 
136
- $turnOn = Services::Request()->post( 'direction' ) == 'on';
137
- $provider->setProfileValidated( Services::WpUsers()->getCurrentWpUser(), $turnOn );
138
- $success = $turnOn === $provider->isProfileActive( Services::WpUsers()->getCurrentWpUser() );
 
139
 
140
  if ( $success ) {
141
  $msg = $turnOn ? __( 'Email 2FA activated.', 'wp-simple-firewall' )
@@ -167,7 +199,7 @@ class AjaxHandler extends Shield\Modules\BaseShield\AjaxHandler {
167
  /** @var ModCon $mod */
168
  $mod = $this->getMod();
169
  /** @var TwoFactor\Provider\U2F $provider */
170
- $provider = $mod->getLoginIntentController()->getProviders()[ TwoFactor\Provider\U2F::SLUG ];
171
 
172
  $u2fReg = Services::Request()->post( 'icwp_wpsf_new_u2f_response' );
173
  if ( empty( $u2fReg ) ) {
@@ -178,7 +210,8 @@ class AjaxHandler extends Shield\Modules\BaseShield\AjaxHandler {
178
  ];
179
  }
180
  else {
181
- $result = $provider->addNewRegistration( Services::WpUsers()->getCurrentWpUser(), $u2fReg );
 
182
  $response = [
183
  'success' => $result->success,
184
  'message' => $result->success ? $result->msg_text : $result->error_text,
@@ -188,16 +221,172 @@ class AjaxHandler extends Shield\Modules\BaseShield\AjaxHandler {
188
  return $response;
189
  }
190
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
191
  private function ajaxExec_ProfileU2fRemove() :array {
192
  /** @var ModCon $mod */
193
  $mod = $this->getMod();
194
  /** @var TwoFactor\Provider\U2F $provider */
195
- $provider = $mod->getLoginIntentController()
196
  ->getProviders()[ TwoFactor\Provider\U2F::SLUG ];
197
 
198
  $key = Services::Request()->post( 'u2fid' );
199
  if ( !empty( $key ) ) {
200
- $provider->removeRegisteredU2fId( Services::WpUsers()->getCurrentWpUser(), $key );
 
201
  }
202
  return [
203
  'success' => !empty( $key ),
@@ -210,11 +399,12 @@ class AjaxHandler extends Shield\Modules\BaseShield\AjaxHandler {
210
  /** @var ModCon $mod */
211
  $mod = $this->getMod();
212
  /** @var TwoFactor\Provider\Yubikey $provider */
213
- $provider = $mod->getLoginIntentController()
214
  ->getProviders()[ TwoFactor\Provider\Yubikey::SLUG ];
215
 
216
  $otp = Services::Request()->post( 'otp', '' );
217
- $result = $provider->toggleRegisteredYubiID( Services::WpUsers()->getCurrentWpUser(), $otp );
 
218
  return [
219
  'success' => $result->success,
220
  'message' => $result->success ? $result->msg_text : $result->error_text,
8
 
9
  class AjaxHandler extends Shield\Modules\BaseShield\AjaxHandler {
10
 
11
+ protected function processNonAuthAjaxAction( string $action ) :array {
12
+
13
+ switch ( $action ) {
14
+ case 'intent_email_send':
15
+ $response = $this->ajaxExec_IntentEmailSend();
16
+ break;
17
+ default:
18
+ $response = parent::processNonAuthAjaxAction( $action );
19
+ }
20
+
21
+ return $response;
22
+ }
23
+
24
  protected function processAjaxAction( string $action ) :array {
25
 
26
  switch ( $action ) {
40
  $response = $this->ajaxExec_Disable2faEmail();
41
  break;
42
 
43
+ case 'user_sms2fa_add':
44
+ $response = $this->ajaxExec_UserSmsAdd();
45
+ break;
46
+
47
+ case 'user_sms2fa_remove':
48
+ $response = $this->ajaxExec_UserSmsRemove();
49
+ break;
50
+
51
+ case 'user_sms2fa_verify':
52
+ $response = $this->ajaxExec_UserSmsVerify();
53
+ break;
54
+
55
+ case 'intent_sms_send':
56
+ $response = $this->ajaxExec_UserSmsIntentStart();
57
+ break;
58
+
59
  case 'user_ga_toggle':
60
  $response = $this->ajaxExec_UserGaToggle();
61
  break;
92
  $mod = $this->getMod();
93
  $userID = Services::Request()->post( 'user_id' );
94
  if ( !empty( $userID ) ) {
95
+ $result = $mod->getMfaController()->removeAllFactorsForUser( (int)$userID );
96
  $response = [
97
  'success' => $result->success,
98
  'message' => $result->success ? $result->msg_text : $result->error_text,
112
  /** @var ModCon $mod */
113
  $mod = $this->getMod();
114
  /** @var TwoFactor\Provider\BackupCodes $provider */
115
+ $provider = $mod->getMfaController()->getProviders()[ TwoFactor\Provider\BackupCodes::SLUG ];
116
 
117
+ $pass = $provider->setUser( Services::WpUsers()->getCurrentWpUser() )
118
+ ->resetSecret();
119
  $pass = implode( '-', str_split( $pass, 5 ) );
120
 
121
  return [
129
  /** @var ModCon $mod */
130
  $mod = $this->getMod();
131
  /** @var TwoFactor\Provider\BackupCodes $provider */
132
+ $provider = $mod->getMfaController()->getProviders()[ TwoFactor\Provider\BackupCodes::SLUG ];
133
+ $provider->setUser( Services::WpUsers()->getCurrentWpUser() )->remove();
134
+ $mod->setFlashAdminNotice(
135
+ __( 'Multi-factor login backup code has been removed from your profile', 'wp-simple-firewall' )
136
+ );
137
 
138
  return [
139
  'message' => __( 'Your backup login codes have been deleted.', 'wp-simple-firewall' ),
145
  /** @var ModCon $mod */
146
  $mod = $this->getMod();
147
  /** @var TwoFactor\Provider\GoogleAuth $provider */
148
+ $provider = $mod->getMfaController()->getProviders()[ TwoFactor\Provider\GoogleAuth::SLUG ];
149
+ $provider->setUser( Services::WpUsers()->getCurrentWpUser() );
150
 
151
  $otp = Services::Request()->post( 'ga_otp', '' );
152
+ $result = empty( $otp ) ? $provider->removeGA() : $provider->activateGA( $otp );
 
 
153
 
154
  return [
155
  'success' => $result->success,
162
  /** @var ModCon $mod */
163
  $mod = $this->getMod();
164
  /** @var TwoFactor\Provider\Email $provider */
165
+ $provider = $mod->getMfaController()->getProviders()[ TwoFactor\Provider\Email::SLUG ];
166
 
167
+ $turnOn = Services::Request()->post( 'direction' ) === 'on';
168
+ $provider->setUser( Services::WpUsers()->getCurrentWpUser() )
169
+ ->setProfileValidated( $turnOn );
170
+ $success = $turnOn === $provider->isProfileActive();
171
 
172
  if ( $success ) {
173
  $msg = $turnOn ? __( 'Email 2FA activated.', 'wp-simple-firewall' )
199
  /** @var ModCon $mod */
200
  $mod = $this->getMod();
201
  /** @var TwoFactor\Provider\U2F $provider */
202
+ $provider = $mod->getMfaController()->getProviders()[ TwoFactor\Provider\U2F::SLUG ];
203
 
204
  $u2fReg = Services::Request()->post( 'icwp_wpsf_new_u2f_response' );
205
  if ( empty( $u2fReg ) ) {
210
  ];
211
  }
212
  else {
213
+ $result = $provider->setUser( Services::WpUsers()->getCurrentWpUser() )
214
+ ->addNewRegistration( $u2fReg );
215
  $response = [
216
  'success' => $result->success,
217
  'message' => $result->success ? $result->msg_text : $result->error_text,
221
  return $response;
222
  }
223
 
224
+ private function ajaxExec_UserSmsAdd() :array {
225
+ /** @var ModCon $mod */
226
+ $mod = $this->getMod();
227
+ $req = Services::Request();
228
+ /** @var TwoFactor\Provider\Sms $provider */
229
+ $provider = $mod->getMfaController()->getProviders()[ TwoFactor\Provider\Sms::SLUG ];
230
+
231
+ $countryCode = $req->post( 'sms_country' );
232
+ $phoneNum = $req->post( 'sms_phone' );
233
+
234
+ $response = [
235
+ 'success' => false,
236
+ 'message' => __( 'Either the country code or phone number were missing.', 'wp-simple-firewall' ),
237
+ 'page_reload' => true
238
+ ];
239
+
240
+ if ( empty( $countryCode ) ) {
241
+ $response[ 'message' ] = __( 'The country code was missing.', 'wp-simple-firewall' );
242
+ }
243
+ elseif ( empty( $phoneNum ) ) {
244
+ $response[ 'message' ] = __( 'The phone number was missing.', 'wp-simple-firewall' );
245
+ }
246
+ else {
247
+ $user = Services::WpUsers()->getCurrentWpUser();
248
+ try {
249
+ $response = [
250
+ 'success' => true,
251
+ 'message' => __( 'Please confirm the 6-digit code sent to your phone.', 'wp-simple-firewall' ),
252
+ 'code' => $provider->setUser( $user )
253
+ ->addProvisionalRegistration( $countryCode, $phoneNum ),
254
+ 'page_reload' => false
255
+ ];
256
+ }
257
+ catch ( \Exception $e ) {
258
+ $response = [
259
+ 'success' => false,
260
+ 'message' => esc_html( $e->getMessage() ),
261
+ 'page_reload' => false
262
+ ];
263
+ }
264
+ }
265
+
266
+ return $response;
267
+ }
268
+
269
+ private function ajaxExec_UserSmsRemove() :array {
270
+ /** @var ModCon $mod */
271
+ $mod = $this->getMod();
272
+ /** @var TwoFactor\Provider\Sms $provider */
273
+ $provider = $mod->getMfaController()->getProviders()[ TwoFactor\Provider\Sms::SLUG ];
274
+ $provider->setUser( Services::WpUsers()->getCurrentWpUser() )
275
+ ->remove();
276
+ return [
277
+ 'success' => true,
278
+ 'message' => __( 'SMS Registration Removed', 'wp-simple-firewall' ),
279
+ 'page_reload' => true
280
+ ];
281
+ }
282
+
283
+ private function ajaxExec_IntentEmailSend() :array {
284
+ /** @var ModCon $mod */
285
+ $mod = $this->getMod();
286
+ $mfaCon = $mod->getMfaController();
287
+
288
+ $success = false;
289
+ $userID = Services::Request()->post( 'wp_user_id' );
290
+ $loginNonce = Services::Request()->post( 'login_nonce' );
291
+ if ( !empty( $userID ) && !empty( $loginNonce ) ) {
292
+ $user = Services::WpUsers()->getUserById( $userID );
293
+ $nonces = array_keys( $mfaCon->getActiveLoginIntents( $user ) );
294
+ if ( $user instanceof \WP_User && in_array( $loginNonce, $nonces ) ) {
295
+ /** @var TwoFactor\Provider\Email $provider */
296
+ $provider = $mod->getMfaController()
297
+ ->getProvidersForUser( $user, true )[ TwoFactor\Provider\Email::SLUG ] ?? null;
298
+ $success = !empty( $provider ) && $provider->sendEmailTwoFactorVerify( $loginNonce );
299
+ }
300
+ }
301
+
302
+ return [
303
+ 'success' => $success,
304
+ 'message' => $success ? __( 'One-Time Password was sent to your registered email address.', 'wp-simple-firewall' )
305
+ : __( 'There was a problem sending the One-Time Password email.', 'wp-simple-firewall' ),
306
+ 'page_reload' => true
307
+ ];
308
+ }
309
+
310
+ private function ajaxExec_UserSmsIntentStart() :array {
311
+ /** @var ModCon $mod */
312
+ $mod = $this->getMod();
313
+ /** @var TwoFactor\Provider\Sms $provider */
314
+ $provider = $mod->getMfaController()->getProviders()[ TwoFactor\Provider\Sms::SLUG ];
315
+ try {
316
+ $provider->setUser( Services::WpUsers()->getCurrentWpUser() )
317
+ ->startLoginIntent();
318
+ $response = [
319
+ 'success' => true,
320
+ 'message' => __( 'One-Time Password was sent to your phone.', 'wp-simple-firewall' ),
321
+ 'page_reload' => true
322
+ ];
323
+ }
324
+ catch ( \Exception $e ) {
325
+ $response = [
326
+ 'success' => false,
327
+ 'message' => $e->getMessage(),
328
+ 'page_reload' => true
329
+ ];
330
+ }
331
+ return $response;
332
+ }
333
+
334
+ private function ajaxExec_UserSmsVerify() :array {
335
+ /** @var ModCon $mod */
336
+ $mod = $this->getMod();
337
+ $req = Services::Request();
338
+ /** @var TwoFactor\Provider\Sms $provider */
339
+ $provider = $mod->getMfaController()->getProviders()[ TwoFactor\Provider\Sms::SLUG ];
340
+
341
+ $countryCode = $req->post( 'sms_country' );
342
+ $phoneNum = $req->post( 'sms_phone' );
343
+ $verifyCode = $req->post( 'sms_code' );
344
+
345
+ $response = [
346
+ 'success' => false,
347
+ 'message' => __( 'SMS Verification Failed.', 'wp-simple-firewall' ),
348
+ 'page_reload' => true
349
+ ];
350
+
351
+ if ( empty( $verifyCode ) ) {
352
+ $response[ 'message' ] = __( 'The code provided was empty.', 'wp-simple-firewall' );
353
+ }
354
+ elseif ( empty( $countryCode ) || empty( $phoneNum ) ) {
355
+ $response[ 'message' ] = __( 'The data provided was inconsistent.', 'wp-simple-firewall' );
356
+ }
357
+ else {
358
+ try {
359
+ $response = [
360
+ 'success' => true,
361
+ 'message' => __( 'Phone verified and registered successfully for SMS Two-Factor Authentication.', 'wp-simple-firewall' ),
362
+ 'code' => $provider->setUser( Services::WpUsers()->getCurrentWpUser() )
363
+ ->verifyProvisionalRegistration( $countryCode, $phoneNum, $verifyCode ),
364
+ 'page_reload' => false
365
+ ];
366
+ }
367
+ catch ( \Exception $e ) {
368
+ $response = [
369
+ 'success' => false,
370
+ 'message' => esc_html( $e->getMessage() ),
371
+ 'page_reload' => false
372
+ ];
373
+ }
374
+ }
375
+
376
+ return $response;
377
+ }
378
+
379
  private function ajaxExec_ProfileU2fRemove() :array {
380
  /** @var ModCon $mod */
381
  $mod = $this->getMod();
382
  /** @var TwoFactor\Provider\U2F $provider */
383
+ $provider = $mod->getMfaController()
384
  ->getProviders()[ TwoFactor\Provider\U2F::SLUG ];
385
 
386
  $key = Services::Request()->post( 'u2fid' );
387
  if ( !empty( $key ) ) {
388
+ $provider->setUser( Services::WpUsers()->getCurrentWpUser() )
389
+ ->removeRegisteredU2fId( $key );
390
  }
391
  return [
392
  'success' => !empty( $key ),
399
  /** @var ModCon $mod */
400
  $mod = $this->getMod();
401
  /** @var TwoFactor\Provider\Yubikey $provider */
402
+ $provider = $mod->getMfaController()
403
  ->getProviders()[ TwoFactor\Provider\Yubikey::SLUG ];
404
 
405
  $otp = Services::Request()->post( 'otp', '' );
406
+ $result = $provider->setUser( Services::WpUsers()->getCurrentWpUser() )
407
+ ->toggleRegisteredYubiID( $otp );
408
  return [
409
  'success' => $result->success,
410
  'message' => $result->success ? $result->msg_text : $result->error_text,
src/lib/src/Modules/LoginGuard/Lib/AntiBot/AntibotSetup.php CHANGED
@@ -23,7 +23,7 @@ class AntibotSetup extends ExecOnceModConsumer {
23
  $opts = $this->getOptions();
24
 
25
  $providers = [];
26
- if ( $opts->isEnabledCooldown() && $this->getCon()->hasCacheDir() ) {
27
  $providers[] = ( new AntiBot\ProtectionProviders\CoolDown() )
28
  ->setMod( $mod );
29
  }
23
  $opts = $this->getOptions();
24
 
25
  $providers = [];
26
+ if ( $opts->isEnabledCooldown() && $this->getCon()->cache_dir_handler->dirExists() ) {
27
  $providers[] = ( new AntiBot\ProtectionProviders\CoolDown() )
28
  ->setMod( $mod );
29
  }
src/lib/src/Modules/LoginGuard/Lib/Rename/RenameLogin.php CHANGED
@@ -14,10 +14,13 @@ class RenameLogin {
14
  use ExecOnce;
15
 
16
  protected function canRun() :bool {
 
 
17
  /** @var Options $opts */
18
  $opts = $this->getOptions();
19
  return !Services::IP()->isLoopback()
20
  && !empty( $opts->getCustomLoginPath() )
 
21
  && !$this->hasPluginConflict() && !$this->hasUnsupportedConfiguration();
22
  }
23
 
@@ -26,29 +29,27 @@ class RenameLogin {
26
  }
27
 
28
  public function onWpInit() {
29
- /** @var LoginGuard\ModCon $mod */
30
- $mod = $this->getMod();
31
-
32
- if ( Services::WpGeneral()->isLoginUrl() &&
33
- ( $mod->isVisitorWhitelisted() || Services::WpUsers()->isUserLoggedIn() ) ) {
34
  return;
35
  }
36
- if ( is_admin() && $mod->isVisitorWhitelisted() && !Services::WpUsers()->isUserLoggedIn() ) {
37
  return;
38
  }
 
39
 
40
- $this->doBlockPossibleWpLoginLoad();
 
 
 
 
41
 
42
- // Loads the wp-login.php if the correct URL is loaded
43
- add_action( 'wp_loaded', [ $this, 'aLoadWpLogin' ] );
44
 
45
  // Shouldn't be necessary, but in-case something else includes the wp-login.php, we block that too.
46
  add_action( 'login_init', [ $this, 'aLoginFormAction' ], 0 );
47
 
48
  // ensure that wp-login.php is never used in site urls or redirects
49
- add_filter( 'site_url', [ $this, 'fCheckForLoginPhp' ], 20 );
50
- add_filter( 'network_site_url', [ $this, 'fCheckForLoginPhp' ], 20 );
51
- add_filter( 'wp_redirect', [ $this, 'fCheckForLoginPhp' ], 20 );
52
  if ( !Services::WpUsers()->isUserLoggedIn() ) {
53
  add_filter( 'wp_redirect', [ $this, 'fProtectUnauthorizedLoginRedirect' ], 50 );
54
  }
@@ -57,6 +58,12 @@ class RenameLogin {
57
  add_filter( 'et_anticipate_exceptions', [ $this, 'fAddToEtMaintenanceExceptions' ] );
58
  }
59
 
 
 
 
 
 
 
60
  private function hasPluginConflict() :bool {
61
  /** @var LoginGuard\ModCon $mod */
62
  $mod = $this->getMod();
@@ -94,7 +101,7 @@ class RenameLogin {
94
  $mod->setFlashAdminNotice( sprintf( '<strong>%s</strong>: %s',
95
  __( 'Warning', 'wp-simple-firewall' ),
96
  $msg
97
- ), true );
98
  }
99
 
100
  return $isConflicted;
@@ -113,6 +120,7 @@ class RenameLogin {
113
  __( 'Warning', 'wp-simple-firewall' ),
114
  __( 'Your login URL is unchanged because your current hosting/PHP configuration cannot parse the necessary information.', 'wp-simple-firewall' )
115
  ),
 
116
  true
117
  );
118
  }
@@ -122,7 +130,7 @@ class RenameLogin {
122
 
123
  public function doBlockPossibleWpLoginLoad() {
124
 
125
- // To begin, we block if it's an access to the admin area and the user isn't logged in (and it's not ajax)
126
  $doBlock = is_admin() && !Services::WpGeneral()->isAjax()
127
  && !Services::WpUsers()->isUserLoggedIn();
128
 
@@ -200,7 +208,7 @@ class RenameLogin {
200
  return $url;
201
  }
202
 
203
- public function aLoadWpLogin() {
204
  if ( Services::WpGeneral()->isLoginUrl() ) {
205
  // To prevent PHP warnings about undefined vars
206
  $user_login = $error = '';
@@ -218,27 +226,34 @@ class RenameLogin {
218
 
219
  /**
220
  * Add the custom login URL to the Elegant Themes Maintenance Mode plugin URL exceptions list
221
- * @param array $aUrlExceptions
222
  * @return array
223
  */
224
- public function fAddToEtMaintenanceExceptions( $aUrlExceptions ) {
225
  /** @var LoginGuard\Options $opts */
226
  $opts = $this->getOptions();
227
- $aUrlExceptions[] = $opts->getCustomLoginPath();
228
- return $aUrlExceptions;
229
  }
230
 
231
  /**
232
  * Will by default send a 404 response screen. Has a filter to specify redirect URL.
233
  */
234
  protected function doWpLoginFailedRedirect404() {
 
 
 
235
  $this->getCon()->fireEvent( 'hide_login_url' );
236
 
237
- $sRedirectUrl = apply_filters( 'icwp_shield_renamewplogin_redirect_url', false );
238
- if ( !empty( $sRedirectUrl ) ) {
239
- $sRedirectUrl = esc_url( $sRedirectUrl );
240
- if ( @parse_url( $sRedirectUrl ) !== false ) {
241
- Services::Response()->redirect( $sRedirectUrl, [], false );
 
 
 
 
242
  }
243
  }
244
 
14
  use ExecOnce;
15
 
16
  protected function canRun() :bool {
17
+ /** @var LoginGuard\ModCon $mod */
18
+ $mod = $this->getMod();
19
  /** @var Options $opts */
20
  $opts = $this->getOptions();
21
  return !Services::IP()->isLoopback()
22
  && !empty( $opts->getCustomLoginPath() )
23
+ && !$mod->isVisitorWhitelisted()
24
  && !$this->hasPluginConflict() && !$this->hasUnsupportedConfiguration();
25
  }
26
 
29
  }
30
 
31
  public function onWpInit() {
32
+ if ( Services::WpGeneral()->isLoginUrl() && Services::WpUsers()->isUserLoggedIn() ) {
 
 
 
 
33
  return;
34
  }
35
+ if ( is_admin() && !Services::WpUsers()->isUserLoggedIn() ) {
36
  return;
37
  }
38
+ $this->replaceLoginURL();
39
 
40
+ // Intercept requests
41
+ add_action( 'wp_loaded', [ $this, 'onWpLoaded' ], 11 );
42
+ }
43
+
44
+ public function onWpLoaded() {
45
 
46
+ $this->doBlockPossibleWpLoginLoad();
47
+ $this->loadWpLoginContent(); // Loads the wp-login.php if the correct URL is loaded
48
 
49
  // Shouldn't be necessary, but in-case something else includes the wp-login.php, we block that too.
50
  add_action( 'login_init', [ $this, 'aLoginFormAction' ], 0 );
51
 
52
  // ensure that wp-login.php is never used in site urls or redirects
 
 
 
53
  if ( !Services::WpUsers()->isUserLoggedIn() ) {
54
  add_filter( 'wp_redirect', [ $this, 'fProtectUnauthorizedLoginRedirect' ], 50 );
55
  }
58
  add_filter( 'et_anticipate_exceptions', [ $this, 'fAddToEtMaintenanceExceptions' ] );
59
  }
60
 
61
+ private function replaceLoginURL() {
62
+ add_filter( 'site_url', [ $this, 'fCheckForLoginPhp' ], 20 );
63
+ add_filter( 'network_site_url', [ $this, 'fCheckForLoginPhp' ], 20 );
64
+ add_filter( 'wp_redirect', [ $this, 'fCheckForLoginPhp' ], 20 );
65
+ }
66
+
67
  private function hasPluginConflict() :bool {
68
  /** @var LoginGuard\ModCon $mod */
69
  $mod = $this->getMod();
101
  $mod->setFlashAdminNotice( sprintf( '<strong>%s</strong>: %s',
102
  __( 'Warning', 'wp-simple-firewall' ),
103
  $msg
104
+ ), null, true );
105
  }
106
 
107
  return $isConflicted;
120
  __( 'Warning', 'wp-simple-firewall' ),
121
  __( 'Your login URL is unchanged because your current hosting/PHP configuration cannot parse the necessary information.', 'wp-simple-firewall' )
122
  ),
123
+ null,
124
  true
125
  );
126
  }
130
 
131
  public function doBlockPossibleWpLoginLoad() {
132
 
133
+ // To begin, we block if it's a request to the admin area and the user isn't logged in (and it's not ajax)
134
  $doBlock = is_admin() && !Services::WpGeneral()->isAjax()
135
  && !Services::WpUsers()->isUserLoggedIn();
136
 
208
  return $url;
209
  }
210
 
211
+ public function loadWpLoginContent() {
212
  if ( Services::WpGeneral()->isLoginUrl() ) {
213
  // To prevent PHP warnings about undefined vars
214
  $user_login = $error = '';
226
 
227
  /**
228
  * Add the custom login URL to the Elegant Themes Maintenance Mode plugin URL exceptions list
229
+ * @param array $urlExceptions
230
  * @return array
231
  */
232
+ public function fAddToEtMaintenanceExceptions( $urlExceptions ) {
233
  /** @var LoginGuard\Options $opts */
234
  $opts = $this->getOptions();
235
+ $urlExceptions[] = $opts->getCustomLoginPath();
236
+ return $urlExceptions;
237
  }
238
 
239
  /**
240
  * Will by default send a 404 response screen. Has a filter to specify redirect URL.
241
  */
242
  protected function doWpLoginFailedRedirect404() {
243
+ /** @var LoginGuard\Options $opts */
244
+ $opts = $this->getOptions();
245
+
246
  $this->getCon()->fireEvent( 'hide_login_url' );
247
 
248
+ $redirectPath = $opts->getHiddenLoginRedirect();
249
+ $redirectUrl = empty( $redirectPath ) ? '' : site_url( $redirectPath );
250
+ $redirectUrl = apply_filters( 'shield/renamewplogin_redirect_url',
251
+ apply_filters( 'icwp_shield_renamewplogin_redirect_url', $redirectUrl ) );
252
+
253
+ if ( !empty( $redirectUrl ) ) {
254
+ $redirectUrl = esc_url( $redirectUrl );
255
+ if ( @wp_parse_url( $redirectUrl ) !== false ) {
256
+ Services::Response()->redirect( $redirectUrl, [], false );
257
  }
258
  }
259
 
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Exceptions/CouldNotValidate2FA.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php declare( strict_types=1 );
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor\Exceptions;
4
+
5
+ class CouldNotValidate2FA extends \Exception {
6
+
7
+ }
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Exceptions/LoginCancelException.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php declare( strict_types=1 );
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor\Exceptions;
4
+
5
+ class LoginCancelException extends \Exception {
6
+
7
+ }
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Exceptions/NoActiveProvidersForUserException.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php declare( strict_types=1 );
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor\Exceptions;
4
+
5
+ class NoActiveProvidersForUserException extends \Exception {
6
+
7
+ }
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Exceptions/NoLoginIntentForUserException.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php declare( strict_types=1 );
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor\Exceptions;
4
+
5
+ class NoLoginIntentForUserException extends \Exception {
6
+
7
+ }
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Exceptions/NotValidUserException.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php declare( strict_types=1 );
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor\Exceptions;
4
+
5
+ class NotValidUserException extends \Exception {
6
+
7
+ }
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Exceptions/TooManyAttemptsException.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php declare( strict_types=1 );
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor\Exceptions;
4
+
5
+ class TooManyAttemptsException extends \Exception {
6
+
7
+ }
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/LoginIntentPage.php DELETED
@@ -1,170 +0,0 @@
1
- <?php
2
-
3
- namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor;
4
-
5
- use FernleafSystems\Wordpress\Plugin\Shield;
6
- use FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
7
- use FernleafSystems\Wordpress\Plugin\Shield\Utilities\AdminNotices\NoticeVO;
8
- use FernleafSystems\Wordpress\Services\Services;
9
-
10
- class LoginIntentPage {
11
-
12
- use MfaControllerConsumer;
13
-
14
- public function loadPage() {
15
- echo $this->renderPage();
16
- }
17
-
18
- public function renderForm() :string {
19
- $mfaCon = $this->getMfaCon();
20
- /** @var LoginGuard\ModCon $mod */
21
- $mod = $mfaCon->getMod();
22
- /** @var LoginGuard\Options $opts */
23
- $opts = $mfaCon->getOptions();
24
- $con = $mfaCon->getCon();
25
- $req = Services::Request();
26
- $WP = Services::WpGeneral();
27
-
28
- $notice = $con->getAdminNotices()->getFlashNotice();
29
- if ( $notice instanceof NoticeVO ) {
30
- $msg = $notice->render_data[ 'message' ];
31
- }
32
- else {
33
- $msg = $opts->isChainedAuth() ?
34
- __( 'Please supply all authentication codes', 'wp-simple-firewall' )
35
- : __( 'Please supply at least 1 authentication code', 'wp-simple-firewall' );
36
- }
37
-
38
- if ( !empty( $msg ) && !$con->getModule_SecAdmin()->getWhiteLabelController()->isEnabled() ) {
39
- $msg .= sprintf( ' [<a href="%s" target="_blank">%s</a>]', 'https://shsec.io/shieldcantaccess', __( 'More Info', 'wp-simple-firewall' ) );
40
- }
41
-
42
- $referUrl = $req->server( 'HTTP_REFERER', '' );
43
- if ( strpos( $referUrl, '?' ) ) {
44
- list( $referUrl, $referQuery ) = explode( '?', $referUrl, 2 );
45
- }
46
- else {
47
- $referQuery = '';
48
- }
49
-
50
- $redirectTo = '';
51
- if ( !empty( $referQuery ) ) {
52
- parse_str( $referQuery, $aReferQueryItems );
53
- if ( !empty( $aReferQueryItems[ 'redirect_to' ] ) ) {
54
- $redirectTo = rawurlencode( $aReferQueryItems[ 'redirect_to' ] );
55
- }
56
- }
57
- if ( empty( $redirectTo ) ) {
58
- $redirectTo = rawurlencode( $req->post( 'redirect_to', $req->getUri() ) );
59
- }
60
-
61
- $cancelHref = $req->post( 'cancel_href', '' );
62
- if ( empty( $cancelHref ) && Services::Data()->isValidWebUrl( $referUrl ) ) {
63
- $cancelHref = parse_url( $referUrl, PHP_URL_PATH );
64
- }
65
-
66
- $nMfaSkip = (int)( $opts->getMfaSkip()/DAY_IN_SECONDS );
67
- $timeRemaining = $mfaCon->getLoginIntentExpiresAt() - $req->ts();
68
-
69
- $data = [
70
- 'strings' => [
71
- 'cancel' => __( 'Cancel Login', 'wp-simple-firewall' ),
72
- 'time_remaining' => __( 'Time Remaining', 'wp-simple-firewall' ),
73
- 'calculating' => __( 'Calculating', 'wp-simple-firewall' ).' ...',
74
- 'seconds' => strtolower( __( 'Seconds', 'wp-simple-firewall' ) ),
75
- 'login_expired' => __( 'Login Expired', 'wp-simple-firewall' ),
76
- 'verify_my_login' => __( 'Verify My Login', 'wp-simple-firewall' ),
77
- 'message' => $msg,
78
- 'skip_mfa' => sprintf(
79
- __( "Don't ask again on this browser for %s.", 'wp-simple-firewall' ),
80
- sprintf( _n( '%s day', '%s days', $nMfaSkip, 'wp-simple-firewall' ), $nMfaSkip )
81
- )
82
- ],
83
- 'data' => [
84
- 'login_fields' => array_filter( array_map(
85
- function ( $oProvider ) {
86
- return $oProvider->getFormField();
87
- },
88
- $mfaCon->getProvidersForUser( Services::WpUsers()->getCurrentWpUser(), true )
89
- ) ),
90
- 'time_remaining' => $timeRemaining,
91
- 'message_type' => 'info',
92
- 'login_intent_flag' => $mod->getLoginIntentRequestFlag(),
93
- ],
94
- 'hrefs' => [
95
- 'form_action' => parse_url( $WP->getAdminUrl( '', true ), PHP_URL_PATH ),
96
- 'redirect_to' => $redirectTo,
97
- 'cancel_href' => $cancelHref
98
- ],
99
- 'flags' => [
100
- 'can_skip_mfa' => $opts->isMfaSkip(),
101
- 'show_branded_links' => !$con->getModule_SecAdmin()->getWhiteLabelController()->isEnabled(),
102
- ]
103
- ];
104
-
105
- return $mod->renderTemplate(
106
- '/snippets/login_intent/form.twig',
107
- Services::DataManipulation()->mergeArraysRecursive(
108
- $mod->getUIHandler()->getBaseDisplayData(), $data ),
109
- true
110
- );
111
- }
112
-
113
- private function renderPage() :string {
114
- $IC = $this->getMfaCon();
115
- /** @var LoginGuard\ModCon $mod */
116
- $mod = $IC->getMod();
117
- $con = $IC->getCon();
118
- $req = Services::Request();
119
-
120
- $labels = $con->getLabels();
121
- $bannerURL = empty( $labels[ 'url_login2fa_logourl' ] ) ? $con->urls->forImage( 'shield/banner-2FA.png' ) : $labels[ 'url_login2fa_logourl' ];
122
- $timeRemaining = $IC->getLoginIntentExpiresAt() - $req->ts();
123
-
124
- $data = [
125
- 'strings' => [
126
- 'what_is_this' => __( 'What is this?', 'wp-simple-firewall' ),
127
- 'page_title' => sprintf( __( '%s Login Verification', 'wp-simple-firewall' ), $con->getHumanName() ),
128
- ],
129
- 'data' => [
130
- 'time_remaining' => $timeRemaining,
131
- ],
132
- 'hrefs' => [
133
- 'css_bootstrap' => $con->urls->forCss( 'bootstrap' ),
134
- 'js_bootstrap' => $con->urls->forJs( 'bootstrap' ),
135
- 'shield_logo' => 'https://ps.w.org/wp-simple-firewall/assets/banner-772x250.png',
136
- 'what_is_this' => 'https://support.getshieldsecurity.com/support/solutions/articles/3000064840',
137
- ],
138
- 'imgs' => [
139
- 'banner' => $bannerURL,
140
- 'favicon' => $con->urls->forImage( 'pluginlogo_24x24.png' ),
141
- ],
142
- 'flags' => [
143
- 'show_branded_links' => !$con->getModule_SecAdmin()->getWhiteLabelController()->isEnabled(),
144
- 'has_u2f' => isset( $IC->getProvidersForUser(
145
- Services::WpUsers()->getCurrentWpUser(), true )[ LoginGuard\Lib\TwoFactor\Provider\U2F::SLUG ] )
146
- ],
147
- 'content' => [
148
- 'form' => $this->renderForm(),
149
- ]
150
- ];
151
-
152
- // Provide the U2F scripts if required.
153
- if ( $data[ 'flags' ][ 'has_u2f' ] ) {
154
- $data[ 'head' ] = [
155
- 'scripts' => [
156
- [
157
- 'src' => $con->urls->forJs( 'u2f-bundle.js' ),
158
- ],
159
- [
160
- 'src' => $con->urls->forJs( 'login/u2f.js' ),
161
- ]
162
- ]
163
- ];
164
- }
165
-
166
- return $mod->renderTemplate( '/pages/login_intent/index.twig',
167
- Services::DataManipulation()->mergeArraysRecursive(
168
- $mod->getUIHandler()->getBaseDisplayData(), $data ), true );
169
- }
170
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/LoginIntentRequestCapture.php ADDED
@@ -0,0 +1,153 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare( strict_types=1 );
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield;
6
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
7
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor\Exceptions\{
8
+ CouldNotValidate2FA,
9
+ LoginCancelException,
10
+ NoActiveProvidersForUserException,
11
+ NoLoginIntentForUserException,
12
+ NotValidUserException,
13
+ TooManyAttemptsException
14
+ };
15
+ use FernleafSystems\Wordpress\Services\Services;
16
+
17
+ class LoginIntentRequestCapture extends Shield\Modules\Base\Common\ExecOnceModConsumer {
18
+
19
+ protected function canRun() :bool {
20
+ return $this->getCon()->getShieldAction() === 'wp_login_2fa_verify'
21
+ && !Services::WpUsers()->isUserLoggedIn();
22
+ }
23
+
24
+ protected function run() {
25
+ add_action( 'wp_loaded', [ $this, 'onWpLoaded' ], 8 ); // before rename login render
26
+ }
27
+
28
+ public function onWpLoaded() {
29
+ /** @var LoginGuard\ModCon $mod */
30
+ $mod = $this->getMod();
31
+ $mfaCon = $mod->getMfaController();
32
+ $req = Services::Request();
33
+
34
+ $user = $req->post( 'wp_user_id' ) ? Services::WpUsers()->getUserById( $req->post( 'wp_user_id' ) ) : null;
35
+
36
+ try {
37
+ $this->capture();
38
+ }
39
+ catch ( LoginCancelException $e ) {
40
+ $redirect = $req->post( 'cancel_href' );
41
+ empty( $redirect ) ? Services::Response()->redirectToLogin() : Services::Response()->redirect( $redirect );
42
+ }
43
+ catch ( NotValidUserException $e ) {
44
+ // put error about no login intent
45
+ Services::Response()->redirectToLogin( [
46
+ 'shield_msg' => 'no_user_login_intent'
47
+ ] );
48
+ }
49
+ catch ( NoLoginIntentForUserException $e ) {
50
+ // put error about no login intent
51
+ Services::Response()->redirectToLogin( [
52
+ 'shield_msg' => 'no_user_login_intent'
53
+ ] );
54
+ }
55
+ catch ( TooManyAttemptsException $e ) {
56
+ // put error about no login intent
57
+ Services::Response()->redirectToLogin( [
58
+ 'shield_msg' => 'too_many_attempts'
59
+ ] );
60
+ }
61
+ catch ( NoActiveProvidersForUserException $e ) {
62
+ Services::Response()->redirectToLogin( [
63
+ 'shield_msg' => 'no_providers'
64
+ ] );
65
+ }
66
+ catch ( CouldNotValidate2FA $e ) {
67
+ // Allow a further attempt to 2FA
68
+ $pageRender = $mfaCon->useLoginIntentPage() ? new Render\RenderLoginIntentPage() : new Render\RenderWpLoginReplica();
69
+ $pageRender->setMod( $mod )
70
+ ->setWpUser( $user );
71
+ $pageRender->login_nonce = $req->request( 'login_nonce', false, '' );
72
+ $pageRender->redirect_to = $req->request( 'redirect_to', false, $req->getPath() );
73
+ $pageRender->rememberme = $req->request( 'rememberme' );
74
+ $pageRender->msg_error = __( 'Could not verify your 2FA codes', 'wp-simple-firewall' );
75
+ $pageRender->render(); // die();
76
+ }
77
+ }
78
+
79
+ /**
80
+ * @throws CouldNotValidate2FA
81
+ * @throws Exceptions\TooManyAttemptsException
82
+ * @throws LoginCancelException
83
+ * @throws NoActiveProvidersForUserException
84
+ * @throws NoLoginIntentForUserException
85
+ * @throws NotValidUserException
86
+ */
87
+ private function capture() {
88
+ $con = $this->getCon();
89
+ /** @var LoginGuard\ModCon $mod */
90
+ $mod = $this->getMod();
91
+ /** @var LoginGuard\Options $opts */
92
+ $opts = $this->getOptions();
93
+ $req = Services::Request();
94
+
95
+ if ( $req->post( 'cancel' ) ) {
96
+ throw new LoginCancelException();
97
+ }
98
+
99
+ $user = Services::WpUsers()->getUserById( $req->post( 'wp_user_id' ) );
100
+ if ( empty( $user ) ) {
101
+ throw new NotValidUserException();
102
+ }
103
+
104
+ $nonce = (string)$req->post( 'login_nonce' );
105
+ if ( !preg_match( '#^[a-z0-9]{10}$#i', $nonce ) ) {
106
+ throw new NoLoginIntentForUserException();
107
+ }
108
+
109
+ $valid = ( new LoginIntentRequestValidate() )
110
+ ->setMod( $mod )
111
+ ->setWpUser( $user )
112
+ ->run( $nonce );
113
+
114
+ if ( $valid ) {
115
+ wp_set_auth_cookie( $user->ID, (bool)$req->post( 'rememberme' ) );
116
+
117
+ if ( $req->post( 'skip_mfa' ) === 'Y' ) {
118
+ ( new MfaSkip() )
119
+ ->setMod( $this->getMod() )
120
+ ->addMfaSkip( $user );
121
+ }
122
+
123
+ $con->fireEvent( '2fa_success' );
124
+
125
+ global $interim_login;
126
+ $interim_login = (bool)$req->request( 'interim-login' );
127
+ if ( $interim_login ) {
128
+ add_filter( 'login_message', function () {
129
+ return '';
130
+ }, 100, 0 );
131
+ $renderer = ( new Render\RenderWpLoginReplica() )
132
+ ->setMod( $mod )
133
+ ->setWpUser( $user );
134
+ $renderer->interim_message = __( '2FA authentication verified successfully.', 'wp-simple-firewall' );
135
+ $renderer->include_body = false;
136
+ $renderer->render();
137
+ }
138
+ else {
139
+ $flash = __( 'Success', 'wp-simple-firewall' ).'! '.__( 'Thank you for authenticating your login.', 'wp-simple-firewall' );
140
+ if ( $opts->isEnabledBackupCodes() ) {
141
+ $flash .= ' '.__( 'If you used your Backup Code, you will need to reset it.', 'wp-simple-firewall' );
142
+ }
143
+ $this->getMod()->setFlashAdminNotice( $flash, $user );
144
+ }
145
+
146
+ $redirect = $req->request( 'redirect_to', false, $req->getPath() );
147
+ Services::Response()->redirect(
148
+ apply_filters( 'login_redirect', $redirect, $redirect, $user ),
149
+ [], true, false
150
+ );
151
+ }
152
+ }
153
+ }
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/LoginIntentRequestValidate.php ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare( strict_types=1 );
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield;
6
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor\Exceptions\{
7
+ CouldNotValidate2FA,
8
+ NoActiveProvidersForUserException,
9
+ NoLoginIntentForUserException,
10
+ TooManyAttemptsException
11
+ };
12
+
13
+ class LoginIntentRequestValidate {
14
+
15
+ use Shield\Modules\ModConsumer;
16
+ use Shield\Utilities\Consumer\WpUserConsumer;
17
+
18
+ /**
19
+ * @throws CouldNotValidate2FA
20
+ * @throws NoActiveProvidersForUserException
21
+ * @throws NoLoginIntentForUserException
22
+ * @throws TooManyAttemptsException
23
+ */
24
+ public function run( string $loginNonce ) :bool {
25
+ /** @var Shield\Modules\LoginGuard\ModCon $mod */
26
+ $mod = $this->getMod();
27
+ $mfaCon = $mod->getMfaController();
28
+ $user = $this->getWpUser();
29
+
30
+ if ( empty( $mfaCon->getActiveLoginIntents( $user )[ $loginNonce ] ) ) {
31
+ throw new NoLoginIntentForUserException();
32
+ }
33
+
34
+ $providers = $mfaCon->getProvidersForUser( $user, true );
35
+ if ( empty( $providers ) ) {
36
+ throw new NoActiveProvidersForUserException();
37
+ }
38
+
39
+ $validated = false;
40
+ foreach ( $providers as $provider ) {
41
+ $provider->setUser( $user );
42
+ if ( $provider->validateLoginIntent( $loginNonce ) ) {
43
+ $provider->postSuccessActions();
44
+ $validated = true;
45
+ break;
46
+ }
47
+ }
48
+
49
+ // Always remove intent after success, otherwise increment attempts.
50
+ $intents = $mfaCon->getActiveLoginIntents( $user );
51
+ if ( $validated ) {
52
+ unset( $intents[ $loginNonce ] );
53
+ }
54
+ else {
55
+ $intents[ $loginNonce ][ 'attempts' ]++;
56
+ }
57
+ $this->getCon()->getUserMeta( $user )->login_intents = $intents;
58
+
59
+ if ( !$validated ) {
60
+ if ( empty( $mfaCon->getActiveLoginIntents( $user )[ $loginNonce ] ) ) {
61
+ throw new TooManyAttemptsException();
62
+ }
63
+ throw new CouldNotValidate2FA();
64
+ }
65
+
66
+ return true;
67
+ }
68
+ }
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/LoginRequestCapture.php ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare( strict_types=1 );
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield;
6
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
7
+ use FernleafSystems\Wordpress\Services\Services;
8
+
9
+ class LoginRequestCapture extends Shield\Modules\Base\Common\ExecOnceModConsumer {
10
+
11
+ use Shield\Utilities\Consumer\WpLoginCapture;
12
+
13
+ protected function run() {
14
+ $this->setupLoginCaptureHooks();
15
+ }
16
+
17
+ protected function captureLogin( \WP_User $user ) {
18
+ /** @var LoginGuard\ModCon $mod */
19
+ $mod = $this->getMod();
20
+ $mfaCon = $mod->getMfaController();
21
+ if ( $mfaCon->isSubjectToLoginIntent( $user ) && !Services::WpUsers()->isAppPasswordAuth() ) {
22
+
23
+ if ( !$this->canUserMfaSkip( $user ) ) {
24
+
25
+ foreach ( $mfaCon->getProvidersForUser( $user, true ) as $provider ) {
26
+ $provider->setUser( $user )
27
+ ->captureLoginAttempt();
28
+ }
29
+
30
+ // login nonce
31
+ $randStart = rand( 0, 10 );
32
+ $loginNonce = substr( hash( 'sha256', uniqid( '', true ) ), $randStart, 10 );
33
+
34
+ $meta = $this->getCon()->getUserMeta( $user );
35
+ $intents = $mfaCon->getActiveLoginIntents( $user );
36
+ $intents[ $loginNonce ] = [
37
+ 'start' => Services::Request()->ts(),
38
+ 'attempts' => 0,
39
+ ];
40
+ $meta->login_intents = $intents;
41
+
42
+ $loggedInCookie = $this->getLoggedInCookie();
43
+ if ( !empty( $loggedInCookie ) ) {
44
+ $parsed = \wp_parse_auth_cookie( $loggedInCookie );
45
+ if ( !empty( $parsed[ 'token' ] ) ) {
46
+ \WP_Session_Tokens::get_instance( $user->ID )->destroy( $parsed[ 'token' ] );
47
+ }
48
+ }
49
+
50
+ Services::WpUsers()->logoutUser( true );
51
+
52
+ $req = Services::Request();
53
+ $pageRender = $mfaCon->useLoginIntentPage() ? new Render\RenderLoginIntentPage() : new Render\RenderWpLoginReplica();
54
+ $pageRender->setMod( $mod )
55
+ ->setWpUser( $user );
56
+ $pageRender->login_nonce = $loginNonce;
57
+ $pageRender->interim_login = $req->request( 'interim-login' );
58
+ $pageRender->redirect_to = $req->request( 'redirect_to', false, $req->getPath() );
59
+ $pageRender->rememberme = $req->request( 'rememberme' );
60
+ $pageRender->render(); // die();
61
+ }
62
+ }
63
+ }
64
+
65
+ private function canUserMfaSkip( \WP_User $user ) :bool {
66
+ $canSkip = ( new MfaSkip() )
67
+ ->setMod( $this->getMod() )
68
+ ->canMfaSkip( $user );
69
+ return (bool)apply_filters( 'shield/2fa_skip', apply_filters( 'odp-shield-2fa_skip', $canSkip ) );
70
+ }
71
+
72
+ /**
73
+ * We override the trait as we don't want to process the 2fa login on the cookie setting
74
+ * just the wp_login action. But we DO need to capture the cookie being set here.
75
+ *
76
+ * @param string $cookie
77
+ * @param int $expire
78
+ * @param int $expiration
79
+ * @param int $userID
80
+ */
81
+ public function onWpSetLoggedInCookie( $cookie, $expire, $expiration, $userID ) {
82
+ if ( is_string( $cookie ) ) {
83
+ $this->setLoggedInCookie( $cookie );
84
+ }
85
+ }
86
+
87
+ protected function getHookPriority() :int {
88
+ return 15;
89
+ }
90
+ }
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaController.php CHANGED
@@ -1,4 +1,4 @@
1
- <?php
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor;
4
 
@@ -10,136 +10,109 @@ use FernleafSystems\Wordpress\Services\Services;
10
 
11
  class MfaController extends Shield\Modules\Base\Common\ExecOnceModConsumer {
12
 
13
- use Shield\Utilities\Consumer\WpLoginCapture;
14
-
15
  /**
16
  * @var Provider\BaseProvider[]
17
  */
18
  private $providers;
19
 
20
- /**
21
- * @var LoginIntentPage
22
- */
23
- private $loginIntentPageHandler;
24
-
25
  protected function run() {
26
- add_action( 'init', [ $this, 'onWpInit' ] );
27
- add_action( 'wp_loaded', [ $this, 'onWpLoaded' ] );
28
- $this->setupLoginCaptureHooks();
29
- $this->handleLoginLink();
30
  }
31
 
32
- public function onWpInit() {
33
- $user = Services::WpUsers()->getCurrentWpUser();
34
- if ( $user instanceof \WP_User ) {
35
- $this->assessLoginIntent( $user );
36
- }
37
- }
38
 
39
- public function onWpLoaded() {
40
- ( new MfaProfilesController() )->setMfaController( $this )->execute();
41
- add_shortcode( 'SHIELD_2FA_LOGIN', function () {
42
- return $this->getLoginIntentPageHandler()->renderForm();
43
- } );
44
- }
 
45
 
46
- protected function captureLogin( \WP_User $user ) {
47
- $this->captureLoginIntent( $user );
 
 
 
 
 
 
 
 
 
48
  }
49
 
50
- private function captureLoginIntent( \WP_User $user ) {
51
- if ( $this->isSubjectToLoginIntent( $user )
52
- && !Services::WpUsers()->isAppPasswordAuth() && !$this->canUserMfaSkip( $user ) ) {
 
 
 
 
53
 
54
- $providers = $this->getProvidersForUser( $user, true );
55
- if ( !empty( $providers ) ) {
56
- foreach ( $providers as $provider ) {
57
- $provider->captureLoginAttempt( $user );
58
- }
59
 
60
- $meta = $this->getCon()->getUserMeta( $user );
61
- $intents = $meta->login_intents ?? [];
62
- $intents[ $this->getVisitorID() ] = true;
63
- $meta->login_intents = $intents;
64
- }
 
65
  }
 
66
  }
67
 
68
- private function handleLoginLink() {
69
- add_action( $this->getCon()->prefix( 'shield_nonce_action' ), function ( string $action ) {
70
- if ( strpos( $action, '2fa_verify' ) === 0 ) {
71
- try {
72
- $this->processEmail2faLink();
73
- }
74
- catch ( \Exception $e ) {
75
- wp_die( $e->getMessage() );
76
- }
77
- }
78
- } );
79
- }
80
 
81
- /**
82
- * @throws \Exception
83
- */
84
- private function processEmail2faLink() {
85
- $req = Services::Request();
86
- $user = sanitize_user( $req->query( 'user' ) );
87
- if ( empty( $user ) ) {
88
- throw new \Exception( 'Not valid data.' );
89
- }
90
 
91
- $user = Services::WpUsers()->getUserByUsername( $user );
92
- if ( !$user instanceof \WP_User ) {
93
- throw new \Exception( 'Not valid data.' );
94
- }
95
 
96
- $providers = $this->getProvidersForUser( $user, true );
97
- if ( !isset( $providers[ Provider\Email::SLUG ] ) ) {
98
- throw new \Exception( 'Not a support provider' );
99
- }
100
- if ( !$providers[ Provider\Email::SLUG ]->validateLoginIntent( $user ) ) {
101
- throw new \Exception( 'Login validation failed.' );
102
- }
103
 
104
- $providers[ Provider\Email::SLUG ]->postSuccessActions( $user );
105
- if ( (int)$user->ID !== (int)Services::WpUsers()->getCurrentWpUserId() ) {
106
- throw new \Exception( 'Action completed successfully. Please refresh your browser where you logged-in.' );
107
  }
108
 
109
- if ( $req->query( 'redirect_to' ) ) {
110
- Services::Response()->redirect( $req->query( 'redirect_to' ) );
111
- }
112
- else {
113
- Services::Response()->redirectToAdmin();
114
  }
115
- }
116
 
117
- private function assessLoginIntent( \WP_User $user ) {
118
- if ( $this->hasLoginIntent( $user ) ) {
119
 
120
- if ( $this->isSubjectToLoginIntent( $user ) ) {
 
 
 
 
 
 
 
121
 
122
- if ( $this->getLoginIntentExpiresAt() > Services::Request()->ts() ) {
123
- $this->processActiveLoginIntent();
124
- }
125
- else {
126
- $this->destroyLogin( $user );
127
- Services::Response()->redirectHere();
128
- }
129
- }
130
- else {
131
- // This handles the case where an admin changes a setting while a user is logged-in
132
- // So to prevent this, we remove any intent for a user that isn't subject to it right now
133
- $this->removeLoginIntent( $user );
134
- }
135
- }
136
  }
137
 
138
- private function getLoginIntentPageHandler() :LoginIntentPage {
139
- if ( !isset( $this->loginIntentPageHandler ) ) {
140
- $this->loginIntentPageHandler = ( new LoginIntentPage() )->setMfaController( $this );
141
- }
142
- return $this->loginIntentPageHandler;
 
143
  }
144
 
145
  /**
@@ -168,11 +141,12 @@ class MfaController extends Shield\Modules\Base\Common\ExecOnceModConsumer {
168
  * @return Provider\BaseProvider[]
169
  */
170
  public function getProvidersForUser( \WP_User $user, bool $onlyActive = false ) :array {
171
- $Ps = array_filter( $this->getProviders(),
 
172
  function ( $provider ) use ( $user, $onlyActive ) {
173
- /** @var Provider\BaseProvider $provider */
174
- return $provider->isProviderAvailableToUser( $user )
175
- && ( !$onlyActive || $provider->isProfileActive( $user ) );
176
  }
177
  );
178
 
@@ -187,93 +161,6 @@ class MfaController extends Shield\Modules\Base\Common\ExecOnceModConsumer {
187
  return $Ps;
188
  }
189
 
190
- /**
191
- * hooked to 'init' and only run if a user is logged-in (not on the login request)
192
- */
193
- private function processActiveLoginIntent() {
194
- /** @var LoginGuard\Options $opts */
195
- $opts = $this->getOptions();
196
- $con = $this->getCon();
197
- $req = Services::Request();
198
- $WPResp = Services::Response();
199
- $WPUsers = Services::WpUsers();
200
-
201
- // Is 2FA/login-intent submit
202
- if ( $req->request( $this->getLoginIntentRequestFlag() ) == 1 ) {
203
-
204
- $user = $WPUsers->getCurrentWpUser();
205
- if ( $req->post( 'cancel' ) == 1 ) {
206
- $this->destroyLogin( $user );
207
- $redirect = $req->post( 'cancel_href' );
208
- empty( $redirect ) ? $WPResp->redirectToLogin() : $WPResp->redirect( $redirect );
209
- }
210
- elseif ( $this->validateLoginIntentRequest() ) {
211
-
212
- if ( $req->post( 'skip_mfa' ) === 'Y' ) {
213
- ( new MfaSkip() )
214
- ->setMod( $this->getMod() )
215
- ->addMfaSkip( $user );
216
- }
217
-
218
- $con->fireEvent( '2fa_success' );
219
-
220
- $flash = __( 'Success', 'wp-simple-firewall' ).'! '.__( 'Thank you for authenticating your login.', 'wp-simple-firewall' );
221
- if ( $opts->isEnabledBackupCodes() ) {
222
- $flash .= ' '.__( 'If you used your Backup Code, you will need to reset it.', 'wp-simple-firewall' ); //TODO::
223
- }
224
- $this->getMod()->setFlashAdminNotice( $flash );
225
-
226
- $this->removeLoginIntent( $user );
227
-
228
- $redirect = $req->post( 'redirect_to' );
229
- empty( $redirect ) ? $WPResp->redirectHere() : $WPResp->redirect( rawurldecode( $redirect ) );
230
- }
231
- else {
232
- $con->getAdminNotices()
233
- ->addFlash(
234
- __( 'One or more of your authentication codes failed or was missing.', 'wp-simple-firewall' ),
235
- true
236
- );
237
- // We don't protect against loops here to prevent bypassing of the login intent page.
238
- Services::Response()->redirect( Services::Request()->getUri(), [], true, false );
239
- }
240
- }
241
- elseif ( $opts->isUseLoginIntentPage() ) {
242
- $this->getLoginIntentPageHandler()->loadPage();
243
- }
244
- die();
245
- }
246
-
247
- /**
248
- * assume that a user is logged in.
249
- */
250
- private function validateLoginIntentRequest() :bool {
251
- try {
252
- $valid = ( new ValidateLoginIntentRequest() )
253
- ->setMfaController( $this )
254
- ->run();
255
- }
256
- catch ( \Exception $e ) {
257
- $valid = true;
258
- }
259
- return $valid;
260
- }
261
-
262
- private function canUserMfaSkip( \WP_User $user ) :bool {
263
- $canSkip = ( new MfaSkip() )
264
- ->setMod( $this->getMod() )
265
- ->canMfaSkip( $user );
266
-
267
- if ( !$canSkip && $this->getCon()->isPremiumActive() && @class_exists( 'WC_Social_Login' ) ) {
268
- // custom support for WooCommerce Social login
269
- $meta = $this->getCon()->getUserMeta( $user );
270
- $canSkip = $meta->wc_social_login_valid ?? false;
271
- }
272
-
273
- return (bool)apply_filters( 'icwp_shield_2fa_skip',
274
- apply_filters( 'odp-shield-2fa_skip', $canSkip ) );
275
- }
276
-
277
  public function isSubjectToLoginIntent( \WP_User $user ) :bool {
278
  /** @var LoginGuard\ModCon $mod */
279
  $mod = $this->getMod();
@@ -286,7 +173,8 @@ class MfaController extends Shield\Modules\Base\Common\ExecOnceModConsumer {
286
  $user = Services::WpUsers()->getUserById( $userID );
287
  if ( $user instanceof \WP_User ) {
288
  foreach ( $this->getProvidersForUser( $user, true ) as $provider ) {
289
- $provider->remove( $user );
 
290
  }
291
  $result->success = true;
292
  $result->msg_text = sprintf( __( 'All MFA providers removed from user with ID %s.' ),
@@ -301,50 +189,23 @@ class MfaController extends Shield\Modules\Base\Common\ExecOnceModConsumer {
301
  return $result;
302
  }
303
 
304
- public function getLoginIntentExpiresAt() :int {
305
- /** @var LoginGuard\Options $opts */
306
- $opts = $this->getOptions();
307
- $sessCon = $this->getCon()
308
- ->getModule_Sessions()
309
- ->getSessionCon();
310
-
311
- $expiresAt = 0;
312
- if ( $sessCon->hasSession() && $this->hasLoginIntent( Services::WpUsers()->getCurrentWpUser() ) ) {
313
- $expiresAt = Services::Request()
314
- ->carbon()
315
- ->setTimestamp( $sessCon->getCurrent()->logged_in_at )
316
- ->addMinutes( $opts->getLoginIntentMinutes() )->timestamp;
317
- }
318
- return $expiresAt;
319
- }
320
-
321
- private function hasLoginIntent( \WP_User $user ) :bool {
322
- return !empty( $this->getCon()->getUserMeta( $user )->login_intents[ $this->getVisitorID() ] );
323
- }
324
-
325
- private function getVisitorID() :string {
326
- return md5( Services::Request()->getUserAgent().Services::IP()->getRequestIp() );
327
- }
328
-
329
- /**
330
- * Use this ONLY when the login intent has been successfully verified.
331
- * @return $this
332
- */
333
- private function removeLoginIntent( $user ) {
334
  $meta = $this->getCon()->getUserMeta( $user );
335
- $intents = $meta->login_intents ?? [];
336
- unset( $intents[ $this->getVisitorID() ] );
337
- $meta->login_intents = $intents;
338
-
339
- return $this;
340
- }
341
-
342
- private function getLoginIntentRequestFlag() :string {
343
- return $this->getCon()->prefix( 'login-intent-request' );
344
- }
 
 
345
 
346
- private function destroyLogin( \WP_User $user ) {
347
- $this->removeLoginIntent( $user );
348
- Services::WpUsers()->logoutUser();
349
  }
350
  }
1
+ <?php declare( strict_types=1 );
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor;
4
 
10
 
11
  class MfaController extends Shield\Modules\Base\Common\ExecOnceModConsumer {
12
 
 
 
13
  /**
14
  * @var Provider\BaseProvider[]
15
  */
16
  private $providers;
17
 
 
 
 
 
 
18
  protected function run() {
19
+ add_action( 'init', [ $this, 'onWpInit' ] ); // Login Intent handling
20
+ add_action( 'wp_loaded', [ $this, 'onWpLoaded' ] ); // Profile handling
21
+ add_filter( 'login_message', [ $this, 'onLoginMessage' ], 11 );
 
22
  }
23
 
24
+ private function addToUserStatusColumn() {
25
+ // Display manually suspended on the user list table; TODO: at auto suspended
26
+ add_filter( 'shield/user_status_column', function ( array $content, \WP_User $user ) {
 
 
 
27
 
28
+ $last2fa = $this->getCon()->getUserMeta( $user )->record->last_2fa_verified_at;
29
+ $content[] = sprintf( '<em>%s</em>: %s', __( '2FA At', 'wp-simple-firewall' ),
30
+ empty( $last2fa ) ? __( 'Never', 'wp-simple-firewall' ) : Services::Request()
31
+ ->carbon()
32
+ ->setTimestamp( $last2fa )
33
+ ->diffForHumans()
34
+ );
35
 
36
+ $providers = array_map(
37
+ function ( $provider ) {
38
+ return $provider->getProviderName();
39
+ },
40
+ $this->getProvidersForUser( $user )
41
+ );
42
+ $content[] = sprintf( '<em>%s</em>: %s', __( '2FA Providers', 'wp-simple-firewall' ),
43
+ empty( $providers ) ? __( 'None', 'wp-simple-firewall' ) : implode( ', ', $providers ) );
44
+
45
+ return $content;
46
+ }, 10, 2 );
47
  }
48
 
49
+ /**
50
+ * We only want to auto send email if:
51
+ * - email is the only provider
52
+ * - it's the first time loading the 2FA page (we don't auto-send reloading the page after failure)
53
+ */
54
+ public function isAutoSend2faEmail( \WP_User $user ) :bool {
55
+ $auto = false;
56
 
57
+ $providers = $this->getProvidersForUser( $user, true );
58
+ unset( $providers[ Provider\BackupCodes::SLUG ] );
 
 
 
59
 
60
+ /** @var Provider\Email|null $emailProvider */
61
+ $emailProvider = $providers[ Provider\Email::SLUG ] ?? null;
62
+ if ( count( $providers ) === 1 && !empty( $emailProvider ) ) {
63
+ $nonces = array_keys( $this->getActiveLoginIntents( $user ) );
64
+ $latestNonce = (string)array_pop( $nonces );
65
+ $auto = !$emailProvider->hasOtpForNonce( $latestNonce );
66
  }
67
+ return $auto;
68
  }
69
 
70
+ public function onLoginMessage( $msg ) {
71
+ switch ( (string)Services::Request()->query( 'shield_msg' ) ) {
 
 
 
 
 
 
 
 
 
 
72
 
73
+ case 'too_many_attempts':
74
+ $shieldMsg = __( 'Too many 2FA verification attempts - please login again.', 'wp-simple-firewall' );
75
+ break;
 
 
 
 
 
 
76
 
77
+ case 'no_user_login_intent':
78
+ $shieldMsg = __( 'No 2FA login intent found - your login may have expired.', 'wp-simple-firewall' );
79
+ break;
 
80
 
81
+ case 'no_providers':
82
+ $shieldMsg = __( 'No 2FA login providers found.', 'wp-simple-firewall' );
83
+ break;
 
 
 
 
84
 
85
+ default:
86
+ $shieldMsg = '';
87
+ break;
88
  }
89
 
90
+ if ( !empty( $shieldMsg ) ) {
91
+ $msg = sprintf( '<div id="login_error">%s</div>', esc_html( $shieldMsg ) );
 
 
 
92
  }
 
93
 
94
+ return $msg;
95
+ }
96
 
97
+ public function onWpInit() {
98
+ ( new LoginRequestCapture() )
99
+ ->setMod( $this->getMod() )
100
+ ->execute();
101
+ ( new LoginIntentRequestCapture() )
102
+ ->setMod( $this->getMod() )
103
+ ->execute();
104
+ }
105
 
106
+ public function useLoginIntentPage() :bool {
107
+ return $this->getOptions()->isOpt( 'mfa_verify_page', 'custom_shield' );
 
 
 
 
 
 
 
 
 
 
 
 
108
  }
109
 
110
+ public function onWpLoaded() {
111
+ ( new MfaProfilesController() )
112
+ ->setMod( $this->getMod() )
113
+ ->setMfaController( $this ) // TODO: remove
114
+ ->execute();
115
+ $this->addToUserStatusColumn();
116
  }
117
 
118
  /**
141
  * @return Provider\BaseProvider[]
142
  */
143
  public function getProvidersForUser( \WP_User $user, bool $onlyActive = false ) :array {
144
+ $Ps = array_filter(
145
+ $this->getProviders(),
146
  function ( $provider ) use ( $user, $onlyActive ) {
147
+ $provider->setUser( $user );
148
+ return $provider->isProviderAvailableToUser()
149
+ && ( !$onlyActive || $provider->isProfileActive() );
150
  }
151
  );
152
 
161
  return $Ps;
162
  }
163
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
164
  public function isSubjectToLoginIntent( \WP_User $user ) :bool {
165
  /** @var LoginGuard\ModCon $mod */
166
  $mod = $this->getMod();
173
  $user = Services::WpUsers()->getUserById( $userID );
174
  if ( $user instanceof \WP_User ) {
175
  foreach ( $this->getProvidersForUser( $user, true ) as $provider ) {
176
+ $provider->setUser( $user )
177
+ ->remove();
178
  }
179
  $result->success = true;
180
  $result->msg_text = sprintf( __( 'All MFA providers removed from user with ID %s.' ),
189
  return $result;
190
  }
191
 
192
+ public function getActiveLoginIntents( \WP_User $user ) :array {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
193
  $meta = $this->getCon()->getUserMeta( $user );
194
+ return array_filter(
195
+ is_array( $meta->login_intents ) ? $meta->login_intents : [],
196
+ function ( $intent ) {
197
+ /** @var LoginGuard\Options $opts */
198
+ $opts = $this->getOptions();
199
+
200
+ $active = false;
201
+ if ( is_array( $intent ) ) {
202
+ $active = $intent[ 'start' ] > ( Services::Request()->ts() - $opts->getLoginIntentMinutes()*60 )
203
+ &&
204
+ $intent[ 'attempts' ] < $opts->getLoginIntentMaxAttempts();
205
+ }
206
 
207
+ return $active;
208
+ }
209
+ );
210
  }
211
  }
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/MfaProfilesController.php CHANGED
@@ -2,37 +2,102 @@
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor;
4
 
5
- use FernleafSystems\Utilities\Logic\ExecOnce;
6
  use FernleafSystems\Wordpress\Plugin\Shield;
7
  use FernleafSystems\Wordpress\Plugin\Shield\Controller\Assets\Enqueue;
 
8
  use FernleafSystems\Wordpress\Services\Services;
9
 
10
- class MfaProfilesController {
11
 
12
  use MfaControllerConsumer;
13
- use ExecOnce;
14
 
15
  private $rendered = false;
16
 
17
  private $isFrontend = false;
18
 
19
  protected function run() {
20
- $this->addHooks();
 
 
 
 
 
 
 
 
21
  if ( Services::WpUsers()->isUserLoggedIn() ) {
 
22
  add_action( 'wp', function () {
23
  $this->enqueueAssets( true );
24
  } );
25
- add_action( 'admin_init', function () {
 
26
  $this->enqueueAssets( false );
27
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
  }
29
  }
30
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  private function enqueueAssets( bool $isFrontend ) {
32
  $this->isFrontend = $isFrontend;
33
  add_filter( 'shield/custom_enqueues', function ( array $enqueues, $hook = '' ) {
34
 
35
- if ( $this->isFrontend || in_array( $hook, [ 'profile.php', 'user-edit.php' ] ) ) {
 
 
 
 
 
36
  $enqueues[ Enqueue::JS ][] = 'shield/userprofile';
37
  $enqueues[ Enqueue::CSS ][] = 'shield/dialog';
38
  $enqueues[ Enqueue::CSS ][] = 'shield/userprofile';
@@ -83,24 +148,10 @@ class MfaProfilesController {
83
  ->render( $attributes );
84
  }
85
 
 
 
 
86
  private function addHooks() {
87
-
88
- // shortcode for placing user authentication handling anywhere
89
- if ( $this->getMfaCon()->getCon()->isPremiumActive() ) {
90
- add_shortcode( 'SHIELD_USER_PROFILE_MFA', function ( $attributes ) {
91
- return $this->loadUserProfileMFA( is_array( $attributes ) ? $attributes : [] );
92
- } );
93
- }
94
-
95
- // Standard WordPress User Profile Editing
96
- add_action( 'show_user_profile', function () {
97
- $this->addOptionsToUserProfile();
98
- }, 7, 0 );
99
- add_action( 'edit_user_profile', function ( $user ) {
100
- if ( $user instanceof \WP_User ) {
101
- $this->addOptionsToUserEditProfile( $user );
102
- }
103
- } );
104
  }
105
 
106
  /**
@@ -109,9 +160,9 @@ class MfaProfilesController {
109
  */
110
  public function addOptionsToUserProfile() {
111
  echo $this->loadUserProfileMFA( [
112
- 'title'=>__( 'Multi-Factor Authentication', 'wp-simple-firewall' ),
113
  'subtitle' => sprintf( __( 'Provided by %s', 'wp-simple-firewall' ),
114
- $this->getMfaCon()->getCon()->getHumanName() )
115
  ] );
116
  }
117
 
@@ -119,24 +170,25 @@ class MfaProfilesController {
119
  * ONLY TO BE HOOKED TO USER PROFILE EDIT
120
  */
121
  public function addOptionsToUserEditProfile( \WP_User $user ) {
122
- $mfaCon = $this->getMfaCon();
123
- $con = $mfaCon->getCon();
124
- $WPU = Services::WpUsers();
125
  $pluginName = $con->getHumanName();
126
 
127
  $providers = array_map(
128
  function ( $provider ) {
129
  return $provider->getProviderName();
130
  },
131
- $mfaCon->getProvidersForUser( $user, true )
132
  );
133
  $this->rendered = true;
134
 
135
- echo $mfaCon->getMod()->renderTemplate( '/admin/user/profile/mfa/remove_for_other_user.twig', [
 
136
  'flags' => [
137
  'has_factors' => count( $providers ) > 0,
138
- 'is_admin_profile' => $WPU->isUserAdmin( $user ),
139
- 'can_remove' => $con->isPluginAdmin() || !$WPU->isUserAdmin( $user ),
140
  ],
141
  'vars' => [
142
  'user_id' => $user->ID,
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor;
4
 
 
5
  use FernleafSystems\Wordpress\Plugin\Shield;
6
  use FernleafSystems\Wordpress\Plugin\Shield\Controller\Assets\Enqueue;
7
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
8
  use FernleafSystems\Wordpress\Services\Services;
9
 
10
+ class MfaProfilesController extends Shield\Modules\Base\Common\ExecOnceModConsumer {
11
 
12
  use MfaControllerConsumer;
 
13
 
14
  private $rendered = false;
15
 
16
  private $isFrontend = false;
17
 
18
  protected function run() {
19
+ $con = $this->getCon();
20
+
21
+ // shortcode for placing user authentication handling anywhere
22
+ if ( $con->isPremiumActive() ) {
23
+ add_shortcode( 'SHIELD_USER_PROFILE_MFA', function ( $attributes ) {
24
+ return $this->loadUserProfileMFA( is_array( $attributes ) ? $attributes : [] );
25
+ } );
26
+ }
27
+
28
  if ( Services::WpUsers()->isUserLoggedIn() ) {
29
+
30
  add_action( 'wp', function () {
31
  $this->enqueueAssets( true );
32
  } );
33
+
34
+ if ( is_admin() && !Services::WpGeneral()->isAjax() ) {
35
  $this->enqueueAssets( false );
36
+
37
+ /** @var LoginGuard\Options $opts */
38
+ $opts = $this->getOptions();
39
+ $locations = $opts->getOpt( 'mfa_user_setup_pages' );
40
+
41
+ if ( in_array( 'dedicated', $locations ) ) {
42
+ add_action( $con->prefix( 'admin_submenu' ), function () {
43
+ $this->addLoginSecurityMenuItem();
44
+ }, 20 );
45
+ }
46
+
47
+ if ( in_array( 'profile', $locations ) ) {
48
+ // Standard WordPress User Profile Editing
49
+ add_action( 'show_user_profile', function () {
50
+ $this->addOptionsToUserProfile();
51
+ }, 7, 0 );
52
+ add_action( 'edit_user_profile', function ( $user ) {
53
+ if ( $user instanceof \WP_User ) {
54
+ $this->addOptionsToUserEditProfile( $user );
55
+ }
56
+ } );
57
+ }
58
+ }
59
  }
60
  }
61
 
62
+ private function addLoginSecurityMenuItem() {
63
+ $con = $this->getCon();
64
+ add_submenu_page(
65
+ $con->prefix(),
66
+ sprintf( '%s - %s', __( 'My Login Security', 'wp-simple-firewall' ), $con->getHumanName() ),
67
+ __( 'My Login Security', 'wp-simple-firewall' ),
68
+ 'read',
69
+ $con->prefix( 'my-login-security' ),
70
+ function () {
71
+ echo $this->renderMyLoginSecurity();
72
+ }
73
+ );
74
+ }
75
+
76
+ private function renderMyLoginSecurity() :string {
77
+ /** @var LoginGuard\ModCon $mod */
78
+ $mod = $this->getMod();
79
+ return $mod->renderTemplate( '/wpadmin_pages/my_login_security/index.twig',
80
+ Services::DataManipulation()->mergeArraysRecursive(
81
+ $mod->getUIHandler()->getBaseDisplayData(),
82
+ [
83
+ 'content' => [
84
+ 'mfa_setup' => $this->loadUserProfileMFA()
85
+ ]
86
+ ]
87
+ )
88
+ );
89
+ }
90
+
91
  private function enqueueAssets( bool $isFrontend ) {
92
  $this->isFrontend = $isFrontend;
93
  add_filter( 'shield/custom_enqueues', function ( array $enqueues, $hook = '' ) {
94
 
95
+ $isPageWithProfileDisplay = in_array( $hook, [
96
+ 'profile.php',
97
+ 'user-edit.php',
98
+ 'shieldpro_page_icwp-wpsf-my-login-security'
99
+ ] );
100
+ if ( $this->isFrontend || $isPageWithProfileDisplay ) {
101
  $enqueues[ Enqueue::JS ][] = 'shield/userprofile';
102
  $enqueues[ Enqueue::CSS ][] = 'shield/dialog';
103
  $enqueues[ Enqueue::CSS ][] = 'shield/userprofile';
148
  ->render( $attributes );
149
  }
150
 
151
+ /**
152
+ * @deprecated 14.0
153
+ */
154
  private function addHooks() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
155
  }
156
 
157
  /**
160
  */
161
  public function addOptionsToUserProfile() {
162
  echo $this->loadUserProfileMFA( [
163
+ 'title' => __( 'Multi-Factor Authentication', 'wp-simple-firewall' ),
164
  'subtitle' => sprintf( __( 'Provided by %s', 'wp-simple-firewall' ),
165
+ $this->getCon()->getHumanName() )
166
  ] );
167
  }
168
 
170
  * ONLY TO BE HOOKED TO USER PROFILE EDIT
171
  */
172
  public function addOptionsToUserEditProfile( \WP_User $user ) {
173
+ $con = $this->getCon();
174
+ /** @var LoginGuard\ModCon $mod */
175
+ $mod = $this->getMod();
176
  $pluginName = $con->getHumanName();
177
 
178
  $providers = array_map(
179
  function ( $provider ) {
180
  return $provider->getProviderName();
181
  },
182
+ $mod->getMfaController()->getProvidersForUser( $user, true )
183
  );
184
  $this->rendered = true;
185
 
186
+ $isAdmin = Services::WpUsers()->isUserAdmin( $user );
187
+ echo $mod->renderTemplate( '/admin/user/profile/mfa/remove_for_other_user.twig', [
188
  'flags' => [
189
  'has_factors' => count( $providers ) > 0,
190
+ 'is_admin_profile' => $isAdmin,
191
+ 'can_remove' => $con->isPluginAdmin() || !$isAdmin,
192
  ],
193
  'vars' => [
194
  'user_id' => $user->ID,
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Profiles/RenderCustomForms.php CHANGED
@@ -36,7 +36,8 @@ class RenderCustomForms {
36
  $providers = $user instanceof \WP_User ? $mfaCon->getProvidersForUser( $user ) : [];
37
  $providerRenders = $user instanceof \WP_User ?
38
  array_map( function ( $provider ) {
39
- return $provider->renderUserProfileCustomForm( $this->getWpUser() );
 
40
  }, $providers )
41
  : [];
42
 
36
  $providers = $user instanceof \WP_User ? $mfaCon->getProvidersForUser( $user ) : [];
37
  $providerRenders = $user instanceof \WP_User ?
38
  array_map( function ( $provider ) {
39
+ return $provider->setUser( $this->getWpUser() )
40
+ ->renderUserProfileCustomForm();
41
  }, $providers )
42
  : [];
43
 
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BackupCodes.php CHANGED
@@ -1,4 +1,4 @@
1
- <?php
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor\Provider;
4
 
@@ -8,7 +8,6 @@ use FernleafSystems\Wordpress\Services\Services;
8
  class BackupCodes extends BaseProvider {
9
 
10
  const SLUG = 'backupcode';
11
- const BYPASS_MFA = true;
12
  const STANDALONE = false;
13
 
14
  public function getProviderName() :string {
@@ -24,7 +23,7 @@ class BackupCodes extends BaseProvider {
24
  ];
25
  }
26
 
27
- protected function getProviderSpecificRenderData( \WP_User $user ) :array {
28
  return [
29
  'strings' => [
30
  'button_gen_code' => __( 'Generate ONE-Time Backup 2FA Login Code', 'wp-simple-firewall' ),
@@ -47,11 +46,9 @@ class BackupCodes extends BaseProvider {
47
  ];
48
  }
49
 
50
- /**
51
- * @return array
52
- */
53
  public function getFormField() :array {
54
  return [
 
55
  'name' => $this->getLoginFormParameter(),
56
  'type' => 'text',
57
  'value' => '',
@@ -61,43 +58,30 @@ class BackupCodes extends BaseProvider {
61
  ];
62
  }
63
 
64
- /**
65
- * @param \WP_User $user
66
- * @return bool
67
- */
68
- public function hasValidatedProfile( $user ) {
69
- return $this->hasValidSecret( $user );
70
  }
71
 
72
  /**
73
- * @param \WP_User $user
74
- * @return $this
75
  */
76
- public function postSuccessActions( \WP_User $user ) {
77
- $this->deleteSecret( $user );
78
- $this->sendBackupCodeUsedEmail( $user );
 
79
  return $this;
80
  }
81
 
82
- protected function processOtp( \WP_User $user, string $otp ) :bool {
83
- return $this->validateBackupCode( $user, $otp );
84
  }
85
 
86
  /**
87
- * @param \WP_User $user
88
- * @param string $OTP
89
- * @return bool
90
- */
91
- private function validateBackupCode( \WP_User $user, $OTP ) :bool {
92
- return (bool)wp_check_password( str_replace( '-', '', $OTP ), $this->getSecret( $user ) );
93
- }
94
-
95
- /**
96
- * @param \WP_User $user
97
  * @return string
98
  */
99
- protected function genNewSecret( \WP_User $user ) {
100
- return wp_generate_password( 25, false );
101
  }
102
 
103
  public function isProviderEnabled() :bool {
@@ -107,19 +91,16 @@ class BackupCodes extends BaseProvider {
107
  }
108
 
109
  /**
110
- * @param \WP_User $user
111
- * @param string $sNewSecret
112
  * @return $this
113
  */
114
- protected function setSecret( $user, $sNewSecret ) {
115
- parent::setSecret( $user, wp_hash_password( $sNewSecret ) );
116
  return $this;
117
  }
118
 
119
- /**
120
- * @param \WP_User $user
121
- */
122
- private function sendBackupCodeUsedEmail( \WP_User $user ) {
123
  $this->getMod()
124
  ->getEmailProcessor()
125
  ->sendEmailWithWrap(
1
+ <?php declare( strict_types=1 );
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor\Provider;
4
 
8
  class BackupCodes extends BaseProvider {
9
 
10
  const SLUG = 'backupcode';
 
11
  const STANDALONE = false;
12
 
13
  public function getProviderName() :string {
23
  ];
24
  }
25
 
26
+ protected function getProviderSpecificRenderData() :array {
27
  return [
28
  'strings' => [
29
  'button_gen_code' => __( 'Generate ONE-Time Backup 2FA Login Code', 'wp-simple-firewall' ),
46
  ];
47
  }
48
 
 
 
 
49
  public function getFormField() :array {
50
  return [
51
+ 'slug' => static::SLUG,
52
  'name' => $this->getLoginFormParameter(),
53
  'type' => 'text',
54
  'value' => '',
58
  ];
59
  }
60
 
61
+ public function hasValidatedProfile() :bool {
62
+ $this->setProfileValidated( $this->hasValidSecret() );
63
+ return parent::hasValidatedProfile();
 
 
 
64
  }
65
 
66
  /**
67
+ * @inheritDoc
 
68
  */
69
+ public function postSuccessActions() {
70
+ parent::postSuccessActions();
71
+ $this->remove();
72
+ $this->sendBackupCodeUsedEmail();
73
  return $this;
74
  }
75
 
76
+ protected function processOtp( string $otp, string $loginNonce = '' ) :bool {
77
+ return (bool)wp_check_password( str_replace( '-', '', $otp ), $this->getSecret() );
78
  }
79
 
80
  /**
 
 
 
 
 
 
 
 
 
 
81
  * @return string
82
  */
83
+ protected function genNewSecret() {
84
+ return (string)wp_generate_password( 25, false );
85
  }
86
 
87
  public function isProviderEnabled() :bool {
91
  }
92
 
93
  /**
94
+ * @param string $secret
 
95
  * @return $this
96
  */
97
+ protected function setSecret( $secret ) {
98
+ parent::setSecret( wp_hash_password( $secret ) );
99
  return $this;
100
  }
101
 
102
+ private function sendBackupCodeUsedEmail() {
103
+ $user = $this->getUser();
 
 
104
  $this->getMod()
105
  ->getEmailProcessor()
106
  ->sendEmailWithWrap(
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/BaseProvider.php CHANGED
@@ -1,4 +1,4 @@
1
- <?php
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor\Provider;
4
 
@@ -10,21 +10,17 @@ abstract class BaseProvider {
10
  use Modules\ModConsumer;
11
 
12
  const SLUG = '';
13
-
14
- /**
15
- * Set to true if this provider can be used to validate 2FA even if MFA is active.
16
- */
17
- const BYPASS_MFA = false;
18
-
19
  /**
20
  * Set to true if this provider can be used in isolation. False if there
21
  * must be at least 1 other 2FA provider active alongside it.
22
  */
23
  const STANDALONE = true;
 
 
24
  /**
25
- * Always a screen, but maybe an json-encoded string, e.g. '[]', like U2F
26
  */
27
- const DEFAULT_SECRET = '';
28
 
29
  public function __construct() {
30
  }
@@ -38,143 +34,127 @@ abstract class BaseProvider {
38
  /**
39
  * Assumes this is only called on active profiles
40
  */
41
- public function validateLoginIntent( \WP_User $user ) :bool {
42
  $otpSuccess = false;
43
- $OTP = $this->fetchCodeFromRequest();
44
- if ( !empty( $OTP ) ) {
45
- $otpSuccess = $this->processOtp( $user, $OTP );
46
- $this->postOtpProcessAction( $user, $otpSuccess );
47
  }
48
  return $otpSuccess;
49
  }
50
 
51
  /**
52
- * @return string|array
53
  */
54
- protected function getSecret( \WP_User $user ) {
55
- $sSecret = $this->getCon()->getUserMeta( $user )->{static::SLUG.'_secret'};
56
- return empty( $sSecret ) ? static::DEFAULT_SECRET : $sSecret;
57
  }
58
 
59
- /**
60
- * @param \WP_User $user
61
- * @return bool
62
- */
63
- public function hasValidatedProfile( $user ) {
64
- return $this->getCon()->getUserMeta( $user )->{static::SLUG.'_validated'} === true;
65
  }
66
 
67
- /**
68
- * @return bool
69
- */
70
- protected function hasValidSecret( \WP_User $user ) {
71
- return $this->isSecretValid( $this->getSecret( $user ) );
72
  }
73
 
74
- protected function isEnforced( \WP_User $user ) :bool {
75
  return false;
76
  }
77
 
78
- public function isProfileActive( \WP_User $user ) :bool {
79
- return $this->hasValidSecret( $user );
80
  }
81
 
82
- public function isProviderAvailableToUser( \WP_User $user ) :bool {
83
  return $this->isProviderEnabled();
84
  }
85
 
86
  abstract public function isProviderEnabled() :bool;
87
 
88
  /**
89
- * @param string $secret
90
- * @return bool
91
- */
92
- protected function isSecretValid( $secret ) {
93
- return !empty( $secret ) && is_string( $secret );
94
- }
95
-
96
- /**
97
- * @param \WP_User $user
98
- * @return $this
99
  */
100
- public function deleteSecret( $user ) {
101
- $this->getCon()
102
- ->getUserMeta( $user )->{static::SLUG.'_secret'} = null;
103
- return $this;
104
  }
105
 
106
  /**
107
- * @return string
108
  */
109
- public function resetSecret( \WP_User $user ) {
110
- $sNewSecret = $this->genNewSecret( $user );
111
- $this->setSecret( $user, $sNewSecret );
112
- return $sNewSecret;
113
  }
114
 
115
- public function remove( \WP_User $user ) {
116
- $meta = $this->getCon()->getUserMeta( $user );
117
- $meta->{static::SLUG.'_secret'} = null;
118
- $this->setProfileValidated( $user, false );
119
  }
120
 
121
  /**
122
- * @param \WP_User $user
123
- * @param bool $validated set true for validated, false for invalidated
124
  * @return $this
125
  */
126
- public function setProfileValidated( $user, $validated = true ) {
127
  $this->getCon()
128
- ->getUserMeta( $user )->{static::SLUG.'_validated'} = $validated;
129
  return $this;
130
  }
131
 
132
  /**
133
- * @param \WP_User $user
134
- * @param string|array $sNewSecret
135
  * @return $this
136
  */
137
- protected function setSecret( $user, $sNewSecret ) {
138
  $this->getCon()
139
- ->getUserMeta( $user )->{static::SLUG.'_secret'} = $sNewSecret;
140
  return $this;
141
  }
142
 
143
  /**
144
  * @return string|mixed
145
  */
146
- protected function genNewSecret( \WP_User $user ) {
147
  return '';
148
  }
149
 
150
- abstract protected function processOtp( \WP_User $user, string $otp ) :bool;
151
 
152
  /**
153
  * Only to be fired if and when Login has been completely verified.
154
  * @return $this
155
  */
156
- public function postSuccessActions( \WP_User $user ) {
 
 
157
  return $this;
158
  }
159
 
160
- /**
161
- * This MUST only ever be hooked into when the User is looking at their OWN profile, so we can use "current user"
162
- * functions. Otherwise we need to be careful of mixing up users.
163
- */
164
- public function renderUserProfileOptions( \WP_User $user ) :string {
165
- return $this->getMod()
166
- ->renderTemplate(
167
- sprintf( '/admin/user/profile/mfa/mfa_%s.twig', static::SLUG ),
168
- $this->getProfileRenderData( $user )
169
- );
170
- }
171
-
172
- /**
173
- * This MUST only ever be hooked into when the User is looking at their OWN profile, so we can use "current user"
174
- * functions. Otherwise we need to be careful of mixing up users.
175
- */
176
- public function renderUserProfileCustomForm( \WP_User $user ) :string {
177
- $data = $this->getProfileRenderData( $user );
 
 
 
178
  $data[ 'flags' ][ 'show_explanatory_text' ] = false;
179
  return $this->getMod()
180
  ->renderTemplate(
@@ -183,80 +163,53 @@ abstract class BaseProvider {
183
  );
184
  }
185
 
186
- public function getProfileRenderData( \WP_User $user ) :array {
187
- return Services::DataManipulation()->mergeArraysRecursive(
188
- $this->getCommonData( $user ),
189
- $this->getProviderSpecificRenderData( $user )
190
- );
191
- }
192
-
193
- protected function getProviderSpecificRenderData( \WP_User $user ) :array {
194
  return [];
195
  }
196
 
197
- /**
198
- * @param \WP_User $user
199
- */
200
- protected function processRemovalFromAccount( \WP_User $user ) {
201
- }
202
-
203
- /**
204
- * This MUST only ever be hooked into when the User is looking at their OWN profile,
205
- * so we can use "current user" functions. Otherwise we need to be careful of mixing up users.
206
- * @param \WP_User $user
207
- */
208
- public function handleUserProfileSubmit( \WP_User $user ) {
209
- }
210
-
211
- public function captureLoginAttempt( \WP_User $user ) {
212
  }
213
 
214
  public function getFormField() :array {
215
  return [];
216
  }
217
 
218
- protected function auditLogin( \WP_User $user, bool $success ) {
 
 
 
 
 
 
 
 
 
219
  $this->getCon()->fireEvent(
220
  $success ? '2fa_verify_success' : '2fa_verify_fail',
221
  [
222
  'audit_params' => [
223
- 'user_login' => $user->user_login,
224
  'method' => $this->getProviderName(),
225
  ]
226
  ]
227
  );
228
  }
229
 
230
- /**
231
- * @param \WP_User $user
232
- * @param bool $bIsOtpSuccess
233
- * @return $this
234
- */
235
- protected function postOtpProcessAction( \WP_User $user, bool $bIsOtpSuccess ) {
236
- $this->auditLogin( $user, $bIsOtpSuccess );
237
- return $this;
238
- }
239
-
240
- /**
241
- * @return string
242
- */
243
- protected function getLoginFormParameter() {
244
  return $this->getCon()->prefixOption( static::SLUG.'_otp' );
245
  }
246
 
247
- /**
248
- * @return string
249
- */
250
- protected function fetchCodeFromRequest() {
251
- return trim( Services::Request()->request( $this->getLoginFormParameter(), false, '' ) );
252
  }
253
 
254
- protected function getCommonData( \WP_User $user ) :array {
 
255
  return [
256
  'flags' => [
257
- 'has_validated_profile' => $this->hasValidatedProfile( $user ),
258
- 'is_enforced' => $this->isEnforced( $user ),
259
- 'is_profile_active' => $this->isProfileActive( $user ),
260
  'user_to_edit_is_admin' => Services::WpUsers()->isUserAdmin( $user ),
261
  'show_explanatory_text' => true
262
  ],
@@ -269,4 +222,23 @@ abstract class BaseProvider {
269
  ],
270
  ];
271
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
272
  }
1
+ <?php declare( strict_types=1 );
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor\Provider;
4
 
10
  use Modules\ModConsumer;
11
 
12
  const SLUG = '';
 
 
 
 
 
 
13
  /**
14
  * Set to true if this provider can be used in isolation. False if there
15
  * must be at least 1 other 2FA provider active alongside it.
16
  */
17
  const STANDALONE = true;
18
+ const DEFAULT_SECRET = '';
19
+
20
  /**
21
+ * @var \WP_User
22
  */
23
+ private $user;
24
 
25
  public function __construct() {
26
  }
34
  /**
35
  * Assumes this is only called on active profiles
36
  */
37
+ public function validateLoginIntent( string $loginNonce ) :bool {
38
  $otpSuccess = false;
39
+ $otp = $this->fetchCodeFromRequest();
40
+ if ( !empty( $otp ) ) {
41
+ $otpSuccess = $this->processOtp( $otp, $loginNonce );
42
+ $this->auditLogin( $otpSuccess );
43
  }
44
  return $otpSuccess;
45
  }
46
 
47
  /**
48
+ * @return string|array|mixed
49
  */
50
+ protected function getSecret() {
51
+ $secret = $this->getCon()->getUserMeta( $this->getUser() )->{static::SLUG.'_secret'};
52
+ return empty( $secret ) ? static::DEFAULT_SECRET : $secret;
53
  }
54
 
55
+ public function hasValidatedProfile() :bool {
56
+ return $this->getCon()->getUserMeta( $this->getUser() )->{static::SLUG.'_validated'} === true;
 
 
 
 
57
  }
58
 
59
+ protected function hasValidSecret() :bool {
60
+ $secret = $this->getSecret();
61
+ return !empty( $secret ) && is_string( $secret );
 
 
62
  }
63
 
64
+ protected function isEnforced() :bool {
65
  return false;
66
  }
67
 
68
+ public function isProfileActive() :bool {
69
+ return $this->hasValidatedProfile() && $this->isProviderAvailableToUser();
70
  }
71
 
72
+ public function isProviderAvailableToUser() :bool {
73
  return $this->isProviderEnabled();
74
  }
75
 
76
  abstract public function isProviderEnabled() :bool;
77
 
78
  /**
79
+ * @deprecated 13.1
 
 
 
 
 
 
 
 
 
80
  */
81
+ protected function isSecretValid() :bool {
82
+ return false;
 
 
83
  }
84
 
85
  /**
86
+ * @return mixed
87
  */
88
+ public function resetSecret() {
89
+ $newSecret = $this->genNewSecret();
90
+ $this->setSecret( $newSecret );
91
+ return $newSecret;
92
  }
93
 
94
+ public function remove() {
95
+ $this->getCon()->getUserMeta( $this->getUser() )->{static::SLUG.'_secret'} = null;
96
+ $this->setProfileValidated( false );
 
97
  }
98
 
99
  /**
 
 
100
  * @return $this
101
  */
102
+ public function setProfileValidated( bool $validated ) {
103
  $this->getCon()
104
+ ->getUserMeta( $this->getUser() )->{static::SLUG.'_validated'} = $validated;
105
  return $this;
106
  }
107
 
108
  /**
109
+ * @param string|array $secret
 
110
  * @return $this
111
  */
112
+ protected function setSecret( $secret ) {
113
  $this->getCon()
114
+ ->getUserMeta( $this->getUser() )->{static::SLUG.'_secret'} = $secret;
115
  return $this;
116
  }
117
 
118
  /**
119
  * @return string|mixed
120
  */
121
+ protected function genNewSecret() {
122
  return '';
123
  }
124
 
125
+ abstract protected function processOtp( string $otp, string $loginNonce = '' ) :bool;
126
 
127
  /**
128
  * Only to be fired if and when Login has been completely verified.
129
  * @return $this
130
  */
131
+ public function postSuccessActions() {
132
+ $this->getCon()
133
+ ->getUserMeta( $this->getUser() )->record->last_2fa_verified_at = Services::Request()->ts();
134
  return $this;
135
  }
136
 
137
+ public function renderUserProfileCustomForm() :string {
138
+ $user = $this->getUser();
139
+ $data = Services::DataManipulation()->mergeArraysRecursive(
140
+ [
141
+ 'flags' => [
142
+ 'has_validated_profile' => $this->hasValidatedProfile(),
143
+ 'is_enforced' => $this->isEnforced(),
144
+ 'is_profile_active' => $this->isProfileActive(),
145
+ 'user_to_edit_is_admin' => Services::WpUsers()->isUserAdmin( $user ),
146
+ 'show_explanatory_text' => true
147
+ ],
148
+ 'vars' => [
149
+ 'otp_field_name' => $this->getLoginFormParameter(),
150
+ ],
151
+ 'strings' => [
152
+ 'is_enforced' => __( 'This setting is enforced by your security administrator.', 'wp-simple-firewall' ),
153
+ 'provider_name' => $this->getProviderName()
154
+ ],
155
+ ],
156
+ $this->getProviderSpecificRenderData()
157
+ );
158
  $data[ 'flags' ][ 'show_explanatory_text' ] = false;
159
  return $this->getMod()
160
  ->renderTemplate(
163
  );
164
  }
165
 
166
+ protected function getProviderSpecificRenderData() :array {
 
 
 
 
 
 
 
167
  return [];
168
  }
169
 
170
+ public function captureLoginAttempt() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
171
  }
172
 
173
  public function getFormField() :array {
174
  return [];
175
  }
176
 
177
+ public function renderFormFieldForWpLogin() :string {
178
+ return $this->getMod()->renderTemplate(
179
+ sprintf( '/components/wplogin_replica/login_field_%s.twig', static::SLUG ),
180
+ [
181
+ 'field' => $this->getFormField()
182
+ ]
183
+ );
184
+ }
185
+
186
+ protected function auditLogin( bool $success ) {
187
  $this->getCon()->fireEvent(
188
  $success ? '2fa_verify_success' : '2fa_verify_fail',
189
  [
190
  'audit_params' => [
191
+ 'user_login' => $this->getUser()->user_login,
192
  'method' => $this->getProviderName(),
193
  ]
194
  ]
195
  );
196
  }
197
 
198
+ protected function getLoginFormParameter() :string {
 
 
 
 
 
 
 
 
 
 
 
 
 
199
  return $this->getCon()->prefixOption( static::SLUG.'_otp' );
200
  }
201
 
202
+ protected function fetchCodeFromRequest() :string {
203
+ return trim( (string)Services::Request()->request( $this->getLoginFormParameter(), false, '' ) );
 
 
 
204
  }
205
 
206
+ protected function getCommonData() :array {
207
+ $user = $this->getUser();
208
  return [
209
  'flags' => [
210
+ 'has_validated_profile' => $this->hasValidatedProfile(),
211
+ 'is_enforced' => $this->isEnforced(),
212
+ 'is_profile_active' => $this->isProfileActive(),
213
  'user_to_edit_is_admin' => Services::WpUsers()->isUserAdmin( $user ),
214
  'show_explanatory_text' => true
215
  ],
222
  ],
223
  ];
224
  }
225
+
226
+ protected function generateSimpleOTP( int $length = 6 ) :string {
227
+ do {
228
+ $otp = substr( strtoupper( preg_replace( '#[io01l]#i', '', wp_generate_password( 50, false ) ) ), 0, $length );
229
+ } while ( strlen( $otp ) !== $length );
230
+ return $otp;
231
+ }
232
+
233
+ protected function getUser() :\WP_User {
234
+ return $this->user ?? Services::WpUsers()->getCurrentWpUser();
235
+ }
236
+
237
+ /**
238
+ * @return $this
239
+ */
240
+ public function setUser( \WP_User $user ) {
241
+ $this->user = $user;
242
+ return $this;
243
+ }
244
  }
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Email.php CHANGED
@@ -1,4 +1,4 @@
1
- <?php
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor\Provider;
4
 
@@ -10,12 +10,6 @@ class Email extends BaseProvider {
10
 
11
  const SLUG = 'email';
12
 
13
- private $secretToDelete = '';
14
-
15
- public function captureLoginAttempt( \WP_User $user ) {
16
- $this->sendEmailTwoFactorVerify( $user );
17
- }
18
-
19
  public function getJavascriptVars() :array {
20
  return [
21
  'ajax' => [
@@ -25,164 +19,119 @@ class Email extends BaseProvider {
25
  }
26
 
27
  /**
28
- * @param \WP_User $user
29
- * @return $this
30
  */
31
- public function postSuccessActions( \WP_User $user ) {
32
- if ( !empty( $this->secretToDelete ) ) {
33
- $secrets = $this->getAllCodes( $user );
34
- unset( $secrets[ $this->secretToDelete ] );
35
- $this->storeCodes( $user, $secrets );
36
- }
37
- return $this;
38
  }
39
 
40
- protected function processOtp( \WP_User $user, string $otp ) :bool {
41
- $valid = false;
42
- foreach ( $this->getAllCodes( $user ) as $secret => $expiresAt ) {
43
- if ( wp_check_password( $otp, $secret ) ) {
44
- $valid = true;
45
- $this->secretToDelete = $secret;
46
- break;
47
- }
48
- }
49
- return $valid;
50
- }
51
-
52
- /**
53
- * @return array
54
- */
55
  public function getFormField() :array {
 
 
56
  return [
 
57
  'name' => $this->getLoginFormParameter(),
58
  'type' => 'text',
59
  'value' => $this->fetchCodeFromRequest(),
60
- 'placeholder' => __( 'This code was just sent to your registered Email address.', 'wp-simple-firewall' ),
61
  'text' => __( 'Email OTP', 'wp-simple-firewall' ),
62
- 'help_link' => 'https://shsec.io/3t'
 
 
 
 
 
 
 
 
 
63
  ];
64
  }
65
 
66
- /**
67
- * @inheritDoc
68
- */
69
- public function handleUserProfileSubmit( \WP_User $user ) {
70
-
71
- $bWasEnabled = $this->isProfileActive( $user );
72
- $bToEnable = Services::Request()->post( 'shield_enable_mfaemail' ) === 'Y';
73
-
74
- $msg = null;
75
- $error = false;
76
- if ( $bToEnable ) {
77
- $this->setProfileValidated( $user );
78
- if ( !$bWasEnabled ) {
79
- $msg = __( 'Email Two-Factor Authentication has been enabled.', 'wp-simple-firewall' );
80
- }
81
- }
82
- elseif ( $this->isEnforced( $user ) ) {
83
- $msg = __( "Email Two-Factor Authentication couldn't be disabled because it is enforced based on your user roles.", 'wp-simple-firewall' );
84
- $error = true;
85
- }
86
- else {
87
- $this->setProfileValidated( $user, false );
88
- $msg = __( 'Email Two-Factor Authentication has been disabled.', 'wp-simple-firewall' );
89
- }
90
-
91
- if ( !empty( $msg ) ) {
92
- $this->getMod()->setFlashAdminNotice( $msg, $error );
93
- }
94
- }
95
-
96
- public function isProfileActive( \WP_User $user ) :bool {
97
  /** @var LoginGuard\Options $opts */
98
  $opts = $this->getOptions();
99
- return parent::isProfileActive( $user ) &&
100
- ( $this->isEnforced( $user ) ||
101
- ( $this->hasValidatedProfile( $user ) && $opts->isEnabledEmailAuthAnyUserSet() ) );
 
 
102
  }
103
 
104
- protected function isEnforced( \WP_User $user ) :bool {
105
  /** @var LoginGuard\Options $opts */
106
  $opts = $this->getOptions();
107
- return count( array_intersect( $opts->getEmail2FaRoles(), $user->roles ) ) > 0;
108
  }
109
 
110
- /**
111
- * @param string $secret
112
- * @return bool
113
- */
114
- protected function isSecretValid( $secret ) {
115
  return true;
116
  }
117
 
118
- /**
119
- * @param \WP_User $user
120
- * @return $this
121
- */
122
- private function sendEmailTwoFactorVerify( \WP_User $user ) {
123
  $sureCon = $this->getCon()->getModule_Comms()->getSureSendController();
124
  $useSureSend = $sureCon->isEnabled2Fa() && $sureCon->canUserSend( $user );
125
 
 
126
  try {
127
- $code = $this->genNewCode( $user );
128
-
129
- $sendSuccess = ( $useSureSend && $this->send2faEmailSureSend( $user, $code ) )
130
- || $this->getMod()
131
- ->getEmailProcessor()
132
- ->sendEmailWithTemplate(
133
- '/email/lp_2fa_email_code',
134
- $user->user_email,
135
- __( 'Two-Factor Login Verification', 'wp-simple-firewall' ),
136
- [
137
- 'flags' => [
138
- 'show_login_link' => !$this->getCon()->isRelabelled()
139
- ],
140
- 'vars' => [
141
- 'code' => $code
142
- ],
143
- 'hrefs' => [
144
- 'login_link' => 'https://shsec.io/96',
145
- 'verify_2fa' => $this->genLoginLink( $user, $code )
146
- ],
147
- 'strings' => [
148
- 'someone' => __( 'Someone attempted to login into this WordPress site using your account.', 'wp-simple-firewall' ),
149
- 'requires' => __( 'Login requires verification with the following code.', 'wp-simple-firewall' ),
150
- 'verification' => __( 'Verification Code', 'wp-simple-firewall' ),
151
- 'login_link' => __( 'Why no login link?', 'wp-simple-firewall' ),
152
- 'details_heading' => __( 'Login Details', 'wp-simple-firewall' ),
153
- 'details_url' => sprintf( '%s: %s', __( 'URL', 'wp-simple-firewall' ),
154
- Services::WpGeneral()->getHomeUrl() ),
155
- 'details_username' => sprintf( '%s: %s', __( 'Username', 'wp-simple-firewall' ), $user->user_login ),
156
- 'details_ip' => sprintf( '%s: %s', __( 'IP Address', 'wp-simple-firewall' ),
157
- Services::IP()->getRequestIp() ),
158
- ]
159
  ]
160
- );
 
161
  }
162
  catch ( \Exception $e ) {
163
- $sendSuccess = false;
164
  }
165
 
166
- return $this;
167
  }
168
 
169
- private function send2faEmailSureSend( \WP_User $user, string $code ) :bool {
170
  return ( new SendEmail() )
171
  ->setMod( $this->getMod() )
172
- ->send2FA(
173
- $user,
174
- $code
175
- );
176
  }
177
 
178
- protected function getProviderSpecificRenderData( \WP_User $user ) :array {
179
  return [
180
  'strings' => [
181
  'label_email_authentication' => __( 'Email Authentication', 'wp-simple-firewall' ),
182
  'title' => __( 'Email Authentication', 'wp-simple-firewall' ),
183
  'description_email_authentication_checkbox' => __( 'Toggle the option to enable/disable email-based login authentication.', 'wp-simple-firewall' ),
184
- 'provided_by' => sprintf( __( 'Provided by %s', 'wp-simple-firewall' ), $this->getCon()
185
- ->getHumanName() )
186
  ]
187
  ];
188
  }
@@ -193,68 +142,39 @@ class Email extends BaseProvider {
193
  return $opts->isEmailAuthenticationActive();
194
  }
195
 
196
- public function isProviderAvailableToUser( \WP_User $user ) :bool {
197
  /** @var LoginGuard\Options $opts */
198
  $opts = $this->getOptions();
199
- return parent::isProviderAvailableToUser( $user )
200
- && ( $this->isEnforced( $user ) || $opts->isEnabledEmailAuthAnyUserSet() );
201
  }
202
 
203
- private function genLoginLink( \WP_User $user, string $otp ) :string {
204
- /** @var LoginGuard\Options $opts */
205
- $opts = $this->getOptions();
206
- $action = uniqid( '2fa_verify' );
207
- return add_query_arg(
208
- [
209
- 'user' => $user->user_login,
210
- $this->getLoginFormParameter() => $otp,
211
- 'shield_nonce_action' => $action,
212
- 'shield_nonce' => $this->getCon()
213
- ->nonce_handler->create( $action, $opts->getLoginIntentMinutes()*60 ),
214
- ],
215
- Services::WpGeneral()->getHomeUrl()
216
- );
217
  }
218
 
219
- /**
220
- * @param \WP_User $user
221
- * @return string
222
- */
223
- private function genNewCode( \WP_User $user ) {
224
- /** @var LoginGuard\Options $opts */
225
- $opts = $this->getOptions();
226
-
227
- $secrets = $this->getAllCodes( $user );
228
- $new = substr( strtoupper( preg_replace( '#io#i', '', wp_generate_password( 30, false ) ) ), 0, 6 );
229
- $secrets[ wp_hash_password( $new ) ] = Services::Request()
230
- ->carbon()
231
- ->addMinutes( $opts->getLoginIntentMinutes() )->timestamp;
232
-
233
- $this->storeCodes( $user, array_slice( $secrets, -10 ) );
234
- return $new;
235
  }
236
 
237
- /**
238
- * @param \WP_User $user
239
- * @return array
240
- */
241
- private function getAllCodes( \WP_User $user ) {
242
- $secrets = $this->getSecret( $user );
243
- return array_filter(
244
  is_array( $secrets ) ? $secrets : [],
245
- function ( $ts ) {
246
- return $ts >= Services::Request()->ts();
247
- }
248
  );
249
  }
250
 
251
- /**
252
- * @param \WP_User $user
253
- * @param array $codes
254
- * @return $this
255
- */
256
- private function storeCodes( \WP_User $user, array $codes ) {
257
- return $this->setSecret( $user, $codes );
258
  }
259
 
260
  public function getProviderName() :string {
1
+ <?php declare( strict_types=1 );
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor\Provider;
4
 
10
 
11
  const SLUG = 'email';
12
 
 
 
 
 
 
 
13
  public function getJavascriptVars() :array {
14
  return [
15
  'ajax' => [
19
  }
20
 
21
  /**
22
+ * If login nonce is provided, the OTP check is stricter and must be the same as that assigned to the nonce.
23
+ * Otherwise, we just check whether the OTP exists.
24
  */
25
+ protected function processOtp( string $otp, string $loginNonce = '' ) :bool {
26
+ return empty( $loginNonce ) ?
27
+ in_array( $otp, $this->getAllCodes() )
28
+ : ( $this->getAllCodes()[ $loginNonce ] ?? '' ) === $otp;
 
 
 
29
  }
30
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  public function getFormField() :array {
32
+ /** @var LoginGuard\ModCon $mod */
33
+ $mod = $this->getMod();
34
  return [
35
+ 'slug' => static::SLUG,
36
  'name' => $this->getLoginFormParameter(),
37
  'type' => 'text',
38
  'value' => $this->fetchCodeFromRequest(),
39
+ 'placeholder' => __( 'A1B2C3', 'wp-simple-firewall' ),
40
  'text' => __( 'Email OTP', 'wp-simple-firewall' ),
41
+ 'description' => __( 'Enter code sent to your email', 'wp-simple-firewall' ),
42
+ 'help_link' => 'https://shsec.io/3t',
43
+ 'size' => 6,
44
+ 'datas' => [
45
+ 'auto_send' => $mod->getMfaController()->isAutoSend2faEmail( $this->getUser() ) ? 1 : 0,
46
+ 'ajax_intent_email_send' => $mod->getAjaxActionData( 'intent_email_send', true ),
47
+ ],
48
+ 'supp' => [
49
+ 'send_email' => __( 'Send OTP Code', 'wp-simple-firewall' ),
50
+ ]
51
  ];
52
  }
53
 
54
+ public function hasValidatedProfile() :bool {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
  /** @var LoginGuard\Options $opts */
56
  $opts = $this->getOptions();
57
+ $validated = parent::hasValidatedProfile();
58
+ $this->setProfileValidated(
59
+ $this->isEnforced() || ( $validated && $opts->isEnabledEmailAuthAnyUserSet() )
60
+ );
61
+ return parent::hasValidatedProfile();
62
  }
63
 
64
+ protected function isEnforced() :bool {
65
  /** @var LoginGuard\Options $opts */
66
  $opts = $this->getOptions();
67
+ return count( array_intersect( $opts->getEmail2FaRoles(), $this->getUser()->roles ) ) > 0;
68
  }
69
 
70
+ protected function hasValidSecret() :bool {
 
 
 
 
71
  return true;
72
  }
73
 
74
+ public function sendEmailTwoFactorVerify( string $loginNonce ) :bool {
75
+ $user = $this->getUser();
 
 
 
76
  $sureCon = $this->getCon()->getModule_Comms()->getSureSendController();
77
  $useSureSend = $sureCon->isEnabled2Fa() && $sureCon->canUserSend( $user );
78
 
79
+ $success = false;
80
  try {
81
+ $code = $this->get2faCode( $loginNonce );
82
+
83
+ $success = ( $useSureSend && $this->send2faEmailSureSend( $code ) )
84
+ || $this->getMod()
85
+ ->getEmailProcessor()
86
+ ->sendEmailWithTemplate(
87
+ '/email/lp_2fa_email_code',
88
+ $user->user_email,
89
+ __( 'Two-Factor Login Verification', 'wp-simple-firewall' ),
90
+ [
91
+ 'flags' => [
92
+ 'show_login_link' => !$this->getCon()->isRelabelled()
93
+ ],
94
+ 'vars' => [
95
+ 'code' => $code
96
+ ],
97
+ 'hrefs' => [
98
+ 'login_link' => 'https://shsec.io/96',
99
+ ],
100
+ 'strings' => [
101
+ 'someone' => __( 'Someone attempted to login into this WordPress site using your account.', 'wp-simple-firewall' ),
102
+ 'requires' => __( 'Login requires verification with the following code.', 'wp-simple-firewall' ),
103
+ 'verification' => __( 'Verification Code', 'wp-simple-firewall' ),
104
+ 'login_link' => __( 'Why no login link?', 'wp-simple-firewall' ),
105
+ 'details_heading' => __( 'Login Details', 'wp-simple-firewall' ),
106
+ 'details_url' => sprintf( '%s: %s', __( 'URL', 'wp-simple-firewall' ),
107
+ Services::WpGeneral()->getHomeUrl() ),
108
+ 'details_username' => sprintf( '%s: %s', __( 'Username', 'wp-simple-firewall' ), $user->user_login ),
109
+ 'details_ip' => sprintf( '%s: %s', __( 'IP Address', 'wp-simple-firewall' ),
110
+ Services::IP()->getRequestIp() ),
 
 
111
  ]
112
+ ]
113
+ );
114
  }
115
  catch ( \Exception $e ) {
 
116
  }
117
 
118
+ return $success;
119
  }
120
 
121
+ private function send2faEmailSureSend( string $code ) :bool {
122
  return ( new SendEmail() )
123
  ->setMod( $this->getMod() )
124
+ ->send2FA( $this->getUser(), $code );
 
 
 
125
  }
126
 
127
+ protected function getProviderSpecificRenderData() :array {
128
  return [
129
  'strings' => [
130
  'label_email_authentication' => __( 'Email Authentication', 'wp-simple-firewall' ),
131
  'title' => __( 'Email Authentication', 'wp-simple-firewall' ),
132
  'description_email_authentication_checkbox' => __( 'Toggle the option to enable/disable email-based login authentication.', 'wp-simple-firewall' ),
133
+ 'provided_by' => sprintf( __( 'Provided by %s', 'wp-simple-firewall' ),
134
+ $this->getCon()->getHumanName() )
135
  ]
136
  ];
137
  }
142
  return $opts->isEmailAuthenticationActive();
143
  }
144
 
145
+ public function isProviderAvailableToUser() :bool {
146
  /** @var LoginGuard\Options $opts */
147
  $opts = $this->getOptions();
148
+ return parent::isProviderAvailableToUser()
149
+ && ( $this->isEnforced() || $opts->isEnabledEmailAuthAnyUserSet() );
150
  }
151
 
152
+ private function get2faCode( string $loginNonce ) :string {
153
+ $secrets = $this->getAllCodes();
154
+ if ( !isset( $secrets[ $loginNonce ] ) ) {
155
+ $secrets[ $loginNonce ] = $this->generateSimpleOTP();
156
+ $this->storeCodes( $secrets );
157
+ }
158
+ return $secrets[ $loginNonce ];
 
 
 
 
 
 
 
159
  }
160
 
161
+ public function hasOtpForNonce( string $loginNonce ) :bool {
162
+ return isset( $this->getAllCodes()[ $loginNonce ] );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
163
  }
164
 
165
+ private function getAllCodes() :array {
166
+ /** @var LoginGuard\ModCon $mod */
167
+ $mod = $this->getMod();
168
+ $mfaCon = $mod->getMfaController();
169
+ $secrets = $this->getSecret();
170
+ return array_intersect_key(
 
171
  is_array( $secrets ) ? $secrets : [],
172
+ $mfaCon->getActiveLoginIntents( $this->getUser() )
 
 
173
  );
174
  }
175
 
176
+ private function storeCodes( array $codes ) {
177
+ $this->setSecret( $codes );
 
 
 
 
 
178
  }
179
 
180
  public function getProviderName() :string {
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/GoogleAuth.php CHANGED
@@ -1,8 +1,13 @@
1
- <?php
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor\Provider;
4
 
5
- use Dolondro\GoogleAuthenticator;
 
 
 
 
 
6
  use FernleafSystems\Utilities\Data\Response\StdResponse;
7
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
8
  use FernleafSystems\Wordpress\Plugin\Shield\ShieldNetApi\Tools\GenerateGoogleAuthQrCode;
@@ -13,12 +18,12 @@ class GoogleAuth extends BaseProvider {
13
  const SLUG = 'ga';
14
 
15
  /**
16
- * @var GoogleAuthenticator\Secret
17
  */
18
  private $oWorkingSecret;
19
 
20
- public function isProfileActive( \WP_User $user ) :bool {
21
- return parent::isProfileActive( $user ) && $this->hasValidatedProfile( $user );
22
  }
23
 
24
  public function getJavascriptVars() :array {
@@ -29,16 +34,16 @@ class GoogleAuth extends BaseProvider {
29
  ];
30
  }
31
 
32
- protected function getProviderSpecificRenderData( \WP_User $user ) :array {
33
  $con = $this->getCon();
34
 
35
- $validatedProfile = $this->hasValidatedProfile( $user );
36
  return [
37
  'hrefs' => [
38
- 'src_chart_url' => $validatedProfile ? '' : $this->getQrImage( $user ),
39
  ],
40
  'vars' => [
41
- 'ga_secret' => $validatedProfile ? $this->getSecret( $user ) : $this->resetSecret( $user ),
42
  ],
43
  'strings' => [
44
  'enter_auth_app_code' => __( 'Enter 6-digit Code from App', 'wp-simple-firewall' ),
@@ -60,9 +65,8 @@ class GoogleAuth extends BaseProvider {
60
  ];
61
  }
62
 
63
- public function getQrImage( \WP_User $user ) :string {
64
- $secret = $this->getGaSecret( $user );
65
-
66
  try {
67
  $qrImage = $this->getGaRegisterChartUrl( $secret );
68
  }
@@ -74,15 +78,12 @@ class GoogleAuth extends BaseProvider {
74
  }
75
 
76
  /**
77
- * @param GoogleAuthenticator\Secret $secret
78
- * @return string
79
  * @throws \Exception
80
  */
81
- private function getGaRegisterChartUrl( GoogleAuthenticator\Secret $secret ) :string {
82
  $rawImage = Services::HttpRequest()
83
  ->getContent(
84
- ( new GoogleAuthenticator\QrImageGenerator\GoogleQrImageGenerator() )
85
- ->generateUri( $secret ),
86
  [ 'timeout' => 3 ]
87
  );
88
  if ( empty( $rawImage ) ) {
@@ -91,7 +92,7 @@ class GoogleAuth extends BaseProvider {
91
  return base64_encode( $rawImage );
92
  }
93
 
94
- private function getGaRegisterChartUrlShieldNet( GoogleAuthenticator\Secret $secret ) :string {
95
  return ( new GenerateGoogleAuthQrCode() )
96
  ->setMod( $this->getCon()->getModule_Plugin() )
97
  ->getCode(
@@ -102,85 +103,43 @@ class GoogleAuth extends BaseProvider {
102
  );
103
  }
104
 
105
- public function removeGaOnAccount( \WP_User $user ) :StdResponse {
106
- $this->processRemovalFromAccount( $user );
107
- $response = new StdResponse();
108
- $response->success = true;
109
- $response->msg_text = __( 'Google Authenticator was successfully removed from the account.', 'wp-simple-firewall' );
110
- return $response;
 
 
111
  }
112
 
113
- public function activateGaOnAccount( \WP_User $user, string $otp ) :StdResponse {
114
- $response = new StdResponse();
115
- $response->success = $this->processOtp( $user, $otp );
116
- if ( $response->success ) {
117
- $this->setProfileValidated( $user );
118
- $response->msg_text = sprintf(
119
  __( '%s was successfully added to your account.', 'wp-simple-firewall' ),
120
  __( 'Google Authenticator', 'wp-simple-firewall' )
121
  );
122
  }
123
  else {
124
- $this->resetSecret( $user );
125
- $response->error_text = __( 'One Time Password (OTP) was not valid.', 'wp-simple-firewall' )
126
- .' '.__( 'Please try again.', 'wp-simple-firewall' );
127
- }
128
- return $response;
129
- }
130
-
131
- /**
132
- * @param \WP_User $user
133
- * @return $this
134
- */
135
- protected function processRemovalFromAccount( \WP_User $user ) {
136
- $this->setProfileValidated( $user, false )
137
- ->resetSecret( $user );
138
- return $this;
139
- }
140
-
141
- /**
142
- * @inheritDoc
143
- */
144
- public function handleUserProfileSubmit( \WP_User $user ) {
145
- $otp = $this->fetchCodeFromRequest();
146
-
147
- if ( Services::Request()->post( 'shield_turn_off_ga' ) === 'Y' ) {
148
- $flash = __( 'Google Authenticator was successfully removed from the account.', 'wp-simple-firewall' );
149
- $this->processRemovalFromAccount( $user );
150
- $this->getMod()->setFlashAdminNotice( $flash );
151
- /**
152
- * $flash = __( 'An email has been sent to you in order to confirm Google Authenticator removal', 'wp-simple-firewall' );
153
- * $flash = __( 'We tried to send an email for you to confirm Google Authenticator removal but it failed.', 'wp-simple-firewall' );
154
- */
155
- }
156
- elseif ( !empty( $otp ) && !$this->hasValidatedProfile( $user ) ) { // Add GA to profile
157
- $validOTP = $this->processOtp( $user, $otp );
158
- if ( $validOTP ) {
159
- $this->setProfileValidated( $user );
160
- $flash = sprintf(
161
- __( '%s was successfully added to your account.', 'wp-simple-firewall' ),
162
- __( 'Google Authenticator', 'wp-simple-firewall' )
163
- );
164
- }
165
- else {
166
- $this->resetSecret( $user );
167
- $flash = __( 'One Time Password (OTP) was not valid.', 'wp-simple-firewall' )
168
- .' '.__( 'Please try again.', 'wp-simple-firewall' );
169
- }
170
- $this->getMod()->setFlashAdminNotice( $flash, !$validOTP );
171
  }
 
172
  }
173
 
174
- /**
175
- * @return array
176
- */
177
  public function getFormField() :array {
178
  return [
 
179
  'name' => $this->getLoginFormParameter(),
180
  'type' => 'text',
181
  'value' => '',
182
- 'placeholder' => __( 'Please use your Google Authenticator App to retrieve your code.', 'wp-simple-firewall' ),
183
- 'text' => __( 'Google Authenticator Code', 'wp-simple-firewall' ),
 
184
  'help_link' => 'https://shsec.io/wpsf42',
185
  'extras' => [
186
  'onkeyup' => "this.value=this.value.replace(/[^\d]/g,'')"
@@ -188,52 +147,36 @@ class GoogleAuth extends BaseProvider {
188
  ];
189
  }
190
 
191
- protected function processOtp( \WP_User $user, string $otp ) :bool {
192
- return $this->validateGaCode( $user, $otp );
193
- }
194
-
195
- /**
196
- * @param \WP_User $user
197
- * @param string $otp
198
- * @return bool
199
- */
200
- public function validateGaCode( \WP_User $user, string $otp ) :bool {
201
  $valid = false;
202
- if ( preg_match( '#^[0-9]{6}$#', $otp ) ) {
203
- try {
204
- $valid = (bool)( new GoogleAuthenticator\GoogleAuthenticator() )
205
- ->authenticate( $this->getSecret( $user ), $otp );
206
- }
207
- catch ( \Exception $e ) {
208
- }
209
- catch ( \Psr\Cache\CacheException $e ) {
210
- }
211
  }
212
  return $valid;
213
  }
214
 
215
  /**
216
- * @param \WP_User $user
217
  * @return string
218
  */
219
- protected function genNewSecret( \WP_User $user ) {
220
  try {
221
- return $this->getGaSecret( $user )->getSecretKey();
222
  }
223
  catch ( \InvalidArgumentException $e ) {
224
  return '';
225
  }
226
  }
227
 
228
- /**
229
- * @param \WP_User $user
230
- * @return GoogleAuthenticator\Secret
231
- */
232
- private function getGaSecret( $user ) {
233
  if ( !isset( $this->oWorkingSecret ) ) {
234
- $this->oWorkingSecret = ( new GoogleAuthenticator\SecretFactory() )
235
  ->create(
236
- sanitize_user( $user->user_login ),
237
  preg_replace( '#[^0-9a-z]#i', '', Services::WpGeneral()->getSiteName() )
238
  );
239
  }
@@ -241,20 +184,16 @@ class GoogleAuth extends BaseProvider {
241
  }
242
 
243
  /**
244
- * @param \WP_User $user
245
- * @return string
246
  */
247
- protected function getSecret( \WP_User $user ) {
248
- $sSec = parent::getSecret( $user );
249
- return empty( $sSec ) ? $this->resetSecret( $user ) : $sSec;
250
  }
251
 
252
- /**
253
- * @param string $secret
254
- * @return bool
255
- */
256
- protected function isSecretValid( $secret ) {
257
- return parent::isSecretValid( $secret ) && ( strlen( $secret ) == 16 );
258
  }
259
 
260
  public function isProviderEnabled() :bool {
1
+ <?php declare( strict_types=1 );
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor\Provider;
4
 
5
+ use Dolondro\GoogleAuthenticator\{
6
+ GoogleAuthenticator,
7
+ QrImageGenerator\GoogleQrImageGenerator,
8
+ Secret,
9
+ SecretFactory
10
+ };
11
  use FernleafSystems\Utilities\Data\Response\StdResponse;
12
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
13
  use FernleafSystems\Wordpress\Plugin\Shield\ShieldNetApi\Tools\GenerateGoogleAuthQrCode;
18
  const SLUG = 'ga';
19
 
20
  /**
21
+ * @var Secret
22
  */
23
  private $oWorkingSecret;
24
 
25
+ public function isProfileActive() :bool {
26
+ return $this->hasValidSecret() && $this->hasValidatedProfile();
27
  }
28
 
29
  public function getJavascriptVars() :array {
34
  ];
35
  }
36
 
37
+ protected function getProviderSpecificRenderData() :array {
38
  $con = $this->getCon();
39
 
40
+ $validatedProfile = $this->hasValidatedProfile();
41
  return [
42
  'hrefs' => [
43
+ 'src_chart_url' => $validatedProfile ? '' : $this->getQrImage(),
44
  ],
45
  'vars' => [
46
+ 'ga_secret' => $validatedProfile ? $this->getSecret() : $this->resetSecret(),
47
  ],
48
  'strings' => [
49
  'enter_auth_app_code' => __( 'Enter 6-digit Code from App', 'wp-simple-firewall' ),
65
  ];
66
  }
67
 
68
+ private function getQrImage() :string {
69
+ $secret = $this->getGaSecret();
 
70
  try {
71
  $qrImage = $this->getGaRegisterChartUrl( $secret );
72
  }
78
  }
79
 
80
  /**
 
 
81
  * @throws \Exception
82
  */
83
+ private function getGaRegisterChartUrl( Secret $secret ) :string {
84
  $rawImage = Services::HttpRequest()
85
  ->getContent(
86
+ ( new GoogleQrImageGenerator() )->generateUri( $secret ),
 
87
  [ 'timeout' => 3 ]
88
  );
89
  if ( empty( $rawImage ) ) {
92
  return base64_encode( $rawImage );
93
  }
94
 
95
+ private function getGaRegisterChartUrlShieldNet( Secret $secret ) :string {
96
  return ( new GenerateGoogleAuthQrCode() )
97
  ->setMod( $this->getCon()->getModule_Plugin() )
98
  ->getCode(
103
  );
104
  }
105
 
106
+ public function removeGA() :StdResponse {
107
+ $this->setProfileValidated( false )
108
+ ->resetSecret();
109
+
110
+ $r = new StdResponse();
111
+ $r->success = true;
112
+ $r->msg_text = __( 'Google Authenticator was successfully removed from the account.', 'wp-simple-firewall' );
113
+ return $r;
114
  }
115
 
116
+ public function activateGA( string $otp ) :StdResponse {
117
+ $r = new StdResponse();
118
+ $r->success = $this->processOtp( $otp, '' );
119
+ if ( $r->success ) {
120
+ $this->setProfileValidated( true );
121
+ $r->msg_text = sprintf(
122
  __( '%s was successfully added to your account.', 'wp-simple-firewall' ),
123
  __( 'Google Authenticator', 'wp-simple-firewall' )
124
  );
125
  }
126
  else {
127
+ $this->resetSecret();
128
+ $r->error_text = __( 'One Time Password (OTP) was not valid.', 'wp-simple-firewall' )
129
+ .' '.__( 'Please try again.', 'wp-simple-firewall' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
130
  }
131
+ return $r;
132
  }
133
 
 
 
 
134
  public function getFormField() :array {
135
  return [
136
+ 'slug' => static::SLUG,
137
  'name' => $this->getLoginFormParameter(),
138
  'type' => 'text',
139
  'value' => '',
140
+ 'placeholder' => __( '123456', 'wp-simple-firewall' ),
141
+ 'text' => __( 'Authenticator OTP', 'wp-simple-firewall' ),
142
+ 'description' => __( 'Enter 6-digit code from your authenticator app', 'wp-simple-firewall' ),
143
  'help_link' => 'https://shsec.io/wpsf42',
144
  'extras' => [
145
  'onkeyup' => "this.value=this.value.replace(/[^\d]/g,'')"
147
  ];
148
  }
149
 
150
+ protected function processOtp( string $otp, string $loginNonce = '' ) :bool {
 
 
 
 
 
 
 
 
 
151
  $valid = false;
152
+ try {
153
+ $valid = preg_match( '#^[0-9]{6}$#', $otp )
154
+ && ( new GoogleAuthenticator() )->authenticate( $this->getSecret(), $otp );
155
+ }
156
+ catch ( \Exception $e ) {
157
+ }
158
+ catch ( \Psr\Cache\CacheException $e ) {
 
 
159
  }
160
  return $valid;
161
  }
162
 
163
  /**
 
164
  * @return string
165
  */
166
+ protected function genNewSecret() {
167
  try {
168
+ return $this->getGaSecret()->getSecretKey();
169
  }
170
  catch ( \InvalidArgumentException $e ) {
171
  return '';
172
  }
173
  }
174
 
175
+ private function getGaSecret() :Secret {
 
 
 
 
176
  if ( !isset( $this->oWorkingSecret ) ) {
177
+ $this->oWorkingSecret = ( new SecretFactory() )
178
  ->create(
179
+ sanitize_user( $this->getUser()->user_login ),
180
  preg_replace( '#[^0-9a-z]#i', '', Services::WpGeneral()->getSiteName() )
181
  );
182
  }
184
  }
185
 
186
  /**
187
+ * @inheritDoc
 
188
  */
189
+ protected function getSecret() {
190
+ $secret = parent::getSecret();
191
+ return empty( $secret ) ? $this->resetSecret() : $secret;
192
  }
193
 
194
+ protected function hasValidSecret() :bool {
195
+ $secret = $this->getSecret();
196
+ return is_string( $secret ) && strlen( $secret ) === 16;
 
 
 
197
  }
198
 
199
  public function isProviderEnabled() :bool {
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/ProviderInterface.php DELETED
@@ -1,55 +0,0 @@
1
- <?php
2
-
3
- namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor\Provider;
4
-
5
- interface ProviderInterface {
6
-
7
- /**
8
- * Fired by Login Intent controller when capturing a login intent
9
- */
10
- public function captureLoginAttempt();
11
-
12
- /**
13
- * @return array
14
- */
15
- public function getFormField();
16
-
17
- /**
18
- * @return bool
19
- */
20
- public function validateLoginIntent();
21
-
22
- /**
23
- * @return bool
24
- */
25
- public function isEnforced();
26
-
27
- /**
28
- * @return bool
29
- */
30
- public function isProfileActive();
31
-
32
- /**
33
- * @return bool
34
- */
35
- public function isProviderAvailableToUser();
36
-
37
- /**
38
- * @return bool
39
- */
40
- public function isProviderEnabled();
41
-
42
- /**
43
- * This MUST only ever be hooked into when the User is looking at their OWN profile,
44
- * so we can use "current user" functions. Otherwise we need to be careful of mixing up users.
45
- * @return string
46
- */
47
- public function handleUserProfileSubmit();
48
-
49
- /**
50
- * This MUST only ever be hooked into when the User is looking at their OWN profile, so we can use "current user"
51
- * functions. Otherwise we need to be careful of mixing up users.
52
- * @return string
53
- */
54
- public function renderUserProfileOptions();
55
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Sms.php ADDED
@@ -0,0 +1,199 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare( strict_types=1 );
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor\Provider;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
6
+ use FernleafSystems\Wordpress\Plugin\Shield\ShieldNetApi\Sms\GetAvailableCountries;
7
+ use FernleafSystems\Wordpress\Plugin\Shield\ShieldNetApi\SureSend\SendSms;
8
+
9
+ class Sms extends BaseProvider {
10
+
11
+ const SLUG = 'sms';
12
+
13
+ public function getJavascriptVars() :array {
14
+ return [
15
+ 'ajax' => [
16
+ 'user_sms2fa_add' => $this->getMod()->getAjaxActionData( 'user_sms2fa_add' ),
17
+ 'user_sms2fa_verify' => $this->getMod()->getAjaxActionData( 'user_sms2fa_verify' ),
18
+ 'user_sms2fa_remove' => $this->getMod()->getAjaxActionData( 'user_sms2fa_remove' ),
19
+ ],
20
+ ];
21
+ }
22
+
23
+ /**
24
+ * @throws \Exception
25
+ */
26
+ public function verifyProvisionalRegistration( string $country, string $phone, string $code ) :bool {
27
+ $user = $this->getUser();
28
+ $meta = $this->getCon()->getUserMeta( $user );
29
+ $reg = is_array( $meta->sms_registration ) ? $meta->sms_registration : [];
30
+
31
+ if ( @$reg[ 'country' ] === $country && @$reg[ 'phone' ] === $phone
32
+ && ( $reg[ 'verified' ] ?? false ) ) {
33
+ throw new \Exception( 'This Phone number is already added and verified' );
34
+ }
35
+ if ( empty( $reg[ 'code' ] ) ) {
36
+ throw new \Exception( "The verification code couldn't be verified because the profile wasn't ready." );
37
+ }
38
+ if ( $reg[ 'code' ] !== trim( strtoupper( $code ) ) ) {
39
+ throw new \Exception( "The verification code provided wasn't correct." );
40
+ }
41
+
42
+ $meta->sms_registration = [
43
+ 'country' => $country,
44
+ 'phone' => $phone,
45
+ 'verified' => true,
46
+ ];
47
+
48
+ $this->setProfileValidated( true );
49
+
50
+ return true;
51
+ }
52
+
53
+ /**
54
+ * @throws \Exception
55
+ */
56
+ public function addProvisionalRegistration( string $country, string $phone ) :string {
57
+ $user = $this->getUser();
58
+ $meta = $this->getCon()->getUserMeta( $user );
59
+ $reg = is_array( $meta->sms_registration ) ? $meta->sms_registration : [];
60
+
61
+ $country = strtoupper( $country );
62
+
63
+ if ( !preg_match( '#^[0-9]{7,15}$#', $phone ) ) {
64
+ throw new \Exception( 'Phone numbers should contain only digits (0-9) and be no more than 15 digits in length.' );
65
+ }
66
+ if ( !preg_match( '#^[A-Z]{2}$#', $country ) ) {
67
+ throw new \Exception( 'Invalid country selected.' ); // TODO: Verify against official countries
68
+ }
69
+
70
+ if ( @$reg[ 'country' ] === $country && @$reg[ 'phone' ] === $phone
71
+ && ( $reg[ 'verified' ] ?? false ) ) {
72
+ throw new \Exception( 'This phone number is already verified' );
73
+ }
74
+
75
+ $this->setProfileValidated( false );
76
+
77
+ $meta->sms_registration = [
78
+ 'country' => $country,
79
+ 'phone' => $phone,
80
+ 'code' => $this->generateSimpleOTP(),
81
+ 'verified' => false,
82
+ ];
83
+
84
+ ( new SendSms() )
85
+ ->setMod( $this->getMod() )
86
+ ->send2FA( $user, $meta->sms_registration[ 'code' ] );
87
+
88
+ return $meta->sms_registration[ 'code' ];
89
+ }
90
+
91
+ /**
92
+ * @throws \Exception
93
+ */
94
+ public function startLoginIntent() {
95
+ $user = $this->getUser();
96
+ $meta = $this->getCon()->getUserMeta( $user );
97
+
98
+ $reg = $meta->sms_registration;
99
+ $reg[ 'code' ] = $this->generateSimpleOTP();
100
+ $meta->sms_registration = $reg;
101
+
102
+ ( new SendSms() )
103
+ ->setMod( $this->getMod() )
104
+ ->send2FA( $user, $meta->sms_registration[ 'code' ] );
105
+ }
106
+
107
+ /**
108
+ * @inheritDoc
109
+ */
110
+ public function postSuccessActions() {
111
+ parent::postSuccessActions();
112
+ $meta = $this->getCon()->getUserMeta( $this->getUser() );
113
+ $reg = $meta->sms_registration;
114
+ unset( $reg[ 'code' ] );
115
+ $meta->sms_registration = $reg;
116
+ return $this;
117
+ }
118
+
119
+ protected function processOtp( string $otp, string $loginNonce = '' ) :bool {
120
+ $meta = $this->getCon()->getUserMeta( $this->getUser() );
121
+ return !empty( $meta->sms_registration[ 'code' ] )
122
+ && $meta->sms_registration[ 'code' ] === strtoupper( $otp );
123
+ }
124
+
125
+ public function getFormField() :array {
126
+ return [
127
+ 'slug' => static::SLUG,
128
+ 'name' => $this->getLoginFormParameter(),
129
+ 'type' => 'button',
130
+ 'value' => 'Click To Send 2FA Code via SMS',
131
+ 'placeholder' => '',
132
+ 'text' => 'SMS Authentication',
133
+ 'classes' => [ 'btn', 'btn-light' ],
134
+ 'help_link' => '',
135
+ 'datas' => [
136
+ 'ajax_intent_sms_send' => $this->getMod()->getAjaxActionData( 'intent_sms_send', true ),
137
+ 'input_otp' => $this->getLoginFormParameter(),
138
+ ]
139
+ ];
140
+ }
141
+
142
+ protected function hasValidSecret() :bool {
143
+ return true;
144
+ }
145
+
146
+ public function remove() {
147
+ $this->getCon()->getUserMeta( $this->getUser() )->sms_registration = [];
148
+ parent::remove();
149
+ }
150
+
151
+ protected function getProviderSpecificRenderData() :array {
152
+ $user = $this->getUser();
153
+ $countries = ( new GetAvailableCountries() )
154
+ ->setMod( $this->getMod() )
155
+ ->run();
156
+
157
+ $validatedNumber = '';
158
+ if ( $this->hasValidatedProfile() ) {
159
+ $smsReg = $this->getCon()->getUserMeta( $user )->sms_registration;
160
+ $validatedNumber = sprintf( '[%s] (+%s) %s',
161
+ $smsReg[ 'country' ], $countries[ $smsReg[ 'country' ] ][ 'code' ], $smsReg[ 'phone' ] );
162
+ }
163
+
164
+ return [
165
+ 'flags' => [
166
+ 'has_countries' => !empty( $countries ),
167
+ 'is_validated' => $this->isProfileActive()
168
+ ],
169
+ 'strings' => [
170
+ 'label_email_authentication' => __( 'SMS Authentication', 'wp-simple-firewall' ),
171
+ 'title' => __( 'SMS Authentication', 'wp-simple-firewall' ),
172
+ 'provide_full_phone_number' => __( 'Provide Your Full Mobile Telephone Number', 'wp-simple-firewall' ),
173
+ 'description_sms_auth_submit' => __( 'Verifying your number will send an SMS to your phone with a verification code.', 'wp-simple-firewall' )
174
+ .' '.__( 'This will consume your SMS credits, if available, just as with any standard 2FA SMS.', 'wp-simple-firewall' ),
175
+ 'provided_by' => sprintf( __( 'Provided by %s', 'wp-simple-firewall' ),
176
+ $this->getCon()->getHumanName() ),
177
+ 'registered_number' => __( 'Registered Mobile Number', 'wp-simple-firewall' ),
178
+ ],
179
+ 'vars' => [
180
+ 'countries' => $countries,
181
+ 'validated_number' => $validatedNumber,
182
+ ]
183
+ ];
184
+ }
185
+
186
+ public function isProviderEnabled() :bool {
187
+ /** @var LoginGuard\Options $opts */
188
+ $opts = $this->getOptions();
189
+ return $opts->isEnabledSmsAuth();
190
+ }
191
+
192
+ public function isProfileActive() :bool {
193
+ return $this->hasValidatedProfile();
194
+ }
195
+
196
+ public function getProviderName() :string {
197
+ return 'SMS';
198
+ }
199
+ }
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/U2F.php CHANGED
@@ -1,9 +1,8 @@
1
- <?php
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor\Provider;
4
 
5
  use FernleafSystems\Utilities\Data\Response\StdResponse;
6
- use FernleafSystems\Wordpress\Plugin\Shield\Controller\Assets\Enqueue;
7
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
8
  use FernleafSystems\Wordpress\Services\Services;
9
  use u2flib_server\RegisterRequest;
@@ -12,16 +11,14 @@ use u2flib_server\SignRequest;
12
  class U2F extends BaseProvider {
13
 
14
  const SLUG = 'u2f';
15
- const BYPASS_MFA = true;
16
  const DEFAULT_SECRET = '[]';
17
 
18
- public function isProfileActive( \WP_User $user ) :bool {
19
- return parent::isProfileActive( $user ) && $this->hasValidatedProfile( $user );
20
  }
21
 
22
  public function getJavascriptVars() :array {
23
- $user = Services::WpUsers()->getCurrentWpUser();
24
- list( $reg, $signs ) = $this->createNewU2fRegistrationRequest( $user );
25
  return [
26
  'reg_request' => $reg,
27
  'signs' => $signs,
@@ -30,7 +27,7 @@ class U2F extends BaseProvider {
30
  'u2f_remove' => $this->getMod()->getAjaxActionData( 'u2f_remove' ),
31
  ],
32
  'flags' => [
33
- 'has_validated' => $this->hasValidatedProfile( $user )
34
  ],
35
  'strings' => [
36
  'not_supported' => __( 'U2F Security Key registration is not supported in this browser', 'wp-simple-firewall' ),
@@ -46,32 +43,28 @@ class U2F extends BaseProvider {
46
  ];
47
  }
48
 
49
- /**
50
- * @return array
51
- */
52
  public function getFormField() :array {
53
- $user = Services::WpUsers()->getCurrentWpUser();
54
-
55
- $aFieldData = [];
56
  try {
57
- /** @var SignRequest[] $aSignReqs */
58
- $aSignReqs = ( new \u2flib_server\U2F( $this->getU2fAppID() ) )
59
- ->getAuthenticateData( $this->getRegistrations( $user ) );
60
 
61
- if ( empty( $aSignReqs ) ) {
62
  throw new \Exception( 'No signature requests could be created' );
63
  }
64
 
65
- $aFieldData = [
 
66
  'name' => 'btn_u2f_start',
67
  'type' => 'button',
68
- 'value' => 'Click To Begin U2F Authentication',
69
  'placeholder' => '',
70
  'text' => 'U2F Authentication',
71
  'classes' => [ 'btn', 'btn-light' ],
72
  'help_link' => '',
73
  'datas' => [
74
- 'signs' => base64_encode( json_encode( $aSignReqs ) ),
75
  'input_otp' => $this->getLoginFormParameter(),
76
  ]
77
  ];
@@ -79,21 +72,19 @@ class U2F extends BaseProvider {
79
  catch ( \Exception $e ) {
80
  }
81
 
82
- return $aFieldData;
83
  }
84
 
85
  /**
86
- * @param \WP_User $user
87
  * @return object[]
88
  * @throws \u2flib_server\Error
89
  */
90
- private function createNewU2fRegistrationRequest( \WP_User $user ) {
91
- $meta = $this->getCon()->getUserMeta( $user );
92
  list( $newRegRequest, $signRequests ) = ( new \u2flib_server\U2F( $this->getU2fAppID() ) )
93
- ->getRegisterData( $this->getRegistrations( $user ) );
94
 
95
  // Store requests as an array to allow for multiple requests to be kept
96
- unset( $meta->u2f_regrequest ); // Old property
97
  $userRegRequests = array_filter(
98
  is_array( $meta->u2f_regrequests ) ? $meta->u2f_regrequests : [],
99
  function ( $ts ) {
@@ -107,30 +98,48 @@ class U2F extends BaseProvider {
107
  }
108
 
109
  /**
110
- * @param \WP_User $user
111
  * @return \stdClass[]
112
  */
113
- private function getRegistrations( \WP_User $user ) {
114
- $regs = json_decode( $this->getSecret( $user ), true );
115
- return array_map(
116
- function ( $reg ) {
117
- return (object)$reg;
118
- },
119
- is_array( $regs ) ? $regs : []
120
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
121
  }
122
 
123
- /**
124
- * TODO: Does this port stuff make a difference whatsoever?
125
- * @return string
126
- */
127
- private function getU2fAppID() {
128
- $aPs = wp_parse_url( Services::WpGeneral()->getHomeUrl() );
129
- $sPort = ( empty( $aPs[ 'port' ] ) || in_array( $aPs[ 'port' ], [ 80, 443 ] ) ) ? '' : $aPs[ 'port' ];
130
- return sprintf( 'https://%s%s', $aPs[ 'host' ], $sPort );
131
  }
132
 
133
- protected function getProviderSpecificRenderData( \WP_User $user ) :array {
134
  return [
135
  'strings' => [
136
  'title' => __( 'U2F', 'wp-simple-firewall' ),
@@ -138,52 +147,39 @@ class U2F extends BaseProvider {
138
  'prompt' => __( 'Click To Register A U2F Device.', 'wp-simple-firewall' ),
139
  ],
140
  'flags' => [
141
- 'is_validated' => $this->hasValidatedProfile( $user )
142
  ],
143
  'vars' => [
144
  'registrations' => array_map(
145
- function ( $oReg ) {
146
- $oReg->used_at = sprintf( '(%s: %s)',
147
  __( 'Used', 'wp-simple-firewall' ),
148
- empty( $oReg->used_at ) ?
149
  __( 'Never', 'wp-simple-firewall' )
150
  : Services::Request()
151
  ->carbon()
152
- ->setTimestamp( $oReg->used_at )
153
  ->diffForHumans()
154
  );
155
- return $oReg;
156
  },
157
- $this->getRegistrations( $user )
158
  )
159
  ],
160
  ];
161
  }
162
 
163
- /**
164
- * @inheritDoc
165
- */
166
- public function handleUserProfileSubmit( \WP_User $user ) {
167
- $rawU2fResponse = Services::Request()->post( 'icwp_wpsf_new_u2f_response' );
168
- if ( !empty( $rawU2fResponse ) ) {
169
- $result = $this->addNewRegistration( $user, json_decode( $rawU2fResponse, true ) );
170
- $this->getMod()
171
- ->setFlashAdminNotice( $result->success ? $result->msg_text : $result->error_text, $result->failed );
172
- }
173
- }
174
 
175
- public function addNewRegistration( \WP_User $user, array $u2fResponse ) :StdResponse {
176
  $response = new StdResponse();
177
-
178
- $meta = $this->getCon()->getUserMeta( $user );
179
-
180
  try {
181
  $u2fResponse = (object)$u2fResponse;
182
- $label = preg_replace( '#[^a-z0-9_-]#i', '', $u2fResponse->label );
183
  if ( strlen( $label ) > 16 ) {
184
  throw new \Exception( 'U2F Device label is larger than 16 characters.' );
185
  }
186
- if ( array_key_exists( $label, $this->getRegistrations( $user ) ) ) {
187
  throw new \Exception( 'U2F Device with this label already exists.' );
188
  }
189
 
@@ -211,8 +207,7 @@ class U2F extends BaseProvider {
211
  // attach the device label
212
  $confirmedReg = get_object_vars( $U2FRegistration );
213
  $confirmedReg[ 'label' ] = $label;
214
- $this->addRegistration( $user, $confirmedReg )
215
- ->setProfileValidated( $user );
216
 
217
  $response->msg_text = __( 'U2F Device was successfully registered on your profile.', 'wp-simple-firewall' );
218
  $response->success = true;
@@ -226,88 +221,68 @@ class U2F extends BaseProvider {
226
  return $response;
227
  }
228
 
229
- protected function processOtp( \WP_User $user, string $otp ) :bool {
230
- return $this->validateU2F( $user, $otp );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
231
  }
232
 
233
- /**
234
- * @param \WP_User $user
235
- * @param array $aReg
236
- * @return $this
237
- */
238
- private function addRegistration( \WP_User $user, array $aReg ) {
239
- $aRegs = $this->getRegistrations( $user );
240
 
241
  // We've been passed a Registration without a label. (for example counter increment)
242
  // So we try to locate the pre-existing registration and update it.
243
- if ( empty( $aReg[ 'label' ] ) ) {
244
- $aComparisonKeys = [ 'keyHandle', 'publicKey', 'certificate', ];
245
- foreach ( $aRegs as $sLabel => $oMaybeReg ) {
246
- $bIsReg = true;
247
- foreach ( $aComparisonKeys as $sKeyCompare ) {
248
- $bIsReg = $bIsReg && ( $oMaybeReg->{$sKeyCompare} === $aReg[ $sKeyCompare ] );
249
  }
250
- if ( $bIsReg ) {
251
- $aReg = array_merge( get_object_vars( $oMaybeReg ), $aReg );
252
  break;
253
  }
254
  }
255
  }
256
 
257
  // Only add if there's a label, and set defaults
258
- if ( !empty( $aReg[ 'label' ] ) ) {
259
- $aRegs[ $aReg[ 'label' ] ] = array_merge(
260
  [
261
  'used_at' => 0
262
  ],
263
- $aReg
264
  );
265
  }
266
 
267
- return $this->storeRegistrations( $user, $aRegs );
268
- }
269
-
270
- /**
271
- * @param \WP_User $user
272
- * @param array $regs
273
- * @return $this
274
- */
275
- private function storeRegistrations( \WP_User $user, array $regs ) {
276
- return $this->setProfileValidated( $user, !empty( $regs ) )
277
- ->setSecret( $user, json_encode( $regs ) );
278
  }
279
 
280
- /**
281
- * @param \WP_User $user
282
- * @param string $sU2fID
283
- * @return $this
284
- */
285
- public function removeRegisteredU2fId( \WP_User $user, $sU2fID ) {
286
- $regs = $this->getRegistrations( $user );
287
- if ( isset( $regs[ $sU2fID ] ) ) {
288
- unset( $regs[ $sU2fID ] );
289
- $this->storeRegistrations( $user, $regs );
290
- }
291
- return $this;
292
  }
293
 
294
- private function validateU2F( \WP_User $user, string $otp ) :bool {
295
- try {
296
- $oRegistration = ( new \u2flib_server\U2F( $this->getU2fAppID() ) )
297
- ->doAuthenticate(
298
- json_decode( base64_decode( Services::Request()->post( 'u2f_signs' ) ) ),
299
- $this->getRegistrations( $user ),
300
- json_decode( $otp )
301
- );
302
- $aReg = get_object_vars( $oRegistration );
303
- $aReg[ 'used_at' ] = Services::Request()->ts();
304
- $this->addRegistration( $user, $aReg );
305
- }
306
- catch ( \Exception $e ) {
307
- error_log( $e->getMessage() );
308
  }
309
-
310
- return !empty( $oRegistration );
311
  }
312
 
313
  public function isProviderEnabled() :bool {
1
+ <?php declare( strict_types=1 );
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor\Provider;
4
 
5
  use FernleafSystems\Utilities\Data\Response\StdResponse;
 
6
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
7
  use FernleafSystems\Wordpress\Services\Services;
8
  use u2flib_server\RegisterRequest;
11
  class U2F extends BaseProvider {
12
 
13
  const SLUG = 'u2f';
 
14
  const DEFAULT_SECRET = '[]';
15
 
16
+ public function isProfileActive() :bool {
17
+ return $this->hasValidatedProfile();
18
  }
19
 
20
  public function getJavascriptVars() :array {
21
+ list( $reg, $signs ) = $this->createNewU2fRegistrationRequest();
 
22
  return [
23
  'reg_request' => $reg,
24
  'signs' => $signs,
27
  'u2f_remove' => $this->getMod()->getAjaxActionData( 'u2f_remove' ),
28
  ],
29
  'flags' => [
30
+ 'has_validated' => $this->hasValidatedProfile()
31
  ],
32
  'strings' => [
33
  'not_supported' => __( 'U2F Security Key registration is not supported in this browser', 'wp-simple-firewall' ),
43
  ];
44
  }
45
 
 
 
 
46
  public function getFormField() :array {
47
+ $fieldData = [];
 
 
48
  try {
49
+ /** @var SignRequest[] $signReqs */
50
+ $signReqs = ( new \u2flib_server\U2F( $this->getU2fAppID() ) )
51
+ ->getAuthenticateData( $this->getRegistrations() );
52
 
53
+ if ( empty( $signReqs ) ) {
54
  throw new \Exception( 'No signature requests could be created' );
55
  }
56
 
57
+ $fieldData = [
58
+ 'slug' => static::SLUG,
59
  'name' => 'btn_u2f_start',
60
  'type' => 'button',
61
+ 'value' => __( 'Start U2F Auth', 'wp-simple-firewall' ),
62
  'placeholder' => '',
63
  'text' => 'U2F Authentication',
64
  'classes' => [ 'btn', 'btn-light' ],
65
  'help_link' => '',
66
  'datas' => [
67
+ 'signs' => base64_encode( json_encode( $signReqs ) ),
68
  'input_otp' => $this->getLoginFormParameter(),
69
  ]
70
  ];
72
  catch ( \Exception $e ) {
73
  }
74
 
75
+ return $fieldData;
76
  }
77
 
78
  /**
 
79
  * @return object[]
80
  * @throws \u2flib_server\Error
81
  */
82
+ private function createNewU2fRegistrationRequest() :array {
83
+ $meta = $this->getCon()->getUserMeta( $this->getUser() );
84
  list( $newRegRequest, $signRequests ) = ( new \u2flib_server\U2F( $this->getU2fAppID() ) )
85
+ ->getRegisterData( $this->getRegistrations() );
86
 
87
  // Store requests as an array to allow for multiple requests to be kept
 
88
  $userRegRequests = array_filter(
89
  is_array( $meta->u2f_regrequests ) ? $meta->u2f_regrequests : [],
90
  function ( $ts ) {
98
  }
99
 
100
  /**
 
101
  * @return \stdClass[]
102
  */
103
+ private function getRegistrations() :array {
104
+ $regs = $this->getSecret();
105
+ if ( is_string( $regs ) ) {
106
+ /**
107
+ * @since 13.1 - now store the registrations as an array rather than encode
108
+ * and decode it each time, so we need to decode it first and re-save it as the array.
109
+ */
110
+ $regs = json_decode( $regs, true );
111
+ $regs = array_map(
112
+ function ( $reg ) {
113
+ return (object)$reg;
114
+ },
115
+ is_array( $regs ) ? $regs : []
116
+ );
117
+ $this->storeRegistrations( $regs );
118
+ }
119
+
120
+ // should always be an array of objects
121
+ foreach ( $regs as $label => $reg ) {
122
+ if ( is_array( $reg ) ) {
123
+ if ( empty( $reg ) ) {
124
+ unset( $regs[ $label ] );
125
+ }
126
+ else {
127
+ $regs[ $label ] = (object)$reg;
128
+ }
129
+ $this->storeRegistrations( $regs );
130
+ }
131
+ }
132
+
133
+ return $regs;
134
  }
135
 
136
+ private function getU2fAppID() :string {
137
+ $p = wp_parse_url( Services::WpGeneral()->getHomeUrl() );
138
+ $port = ( empty( $p[ 'port' ] ) || in_array( $p[ 'port' ], [ 80, 443 ] ) ) ? '' : $p[ 'port' ];
139
+ return sprintf( 'https://%s%s', $p[ 'host' ], $port );
 
 
 
 
140
  }
141
 
142
+ protected function getProviderSpecificRenderData() :array {
143
  return [
144
  'strings' => [
145
  'title' => __( 'U2F', 'wp-simple-firewall' ),
147
  'prompt' => __( 'Click To Register A U2F Device.', 'wp-simple-firewall' ),
148
  ],
149
  'flags' => [
150
+ 'is_validated' => $this->hasValidatedProfile()
151
  ],
152
  'vars' => [
153
  'registrations' => array_map(
154
+ function ( $reg ) {
155
+ $reg->used_at = sprintf( '(%s: %s)',
156
  __( 'Used', 'wp-simple-firewall' ),
157
+ empty( $reg->used_at ) ?
158
  __( 'Never', 'wp-simple-firewall' )
159
  : Services::Request()
160
  ->carbon()
161
+ ->setTimestamp( $reg->used_at )
162
  ->diffForHumans()
163
  );
164
+ return $reg;
165
  },
166
+ $this->getRegistrations()
167
  )
168
  ],
169
  ];
170
  }
171
 
172
+ public function addNewRegistration( array $u2fResponse ) :StdResponse {
173
+ $meta = $this->getCon()->getUserMeta( $this->getUser() );
 
 
 
 
 
 
 
 
 
174
 
 
175
  $response = new StdResponse();
 
 
 
176
  try {
177
  $u2fResponse = (object)$u2fResponse;
178
+ $label = sanitize_key( $u2fResponse->label );
179
  if ( strlen( $label ) > 16 ) {
180
  throw new \Exception( 'U2F Device label is larger than 16 characters.' );
181
  }
182
+ if ( array_key_exists( $label, $this->getRegistrations() ) ) {
183
  throw new \Exception( 'U2F Device with this label already exists.' );
184
  }
185
 
207
  // attach the device label
208
  $confirmedReg = get_object_vars( $U2FRegistration );
209
  $confirmedReg[ 'label' ] = $label;
210
+ $this->addRegistration( $confirmedReg );
 
211
 
212
  $response->msg_text = __( 'U2F Device was successfully registered on your profile.', 'wp-simple-firewall' );
213
  $response->success = true;
221
  return $response;
222
  }
223
 
224
+ protected function processOtp( string $otp, string $loginNonce = '' ) :bool {
225
+ try {
226
+ $registration = ( new \u2flib_server\U2F( $this->getU2fAppID() ) )
227
+ ->doAuthenticate(
228
+ json_decode( base64_decode( Services::Request()->post( 'u2f_signs' ) ) ),
229
+ $this->getRegistrations(),
230
+ json_decode( $otp )
231
+ );
232
+ $reg = get_object_vars( $registration );
233
+ $reg[ 'used_at' ] = Services::Request()->ts();
234
+ $this->addRegistration( $reg );
235
+ }
236
+ catch ( \Exception $e ) {
237
+ error_log( $e->getMessage() );
238
+ }
239
+
240
+ return !empty( $registration );
241
  }
242
 
243
+ private function addRegistration( array $reg ) {
244
+ $regs = $this->getRegistrations();
 
 
 
 
 
245
 
246
  // We've been passed a Registration without a label. (for example counter increment)
247
  // So we try to locate the pre-existing registration and update it.
248
+ if ( empty( $reg[ 'label' ] ) ) {
249
+ $comparisonKeys = [ 'keyHandle', 'publicKey', 'certificate', ];
250
+ foreach ( $regs as $label => $maybeReg ) {
251
+ $isReg = true;
252
+ foreach ( $comparisonKeys as $keyCompare ) {
253
+ $isReg = $isReg && ( $maybeReg->{$keyCompare} === $reg[ $keyCompare ] );
254
  }
255
+ if ( $isReg ) {
256
+ $reg = array_merge( get_object_vars( $maybeReg ), $reg );
257
  break;
258
  }
259
  }
260
  }
261
 
262
  // Only add if there's a label, and set defaults
263
+ if ( !empty( $reg[ 'label' ] ) ) {
264
+ $regs[ $reg[ 'label' ] ] = array_merge(
265
  [
266
  'used_at' => 0
267
  ],
268
+ $reg
269
  );
270
  }
271
 
272
+ $this->storeRegistrations( $regs );
 
 
 
 
 
 
 
 
 
 
273
  }
274
 
275
+ private function storeRegistrations( array $regs ) {
276
+ $this->setProfileValidated( !empty( $regs ) )
277
+ ->setSecret( $regs );
 
 
 
 
 
 
 
 
 
278
  }
279
 
280
+ public function removeRegisteredU2fId( string $U2fID ) {
281
+ $regs = $this->getRegistrations();
282
+ if ( isset( $regs[ $U2fID ] ) ) {
283
+ unset( $regs[ $U2fID ] );
284
+ $this->storeRegistrations( $regs );
 
 
 
 
 
 
 
 
 
285
  }
 
 
286
  }
287
 
288
  public function isProviderEnabled() :bool {
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Provider/Yubikey.php CHANGED
@@ -1,4 +1,4 @@
1
- <?php
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor\Provider;
4
 
@@ -21,11 +21,10 @@ class Yubikey extends BaseProvider {
21
  ];
22
  }
23
 
24
- protected function getProviderSpecificRenderData( \WP_User $user ) :array {
25
- $con = $this->getCon();
26
  return [
27
  'vars' => [
28
- 'yubi_ids' => $this->getYubiIds( $user ),
29
  ],
30
  'strings' => [
31
  'registered_yubi_ids' => __( 'Registered Yubikey devices', 'wp-simple-firewall' ),
@@ -42,21 +41,26 @@ class Yubikey extends BaseProvider {
42
  'title' => __( 'Yubikey Authentication', 'wp-simple-firewall' ),
43
  'cant_add_other_user' => sprintf( __( "Sorry, %s may not be added to another user's account.", 'wp-simple-firewall' ), 'Yubikey' ),
44
  'cant_remove_admins' => sprintf( __( "Sorry, %s may only be removed from another user's account by a Security Administrator.", 'wp-simple-firewall' ), __( 'Yubikey', 'wp-simple-firewall' ) ),
45
- 'provided_by' => sprintf( __( 'Provided by %s', 'wp-simple-firewall' ), $con->getHumanName() ),
 
46
  'remove_more_info' => __( 'Understand how to remove Google Authenticator', 'wp-simple-firewall' )
47
  ],
48
  ];
49
  }
50
 
51
- private function getYubiIds( \WP_User $user ) :array {
52
- return array_filter( array_map( 'trim', explode( ',', $this->getSecret( $user ) ) ) );
53
  }
54
 
55
- protected function processOtp( \WP_User $user, string $otp ) :bool {
 
 
 
 
56
  $valid = false;
57
 
58
- foreach ( $this->getYubiIds( $user ) as $sKey ) {
59
- if ( strpos( $otp, $sKey ) === 0 && $this->sendYubiOtpRequest( $otp ) ) {
60
  $valid = true;
61
  break;
62
  }
@@ -99,7 +103,7 @@ class Yubikey extends BaseProvider {
99
  return $success;
100
  }
101
 
102
- public function toggleRegisteredYubiID( \WP_User $user, string $keyOrOTP ) :StdResponse {
103
  $response = new StdResponse();
104
  $response->success = true;
105
 
@@ -113,7 +117,7 @@ class Yubikey extends BaseProvider {
113
  }
114
  else {
115
  $keyID = substr( $keyOrOTP, 0, self::OTP_LENGTH );
116
- $IDs = $this->getYubiIds( $user );
117
 
118
  if ( in_array( $keyID, $IDs ) ) {
119
  $response->success = true;
@@ -137,36 +141,25 @@ class Yubikey extends BaseProvider {
137
  }
138
 
139
  if ( !$this->sendYubiOtpRequest( $keyOrOTP ) ) {
140
- $response->success = false;
141
  $response->error_text = 'One-Time Password verification failed';
142
  }
143
  $response->success = true;
144
 
145
- $this->setSecret( $user, implode( ',', array_unique( array_filter( $IDs ) ) ) );
146
  }
147
 
148
  return $response;
149
  }
150
 
151
- /**
152
- * @param \WP_User $user
153
- * @param string $key
154
- * @param bool $add - true to add; false to remove
155
- * @return $this
156
- */
157
- public function addRemoveRegisteredYubiId( \WP_User $user, string $key, $add = true ) {
158
- }
159
-
160
- /**
161
- * @return array
162
- */
163
  public function getFormField() :array {
164
  return [
 
165
  'name' => $this->getLoginFormParameter(),
166
  'type' => 'text',
167
- 'placeholder' => __( 'Use your Yubikey to generate a new code.', 'wp-simple-firewall' ),
168
  'value' => '',
169
  'text' => __( 'Yubikey OTP', 'wp-simple-firewall' ),
 
170
  'help_link' => 'https://shsec.io/4i'
171
  ];
172
  }
@@ -177,19 +170,14 @@ class Yubikey extends BaseProvider {
177
  return $opts->isEnabledYubikey();
178
  }
179
 
180
- /**
181
- * @param string $secret
182
- * @return bool
183
- */
184
- protected function isSecretValid( $secret ) {
185
- $bValid = parent::isSecretValid( $secret );
186
- if ( $bValid ) {
187
- foreach ( explode( ',', $secret ) as $sId ) {
188
- $bValid = $bValid &&
189
- preg_match( sprintf( '#^[a-z]{%s}$#', self::OTP_LENGTH ), $sId );
190
- }
191
- }
192
- return $bValid;
193
  }
194
 
195
  public function getProviderName() :string {
1
+ <?php declare( strict_types=1 );
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor\Provider;
4
 
21
  ];
22
  }
23
 
24
+ protected function getProviderSpecificRenderData() :array {
 
25
  return [
26
  'vars' => [
27
+ 'yubi_ids' => $this->getYubiIds(),
28
  ],
29
  'strings' => [
30
  'registered_yubi_ids' => __( 'Registered Yubikey devices', 'wp-simple-firewall' ),
41
  'title' => __( 'Yubikey Authentication', 'wp-simple-firewall' ),
42
  'cant_add_other_user' => sprintf( __( "Sorry, %s may not be added to another user's account.", 'wp-simple-firewall' ), 'Yubikey' ),
43
  'cant_remove_admins' => sprintf( __( "Sorry, %s may only be removed from another user's account by a Security Administrator.", 'wp-simple-firewall' ), __( 'Yubikey', 'wp-simple-firewall' ) ),
44
+ 'provided_by' => sprintf( __( 'Provided by %s', 'wp-simple-firewall' ),
45
+ $this->getCon()->getHumanName() ),
46
  'remove_more_info' => __( 'Understand how to remove Google Authenticator', 'wp-simple-firewall' )
47
  ],
48
  ];
49
  }
50
 
51
+ private function getYubiIds() :array {
52
+ return array_filter( array_map( 'trim', explode( ',', $this->getSecret() ) ) );
53
  }
54
 
55
+ public function isProfileActive() :bool {
56
+ return count( $this->getYubiIds() ) > 0;
57
+ }
58
+
59
+ protected function processOtp( string $otp, string $loginNonce = '' ) :bool {
60
  $valid = false;
61
 
62
+ foreach ( $this->getYubiIds() as $key ) {
63
+ if ( strpos( $otp, $key ) === 0 && $this->sendYubiOtpRequest( $otp ) ) {
64
  $valid = true;
65
  break;
66
  }
103
  return $success;
104
  }
105
 
106
+ public function toggleRegisteredYubiID( string $keyOrOTP ) :StdResponse {
107
  $response = new StdResponse();
108
  $response->success = true;
109
 
117
  }
118
  else {
119
  $keyID = substr( $keyOrOTP, 0, self::OTP_LENGTH );
120
+ $IDs = $this->getYubiIds();
121
 
122
  if ( in_array( $keyID, $IDs ) ) {
123
  $response->success = true;
141
  }
142
 
143
  if ( !$this->sendYubiOtpRequest( $keyOrOTP ) ) {
 
144
  $response->error_text = 'One-Time Password verification failed';
145
  }
146
  $response->success = true;
147
 
148
+ $this->setSecret( implode( ',', array_unique( array_filter( $IDs ) ) ) );
149
  }
150
 
151
  return $response;
152
  }
153
 
 
 
 
 
 
 
 
 
 
 
 
 
154
  public function getFormField() :array {
155
  return [
156
+ 'slug' => static::SLUG,
157
  'name' => $this->getLoginFormParameter(),
158
  'type' => 'text',
159
+ 'placeholder' => '',
160
  'value' => '',
161
  'text' => __( 'Yubikey OTP', 'wp-simple-firewall' ),
162
+ 'description' => __( 'Use your Yubikey to generate a new code', 'wp-simple-firewall' ),
163
  'help_link' => 'https://shsec.io/4i'
164
  ];
165
  }
170
  return $opts->isEnabledYubikey();
171
  }
172
 
173
+ protected function hasValidSecret() :bool {
174
+ $secret = $this->getSecret();
175
+ return count( array_filter(
176
+ explode( ',', is_string( $secret ) ? $secret : '' ),
177
+ function ( $yubiID ) {
178
+ return (bool)preg_match( sprintf( '#^[a-z]{%s}$#', self::OTP_LENGTH ), $yubiID );
179
+ }
180
+ ) ) > 0;
 
 
 
 
 
181
  }
182
 
183
  public function getProviderName() :string {
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Render/RenderBase.php ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare( strict_types=1 );
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor\Render;
4
+
5
+ use FernleafSystems\Utilities\Data\Adapter\DynProperties;
6
+ use FernleafSystems\Wordpress\Plugin\Shield;
7
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
8
+ use FernleafSystems\Wordpress\Services\Services;
9
+
10
+ /**
11
+ * @property string $login_nonce
12
+ * @property string $interim_login
13
+ * @property string $rememberme
14
+ * @property string $redirect_to
15
+ * @property string $msg_error
16
+ * @property string $interim_message
17
+ */
18
+ abstract class RenderBase {
19
+
20
+ use Shield\Modules\ModConsumer;
21
+ use Shield\Utilities\Consumer\WpUserConsumer;
22
+ use DynProperties;
23
+
24
+ public function render() {
25
+ echo $this->buildPage();
26
+ die();
27
+ }
28
+
29
+ abstract protected function buildPage() :string;
30
+
31
+ protected function getCommonFormData() :array {
32
+ /** @var LoginGuard\ModCon $mod */
33
+ $mod = $this->getMod();
34
+ $mfaCon = $mod->getMfaController();
35
+ /** @var LoginGuard\Options $opts */
36
+ $opts = $mfaCon->getOptions();
37
+ $con = $mfaCon->getCon();
38
+ $req = Services::Request();
39
+ $user = $this->getWpUser();
40
+ $WP = Services::WpGeneral();
41
+
42
+ $mfaSkip = (int)( $opts->getMfaSkip()/DAY_IN_SECONDS );
43
+
44
+ return [
45
+ 'hrefs' => [
46
+ 'form_action' => add_query_arg( [
47
+ 'shield_action' => 'wp_login_2fa_verify'
48
+ ], $WP->getLoginUrl() ),
49
+ ],
50
+ 'flags' => [
51
+ 'can_skip_mfa' => $opts->isMfaSkip(),
52
+ 'show_branded_links' => !$con->getModule_SecAdmin()->getWhiteLabelController()->isEnabled(),
53
+ ],
54
+ 'strings' => [
55
+ 'cancel' => __( 'Cancel Login', 'wp-simple-firewall' ),
56
+ 'time_remaining' => __( 'Time Remaining', 'wp-simple-firewall' ),
57
+ 'calculating' => __( 'Calculating', 'wp-simple-firewall' ).' ...',
58
+ 'seconds' => strtolower( __( 'Seconds', 'wp-simple-firewall' ) ),
59
+ 'login_expired' => __( 'Login Expired', 'wp-simple-firewall' ),
60
+ 'verify_my_login' => __( 'Verify My Login', 'wp-simple-firewall' ),
61
+ 'skip_mfa' => sprintf(
62
+ __( "Remember me for %s", 'wp-simple-firewall' ),
63
+ sprintf( _n( '%s day', '%s days', $mfaSkip, 'wp-simple-firewall' ), $mfaSkip )
64
+ )
65
+ ],
66
+ 'vars' => [
67
+ 'form_hidden_fields' => $this->getHiddenFields(),
68
+ 'login_fields' => array_filter( array_map(
69
+ function ( $provider ) {
70
+ return $provider->getFormField();
71
+ },
72
+ $mfaCon->getProvidersForUser( $user, true )
73
+ ) ),
74
+ 'show_branded_links' => !$con->getModule_SecAdmin()->getWhiteLabelController()->isEnabled(),
75
+ 'time_remaining' => $this->getLoginIntentExpiresAt() - $req->ts(),
76
+ 'message_type' => 'info',
77
+ ]
78
+ ];
79
+ }
80
+
81
+ protected function getHiddenFields() :array {
82
+ $req = Services::Request();
83
+
84
+ $referUrl = $req->server( 'HTTP_REFERER', '' );
85
+ if ( strpos( $referUrl, '?' ) ) {
86
+ list( $referUrl, $referQuery ) = explode( '?', $referUrl, 2 );
87
+ }
88
+ else {
89
+ $referQuery = '';
90
+ }
91
+
92
+ $redirectTo = $this->redirect_to;
93
+ if ( empty( $redirectTo ) ) {
94
+
95
+ if ( !empty( $referQuery ) ) {
96
+ parse_str( $referQuery, $referQueryItems );
97
+ if ( !empty( $referQueryItems[ 'redirect_to' ] ) ) {
98
+ $redirectTo = esc_url( $referQueryItems[ 'redirect_to' ] );
99
+ }
100
+ }
101
+ }
102
+
103
+ if ( !empty( $redirectTo ) ) {
104
+ $redirectTo = esc_url( $this->redirect_to );
105
+ }
106
+
107
+ $cancelHref = $req->post( 'cancel_href', '' );
108
+ if ( empty( $cancelHref ) && Services::Data()->isValidWebUrl( $referUrl ) ) {
109
+ $cancelHref = parse_url( $referUrl, PHP_URL_PATH );
110
+ }
111
+
112
+ global $interim_login;
113
+
114
+ $fields = array_filter( [
115
+ 'interim-login' => ( $interim_login || $this->interim_login ) ? '1' : false,
116
+ 'login_nonce' => $this->login_nonce,
117
+ 'rememberme' => esc_attr( $this->rememberme ),
118
+ 'redirect_to' => esc_attr( esc_url( $redirectTo ) ),
119
+ 'cancel_href' => esc_attr( esc_url( $cancelHref ) ),
120
+ ] );
121
+ $fields[ 'wp_user_id' ] = $this->getWpUser()->ID;
122
+ return $fields;
123
+ }
124
+
125
+ protected function getLoginIntentExpiresAt() :int {
126
+ /** @var LoginGuard\ModCon $mod */
127
+ $mod = $this->getMod();
128
+ $mfaCon = $mod->getMfaController();
129
+ /** @var LoginGuard\Options $opts */
130
+ $opts = $this->getOptions();
131
+ $intentAt = $mfaCon->getActiveLoginIntents( $this->getWpUser() )[ $this->login_nonce ][ 'start' ] ?? 0;
132
+ return Services::Request()
133
+ ->carbon()
134
+ ->setTimestamp( $intentAt )
135
+ ->addMinutes( $opts->getLoginIntentMinutes() )->timestamp;
136
+ }
137
+ }
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Render/RenderLoginIntentPage.php ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare( strict_types=1 );
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor\Render;
4
+
5
+ use FernleafSystems\Wordpress\Plugin\Shield;
6
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
7
+ use FernleafSystems\Wordpress\Plugin\Shield\Utilities\AdminNotices\NoticeVO;
8
+ use FernleafSystems\Wordpress\Services\Services;
9
+
10
+ class RenderLoginIntentPage extends RenderBase {
11
+
12
+ use Shield\Utilities\Consumer\WpUserConsumer;
13
+
14
+ protected function buildPage() :string {
15
+ $con = $this->getCon();
16
+ /** @var LoginGuard\ModCon $mod */
17
+ $mod = $this->getMod();
18
+
19
+ $labels = $con->getLabels();
20
+ $bannerURL = empty( $labels[ 'url_login2fa_logourl' ] ) ? $con->urls->forImage( 'shield/banner-2FA.png' ) : $labels[ 'url_login2fa_logourl' ];
21
+
22
+ $data = [
23
+ 'strings' => [
24
+ 'what_is_this' => __( 'What is this?', 'wp-simple-firewall' ),
25
+ 'page_title' => sprintf( __( '%s Login Verification', 'wp-simple-firewall' ), $con->getHumanName() ),
26
+ ],
27
+ 'hrefs' => [
28
+ 'css_bootstrap' => $con->urls->forCss( 'bootstrap' ),
29
+ 'js_bootstrap' => $con->urls->forJs( 'bootstrap' ),
30
+ 'shield_logo' => 'https://ps.w.org/wp-simple-firewall/assets/banner-772x250.png',
31
+ 'what_is_this' => 'https://help.getshieldsecurity.com/article/322-what-is-the-login-authentication-portal',
32
+ ],
33
+ 'imgs' => [
34
+ 'banner' => $bannerURL,
35
+ 'favicon' => $con->urls->forImage( 'pluginlogo_24x24.png' ),
36
+ ],
37
+ 'flags' => [
38
+ 'show_branded_links' => !$con->getModule_SecAdmin()->getWhiteLabelController()->isEnabled(),
39
+ ],
40
+ 'content' => [
41
+ 'form' => $this->renderForm(),
42
+ ]
43
+ ];
44
+
45
+ // Provide the U2F scripts if required.
46
+ $data[ 'head' ] = [
47
+ 'scripts' => [
48
+ [
49
+ 'src' => $con->urls->forJs( 'u2f-bundle' ),
50
+ ],
51
+ [
52
+ 'src' => $con->urls->forJs( 'shield/login2fa' ),
53
+ ]
54
+ ],
55
+ 'styles' => [
56
+ [
57
+ 'href' => $con->urls->forCss( 'shield/login2fa' ),
58
+ ]
59
+ ]
60
+ ];
61
+
62
+ return $mod->renderTemplate( '/pages/login_intent/index.twig',
63
+ Services::DataManipulation()->mergeArraysRecursive(
64
+ $mod->getUIHandler()->getBaseDisplayData(), $data ), true );
65
+ }
66
+
67
+ private function renderForm() :string {
68
+ /** @var LoginGuard\ModCon $mod */
69
+ $mod = $this->getMod();
70
+ $con = $this->getCon();
71
+
72
+ $notice = $con->getAdminNotices()->getFlashNotice();
73
+ if ( $notice instanceof NoticeVO ) {
74
+ $msg = $notice->render_data[ 'message' ];
75
+ }
76
+ else {
77
+ $msg = __( 'Please supply at least 1 authentication code', 'wp-simple-firewall' );
78
+ }
79
+
80
+ if ( !empty( $msg ) && !$con->getModule_SecAdmin()->getWhiteLabelController()->isEnabled() ) {
81
+ $msg .= sprintf( ' [<a href="%s" target="_blank">%s</a>]', 'https://shsec.io/shieldcantaccess', __( 'More Info', 'wp-simple-firewall' ) );
82
+ }
83
+
84
+ return $mod->renderTemplate(
85
+ '/components/login_intent/form.twig',
86
+ Services::DataManipulation()->mergeArraysRecursive(
87
+ $mod->getUIHandler()->getBaseDisplayData(),
88
+ $this->getCommonFormData(),
89
+ [
90
+ 'strings' => [
91
+ 'message' => $msg,
92
+ ],
93
+ 'vars' => [
94
+ 'message_type' => 'info',
95
+ ],
96
+ ]
97
+ ),
98
+ true
99
+ );
100
+ }
101
+ }
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/Render/RenderWpLoginReplica.php ADDED
@@ -0,0 +1,294 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare( strict_types=1 );
2
+
3
+ namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor\Render;
4
+
5
+ use FernleafSystems\Utilities\Data\CaptureOutput;
6
+ use FernleafSystems\Wordpress\Plugin\Shield;
7
+ use FernleafSystems\Wordpress\Plugin\Shield\Controller\Assets\Enqueue;
8
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
9
+ use FernleafSystems\Wordpress\Services\Services;
10
+
11
+ /**
12
+ * @property bool $include_body
13
+ */
14
+ class RenderWpLoginReplica extends RenderBase {
15
+
16
+ public function __construct() {
17
+ $this->include_body = true;
18
+ }
19
+
20
+ protected function buildPage() :string {
21
+ $this->preRenderSetup();
22
+ return $this->getMod()->renderTemplate( '/components/wplogin_replica/wp_login.twig', [
23
+ 'content' => [
24
+ 'header' => $this->renderLoginHeader( __( 'Login 2FA Verification', 'wp-simple-firewall' ) ),
25
+ 'body' => $this->include_body ? $this->renderLoginBody() : '',
26
+ 'footer' => $this->renderLoginFooter(),
27
+ ]
28
+ ] );
29
+ }
30
+
31
+ private function preRenderSetup() {
32
+ add_filter( 'shield/custom_enqueues', function ( array $enqueues ) {
33
+ $enqueues[ Enqueue::JS ][] = 'shield/login2fa';
34
+ $enqueues[ Enqueue::CSS ][] = 'shield/login2fa';
35
+ return $enqueues;
36
+ } );
37
+ }
38
+
39
+ private function renderLoginBody() :string {
40
+ /** @var LoginGuard\ModCon $mod */
41
+ $mod = $this->getMod();
42
+ $WP = Services::WpGeneral();
43
+ $user = $this->getWpUser();
44
+
45
+ global $interim_login;
46
+
47
+ return $this->getMod()->renderTemplate( '/components/wplogin_replica/login_body.twig',
48
+
49
+ Services::DataManipulation()->mergeArraysRecursive(
50
+ $mod->getUIHandler()->getBaseDisplayData(),
51
+ $this->getCommonFormData(),
52
+ [
53
+ 'content' => [
54
+ 'providers' => array_filter( array_map(
55
+ function ( $provider ) use ( $user ) {
56
+ return $provider->setUser( $user )->renderFormFieldForWpLogin();
57
+ },
58
+ $mod->getMfaController()->getProvidersForUser( $user, true )
59
+ ) )
60
+ ],
61
+ 'flags' => [
62
+ 'has_error_msg' => !empty( $this->msg_error ),
63
+ 'is_interim_login' => (bool)$interim_login,
64
+ ],
65
+ 'hrefs' => [
66
+ 'home' => $WP->getHomeUrl(),
67
+ ],
68
+ 'strings' => [
69
+ 'error_msg' => $this->msg_error,
70
+ 'back_home' => __( 'Go Back Home', 'wp-simple-firewall' ),
71
+ 'button_submit' => __( 'Complete Login', 'wp-simple-firewall' )
72
+ ],
73
+ ]
74
+ )
75
+ );
76
+ }
77
+
78
+ private function renderLoginFooter() :string {
79
+ /**
80
+ * Fires in the login page footer.
81
+ *
82
+ * @since 3.1.0
83
+ */
84
+ $actionLoginFooter = CaptureOutput::Capture( function () {
85
+ do_action( 'login_footer' );
86
+ } );
87
+
88
+ return $this->getMod()->renderTemplate( '/components/wplogin_replica/login_footer.twig', [
89
+ 'content' => [
90
+ 'action_login_footer' => $actionLoginFooter,
91
+ ],
92
+ ] );
93
+ }
94
+
95
+ private function renderLoginHeader( string $title = 'Log In', string $message = '', $wp_error = null ) :string {
96
+ global $interim_login, $action;
97
+
98
+ // Don't index any of these forms.
99
+ if ( function_exists( 'wp_robots_sensitive_page' ) ) {
100
+ add_filter( 'wp_robots', 'wp_robots_sensitive_page' );
101
+ }
102
+ if ( function_exists( 'wp_strict_cross_origin_referrer' ) ) {
103
+ add_action( 'login_head', 'wp_strict_cross_origin_referrer' );
104
+ }
105
+
106
+ if ( !is_wp_error( $wp_error ) ) {
107
+ $wp_error = new \WP_Error();
108
+ }
109
+
110
+ if ( function_exists( 'wp_login_viewport_meta' ) ) {
111
+ add_action( 'login_head', 'wp_login_viewport_meta' );
112
+ }
113
+
114
+ $login_title = get_bloginfo( 'name', 'display' );
115
+
116
+ /* translators: Login screen title. 1: Login screen name, 2: Network or site name. */
117
+ $login_title = sprintf( __( '%1$s &lsaquo; %2$s &#8212; WordPress' ), $title, $login_title );
118
+
119
+ /**
120
+ * Filters the title tag content for login page.
121
+ *
122
+ * @since 4.9.0
123
+ *
124
+ * @param string $login_title The page title, with extra context added.
125
+ * @param string $title The original page title.
126
+ */
127
+ $login_title = apply_filters( 'login_title', $login_title, $title );
128
+
129
+ wp_enqueue_style( 'login' );
130
+
131
+ /**
132
+ * Enqueue scripts and styles for the login page.
133
+ *
134
+ * @since 3.1.0
135
+ */
136
+ $actionLoginEnqScripts = CaptureOutput::Capture( function () {
137
+ do_action( 'login_enqueue_scripts' );
138
+ } );
139
+
140
+ /**
141
+ * Fires in the login page header after scripts are enqueued.
142
+ *
143
+ * @since 2.1.0
144
+ */
145
+ $actionLoginHead = CaptureOutput::Capture( function () {
146
+ do_action( 'login_head' );
147
+ } );
148
+
149
+ $login_header_url = __( 'https://wordpress.org/' );
150
+
151
+ /**
152
+ * Filters link URL of the header logo above login form.
153
+ *
154
+ * @since 2.1.0
155
+ *
156
+ * @param string $login_header_url Login header logo URL.
157
+ */
158
+ $login_header_url = apply_filters( 'login_headerurl', $login_header_url );
159
+
160
+ $login_header_title = '';
161
+
162
+ $login_header_text = empty( $login_header_title ) ? __( 'Powered by WordPress' ) : $login_header_title;
163
+
164
+ /**
165
+ * Filters the link text of the header logo above the login form.
166
+ *
167
+ * @since 5.2.0
168
+ *
169
+ * @param string $login_header_text The login header logo link text.
170
+ */
171
+ $login_header_text = apply_filters( 'login_headertext', $login_header_text );
172
+
173
+ $classes = [ 'login-action-'.Services::Request()->request( 'action', 'login' ), 'wp-core-ui' ];
174
+
175
+ if ( is_rtl() ) {
176
+ $classes[] = 'rtl';
177
+ }
178
+
179
+ if ( $interim_login ) {
180
+ $classes[] = 'interim-login';
181
+ }
182
+
183
+ if ( 'success' === $interim_login ) {
184
+ $classes[] = 'interim-login-success';
185
+ }
186
+
187
+ $classes[] = ' locale-'.sanitize_html_class( strtolower( str_replace( '_', '-', get_locale() ) ) );
188
+
189
+ /**
190
+ * Filters the login page body classes.
191
+ *
192
+ * @since 3.5.0
193
+ *
194
+ * @param string[] $classes An array of body classes.
195
+ * @param string $action The action that brought the visitor to the login page.
196
+ */
197
+ $classes = apply_filters( 'login_body_class', $classes, $action );
198
+
199
+ $actionLoginHeader = CaptureOutput::Capture( function () {
200
+ /**
201
+ * Fires in the login page header after the body tag is opened.
202
+ *
203
+ * @since 4.6.0
204
+ */
205
+ do_action( 'login_header' );
206
+ } );
207
+
208
+ /**
209
+ * Filters the message to display above the login form.
210
+ *
211
+ * @since 2.1.0
212
+ *
213
+ * @param string $message Login message text.
214
+ */
215
+ $message = apply_filters( 'login_message', $message );
216
+ if ( !empty( $message ) ) {
217
+ echo $message."\n";
218
+ }
219
+
220
+ $loginErrors = '';
221
+ $loginMessages = '';
222
+ if ( $wp_error->has_errors() ) {
223
+ $errors = '';
224
+ $messages = '';
225
+
226
+ foreach ( $wp_error->get_error_codes() as $code ) {
227
+ $severity = $wp_error->get_error_data( $code );
228
+ foreach ( $wp_error->get_error_messages( $code ) as $error_message ) {
229
+ if ( 'message' === $severity ) {
230
+ $messages .= ' '.$error_message."<br />\n";
231
+ }
232
+ else {
233
+ $errors .= ' '.$error_message."<br />\n";
234
+ }
235
+ }
236
+ }
237
+
238
+ if ( !empty( $errors ) ) {
239
+ /**
240
+ * Filters the error messages displayed above the login form.
241
+ *
242
+ * @since 2.1.0
243
+ *
244
+ * @param string $errors Login error message.
245
+ */
246
+ $loginErrors = apply_filters( 'login_errors', $errors );
247
+ }
248
+
249
+ if ( !empty( $messages ) ) {
250
+ /**
251
+ * Filters instructional messages displayed above the login form.
252
+ *
253
+ * @since 2.5.0
254
+ *
255
+ * @param string $messages Login messages.
256
+ */
257
+ $loginMessages = apply_filters( 'login_messages', $messages );
258
+ }
259
+ }
260
+
261
+ return $this->getMod()->renderTemplate( '/components/wplogin_replica/login_header.twig', [
262
+ 'content' => [
263
+ 'action_login_enqueue_scripts' => $actionLoginEnqScripts,
264
+ 'action_login_head' => $actionLoginHead,
265
+ 'action_login_header' => $actionLoginHeader,
266
+ 'meta_content_type' => get_bloginfo( 'html_type' ),
267
+ 'meta_charset' => get_bloginfo( 'charset' ),
268
+ 'login_errors' => $loginErrors,
269
+ 'login_messages' => $loginMessages,
270
+ ],
271
+ 'flags' => [
272
+ 'has_login_errors' => !empty( $loginErrors ),
273
+ 'has_login_messages' => !empty( $loginMessages ),
274
+ 'has_interim_message' => $interim_login && !empty( $this->interim_message ),
275
+ 'is_interim_login' => $interim_login,
276
+ ],
277
+ 'hrefs' => [
278
+ 'login_header_url' => esc_url( $login_header_url ),
279
+ ],
280
+ 'strings' => [
281
+ 'login_header_text' => $login_header_text,
282
+ 'login_title' => $login_title,
283
+ 'message' => $message,
284
+ 'interim_message' => $this->interim_message ?? '',
285
+ ],
286
+ 'vars' => [
287
+ 'language_attributes' => get_language_attributes( 'html' ),
288
+ 'meta_content_type' => get_bloginfo( 'html_type' ),
289
+ 'meta_charset' => get_bloginfo( 'charset' ),
290
+ 'classes_body' => esc_attr( implode( ' ', $classes ) ),
291
+ ]
292
+ ] );
293
+ }
294
+ }
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/UserProfile.php DELETED
@@ -1,33 +0,0 @@
1
- <?php
2
-
3
- namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor;
4
-
5
- use FernleafSystems\Utilities\Logic\ExecOnce;
6
- use FernleafSystems\Wordpress\Plugin\Shield;
7
-
8
- /**
9
- * @deprecated 13.0.5
10
- */
11
- class UserProfile {
12
-
13
- use MfaControllerConsumer;
14
- use ExecOnce;
15
-
16
- protected function run() {
17
- }
18
-
19
- /**
20
- * This MUST only ever be hooked into when the User is looking at their OWN profile, so we can use "current user"
21
- * functions. Otherwise we need to be careful of mixing up users.
22
- * @param \WP_User $user
23
- */
24
- public function addOptionsToUserProfile( $user ) {
25
- }
26
-
27
- /**
28
- * ONLY TO BE HOOKED TO USER PROFILE EDIT
29
- * @param \WP_User $user
30
- */
31
- public function addOptionsToUserEditProfile( $user ) {
32
- }
33
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/lib/src/Modules/LoginGuard/Lib/TwoFactor/ValidateLoginIntentRequest.php DELETED
@@ -1,66 +0,0 @@
1
- <?php
2
-
3
- namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard\Lib\TwoFactor;
4
-
5
- use FernleafSystems\Wordpress\Plugin\Shield;
6
- use FernleafSystems\Wordpress\Plugin\Shield\Modules\LoginGuard;
7
- use FernleafSystems\Wordpress\Services\Services;
8
-
9
- class ValidateLoginIntentRequest {
10
-
11
- use MfaControllerConsumer;
12
-
13
- /**
14
- * @throws \Exception
15
- */
16
- public function run() :bool {
17
- $mfaCon = $this->getMfaCon();
18
- /** @var LoginGuard\Options $opts */
19
- $opts = $mfaCon->getOptions();
20
-
21
- $user = Services::WpUsers()->getCurrentWpUser();
22
- if ( !$user instanceof \WP_User ) {
23
- throw new \Exception( 'No user logged-in.' );
24
- }
25
-
26
- $providers = $mfaCon->getProvidersForUser( $user, true );
27
- if ( empty( $providers ) ) {
28
- throw new \Exception( 'No valid providers' );
29
- }
30
-
31
- $providerStates = [];
32
- $successfulProviders = [];
33
- foreach ( $providers as $slug => $provider ) {
34
- $providerStates[ $slug ] = $provider->validateLoginIntent( $user );
35
- if ( $providerStates[ $slug ] ) {
36
- $successfulProviders[ $slug ] = $provider;
37
- }
38
- }
39
-
40
- $validated = false;
41
-
42
- foreach ( $providers as $slug => $provider ) {
43
- if ( $provider::BYPASS_MFA ) {
44
- if ( $providerStates[ $slug ] ) {
45
- $validated = true;
46
- }
47
- unset( $providers[ $slug ] );
48
- unset( $providerStates[ $slug ] );
49
- }
50
- }
51
-
52
- if ( !$validated ) {
53
- $countSuccessful = count( array_filter( $providerStates ) );
54
- $validated = $opts->isChainedAuth() ? $countSuccessful == count( $providers ) : $countSuccessful > 0;
55
- }
56
-
57
- if ( $validated ) {
58
- // Some cleanup can only run if login is completely tested and completely valid.
59
- foreach ( $successfulProviders as $provider ) {
60
- $provider->postSuccessActions( $user );
61
- }
62
- }
63
-
64
- return $validated;
65
- }
66
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/lib/src/Modules/LoginGuard/ModCon.php CHANGED
@@ -12,7 +12,7 @@ class ModCon extends BaseShield\ModCon {
12
  /**
13
  * @var Lib\TwoFactor\MfaController
14
  */
15
- private $loginIntentCon;
16
 
17
  protected function preProcessOptions() {
18
  /** @var Options $opts */
@@ -50,22 +50,41 @@ class ModCon extends BaseShield\ModCon {
50
  }
51
 
52
  $opts->setOpt( 'two_factor_auth_user_roles', $opts->getEmail2FaRoles() );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  }
54
 
55
  public function ensureCorrectCaptchaConfig() {
56
  /** @var Options $opts */
57
  $opts = $this->getOptions();
58
 
59
- $sStyle = $opts->getOpt( 'enable_google_recaptcha_login' );
60
  if ( $this->isPremium() ) {
61
  $cfg = $this->getCaptchaCfg();
62
  if ( $cfg->provider == $cfg::PROV_GOOGLE_RECAP2 ) {
63
- if ( !$cfg->invisible && $sStyle == 'invisible' ) {
64
  $opts->setOpt( 'enable_google_recaptcha_login', 'default' );
65
  }
66
  }
67
  }
68
- elseif ( !in_array( $sStyle, [ 'disabled', 'default' ] ) ) {
69
  $opts->setOpt( 'enable_google_recaptcha_login', 'default' );
70
  }
71
  }
@@ -91,14 +110,14 @@ class ModCon extends BaseShield\ModCon {
91
  $this->saveModOptions();
92
 
93
  if ( $opts->getIfCanSendEmailVerified() ) {
94
- $bSuccess = true;
95
- $sMessage = __( 'Email verification completed successfully.', 'wp-simple-firewall' );
96
  }
97
  else {
98
- $bSuccess = false;
99
- $sMessage = __( 'Email verification could not be completed.', 'wp-simple-firewall' );
100
  }
101
- $this->setFlashAdminNotice( $sMessage, !$bSuccess );
102
  if ( Services::WpUsers()->isUserLoggedIn() ) {
103
  Services::Response()->redirect( $this->getUrl_AdminPage() );
104
  }
@@ -149,15 +168,6 @@ class ModCon extends BaseShield\ModCon {
149
  }
150
  }
151
 
152
- /**
153
- * @deprecated 13.0.5
154
- */
155
- public function getOptEmailTwoFactorRolesDefaults() {
156
- /** @var Options $opts */
157
- $opts = $this->getOptions();
158
- return $opts->getEmail2FaRoles();
159
- }
160
-
161
  public function getGaspKey() :string {
162
  /** @var Options $opts */
163
  $opts = $this->getOptions();
@@ -201,17 +211,17 @@ class ModCon extends BaseShield\ModCon {
201
 
202
  /**
203
  * @return Lib\TwoFactor\MfaController
 
204
  */
205
  public function getLoginIntentController() {
206
- if ( !isset( $this->loginIntentCon ) ) {
207
- $this->loginIntentCon = ( new Lib\TwoFactor\MfaController() )
208
- ->setMod( $this );
209
- }
210
- return $this->loginIntentCon;
211
  }
212
 
213
- public function setIsChainedAuth( bool $isChained ) {
214
- $this->getOptions()->setOpt( 'enable_chained_authentication', $isChained ? 'Y' : 'N' );
 
 
 
215
  }
216
 
217
  /**
@@ -231,13 +241,6 @@ class ModCon extends BaseShield\ModCon {
231
  $this->getOptions()->setOpt( 'enable_google_authenticator', $enable ? 'Y' : 'N' );
232
  }
233
 
234
- /**
235
- * @return string
236
- */
237
- public function getLoginIntentRequestFlag() {
238
- return $this->getCon()->prefix( 'login-intent-request' );
239
- }
240
-
241
  public function getTextOptDefault( string $key ) :string {
242
 
243
  switch ( $key ) {
12
  /**
13
  * @var Lib\TwoFactor\MfaController
14
  */
15
+ private $mfaCon;
16
 
17
  protected function preProcessOptions() {
18
  /** @var Options $opts */
50
  }
51
 
52
  $opts->setOpt( 'two_factor_auth_user_roles', $opts->getEmail2FaRoles() );
53
+
54
+ if ( !$opts->isOpt( 'mfa_verify_page', 'custom_shield' )
55
+ && !Services::WpGeneral()->getWordpressIsAtLeastVersion( '4.0' ) ) {
56
+ $opts->resetOptToDefault( 'mfa_verify_page' );
57
+ }
58
+
59
+ $redirect = preg_replace( '#[^0-9a-z_\-/.]#i', '', (string)$opts->getOpt( 'rename_wplogin_redirect' ) );
60
+ if ( !empty( $redirect ) ) {
61
+
62
+ $redirect = preg_replace( '#^http(s)?//.*/#iU', '', $redirect );
63
+ if ( !empty( $redirect ) ) {
64
+ $redirect = '/'.ltrim( $redirect, '/' );
65
+ }
66
+ }
67
+ $opts->setOpt( 'rename_wplogin_redirect', $redirect );
68
+
69
+ if ( empty( $opts->getOpt( 'mfa_user_setup_pages' ) ) ) {
70
+ $opts->setOpt( 'mfa_user_setup_pages', [ 'profile' ] );
71
+ }
72
  }
73
 
74
  public function ensureCorrectCaptchaConfig() {
75
  /** @var Options $opts */
76
  $opts = $this->getOptions();
77
 
78
+ $style = $opts->getOpt( 'enable_google_recaptcha_login' );
79
  if ( $this->isPremium() ) {
80
  $cfg = $this->getCaptchaCfg();
81
  if ( $cfg->provider == $cfg::PROV_GOOGLE_RECAP2 ) {
82
+ if ( !$cfg->invisible && $style == 'invisible' ) {
83
  $opts->setOpt( 'enable_google_recaptcha_login', 'default' );
84
  }
85
  }
86
  }
87
+ elseif ( !in_array( $style, [ 'disabled', 'default' ] ) ) {
88
  $opts->setOpt( 'enable_google_recaptcha_login', 'default' );
89
  }
90
  }
110
  $this->saveModOptions();
111
 
112
  if ( $opts->getIfCanSendEmailVerified() ) {
113
+ $success = true;
114
+ $msg = __( 'Email verification completed successfully.', 'wp-simple-firewall' );
115
  }
116
  else {
117
+ $success = false;
118
+ $msg = __( 'Email verification could not be completed.', 'wp-simple-firewall' );
119
  }
120
+ $this->setFlashAdminNotice( $msg, null, !$success );
121
  if ( Services::WpUsers()->isUserLoggedIn() ) {
122
  Services::Response()->redirect( $this->getUrl_AdminPage() );
123
  }
168
  }
169
  }
170
 
 
 
 
 
 
 
 
 
 
171
  public function getGaspKey() :string {
172
  /** @var Options $opts */
173
  $opts = $this->getOptions();
211
 
212
  /**
213
  * @return Lib\TwoFactor\MfaController
214
+ * @deprecated 13.1
215
  */
216
  public function getLoginIntentController() {
217
+ return $this->getMfaController();
 
 
 
 
218
  }
219
 
220
+ public function getMfaController() :Lib\TwoFactor\MfaController {
221
+ if ( !isset( $this->mfaCon ) ) {
222
+ $this->mfaCon = ( new Lib\TwoFactor\MfaController() )->setMod( $this );
223
+ }
224
+ return $this->mfaCon;
225
  }
226
 
227
  /**
241
  $this->getOptions()->setOpt( 'enable_google_authenticator', $enable ? 'Y' : 'N' );
242
  }
243
 
 
 
 
 
 
 
 
244
  public function getTextOptDefault( string $key ) :string {
245
 
246
  switch ( $key ) {
src/lib/src/Modules/LoginGuard/Options.php CHANGED
@@ -7,7 +7,15 @@ use FernleafSystems\Wordpress\Plugin\Shield\Modules\BaseShield;
7
  class Options extends BaseShield\Options {
8
 
9
  public function getBotProtectionLocations() :array {
10
- return is_array( $this->getOpt( 'bot_protection_locations' ) ) ? $this->getOpt( 'bot_protection_locations' ) : [];
 
 
 
 
 
 
 
 
11
  }
12
 
13
  public function getLoginIntentMinutes() :int {
@@ -19,15 +27,15 @@ class Options extends BaseShield\Options {
19
 
20
  public function getAntiBotFormSelectors() :array {
21
  $ids = $this->getOpt( 'antibot_form_ids', [] );
22
- return ( $this->isPremium() && is_array( $ids ) ) ? $ids : [];
23
  }
24
 
25
  public function getCooldownInterval() :int {
26
- return (int)$this->getOpt( 'login_limit_interval' );
27
  }
28
 
29
  public function getCustomLoginPath() :string {
30
- return (string)$this->getOpt( 'rename_wplogin_path', '' );
31
  }
32
 
33
  public function getEmail2FaRoles() :array {
@@ -47,21 +55,17 @@ class Options extends BaseShield\Options {
47
  }
48
 
49
  public function getMfaSkip() :int { // seconds
50
- return DAY_IN_SECONDS*( $this->isPremium() ? (int)$this->getOpt( 'mfa_skip', 0 ) : 0 );
51
  }
52
 
53
  public function getYubikeyAppId() :string {
54
- return (string)$this->getOpt( 'yubikey_app_id', '' );
55
  }
56
 
57
  public function isMfaSkip() :bool {
58
  return $this->getMfaSkip() > 0;
59
  }
60
 
61
- public function isChainedAuth() :bool {
62
- return $this->isOpt( 'enable_chained_authentication', 'Y' );
63
- }
64
-
65
  public function isEmailAuthenticationActive() :bool {
66
  return $this->getIfCanSendEmailVerified() && $this->isEnabledEmailAuth();
67
  }
@@ -70,13 +74,16 @@ class Options extends BaseShield\Options {
70
  return $this->isOpt( 'enable_email_authentication', 'Y' );
71
  }
72
 
 
 
 
 
73
  public function isEnabledCooldown() :bool {
74
  return $this->getCooldownInterval() > 0;
75
  }
76
 
77
  public function isEnabledGaspCheck() :bool {
78
- return $this->isOpt( 'enable_login_gasp_check', 'Y' )
79
- && !$this->isEnabledAntiBot();
80
  }
81
 
82
  public function isEnabledAntiBot() :bool {
@@ -124,10 +131,6 @@ class Options extends BaseShield\Options {
124
  return in_array( $location, is_array( $locs ) ? $locs : $this->getOptDefault( 'bot_protection_locations' ) );
125
  }
126
 
127
- public function isUseLoginIntentPage() :bool {
128
- return $this->isOpt( 'use_login_intent_page', true );
129
- }
130
-
131
  public function isEnabledYubikey() :bool {
132
  return $this->isOpt( 'enable_yubikey', 'Y' ) && $this->isYubikeyConfigReady();
133
  }
7
  class Options extends BaseShield\Options {
8
 
9
  public function getBotProtectionLocations() :array {
10
+ return $this->getOpt( 'bot_protection_locations' );
11
+ }
12
+
13
+ public function getHiddenLoginRedirect() :string {
14
+ return $this->getOpt( 'rename_wplogin_redirect' );
15
+ }
16
+
17
+ public function getLoginIntentMaxAttempts() :int {
18
+ return (int)max( 1, apply_filters( 'shield/2fa_max_attempts', $this->getDef( 'login_intent_max_attempts' ) ) );
19
  }
20
 
21
  public function getLoginIntentMinutes() :int {
27
 
28
  public function getAntiBotFormSelectors() :array {
29
  $ids = $this->getOpt( 'antibot_form_ids', [] );
30
+ return $this->isPremium() ? $ids : [];
31
  }
32
 
33
  public function getCooldownInterval() :int {
34
+ return $this->getOpt( 'login_limit_interval' );
35
  }
36
 
37
  public function getCustomLoginPath() :string {
38
+ return $this->getOpt( 'rename_wplogin_path', '' );
39
  }
40
 
41
  public function getEmail2FaRoles() :array {
55
  }
56
 
57
  public function getMfaSkip() :int { // seconds
58
+ return DAY_IN_SECONDS*( $this->isPremium() ? $this->getOpt( 'mfa_skip', 0 ) : 0 );
59
  }
60
 
61
  public function getYubikeyAppId() :string {
62
+ return $this->getOpt( 'yubikey_app_id', '' );
63
  }
64
 
65
  public function isMfaSkip() :bool {
66
  return $this->getMfaSkip() > 0;
67
  }
68
 
 
 
 
 
69
  public function isEmailAuthenticationActive() :bool {
70
  return $this->getIfCanSendEmailVerified() && $this->isEnabledEmailAuth();
71
  }
74
  return $this->isOpt( 'enable_email_authentication', 'Y' );
75
  }
76
 
77
+ public function isEnabledSmsAuth() :bool {
78
+ return $this->isOpt( 'enable_sms_auth', 'Y' );
79
+ }
80
+
81
  public function isEnabledCooldown() :bool {
82
  return $this->getCooldownInterval() > 0;
83
  }
84
 
85
  public function isEnabledGaspCheck() :bool {
86
+ return $this->isOpt( 'enable_login_gasp_check', 'Y' ) && !$this->isEnabledAntiBot();
 
87
  }
88
 
89
  public function isEnabledAntiBot() :bool {
131
  return in_array( $location, is_array( $locs ) ? $locs : $this->getOptDefault( 'bot_protection_locations' ) );
132
  }
133
 
 
 
 
 
134
  public function isEnabledYubikey() :bool {
135
  return $this->isOpt( 'enable_yubikey', 'Y' ) && $this->isYubikeyConfigReady();
136
  }
src/lib/src/Modules/LoginGuard/Processor.php CHANGED
@@ -15,17 +15,12 @@ class Processor extends BaseShield\Processor {
15
  if ( Services::WpGeneral()->isXmlrpc() && $mod->isXmlrpcBypass() ) {
16
  return;
17
  }
18
- //
19
- // /** @var Options $opts */
20
- // $opts = $this->getOptions();
21
- // var_dump( $opts->getEmail2FaRoles() );
22
- // die(0);
23
- //;
24
  ( new Lib\Rename\RenameLogin() )
25
  ->setMod( $mod )
26
  ->execute();
27
 
28
- $mod->getLoginIntentController()->execute();
29
  }
30
 
31
  public function onWpInit() {
15
  if ( Services::WpGeneral()->isXmlrpc() && $mod->isXmlrpcBypass() ) {
16
  return;
17
  }
18
+
 
 
 
 
 
19
  ( new Lib\Rename\RenameLogin() )
20
  ->setMod( $mod )
21
  ->execute();
22
 
23
+ $mod->getMfaController()->execute();
24
  }
25
 
26
  public function onWpInit() {
src/lib/src/Modules/LoginGuard/Strings.php CHANGED
@@ -111,8 +111,8 @@ class Strings extends Base\Strings {
111
  break;
112
 
113
  case 'section_2fa_ga' :
114
- $title = __( 'Google Authenticator Two-Factor Authentication', 'wp-simple-firewall' );
115
- $titleShort = __( 'Google Auth', 'wp-simple-firewall' );
116
  $summary = [
117
  sprintf( '%s - %s', __( 'Purpose', 'wp-simple-firewall' ), __( 'Verifies the identity of users who log in to your site using Google Authenticator one-time-passwords.', 'wp-simple-firewall' ) ),
118
  sprintf( '%s: %s', __( 'Note', 'wp-simple-firewall' ), __( 'You may combine multiple authentication factors for increased security.', 'wp-simple-firewall' ) )
@@ -168,13 +168,29 @@ class Strings extends Base\Strings {
168
  break;
169
 
170
  case 'rename_wplogin_path' :
171
- $name = __( 'Hide WP Login Page', 'wp-simple-firewall' );
172
- $summary = __( 'Hide The WordPress Login Page', 'wp-simple-firewall' );
173
- $desc = __( 'Creating a path here will disable your wp-login.php', 'wp-simple-firewall' )
174
- .'<br />'
175
- .sprintf( __( 'Only letters and numbers are permitted: %s', 'wp-simple-firewall' ), '<strong>abc123</strong>' )
176
- .'<br />'
177
- .sprintf( __( 'Your current login URL is: %s', 'wp-simple-firewall' ), '<br /><strong>&nbsp;&nbsp;'.wp_login_url().'</strong>' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
178
  break;
179
 
180
  case 'enable_chained_authentication' :
@@ -183,9 +199,30 @@ class Strings extends Base\Strings {
183
  $desc = __( 'When enabled, all multi-factor authentication methods will be applied to a user login. Disable to require only one to login.', 'wp-simple-firewall' );
184
  break;
185
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
186
  case 'mfa_skip' :
187
- $name = __( 'Multi-Factor Bypass', 'wp-simple-firewall' );
188
- $summary = __( 'A User Can Bypass Multi-Factor Authentication (MFA) For The Set Number Of Days', 'wp-simple-firewall' );
189
  $desc = __( 'Enter the number of days a user can bypass future MFA after a successful MFA-login. 0 to disable.', 'wp-simple-firewall' );
190
  break;
191
 
111
  break;
112
 
113
  case 'section_2fa_ga' :
114
+ $title = __( 'One-Time Passwords', 'wp-simple-firewall' );
115
+ $titleShort = __( 'One-Time Passwords', 'wp-simple-firewall' );
116
  $summary = [
117
  sprintf( '%s - %s', __( 'Purpose', 'wp-simple-firewall' ), __( 'Verifies the identity of users who log in to your site using Google Authenticator one-time-passwords.', 'wp-simple-firewall' ) ),
118
  sprintf( '%s: %s', __( 'Note', 'wp-simple-firewall' ), __( 'You may combine multiple authentication factors for increased security.', 'wp-simple-firewall' ) )
168
  break;
169
 
170
  case 'rename_wplogin_path' :
171
+ $name = __( 'Hide WP Login & Admin', 'wp-simple-firewall' );
172
+ $summary = __( 'Hide The WordPress Login And Admin Areas', 'wp-simple-firewall' );
173
+ $desc = [
174
+ __( 'Creating a path here will disable your wp-login.php', 'wp-simple-firewall' ),
175
+ sprintf( __( 'Only letters and numbers are permitted: %s', 'wp-simple-firewall' ), '<strong>abc123</strong>' ),
176
+ sprintf( __( 'Your current login URL is: %s', 'wp-simple-firewall' ), '<br /><strong>&nbsp;&nbsp;'.wp_login_url().'</strong>' )
177
+ ];
178
+ break;
179
+
180
+ case 'rename_wplogin_redirect' :
181
+ $name = __( 'WP Login & Admin Redirect', 'wp-simple-firewall' );
182
+ $summary = __( 'Automatic Redirect URL For Hidden Pages', 'wp-simple-firewall' );
183
+ $desc = [
184
+ __( 'Automatically redirect requests to this location for the hidden pages.', 'wp-simple-firewall' ),
185
+ sprintf( '%s: %s',
186
+ __( 'Note', 'wp-simple-firewall' ),
187
+ __( 'Leave this blank to serve a standard "404 Not Found" error page.', 'wp-simple-firewall' )
188
+ ),
189
+ sprintf( '%s: %s',
190
+ __( 'Important', 'wp-simple-firewall' ),
191
+ sprintf( __( 'Use relative paths e.g. %s redirects to your homepage.', 'wp-simple-firewall' ), '<code>/</code>' )
192
+ ),
193
+ ];
194
  break;
195
 
196
  case 'enable_chained_authentication' :
199
  $desc = __( 'When enabled, all multi-factor authentication methods will be applied to a user login. Disable to require only one to login.', 'wp-simple-firewall' );
200
  break;
201
 
202
+ case 'mfa_verify_page' :
203
+ $name = __( 'MFA Verification Page', 'wp-simple-firewall' );
204
+ $summary = __( 'Type Of MFA Verification Page', 'wp-simple-firewall' );
205
+ $desc = [
206
+ __( 'Choose the type of page provided to users for MFA verification.', 'wp-simple-firewall' ),
207
+ sprintf( '%s - %s', __( 'Note', 'wp-simple-firewall' ),
208
+ __( 'Choose the Custom Shield page if there are conflicts or issues with the WP Login page for 2FA.', 'wp-simple-firewall' ) ),
209
+ sprintf( '%s - %s', __( 'Note', 'wp-simple-firewall' ),
210
+ __( 'WP Login page option is only available for WordPress v4.0 and above.', 'wp-simple-firewall' ) ),
211
+ ];
212
+ break;
213
+
214
+ case 'mfa_user_setup_pages' :
215
+ $name = __( 'User 2FA Setup', 'wp-simple-firewall' );
216
+ $summary = __( 'User 2FA Setup Page Locations', 'wp-simple-firewall' );
217
+ $desc = [
218
+ __( 'Specify pages available to users to configure 2FA on their account.', 'wp-simple-firewall' ),
219
+ __( 'At least 1 option must be provided and defaults to the user profile page within the WP admin area.', 'wp-simple-firewall' )
220
+ ];
221
+ break;
222
+
223
  case 'mfa_skip' :
224
+ $name = __( '2FA Remember Me', 'wp-simple-firewall' );
225
+ $summary = __( 'A User Can Bypass 2FA For The Set Number Of Days', 'wp-simple-firewall' );
226
  $desc = __( 'Enter the number of days a user can bypass future MFA after a successful MFA-login. 0 to disable.', 'wp-simple-firewall' );
227
  break;
228
 
src/lib/src/Modules/Plugin/AjaxHandler.php CHANGED
@@ -131,14 +131,14 @@ class AjaxHandler extends Shield\Modules\BaseShield\AjaxHandler {
131
  }
132
 
133
  private function ajaxExec_DeleteForceOff() :array {
134
- $bStillActive = $this->getCon()
135
- ->deleteForceOffFile()
136
- ->getIfForceOffActive();
137
- if ( $bStillActive ) {
138
  $this->getMod()
139
- ->setFlashAdminNotice( __( 'File could not be automatically removed.', 'wp-simple-firewall' ), true );
140
  }
141
- return [ 'success' => !$bStillActive ];
142
  }
143
 
144
  private function ajaxExec_RenderTableAdminNotes() :array {
131
  }
132
 
133
  private function ajaxExec_DeleteForceOff() :array {
134
+ $stillActive = $this->getCon()
135
+ ->deleteForceOffFile()
136
+ ->getIfForceOffActive();
137
+ if ( $stillActive ) {
138
  $this->getMod()
139
+ ->setFlashAdminNotice( __( 'File could not be automatically removed.', 'wp-simple-firewall' ), null, true );
140
  }
141
+ return [ 'success' => !$stillActive ];
142
  }
143
 
144
  private function ajaxExec_RenderTableAdminNotes() :array {
src/lib/src/Modules/Plugin/Lib/Debug/Collate.php CHANGED
@@ -227,7 +227,7 @@ class Collate {
227
  $licPing->lookup_url_stub = $con->getModule_License()->getOptions()->getDef( 'license_store_url_api' );
228
  $data[ 'Ping License Server' ] = $licPing->ping() ? 'Yes' : 'No';
229
 
230
- $data[ 'Write TMP/Cache DIR' ] = $con->hasCacheDir() ? 'Yes: '.$con->getPluginCachePath() : 'No';
231
 
232
  return $data;
233
  }
227
  $licPing->lookup_url_stub = $con->getModule_License()->getOptions()->getDef( 'license_store_url_api' );
228
  $data[ 'Ping License Server' ] = $licPing->ping() ? 'Yes' : 'No';
229
 
230
+ $data[ 'Write TMP/Cache DIR' ] = $con->cache_dir_handler->dirExists() ? 'Yes: '.$con->getPluginCachePath() : 'No';
231
 
232
  return $data;
233
  }
src/lib/src/Modules/Plugin/Lib/TestCacheDirWrite.php CHANGED
@@ -41,13 +41,19 @@ class TestCacheDirWrite {
41
 
42
  $FS = Services::WpFs();
43
 
44
- $testDir = $this->getCon()->paths->forCacheItem( uniqid() );
 
 
 
 
45
  $FS->mkdir( $testDir );
46
  if ( $FS->isDir( $testDir ) ) {
47
  $file = path_join( $testDir, uniqid() );
48
  $FS->touch( $file );
49
  $canTouchFile = $FS->isFile( $file );
 
50
  $FS->deleteDir( $testDir );
 
51
  $canWrite = $canTouchFile && !$FS->isDir( $testDir );
52
  }
53
  return $canWrite;
@@ -61,9 +67,10 @@ class TestCacheDirWrite {
61
  $testFile = $this->getCon()->paths->forCacheItem( 'test_write_file.txt' );
62
  $uniq = uniqid();
63
  $FS->putFileContent( $testFile, $uniq );
64
- if ( $FS->getFileContent( $testFile ) == $uniq ) {
 
65
  $FS->deleteFile( $testFile );
66
- $canWrite = !$FS->exists( $testFile );
67
  }
68
  return $canWrite;
69
  }
41
 
42
  $FS = Services::WpFs();
43
 
44
+ $testDir = $this->getCon()->paths->forCacheItem( 'test-dir' );
45
+ if ( $FS->isFile( $testDir ) ) {
46
+ $FS->deleteFile( $testDir );
47
+ }
48
+
49
  $FS->mkdir( $testDir );
50
  if ( $FS->isDir( $testDir ) ) {
51
  $file = path_join( $testDir, uniqid() );
52
  $FS->touch( $file );
53
  $canTouchFile = $FS->isFile( $file );
54
+ $FS->deleteFile( $file );
55
  $FS->deleteDir( $testDir );
56
+ clearstatcache();
57
  $canWrite = $canTouchFile && !$FS->isDir( $testDir );
58
  }
59
  return $canWrite;
67
  $testFile = $this->getCon()->paths->forCacheItem( 'test_write_file.txt' );
68
  $uniq = uniqid();
69
  $FS->putFileContent( $testFile, $uniq );
70
+ if ( $FS->isFile( $testFile ) ) {
71
+ $canWrite = $FS->getFileContent( $testFile ) == $uniq;
72
  $FS->deleteFile( $testFile );
73
+ $canWrite = $canWrite && !$FS->exists( $testFile );
74
  }
75
  return $canWrite;
76
  }
src/lib/src/Modules/Plugin/ModCon.php CHANGED
@@ -130,7 +130,7 @@ class ModCon extends BaseShield\ModCon {
130
  $success = false;
131
  $msg = $e->getMessage();
132
  }
133
- $this->setFlashAdminNotice( $msg, !$success );
134
  Services::Response()->redirect(
135
  $this->getCon()->getModule_Insights()->getUrl_SubInsightsPage( 'importexport' )
136
  );
130
  $success = false;
131
  $msg = $e->getMessage();
132
  }
133
+ $this->setFlashAdminNotice( $msg, null, !$success );
134
  Services::Response()->redirect(
135
  $this->getCon()->getModule_Insights()->getUrl_SubInsightsPage( 'importexport' )
136
  );
src/lib/src/Modules/Plugin/WpCli.php CHANGED
@@ -2,20 +2,17 @@
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Plugin;
4
 
5
- use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
6
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\Plugin;
7
 
8
- class WpCli extends Base\WpCli {
9
 
10
- /**
11
- * @inheritDoc
12
- */
13
- protected function getCmdHandlers() :array {
14
  return [
15
- new Plugin\WpCli\ForceOff(),
16
- new Plugin\WpCli\Reset(),
17
- new Plugin\WpCli\Export(),
18
- new Plugin\WpCli\Import(),
19
  ];
20
  }
21
  }
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\Plugin;
4
 
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\BaseShield;
6
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\Plugin;
7
 
8
+ class WpCli extends BaseShield\WpCli {
9
 
10
+ protected function enumCmdHandlers() :array {
 
 
 
11
  return [
12
+ Plugin\WpCli\ForceOff::class,
13
+ Plugin\WpCli\Reset::class,
14
+ Plugin\WpCli\Export::class,
15
+ Plugin\WpCli\Import::class,
16
  ];
17
  }
18
  }
src/lib/src/Modules/SecurityAdmin/Lib/SecurityAdmin/Restrictions/Users.php CHANGED
@@ -46,12 +46,12 @@ class Users extends Base {
46
  public function restrictSetUserRole( $userId, $role, $oldRoles = [] ) {
47
  $WPU = Services::WpUsers();
48
 
49
- $role = strtolower( $role );
50
  if ( !is_array( $oldRoles ) ) {
51
  $oldRoles = [];
52
  }
53
 
54
- if ( $WPU->getCurrentWpUserId() !== $userId ) {
55
  $newRoleIsAdmin = $role == 'administrator';
56
 
57
  // 1. Setting administrator role where it doesn't previously exist
@@ -87,7 +87,7 @@ class Users extends Base {
87
  public function restrictRemoveUserRole( $userId, $role ) {
88
  $WPU = Services::WpUsers();
89
 
90
- if ( $WPU->getCurrentWpUserId() !== $userId && strtolower( $role ) === 'administrator' ) {
91
  $modifiedUser = $WPU->getUserById( $userId );
92
 
93
  remove_action( 'add_user_role', [ $this, 'restrictAddUserRole' ], 100 );
@@ -113,7 +113,7 @@ class Users extends Base {
113
  * @return array[]
114
  */
115
  public function restrictEditableRoles( $roles ) {
116
- if ( isset( $roles[ 'administrator' ] ) ) {
117
  unset( $roles[ 'administrator' ] );
118
  }
119
  return $roles;
46
  public function restrictSetUserRole( $userId, $role, $oldRoles = [] ) {
47
  $WPU = Services::WpUsers();
48
 
49
+ $role = strtolower( (string)$role );
50
  if ( !is_array( $oldRoles ) ) {
51
  $oldRoles = [];
52
  }
53
 
54
+ if ( !empty( $role ) && $WPU->getCurrentWpUserId() !== (int)$userId ) {
55
  $newRoleIsAdmin = $role == 'administrator';
56
 
57
  // 1. Setting administrator role where it doesn't previously exist
87
  public function restrictRemoveUserRole( $userId, $role ) {
88
  $WPU = Services::WpUsers();
89
 
90
+ if ( $WPU->getCurrentWpUserId() !== $userId && strtolower( (string)$role ) === 'administrator' ) {
91
  $modifiedUser = $WPU->getUserById( $userId );
92
 
93
  remove_action( 'add_user_role', [ $this, 'restrictAddUserRole' ], 100 );
113
  * @return array[]
114
  */
115
  public function restrictEditableRoles( $roles ) {
116
+ if ( is_array( $roles ) && isset( $roles[ 'administrator' ] ) ) {
117
  unset( $roles[ 'administrator' ] );
118
  }
119
  return $roles;
src/lib/src/Modules/SecurityAdmin/WpCli.php CHANGED
@@ -1,20 +1,17 @@
1
- <?php
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\SecurityAdmin;
4
 
5
- use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base;
6
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\SecurityAdmin;
7
 
8
- class WpCli extends Base\WpCli {
9
 
10
- /**
11
- * @inheritDoc
12
- */
13
- protected function getCmdHandlers() :array {
14
  return [
15
- new SecurityAdmin\WpCli\Pin(),
16
- new SecurityAdmin\WpCli\AdminAdd(),
17
- new SecurityAdmin\WpCli\AdminRemove()
18
  ];
19
  }
20
  }
1
+ <?php declare( strict_types=1 );
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\SecurityAdmin;
4
 
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\BaseShield;
6
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\SecurityAdmin;
7
 
8
+ class WpCli extends BaseShield\WpCli {
9
 
10
+ protected function enumCmdHandlers() :array {
 
 
 
11
  return [
12
+ SecurityAdmin\WpCli\Pin::class,
13
+ SecurityAdmin\WpCli\AdminAdd::class,
14
+ SecurityAdmin\WpCli\AdminRemove::class
15
  ];
16
  }
17
  }
src/lib/src/Modules/Traffic/Lib/TrafficTable/LoadRawTableData.php CHANGED
@@ -137,10 +137,10 @@ class LoadRawTableData extends BaseLoadTableData {
137
 
138
  return sprintf( '<div>%s</div>', implode( '</div><div>', [
139
  sprintf( '%s: %s', __( 'Response', 'wp-simple-firewall' ),
140
- sprintf( '<span class="badge badge-%s">%s</span>', $codeType, $this->log->meta[ 'code' ] ) ),
141
  sprintf( '%s: %s', __( 'Offense', 'wp-simple-firewall' ),
142
  sprintf(
143
- '<span class="badge badge-%s">%s</span>',
144
  @$this->log->meta[ 'offense' ] ? 'danger' : 'info',
145
  @$this->log->meta[ 'offense' ] ? __( 'Yes', 'wp-simple-firewall' ) : __( 'No', 'wp-simple-firewall' )
146
  )
@@ -168,7 +168,7 @@ class LoadRawTableData extends BaseLoadTableData {
168
  $this->ipInfo[ '' ] = 'n/a';
169
  }
170
  else {
171
- $badgeTemplate = '<span class="badge badge-%s">%s</span>';
172
  $status = __( 'No Record', 'wp-simple-firewall' );
173
 
174
  $record = ( new LookupIpOnList() )
137
 
138
  return sprintf( '<div>%s</div>', implode( '</div><div>', [
139
  sprintf( '%s: %s', __( 'Response', 'wp-simple-firewall' ),
140
+ sprintf( '<span class="badge bg-%s">%s</span>', $codeType, $this->log->meta[ 'code' ] ) ),
141
  sprintf( '%s: %s', __( 'Offense', 'wp-simple-firewall' ),
142
  sprintf(
143
+ '<span class="badge bg-%s">%s</span>',
144
  @$this->log->meta[ 'offense' ] ? 'danger' : 'info',
145
  @$this->log->meta[ 'offense' ] ? __( 'Yes', 'wp-simple-firewall' ) : __( 'No', 'wp-simple-firewall' )
146
  )
168
  $this->ipInfo[ '' ] = 'n/a';
169
  }
170
  else {
171
+ $badgeTemplate = '<span class="badge bg-%s">%s</span>';
172
  $status = __( 'No Record', 'wp-simple-firewall' );
173
 
174
  $record = ( new LookupIpOnList() )
src/lib/src/Modules/Traffic/ModCon.php CHANGED
@@ -42,12 +42,4 @@ class ModCon extends BaseShield\ModCon {
42
  && $this->getCon()->getModule_Data()->getDbH_ReqLogs()->isReady()
43
  && parent::isReadyToExecute();
44
  }
45
-
46
- /**
47
- * @inheritDoc
48
- * @deprecated 12.1
49
- */
50
- public function getDbHandlers( $bInitAll = false ) {
51
- return [];
52
- }
53
  }
42
  && $this->getCon()->getModule_Data()->getDbH_ReqLogs()->isReady()
43
  && parent::isReadyToExecute();
44
  }
 
 
 
 
 
 
 
 
45
  }
src/lib/src/Modules/UserManagement/Lib/Password/UserPasswordHandler.php CHANGED
@@ -10,8 +10,6 @@ use ZxcvbnPhp\Zxcvbn;
10
 
11
  /**
12
  * Referenced some of https://github.com/BenjaminNelan/PwnedPasswordChecker
13
- * Class UserPasswordController
14
- * @package FernleafSystems\Wordpress\Plugin\Shield\Modules\UserManagement\Lib\Password
15
  */
16
  class UserPasswordHandler extends ExecOnceModConsumer {
17
 
@@ -26,11 +24,7 @@ class UserPasswordHandler extends ExecOnceModConsumer {
26
  protected function run() {
27
  $this->setupLoginCaptureHooks();
28
  add_action( 'wp_loaded', [ $this, 'onWpLoaded' ] );
29
- add_action( 'password_reset', function ( $user ) {
30
- if ( $user instanceof \WP_User ) {
31
- $this->onPasswordReset( $user );
32
- }
33
- }, 100 );
34
  add_filter( 'registration_errors', [ $this, 'checkPassword' ], 100, 3 );
35
  add_action( 'user_profile_update_errors', [ $this, 'checkPassword' ], 100, 3 );
36
  add_action( 'validate_password_reset', [ $this, 'checkPassword' ], 100, 3 );
@@ -45,9 +39,12 @@ class UserPasswordHandler extends ExecOnceModConsumer {
45
  $failed = false;
46
  }
47
  catch ( \Exception $e ) {
48
- $failed = ( $e->getCode() != 999 ); // We don't fail when the PWNED API is not available.
 
49
  }
50
- $this->setPasswordFailedFlag( $user, $failed );
 
 
51
  }
52
  }
53
 
@@ -59,11 +56,14 @@ class UserPasswordHandler extends ExecOnceModConsumer {
59
  }
60
  }
61
 
62
- private function onPasswordReset( \WP_User $user ) {
63
- if ( $user->ID > 0 ) {
 
 
 
64
  $meta = $this->getCon()->getUserMeta( $user );
65
  unset( $meta->pass_hash );
66
- $meta->pass_started_at = 0;
67
  }
68
  }
69
 
@@ -71,7 +71,7 @@ class UserPasswordHandler extends ExecOnceModConsumer {
71
  /** @var UserManagement\Options $opts */
72
  $opts = $this->getOptions();
73
  if ( $opts->isPassExpirationEnabled() ) {
74
- $startedAt = (int)$this->getCon()->getCurrentUserMeta()->pass_started_at;
75
  if ( $startedAt > 0 && ( Services::Request()->ts() - $startedAt > $opts->getPassExpireTimeout() ) ) {
76
  $this->getCon()->fireEvent( 'password_expired', [
77
  'audit_params' => [
@@ -89,7 +89,7 @@ class UserPasswordHandler extends ExecOnceModConsumer {
89
  $meta = $this->getCon()->getCurrentUserMeta();
90
 
91
  $checkFailed = $this->getOptions()->isOpt( 'pass_force_existing', 'Y' )
92
- && isset( $meta->pass_check_failed_at ) && $meta->pass_check_failed_at > 0;
93
 
94
  if ( $checkFailed ) {
95
  $this->redirectToResetPassword(
@@ -120,7 +120,7 @@ class UserPasswordHandler extends ExecOnceModConsumer {
120
 
121
  $msg .= ' '.__( 'For your security, please use the password section below to update your password.', 'wp-simple-firewall' );
122
  $this->getMod()
123
- ->setFlashAdminNotice( $msg, true, true );
124
  $this->getCon()->fireEvent( 'password_policy_force_change', [
125
  'audit_params' => [
126
  'user_login' => $user->user_login
@@ -209,7 +209,7 @@ class UserPasswordHandler extends ExecOnceModConsumer {
209
  * @throws \Exception
210
  */
211
  private function testPasswordMeetsMinimumStrength( string $password, int $min ) {
212
- $score = ( new Zxcvbn() )->passwordStrength( $password )[ 'score' ];
213
 
214
  if ( $score < $min ) {
215
  /** @var UserManagement\ModCon $mod */
@@ -293,8 +293,5 @@ class UserPasswordHandler extends ExecOnceModConsumer {
293
  * @param bool $failed
294
  */
295
  private function setPasswordFailedFlag( \WP_User $user, bool $failed = false ) {
296
- $this->getCon()
297
- ->getUserMeta( $user )
298
- ->pass_check_failed_at = $failed ? Services::Request()->ts() : 0;
299
  }
300
  }
10
 
11
  /**
12
  * Referenced some of https://github.com/BenjaminNelan/PwnedPasswordChecker
 
 
13
  */
14
  class UserPasswordHandler extends ExecOnceModConsumer {
15
 
24
  protected function run() {
25
  $this->setupLoginCaptureHooks();
26
  add_action( 'wp_loaded', [ $this, 'onWpLoaded' ] );
27
+ add_action( 'after_password_reset', [ $this, 'onPasswordReset' ] );
 
 
 
 
28
  add_filter( 'registration_errors', [ $this, 'checkPassword' ], 100, 3 );
29
  add_action( 'user_profile_update_errors', [ $this, 'checkPassword' ], 100, 3 );
30
  add_action( 'validate_password_reset', [ $this, 'checkPassword' ], 100, 3 );
39
  $failed = false;
40
  }
41
  catch ( \Exception $e ) {
42
+ // We don't fail when the PWNED API is not available.
43
+ $failed = ( $e->getCode() != 999 );
44
  }
45
+
46
+ $this->getCon()
47
+ ->getUserMeta( $user )->pass_check_failed_at = $failed ? Services::Request()->ts() : 0;
48
  }
49
  }
50
 
56
  }
57
  }
58
 
59
+ /**
60
+ * This hook is only available on WP 4.4+
61
+ */
62
+ public function onPasswordReset( $user ) {
63
+ if ( $user instanceof \WP_User && $user->ID > 0 ) {
64
  $meta = $this->getCon()->getUserMeta( $user );
65
  unset( $meta->pass_hash );
66
+ $meta->updatePasswordStartedAt( $user->user_pass );
67
  }
68
  }
69
 
71
  /** @var UserManagement\Options $opts */
72
  $opts = $this->getOptions();
73
  if ( $opts->isPassExpirationEnabled() ) {
74
+ $startedAt = $this->getCon()->getCurrentUserMeta()->record->pass_started_at;
75
  if ( $startedAt > 0 && ( Services::Request()->ts() - $startedAt > $opts->getPassExpireTimeout() ) ) {
76
  $this->getCon()->fireEvent( 'password_expired', [
77
  'audit_params' => [
89
  $meta = $this->getCon()->getCurrentUserMeta();
90
 
91
  $checkFailed = $this->getOptions()->isOpt( 'pass_force_existing', 'Y' )
92
+ && $meta->pass_check_failed_at > 0;
93
 
94
  if ( $checkFailed ) {
95
  $this->redirectToResetPassword(
120
 
121
  $msg .= ' '.__( 'For your security, please use the password section below to update your password.', 'wp-simple-firewall' );
122
  $this->getMod()
123
+ ->setFlashAdminNotice( $msg, $user, true, true );
124
  $this->getCon()->fireEvent( 'password_policy_force_change', [
125
  'audit_params' => [
126
  'user_login' => $user->user_login
209
  * @throws \Exception
210
  */
211
  private function testPasswordMeetsMinimumStrength( string $password, int $min ) {
212
+ $score = (int)( new Zxcvbn() )->passwordStrength( $password )[ 'score' ];
213
 
214
  if ( $score < $min ) {
215
  /** @var UserManagement\ModCon $mod */
293
  * @param bool $failed
294
  */
295
  private function setPasswordFailedFlag( \WP_User $user, bool $failed = false ) {
 
 
 
296
  }
297
  }
src/lib/src/Modules/UserManagement/Lib/Registration/EmailValidate.php CHANGED
@@ -2,31 +2,30 @@
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\UserManagement\Lib\Registration;
4
 
5
- use FernleafSystems\Wordpress\Plugin\Shield\Modules\ModConsumer;
6
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\UserManagement;
7
  use FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\Verify\Email;
8
 
9
- class EmailValidate {
10
-
11
- use ModConsumer;
12
 
13
  private $track;
14
 
15
- public function run() {
16
- /** @var UserManagement\Options $oOpts */
17
- $oOpts = $this->getOptions();
18
- if ( $oOpts->getValidateEmailOnRegistration() != 'disabled' ) {
19
  add_filter( 'wp_pre_insert_user_data', [ $this, 'validateNewUserEmail' ] );
20
  }
21
  }
22
 
23
  /**
24
- * @param array $aUserData
25
  * @return array
26
  */
27
- public function validateNewUserEmail( $aUserData ) {
28
- $email = $aUserData[ 'user_email' ];
29
  /** @var UserManagement\Options $opts */
 
30
 
31
  if ( !is_array( $this->track ) ) {
32
  $this->track = [];
@@ -36,7 +35,6 @@ class EmailValidate {
36
  if ( !empty( $email ) && !in_array( $email, $this->track ) ) {
37
  $this->track[] = $email;
38
 
39
- $opts = $this->getOptions();
40
  $invalidBecause = null;
41
  if ( !is_email( $email ) ) {
42
  $invalidBecause = 'syntax';
@@ -47,12 +45,12 @@ class EmailValidate {
47
  ->getWpHashesTokenManager()
48
  ->getToken();
49
  if ( !empty( $apiToken ) ) {
50
- $aChecks = $opts->getEmailValidationChecks();
51
- $aVerifys = ( new Email( $apiToken ) )->getEmailVerification( $email );
52
- if ( is_array( $aVerifys ) ) {
53
- foreach ( $aVerifys as $sVerifyKey => $bIsValid ) {
54
- if ( !$bIsValid && in_array( $sVerifyKey, $aChecks ) ) {
55
- $invalidBecause = $sVerifyKey;
56
  break;
57
  }
58
  }
@@ -80,6 +78,6 @@ class EmailValidate {
80
  }
81
  }
82
 
83
- return $aUserData;
84
  }
85
  }
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\UserManagement\Lib\Registration;
4
 
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base\Common\ExecOnceModConsumer;
6
  use FernleafSystems\Wordpress\Plugin\Shield\Modules\UserManagement;
7
  use FernleafSystems\Wordpress\Services\Utilities\Integrations\WpHashes\Verify\Email;
8
 
9
+ class EmailValidate extends ExecOnceModConsumer {
 
 
10
 
11
  private $track;
12
 
13
+ protected function run() {
14
+ /** @var UserManagement\Options $opts */
15
+ $opts = $this->getOptions();
16
+ if ( $opts->getValidateEmailOnRegistration() != 'disabled' ) {
17
  add_filter( 'wp_pre_insert_user_data', [ $this, 'validateNewUserEmail' ] );
18
  }
19
  }
20
 
21
  /**
22
+ * @param array $userData
23
  * @return array
24
  */
25
+ public function validateNewUserEmail( $userData ) {
26
+ $email = $userData[ 'user_email' ];
27
  /** @var UserManagement\Options $opts */
28
+ $opts = $this->getOptions();
29
 
30
  if ( !is_array( $this->track ) ) {
31
  $this->track = [];
35
  if ( !empty( $email ) && !in_array( $email, $this->track ) ) {
36
  $this->track[] = $email;
37
 
 
38
  $invalidBecause = null;
39
  if ( !is_email( $email ) ) {
40
  $invalidBecause = 'syntax';
45
  ->getWpHashesTokenManager()
46
  ->getToken();
47
  if ( !empty( $apiToken ) ) {
48
+ $checks = $opts->getEmailValidationChecks();
49
+ $verifys = ( new Email( $apiToken ) )->getEmailVerification( $email );
50
+ if ( is_array( $verifys ) ) {
51
+ foreach ( $verifys as $verifyKey => $valid ) {
52
+ if ( !$valid && in_array( $verifyKey, $checks ) ) {
53
+ $invalidBecause = $verifyKey;
54
  break;
55
  }
56
  }
78
  }
79
  }
80
 
81
+ return $userData;
82
  }
83
  }
src/lib/src/Modules/UserManagement/Lib/Suspend/Base.php CHANGED
@@ -1,38 +1,37 @@
1
- <?php
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\UserManagement\Lib\Suspend;
4
 
5
- use FernleafSystems\Wordpress\Plugin\Shield\Modules\ModConsumer;
6
  use FernleafSystems\Wordpress\Plugin\Shield\Users\ShieldUserMeta;
7
 
8
- abstract class Base {
9
-
10
- use ModConsumer;
11
 
12
  const HOOK_PRIORITY = 1000; // so only authenticated user is notified of account state.
13
 
14
- public function run() {
15
  add_filter( 'authenticate', [ $this, 'checkUser' ], static::HOOK_PRIORITY );
16
  }
17
 
18
  /**
19
  * Should be a filter added to WordPress's "authenticate" filter, but before WordPress performs
20
- * it's own authentication (theirs is priority 30, so we could go in at around 20).
21
  * @param null|\WP_User|\WP_Error $user
22
  * @return \WP_User|\WP_Error
23
  */
24
  public function checkUser( $user ) {
25
  if ( $user instanceof \WP_User ) {
26
- $user = $this->processUser( $user, $this->getCon()->getUserMeta( $user ) );
 
 
 
27
  }
28
  return $user;
29
  }
30
 
31
  /**
32
  * Test the User and its Meta and if it fails return \WP_Error; Always return Error or User
33
- * @param \WP_User $user
34
- * @param ShieldUserMeta $meta
35
  * @return \WP_Error|\WP_User
36
  */
37
- abstract protected function processUser( \WP_User $user, $meta );
38
  }
1
+ <?php declare( strict_types=1 );
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\UserManagement\Lib\Suspend;
4
 
5
+ use FernleafSystems\Wordpress\Plugin\Shield\Modules\Base\Common\ExecOnceModConsumer;
6
  use FernleafSystems\Wordpress\Plugin\Shield\Users\ShieldUserMeta;
7
 
8
+ abstract class Base extends ExecOnceModConsumer {
 
 
9
 
10
  const HOOK_PRIORITY = 1000; // so only authenticated user is notified of account state.
11
 
12
+ protected function run() {
13
  add_filter( 'authenticate', [ $this, 'checkUser' ], static::HOOK_PRIORITY );
14
  }
15
 
16
  /**
17
  * Should be a filter added to WordPress's "authenticate" filter, but before WordPress performs
18
+ * its own authentication (theirs is priority 30, so we could go in at around 20).
19
  * @param null|\WP_User|\WP_Error $user
20
  * @return \WP_User|\WP_Error
21
  */
22
  public function checkUser( $user ) {
23
  if ( $user instanceof \WP_User ) {
24
+ $meta = $this->getCon()->getUserMeta( $user );
25
+ if ( !empty( $meta ) ) {
26
+ $user = $this->processUser( $user, $meta );
27
+ }
28
  }
29
  return $user;
30
  }
31
 
32
  /**
33
  * Test the User and its Meta and if it fails return \WP_Error; Always return Error or User
 
 
34
  * @return \WP_Error|\WP_User
35
  */
36
+ abstract protected function processUser( \WP_User $user, ShieldUserMeta $meta );
37
  }
src/lib/src/Modules/UserManagement/Lib/Suspend/Idle.php CHANGED
@@ -1,4 +1,4 @@
1
- <?php
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\UserManagement\Lib\Suspend;
4
 
@@ -9,17 +9,15 @@ use FernleafSystems\Wordpress\Services\Services;
9
  class Idle extends Base {
10
 
11
  /**
12
- * @param \WP_User $user
13
- * @param ShieldUserMeta $meta
14
  * @return \WP_Error|\WP_User
15
  */
16
- protected function processUser( \WP_User $user, $meta ) {
17
  /** @var UserManagement\Options $opts */
18
  $opts = $this->getOptions();
19
 
20
- $aRoles = array_intersect( $opts->getSuspendAutoIdleUserRoles(), array_map( 'strtolower', $user->roles ) );
21
 
22
- if ( count( $aRoles ) > 0 && $this->isLastVerifiedAtExpired( $meta ) ) {
23
  $user = new \WP_Error(
24
  $this->getCon()->prefix( 'pass-expired' ),
25
  implode( ' ', [
@@ -35,13 +33,9 @@ class Idle extends Base {
35
  return $user;
36
  }
37
 
38
- /**
39
- * @param ShieldUserMeta $oMeta
40
- * @return bool
41
- */
42
- protected function isLastVerifiedAtExpired( $oMeta ) {
43
- /** @var UserManagement\Options $oOpts */
44
- $oOpts = $this->getOptions();
45
- return ( Services::Request()->ts() - $oMeta->getLastVerifiedAt() > $oOpts->getSuspendAutoIdleTime() );
46
  }
47
  }
1
+ <?php declare( strict_types=1 );
2
 
3
  namespace FernleafSystems\Wordpress\Plugin\Shield\Modules\UserManagement\Lib\Suspend;
4
 
9
  class Idle extends Base {
10
 
11
  /**
 
 
12
  * @return \WP_Error|\WP_User
13
  */
14
+ protected function processUser( \WP_User $user, ShieldUserMeta $meta ) {
15
  /** @var UserManagement\Options $opts */
16
  $opts = $this->getOptions();
17
 
18
+ $roles = array_intersect( $opts->getSuspendAutoIdleUserRoles(), array_map( 'strtolower', $user->roles ) );
19
 
20
+ if ( count( $roles ) > 0 && $this->isLastVerifiedAtExpired( $meta ) ) {
21
  $user = new \WP_Error(
22
  $this->getCon()->prefix( 'pass-expired' ),
23
  implode( ' ', [
33
  return $user;
34
  }
35
 
36
+ protected function isLastVerifiedAtExpired( ShieldUserMeta $meta ) :bool {
37
+ /** @var UserManagement\Options $opts */
38
+ $opts = $this->getOptions();
39
+ return ( Services::Request()->ts() - $meta->last_verified_at > $opts->getSuspendAutoIdleTime() );
 
 
 
 
40
  }
41
  }
src/lib/src/Modules/UserManagement/Lib/Suspend/PasswordExpiry.php CHANGED
@@ -6,23 +6,12 @@ use FernleafSystems\Wordpress\Plugin\Shield\Modules\UserManagement;
6
  use FernleafSystems\Wordpress\Plugin\Shield\Users\ShieldUserMeta;
7
  use FernleafSystems\Wordpress\Services\Services;
8
 
9
- /**
10
- * Class PasswordExpiry
11
- * @package FernleafSystems\Wordpress\Plugin\Shield\Modules\UserManagement\Suspend
12
- */
13
  class PasswordExpiry extends Base {
14
 
15
  /**
16
- * @var int
17
- */
18
- private $nMaxPasswordAge;
19
-
20
- /**
21
- * @param \WP_User $user
22
- * @param ShieldUserMeta $meta
23
  * @return \WP_Error|\WP_User
24
  */
25
- protected function processUser( \WP_User $user, $meta ) {
26
  if ( $this->isPassExpired( $meta ) ) {
27
 
28
  $user = new \WP_Error(
@@ -40,29 +29,17 @@ class PasswordExpiry extends Base {
40
  return $user;
41
  }
42
 
43
- /**
44
- * @param ShieldUserMeta $oMeta
45
- * @return bool
46
- */
47
- private function isPassExpired( $oMeta ) {
48
- /** @var UserManagement\Options $oOpts */
49
- $oOpts = $this->getOptions();
50
- if ( empty( $oMeta->pass_started_at ) ) {
51
- $oMeta->pass_started_at = $oMeta->first_seen_at;
52
- }
53
- return ( Services::Request()->ts() - $oMeta->pass_started_at > $oOpts->getPassExpireTimeout() );
54
- }
55
-
56
- public function getMaxPasswordAge() :int {
57
- return (int)$this->nMaxPasswordAge;
58
  }
59
 
60
  /**
61
- * @param int $nMaxPasswordAge
62
- * @return $this
63
  */
64
- public function setMaxPasswordAge( $nMaxPasswordAge ) {
65
- $this->nMaxPasswordAge = $nMaxPasswordAge;
66
  return $this;
67
  }
68
  }
6
  use FernleafSystems\Wordpress\Plugin\Shield\Users\ShieldUserMeta;
7
  use FernleafSystems\Wordpress\Services\Services;
8
 
 
 
 
 
9
  class PasswordExpiry extends Base {
10
 
11
  /**
 
 
 
 
 
 
 
12
  * @return \WP_Error|\WP_User
13
  */
14
+ protected function processUser( \WP_User $user, ShieldUserMeta $meta ) {
15
  if ( $this->isPassExpired( $meta ) ) {
16
 
17
  $user = new \WP_Error(
29
  return $user;
30
  }
31
 
32
+ private function isPassExpired( ShieldUserMeta $meta ) :bool {
33
+ /** @var UserManagement\Options $opts */
34
+ $opts = $this->getOptions();
35
+ return !empty( $meta->record->pass_started_at )
36
+ && ( Services::Request()->ts() - $meta->record->pass_started_at > $opts->getPassExpireTimeout() );
 
 
 
 
 
 
 
 
 
 
37
  }
38
 
39
  /**
40
+ * @deprecated 13.1
 
41
  */
42
+ public function setMaxPasswordAge() {
 
43
  return $this;
44
  }
45
  }
src/{lib/src/Modules/UserManagement/Lib/Suspend/Suspended.php → li} RENAMED
File without changes