Cerber Security & Antispam - Version 5.0

Version Description

  • New: A new antispam and bot detection engine that protects comment and user registration forms from bot attacks. After several attempts bot IP will be locked out.
  • New: You can tell Cerber either to mark detected spam comments as spam or deny them completely.
  • New: Cerber can automatically move spam comments older than the specified amount of days to trash.
  • New: Added the cerber_404_template filter for specifying an alternative to the default 404 page not found template.
  • New: Added code to avoid possible conflict between Custom login URL and REST API.
  • New: Italian translation has been added, thanks to Francesco Venuti.
  • Bug fixed: WordPress database error: Table '...cerber_lab_net' doesn't exist.
Download this release

Release Info

Developer Gioni
Plugin Icon 128x128 Cerber Security & Antispam
Version 5.0
Comparing to
See all releases

Version 5.0

Files changed (288) hide show
  1. assets/admin.css +707 -0
  2. assets/admin.js +63 -0
  3. assets/ajax-loader-ip.gif +0 -0
  4. assets/bgwidget.png +0 -0
  5. assets/flags/ad.gif +0 -0
  6. assets/flags/ae.gif +0 -0
  7. assets/flags/af.gif +0 -0
  8. assets/flags/ag.gif +0 -0
  9. assets/flags/ai.gif +0 -0
  10. assets/flags/al.gif +0 -0
  11. assets/flags/am.gif +0 -0
  12. assets/flags/an.gif +0 -0
  13. assets/flags/ao.gif +0 -0
  14. assets/flags/ar.gif +0 -0
  15. assets/flags/as.gif +0 -0
  16. assets/flags/at.gif +0 -0
  17. assets/flags/au.gif +0 -0
  18. assets/flags/aw.gif +0 -0
  19. assets/flags/ax.gif +0 -0
  20. assets/flags/az.gif +0 -0
  21. assets/flags/ba.gif +0 -0
  22. assets/flags/bb.gif +0 -0
  23. assets/flags/bd.gif +0 -0
  24. assets/flags/be.gif +0 -0
  25. assets/flags/bf.gif +0 -0
  26. assets/flags/bg.gif +0 -0
  27. assets/flags/bh.gif +0 -0
  28. assets/flags/bi.gif +0 -0
  29. assets/flags/bj.gif +0 -0
  30. assets/flags/bm.gif +0 -0
  31. assets/flags/bn.gif +0 -0
  32. assets/flags/bo.gif +0 -0
  33. assets/flags/br.gif +0 -0
  34. assets/flags/bs.gif +0 -0
  35. assets/flags/bt.gif +0 -0
  36. assets/flags/bv.gif +0 -0
  37. assets/flags/bw.gif +0 -0
  38. assets/flags/by.gif +0 -0
  39. assets/flags/bz.gif +0 -0
  40. assets/flags/ca.gif +0 -0
  41. assets/flags/cc.gif +0 -0
  42. assets/flags/cd.gif +0 -0
  43. assets/flags/cf.gif +0 -0
  44. assets/flags/cg.gif +0 -0
  45. assets/flags/ch.gif +0 -0
  46. assets/flags/ci.gif +0 -0
  47. assets/flags/ck.gif +0 -0
  48. assets/flags/cl.gif +0 -0
  49. assets/flags/cm.gif +0 -0
  50. assets/flags/cn.gif +0 -0
  51. assets/flags/co.gif +0 -0
  52. assets/flags/cr.gif +0 -0
  53. assets/flags/cs.gif +0 -0
  54. assets/flags/cu.gif +0 -0
  55. assets/flags/cv.gif +0 -0
  56. assets/flags/cx.gif +0 -0
  57. assets/flags/cy.gif +0 -0
  58. assets/flags/cz.gif +0 -0
  59. assets/flags/de.gif +0 -0
  60. assets/flags/dj.gif +0 -0
  61. assets/flags/dk.gif +0 -0
  62. assets/flags/dm.gif +0 -0
  63. assets/flags/do.gif +0 -0
  64. assets/flags/dz.gif +0 -0
  65. assets/flags/ec.gif +0 -0
  66. assets/flags/ee.gif +0 -0
  67. assets/flags/eg.gif +0 -0
  68. assets/flags/eh.gif +0 -0
  69. assets/flags/er.gif +0 -0
  70. assets/flags/es.gif +0 -0
  71. assets/flags/et.gif +0 -0
  72. assets/flags/eu.gif +0 -0
  73. assets/flags/fi.gif +0 -0
  74. assets/flags/fj.gif +0 -0
  75. assets/flags/fk.gif +0 -0
  76. assets/flags/fm.gif +0 -0
  77. assets/flags/fo.gif +0 -0
  78. assets/flags/fr.gif +0 -0
  79. assets/flags/ga.gif +0 -0
  80. assets/flags/gb.gif +0 -0
  81. assets/flags/gd.gif +0 -0
  82. assets/flags/ge.gif +0 -0
  83. assets/flags/gf.gif +0 -0
  84. assets/flags/gh.gif +0 -0
  85. assets/flags/gi.gif +0 -0
  86. assets/flags/gl.gif +0 -0
  87. assets/flags/gm.gif +0 -0
  88. assets/flags/gn.gif +0 -0
  89. assets/flags/gp.gif +0 -0
  90. assets/flags/gq.gif +0 -0
  91. assets/flags/gr.gif +0 -0
  92. assets/flags/gs.gif +0 -0
  93. assets/flags/gt.gif +0 -0
  94. assets/flags/gu.gif +0 -0
  95. assets/flags/gw.gif +0 -0
  96. assets/flags/gy.gif +0 -0
  97. assets/flags/hk.gif +0 -0
  98. assets/flags/hm.gif +0 -0
  99. assets/flags/hn.gif +0 -0
  100. assets/flags/hr.gif +0 -0
  101. assets/flags/ht.gif +0 -0
  102. assets/flags/hu.gif +0 -0
  103. assets/flags/id.gif +0 -0
  104. assets/flags/ie.gif +0 -0
  105. assets/flags/il.gif +0 -0
  106. assets/flags/in.gif +0 -0
  107. assets/flags/io.gif +0 -0
  108. assets/flags/iq.gif +0 -0
  109. assets/flags/ir.gif +0 -0
  110. assets/flags/is.gif +0 -0
  111. assets/flags/it.gif +0 -0
  112. assets/flags/jm.gif +0 -0
  113. assets/flags/jo.gif +0 -0
  114. assets/flags/jp.gif +0 -0
  115. assets/flags/ke.gif +0 -0
  116. assets/flags/kg.gif +0 -0
  117. assets/flags/kh.gif +0 -0
  118. assets/flags/ki.gif +0 -0
  119. assets/flags/km.gif +0 -0
  120. assets/flags/kn.gif +0 -0
  121. assets/flags/kp.gif +0 -0
  122. assets/flags/kr.gif +0 -0
  123. assets/flags/kw.gif +0 -0
  124. assets/flags/ky.gif +0 -0
  125. assets/flags/kz.gif +0 -0
  126. assets/flags/la.gif +0 -0
  127. assets/flags/lb.gif +0 -0
  128. assets/flags/lc.gif +0 -0
  129. assets/flags/li.gif +0 -0
  130. assets/flags/lk.gif +0 -0
  131. assets/flags/lr.gif +0 -0
  132. assets/flags/ls.gif +0 -0
  133. assets/flags/lt.gif +0 -0
  134. assets/flags/lu.gif +0 -0
  135. assets/flags/lv.gif +0 -0
  136. assets/flags/ly.gif +0 -0
  137. assets/flags/ma.gif +0 -0
  138. assets/flags/mc.gif +0 -0
  139. assets/flags/md.gif +0 -0
  140. assets/flags/me.gif +0 -0
  141. assets/flags/mg.gif +0 -0
  142. assets/flags/mh.gif +0 -0
  143. assets/flags/mk.gif +0 -0
  144. assets/flags/ml.gif +0 -0
  145. assets/flags/mm.gif +0 -0
  146. assets/flags/mn.gif +0 -0
  147. assets/flags/mo.gif +0 -0
  148. assets/flags/mp.gif +0 -0
  149. assets/flags/mq.gif +0 -0
  150. assets/flags/mr.gif +0 -0
  151. assets/flags/ms.gif +0 -0
  152. assets/flags/mt.gif +0 -0
  153. assets/flags/mu.gif +0 -0
  154. assets/flags/mv.gif +0 -0
  155. assets/flags/mw.gif +0 -0
  156. assets/flags/mx.gif +0 -0
  157. assets/flags/my.gif +0 -0
  158. assets/flags/mz.gif +0 -0
  159. assets/flags/na.gif +0 -0
  160. assets/flags/nc.gif +0 -0
  161. assets/flags/ne.gif +0 -0
  162. assets/flags/nf.gif +0 -0
  163. assets/flags/ng.gif +0 -0
  164. assets/flags/ni.gif +0 -0
  165. assets/flags/nl.gif +0 -0
  166. assets/flags/no.gif +0 -0
  167. assets/flags/np.gif +0 -0
  168. assets/flags/nr.gif +0 -0
  169. assets/flags/nu.gif +0 -0
  170. assets/flags/nz.gif +0 -0
  171. assets/flags/om.gif +0 -0
  172. assets/flags/pa.gif +0 -0
  173. assets/flags/pe.gif +0 -0
  174. assets/flags/pf.gif +0 -0
  175. assets/flags/pg.gif +0 -0
  176. assets/flags/ph.gif +0 -0
  177. assets/flags/pk.gif +0 -0
  178. assets/flags/pl.gif +0 -0
  179. assets/flags/pm.gif +0 -0
  180. assets/flags/pn.gif +0 -0
  181. assets/flags/pr.gif +0 -0
  182. assets/flags/ps.gif +0 -0
  183. assets/flags/pt.gif +0 -0
  184. assets/flags/pw.gif +0 -0
  185. assets/flags/py.gif +0 -0
  186. assets/flags/qa.gif +0 -0
  187. assets/flags/re.gif +0 -0
  188. assets/flags/ro.gif +0 -0
  189. assets/flags/rs.gif +0 -0
  190. assets/flags/ru.gif +0 -0
  191. assets/flags/rw.gif +0 -0
  192. assets/flags/sa.gif +0 -0
  193. assets/flags/sb.gif +0 -0
  194. assets/flags/sc.gif +0 -0
  195. assets/flags/sd.gif +0 -0
  196. assets/flags/se.gif +0 -0
  197. assets/flags/sg.gif +0 -0
  198. assets/flags/sh.gif +0 -0
  199. assets/flags/si.gif +0 -0
  200. assets/flags/sj.gif +0 -0
  201. assets/flags/sk.gif +0 -0
  202. assets/flags/sl.gif +0 -0
  203. assets/flags/sm.gif +0 -0
  204. assets/flags/sn.gif +0 -0
  205. assets/flags/so.gif +0 -0
  206. assets/flags/sr.gif +0 -0
  207. assets/flags/st.gif +0 -0
  208. assets/flags/sv.gif +0 -0
  209. assets/flags/sy.gif +0 -0
  210. assets/flags/sz.gif +0 -0
  211. assets/flags/tc.gif +0 -0
  212. assets/flags/td.gif +0 -0
  213. assets/flags/tf.gif +0 -0
  214. assets/flags/tg.gif +0 -0
  215. assets/flags/th.gif +0 -0
  216. assets/flags/tj.gif +0 -0
  217. assets/flags/tk.gif +0 -0
  218. assets/flags/tl.gif +0 -0
  219. assets/flags/tm.gif +0 -0
  220. assets/flags/tn.gif +0 -0
  221. assets/flags/to.gif +0 -0
  222. assets/flags/tr.gif +0 -0
  223. assets/flags/tt.gif +0 -0
  224. assets/flags/tv.gif +0 -0
  225. assets/flags/tw.gif +0 -0
  226. assets/flags/tz.gif +0 -0
  227. assets/flags/ua.gif +0 -0
  228. assets/flags/ug.gif +0 -0
  229. assets/flags/um.gif +0 -0
  230. assets/flags/us.gif +0 -0
  231. assets/flags/uy.gif +0 -0
  232. assets/flags/uz.gif +0 -0
  233. assets/flags/va.gif +0 -0
  234. assets/flags/vc.gif +0 -0
  235. assets/flags/ve.gif +0 -0
  236. assets/flags/vg.gif +0 -0
  237. assets/flags/vi.gif +0 -0
  238. assets/flags/vn.gif +0 -0
  239. assets/flags/vu.gif +0 -0
  240. assets/flags/wf.gif +0 -0
  241. assets/flags/ws.gif +0 -0
  242. assets/flags/ye.gif +0 -0
  243. assets/flags/yt.gif +0 -0
  244. assets/flags/za.gif +0 -0
  245. assets/flags/zm.gif +0 -0
  246. assets/flags/zw.gif +0 -0
  247. assets/fonts/cerber.eot +0 -0
  248. assets/fonts/cerber.ttf +0 -0
  249. assets/fonts/cerber.woff +0 -0
  250. assets/goo-translate.png +0 -0
  251. assets/icon-128x128.png +0 -0
  252. assets/icon-256x256.png +0 -0
  253. assets/inspector.png +0 -0
  254. cerber-lab.php +617 -0
  255. cerber-news.php +108 -0
  256. cerber-tools.php +276 -0
  257. common.php +532 -0
  258. dashboard.php +1678 -0
  259. index.php +2 -0
  260. jetflow.php +126 -0
  261. languages/wp-cerber-cs_CZ.mo +0 -0
  262. languages/wp-cerber-cs_CZ.po +1204 -0
  263. languages/wp-cerber-de_DE.mo +0 -0
  264. languages/wp-cerber-de_DE.po +1273 -0
  265. languages/wp-cerber-es_ES.mo +0 -0
  266. languages/wp-cerber-es_ES.po +1212 -0
  267. languages/wp-cerber-fr_FR.mo +0 -0
  268. languages/wp-cerber-fr_FR.po +1130 -0
  269. languages/wp-cerber-it_IT.mo +0 -0
  270. languages/wp-cerber-it_IT.po +1231 -0
  271. languages/wp-cerber-nb_NO.mo +0 -0
  272. languages/wp-cerber-nb_NO.po +1128 -0
  273. languages/wp-cerber-nl_NL.mo +0 -0
  274. languages/wp-cerber-nl_NL.po +1038 -0
  275. languages/wp-cerber-pl_PL.mo +0 -0
  276. languages/wp-cerber-pl_PL.po +1176 -0
  277. languages/wp-cerber-pt_BR.mo +0 -0
  278. languages/wp-cerber-pt_BR.po +1183 -0
  279. languages/wp-cerber-ru_RU.mo +0 -0
  280. languages/wp-cerber-ru_RU.po +1127 -0
  281. languages/wp-cerber-uk.mo +0 -0
  282. languages/wp-cerber-uk.po +1216 -0
  283. languages/wp-cerber.pot +1286 -0
  284. readme.txt +447 -0
  285. ripe.php +168 -0
  286. settings.php +766 -0
  287. whois.php +465 -0
  288. wp-cerber.php +3295 -0
assets/admin.css ADDED
@@ -0,0 +1,707 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Common */
2
+ .crb-main {
3
+ width: auto;
4
+ overflow: hidden;
5
+ padding-top: 1em;
6
+ }
7
+
8
+ .crb-main h2, .crb-main h3, .crb-main p{
9
+ margin-top: 0.5em;
10
+ }
11
+
12
+ .cerber-margin {
13
+ margin-left: 10px;
14
+ }
15
+
16
+ .cupage {
17
+ padding: 10pt;
18
+ font-weight: bold;
19
+ }
20
+
21
+ .form-table {
22
+ margin-bottom: 30px;
23
+ }
24
+
25
+ /* Dashboard */
26
+
27
+ #crb-kpi {
28
+ width: 100%;
29
+ background-color: #fff;
30
+ color: #111;
31
+ border-collapse: collapse;
32
+ border: 6px solid #e9e9e9;
33
+ }
34
+ #crb-kpi td{
35
+ padding: 26px 10px 26px 5px;
36
+ }
37
+ #crb-kpi td:nth-child(odd) {
38
+ text-align: right;
39
+ font-size: 200%;
40
+ color: #555;
41
+ font-weight: bold;
42
+ min-width: 5%;
43
+ /*border-left: #555 solid 3px;*/
44
+ border-left-width: 3px;
45
+ padding-left: 1em;
46
+ }
47
+ #crb-kpi td:nth-child(even) {
48
+ font-size: 110%;
49
+ /*width: 20%;*/
50
+ }
51
+ #crb-kpi td p {
52
+ font-size: 70%;
53
+ color: #555;
54
+ }
55
+ /*
56
+ #crb-kpi td:after {
57
+ font-family: "dashicons";
58
+ content: "\f487";
59
+ position: absolute;
60
+ font-size: 50px;
61
+ color: red;
62
+ opacity: 0.5;
63
+ top: 130px;
64
+ left: 10%;
65
+ z-index: 0;
66
+ }
67
+ */
68
+
69
+ /* Aside bar */
70
+
71
+ #crb-aside {
72
+ float: right;
73
+ width: 290px;
74
+ margin: 1em 0;
75
+ }
76
+
77
+ @media (max-width: 1000px) {
78
+ #crb-aside {
79
+ display: none;
80
+ }
81
+ }
82
+
83
+ #crb-aside .crb-box {
84
+ background-color: #fff;
85
+ border: 1px solid #E5E5E5;
86
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
87
+ padding: 0 1em 2em 1em;
88
+ margin-bottom: 1em;
89
+ }
90
+ .crb-box-inner {
91
+ position: relative;
92
+ z-index: 2;
93
+ }
94
+
95
+ #crb-subscribe {
96
+ position: relative;
97
+ }
98
+ #crb-subscribe:after {
99
+ font-family: "dashicons";
100
+ content: "\f507";
101
+ position: absolute;
102
+ font-size: 150px;
103
+ color: lightblue;
104
+ opacity: 0.5;
105
+ top: 55%;
106
+ left: 22%;
107
+ z-index: 1;
108
+ }
109
+ #crb-jetflow {
110
+ position: relative;
111
+ }
112
+ #crb-jetflow:after {
113
+ font-family: "dashicons";
114
+ content: "\f311";
115
+ position: absolute;
116
+ font-size: 150px;
117
+ color: darkred;
118
+ opacity: 0.2;
119
+ top: 55%;
120
+ left: 22%;
121
+ z-index: 1;
122
+ }
123
+ #crb-blog {
124
+ position: relative;
125
+ }
126
+ #crb-blog:after {
127
+ font-family: "dashicons";
128
+ content: "\f331";
129
+ position: absolute;
130
+ font-size: 150px;
131
+ color: grey;
132
+ opacity: 0.2;
133
+ top: 55%;
134
+ left: 22%;
135
+ z-index: 1;
136
+ }
137
+ #crb-donate {
138
+ position: relative;
139
+ }
140
+ #crb-donate:after {
141
+ font-family: "dashicons";
142
+ content: "\f487";
143
+ position: absolute;
144
+ font-size: 150px;
145
+ color: red;
146
+ opacity: 0.25;
147
+ top: 35%;
148
+ left: 22%;
149
+ z-index: 1;
150
+ }
151
+
152
+
153
+ /* Messages */
154
+ .crb-alarm {
155
+ display: block;
156
+ border-left: 6px solid #ff0000;
157
+ /*
158
+ background-color:#FF5E3C;
159
+ color:#fff;*/
160
+ }
161
+
162
+ .crb-alarm a {
163
+ font-weight: bold;
164
+ }
165
+
166
+ .crb-note > p::before { /* content: "\e62e"; content: "\f339"; */
167
+ }
168
+
169
+ .cerber-msg td {
170
+ vertical-align: top;
171
+ }
172
+
173
+ .cerber-msg td:nth-child(2) {
174
+ padding-top: 6px;
175
+ }
176
+
177
+ .cerber-msg ul {
178
+ margin-left: 1.3em;
179
+ }
180
+
181
+ .cerber-msg li {
182
+ list-style-type: square;
183
+ }
184
+
185
+ .cerber-msg h3 {
186
+ margin-top: 0;
187
+ }
188
+
189
+ .cerber-msg {
190
+ font-size: 110%;
191
+ }
192
+
193
+ /* Tables */
194
+
195
+ .crb-table {
196
+ /*margin-top: 1em;*/
197
+ }
198
+
199
+ .crb-table tr:nth-child(even) {
200
+ background: #f9f9f9
201
+ }
202
+
203
+ .crb-table tr:nth-child(odd) {
204
+ background: #FFF
205
+ }
206
+
207
+ .crb-table td {
208
+ vertical-align: middle;
209
+ color: #222;
210
+ }
211
+
212
+ /* IP info like WHOIS details */
213
+
214
+ .ip-info-label {
215
+ padding: 1px 6px 1px 6px;
216
+ margin-left: 4px;
217
+ }
218
+
219
+ /* Activity */
220
+
221
+ #activity-filter {
222
+ margin-top: 0.5em;
223
+ /*vertical-align: top;*/
224
+ }
225
+ #activity-filter div{
226
+ margin-bottom: 1em;
227
+ }
228
+ #activity-filter select{
229
+ max-width: 250px;
230
+ margin-top: -4px;
231
+ }
232
+ #activity-filter input[type="submit"]{
233
+ margin-right: 3em;
234
+ }
235
+ #activity-filter input[type="text"]{
236
+ min-width: 250px;
237
+ }
238
+ #activity-filter input,
239
+ #activity-filter select{
240
+ margin-right: 0.2em;
241
+ }
242
+ #activity-filter a{
243
+ text-decoration: none;
244
+ }
245
+
246
+ .act-details{
247
+ background-color: #999;
248
+ color: #ffffff;
249
+ display: inline-block;
250
+ padding: 0 5px 0 5px;
251
+ margin-left: 0.7em;
252
+ }
253
+ p.act-url, .act-role{
254
+ color: #777;
255
+ }
256
+ p.act-url{
257
+ margin: 0.3em 0 !important;
258
+ }
259
+ .act-icon {
260
+ display: inline-block;
261
+ vertical-align: middle;
262
+ width: 1em;
263
+ height: 1em;
264
+ margin-right: 1em;
265
+ background-color: inherit;
266
+ }
267
+
268
+ .ip-aclB,.color-black {
269
+ background-color: #000;
270
+ color: #ffffff;
271
+ }
272
+
273
+ .ip-aclW,.color-green {
274
+ background-color: #83CE77;
275
+ color: #ffffff;
276
+ }
277
+
278
+ .color-blocked {
279
+ background-color: #FF5733;
280
+ color: #ffffff;
281
+ }
282
+
283
+ .green_label, .actv5 {
284
+ display: inline-block;
285
+ padding: 3px 5px 3px 5px;
286
+ margin: 1px;
287
+ background-color: #83CE77;
288
+ color: #000;
289
+ /*border-radius: 5px;*/
290
+ border-left: 4px solid rgba(0, 0, 0, 0);
291
+ border-right: 4px solid rgba(0, 0, 0, 0);
292
+ }
293
+
294
+ .red_label, .actv10, .actv11, .actv12, .actv16, .actv41, .actv42 {
295
+ display: inline-block;
296
+ padding: 3px 5px 3px 5px;
297
+ margin: 1px;
298
+ background-color: #FF5733;
299
+ color: #000;
300
+ /*border-radius: 5px;*/
301
+ border-left: 4px solid rgba(0, 0, 0, 0);
302
+ border-right: 4px solid rgba(0, 0, 0, 0);
303
+ }
304
+
305
+ .yellow_label, .actv13, .actv14 {
306
+ display: inline-block;
307
+ padding: 3px 5px 3px 5px;
308
+ margin: 1px;
309
+ background-color: #FFFF80;
310
+ color: #000;
311
+ /*border-radius: 5px;*/
312
+ border-left: 4px solid rgba(0, 0, 0, 0);
313
+ border-right: 4px solid rgba(0, 0, 0, 0);
314
+ }
315
+
316
+ .actv10, .actv11, .actv12 {
317
+ border-left: 4px solid rgba(0, 0, 0, .25);
318
+ }
319
+
320
+ /* Pagination links */
321
+
322
+ .pagination {
323
+ display: inline-block;
324
+ }
325
+
326
+ .pagination a {
327
+ color: black;
328
+ background-color: #fff;
329
+ float: left;
330
+ padding: 8px 16px;
331
+ text-decoration: none;
332
+ border: 1px solid #ddd;
333
+ }
334
+
335
+ .pagination a.active {
336
+ background-color: #0085ba;
337
+ color: white;
338
+ border: 1px solid #0085ba;
339
+ }
340
+
341
+ .pagination a:hover:not(.active) {background-color: #ddd;}
342
+
343
+ .pagination a:first-child {
344
+ border-top-left-radius: 5px;
345
+ border-bottom-left-radius: 5px;
346
+ }
347
+
348
+ .pagination a:last-child {
349
+ border-top-right-radius: 5px;
350
+ border-bottom-right-radius: 5px;
351
+ }
352
+ .pagination a.arrows {
353
+ font-size: 140%;
354
+ font-weight: 600;
355
+ }
356
+
357
+ /* Access Lists */
358
+ .acl-wrapper {
359
+ margin-bottom: 30px;
360
+ width: 100%;
361
+ max-width: 700px;
362
+ }
363
+
364
+ .acl-wrapper table td:first-child {
365
+ width: 60%;
366
+ }
367
+
368
+ .acl-wrapper form table {
369
+ margin-top: 1em;
370
+ width: 100%;
371
+ border-collapse: collapse;
372
+ }
373
+ .acl-wrapper form table td {
374
+ padding: 0;
375
+ }
376
+ .acl-wrapper form input[type="text"]{
377
+ width:100%;
378
+ }
379
+
380
+ .acl-items {
381
+ border: 1px solid #aaa;
382
+ background-color: #fff;
383
+
384
+ max-height:400px;
385
+ overflow: auto;
386
+ }
387
+
388
+ .acl-table {
389
+ /*border: 1px solid #aaa;
390
+ background-color: #fff;*/
391
+ width: 100%;
392
+ }
393
+ .acl-table td:first-child {
394
+ white-space: pre;
395
+ font-family: Consolas, Monaco, monospace;
396
+ font-size: 110%;
397
+ }
398
+ .acl-table td {
399
+ padding: 6px;
400
+ background-color: #f5f5f5;
401
+ }
402
+ .acl-table tr td:not(:first-child) {
403
+ /*.acl-table tr td:nth-child(2) {*/
404
+ /*width: 20%;*/
405
+ text-align: center;
406
+ }
407
+
408
+
409
+ /* Tabs */
410
+ .cerber-tabs span.dashicons {
411
+ display: inline-block;
412
+ vertical-align: middle;
413
+ line-height: 18px;
414
+ }
415
+
416
+ .cerber-tabs .nav-tab-active {
417
+ color: #804040;
418
+ color: rgb(0, 103, 153);
419
+ }
420
+
421
+ /* Preserve line-height for tabs */
422
+
423
+ .cerber-tabs sup,
424
+ .cerber-tabs sub {
425
+ height: 0;
426
+ line-height: 1;
427
+ vertical-align: baseline;
428
+ _vertical-align: bottom;
429
+ position: relative;
430
+ }
431
+
432
+ .cerber-tabs sup {
433
+ bottom: 1ex;
434
+ }
435
+
436
+ .cerber-tabs sub {
437
+ top: .5ex;
438
+ }
439
+
440
+ /* Users admin page */
441
+
442
+ #cbcc, .cbcc, #cbfl, .cbfl {
443
+ text-align: center;
444
+ }
445
+
446
+ /* Widgets */
447
+
448
+ #cerber_quick .inside {
449
+ padding: 0;
450
+ background-image: url("bgwidget.png");
451
+ background-repeat: no-repeat;
452
+ background-position: right top;
453
+ }
454
+
455
+ .cerber-widget {
456
+ border-bottom-width: 1px;
457
+ border-bottom-style: solid;
458
+ border-bottom-color: #eeeeee;
459
+ padding: 4px 12px 12px;
460
+
461
+ }
462
+
463
+ .cerber-widget .bigdig {
464
+ font-size: 250%;
465
+ }
466
+
467
+ #quick-info td {
468
+ padding: 0 8px 6px 0;
469
+ font-size: 110%;
470
+ }
471
+
472
+ .cerber-widget td.per {
473
+ vertical-align: middle;
474
+ padding-left: 5px;
475
+ }
476
+
477
+ .wilinks, .up-cerber {
478
+ padding: 12px;
479
+ text-align: center;
480
+ }
481
+
482
+ .wilinks a {
483
+ white-space: nowrap;
484
+ }
485
+
486
+ .up-cerber {
487
+ background-color: #804040;
488
+ font-size: 110%;
489
+ color: #fff;
490
+ }
491
+
492
+ .up-cerber a {
493
+ color: #fff;
494
+ display: block;
495
+ }
496
+
497
+ /* Ip extra, whois */
498
+ div#ip-extra {
499
+ overflow: auto;
500
+ padding: 10px 25px;
501
+ background-color: #f8f8f8;
502
+ border: solid 1px #ddd;
503
+ border-bottom: none;
504
+ vertical-align: middle;
505
+ }
506
+ div#ip-extra table{
507
+ border-collapse: collapse;
508
+ width: 100%;
509
+ }
510
+ div#ip-extra table td:nth-child(2){
511
+ text-align: right;
512
+ }
513
+ div#ip-extra p{
514
+ line-height: 0.7em !important;
515
+ }
516
+ /*div#ip-extra p:first-child {*/
517
+ div#ip-extra span#ip-address,
518
+ div#ip-extra span#ip-country{
519
+ font-size: 115%;
520
+ font-weight: bold;
521
+ }
522
+ div#ip-extra span#ip-address{
523
+ margin-right: 1em;
524
+ }
525
+ div#ip-extra #ip-details {
526
+ float: left;
527
+ max-width: 30%;
528
+ }
529
+ div#ip-extra #acl-buttons{
530
+ float:right;
531
+ max-width: 30%;
532
+ }
533
+ /*
534
+ #acl-buttons form{
535
+ position: absolute;
536
+ top: 50%;
537
+ transform: translateY(-50%);
538
+ }*/
539
+
540
+ div#whois {
541
+ border: solid 1px #ddd;
542
+ background-color: #fff;
543
+ margin-bottom: 50px;
544
+ padding: 15px 25px;
545
+ overflow: auto;
546
+ max-height: 200px;
547
+ transition: max-height 0.2s ease-in;
548
+ }
549
+ div#whois:hover {
550
+ max-height: 500px;
551
+ transition: max-height 0.2s ease-out;
552
+ }
553
+
554
+ .whois-object {
555
+ min-width: 20%;
556
+ max-width: 50%;
557
+ float: left;
558
+ margin-right: 20px;
559
+ background-color: #fff;
560
+ border-left: #ddd solid 2px;
561
+ }
562
+
563
+ .whois-object tr td:first-of-type {
564
+ padding-left: 10px;
565
+ }
566
+
567
+ .whois-object tr td:last-child {
568
+ padding-right: 10px;
569
+ }
570
+
571
+ .raw pre {
572
+ line-height: initial;
573
+ white-space: pre-wrap; /* css-3 */
574
+ }
575
+
576
+ /* Diagnostic */
577
+
578
+ #diagnostic h3 {
579
+ margin-top: 0;
580
+ }
581
+ #diagnostic .diag-section {
582
+ background-color: #f7f7f7;
583
+ border: 2px solid #ccc;
584
+ width: 100%;
585
+ max-width:1000px;
586
+ margin-top: 1em;
587
+ padding: 1em;
588
+ }
589
+ #diagnostic table {
590
+ background-color: #fff;
591
+ width:100%;
592
+ border: 2px solid #eee;
593
+ }
594
+ #diagnostic table th {
595
+ padding: 2px 8px 2px 8px;
596
+ text-align: left;
597
+ }
598
+ #diagnostic table td {
599
+ padding: 2px 8px 2px 8px;
600
+ vertical-align: top;
601
+ }
602
+ #diagnostic textarea {
603
+ width: 100%;
604
+ height: 400px;
605
+ margin-bottom: 1em;
606
+ padding: 4px;
607
+ }
608
+
609
+ #diagnostic .diag-table{
610
+ width:100%;
611
+ border: none;
612
+ }
613
+ #diagnostic .diag-td {
614
+ padding: 10px;
615
+ width:50%;
616
+ }
617
+
618
+
619
+ .cerber-button span.dashicons-before {
620
+ display: inline-block;
621
+ line-height: 18px;
622
+ margin-left: 0.5em;
623
+ margin-right: 0.5em;
624
+ }
625
+
626
+ @font-face {
627
+ font-family: "cerber-icon";
628
+ src: url('fonts/cerber.eot');
629
+ src: url('fonts/cerber.eot#iefix') format('embedded-opentype'),
630
+ url('fonts/cerber.ttf') format('truetype'),
631
+ url('fonts/cerber.woff') format('woff');
632
+ font-weight: normal;
633
+ font-style: normal;
634
+ }
635
+
636
+ #adminmenu .toplevel_page_cerber-security div.wp-menu-image::before {
637
+ font-family: "cerber-icon" !important;
638
+ content: '\10ffff';
639
+ -webkit-font-smoothing: antialiased;
640
+ -moz-osx-font-smoothing: grayscale;
641
+ /* padding: 4px 0 !important;
642
+ margin-left: -0.6em !important;
643
+ font-size: 23px !important;
644
+ */
645
+ padding: 2px 0 !important;
646
+ margin-left: -0.6em !important;
647
+ font-size: 28px !important;
648
+ }
649
+
650
+ /* Avatars */
651
+ table.crb-avatar{
652
+ margin: 0.2em 0 0.2em 0;
653
+ border-collapse: collapse;
654
+ }
655
+ table.crb-avatar tr {
656
+ background: transparent !important;
657
+ }
658
+ table.crb-avatar td {
659
+ padding: 0;
660
+ vertical-align:top;
661
+ }
662
+ table.crb-avatar img{
663
+ margin-right: 10px;
664
+ }
665
+ table.crb-avatar p{
666
+ margin-bottom: 0;
667
+ }
668
+ table.crb-avatar a{
669
+ display:block;
670
+ margin-top:0;
671
+ line-height:100%;
672
+ }
673
+
674
+ /* Doesn't work */
675
+ .crb-table .avatar{
676
+ float: left;
677
+ margin-right: 10px;
678
+ }
679
+
680
+ /* Help tab */
681
+ #crb-help {
682
+ padding: 0 10px;
683
+ }
684
+ #crb-help h3{
685
+ margin-top: 2em;
686
+ margin-bottom: 0.4em;
687
+ }
688
+ #crb-help h3:first-child{
689
+ margin-top: 1em;
690
+ }
691
+
692
+ /* Help sign */
693
+
694
+ .help-sign {
695
+ margin-left: 6px;
696
+ padding: 2px 6px;
697
+ position: relative;
698
+ top: -1px;
699
+ text-decoration: none;
700
+ border: 1px solid #ccc;
701
+ border-radius: 2px;
702
+ background: #f7f7f7;
703
+ font-weight: 600;
704
+ font-size: 80%;
705
+ line-height: normal;
706
+ color: #0073aa;
707
+ }
assets/admin.js ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery(document).ready(function ($) {
2
+
3
+ $(".delete_entry").click(function () {
4
+ /* if (!confirm('<?php _e('Are you sure?','wp-cerber') ?>')) return; */
5
+ $.post(ajaxurl, {
6
+ action: 'cerber_ajax',
7
+ acl_delete: $(this).data('ip'),
8
+ ajax_nonce: crb_ajax_nonce
9
+ },
10
+ onDeleteSuccess
11
+ );
12
+ /*$(this).parent().parent().fadeOut(500);*/
13
+ /* $(this).closest("tr").FadeOut(500); */
14
+ });
15
+ function onDeleteSuccess(server_data) {
16
+ var cerber_response = $.parseJSON(server_data);
17
+ $('.delete_entry[data-ip="' + cerber_response['deleted_ip'] + '"]').parent().parent().fadeOut(300);
18
+ }
19
+
20
+
21
+ if ($(".crb-table").length) {
22
+ function setHostNames(server_data) {
23
+ var hostnames = $.parseJSON(server_data);
24
+ $(".crb-table .crb-no-hn").each(function (index) {
25
+ $(this).replaceWith(hostnames[$(this).data('ip-id')]);
26
+ });
27
+ }
28
+
29
+ var ip_list = $(".crb-table .crb-no-hn").map(
30
+ function () {
31
+ return $(this).data('ip-id');
32
+ }
33
+ );
34
+ if (ip_list.length != 0) {
35
+ $.post(ajaxurl, {
36
+ action: 'cerber_ajax',
37
+ get_hostnames: ip_list.toArray()
38
+ }, setHostNames);
39
+ }
40
+ }
41
+
42
+ /*
43
+ $('#add-acl-black').submit(function( event ) {
44
+ $(this).find('[name="add_acl_B"]').val($(this).find("button:focus").val());
45
+ });
46
+ */
47
+
48
+ $(".cerber-dismiss").click(function () {
49
+ $(this).closest('.cerber-msg').fadeOut(500);
50
+
51
+ $.get(ajaxurl, {
52
+ action: 'cerber_ajax',
53
+ dismiss_info: 1,
54
+ button_id: $(this).attr('id'),
55
+ }
56
+ );
57
+ });
58
+
59
+ $(".diag-text").on("keypress", function(e) {
60
+ e.preventDefault();
61
+ });
62
+
63
+ });
assets/ajax-loader-ip.gif ADDED
Binary file
assets/bgwidget.png ADDED
Binary file
assets/flags/ad.gif ADDED
Binary file
assets/flags/ae.gif ADDED
Binary file
assets/flags/af.gif ADDED
Binary file
assets/flags/ag.gif ADDED
Binary file
assets/flags/ai.gif ADDED
Binary file
assets/flags/al.gif ADDED
Binary file
assets/flags/am.gif ADDED
Binary file
assets/flags/an.gif ADDED
Binary file
assets/flags/ao.gif ADDED
Binary file
assets/flags/ar.gif ADDED
Binary file
assets/flags/as.gif ADDED
Binary file
assets/flags/at.gif ADDED
Binary file
assets/flags/au.gif ADDED
Binary file
assets/flags/aw.gif ADDED
Binary file
assets/flags/ax.gif ADDED
Binary file
assets/flags/az.gif ADDED
Binary file
assets/flags/ba.gif ADDED
Binary file
assets/flags/bb.gif ADDED
Binary file
assets/flags/bd.gif ADDED
Binary file
assets/flags/be.gif ADDED
Binary file
assets/flags/bf.gif ADDED
Binary file
assets/flags/bg.gif ADDED
Binary file
assets/flags/bh.gif ADDED
Binary file
assets/flags/bi.gif ADDED
Binary file
assets/flags/bj.gif ADDED
Binary file
assets/flags/bm.gif ADDED
Binary file
assets/flags/bn.gif ADDED
Binary file
assets/flags/bo.gif ADDED
Binary file
assets/flags/br.gif ADDED
Binary file
assets/flags/bs.gif ADDED
Binary file
assets/flags/bt.gif ADDED
Binary file
assets/flags/bv.gif ADDED
Binary file
assets/flags/bw.gif ADDED
Binary file
assets/flags/by.gif ADDED
Binary file
assets/flags/bz.gif ADDED
Binary file
assets/flags/ca.gif ADDED
Binary file
assets/flags/cc.gif ADDED
Binary file
assets/flags/cd.gif ADDED
Binary file
assets/flags/cf.gif ADDED
Binary file
assets/flags/cg.gif ADDED
Binary file
assets/flags/ch.gif ADDED
Binary file
assets/flags/ci.gif ADDED
Binary file
assets/flags/ck.gif ADDED
Binary file
assets/flags/cl.gif ADDED
Binary file
assets/flags/cm.gif ADDED
Binary file
assets/flags/cn.gif ADDED
Binary file
assets/flags/co.gif ADDED
Binary file
assets/flags/cr.gif ADDED
Binary file
assets/flags/cs.gif ADDED
Binary file
assets/flags/cu.gif ADDED
Binary file
assets/flags/cv.gif ADDED
Binary file
assets/flags/cx.gif ADDED
Binary file
assets/flags/cy.gif ADDED
Binary file
assets/flags/cz.gif ADDED
Binary file
assets/flags/de.gif ADDED
Binary file
assets/flags/dj.gif ADDED
Binary file
assets/flags/dk.gif ADDED
Binary file
assets/flags/dm.gif ADDED
Binary file
assets/flags/do.gif ADDED
Binary file
assets/flags/dz.gif ADDED
Binary file
assets/flags/ec.gif ADDED
Binary file
assets/flags/ee.gif ADDED
Binary file
assets/flags/eg.gif ADDED
Binary file
assets/flags/eh.gif ADDED
Binary file
assets/flags/er.gif ADDED
Binary file
assets/flags/es.gif ADDED
Binary file
assets/flags/et.gif ADDED
Binary file
assets/flags/eu.gif ADDED
Binary file
assets/flags/fi.gif ADDED
Binary file
assets/flags/fj.gif ADDED
Binary file
assets/flags/fk.gif ADDED
Binary file
assets/flags/fm.gif ADDED
Binary file
assets/flags/fo.gif ADDED
Binary file
assets/flags/fr.gif ADDED
Binary file
assets/flags/ga.gif ADDED
Binary file
assets/flags/gb.gif ADDED
Binary file
assets/flags/gd.gif ADDED
Binary file
assets/flags/ge.gif ADDED
Binary file
assets/flags/gf.gif ADDED
Binary file
assets/flags/gh.gif ADDED
Binary file
assets/flags/gi.gif ADDED
Binary file
assets/flags/gl.gif ADDED
Binary file
assets/flags/gm.gif ADDED
Binary file
assets/flags/gn.gif ADDED
Binary file
assets/flags/gp.gif ADDED
Binary file
assets/flags/gq.gif ADDED
Binary file
assets/flags/gr.gif ADDED
Binary file
assets/flags/gs.gif ADDED
Binary file
assets/flags/gt.gif ADDED
Binary file
assets/flags/gu.gif ADDED
Binary file
assets/flags/gw.gif ADDED
Binary file
assets/flags/gy.gif ADDED
Binary file
assets/flags/hk.gif ADDED
Binary file
assets/flags/hm.gif ADDED
Binary file
assets/flags/hn.gif ADDED
Binary file
assets/flags/hr.gif ADDED
Binary file
assets/flags/ht.gif ADDED
Binary file
assets/flags/hu.gif ADDED
Binary file
assets/flags/id.gif ADDED
Binary file
assets/flags/ie.gif ADDED
Binary file
assets/flags/il.gif ADDED
Binary file
assets/flags/in.gif ADDED
Binary file
assets/flags/io.gif ADDED
Binary file
assets/flags/iq.gif ADDED
Binary file
assets/flags/ir.gif ADDED
Binary file
assets/flags/is.gif ADDED
Binary file
assets/flags/it.gif ADDED
Binary file
assets/flags/jm.gif ADDED
Binary file
assets/flags/jo.gif ADDED
Binary file
assets/flags/jp.gif ADDED
Binary file
assets/flags/ke.gif ADDED
Binary file
assets/flags/kg.gif ADDED
Binary file
assets/flags/kh.gif ADDED
Binary file
assets/flags/ki.gif ADDED
Binary file
assets/flags/km.gif ADDED
Binary file
assets/flags/kn.gif ADDED
Binary file
assets/flags/kp.gif ADDED
Binary file
assets/flags/kr.gif ADDED
Binary file
assets/flags/kw.gif ADDED
Binary file
assets/flags/ky.gif ADDED
Binary file
assets/flags/kz.gif ADDED
Binary file
assets/flags/la.gif ADDED
Binary file
assets/flags/lb.gif ADDED
Binary file
assets/flags/lc.gif ADDED
Binary file
assets/flags/li.gif ADDED
Binary file
assets/flags/lk.gif ADDED
Binary file
assets/flags/lr.gif ADDED
Binary file
assets/flags/ls.gif ADDED
Binary file
assets/flags/lt.gif ADDED
Binary file
assets/flags/lu.gif ADDED
Binary file
assets/flags/lv.gif ADDED
Binary file
assets/flags/ly.gif ADDED
Binary file
assets/flags/ma.gif ADDED
Binary file
assets/flags/mc.gif ADDED
Binary file
assets/flags/md.gif ADDED
Binary file
assets/flags/me.gif ADDED
Binary file
assets/flags/mg.gif ADDED
Binary file
assets/flags/mh.gif ADDED
Binary file
assets/flags/mk.gif ADDED
Binary file
assets/flags/ml.gif ADDED
Binary file
assets/flags/mm.gif ADDED
Binary file
assets/flags/mn.gif ADDED
Binary file
assets/flags/mo.gif ADDED
Binary file
assets/flags/mp.gif ADDED
Binary file
assets/flags/mq.gif ADDED
Binary file
assets/flags/mr.gif ADDED
Binary file
assets/flags/ms.gif ADDED
Binary file
assets/flags/mt.gif ADDED
Binary file
assets/flags/mu.gif ADDED
Binary file
assets/flags/mv.gif ADDED
Binary file
assets/flags/mw.gif ADDED
Binary file
assets/flags/mx.gif ADDED
Binary file
assets/flags/my.gif ADDED
Binary file
assets/flags/mz.gif ADDED
Binary file
assets/flags/na.gif ADDED
Binary file
assets/flags/nc.gif ADDED
Binary file
assets/flags/ne.gif ADDED
Binary file
assets/flags/nf.gif ADDED
Binary file
assets/flags/ng.gif ADDED
Binary file
assets/flags/ni.gif ADDED
Binary file
assets/flags/nl.gif ADDED
Binary file
assets/flags/no.gif ADDED
Binary file
assets/flags/np.gif ADDED
Binary file
assets/flags/nr.gif ADDED
Binary file
assets/flags/nu.gif ADDED
Binary file
assets/flags/nz.gif ADDED
Binary file
assets/flags/om.gif ADDED
Binary file
assets/flags/pa.gif ADDED
Binary file
assets/flags/pe.gif ADDED
Binary file
assets/flags/pf.gif ADDED
Binary file
assets/flags/pg.gif ADDED
Binary file
assets/flags/ph.gif ADDED
Binary file
assets/flags/pk.gif ADDED
Binary file
assets/flags/pl.gif ADDED
Binary file
assets/flags/pm.gif ADDED
Binary file
assets/flags/pn.gif ADDED
Binary file
assets/flags/pr.gif ADDED
Binary file
assets/flags/ps.gif ADDED
Binary file
assets/flags/pt.gif ADDED
Binary file
assets/flags/pw.gif ADDED
Binary file
assets/flags/py.gif ADDED
Binary file
assets/flags/qa.gif ADDED
Binary file
assets/flags/re.gif ADDED
Binary file
assets/flags/ro.gif ADDED
Binary file
assets/flags/rs.gif ADDED
Binary file
assets/flags/ru.gif ADDED
Binary file
assets/flags/rw.gif ADDED
Binary file
assets/flags/sa.gif ADDED
Binary file
assets/flags/sb.gif ADDED
Binary file
assets/flags/sc.gif ADDED
Binary file
assets/flags/sd.gif ADDED
Binary file
assets/flags/se.gif ADDED
Binary file
assets/flags/sg.gif ADDED
Binary file
assets/flags/sh.gif ADDED
Binary file
assets/flags/si.gif ADDED
Binary file
assets/flags/sj.gif ADDED
Binary file
assets/flags/sk.gif ADDED
Binary file
assets/flags/sl.gif ADDED
Binary file
assets/flags/sm.gif ADDED
Binary file
assets/flags/sn.gif ADDED
Binary file
assets/flags/so.gif ADDED
Binary file
assets/flags/sr.gif ADDED
Binary file
assets/flags/st.gif ADDED
Binary file
assets/flags/sv.gif ADDED
Binary file
assets/flags/sy.gif ADDED
Binary file
assets/flags/sz.gif ADDED
Binary file
assets/flags/tc.gif ADDED
Binary file
assets/flags/td.gif ADDED
Binary file
assets/flags/tf.gif ADDED
Binary file
assets/flags/tg.gif ADDED
Binary file
assets/flags/th.gif ADDED
Binary file
assets/flags/tj.gif ADDED
Binary file
assets/flags/tk.gif ADDED
Binary file
assets/flags/tl.gif ADDED
Binary file
assets/flags/tm.gif ADDED
Binary file
assets/flags/tn.gif ADDED
Binary file
assets/flags/to.gif ADDED
Binary file
assets/flags/tr.gif ADDED
Binary file
assets/flags/tt.gif ADDED
Binary file
assets/flags/tv.gif ADDED
Binary file
assets/flags/tw.gif ADDED
Binary file
assets/flags/tz.gif ADDED
Binary file
assets/flags/ua.gif ADDED
Binary file
assets/flags/ug.gif ADDED
Binary file
assets/flags/um.gif ADDED
Binary file
assets/flags/us.gif ADDED
Binary file
assets/flags/uy.gif ADDED
Binary file
assets/flags/uz.gif ADDED
Binary file
assets/flags/va.gif ADDED
Binary file
assets/flags/vc.gif ADDED
Binary file
assets/flags/ve.gif ADDED
Binary file
assets/flags/vg.gif ADDED
Binary file
assets/flags/vi.gif ADDED
Binary file
assets/flags/vn.gif ADDED
Binary file
assets/flags/vu.gif ADDED
Binary file
assets/flags/wf.gif ADDED
Binary file
assets/flags/ws.gif ADDED
Binary file
assets/flags/ye.gif ADDED
Binary file
assets/flags/yt.gif ADDED
Binary file
assets/flags/za.gif ADDED
Binary file
assets/flags/zm.gif ADDED
Binary file
assets/flags/zw.gif ADDED
Binary file
assets/fonts/cerber.eot ADDED
Binary file
assets/fonts/cerber.ttf ADDED
Binary file
assets/fonts/cerber.woff ADDED
Binary file
assets/goo-translate.png ADDED
Binary file
assets/icon-128x128.png ADDED
Binary file
assets/icon-256x256.png ADDED
Binary file
assets/inspector.png ADDED
Binary file
cerber-lab.php ADDED
@@ -0,0 +1,617 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Cerber Laboratory (cerberlab.net) specific routines.
4
+
5
+ Copyright (C) 2015-17 CERBER TECH INC., Gregory Markov, http://wpcerber.com
6
+
7
+ Licenced under the GNU GPL.
8
+
9
+ This program is free software; you can redistribute it and/or modify
10
+ it under the terms of the GNU General Public License as published by
11
+ the Free Software Foundation; either version 3 of the License, or
12
+ (at your option) any later version.
13
+
14
+ This program is distributed in the hope that it will be useful,
15
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
+ GNU General Public License for more details.
18
+
19
+ You should have received a copy of the GNU General Public License
20
+ along with this program; if not, write to the Free Software
21
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22
+ */
23
+
24
+ /*
25
+
26
+ *========================================================================*
27
+ | |
28
+ | ATTENTION! Do not change or edit this file! |
29
+ | |
30
+ *========================================================================*
31
+
32
+ */
33
+
34
+ // If this file is called directly, abort executing.
35
+ if ( ! defined( 'WPINC' ) ) { exit; }
36
+
37
+ define( 'LAB_NODE_MAX', 7 ); // Maximum node ID
38
+ define( 'LAB_DELAY_MAX', 1500 ); // milliseconds, reasonable maximum of processing time while connecting to a node
39
+ define( 'LAB_RECHECK', 15 * 60 ); // seconds, allowed interval for rechecking nodes
40
+ define( 'LAB_INTERVAL', 180 ); // seconds, push interval
41
+ define( 'LAB_DNS_TTL', 3 * 24 * 3600 ); // seconds, interval of updating DNS cache for nodes IPs
42
+ define( 'LAB_IP_OK', 100 ); // an ideal, the best possible reputation
43
+ define( 'LAB_KEY_LENGTH', 32 );
44
+
45
+ /**
46
+ * Is IP blocked globally in Cerber Lab?
47
+ *
48
+ * @param string $ip IP address to check against global black list
49
+ * @param bool $ask If true, send request to Cerber Lab if no IP in the local cache found
50
+ *
51
+ * @return bool true if IP is blocked
52
+ */
53
+ function lab_is_blocked( $ip, $ask = true ) {
54
+
55
+ if ( is_ip_private( $ip ) ) {
56
+ return false;
57
+ }
58
+
59
+ $tag = cerber_acl_check( $ip );
60
+ if ( $tag == 'W' ) {
61
+ return false;
62
+ }
63
+ if ( $tag == 'B' ) {
64
+ return true;
65
+ }
66
+
67
+ $rep = lab_get_reputation( $ip, $ask );
68
+
69
+ if ( is_numeric( $rep ) && $rep < LAB_IP_OK ) {
70
+ return true;
71
+ }
72
+
73
+ return false;
74
+ }
75
+
76
+ /**
77
+ * Return reputation for a given IP
78
+ *
79
+ * @param string $ip
80
+ * @param bool $ask If true, send request to Cerber Lab (if no IP in the local cache found)
81
+ *
82
+ * @return int Reputation for a given IP
83
+ */
84
+ function lab_get_reputation( $ip, $ask = true ) {
85
+ global $wpdb;
86
+
87
+ if ( ! $ip = filter_var( $ip, FILTER_VALIDATE_IP ) ) {
88
+ return LAB_IP_OK;
89
+ }
90
+ if ( is_ip_private( $ip ) ) {
91
+ return LAB_IP_OK;
92
+ }
93
+
94
+ $reputation = $wpdb->get_var( 'SELECT reputation FROM ' . CERBER_LAB_IP_TABLE . ' WHERE ip = "' . $ip . '"' );
95
+ if ( is_numeric( $reputation ) ) {
96
+ return $reputation;
97
+ }
98
+ elseif (!$ask){
99
+ return LAB_IP_OK;
100
+ }
101
+
102
+ $ip_id = cerber_get_id_ip( $ip );
103
+ $lab_data = lab_api_send_request( array( 'ask_cerberlab' => array( $ip_id => $ip ) ) );
104
+
105
+ if ( ! $lab_data || empty( $lab_data['response'][ $ip_id ]['reputation'] ) ) {
106
+ $reputation = LAB_IP_OK;
107
+ $expires = time() + 3600;
108
+ }
109
+ else {
110
+ $rep = $lab_data['response'][ $ip_id ]['reputation'];
111
+ $reputation = absint( $rep['value'] );
112
+ $expires = time() + absint( $rep['ttl'] );
113
+ }
114
+
115
+ $wpdb->query( 'INSERT INTO ' . CERBER_LAB_IP_TABLE . ' (ip, reputation, expires) VALUES ("' . $ip . '",' . $reputation . ',' . $expires . ')' );
116
+
117
+ return $reputation;
118
+ }
119
+
120
+
121
+ /**
122
+ * Send request to a Cerber Lab node.
123
+ *
124
+ * @param array $workload Workload
125
+ *
126
+ * @return array|bool
127
+ */
128
+ function lab_api_send_request($workload = array()) {
129
+ global $node_delay;
130
+
131
+ $push = lab_get_push();
132
+
133
+ if (!$workload && !$push) return false;
134
+
135
+ $key = lab_get_key();
136
+
137
+ if ($workload && empty($key[2]) && !$push) {
138
+ return false;
139
+ }
140
+
141
+ $request = array(
142
+ 'key' => $key,
143
+ 'workload' => $workload,
144
+ 'push' => $push,
145
+ 'lang' => get_bloginfo( 'language' ),
146
+ 'version' => CERBER_VER,
147
+ );
148
+
149
+ $ret = lab_send_request($request);
150
+
151
+ // If something goes wrong, take the next closest node
152
+ if (!$ret){
153
+ $ret = lab_send_request($request);
154
+ }
155
+ elseif (($node_delay * 1000) > LAB_DELAY_MAX){
156
+ lab_check_nodes(); // Recheck nodes for further requests
157
+ }
158
+
159
+ if ( $ret ) {
160
+ lab_trunc_push();
161
+ /*
162
+ if ( ! empty( $ret['response']['expires_gmt'] ) ) {
163
+ if ( $key[3] != $ret['response']['expires_gmt'] ) {
164
+ $key[3] = $ret['response']['expires_gmt'];
165
+ update_site_option( '_cerberkey_', $key );
166
+ }
167
+ }
168
+ */
169
+ }
170
+
171
+ return $ret;
172
+ }
173
+
174
+ /**
175
+ * Send an HTTP request to a node.
176
+ * If the previous attempt was failed and $node_id is not set, use next closest node.
177
+ *
178
+ * @param $request array
179
+ * @param null $node_id Node ID if not set, will use the last closest and active node
180
+ * @param string $scheme http|https
181
+ *
182
+ * @return array|bool
183
+ */
184
+ function lab_send_request($request, $node_id = null, $scheme = null) {
185
+ global $node_delay, $wp_cerber;
186
+
187
+ $node = lab_get_node($node_id);
188
+ if (!$scheme) {
189
+ if ($wp_cerber->getSettings('cerberproto')) $scheme = 'https';
190
+ else $scheme = 'http';
191
+ }
192
+ elseif ($scheme != 'http' || $scheme != 'https') $scheme = 'https';
193
+
194
+ $body = array();
195
+ $body['container'] = $request;
196
+ $body['nodes'] = lab_get_nodes();
197
+
198
+ $request_body = json_encode($body);
199
+ if (JSON_ERROR_NONE != json_last_error()) {
200
+ //'Unable to encode request: '.json_last_error_msg(), array(__FUNCTION__,__LINE__));
201
+ return false;
202
+ }
203
+
204
+ $headers = array(
205
+ 'Host:'.$node[2],
206
+ 'Content-Type: application/json',
207
+ 'Accept: application/json',
208
+ 'Cerber: '.CERBER_VER,
209
+ /* 'Authorization: Bearer ' . $fields['key']*/
210
+ );
211
+
212
+ $curl = @curl_init(); // @since 4.32
213
+ if (!$curl) return false;
214
+
215
+ curl_setopt_array($curl, array(
216
+ CURLOPT_URL => $scheme . '://' . $node[2] . '/engine/v1/',
217
+ CURLOPT_POST => true,
218
+ CURLOPT_HTTPHEADER => $headers,
219
+ CURLOPT_POSTFIELDS => $request_body,
220
+ CURLOPT_RETURNTRANSFER => true,
221
+ CURLOPT_USERAGENT => 'Cerber Security Plugin ' . CERBER_VER,
222
+ CURLOPT_CONNECTTIMEOUT => 2,
223
+ CURLOPT_TIMEOUT => 4, // including CURLOPT_CONNECTTIMEOUT
224
+ CURLOPT_DNS_CACHE_TIMEOUT => 4 * 3600,
225
+ CURLOPT_SSL_VERIFYHOST => 2,
226
+ CURLOPT_SSL_VERIFYPEER => true,
227
+ ));
228
+
229
+ //curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
230
+ //curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
231
+
232
+ $start = microtime( true );
233
+ $data = curl_exec($curl);
234
+ $stop = microtime( true );
235
+
236
+ //if (!$data) // curl_error($curl) . curl_errno($curl) );
237
+
238
+ curl_close($curl);
239
+
240
+ $node_delay = $stop - $start;
241
+
242
+ $response = lab_parse_response( $data );
243
+
244
+ lab_update_node_last($node[0], array( $node_delay, $response['status'], $response['error'], time(), $scheme, $node[1] ));
245
+
246
+ if ($response['error']) return false;
247
+ return $response;
248
+ }
249
+
250
+ /**
251
+ * Parse node response and detect possible errors
252
+ *
253
+ * @param $response
254
+ *
255
+ * @return array|mixed|object
256
+ */
257
+ function lab_parse_response($response){
258
+ $ret = array( 'status' => 1, 'error' => false );
259
+
260
+ if (!empty($response)) {
261
+ $ret = json_decode( $response, true );
262
+ if ( JSON_ERROR_NONE != json_last_error() ) {
263
+ $ret['status'] = 0;
264
+ $ret['error'] = 'JSON ERROR: '.json_last_error_msg();
265
+ }
266
+ // Is everything is OK?
267
+ if (empty($ret['key']) || !empty($ret['error'])){
268
+ $ret['status'] = 0; // Not OK
269
+ }
270
+ }
271
+ else {
272
+ $ret['status'] = 0;
273
+ $ret['error'] = 'No node answer';
274
+ }
275
+
276
+ if (!isset($ret['error'])) $ret['error'] = false;
277
+
278
+ return $ret;
279
+ }
280
+
281
+ /**
282
+ * Return "the best" (closest) node if $node_id is not specified
283
+ *
284
+ * @param $node_id integer node ID
285
+ * @return array first element is ID of closest node, second is an IP address
286
+ */
287
+ function lab_get_node($node_id = null){
288
+
289
+ $node_id = absint($node_id);
290
+ if ($node_id) $best_id = $node_id;
291
+ else $best_id = null;
292
+
293
+ $nodes = lab_get_nodes();
294
+
295
+ if (!$best_id) {
296
+ if ( $nodes && ! empty( $nodes['best'] ) ) {
297
+ $best_id = $nodes['best'];
298
+ if ( ! $nodes['nodes'][ $best_id ]['last'][1] ) { // this node was not active at the last request
299
+ unset( $nodes['nodes'][ $best_id ] );
300
+ $best_id = lab_best_node( $nodes['nodes'] );
301
+ }
302
+ }
303
+ }
304
+
305
+ if (!$best_id || $best_id > LAB_NODE_MAX) $best_id = rand(1, LAB_NODE_MAX);
306
+
307
+ $name = 'node' . $best_id . '.cerberlab.net';
308
+
309
+ $host = null;
310
+ if ( ! empty( $nodes['nodes'][ $best_id ]['last'] ) ) {
311
+ $node = $nodes['nodes'][ $best_id ]['last'];
312
+ if ( $node[5] && ( time() - $node[3] ) < LAB_DNS_TTL ) {
313
+ $host = $node[5];
314
+ }
315
+ }
316
+ if ( ! $host ) {
317
+ $host = @gethostbyname( $name );
318
+ }
319
+
320
+ return array($best_id, $host, $name);
321
+ }
322
+
323
+ /**
324
+ * Check all nodes and find the closest and active one.
325
+ *
326
+ * @param bool $force if true perform check without checking allowed interval LAB_RECHECK
327
+ *
328
+ * @return bool|int
329
+ */
330
+ function lab_check_nodes($force = false) {
331
+
332
+ $nodes = lab_get_nodes();
333
+ if (!$force && isset($nodes['last_check']) && (time() - $nodes['last_check']) < LAB_RECHECK ) return false;
334
+
335
+ $nodes['nodes'] = array(); // clean up before testing
336
+ update_site_option( '_cerberlab_', $nodes );
337
+
338
+ for ( $i = 1; $i <= LAB_NODE_MAX; $i ++ ) {
339
+ lab_send_request( array( 'test' => 'test', 'key' => 1 ), $i );
340
+ }
341
+
342
+ $nodes = lab_get_nodes();
343
+ $nodes['best'] = lab_best_node($nodes['nodes']);
344
+ $nodes['last_check'] = time();
345
+
346
+ update_site_option( '_cerberlab_', $nodes );
347
+
348
+ return $nodes['best'];
349
+ }
350
+
351
+ /**
352
+ * Find the best (closest) and active node in the list of nodes
353
+ *
354
+ * @param array $nodes
355
+ *
356
+ * @return int
357
+ */
358
+ function lab_best_node($nodes = array()){
359
+ $active_nodes = array();
360
+ foreach ( $nodes as $id => $data ) {
361
+ if ($data['last']['1']) $active_nodes[ $id ] = $data['last']['0']; // only active nodes must be in the list
362
+ }
363
+ if ($active_nodes){
364
+ asort( $active_nodes );
365
+ reset( $active_nodes );
366
+ $best_id = key( $active_nodes );
367
+ }
368
+ else $best_id = 0; // no active nodes found :-(
369
+ return $best_id;
370
+ }
371
+ /**
372
+ * Update node status
373
+ *
374
+ * @param $node_id
375
+ * @param array $last
376
+ *
377
+ * @return bool
378
+ */
379
+ function lab_update_node_last($node_id, $last = array()) {
380
+ $nodes = lab_get_nodes();
381
+ if ( ! $nodes ) {
382
+ $nodes = array();
383
+ }
384
+ $nodes['nodes'][$node_id]['last'] = $last;
385
+ return update_site_option('_cerberlab_', $nodes);
386
+ }
387
+
388
+ function lab_get_nodes() {
389
+ return get_site_option( '_cerberlab_' );
390
+ }
391
+
392
+ /**
393
+ * Small diagnostic report about nodes for admin
394
+ *
395
+ * @return string Report to show in Dashboard
396
+ */
397
+ function lab_status(){
398
+ global $wp_cerber;
399
+
400
+ $ret = '';
401
+
402
+ if (!$wp_cerber->getSettings('cerberlab')) $ret .= '<p><b>Cerber Lab connection is disabled</b></p>';
403
+
404
+ $nodes = lab_get_nodes();
405
+ if (empty($nodes['nodes'])) return $ret . '<p>No information. No request has been made yet.</p>';
406
+
407
+ $ret .= '<table><tr><th>Node</th><th>Processing time</th><th>Operational status</th><th>Info</th><th>IP address</th><th>Last request</th><th>Protocol used</th></tr>';
408
+ foreach ( $nodes['nodes'] as $id => $node ) {
409
+ $delay = round(1000 * $node['last'][0]) . ' ms';
410
+ $ago = cerber_ago_time($node['last'][3]);
411
+ $status = $node['last'][1];
412
+ if ($status) {
413
+ $class = 'node-ok';
414
+ $status = '<span style = "color:green;">'.$status.'</span>';
415
+ }
416
+ else {
417
+ $class ='node-error';
418
+ $status = 'Down';
419
+ $delay = 'Unknown';
420
+ }
421
+ $ret .= '<tr class="'.$class.'"><td>'.$id.'</td><td>'.$delay.'</td><td>'.$status.'</td><td>'.$node['last'][2].'</td><td>'.$node['last'][5].'</td><td>'.$ago.'</td><td>'.$node['last'][4].'</td><td>';
422
+ }
423
+ $ret .= '</table>';
424
+
425
+ if (!empty($nodes['best'])) $ret .= '<p>Closest (fastest) node: '.$nodes['best'].'</p>';
426
+ if (!empty($nodes['last_check'])) $ret .= '<p>Last check for all nodes: '.cerber_ago_time($nodes['last_check']).'</p>';
427
+ $key = lab_get_key();
428
+ $ret .= '<p>Site ID: '.$key[0].'</p>';
429
+
430
+ return $ret;
431
+ }
432
+ /**
433
+ * Save data for lab
434
+ *
435
+ * @param $ip string IP address
436
+ * @param $reason_id integer Why IP is malicious
437
+ * @param $details
438
+ */
439
+ function lab_save_push( $ip, $reason_id, $details ) {
440
+ global $wpdb, $wp_cerber;
441
+ if ( is_ip_private( $ip ) ) {
442
+ return;
443
+ }
444
+ if ( $wp_cerber->getSettings( 'cerberlab' ) ) {
445
+ $wpdb->insert( CERBER_LAB_TABLE, array(
446
+ 'ip' => $ip,
447
+ 'reason_id' => $reason_id,
448
+ 'details' => $details,
449
+ 'stamp' => time(),
450
+ ), array( '%s', '%d', '%s', '%d' ) );
451
+ }
452
+ }
453
+ /**
454
+ * Get data for lab
455
+ *
456
+ * @return array|bool
457
+ */
458
+ function lab_get_push() {
459
+ global $wpdb;
460
+
461
+ $result = $wpdb->get_results( 'SELECT * FROM ' . CERBER_LAB_TABLE, ARRAY_A );
462
+ if ( $result ) {
463
+ return array( 'type_1' => $result );
464
+ }
465
+
466
+ return false;
467
+ }
468
+ function lab_trunc_push(){
469
+ global $wpdb;
470
+ $wpdb->query( 'TRUNCATE TABLE ' . CERBER_LAB_TABLE );
471
+ }
472
+
473
+ add_action('shutdown','cerber_push_lab');
474
+ function cerber_push_lab() {
475
+ global $wp_cerber;
476
+
477
+ if (!$wp_cerber->getSettings('cerberlab')) return;
478
+ if ( get_transient( '_cerberpush_' ) ) {
479
+ return;
480
+ }
481
+ lab_api_send_request();
482
+ set_transient( '_cerberpush_', 1, LAB_INTERVAL );
483
+ }
484
+
485
+ function lab_get_key($regenerate = false){
486
+ $key = get_site_option( '_cerberkey_' );
487
+ if ($regenerate || !$key || !is_array($key)){
488
+ if (is_multisite()){
489
+ $home = network_home_url();
490
+ }
491
+ else {
492
+ $home = home_url();
493
+ }
494
+ if ( $host = parse_url( $home, PHP_URL_HOST ) ) {
495
+ $site_id = md5( $host );
496
+ }
497
+ else {
498
+ $site_id = md5( $home );
499
+ }
500
+ $new = array( $site_id, time() );
501
+ if (isset($key[2])) $new[2] = $key[2];
502
+ update_site_option( '_cerberkey_', $new );
503
+ }
504
+ return $key;
505
+ }
506
+
507
+ function lab_update_key( $lic, $expires = 0 ) {
508
+ $key = lab_get_key();
509
+ $key[2] = strtoupper($lic);
510
+ $key[3] = absint($expires);
511
+ update_site_option( '_cerberkey_', $key );
512
+ }
513
+
514
+ function lab_validate_key( $lic = '' ) {
515
+ $key = lab_get_key();
516
+ if (!$lic){
517
+ if (empty($key[2])) return false;
518
+ $lic = $key[2];
519
+ }
520
+ $request = array( 'key' => $key, 'validate' => $lic );
521
+ $i = LAB_NODE_MAX;
522
+ while ( !( $ret = lab_send_request( $request ) ) && $i > 0 ) {
523
+ $i--;
524
+ }
525
+
526
+ if (!$ret) return false;
527
+
528
+ $expires = 0;
529
+ if ( ! empty( $ret['response']['expires_gmt'] ) ) {
530
+ $expires = absint($ret['response']['expires_gmt']);
531
+ }
532
+
533
+ lab_update_key($lic, $expires);
534
+
535
+ if ( !$expires ) {
536
+ return false;
537
+ }
538
+
539
+ $df = get_option( 'date_format' );
540
+ $gmt_offset = get_option( 'gmt_offset' ) * 3600;
541
+
542
+ return date_i18n( $df, $gmt_offset + $expires );
543
+ }
544
+
545
+ /**
546
+ * Opt in for the connection to Cerber Lab
547
+ *
548
+ *
549
+ */
550
+ add_action( 'admin_notices', 'lab_opt_in');
551
+ add_action( 'network_admin_notices', 'lab_opt_in' );
552
+ function lab_opt_in(){
553
+ global $wp_cerber, $cerber_shown;
554
+
555
+ if ($cerber_shown || $wp_cerber->getSettings('cerberlab')) return;
556
+ if (!cerber_is_admin_page(false)) return;
557
+
558
+ // Avoid more than one message on the screen
559
+ // TODO: to many checks!
560
+ if (get_site_option('cerber_admin_notice', null)) return;
561
+ if (get_site_option('cerber_admin_message', null)) return;
562
+ if (get_site_option('cerber_admin_info', null)) return;
563
+ if ( $o = get_site_option( '_lab_o' . 'pt_in_' ) ) {
564
+ //if ( $o[0] == 'NO' && ( $o[1] + 3600 * 24 * 30 ) > time() ) {
565
+ if ( ($o[1] + 3600 * 24 * 30 ) > time() ) {
566
+ return;
567
+ }
568
+ }
569
+ if ($c = get_site_option('_cerber_activated')){
570
+ $c = maybe_unserialize($c);
571
+ if (!empty($c['time']) && ($c['time'] + 3600 * 24 * 7) > time()){
572
+ return;
573
+ }
574
+ }
575
+
576
+ $h = __('Want to make WP Cerber even more powerful?','wp-cerber');
577
+ $text = __('Allow WP Cerber to send locked out malicious IP addresses to Cerber Lab. This helps the plugin team to develop new algorithms for WP Cerber that will defend WordPress against new threats and botnets that are appearing everyday. You can disable the sending in the plugin settings at any time.','wp-cerber');
578
+ $ok = __('OK, nail them all','wp-cerber');
579
+ $no = __('NO, maybe later','wp-cerber');
580
+ $more = '<a href="http://wpcerber.com/cerber-laboratory/" target="_blank">' . __( 'Know more', 'wp-cerber' ) . '</a>';
581
+
582
+ $msg = '<h3>' . $h . '</h3><p>' . $text . '</p>';
583
+
584
+ $assets_url = plugin_dir_url( CERBER_FILE ) . 'assets';
585
+ $notice =
586
+ '<table><tr><td><img style="width:100px; float:left; margin-left:-10px;" src="' . $assets_url . '/icon-128x128.png"></td>' .
587
+ '<td style ="max-width: 850px;">' . $msg .
588
+ '<p style="float:left;">' . $more . '</p>
589
+ <p style="text-align:right;">
590
+ <input type="button" id = "lab_ok" class="button button-primary cerber-dismiss" value=" &nbsp; ' . $ok . ' &nbsp; "/>
591
+ <input type="button" id = "lab_no" class="button button-primary cerber-dismiss" value=" &nbsp; ' . $no . ' &nbsp; "/>
592
+ </p></td></tr></table>';
593
+
594
+ echo '<div class="updated cerber-msg" style="overflow: auto;"><p>' . $notice . '</p></div>';
595
+
596
+ }
597
+
598
+ /**
599
+ * Save a user choice
600
+ *
601
+ * @param string $button
602
+ */
603
+ function lab_user_opt_in( $button = '' ) {
604
+ $a = null;
605
+ if ( $button == 'lab_ok' ) {
606
+ $a = array( 'YES', time() );
607
+ $o = get_site_option( CERBER_OPT );
608
+ $o['cerberlab'] = 1;
609
+ update_site_option( CERBER_OPT, $o );
610
+ }
611
+ if ( $button == 'lab_no' ) {
612
+ $a = array( 'NO', time() );
613
+ }
614
+ if ( $a ) {
615
+ update_site_option( '_lab_o' . 'pt_in_', $a );
616
+ }
617
+ }
cerber-news.php ADDED
@@ -0,0 +1,108 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Copyright (C) 2015-17 CERBER TECH INC., Gregory Markov, http://wpcerber.com
4
+
5
+ Licenced under the GNU GPL.
6
+
7
+ This program is free software; you can redistribute it and/or modify
8
+ it under the terms of the GNU General Public License as published by
9
+ the Free Software Foundation; either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program; if not, write to the Free Software
19
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20
+ */
21
+
22
+ /*
23
+
24
+ *========================================================================*
25
+ | |
26
+ | ATTENTION! Do not change or edit this file! |
27
+ | |
28
+ *========================================================================*
29
+
30
+ */
31
+
32
+ // If this file is called directly, abort executing.
33
+ if ( ! defined( 'WPINC' ) ) {
34
+ exit;
35
+ }
36
+
37
+
38
+ function cerber_push_the_news( $version ) {
39
+
40
+ $news['3.0'] =
41
+ '<h3>Welcome a new version with reCAPTCHA and WordPress filters</h3>
42
+ <ul>
43
+ <li>Now you can use Google reCAPTCHA to protect WordPress registration form from spam registrations. Also reCAPTCHA available for lost password and login forms. <a href="http://wpcerber.com/how-to-setup-recaptcha/">How to setup reCAPTCHA</a>.</li>
44
+ <li>The registration process, WordPress registration form, XML-RPC, WP REST API are controlled by <a href="http://wpcerber.com/using-ip-access-lists-to-protect-wordpress/">IP Access Lists</a>.</li>
45
+ <li>Registration is impossible if a particular IP address is locked out.</li>
46
+ <li>Registration with a prohibited username is impossible.</li>
47
+ <li><a href="http://wpcerber.com/wp-cerber-hooks/">A set of filters and actions</a>. They are useful if you want to customize some aspects of the plugin as you want.</li>
48
+ <li>A new action <strong>Get WHOIS info</strong> that obtains detailed WHOIS information about given IP address. You can use it in vary <a href="http://jetflow.io">jetFlow.io automation scenarios</a>. For instance, you can monitor countries from what your users are logged in on the website or you <a href="http://wpcerber.com/notifications-on-wordpress-user-logs-in/">monitor user logins with notifications</a>.</li>
49
+ <li>A new trigger <strong>IP locked out</strong> that starts automation scenario after a suspicious IP address has been locked out by the WP Cerber plugin.</li>
50
+ </ul>
51
+
52
+ ';
53
+
54
+ $news['4.0'] =
55
+ '<h3>Welcome a new version with extended Access Lists and reCAPTCHA for WooCommerce</h3>
56
+ <ul>
57
+ <li>reCAPTCHA for WooCommerce forms. <a href="http://wpcerber.com/how-to-setup-recaptcha/">How to set up reCAPTCHA</a>.</li>
58
+ <li>IP Access Lists has got support for IP networks in three forms: ability to restrict access with IPv4 ranges, IPv4 CIDR notation and IPv4 subnets: A,B,C has been added. Read more: <a href="http://wpcerber.com/using-ip-access-lists-to-protect-wordpress/">Access Lists for WordPress</a>.</li>
59
+ <li>Cerber can automatically detect an IP network of an intruder and suggest you to block the entire network right from the Activity screen.</li>
60
+ <!-- <li>reCAPTCHA will not be shown and processed for IP addresses from the White IP Access List.</li> -->
61
+ </ul>
62
+
63
+ <p><a href="http://wpcerber.com/wp-cerber-security-4-0/" target="_blank">Read a full list of changes and improvements</a></p>
64
+ ';
65
+
66
+ $news['4.3'] =
67
+ '<h3>What\'s new in version 4.3</h3>
68
+ <ul>
69
+ <li>Do you want to keep eye on specific activity on your website? I have good news for you! Track them like a PRO. Use powerful subscriptions to get email notifications according to filters for events you have set. Filter out activities that you are interested to monitor and then click Subscribe. <a href="http://wpcerber.com/wordpress-notifications-made-easy/">Read more</a></li>
70
+ <li>Search and/or filter activity by IP address, username (login), specific event and a user. You can use any combination of them. </li>
71
+ <li>Now you can export activity from your WordPress website to a CSV file. You can export all activities or a set of filtered activities only as it described above. When you will import the CSV file in your spreadsheet editor, don\'t forget to select UTF-8 charset.</li>
72
+ <li>You can use multiple email addresses for notifications (Main Settings -> Notifications -> Email Address). Use a comma to specify several addresses.</li>
73
+ </ul>
74
+ ';
75
+
76
+ $news['4.5'][] = 'Instant mobile and browser notifications with Pushbullet. Get notified instantly via push notifications when an important event happens on your WordPress.';
77
+ $news['4.5'][] = 'Ability to choose a 404 page template. The plugin will try to use the 404 template from the active theme, and this is a default behavior or a generate simple 404 page like Apache web server does.';
78
+ $news['4.5'][] = 'Events on the Activity tab are displaying with user roles and avatars.';
79
+
80
+ $news['4.7.7'][] = 'Welcome invisible reCAPTCHA. You can choose what type you want to use: classic visible or new invisible reCAPTCHA. <a target="_blank" href="http://wpcerber.com/how-to-setup-recaptcha/">How to setup</a>.';
81
+ $news['4.7.7'][] = 'reCAPTCHA for comment forms is available now. Stop spam comments – use reCAPTCHA as an anti-spam tool for WordPress comment forms.';
82
+ $news['4.7.7'][] = 'Dates on the plugin dashboard now are displayed according to the Site Language.';
83
+ $news['4.7.7'][] = '<a target="_blank" href="https://www.facebook.com/pg/wpcerber/reviews/">You can leave a review on Facebook now.</a>';
84
+
85
+ $news['5.0'][] = 'Cerber has got a new antispam and bot detection engine that protects comment and user registration forms from bot attacks. No reCAPTCHA is needed anymore! After several attempts bot IP will be locked out.';
86
+ $news['5.0'][] = 'Now you can tell Cerber either to mark detected spam comments as spam or deny them completely.';
87
+ $news['5.0'][] = 'Optionally Cerber can automatically move spam comments older than the specified amount of days to trash.';
88
+ $news['5.0'][] = 'Added code to avoid possible conflict between Custom login URL and REST API.';
89
+ $news['5.0'][] = 'Added the <i>cerber_404_template</i> filter for specifying an alternative to the default 404 page not found template.';
90
+
91
+
92
+ if ( ! empty( $news[ $version ] ) ) {
93
+ //$text = '<h3>What\'s new in WP Cerber '.$version.'</h3>';
94
+
95
+ $text = '<h3>Highlights from WP Cerber '.$version.'</h3>';
96
+
97
+ $text .= '<ul><li>'.implode('</li><li>', $news[ $version ]).'</li></ul>';
98
+
99
+ $text .= ' <p style="margin-top: 18px;"><a href="http://wpcerber.com/security/releases/" target="_blank">Change log</a></p>';
100
+
101
+ $text .= ' <p style="margin-top: 24px;"><span class="dashicons-before dashicons-email-alt"></span> &nbsp; <a href="http://wpcerber.com/subscribe-newsletter/">Subscribe to Cerber\'s newsletter</a></p>
102
+ <p><span class="dashicons-before dashicons-twitter"></span> &nbsp; <a href="https://twitter.com/wpcerber">Follow Cerber on Twitter</a></p>
103
+ <p><span class="dashicons-before dashicons-facebook"></span> &nbsp; <a href="https://www.facebook.com/wpcerber/">Follow Cerber on Facebook</a></p>
104
+ ';
105
+ cerber_admin_info( $text );
106
+ }
107
+ }
108
+
cerber-tools.php ADDED
@@ -0,0 +1,276 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Copyright (C) 2015-17 CERBER TECH INC., Gregory Markov, http://wpcerber.com
4
+
5
+ Licenced under the GNU GPL
6
+
7
+ This program is free software; you can redistribute it and/or modify
8
+ it under the terms of the GNU General Public License as published by
9
+ the Free Software Foundation; either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program; if not, write to the Free Software
19
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20
+ */
21
+
22
+ /*
23
+
24
+ *========================================================================*
25
+ | |
26
+ | ATTENTION! Do not change or edit this file! |
27
+ | |
28
+ *========================================================================*
29
+
30
+ */
31
+
32
+ /**
33
+ * Display Tools admin page
34
+ *
35
+ */
36
+ function cerber_tools_page() {
37
+
38
+ $tab = cerber_get_tab( 'imex', array( 'imex', 'diagnostic', 'license' ) );
39
+
40
+ ?>
41
+ <div class="wrap">
42
+
43
+ <h2><?php _e( 'Tools', 'wp-cerber' ) ?></h2>
44
+
45
+ <h2 class="nav-tab-wrapper cerber-tabs">
46
+ <?php
47
+
48
+ echo '<a href="' . cerber_admin_link('imex') . '" class="nav-tab ' . ( $tab == 'imex' ? 'nav-tab-active' : '') . '"><span class="dashicons dashicons-admin-generic"></span> ' . __('Export & Import') . '</a>';
49
+ echo '<a href="' . cerber_admin_link('diagnostic') . '" class="nav-tab ' . ( $tab == 'diagnostic' ? 'nav-tab-active' : '') . '"><span class="dashicons dashicons-admin-tools"></span> ' . __('Diagnostic') . '</a>';
50
+ //echo '<a href="' . cerber_admin_link('license') . '" class="nav-tab ' . ( $tab == 'license' ? 'nav-tab-active' : '') . '"><span class="dashicons dashicons-id-alt"></span> ' . __('License') . '</a>';
51
+
52
+ ?>
53
+ </h2>
54
+
55
+ <?php
56
+
57
+ cerber_show_aside( 'tools' );
58
+
59
+ echo '<div class="crb-main">';
60
+
61
+ switch ($tab){
62
+ case 'diagnostic':
63
+ cerber_show_diag();
64
+ break;
65
+ case 'license':
66
+ cerber_show_lic();
67
+ break;
68
+ default: cerber_show_imex();
69
+ }
70
+
71
+ echo '</div>';
72
+
73
+ ?>
74
+ </div>
75
+ <?php
76
+ }
77
+
78
+ /*
79
+ Show Tools screen
80
+ */
81
+ function cerber_show_imex(){
82
+ global $wpdb;
83
+ $form = '<h3>'.__('Export settings to the file','wp-cerber').'</h3>';
84
+ $form .= '<p>'.__('When you click the button below you will get a configuration file, which you can upload on another site.','wp-cerber').'</p>';
85
+ $form .= '<p>'.__('What do you want to export?','wp-cerber').'</p><form action="" method="get">';
86
+ $form .= '<input id="exportset" name="exportset" value="1" type="checkbox" checked> <label for="exportset">'.__('Settings','wp-cerber').'</label>';
87
+ $form .= '<p><input id="exportacl" name="exportacl" value="1" type="checkbox" checked> <label for="exportacl">'.__('Access Lists','wp-cerber').'</label>';
88
+ $form .= '<p><input type="submit" name="cerber_export" id="submit" class="button button-primary" value="'.__('Download file','wp-cerber').'"></form>';
89
+
90
+ $form .= '<h3 style="margin-top:2em;">'.__('Import settings from the file','wp-cerber').'</h3>';
91
+ $form .= '<p>'.__('When you click the button below, file will be uploaded and all existing settings will be overridden.','wp-cerber').'</p>';
92
+ $form .= '<p>'.__('Select file to import.','wp-cerber').' '. sprintf( __( 'Maximum upload file size: %s.'), esc_html(size_format(wp_max_upload_size())));
93
+ $form .= '<form action="" method="post" enctype="multipart/form-data">'.wp_nonce_field( 'crb_import', 'crb_field');
94
+ $form .= '<p><input type="file" name="ifile" id="ifile" required="required">';
95
+ $form .= '<p>'.__('What do you want to import?','wp-cerber').'</p><p><input id="importset" name="importset" value="1" type="checkbox" checked> <label for="importset">'.__('Settings','wp-cerber').'</label>';
96
+ $form .= '<p><input id="importacl" name="importacl" value="1" type="checkbox" checked> <label for="importacl">'.__('Access Lists','wp-cerber').'</label>';
97
+ $form .= '<p><input type="submit" name="cerber_import" id="submit" class="button button-primary" value="'.__('Upload file','wp-cerber').'"></p></form>';
98
+ echo $form;
99
+ }
100
+ /*
101
+ Create export file
102
+ */
103
+ add_action('admin_init','cerber_export');
104
+ function cerber_export(){
105
+ global $wpdb;
106
+ if ($_SERVER['REQUEST_METHOD']!='GET' || !isset($_GET['cerber_export'])) return;
107
+ if (!current_user_can('manage_options')) wp_die('Error!');
108
+ $p = cerber_plugin_data();
109
+ $data = array('cerber_version' => $p['Version'],'home'=> get_home_url(),'date'=>date('d M Y H:i:s'));
110
+ if (!empty($_GET['exportset'])) $data ['options'] = cerber_get_options(); // @since 2.0
111
+ if (!empty($_GET['exportacl'])) $data ['acl'] = cerber_acl_all('ip,tag,comments');
112
+ $file = json_encode($data);
113
+ $file .= '==/'.strlen($file).'/'.crc32($file).'/EOF';
114
+ header($_SERVER["SERVER_PROTOCOL"].' 200 OK');
115
+ header("Content-type: application/force-download");
116
+ header("Content-Type: application/octet-stream");
117
+ header("Content-Disposition: attachment; filename=wpcerber.config");
118
+ echo $file;
119
+ exit;
120
+ }
121
+ /*
122
+ Load and Parse file and import settings
123
+ */
124
+ add_action('admin_init','cerber_import');
125
+ function cerber_import(){
126
+ global $wpdb, $wp_cerber;
127
+ if (!isset($_POST['cerber_import']) || $_SERVER['REQUEST_METHOD']!='POST') return;
128
+ check_admin_referer('crb_import','crb_field');
129
+ if (!current_user_can('manage_options')) wp_die('Upload failed.');
130
+ $ok = true;
131
+ if (!is_uploaded_file($_FILES['ifile']['tmp_name'])) {
132
+ cerber_admin_notice( __('No file was uploaded or file is corrupted','wp-cerber'));
133
+ return;
134
+ }
135
+ elseif ($file = file_get_contents($_FILES['ifile']['tmp_name'])) {
136
+ $p = strrpos($file,'==/');
137
+ $data = substr($file,0,$p);
138
+ $sys = explode('/',substr($file,$p));
139
+ if ($sys[3] == 'EOF' && crc32($data) == $sys[2] && ($data = json_decode($data, true))) {
140
+
141
+ if ($_POST['importset'] && $data['options'] && !empty($data['options']) && is_array($data['options'])) {
142
+ $data['options']['loginpath'] = urldecode($data['options']['loginpath']); // needed to work filter cerber_sanitize_options()
143
+ if ($data['home'] != get_home_url()) {
144
+ $data['options']['sitekey'] = $wp_cerber->getSettings('sitekey');
145
+ $data['options']['secretkey'] = $wp_cerber->getSettings('secretkey');
146
+ }
147
+ cerber_save_options($data['options']); // @since 2.0
148
+ }
149
+
150
+ if ($_POST['importacl'] && $data['acl'] && is_array($data['acl']) && !empty($data['acl'])) {
151
+ $acl_ok = true;
152
+ if (false === $wpdb->query("DELETE FROM ".CERBER_ACL_TABLE)) $acl_ok = false;
153
+ foreach($data['acl'] as $row) {
154
+ // if (!$wpdb->query($wpdb->prepare('INSERT INTO '.CERBER_ACL_TABLE.' (ip,tag,comments) VALUES (%s,%s,%s)',$row[0],$row[1],$row[2]))) $acl_ok = false;
155
+ // @since 3.1 if (!$wpdb->insert(CERBER_ACL_TABLE,array('ip'=>$row[0],'tag'=>$row[1],'comments'=>$row[2]),array('%s','%s','%s'))) $acl_ok = false;
156
+ $ip = cerber_parse_ip($row[0]);
157
+ if (!cerber_acl_add($ip,$row[1])){
158
+ $acl_ok = false;
159
+ break;
160
+ }
161
+ }
162
+ if (!$acl_ok) cerber_admin_notice(__('Error while updating','wp-cerber').' '.__('Access Lists','wp-cerber'));
163
+ }
164
+
165
+ cerber_admin_message( __('Settings has imported successfully from','wp-cerber').' '.$_FILES['ifile']['name']);
166
+ }
167
+ else $ok = false;
168
+ }
169
+ if (!$ok) cerber_admin_notice(__('Error while parsing file','wp-cerber'));
170
+ }
171
+
172
+ /**
173
+ * Displays admin diagnostic page
174
+ */
175
+ function cerber_show_diag(){
176
+ ?>
177
+ <!-- <h3 style="margin-top: 3em;">Diagnostic and maintenance</h3>
178
+ <a href="#" onclick="toggle_visibility('diagnostic'); return false;">Show diagnostic information</a>
179
+ -->
180
+ <form id="diagnostic" style="margin-top: 2em;">
181
+ <div class="diag-section">
182
+ <h3>WordPress info</h3>
183
+ <div class="diag-text"><?php echo cerber_wp_diag(); ?></div>
184
+ </div>
185
+ <div class="diag-section">
186
+ <h3>Database info</h3>
187
+ <?php echo cerber_db_diag(); ?>
188
+ <?php echo '<p style="text-align: right;"><a class="button button-secondary" href="' . wp_nonce_url( add_query_arg( array( 'force_repair_db' => 1 ) ), 'control', 'cerber_nonce' ) . '"><span class="dashicons dashicons-admin-tools" style="vertical-align: middle;"></span> Repair tables</a></p>'; ?>
189
+ </div>
190
+ <div class="diag-section">
191
+ <h3>Server info</h3>
192
+ <textarea name="dia"><?php
193
+ echo 'PHP version: ' . phpversion() . "\n";
194
+ $server = $_SERVER;
195
+ unset($server['HTTP_COOKIE']);
196
+ foreach ( $server as $key => $value ) {
197
+ echo '[' . $key . '] => ' . @strip_tags( $value ) . "\n";
198
+ }
199
+ ?>
200
+ </textarea>
201
+ </div>
202
+ <div class="diag-section">
203
+ <h3>Cerber Lab status</h3>
204
+ <?php
205
+ echo lab_status();
206
+ echo '<p style="text-align: right;"><a class="button button-secondary" href="'.wp_nonce_url(add_query_arg(array('force_check_nodes'=>1)),'control','cerber_nonce').'">Force recheck nodes</a></p>';
207
+ ?>
208
+ </div>
209
+ </form>
210
+ <script type="text/javascript">
211
+ function toggle_visibility(id) {
212
+ var e = document.getElementById(id);
213
+ if(e.style.display === 'block')
214
+ e.style.display = 'none';
215
+ else
216
+ e.style.display = 'block';
217
+ }
218
+ </script>
219
+ <?php
220
+ }
221
+
222
+ function cerber_show_lic() {
223
+ $key = lab_get_key();
224
+ $valid = '';
225
+ if ( ! empty( $key[2] ) ) {
226
+ $lic = $key[2];
227
+ if ( $expires = lab_validate_key( $lic ) ) {
228
+ $valid = '<span style="color: green;">This key is valid until '.$expires.'</span>';
229
+ }
230
+ else {
231
+ $valid = '<span style="color: red;">This key is invalid</span>';
232
+ }
233
+ }
234
+ else {
235
+ $lic = '';
236
+ }
237
+ ?>
238
+ <form method="post">
239
+ <table class="form-table">
240
+ <tbody>
241
+ <tr>
242
+ <th scope="row">License key for PRO version</th>
243
+ <td>
244
+ <input name="cerber_license" value="<?php echo $lic; ?>" size="<?php echo LAB_KEY_LENGTH; ?>" maxlength="<?php echo LAB_KEY_LENGTH; ?>" type="text">
245
+ <?php echo '<p>'.$valid.'</p>'; ?>
246
+ </td>
247
+ </tr>
248
+ <tbody>
249
+ </table>
250
+ <div style="padding-left: 220px">
251
+ <?php
252
+ wp_nonce_field('control','cerber_nonce');
253
+ submit_button();
254
+ ?>
255
+ </div>
256
+ </form>
257
+ <?php
258
+ }
259
+
260
+ /**
261
+ * Display reCAPTCHA admin page
262
+ *
263
+ */
264
+ function cerber_recaptcha_page() {
265
+ ?>
266
+ <div class="wrap">
267
+ <h2><?php _e( 'Antispam and bot detection settings', 'wp-cerber' ) ?></h2>
268
+ <?php
269
+ cerber_show_aside( 'recaptcha' );
270
+ echo '<div class="crb-main">';
271
+ cerber_show_settings( 'recaptcha' );
272
+ echo '</div';
273
+ ?>
274
+ </div>
275
+ <?php
276
+ }
common.php ADDED
@@ -0,0 +1,532 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Copyright (C) 2015-17 CERBER TECH INC., Gregory Markov, http://wpcerber.com
4
+
5
+ Licenced under the GNU GPL.
6
+
7
+ This program is free software; you can redistribute it and/or modify
8
+ it under the terms of the GNU General Public License as published by
9
+ the Free Software Foundation; either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program; if not, write to the Free Software
19
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20
+
21
+ */
22
+
23
+ /*
24
+
25
+ *========================================================================*
26
+ | |
27
+ | ATTENTION! Do not change or edit this file! |
28
+ | |
29
+ *========================================================================*
30
+
31
+ */
32
+
33
+ // If this file is called directly, abort executing.
34
+ if ( ! defined( 'WPINC' ) ) { exit; }
35
+
36
+ /**
37
+ * Return a link (full URL) to a Cerber admin settings page.
38
+ * Add a particular tab and GET parameters if they are specified
39
+ *
40
+ * @param string $tab Tab on the page
41
+ * @param array $args GET arguments to add to the URL
42
+ *
43
+ * @return string Full URL
44
+ */
45
+ function cerber_admin_link($tab = '', $args = array()){
46
+ //return add_query_arg(array('record_id'=>$record_id,'mode'=>'view_record'),admin_url('admin.php?page=storage'));
47
+
48
+ if ( in_array( $tab, array( 'recaptcha' ) ) ) {
49
+ $page = 'cerber-'.$tab;
50
+ $tab = null;
51
+ }
52
+ if ( in_array( $tab, array( 'imex', 'diagnostic', 'license' ) ) ) {
53
+ $page = 'cerber-tools';
54
+ }
55
+ else $page = 'cerber-security';
56
+
57
+ if (!is_multisite()) {
58
+ $link = admin_url('admin.php?page='.$page);
59
+ }
60
+ else {
61
+ $link = network_admin_url('admin.php?page='.$page);
62
+ }
63
+
64
+ if ( $tab ) {
65
+ $link .= '&tab=' . $tab;
66
+ }
67
+
68
+ if ( $args ) {
69
+ foreach ( $args as $arg => $value ) {
70
+ $link .= '&' . $arg . '=' . urlencode( $value );
71
+ }
72
+ }
73
+
74
+ return $link;
75
+ }
76
+ function cerber_activity_link($set = array()){
77
+ $filter = '';
78
+ foreach ( $set as $item ) {
79
+ $filter .= '&filter_activity[]=' . $item;
80
+ }
81
+ return cerber_admin_link( 'activity' ) . $filter;
82
+ }
83
+
84
+ function cerber_pb_get_devices($token = ''){
85
+ global $wp_cerber;
86
+ $ret = array();
87
+
88
+ if (!$token){
89
+ if (!$token = $wp_cerber->getSettings('pbtoken')) return false;
90
+ }
91
+
92
+ $curl = @curl_init();
93
+ if (!$curl) return false;
94
+
95
+ $headers = array(
96
+ 'Authorization: Bearer ' . $token
97
+ );
98
+
99
+ curl_setopt_array($curl, array(
100
+ CURLOPT_URL => 'https://api.pushbullet.com/v2/devices',
101
+ CURLOPT_HTTPHEADER => $headers,
102
+ CURLOPT_RETURNTRANSFER => true,
103
+ CURLOPT_CONNECTTIMEOUT => 2,
104
+ CURLOPT_TIMEOUT => 4, // including CURLOPT_CONNECTTIMEOUT
105
+ CURLOPT_DNS_CACHE_TIMEOUT => 4 * 3600,
106
+ ));
107
+
108
+ $result = curl_exec($curl);
109
+ $curl_error = curl_error($curl);
110
+ curl_close($curl);
111
+
112
+ $response = json_decode( $result, true );
113
+
114
+ if ( JSON_ERROR_NONE == json_last_error() && isset( $response['devices'] ) ) {
115
+ foreach ( $response['devices'] as $device ) {
116
+ $ret[ $device['iden'] ] = $device['nickname'];
117
+ }
118
+ }
119
+ else {
120
+ if ($response['error']){
121
+ $e = 'Pushbullet ' . $response['error']['message'];
122
+ }
123
+ elseif ($curl_error){
124
+ $e = $curl_error;
125
+ }
126
+ else $e = 'Unknown cURL error';
127
+
128
+ cerber_admin_notice( __( 'ERROR:', 'wp-cerber' ) .' '. $e);
129
+ }
130
+
131
+ return $ret;
132
+ }
133
+
134
+ /**
135
+ * Send push message via Pushbullet
136
+ *
137
+ * @param $title
138
+ * @param $body
139
+ *
140
+ * @return bool
141
+ */
142
+ function cerber_pb_send($title, $body){
143
+ global $wp_cerber;
144
+
145
+ if (!$body) return false;
146
+ if (!$token = $wp_cerber->getSettings('pbtoken')) return false;
147
+
148
+ $params = array('type' => 'note', 'title' => $title, 'body' => $body, 'sender_name' => 'WP Cerber');
149
+
150
+ if ($device = $wp_cerber->getSettings('pbdevice')) {
151
+ if ($device && $device != 'all' && $device != 'N') $params['device_iden'] = $device;
152
+ }
153
+
154
+ $headers = array('Access-Token: '.$token,'Content-Type: application/json');
155
+
156
+ $curl = @curl_init();
157
+ if (!$curl) return false;
158
+
159
+ curl_setopt_array($curl, array(
160
+ CURLOPT_URL => 'https://api.pushbullet.com/v2/pushes',
161
+ CURLOPT_POST => true,
162
+ CURLOPT_HTTPHEADER => $headers,
163
+ CURLOPT_POSTFIELDS => json_encode($params),
164
+ CURLOPT_RETURNTRANSFER => true,
165
+ CURLOPT_CONNECTTIMEOUT => 2,
166
+ CURLOPT_TIMEOUT => 4, // including CURLOPT_CONNECTTIMEOUT
167
+ CURLOPT_DNS_CACHE_TIMEOUT => 4 * 3600,
168
+ ));
169
+
170
+ $result = curl_exec($curl);
171
+ $curl_error = curl_error($curl);
172
+ curl_close($curl);
173
+
174
+ return $curl_error;
175
+ }
176
+ /**
177
+ * Just test is cURL available
178
+ */
179
+ function cerber_check_environment(){
180
+ if (!in_array('curl', get_loaded_extensions())) {
181
+ cerber_admin_notice( __( 'ERROR:', 'wp-cerber' ) . ' cURL PHP library is not enabled on your website.');
182
+ }
183
+ else {
184
+ $curl = @curl_init();
185
+ if (!$curl && ($err_msg = curl_error($curl))) cerber_admin_notice( __( 'ERROR:', 'wp-cerber' ) .' '. $err_msg);
186
+ curl_close($curl);
187
+ }
188
+ }
189
+
190
+ /**
191
+ * Health check up and self-repairing vital parts
192
+ *
193
+ */
194
+ function cerber_watchdog() {
195
+ if ( ! cerber_is_table( CERBER_LOG_TABLE )
196
+ || ! cerber_is_table( CERBER_BLOCKS_TABLE )
197
+ || ! cerber_is_table( CERBER_LAB_IP_TABLE )) {
198
+ cerber_create_db(false);
199
+ cerber_upgrade_db();
200
+ }
201
+ }
202
+ /**
203
+ * Get ip_id for IP.
204
+ * The ip_id can be safely used for array indexes and in any HTML code
205
+ * @since 2.2
206
+ *
207
+ * @param $ip string IP address
208
+ * @return string ID for given IP
209
+ */
210
+ function cerber_get_id_ip( $ip ) {
211
+ $ip_id = str_replace( '.', '-', $ip, $count );
212
+ if ( ! $count ) { // IPv6
213
+ $ip_id = str_replace( ':', '_', $ip_id );
214
+ }
215
+ return $ip_id;
216
+ }
217
+ /**
218
+ * Get IP from ip_id
219
+ * @since 2.2
220
+ *
221
+ * @param $ip_id string ID for an IP
222
+ *
223
+ * @return string IP address for given ID
224
+ */
225
+ function cerber_get_ip_id( $ip_id ) {
226
+ $ip = str_replace( '-', '.', $ip_id, $count );
227
+ if ( ! $count ) { // IPv6
228
+ $ip = str_replace( '_', ':', $ip );
229
+ }
230
+ return $ip;
231
+ }
232
+ /**
233
+ * Check if given IP address is an valid single IP v4 address
234
+ *
235
+ * @param $ip
236
+ *
237
+ * @return bool
238
+ */
239
+ function cerber_is_ipv4($ip){
240
+ if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) return true;
241
+ return false;
242
+ }
243
+ /**
244
+ * Check if a given IP address belongs to a private network (private IP).
245
+ * Universal: support IPv6 and IPv4.
246
+ *
247
+ * @param $ip string An IP address to check
248
+ *
249
+ * @return bool True if IP is in the private range, false otherwise
250
+ */
251
+ function is_ip_private($ip) {
252
+
253
+ if ( ! filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE ) ) {
254
+ return true;
255
+ }
256
+ elseif ( ! filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE ) ) {
257
+ return true;
258
+ }
259
+
260
+ return false;
261
+ }
262
+
263
+
264
+ /**
265
+ * Convert multilevel object or array of objects to associative array recursively
266
+ *
267
+ * @param $var object|array
268
+ *
269
+ * @return array result of conversion
270
+ * @since 3.0
271
+ */
272
+ function obj_to_arr_deep($var) {
273
+ if (is_object($var)) {
274
+ $var = get_object_vars($var);
275
+ }
276
+ if (is_array($var)) {
277
+ return array_map(__FUNCTION__, $var);
278
+ }
279
+ else {
280
+ return $var;
281
+ }
282
+ }
283
+
284
+ /**
285
+ * Search for a key in the given multidimensional array
286
+ *
287
+ * @param $array
288
+ * @param $needle
289
+ *
290
+ * @return bool
291
+ */
292
+ function recursive_search_key($array, $needle){
293
+ foreach($array as $key => $value){
294
+ if ((string)$key == (string)$needle){
295
+ return true;
296
+ }
297
+ if(is_array($value)){
298
+ $ret = recursive_search_key($value, $needle);
299
+ if ($ret == true) return true;
300
+ }
301
+ }
302
+ return false;
303
+ }
304
+
305
+ /**
306
+ * Return true if a REST API URL has been requested
307
+ *
308
+ * @return bool
309
+ * @since 3.0
310
+ */
311
+ function cerber_is_rest_url(){
312
+ if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) {
313
+ return true;
314
+ }
315
+ if (false !== strpos($_SERVER['REQUEST_URI'], rest_get_url_prefix()) || false !== strpos($_SERVER['REQUEST_URI'], '?rest_route=')){
316
+ if (0 === strpos(get_home_url().urldecode($_SERVER['REQUEST_URI']),get_rest_url())) {
317
+ return true;
318
+ }
319
+ }
320
+ return false;
321
+ }
322
+
323
+ /*
324
+ * Sets of human readable labels for vary activity/logs events
325
+ * @since 1.0
326
+ *
327
+ */
328
+ function cerber_get_labels($type = 'activity'){
329
+ $labels = array();
330
+ if ($type == 'activity') {
331
+
332
+ // User actions
333
+ $labels[1]=__('User created','wp-cerber');
334
+ $labels[2]=__('User registered','wp-cerber');
335
+ $labels[5]=__('Logged in','wp-cerber');
336
+ $labels[6]=__('Logged out','wp-cerber');
337
+ $labels[7]=__('Login failed','wp-cerber');
338
+
339
+ // Cerber actions - IP specific - lockouts
340
+ $labels[10]=__('IP blocked','wp-cerber');
341
+ $labels[11]=__('Subnet blocked','wp-cerber');
342
+ // Cerber actions - common
343
+ $labels[12]=__('Citadel activated!','wp-cerber');
344
+ $labels[16]=__('Spam comment denied','wp-cerber');
345
+
346
+ // Cerber status // TODO: should be separated as another list ---------
347
+ $labels[13]=__('Locked out','wp-cerber');
348
+ $labels[14]=__('IP blacklisted','wp-cerber');
349
+ // @since 4.9
350
+ $labels[15]=__('by Cerber Lab','wp-cerber');
351
+ // --------------------------------------------------------------
352
+
353
+ // Other actions
354
+ $labels[20]=__('Password changed','wp-cerber');
355
+ $labels[21]=__('Password reset requested','wp-cerber');
356
+
357
+ $labels[40]=__('reCAPTCHA verification failed','wp-cerber');
358
+ $labels[41]=__('reCAPTCHA settings are incorrect','wp-cerber');
359
+ $labels[42]=__('Request to the Google reCAPTCHA service failed','wp-cerber');
360
+
361
+ $labels[50]=__('Attempt to access prohibited URL','wp-cerber');
362
+ $labels[51]=__('Attempt to log in with non-existent username','wp-cerber');
363
+ $labels[52]=__('Attempt to log in with prohibited username','wp-cerber');
364
+ // @since 4.9 // TODO should be a cerber action?
365
+ $labels[53]=__('Attempt to log in denied','wp-cerber');
366
+ $labels[54]=__('Attempt to register denied','wp-cerber');
367
+
368
+ }
369
+ return $labels;
370
+ }
371
+
372
+ function cerber_get_reason($id){
373
+ $labels = array();
374
+ $ret = __('Unknown','wp-cerber');
375
+ $labels[1]= __('Limit on login attempts is reached','wp-cerber');
376
+ $labels[2]= __('Attempt to access', 'wp-cerber' );
377
+ $labels[3]= __('Attempt to log in with non-existent username','wp-cerber');
378
+ $labels[4]= __('Attempt to log in with prohibited username','wp-cerber');
379
+ $labels[5]= __('Limit on failed reCAPTCHA verifications is reached','wp-cerber');
380
+ $labels[6]= __('Bot activity is detected','wp-cerber');
381
+
382
+ if (isset($labels[$id])) $ret = $labels[$id];
383
+ return $ret;
384
+ }
385
+
386
+ function cerber_admin_info($msg, $type = 'normal'){
387
+ $assets_url = plugin_dir_url(CERBER_FILE).'assets';
388
+ update_site_option('cerber_admin_info',
389
+ '<table><tr><td><img style="float:left; margin-left:-10px;" src="'.$assets_url.'/icon-128x128.png"></td>'.
390
+ '<td>'.$msg.
391
+ '<p style="text-align:right;">
392
+ <input type="button" class="button button-primary cerber-dismiss" value=" &nbsp; OK &nbsp; "/></p></td></tr></table>');
393
+ }
394
+
395
+ function cerber_db_error_log($msg = null){
396
+ global $wpdb;
397
+ if (!$msg) $msg = array($wpdb->last_error, $wpdb->last_query, date('Y-m-d H:i:s'));
398
+ $old = get_site_option( '_cerber_db_errors');
399
+ if (!$old) $old = array();
400
+ update_site_option( '_cerber_db_errors', array_merge($old,$msg));
401
+ }
402
+
403
+
404
+ /**
405
+ * Save admin error message for further displaying
406
+ *
407
+ * @param string $msg
408
+ */
409
+ function cerber_admin_notice($msg){
410
+ if (!$msg) return;
411
+ update_site_option('cerber_admin_notice', $msg);
412
+ }
413
+
414
+ /**
415
+ * Save admin info message for further displaying
416
+ *
417
+ * @param string $msg
418
+ */
419
+ function cerber_admin_message($msg){
420
+ if (!$msg) return;
421
+ update_site_option('cerber_admin_message', $msg);
422
+ }
423
+ /**
424
+ * Return human readable "ago" time
425
+ *
426
+ * @param $time integer Unix timestamp - time of an event
427
+ *
428
+ * @return string
429
+ */
430
+ function cerber_ago_time($time){
431
+
432
+ return sprintf( __( '%s ago' ), human_time_diff( $time ) );
433
+ }
434
+
435
+ function cerber_percent($one,$two){
436
+ if ($one == 0) {
437
+ if ($two > 0) $ret = '100';
438
+ else $ret = '0';
439
+ }
440
+ else {
441
+ $ret = round (((($two - $one)/$one)) * 100);
442
+ }
443
+ $style='';
444
+ if ($ret < 0) $style='color:#008000';
445
+ elseif ($ret > 0) $style='color:#FF0000';
446
+ if ($ret > 0) $ret = '+'.$ret;
447
+ return '<span style="'.$style.'">'.$ret.' %</span>';
448
+ }
449
+
450
+ /**
451
+ * Return a user by login or email with automatic detection
452
+ *
453
+ * @param $login_email string login or email
454
+ *
455
+ * @return false|WP_User
456
+ */
457
+ function cerber_get_user( $login_email ) {
458
+ if ( is_email( $login_email ) ) {
459
+ return get_user_by( 'email', $login_email );
460
+ }
461
+
462
+ return get_user_by( 'login', $login_email );
463
+ }
464
+
465
+ /**
466
+ * Check if a DB table exists
467
+ *
468
+ * @param $table
469
+ *
470
+ * @return bool true if table exists in the DB
471
+ */
472
+ function cerber_is_table( $table ) {
473
+ global $wpdb;
474
+ if ( ! $wpdb->get_row( "SHOW TABLES LIKE '" . $table . "'" ) ) {
475
+ return false;
476
+ }
477
+
478
+ return true;
479
+ }
480
+
481
+ /**
482
+ * Check if a column is defined in a table
483
+ *
484
+ * @param $table string DB table name
485
+ * @param $column string Field name
486
+ *
487
+ * @return bool true if field exists in a table
488
+ */
489
+ function cerber_is_column( $table, $column ) {
490
+ global $wpdb;
491
+ $result = $wpdb->get_row( 'SHOW FIELDS FROM ' . $table . " WHERE FIELD = '" . $column . "'" );
492
+ if ( ! $result ) {
493
+ return false;
494
+ }
495
+
496
+ return true;
497
+ }
498
+
499
+ /**
500
+ * Check if a table has an index
501
+ *
502
+ * @param $table string DB table name
503
+ * @param $key string Index name
504
+ *
505
+ * @return bool true if an index defined for a table
506
+ */
507
+ function cerber_is_index( $table, $key ) {
508
+ global $wpdb;
509
+ $result = $wpdb->get_results( 'SHOW INDEX FROM ' . $table . " WHERE KEY_NAME = '" . $key . "'" );
510
+ if ( ! $result ) {
511
+ return false;
512
+ }
513
+
514
+ return true;
515
+ }
516
+
517
+ /**
518
+ * Return reCAPTCHA language code for reCAPTCHA widget
519
+ *
520
+ * @return string
521
+ */
522
+ function cerber_recaptcha_lang() {
523
+ static $lang = '';
524
+ if (!$lang) {
525
+ $lang = get_bloginfo( 'language' );
526
+ //$trans = array('en-US' => 'en', 'de-DE' => 'de');
527
+ //if (isset($trans[$lang])) $lang = $trans[$lang];
528
+ $lang = substr( $lang, 0, 2 );
529
+ }
530
+
531
+ return $lang;
532
+ }
dashboard.php ADDED
@@ -0,0 +1,1678 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Copyright (C) 2015-17 CERBER TECH INC., Gregory Markov, http://wpcerber.com
4
+
5
+ Licenced under the GNU GPL.
6
+
7
+ This program is free software; you can redistribute it and/or modify
8
+ it under the terms of the GNU General Public License as published by
9
+ the Free Software Foundation; either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program; if not, write to the Free Software
19
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20
+ */
21
+
22
+ /*
23
+
24
+ *========================================================================*
25
+ | |
26
+ | ATTENTION! Do not change or edit this file! |
27
+ | |
28
+ *========================================================================*
29
+
30
+ */
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+ if ( ! defined( 'WPINC' ) ) { exit; }
43
+
44
+ require_once( dirname( __FILE__ ) . '/cerber-tools.php' );
45
+
46
+ /*
47
+ Display lockouts in dashboard for admins
48
+ */
49
+ function cerber_show_lockouts($args = array(), $echo = true){
50
+ global $wpdb, $wp_cerber;
51
+
52
+ //$wp_cerber->deleteGarbage();
53
+
54
+ if (!empty($args['per_page'])) $per_page = $args['per_page'];
55
+ else $per_page = cerber_get_per_page();
56
+
57
+ $limit = (cerber_get_pn() - 1) * $per_page.','.$per_page;
58
+
59
+ if ($rows = $wpdb->get_results('SELECT * FROM '. CERBER_BLOCKS_TABLE . ' ORDER BY block_until DESC LIMIT '.$limit)) {
60
+ //$total=$wpdb->get_var('SELECT count(ip) FROM '. CERBER_BLOCKS_TABLE);
61
+ $total= cerber_blocked_num();
62
+ $list=array();
63
+ $base_url = cerber_admin_link('activity');
64
+ $assets_url = plugin_dir_url(CERBER_FILE).'assets/';
65
+ foreach ($rows as $row) {
66
+ $ip = '<a href="'.$base_url.'&filter_ip='.$row->ip.'">'.$row->ip.'</a>';
67
+ $ip_info = cerber_get_ip_info($row->ip,true);
68
+ if (isset($ip_info['hostname'])) $hostname = $ip_info['hostname'];
69
+ else {
70
+ $ip_id = cerber_get_id_ip($row->ip);
71
+ $hostname = '<img data-ip-id="'.$ip_id .'" class="crb-no-hn" src="'.$assets_url.'ajax-loader-ip.gif" />'."\n";
72
+ }
73
+
74
+ $list[]='<td>'.$ip.'</td><td>'.$hostname.'</td><td>'.cerber_date($row->block_until).'</td><td>'.$row->reason.'</td><td><a href="'.wp_nonce_url(add_query_arg(array('lockdelete'=>$row->ip)),'control','cerber_nonce').'">'.__('Remove','wp-cerber').'</a></td>';
75
+
76
+ }
77
+ $titles = '<tr><th>'.__('IP','wp-cerber').'</th><th>'.__('Hostname','wp-cerber').'</th><th>'.__('Expires','wp-cerber').'</th><th>'.__('Reason','wp-cerber').'</th><th>'.__('Action','wp-cerber').'</th></tr>';
78
+ $table = '<table class="widefat crb-table cerber-margin"><thead>'.$titles.'</thead><tfoot>'.$titles.'</tfoot>'.implode('</tr><tr>',$list).'</tr></table>';
79
+
80
+ if (empty($args['no_navi'])) $table .= cerber_page_navi($total,$per_page);
81
+
82
+ //echo '<h3>'.sprintf(__('Showing last %d records from %d','wp-cerber'),count($rows),$total).'</h3>';
83
+ $showing = '<h3>'.sprintf(__('Showing last %d records from %d','wp-cerber'),count($rows),$total).'</h3>';
84
+
85
+ $view = '<p><b>'.__('Hint','wp-cerber').':</b> ' . __('To view activity, click on the IP','wp-cerber').'</p>';
86
+ }
87
+ else {
88
+ $table = '';
89
+ $view = '<p>'.sprintf(__('No lockouts at the moment. The sky is clear.','wp-cerber')).'</p>';
90
+ }
91
+ $ret = $table.'<div class="cerber-margin">'.$view.'</div>';
92
+
93
+ if ($echo) echo $ret;
94
+ else return $ret;
95
+ }
96
+
97
+ /*
98
+ ACL management form in dashboard
99
+ */
100
+ function cerber_acl_form(){
101
+ global $wp_cerber;
102
+ echo '<h2>'.__('White IP Access List','wp-cerber').'</h2><p><span style="color:green;" class="dashicons-before dashicons-thumbs-up"></span> '.__('These IPs will never be locked out','wp-cerber').' - <a target="_blank" href="http://wpcerber.com/using-ip-access-lists-to-protect-wordpress/">Know more</a></p>'.
103
+ cerber_acl_get_table('W');
104
+ echo '<h2>'.__('Black IP Access List','wp-cerber').'</h2><p><span style="color:red;" class="dashicons-before dashicons-thumbs-down"></span> '.__('Nobody can log in or register from these IPs','wp-cerber').' - <a target="_blank" href="http://wpcerber.com/using-ip-access-lists-to-protect-wordpress/">Know more</a></p>'.
105
+ cerber_acl_get_table('B');
106
+ echo '<p><b><span class="dashicons-before dashicons-star-filled"></span> '.__('Your IP','wp-cerber').': '.$wp_cerber->getRemoteIp().'</b></p>';
107
+ echo '<h4 style="margin-top: 2em;"><span class="dashicons-before dashicons-info"></span> Possible values for entries in the access lists with examples</h4>
108
+ <p>Single IPv6 address: <b>2001:0db8:85a3:0000:0000:8a2e:0370:7334</b>
109
+ <p>Single IPv4 address: <b>192.168.5.22</b>
110
+ <p>IPv4 addresses range with dash: <b>192.168.1.45 - 192.168.22.165</b>
111
+ <p>IPv4 CIDR: <b>192.168.128.0/24</b>
112
+ <p>IPv4 subnet Class A: <b>192.*.*.*</b>
113
+ <p>IPv4 subnet Class B: <b>192.168.*.*</b>
114
+ <p>IPv4 subnet Class C: <b>192.168.77.*</b>';
115
+ }
116
+ /*
117
+ Create HTML to display ACL area: table + form
118
+ */
119
+ function cerber_acl_get_table($tag){
120
+ global $wpdb;
121
+ $activity_url = cerber_admin_link('activity');
122
+ if ($rows = $wpdb->get_results('SELECT * FROM '. CERBER_ACL_TABLE . " WHERE tag = '".$tag."' ORDER BY ip_long_begin, ip")) {
123
+ foreach ($rows as $row) $list[]='<td>'.$row->ip.'</td><td><a class="delete_entry" href="javascript:void(0)" data-ip="'.$row->ip.'">'.__('Remove','wp-cerber').'</a></td><td><a href="'.$activity_url.'&filter_ip='.urlencode($row->ip).'">'.__('Check for activity','wp-cerber').'</a></td>';
124
+ $ret = '<table id="acl_'.$tag.'" class="acl-table"><tr>'.implode('</tr><tr>',$list).'</tr></table>';
125
+ }
126
+ else $ret='<p style="text-align: center;">- <i>'.__('List is empty','wp-cerber').'</i> -</p>';
127
+ $ret = '<div class="acl-wrapper"><div class="acl-items">'
128
+ .$ret.'</div><form action="" method="post">
129
+ <table><tr><td><input type="text" name="add_acl_'.$tag.'" required placeholder="Enter IP address, IPv4 addresses range or subnet">
130
+ </td><td><input type="submit" class="button button-primary" value="'.__('Add IP to the list','wp-cerber').'" ></td></tr></table>'
131
+ .wp_nonce_field('cerber_dashboard','cerber_nonce')
132
+ .'</form></div>';
133
+ return $ret;
134
+ }
135
+ /*
136
+ Handle actions with items in ACLs in the dashboard
137
+ */
138
+ add_action('admin_init','cerber_acl_form_process');
139
+ function cerber_acl_form_process(){
140
+
141
+ if ( $_SERVER['REQUEST_METHOD'] != 'POST' || !isset( $_POST['cerber_nonce'] ) ) return;
142
+ if ( !current_user_can( 'manage_options' ) || !wp_verify_nonce( $_POST['cerber_nonce'], 'cerber_dashboard' ) ) return;
143
+
144
+ //if (!current_user_can('manage_options')) return;
145
+ //if (!isset($_POST['cerber_nonce']) || !wp_verify_nonce($_POST['cerber_nonce'],'cerber_dashboard')) return;
146
+
147
+ if ($_SERVER['REQUEST_METHOD']=='POST') {
148
+ if (!empty($_POST['add_acl_W'])) {
149
+ $ip = cerber_parse_ip($_POST['add_acl_W']);
150
+ if (!$ip) cerber_admin_notice( __('Incorrect IP address or IP range','wp-cerber'));
151
+ elseif (cerber_add_white($ip)) {
152
+ if (is_array($ip)) $ip = $ip['range'];
153
+ cerber_admin_message( sprintf(__('Address %s was added to White IP Access List','wp-cerber'),$ip));
154
+ }
155
+ }
156
+ if (!empty($_POST['add_acl_B'])) {
157
+ $ip = cerber_parse_ip($_POST['add_acl_B']);
158
+ if (!$ip) cerber_admin_notice( __('Incorrect IP address or IP range','wp-cerber'));
159
+ else {
160
+ if ( cerber_is_myip( $ip ) || cerber_is_ip_in_range( $ip ) ) {
161
+ if (is_array($ip)) $ip = $ip['range'];
162
+ cerber_admin_notice( __( "You can't add your IP address", 'wp-cerber' ) . ' ' . $ip );
163
+ }
164
+ elseif (cerber_add_black($ip)) {
165
+ if (is_array($ip)) $ip = $ip['range'];
166
+ cerber_admin_message(sprintf(__('Address %s was added to Black IP Access List','wp-cerber'),$ip));
167
+ }
168
+ }
169
+ }
170
+ }
171
+ }
172
+ /*
173
+ Get all entries from access lists
174
+ */
175
+ function cerber_acl_all($fields='*'){
176
+ global $wpdb;
177
+ return $wpdb->get_results('SELECT '.$fields.' FROM '. CERBER_ACL_TABLE , ARRAY_N);
178
+ }
179
+
180
+ /*
181
+ AJAX admin requests is landing here
182
+ */
183
+ add_action('wp_ajax_cerber_ajax', 'cerber_admin_ajax');
184
+ function cerber_admin_ajax() {
185
+ global $wpdb;
186
+ if (!current_user_can('manage_options')) return;
187
+ $response = array();
188
+ if (isset($_REQUEST['acl_delete'])){
189
+ check_ajax_referer('delete-ip','ajax_nonce');
190
+ $ip = $_REQUEST['acl_delete'];
191
+ if (!$ip = cerber_parse_ip($ip)) wp_die();
192
+ if (cerber_acl_remove($ip)) {
193
+ if (is_string($ip)) $deleted = $ip;
194
+ else $deleted = $ip['range'];
195
+ $response['deleted_ip'] = $deleted;
196
+ }
197
+ else $response['error'] = 'Unable to delete';
198
+ }
199
+ elseif (isset($_REQUEST['get_hostnames'])){
200
+ $list = array_unique($_REQUEST['get_hostnames']);
201
+ foreach ($list as $ip_id) {
202
+ $ip = cerber_get_ip_id($ip_id);
203
+ $ip_info = cerber_get_ip_info($ip);
204
+ $response[$ip_id] = $ip_info['hostname'];
205
+ }
206
+ }
207
+ elseif (isset($_REQUEST['dismiss_info'])){
208
+ if (isset($_REQUEST['button_id']) && ($_REQUEST['button_id'] == 'lab_ok' || $_REQUEST['button_id'] == 'lab_no')){
209
+ lab_user_opt_in($_REQUEST['button_id']);
210
+ }
211
+ else update_site_option('cerber_admin_info','');
212
+ }
213
+ echo json_encode($response);
214
+ wp_die();
215
+ }
216
+ /*
217
+ * Retrieve extended IP information
218
+ * @since 2.2
219
+ *
220
+ */
221
+ function cerber_get_ip_info($ip, $cache_only = false){
222
+
223
+ //$ip_id = str_replace('.','-',$ip);
224
+ //$ip_id = str_replace(':','_',$ip_id); // IPv6
225
+
226
+ $ip_id = cerber_get_id_ip($ip);
227
+
228
+ $ip_info = @unserialize(get_transient($ip_id)); // lazy way
229
+ if ($cache_only) return $ip_info;
230
+
231
+ if (empty($ip_info['hostname'])) {
232
+ $ip_info = array();
233
+ $hostname = @gethostbyaddr( $ip );
234
+ if ( $hostname ) {
235
+ $ip_info['hostname'] = $hostname;
236
+ } else {
237
+ $ip_info['hostname'] = __( 'unknown', 'wp-cerber' );
238
+ }
239
+ set_transient( $ip_id, serialize( array( 'hostname' => $hostname ) ), 24 * 3600 );
240
+ }
241
+ return $ip_info;
242
+ }
243
+
244
+
245
+ /*
246
+ Admin's actions with GET requests are handled here
247
+ */
248
+ add_action('admin_init','cerber_admin_request');
249
+ function cerber_admin_request(){
250
+
251
+ if ( !isset( $_REQUEST['cerber_nonce'] ) ) return;
252
+ if ( !current_user_can( 'manage_options' ) || !wp_verify_nonce( $_REQUEST['cerber_nonce'], 'control' ) ) return;
253
+
254
+ if ( $_SERVER['REQUEST_METHOD'] == 'GET') {
255
+ if ( isset( $_GET['testnotify'] ) ) {
256
+ //$to = implode(', ',cerber_get_email());
257
+ $to = cerber_get_email();
258
+ if ( cerber_send_notify( $_GET['testnotify'] ) ) {
259
+ cerber_admin_message( __( 'Message has been sent to ', 'wp-cerber' ) . ' ' . $to );
260
+ }
261
+ else {
262
+ cerber_admin_notice( __( 'Unable to send notification email', 'wp-cerber' ) . ' ' . $to );
263
+ }
264
+ wp_safe_redirect( remove_query_arg( 'testnotify' ) ); // mandatory!
265
+ exit; // mandatory!
266
+ }
267
+ elseif ( isset( $_GET['lockdelete'] ) ) {
268
+ $ip = $_GET['lockdelete'];
269
+ if ( cerber_block_delete( $ip ) ) {
270
+ cerber_admin_message( sprintf( __( 'Lockout for %s was removed', 'wp-cerber' ), $ip ) );
271
+ }
272
+ }
273
+ elseif ( isset( $_GET['export_activity'] ) ) {
274
+ cerber_export_activity();
275
+ }
276
+ elseif ( isset( $_GET['subscribe'] ) ) {
277
+ $mode = ( 'on' == $_GET['subscribe'] ) ? 'on' : 'off';
278
+ cerber_subscribe( $mode );
279
+ wp_safe_redirect( remove_query_arg( 'subscribe' ) ); // mandatory!
280
+ exit; // mandatory!
281
+ }
282
+ elseif ( isset( $_GET['citadel'] ) && $_GET['citadel'] == 'deactivate' ) {
283
+ cerber_disable_citadel();
284
+ }
285
+ elseif ( isset( $_GET['load_settings'] ) && $_GET['load_settings'] == 'default' ) {
286
+ cerber_load_defaults();
287
+ cerber_admin_message( __( 'Settings saved', 'wp-cerber' ) );
288
+ wp_safe_redirect( remove_query_arg( array( 'load_settings', 'cerber_nonce' ) ) ); // mandatory!
289
+ exit; // mandatory!
290
+ }
291
+ elseif ( isset( $_GET['force_repair_db'] ) ) {
292
+ cerber_create_db();
293
+ cerber_upgrade_db( true );
294
+ cerber_admin_message( 'Cerber\'s tables has been upgraded' );
295
+ wp_safe_redirect( remove_query_arg( array( 'force_repair_db', 'cerber_nonce' ) ) ); // mandatory!
296
+ exit; // mandatory!
297
+ }
298
+ elseif ( isset( $_GET['force_check_nodes'] ) ) {
299
+ $best = lab_check_nodes( true );
300
+ cerber_admin_message( 'Cerber Lab\'s nodes has been checked. The closest node: ' . $best );
301
+ wp_safe_redirect( remove_query_arg( array( 'force_check_nodes', 'cerber_nonce' ) ) ); // mandatory!
302
+ exit; // mandatory!
303
+ }
304
+ }
305
+
306
+ if ( $_SERVER['REQUEST_METHOD'] == 'POST') {
307
+ if ( isset( $_POST['cerber_license'] ) ) {
308
+ $lic = preg_replace( "/[^A-Z0-9]/i", '', $_POST['cerber_license'] );
309
+ if ( !empty($lic) && strlen( $lic ) != LAB_KEY_LENGTH ) {
310
+ return;
311
+ }
312
+ lab_update_key($lic);
313
+ }
314
+ }
315
+
316
+
317
+ }
318
+
319
+ /**
320
+ * Generate export CSV file using $_GET parameters (via cerber_activity_query())
321
+ *
322
+ * @since 4.16
323
+ *
324
+ */
325
+ function cerber_export_activity() {
326
+ global $wpdb;
327
+
328
+ //'per_page' = 0 means retrieve full data set, is used for export
329
+ list( $query, $per_page, $falist, $ip, $filter_login, $user_id, $search ) = cerber_activity_query( array('per_page' => 0) );
330
+
331
+ if ( $rows = $wpdb->get_results( $query ) ) {
332
+ $total = $wpdb->get_var( "SELECT FOUND_ROWS()" );
333
+
334
+ $fname = rawurlencode('wp-cerber-activity'); // encode non-ASCII symbols
335
+
336
+ header($_SERVER["SERVER_PROTOCOL"].' 200 OK');
337
+ header("Content-type: application/force-download");
338
+ header("Content-Type: application/octet-stream");
339
+ header("Content-Disposition: attachment; filename*=UTF-8''{$fname}.csv");
340
+
341
+ echo '"Generated by:","WP Cerber security plugin"'."\r\n";
342
+ echo '"Date:","'.cerber_date(time()).'"'."\r\n";
343
+ echo '"Total rows:","'.$total.'"'."\r\n";
344
+ echo '"Website:","'.get_option( 'blogname' ).'"'."\r\n";
345
+ if ($ip) echo '"Filter by IP:","'.$ip.'"'."\r\n";
346
+ elseif (!empty($_GET['filter_ip'])) echo '"Filter by IP:","'.$_GET['filter_ip'].'"'."\r\n"; // workaround
347
+ if ($user_id) {
348
+ $user = get_userdata($user_id);
349
+ echo '"Filter by user:","'.$user->display_name.'"'."\r\n";
350
+ }
351
+ if ($search) echo '"Search results for:","'.$search.'"'."\r\n";
352
+
353
+ echo "\r\n";
354
+
355
+ $heading = array(__('IP address','wp-cerber'),__('Date','wp-cerber'),__('Event','wp-cerber'),__('Local User','wp-cerber'),__('User login','wp-cerber'),__('User ID','wp-cerber'),__('Username used','wp-cerber'),'Unix timestamp','Session ID');
356
+ foreach ($heading as &$item) {
357
+ $item = '"' . str_replace('"', '""', trim($item)) . '"';
358
+ }
359
+ echo implode(',', $heading) . "\r\n";
360
+
361
+ $labels = cerber_get_labels('activity');
362
+
363
+ foreach ($rows as $row) {
364
+ if (!empty($row->details)) {
365
+ $details = explode('|',$row->details);
366
+ }
367
+ else {
368
+ $details = array('','','','','');
369
+ }
370
+ $values = array();
371
+ $values[] = $row->ip;
372
+ $values[] = cerber_date($row->stamp);
373
+ $values[] = $labels[$row->activity];
374
+ $values[] = $row->display_name;
375
+ $values[] = $row->ulogin;
376
+ $values[] = $row->user_id;
377
+ $values[] = $row->user_login;
378
+ $values[] = $row->stamp;
379
+ $values[] = $row->session_id;
380
+ $values[] = $details[4];
381
+ $values[] = $details[0];
382
+ foreach ($values as &$value) {
383
+ $value = '"' . str_replace('"', '""', trim($value)) . '"';
384
+ }
385
+ $line = implode(',', $values) . "\r\n";
386
+ echo $line;
387
+ }
388
+ exit;
389
+ }
390
+ else wp_die('Nothing to export');
391
+ }
392
+ /*
393
+ * Display activities in the WP Dashboard
394
+ * @since 1.0
395
+ *
396
+ */
397
+ function cerber_show_activity($args = array(), $echo = true){
398
+ global $wpdb, $wp_cerber, $wp_roles;
399
+
400
+ $labels = cerber_get_labels('activity');
401
+ $base_url = cerber_admin_link('activity');
402
+ $right_links = '';
403
+ $export_link = '';
404
+ $table = '';
405
+ $ret = '';
406
+
407
+ list( $query, $per_page, $falist, $filter_ip, $filter_login, $user_id, $search ) = cerber_activity_query( $args );
408
+
409
+ $ip_text = cerber_ip_extra_view( $filter_ip );
410
+ $user_cache = array();
411
+
412
+ if ( $rows = $wpdb->get_results( $query ) ) {
413
+
414
+ $total = $wpdb->get_var( "SELECT FOUND_ROWS()" );
415
+ $assets_url = plugin_dir_url( CERBER_FILE ) . 'assets/';
416
+ $list = array();
417
+ $roles = $wp_roles->roles;
418
+
419
+ foreach ($rows as $row) {
420
+
421
+ $activity = '<span class="crb-activity actv' . $row->activity . '">'.$labels[ $row->activity ].'</span>';
422
+ /*
423
+ if ($row->activity == 50 ) {
424
+ $activity .= ' <b>'.htmlspecialchars($row->user_login).'</b>';
425
+ }*/
426
+
427
+ if ($row->details) {
428
+ $details = explode('|',$row->details);
429
+ if (!empty($details[0])) {
430
+ $activity .= ' <span class = "act-details">'.$labels[$details[0]].'</span>';
431
+ }
432
+ //elseif ($row->activity == 50 && $details[4]) $activity .= ' '.$details[4];
433
+
434
+ if (empty($args['no_details'])) {
435
+ if ( isset( $details[4] ) && ( $row->activity < 10 || $row->activity > 12 ) ) {
436
+ $activity .= '<p class="act-url">URL: ' . $details[4] . '</p>';
437
+ }
438
+ }
439
+ }
440
+
441
+
442
+ if ( $row->user_id ) {
443
+ if ( isset( $user_cache[ $row->user_id ] ) ) {
444
+ $name = $user_cache[ $row->user_id ];
445
+ } elseif ( $u = get_userdata( $row->user_id ) ) {
446
+
447
+ if ( ! is_multisite() && $u->roles ) {
448
+ $r = array();
449
+ foreach ( $u->roles as $role ) {
450
+ $r[] = $roles[ $role ]['name'];
451
+ }
452
+ $r = '<span class="act-role">' . implode( ', ', $r ) . '</span>';
453
+ }
454
+
455
+ $name = '<a href="' . $base_url . '&filter_user=' . $row->user_id . '"><b>' . $u->display_name . '</b></a><p>' . $r . '</p>';
456
+
457
+ if ( 1 == 1 ) {
458
+ $avatar = get_avatar( $row->user_id, 32 );
459
+ $name = '<table class="crb-avatar"><tr><td>' . $avatar . '</td><td>' . $name . '</td></tr></table>';
460
+ }
461
+ } else {
462
+ $name = '';
463
+ }
464
+
465
+ $user_cache[ $row->user_id ] = $name;
466
+ } else {
467
+ $name = '';
468
+ }
469
+
470
+ $ip = '<a href="'.$base_url.'&filter_ip='.$row->ip.'">'.$row->ip.'</a>';
471
+ $username = '<a href="'.$base_url.'&filter_login='.urlencode($row->user_login).'">'.$row->user_login.'</a>';
472
+
473
+ $ip_info = cerber_get_ip_info($row->ip,true);
474
+ if (isset($ip_info['hostname'])) $hostname = $ip_info['hostname'];
475
+ else {
476
+ $ip_id = cerber_get_id_ip($row->ip);
477
+ $hostname = '<img data-ip-id="'.$ip_id .'" class="crb-no-hn" src="'.$assets_url.'ajax-loader-ip.gif" />'."\n";
478
+ }
479
+
480
+ $tip='';
481
+
482
+ $acl = cerber_acl_check($row->ip);
483
+ if ($acl == 'W') $tip = __('White IP Access List','wp-cerber');
484
+ elseif ($acl == 'B') $tip = __('Black IP Access List','wp-cerber');
485
+
486
+ if ( cerber_block_check( $row->ip ) ) {
487
+ $block = ' color-blocked ';
488
+ $tip .= ' ' . __( 'Locked out', 'wp-cerber' );
489
+ }
490
+ else $block='';
491
+
492
+ if ( ! empty( $args['date'] ) && $args['date'] == 'ago' ) {
493
+ $date = cerber_ago_time( $row->stamp );
494
+ }
495
+ else {
496
+ $date = '<span title="'.$row->stamp.' / '.$row->session_id.' / '.$row->activity .'">'.cerber_date( $row->stamp ).'<span/>';
497
+ }
498
+
499
+ $list[] = '<td><div class="act-icon ip-acl' . $acl . ' ' . $block . '" title="' . $tip . '"></div>' . $ip . '</td><td>' . $hostname . '</td><td>' . $date . '</td><td>' . $activity . '</td><td>' . $name . '</td><td>' . $username . '</td>';
500
+ }
501
+
502
+ $titles = '<tr><th><div class="act-icon"></div>' . __( 'IP', 'wp-cerber' ) . '</th><th>' . __( 'Hostname', 'wp-cerber' ) . '</th><th>' . __( 'Date', 'wp-cerber' ) . '</th><th>' . __( 'Event', 'wp-cerber' ) . '</th><th>' . __( 'Local User', 'wp-cerber' ) . '</th><th>' . __( 'Username used', 'wp-cerber' ) . '</th></tr>';
503
+ $table = '<table id="crb-activity" class="widefat crb-table cerber-margin"><thead>' . $titles . '</thead><tfoot>' . $titles . '</tfoot><tbody><tr>' . implode( '</tr><tr>', $list ) . '</tr></tbody></table>';
504
+
505
+ if (empty($args['no_navi'])) $table .= cerber_page_navi($total, $per_page);
506
+
507
+ //$legend = '<p>'.sprintf(__('Showing last %d records from %d','wp-cerber'),count($rows),$total);
508
+
509
+ $info = $ip_text;
510
+
511
+ if (empty($args['no_export'])) $export_link = '<a class="button button-secondary cerber-button" href="'.wp_nonce_url(add_query_arg('export_activity',1),'control','cerber_nonce').'"><span class="dashicons dashicons-download" style="vertical-align: middle;"></span> '.__('Export','wp-cerber').'</a>';
512
+ }
513
+ else {
514
+ $info = '';
515
+ $table = '<p class="cerber-margin">'.__('No activity has been logged.','wp-cerber').'</p>';
516
+ }
517
+
518
+ if (empty($args['no_navi'])) {
519
+
520
+ unset( $labels[13], $labels[14], $labels[15] );
521
+ $labels = array( 0 => __( 'All activities', 'wp-cerber' ) ) + $labels;
522
+
523
+ if (!empty($_GET['filter_activity']) && !is_array($_GET['filter_activity'])) {
524
+ $selected = absint($_GET['filter_activity']);
525
+ }
526
+ else $selected = 0;
527
+
528
+ $filters = '<form style="float: left; width: auto;" action="">'
529
+ . cerber_select('filter_activity', $labels, $selected)
530
+ .'<input type="text" value="'.$search.'" name="search_activity" placeholder="'.__('Search for IP or username','wp-cerber').'"><input type="submit" value="'.__('Filter','wp-cerber').'" class="button">'
531
+ .'
532
+ <!-- Preserve values -->
533
+ <input type="hidden" name="filter_ip" value="'.htmlspecialchars($filter_ip).'" >
534
+ <input type="hidden" name="filter_user" value="'.$user_id.'" >
535
+ <input type="hidden" name="filter_login" value="'.$filter_login.'" >
536
+
537
+ <input type="hidden" name="page" value="cerber-security" >
538
+ <input type="hidden" name="tab" value="activity">
539
+ </form>';
540
+
541
+ $right_links = '<div style="float: right; width: auto; line-height: 26px;">'.cerber_subscribe_link().$export_link.'</div>';
542
+
543
+ $top_bar = '<div id = "activity-filter">'.$filters.$right_links.'</div><br style="clear: both;">';
544
+
545
+ $ret = '<div class="cerber-margin">' . $top_bar . $info . '</div>'.$ret;
546
+ }
547
+
548
+ $ret .= $table;
549
+
550
+ if ($echo) echo $ret;
551
+ else return $ret;
552
+
553
+ }
554
+
555
+ /**
556
+ * Parse arguments and create SQL query for retrieving rows from activity log
557
+ *
558
+ * @param array $args Optional arguments to use them instead of using $_GET
559
+ *
560
+ * @return array
561
+ * @since 4.16
562
+ */
563
+ function cerber_activity_query($args = array()){
564
+ global $wpdb;
565
+
566
+ $ret = array_fill( 0, 7, '' );
567
+ $where = array();
568
+ $falist = array();
569
+
570
+ $filter = null;
571
+ if (!empty($args['filter_activity'])) $filter = $args['filter_activity'];
572
+ elseif (isset($_GET['filter_activity'])) $filter = $_GET['filter_activity'];
573
+
574
+ if ($filter) { // Multiple activities can be requested this way: &filter_activity[]=11&filter_activity[]=7
575
+ if (is_array($filter)) {
576
+ $falist = array_filter(array_map('absint',$filter));
577
+ $filter = implode(',',$falist);
578
+ }
579
+ else {
580
+ $filter = absint($filter);
581
+ $falist = array($filter); // for further using in links
582
+ }
583
+ $where[] = 'log.activity IN ('.$filter.')';
584
+ }
585
+ $ret[2] = $falist;
586
+
587
+ if ( ! empty( $_GET['filter_ip'] ) ) {
588
+ $filter = trim( $_GET['filter_ip'] );
589
+ $range = cerber_any2range( $filter );
590
+ if ( is_array( $range ) ) {
591
+ $where[] = $wpdb->prepare( '(log.ip_long >= %d AND log.ip_long <= %d)', $range['begin'], $range['end'] );
592
+ } elseif ( cerber_is_ip_or_net( $filter ) ) {
593
+ $where[] = $wpdb->prepare( 'log.ip = %s', $filter );
594
+ //$ip_extra = $filter;
595
+ } else {
596
+ $where[] = "ip = 'produce-no-result'";
597
+ }
598
+ $ret[3] = $_GET['filter_ip'];
599
+ }
600
+
601
+ if (!empty($_GET['filter_login'])) {
602
+ $where[] = $wpdb->prepare('log.user_login = %s',$_GET['filter_login']);
603
+ $ret[4] = htmlspecialchars($_GET['filter_login']);
604
+ }
605
+ if (!empty($_GET['filter_user'])) {
606
+ $user_id = absint($_GET['filter_user']);
607
+ $ret[5] = $user_id;
608
+ $where[] = 'log.user_id = '.$user_id;
609
+ }
610
+ if (!empty($_GET['search_activity'])) {
611
+ $search = stripslashes_deep($_GET['search_activity']);
612
+ $ret[6] = htmlspecialchars($search);
613
+ $search = '%'.$search.'%';
614
+ $where[] = $wpdb->prepare('(log.ip LIKE %s OR log.user_login LIKE %s)', $search, $search);
615
+ }
616
+
617
+ if (!empty($where)) $where = 'WHERE '.implode(' AND ',$where);
618
+ else $where = '';
619
+
620
+ // Limits, if specified
621
+ if (isset($args['per_page'])) $per_page = $args['per_page'];
622
+ else $per_page = cerber_get_per_page();
623
+ $per_page = absint($per_page);
624
+ $ret[1] = $per_page;
625
+
626
+ if ( $per_page ) {
627
+ $limit = ' LIMIT ' . ( cerber_get_pn() - 1 ) * $per_page . ',' . $per_page;
628
+ $ret[0] = 'SELECT SQL_CALC_FOUND_ROWS * FROM ' . CERBER_LOG_TABLE . " log {$where} ORDER BY stamp DESC {$limit}";
629
+ }
630
+ else {
631
+ $ret[0] = 'SELECT SQL_CALC_FOUND_ROWS log.*,u.display_name,u.user_login ulogin FROM ' . CERBER_LOG_TABLE . ' log LEFT JOIN '.$wpdb->users . " u ON (log.user_id = u.ID) {$where} ORDER BY stamp DESC";
632
+ }
633
+
634
+ //$ret[0] = 'SELECT SQL_CALC_FOUND_ROWS log.*,u.display_name,u.user_login ulogin FROM ' . CERBER_LOG_TABLE . ' log LEFT JOIN ' . $wpdb->users . " u ON (log.user_id = u.ID) {$where} ORDER BY stamp DESC {$limit}";
635
+
636
+ return $ret;
637
+ /*
638
+ return array(
639
+ //'SELECT SQL_CALC_FOUND_ROWS * FROM ' . CERBER_LOG_TABLE . " {$where} ORDER BY stamp DESC {$limit}",
640
+ 'SELECT SQL_CALC_FOUND_ROWS log.*,u.display_name,u.user_login ulogin FROM ' . CERBER_LOG_TABLE . ' log LEFT JOIN '.$wpdb->users . " u ON (log.user_id = u.ID) {$where} ORDER BY stamp DESC {$limit}",
641
+ $per_page,
642
+ $falist,
643
+ $ip_extra,
644
+ $user_id,
645
+ );
646
+ */
647
+ }
648
+ /*
649
+ * Detailed information about IP address
650
+ * @since 2.7
651
+ *
652
+ */
653
+
654
+ function cerber_ip_extra_view($ip){
655
+ global $wp_cerber;
656
+ //if (!cerber_is_ip_or_net($ip)) return '';
657
+ if ( !@inet_pton( $ip ) ) {
658
+ return '';
659
+ }
660
+ $tip = ' ';
661
+ $acl = cerber_acl_check( $ip );
662
+ if ( $acl == 'W' ) {
663
+ $tip .= '<span class="color-green ip-info-label">'.__( 'White IP Access List', 'wp-cerber' ).'</span> ';
664
+ } elseif ( $acl == 'B' ) {
665
+ $tip .= '<span class="color-black ip-info-label">'.__( 'Black IP Access List', 'wp-cerber' ).'</span> ';
666
+ }
667
+ if ( cerber_block_check( $ip ) ) {
668
+ $tip .= '<span class="color-blocked ip-info-label">'.__( 'Locked out', 'wp-cerber' ).'</span> ';
669
+ }
670
+
671
+ // Filter activity by ...
672
+
673
+ /*$labels = cerber_get_labels('activity');
674
+ foreach ($labels as $tag => $label) {
675
+ //if (in_array($tag,$falist)) $links[] = '<b>'.$label.'</b>';
676
+ $links[] = '<a href="'.$base_url.'&filter_activity='.$tag.'">'.$label.'</a>';
677
+ }
678
+ $filters = implode(' | ',$links);*/
679
+
680
+ $whois = '';
681
+ $country = '';
682
+ $abuse = '';
683
+ $network = '';
684
+ $network_info = '';
685
+
686
+ if (cerber_get_options('ip_extra')) {
687
+ $ip_info = cerber_ip_whois_info($ip);
688
+ if (isset($ip_info['whois'])) $whois = '<div id="whois">' . $ip_info['whois'] . '</div>';
689
+ if (isset($ip_info['error'])) $whois = '<div id="whois">' . $ip_info['error'] . '</div>';
690
+ if (isset($ip_info['country'])) $country = $ip_info['country'];
691
+ if (!empty($ip_info['data']['abuse-mailbox'])) $abuse = '<p>'.__('Abuse email:','wp-cerber').' <a href="mailto:'.$ip_info['data']['abuse-mailbox'].'">'.$ip_info['data']['abuse-mailbox'].'</a></p>';
692
+ if (!empty($ip_info['data']['network'])) {
693
+ $network = $ip_info['data']['network'];
694
+ $range = cerber_any2range($network);
695
+ $network_info = '<p>'.__('Network:','wp-cerber').' '.$network.' &nbsp; <a href="'.cerber_admin_link('activity',array('filter_ip'=>$range['range'])).'">'.__('Check for activity','wp-cerber').'</a></p>';
696
+ }
697
+ }
698
+
699
+ $form = '';
700
+ //if (!cerber_is_myip($ip) && !cerber_acl_check($ip)) $form = '<form action="" method="post"><input type="hidden" name="add_acl_B" value="'.$ip.'"><input type="submit" class="button button-primary cerber-button" value="'.__('Add IP to the Black List','wp-cerber').'" >'.wp_nonce_field('cerber_dashboard','cerber_nonce').'</form>';
701
+
702
+ if (!cerber_is_myip($ip) && !cerber_acl_check($ip)) {
703
+
704
+ if ( $network ) {
705
+ $net_button = '<button type="submit" value="' . $network . '" name="add_acl_B" class="button button-primary cerber-button">';
706
+ } else {
707
+ $net_button = '<button disabled="disabled" class="button button-secondary cerber-button">';
708
+ }
709
+ $net_button .= '<span class="dashicons-before dashicons-networking"></span> ' . __( 'Add network to the Black List', 'wp-cerber' ) . '</button> ';
710
+
711
+ $form = '<form id="add-acl-black" action="" method="post">
712
+ <!-- <input type="hidden" name="add_acl_B" value=""> -->
713
+ <button type="submit" value="'.$ip.'" name="add_acl_B" class="button button-primary cerber-button"><span class="dashicons-before dashicons-desktop"></span> '.__('Add IP to the Black List','wp-cerber').'</button> '.
714
+ $net_button.
715
+ wp_nonce_field('cerber_dashboard','cerber_nonce').
716
+ '</form>';
717
+ }
718
+
719
+ $ret = '<div id="ip-extra">
720
+ <table>
721
+ <tr><td><p><span id = "ip-address">' . $ip . '</span><span id = "ip-country">' . $country .'</span>'. $tip .'</p>' . $network_info . $abuse . '</td><td>' . $form . '</td></tr>
722
+ </table>
723
+ </div>';
724
+
725
+ return $ret.$whois;
726
+ }
727
+
728
+ /*
729
+ Add admin menu, init admin stuff
730
+ */
731
+ if ( ! is_multisite() ) {
732
+ add_action( 'admin_menu', 'cerber_admin_menu' );
733
+ }
734
+ else {
735
+ add_action( 'network_admin_menu', 'cerber_admin_menu' ); // only network wide menu allowed in multisite mode
736
+ }
737
+ function cerber_admin_menu() {
738
+
739
+ if ( cerber_is_admin_page() ) {
740
+ cerber_check_environment();
741
+ cerber_watchdog();
742
+ }
743
+
744
+ $hook = add_menu_page( __( 'WP Cerber Security', 'wp-cerber' ), __( 'WP Cerber', 'wp-cerber' ), 'manage_options', 'cerber-security', 'cerber_settings_page', 'dashicons-shield', '100' );
745
+ add_action( 'load-' . $hook, "cerber_screen_options" );
746
+ add_submenu_page( 'cerber-security', __( 'Cerber Dashboard', 'wp-cerber' ), __( 'Dashboard' ), 'manage_options', 'cerber-security', 'cerber_settings_page' );
747
+
748
+ add_submenu_page( 'cerber-security', __( 'Cerber antispam settings', 'wp-cerber' ), __( 'Antispam', 'wp-cerber' ), 'manage_options', 'cerber-recaptcha', 'cerber_recaptcha_page' );
749
+ add_submenu_page( 'cerber-security', __( 'Cerber tools', 'wp-cerber' ), __( 'Tools', 'wp-cerber' ), 'manage_options', 'cerber-tools', 'cerber_tools_page' );
750
+
751
+ }
752
+
753
+ add_action( 'admin_bar_menu', 'cerber_admin_bar' );
754
+ function cerber_admin_bar( $wp_admin_bar ) {
755
+ if (!is_multisite()) return;
756
+ $args = array(
757
+ 'parent' => 'network-admin',
758
+ 'id' => 'cerber_admin',
759
+ 'title' => __('WP Cerber','wp-cerber'),
760
+ 'href' => cerber_admin_link(),
761
+ );
762
+ $wp_admin_bar->add_node( $args );
763
+ }
764
+
765
+ /*
766
+ Check if currently displayed page is a Cerber admin dashboard page with optional checking a set of GET params
767
+ */
768
+ function cerber_is_admin_page($force = true, $params = array()){
769
+
770
+ if (!is_admin()) return false;
771
+
772
+ $ret = false;
773
+
774
+ if (isset($_GET['page']) && false !== strpos($_GET['page'],'cerber-')) {
775
+ $ret = true;
776
+ if ($params) {
777
+ foreach ( $params as $param => $value) {
778
+ if (!isset($_GET[$param]) || $_GET[$param] != $value){
779
+ $ret = false;
780
+ break;
781
+ }
782
+ }
783
+ }
784
+ }
785
+ if (!$force || $ret) return $ret;
786
+
787
+ if (!$screen = get_current_screen()) return false;
788
+ if ($screen->base == 'plugins') return true;
789
+ /*
790
+ if ($screen->parent_base == 'options-general') return true;
791
+ if ($screen->parent_base == 'settings') return true;
792
+ */
793
+ return false;
794
+ }
795
+
796
+ /*
797
+ Add custom columns to the Users screen
798
+ */
799
+ add_filter('manage_users_columns' , 'cerber_u_columns');
800
+ function cerber_u_columns($columns) {
801
+ return array_merge( $columns,
802
+ array('cbcc' => __('Comments','wp-cerber'),
803
+ 'cbla' => __('Last login','wp-cerber') ,
804
+ 'cbfl' => __('Failed attempts in last 24 hours','wp-cerber'),
805
+ 'cbdr' => __('Date of registration','wp-cerber')) );
806
+ }
807
+ add_filter( 'manage_users_sortable_columns','cerber_u_sortable');
808
+ function cerber_u_sortable($sortable_columns) {
809
+ $sortable_columns['cbdr']='user_registered';
810
+ return $sortable_columns;
811
+ }
812
+ /*
813
+ Display custom columns on the Users screen
814
+ */
815
+ add_filter( 'manage_users_custom_column' , 'cerber_show_u_columns', 10, 3 );
816
+ function cerber_show_u_columns($value, $column, $user_id) {
817
+ global $wpdb,$current_screen,$user_login;
818
+ $ret = $value;
819
+ switch ($column) {
820
+ case 'cbcc' : // to get this work we need add filter 'preprocess_comment'
821
+ if ($com = get_comments(array('author__in' => $user_id))) $ret = count($com);
822
+ else $ret = 0;
823
+ break;
824
+ case 'cbla' :
825
+ $ret = $wpdb->get_var('SELECT MAX(stamp) FROM '.CERBER_LOG_TABLE.' WHERE user_id = '.$user_id);
826
+ if ($ret) {
827
+ $act_link = cerber_admin_link('activity');
828
+ $ret = '<a href="'.$act_link.'&filter_user='.$user_id.'">'.cerber_date($ret).'</a>';
829
+ }
830
+ else $ret=__('Never','wp-cerber');
831
+ break;
832
+ case 'cbfl' :
833
+ $act_link = cerber_admin_link('activity');
834
+ $u=get_userdata($user_id);
835
+ $failed = $wpdb->get_var('SELECT count(user_id) FROM '.CERBER_LOG_TABLE.' WHERE user_login = \''.$u->user_login.'\' AND activity = 7 AND stamp > ' . (time() - 24 * 3600));
836
+ $ret = '<a href="'.$act_link.'&filter_login='.$u->user_login.'&filter_activity=7">'.$failed.'</a>';
837
+ break;
838
+ case 'cbdr' :
839
+ $time = strtotime($wpdb->get_var("SELECT user_registered FROM $wpdb->users WHERE id = ".$user_id));
840
+ $ret = cerber_date($time);
841
+ break;
842
+ }
843
+ return $ret;
844
+ }
845
+
846
+ /*
847
+ Registering admin widgets
848
+ */
849
+ if (!is_multisite()) add_action( 'wp_dashboard_setup', 'cerber_widgets' );
850
+ else add_action( 'wp_network_dashboard_setup', 'cerber_widgets' );
851
+ function cerber_widgets() {
852
+ if (!current_user_can('manage_options')) return;
853
+ if (current_user_can( 'manage_options')) {
854
+ wp_add_dashboard_widget( 'cerber_quick', __('Cerber Quick View','wp-cerber'), 'cerber_quick_w');
855
+ }
856
+ }
857
+ /*
858
+ Cerber Quick View widget
859
+ */
860
+ function cerber_quick_w(){
861
+ global $wpdb,$wp_cerber;
862
+
863
+ $dash = cerber_admin_link();
864
+ $act = cerber_admin_link('activity');
865
+ $acl = cerber_admin_link('acl');
866
+ $loc = cerber_admin_link('lockouts');
867
+
868
+ $failed = $wpdb->get_var('SELECT count(ip) FROM '. CERBER_LOG_TABLE .' WHERE activity IN (7) AND stamp > '.(time() - 24 * 3600));
869
+ $failed_prev = $wpdb->get_var('SELECT count(ip) FROM '. CERBER_LOG_TABLE .' WHERE activity IN (7) AND stamp > '.(time() - 48 * 3600).' AND stamp < '.(time() - 24 * 3600));
870
+
871
+ $failed_ch = cerber_percent($failed_prev,$failed);
872
+
873
+ $locked = $wpdb->get_var('SELECT count(ip) FROM '. CERBER_LOG_TABLE .' WHERE activity IN (10,11) AND stamp > '.(time() - 24 * 3600));
874
+ $locked_prev = $wpdb->get_var('SELECT count(ip) FROM '. CERBER_LOG_TABLE .' WHERE activity IN (10,11) AND stamp > '.(time() - 48 * 3600).' AND stamp < '.(time() - 24 * 3600));
875
+
876
+ $locked_ch = cerber_percent($locked_prev,$locked);
877
+
878
+ //$lockouts = $wpdb->get_var('SELECT count(ip) FROM '. CERBER_BLOCKS_TABLE);
879
+
880
+ $lockouts = cerber_blocked_num();
881
+ if ($last = $wpdb->get_var('SELECT MAX(stamp) FROM '.CERBER_LOG_TABLE.' WHERE activity IN (10,11)')) {
882
+ //$last = cerber_date($last);
883
+ $last = cerber_ago_time( $last );
884
+ }
885
+ else $last = __('Never','wp-cerber');
886
+ $w_count = $wpdb->get_var('SELECT count(ip) FROM '. CERBER_ACL_TABLE .' WHERE tag ="W"' );
887
+ $b_count = $wpdb->get_var('SELECT count(ip) FROM '. CERBER_ACL_TABLE .' WHERE tag ="B"' );
888
+
889
+ if (cerber_is_citadel()) $citadel = '<span style="color:#FF0000;">'.__('active','wp-cerber').'</span> (<a href="'.wp_nonce_url(add_query_arg(array('citadel' => 'deactivate')),'control','cerber_nonce').'">'.__('deactivate','wp-cerber').'</a>)';
890
+ else {
891
+ if ($wp_cerber->getSettings('ciperiod')) $citadel = __('not active','wp-cerber');
892
+ else $citadel = __('disabled','wp-cerber');
893
+ }
894
+
895
+ echo '<div class="cerber-widget">';
896
+
897
+ echo '<table style="width:100%;"><tr><td style="width:50%; vertical-align:top;"><table><tr><td class="bigdig">'.$failed.'</td><td class="per">'.$failed_ch.'</td></tr></table><p>'.__('failed attempts','wp-cerber').' '.__('in 24 hours','wp-cerber').'<br/>(<a href="'.$act.'&filter_activity=7">'.__('view all','wp-cerber').'</a>)</p></td>';
898
+ echo '<td style="width:50%; vertical-align:top;"><table><tr><td class="bigdig">'.$locked.'</td><td class="per">'.$locked_ch.'</td></tr></table><p>'.__('lockouts','wp-cerber').' '.__('in 24 hours','wp-cerber').'<br/>(<a href="'.$act.'&filter_activity[]=10&filter_activity[]=11">'.__('view all','wp-cerber').'</a>)</p></td></tr></table>';
899
+
900
+ echo '<table id="quick-info"><tr><td>'.__('Lockouts at the moment','wp-cerber').'</td><td>'.$lockouts.'</td></tr>';
901
+ echo '<tr><td>'.__('Last lockout','wp-cerber').'</td><td>'.$last.'</td></tr>';
902
+ echo '<tr><td style="padding-top:15px;">'.__('White IP Access List','wp-cerber').'</td><td style="padding-top:15px;"><b>'.$w_count.' '._n('entry','entries',$w_count,'wp-cerber').'</b></td></tr>';
903
+ echo '<tr><td>'.__('Black IP Access List','wp-cerber').'</td><td><b>'.$b_count.' '._n('entry','entries',$b_count,'wp-cerber').'</b></td></tr>';
904
+ echo '<tr><td style="padding-top:15px;">'.__('Citadel mode','wp-cerber').'</td><td style="padding-top:15px;"><b>'.$citadel.'</b></td></tr>';
905
+ $dev = $wp_cerber->getSettings('pbdevice');
906
+ if (!$dev || $dev == 'N') echo '<tr><td style="padding-top:15px;">'.__('Push notifications','wp-cerber').'</td><td style="padding-top:15px;"><b>not configured</b></td></tr>';
907
+ echo '</table></div>';
908
+
909
+ echo '<div class="wilinks">
910
+ <a href="'.$dash.'"><span class="dashicons dashicons-dashboard"></span> ' . __('Dashboard','wp-cerber').'</a> |
911
+ <a href="'.$act.'"><span class="dashicons dashicons-welcome-view-site"></span> ' . __('Activity','wp-cerber').'</a> |
912
+ <a href="'.$loc.'"><span class="dashicons dashicons-shield"></span> ' . __('Lockouts','wp-cerber').'</a> |
913
+ <a href="'.$acl.'"><span class="dashicons dashicons-admin-network"></span> ' . __('Access Lists','wp-cerber').'</a>
914
+ </div>';
915
+ if ($msg = cerber_update_check()) echo '<div class="up-cerber">'.$msg.'</div>';
916
+ }
917
+
918
+ /*
919
+ Show Help tab screen
920
+ */
921
+ function cerber_show_help() {
922
+
923
+ $assets_url = plugin_dir_url( CERBER_FILE ) . 'assets';
924
+
925
+ ?>
926
+ <div id="crb-help">
927
+
928
+ <h3>Do you have a question or need help?</h3>
929
+
930
+ <p>Support is provided on the WordPress forums for free, though please note that it is free support hence it is
931
+ not always possible to answer all questions on a timely manner, although I do try.</p>
932
+
933
+ <p><span class="dashicons-before dashicons-controls-play" style="vertical-align: middle;"></span> <a
934
+ href="http://wordpress.org/support/plugin/wp-cerber">Get answer on the support forum</a>.</p>
935
+
936
+
937
+ <h3>Mobile and browser notifications with Pushbullet</h3>
938
+
939
+ <p>
940
+ WP Cerber allows you to easily enable desktop and mobile notifications and get notifications instantly and for free. In a desktop browser, you will get popup messages even if you logged out of your WordPress.
941
+ Before you start receiving notifications you need to install a free Pushbullet mobile application on your mobile device or free browser extension available for Chrome, Firefox and Opera.
942
+ </p>
943
+ <p><span class="dashicons-before dashicons-controls-play" style="vertical-align: middle;"></span>
944
+ <a href="http://wpcerber.com/wordpress-mobile-and-browser-notifications-pushbullet/">A three steps instruction how to set up push notifications</a>
945
+ </p>
946
+ <p><span class="dashicons-before dashicons-controls-play" style="vertical-align: middle;"></span>
947
+ <a href="http://wpcerber.com/wordpress-notifications-made-easy/">How to get alerts for specific activity on your website</a>
948
+ </p>
949
+
950
+ <h3>What is Drill down IP?</h3>
951
+
952
+ <p>
953
+ To get extra information like country, company, network info, abuse contact etc. for a specific IP address,
954
+ the plugin makes requests to a limited set of external WHOIS servers which are maintained by appropriate
955
+ Registry. All Registry are accredited by ICANN, so there are no reasons for security concerns. Retrieved
956
+ information isn't storing in the database, but it is caching for 24 hours to avoid excessive requests and
957
+ get faster response.
958
+ </p>
959
+ <p><span class="dashicons-before dashicons-controls-play" style="vertical-align: middle;"></span> <a
960
+ href="http://wpcerber.com?p=194">Read more in the Security Blog</a></p>
961
+
962
+ <h3>What is Cerber Lab?</h3>
963
+
964
+ <p>
965
+ Cerber Laboratory is a forensic team behind the WP Cerber security plugin. The team studies and analyzes
966
+ patterns of hacker and botnet attacks, malware, vulnerabilities in major plugins and how they are
967
+ exploitable on WordPress powered websites.
968
+ </p>
969
+ <p><span class="dashicons-before dashicons-controls-play" style="vertical-align: middle;"></span>
970
+ <a href="http://wpcerber.com/cerber-laboratory/">Know more</a>
971
+ </p>
972
+
973
+ <h3>Do you have an idea for a cool new feature that you would love to see in WP Cerber?</h3>
974
+
975
+ <p>
976
+ Feel free to submit your ideas here: <a href="http://wpcerber.com/new-feature-request/">New Feature
977
+ Request</a>.
978
+ </p>
979
+
980
+ <h3>Are you ready to translate this plugin into your language?</h3>
981
+
982
+ <p>I would appreciate that! Please, <a href="http://wpcerber.com/support/">notify me</a></p>
983
+
984
+ <h3 style="margin: 40px 0 40px 0;">Check out other plugins from the trusted author</h3>
985
+
986
+ <div>
987
+
988
+ <a href="https://wordpress.org/plugins/plugin-inspector/">
989
+
990
+ <img src="<?php echo $assets_url . '/inspector.png' ?>"
991
+ style="float: left; width: 128px; margin-right: 20px;"/>
992
+ </a>
993
+ <h3>Plugin for inspecting code of plugins on your site: <a
994
+ href="https://wordpress.org/plugins/plugin-inspector/">Plugin Inspector</a></h3>
995
+ <p style="font-size: 110%">The Plugin Inspector plugin is an easy way to check plugins installed on your
996
+ WordPress and make sure
997
+ that plugins does not use deprecated WordPress functions and some unsafe functions like eval,
998
+ base64_decode, system, exec etc. Some of those functions may be used to load malicious code (malware)
999
+ from the external source directly to the site or WordPress database.
1000
+ </p>
1001
+ <p style="font-size: 110%">Plugin Inspector allows you to view all the deprecated functions complete with
1002
+ path, line number,
1003
+ deprecation function name, and the new recommended function to use. The checks are run through a simple
1004
+ admin page and all results are displayed at once. This is very handy for plugin developers or anybody
1005
+ who want to know more about installed plugins.
1006
+ </p>
1007
+ </div>
1008
+
1009
+ <div style="margin: 40px 0 40px 0;">
1010
+ <a href="https://wordpress.org/plugins/goo-translate-widget/">
1011
+ <img src="<?php echo $assets_url . '/goo-translate.png' ?>"
1012
+ style="float: left; width: 128px; margin-right: 20px;"/>
1013
+ </a>
1014
+
1015
+ <h3>Plugin to quick translate site: <a href="https://wordpress.org/plugins/goo-translate-widget/">Google
1016
+ Translate Widget</a></h3>
1017
+ <p style="font-size: 110%">Google Translate Widget expands your global reach quickly and easily. Google Translate is a free
1018
+ multilingual machine translation service provided by Google to translate websites. And now you can allow
1019
+ visitors around of the world to get your site in their native language. Just put widget on the sidebar
1020
+ with one click.</p>
1021
+
1022
+ </div>
1023
+
1024
+ </div>
1025
+ <?php
1026
+ }
1027
+
1028
+ /**
1029
+ *
1030
+ * Dashboard v.1
1031
+ *
1032
+ * @since 4.0
1033
+ *
1034
+ */
1035
+ function cerber_show_dashboard() {
1036
+ global $wpdb;
1037
+
1038
+ echo '<div style="padding-right: 30px;">';
1039
+
1040
+ $period = time() - 24 * 3600;
1041
+ $unique_ip = $wpdb->get_var('SELECT COUNT(DISTINCT ip) FROM '. CERBER_LOG_TABLE .' WHERE activity IN (10, 11, 16, 40, 50, 51, 52, 53, 54) AND stamp > '.$period);
1042
+ $kpi_locknum = $wpdb->get_var('SELECT COUNT(ip) FROM '. CERBER_BLOCKS_TABLE);
1043
+
1044
+ // TODO: Add spam performance as percentage Denied / Allowed comments
1045
+
1046
+ $kpi_list = array(
1047
+ //array( __('Incidents detected','wp-cerber').'</a>', cerber_count_log( array( 16, 40, 50, 51, 52, 53, 54 ) ) ),
1048
+ array( __('Malicious activities mitigated','wp-cerber').'</a>', cerber_count_log( array( 10, 11, 16, 40, 50, 51, 52, 53, 54 ) ) ),
1049
+ array( __('Spam comments denied','wp-cerber'), cerber_count_log( array( 16 ) ) ),
1050
+ array( __('Malicious IP addresses detected','wp-cerber'), $unique_ip ),
1051
+ array( __('Lockouts occurred','wp-cerber'), cerber_count_log( array( 10, 11 ) ) ),
1052
+ array( __('Locked out IP now','wp-cerber'), $kpi_locknum ),
1053
+ );
1054
+
1055
+ $kpi_show = '';
1056
+ foreach ($kpi_list as $kpi){
1057
+ $kpi_show .= '<td>'.$kpi[1].'</td><td><span style="z-index: 10;">'.$kpi[0].'</span></td>';
1058
+ }
1059
+
1060
+ $kpi_show = '<table id = "crb-kpi" class="cerber-margin"><tr>'.$kpi_show.'</tr></table>';
1061
+
1062
+ echo '<div>' . $kpi_show . '<p style="text-align: right; margin: 0;">in the last 24 hours</p></div>';
1063
+
1064
+ //$total = $wpdb->get_var( 'SELECT count(ip) FROM ' . CERBER_LOG_TABLE );
1065
+ //if ($total > $num) $l1 = 'Last ' . $num . ' suspect events are displayed';
1066
+
1067
+ $links = array();
1068
+ $links[] = '<a href="' . cerber_admin_link( 'activity' ) . '">' . __( 'View all', 'wp-cerber' ) . '</a>';
1069
+
1070
+ $labels = cerber_get_labels();
1071
+ $set = array( 5 );
1072
+ foreach ( $set as $item ) {
1073
+ $links[] = '<a href="' . cerber_admin_link( 'activity' ) . '&filter_activity=' . $item . '">' . $labels[ $item ] . '</a>';
1074
+ }
1075
+
1076
+ $links[] = '<a href="' . cerber_activity_link( array( 2 ) ) . '">' . __( 'User registered', 'wp-cerber' ) . '</a>';
1077
+ $links[] = '<a href="' . cerber_activity_link( array( 10, 11, 16, 20, 40, 50, 51, 52, 53, 54, 55 ) ) . '">' . __( 'All suspicious activity', 'wp-cerber' ) . '</a>';
1078
+
1079
+
1080
+ $nav_links = '<span style="display: inline-block; margin-left: 1em;">' . implode(' &nbsp;|&nbsp; ',$links) . '</span>';
1081
+
1082
+ echo '<table class="cerber-margin"><tr><td><h2 style="margin-bottom:0.5em;">' . __( 'Activity', 'wp-cerber' ) . '</h2></td><td>' . $nav_links . '</td></tr></table>';
1083
+
1084
+ cerber_show_activity( array(
1085
+ 'filter_activity' => array( 1, 2, 5, 10, 11, 12, 16, 40, 41, 42, 50, 51, 52, 53, 54 ),
1086
+ 'per_page' => 10,
1087
+ 'no_navi' => true,
1088
+ 'no_export' => true,
1089
+ 'no_details' => true,
1090
+ 'date' => 'ago'
1091
+ ) );
1092
+
1093
+
1094
+ //$total = $wpdb->get_var( 'SELECT count(ip) FROM ' . CERBER_BLOCKS_TABLE );
1095
+ //if ($total > $num) $l2 = '<p>Last ' . $num . ' lockouts of '.$total.' are displayed</p>';
1096
+
1097
+ $view = '<a href="' . cerber_admin_link( 'lockouts' ) . '">' . __( 'View all', 'wp-cerber' ) . '</a>';
1098
+ echo '<table class="cerber-margin" style="margin-top:2em;"><tr><td><h2 style="margin-bottom:0.5em;">' . __( 'Recently locked out IP addresses', 'wp-cerber' ) . '</h3></td><td> | ' . $view . '</td></tr></table>';
1099
+
1100
+ cerber_show_lockouts( array(
1101
+ 'per_page' => 10,
1102
+ 'no_navi' => true
1103
+ ) );
1104
+
1105
+ echo '</div>';
1106
+ }
1107
+
1108
+
1109
+ /*
1110
+ Admin aside bar
1111
+ */
1112
+ function cerber_show_aside($page){
1113
+
1114
+ if (in_array($page,array('activity','lockouts'))) return;
1115
+
1116
+ $aside = array();
1117
+
1118
+ if (in_array($page,array('main'))) {
1119
+ $aside[]='<div class="crb-box">
1120
+ <h3>'.__('Confused about some settings?','wp-cerber').'</h3>'
1121
+ .__('You can easily load default recommended settings using button below','wp-cerber').'
1122
+ <p style="text-align:center;">
1123
+ <input type="button" class="button button-primary" value="'.__('Load default settings','wp-cerber').'" onclick="button_default_settings()" />
1124
+ <script type="text/javascript">function button_default_settings(){
1125
+ if (confirm("'.__('Are you sure?','wp-cerber').'")) {
1126
+ click_url = "'.wp_nonce_url(add_query_arg(array('load_settings'=>'default')),'control','cerber_nonce').'";
1127
+ window.location = click_url.replace(/&amp;/g,"&");
1128
+ }
1129
+ }</script>
1130
+ </p>
1131
+ <p><i>* '.__("doesn't affect Custom login URL and Access Lists",'wp-cerber').'</i></p>
1132
+ </div>';
1133
+ }
1134
+
1135
+ $aside[] = '<div class="crb-box" id = "crb-subscribe">
1136
+ <div class="crb-box-inner">
1137
+ <h3>Be in touch with developer</h3>
1138
+ <p>Receive updates and helpful ideas to protect your website, blog, or business online.</p>
1139
+ <p>
1140
+ <span class="dashicons-before dashicons-email-alt"></span> &nbsp; <a href="http://wpcerber.com/subscribe-newsletter/" target="_blank">Subscribe to Cerber\'s newsletter</a></br>
1141
+ <span class="dashicons-before dashicons-twitter"></span> &nbsp; <a href="https://twitter.com/wpcerber">Follow Cerber on Twitter</a></br>
1142
+ <span class="dashicons-before dashicons-facebook"></span> &nbsp; <a href="https://www.facebook.com/wpcerber/">Follow Cerber on Facebook</a>
1143
+ </p>
1144
+ </div>
1145
+ </div>
1146
+ ';
1147
+
1148
+ $aside[] = '<div class="crb-box" id = "crb-donate">
1149
+ <div class="crb-box-inner">
1150
+ <h3>'.__('Donate','wp-cerber').'</h3>
1151
+ <p>Hi! It\'s Gregory. I am an author of this plugin. Please consider making a donation to support the continued development and free support of this plugin because I spend my free time for that. Any help is greatly appreciated. Thanks!</p>
1152
+
1153
+ <div style="text-align:center;">
1154
+ <form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
1155
+ <input type="hidden" name="cmd" value="_s-xclick">
1156
+ <input type="hidden" name="hosted_button_id" value="SR8RJXFU35EW8">
1157
+ <input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG_global.gif" border="0" name="submit" alt="PayPal – The safer, easier way to pay online.">
1158
+ <img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
1159
+ </form>
1160
+ </div>
1161
+
1162
+ </div>
1163
+ </div>';
1164
+
1165
+ /*$aside[] = '<div class="crb-box" id = "crb-jetflow">
1166
+ <div class="crb-box-inner">
1167
+ <h3>Automate WordPress</h3>
1168
+ <p>Create automation scenarios without coding knowledge with the jetFlow.io plugin. Customize your WordPress in no time. No programming knowledge needed anymore.</p>
1169
+ <p><span class="dashicons-before dashicons-layout"></span> &nbsp; <a href="http://jetflow.io/" target="_blank">Download the jetFlow.io plugin</a></p>
1170
+ </div>
1171
+ </div>
1172
+ ';*/
1173
+
1174
+ $aside[] = '<div class="crb-box" id = "crb-blog">
1175
+ <div class="crb-box-inner">
1176
+ <!-- <h3><span class="dashicons-before dashicons-lightbulb"></span> Read Cerber\'s blog</h3> -->
1177
+ <h3>WordPress security blog</h3>
1178
+ <p><a href="http://wpcerber.com/wordpress-mobile-and-browser-notifications-pushbullet/" target="_blank">Instant mobile and browser notifications</a>
1179
+ <p><a href="http://wpcerber.com/wordpress-notifications-made-easy/" target="_blank">WordPress notifications made easy</a>
1180
+ <p><a href="http://wpcerber.com/why-its-important-to-restrict-access-to-rest-api/" target="_blank">Why it’s important to restrict access to the WP REST API</a>
1181
+ <p><a href="http://wpcerber.com/why-we-need-to-use-custom-login-url/" target="_blank">Why you need to use Custom login URL</a>
1182
+ <p><a href="http://wpcerber.com/using-ip-access-lists-to-protect-wordpress/" target="_blank">How IP Access Lists works</a>
1183
+ <p><a href="http://wpcerber.com/hardening-wordpress-with-wp-cerber/" target="_blank">Hardening WordPress with WP Cerber</a>
1184
+ <p><a href="http://wpcerber.com/hardening-wordpress-with-wp-cerber-and-nginx/" target="_blank">Hardening WordPress with WP Cerber and NGINX</a>
1185
+
1186
+ </div>
1187
+ </div>';
1188
+
1189
+ echo '<div id="crb-aside">'.implode(' ',$aside).'</div>';
1190
+ }
1191
+
1192
+ /*
1193
+ Displaying notices in the dashboard
1194
+ */
1195
+ add_action( 'admin_notices', 'cerber_show_admin_notice', 999 );
1196
+ add_action( 'network_admin_notices', 'cerber_show_admin_notice', 999 );
1197
+ function cerber_show_admin_notice(){
1198
+ global $cerber_shown;
1199
+ $cerber_shown = false;
1200
+
1201
+ if (cerber_is_citadel() && current_user_can('manage_options')) {
1202
+ echo '<div class="update-nag crb-alarm"><p>'.
1203
+ __('Attention! Citadel mode is now active. Nobody is able to log in.','wp-cerber').
1204
+ ' &nbsp; <a href="'.wp_nonce_url(add_query_arg(array('citadel' => 'deactivate')),'control','cerber_nonce').'">'.__('Deactivate','wp-cerber').'</a>'.
1205
+ ' | <a href="' . cerber_admin_link('activity') . '">' . __('View Activity','wp-cerber') . '</a>' .
1206
+ '</p></div>';
1207
+ }
1208
+
1209
+ if (!cerber_is_admin_page()) return;
1210
+
1211
+ cerber_update_check(); // TODO: move to cron
1212
+
1213
+ //if ($notices = get_site_option('cerber_admin_notice'))
1214
+ // echo '<div class="update-nag crb-note"><p>'.$notices.'</p></div>'; // class="updated" - green, class="update-nag" - yellow and above the page title,
1215
+ //if ($notices = get_site_option('cerber_admin_message'))
1216
+ // echo '<div class="updated" style="overflow: auto;"><p>'.$notices.'</p></div>'; // class="updated" - green, class="update-nag" - yellow and above the page title,
1217
+
1218
+ $all = array();
1219
+ if ( ! empty( $_GET['settings-updated'] ) ) {
1220
+ $all[] = array( __( 'Settings saved', 'wp-cerber' ), 'updated' );
1221
+ }
1222
+
1223
+ if ( $notice = get_site_option( 'cerber_admin_notice' ) ) {
1224
+ $all[] = array( $notice, 'error' ); // red
1225
+ }
1226
+ if ( $notice = get_site_option( 'cerber_admin_message' ) ) {
1227
+ $all[] = array( $notice, 'updated' ); // green
1228
+ }
1229
+
1230
+
1231
+ // yellow #ffb900;
1232
+ if ($all) {
1233
+ $cerber_shown = true;
1234
+ foreach ( $all as $notice ) {
1235
+ echo '<div id="setting-error-settings_updated" class="' . $notice[1] . ' settings-error notice is-dismissible">
1236
+ <p>' . $notice[0] . '</p><button type="button" class="notice-dismiss"><span class="screen-reader-text">Dismiss this notice.</span></button></div>';
1237
+ }
1238
+ }
1239
+
1240
+ update_site_option('cerber_admin_notice', null);
1241
+ update_site_option('cerber_admin_message', null);
1242
+
1243
+ if ($notice = get_site_option('cerber_admin_info')) { // need to be dismissed manually
1244
+ $cerber_shown = true;
1245
+ echo '<div class="updated cerber-msg" style="overflow: auto;"><p>'.$notice.'</p></div>';
1246
+ }
1247
+ }
1248
+
1249
+ /**
1250
+ * Detects currently displaying Tab on admin page
1251
+ *
1252
+ * @param string $default
1253
+ * @param array $available
1254
+ *
1255
+ * @return string
1256
+ */
1257
+ function cerber_get_tab( $default = '', $available = array() ) {
1258
+
1259
+ $tab = isset( $_GET['tab'] ) ? $_GET['tab'] : $default;
1260
+
1261
+ if ( ! in_array( $tab, $available ) ) {
1262
+ $tab = $default;
1263
+ }
1264
+
1265
+ return $tab;
1266
+ }
1267
+
1268
+ /*
1269
+ Checks for a new version of WP Cerber and creates messages if needed
1270
+ */
1271
+ function cerber_update_check() {
1272
+ $ret = false;
1273
+ if ( $updates = get_site_transient( 'update_plugins' ) ) {
1274
+ $key = cerber_plug_in();
1275
+ if ( isset( $updates->checked[ $key ] ) && isset( $updates->response[ $key ] ) ) {
1276
+ $old = $updates->checked[ $key ];
1277
+ $new = $updates->response[ $key ]->new_version;
1278
+ if ( 1 === version_compare( $new, $old ) ) {
1279
+ // current version is lower than latest
1280
+ $ret = __( 'New version is available', 'wp-cerber' ) . ' <span class="dashicons dashicons-arrow-right"></span>';
1281
+ if ( is_multisite() ) {
1282
+ $href = network_admin_url( 'plugins.php?plugin_status=upgrade' );
1283
+ } else {
1284
+ $href = admin_url( 'plugins.php?plugin_status=upgrade' );
1285
+ }
1286
+ $msg = '<b>' . $ret . '</b> <a href="' . $href . '">' . sprintf( __( 'Update to version %s of WP Cerber', 'wp-cerber' ), $new ) . '</a>';
1287
+ cerber_admin_message( $msg );
1288
+ $ret = '<a href="' . $href . '">' . $ret . '</a>';
1289
+
1290
+ // TODO: implement as a cron task, daily
1291
+ //update_site_option('cerber_new_version',array($new, time()));
1292
+ //cerber_send_notify('new_version');
1293
+ }
1294
+ }
1295
+ }
1296
+ return $ret;
1297
+ }
1298
+
1299
+ /**
1300
+ *
1301
+ * Generates a link for subscribing on a currently displaying Activity page
1302
+ *
1303
+ * @return string Link for using in the Dashboard, HTML
1304
+ */
1305
+ function cerber_subscribe_link() {
1306
+ $args = array_values(cerber_subscribe_params());
1307
+
1308
+ // All activities, without any filter is not allowed
1309
+ $empty = array_filter($args);
1310
+ if (empty($empty)) return '';
1311
+
1312
+ $subs = get_site_option( '_cerber_subs' );
1313
+
1314
+ // Limit on number of subscriptions
1315
+ if ( count( $subs ) > 50 ) return '';
1316
+
1317
+ $mode = 'on';
1318
+ if ( $subs ) {
1319
+ $hash = sha1( json_encode( $args ) );
1320
+ if ( recursive_search_key( $subs, $hash ) ) {
1321
+ $mode = 'off';
1322
+ }
1323
+ }
1324
+ $link = wp_nonce_url( add_query_arg( 'subscribe', $mode ), 'control', 'cerber_nonce' );
1325
+ if ($mode == 'on') $text = __('Subscribe','wp-cerber');
1326
+ else $text = __('Unsubscribe','wp-cerber');
1327
+
1328
+ return '<span class="dashicons dashicons-email" style="vertical-align: middle;"></span> <a id="subscribe-me" href="' . $link . '" style="margin-right: 1.5em;">'.$text.'</a>';
1329
+ }
1330
+
1331
+ /**
1332
+ * Managing the list of subscriptions
1333
+ *
1334
+ * @param string $mode Add or delete a subscription
1335
+ * @param string $hash If specified, subscription with given hash will be removed
1336
+ */
1337
+ function cerber_subscribe( $mode = 'on', $hash = null ) {
1338
+ if ($hash) {
1339
+ $mode = 'off';
1340
+ }
1341
+ else {
1342
+ $args = array_values(cerber_subscribe_params());
1343
+ $hash = sha1( json_encode( $args ) );
1344
+ }
1345
+
1346
+ $subs = get_site_option( '_cerber_subs' );
1347
+
1348
+ if ( ! $subs ) {
1349
+ $subs = array();
1350
+ }
1351
+
1352
+ if ( $mode == 'on' ) {
1353
+ $subs[ $hash ] = $args;
1354
+ $msg = __( "You've subscribed", 'wp-cerber' );
1355
+ } else {
1356
+ unset( $subs[ $hash ] );
1357
+ $msg = __( "You've unsubscribed", 'wp-cerber' );
1358
+ }
1359
+
1360
+ if ( update_site_option( '_cerber_subs', $subs ) ) {
1361
+ cerber_admin_message( $msg );
1362
+ }
1363
+ }
1364
+
1365
+ // Unsubscribe with hash without nonce
1366
+ add_action('admin_init',function(){
1367
+ if (!empty($_GET['unsubscribeme'])){
1368
+ cerber_subscribe('off',$_GET['unsubscribeme']);
1369
+ wp_safe_redirect(remove_query_arg('unsubscribeme'));
1370
+ exit;
1371
+ }
1372
+ });
1373
+
1374
+ /*
1375
+ Pagination
1376
+ */
1377
+ function cerber_page_navi($total,$per_page = 20){
1378
+ $max_links = 10;
1379
+ $page = cerber_get_pn();
1380
+ $last_page = ceil($total / $per_page);
1381
+ $ret = '';
1382
+ if($last_page > 1){
1383
+ $start =1 + $max_links * intval(($page-1)/$max_links);
1384
+ $end = $start + $max_links - 1;
1385
+ if ($end > $last_page) $end = $last_page;
1386
+ if ($start > $max_links) $links[]='<a href="'.esc_url(add_query_arg('pagen',$start - 1)).'" class="arrows"><b>&laquo;</b></a>';
1387
+ for ($i=$start; $i <= $end; $i++) {
1388
+ if($page!=$i) $links[]='<a href="'.esc_url(add_query_arg('pagen',$i)).'" >'.$i.'</a>';
1389
+ else $links[]='<a class="active" style="font-size: 16px;">'.$i.'</a> ';
1390
+ }
1391
+ if($end < $last_page) $links[]='<a href="'.esc_url(add_query_arg('pagen',$i)).'" class="arrows">&raquo;</a>'; // &#10141;
1392
+ $ret = '<table class="cerber-margin" style="margin-top:1em; border-collapse: collapse;"><tr><td><div class="pagination">'.implode(' ',$links).'</div></td><td><span style="margin-left:2em;"><b>'.$total.' '._n('entry','entries',$total,'wp-cerber').'</b></span></td></tr></table>';
1393
+ }
1394
+ return $ret;
1395
+ }
1396
+ function cerber_get_pn(){
1397
+ $page = 1;
1398
+ if ( isset( $_GET['pagen'] ) ) {
1399
+ $page = absint( $_GET['pagen'] );
1400
+ if ( ! $page ) {
1401
+ $page = 1;
1402
+ }
1403
+ }
1404
+ return $page;
1405
+ }
1406
+ /*
1407
+ Plugins screen links
1408
+ */
1409
+ add_filter('plugin_action_links','cerber_action_links',10,4);
1410
+ function cerber_action_links($actions, $plugin_file, $plugin_data, $context){
1411
+ if($plugin_file == cerber_plug_in()){
1412
+ $link[] = '<a href="' . cerber_admin_link() . '">' . __('Dashboard','wp-cerber') . '</a>';
1413
+ $link[] = '<a href="' . cerber_admin_link('acl') . '">' . __('Access Lists','wp-cerber') . '</a>';
1414
+ $actions = array_merge ($link,$actions);
1415
+ }
1416
+ return $actions;
1417
+ }
1418
+ /*
1419
+ * Create database diagnostic report
1420
+ *
1421
+ *
1422
+ */
1423
+ function cerber_db_diag(){
1424
+ global $wpdb,$wp_cerber;
1425
+ $ret = array();
1426
+
1427
+ $ret[]= 'Database name: '.DB_NAME;
1428
+
1429
+ $pool = $wpdb->get_row('SHOW VARIABLES LIKE "innodb_buffer_pool_size"');
1430
+ $pool_size = round($pool->Value / 1048576);
1431
+ $inno = 'InnoDB buffer pool size: <b>'.$pool_size.' MB</b>';
1432
+ if ($pool_size < 16) $inno .= ' Your pool size is extremely small!';
1433
+ elseif ($pool_size < 64) $inno .= ' It seems that your pool size is too small.';
1434
+ $ret[]= $inno;
1435
+
1436
+ $ret[]= cerber_table_info(CERBER_LOG_TABLE);
1437
+ $ret[]= cerber_table_info(CERBER_ACL_TABLE);
1438
+ $ret[]= cerber_table_info(CERBER_BLOCKS_TABLE);
1439
+
1440
+ if ($wp_cerber->getRemoteIp() == '127.0.0.1') $ret[] = '<p style="color: #DF0000;">It seems that we are unable to get IP addresses.</p>';
1441
+
1442
+ if ($errors = get_site_option( '_cerber_db_errors')){
1443
+ $err = '<p style="color: #DF0000;">Some minor DB errors were detected</p><textarea>'.print_r($errors,1).'</textarea>';
1444
+ update_site_option( '_cerber_db_errors', '');
1445
+ }
1446
+ else $err = '';
1447
+
1448
+ return $err.implode('<br>',$ret);
1449
+ }
1450
+
1451
+ function cerber_wp_diag(){
1452
+ global $wp_version, $wpdb;
1453
+
1454
+ $ret = array();
1455
+
1456
+ $ret[] = 'WordPress version: ' . $wp_version;
1457
+ $ret[] = 'WordPress options table: '.$wpdb->prefix.'options';
1458
+ $ret[] = '<br>Active plugins:<br>';
1459
+ $list = get_option('active_plugins');
1460
+ foreach($list as $plugin) {
1461
+ $data = get_plugin_data(WP_PLUGIN_DIR.'/'.$plugin);
1462
+ $ret[] = '- '.$data['Name'].' v. '.$data['Version'];
1463
+ }
1464
+
1465
+ return implode("<br>",$ret);
1466
+ }
1467
+
1468
+ /**
1469
+ * Creates mini report about given database table
1470
+ *
1471
+ * @param $table
1472
+ *
1473
+ * @return string
1474
+ */
1475
+ function cerber_table_info( $table ) {
1476
+ global $wpdb;
1477
+ if (!cerber_is_table($table)){
1478
+ return '<p style="color: #DF0000;">ERROR. Database table ' . $table . ' not found! Click repair button below.</p>';
1479
+ }
1480
+ $cols = $wpdb->get_results( "SHOW FULL COLUMNS FROM " . $table );
1481
+
1482
+ $columns = '<table><tr><th style="width: 30%">Field</th><th style="width: 30%">Type</th><th style="width: 30%">Collation</th></tr>';
1483
+ foreach ( $cols as $column ) {
1484
+ $column = obj_to_arr_deep( $column );
1485
+ $field = array_shift( $column );
1486
+ $type = array_shift( $column );
1487
+ $collation = array_shift( $column );
1488
+ $columns .= '<tr><td><b>' . $field . '<b></td><td>' . $type . '</td><td>' . $collation . '</td></tr>';
1489
+ }
1490
+ $columns .= '</table>';
1491
+
1492
+ $rows = absint( $wpdb->get_var( 'SELECT COUNT(*) FROM ' . $table ) );
1493
+
1494
+ $sts = $wpdb->get_row( 'SHOW TABLE STATUS WHERE NAME = "' . $table .'"');
1495
+ $status = '<table>';
1496
+ foreach ( $sts as $key => $value ) {
1497
+ $status .= '<tr><td><b>' . $key . '<b></td><td>' . $value . '</td></tr>';
1498
+ }
1499
+ $status .= '</table>';
1500
+
1501
+ return '<p style="font-size: 110%;">Table: <b>' . $table . '</b>, rows: ' . $rows . '</p><table class="diag-table"><tr><td class="diag-td">' . $columns . '</td><td class="diag-td">'. $status.'</td></tr></table>';
1502
+ }
1503
+
1504
+
1505
+ /*
1506
+ function add_some_pointers() {
1507
+ ?>
1508
+ <script type="text/javascript">
1509
+ jQuery(document).ready( function($) {
1510
+ var options = {'content':'<h3>Info</h3><p>Cerber will request WHOIS database for extra information when you click on IP.</p>','position':{'edge':'right','align':'center'}};
1511
+ if ( ! options ) return;
1512
+ options = $.extend( options, {
1513
+ close: function() {
1514
+ //to do
1515
+ }
1516
+ });
1517
+
1518
+ //$("#ip_extra").click(function(){
1519
+ // $(this).pointer( options ).pointer('open');
1520
+ //});
1521
+
1522
+ $('#subscribe-me').pointer( options ).pointer('open');
1523
+
1524
+ });
1525
+ </script>
1526
+ <?php
1527
+ }
1528
+ add_action('admin_enqueue_scripts', 'cerber_admin_enqueue');
1529
+ function cerber_admin_enqueue($hook) {
1530
+ wp_enqueue_style( 'wp-pointer' );
1531
+ wp_enqueue_script( 'wp-pointer' );
1532
+ }
1533
+ */
1534
+
1535
+
1536
+ add_action( 'admin_enqueue_scripts', 'cerber_admin_assets', 9999 );
1537
+ function cerber_admin_assets() {
1538
+ /*
1539
+ if ( ! cerber_is_admin_page() ) {
1540
+ return;
1541
+ }*/
1542
+
1543
+ $assets_url = plugin_dir_url( __FILE__ ) . 'assets';
1544
+
1545
+ if ( ! defined( 'CERBER_BETA' ) ) {
1546
+ wp_register_style( 'cerber_css', plugin_dir_url( __FILE__ ) . 'assets/admin.css', null, CERBER_VER );
1547
+ wp_enqueue_style( 'cerber_css' );
1548
+
1549
+ wp_enqueue_script( 'cerber_js', $assets_url . '/admin.js', array( 'jquery' ), CERBER_VER, true );
1550
+ }
1551
+
1552
+ // Select2
1553
+ //wp_register_style( 'select2css', $assets_url . '/select2/dist/css/select2.min.css' );
1554
+ //wp_enqueue_style( 'select2css' );
1555
+ //wp_enqueue_script( 'select2js', $assets_url . '/select2/dist/js/select2.min.js', null, null, true );
1556
+
1557
+ }
1558
+
1559
+ /*
1560
+ * JS & CSS for admin head
1561
+ *
1562
+ */
1563
+ add_action('admin_head','cerber_admin_head');
1564
+ function cerber_admin_head(){
1565
+ //$assets_url = plugin_dir_url(CERBER_FILE).'assets';
1566
+
1567
+ if (defined('CERBER_BETA')) :
1568
+ ?>
1569
+ <style type="text/css" media="all">
1570
+ <?php readfile(dirname(__FILE__).'/assets/admin.css'); ?>
1571
+ </style>
1572
+ <?php
1573
+ endif;
1574
+
1575
+ if ( ! cerber_is_admin_page() ) {
1576
+ return;
1577
+ }
1578
+ ?>
1579
+ <style type="text/css" media="all">
1580
+ /* Aliens messages */
1581
+ .update-nag,
1582
+ #setting-error-tgmpa {
1583
+ display: none;
1584
+ }
1585
+
1586
+ /* Cerber's messages */
1587
+ div.wrap .update-nag,
1588
+ .crb-alarm {
1589
+ /*display: initial;*/
1590
+ display: inline-block;
1591
+ }
1592
+ </style>
1593
+ <?php
1594
+ }
1595
+ /*
1596
+ * JS & CSS for admin footer
1597
+ *
1598
+ */
1599
+ add_action('admin_footer','cerber_basement');
1600
+ function cerber_basement(){
1601
+ //add_some_pointers();
1602
+ //$assets_url = plugin_dir_url(CERBER_FILE).'assets';
1603
+ $ajax_nonce = wp_create_nonce('delete-ip');
1604
+ ?>
1605
+ <script type="text/javascript">
1606
+ crb_ajax_nonce = '<?php echo $ajax_nonce; ?>';
1607
+ </script>
1608
+ <?php
1609
+
1610
+ if (defined('CERBER_BETA')) :
1611
+ ?>
1612
+ <script type="text/javascript">
1613
+ <?php readfile(dirname(__FILE__).'/assets/admin.js'); ?>
1614
+ </script>
1615
+ <?php
1616
+ endif;
1617
+
1618
+ }
1619
+
1620
+ add_filter( 'admin_footer_text','cerber_footer_text1');
1621
+ function cerber_footer_text1($text){
1622
+ if (!cerber_is_admin_page(false)) return $text;
1623
+ return 'If you like how <strong>WP Cerber</strong> protects your website, please <a target="_blank" href="https://wordpress.org/support/plugin/wp-cerber/reviews/#new-post">leave it a &#9733; &#9733; &#9733; &#9733; &#9733; rating</a>. Thanks in advance!';
1624
+ }
1625
+ add_filter( 'update_footer','cerber_footer_text2', 1000);
1626
+ function cerber_footer_text2($text){
1627
+ if (!cerber_is_admin_page(false)) return $text;
1628
+ return '<a target="_blank" href="https://wordpress.org/support/plugin/wp-cerber">Support forum</a>';
1629
+ }
1630
+
1631
+ /*
1632
+ * Add per admin screen settings
1633
+ * @since 3.0
1634
+ *
1635
+ */
1636
+ function cerber_screen_options() {
1637
+ if (!empty($_GET['tab'])) $tab = $_GET['tab'];
1638
+ else $tab = '';
1639
+ if ( !in_array( $tab, array( 'lockouts', 'activity' ) ) ) {
1640
+ return;
1641
+ }
1642
+ $args = array(
1643
+ //'label' => __( 'Number of items per page:' ),
1644
+ 'default' => 50,
1645
+ 'option' => 'cerber_screen_'.$tab,
1646
+ );
1647
+ add_screen_option( 'per_page', $args );
1648
+ // add_screen_option( 'layout_columns', array('max' => 2, 'default' => 2) );
1649
+ }
1650
+ /*
1651
+ * Allows to save options to the user meta
1652
+ * @since 3.0
1653
+ *
1654
+ */
1655
+ add_filter('set-screen-option', 'cerber_save_screen_option', 10, 3);
1656
+ function cerber_save_screen_option($status, $option, $value) {
1657
+ if (!empty($_GET['tab'])) $tab = $_GET['tab'];
1658
+ else $tab = 'activity';
1659
+ if ( 'cerber_screen_'.$tab == $option ) return $value;
1660
+ return $status;
1661
+ }
1662
+ /*
1663
+ * Retrieve option for current screen
1664
+ * @since 3.0
1665
+ *
1666
+ */
1667
+ function cerber_get_per_page(){
1668
+ if (is_multisite()) return 50; // temporary workaround
1669
+ $screen = get_current_screen();
1670
+ $screen_option = $screen->get_option('per_page', 'option');
1671
+ if ($screen_option == 'cerber_screen_') $screen_option = 'cerber_screen_activity';
1672
+ $per_page = get_user_meta(get_current_user_id(), $screen_option, true);
1673
+ if ( empty ( $per_page) || $per_page < 1 ) {
1674
+ $per_page = $screen->get_option( 'per_page', 'default' );
1675
+ }
1676
+ return $per_page;
1677
+ }
1678
+
index.php ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php
2
+ // Silence is golden.
jetflow.php ADDED
@@ -0,0 +1,126 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+
4
+ Integration with the jetFlow.io automation and customization plugin, http://jetflow.io
5
+ Actions and triggers definitions.
6
+
7
+ Copyright (C) 2015-17 CERBER TECH INC., Gregory Markov, http://wpcerber.com
8
+
9
+ Licenced under the GNU GPL.
10
+
11
+ */
12
+
13
+ /*
14
+
15
+ *========================================================================*
16
+ | |
17
+ | ATTENTION! Do not change or edit this file! |
18
+ | |
19
+ *========================================================================*
20
+
21
+ */
22
+
23
+
24
+ // If this file is called directly, abort executing.
25
+ if ( ! defined( 'WPINC' ) ) { exit; }
26
+
27
+
28
+ add_action('jetflow_register','cerber_jetflow');
29
+ function cerber_jetflow() {
30
+ if (!class_exists('WF_Repository')) return;
31
+ class TR_IP_Locked extends WF_Action {
32
+ static $trigger = true;
33
+ static $wp_hook = 'cerber_ip_locked';
34
+ static $name = 'IP locked out';
35
+ static $description = 'Start after IP address has been blocked by Cerber';
36
+ static $form_help = '
37
+ Start the workflow after an IP address has been locked out by the WP Cerber plugin and conditions match the specified criteria.
38
+ <p>To get blocked IP address in actions use pattern <code>{TRIGGER[IP]}</code>, for a reason why the IP has been locked out use pattern <code>{TRIGGER[reason]}</code>.
39
+ ';
40
+ public static $fields = array(
41
+ 'filter' => array(
42
+ 'type' => 'group',
43
+ 'fields' => array(
44
+ 'locks' => array(
45
+ 'type' => 'text',
46
+ 'label' => 'Start if an IP address has been locked out more than times',
47
+ 'default' => '0',
48
+ 'autocomplete' => 0
49
+ ),
50
+ 'period' => array(
51
+ 'type' => 'text',
52
+ 'label' => 'in the last minutes',
53
+ 'default' => '60',
54
+ 'autocomplete' => 0
55
+ ),
56
+ )),
57
+ 'limit' => array(
58
+ 'type' => 'text',
59
+ 'label' => 'Start if the number of currently locked out IP addresses is greater than',
60
+ 'default' => '0',
61
+ 'required' => 1,
62
+ 'autocomplete' => 0
63
+ ),
64
+ );
65
+ function execute($fields) {
66
+ global $wpdb;
67
+ list ($fields, $previous, $env, $wp_arguments) = func_get_args();
68
+ if ( cerber_blocked_num() <= absint($fields['limit'])) return new WF_Stop( __CLASS__ );
69
+ if (!empty($fields['filter']['locks'])) $locks = absint($fields['filter']['locks']);
70
+ else $locks = 0;
71
+ if ($locks > 0) {
72
+ $ip = $wp_arguments[0]['IP'];
73
+ $stamp = time() - absint( $fields['filter']['period'] ) * 60;
74
+ $lockouts = $wpdb->get_var( $wpdb->prepare( 'SELECT count(ip) FROM ' . CERBER_LOG_TABLE . ' WHERE ip = %s AND activity IN (10,11) AND stamp > %d', $ip, $stamp ) );
75
+ $lockouts = absint($lockouts);
76
+ if ( !$lockouts || $lockouts <= $locks) {
77
+ return new WF_Stop( __CLASS__ );
78
+ }
79
+ }
80
+ return $wp_arguments[0];
81
+ }
82
+ static function getStarterInfo($config, $context) {
83
+ return 'After IP address has been locked out by Cerber';
84
+ }
85
+ }
86
+ class WF_WHOIS extends WF_Action {
87
+ public static $section = 'network';
88
+ public static $name = 'Get WHOIS info';
89
+ public static $description = 'Get extended information about IP address';
90
+ public static $form_help = '
91
+ Sends request to a WHOIS server and obtains details about given IP address like country, abuse email address, owner of network, etc. The WHOIS information is publicly available and provided for free.
92
+ There are no reasons for security concerns, because a list of WHOIS servers are maintained by <a target="_blank" href="https://en.wikipedia.org/wiki/ICANN">ICANN</a>.
93
+ <p>Bear in mind that each WHOIS request takes some time to retrieve data from remote WHOIS server. One request can take up to 300 ms approximately, so workflow will wait that time for a response with each request.
94
+ <p>A result will be a list. To get a country name in the next action use pattern <code>{PREVIOUS[country-name]}</code>, for two letter country code: <code>{PREVIOUS[country]}</code>, for abuse email address: <code>{PREVIOUS[abuse-mailbox]}</code>, for network as IP range: <code>{PREVIOUS[inetnum]}</code>.
95
+ The full list of available fields depends on network owner.
96
+ You can request WHOIS data manually to find out what kind of field are available on this page: <a target="_blank" href="http://wq.apnic.net/apnic-bin/whois.pl">http://wq.apnic.net/apnic-bin/whois.pl</a>.
97
+ ';
98
+ public static $fields = array(
99
+ 'ip' => array(
100
+ 'type' => 'text',
101
+ 'label' => 'IP address',
102
+ 'default' => '{TRIGGER[IP]}',
103
+ 'required' => 1,
104
+ ),
105
+ );
106
+ function execute($fields) {
107
+ list ($fields, $previous, $env, $wp_arguments) = func_get_args();
108
+ $ip = filter_var($fields['ip'],FILTER_VALIDATE_IP);
109
+ if (!$ip) return false;
110
+ $whois = cerber_ip_whois_info($ip);
111
+ if (!empty($whois['error'])) return new WF_Error (__CLASS__, 'Unable to obtain IP info');
112
+ $ret = $whois['data'];
113
+
114
+ if (empty($ret['abuse-mailbox']) && !empty($ret['OrgAbuseEmail'])){
115
+ $ret['abuse-mailbox'] = $ret['OrgAbuseEmail'];
116
+ }
117
+
118
+ if (!is_email($ret['abuse-mailbox'])) $ret['abuse-mailbox'] = '';
119
+
120
+ $ret['country-name'] = cerber_country_name($ret['country']);
121
+ return $ret;
122
+ }
123
+ }
124
+ wof_register(array('TR_IP_Locked','WF_WHOIS'));
125
+ }
126
+
languages/wp-cerber-cs_CZ.mo ADDED
Binary file
languages/wp-cerber-cs_CZ.po ADDED
@@ -0,0 +1,1204 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WP Cerber\n"
4
+ "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: Tue Sep 08 2015 21:38:11 GMT+0300\n"
6
+ "PO-Revision-Date: Wed Apr 12 2017 21:50:50 GMT+0300\n"
7
+ "Last-Translator: Greg <domain@xterm.ru>\n"
8
+ "Language-Team: \n"
9
+ "Language: Czech\n"
10
+ "Plural-Forms: nplurals=3; plural=( n == 1 ) ? 0 : ( n >= 2 && n <= 4 ) ? 1 : "
11
+ "2\n"
12
+ "MIME-Version: 1.0\n"
13
+ "Content-Type: text/plain; charset=UTF-8\n"
14
+ "Content-Transfer-Encoding: 8bit\n"
15
+ "X-Poedit-SourceCharset: UTF-8\n"
16
+ "X-Poedit-Basepath: ../../plugins/wp-cerber\n"
17
+ "X-Poedit-KeywordsList: _:1;gettext:1;dgettext:2;ngettext:1,2;dngettext:2,3;"
18
+ "__:1;_e:1;_c:1;_n:1,2;_n_noop:1,2;_nc:1,2;__ngettext:1,2;__ngettext_noop:1,2;"
19
+ "_x:1,2c;_ex:1,2c;_nx:1,2,4c;_nx_noop:1,2,3c;_n_js:1,2;_nx_js:1,2,3c;"
20
+ "esc_attr__:1;esc_html__:1;esc_attr_e:1;esc_html_e:1;esc_attr_x:1,2c;"
21
+ "esc_html_x:1,2c;comments_number_link:2,3;t:1;st:1;trans:1;transChoice:1,2\n"
22
+ "X-Generator: Loco - https://localise.biz/\n"
23
+ "X-Poedit-SearchPath-0: .\n"
24
+ "X-Loco-Target-Locale: cs_CZ"
25
+
26
+ #: ../dashboard.php:77 ../dashboard.php:460 ../wp-cerber.php:2168
27
+ msgid "IP"
28
+ msgstr ""
29
+
30
+ #: ../dashboard.php:77 ../wp-cerber.php:1921
31
+ msgid "Reason"
32
+ msgstr ""
33
+
34
+ #: ../dashboard.php:77
35
+ msgid "Action"
36
+ msgstr ""
37
+
38
+ #: ../dashboard.php:104
39
+ msgid "Nobody can log in or register from these IPs"
40
+ msgstr ""
41
+
42
+ #: ../dashboard.php:130
43
+ msgid "Add IP to the list"
44
+ msgstr ""
45
+
46
+ #: ../dashboard.php:150 ../dashboard.php:158
47
+ msgid "Incorrect IP address or IP range"
48
+ msgstr ""
49
+
50
+ #: ../dashboard.php:260
51
+ msgid "Unable to send notification email"
52
+ msgstr ""
53
+
54
+ #: ../dashboard.php:283 ../dashboard.php:1149
55
+ msgid "Settings saved"
56
+ msgstr ""
57
+
58
+ #: ../dashboard.php:337
59
+ msgid "IP address"
60
+ msgstr ""
61
+
62
+ #: ../dashboard.php:337
63
+ msgid "User login"
64
+ msgstr ""
65
+
66
+ #: ../dashboard.php:337
67
+ msgid "User ID"
68
+ msgstr ""
69
+
70
+ #: ../dashboard.php:469
71
+ msgid "Export"
72
+ msgstr ""
73
+
74
+ #: ../dashboard.php:478
75
+ msgid "All activities"
76
+ msgstr ""
77
+
78
+ #: ../dashboard.php:485
79
+ msgid "Search for IP or username"
80
+ msgstr ""
81
+
82
+ #: ../dashboard.php:485
83
+ msgid "Filter"
84
+ msgstr ""
85
+
86
+ #: ../dashboard.php:653
87
+ msgid "Abuse email:"
88
+ msgstr ""
89
+
90
+ #: ../dashboard.php:657
91
+ msgid "Network:"
92
+ msgstr ""
93
+
94
+ #: ../dashboard.php:671
95
+ msgid "Add network to the Black List"
96
+ msgstr ""
97
+
98
+ #: ../dashboard.php:675
99
+ msgid "Add IP to the Black List"
100
+ msgstr ""
101
+
102
+ #: ../dashboard.php:703 ../settings.php:212
103
+ msgid "WP Cerber Security"
104
+ msgstr ""
105
+
106
+ #: ../dashboard.php:705
107
+ msgid "Cerber Dashboard"
108
+ msgstr ""
109
+
110
+ #: ../dashboard.php:705 ../dashboard.php:876 ../dashboard.php:1320 ../settings.
111
+ #: php:217
112
+ msgid "Dashboard"
113
+ msgstr ""
114
+
115
+ #: ../dashboard.php:707
116
+ msgid "Cerber reCAPTCHA settings"
117
+ msgstr ""
118
+
119
+ #: ../dashboard.php:707
120
+ msgid "reCAPTCHA"
121
+ msgstr ""
122
+
123
+ #: ../dashboard.php:708
124
+ msgid "Cerber tools"
125
+ msgstr ""
126
+
127
+ #: ../dashboard.php:872 ../settings.php:145
128
+ msgid "Push notifications"
129
+ msgstr ""
130
+
131
+ #: ../dashboard.php:1011 ../dashboard.php:1026
132
+ msgid "View all"
133
+ msgstr ""
134
+
135
+ #: ../dashboard.php:1027
136
+ msgid "Recently locked out IP addresses"
137
+ msgstr ""
138
+
139
+ #: ../dashboard.php:1060
140
+ msgid "doesn't affect Custom login URL and Access Lists"
141
+ msgstr ""
142
+
143
+ #: ../dashboard.php:1132
144
+ msgid "Attention! Citadel mode is now active. Nobody is able to log in."
145
+ msgstr ""
146
+
147
+ #: ../dashboard.php:1235
148
+ msgid "Subscribe"
149
+ msgstr ""
150
+
151
+ #: ../dashboard.php:1236
152
+ msgid "Unsubscribe"
153
+ msgstr ""
154
+
155
+ #: ../dashboard.php:1264
156
+ msgid "You've subscribed"
157
+ msgstr ""
158
+
159
+ #: ../dashboard.php:1267
160
+ msgid "You've unsubscribed"
161
+ msgstr ""
162
+
163
+ #. URI of the plugin
164
+ msgid "http://wpcerber.com"
165
+ msgstr ""
166
+
167
+ #. Description of the plugin
168
+ msgid ""
169
+ "Protects site from brute force attacks, bots and hackers. Antispam "
170
+ "protection with reCAPTCHA. Comprehensive control of user activity. Restrict "
171
+ "login by IP access lists. Limit login attempts. Feel free to contact "
172
+ "developer on the site <a href=\"http://wpcerber.com\">wpcerber.com</a>."
173
+ msgstr ""
174
+
175
+ #. Author of the plugin
176
+ msgid "Gregory"
177
+ msgstr ""
178
+
179
+ #: ../wp-cerber.php:496
180
+ msgid ""
181
+ "Human verification failed. Please click the square box in the reCAPTCHA "
182
+ "block below."
183
+ msgstr ""
184
+
185
+ #: ../wp-cerber.php:602 ../wp-cerber.php:734 ../wp-cerber.php:741 ../wp-cerber.
186
+ #: php:765 ../common.php:81 ../common.php:134 ../settings.php:479
187
+ msgid "ERROR:"
188
+ msgstr ""
189
+
190
+ #: ../wp-cerber.php:613
191
+ #, php-format
192
+ msgid ""
193
+ "<strong>ERROR</strong>: The password you entered for the username %s is "
194
+ "incorrect."
195
+ msgstr ""
196
+
197
+ #: ../wp-cerber.php:742
198
+ msgid "Username is not allowed. Please choose another one."
199
+ msgstr ""
200
+
201
+ #: ../wp-cerber.php:1914
202
+ msgid "unspecified"
203
+ msgstr ""
204
+
205
+ #: ../wp-cerber.php:1917
206
+ msgid "Number of lockouts is increasing"
207
+ msgstr ""
208
+
209
+ #: ../wp-cerber.php:1920
210
+ #, php-format
211
+ msgid "Last lockout was added: %s for IP %s"
212
+ msgstr ""
213
+
214
+ #: ../wp-cerber.php:1922
215
+ msgid "View activity for this IP"
216
+ msgstr ""
217
+
218
+ #: ../wp-cerber.php:1926 ../wp-cerber.php:1928
219
+ msgid "A new version of WP Cerber is available to install"
220
+ msgstr ""
221
+
222
+ #: ../wp-cerber.php:1927
223
+ msgid "Hi!"
224
+ msgstr ""
225
+
226
+ #: ../wp-cerber.php:1929 ../wp-cerber.php:1940
227
+ msgid "Website"
228
+ msgstr ""
229
+
230
+ #: ../wp-cerber.php:1932 ../wp-cerber.php:1933
231
+ msgid "The WP Cerber security plugin has been deactivated"
232
+ msgstr ""
233
+
234
+ #: ../wp-cerber.php:1935
235
+ msgid "Not logged in"
236
+ msgstr ""
237
+
238
+ #: ../wp-cerber.php:1941
239
+ msgid "By user"
240
+ msgstr ""
241
+
242
+ #: ../wp-cerber.php:1942
243
+ msgid "From IP address"
244
+ msgstr ""
245
+
246
+ #: ../wp-cerber.php:1945
247
+ msgid "From country"
248
+ msgstr ""
249
+
250
+ #: ../wp-cerber.php:1949
251
+ msgid "The WP Cerber security plugin is now active"
252
+ msgstr ""
253
+
254
+ #: ../wp-cerber.php:1950 ../wp-cerber.php:2271
255
+ msgid "WP Cerber is now active and has started protecting your site"
256
+ msgstr ""
257
+
258
+ #: ../wp-cerber.php:1960 ../wp-cerber.php:1961
259
+ msgid "A new activity has been recorded"
260
+ msgstr ""
261
+
262
+ #: ../wp-cerber.php:2172
263
+ msgid "User"
264
+ msgstr ""
265
+
266
+ #: ../wp-cerber.php:2180
267
+ msgid "Search string"
268
+ msgstr ""
269
+
270
+ #: ../wp-cerber.php:2193
271
+ msgid "To unsubscribe click here"
272
+ msgstr ""
273
+
274
+ #: ../wp-cerber.php:2272
275
+ msgid "Your IP address is added to the"
276
+ msgstr ""
277
+
278
+ #: ../wp-cerber.php:2274
279
+ msgid "It's important to check security settings."
280
+ msgstr ""
281
+
282
+ #: ../wp-cerber.php:2279 ../settings.php:229
283
+ msgid "Hardening"
284
+ msgstr ""
285
+
286
+ #: ../wp-cerber.php:2281
287
+ msgid "Import settings"
288
+ msgstr ""
289
+
290
+ #: ../whois.php:211
291
+ msgid "Unknown"
292
+ msgstr ""
293
+
294
+ #: ../common.php:253
295
+ msgid "User created"
296
+ msgstr ""
297
+
298
+ #: ../common.php:254
299
+ msgid "User registered"
300
+ msgstr ""
301
+
302
+ #: ../common.php:271
303
+ msgid "reCAPTCHA verification failed"
304
+ msgstr ""
305
+
306
+ #: ../common.php:272
307
+ msgid "reCAPTCHA settings are incorrect"
308
+ msgstr ""
309
+
310
+ #: ../common.php:273
311
+ msgid "Request to the Google reCAPTCHA service failed"
312
+ msgstr ""
313
+
314
+ #: ../common.php:275
315
+ msgid "Attempt to access prohibited URL"
316
+ msgstr ""
317
+
318
+ #: ../common.php:276 ../common.php:288
319
+ msgid "Attempt to log in with non-existent username"
320
+ msgstr ""
321
+
322
+ #: ../common.php:277 ../common.php:289
323
+ msgid "Attempt to log in with prohibited username"
324
+ msgstr ""
325
+
326
+ #: ../common.php:286
327
+ msgid "Limit on login attempts is reached"
328
+ msgstr ""
329
+
330
+ #: ../common.php:287
331
+ msgid "Attempt to access"
332
+ msgstr ""
333
+
334
+ #: ../common.php:341
335
+ msgid "year"
336
+ msgstr ""
337
+
338
+ #: ../common.php:342
339
+ msgid "month"
340
+ msgstr ""
341
+
342
+ #: ../common.php:343
343
+ msgid "day"
344
+ msgstr ""
345
+
346
+ #: ../common.php:344
347
+ msgid "hour"
348
+ msgstr ""
349
+
350
+ #: ../common.php:345
351
+ msgid "minute"
352
+ msgstr ""
353
+
354
+ #: ../common.php:346
355
+ msgid "second"
356
+ msgstr ""
357
+
358
+ #: ../common.php:349
359
+ msgid "years"
360
+ msgstr ""
361
+
362
+ #: ../common.php:350
363
+ msgid "months"
364
+ msgstr ""
365
+
366
+ #: ../common.php:352
367
+ msgid "hours"
368
+ msgstr ""
369
+
370
+ #: ../common.php:354
371
+ msgid "seconds"
372
+ msgstr ""
373
+
374
+ #: ../common.php:360
375
+ msgid "ago"
376
+ msgstr ""
377
+
378
+ #: ../cerber-lab.php:415
379
+ msgid "Want to make WP Cerber even more powerful?"
380
+ msgstr ""
381
+
382
+ #: ../cerber-lab.php:416
383
+ msgid ""
384
+ "Allow WP Cerber to send locked out malicious IP addresses to Cerber Lab. "
385
+ "This helps the plugin team to develop new algorithms for WP Cerber that will "
386
+ "defend WordPress against new threats and botnets that are appearing "
387
+ "everyday. You can disable the sending in the plugin settings at any time."
388
+ msgstr ""
389
+
390
+ #: ../cerber-lab.php:417
391
+ msgid "OK, nail them all"
392
+ msgstr ""
393
+
394
+ #: ../cerber-lab.php:418
395
+ msgid "NO, maybe later"
396
+ msgstr ""
397
+
398
+ #: ../cerber-lab.php:419 ../settings.php:190
399
+ msgid "Know more"
400
+ msgstr ""
401
+
402
+ #: ../settings.php:71
403
+ msgid "Display 404 page"
404
+ msgstr ""
405
+
406
+ #: ../settings.php:90
407
+ msgid "Cerber Lab connection"
408
+ msgstr ""
409
+
410
+ #: ../settings.php:90
411
+ msgid "Send malicious IP addresses to the Cerber Lab"
412
+ msgstr ""
413
+
414
+ #: ../settings.php:91
415
+ msgid "Cerber Lab protocol"
416
+ msgstr ""
417
+
418
+ #: ../settings.php:94
419
+ msgid "Preferences"
420
+ msgstr ""
421
+
422
+ #: ../settings.php:95
423
+ msgid "Drill down IP"
424
+ msgstr ""
425
+
426
+ #: ../settings.php:95
427
+ msgid "Retrieve extra WHOIS information for IP"
428
+ msgstr ""
429
+
430
+ #: ../settings.php:96
431
+ msgid "Date format"
432
+ msgstr ""
433
+
434
+ #: ../settings.php:96
435
+ #, php-format
436
+ msgid "if empty, the default format %s will be used"
437
+ msgstr ""
438
+
439
+ #: ../settings.php:103
440
+ msgid "Hardening WordPress"
441
+ msgstr ""
442
+
443
+ #: ../settings.php:104
444
+ msgid "Stop user enumeration"
445
+ msgstr ""
446
+
447
+ #: ../settings.php:104
448
+ msgid "Block access to the pages like /?author=n"
449
+ msgstr ""
450
+
451
+ #: ../settings.php:105
452
+ msgid "Disable XML-RPC"
453
+ msgstr ""
454
+
455
+ #: ../settings.php:105
456
+ msgid "Block access to the XML-RPC server (including Pingbacks and Trackbacks)"
457
+ msgstr ""
458
+
459
+ #: ../settings.php:106
460
+ msgid "Disable feeds"
461
+ msgstr ""
462
+
463
+ #: ../settings.php:106
464
+ msgid "Block access to the RSS, Atom and RDF feeds"
465
+ msgstr ""
466
+
467
+ #: ../settings.php:107
468
+ msgid "Disable REST API"
469
+ msgstr ""
470
+
471
+ #: ../settings.php:107
472
+ msgid "Block access to the WordPress REST API"
473
+ msgstr ""
474
+
475
+ #: ../settings.php:115
476
+ msgid "User related settings"
477
+ msgstr ""
478
+
479
+ #: ../settings.php:116
480
+ msgid "Prohibited usernames"
481
+ msgstr ""
482
+
483
+ #: ../settings.php:116
484
+ msgid ""
485
+ "Usernames from this list are not allowed to log in or register. Any IP "
486
+ "address, have tried to use any of these usernames, will be immediately "
487
+ "blocked. Use comma to separate logins."
488
+ msgstr ""
489
+
490
+ #: ../settings.php:117
491
+ msgid "User session expire"
492
+ msgstr ""
493
+
494
+ #: ../settings.php:117
495
+ msgid "in minutes (leave empty to use default WP value)"
496
+ msgstr ""
497
+
498
+ #: ../settings.php:124
499
+ msgid "Site key"
500
+ msgstr ""
501
+
502
+ #: ../settings.php:125
503
+ msgid "Secret key"
504
+ msgstr ""
505
+
506
+ #: ../settings.php:127
507
+ msgid "Registration form"
508
+ msgstr ""
509
+
510
+ #: ../settings.php:127
511
+ msgid "Enable reCAPTCHA for WordPress registration form"
512
+ msgstr ""
513
+
514
+ #: ../settings.php:128
515
+ msgid "Enable reCAPTCHA for WooCommerce registration form"
516
+ msgstr ""
517
+
518
+ #: ../settings.php:130
519
+ msgid "Lost password form"
520
+ msgstr ""
521
+
522
+ #: ../settings.php:130
523
+ msgid "Enable reCAPTCHA for WordPress lost password form"
524
+ msgstr ""
525
+
526
+ #: ../settings.php:131
527
+ msgid "Enable reCAPTCHA for WooCommerce lost password form"
528
+ msgstr ""
529
+
530
+ #: ../settings.php:133
531
+ msgid "Login form"
532
+ msgstr ""
533
+
534
+ #: ../settings.php:133
535
+ msgid "Enable reCAPTCHA for WordPress login form"
536
+ msgstr ""
537
+
538
+ #: ../settings.php:134
539
+ msgid "Enable reCAPTCHA for WooCommerce login form"
540
+ msgstr ""
541
+
542
+ #: ../settings.php:140
543
+ msgid "Email notifications"
544
+ msgstr ""
545
+
546
+ #: ../settings.php:142
547
+ msgid "Email Address"
548
+ msgstr ""
549
+
550
+ #: ../settings.php:142
551
+ msgid "Use comma to specify multiple values"
552
+ msgstr ""
553
+
554
+ #: ../settings.php:142
555
+ #, php-format
556
+ msgid "if empty, the admin email %s will be used"
557
+ msgstr ""
558
+
559
+ #: ../settings.php:143
560
+ msgid "Notification limit"
561
+ msgstr ""
562
+
563
+ #: ../settings.php:143
564
+ msgid "notification letters allowed per hour (0 means unlimited)"
565
+ msgstr ""
566
+
567
+ #: ../settings.php:152
568
+ msgid "All connected devices"
569
+ msgstr ""
570
+
571
+ #: ../settings.php:153
572
+ msgid "No devices found"
573
+ msgstr ""
574
+
575
+ #: ../settings.php:155
576
+ msgid "Not available"
577
+ msgstr ""
578
+
579
+ #: ../settings.php:170
580
+ msgid ""
581
+ "Please enable Permalinks to use this feature. Set Permalink Settings to "
582
+ "something other than Default."
583
+ msgstr ""
584
+
585
+ #: ../settings.php:177
586
+ msgid ""
587
+ "In Citadel mode nobody is able to login. Active user's sessions will not be "
588
+ "affected."
589
+ msgstr ""
590
+
591
+ #: ../settings.php:184
592
+ msgid "These settings do not affect hosts from the "
593
+ msgstr ""
594
+
595
+ #: ../settings.php:189
596
+ msgid ""
597
+ "Before you can start using reCAPTCHA, you have to obtain Site key and Secret "
598
+ "key on the Google website"
599
+ msgstr ""
600
+
601
+ #: ../settings.php:231
602
+ msgid "Users"
603
+ msgstr ""
604
+
605
+ #: ../settings.php:501
606
+ msgid "<strong>ERROR</strong>: please enter a valid email address."
607
+ msgstr ""
608
+
609
+ #: ../cerber-tools.php:195
610
+ msgid "reCAPTCHA settings"
611
+ msgstr ""
612
+
613
+ #: ../dashboard.php:74 ../dashboard.php:123
614
+ msgid "Remove"
615
+ msgstr "Odstranit"
616
+
617
+ #: ../dashboard.php:77 ../dashboard.php:460
618
+ msgid "Hostname"
619
+ msgstr "Server (hostname)"
620
+
621
+ #: ../dashboard.php:77
622
+ msgid "Expires"
623
+ msgstr "Expirace"
624
+
625
+ #: ../dashboard.php:83
626
+ #, php-format
627
+ msgid "Showing last %d records from %d"
628
+ msgstr "Zobrazení posledních %d záznamů z %d"
629
+
630
+ #: ../dashboard.php:85
631
+ msgid "Hint"
632
+ msgstr "Zásah"
633
+
634
+ #: ../dashboard.php:85
635
+ msgid "To view activity, click on the IP"
636
+ msgstr "Chcete-li zobrazit aktivitu, klikněte na IP adresu"
637
+
638
+ #: ../dashboard.php:89
639
+ msgid "No lockouts at the moment. The sky is clear."
640
+ msgstr "V tuto chvíli žádné blokování. Obloha je jasná."
641
+
642
+ #: ../dashboard.php:102 ../dashboard.php:440 ../dashboard.php:625 ../dashboard.
643
+ #: php:868 ../wp-cerber.php:2272 ../settings.php:184
644
+ msgid "White IP Access List"
645
+ msgstr "Seznam povolených IP adres"
646
+
647
+ #: ../dashboard.php:102
648
+ msgid "These IPs will never be locked out"
649
+ msgstr "Tyto IP adresy nebudou blokovány"
650
+
651
+ #: ../dashboard.php:104 ../dashboard.php:441 ../dashboard.php:627 ../dashboard.
652
+ #: php:869
653
+ msgid "Black IP Access List"
654
+ msgstr "Seznam blokovaných IP adres"
655
+
656
+ #: ../dashboard.php:106
657
+ msgid "Your IP"
658
+ msgstr "Vaše IP"
659
+
660
+ #: ../dashboard.php:123 ../dashboard.php:657
661
+ msgid "Check for activity"
662
+ msgstr "Zkontrolovat aktivitu"
663
+
664
+ #: ../dashboard.php:126
665
+ msgid "List is empty"
666
+ msgstr "Seznam je prázdný"
667
+
668
+ #: ../dashboard.php:153
669
+ #, php-format
670
+ msgid "Address %s was added to White IP Access List"
671
+ msgstr "Adresa %s byla přidána do seznamu povolených IP adres"
672
+
673
+ #: ../dashboard.php:162
674
+ msgid "You can't add your IP address"
675
+ msgstr "Nemůžete přidat vaši IP adresu"
676
+
677
+ #: ../dashboard.php:166
678
+ #, php-format
679
+ msgid "Address %s was added to Black IP Access List"
680
+ msgstr "Adresa %s byla přidána do seznamu blokovaných IP adres"
681
+
682
+ #: ../dashboard.php:237
683
+ msgid "unknown"
684
+ msgstr "neznámé"
685
+
686
+ #: ../dashboard.php:257
687
+ msgid "Message has been sent to "
688
+ msgstr "Zpráva byla odeslána na "
689
+
690
+ #: ../dashboard.php:267
691
+ #, php-format
692
+ msgid "Lockout for %s was removed"
693
+ msgstr "Blokace %s byla odstraněna"
694
+
695
+ #: ../dashboard.php:337 ../dashboard.php:460
696
+ msgid "Date"
697
+ msgstr "Datum"
698
+
699
+ #: ../dashboard.php:337 ../dashboard.php:460 ../dashboard.php:877 ../dashboard.
700
+ #: php:1012 ../wp-cerber.php:2167 ../settings.php:88 ../settings.php:219
701
+ msgid "Activity"
702
+ msgstr "Aktivity"
703
+
704
+ #: ../dashboard.php:337 ../dashboard.php:460
705
+ msgid "Local User"
706
+ msgstr "Místní uživatel"
707
+
708
+ #: ../dashboard.php:337 ../dashboard.php:460 ../wp-cerber.php:2176
709
+ msgid "Username used"
710
+ msgstr "Uživatelské jméno je již použito"
711
+
712
+ #: ../dashboard.php:445 ../dashboard.php:630 ../common.php:265
713
+ msgid "Locked out"
714
+ msgstr "Blokován"
715
+
716
+ #: ../dashboard.php:473
717
+ msgid "No activity has been logged."
718
+ msgstr "Zatím neproběhla žádná aktivita."
719
+
720
+ #: ../dashboard.php:700
721
+ msgid "WP Cerber Settings"
722
+ msgstr "Bezpečnost přihlašování"
723
+
724
+ #: ../dashboard.php:700 ../dashboard.php:703 ../dashboard.php:732
725
+ msgid "WP Cerber"
726
+ msgstr ""
727
+
728
+ #: ../dashboard.php:708 ../cerber-tools.php:40
729
+ msgid "Tools"
730
+ msgstr "Nástroje"
731
+
732
+ #: ../dashboard.php:770
733
+ msgid "Comments"
734
+ msgstr "Komentáře"
735
+
736
+ #: ../dashboard.php:771
737
+ msgid "Last login"
738
+ msgstr "Poslední přihlášení"
739
+
740
+ #: ../dashboard.php:772
741
+ msgid "Failed attempts in last 24 hours"
742
+ msgstr "Neúspěšné pokusy v posledních 24 hodinách"
743
+
744
+ #: ../dashboard.php:773
745
+ msgid "Date of registration"
746
+ msgstr "Datum registrace"
747
+
748
+ #: ../dashboard.php:798 ../dashboard.php:851
749
+ msgid "Never"
750
+ msgstr "Zatím neproběhla"
751
+
752
+ #: ../dashboard.php:822
753
+ msgid "Cerber Quick View"
754
+ msgstr "Rychlé zobrazení"
755
+
756
+ #: ../dashboard.php:855
757
+ msgid "active"
758
+ msgstr "aktivní"
759
+
760
+ #: ../dashboard.php:855
761
+ msgid "deactivate"
762
+ msgstr "deaktivovat"
763
+
764
+ #: ../dashboard.php:857
765
+ msgid "not active"
766
+ msgstr "není aktivní"
767
+
768
+ #: ../dashboard.php:858
769
+ msgid "disabled"
770
+ msgstr "vypnuto"
771
+
772
+ #: ../dashboard.php:863
773
+ msgid "failed attempts"
774
+ msgstr "neúspěšných pokusů"
775
+
776
+ #: ../dashboard.php:863 ../dashboard.php:864
777
+ msgid "in 24 hours"
778
+ msgstr "ve 24 hodinách"
779
+
780
+ #: ../dashboard.php:863 ../dashboard.php:864
781
+ msgid "view all"
782
+ msgstr "zobrazit vše"
783
+
784
+ #: ../dashboard.php:864
785
+ msgid "lockouts"
786
+ msgstr "blokování"
787
+
788
+ #: ../dashboard.php:866
789
+ msgid "Lockouts at the moment"
790
+ msgstr "Blokováni v tento okamžik"
791
+
792
+ #: ../dashboard.php:867
793
+ msgid "Last lockout"
794
+ msgstr "Poslední blokování"
795
+
796
+ #: ../dashboard.php:868 ../dashboard.php:869 ../dashboard.php:1300
797
+ msgid "entry"
798
+ msgid_plural "entries"
799
+ msgstr[0] "položka"
800
+ msgstr[1] "položky"
801
+ msgstr[2] "položek"
802
+
803
+ #: ../dashboard.php:870 ../settings.php:77
804
+ msgid "Citadel mode"
805
+ msgstr "Režim Citadela"
806
+
807
+ #: ../dashboard.php:878 ../settings.php:222
808
+ msgid "Lockouts"
809
+ msgstr "Blokování"
810
+
811
+ #: ../dashboard.php:879 ../dashboard.php:1321 ../wp-cerber.php:2278 ../settings.
812
+ #: php:227 ../cerber-tools.php:59 ../cerber-tools.php:68 ../cerber-tools.php:178
813
+ msgid "Access Lists"
814
+ msgstr "Seznam přístupů"
815
+
816
+ #: ../dashboard.php:1049
817
+ msgid "Confused about some settings?"
818
+ msgstr "Jste zmatení ohledně některého nastavení?"
819
+
820
+ #: ../dashboard.php:1050
821
+ msgid "You can easily load default recommended settings using button below"
822
+ msgstr ""
823
+ "Můžete snadno načíst výchozí doporučené nastavení pomocí níže uvedeného "
824
+ "tlačítka"
825
+
826
+ #: ../dashboard.php:1052
827
+ msgid "Load default settings"
828
+ msgstr "Načíst výchozí nastavení"
829
+
830
+ #: ../dashboard.php:1054 ../dashboard.php:1450
831
+ msgid "Are you sure?"
832
+ msgstr "Jste tu?"
833
+
834
+ #: ../dashboard.php:1079
835
+ msgid "Donate"
836
+ msgstr "Darovat"
837
+
838
+ #: ../dashboard.php:1133
839
+ msgid "Deactivate"
840
+ msgstr "Deaktivovat"
841
+
842
+ #: ../dashboard.php:1134
843
+ msgid "View Activity"
844
+ msgstr "Zobrazit aktivity"
845
+
846
+ #: ../dashboard.php:1190
847
+ msgid "New version is available"
848
+ msgstr "Nová verze je k dispozici"
849
+
850
+ #: ../dashboard.php:1196
851
+ #, php-format
852
+ msgid "Update to version %s of WP Cerber"
853
+ msgstr "Aktualizovat na nejnovější verzi bezpečného přihlašování %s"
854
+
855
+ #: ../wp-cerber.php:190
856
+ msgid "You are not allowed to log in. Ask your administrator for assistance."
857
+ msgstr "Nejste oprávněni se přihlásit. Požádejte správce o pomoc."
858
+
859
+ #: ../wp-cerber.php:196
860
+ #, php-format
861
+ msgid "You have reached the login attempts limit. Please try again in %d minutes."
862
+ msgstr ""
863
+ "Dosáhli jste limitu pokusů o přihlášení. Zkuste to prosím znovu za %d "
864
+ "minut(y)."
865
+
866
+ #: ../wp-cerber.php:214
867
+ #, php-format
868
+ msgid "You have only one attempt remaining."
869
+ msgid_plural "You have %d attempts remaining."
870
+ msgstr[0] "Máte jen jeden zbývající pokus."
871
+ msgstr[1] "Máte jen %d zbývající pokusy."
872
+ msgstr[2] "Máte jen %d zbývajících pokusů."
873
+
874
+ #: ../wp-cerber.php:1870
875
+ msgid "WP Cerber notify"
876
+ msgstr "Notifikace bezpečného přihlašování"
877
+
878
+ #: ../wp-cerber.php:1888
879
+ msgid "Citadel mode is activated"
880
+ msgstr "Režim Citadela je aktivní"
881
+
882
+ #: ../wp-cerber.php:1890
883
+ #, php-format
884
+ msgid "Citadel mode is activated after %d failed login attempts in %d minutes."
885
+ msgstr ""
886
+ "Režim Citadely je aktivován po %d neúspěšných pokusech o přihlášení v %d "
887
+ "minutách."
888
+
889
+ #: ../wp-cerber.php:1891
890
+ #, php-format
891
+ msgid "Last failed attempt was at %s from IP %s with user login: %s."
892
+ msgstr "Poslední pokus byl zaznamenán v %s z IP adresy %s s přihlašovacím jménem: %s."
893
+
894
+ #: ../wp-cerber.php:1892 ../wp-cerber.php:2192
895
+ msgid "View activity in dashboard"
896
+ msgstr "Zobrazit aktivitu na nástěnce"
897
+
898
+ #: ../wp-cerber.php:1919
899
+ msgid "Number of active lockouts"
900
+ msgstr "Počet aktivních blokací"
901
+
902
+ #: ../wp-cerber.php:1923
903
+ msgid "View lockouts in dashboard"
904
+ msgstr "Zobrazit blokace na nástěnce"
905
+
906
+ #: ../wp-cerber.php:1951
907
+ msgid "Change notification settings"
908
+ msgstr "Změnit nastavení upozornění"
909
+
910
+ #: ../wp-cerber.php:1956
911
+ msgid "New Custom login URL"
912
+ msgstr "URL nové adresy pro přihlášení"
913
+
914
+ #: ../wp-cerber.php:1976
915
+ msgid "This message was sent by"
916
+ msgstr "Tato zpráva byla odeslána pomocí"
917
+
918
+ #: ../wp-cerber.php:2246
919
+ #, php-format
920
+ msgid "The WP Cerber requires PHP %s or higher. You are running"
921
+ msgstr "Bezpečné přihlašování vyžaduje alespoň PHP %s a vyšší. Vaše PHP je"
922
+
923
+ #: ../wp-cerber.php:2250
924
+ #, php-format
925
+ msgid "The WP Cerber requires WordPress %s or higher. You are running"
926
+ msgstr ""
927
+ "Bezpečné přihlašování vyžaduje alespoň Wordpress verze %s a vyšší. Váš "
928
+ "Wordpress je"
929
+
930
+ #: ../wp-cerber.php:2255
931
+ msgid "Can't activate WP Cerber due to a database error."
932
+ msgstr "Nelze aktivovat bezpečné přihlašování kvůli chybě databáze."
933
+
934
+ #: ../wp-cerber.php:2277 ../settings.php:224
935
+ msgid "Main Settings"
936
+ msgstr "Hlavní nastavení"
937
+
938
+ #: ../wp-cerber.php:2280 ../settings.php:63 ../settings.php:81 ../settings.php:234
939
+ msgid "Notifications"
940
+ msgstr "Notifikace"
941
+
942
+ #: ../common.php:255
943
+ msgid "Logged in"
944
+ msgstr "Přihlášen"
945
+
946
+ #: ../common.php:256
947
+ msgid "Logged out"
948
+ msgstr "Odhlášen"
949
+
950
+ #: ../common.php:257
951
+ msgid "Login failed"
952
+ msgstr "Přihlášení selhalo"
953
+
954
+ #: ../common.php:260
955
+ msgid "IP blocked"
956
+ msgstr "IP blokována"
957
+
958
+ #: ../common.php:261
959
+ msgid "Subnet blocked"
960
+ msgstr "Podsít zablokována"
961
+
962
+ #: ../common.php:263
963
+ msgid "Citadel activated!"
964
+ msgstr "Citadela je aktivní!"
965
+
966
+ #: ../common.php:266
967
+ msgid "IP blacklisted"
968
+ msgstr "IP na černé listině"
969
+
970
+ #: ../common.php:269
971
+ msgid "Password changed"
972
+ msgstr "Heslo bylo změněno"
973
+
974
+ #: ../common.php:351 ../settings.php:89
975
+ msgid "days"
976
+ msgstr "dnů"
977
+
978
+ #: ../common.php:353 ../settings.php:61 ../settings.php:79
979
+ msgid "minutes"
980
+ msgstr "minut(y)"
981
+
982
+ #: ../settings.php:59
983
+ msgid "Limit login attempts"
984
+ msgstr "Omezit neúspěšné pokusy"
985
+
986
+ #: ../settings.php:60
987
+ msgid "Attempts"
988
+ msgstr "Pokusy"
989
+
990
+ #: ../settings.php:61
991
+ msgid "Lockout duration"
992
+ msgstr "Doba blokování"
993
+
994
+ #: ../settings.php:62
995
+ msgid "Aggressive lockout"
996
+ msgstr "Agresivní zablokování"
997
+
998
+ #: ../settings.php:64
999
+ msgid "Site connection"
1000
+ msgstr "Připojení webu"
1001
+
1002
+ #: ../settings.php:64
1003
+ msgid "My site is behind a reverse proxy"
1004
+ msgstr "Web je za reverzní proxy"
1005
+
1006
+ #: ../settings.php:66
1007
+ msgid "Proactive security rules"
1008
+ msgstr "Proaktivní bezpečnostní pravidla"
1009
+
1010
+ #: ../settings.php:67
1011
+ msgid "Block subnet"
1012
+ msgstr "Zablokovat podsíť"
1013
+
1014
+ #: ../settings.php:67
1015
+ msgid "Always block entire subnet Class C of intruders IP"
1016
+ msgstr "Pokaždé blokovat útočníka v celé subsíti třídy C"
1017
+
1018
+ #: ../settings.php:68
1019
+ msgid "Non-existent users"
1020
+ msgstr "Neexistující uživatelé"
1021
+
1022
+ #: ../settings.php:68
1023
+ msgid "Immediately block IP when attempting to login with a non-existent username"
1024
+ msgstr ""
1025
+ "Při pokusu o přihlášení s neexistujícím uživatelským jménem okamžitě "
1026
+ "zablokovat IP adresu"
1027
+
1028
+ #: ../settings.php:69
1029
+ msgid "Redirect dashboard requests"
1030
+ msgstr "Přesměrování požadavku nástěnky"
1031
+
1032
+ #: ../settings.php:69
1033
+ msgid ""
1034
+ "Disable automatic redirecting to the login page when /wp-admin/ is requested "
1035
+ "by an unauthorized request"
1036
+ msgstr ""
1037
+ "Zakázat automatické přesměrování na přihlašovací stránku, pokud je poslán "
1038
+ "neautorizovaný požadavek na /wp-admin/"
1039
+
1040
+ #: ../settings.php:70
1041
+ msgid "Request wp-login.php"
1042
+ msgstr "Požadavek wp-login.php"
1043
+
1044
+ #: ../settings.php:70
1045
+ msgid "Immediately block IP after any request to wp-login.php"
1046
+ msgstr "Ihned blokovat IP adresu po jakékoli žádosti na soubor wp-login.php"
1047
+
1048
+ #: ../settings.php:73
1049
+ msgid "Custom login page"
1050
+ msgstr "Vlastní přihlašovací stránka"
1051
+
1052
+ #: ../settings.php:74
1053
+ msgid "Custom login URL"
1054
+ msgstr "Vlastní login URL"
1055
+
1056
+ #: ../settings.php:74
1057
+ msgid "must not overlap with the existing pages or posts slug"
1058
+ msgstr "url se nesmí překrývat s existujícím obsahem ( stránka, příspěvek, ... )"
1059
+
1060
+ #: ../settings.php:75
1061
+ msgid "Disable wp-login.php"
1062
+ msgstr "Zakázat wp-login.php"
1063
+
1064
+ #: ../settings.php:75
1065
+ msgid "Block direct access to wp-login.php and return HTTP 404 Not Found Error"
1066
+ msgstr ""
1067
+ "Blokovat přímý přístup k wp-login.php a odeslat http kód 404 - stránka "
1068
+ "nebyla nalezena"
1069
+
1070
+ #: ../settings.php:78
1071
+ msgid "Threshold"
1072
+ msgstr "Práh"
1073
+
1074
+ #: ../settings.php:79
1075
+ msgid "Duration"
1076
+ msgstr "Trvání"
1077
+
1078
+ #: ../settings.php:81
1079
+ msgid "Send notification to admin email"
1080
+ msgstr "Odeslat oznámení na email administrátora"
1081
+
1082
+ #: ../settings.php:81 ../settings.php:339
1083
+ msgid "Click to send test"
1084
+ msgstr "Odeslat test"
1085
+
1086
+ #: ../settings.php:89
1087
+ msgid "Keep records for"
1088
+ msgstr "Uchovat záznamy po"
1089
+
1090
+ #: ../settings.php:92
1091
+ msgid "Use file"
1092
+ msgstr "Použít soubor"
1093
+
1094
+ #: ../settings.php:92
1095
+ msgid "Write failed login attempts to the file"
1096
+ msgstr "Zapsat neúspěšné pokusy do souboru"
1097
+
1098
+ #: ../settings.php:166
1099
+ msgid "Make your protection smarter!"
1100
+ msgstr "Zapněte inteligentní ochranu webu!"
1101
+
1102
+ #: ../settings.php:173
1103
+ msgid ""
1104
+ "Be careful when enabling this options. If you forget the custom login URL "
1105
+ "you will not be able to login."
1106
+ msgstr ""
1107
+ "Buďte opatrní s touto volbou. Pokud zapomenete přihlašovací stránku, "
1108
+ "nebudete se moci přihlásit."
1109
+
1110
+ #: ../settings.php:238
1111
+ msgid "Help"
1112
+ msgstr "Nápověda"
1113
+
1114
+ #: ../settings.php:325
1115
+ #, php-format
1116
+ msgid "%s allowed retries in %s minutes"
1117
+ msgstr "%s povolené pokusy v %s minutách"
1118
+
1119
+ #: ../settings.php:330
1120
+ #, php-format
1121
+ msgid "Increase lockout duration to %s hours after %s lockouts in the last %s hours"
1122
+ msgstr "Zvýšit dobu trvání blokace na %s hodin(y) po %s blokacích ve %s hodinách"
1123
+
1124
+ #: ../settings.php:337
1125
+ msgid "Notify admin if the number of active lockouts above"
1126
+ msgstr "Upozornit administrátora, pokud blokace přesáhne počet"
1127
+
1128
+ #: ../settings.php:342
1129
+ #, php-format
1130
+ msgid "Enable after %s failed login attempts in last %s minutes"
1131
+ msgstr "Zapnout po %s. neúspěšném přihlášení v %s minutách."
1132
+
1133
+ #: ../settings.php:426
1134
+ msgid "Attention! You have changed the login URL! The new login URL is"
1135
+ msgstr "Pozor! Změnili jste adresu pro přihlašování! Nová adresa je"
1136
+
1137
+ #: ../cerber-tools.php:55
1138
+ msgid "Export settings to the file"
1139
+ msgstr "Export nastavení do souboru"
1140
+
1141
+ #: ../cerber-tools.php:56
1142
+ msgid ""
1143
+ "When you click the button below you will get a configuration file, which you "
1144
+ "can upload on another site."
1145
+ msgstr ""
1146
+ "Pokud kliknete na tlačítko níže, obdržíte konfigurační soubor, který můžete "
1147
+ "nahrát na jiném webu."
1148
+
1149
+ #: ../cerber-tools.php:57
1150
+ msgid "What do you want to export?"
1151
+ msgstr "Co chcete exportovat?"
1152
+
1153
+ #: ../cerber-tools.php:58 ../cerber-tools.php:67
1154
+ msgid "Settings"
1155
+ msgstr "Nastavení"
1156
+
1157
+ #: ../cerber-tools.php:60
1158
+ msgid "Download file"
1159
+ msgstr "Stáhnout soubor"
1160
+
1161
+ #: ../cerber-tools.php:62
1162
+ msgid "Import settings from the file"
1163
+ msgstr "Importovat nastavení ze souboru"
1164
+
1165
+ #: ../cerber-tools.php:63
1166
+ msgid ""
1167
+ "When you click the button below, file will be uploaded and all existing "
1168
+ "settings will be overridden."
1169
+ msgstr ""
1170
+ "Pokud kliknete na tlačítko níže, stávající nastavení bude nahrazeno vybraným "
1171
+ "souborem."
1172
+
1173
+ #: ../cerber-tools.php:64
1174
+ msgid "Select file to import."
1175
+ msgstr "Vyberte prosím soubor importu."
1176
+
1177
+ #: ../cerber-tools.php:64
1178
+ #, php-format
1179
+ msgid "Maximum upload file size: %s."
1180
+ msgstr "Maximální velikost nahrávaného souboru: %s."
1181
+
1182
+ #: ../cerber-tools.php:67
1183
+ msgid "What do you want to import?"
1184
+ msgstr "Co chcete importovat?"
1185
+
1186
+ #: ../cerber-tools.php:69
1187
+ msgid "Upload file"
1188
+ msgstr "Nahrát soubor"
1189
+
1190
+ #: ../cerber-tools.php:148
1191
+ msgid "No file was uploaded or file is corrupted"
1192
+ msgstr "Žádný soubor nebyl nahrán nebo je soubor poškozen"
1193
+
1194
+ #: ../cerber-tools.php:178
1195
+ msgid "Error while updating"
1196
+ msgstr "Během aktualizace se vyskytla chyba"
1197
+
1198
+ #: ../cerber-tools.php:181
1199
+ msgid "Settings has imported successfully from"
1200
+ msgstr "Nastavení bylo úspěšně importováno z"
1201
+
1202
+ #: ../cerber-tools.php:185
1203
+ msgid "Error while parsing file"
1204
+ msgstr "Během ukládání se vyskytla chyba"
languages/wp-cerber-de_DE.mo ADDED
Binary file
languages/wp-cerber-de_DE.po ADDED
@@ -0,0 +1,1273 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "MIME-Version: 1.0\n"
4
+ "Content-Type: text/plain; charset=UTF-8\n"
5
+ "Content-Transfer-Encoding: 8bit\n"
6
+ "X-Generator: POEditor.com\n"
7
+ "Project-Id-Version: WP Cerber\n"
8
+ "Language: de\n"
9
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
10
+
11
+ #: ../settings.php:57
12
+ msgid "Limit login attempts"
13
+ msgstr "Anmeldeversuche limitieren"
14
+
15
+ #: ../settings.php:58
16
+ msgid "Attempts"
17
+ msgstr "Versuche"
18
+
19
+ #: ../settings.php:59
20
+ msgid "Lockout duration"
21
+ msgstr "Sperrdauer"
22
+
23
+ #: ../settings.php:59 ../settings.php:78
24
+ msgid "minutes"
25
+ msgstr "Minuten"
26
+
27
+ #: ../settings.php:60
28
+ msgid "Aggressive lockout"
29
+ msgstr "Aggressive Sperre"
30
+
31
+ #: ../settings.php:63
32
+ msgid "Site connection"
33
+ msgstr "Verbindung zur Website"
34
+
35
+ #: ../settings.php:65
36
+ msgid "Proactive security rules"
37
+ msgstr "Proaktive Sicherheitsregeln"
38
+
39
+ #: ../settings.php:66
40
+ msgid "Block subnet"
41
+ msgstr "Sperre Subnetz"
42
+
43
+ #: ../settings.php:69
44
+ msgid "Request wp-login.php"
45
+ msgstr "Anfrage wp-login.php"
46
+
47
+ #: ../settings.php:69
48
+ msgid "Immediately block IP after any request to wp-login.php"
49
+ msgstr "IP nach jeder Anfrage auf wp-login.php sofort sperren"
50
+
51
+ #: ../settings.php:68
52
+ msgid "Redirect dashboard requests"
53
+ msgstr "Dashboard-Anfragen umleiten"
54
+
55
+ #: ../settings.php:72
56
+ msgid "Custom login page"
57
+ msgstr "Benutzerdefinierte Login-Seite"
58
+
59
+ #: ../settings.php:73
60
+ msgid "Custom login URL"
61
+ msgstr "Benutzerdefinierte Login-URL"
62
+
63
+ #. There is no perfect translation for "slug" with keeping the context. "Permalink" describes the whole URL but is used by WordPress in this place.
64
+ #: ../settings.php:73
65
+ #, fuzzy
66
+ msgid "must not overlap with the existing pages or posts slug"
67
+ msgstr "darf sich nicht mit Permalinks von vorhandenen Seiten oder Beiträgen überlappen"
68
+
69
+ #: ../settings.php:74
70
+ msgid "Disable wp-login.php"
71
+ msgstr "Deaktiviere wp-login.php"
72
+
73
+ #: ../settings.php:74
74
+ msgid "Block direct access to wp-login.php and return HTTP 404 Not Found Error"
75
+ msgstr "Blockiere direkten Zugriff zu wp-login.php und gib HTTP 404 Not Found Error zurück"
76
+
77
+ #: ../dashboard.php:904 ../settings.php:76
78
+ msgid "Citadel mode"
79
+ msgstr "Citadel Modus"
80
+
81
+ #: ../settings.php:77
82
+ msgid "Threshold"
83
+ msgstr "Schwelle"
84
+
85
+ #: ../settings.php:78
86
+ msgid "Duration"
87
+ msgstr "Dauer"
88
+
89
+ #: ../wp-cerber.php:2830 ../settings.php:62 ../settings.php:80 ../settings.php:238
90
+ msgid "Notifications"
91
+ msgstr "Benachrichtigungen"
92
+
93
+ #: ../settings.php:80
94
+ msgid "Send notification to admin email"
95
+ msgstr "Sende eine Benachrichtigung an die Emailadresse des Admins"
96
+
97
+ #: ../dashboard.php:913 ../dashboard.php:1413 ../wp-cerber.php:2828 ../settings.
98
+ #: php:231 ../cerber-tools.php:87 ../cerber-tools.php:96 ../cerber-tools.php:162
99
+ msgid "Access Lists"
100
+ msgstr "Zugriffslisten"
101
+
102
+ #: ../dashboard.php:911 ../dashboard.php:1082 ../wp-cerber.php:2695 ../settings.
103
+ #: php:82 ../settings.php:222
104
+ msgid "Activity"
105
+ msgstr "Aktivität"
106
+
107
+ #: ../dashboard.php:912 ../settings.php:226
108
+ msgid "Lockouts"
109
+ msgstr "Sperren"
110
+
111
+ #: ../settings.php:353
112
+ msgid "%s allowed retries in %s minutes"
113
+ msgstr "%s erlaubte Wiederholungen in %s Minuten"
114
+
115
+ #: ../settings.php:370
116
+ msgid "Enable after %s failed login attempts in last %s minutes"
117
+ msgstr "Aktiviere nach %s fehlgeschlagenen Anmeldeversuchen in den letzten %s Minuten"
118
+
119
+ #: ../dashboard.php:77 ../dashboard.php:502 ../wp-cerber.php:2696
120
+ msgid "IP"
121
+ msgstr "IP"
122
+
123
+ #: ../dashboard.php:355 ../dashboard.php:502
124
+ msgid "Date"
125
+ msgstr "Datum"
126
+
127
+ #: ../dashboard.php:355 ../dashboard.php:502
128
+ msgid "Local User"
129
+ msgstr "Lokaler Benutzer"
130
+
131
+ #: ../dashboard.php:355 ../dashboard.php:502 ../wp-cerber.php:2704
132
+ msgid "Username used"
133
+ msgstr "Benutzername wird bereits verwendet"
134
+
135
+ #: ../dashboard.php:83
136
+ msgid "Showing last %d records from %d"
137
+ msgstr "Zeige die letzten %d Einträge von %d"
138
+
139
+ #: ../common.php:335
140
+ msgid "Logged in"
141
+ msgstr "Eingeloggt"
142
+
143
+ #: ../common.php:336
144
+ msgid "Logged out"
145
+ msgstr "Ausgeloggt"
146
+
147
+ #: ../common.php:337
148
+ msgid "Login failed"
149
+ msgstr "Login fehlgeschlagen"
150
+
151
+ #: ../common.php:340
152
+ msgid "IP blocked"
153
+ msgstr "IP geblockt"
154
+
155
+ #: ../common.php:341
156
+ msgid "Subnet blocked"
157
+ msgstr "Subnetz geblockt"
158
+
159
+ #: ../common.php:343
160
+ msgid "Citadel activated!"
161
+ msgstr "Citadel-Modus aktiviert!"
162
+
163
+ #: ../dashboard.php:488 ../dashboard.php:668 ../common.php:347
164
+ msgid "Locked out"
165
+ msgstr "Ausgesperrt"
166
+
167
+ #. Only correct if "IP blacklisted" is used as indicative. Otherwise it would not translate "IP auf der schwarzen Liste" but "IP auf die schwarze Liste gesetzt" (if it states that the IP was just blacklisted).
168
+ #: ../common.php:348
169
+ #, fuzzy
170
+ msgid "IP blacklisted"
171
+ msgstr "IP blockiert"
172
+
173
+ #: ../common.php:354
174
+ msgid "Password changed"
175
+ msgstr "Passwort geändert"
176
+
177
+ #: ../dashboard.php:74 ../dashboard.php:123
178
+ msgid "Remove"
179
+ msgstr "Entfernen"
180
+
181
+ #: ../dashboard.php:270
182
+ msgid "Lockout for %s was removed"
183
+ msgstr "Die Sperre für %s wurde entfernt"
184
+
185
+ #: ../dashboard.php:102 ../dashboard.php:483 ../dashboard.php:663 ../dashboard.
186
+ #: php:902 ../wp-cerber.php:2822 ../settings.php:61 ../settings.php:192
187
+ #, fuzzy
188
+ msgid "White IP Access List"
189
+ msgstr "Weiße Liste (erlaubten IPs)"
190
+
191
+ #: ../dashboard.php:104 ../dashboard.php:484 ../dashboard.php:665 ../dashboard.
192
+ #: php:903
193
+ #, fuzzy
194
+ msgid "Black IP Access List"
195
+ msgstr "Schwarze Liste (verbotenen IPs)"
196
+
197
+ #: ../dashboard.php:126
198
+ msgid "List is empty"
199
+ msgstr "Liste ist leer"
200
+
201
+ #: ../dashboard.php:153
202
+ msgid "Address %s was added to White IP Access List"
203
+ msgstr "Adresse %s wurde zur Liste der erlaubten IPs hinzugefügt"
204
+
205
+ #: ../dashboard.php:166
206
+ msgid "Address %s was added to Black IP Access List"
207
+ msgstr "Adresse %s wurde zur Liste der verbotenen IPs hinzugefügt"
208
+
209
+ #: ../wp-cerber.php:2368
210
+ msgid "Citadel mode is activated after %d failed login attempts in %d minutes."
211
+ msgstr "Citadel-Modus ist aktiviert nach %d fehlgeschlagenen Logins in %d Minuten."
212
+
213
+ #: ../dashboard.php:1205
214
+ msgid "View Activity"
215
+ msgstr "Aktivitäten anzeigen"
216
+
217
+ #: ../cerber-tools.php:86 ../cerber-tools.php:95
218
+ msgid "Settings"
219
+ msgstr "Einstellungen"
220
+
221
+ #: ../dashboard.php:803
222
+ msgid "Last login"
223
+ msgstr "Letzte Anmeldung"
224
+
225
+ #: ../dashboard.php:830 ../dashboard.php:885
226
+ msgid "Never"
227
+ msgstr "Niemals"
228
+
229
+ #: ../dashboard.php:1125
230
+ msgid "Are you sure?"
231
+ msgstr "Sind Sie sicher?"
232
+
233
+ #: ../settings.php:63
234
+ msgid "My site is behind a reverse proxy"
235
+ msgstr "Meine Website ist hinter einem Reverse-Proxy"
236
+
237
+ #: ../settings.php:67
238
+ msgid "Non-existent users"
239
+ msgstr "Nicht vorhandene Benutzer"
240
+
241
+ #: ../settings.php:67
242
+ msgid "Immediately block IP when attempting to login with a non-existent username"
243
+ msgstr "IP sofort sperren, wenn versucht wird, sich mit einem nicht vorhandenen Benutzernamen einzuloggen "
244
+
245
+ #: ../settings.php:68
246
+ msgid "Disable automatic redirecting to the login page when /wp-admin/ is requested by an unauthorized request"
247
+ msgstr "Die automatische Umleitung auf die Anmeldeseite deaktivieren, wenn /wp-admin/ von einer nicht autorisierten Anfrage aufgerufen wird"
248
+
249
+ #. A fuzzy translation that is mostly used in this context would be "Machen Sie Ihren Schutz intelligenter!"
250
+ #: ../settings.php:178
251
+ msgid "Make your protection smarter!"
252
+ msgstr "Machen Sie Ihren Schutz schlauer!"
253
+
254
+ #: ../settings.php:182
255
+ msgid "Please enable Permalinks to use this feature. Set Permalink Settings to something other than Default."
256
+ msgstr "Bitte aktivieren Sie Permalinks um dieses Merkmal zu verwenden. Setzen Sie die Permalink-Einstellungen auf etwas anderes als Standard."
257
+
258
+ #: ../settings.php:185
259
+ msgid "Be careful when enabling this options. If you forget the custom login URL you will not be able to login."
260
+ msgstr "Seien Sie vorsichtig bei der Aktivierung dieser Optionen. Wenn Sie die benutzerdefinierte Login-URL vergessen, können Sie sich nicht mehr anmelden."
261
+
262
+ #: ../wp-cerber.php:2827 ../settings.php:228
263
+ msgid "Main Settings"
264
+ msgstr "Haupteinstellungen"
265
+
266
+ #: ../settings.php:240
267
+ msgid "Help"
268
+ msgstr "Hilfe"
269
+
270
+ #. "Aussperrungen" is used in plural because there are more likely several lockouts in the last hours. One single lockout would demand the use of the singular "Aussperrung". We could use "Aussperrung(en)" to cover all cases.
271
+ #: ../settings.php:358
272
+ #, fuzzy
273
+ msgid "Increase lockout duration to %s hours after %s lockouts in the last %s hours"
274
+ msgstr "Erhöhe die Sperrdauer um %s Stunden nach %s Aussperrungen in den letzten %s Stunden"
275
+
276
+ #: ../wp-cerber.php:215
277
+ msgid "You are not allowed to log in. Ask your administrator for assistance."
278
+ msgstr "Sie sind nicht berechtigt, sich anzumelden. Fragen Sie Ihren Administrator nach Unterstützung."
279
+
280
+ #. One "Minute", two/three/four/... "Minuten".
281
+ #: ../wp-cerber.php:221
282
+ #, fuzzy
283
+ msgid "You have reached the login attempts limit. Please try again in %d minutes."
284
+ msgstr "Sie haben die maximale Anzahl an Login-Versuchen erreicht. Bitte versuchen Sie es in %d Minuten noch einmal."
285
+
286
+ #: ../wp-cerber.php:240
287
+ msgid "You have only one attempt remaining."
288
+ msgid_plural "You have %d attempts remaining."
289
+ msgstr[0] "Sie haben nur noch einen Versuch."
290
+ msgstr[1] "Sie haben nur noch %d Versuche."
291
+
292
+ #: ../dashboard.php:515
293
+ msgid "No activity has been logged."
294
+ msgstr "Keine Aktivität wurde protokolliert."
295
+
296
+ #: ../dashboard.php:77
297
+ msgid "Expires"
298
+ msgstr "Gültig bis"
299
+
300
+ #: ../dashboard.php:89
301
+ msgid "No lockouts at the moment. The sky is clear."
302
+ msgstr "Keine Sperrung im Moment. Der Himmel ist klar."
303
+
304
+ #: ../dashboard.php:102
305
+ msgid "These IPs will never be locked out"
306
+ msgstr "Diese IPs werden nie gesperrt"
307
+
308
+ #: ../dashboard.php:106
309
+ msgid "Your IP"
310
+ msgstr "Ihre IP"
311
+
312
+ #: ../dashboard.php:162
313
+ msgid "You can't add your IP address"
314
+ msgstr "Sie können Ihre IP Adresse nicht hinzufügen"
315
+
316
+ #: ../wp-cerber.php:2369
317
+ msgid "Last failed attempt was at %s from IP %s with user login: %s."
318
+ msgstr "Der letzte gescheiterte Versuch war um %s von der IP %s mit der Benutzeranmeldung: %s."
319
+
320
+ #: ../wp-cerber.php:2432
321
+ msgid "Change notification settings"
322
+ msgstr "Benachrichtigungseinstellungen ändern"
323
+
324
+ #: ../wp-cerber.php:2805
325
+ msgid "Can't activate WP Cerber due to a database error."
326
+ msgstr "Kann WP Cerber aufgrund eines Datenbankfehlers nicht aktivieren."
327
+
328
+ #: ../settings.php:365
329
+ msgid "Notify admin if the number of active lockouts above"
330
+ msgstr "Benachrichtige den Admin, wenn die Anzahl von aktiven Aussperrungen größer ist als"
331
+
332
+ #: ../settings.php:83 ../settings.php:126
333
+ msgid "days"
334
+ msgstr "Tage"
335
+
336
+ #: ../dashboard.php:854
337
+ msgid "Cerber Quick View"
338
+ msgstr "Cerber Schnellansicht"
339
+
340
+ #: ../dashboard.php:85
341
+ msgid "Hint"
342
+ msgstr "Hinweis"
343
+
344
+ #: ../dashboard.php:85
345
+ msgid "To view activity, click on the IP"
346
+ msgstr "Um die Aktivität sehen zu können, klicken Sie auf die IP"
347
+
348
+ #: ../dashboard.php:123 ../dashboard.php:695
349
+ msgid "Check for activity"
350
+ msgstr "Auf Aktivität überprüfen"
351
+
352
+ #: ../settings.php:66
353
+ msgid "Always block entire subnet Class C of intruders IP"
354
+ msgstr "Immer das gesamte Subnetz Klasse C der IP des Eindringlings blockieren"
355
+
356
+ #: ../settings.php:80 ../settings.php:367
357
+ msgid "Click to send test"
358
+ msgstr "Klicken für Sendungstest"
359
+
360
+ #: ../settings.php:460
361
+ msgid "Attention! You have changed the login URL! The new login URL is"
362
+ msgstr "Achtung! Sie haben die Anmelde-URL geändert! Die neue Login-URL ist"
363
+
364
+ #: ../dashboard.php:802
365
+ msgid "Comments"
366
+ msgstr "Kommentare"
367
+
368
+ #: ../dashboard.php:805
369
+ msgid "Date of registration"
370
+ msgstr "Registrierungsdatum"
371
+
372
+ #: ../dashboard.php:259
373
+ msgid "Message has been sent to "
374
+ msgstr "Die Nachricht wurde gesendet an␣"
375
+
376
+ #: ../dashboard.php:1286
377
+ msgid "Update to version %s of WP Cerber"
378
+ msgstr "Update auf Version %s von WP Cerber"
379
+
380
+ #: ../wp-cerber.php:2370 ../wp-cerber.php:2720
381
+ msgid "View activity in dashboard"
382
+ msgstr "Zeige Aktivität im Dashboard"
383
+
384
+ #: ../wp-cerber.php:2400
385
+ msgid "Number of active lockouts"
386
+ msgstr "Anzahl der aktiven Sperren"
387
+
388
+ #: ../wp-cerber.php:2404
389
+ msgid "View lockouts in dashboard"
390
+ msgstr "Zeige Sperren im Dashboard"
391
+
392
+ #: ../wp-cerber.php:2457
393
+ msgid "This message was sent by"
394
+ msgstr "Diese Nachricht wurde gesendet von"
395
+
396
+ #. Used to be "Import/Export" but this is a fuzzy translation. Exact translation that WordPress also uses is "Werkzeuge".
397
+ #: ../dashboard.php:749 ../cerber-tools.php:43
398
+ msgid "Tools"
399
+ msgstr "Werkzeuge"
400
+
401
+ #: ../cerber-tools.php:83
402
+ msgid "Export settings to the file"
403
+ msgstr "Einstellungen in Datei exportieren"
404
+
405
+ #. "below" is ignored in the translation.
406
+ #: ../cerber-tools.php:84
407
+ #, fuzzy
408
+ msgid "When you click the button below you will get a configuration file, which you can upload on another site."
409
+ msgstr "Wenn Sie auf den Button klicken, bekommen Sie eine Konfigurationsdatei, die Sie auf einer anderen Website hochladen können."
410
+
411
+ #: ../cerber-tools.php:85
412
+ msgid "What do you want to export?"
413
+ msgstr "Was wollen Sie exportieren?"
414
+
415
+ #: ../cerber-tools.php:88
416
+ msgid "Download file"
417
+ msgstr "Datei herunterladen"
418
+
419
+ #: ../cerber-tools.php:90
420
+ msgid "Import settings from the file"
421
+ msgstr "Einstellungen aus Datei importieren"
422
+
423
+ #. "below" is ignored in the translation.
424
+ #: ../cerber-tools.php:91
425
+ #, fuzzy
426
+ msgid "When you click the button below, file will be uploaded and all existing settings will be overridden."
427
+ msgstr "Wenn Sie auf den Button klicken, wird die Datei hochgeladen und alle vorhandenen Einstellungen werden überschrieben."
428
+
429
+ #: ../cerber-tools.php:92
430
+ msgid "Select file to import."
431
+ msgstr "Datei zum Importieren auswählen."
432
+
433
+ #: ../cerber-tools.php:92
434
+ msgid "Maximum upload file size: %s."
435
+ msgstr "Maximale Dateigröße für Uploads: %s"
436
+
437
+ #: ../cerber-tools.php:95
438
+ msgid "What do you want to import?"
439
+ msgstr "Was wollen Sie importieren?"
440
+
441
+ #: ../cerber-tools.php:97
442
+ msgid "Upload file"
443
+ msgstr "Datei hochladen"
444
+
445
+ #: ../cerber-tools.php:132
446
+ msgid "No file was uploaded or file is corrupted"
447
+ msgstr "Keine Datei hochgeladen oder Datei ist beschädigt"
448
+
449
+ #: ../cerber-tools.php:162
450
+ msgid "Error while updating"
451
+ msgstr "Fehler bei der Aktualisierung"
452
+
453
+ #: ../cerber-tools.php:165
454
+ msgid "Settings has imported successfully from"
455
+ msgstr "Einstellungen erfolgreich importiert von"
456
+
457
+ #: ../cerber-tools.php:169
458
+ msgid "Error while parsing file"
459
+ msgstr "Fehler beim Parsen der Datei"
460
+
461
+ #: ../dashboard.php:77 ../dashboard.php:502
462
+ msgid "Hostname"
463
+ msgstr "Hostname"
464
+
465
+ #: ../dashboard.php:237
466
+ #, fuzzy
467
+ msgid "unknown"
468
+ msgstr "unbekannt"
469
+
470
+ #: ../settings.php:83
471
+ msgid "Keep records for"
472
+ msgstr "Behalte Aufzeichnungen für"
473
+
474
+ #: ../dashboard.php:889
475
+ msgid "active"
476
+ msgstr "aktiv"
477
+
478
+ #: ../dashboard.php:889
479
+ msgid "deactivate"
480
+ msgstr "deaktiviert"
481
+
482
+ #: ../dashboard.php:891
483
+ msgid "not active"
484
+ msgstr "nicht aktiv"
485
+
486
+ #. "deactive" and "disabled" mean exactly the same in German.
487
+ #: ../dashboard.php:892
488
+ msgid "disabled"
489
+ msgstr "deaktiviert"
490
+
491
+ #: ../dashboard.php:897
492
+ msgid "failed attempts"
493
+ msgstr "Fehlversuche"
494
+
495
+ #: ../dashboard.php:897 ../dashboard.php:898
496
+ msgid "in 24 hours"
497
+ msgstr "in 24 Stunden"
498
+
499
+ #: ../dashboard.php:897 ../dashboard.php:898
500
+ msgid "view all"
501
+ msgstr "Zeige alle"
502
+
503
+ #: ../dashboard.php:898
504
+ msgid "lockouts"
505
+ msgstr "Sperren"
506
+
507
+ #: ../dashboard.php:900
508
+ msgid "Lockouts at the moment"
509
+ msgstr "Momentane Sperren"
510
+
511
+ #: ../dashboard.php:901
512
+ msgid "Last lockout"
513
+ msgstr "Letzte Sperre"
514
+
515
+ #: ../dashboard.php:902 ../dashboard.php:903 ../dashboard.php:1392
516
+ msgid "entry"
517
+ msgid_plural "entries"
518
+ msgstr[0] "Eintrag"
519
+ msgstr[1] "Einträge"
520
+
521
+ #: ../dashboard.php:1120
522
+ #, fuzzy
523
+ msgid "Confused about some settings?"
524
+ msgstr "Verwirrende Einstellungen?"
525
+
526
+ #: ../dashboard.php:1121
527
+ msgid "You can easily load default recommended settings using button below"
528
+ msgstr "Sie können ganz einfach mit dem unteren Button empfohlene Standardeinstellungen laden"
529
+
530
+ #: ../dashboard.php:1123
531
+ msgid "Load default settings"
532
+ msgstr "Standardeinstellung laden"
533
+
534
+ #: ../dashboard.php:1131
535
+ msgid "doesn't affect Custom login URL and Access Lists"
536
+ msgstr "hat keinen Einfluss auf benutzerdefinierte Login-URL und Zugriffslisten"
537
+
538
+ #: ../dashboard.php:1150
539
+ msgid "Donate"
540
+ msgstr "Spenden"
541
+
542
+ #: ../dashboard.php:1280
543
+ msgid "New version is available"
544
+ msgstr "Eine neue Version ist verfügbar"
545
+
546
+ #. Name of the plugin
547
+ #: ../dashboard.php:744 ../dashboard.php:759
548
+ msgid "WP Cerber"
549
+ msgstr "WP Cerber"
550
+
551
+ #. URI of the plugin
552
+ #:
553
+ msgid "http://wpcerber.com"
554
+ msgstr "http://wpcerber.com"
555
+
556
+ #: ../wp-cerber.php:2348
557
+ msgid "WP Cerber notify"
558
+ msgstr "WP Cerber benachrichtigen"
559
+
560
+ #: ../wp-cerber.php:2366
561
+ msgid "Citadel mode is activated"
562
+ msgstr "Citadel-Modus ist aktiviert"
563
+
564
+ #: ../wp-cerber.php:2437
565
+ msgid "New Custom login URL"
566
+ msgstr "Neue benutzerdefinierte Login-URL"
567
+
568
+ #: ../wp-cerber.php:2796
569
+ msgid "The WP Cerber requires PHP %s or higher. You are running"
570
+ msgstr "WP Cerber benötigt PHP Version %s oder höher. Sie haben"
571
+
572
+ #: ../wp-cerber.php:2800
573
+ msgid "The WP Cerber requires WordPress %s or higher. You are running"
574
+ msgstr "WP Cerber benötigt Wordpress Version %s oder höher. Sie haben"
575
+
576
+ #. Non-fuzzy translation would be "Verwende Datei" but in this context "Verwende Logdatei" is describing exactly what it does.
577
+ #: ../settings.php:86
578
+ #, fuzzy
579
+ msgid "Use file"
580
+ msgstr "Verwende Logdatei"
581
+
582
+ #: ../settings.php:86
583
+ msgid "Write failed login attempts to the file"
584
+ msgstr "Schreibe fehlgeschlagene Anmeldungen in die Datei."
585
+
586
+ #: ../dashboard.php:804
587
+ msgid "Failed attempts in last 24 hours"
588
+ msgstr "Fehlversuche in den letzten 24 Stunden"
589
+
590
+ #: ../dashboard.php:1204
591
+ msgid "Deactivate"
592
+ msgstr "Deaktivieren"
593
+
594
+ #: ../dashboard.php:77 ../wp-cerber.php:2402
595
+ msgid "Reason"
596
+ msgstr "Grund"
597
+
598
+ #: ../dashboard.php:130
599
+ msgid "Add IP to the list"
600
+ msgstr "Füge IP zur Liste hinzu"
601
+
602
+ #: ../dashboard.php:713
603
+ msgid "Add IP to the Black List"
604
+ msgstr "Füge IP zur Schwarzen Liste hinzu"
605
+
606
+ #: ../common.php:376
607
+ msgid "Attempt to access"
608
+ msgstr "Zugriffsversuch"
609
+
610
+ #: ../common.php:375
611
+ msgid "Limit on login attempts is reached"
612
+ msgstr "Limit für Anmeldeversuche ist erreicht"
613
+
614
+ #: ../common.php:362 ../common.php:377
615
+ msgid "Attempt to log in with non-existent username"
616
+ msgstr "Anmeldeversuch mit nicht existierendem Nutzernamen"
617
+
618
+ #: ../wp-cerber.php:2401
619
+ msgid "Last lockout was added: %s for IP %s"
620
+ msgstr "Letzte Sperre wurde hinzugefügt: %s für IP %s"
621
+
622
+ #: ../wp-cerber.php:2824
623
+ msgid "It's important to check security settings."
624
+ msgstr "Es ist wichtig Sicherheitseinstellungen zu überprüfen."
625
+
626
+ #. "Abhärtung" is the medical translation for "hardening" which fits best in this case.
627
+ #: ../wp-cerber.php:2829 ../settings.php:233
628
+ msgid "Hardening"
629
+ msgstr "Abhärtung"
630
+
631
+ #: ../dashboard.php:691
632
+ msgid "Abuse email:"
633
+ msgstr "Missbrauch Email:"
634
+
635
+ #: ../settings.php:154
636
+ msgid "Email Address"
637
+ msgstr "E-Mail-Adresse"
638
+
639
+ #: ../settings.php:154
640
+ msgid "if empty, the admin email %s will be used"
641
+ msgstr "wenn leer, dann wird die E-Mail-Adresse %s des Admins benutzt"
642
+
643
+ #. More narrow translation would be "IP aufbrechen" but does not really fit.
644
+ #: ../settings.php:89
645
+ #, fuzzy
646
+ msgid "Drill down IP"
647
+ msgstr "IP inspizieren"
648
+
649
+ #: ../settings.php:89
650
+ msgid "Retrieve extra WHOIS information for IP"
651
+ msgstr "Extra WHOIS Informationen für IP abrufen"
652
+
653
+ #: ../settings.php:97
654
+ msgid "Hardening WordPress"
655
+ msgstr "WordPress abhärten"
656
+
657
+ #. "Enumeration" would originally translate to "Aufzählung" but does not quite fit.
658
+ #: ../settings.php:98
659
+ #, fuzzy
660
+ msgid "Stop user enumeration"
661
+ msgstr "Benutzererfassung stoppen"
662
+
663
+ #: ../settings.php:98
664
+ msgid "Block access to the pages like /?author=n"
665
+ msgstr "Zugriff auf Seiten wie /?author=n sperren"
666
+
667
+ #: ../settings.php:99
668
+ msgid "Disable XML-RPC"
669
+ msgstr "Deaktiviere XML-RPC"
670
+
671
+ #: ../settings.php:99
672
+ msgid "Block access to the XML-RPC server (including Pingbacks and Trackbacks)"
673
+ msgstr "Zugriff auf den XML-RPC Server sperren (Pingbacks und Trackbacks eingeschlossen)"
674
+
675
+ #: ../settings.php:100
676
+ msgid "Disable feeds"
677
+ msgstr "Feeds deaktivieren"
678
+
679
+ #: ../settings.php:100
680
+ msgid "Block access to the RSS, Atom and RDF feeds"
681
+ msgstr "Zugriff auf den RSS-, den Atom- und den RDF-Feed blockieren"
682
+
683
+ #: ../settings.php:101
684
+ msgid "Disable REST API"
685
+ msgstr "REST API deaktivieren"
686
+
687
+ #: ../settings.php:101
688
+ msgid "Block access to the WordPress REST API"
689
+ msgstr "Zugriff auf das WordPress REST API blockieren"
690
+
691
+ #: ../settings.php:192
692
+ #, fuzzy
693
+ msgid "These settings do not affect hosts from the "
694
+ msgstr "Diese Einstellungen beeinflussen keine Hosts von"
695
+
696
+ #: ../settings.php:540
697
+ msgid "<strong>ERROR</strong>: please enter a valid email address."
698
+ msgstr "<strong>FEHLER</strong>: Bitte eine gültige E-Mail-Adresse eingeben"
699
+
700
+ #: ../wp-cerber.php:2431 ../wp-cerber.php:2821
701
+ #, fuzzy
702
+ msgid "WP Cerber is now active and has started protecting your site"
703
+ msgstr "WP Cerber ist nun aktiv und schützt ihre Website"
704
+
705
+ #: ../dashboard.php:77
706
+ msgid "Action"
707
+ msgstr "Aktion"
708
+
709
+ #: ../dashboard.php:104
710
+ msgid "Nobody can log in or register from these IPs"
711
+ msgstr "Niemand kann sich von diesen IPs anmelden oder registrieren"
712
+
713
+ #: ../dashboard.php:150 ../dashboard.php:158
714
+ msgid "Incorrect IP address or IP range"
715
+ msgstr "Falsche IP-Adresse oder falscher IP-Bereich"
716
+
717
+ #: ../dashboard.php:262
718
+ msgid "Unable to send notification email"
719
+ msgstr "Kann Benachrichtigungsemail nicht senden"
720
+
721
+ #: ../dashboard.php:287 ../dashboard.php:1220
722
+ msgid "Settings saved"
723
+ msgstr "Einstellungen gespeichert"
724
+
725
+ #: ../dashboard.php:695
726
+ msgid "Network:"
727
+ msgstr "Netzwerk:"
728
+
729
+ #: ../dashboard.php:709
730
+ msgid "Add network to the Black List"
731
+ msgstr "Netzwerk zur schwarzen Liste hinzufügen"
732
+
733
+ #: ../dashboard.php:1203
734
+ msgid "Attention! Citadel mode is now active. Nobody is able to log in."
735
+ msgstr "Achtung! Citadel-Modus ist nun aktiv. Niemand kann sich anmelden."
736
+
737
+ #: ../whois.php:210 ../common.php:374
738
+ msgid "Unknown"
739
+ msgstr "Unbekannt"
740
+
741
+ #. Description of the plugin
742
+ #:
743
+ msgid "Protects site from brute force attacks, bots and hackers. Antispam protection with reCAPTCHA. Comprehensive control of user activity. Restrict login by IP access lists. Limit login attempts. Feel free to contact developer on the site <a href=\"http://wpcerber.com\">wpcerber.com</a>."
744
+ msgstr "Schützt Seite vor Brute-Force-Attacken, Bots und Hackern. Anti-Spam-Schutz mit reCAPTCHA. Umfassende Kontrolle von Nutzeraktivitäten. Eingeschränkte Anmeldung durch IP-Zugriffs-Listen. Anmeldeversuche limitieren. Gerne können Sie den Entwickler auf <a href=\"http://wpcerber.com\">wpcerber.com</a> kontaktieren."
745
+
746
+ #. Author of the plugin
747
+ #:
748
+ msgid "Gregory"
749
+ msgstr "Gregory"
750
+
751
+ #: ../wp-cerber.php:560 ../wp-cerber.php:572 ../wp-cerber.php:579 ../wp-cerber.
752
+ #: php:717 ../wp-cerber.php:922 ../wp-cerber.php:927 ../wp-cerber.php:932 ../wp-
753
+ #: cerber.php:938 ../wp-cerber.php:968 ../wp-cerber.php:1062 ../common.php:128 ..
754
+ #: /common.php:181 ../common.php:185 ../settings.php:513
755
+ msgid "ERROR:"
756
+ msgstr "FEHLER:"
757
+
758
+ #: ../wp-cerber.php:589
759
+ msgid "Human verification failed. Please click the square box in the reCAPTCHA block below."
760
+ msgstr "Menschlichkeitsnachweis gescheitert. Bitte klicken Sie das quadratische Kästchen im reCAPTCHA-Block unten."
761
+
762
+ #: ../wp-cerber.php:728
763
+ msgid "<strong>ERROR</strong>: The password you entered for the username %s is incorrect."
764
+ msgstr "<strong>FEHLER</strong>: Das eingegebene Passwort für den Benutzernamen %s ist falsch."
765
+
766
+ #: ../wp-cerber.php:933
767
+ msgid "Username is not allowed. Please choose another one."
768
+ msgstr "Benutzername ist nicht erlaubt. Bitte einen anderen wählen."
769
+
770
+ #: ../wp-cerber.php:2395
771
+ msgid "unspecified"
772
+ msgstr "nicht spezifiziert"
773
+
774
+ #: ../wp-cerber.php:2398
775
+ msgid "Number of lockouts is increasing"
776
+ msgstr "Anzahl an Sperren steigt an"
777
+
778
+ #: ../wp-cerber.php:2403
779
+ msgid "View activity for this IP"
780
+ msgstr "Zeige Aktivität für diese IP"
781
+
782
+ #: ../wp-cerber.php:2407 ../wp-cerber.php:2409
783
+ msgid "A new version of WP Cerber is available to install"
784
+ msgstr "Eine neue Version von WP Cerber ist zur Installation verfügbar"
785
+
786
+ #: ../wp-cerber.php:2408
787
+ msgid "Hi!"
788
+ msgstr "Hallo!"
789
+
790
+ #. Original translation is "Internetseite" but this translation is not up to time.
791
+ #: ../wp-cerber.php:2410 ../wp-cerber.php:2421
792
+ msgid "Website"
793
+ msgstr "Website"
794
+
795
+ #: ../wp-cerber.php:2413 ../wp-cerber.php:2414
796
+ msgid "The WP Cerber security plugin has been deactivated"
797
+ msgstr "Das WP Cerber Sicherheits-Plugin wurde deaktiviert"
798
+
799
+ #: ../wp-cerber.php:2416
800
+ msgid "Not logged in"
801
+ msgstr "Nicht angemeldet"
802
+
803
+ #: ../wp-cerber.php:2422
804
+ #, fuzzy
805
+ msgid "By user"
806
+ msgstr "Von Nutzer"
807
+
808
+ #: ../wp-cerber.php:2423
809
+ #, fuzzy
810
+ msgid "From IP address"
811
+ msgstr "Von IP-Adresse"
812
+
813
+ #: ../wp-cerber.php:2426
814
+ #, fuzzy
815
+ msgid "From country"
816
+ msgstr "Vom Land"
817
+
818
+ #: ../wp-cerber.php:2430
819
+ msgid "The WP Cerber security plugin is now active"
820
+ msgstr "Das WP Cerber Sicherheits-Plugin ist nun aktiv"
821
+
822
+ #: ../wp-cerber.php:2822
823
+ #, fuzzy
824
+ msgid "Your IP address is added to the"
825
+ msgstr "Ihre IP-Adresse wurde hinzugefügt zu"
826
+
827
+ #: ../wp-cerber.php:2831
828
+ msgid "Import settings"
829
+ msgstr "Import-Einstellungen"
830
+
831
+ #: ../settings.php:155
832
+ msgid "Notification limit"
833
+ msgstr "Benachrichtigungslimit"
834
+
835
+ #: ../settings.php:155
836
+ #, fuzzy
837
+ msgid "notification letters allowed per hour (0 means unlimited)"
838
+ msgstr "Zugelassene Benachrichtigungen pro Stunde (0 bedeutet kein Limit)"
839
+
840
+ #: ../settings.php:110
841
+ msgid "User related settings"
842
+ msgstr "Benutzerbezogene Einstellungen"
843
+
844
+ #: ../settings.php:111
845
+ msgid "Prohibited usernames"
846
+ msgstr "Verbotene Benutzernamen"
847
+
848
+ #: ../settings.php:111
849
+ msgid "Usernames from this list are not allowed to log in or register. Any IP address, have tried to use any of these usernames, will be immediately blocked. Use comma to separate logins."
850
+ msgstr "Benutzernamen von dieser Liste dürfen sich nicht anmelden oder registrieren. Jede IP-Adresse, die versucht hat einen dieser Nutzernamen zu verwenden, wird sofort blockiert. Mit Komma Namen trennen."
851
+
852
+ #: ../settings.php:112
853
+ msgid "User session expire"
854
+ msgstr "Benutzer-Sitzung Ablauf"
855
+
856
+ #: ../settings.php:112
857
+ msgid "in minutes (leave empty to use default WP value)"
858
+ msgstr "in Minuten (leer lassen um WP Standardwert zu verwenden)"
859
+
860
+ #: ../settings.php:129
861
+ msgid "reCAPTCHA settings"
862
+ msgstr "reCAPTCHA-Einstellungen"
863
+
864
+ #. Technical term.
865
+ #: ../settings.php:130
866
+ msgid "Site key"
867
+ msgstr "Site key"
868
+
869
+ #. Technical term.
870
+ #: ../settings.php:131
871
+ msgid "Secret key"
872
+ msgstr "Secret key"
873
+
874
+ #: ../settings.php:134
875
+ msgid "Enable reCAPTCHA for WordPress registration form"
876
+ msgstr "Aktiviere reCAPTCHA für das WordPress Registrierungsformular"
877
+
878
+ #: ../settings.php:137
879
+ msgid "Lost password form"
880
+ msgstr "Passwort-Vergessen-Formular"
881
+
882
+ #: ../settings.php:140
883
+ msgid "Login form"
884
+ msgstr "Anmeldeforumlar"
885
+
886
+ #: ../settings.php:140
887
+ msgid "Enable reCAPTCHA for WordPress login form"
888
+ msgstr "Aktiviere reCAPTCHA für das WordPress Anmeldeformular"
889
+
890
+ #: ../settings.php:195
891
+ msgid "Before you can start using reCAPTCHA, you have to obtain Site key and Secret key on the Google website"
892
+ msgstr "Bevor Sie reCAPTCHA nutzen können, müssen Sie einen Site key und einen Secret key von der Google Website beziehen."
893
+
894
+ #: ../cerber-lab.php:580 ../settings.php:196
895
+ msgid "Know more"
896
+ msgstr "Mehr erfahren"
897
+
898
+ #: ../dashboard.php:744 ../settings.php:215
899
+ msgid "WP Cerber Security"
900
+ msgstr "WP Cerber Sicherheit"
901
+
902
+ #: ../settings.php:235
903
+ msgid "Users"
904
+ msgstr "Benutzer"
905
+
906
+ #: ../common.php:333
907
+ msgid "User created"
908
+ msgstr "Benutzer erstellt"
909
+
910
+ #: ../dashboard.php:1076 ../common.php:334
911
+ msgid "User registered"
912
+ msgstr "Benutzer registriert"
913
+
914
+ #: ../common.php:357
915
+ msgid "reCAPTCHA verification failed"
916
+ msgstr "reCAPTCHA-Bestätigung gescheitert"
917
+
918
+ #: ../common.php:358
919
+ msgid "reCAPTCHA settings are incorrect"
920
+ msgstr "reCAPTCHA-Einstellungen sind falsch"
921
+
922
+ #: ../common.php:361
923
+ msgid "Attempt to access prohibited URL"
924
+ msgstr "Zugriffsversuch auf verbotene URL"
925
+
926
+ #: ../common.php:363 ../common.php:378
927
+ msgid "Attempt to log in with prohibited username"
928
+ msgstr "Anmeldeversuch mit verbotenem Benutzernamen"
929
+
930
+ #: ../settings.php:84
931
+ msgid "Cerber Lab connection"
932
+ msgstr "Cerber Lab Verbindung"
933
+
934
+ #: ../settings.php:84
935
+ msgid "Send malicious IP addresses to the Cerber Lab"
936
+ msgstr "Bösartige IP-Adressen an das Cerber Lab senden"
937
+
938
+ #: ../settings.php:85
939
+ msgid "Cerber Lab protocol"
940
+ msgstr "Cerber Lab Protokoll"
941
+
942
+ #: ../settings.php:121 ../settings.php:134
943
+ msgid "Registration form"
944
+ msgstr "Registrierungsformular"
945
+
946
+ #: ../settings.php:135
947
+ msgid "Enable reCAPTCHA for WooCommerce registration form"
948
+ msgstr "Aktiviere reCAPTCHA für das WooCommerce Registrierungsformular"
949
+
950
+ #: ../settings.php:137
951
+ msgid "Enable reCAPTCHA for WordPress lost password form"
952
+ msgstr "Aktiviere reCAPTCHA für das WordPress Passwort-Vergessen-Formular"
953
+
954
+ #: ../settings.php:138
955
+ msgid "Enable reCAPTCHA for WooCommerce lost password form"
956
+ msgstr "Aktiviere reCAPTCHA für das WooCommerce Passwort-Vergessen-Formular"
957
+
958
+ #: ../settings.php:141
959
+ msgid "Enable reCAPTCHA for WooCommerce login form"
960
+ msgstr "Aktiviere reCAPTCHA für das WooCommerce Anmeldeformular"
961
+
962
+ #: ../common.php:359
963
+ msgid "Request to the Google reCAPTCHA service failed"
964
+ msgstr "Anfrage an den Google reCAPTCHA Dienst gescheitert"
965
+
966
+ #: ../dashboard.php:1068 ../dashboard.php:1097
967
+ msgid "View all"
968
+ msgstr "Zeige alle"
969
+
970
+ #: ../dashboard.php:1098
971
+ msgid "Recently locked out IP addresses"
972
+ msgstr "Kürzlich ausgesperrte IP-Adressen"
973
+
974
+ #. "OK, vernichte sie alle" is a nicer translation for "OK, kill them all" ... too harsh or does it fit?
975
+ #: ../cerber-lab.php:578
976
+ #, fuzzy
977
+ msgid "OK, nail them all"
978
+ msgstr "OK, vernichte sie alle"
979
+
980
+ #: ../cerber-lab.php:579
981
+ msgid "NO, maybe later"
982
+ msgstr "NEIN, vielleicht später"
983
+
984
+ #. Dashboard is in German more common in this context as the actual translation "Amaturenbrett" which is only used for non-digital things like in cars!
985
+ #: ../dashboard.php:746 ../dashboard.php:910 ../dashboard.php:1412 ../settings.
986
+ #: php:220
987
+ #, fuzzy
988
+ msgid "Dashboard"
989
+ msgstr "Dashboard"
990
+
991
+ #: ../cerber-lab.php:576
992
+ msgid "Want to make WP Cerber even more powerful?"
993
+ msgstr "Wollen Sie WP Cerber noch stärker machen?"
994
+
995
+ #: ../cerber-lab.php:577
996
+ msgid "Allow WP Cerber to send locked out malicious IP addresses to Cerber Lab. This helps the plugin team to develop new algorithms for WP Cerber that will defend WordPress against new threats and botnets that are appearing everyday. You can disable the sending in the plugin settings at any time."
997
+ msgstr "Erlaube WP Cerber ausgesperrte bösartige IP-Adressen an das Cerber Lab zu senden. Dies hilft dem Plugin-Team neue Algorithmen für WP Cerber zu entwickeln, die WordPress gegen täglich auftretende neue Bedrohungen und Botnets verteidigen. Sie können das Senden jederzeit in den Plugin-Einstellungen deaktivieren."
998
+
999
+ #: ../dashboard.php:355
1000
+ msgid "IP address"
1001
+ msgstr "IP-Adresse"
1002
+
1003
+ #: ../dashboard.php:355
1004
+ msgid "User login"
1005
+ msgstr "Benutzer-Anmeldung"
1006
+
1007
+ #: ../dashboard.php:355
1008
+ msgid "User ID"
1009
+ msgstr "Benutzer-ID"
1010
+
1011
+ #: ../dashboard.php:511
1012
+ msgid "Export"
1013
+ msgstr "Export"
1014
+
1015
+ #: ../dashboard.php:521
1016
+ msgid "All activities"
1017
+ msgstr "Alle Aktivitäten"
1018
+
1019
+ #: ../dashboard.php:530
1020
+ msgid "Search for IP or username"
1021
+ msgstr "Suche nach IP oder Nutzernamen"
1022
+
1023
+ #: ../dashboard.php:530
1024
+ msgid "Filter"
1025
+ msgstr "Filter"
1026
+
1027
+ #: ../dashboard.php:746
1028
+ msgid "Cerber Dashboard"
1029
+ msgstr "Cerber Dashboard"
1030
+
1031
+ #: ../dashboard.php:749
1032
+ msgid "Cerber tools"
1033
+ msgstr "Cerber Werkzeuge"
1034
+
1035
+ #: ../dashboard.php:1325
1036
+ msgid "Subscribe"
1037
+ msgstr "Abonnieren"
1038
+
1039
+ #: ../dashboard.php:1326
1040
+ msgid "Unsubscribe"
1041
+ msgstr "Abmelden"
1042
+
1043
+ #: ../dashboard.php:1354
1044
+ #, fuzzy
1045
+ msgid "You've subscribed"
1046
+ msgstr "Erfolgreich abonniert"
1047
+
1048
+ #: ../dashboard.php:1357
1049
+ #, fuzzy
1050
+ msgid "You've unsubscribed"
1051
+ msgstr "Erfolgreich abgemeldet"
1052
+
1053
+ #: ../wp-cerber.php:2441 ../wp-cerber.php:2442
1054
+ msgid "A new activity has been recorded"
1055
+ msgstr "Eine neue Aktivität wurde aufgezeichnet"
1056
+
1057
+ #: ../wp-cerber.php:2700
1058
+ msgid "User"
1059
+ msgstr "Benutzer"
1060
+
1061
+ #: ../wp-cerber.php:2708
1062
+ msgid "Search string"
1063
+ msgstr "Such-String"
1064
+
1065
+ #: ../wp-cerber.php:2721
1066
+ msgid "To unsubscribe click here"
1067
+ msgstr "Zum Abmelden hier klicken"
1068
+
1069
+ #: ../settings.php:88
1070
+ msgid "Preferences"
1071
+ msgstr "Präferenzen"
1072
+
1073
+ #: ../settings.php:90
1074
+ msgid "Date format"
1075
+ msgstr "Datumsformat"
1076
+
1077
+ #: ../settings.php:90
1078
+ msgid "if empty, the default format %s will be used"
1079
+ msgstr "wenn leer, dann wird das Standard Format %s verwendet"
1080
+
1081
+ #: ../dashboard.php:906 ../settings.php:157
1082
+ msgid "Push notifications"
1083
+ msgstr "Push-Benachrichtigungen"
1084
+
1085
+ #: ../settings.php:152
1086
+ msgid "Email notifications"
1087
+ msgstr "Email-Benachrichtigungen"
1088
+
1089
+ #: ../settings.php:154
1090
+ msgid "Use comma to specify multiple values"
1091
+ msgstr "Mit Komma mehrere Werte trennen"
1092
+
1093
+ #: ../settings.php:164
1094
+ msgid "All connected devices"
1095
+ msgstr "Alle verbundenen Geräte"
1096
+
1097
+ #: ../settings.php:165
1098
+ msgid "No devices found"
1099
+ msgstr "Kein Gerät gefunden"
1100
+
1101
+ #: ../settings.php:167
1102
+ msgid "Not available"
1103
+ msgstr "Nicht verfügbar"
1104
+
1105
+ #: ../common.php:355
1106
+ msgid "Password reset requested"
1107
+ msgstr "Passwort Zurücksetzung angefordert"
1108
+
1109
+ #: ../common.php:379
1110
+ msgid "Limit on failed reCAPTCHA verifications is reached"
1111
+ msgstr "Grenze an fehlgeschlagenen reCAPTCHA ist erreicht"
1112
+
1113
+ #: ../common.php:432
1114
+ msgid "%s ago"
1115
+ msgstr "vor %s"
1116
+
1117
+ #: ../settings.php:61
1118
+ msgid "Apply limit login rules to IP addresses in the White IP Access List"
1119
+ msgstr "Eingeschränkte Zugangsregeln für IP Adresse in der White IP Liste anwenden"
1120
+
1121
+ #: ../settings.php:70
1122
+ msgid "Display 404 page"
1123
+ msgstr "Zeige 404 Seite"
1124
+
1125
+ #: ../settings.php:132
1126
+ msgid "Invisible reCAPTCHA"
1127
+ msgstr "Unsichtbares reCAPTCHA"
1128
+
1129
+ #: ../settings.php:132
1130
+ msgid "Enable invisible reCAPTCHA"
1131
+ msgstr "Unsichtbares reCAPTCHA aktivieren"
1132
+
1133
+ #: ../settings.php:132
1134
+ msgid "(do not enable it unless you get and enter the Site and Secret keys for the invisible version)"
1135
+ msgstr "(nicht anwenden, sofern nicht Seite betreten wurde und Geheimschlüssel für unsichtbare Version erhalten)"
1136
+
1137
+ #: ../settings.php:143
1138
+ msgid "Enable reCAPTCHA for WordPress comment form"
1139
+ msgstr "reCAPTCHA für WordPress Kommentarformular aktivieren"
1140
+
1141
+ #: ../settings.php:144
1142
+ msgid "Disable reCAPTCHA for logged in users"
1143
+ msgstr "reCAPTCHA für angemeldete Benutzer deaktivieren"
1144
+
1145
+ #: ../settings.php:146
1146
+ msgid "Limit attempts"
1147
+ msgstr "Versuche Einschränken"
1148
+
1149
+ #: ../settings.php:146
1150
+ msgid "Lock out IP address for %s minutes after %s failed attempts within %s minutes"
1151
+ msgstr "IP Adresse für %s Minuten nach %s fehlgeschlagenen Versuchen innerhalb von %s Minuten sperren"
1152
+
1153
+ #: ../settings.php:189
1154
+ msgid "In the Citadel mode nobody is able to log in except IPs from the White IP Access List. Active user sessions will not be affected."
1155
+ msgstr "Im Citadel Modus kann sich niemand einloggen, außer IPs auf der White IP Zugangsliste. Laufende Sitzungen werden nicht beeinflusst."
1156
+
1157
+ #: ../dashboard.php:355 ../dashboard.php:502
1158
+ msgid "Event"
1159
+ msgstr "Ereignis"
1160
+
1161
+ #: ../dashboard.php:1049
1162
+ msgid "Spam comments denied"
1163
+ msgstr "Spam Kommentare verweigert"
1164
+
1165
+ #: ../dashboard.php:1050
1166
+ msgid "Malicious IP addresses detected"
1167
+ msgstr "Schadhafte IP Adresse gefunden"
1168
+
1169
+ #: ../dashboard.php:1051
1170
+ msgid "Lockouts occurred"
1171
+ msgstr "Sperre aufgetreten"
1172
+
1173
+ #: ../dashboard.php:1052
1174
+ msgid "Locked out IP now"
1175
+ msgstr "Jetzt gesperrte IP"
1176
+
1177
+ #: ../dashboard.php:1077
1178
+ msgid "All suspicious activity"
1179
+ msgstr "Alle verdächtigen Aktivitäten"
1180
+
1181
+ #: ../wp-cerber.php:923 ../wp-cerber.php:939
1182
+ msgid "You are not allowed to register."
1183
+ msgstr "Registrierung nicht erlaubt."
1184
+
1185
+ #: ../common.php:344
1186
+ msgid "Spam comment denied"
1187
+ msgstr "Spam Kommentar verweigert"
1188
+
1189
+ #: ../common.php:350
1190
+ msgid "by Cerber Lab"
1191
+ msgstr ""
1192
+
1193
+ #: ../common.php:365
1194
+ msgid "Attempt to log in denied"
1195
+ msgstr "Loginversuch verweigert"
1196
+
1197
+ #: ../common.php:366
1198
+ msgid "Attempt to register denied"
1199
+ msgstr "Registrierungsversuch verweigert"
1200
+
1201
+ #: ../dashboard.php:1048
1202
+ msgid "Malicious activities mitigated"
1203
+ msgstr "Schadhafte Aktivitäten gemildert"
1204
+
1205
+ #: ../dashboard.php:748
1206
+ msgid "Cerber antispam settings"
1207
+ msgstr ""
1208
+
1209
+ #: ../dashboard.php:748 ../settings.php:143
1210
+ msgid "Antispam"
1211
+ msgstr ""
1212
+
1213
+ #: ../settings.php:119
1214
+ msgid "Cerber antispam engine"
1215
+ msgstr ""
1216
+
1217
+ #: ../settings.php:120
1218
+ msgid "Comment form"
1219
+ msgstr ""
1220
+
1221
+ #: ../settings.php:120
1222
+ msgid "Protect comment form with bot detection engine"
1223
+ msgstr ""
1224
+
1225
+ #: ../settings.php:121
1226
+ msgid "Protect registration form with bot detection engine"
1227
+ msgstr ""
1228
+
1229
+ #: ../cerber-tools.php:48
1230
+ msgid "Export & Import"
1231
+ msgstr ""
1232
+
1233
+ #: ../cerber-tools.php:49
1234
+ msgid "Diagnostic"
1235
+ msgstr ""
1236
+
1237
+ #: ../cerber-tools.php:50
1238
+ msgid "License"
1239
+ msgstr ""
1240
+
1241
+ #: ../cerber-tools.php:267
1242
+ msgid "Antispam and bot detection settings"
1243
+ msgstr ""
1244
+
1245
+ #. Description of the plugin
1246
+ #:
1247
+ msgid "Protects site from brute force attacks, bots and hackers. Antispam protection with reCAPTCHA. Comprehensive control of user activity. Restrict login by IP access lists. Limit login attempts. Know more: <a href=\"http://wpcerber.com\">wpcerber.com</a>."
1248
+ msgstr ""
1249
+
1250
+ #: ../wp-cerber.php:1062
1251
+ msgid "Sorry, human verification failed."
1252
+ msgstr ""
1253
+
1254
+ #: ../common.php:380
1255
+ msgid "Bot activity is detected"
1256
+ msgstr ""
1257
+
1258
+ #: ../settings.php:124
1259
+ msgid "Comment processing"
1260
+ msgstr ""
1261
+
1262
+ #: ../settings.php:125
1263
+ msgid "If a spam comment detected"
1264
+ msgstr ""
1265
+
1266
+ #: ../settings.php:126
1267
+ msgid "Trash spam comments"
1268
+ msgstr ""
1269
+
1270
+ #: ../settings.php:126
1271
+ msgid "Move spam comments to trash after"
1272
+ msgstr ""
1273
+
languages/wp-cerber-es_ES.mo ADDED
Binary file
languages/wp-cerber-es_ES.po ADDED
@@ -0,0 +1,1212 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WP Cerber\n"
4
+ "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: Tue Sep 08 2015 21:38:11 GMT+0300\n"
6
+ "PO-Revision-Date: 2017-07-17 10:24+0200\n"
7
+ "Last-Translator: IMurias <imurias@bizkaia.eu>\n"
8
+ "Language-Team: IMurias <imurias@bizkaia.eu>\n"
9
+ "Language: es_ES\n"
10
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
11
+ "MIME-Version: 1.0\n"
12
+ "Content-Type: text/plain; charset=UTF-8\n"
13
+ "Content-Transfer-Encoding: 8bit\n"
14
+ "X-Poedit-SourceCharset: UTF-8\n"
15
+ "X-Poedit-Basepath: .\n"
16
+ "X-Poedit-KeywordsList: _:1;gettext:1;dgettext:2;ngettext:1,2;dngettext:2,3;__:1;_e:1;_c:1;_n:1,2;_n_noop:1,2;_nc:1,2;__ngettext:1,2;__ngettext_noop:1,2;_x:1,2c;_ex:1,2c;_nx:1,2,4c;_nx_noop:1,2,3c;_n_js:1,2;_nx_js:1,2,3c;esc_attr__:1;esc_html__:1;esc_attr_e:1;esc_html_e:1;esc_attr_x:1,2c;esc_html_x:1,2c;comments_number_link:2,3;t:1;st:1;trans:1;transChoice:1,2\n"
17
+ "X-Generator: Poedit 1.8.3\n"
18
+ "X-Loco-Target-Locale: es_ES\n"
19
+ "X-Poedit-SearchPath-0: ..\n"
20
+
21
+ #: ../settings.php:55
22
+ msgid "Limit login attempts"
23
+ msgstr "Límite de intentos de conexión"
24
+
25
+ #: ../settings.php:56
26
+ msgid "Attempts"
27
+ msgstr "Intentos"
28
+
29
+ #: ../settings.php:57
30
+ msgid "Lockout duration"
31
+ msgstr "Duración del bloqueo"
32
+
33
+ #: ../common.php:253 ../settings.php:57 ../settings.php:74
34
+ msgid "minutes"
35
+ msgstr "minutos"
36
+
37
+ #: ../settings.php:58
38
+ msgid "Aggressive lockout"
39
+ msgstr "Bloqueo agresivo"
40
+
41
+ #: ../settings.php:60
42
+ msgid "Site connection"
43
+ msgstr "Conexión web"
44
+
45
+ #: ../settings.php:62
46
+ msgid "Proactive security rules"
47
+ msgstr "Normas de seguridad proactivas"
48
+
49
+ #: ../settings.php:63
50
+ msgid "Block subnet"
51
+ msgstr "Bloquear subred"
52
+
53
+ #: ../settings.php:66
54
+ msgid "Request wp-login.php"
55
+ msgstr "Solicitud wp-login.php"
56
+
57
+ #: ../settings.php:66
58
+ msgid "Immediately block IP after any request to wp-login.php"
59
+ msgstr "Bloquear IP inmediatamente después de cualquier solicitud a wp-login.php"
60
+
61
+ #: ../settings.php:65
62
+ msgid "Redirect dashboard requests"
63
+ msgstr "Redirigir peticiones al escritorio"
64
+
65
+ #: ../settings.php:68
66
+ msgid "Custom login page"
67
+ msgstr "Personalizar página de acceso"
68
+
69
+ #: ../settings.php:69
70
+ msgid "Custom login URL"
71
+ msgstr "Personalizar URL de acceso"
72
+
73
+ #: ../settings.php:69
74
+ msgid "must not overlap with the existing pages or posts slug"
75
+ msgstr "no debe solaparse con el slug actual de páginas o entradas"
76
+
77
+ #: ../settings.php:70
78
+ msgid "Disable wp-login.php"
79
+ msgstr "Desactivar wp-login.php"
80
+
81
+ #: ../settings.php:70
82
+ msgid "Block direct access to wp-login.php and return HTTP 404 Not Found Error"
83
+ msgstr "Bloquear el acceso directo a wp-login.php y devolver un error HTTP 404 - No encontrado"
84
+
85
+ #: ../dashboard.php:859 ../settings.php:72
86
+ msgid "Citadel mode"
87
+ msgstr "Modo Ciudadela"
88
+
89
+ #: ../settings.php:73
90
+ msgid "Threshold"
91
+ msgstr "Umbral"
92
+
93
+ #: ../settings.php:74
94
+ msgid "Duration"
95
+ msgstr "Duración"
96
+
97
+ #: ../settings.php:59 ../settings.php:76 ../settings.php:78
98
+ msgid "Notifications"
99
+ msgstr "Notificaciones"
100
+
101
+ #: ../settings.php:76
102
+ msgid "Send notification to admin email"
103
+ msgstr "Enviar una notificación al correo del administrador"
104
+
105
+ #: ../dashboard.php:865 ../dashboard.php:1279 ../wp-cerber.php:2319
106
+ #: ../settings. php:200 ../cerber-tools.php:59 ../cerber-tools.php:68
107
+ #: ../cerber-tools.php:180
108
+ msgid "Access Lists"
109
+ msgstr "Listas de acceso"
110
+
111
+ #: ../dashboard.php:330 ../dashboard.php:429 ../dashboard.php:863 ../dashboard.
112
+ #: php:971 ../wp-cerber.php:2208 ../settings.php:83 ../settings.php:192
113
+ msgid "Activity"
114
+ msgstr "Actividad"
115
+
116
+ #: ../dashboard.php:864 ../settings.php:195
117
+ msgid "Lockouts"
118
+ msgstr "Bloqueos"
119
+
120
+ #: ../settings.php:281
121
+ msgid "%s allowed retries in %s minutes"
122
+ msgstr "%s reintentos admitidos en %s minutos"
123
+
124
+ #: ../settings.php:298
125
+ msgid "Enable after %s failed login attempts in last %s minutes"
126
+ msgstr "Habilitar después de %s intentos de acceso fallidos en los últimos %s minutos"
127
+
128
+ #: ../dashboard.php:77 ../dashboard.php:429 ../wp-cerber.php:2209
129
+ msgid "IP"
130
+ msgstr "IP"
131
+
132
+ #: ../dashboard.php:330 ../dashboard.php:429
133
+ msgid "Date"
134
+ msgstr "Fecha"
135
+
136
+ #: ../dashboard.php:330 ../dashboard.php:429
137
+ msgid "Local User"
138
+ msgstr "Usuario local"
139
+
140
+ #: ../dashboard.php:330 ../dashboard.php:429 ../wp-cerber.php:2217
141
+ msgid "Username used"
142
+ msgstr "Nombre utilizado"
143
+
144
+ #: ../dashboard.php:83
145
+ msgid "Showing last %d records from %d"
146
+ msgstr "Mostrando los últimos %d registros de %d"
147
+
148
+ #: ../common.php:155
149
+ msgid "Logged in"
150
+ msgstr "Sesión iniciada"
151
+
152
+ #: ../common.php:156
153
+ msgid "Logged out"
154
+ msgstr "Desconectado"
155
+
156
+ #: ../common.php:157
157
+ msgid "Login failed"
158
+ msgstr "Error de inicio de sesión"
159
+
160
+ #: ../common.php:160
161
+ msgid "IP blocked"
162
+ msgstr "IP bloqueada"
163
+
164
+ #: ../common.php:161
165
+ msgid "Subnet blocked"
166
+ msgstr "Subred bloqueada"
167
+
168
+ #: ../common.php:163
169
+ msgid "Citadel activated!"
170
+ msgstr "¡Ciudadela activada!"
171
+
172
+ #: ../dashboard.php:414 ../dashboard.php:592 ../common.php:165
173
+ msgid "Locked out"
174
+ msgstr "Bloqueado"
175
+
176
+ #: ../common.php:166
177
+ msgid "IP blacklisted"
178
+ msgstr "IP en la lista negra"
179
+
180
+ #: ../common.php:169
181
+ msgid "Password changed"
182
+ msgstr "Contraseña cambiada"
183
+
184
+ #: ../dashboard.php:74 ../dashboard.php:123
185
+ msgid "Remove"
186
+ msgstr "Eliminar"
187
+
188
+ #: ../dashboard.php:260
189
+ msgid "Lockout for %s was removed"
190
+ msgstr "Se ha eliminado el bloqueo de %s"
191
+
192
+ #: ../dashboard.php:102 ../dashboard.php:409 ../dashboard.php:587 ../dashboard.
193
+ #: php:857 ../wp-cerber.php:2313 ../settings.php:157
194
+ msgid "White IP Access List"
195
+ msgstr "Lista Blanca de Accesos IP"
196
+
197
+ #: ../dashboard.php:104 ../dashboard.php:410 ../dashboard.php:589 ../dashboard.
198
+ #: php:858
199
+ msgid "Black IP Access List"
200
+ msgstr "Lista Negra de Accesos IP"
201
+
202
+ #: ../dashboard.php:126
203
+ msgid "List is empty"
204
+ msgstr "La lista está vacía"
205
+
206
+ #: ../dashboard.php:148
207
+ msgid "Address %s was added to White IP Access List"
208
+ msgstr "Dirección %s añadida a la lista blanca de IPs"
209
+
210
+ #: ../dashboard.php:161
211
+ msgid "Address %s was added to Black IP Access List"
212
+ msgstr "Dirección %s añadida a la lista negra de IPs"
213
+
214
+ #: ../wp-cerber.php:1925
215
+ msgid "Citadel mode is activated after %d failed login attempts in %d minutes."
216
+ msgstr "El Modo Ciudadela se activa después de %d intentos fallidos de inicio de sesión en %d minutos."
217
+
218
+ #: ../dashboard.php:1092
219
+ msgid "View Activity"
220
+ msgstr "Ver actividad"
221
+
222
+ #: ../dashboard.php:866 ../dashboard.php:1278 ../cerber-tools.php:58 ../cerber-
223
+ #: tools.php:67
224
+ msgid "Settings"
225
+ msgstr "Ajustes"
226
+
227
+ #: ../dashboard.php:761
228
+ msgid "Last login"
229
+ msgstr "Último acceso"
230
+
231
+ #: ../dashboard.php:788 ../dashboard.php:840
232
+ msgid "Never"
233
+ msgstr "Nunca"
234
+
235
+ #: ../dashboard.php:1013 ../dashboard.php:1408
236
+ msgid "Are you sure?"
237
+ msgstr "¿Estás seguro?"
238
+
239
+ #: ../dashboard.php:662
240
+ msgid "WP Cerber Settings"
241
+ msgstr "Ajustes de WP Cerber"
242
+
243
+ #: ../settings.php:60
244
+ msgid "My site is behind a reverse proxy"
245
+ msgstr "Mi web está detrás de un proxy inverso"
246
+
247
+ #: ../settings.php:64
248
+ msgid "Non-existent users"
249
+ msgstr "Usuarios inexistentes"
250
+
251
+ #: ../settings.php:64
252
+ msgid "Immediately block IP when attempting to login with a non-existent username"
253
+ msgstr "Bloquear IP inmediatamente al intentar iniciar sesión con un nombre de usuario inexistente"
254
+
255
+ #: ../settings.php:65
256
+ msgid "Disable automatic redirecting to the login page when /wp-admin/ is requested by an unauthorized request"
257
+ msgstr "Desactivar la redirección automática a la página de inicio de sesión cuando /wp-admin/ es solicitado por una petición no autorizada"
258
+
259
+ #: ../settings.php:139
260
+ msgid "Make your protection smarter!"
261
+ msgstr "¡Haz que tu protección sea más inteligente!"
262
+
263
+ #: ../settings.php:143
264
+ msgid "Please enable Permalinks to use this feature. Set Permalink Settings to something other than Default."
265
+ msgstr "Por favor, activa los enlaces permanentes para utilizar esta función. Establece las opciones de enlaces permanentes a algún valor no predeterminado."
266
+
267
+ #: ../settings.php:146
268
+ msgid "Be careful when enabling this options. If you forget the custom login URL you will not be able to login."
269
+ msgstr "Cuidado al habilitar esta opción. Si olvidas la dirección URL de conexión personalizada, no podrás iniciar sesión."
270
+
271
+ #: ../wp-cerber.php:2318 ../settings.php:197
272
+ msgid "Main Settings"
273
+ msgstr "Ajustes principales"
274
+
275
+ #: ../settings.php:211
276
+ msgid "Help"
277
+ msgstr "Ayuda"
278
+
279
+ #: ../settings.php:286
280
+ msgid "Increase lockout duration to %s hours after %s lockouts in the last %s hours"
281
+ msgstr "Aumentar la duración del bloqueo en %s horas después de %s bloqueos en las últimas %s horas"
282
+
283
+ #: ../wp-cerber.php:189
284
+ msgid "You are not allowed to log in. Ask your administrator for assistance."
285
+ msgstr "No puedes iniciar sesión. Pregunta al administrador para obtener ayuda."
286
+
287
+ #: ../wp-cerber.php:195
288
+ msgid "You have reached the login attempts limit. Please try again in %d minutes."
289
+ msgstr "Se ha alcanzado el límite de intentos de inicio de sesión. Por favor, inténtalo de nuevo dentro de %d minutos."
290
+
291
+ #: ../wp-cerber.php:213
292
+ msgid "You have only one attempt remaining."
293
+ msgid_plural "You have %d attempts remaining."
294
+ msgstr[0] "Queda solo un intento restante."
295
+ msgstr[1] "Quedan %d intentos restantes."
296
+
297
+ #: ../dashboard.php:410
298
+ msgid "Show only"
299
+ msgstr "Mostrar solo"
300
+
301
+ #: ../dashboard.php:442
302
+ msgid "No activity has been logged."
303
+ msgstr "No hay actividad registrada."
304
+
305
+ #: ../dashboard.php:77
306
+ msgid "Expires"
307
+ msgstr "Caduca"
308
+
309
+ #: ../dashboard.php:89
310
+ msgid "No lockouts at the moment. The sky is clear."
311
+ msgstr "No hay bloqueos en este momento. El cielo esta despejado."
312
+
313
+ #: ../dashboard.php:102
314
+ msgid "These IPs will never be locked out"
315
+ msgstr "Estas IPs nunca se bloquearán"
316
+
317
+ #: ../dashboard.php:106
318
+ msgid "Your IP"
319
+ msgstr "Tu IP"
320
+
321
+ #: ../dashboard.php:157
322
+ msgid "You can't add your IP address"
323
+ msgstr "No puedes añadir tu dirección IP"
324
+
325
+ #: ../wp-cerber.php:1926
326
+ msgid "Last failed attempt was at %s from IP %s with user login: %s."
327
+ msgstr "El último intento fallido fue el %s desde la IP %s con el nombre de usuario: %s."
328
+
329
+ #: ../wp-cerber.php:1986
330
+ msgid "Change notification settings"
331
+ msgstr "Cambiar ajuste de las notificaciones"
332
+
333
+ #: ../wp-cerber.php:2296
334
+ msgid "Can't activate WP Cerber due to a database error."
335
+ msgstr "No se puede activar WP Cerber debido a un error de base de datos."
336
+
337
+ #: ../settings.php:293
338
+ msgid "Notify admin if the number of active lockouts above"
339
+ msgstr "Notificar al administrador si el número de bloqueos activos es superior a"
340
+
341
+ #: ../common.php:251 ../settings.php:84
342
+ msgid "days"
343
+ msgstr "días"
344
+
345
+ #: ../dashboard.php:812
346
+ msgid "Cerber Quick View"
347
+ msgstr "Vista Rápida del Cerbero"
348
+
349
+ #: ../dashboard.php:85
350
+ msgid "Hint"
351
+ msgstr "Sugerencia"
352
+
353
+ #: ../dashboard.php:85
354
+ msgid "To view activity, click on the IP"
355
+ msgstr "Para ver la actividad, haz clic en la IP"
356
+
357
+ #: ../dashboard.php:123 ../dashboard.php:619
358
+ msgid "Check for activity"
359
+ msgstr "Comprobar actividad"
360
+
361
+ #: ../settings.php:63
362
+ msgid "Always block entire subnet Class C of intruders IP"
363
+ msgstr "Bloquear siempre todas las subredes de clase C de IPs intrusas"
364
+
365
+ #: ../settings.php:76 ../settings.php:295
366
+ msgid "Click to send test"
367
+ msgstr "Pulsa para enviar una prueba"
368
+
369
+ #: ../settings.php:373
370
+ msgid "Attention! You have changed the login URL! The new login URL is"
371
+ msgstr "¡Atención! ¡Has cambiado la dirección URL de conexión! La nueva URL de acceso es"
372
+
373
+ #: ../dashboard.php:760
374
+ msgid "Comments"
375
+ msgstr "Comentarios"
376
+
377
+ #: ../dashboard.php:763
378
+ msgid "Date of registration"
379
+ msgstr "Fecha de registro"
380
+
381
+ #: ../dashboard.php:252
382
+ msgid "Message has been sent to "
383
+ msgstr "El mensaje se ha enviado a "
384
+
385
+ #: ../dashboard.php:1154
386
+ msgid "Update to version %s of WP Cerber"
387
+ msgstr "Actualizar a la versión %s de WP Cerber"
388
+
389
+ #: ../wp-cerber.php:1927 ../wp-cerber.php:2233
390
+ msgid "View activity in dashboard"
391
+ msgstr "Ver actividad en el escritorio"
392
+
393
+ #: ../wp-cerber.php:1954
394
+ msgid "Number of active lockouts"
395
+ msgstr "Número de bloqueos activos"
396
+
397
+ #: ../wp-cerber.php:1958
398
+ msgid "View lockouts in dashboard"
399
+ msgstr "Ver los bloqueos en el escritorio"
400
+
401
+ #: ../wp-cerber.php:2011
402
+ msgid "This message was sent by"
403
+ msgstr "Este mensaje fue enviado por"
404
+
405
+ #: ../dashboard.php:670 ../cerber-tools.php:40
406
+ msgid "Tools"
407
+ msgstr "Herramientas"
408
+
409
+ #: ../cerber-tools.php:55
410
+ msgid "Export settings to the file"
411
+ msgstr "Exportar ajustes al archivo"
412
+
413
+ #: ../cerber-tools.php:56
414
+ msgid "When you click the button below you will get a configuration file, which you can upload on another site."
415
+ msgstr "Al pulsar el botón de abajo obtendrás un archivo de configuración, que luego se puede cargar en otro sitio."
416
+
417
+ #: ../cerber-tools.php:57
418
+ msgid "What do you want to export?"
419
+ msgstr "¿Qué quieres exportar?"
420
+
421
+ #: ../cerber-tools.php:60
422
+ msgid "Download file"
423
+ msgstr "Descargar archivo"
424
+
425
+ #: ../cerber-tools.php:62
426
+ msgid "Import settings from the file"
427
+ msgstr "Importar ajustes desde el archivo"
428
+
429
+ #: ../cerber-tools.php:63
430
+ msgid "When you click the button below, file will be uploaded and all existing settings will be overridden."
431
+ msgstr "Al pulsar el botón de abajo se cargará el archivo y se anularán todas las configuraciones existentes."
432
+
433
+ #: ../cerber-tools.php:64
434
+ msgid "Select file to import."
435
+ msgstr "Seleccionar archivo a importar."
436
+
437
+ #: ../cerber-tools.php:64
438
+ msgid "Maximum upload file size: %s."
439
+ msgstr "Tamaño máximo permitido: %s."
440
+
441
+ #: ../cerber-tools.php:67
442
+ msgid "What do you want to import?"
443
+ msgstr "¿Qué quieres importar?"
444
+
445
+ #: ../cerber-tools.php:69
446
+ msgid "Upload file"
447
+ msgstr "Cargar archivo"
448
+
449
+ #: ../cerber-tools.php:150
450
+ msgid "No file was uploaded or file is corrupted"
451
+ msgstr "Ningún archivo subido ni archivo dañado"
452
+
453
+ #: ../cerber-tools.php:180
454
+ msgid "Error while updating"
455
+ msgstr "Ha habido un error al actualizar"
456
+
457
+ #: ../cerber-tools.php:183
458
+ msgid "Settings has imported successfully from"
459
+ msgstr "La configuración se ha importado con éxito desde"
460
+
461
+ #: ../cerber-tools.php:187
462
+ msgid "Error while parsing file"
463
+ msgstr "Error al analizar el archivo"
464
+
465
+ #: ../dashboard.php:77 ../dashboard.php:429
466
+ msgid "Hostname"
467
+ msgstr "Host"
468
+
469
+ #: ../dashboard.php:232
470
+ msgid "unknown"
471
+ msgstr "desconocido"
472
+
473
+ #: ../settings.php:84
474
+ msgid "Keep records for"
475
+ msgstr "Mantener un registro de"
476
+
477
+ #: ../dashboard.php:844
478
+ msgid "active"
479
+ msgstr "activar"
480
+
481
+ #: ../dashboard.php:844
482
+ msgid "deactivate"
483
+ msgstr "desactivar"
484
+
485
+ #: ../dashboard.php:846
486
+ msgid "not active"
487
+ msgstr "no activo"
488
+
489
+ #: ../dashboard.php:847
490
+ msgid "disabled"
491
+ msgstr "desactivado"
492
+
493
+ #: ../dashboard.php:852
494
+ msgid "failed attempts"
495
+ msgstr "intentos fallidos"
496
+
497
+ #: ../dashboard.php:852 ../dashboard.php:853
498
+ msgid "in 24 hours"
499
+ msgstr "en 24 horas"
500
+
501
+ #: ../dashboard.php:852 ../dashboard.php:853
502
+ msgid "view all"
503
+ msgstr "ver todo"
504
+
505
+ #: ../dashboard.php:853
506
+ msgid "lockouts"
507
+ msgstr "bloqueos"
508
+
509
+ #: ../dashboard.php:855
510
+ msgid "Lockouts at the moment"
511
+ msgstr "Bloqueos en este momento"
512
+
513
+ #: ../dashboard.php:856
514
+ msgid "Last lockout"
515
+ msgstr "Último bloqueo"
516
+
517
+ #: ../dashboard.php:857 ../dashboard.php:858 ../dashboard.php:1258
518
+ msgid "entry"
519
+ msgid_plural "entries"
520
+ msgstr[0] "entrada"
521
+ msgstr[1] "entradas"
522
+
523
+ #: ../dashboard.php:1008
524
+ msgid "Confused about some settings?"
525
+ msgstr "¿Confundido acerca de algunos ajustes?"
526
+
527
+ #: ../dashboard.php:1009
528
+ msgid "You can easily load default recommended settings using button below"
529
+ msgstr "Se pueden cargar fácilmente los valores recomendados predeterminados usando el botón de abajo"
530
+
531
+ #: ../dashboard.php:1011
532
+ msgid "Load default settings"
533
+ msgstr "Cargar ajustes predeterminados"
534
+
535
+ #: ../dashboard.php:1019
536
+ msgid "doesn't affect Custom login URL and Access Lists"
537
+ msgstr "no afecta a la URL de acceso personalizada ni a las listas de acceso"
538
+
539
+ #: ../dashboard.php:1038
540
+ msgid "Donate"
541
+ msgstr "Donar"
542
+
543
+ #: ../dashboard.php:1148
544
+ msgid "New version is available"
545
+ msgstr "Nueva versión disponible"
546
+
547
+ #. Name of the plugin
548
+ #: ../dashboard.php:662 ../dashboard.php:665 ../dashboard.php:694
549
+ msgid "WP Cerber"
550
+ msgstr "WP Cerber"
551
+
552
+ #. URI of the plugin
553
+ msgid "http://wpcerber.com"
554
+ msgstr ""
555
+
556
+ #: ../wp-cerber.php:1904
557
+ msgid "WP Cerber notify"
558
+ msgstr "Notificación de WP Cerber"
559
+
560
+ #: ../wp-cerber.php:1923
561
+ msgid "Citadel mode is activated"
562
+ msgstr "El Modo Ciudadela está activado."
563
+
564
+ #: ../wp-cerber.php:1991
565
+ msgid "New Custom login URL"
566
+ msgstr "Nueva URL de acceso personalizada"
567
+
568
+ #: ../wp-cerber.php:2287
569
+ msgid "The WP Cerber requires PHP %s or higher. You are running"
570
+ msgstr "WP Cerber requiere PHP %s o superior. Se está ejecutando actualmente"
571
+
572
+ #: ../wp-cerber.php:2291
573
+ msgid "The WP Cerber requires WordPress %s or higher. You are running"
574
+ msgstr "WP Cerber requiere WordPress %s o superior. Se está ejecutando actualmente"
575
+
576
+ #: ../settings.php:90
577
+ msgid "Use file"
578
+ msgstr "Usar archivo"
579
+
580
+ #: ../settings.php:90
581
+ msgid "Write failed login attempts to the file"
582
+ msgstr "Registrar los intentos de acceso fallidos en el archivo"
583
+
584
+ #: ../dashboard.php:762
585
+ msgid "Failed attempts in last 24 hours"
586
+ msgstr "Intentos fallidos en las últimas 24 horas"
587
+
588
+ #: ../dashboard.php:1091
589
+ msgid "Deactivate"
590
+ msgstr "Desactivar"
591
+
592
+ #: ../dashboard.php:77 ../wp-cerber.php:1956
593
+ msgid "Reason"
594
+ msgstr "Motivo"
595
+
596
+ #: ../dashboard.php:130
597
+ msgid "Add IP to the list"
598
+ msgstr "Añadir IP a la lista"
599
+
600
+ #: ../dashboard.php:637
601
+ msgid "Add IP to the Black List"
602
+ msgstr "Añadir IP a la lista negra"
603
+
604
+ #: ../common.php:187
605
+ msgid "Attempt to access"
606
+ msgstr "Intento de acceso"
607
+
608
+ #: ../common.php:186
609
+ msgid "Limit on login attempts is reached"
610
+ msgstr "Se han alcanzado todos los intentos de inicio de sesión"
611
+
612
+ #: ../common.php:176 ../common.php:188
613
+ msgid "Attempt to log in with non-existent username"
614
+ msgstr "Intento de acceso con nombre de usuario inexistente"
615
+
616
+ #: ../wp-cerber.php:1955
617
+ msgid "Last lockout was added: %s for IP %s"
618
+ msgstr "Último bloqueo añadido: %s para la IP %s"
619
+
620
+ #: ../wp-cerber.php:2315
621
+ msgid "It's important to check security settings."
622
+ msgstr "Es importante comprobar los ajustes de seguridad."
623
+
624
+ #: ../wp-cerber.php:2320 ../settings.php:202
625
+ msgid "Hardening"
626
+ msgstr "Endurecimiento"
627
+
628
+ #: ../dashboard.php:615
629
+ msgid "Abuse email:"
630
+ msgstr "Correo electrónico de abuso:"
631
+
632
+ #: ../settings.php:80
633
+ msgid "Email Address"
634
+ msgstr "Dirección de correo electrónico"
635
+
636
+ #: ../settings.php:80
637
+ msgid "if empty, the admin email %s will be used"
638
+ msgstr "Si está vacío, se utilizará el correo de administrador: %s"
639
+
640
+ #: ../settings.php:93
641
+ msgid "Drill down IP"
642
+ msgstr "Desglosar IP"
643
+
644
+ #: ../settings.php:93
645
+ msgid "Retrieve extra WHOIS information for IP"
646
+ msgstr "Recuperar información extra de WHOIS para la IP"
647
+
648
+ #: ../settings.php:101
649
+ msgid "Hardening WordPress"
650
+ msgstr "Protegiendo WordPress"
651
+
652
+ #: ../settings.php:102
653
+ msgid "Stop user enumeration"
654
+ msgstr "Impedir la enumeración de usuarios"
655
+
656
+ #: ../settings.php:102
657
+ msgid "Block access to the pages like /?author=n"
658
+ msgstr "Bloquear el acceso a las páginas como /?autor=n"
659
+
660
+ #: ../settings.php:103
661
+ msgid "Disable XML-RPC"
662
+ msgstr "Desactivar XML-RPC"
663
+
664
+ #: ../settings.php:103
665
+ msgid "Block access to the XML-RPC server (including Pingbacks and Trackbacks)"
666
+ msgstr "Bloquear el acceso al servidor XML-RPC (incluyendo pingbacks y trackbacks)"
667
+
668
+ #: ../settings.php:104
669
+ msgid "Disable feeds"
670
+ msgstr "Desactivar feeds"
671
+
672
+ #: ../settings.php:104
673
+ msgid "Block access to the RSS, Atom and RDF feeds"
674
+ msgstr "Bloquear el acceso a los feeds RSS, Atom y RDF"
675
+
676
+ #: ../settings.php:105
677
+ msgid "Disable REST API"
678
+ msgstr "Desactivar la API REST"
679
+
680
+ #: ../settings.php:105
681
+ msgid "Block access to the WordPress REST API"
682
+ msgstr "Bloquear el acceso a la API REST de WordPress"
683
+
684
+ #: ../settings.php:157
685
+ msgid "These settings do not affect hosts from the "
686
+ msgstr "Estos ajustes no afectan a los hosts de "
687
+
688
+ #: ../settings.php:409
689
+ msgid "<strong>ERROR</strong>: please enter a valid email address."
690
+ msgstr "<strong>ERROR</strong>: por favor, introduce una dirección de correo electrónico válida."
691
+
692
+ #: ../settings.php:618
693
+ msgid "Number of items per page:"
694
+ msgstr "Número de elementos por página:"
695
+
696
+ #: ../wp-cerber.php:1985 ../wp-cerber.php:2312
697
+ msgid "WP Cerber is now active and has started protecting your site"
698
+ msgstr "WP Cerber está activo actualmente y está protegiendo tu web"
699
+
700
+ #: ../dashboard.php:77
701
+ msgid "Action"
702
+ msgstr "Acción"
703
+
704
+ #: ../dashboard.php:104
705
+ msgid "Nobody can log in or register from these IPs"
706
+ msgstr "Nadie puede acceder desde estas direcciones IP"
707
+
708
+ #: ../dashboard.php:145 ../dashboard.php:153
709
+ msgid "Incorrect IP address or IP range"
710
+ msgstr "Dirección o rango de IP incorrecta"
711
+
712
+ #: ../dashboard.php:254
713
+ msgid "Unable to send notification email"
714
+ msgstr "No se ha podido enviar el correo de notificación"
715
+
716
+ #: ../dashboard.php:276 ../dashboard.php:1107
717
+ msgid "Settings saved"
718
+ msgstr "Ajustes guardados."
719
+
720
+ #: ../dashboard.php:619
721
+ msgid "Network:"
722
+ msgstr "Red:"
723
+
724
+ #: ../dashboard.php:633
725
+ msgid "Add network to the Black List"
726
+ msgstr "Añadir red a la Lista Negra"
727
+
728
+ #: ../dashboard.php:468
729
+ msgid "Cerber Security"
730
+ msgstr "Seguridad WP Cerber"
731
+
732
+ #: ../dashboard.php:1090
733
+ msgid "Attention! Citadel mode is now active. Nobody is able to log in."
734
+ msgstr "¡Atención! El Modo Ciudadela está activo. Nadie puede iniciar sesión."
735
+
736
+ #: ../whois.php:211
737
+ msgid "Unknown"
738
+ msgstr "Desconocido"
739
+
740
+ #. Description of the plugin
741
+ msgid "Protects site from brute force attacks, bots and hackers. Antispam protection with reCAPTCHA. Comprehensive control of user activity. Restrict login by IP access lists. Limit login attempts. Feel free to contact developer on the site <a href=\"http://wpcerber.com\">wpcerber.com</a>."
742
+ msgstr "Proteger de ataques de fuerza bruta. Control integral de la actividad del usuario. Restringir la entrada de las listas de acceso IP. Limitar los intentos de inicio de sesión. No dude en ponerse en contacto a través de desarrollador wpcerber@gmail.com o en el sitio <a href=\\\"http://wpcerber.com\\\">wpcerber.com</a> ."
743
+
744
+ #. Author of the plugin
745
+ msgid "Gregory"
746
+ msgstr ""
747
+
748
+ #: ../wp-cerber.php:595 ../wp-cerber.php:727 ../wp-cerber.php:734 ../wp-cerber.
749
+ #: php:758 ../settings.php:447
750
+ msgid "ERROR:"
751
+ msgstr "ERROR:"
752
+
753
+ #: ../wp-cerber.php:489
754
+ msgid "Human verification failed. Please click the square box in the reCAPTCHA block below."
755
+ msgstr "La verificación humana ha fallado. Por favor, pulsa en la casilla cuadrada del siguiente bloque reCAPTCHA."
756
+
757
+ #: ../wp-cerber.php:606
758
+ msgid "<strong>ERROR</strong>: The password you entered for the username %s is incorrect."
759
+ msgstr "<strong>ERROR</strong>: La contraseña introducida para el nombre de usuario %s es incorrecta."
760
+
761
+ #: ../wp-cerber.php:735
762
+ msgid "Username is not allowed. Please choose another one."
763
+ msgstr "Nombre de usuario no permitido. Por favor, elige otro."
764
+
765
+ #: ../wp-cerber.php:1949
766
+ msgid "unspecified"
767
+ msgstr "no especificado"
768
+
769
+ #: ../wp-cerber.php:1952
770
+ msgid "Number of lockouts is increasing"
771
+ msgstr "El número de bloqueos está aumentando"
772
+
773
+ #: ../wp-cerber.php:1957
774
+ msgid "View activity for this IP"
775
+ msgstr "Ver actividad de esta IP"
776
+
777
+ #: ../wp-cerber.php:1961 ../wp-cerber.php:1963
778
+ msgid "A new version of WP Cerber is available to install"
779
+ msgstr "Una nueva versión de WP Cerber está disponible"
780
+
781
+ #: ../wp-cerber.php:1962
782
+ msgid "Hi!"
783
+ msgstr "¡Hola!"
784
+
785
+ #: ../wp-cerber.php:1964 ../wp-cerber.php:1975
786
+ msgid "Website"
787
+ msgstr "Web"
788
+
789
+ #: ../wp-cerber.php:1967 ../wp-cerber.php:1968
790
+ msgid "The WP Cerber security plugin has been deactivated"
791
+ msgstr "El plugin WP Cerber se ha desactivado"
792
+
793
+ #: ../wp-cerber.php:1970
794
+ msgid "Not logged in"
795
+ msgstr "No conectado"
796
+
797
+ #: ../wp-cerber.php:1976
798
+ msgid "By user"
799
+ msgstr "Por usuario"
800
+
801
+ #: ../wp-cerber.php:1977
802
+ msgid "From IP address"
803
+ msgstr "De la dirección IP"
804
+
805
+ #: ../wp-cerber.php:1980
806
+ msgid "From country"
807
+ msgstr "Del país"
808
+
809
+ #: ../wp-cerber.php:1984
810
+ msgid "The WP Cerber security plugin is now active"
811
+ msgstr "El plugin WP Cerber se ha activado"
812
+
813
+ #: ../wp-cerber.php:2313
814
+ msgid "Your IP address is added to the"
815
+ msgstr "Tu dirección IP se ha añadido a la"
816
+
817
+ #: ../dashboard.php:669 ../wp-cerber.php:2321
818
+ msgid "reCAPTCHA"
819
+ msgstr "reCAPTCHA"
820
+
821
+ #: ../wp-cerber.php:2322
822
+ msgid "Import settings"
823
+ msgstr "Importar ajustes"
824
+
825
+ #: ../settings.php:81
826
+ msgid "Notification limit"
827
+ msgstr "Límite de notificaciones"
828
+
829
+ #: ../settings.php:81
830
+ msgid "notification letters allowed per hour (0 means unlimited)"
831
+ msgstr "notificaciones permitidas por hora (0 significa ilimitadas)"
832
+
833
+ #: ../settings.php:113
834
+ msgid "User related settings"
835
+ msgstr "Ajustes de usuario"
836
+
837
+ #: ../settings.php:114
838
+ msgid "Prohibited usernames"
839
+ msgstr "Nombres de usuario prohibidos"
840
+
841
+ #: ../settings.php:114
842
+ msgid "Usernames from this list are not allowed to log in or register. Any IP address, have tried to use any of these usernames, will be immediately blocked. Use comma to separate logins."
843
+ msgstr "Los nombres de usuario de esta lista no pueden iniciar una sesión o registrarse. Toda dirección IP que intente usar cualquiera de estos nombres de usuario será bloqueada inmediatamente. Usa comas para separar los nombres de usuario."
844
+
845
+ #: ../settings.php:115
846
+ msgid "User session expire"
847
+ msgstr "Las sesiones de usuario caducan"
848
+
849
+ #: ../settings.php:115
850
+ msgid "in minutes (leave empty to use default WP value)"
851
+ msgstr "en minutos (dejar vacío para usar el valor de WP predeterminado)"
852
+
853
+ #: ../cerber-tools.php:197
854
+ msgid "reCAPTCHA settings"
855
+ msgstr "Ajustes de reCAPTCHA"
856
+
857
+ #: ../settings.php:120
858
+ msgid "Site key"
859
+ msgstr "Clave del sitio"
860
+
861
+ #: ../settings.php:121
862
+ msgid "Secret key"
863
+ msgstr "Clave secreta"
864
+
865
+ #: ../settings.php:123
866
+ msgid "Enable reCAPTCHA for WordPress registration form"
867
+ msgstr "Habilitar reCAPTCHA para el formulario de registro de WordPress"
868
+
869
+ #: ../settings.php:126
870
+ msgid "Lost password form"
871
+ msgstr "Formulario de contraseña perdida"
872
+
873
+ #: ../settings.php:129
874
+ msgid "Login form"
875
+ msgstr "Formulario de inicio de sesión"
876
+
877
+ #: ../settings.php:129
878
+ msgid "Enable reCAPTCHA for WordPress login form"
879
+ msgstr "Habilitar reCAPTCHA para el formulario de acceso WordPress"
880
+
881
+ #: ../settings.php:150
882
+ msgid "In Citadel mode nobody is able to login. Active user's sessions will not be affected."
883
+ msgstr "En el Modo Ciudadela nadie puede iniciar una sesión. Las sesiones de usuario activas no se verán afectadas."
884
+
885
+ #: ../settings.php:162
886
+ msgid "Before you can start using reCAPTCHA, you have to obtain Site key and Secret key on the Google website"
887
+ msgstr "Para poder usar reCAPTCHA, antes tienes que obtener una clave de sitio y una clave secreta en la web de Google"
888
+
889
+ #: ../cerber-lab.php:416 ../settings.php:163
890
+ msgid "Know more"
891
+ msgstr "Más información"
892
+
893
+ #: ../dashboard.php:665 ../settings.php:183
894
+ msgid "WP Cerber Security"
895
+ msgstr "Seguridad WP Cerber"
896
+
897
+ #: ../settings.php:204
898
+ msgid "Users"
899
+ msgstr "Usuarios"
900
+
901
+ #: ../common.php:153
902
+ msgid "User created"
903
+ msgstr "Usuario creado"
904
+
905
+ #: ../common.php:154
906
+ msgid "User registered"
907
+ msgstr "Usuario registrado"
908
+
909
+ #: ../common.php:171
910
+ msgid "reCAPTCHA verification failed"
911
+ msgstr "Fallo de verificación reCAPTCHA"
912
+
913
+ #: ../common.php:172
914
+ msgid "reCAPTCHA settings are incorrect"
915
+ msgstr "Los ajustes reCAPTCHA son incorrectos"
916
+
917
+ #: ../common.php:175
918
+ msgid "Attempt to access prohibited URL"
919
+ msgstr "Intento de acceso a URL prohibida"
920
+
921
+ #: ../common.php:177 ../common.php:189
922
+ msgid "Attempt to log in with prohibited username"
923
+ msgstr "Intento de acceso con nombre de usuario prohibido"
924
+
925
+ #: ../common.php:241
926
+ msgid "year"
927
+ msgstr "año"
928
+
929
+ #: ../common.php:242
930
+ msgid "month"
931
+ msgstr "mes"
932
+
933
+ #: ../common.php:243
934
+ msgid "day"
935
+ msgstr "día"
936
+
937
+ #: ../common.php:244
938
+ msgid "hour"
939
+ msgstr "hora"
940
+
941
+ #: ../common.php:245
942
+ msgid "minute"
943
+ msgstr "minuto"
944
+
945
+ #: ../common.php:246
946
+ msgid "second"
947
+ msgstr "segundo"
948
+
949
+ #: ../common.php:249
950
+ msgid "years"
951
+ msgstr "años"
952
+
953
+ #: ../common.php:250
954
+ msgid "months"
955
+ msgstr "meses"
956
+
957
+ #: ../common.php:252
958
+ msgid "hours"
959
+ msgstr "horas"
960
+
961
+ #: ../common.php:254
962
+ msgid "seconds"
963
+ msgstr "segundos"
964
+
965
+ #: ../common.php:260
966
+ msgid "ago"
967
+ msgstr "hace"
968
+
969
+ #: ../settings.php:88
970
+ msgid "Cerber Lab connection"
971
+ msgstr "Conexión WP Cerber"
972
+
973
+ #: ../settings.php:88
974
+ msgid "Send malicious IP addresses to the Cerber Lab"
975
+ msgstr "Enviar direcciones IP maliciosas al Laboratorio de Cerber"
976
+
977
+ #: ../settings.php:89
978
+ msgid "Cerber Lab protocol"
979
+ msgstr "Protocolo WP Cerber"
980
+
981
+ #: ../settings.php:126
982
+ msgid "Invisible reCAPTCHA"
983
+ msgstr "ReCAPTCHA invisible"
984
+
985
+ #: ../settings.php:126
986
+ msgid "Enable invisible reCAPTCHA"
987
+ msgstr "Habilitar reCAPTCHA invisible"
988
+
989
+ #: ../settings.php:126
990
+ msgid "(don't enable it unless you get and enter the Site and Secret keys for the invisible version)"
991
+ msgstr "(no activarlo a menos que se hayan introducido las claves secretas de Google para la versión invisible)"
992
+
993
+ #: ../settings.php:123
994
+ msgid "Registration form"
995
+ msgstr "Formulario de registro"
996
+
997
+ #: ../settings.php:124
998
+ msgid "Enable reCAPTCHA for WooCommerce registration form"
999
+ msgstr "Habilitar reCAPTCHA para el formulario de registro WooCommerce"
1000
+
1001
+ #: ../settings.php:126
1002
+ msgid "Enable reCAPTCHA for WordPress lost password form"
1003
+ msgstr "Habilitar reCAPTCHA para formulario WordPress de contraseña perdida"
1004
+
1005
+ #: ../settings.php:127
1006
+ msgid "Enable reCAPTCHA for WooCommerce lost password form"
1007
+ msgstr "Habilitar reCAPTCHA para formulario WooCommerce de contraseña perdida"
1008
+
1009
+ #: ../settings.php:130
1010
+ msgid "Enable reCAPTCHA for WooCommerce login form"
1011
+ msgstr "Habilitar reCAPTCHA para el formulario de acceso WooCommerce"
1012
+
1013
+ #: ../common.php:173
1014
+ msgid "Request to the Google reCAPTCHA service failed"
1015
+ msgstr "Error solicitando el servicio reCAPTCHA de Google"
1016
+
1017
+ #: ../dashboard.php:970 ../dashboard.php:985
1018
+ msgid "View all"
1019
+ msgstr "Ver todo"
1020
+
1021
+ #: ../dashboard.php:986
1022
+ msgid "Recently locked out IP addresses"
1023
+ msgstr "Direcciones IP recientemente bloqueadas"
1024
+
1025
+ #: ../cerber-lab.php:414
1026
+ msgid "OK, nail them all"
1027
+ msgstr "OK, clavarlas todas"
1028
+
1029
+ #: ../cerber-lab.php:415
1030
+ msgid "NO, maybe later"
1031
+ msgstr "NO, tal vez más tarde"
1032
+
1033
+ #: ../dashboard.php:667 ../settings.php:190
1034
+ msgid "Dashboard"
1035
+ msgstr "Escritorio"
1036
+
1037
+ #: ../cerber-lab.php:412
1038
+ msgid "Want to make WP Cerber even more powerful?"
1039
+ msgstr "¿Quieres hacer WP Cerber aun más potente?"
1040
+
1041
+ #: ../cerber-lab.php:413
1042
+ msgid "Allow WP Cerber to send locked out malicious IP addresses to Cerber Lab. This helps the plugin team to develop new algorithms for WP Cerber that will defend WordPress against new threats and botnets that are appearing everyday. You can disable the sending in the plugin settings at any time."
1043
+ msgstr "Dejar a WP Cerber enviar direcciones IP maliciosas bloqueadas al laboratorio Cerber. Esto ayuda a que el equipo de plugin para el desarrollo de nuevos algoritmos para WP Cerber y defender a WordPress contra las nuevas amenazas y botnets que están apareciendo todos los días. Puede desactivar el envío de la configuración del plugin en cualquier momento."
1044
+
1045
+ #: ../dashboard.php:330
1046
+ msgid "IP address"
1047
+ msgstr "Dirección IP"
1048
+
1049
+ #: ../dashboard.php:330
1050
+ msgid "User login"
1051
+ msgstr "Acceso de Usuario"
1052
+
1053
+ #: ../dashboard.php:330
1054
+ msgid "User ID"
1055
+ msgstr "ID de usuario"
1056
+
1057
+ #: ../dashboard.php:438
1058
+ msgid "Export"
1059
+ msgstr "Exportar"
1060
+
1061
+ #: ../dashboard.php:447
1062
+ msgid "All activities"
1063
+ msgstr "Todas las actividades"
1064
+
1065
+ #: ../dashboard.php:454
1066
+ msgid "Search for IP or username"
1067
+ msgstr "Búsqueda de IP o nombre de usuario"
1068
+
1069
+ #: ../dashboard.php:454
1070
+ msgid "Filter"
1071
+ msgstr "Filtrar"
1072
+
1073
+ #: ../dashboard.php:667
1074
+ msgid "Cerber Dashboard"
1075
+ msgstr "Panel de Control"
1076
+
1077
+ #: ../dashboard.php:669
1078
+ msgid "Cerber reCAPTCHA settings"
1079
+ msgstr "Ajustes de reCaptcha"
1080
+
1081
+ #: ../dashboard.php:670
1082
+ msgid "Cerber tools"
1083
+ msgstr "Herramientas Cerber"
1084
+
1085
+ #: ../dashboard.php:1193
1086
+ msgid "Subscribe"
1087
+ msgstr "Suscribirse"
1088
+
1089
+ #: ../dashboard.php:1194
1090
+ msgid "Unsubscribe"
1091
+ msgstr "Cancelar Subscripción"
1092
+
1093
+ #: ../dashboard.php:1222
1094
+ msgid "You've subscribed"
1095
+ msgstr "Te has suscrito"
1096
+
1097
+ #: ../dashboard.php:1225
1098
+ msgid "You've unsubscribed"
1099
+ msgstr "Has cancelado tu suscripción"
1100
+
1101
+ #: ../wp-cerber.php:1995 ../wp-cerber.php:1996
1102
+ msgid "A new activity has been recorded"
1103
+ msgstr "Una nueva actividad ha sido registrada"
1104
+
1105
+ #: ../wp-cerber.php:2213
1106
+ msgid "User"
1107
+ msgstr "Usuario"
1108
+
1109
+ #: ../wp-cerber.php:2221
1110
+ msgid "Search string"
1111
+ msgstr "Cadena de búsqueda"
1112
+
1113
+ #: ../wp-cerber.php:2234
1114
+ msgid "To unsubscribe click here"
1115
+ msgstr "Para anular la suscripción, pulsar aquí"
1116
+
1117
+ #: ../settings.php:92
1118
+ msgid "Preferences"
1119
+ msgstr "Preferencias"
1120
+
1121
+ #: ../settings.php:94
1122
+ msgid "Date format"
1123
+ msgstr "Formato de fecha"
1124
+
1125
+ #: ../settings.php:94
1126
+ msgid "if empty, the default format %s will be used"
1127
+ msgstr "Si está vacío, se utilizará el formato por defecto %s"
1128
+
1129
+ #: ../dashboard.php:856 ../settings.php:147
1130
+ msgid "Push notifications"
1131
+ msgstr "Notificaciones"
1132
+
1133
+ #: ../settings.php:71
1134
+ msgid "Display 404 page"
1135
+ msgstr "Mostrar página error 404"
1136
+
1137
+ #: ../settings.php:138
1138
+ msgid "Disable reCAPTCHA for logged in users"
1139
+ msgstr "Desactiva la verificación reCaptcha para usuarios conectados"
1140
+
1141
+ #: ../settings.php:137
1142
+ msgid "Comment form"
1143
+ msgstr "Formulario de comentarios"
1144
+
1145
+ #: ../settings.php:144
1146
+ msgid "Email notifications"
1147
+ msgstr "Notificaciones por correo"
1148
+
1149
+ #: ../settings.php:178
1150
+ msgid "In the Citadel mode nobody is able to log in except IPs from the White IP Access List. Active user sessions will not be affected."
1151
+ msgstr "En modo Ciudadela, nadie puede iniciar sesión con excepción de las IPs de la lista de acceso de IPs blancas. Las sesiones de usuario activas no se verán afectadas."
1152
+
1153
+ #: ../settings.php:61
1154
+ msgid "Apply limit login rules to IP addresses in the White IP Access List"
1155
+ msgstr "Aplicar reglas de inicio de sesión limitadas a las direcciones IPs en la lista de acceso de IPs blancas"
1156
+
1157
+ #: ../settings.php:135
1158
+ #, php-format
1159
+ msgid "Lock out IP address for %s minutes after %s failed attempts within %s minutes"
1160
+ msgstr "Bloquear dirección IP durante %s minutos después de %s intentos fallidos dentro de %s minutos"
1161
+
1162
+ #: ../settings.php:135
1163
+ msgid "Limit attempts"
1164
+ msgstr "Límite de intentos"
1165
+
1166
+ #: ../settings.php:132
1167
+ msgid "Enable reCAPTCHA for WordPress comment form"
1168
+ msgstr "Habilitar reCAPTCHA para el formulario de comentarios de WordPress"
1169
+
1170
+ #: ../dashboard.php:1032
1171
+ msgid "Malicious activities mitigated"
1172
+ msgstr "Actividades mitigadas"
1173
+
1174
+ #: ../dashboard.php:1034
1175
+ msgid "Malicious IP addresses detected"
1176
+ msgstr "Direcciones IP maliciosas detectadas"
1177
+
1178
+ #: ../dashboard.php:1035
1179
+ msgid "Lockouts occurred"
1180
+ msgstr "Bloqueos realizados"
1181
+
1182
+ #: ../dashboard.php:1036
1183
+ msgid "Locked out IP now"
1184
+ msgstr "IPs bloqueadas ahora"
1185
+
1186
+ #: ../dashboard.php:1060
1187
+ msgid "All suspicious activity"
1188
+ msgstr "Todas las actividades sospechosas"
1189
+
1190
+ #: ../common.php:304
1191
+ msgid "Password reset requested"
1192
+ msgstr "Reajuste de contraseña solicitado"
1193
+
1194
+ #: ../dashboard.php:1033
1195
+ msgid "Spam comments denied"
1196
+ msgstr "Comentarios spam denegados"
1197
+
1198
+ #: ../dashboard.php:1033
1199
+ msgid "Spam comment denied"
1200
+ msgstr "Comentario spam denegado"
1201
+
1202
+ #: ../common.php:314
1203
+ msgid "Attempt to log in denied"
1204
+ msgstr "Intento de iniciar sesión denegado"
1205
+
1206
+ #: ../common.php:315
1207
+ msgid "Attempt to register denied"
1208
+ msgstr "Intento de registro denegado"
1209
+
1210
+ #: ../dashboard.php:339 ../dashboard.php:486
1211
+ msgid "Event"
1212
+ msgstr "Evento"
languages/wp-cerber-fr_FR.mo ADDED
Binary file
languages/wp-cerber-fr_FR.po ADDED
@@ -0,0 +1,1130 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WP Cerber\n"
4
+ "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: 2017-01-19 14:39+0100\n"
6
+ "PO-Revision-Date: \n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: \n"
9
+ "Language: fr\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "X-Generator: Poedit 1.8.8\n"
14
+ "Plural-Forms: nplurals=2; plural=(n > 1);\n"
15
+
16
+ #: ../dashboard.php:72 ../dashboard.php:122
17
+ msgid "Remove"
18
+ msgstr "Supprimer"
19
+
20
+ #: ../dashboard.php:75 ../dashboard.php:386
21
+ msgid "IP"
22
+ msgstr "IP"
23
+
24
+ #: ../dashboard.php:75 ../dashboard.php:386
25
+ msgid "Hostname"
26
+ msgstr "Hôte"
27
+
28
+ #: ../dashboard.php:75
29
+ msgid "Expires"
30
+ msgstr "Expire le"
31
+
32
+ #: ../dashboard.php:75 ../wp-cerber.php:1927
33
+ msgid "Reason"
34
+ msgstr "Raison"
35
+
36
+ #: ../dashboard.php:75
37
+ msgid "Action"
38
+ msgstr "Action"
39
+
40
+ #: ../dashboard.php:81
41
+ #, php-format
42
+ msgid "Showing last %d records from %d"
43
+ msgstr "Affichage de %d derniers enregistrements sur %d"
44
+
45
+ #: ../dashboard.php:83
46
+ msgid "Hint"
47
+ msgstr "Astuce"
48
+
49
+ #: ../dashboard.php:83
50
+ msgid "To view activity, click on the IP"
51
+ msgstr "Pour voir l’activité relative à cette IP, cliquez sur l’IP"
52
+
53
+ #: ../dashboard.php:87
54
+ msgid "No lockouts at the moment. The sky is clear."
55
+ msgstr ""
56
+ "Pas de blocage pour le moment. Tout va bien dans le meilleur des mondes."
57
+
58
+ #: ../dashboard.php:100 ../dashboard.php:370 ../dashboard.php:434 ../dashboard.
59
+ #: php:838 ../wp-cerber.php:2182 ../settings.php:153
60
+ msgid "White IP Access List"
61
+ msgstr "Liste blanche (IP White List)"
62
+
63
+ #: ../dashboard.php:100
64
+ msgid "These IPs will never be locked out"
65
+ msgstr "Ces adresses IP ne seront jamais bloquées"
66
+
67
+ #: ../dashboard.php:102 ../dashboard.php:371 ../dashboard.php:436 ../dashboard.
68
+ #: php:839
69
+ msgid "Black IP Access List"
70
+ msgstr "Liste Noire (IP Black List)"
71
+
72
+ #: ../dashboard.php:102
73
+ msgid "Nobody can log in or register from these IPs"
74
+ msgstr "Personne ne peut se connecter à partir de ces IPs"
75
+
76
+ #: ../dashboard.php:104
77
+ msgid "Your IP"
78
+ msgstr "Votre IP"
79
+
80
+ #: ../dashboard.php:122 ../dashboard.php:466
81
+ msgid "Check for activity"
82
+ msgstr "Voir l’activité"
83
+
84
+ #: ../dashboard.php:125
85
+ msgid "List is empty"
86
+ msgstr "La liste est vide"
87
+
88
+ #: ../dashboard.php:129
89
+ msgid "Add IP to the list"
90
+ msgstr "Ajouter l’IP à la liste"
91
+
92
+ #: ../dashboard.php:144 ../dashboard.php:152
93
+ msgid "Incorrect IP address or IP range"
94
+ msgstr "IP ou plage d’IP incorrecte"
95
+
96
+ #: ../dashboard.php:147
97
+ #, php-format
98
+ msgid "Address %s was added to White IP Access List"
99
+ msgstr "L’adresse %s a été ajoutée à la Liste Blanche"
100
+
101
+ #: ../dashboard.php:156
102
+ msgid "You can't add your IP address"
103
+ msgstr "Vous ne pouvez pas ajouter votre adresse IP"
104
+
105
+ #: ../dashboard.php:160
106
+ #, php-format
107
+ msgid "Address %s was added to Black IP Access List"
108
+ msgstr "L’adresse %s a été ajoutée à la Liste Noire"
109
+
110
+ #: ../dashboard.php:227
111
+ msgid "unknown"
112
+ msgstr "inconnu"
113
+
114
+ #: ../dashboard.php:246
115
+ msgid "Message has been sent to "
116
+ msgstr "Le message à été envoyé à "
117
+
118
+ #: ../dashboard.php:248
119
+ msgid "Unable to send notification email"
120
+ msgstr "L’envoi de l’email de notification n’a pas pu être effectué"
121
+
122
+ #: ../dashboard.php:254
123
+ #, php-format
124
+ msgid "Lockout for %s was removed"
125
+ msgstr "Le blocage de %s a été levé"
126
+
127
+ #: ../dashboard.php:261 ../dashboard.php:1082
128
+ msgid "Settings saved"
129
+ msgstr "Paramètres sauvegardés"
130
+
131
+ #: ../dashboard.php:375 ../dashboard.php:439 ../common.php:141
132
+ msgid "Locked out"
133
+ msgstr "Bloqué"
134
+
135
+ #: ../dashboard.php:386
136
+ msgid "Date"
137
+ msgstr "Date"
138
+
139
+ #: ../dashboard.php:386 ../dashboard.php:844 ../dashboard.php:952
140
+ #: ../settings.php:85 ../settings.php:188
141
+ msgid "Activity"
142
+ msgstr "Activité"
143
+
144
+ #: ../dashboard.php:386
145
+ msgid "Local User"
146
+ msgstr "Utilisateur local"
147
+
148
+ #: ../dashboard.php:386
149
+ msgid "Username used"
150
+ msgstr "Identifiant utilisé"
151
+
152
+ #: ../dashboard.php:396
153
+ msgid "No activity has been logged."
154
+ msgstr "Aucune activité n’a été notée"
155
+
156
+ #: ../dashboard.php:410
157
+ msgid "Show only"
158
+ msgstr "N’afficher que"
159
+
160
+ #: ../dashboard.php:462
161
+ msgid "Abuse email:"
162
+ msgstr ""
163
+
164
+ #: ../dashboard.php:466
165
+ msgid "Network:"
166
+ msgstr "Réseau :"
167
+
168
+ #: ../dashboard.php:480
169
+ msgid "Add network to the Black List"
170
+ msgstr "Ajouter un réseau à la liste noire"
171
+
172
+ #: ../dashboard.php:484
173
+ msgid "Add IP to the Black List"
174
+ msgstr "Ajouter l’IP à la liste noire"
175
+
176
+ #: ../dashboard.php:509 ../dashboard.php:516
177
+ msgid "WP Cerber Settings"
178
+ msgstr "Préférences WP Cerber"
179
+
180
+ #. Name of the plugin
181
+ #: ../dashboard.php:509 ../dashboard.php:511 ../dashboard.php:516 ../dashboard.
182
+ #: php:540
183
+ msgid "WP Cerber"
184
+ msgstr ""
185
+
186
+ #: ../dashboard.php:511 ../settings.php:179
187
+ msgid "WP Cerber Security"
188
+ msgstr ""
189
+
190
+ #: ../dashboard.php:605
191
+ msgid "Comments"
192
+ msgstr "Commentaires"
193
+
194
+ #: ../dashboard.php:606
195
+ msgid "Last login"
196
+ msgstr "Dernière connexion"
197
+
198
+ #: ../dashboard.php:607
199
+ msgid "Failed attempts in last 24 hours"
200
+ msgstr "Connexions echouees des dernieres 24h"
201
+
202
+ #: ../dashboard.php:608
203
+ msgid "Date of registration"
204
+ msgstr "Date d’inscription"
205
+
206
+ #: ../dashboard.php:633 ../dashboard.php:821
207
+ msgid "Never"
208
+ msgstr "Jamais"
209
+
210
+ #: ../dashboard.php:654
211
+ msgid "Export settings to the file"
212
+ msgstr "Exporter les préférences"
213
+
214
+ #: ../dashboard.php:655
215
+ msgid ""
216
+ "When you click the button below you will get a configuration file, which you "
217
+ "can upload on another site."
218
+ msgstr ""
219
+ "Vous obtiendrez un fichier de configuration lorsque vous cliquerez sur le "
220
+ "bouton ci-dessous. Vous pourrez ensuite utiliser ce fichier de configuration "
221
+ "sur d’autre site."
222
+
223
+ #: ../dashboard.php:656
224
+ msgid "What do you want to export?"
225
+ msgstr "Que voulez-vous exporter ?"
226
+
227
+ #: ../dashboard.php:657 ../dashboard.php:666 ../dashboard.php:847 ../dashboard.
228
+ #: php:1173
229
+ msgid "Settings"
230
+ msgstr "Réglages"
231
+
232
+ #: ../dashboard.php:658 ../dashboard.php:667 ../dashboard.php:775 ../dashboard.
233
+ #: php:846 ../dashboard.php:1174 ../wp-cerber.php:2188 ../settings.php:196
234
+ msgid "Access Lists"
235
+ msgstr "Listes d’accès"
236
+
237
+ #: ../dashboard.php:659
238
+ msgid "Download file"
239
+ msgstr "Télécharger le fichier"
240
+
241
+ #: ../dashboard.php:661
242
+ msgid "Import settings from the file"
243
+ msgstr "Importer les préférences"
244
+
245
+ #: ../dashboard.php:662
246
+ msgid ""
247
+ "When you click the button below, file will be uploaded and all existing "
248
+ "settings will be overridden."
249
+ msgstr "Importer des préférences écrasera les réglages précédents."
250
+
251
+ #: ../dashboard.php:663
252
+ msgid "Select file to import."
253
+ msgstr "Sélectionnez un fichier."
254
+
255
+ #: ../dashboard.php:663
256
+ #, php-format
257
+ msgid "Maximum upload file size: %s."
258
+ msgstr "Taille maximum de fichier autorisée : %s"
259
+
260
+ #: ../dashboard.php:666
261
+ msgid "What do you want to import?"
262
+ msgstr "Que voulez-vous importer ?"
263
+
264
+ #: ../dashboard.php:668
265
+ msgid "Upload file"
266
+ msgstr "Uploader un fichier"
267
+
268
+ #: ../dashboard.php:749
269
+ msgid "No file was uploaded or file is corrupted"
270
+ msgstr "Le fichier n’a pas été uploadé ou est corrompu"
271
+
272
+ #: ../dashboard.php:775
273
+ msgid "Error while updating"
274
+ msgstr "Erreur lors de la mise à jour"
275
+
276
+ #: ../dashboard.php:778
277
+ msgid "Settings has imported successfully from"
278
+ msgstr "Les préférences ont été importées avec succès depuis"
279
+
280
+ #: ../dashboard.php:782
281
+ msgid "Error while parsing file"
282
+ msgstr "Error lors de l’analyse du fichier"
283
+
284
+ #: ../dashboard.php:793
285
+ msgid "Cerber Quick View"
286
+ msgstr "Cerber aperçu"
287
+
288
+ #: ../dashboard.php:825
289
+ msgid "active"
290
+ msgstr "Active"
291
+
292
+ #: ../dashboard.php:825
293
+ msgid "deactivate"
294
+ msgstr "Citadelle activée !"
295
+
296
+ #: ../dashboard.php:827
297
+ msgid "not active"
298
+ msgstr "Inactif"
299
+
300
+ #: ../dashboard.php:828
301
+ msgid "disabled"
302
+ msgstr "Désactivée"
303
+
304
+ #: ../dashboard.php:833
305
+ msgid "failed attempts"
306
+ msgstr "Limitation des tentatives de connexion"
307
+
308
+ #: ../dashboard.php:833 ../dashboard.php:834
309
+ msgid "in 24 hours"
310
+ msgstr "en 24 heures"
311
+
312
+ #: ../dashboard.php:833 ../dashboard.php:834
313
+ msgid "view all"
314
+ msgstr "Voir tous"
315
+
316
+ #: ../dashboard.php:834
317
+ msgid "lockouts"
318
+ msgstr "Blocages"
319
+
320
+ #: ../dashboard.php:836
321
+ msgid "Lockouts at the moment"
322
+ msgstr ""
323
+ "Pas de blocage pour le moment. Tout va bien dans le meilleur des mondes."
324
+
325
+ #: ../dashboard.php:837
326
+ msgid "Last lockout"
327
+ msgstr "Le dernier blocage a été ajouté"
328
+
329
+ #: ../dashboard.php:838 ../dashboard.php:839 ../dashboard.php:1155
330
+ msgid "entry"
331
+ msgid_plural "entries"
332
+ msgstr[0] "entrée"
333
+ msgstr[1] "entrées"
334
+
335
+ #: ../dashboard.php:840 ../settings.php:74
336
+ msgid "Citadel mode"
337
+ msgstr "Mode Citadelle"
338
+
339
+ #: ../dashboard.php:845 ../settings.php:191
340
+ msgid "Lockouts"
341
+ msgstr "Blocages"
342
+
343
+ #: ../dashboard.php:951 ../dashboard.php:963
344
+ msgid "View all"
345
+ msgstr "Voir tout"
346
+
347
+ #: ../dashboard.php:964
348
+ msgid "Recently locked out IP addresses"
349
+ msgstr "IPs récemment bloquées"
350
+
351
+ #: ../dashboard.php:986
352
+ msgid "Confused about some settings?"
353
+ msgstr "Confus au sujet de certains paramètres ?"
354
+
355
+ #: ../dashboard.php:987
356
+ msgid "You can easily load default recommended settings using button below"
357
+ msgstr ""
358
+ "Vous pouvez facilement charger les paramètres recommandés par défaut en "
359
+ "utilisant bouton ci-dessous"
360
+
361
+ #: ../dashboard.php:989
362
+ msgid "Load default settings"
363
+ msgstr "Charger les paramètres par défaut"
364
+
365
+ #: ../dashboard.php:991 ../dashboard.php:1784
366
+ msgid "Are you sure?"
367
+ msgstr "Etes-vous sûr ?"
368
+
369
+ #: ../dashboard.php:997
370
+ msgid "doesn't affect Custom login URL and Access Lists"
371
+ msgstr "n’affecte pas l’URL de connexion personnalisée ni les Listes d’accès"
372
+
373
+ #: ../dashboard.php:1016
374
+ msgid "Donate"
375
+ msgstr "Faire un don"
376
+
377
+ #: ../dashboard.php:1065
378
+ msgid "Attention! Citadel mode is now active. Nobody is able to log in."
379
+ msgstr ""
380
+ "Attention ! Le mode Citadel est maintenant activé. Plus personne ne peut se "
381
+ "connecter."
382
+
383
+ #: ../dashboard.php:1066
384
+ msgid "Deactivate"
385
+ msgstr "Désactiver"
386
+
387
+ #: ../dashboard.php:1067
388
+ msgid "View Activity"
389
+ msgstr "Voir l’activité"
390
+
391
+ #: ../dashboard.php:1118
392
+ msgid "New version is available"
393
+ msgstr "Nouvelle version disponible"
394
+
395
+ #: ../dashboard.php:1124
396
+ #, php-format
397
+ msgid "Update to version %s of WP Cerber"
398
+ msgstr "Mettre à jour WP Cerber à la version %s"
399
+
400
+ #: ../whois.php:211
401
+ msgid "Unknown"
402
+ msgstr "Inconnu"
403
+
404
+ #. URI of the plugin
405
+ msgid "http://wpcerber.com"
406
+ msgstr ""
407
+
408
+ #. Description of the plugin
409
+ msgid ""
410
+ "Protects site from brute force attacks, bots and hackers. Antispam "
411
+ "protection with reCAPTCHA. Comprehensive control of user activity. Restrict "
412
+ "login by IP access lists. Limit login attempts. Feel free to contact "
413
+ "developer on the site <a href=\"http://wpcerber.com\">wpcerber.com</a>."
414
+ msgstr ""
415
+ "Protège les site des attaques “brute-force”, des robots et des hackers. "
416
+ "Protection antispam grâce à reCAPTCHA. Un outil complet de contrôle des "
417
+ "activités utilisateurs. Restriction des connexions basé sur les adresses IP. "
418
+ "Limitation des tentatives de connexions. N’hésitez pas à contacter le "
419
+ "développeur sur le site <a href=\"http://wpcerber.com\">wpcerber.com</a>."
420
+
421
+ #. Author of the plugin
422
+ msgid "Gregory"
423
+ msgstr ""
424
+
425
+ #: ../wp-cerber.php:184
426
+ msgid "You are not allowed to log in. Ask your administrator for assistance."
427
+ msgstr ""
428
+ "Vous n’êtes pas autorisé à vous connecté. Contactez l’administrateur si vous "
429
+ "avez besoin d’assistance."
430
+
431
+ #: ../wp-cerber.php:190
432
+ #, php-format
433
+ msgid ""
434
+ "You have reached the login attempts limit. Please try again in %d minutes."
435
+ msgstr ""
436
+ "Vous avez atteint le nombre maximum de tentatives autorisé. Veuillez "
437
+ "réessayer dans %d minutes."
438
+
439
+ #: ../wp-cerber.php:208
440
+ #, php-format
441
+ msgid "You have only one attempt remaining."
442
+ msgid_plural "You have %d attempts remaining."
443
+ msgstr[0] "Il ne vous reste qu’une seule tentative."
444
+ msgstr[1] "Il vous reste %d tentatives."
445
+
446
+ #: ../wp-cerber.php:481
447
+ msgid ""
448
+ "Human verification failed. Please click the square box in the reCAPTCHA "
449
+ "block below."
450
+ msgstr ""
451
+ "Vérification humaine échouée. Veuillez cliquer sur la case à cocher de la "
452
+ "boite de dialogue reCAPTCHA ci-dessous."
453
+
454
+ #: ../wp-cerber.php:579 ../wp-cerber.php:629 ../wp-cerber.php:635 ../wp-cerber.
455
+ #: php:658 ../settings.php:400
456
+ msgid "ERROR:"
457
+ msgstr "ERREUR : "
458
+
459
+ #: ../wp-cerber.php:591
460
+ #, php-format
461
+ msgid ""
462
+ "<strong>ERROR</strong>: The password you entered for the username %s is "
463
+ "incorrect."
464
+ msgstr ""
465
+ "<strong>ERREUR</strong>: Le mot de passe que vous avez saisie pour "
466
+ "l’identifiant %s est incorrect."
467
+
468
+ #: ../wp-cerber.php:636
469
+ msgid "Username is not allowed. Please choose another one."
470
+ msgstr "Ce nom d’utilisateur n’est pas autorisé. Veuillez en choisir un autre."
471
+
472
+ #: ../wp-cerber.php:1873
473
+ msgid "WP Cerber notify"
474
+ msgstr "Préférences WP Cerber"
475
+
476
+ #: ../wp-cerber.php:1892
477
+ msgid "Citadel mode is activated"
478
+ msgstr "Citadelle activée !"
479
+
480
+ #: ../wp-cerber.php:1894
481
+ #, php-format
482
+ msgid "Citadel mode is activated after %d failed login attempts in %d minutes."
483
+ msgstr ""
484
+ "Le mode Citadelle est activé après %d tentatives de connexion échouées en %d "
485
+ "minutes."
486
+
487
+ #: ../wp-cerber.php:1895
488
+ #, php-format
489
+ msgid "Last failed attempt was at %s from IP %s with user login: %s."
490
+ msgstr ""
491
+ "La dernière tentative échouée date du %s. Elle vient de l’IP %s. Le nom "
492
+ "d’utilisateur utilisé est : %s."
493
+
494
+ #: ../wp-cerber.php:1896
495
+ msgid "View activity in dashboard"
496
+ msgstr "Voir l’activité dans le tableau de bord"
497
+
498
+ #: ../wp-cerber.php:1918
499
+ msgid "unspecified"
500
+ msgstr "non spécifié"
501
+
502
+ #: ../wp-cerber.php:1922
503
+ msgid "Number of lockouts is increasing"
504
+ msgstr "Le nombre de blocage augmente"
505
+
506
+ #: ../wp-cerber.php:1924
507
+ msgid "Number of active lockouts"
508
+ msgstr "Nombre de blocages actifs"
509
+
510
+ #: ../wp-cerber.php:1926
511
+ #, php-format
512
+ msgid "Last lockout was added: %s for IP %s"
513
+ msgstr "Le dernier blocage a été ajouté le %s pour l’IP %s"
514
+
515
+ #: ../wp-cerber.php:1928
516
+ msgid "View activity for this IP"
517
+ msgstr "Voir l’activité pour cette IP"
518
+
519
+ #: ../wp-cerber.php:1929
520
+ msgid "View lockouts in dashboard"
521
+ msgstr "Voir les blocages dans le tableau de bord"
522
+
523
+ #: ../wp-cerber.php:1932 ../wp-cerber.php:1934
524
+ msgid "A new version of WP Cerber is available to install"
525
+ msgstr "Une nouvelle version de WP Cerber est disponible"
526
+
527
+ #: ../wp-cerber.php:1933
528
+ msgid "Hi!"
529
+ msgstr "Salut !"
530
+
531
+ #: ../wp-cerber.php:1935 ../wp-cerber.php:1946
532
+ msgid "Website"
533
+ msgstr "Site web"
534
+
535
+ #: ../wp-cerber.php:1938 ../wp-cerber.php:1939
536
+ msgid "The WP Cerber security plugin has been deactivated"
537
+ msgstr "Le plugin WP Cerber a été désactivé"
538
+
539
+ #: ../wp-cerber.php:1941
540
+ msgid "Not logged in"
541
+ msgstr "Non connecté"
542
+
543
+ #: ../wp-cerber.php:1947
544
+ msgid "By user"
545
+ msgstr "Par utilisateur"
546
+
547
+ #: ../wp-cerber.php:1948
548
+ msgid "From IP address"
549
+ msgstr "De l’adresse IP"
550
+
551
+ #: ../wp-cerber.php:1951
552
+ msgid "From country"
553
+ msgstr "Du pays"
554
+
555
+ #: ../wp-cerber.php:1955
556
+ msgid "The WP Cerber security plugin is now active"
557
+ msgstr "Le plugin WP Cerber est maintenant actif"
558
+
559
+ #: ../wp-cerber.php:1956 ../wp-cerber.php:2181
560
+ msgid "WP Cerber is now active and has started protecting your site"
561
+ msgstr "WP Cerber est maintenant actif et protège votre site"
562
+
563
+ #: ../wp-cerber.php:1957
564
+ msgid "Change notification settings"
565
+ msgstr "Changer les préférences de notifications"
566
+
567
+ #: ../wp-cerber.php:1962
568
+ msgid "New Custom login URL"
569
+ msgstr "URL de connexion personnalisée"
570
+
571
+ #: ../wp-cerber.php:1977
572
+ msgid "This message was sent by"
573
+ msgstr "Ce message a été envoyé par"
574
+
575
+ #: ../wp-cerber.php:2156
576
+ #, php-format
577
+ msgid "The WP Cerber requires PHP %s or higher. You are running"
578
+ msgstr "WP Cerber nécessite PHP %s ou supérieur. Vous avez actuellement "
579
+
580
+ #: ../wp-cerber.php:2160
581
+ #, php-format
582
+ msgid "The WP Cerber requires WordPress %s or higher. You are running"
583
+ msgstr "WP Cerber nécessite WordPress %s ou supérieur. Vous avez actuellement"
584
+
585
+ #: ../wp-cerber.php:2165
586
+ msgid "Can't activate WP Cerber due to a database error."
587
+ msgstr "Impossible d’activer WP Cerber à cause d’une erreur de base de données"
588
+
589
+ #: ../wp-cerber.php:2182
590
+ msgid "Your IP address is added to the"
591
+ msgstr "Votre adresse IP a été ajouté à"
592
+
593
+ #: ../wp-cerber.php:2184
594
+ msgid "It's important to check security settings."
595
+ msgstr "Il est important de vérifier les paramètres de sécurité."
596
+
597
+ #: ../wp-cerber.php:2187 ../settings.php:193
598
+ msgid "Main Settings"
599
+ msgstr "Réglages généraux"
600
+
601
+ #: ../wp-cerber.php:2189 ../settings.php:198
602
+ msgid "Hardening"
603
+ msgstr "Renforcer"
604
+
605
+ #: ../wp-cerber.php:2190 ../settings.php:203
606
+ msgid "reCAPTCHA"
607
+ msgstr ""
608
+
609
+ #: ../wp-cerber.php:2191
610
+ msgid "Import settings"
611
+ msgstr "Importer les paramètres"
612
+
613
+ #: ../cerber-news.php:71
614
+ msgid "Want to make WP Cerber even more powerful?"
615
+ msgstr "Désireux de rendre WP Cerber encore plus puissant ?"
616
+
617
+ #: ../cerber-news.php:72
618
+ msgid ""
619
+ "Allow WP Cerber to send locked out malicious IP addresses to Cerber Lab. "
620
+ "This helps the plugin team to develop new algorithms for WP Cerber that will "
621
+ "defend WordPress against new threats and botnets that are appearing "
622
+ "everyday. You can disable the sending in the plugin settings at any time."
623
+ msgstr ""
624
+ "Permettre à WP Cerber d’envoyer les adresses IP qui ont été bloqués au "
625
+ "Cerber Lab. Cela aidera l’équipe à créer de nouveau algorithmes pour que WP "
626
+ "Cerber puisse défendre WordPress contre les nouvelles attaques et réseaux de "
627
+ "robots qui apparaissent chaque jour. Vous pouvez désactiver l’envoi des "
628
+ "données à tout moment dans les réglages du plugin."
629
+
630
+ #: ../cerber-news.php:73
631
+ msgid "OK, nail them all"
632
+ msgstr "OK, qu’on les chope tous !"
633
+
634
+ #: ../cerber-news.php:74
635
+ msgid "NO, maybe later"
636
+ msgstr "NON, peut-être plus tard"
637
+
638
+ #: ../settings.php:57
639
+ msgid "Limit login attempts"
640
+ msgstr "Limitation des tentatives de connexion"
641
+
642
+ #: ../settings.php:58
643
+ msgid "Attempts"
644
+ msgstr "Tentatives"
645
+
646
+ #: ../settings.php:59
647
+ msgid "Lockout duration"
648
+ msgstr "Durée du blocage"
649
+
650
+ #: ../settings.php:59 ../settings.php:76 ../common.php:229
651
+ msgid "minutes"
652
+ msgstr "minutes"
653
+
654
+ #: ../settings.php:60
655
+ msgid "Aggressive lockout"
656
+ msgstr "Blocage aggressif"
657
+
658
+ #: ../settings.php:61 ../settings.php:78 ../settings.php:80
659
+ msgid "Notifications"
660
+ msgstr "Notifications"
661
+
662
+ #: ../settings.php:62
663
+ msgid "Site connection"
664
+ msgstr "Connexion au site"
665
+
666
+ #: ../settings.php:62
667
+ msgid "My site is behind a reverse proxy"
668
+ msgstr "Mon site se trouve derrière un reverse proxy"
669
+
670
+ #: ../settings.php:64
671
+ msgid "Proactive security rules"
672
+ msgstr "Règles de sécurité proactives"
673
+
674
+ #: ../settings.php:65
675
+ msgid "Block subnet"
676
+ msgstr "Bloquer les sous-réseaux"
677
+
678
+ #: ../settings.php:65
679
+ msgid "Always block entire subnet Class C of intruders IP"
680
+ msgstr "Toujours bloquer le sous-réseau complet de classe C des IP intruses"
681
+
682
+ #: ../settings.php:66
683
+ msgid "Non-existent users"
684
+ msgstr "Utilisateurs inexistants"
685
+
686
+ #: ../settings.php:66
687
+ msgid ""
688
+ "Immediately block IP when attempting to login with a non-existent username"
689
+ msgstr ""
690
+ "Bloquer immédiatement l’IP si la tentative de connexion est faite avec un "
691
+ "identifiant utilisateur inexistant"
692
+
693
+ #: ../settings.php:67
694
+ msgid "Redirect dashboard requests"
695
+ msgstr "Redirection des requêtes du tableau de bord"
696
+
697
+ #: ../settings.php:67
698
+ msgid ""
699
+ "Disable automatic redirecting to the login page when /wp-admin/ is requested "
700
+ "by an unauthorized request"
701
+ msgstr ""
702
+ "Désactiver la redirection automatique sur la page de login lorsque /wp-"
703
+ "admin/ est demandé lors d’une requête non-autorisée"
704
+
705
+ #: ../settings.php:68
706
+ msgid "Request wp-login.php"
707
+ msgstr "Requête sur wp-login.php"
708
+
709
+ #: ../settings.php:68
710
+ msgid "Immediately block IP after any request to wp-login.php"
711
+ msgstr ""
712
+ "Bloquer immédiatement l’IP si elle tente d’accéder au fichier wp-login.php"
713
+
714
+ #: ../settings.php:70
715
+ msgid "Custom login page"
716
+ msgstr "Page de connexion personnalisée"
717
+
718
+ #: ../settings.php:71
719
+ msgid "Custom login URL"
720
+ msgstr "URL de connexion personnalisée"
721
+
722
+ #: ../settings.php:71
723
+ msgid "must not overlap with the existing pages or posts slug"
724
+ msgstr "Ne doit pas chevaucher l’URL d’une page ou d’un post existant"
725
+
726
+ #: ../settings.php:72
727
+ msgid "Disable wp-login.php"
728
+ msgstr "Désactiver wp-login.php"
729
+
730
+ #: ../settings.php:72
731
+ msgid "Block direct access to wp-login.php and return HTTP 404 Not Found Error"
732
+ msgstr ""
733
+ "Bloquer l’accès direct à wp-login.php et retourner une erreur HTTP 404 Not "
734
+ "Found"
735
+
736
+ #: ../settings.php:75
737
+ msgid "Threshold"
738
+ msgstr "Seuil"
739
+
740
+ #: ../settings.php:76
741
+ msgid "Duration"
742
+ msgstr "Durée"
743
+
744
+ #: ../settings.php:78
745
+ msgid "Send notification to admin email"
746
+ msgstr "Envoyer des notifications à l’administrateur"
747
+
748
+ #: ../settings.php:78 ../settings.php:292
749
+ msgid "Click to send test"
750
+ msgstr "Cliquez pour tester"
751
+
752
+ #: ../settings.php:82
753
+ msgid "Email Address"
754
+ msgstr "Adresse email"
755
+
756
+ #: ../settings.php:82
757
+ #, php-format
758
+ msgid "if empty, the admin email %s will be used"
759
+ msgstr "Si vide, l’adresse de l’admin %s sera utilisée"
760
+
761
+ #: ../settings.php:83
762
+ msgid "Notification limit"
763
+ msgstr "Limite de notification"
764
+
765
+ #: ../settings.php:83
766
+ msgid "notification letters allowed per hour (0 means unlimited)"
767
+ msgstr "Nombre limite de mails de notification (0 pour illimité)"
768
+
769
+ #: ../settings.php:86
770
+ msgid "Keep records for"
771
+ msgstr "Conserver l’historique pendant"
772
+
773
+ #: ../settings.php:86 ../common.php:227
774
+ msgid "days"
775
+ msgstr "jours"
776
+
777
+ #: ../settings.php:89
778
+ msgid "Drill down IP"
779
+ msgstr "Examiner les IPs"
780
+
781
+ #: ../settings.php:89
782
+ msgid "Retrieve extra WHOIS information for IP"
783
+ msgstr "Récupérer les données WHOIS des IPs"
784
+
785
+ #: ../settings.php:90
786
+ msgid "Cerber Lab connection"
787
+ msgstr "Connexion Cerber Lab"
788
+
789
+ #: ../settings.php:90
790
+ msgid "Send malicious IP addresses to the Cerber Lab"
791
+ msgstr "Envoyer les adresses IP bloquées au Cerber Lab"
792
+
793
+ #: ../settings.php:91
794
+ msgid "Cerber Lab protocol"
795
+ msgstr "Protocole Cerber Lab"
796
+
797
+ #: ../settings.php:92
798
+ msgid "Use file"
799
+ msgstr "Utiliser un fichier"
800
+
801
+ #: ../settings.php:92
802
+ msgid "Write failed login attempts to the file"
803
+ msgstr "Inscrire les tentatives de connexion échouées dans un fichier de log"
804
+
805
+ #: ../settings.php:99
806
+ msgid "Hardening WordPress"
807
+ msgstr "Renforcer WordPress"
808
+
809
+ #: ../settings.php:100
810
+ msgid "Stop user enumeration"
811
+ msgstr "Empêcher l’énumération des utilisateurs"
812
+
813
+ #: ../settings.php:100
814
+ msgid "Block access to the pages like /?author=n"
815
+ msgstr "Bloquer l’accès aux pages du type /?auteur=n"
816
+
817
+ #: ../settings.php:101
818
+ msgid "Disable XML-RPC"
819
+ msgstr "Désactiver XML-RPC"
820
+
821
+ #: ../settings.php:101
822
+ msgid "Block access to the XML-RPC server (including Pingbacks and Trackbacks)"
823
+ msgstr ""
824
+ "Bloquer l’accès au serveur XMlL-RPC (inclut les Pingbacks et Trackbacks)"
825
+
826
+ #: ../settings.php:102
827
+ msgid "Disable feeds"
828
+ msgstr "Désactiver les flux"
829
+
830
+ #: ../settings.php:102
831
+ msgid "Block access to the RSS, Atom and RDF feeds"
832
+ msgstr "Bloquer l’accès aux flux RSS, Atom et RDF"
833
+
834
+ #: ../settings.php:103
835
+ msgid "Disable REST API"
836
+ msgstr "Désactiver l’API REST"
837
+
838
+ #: ../settings.php:103
839
+ msgid "Block access to the WordPress REST API"
840
+ msgstr "Bloquer l’accès à l’API REST de WordPress"
841
+
842
+ #: ../settings.php:111
843
+ msgid "User related settings"
844
+ msgstr "Paramètres relatifs aux utilisateurs"
845
+
846
+ #: ../settings.php:112
847
+ msgid "Prohibited usernames"
848
+ msgstr "Identifiants interdits"
849
+
850
+ #: ../settings.php:112
851
+ msgid ""
852
+ "Usernames from this list are not allowed to log in or register. Any IP "
853
+ "address, have tried to use any of these usernames, will be immediately "
854
+ "blocked. Use comma to separate logins."
855
+ msgstr ""
856
+ "Les identifiants de cette liste ne pourront ni se connecter ni s’inscrire. "
857
+ "Toute IP qui aurait tenté d’utiliser un de ces identifiants sera "
858
+ "immédiatement bloquée. Séparez les identifiants par des virgules."
859
+
860
+ #: ../settings.php:113
861
+ msgid "User session expire"
862
+ msgstr "Session utilisateur expirée"
863
+
864
+ #: ../settings.php:113
865
+ msgid "in minutes (leave empty to use default WP value)"
866
+ msgstr ""
867
+ "en minutes (laisser vide pour utiliser la valeur par défaut de WordPress)"
868
+
869
+ #: ../settings.php:117
870
+ msgid "reCAPTCHA settings"
871
+ msgstr "Paramètres reCAPTCHA"
872
+
873
+ #: ../settings.php:118
874
+ msgid "Site key"
875
+ msgstr "Clef du site"
876
+
877
+ #: ../settings.php:119
878
+ msgid "Secret key"
879
+ msgstr "Clef secrète"
880
+
881
+ #: ../settings.php:121
882
+ msgid "Registration form"
883
+ msgstr "Formulaire d’inscription"
884
+
885
+ #: ../settings.php:121
886
+ msgid "Enable reCAPTCHA for WordPress registration form"
887
+ msgstr "Activer reCAPTCHA pour le formulaire d’inscription WordPress"
888
+
889
+ #: ../settings.php:122
890
+ msgid "Enable reCAPTCHA for WooCommerce registration form"
891
+ msgstr "Activer reCAPTCHA pour le formulaire d’inscription WooCommerce"
892
+
893
+ #: ../settings.php:124
894
+ msgid "Lost password form"
895
+ msgstr "Formulaire de récupération de mot de passe"
896
+
897
+ #: ../settings.php:124
898
+ msgid "Enable reCAPTCHA for WordPress lost password form"
899
+ msgstr ""
900
+ "Activer reCAPTCHA pour le formulaire de récupération de mot de passe "
901
+ "WordPress"
902
+
903
+ #: ../settings.php:125
904
+ msgid "Enable reCAPTCHA for WooCommerce lost password form"
905
+ msgstr ""
906
+ "Activer reCAPTCHA pour le formulaire de récupération de mot de passe "
907
+ "WooCommerce"
908
+
909
+ #: ../settings.php:127
910
+ msgid "Login form"
911
+ msgstr "Formulaire de connexion"
912
+
913
+ #: ../settings.php:127
914
+ msgid "Enable reCAPTCHA for WordPress login form"
915
+ msgstr "Activer reCAPTCHA pour le formulaire de connexion WordPress"
916
+
917
+ #: ../settings.php:128
918
+ msgid "Enable reCAPTCHA for WooCommerce login form"
919
+ msgstr "Activer reCAPTCHA pour le formulaire de connexion WooCommerce"
920
+
921
+ #: ../settings.php:137
922
+ msgid "Make your protection smarter!"
923
+ msgstr "Rendez votre protection intelligente !"
924
+
925
+ #: ../settings.php:141
926
+ msgid ""
927
+ "Please enable Permalinks to use this feature. Set Permalink Settings to "
928
+ "something other than Default."
929
+ msgstr ""
930
+ "Veuillez activer les Permaliens pour utiliser cette fonctionnalité. Le "
931
+ "réglage des permaliens ne doit pas être “par défaut”."
932
+
933
+ #: ../settings.php:144
934
+ msgid ""
935
+ "Be careful when enabling this options. If you forget the custom login URL "
936
+ "you will not be able to login."
937
+ msgstr ""
938
+ "Soyez prudent si vous activez ces réglages. Si vous oubliez l’URL de "
939
+ "connexion personnalisée, vous ne pourrez plus vous connecter."
940
+
941
+ #: ../settings.php:148
942
+ msgid ""
943
+ "In Citadel mode nobody is able to login. Active user's sessions will not be "
944
+ "affected."
945
+ msgstr ""
946
+ "En mode Citadel, personne ne peut se connecter. Les sessions des "
947
+ "utilisateurs déjà connectés ne seront pas impactées."
948
+
949
+ #: ../settings.php:153
950
+ msgid "These settings do not affect hosts from the "
951
+ msgstr "Ces paramètres n’affecteront pas les hôtes en provenance de"
952
+
953
+ #: ../settings.php:158
954
+ msgid ""
955
+ "Before you can start using reCAPTCHA, you have to obtain Site key and Secret "
956
+ "key on the Google website"
957
+ msgstr ""
958
+ "Avant d’utiliser reCAPTCHA, il vous faut obtenir une Clef de Site et une "
959
+ "Clef Secrète sur le site de Google"
960
+
961
+ #: ../settings.php:159
962
+ msgid "Know more"
963
+ msgstr "En savoir plus"
964
+
965
+ #: ../settings.php:186
966
+ msgid "Dashboard"
967
+ msgstr "Tableau de bord"
968
+
969
+ #: ../settings.php:200
970
+ msgid "Users"
971
+ msgstr "Utilisateurs"
972
+
973
+ #: ../settings.php:205
974
+ msgid "Tools"
975
+ msgstr "Outils"
976
+
977
+ #: ../settings.php:207
978
+ msgid "Help"
979
+ msgstr "Aide"
980
+
981
+ #: ../settings.php:278
982
+ #, php-format
983
+ msgid "%s allowed retries in %s minutes"
984
+ msgstr "%s tentatives autorisées en %s minutes"
985
+
986
+ #: ../settings.php:283
987
+ #, php-format
988
+ msgid ""
989
+ "Increase lockout duration to %s hours after %s lockouts in the last %s hours"
990
+ msgstr ""
991
+ "Allonger la durée du blocage à %s heures après %s blocages dans les %s "
992
+ "dernières heures"
993
+
994
+ #: ../settings.php:290
995
+ msgid "Notify admin if the number of active lockouts above"
996
+ msgstr "Notifier l’administrateur si le nombre de blocages actifs excède "
997
+
998
+ #: ../settings.php:295
999
+ #, php-format
1000
+ msgid "Enable after %s failed login attempts in last %s minutes"
1001
+ msgstr "Activer après %s tentatives échouées dans les %s dernières minutes"
1002
+
1003
+ #: ../settings.php:345
1004
+ msgid "Attention! You have changed the login URL! The new login URL is"
1005
+ msgstr ""
1006
+ "Attention ! Vous avez changer l’URL de connexion ! La nouvelle URL est "
1007
+
1008
+ #: ../settings.php:368
1009
+ msgid "<strong>ERROR</strong>: please enter a valid email address."
1010
+ msgstr "<strong>ERREUR</strong>: veuillez saisir une adresse email valide."
1011
+
1012
+ #: ../settings.php:618
1013
+ msgid "Number of items per page:"
1014
+ msgstr "Nombre d’éléments par page :"
1015
+
1016
+ #: ../common.php:129
1017
+ msgid "User created"
1018
+ msgstr "Utilisateur créé"
1019
+
1020
+ #: ../common.php:130
1021
+ msgid "User registered"
1022
+ msgstr "Inscription utilisateur"
1023
+
1024
+ #: ../common.php:131
1025
+ msgid "Logged in"
1026
+ msgstr "Connexion réussie"
1027
+
1028
+ #: ../common.php:132
1029
+ msgid "Logged out"
1030
+ msgstr "Déconnexion"
1031
+
1032
+ #: ../common.php:133
1033
+ msgid "Login failed"
1034
+ msgstr "Connexion échouée"
1035
+
1036
+ #: ../common.php:136
1037
+ msgid "IP blocked"
1038
+ msgstr "IP bloquée"
1039
+
1040
+ #: ../common.php:137
1041
+ msgid "Subnet blocked"
1042
+ msgstr "Sous-réseau bloqué"
1043
+
1044
+ #: ../common.php:139
1045
+ msgid "Citadel activated!"
1046
+ msgstr "Citadelle activée !"
1047
+
1048
+ #: ../common.php:142
1049
+ msgid "IP blacklisted"
1050
+ msgstr "IP blacklistées"
1051
+
1052
+ #: ../common.php:145
1053
+ msgid "Password changed"
1054
+ msgstr "Changement de mot de passe"
1055
+
1056
+ #: ../common.php:147
1057
+ msgid "reCAPTCHA verification failed"
1058
+ msgstr "Vérification reCAPTCHA échouée"
1059
+
1060
+ #: ../common.php:148
1061
+ msgid "reCAPTCHA settings are incorrect"
1062
+ msgstr "Les paramètres reCAPTCHA sont incorrects"
1063
+
1064
+ #: ../common.php:149
1065
+ msgid "Request to the Google reCAPTCHA service failed"
1066
+ msgstr "La requête au service Google reCAPTCHA a échouée"
1067
+
1068
+ #: ../common.php:151
1069
+ msgid "Attempt to access prohibited URL"
1070
+ msgstr "Tentative d’accès à une URL interdite"
1071
+
1072
+ #: ../common.php:152 ../common.php:164
1073
+ msgid "Attempt to log in with non-existent username"
1074
+ msgstr "Tentative de connexion avec un identifiant inexistant"
1075
+
1076
+ #: ../common.php:153 ../common.php:165
1077
+ msgid "Attempt to log in with prohibited username"
1078
+ msgstr "Tentative de connexion avec un identifiant interdit"
1079
+
1080
+ #: ../common.php:162
1081
+ msgid "Limit on login attempts is reached"
1082
+ msgstr "La limite de tentatives de connexion est atteinte"
1083
+
1084
+ #: ../common.php:163
1085
+ msgid "Attempt to access"
1086
+ msgstr "Tentative d’accès"
1087
+
1088
+ #: ../common.php:217
1089
+ msgid "year"
1090
+ msgstr "année"
1091
+
1092
+ #: ../common.php:218
1093
+ msgid "month"
1094
+ msgstr "mois"
1095
+
1096
+ #: ../common.php:219
1097
+ msgid "day"
1098
+ msgstr "jour"
1099
+
1100
+ #: ../common.php:220
1101
+ msgid "hour"
1102
+ msgstr "heure"
1103
+
1104
+ #: ../common.php:221
1105
+ msgid "minute"
1106
+ msgstr "minute"
1107
+
1108
+ #: ../common.php:222
1109
+ msgid "second"
1110
+ msgstr "seconde"
1111
+
1112
+ #: ../common.php:225
1113
+ msgid "years"
1114
+ msgstr "années"
1115
+
1116
+ #: ../common.php:226
1117
+ msgid "months"
1118
+ msgstr "mois"
1119
+
1120
+ #: ../common.php:228
1121
+ msgid "hours"
1122
+ msgstr "heures"
1123
+
1124
+ #: ../common.php:230
1125
+ msgid "seconds"
1126
+ msgstr "secondes"
1127
+
1128
+ #: ../common.php:236
1129
+ msgid "ago"
1130
+ msgstr "avant"
languages/wp-cerber-it_IT.mo ADDED
Binary file
languages/wp-cerber-it_IT.po ADDED
@@ -0,0 +1,1231 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "MIME-Version: 1.0\n"
4
+ "Content-Type: text/plain; charset=UTF-8\n"
5
+ "Content-Transfer-Encoding: 8bit\n"
6
+ "X-Generator: POEditor.com\n"
7
+ "Project-Id-Version: WP Cerber\n"
8
+ "Language: it\n"
9
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
10
+
11
+ #: ../settings.php:57
12
+ msgid "Limit login attempts"
13
+ msgstr "Limiti i tentativi di accesso"
14
+
15
+ #: ../settings.php:58
16
+ msgid "Attempts"
17
+ msgstr "Tentativi"
18
+
19
+ #: ../settings.php:59
20
+ msgid "Lockout duration"
21
+ msgstr "Durata blocco"
22
+
23
+ #: ../settings.php:59 ../settings.php:78
24
+ msgid "minutes"
25
+ msgstr "Minuti"
26
+
27
+ #: ../settings.php:60
28
+ msgid "Aggressive lockout"
29
+ msgstr "Blocco aggressivo"
30
+
31
+ #: ../settings.php:63
32
+ msgid "Site connection"
33
+ msgstr "Collegamenti del sito"
34
+
35
+ #: ../settings.php:65
36
+ msgid "Proactive security rules"
37
+ msgstr "Regole di sicurezza proattive"
38
+
39
+ #: ../settings.php:66
40
+ msgid "Block subnet"
41
+ msgstr "Blocca subnet"
42
+
43
+ #: ../settings.php:69
44
+ msgid "Request wp-login.php"
45
+ msgstr "Richiedi wp-login.php"
46
+
47
+ #: ../settings.php:69
48
+ msgid "Immediately block IP after any request to wp-login.php"
49
+ msgstr "Blocca Immediatamente l'IP dopo qualsiasi chiamata alla pagina wp-login.php"
50
+
51
+ #: ../settings.php:68
52
+ msgid "Redirect dashboard requests"
53
+ msgstr "Richiamare il pannello Redirect"
54
+
55
+ #: ../settings.php:72
56
+ msgid "Custom login page"
57
+ msgstr "Pagina di login personalizzata"
58
+
59
+ #: ../settings.php:73
60
+ msgid "Custom login URL"
61
+ msgstr "URL di accesso personalizzato"
62
+
63
+ #: ../settings.php:73
64
+ msgid "must not overlap with the existing pages or posts slug"
65
+ msgstr "Non deve sovrapporsi con pagine esistenti o con post esistenti"
66
+
67
+ #: ../settings.php:74
68
+ msgid "Disable wp-login.php"
69
+ msgstr "Disattiva wp-login.php"
70
+
71
+ #: ../settings.php:74
72
+ msgid "Block direct access to wp-login.php and return HTTP 404 Not Found Error"
73
+ msgstr "Blocca l'accesso diretto a wp-login.php e restituisce l'errore HTTP 404 non trovato"
74
+
75
+ #: ../dashboard.php:904 ../settings.php:76
76
+ msgid "Citadel mode"
77
+ msgstr "Modalità Citadel"
78
+
79
+ #: ../settings.php:77
80
+ msgid "Threshold"
81
+ msgstr "Soglia"
82
+
83
+ #: ../settings.php:78
84
+ msgid "Duration"
85
+ msgstr "Durata"
86
+
87
+ #: ../wp-cerber.php:2830 ../settings.php:62 ../settings.php:80 ../settings.php:238
88
+ msgid "Notifications"
89
+ msgstr "Notifiche"
90
+
91
+ #: ../settings.php:80
92
+ msgid "Send notification to admin email"
93
+ msgstr "Invia notifica all'email dell'amministratore"
94
+
95
+ #: ../dashboard.php:913 ../dashboard.php:1413 ../wp-cerber.php:2828 ../settings.
96
+ #: php:231 ../cerber-tools.php:87 ../cerber-tools.php:96 ../cerber-tools.php:162
97
+ msgid "Access Lists"
98
+ msgstr "Lista di accesso"
99
+
100
+ #: ../dashboard.php:911 ../dashboard.php:1082 ../wp-cerber.php:2695 ../settings.
101
+ #: php:82 ../settings.php:222
102
+ msgid "Activity"
103
+ msgstr "Attività"
104
+
105
+ #: ../dashboard.php:912 ../settings.php:226
106
+ msgid "Lockouts"
107
+ msgstr "Bloccati"
108
+
109
+ #: ../settings.php:353
110
+ msgid "%s allowed retries in %s minutes"
111
+ msgstr "%s tentativi permessi in %s minuti"
112
+
113
+ #: ../settings.php:370
114
+ msgid "Enable after %s failed login attempts in last %s minutes"
115
+ msgstr "Abilita dopo %s tentativi di login negli ultimi %s minuti"
116
+
117
+ #: ../dashboard.php:77 ../dashboard.php:502 ../wp-cerber.php:2696
118
+ msgid "IP"
119
+ msgstr "IP"
120
+
121
+ #: ../dashboard.php:355 ../dashboard.php:502
122
+ msgid "Date"
123
+ msgstr "Data"
124
+
125
+ #: ../dashboard.php:355 ../dashboard.php:502
126
+ msgid "Local User"
127
+ msgstr "Utente locale"
128
+
129
+ #: ../dashboard.php:355 ../dashboard.php:502 ../wp-cerber.php:2704
130
+ msgid "Username used"
131
+ msgstr "Nome utente utilizzato"
132
+
133
+ #: ../dashboard.php:83
134
+ msgid "Showing last %d records from %d"
135
+ msgstr "Mostro Ultimi %d records da %d"
136
+
137
+ #: ../common.php:335
138
+ msgid "Logged in"
139
+ msgstr "Loggato"
140
+
141
+ #: ../common.php:336
142
+ msgid "Logged out"
143
+ msgstr "Disconnesso"
144
+
145
+ #: ../common.php:337
146
+ msgid "Login failed"
147
+ msgstr "Accesso fallito"
148
+
149
+ #: ../common.php:340
150
+ msgid "IP blocked"
151
+ msgstr "IP Bloccato"
152
+
153
+ #: ../common.php:341
154
+ msgid "Subnet blocked"
155
+ msgstr "Subnet Bloccata"
156
+
157
+ #: ../common.php:343
158
+ msgid "Citadel activated!"
159
+ msgstr "Citadel attivata!"
160
+
161
+ #: ../dashboard.php:488 ../dashboard.php:668 ../common.php:347
162
+ msgid "Locked out"
163
+ msgstr "Bloccato"
164
+
165
+ #: ../common.php:348
166
+ msgid "IP blacklisted"
167
+ msgstr "IP blacklisted"
168
+
169
+ #: ../common.php:354
170
+ msgid "Password changed"
171
+ msgstr "Password cambiata"
172
+
173
+ #: ../dashboard.php:74 ../dashboard.php:123
174
+ msgid "Remove"
175
+ msgstr "Rimuovi"
176
+
177
+ #: ../dashboard.php:270
178
+ msgid "Lockout for %s was removed"
179
+ msgstr "Il blocco per %s è stato rimosso"
180
+
181
+ #: ../dashboard.php:102 ../dashboard.php:483 ../dashboard.php:663 ../dashboard.
182
+ #: php:902 ../wp-cerber.php:2822 ../settings.php:61 ../settings.php:192
183
+ msgid "White IP Access List"
184
+ msgstr "White List degli indirizzi IP"
185
+
186
+ #: ../dashboard.php:104 ../dashboard.php:484 ../dashboard.php:665 ../dashboard.
187
+ #: php:903
188
+ msgid "Black IP Access List"
189
+ msgstr "Black List degli indirizzi IP"
190
+
191
+ #: ../dashboard.php:126
192
+ msgid "List is empty"
193
+ msgstr "Lista è vuota"
194
+
195
+ #: ../dashboard.php:153
196
+ msgid "Address %s was added to White IP Access List"
197
+ msgstr "L' indirizzo %s è stato aggiunto agli indirizzi IP della tua White List"
198
+
199
+ #: ../dashboard.php:166
200
+ msgid "Address %s was added to Black IP Access List"
201
+ msgstr "L'indirizzo %s è stato aggiunto agli indirizzi IP della Black List"
202
+
203
+ #: ../wp-cerber.php:2368
204
+ msgid "Citadel mode is activated after %d failed login attempts in %d minutes."
205
+ msgstr "La modalità Citadel viene attivata dopo %d tentativi di accesso non riusciti in %d minuti."
206
+
207
+ #: ../dashboard.php:1205
208
+ msgid "View Activity"
209
+ msgstr "Vedi attività"
210
+
211
+ #: ../cerber-tools.php:86 ../cerber-tools.php:95
212
+ msgid "Settings"
213
+ msgstr "Impostazioni"
214
+
215
+ #: ../dashboard.php:803
216
+ msgid "Last login"
217
+ msgstr "Ultimo login"
218
+
219
+ #: ../dashboard.php:830 ../dashboard.php:885
220
+ msgid "Never"
221
+ msgstr "Mai"
222
+
223
+ #: ../dashboard.php:1125
224
+ msgid "Are you sure?"
225
+ msgstr "Sei sicuro?"
226
+
227
+ #: ../settings.php:63
228
+ msgid "My site is behind a reverse proxy"
229
+ msgstr "l mio sito è dietro un proxy inverso"
230
+
231
+ #: ../settings.php:67
232
+ msgid "Non-existent users"
233
+ msgstr "Utenti inesistenti"
234
+
235
+ #: ../settings.php:67
236
+ msgid "Immediately block IP when attempting to login with a non-existent username"
237
+ msgstr "Blocca Immediatamente l'IP quando si tenta di accedere con un nome utente inesistente"
238
+
239
+ #: ../settings.php:68
240
+ msgid "Disable automatic redirecting to the login page when /wp-admin/ is requested by an unauthorized request"
241
+ msgstr "Disabilita il reindirizzamento automatico alla pagina di login quando / wp-admin / viene richiamata da una richiesta non autorizzata"
242
+
243
+ #: ../settings.php:178
244
+ msgid "Make your protection smarter!"
245
+ msgstr "Fai la tua protezione più intelligente!"
246
+
247
+ #: ../settings.php:182
248
+ msgid "Please enable Permalinks to use this feature. Set Permalink Settings to something other than Default."
249
+ msgstr "Per favore abilita Permalinks per utilizzare questa funzionalità. Configura le Impostazioni del Permalink diversamente dal Predefinito."
250
+
251
+ #: ../settings.php:185
252
+ msgid "Be careful when enabling this options. If you forget the custom login URL you will not be able to login."
253
+ msgstr "Fare attenzione quando si abilita queste opzione. Se dimentichi l'URL di login personalizzato, non sarai più in grado di accedere."
254
+
255
+ #: ../wp-cerber.php:2827 ../settings.php:228
256
+ msgid "Main Settings"
257
+ msgstr "Impostazioni Principali"
258
+
259
+ #: ../settings.php:240
260
+ msgid "Help"
261
+ msgstr "Aiuto"
262
+
263
+ #: ../settings.php:358
264
+ msgid "Increase lockout duration to %s hours after %s lockouts in the last %s hours"
265
+ msgstr "Aumenta la durata del blocco a %s ore dopo %s blocchi nelle ultime %s ore"
266
+
267
+ #: ../wp-cerber.php:215
268
+ msgid "You are not allowed to log in. Ask your administrator for assistance."
269
+ msgstr "Non è consentito l'accesso. Chiedere assistenza all'amministratore."
270
+
271
+ #: ../wp-cerber.php:221
272
+ msgid "You have reached the login attempts limit. Please try again in %d minutes."
273
+ msgstr "Hai raggiunto il limite dei tentativi di accesso. Riprova in %d minuti."
274
+
275
+ #: ../wp-cerber.php:240
276
+ msgid "You have only one attempt remaining."
277
+ msgid_plural "You have %d attempts remaining."
278
+ msgstr[0] "Hai un solo tentativo rimanente."
279
+ msgstr[1] "Hai %d tentativi rimanenti."
280
+
281
+ #: ../dashboard.php:515
282
+ msgid "No activity has been logged."
283
+ msgstr "Nessuna attività è stata registrata."
284
+
285
+ #: ../dashboard.php:77
286
+ msgid "Expires"
287
+ msgstr "Scade"
288
+
289
+ #: ../dashboard.php:89
290
+ msgid "No lockouts at the moment. The sky is clear."
291
+ msgstr "Nessun blocco al momento. Il cielo è limpido."
292
+
293
+ #: ../dashboard.php:102
294
+ msgid "These IPs will never be locked out"
295
+ msgstr "Questi IP non saranno mai bloccati"
296
+
297
+ #: ../dashboard.php:106
298
+ msgid "Your IP"
299
+ msgstr "Il tuo IP"
300
+
301
+ #: ../dashboard.php:162
302
+ msgid "You can't add your IP address"
303
+ msgstr "Non puoi aggiungere il tuo indirizzo IP"
304
+
305
+ #: ../wp-cerber.php:2369
306
+ msgid "Last failed attempt was at %s from IP %s with user login: %s."
307
+ msgstr "L'ultimo tentativo non riuscito è stato a %s dall'IP %s con accesso utente: %s."
308
+
309
+ #: ../wp-cerber.php:2432
310
+ msgid "Change notification settings"
311
+ msgstr "Modificare le impostazioni di notifica"
312
+
313
+ #: ../wp-cerber.php:2805
314
+ msgid "Can't activate WP Cerber due to a database error."
315
+ msgstr "Non è possibile attivare WP Cerber a causa di un errore nel database."
316
+
317
+ #: ../settings.php:365
318
+ msgid "Notify admin if the number of active lockouts above"
319
+ msgstr "Notifica all'amministratore se il numero di blocchi attivi supera"
320
+
321
+ #: ../settings.php:83 ../settings.php:126
322
+ msgid "days"
323
+ msgstr "giorni"
324
+
325
+ #: ../dashboard.php:854
326
+ msgid "Cerber Quick View"
327
+ msgstr "Cerber Quick View"
328
+
329
+ #: ../dashboard.php:85
330
+ msgid "Hint"
331
+ msgstr "Aiuto"
332
+
333
+ #: ../dashboard.php:85
334
+ msgid "To view activity, click on the IP"
335
+ msgstr "Per visualizzare l'attività clicca sull'IP"
336
+
337
+ #: ../dashboard.php:123 ../dashboard.php:695
338
+ msgid "Check for activity"
339
+ msgstr "Controllo Attività"
340
+
341
+ #: ../settings.php:66
342
+ msgid "Always block entire subnet Class C of intruders IP"
343
+ msgstr "Blocca sempre l'intera subnet Classe C degli indirizzi IP degli intrusi"
344
+
345
+ #: ../settings.php:80 ../settings.php:367
346
+ msgid "Click to send test"
347
+ msgstr "Clicca per inviare il test"
348
+
349
+ #: ../settings.php:460
350
+ msgid "Attention! You have changed the login URL! The new login URL is"
351
+ msgstr "Attenzione! Hai cambiato l'URL di accesso! Il nuovo URL di accesso è"
352
+
353
+ #: ../dashboard.php:802
354
+ msgid "Comments"
355
+ msgstr "Commenti"
356
+
357
+ #: ../dashboard.php:805
358
+ msgid "Date of registration"
359
+ msgstr "Data di registrazione"
360
+
361
+ #: ../dashboard.php:259
362
+ msgid "Message has been sent to "
363
+ msgstr "Il messaggio è stato spedito a"
364
+
365
+ #: ../dashboard.php:1286
366
+ msgid "Update to version %s of WP Cerber"
367
+ msgstr "Aggiornamento alla versione %s di WP Cerber"
368
+
369
+ #: ../wp-cerber.php:2370 ../wp-cerber.php:2720
370
+ msgid "View activity in dashboard"
371
+ msgstr "Vedi attività nel pannello"
372
+
373
+ #: ../wp-cerber.php:2400
374
+ msgid "Number of active lockouts"
375
+ msgstr "Numero di blocchi attivi"
376
+
377
+ #: ../wp-cerber.php:2404
378
+ msgid "View lockouts in dashboard"
379
+ msgstr "Vedi blocchi nel pannello"
380
+
381
+ #: ../wp-cerber.php:2457
382
+ msgid "This message was sent by"
383
+ msgstr "Questo messaggio è stato inviato da"
384
+
385
+ #: ../dashboard.php:749 ../cerber-tools.php:43
386
+ msgid "Tools"
387
+ msgstr "Strumenti"
388
+
389
+ #: ../cerber-tools.php:83
390
+ msgid "Export settings to the file"
391
+ msgstr "Esporta le impostazione nel file"
392
+
393
+ #: ../cerber-tools.php:84
394
+ msgid "When you click the button below you will get a configuration file, which you can upload on another site."
395
+ msgstr "Quando fai clic sul pulsante qui sotto otterrai un file di configurazione che puoi caricare su un altro sito."
396
+
397
+ #: ../cerber-tools.php:85
398
+ msgid "What do you want to export?"
399
+ msgstr "Cosa vuoi esportare?"
400
+
401
+ #: ../cerber-tools.php:88
402
+ msgid "Download file"
403
+ msgstr "Scarica file"
404
+
405
+ #: ../cerber-tools.php:90
406
+ msgid "Import settings from the file"
407
+ msgstr "importa impostazioni dal file"
408
+
409
+ #: ../cerber-tools.php:91
410
+ msgid "When you click the button below, file will be uploaded and all existing settings will be overridden."
411
+ msgstr "Quando si fa clic sul pulsante in basso, il file verrà caricato e tutte le impostazioni esistenti saranno sovrascritte."
412
+
413
+ #: ../cerber-tools.php:92
414
+ msgid "Select file to import."
415
+ msgstr "Seleziona il file da importare."
416
+
417
+ #: ../cerber-tools.php:92
418
+ msgid "Maximum upload file size: %s."
419
+ msgstr "Massima dimensione del file da caricare: %s."
420
+
421
+ #: ../cerber-tools.php:95
422
+ msgid "What do you want to import?"
423
+ msgstr "Cosa vuoi importare?"
424
+
425
+ #: ../cerber-tools.php:97
426
+ msgid "Upload file"
427
+ msgstr "Carica file"
428
+
429
+ #: ../cerber-tools.php:132
430
+ msgid "No file was uploaded or file is corrupted"
431
+ msgstr "Nessun file è stato caricato o il file è danneggiato"
432
+
433
+ #: ../cerber-tools.php:162
434
+ msgid "Error while updating"
435
+ msgstr "Errore durante l'aggiornamento"
436
+
437
+ #: ../cerber-tools.php:165
438
+ msgid "Settings has imported successfully from"
439
+ msgstr "Le impostazioni sono state importate con successo da"
440
+
441
+ #: ../cerber-tools.php:169
442
+ msgid "Error while parsing file"
443
+ msgstr "Errore nell'interpretazione del file "
444
+
445
+ #: ../dashboard.php:77 ../dashboard.php:502
446
+ msgid "Hostname"
447
+ msgstr "Nome Host"
448
+
449
+ #: ../dashboard.php:237
450
+ msgid "unknown"
451
+ msgstr "sconosciuto"
452
+
453
+ #: ../settings.php:83
454
+ msgid "Keep records for"
455
+ msgstr "Mantenere i record per"
456
+
457
+ #: ../dashboard.php:889
458
+ msgid "active"
459
+ msgstr "Attiva"
460
+
461
+ #: ../dashboard.php:889
462
+ msgid "deactivate"
463
+ msgstr "Disattiva"
464
+
465
+ #: ../dashboard.php:891
466
+ msgid "not active"
467
+ msgstr "Non Attivo"
468
+
469
+ #: ../dashboard.php:892
470
+ msgid "disabled"
471
+ msgstr "Disabilitato"
472
+
473
+ #: ../dashboard.php:897
474
+ msgid "failed attempts"
475
+ msgstr "Tentativi falliti"
476
+
477
+ #: ../dashboard.php:897 ../dashboard.php:898
478
+ msgid "in 24 hours"
479
+ msgstr "in 24 ore"
480
+
481
+ #: ../dashboard.php:897 ../dashboard.php:898
482
+ msgid "view all"
483
+ msgstr "guarda tutto"
484
+
485
+ #: ../dashboard.php:898
486
+ msgid "lockouts"
487
+ msgstr "Bloccati"
488
+
489
+ #: ../dashboard.php:900
490
+ msgid "Lockouts at the moment"
491
+ msgstr "Bloccati al momento"
492
+
493
+ #: ../dashboard.php:901
494
+ msgid "Last lockout"
495
+ msgstr "Ultimo bloccato"
496
+
497
+ #: ../dashboard.php:902 ../dashboard.php:903 ../dashboard.php:1392
498
+ msgid "entry"
499
+ msgid_plural "entries"
500
+ msgstr[0] "accesso"
501
+ msgstr[1] "accessi"
502
+
503
+ #: ../dashboard.php:1120
504
+ msgid "Confused about some settings?"
505
+ msgstr "Confuso da alcune impostazioni?"
506
+
507
+ #: ../dashboard.php:1121
508
+ msgid "You can easily load default recommended settings using button below"
509
+ msgstr "È possibile caricare facilmente le impostazioni predefinite consigliate utilizzando il pulsante sottostante"
510
+
511
+ #: ../dashboard.php:1123
512
+ msgid "Load default settings"
513
+ msgstr "Caricare le impostazioni di default"
514
+
515
+ #: ../dashboard.php:1131
516
+ msgid "doesn't affect Custom login URL and Access Lists"
517
+ msgstr "Non influenza l'URL di accesso personalizzato e le liste di accesso"
518
+
519
+ #: ../dashboard.php:1150
520
+ msgid "Donate"
521
+ msgstr "Dona"
522
+
523
+ #: ../dashboard.php:1280
524
+ msgid "New version is available"
525
+ msgstr "Nuova versione disponibile"
526
+
527
+ #. Name of the plugin
528
+ #: ../dashboard.php:744 ../dashboard.php:759
529
+ msgid "WP Cerber"
530
+ msgstr "WP Cerber"
531
+
532
+ #. URI of the plugin
533
+ #:
534
+ msgid "http://wpcerber.com"
535
+ msgstr "http://wpcerber.com"
536
+
537
+ #: ../wp-cerber.php:2348
538
+ msgid "WP Cerber notify"
539
+ msgstr "Notifica di WP Cerber"
540
+
541
+ #: ../wp-cerber.php:2366
542
+ msgid "Citadel mode is activated"
543
+ msgstr "Citadel mode attivata"
544
+
545
+ #: ../wp-cerber.php:2437
546
+ msgid "New Custom login URL"
547
+ msgstr "Nuovo URL di accesso personalizzato"
548
+
549
+ #: ../wp-cerber.php:2796
550
+ msgid "The WP Cerber requires PHP %s or higher. You are running"
551
+ msgstr "Il Cerber WP richiede PHP %s o superiore. Stai utilizzando"
552
+
553
+ #: ../wp-cerber.php:2800
554
+ msgid "The WP Cerber requires WordPress %s or higher. You are running"
555
+ msgstr "Il Cerber WP richiede WordPress %s o superiore. Stai utilizzando"
556
+
557
+ #: ../settings.php:86
558
+ msgid "Use file"
559
+ msgstr "Usa file"
560
+
561
+ #: ../settings.php:86
562
+ msgid "Write failed login attempts to the file"
563
+ msgstr "Scrivi i tentativi di accesso non riusciti nel file"
564
+
565
+ #: ../dashboard.php:804
566
+ msgid "Failed attempts in last 24 hours"
567
+ msgstr "Tentativi non riusciti nelle ultime 24 ore"
568
+
569
+ #: ../dashboard.php:1204
570
+ msgid "Deactivate"
571
+ msgstr "Disattivato"
572
+
573
+ #: ../dashboard.php:77 ../wp-cerber.php:2402
574
+ msgid "Reason"
575
+ msgstr "Ragione"
576
+
577
+ #: ../dashboard.php:130
578
+ msgid "Add IP to the list"
579
+ msgstr "Aggiungi IP alla lista"
580
+
581
+ #: ../dashboard.php:713
582
+ msgid "Add IP to the Black List"
583
+ msgstr "Aggiungi IP alla Black List"
584
+
585
+ #: ../common.php:376
586
+ msgid "Attempt to access"
587
+ msgstr "Tentativi di accesso"
588
+
589
+ #: ../common.php:375
590
+ msgid "Limit on login attempts is reached"
591
+ msgstr "È stato raggiunto il limite dei tentativi di accesso"
592
+
593
+ #: ../common.php:362 ../common.php:377
594
+ msgid "Attempt to log in with non-existent username"
595
+ msgstr "Tentativo di accesso con un nome utente inesistente"
596
+
597
+ #: ../wp-cerber.php:2401
598
+ msgid "Last lockout was added: %s for IP %s"
599
+ msgstr "L'ultimo blocco è stato aggiunto: %s per IP %s"
600
+
601
+ #: ../wp-cerber.php:2824
602
+ msgid "It's important to check security settings."
603
+ msgstr "È importante controllare le impostazioni di sicurezza."
604
+
605
+ #: ../wp-cerber.php:2829 ../settings.php:233
606
+ msgid "Hardening"
607
+ msgstr "Rendi sicuro"
608
+
609
+ #: ../dashboard.php:691
610
+ msgid "Abuse email:"
611
+ msgstr "Email di abuso:"
612
+
613
+ #: ../settings.php:154
614
+ msgid "Email Address"
615
+ msgstr "Indirizzo email"
616
+
617
+ #: ../settings.php:154
618
+ msgid "if empty, the admin email %s will be used"
619
+ msgstr "Se vuota, verrà utilizzata l'email amministratore %s"
620
+
621
+ #: ../settings.php:89
622
+ msgid "Drill down IP"
623
+ msgstr "IP Bucati"
624
+
625
+ #: ../settings.php:89
626
+ msgid "Retrieve extra WHOIS information for IP"
627
+ msgstr "Recuperare informazioni aggiuntive WHOIS per l'indirizzo IP"
628
+
629
+ #: ../settings.php:97
630
+ msgid "Hardening WordPress"
631
+ msgstr "Rendi più sicuro WordPress"
632
+
633
+ #: ../settings.php:98
634
+ msgid "Stop user enumeration"
635
+ msgstr "Ferma l'enumerazione dell'utente"
636
+
637
+ #: ../settings.php:98
638
+ msgid "Block access to the pages like /?author=n"
639
+ msgstr "Blocca l'accesso alle pagine come /?author=n"
640
+
641
+ #: ../settings.php:99
642
+ msgid "Disable XML-RPC"
643
+ msgstr "Disabilita XML-RPC"
644
+
645
+ #: ../settings.php:99
646
+ msgid "Block access to the XML-RPC server (including Pingbacks and Trackbacks)"
647
+ msgstr "Bloccare l'accesso al server XML-RPC (inclusi Pingback e Trackback)"
648
+
649
+ #: ../settings.php:100
650
+ msgid "Disable feeds"
651
+ msgstr "Disabilita feeds"
652
+
653
+ #: ../settings.php:100
654
+ msgid "Block access to the RSS, Atom and RDF feeds"
655
+ msgstr "Blocca accesso agli RSS, Atom e RDF feeds"
656
+
657
+ #: ../settings.php:101
658
+ msgid "Disable REST API"
659
+ msgstr "Disabilita REST API"
660
+
661
+ #: ../settings.php:101
662
+ msgid "Block access to the WordPress REST API"
663
+ msgstr "Blocca accesso alle REST API di WordPress"
664
+
665
+ #: ../settings.php:192
666
+ msgid "These settings do not affect hosts from the "
667
+ msgstr "Queste impostazioni non influenzano gli host del"
668
+
669
+ #: ../settings.php:540
670
+ msgid "<strong>ERROR</strong>: please enter a valid email address."
671
+ msgstr "<strong>ERRORE</strong>: inserisci un indirizzo email valido."
672
+
673
+ #: ../wp-cerber.php:2431 ../wp-cerber.php:2821
674
+ msgid "WP Cerber is now active and has started protecting your site"
675
+ msgstr "WP Cerber è attivo e ha iniziato a proteggere il tuo sito"
676
+
677
+ #: ../dashboard.php:77
678
+ msgid "Action"
679
+ msgstr "Azione"
680
+
681
+ #: ../dashboard.php:104
682
+ msgid "Nobody can log in or register from these IPs"
683
+ msgstr "Nessuno con questi indirizzi IP potrà accedere o registrarsi"
684
+
685
+ #: ../dashboard.php:150 ../dashboard.php:158
686
+ msgid "Incorrect IP address or IP range"
687
+ msgstr "Indirizzo IP o Range IP non corretto "
688
+
689
+ #: ../dashboard.php:262
690
+ msgid "Unable to send notification email"
691
+ msgstr "Non è stato possibile inviare l'email di notifica"
692
+
693
+ #: ../dashboard.php:287 ../dashboard.php:1220
694
+ msgid "Settings saved"
695
+ msgstr "Impostazioni salvate"
696
+
697
+ #: ../dashboard.php:695
698
+ msgid "Network:"
699
+ msgstr "Rete"
700
+
701
+ #: ../dashboard.php:709
702
+ msgid "Add network to the Black List"
703
+ msgstr "Aggiungi rete alla Black List"
704
+
705
+ #: ../dashboard.php:1203
706
+ msgid "Attention! Citadel mode is now active. Nobody is able to log in."
707
+ msgstr "Attenzione! La modalità Citadel è attiva. Nessuno è in grado di effettuare il login."
708
+
709
+ #: ../whois.php:210 ../common.php:374
710
+ msgid "Unknown"
711
+ msgstr "Sconosciuto"
712
+
713
+ #. Description of the plugin
714
+ #:
715
+ msgid "Protects site from brute force attacks, bots and hackers. Antispam protection with reCAPTCHA. Comprehensive control of user activity. Restrict login by IP access lists. Limit login attempts. Feel free to contact developer on the site <a href=\"http://wpcerber.com\">wpcerber.com</a>."
716
+ msgstr "Protegge il sito da attacchi di forza bruta, bot e hacker. Protezione antispam con reCAPTCHA. Controllo completo delle attività degli utenti. Limita il login attraverso le liste di accesso degli IP. Limita i tentativi di accesso. Sentitevi liberi di contattare lo sviluppatore sul sito <a href=\"http://wpcerber.com\"> wpcerber.com </a>."
717
+
718
+ #. Author of the plugin
719
+ #:
720
+ msgid "Gregory"
721
+ msgstr "Gregory"
722
+
723
+ #: ../wp-cerber.php:560 ../wp-cerber.php:572 ../wp-cerber.php:579 ../wp-cerber.
724
+ #: php:717 ../wp-cerber.php:922 ../wp-cerber.php:927 ../wp-cerber.php:932 ../wp-
725
+ #: cerber.php:938 ../wp-cerber.php:968 ../wp-cerber.php:1062 ../common.php:128 ..
726
+ #: /common.php:181 ../common.php:185 ../settings.php:513
727
+ msgid "ERROR:"
728
+ msgstr "ERRORE:"
729
+
730
+ #: ../wp-cerber.php:589
731
+ msgid "Human verification failed. Please click the square box in the reCAPTCHA block below."
732
+ msgstr "Verifica fallita. Fai clic sulla casella quadrata nel blocco reCAPTCHA di seguito."
733
+
734
+ #: ../wp-cerber.php:728
735
+ msgid "<strong>ERROR</strong>: The password you entered for the username %s is incorrect."
736
+ msgstr "<strong>ERRORE</strong>: La password inserita per lo username %s non è corretta."
737
+
738
+ #: ../wp-cerber.php:933
739
+ msgid "Username is not allowed. Please choose another one."
740
+ msgstr "Non è consentito utilizzare questo nome utente. Sceglierne un altro."
741
+
742
+ #: ../wp-cerber.php:2395
743
+ msgid "unspecified"
744
+ msgstr "non specificato"
745
+
746
+ #: ../wp-cerber.php:2398
747
+ msgid "Number of lockouts is increasing"
748
+ msgstr "Numero di blocchi in aumento"
749
+
750
+ #: ../wp-cerber.php:2403
751
+ msgid "View activity for this IP"
752
+ msgstr "Vedi attività per questo IP"
753
+
754
+ #: ../wp-cerber.php:2407 ../wp-cerber.php:2409
755
+ msgid "A new version of WP Cerber is available to install"
756
+ msgstr "È disponibile una nuova versione di WP Cerber"
757
+
758
+ #: ../wp-cerber.php:2408
759
+ msgid "Hi!"
760
+ msgstr "Ciao!"
761
+
762
+ #: ../wp-cerber.php:2410 ../wp-cerber.php:2421
763
+ msgid "Website"
764
+ msgstr "Sito web"
765
+
766
+ #: ../wp-cerber.php:2413 ../wp-cerber.php:2414
767
+ msgid "The WP Cerber security plugin has been deactivated"
768
+ msgstr "Il plugin di sicurezza WP Cerber è stato disattivato"
769
+
770
+ #: ../wp-cerber.php:2416
771
+ msgid "Not logged in"
772
+ msgstr "Non loggato"
773
+
774
+ #: ../wp-cerber.php:2422
775
+ msgid "By user"
776
+ msgstr "Dall'Utente "
777
+
778
+ #: ../wp-cerber.php:2423
779
+ msgid "From IP address"
780
+ msgstr "Dall'indirizzo IP"
781
+
782
+ #: ../wp-cerber.php:2426
783
+ msgid "From country"
784
+ msgstr "Dalla Nazione"
785
+
786
+ #: ../wp-cerber.php:2430
787
+ msgid "The WP Cerber security plugin is now active"
788
+ msgstr "Il plugin di protezione WP Cerber è attivo"
789
+
790
+ #: ../wp-cerber.php:2822
791
+ msgid "Your IP address is added to the"
792
+ msgstr "Il tuo indirizzo IP è stato aggiunto al"
793
+
794
+ #: ../wp-cerber.php:2831
795
+ msgid "Import settings"
796
+ msgstr "Importa impostazioni"
797
+
798
+ #: ../settings.php:155
799
+ msgid "Notification limit"
800
+ msgstr "Limiti di notifica"
801
+
802
+ #: ../settings.php:155
803
+ msgid "notification letters allowed per hour (0 means unlimited)"
804
+ msgstr "email di notifiche consentite per ora (0 significa illimitato)"
805
+
806
+ #: ../settings.php:110
807
+ msgid "User related settings"
808
+ msgstr "Impostazioni correlate agli utenti"
809
+
810
+ #: ../settings.php:111
811
+ msgid "Prohibited usernames"
812
+ msgstr "Nomi utente proibiti"
813
+
814
+ #: ../settings.php:111
815
+ msgid "Usernames from this list are not allowed to log in or register. Any IP address, have tried to use any of these usernames, will be immediately blocked. Use comma to separate logins."
816
+ msgstr "I nomi utente di questo elenco non possono accedere o registrarsi. Qualsiasi indirizzo IP, che ha cercato di utilizzare uno di questi nomi utente, sarà immediatamente bloccato. Usa la virgola per separare i nominativi."
817
+
818
+ #: ../settings.php:112
819
+ msgid "User session expire"
820
+ msgstr "Sessione utente scade"
821
+
822
+ #: ../settings.php:112
823
+ msgid "in minutes (leave empty to use default WP value)"
824
+ msgstr "In minuti (lasciare vuoto per utilizzare il valore predefinito WP)"
825
+
826
+ #: ../settings.php:129
827
+ msgid "reCAPTCHA settings"
828
+ msgstr "Impostazioni reCAPTCHA"
829
+
830
+ #: ../settings.php:130
831
+ msgid "Site key"
832
+ msgstr "Chiave del sito"
833
+
834
+ #: ../settings.php:131
835
+ msgid "Secret key"
836
+ msgstr "Chiave segreta"
837
+
838
+ #: ../settings.php:134
839
+ msgid "Enable reCAPTCHA for WordPress registration form"
840
+ msgstr "Abilita reCAPTCHA per il modulo di registrazione di WordPress"
841
+
842
+ #: ../settings.php:137
843
+ msgid "Lost password form"
844
+ msgstr "Modulo per il recupero della password dimenticata"
845
+
846
+ #: ../settings.php:140
847
+ msgid "Login form"
848
+ msgstr "Modulo di accesso"
849
+
850
+ #: ../settings.php:140
851
+ msgid "Enable reCAPTCHA for WordPress login form"
852
+ msgstr "Attiva reCAPTCHA per il modulo di accesso di WordPress"
853
+
854
+ #: ../settings.php:195
855
+ msgid "Before you can start using reCAPTCHA, you have to obtain Site key and Secret key on the Google website"
856
+ msgstr "Prima di iniziare a utilizzare reCAPTCHA, è necessario ottenere la Chiave Sito e la Chiave Segreta sul sito web di Google"
857
+
858
+ #: ../cerber-lab.php:580 ../settings.php:196
859
+ msgid "Know more"
860
+ msgstr "Saperne di più"
861
+
862
+ #: ../dashboard.php:744 ../settings.php:215
863
+ msgid "WP Cerber Security"
864
+ msgstr "WP Cerber Security"
865
+
866
+ #: ../settings.php:235
867
+ msgid "Users"
868
+ msgstr "Utenti"
869
+
870
+ #: ../common.php:333
871
+ msgid "User created"
872
+ msgstr "Utente creato"
873
+
874
+ #: ../dashboard.php:1076 ../common.php:334
875
+ msgid "User registered"
876
+ msgstr "Utente registrato"
877
+
878
+ #: ../common.php:357
879
+ msgid "reCAPTCHA verification failed"
880
+ msgstr "Verifica reCAPTCHA fallita"
881
+
882
+ #: ../common.php:358
883
+ msgid "reCAPTCHA settings are incorrect"
884
+ msgstr "le impostazioni reCAPTCHA sono non correte"
885
+
886
+ #: ../common.php:361
887
+ msgid "Attempt to access prohibited URL"
888
+ msgstr "Tentativo di accesso ad URL proibita"
889
+
890
+ #: ../common.php:363 ../common.php:378
891
+ msgid "Attempt to log in with prohibited username"
892
+ msgstr "Tentativo di accesso con username proibito"
893
+
894
+ #: ../settings.php:84
895
+ msgid "Cerber Lab connection"
896
+ msgstr "Connessione al Cerber Lab"
897
+
898
+ #: ../settings.php:84
899
+ msgid "Send malicious IP addresses to the Cerber Lab"
900
+ msgstr "Invia indirizzi IP dannosi al Cerberus Lab"
901
+
902
+ #: ../settings.php:85
903
+ msgid "Cerber Lab protocol"
904
+ msgstr "Protocollo Cerber Lab"
905
+
906
+ #: ../settings.php:121 ../settings.php:134
907
+ msgid "Registration form"
908
+ msgstr "Form di registrazione"
909
+
910
+ #: ../settings.php:135
911
+ msgid "Enable reCAPTCHA for WooCommerce registration form"
912
+ msgstr "Attiva reCAPTCHA per il modulo di registrazione WooCommerce"
913
+
914
+ #: ../settings.php:137
915
+ msgid "Enable reCAPTCHA for WordPress lost password form"
916
+ msgstr "Attiva reCAPTCHA per il modulo di recupero della password di WordPress"
917
+
918
+ #: ../settings.php:138
919
+ msgid "Enable reCAPTCHA for WooCommerce lost password form"
920
+ msgstr "Abilita reCAPTCHA per il form del recupero della password di WooCommerce"
921
+
922
+ #: ../settings.php:141
923
+ msgid "Enable reCAPTCHA for WooCommerce login form"
924
+ msgstr "Attiva reCAPTCHA per il modulo di accesso WooCommerce"
925
+
926
+ #: ../common.php:359
927
+ msgid "Request to the Google reCAPTCHA service failed"
928
+ msgstr "Richiesta al servizio Google reCAPTCHA non riuscita"
929
+
930
+ #: ../dashboard.php:1068 ../dashboard.php:1097
931
+ msgid "View all"
932
+ msgstr "Vedi tutto"
933
+
934
+ #: ../dashboard.php:1098
935
+ msgid "Recently locked out IP addresses"
936
+ msgstr "Indirizzi IP bloccati di recente"
937
+
938
+ #: ../cerber-lab.php:578
939
+ msgid "OK, nail them all"
940
+ msgstr "OK, chiudili tutti"
941
+
942
+ #: ../cerber-lab.php:579
943
+ msgid "NO, maybe later"
944
+ msgstr "NO, forse più tardi"
945
+
946
+ #: ../dashboard.php:746 ../dashboard.php:910 ../dashboard.php:1412 ../settings.
947
+ #: php:220
948
+ msgid "Dashboard"
949
+ msgstr "Bacheca"
950
+
951
+ #: ../cerber-lab.php:576
952
+ msgid "Want to make WP Cerber even more powerful?"
953
+ msgstr "Vuoi rendere WP Cerber ancora più potente?"
954
+
955
+ #: ../cerber-lab.php:577
956
+ msgid "Allow WP Cerber to send locked out malicious IP addresses to Cerber Lab. This helps the plugin team to develop new algorithms for WP Cerber that will defend WordPress against new threats and botnets that are appearing everyday. You can disable the sending in the plugin settings at any time."
957
+ msgstr "Consenti a WP Cerber di inviare indirizzi IP dannosi al Cerber Lab. Questo aiuta il team a sviluppare nuovi algoritmi per WP Cerber che difenderanno WordPress contro nuove minacce e botnet che nascono ogni giorno. Puoi disattivare l'invio delle impostazioni del plugin in qualsiasi momento."
958
+
959
+ #: ../dashboard.php:355
960
+ msgid "IP address"
961
+ msgstr "Indirizzo IP"
962
+
963
+ #: ../dashboard.php:355
964
+ msgid "User login"
965
+ msgstr "Login utente"
966
+
967
+ #: ../dashboard.php:355
968
+ msgid "User ID"
969
+ msgstr "ID Utente"
970
+
971
+ #: ../dashboard.php:511
972
+ msgid "Export"
973
+ msgstr "Esporta"
974
+
975
+ #: ../dashboard.php:521
976
+ msgid "All activities"
977
+ msgstr "Tutte le attività"
978
+
979
+ #: ../dashboard.php:530
980
+ msgid "Search for IP or username"
981
+ msgstr "Ricerca per IP o Nome Utente"
982
+
983
+ #: ../dashboard.php:530
984
+ msgid "Filter"
985
+ msgstr "Filtro"
986
+
987
+ #: ../dashboard.php:746
988
+ msgid "Cerber Dashboard"
989
+ msgstr "Pannello di Cerber"
990
+
991
+ #: ../dashboard.php:749
992
+ msgid "Cerber tools"
993
+ msgstr "Strumenti di Cerber"
994
+
995
+ #: ../dashboard.php:1325
996
+ msgid "Subscribe"
997
+ msgstr "Sottoscrizione"
998
+
999
+ #: ../dashboard.php:1326
1000
+ msgid "Unsubscribe"
1001
+ msgstr "Rimuovi sottoscrizione"
1002
+
1003
+ #: ../dashboard.php:1354
1004
+ msgid "You've subscribed"
1005
+ msgstr "Hai effettuato la sottoscrizione"
1006
+
1007
+ #: ../dashboard.php:1357
1008
+ msgid "You've unsubscribed"
1009
+ msgstr "Hai rimosso la sottoscrizione"
1010
+
1011
+ #: ../wp-cerber.php:2441 ../wp-cerber.php:2442
1012
+ msgid "A new activity has been recorded"
1013
+ msgstr "È stata registrata una nuova attività"
1014
+
1015
+ #: ../wp-cerber.php:2700
1016
+ msgid "User"
1017
+ msgstr "Utente"
1018
+
1019
+ #: ../wp-cerber.php:2708
1020
+ msgid "Search string"
1021
+ msgstr "Stringa di ricerca"
1022
+
1023
+ #: ../wp-cerber.php:2721
1024
+ msgid "To unsubscribe click here"
1025
+ msgstr "Per annullare l'iscrizione clicca qui"
1026
+
1027
+ #: ../settings.php:88
1028
+ msgid "Preferences"
1029
+ msgstr "Preferenze"
1030
+
1031
+ #: ../settings.php:90
1032
+ msgid "Date format"
1033
+ msgstr "Formato data"
1034
+
1035
+ #: ../settings.php:90
1036
+ msgid "if empty, the default format %s will be used"
1037
+ msgstr "Se vuoto, verrà utilizzato il formato predefinito %s"
1038
+
1039
+ #: ../dashboard.php:906 ../settings.php:157
1040
+ msgid "Push notifications"
1041
+ msgstr "Notifica push"
1042
+
1043
+ #: ../settings.php:152
1044
+ msgid "Email notifications"
1045
+ msgstr "Email delle notifiche"
1046
+
1047
+ #: ../settings.php:154
1048
+ msgid "Use comma to specify multiple values"
1049
+ msgstr "Utilizzare la virgola per specificare più valori"
1050
+
1051
+ #: ../settings.php:164
1052
+ msgid "All connected devices"
1053
+ msgstr "Tutte le periferiche connesse"
1054
+
1055
+ #: ../settings.php:165
1056
+ msgid "No devices found"
1057
+ msgstr "Nessuna periferica trovata."
1058
+
1059
+ #: ../settings.php:167
1060
+ msgid "Not available"
1061
+ msgstr "Non disponibile"
1062
+
1063
+ #: ../common.php:355
1064
+ msgid "Password reset requested"
1065
+ msgstr "Richiesto reset della password"
1066
+
1067
+ #: ../common.php:379
1068
+ msgid "Limit on failed reCAPTCHA verifications is reached"
1069
+ msgstr "È stato raggiunto il limite delle verifiche reCAPTCHA fallite"
1070
+
1071
+ #: ../common.php:432
1072
+ msgid "%s ago"
1073
+ msgstr "%s fa"
1074
+
1075
+ #: ../settings.php:61
1076
+ msgid "Apply limit login rules to IP addresses in the White IP Access List"
1077
+ msgstr "Applicare i limiti delle regole di accesso agli indirizzi IP presenti nella White List"
1078
+
1079
+ #: ../settings.php:70
1080
+ msgid "Display 404 page"
1081
+ msgstr "Mostra pagina 404"
1082
+
1083
+ #: ../settings.php:132
1084
+ msgid "Invisible reCAPTCHA"
1085
+ msgstr "ReCAPTCHA invisibile"
1086
+
1087
+ #: ../settings.php:132
1088
+ msgid "Enable invisible reCAPTCHA"
1089
+ msgstr "Abilita reCAPTCHA invisibile"
1090
+
1091
+ #: ../settings.php:132
1092
+ msgid "(do not enable it unless you get and enter the Site and Secret keys for the invisible version)"
1093
+ msgstr "(Non abilitare a meno che non si ottengano e si inseriscano la Chiave del sito e la Chiave Segreta per la versione invisibile)"
1094
+
1095
+ #: ../settings.php:143
1096
+ msgid "Enable reCAPTCHA for WordPress comment form"
1097
+ msgstr "Attiva reCAPTCHA per il modulo dei commenti di WordPress"
1098
+
1099
+ #: ../settings.php:144
1100
+ msgid "Disable reCAPTCHA for logged in users"
1101
+ msgstr "Disattiva reCAPTCHA per gli utenti connessi"
1102
+
1103
+ #: ../settings.php:146
1104
+ msgid "Limit attempts"
1105
+ msgstr "Limiti dei tentativi"
1106
+
1107
+ #: ../settings.php:146
1108
+ msgid "Lock out IP address for %s minutes after %s failed attempts within %s minutes"
1109
+ msgstr "Blocca l'indirizzo IP per %s minuti dopo %s tentativi non riusciti entro %s minuti "
1110
+
1111
+ #: ../settings.php:189
1112
+ msgid "In the Citadel mode nobody is able to log in except IPs from the White IP Access List. Active user sessions will not be affected."
1113
+ msgstr "Nella modalità Citadel nessuno è in grado di accedere, tranne i gli indirizzi IP presenti nell'elenco della White List. Le sessioni utente attive non saranno interessate."
1114
+
1115
+ #: ../dashboard.php:355 ../dashboard.php:502
1116
+ msgid "Event"
1117
+ msgstr "Evento"
1118
+
1119
+ #: ../dashboard.php:1049
1120
+ msgid "Spam comments denied"
1121
+ msgstr "Commenti spam negati"
1122
+
1123
+ #: ../dashboard.php:1050
1124
+ msgid "Malicious IP addresses detected"
1125
+ msgstr "Rilevati indirizzi IP malevoli"
1126
+
1127
+ #: ../dashboard.php:1051
1128
+ msgid "Lockouts occurred"
1129
+ msgstr "Blocchi avvenuti"
1130
+
1131
+ #: ../dashboard.php:1052
1132
+ msgid "Locked out IP now"
1133
+ msgstr "Blocco Attuale dell'IP"
1134
+
1135
+ #: ../dashboard.php:1077
1136
+ msgid "All suspicious activity"
1137
+ msgstr "Tutte le attività sospette"
1138
+
1139
+ #: ../wp-cerber.php:923 ../wp-cerber.php:939
1140
+ msgid "You are not allowed to register."
1141
+ msgstr "Non è consentito registrarsi."
1142
+
1143
+ #: ../common.php:344
1144
+ msgid "Spam comment denied"
1145
+ msgstr "Il commento spam è stato negato"
1146
+
1147
+ #: ../common.php:350
1148
+ msgid "by Cerber Lab"
1149
+ msgstr "da Cerber Lab"
1150
+
1151
+ #: ../common.php:365
1152
+ msgid "Attempt to log in denied"
1153
+ msgstr "Tentativo di accesso negato"
1154
+
1155
+ #: ../common.php:366
1156
+ msgid "Attempt to register denied"
1157
+ msgstr "Tentativo di registrazione negato"
1158
+
1159
+ #: ../dashboard.php:1048
1160
+ msgid "Malicious activities mitigated"
1161
+ msgstr "Attività dannose attenuate"
1162
+
1163
+ #: ../dashboard.php:748
1164
+ msgid "Cerber antispam settings"
1165
+ msgstr "Impostazioni dell'Antispam di Cerber"
1166
+
1167
+ #: ../dashboard.php:748 ../settings.php:143
1168
+ msgid "Antispam"
1169
+ msgstr "Antispam"
1170
+
1171
+ #: ../settings.php:119
1172
+ msgid "Cerber antispam engine"
1173
+ msgstr "Cerber antispam engine"
1174
+
1175
+ #: ../settings.php:120
1176
+ msgid "Comment form"
1177
+ msgstr "Modulo dei commenti"
1178
+
1179
+ #: ../settings.php:120
1180
+ msgid "Protect comment form with bot detection engine"
1181
+ msgstr "Proteggi il modulo dei commenti con il motore di rilevazione dei bot"
1182
+
1183
+ #: ../settings.php:121
1184
+ msgid "Protect registration form with bot detection engine"
1185
+ msgstr "Proteggi il modulo di registrazione con il motore di rilevazione dei bot"
1186
+
1187
+ #: ../cerber-tools.php:48
1188
+ msgid "Export & Import"
1189
+ msgstr "Esporta & Importa"
1190
+
1191
+ #: ../cerber-tools.php:49
1192
+ msgid "Diagnostic"
1193
+ msgstr "Diagnostica"
1194
+
1195
+ #: ../cerber-tools.php:50
1196
+ msgid "License"
1197
+ msgstr "Licenza"
1198
+
1199
+ #: ../cerber-tools.php:267
1200
+ msgid "Antispam and bot detection settings"
1201
+ msgstr "Impostazioni rilevamento di antispam e bot"
1202
+
1203
+ #. Description of the plugin
1204
+ #:
1205
+ msgid "Protects site from brute force attacks, bots and hackers. Antispam protection with reCAPTCHA. Comprehensive control of user activity. Restrict login by IP access lists. Limit login attempts. Know more: <a href=\"http://wpcerber.com\">wpcerber.com</a>."
1206
+ msgstr ""
1207
+
1208
+ #: ../wp-cerber.php:1062
1209
+ msgid "Sorry, human verification failed."
1210
+ msgstr ""
1211
+
1212
+ #: ../common.php:380
1213
+ msgid "Bot activity is detected"
1214
+ msgstr ""
1215
+
1216
+ #: ../settings.php:124
1217
+ msgid "Comment processing"
1218
+ msgstr ""
1219
+
1220
+ #: ../settings.php:125
1221
+ msgid "If a spam comment detected"
1222
+ msgstr ""
1223
+
1224
+ #: ../settings.php:126
1225
+ msgid "Trash spam comments"
1226
+ msgstr ""
1227
+
1228
+ #: ../settings.php:126
1229
+ msgid "Move spam comments to trash after"
1230
+ msgstr ""
1231
+
languages/wp-cerber-nb_NO.mo ADDED
Binary file
languages/wp-cerber-nb_NO.po ADDED
@@ -0,0 +1,1128 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "MIME-Version: 1.0\n"
4
+ "Content-Type: text/plain; charset=UTF-8\n"
5
+ "Content-Transfer-Encoding: 8bit\n"
6
+ "X-Generator: POEditor.com\n"
7
+ "Project-Id-Version: WP Cerber\n"
8
+ "Language: nb\n"
9
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
10
+
11
+ #: ../settings.php:59
12
+ msgid "Limit login attempts"
13
+ msgstr "Begrens innloggingsforsøk"
14
+
15
+ #: ../settings.php:60
16
+ msgid "Attempts"
17
+ msgstr "Forsøk"
18
+
19
+ #: ../settings.php:61
20
+ msgid "Lockout duration"
21
+ msgstr "Varighet for utestengelse"
22
+
23
+ #: ../common.php:353 ../settings.php:61 ../settings.php:78
24
+ msgid "minutes"
25
+ msgstr "minutter"
26
+
27
+ #: ../settings.php:62
28
+ msgid "Aggressive lockout"
29
+ msgstr "Aggressiv utestengelse"
30
+
31
+ #: ../settings.php:64
32
+ msgid "Site connection"
33
+ msgstr "Sidetilkobling"
34
+
35
+ #: ../settings.php:66
36
+ msgid "Proactive security rules"
37
+ msgstr "Proaktive sikkerhetsregler"
38
+
39
+ #: ../settings.php:67
40
+ msgid "Block subnet"
41
+ msgstr "Blokkér subnet"
42
+
43
+ #: ../settings.php:70
44
+ msgid "Request wp-login.php"
45
+ msgstr "Kobling til wp-login.php"
46
+
47
+ #: ../settings.php:70
48
+ msgid "Immediately block IP after any request to wp-login.php"
49
+ msgstr "Blokkér umiddelbart IP-en etter ethvert forsøk på å koble til wp-login.php"
50
+
51
+ #: ../settings.php:69
52
+ msgid "Redirect dashboard requests"
53
+ msgstr "Omdiriger kontrollpanel-koblinger"
54
+
55
+ #: ../settings.php:72
56
+ msgid "Custom login page"
57
+ msgstr "Egendefinert innloggingsside"
58
+
59
+ #: ../settings.php:73
60
+ msgid "Custom login URL"
61
+ msgstr "Egendefinert URL for innlogging"
62
+
63
+ #: ../settings.php:73
64
+ msgid "must not overlap with the existing pages or posts slug"
65
+ msgstr "må ikke være lik eksisterende sider eller slug"
66
+
67
+ #: ../settings.php:74
68
+ msgid "Disable wp-login.php"
69
+ msgstr "Deaktiver wp-login.php"
70
+
71
+ #: ../settings.php:74
72
+ msgid "Block direct access to wp-login.php and return HTTP 404 Not Found Error"
73
+ msgstr "Blokkér direkte tilgang til wp-login.php og returnér HTTP 404 Ikke Funnet-feil."
74
+
75
+ #: ../dashboard.php:854 ../settings.php:76
76
+ msgid "Citadel mode"
77
+ msgstr "Vakttårnsmodus"
78
+
79
+ #: ../settings.php:77
80
+ msgid "Threshold"
81
+ msgstr "Terskel"
82
+
83
+ #: ../settings.php:78
84
+ msgid "Duration"
85
+ msgstr "Varighet"
86
+
87
+ #: ../wp-cerber.php:2288 ../settings.php:63 ../settings.php:80 ../settings.php:235
88
+ msgid "Notifications"
89
+ msgstr "Varsling"
90
+
91
+ #: ../settings.php:80
92
+ msgid "Send notification to admin email"
93
+ msgstr "Send varsel til admins e-postadresse"
94
+
95
+ #: ../dashboard.php:863 ../dashboard.php:1304 ../wp-cerber.php:2286 ../settings.
96
+ #: php:228 ../cerber-tools.php:59 ../cerber-tools.php:68 ../cerber-tools.php:178
97
+ msgid "Access Lists"
98
+ msgstr "Tilgangsliste"
99
+
100
+ #: ../dashboard.php:330 ../dashboard.php:445 ../dashboard.php:861 ../dashboard.
101
+ #: php:996 ../wp-cerber.php:2175 ../settings.php:87 ../settings.php:220
102
+ msgid "Activity"
103
+ msgstr "Aktivitet"
104
+
105
+ #: ../dashboard.php:862 ../settings.php:223
106
+ msgid "Lockouts"
107
+ msgstr "Utestengelser"
108
+
109
+ #: ../settings.php:326
110
+ msgid "%s allowed retries in %s minutes"
111
+ msgstr "%s tillatte forsøk på %s minutter"
112
+
113
+ #: ../settings.php:343
114
+ msgid "Enable after %s failed login attempts in last %s minutes"
115
+ msgstr "Aktivér etter %s mislykkede innloggingsforsøk på %s minutter"
116
+
117
+ #: ../dashboard.php:77 ../dashboard.php:445 ../wp-cerber.php:2176
118
+ msgid "IP"
119
+ msgstr "IP-adresse"
120
+
121
+ #: ../dashboard.php:330 ../dashboard.php:445
122
+ msgid "Date"
123
+ msgstr "Dato"
124
+
125
+ #: ../dashboard.php:330 ../dashboard.php:445
126
+ msgid "Local User"
127
+ msgstr "Lokal bruker"
128
+
129
+ #: ../dashboard.php:330 ../dashboard.php:445 ../wp-cerber.php:2184
130
+ msgid "Username used"
131
+ msgstr "Brukernavn brukt"
132
+
133
+ #: ../dashboard.php:83
134
+ msgid "Showing last %d records from %d"
135
+ msgstr "Viser siste %d oppføringer fra %d"
136
+
137
+ #: ../common.php:255
138
+ msgid "Logged in"
139
+ msgstr "Logget inn"
140
+
141
+ #: ../common.php:256
142
+ msgid "Logged out"
143
+ msgstr "Logget ut"
144
+
145
+ #: ../common.php:257
146
+ msgid "Login failed"
147
+ msgstr "Innlogging feilet"
148
+
149
+ #: ../common.php:260
150
+ msgid "IP blocked"
151
+ msgstr "IP blokkert"
152
+
153
+ #: ../common.php:261
154
+ msgid "Subnet blocked"
155
+ msgstr "Subnet blokkert"
156
+
157
+ #: ../common.php:263
158
+ msgid "Citadel activated!"
159
+ msgstr "Vakttårn aktivert!"
160
+
161
+ #: ../dashboard.php:430 ../dashboard.php:615 ../common.php:265
162
+ msgid "Locked out"
163
+ msgstr "Utestengt"
164
+
165
+ #: ../common.php:266
166
+ msgid "IP blacklisted"
167
+ msgstr "IP svartelistet"
168
+
169
+ #: ../common.php:269
170
+ msgid "Password changed"
171
+ msgstr "Passord endret"
172
+
173
+ #: ../dashboard.php:74 ../dashboard.php:123
174
+ msgid "Remove"
175
+ msgstr "Fjern"
176
+
177
+ #: ../dashboard.php:260
178
+ msgid "Lockout for %s was removed"
179
+ msgstr "Utestengelse for %s ble fjernet"
180
+
181
+ #: ../dashboard.php:102 ../dashboard.php:425 ../dashboard.php:610 ../dashboard.
182
+ #: php:852 ../wp-cerber.php:2280 ../settings.php:185
183
+ msgid "White IP Access List"
184
+ msgstr "Hvit IP-tilgangsliste"
185
+
186
+ #: ../dashboard.php:104 ../dashboard.php:426 ../dashboard.php:612 ../dashboard.
187
+ #: php:853
188
+ msgid "Black IP Access List"
189
+ msgstr "Svart IP-tilgangsliste"
190
+
191
+ #: ../dashboard.php:126
192
+ msgid "List is empty"
193
+ msgstr "Listen er tom"
194
+
195
+ #: ../dashboard.php:148
196
+ msgid "Address %s was added to White IP Access List"
197
+ msgstr "Adressen %s ble lagt til den hvite IP-tilgangslisten"
198
+
199
+ #: ../dashboard.php:161
200
+ msgid "Address %s was added to Black IP Access List"
201
+ msgstr "Adressen %s ble lagt til den svarte IP-tilgangslisten"
202
+
203
+ #: ../wp-cerber.php:1889
204
+ msgid "Citadel mode is activated after %d failed login attempts in %d minutes."
205
+ msgstr "Vakttårnsmodus ble aktivert etter %d mislykkede innloggingsforsøk på %d minutter"
206
+
207
+ #: ../dashboard.php:1117
208
+ msgid "View Activity"
209
+ msgstr "Se aktivitet"
210
+
211
+ #: ../cerber-tools.php:58 ../cerber-tools.php:67
212
+ msgid "Settings"
213
+ msgstr "Innstillinger"
214
+
215
+ #: ../dashboard.php:755
216
+ msgid "Last login"
217
+ msgstr "Siste innlogging"
218
+
219
+ #: ../dashboard.php:782 ../dashboard.php:835
220
+ msgid "Never"
221
+ msgstr "Aldri"
222
+
223
+ #: ../dashboard.php:1038 ../dashboard.php:1433
224
+ msgid "Are you sure?"
225
+ msgstr "Er du sikker?"
226
+
227
+ #: ../dashboard.php:685
228
+ msgid "WP Cerber Settings"
229
+ msgstr "WP Cerber-innstillinger"
230
+
231
+ #: ../settings.php:64
232
+ msgid "My site is behind a reverse proxy"
233
+ msgstr "Min side er bak en reverse proxy"
234
+
235
+ #: ../settings.php:68
236
+ msgid "Non-existent users"
237
+ msgstr "Ikke-eksisterende brukere"
238
+
239
+ #: ../settings.php:68
240
+ msgid "Immediately block IP when attempting to login with a non-existent username"
241
+ msgstr "Blokkér umiddelbart IP når noen prøver å logge inn med et ikke-eksisterende brukernavn"
242
+
243
+ #: ../settings.php:69
244
+ msgid "Disable automatic redirecting to the login page when /wp-admin/ is requested by an unauthorized request"
245
+ msgstr "Deaktivér automatisk omdirigering til innloggingssiden når /wp-admin/ blir forsøkt tilkoblet fra en uatorisert forespørsel"
246
+
247
+ #: ../settings.php:167
248
+ msgid "Make your protection smarter!"
249
+ msgstr "Gjør din beskyttelse smartere!"
250
+
251
+ #: ../settings.php:171
252
+ msgid "Please enable Permalinks to use this feature. Set Permalink Settings to something other than Default."
253
+ msgstr "Vennligst "
254
+
255
+ #: ../settings.php:174
256
+ msgid "Be careful when enabling this options. If you forget the custom login URL you will not be able to login."
257
+ msgstr "Vær forsiktig når du velger dette alternativet. Glemmer du din nye URL for innlogging, vil du ikke kunne logge deg inn."
258
+
259
+ #: ../wp-cerber.php:2285 ../settings.php:225
260
+ msgid "Main Settings"
261
+ msgstr "Hovedinnstillinger"
262
+
263
+ #: ../settings.php:239
264
+ msgid "Help"
265
+ msgstr "Hjelp"
266
+
267
+ #: ../settings.php:331
268
+ msgid "Increase lockout duration to %s hours after %s lockouts in the last %s hours"
269
+ msgstr "Øk varigheten av utestengelser til %s timer etter %s utestengelser i løpet av de siste %s timer"
270
+
271
+ #: ../wp-cerber.php:190
272
+ msgid "You are not allowed to log in. Ask your administrator for assistance."
273
+ msgstr "Du har ikke tillatelse til å logge inn. Spør din administrator om du trenger hjelp."
274
+
275
+ #: ../wp-cerber.php:196
276
+ msgid "You have reached the login attempts limit. Please try again in %d minutes."
277
+ msgstr "Du har nådd grensen for antall tillatte innloggingsforsøk. Vennligst prøv igjen om %d minutter."
278
+
279
+ #: ../wp-cerber.php:214
280
+ msgid "You have only one attempt remaining."
281
+ msgid_plural "You have %d attempts remaining."
282
+ msgstr[0] "Du har kun ett forsøk igjen."
283
+ msgstr[1] "Du har %d forsøk igjen."
284
+
285
+ #: ../dashboard.php:458
286
+ msgid "No activity has been logged."
287
+ msgstr "Ingen aktivitet har blitt registrert."
288
+
289
+ #: ../dashboard.php:77
290
+ msgid "Expires"
291
+ msgstr "Utgår"
292
+
293
+ #: ../dashboard.php:89
294
+ msgid "No lockouts at the moment. The sky is clear."
295
+ msgstr "Ingen utestengelser akkurat nå. Kysten er klar."
296
+
297
+ #: ../dashboard.php:102
298
+ msgid "These IPs will never be locked out"
299
+ msgstr "Disse IP-er vil aldri bli utestengt"
300
+
301
+ #: ../dashboard.php:106
302
+ msgid "Your IP"
303
+ msgstr "Din IP"
304
+
305
+ #: ../dashboard.php:157
306
+ msgid "You can't add your IP address"
307
+ msgstr "Du kan ikke legge til din IP-adresse"
308
+
309
+ #: ../wp-cerber.php:1890
310
+ msgid "Last failed attempt was at %s from IP %s with user login: %s."
311
+ msgstr "Siste mislykkede forsøk var %s fra IP %s med brukernavn %s."
312
+
313
+ #: ../wp-cerber.php:1950
314
+ msgid "Change notification settings"
315
+ msgstr "Endre varslingsinnstillinger"
316
+
317
+ #: ../wp-cerber.php:2263
318
+ msgid "Can't activate WP Cerber due to a database error."
319
+ msgstr "Kunne ikke aktivere WP Cerber på grunn av en databasefeil."
320
+
321
+ #: ../settings.php:338
322
+ msgid "Notify admin if the number of active lockouts above"
323
+ msgstr "Varsle administratoren om antallet aktive utestengelser overskrider"
324
+
325
+ #: ../common.php:351 ../settings.php:88
326
+ msgid "days"
327
+ msgstr "dager"
328
+
329
+ #: ../dashboard.php:806
330
+ msgid "Cerber Quick View"
331
+ msgstr "Cerber hurtigvisning"
332
+
333
+ #: ../dashboard.php:85
334
+ msgid "Hint"
335
+ msgstr "Hint"
336
+
337
+ #: ../dashboard.php:85
338
+ msgid "To view activity, click on the IP"
339
+ msgstr "For å se aktivitet klikk på IP-en"
340
+
341
+ #: ../dashboard.php:123 ../dashboard.php:642
342
+ msgid "Check for activity"
343
+ msgstr "Sjekk etter aktivitet"
344
+
345
+ #: ../settings.php:67
346
+ msgid "Always block entire subnet Class C of intruders IP"
347
+ msgstr "Alltid blokkér hele subnet Class C av inntrengerens IP"
348
+
349
+ #: ../settings.php:80 ../settings.php:340
350
+ msgid "Click to send test"
351
+ msgstr "Klikk for å sende test"
352
+
353
+ #: ../settings.php:427
354
+ msgid "Attention! You have changed the login URL! The new login URL is"
355
+ msgstr "OBS! Du har endret innloggings-adressen. Din nye URL for innlogging er"
356
+
357
+ #: ../dashboard.php:754
358
+ msgid "Comments"
359
+ msgstr "Kommentarer"
360
+
361
+ #: ../dashboard.php:757
362
+ msgid "Date of registration"
363
+ msgstr "Registreringsdato"
364
+
365
+ #: ../dashboard.php:252
366
+ msgid "Message has been sent to "
367
+ msgstr "Melding har blitt sendt til "
368
+
369
+ #: ../dashboard.php:1179
370
+ msgid "Update to version %s of WP Cerber"
371
+ msgstr "Oppdatér til versjon %s av WP Cerber"
372
+
373
+ #: ../wp-cerber.php:1891 ../wp-cerber.php:2200
374
+ msgid "View activity in dashboard"
375
+ msgstr "Se aktivitet i kontrollpanelet"
376
+
377
+ #: ../wp-cerber.php:1918
378
+ msgid "Number of active lockouts"
379
+ msgstr "Antall aktive utestengelser"
380
+
381
+ #: ../wp-cerber.php:1922
382
+ msgid "View lockouts in dashboard"
383
+ msgstr "Se utestengelser i kontrollpanelet"
384
+
385
+ #: ../wp-cerber.php:1975
386
+ msgid "This message was sent by"
387
+ msgstr "Denne meldingen ble sendt av"
388
+
389
+ #: ../dashboard.php:693 ../cerber-tools.php:40
390
+ msgid "Tools"
391
+ msgstr "Verktøy"
392
+
393
+ #: ../cerber-tools.php:55
394
+ msgid "Export settings to the file"
395
+ msgstr "Eksportér innstillinger til filen"
396
+
397
+ #: ../cerber-tools.php:56
398
+ msgid "When you click the button below you will get a configuration file, which you can upload on another site."
399
+ msgstr "Når du klikker knappen under, vil du få en konfigurasjonsfil som du kan laste opp på en annen side."
400
+
401
+ #: ../cerber-tools.php:57
402
+ msgid "What do you want to export?"
403
+ msgstr "Hva ønsker du å eksportere?"
404
+
405
+ #: ../cerber-tools.php:60
406
+ msgid "Download file"
407
+ msgstr "Last ned fil"
408
+
409
+ #: ../cerber-tools.php:62
410
+ msgid "Import settings from the file"
411
+ msgstr "Importér innstillinger fra filen"
412
+
413
+ #: ../cerber-tools.php:63
414
+ msgid "When you click the button below, file will be uploaded and all existing settings will be overridden."
415
+ msgstr "Når du klikker på knappen under, vil filen lastes opp og alle eksisterende innstillinger vil bli overskrevet."
416
+
417
+ #: ../cerber-tools.php:64
418
+ msgid "Select file to import."
419
+ msgstr "Velg fil å importere."
420
+
421
+ #: ../cerber-tools.php:64
422
+ msgid "Maximum upload file size: %s."
423
+ msgstr "Maksimum tillatte filstørrelse for opplasting: %s."
424
+
425
+ #: ../cerber-tools.php:67
426
+ msgid "What do you want to import?"
427
+ msgstr "Hva ønsker du å importere?"
428
+
429
+ #: ../cerber-tools.php:69
430
+ msgid "Upload file"
431
+ msgstr "Last opp fil"
432
+
433
+ #: ../cerber-tools.php:148
434
+ msgid "No file was uploaded or file is corrupted"
435
+ msgstr "Ingen fil ble lastet opp, eller er filen ødelagt"
436
+
437
+ #: ../cerber-tools.php:178
438
+ msgid "Error while updating"
439
+ msgstr "Feil under oppdatering"
440
+
441
+ #: ../cerber-tools.php:181
442
+ msgid "Settings has imported successfully from"
443
+ msgstr "Innstillinger ble importert fra"
444
+
445
+ #: ../cerber-tools.php:185
446
+ msgid "Error while parsing file"
447
+ msgstr "Feil under parsing av filen"
448
+
449
+ #: ../dashboard.php:77 ../dashboard.php:445
450
+ msgid "Hostname"
451
+ msgstr "Vertsnavn"
452
+
453
+ #: ../dashboard.php:232
454
+ msgid "unknown"
455
+ msgstr "ukjent"
456
+
457
+ #: ../settings.php:88
458
+ msgid "Keep records for"
459
+ msgstr "Behold logger"
460
+
461
+ #: ../dashboard.php:839
462
+ msgid "active"
463
+ msgstr "aktive"
464
+
465
+ #: ../dashboard.php:839
466
+ msgid "deactivate"
467
+ msgstr "deaktiver"
468
+
469
+ #: ../dashboard.php:841
470
+ msgid "not active"
471
+ msgstr "ikke aktive"
472
+
473
+ #: ../dashboard.php:842
474
+ msgid "disabled"
475
+ msgstr "deaktivert"
476
+
477
+ #: ../dashboard.php:847
478
+ msgid "failed attempts"
479
+ msgstr "mislykkede forsøk"
480
+
481
+ #: ../dashboard.php:847 ../dashboard.php:848
482
+ msgid "in 24 hours"
483
+ msgstr "på 24 timer"
484
+
485
+ #: ../dashboard.php:847 ../dashboard.php:848
486
+ msgid "view all"
487
+ msgstr "se alle"
488
+
489
+ #: ../dashboard.php:848
490
+ msgid "lockouts"
491
+ msgstr "utestengelser"
492
+
493
+ #: ../dashboard.php:850
494
+ msgid "Lockouts at the moment"
495
+ msgstr "Utestengelser akkurat nå"
496
+
497
+ #: ../dashboard.php:851
498
+ msgid "Last lockout"
499
+ msgstr "Siste utestengelse"
500
+
501
+ #: ../dashboard.php:852 ../dashboard.php:853 ../dashboard.php:1283
502
+ msgid "entry"
503
+ msgid_plural "entries"
504
+ msgstr[0] "oppføring"
505
+ msgstr[1] "oppføringer"
506
+
507
+ #: ../dashboard.php:1033
508
+ msgid "Confused about some settings?"
509
+ msgstr "Usikker på noen innstillinger?"
510
+
511
+ #: ../dashboard.php:1034
512
+ msgid "You can easily load default recommended settings using button below"
513
+ msgstr "Du kan enkelt laste inn anbefalte standardinnstillinger via knappen under"
514
+
515
+ #: ../dashboard.php:1036
516
+ msgid "Load default settings"
517
+ msgstr "Last inn standardinnstillinger"
518
+
519
+ #: ../dashboard.php:1044
520
+ msgid "doesn't affect Custom login URL and Access Lists"
521
+ msgstr "påvirker ikke egendefinert innloggings-URL og tilgangslister"
522
+
523
+ #: ../dashboard.php:1063
524
+ msgid "Donate"
525
+ msgstr "Donér"
526
+
527
+ #: ../dashboard.php:1173
528
+ msgid "New version is available"
529
+ msgstr "Ny versjon er tilgjengelig"
530
+
531
+ #. Name of the plugin
532
+ #: ../dashboard.php:685 ../dashboard.php:688 ../dashboard.php:717
533
+ msgid "WP Cerber"
534
+ msgstr "WP Cerber"
535
+
536
+ #. URI of the plugin
537
+ #:
538
+ msgid "http://wpcerber.com"
539
+ msgstr "http://wpcerber.com"
540
+
541
+ #: ../wp-cerber.php:1868
542
+ msgid "WP Cerber notify"
543
+ msgstr "WP Cerber-varsling"
544
+
545
+ #: ../wp-cerber.php:1887
546
+ msgid "Citadel mode is activated"
547
+ msgstr "Vakttårns-modus er aktivert"
548
+
549
+ #: ../wp-cerber.php:1955
550
+ msgid "New Custom login URL"
551
+ msgstr "Ny egendefinert innloggings-URL"
552
+
553
+ #: ../wp-cerber.php:2254
554
+ msgid "The WP Cerber requires PHP %s or higher. You are running"
555
+ msgstr "WP Cerber krever PHP versjon %s eller høyere. Du kjører"
556
+
557
+ #: ../wp-cerber.php:2258
558
+ msgid "The WP Cerber requires WordPress %s or higher. You are running"
559
+ msgstr "WP Cerber krever WordPress versjon %s eller høyere. Du kjører"
560
+
561
+ #: ../settings.php:94
562
+ msgid "Use file"
563
+ msgstr "Bruk fil"
564
+
565
+ #: ../settings.php:94
566
+ msgid "Write failed login attempts to the file"
567
+ msgstr "Skriv mislykkede innloggingsforsøk til filen"
568
+
569
+ #: ../dashboard.php:756
570
+ msgid "Failed attempts in last 24 hours"
571
+ msgstr "Mislykkede forsøk de siste 24 timer"
572
+
573
+ #: ../dashboard.php:1116
574
+ msgid "Deactivate"
575
+ msgstr "Deaktivér"
576
+
577
+ #: ../dashboard.php:77 ../wp-cerber.php:1920
578
+ msgid "Reason"
579
+ msgstr "Grunn"
580
+
581
+ #: ../dashboard.php:130
582
+ msgid "Add IP to the list"
583
+ msgstr "Legg IP til listen"
584
+
585
+ #: ../dashboard.php:660
586
+ msgid "Add IP to the Black List"
587
+ msgstr "Legg IP til svartelisten"
588
+
589
+ #: ../common.php:287
590
+ msgid "Attempt to access"
591
+ msgstr "Forsøk på å få tilgang til"
592
+
593
+ #: ../common.php:286
594
+ msgid "Limit on login attempts is reached"
595
+ msgstr "Grensen for innloggingsforsøk er nådd"
596
+
597
+ #: ../common.php:276 ../common.php:288
598
+ msgid "Attempt to log in with non-existent username"
599
+ msgstr "Forsøk på å logge inn med ikke-eksisterende brukernavn"
600
+
601
+ #: ../wp-cerber.php:1919
602
+ msgid "Last lockout was added: %s for IP %s"
603
+ msgstr "Siste utestengelse ble lagt til: %s for IP %s"
604
+
605
+ #: ../wp-cerber.php:2282
606
+ msgid "It's important to check security settings."
607
+ msgstr "Det viktig å sjekke sikkerhetsinnstillingene."
608
+
609
+ #: ../wp-cerber.php:2287 ../settings.php:230
610
+ msgid "Hardening"
611
+ msgstr "Forsterking"
612
+
613
+ #: ../dashboard.php:638
614
+ msgid "Abuse email:"
615
+ msgstr "Repportering av misbruk:"
616
+
617
+ #: ../settings.php:144
618
+ msgid "Email Address"
619
+ msgstr "E-postadresse"
620
+
621
+ #: ../settings.php:144
622
+ msgid "if empty, the admin email %s will be used"
623
+ msgstr "Hvis tom, vil e-postadressen %s bli brukt"
624
+
625
+ #: ../settings.php:97
626
+ msgid "Drill down IP"
627
+ msgstr "Inspiser IP"
628
+
629
+ #: ../settings.php:97
630
+ msgid "Retrieve extra WHOIS information for IP"
631
+ msgstr "Hent ekstra WHOIS-informasjon for IP"
632
+
633
+ #: ../settings.php:105
634
+ msgid "Hardening WordPress"
635
+ msgstr "Forsterke WordPress"
636
+
637
+ #: ../settings.php:106
638
+ msgid "Stop user enumeration"
639
+ msgstr "Stopp opplisting av brukere"
640
+
641
+ #: ../settings.php:106
642
+ msgid "Block access to the pages like /?author=n"
643
+ msgstr "Blokkér tilgang til sider som /?author=n"
644
+
645
+ #: ../settings.php:107
646
+ msgid "Disable XML-RPC"
647
+ msgstr "Deaktivér XML-RPC"
648
+
649
+ #: ../settings.php:107
650
+ msgid "Block access to the XML-RPC server (including Pingbacks and Trackbacks)"
651
+ msgstr "Blokkér tilgang til XML-RPC-serveren (inkluderer Pingbacks og Trackbacks)"
652
+
653
+ #: ../settings.php:108
654
+ msgid "Disable feeds"
655
+ msgstr "Deaktiver feeds"
656
+
657
+ #: ../settings.php:108
658
+ msgid "Block access to the RSS, Atom and RDF feeds"
659
+ msgstr "Blokkér tilgang til RSS- Atom- og RDF-feeds"
660
+
661
+ #: ../settings.php:109
662
+ msgid "Disable REST API"
663
+ msgstr "Deaktivér REST API"
664
+
665
+ #: ../settings.php:109
666
+ msgid "Block access to the WordPress REST API"
667
+ msgstr "Blokkér tilgang til WordPress' REST API"
668
+
669
+ #: ../settings.php:185
670
+ msgid "These settings do not affect hosts from the "
671
+ msgstr "Disse innstillingene påvirker ikke verter fra "
672
+
673
+ #: ../settings.php:502
674
+ msgid "<strong>ERROR</strong>: please enter a valid email address."
675
+ msgstr "<strong>FEIL</strong>: vennligst skriv inn en gyldig e-postadresse"
676
+
677
+ #: ../settings.php:618
678
+ msgid "Number of items per page:"
679
+ msgstr "Antall innlegg pr. side:"
680
+
681
+ #: ../wp-cerber.php:1949 ../wp-cerber.php:2279
682
+ msgid "WP Cerber is now active and has started protecting your site"
683
+ msgstr "WP Cerber er nå aktiv og har begynt å beskytte siden din"
684
+
685
+ #: ../dashboard.php:77
686
+ msgid "Action"
687
+ msgstr "Handling"
688
+
689
+ #: ../dashboard.php:104
690
+ msgid "Nobody can log in or register from these IPs"
691
+ msgstr "Ingen kan logge inn eller registrere seg fra disse IP-ene"
692
+
693
+ #: ../dashboard.php:145 ../dashboard.php:153
694
+ msgid "Incorrect IP address or IP range"
695
+ msgstr "Feil IP-adresse eller IP-rekkevidde"
696
+
697
+ #: ../dashboard.php:254
698
+ msgid "Unable to send notification email"
699
+ msgstr "Kunne ikke sende e-postvarsling"
700
+
701
+ #: ../dashboard.php:276 ../dashboard.php:1132
702
+ msgid "Settings saved"
703
+ msgstr "Innstillingene er lagret"
704
+
705
+ #: ../dashboard.php:642
706
+ msgid "Network:"
707
+ msgstr "Nettverk:"
708
+
709
+ #: ../dashboard.php:656
710
+ msgid "Add network to the Black List"
711
+ msgstr "Legg nettverk til svartelisten"
712
+
713
+ #: ../dashboard.php:468
714
+ msgid "Cerber Security"
715
+ msgstr "Cerber-sikkerhet"
716
+
717
+ #: ../dashboard.php:1115
718
+ msgid "Attention! Citadel mode is now active. Nobody is able to log in."
719
+ msgstr "Advarsel! Vakttårns-modus er nå aktiv. Ingen vil kunne logge inn."
720
+
721
+ #: ../whois.php:211
722
+ msgid "Unknown"
723
+ msgstr "Ukjent"
724
+
725
+ #. Description of the plugin
726
+ #:
727
+ msgid "Protects site from brute force attacks, bots and hackers. Antispam protection with reCAPTCHA. Comprehensive control of user activity. Restrict login by IP access lists. Limit login attempts. Feel free to contact developer on the site <a href=\"http://wpcerber.com\">wpcerber.com</a>."
728
+ msgstr "Beskytter siden mot brute force-angrep, botter og hackere. Antispam-beskyttelse med erCAPTCHA. Grundig kontroll av brukeraktivitet. Begrensning av innlogginger etter IP-tilgangslister. Begrens innloggingsforsøk. Ta gjerne kontakt med utvikleren på <a href=\"http://wpcerber.com\">wpcerber.com</a>."
729
+
730
+ #. Author of the plugin
731
+ #:
732
+ msgid "Gregory"
733
+ msgstr "Gregory"
734
+
735
+ #: ../wp-cerber.php:602 ../wp-cerber.php:734 ../wp-cerber.php:741 ../wp-cerber.
736
+ #: php:765 ../common.php:81 ../common.php:134 ../settings.php:480
737
+ msgid "ERROR:"
738
+ msgstr "FEIL:"
739
+
740
+ #: ../wp-cerber.php:496
741
+ msgid "Human verification failed. Please click the square box in the reCAPTCHA block below."
742
+ msgstr "Bekreftelse av menneskelighet feilet. Vennligst klikk den firkantige boksen i reCAPTCHA-blokken under."
743
+
744
+ #: ../wp-cerber.php:613
745
+ msgid "<strong>ERROR</strong>: The password you entered for the username %s is incorrect."
746
+ msgstr "<strong>FEIL</strong>: Passordet du skrev inn for brukernavnet %s er ugyldig."
747
+
748
+ #: ../wp-cerber.php:742
749
+ msgid "Username is not allowed. Please choose another one."
750
+ msgstr "Brukernavnet er ikke tillatt. Vennligst velg et annet brukernavn."
751
+
752
+ #: ../wp-cerber.php:1913
753
+ msgid "unspecified"
754
+ msgstr "uspesifisert"
755
+
756
+ #: ../wp-cerber.php:1916
757
+ msgid "Number of lockouts is increasing"
758
+ msgstr "Antallet utestengelser stiger"
759
+
760
+ #: ../wp-cerber.php:1921
761
+ msgid "View activity for this IP"
762
+ msgstr "Se aktivitet for denne IP"
763
+
764
+ #: ../wp-cerber.php:1925 ../wp-cerber.php:1927
765
+ msgid "A new version of WP Cerber is available to install"
766
+ msgstr "En ny versjon av WP Cerber er tilgjengelig for installasjon"
767
+
768
+ #: ../wp-cerber.php:1926
769
+ msgid "Hi!"
770
+ msgstr "Hei!"
771
+
772
+ #: ../wp-cerber.php:1928 ../wp-cerber.php:1939
773
+ msgid "Website"
774
+ msgstr "Webside"
775
+
776
+ #: ../wp-cerber.php:1931 ../wp-cerber.php:1932
777
+ msgid "The WP Cerber security plugin has been deactivated"
778
+ msgstr "Sikkerhetstillegget WP Cerber har blitt deaktivert"
779
+
780
+ #: ../wp-cerber.php:1934
781
+ msgid "Not logged in"
782
+ msgstr "Ikke innlogget"
783
+
784
+ #: ../wp-cerber.php:1940
785
+ msgid "By user"
786
+ msgstr "Etter brukernavn"
787
+
788
+ #: ../wp-cerber.php:1941
789
+ msgid "From IP address"
790
+ msgstr "Fra IP-adresse"
791
+
792
+ #: ../wp-cerber.php:1944
793
+ msgid "From country"
794
+ msgstr "Fra land"
795
+
796
+ #: ../wp-cerber.php:1948
797
+ msgid "The WP Cerber security plugin is now active"
798
+ msgstr "Sikkerhetstillegget WP Cerber er nå aktivt"
799
+
800
+ #: ../wp-cerber.php:2280
801
+ msgid "Your IP address is added to the"
802
+ msgstr "Din IP-adresse ble lagt til"
803
+
804
+ #: ../dashboard.php:692
805
+ msgid "reCAPTCHA"
806
+ msgstr "reCAPTCHA"
807
+
808
+ #: ../wp-cerber.php:2289
809
+ msgid "Import settings"
810
+ msgstr "Importer innstillinger"
811
+
812
+ #: ../settings.php:145
813
+ msgid "Notification limit"
814
+ msgstr "Grense for varslinger"
815
+
816
+ #: ../settings.php:145
817
+ msgid "notification letters allowed per hour (0 means unlimited)"
818
+ msgstr "varslingsmeldinger tillatt per time (0 betyr ubegrenset)"
819
+
820
+ #: ../settings.php:117
821
+ msgid "User related settings"
822
+ msgstr "Brukerrelaterte innstillinger"
823
+
824
+ #: ../settings.php:118
825
+ msgid "Prohibited usernames"
826
+ msgstr "Blokkerte brukernavn"
827
+
828
+ #: ../settings.php:118
829
+ msgid "Usernames from this list are not allowed to log in or register. Any IP address, have tried to use any of these usernames, will be immediately blocked. Use comma to separate logins."
830
+ msgstr "Brukernavn fra denne listen har ikke tilgang til å logge inn eller registrere seg. Enhver IP som forsøker å bruke noen av disse brukernavnene blir blokkert umiddelbart. Bruk komma for å skille brukernavn."
831
+
832
+ #: ../settings.php:119
833
+ msgid "User session expire"
834
+ msgstr "Brukerøktens varighet"
835
+
836
+ #: ../settings.php:119
837
+ msgid "in minutes (leave empty to use default WP value)"
838
+ msgstr "i minutter (la stå tom for å bruke WordPress' standardverdi)"
839
+
840
+ #: ../cerber-tools.php:195
841
+ msgid "reCAPTCHA settings"
842
+ msgstr "reCAPTCHA-innstillinger"
843
+
844
+ #: ../settings.php:126
845
+ msgid "Site key"
846
+ msgstr "Site key"
847
+
848
+ #: ../settings.php:127
849
+ msgid "Secret key"
850
+ msgstr "Secret key"
851
+
852
+ #: ../settings.php:129
853
+ msgid "Enable reCAPTCHA for WordPress registration form"
854
+ msgstr "Slå på reCAPTCHA for WordPress' registreringsskjema"
855
+
856
+ #: ../settings.php:132
857
+ msgid "Lost password form"
858
+ msgstr "Skjema for mistet passord"
859
+
860
+ #: ../settings.php:135
861
+ msgid "Login form"
862
+ msgstr "Innloggingsskjema"
863
+
864
+ #: ../settings.php:135
865
+ msgid "Enable reCAPTCHA for WordPress login form"
866
+ msgstr "Slå på reCAPTCHA for WordPress' innloggingsskjema"
867
+
868
+ #: ../settings.php:178
869
+ msgid "In Citadel mode nobody is able to login. Active user's sessions will not be affected."
870
+ msgstr "I vakttårns-modus vil ingen kunne logge inn. Aktive brukerinnlogginger vil ikke bli påvirket."
871
+
872
+ #: ../settings.php:190
873
+ msgid "Before you can start using reCAPTCHA, you have to obtain Site key and Secret key on the Google website"
874
+ msgstr "Før du kan ta i bruk reCAPTCHA må du skaffe deg en Site key og Secret key på Googles webside"
875
+
876
+ #: ../cerber-lab.php:419 ../settings.php:191
877
+ msgid "Know more"
878
+ msgstr "Lær mer"
879
+
880
+ #: ../dashboard.php:688 ../settings.php:213
881
+ msgid "WP Cerber Security"
882
+ msgstr "WP Cerber-sikkerhet"
883
+
884
+ #: ../settings.php:232
885
+ msgid "Users"
886
+ msgstr "Brukere"
887
+
888
+ #: ../common.php:253
889
+ msgid "User created"
890
+ msgstr "Bruker opprettet"
891
+
892
+ #: ../common.php:254
893
+ msgid "User registered"
894
+ msgstr "Bruker registrert"
895
+
896
+ #: ../common.php:271
897
+ msgid "reCAPTCHA verification failed"
898
+ msgstr "reCAPTCHA-godkjenning mislyktes"
899
+
900
+ #: ../common.php:272
901
+ msgid "reCAPTCHA settings are incorrect"
902
+ msgstr "reCAPTCHA-innstillingene er feil"
903
+
904
+ #: ../common.php:275
905
+ msgid "Attempt to access prohibited URL"
906
+ msgstr "Forsøk på å koble til forbudt URL"
907
+
908
+ #: ../common.php:277 ../common.php:289
909
+ msgid "Attempt to log in with prohibited username"
910
+ msgstr "Forsøk på å logge inn med forbudt brukernavn"
911
+
912
+ #: ../common.php:341
913
+ msgid "year"
914
+ msgstr "år"
915
+
916
+ #: ../common.php:342
917
+ msgid "month"
918
+ msgstr "måned"
919
+
920
+ #: ../common.php:343
921
+ msgid "day"
922
+ msgstr "dag"
923
+
924
+ #: ../common.php:344
925
+ msgid "hour"
926
+ msgstr "time"
927
+
928
+ #: ../common.php:345
929
+ msgid "minute"
930
+ msgstr "minutt"
931
+
932
+ #: ../common.php:346
933
+ msgid "second"
934
+ msgstr "sekund"
935
+
936
+ #: ../common.php:349
937
+ msgid "years"
938
+ msgstr "år"
939
+
940
+ #: ../common.php:350
941
+ msgid "months"
942
+ msgstr "måneder"
943
+
944
+ #: ../common.php:352
945
+ msgid "hours"
946
+ msgstr "timer"
947
+
948
+ #: ../common.php:354
949
+ msgid "seconds"
950
+ msgstr "sekunder"
951
+
952
+ #: ../common.php:360
953
+ msgid "ago"
954
+ msgstr "siden"
955
+
956
+ #: ../settings.php:92
957
+ msgid "Cerber Lab connection"
958
+ msgstr "Tilkobling til Cerber Lab"
959
+
960
+ #: ../settings.php:92
961
+ msgid "Send malicious IP addresses to the Cerber Lab"
962
+ msgstr "Send ondsinnede IP-adresser til Cerber Lab"
963
+
964
+ #: ../settings.php:93
965
+ msgid "Cerber Lab protocol"
966
+ msgstr "Cerber Lab protokoll"
967
+
968
+ #: ../settings.php:129
969
+ msgid "Registration form"
970
+ msgstr "Registreringsskjema"
971
+
972
+ #: ../settings.php:130
973
+ msgid "Enable reCAPTCHA for WooCommerce registration form"
974
+ msgstr "Slå på reCAPTCHA for WooCommerces registreringsskjema"
975
+
976
+ #: ../settings.php:132
977
+ msgid "Enable reCAPTCHA for WordPress lost password form"
978
+ msgstr "Slå på reCAPTCHA for WordPress' skjema for mistet passord"
979
+
980
+ #: ../settings.php:133
981
+ msgid "Enable reCAPTCHA for WooCommerce lost password form"
982
+ msgstr "Slå på reCAPTCHA for WooCommerce mistet passord-skjema"
983
+
984
+ #: ../settings.php:136
985
+ msgid "Enable reCAPTCHA for WooCommerce login form"
986
+ msgstr "Slå på reCAPTCHA for WooCommerce innloggings-skjema"
987
+
988
+ #: ../common.php:273
989
+ msgid "Request to the Google reCAPTCHA service failed"
990
+ msgstr "Forespørsel til Googles reCAPTCHA-tjeneste mislyktes"
991
+
992
+ #: ../dashboard.php:995 ../dashboard.php:1010
993
+ msgid "View all"
994
+ msgstr "Se alle"
995
+
996
+ #: ../dashboard.php:1011
997
+ msgid "Recently locked out IP addresses"
998
+ msgstr "Nylig utestengte IP-adresser"
999
+
1000
+ #: ../cerber-lab.php:417
1001
+ msgid "OK, nail them all"
1002
+ msgstr "OK, ta alle sammen"
1003
+
1004
+ #: ../cerber-lab.php:418
1005
+ msgid "NO, maybe later"
1006
+ msgstr "NEI, kanskje senere"
1007
+
1008
+ #: ../dashboard.php:690 ../dashboard.php:860 ../dashboard.php:1303 ../settings.
1009
+ #: php:218
1010
+ msgid "Dashboard"
1011
+ msgstr "Kontrollpanel"
1012
+
1013
+ #: ../cerber-lab.php:415
1014
+ msgid "Want to make WP Cerber even more powerful?"
1015
+ msgstr "Vil du gjøre WP Cerber enda sterkere?"
1016
+
1017
+ #: ../cerber-lab.php:416
1018
+ msgid "Allow WP Cerber to send locked out malicious IP addresses to Cerber Lab. This helps the plugin team to develop new algorithms for WP Cerber that will defend WordPress against new threats and botnets that are appearing everyday. You can disable the sending in the plugin settings at any time."
1019
+ msgstr "Tillat at WP Cerber sender utestengde ondsinnede IP-adresser til Cerber Lab. Dette hjelper plugin-teamet å utvikle nye algoritmer som vil beskytte WordPress mot nye trusler og botnett som dukker opp hver dag. Du kan slå av sendingen i plugin-innstillingene når som helst."
1020
+
1021
+ #: ../dashboard.php:330
1022
+ msgid "IP address"
1023
+ msgstr "IP-adresse"
1024
+
1025
+ #: ../dashboard.php:330
1026
+ msgid "User login"
1027
+ msgstr "Brukernavn"
1028
+
1029
+ #: ../dashboard.php:330
1030
+ msgid "User ID"
1031
+ msgstr "Bruker-ID"
1032
+
1033
+ #: ../dashboard.php:454
1034
+ msgid "Export"
1035
+ msgstr "Eksporter"
1036
+
1037
+ #: ../dashboard.php:463
1038
+ msgid "All activities"
1039
+ msgstr "Alle aktiviteter"
1040
+
1041
+ #: ../dashboard.php:470
1042
+ msgid "Search for IP or username"
1043
+ msgstr "Søk etter IP eller brukernavn"
1044
+
1045
+ #: ../dashboard.php:470
1046
+ msgid "Filter"
1047
+ msgstr "Filter"
1048
+
1049
+ #: ../dashboard.php:690
1050
+ msgid "Cerber Dashboard"
1051
+ msgstr "Cerber-kontrollpanel"
1052
+
1053
+ #: ../dashboard.php:692
1054
+ msgid "Cerber reCAPTCHA settings"
1055
+ msgstr "Cerber-innstillinger for reCAPTCHA"
1056
+
1057
+ #: ../dashboard.php:693
1058
+ msgid "Cerber tools"
1059
+ msgstr "Cerber-verktøy"
1060
+
1061
+ #: ../dashboard.php:1218
1062
+ msgid "Subscribe"
1063
+ msgstr "Abbonér"
1064
+
1065
+ #: ../dashboard.php:1219
1066
+ msgid "Unsubscribe"
1067
+ msgstr "Avslutt abonnementet"
1068
+
1069
+ #: ../dashboard.php:1247
1070
+ msgid "You've subscribed"
1071
+ msgstr "Du abbonerer"
1072
+
1073
+ #: ../dashboard.php:1250
1074
+ msgid "You've unsubscribed"
1075
+ msgstr "Du har avsluttet abonnementet"
1076
+
1077
+ #: ../wp-cerber.php:1959 ../wp-cerber.php:1960
1078
+ msgid "A new activity has been recorded"
1079
+ msgstr "En ny aktivitet har blitt registrert"
1080
+
1081
+ #: ../wp-cerber.php:2180
1082
+ msgid "User"
1083
+ msgstr "Bruker"
1084
+
1085
+ #: ../wp-cerber.php:2188
1086
+ msgid "Search string"
1087
+ msgstr "Søkeord"
1088
+
1089
+ #: ../wp-cerber.php:2201
1090
+ msgid "To unsubscribe click here"
1091
+ msgstr "Klikk her for å avslutte abbonementet"
1092
+
1093
+ #: ../settings.php:96
1094
+ msgid "Preferences"
1095
+ msgstr "Valg"
1096
+
1097
+ #: ../settings.php:98
1098
+ msgid "Date format"
1099
+ msgstr "Datoformat"
1100
+
1101
+ #: ../settings.php:98
1102
+ msgid "if empty, the default format %s will be used"
1103
+ msgstr "hvis blank, vil formatet %s bli brukt"
1104
+
1105
+ #: ../dashboard.php:856 ../settings.php:147
1106
+ msgid "Push notifications"
1107
+ msgstr "Push-varsler"
1108
+
1109
+ #: ../settings.php:142
1110
+ msgid "Email notifications"
1111
+ msgstr "E-postvarsel"
1112
+
1113
+ #: ../settings.php:144
1114
+ msgid "Use comma to specify multiple values"
1115
+ msgstr "Bruk komma for å skille mellom flere verdier"
1116
+
1117
+ #: ../settings.php:153
1118
+ msgid "All connected devices"
1119
+ msgstr "Alle tilkoblede enheter"
1120
+
1121
+ #: ../settings.php:154
1122
+ msgid "No devices found"
1123
+ msgstr "Ingen enheter funnet"
1124
+
1125
+ #: ../settings.php:156
1126
+ msgid "Not available"
1127
+ msgstr "Ikke tilgjengelig"
1128
+
languages/wp-cerber-nl_NL.mo ADDED
Binary file
languages/wp-cerber-nl_NL.po ADDED
@@ -0,0 +1,1038 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "MIME-Version: 1.0\n"
4
+ "Content-Type: text/plain; charset=UTF-8\n"
5
+ "Content-Transfer-Encoding: 8bit\n"
6
+ "X-Generator: POEditor.com\n"
7
+ "Project-Id-Version: WP Cerber\n"
8
+ "Language: nl\n"
9
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
10
+
11
+ #: ../settings.php:57
12
+ msgid "Limit login attempts"
13
+ msgstr "Inlogpogingen beperken"
14
+
15
+ #: ../settings.php:58
16
+ msgid "Attempts"
17
+ msgstr "Pogingen"
18
+
19
+ #: ../settings.php:59
20
+ msgid "Lockout duration"
21
+ msgstr "Lockout duur"
22
+
23
+ #: ../settings.php:59 ../settings.php:76 ../common.php:229
24
+ msgid "minutes"
25
+ msgstr "minuten"
26
+
27
+ #: ../settings.php:60
28
+ msgid "Aggressive lockout"
29
+ msgstr "Agressieve lockout"
30
+
31
+ #: ../settings.php:62
32
+ msgid "Site connection"
33
+ msgstr "Website verbinding"
34
+
35
+ #: ../settings.php:64
36
+ msgid "Proactive security rules"
37
+ msgstr "Proactieve beveiligingsregels"
38
+
39
+ #: ../settings.php:65
40
+ msgid "Block subnet"
41
+ msgstr "Subnet blokkeren"
42
+
43
+ #: ../settings.php:68
44
+ msgid "Request wp-login.php"
45
+ msgstr "Bezoek wp-login.php"
46
+
47
+ #: ../settings.php:68
48
+ msgid "Immediately block IP after any request to wp-login.php"
49
+ msgstr "IP meteen blokkeren bij bezoeken wp-login.php"
50
+
51
+ #: ../settings.php:67
52
+ msgid "Redirect dashboard requests"
53
+ msgstr "Dashboard bezoeken redirecten"
54
+
55
+ #: ../settings.php:70
56
+ msgid "Custom login page"
57
+ msgstr "Aangepaste inlog pagina"
58
+
59
+ #: ../settings.php:71
60
+ msgid "Custom login URL"
61
+ msgstr "Aangepaste inlog URL"
62
+
63
+ #: ../settings.php:71
64
+ msgid "must not overlap with the existing pages or posts slug"
65
+ msgstr "mag niet overlappen met bestaande pagina of post slugs"
66
+
67
+ #: ../settings.php:72
68
+ msgid "Disable wp-login.php"
69
+ msgstr "wp-login.php uitschakelen"
70
+
71
+ #: ../settings.php:72
72
+ msgid "Block direct access to wp-login.php and return HTTP 404 Not Found Error"
73
+ msgstr "Directe toegang tot wp-login.php blokkeren en HTTP 404 Not Found Error teruggeven"
74
+
75
+ #: ../dashboard.php:840 ../settings.php:74
76
+ msgid "Citadel mode"
77
+ msgstr "Citadel modus"
78
+
79
+ #: ../settings.php:75
80
+ msgid "Threshold"
81
+ msgstr "Drempelwaarde"
82
+
83
+ #: ../settings.php:76
84
+ msgid "Duration"
85
+ msgstr "Duur"
86
+
87
+ #: ../settings.php:61 ../settings.php:78 ../settings.php:80
88
+ msgid "Notifications"
89
+ msgstr "Notificaties"
90
+
91
+ #: ../settings.php:78
92
+ msgid "Send notification to admin email"
93
+ msgstr "Notificatie verzenden naar admin e-mailadres"
94
+
95
+ #: ../dashboard.php:658 ../dashboard.php:667 ../dashboard.php:775 ../dashboard.
96
+ #: php:846 ../dashboard.php:1174 ../wp-cerber.php:2188 ../settings.php:196
97
+ msgid "Access Lists"
98
+ msgstr "Access Lists"
99
+
100
+ #: ../dashboard.php:386 ../dashboard.php:844 ../dashboard.php:952 ../settings.php:
101
+ #: 85 ../settings.php:188
102
+ msgid "Activity"
103
+ msgstr "Activiteit"
104
+
105
+ #: ../dashboard.php:845 ../settings.php:191
106
+ msgid "Lockouts"
107
+ msgstr "Lockouts"
108
+
109
+ #: ../settings.php:278
110
+ msgid "%s allowed retries in %s minutes"
111
+ msgstr "%s toegestane pogingen in %s minuten"
112
+
113
+ #: ../settings.php:295
114
+ msgid "Enable after %s failed login attempts in last %s minutes"
115
+ msgstr "Aanzetten na %s mislukte inlogpogingen binnen %s minuten"
116
+
117
+ #: ../dashboard.php:75 ../dashboard.php:386
118
+ msgid "IP"
119
+ msgstr "IP"
120
+
121
+ #: ../dashboard.php:386
122
+ msgid "Date"
123
+ msgstr "Datum"
124
+
125
+ #: ../dashboard.php:386
126
+ msgid "Local User"
127
+ msgstr "Lokale gebruiker"
128
+
129
+ #: ../dashboard.php:386
130
+ msgid "Username used"
131
+ msgstr "Gebruikte gebruikersnaam"
132
+
133
+ #: ../dashboard.php:81
134
+ msgid "Showing last %d records from %d"
135
+ msgstr "Laatste %d records van %d"
136
+
137
+ #: ../common.php:131
138
+ msgid "Logged in"
139
+ msgstr "Ingelogd"
140
+
141
+ #: ../common.php:132
142
+ msgid "Logged out"
143
+ msgstr "Uitgelogd"
144
+
145
+ #: ../common.php:133
146
+ msgid "Login failed"
147
+ msgstr "Inloggen mislukt"
148
+
149
+ #: ../common.php:136
150
+ msgid "IP blocked"
151
+ msgstr "IP geblokkeerd"
152
+
153
+ #: ../common.php:137
154
+ msgid "Subnet blocked"
155
+ msgstr "Subet geblokkeerd"
156
+
157
+ #: ../common.php:139
158
+ msgid "Citadel activated!"
159
+ msgstr "Citadel modus geactiveerd!"
160
+
161
+ #: ../dashboard.php:375 ../dashboard.php:439 ../common.php:141
162
+ #, fuzzy
163
+ msgid "Locked out"
164
+ msgstr "Buitengesloten"
165
+
166
+ #: ../common.php:142
167
+ msgid "IP blacklisted"
168
+ msgstr "IP ge-blacklist"
169
+
170
+ #: ../common.php:145
171
+ msgid "Password changed"
172
+ msgstr "Wachtwoord veranderd"
173
+
174
+ #: ../dashboard.php:72 ../dashboard.php:122
175
+ msgid "Remove"
176
+ msgstr "Verwijderen"
177
+
178
+ #: ../dashboard.php:254
179
+ msgid "Lockout for %s was removed"
180
+ msgstr "Lockout voor %s is verwijderd"
181
+
182
+ #: ../dashboard.php:100 ../dashboard.php:370 ../dashboard.php:434 ../dashboard.
183
+ #: php:838 ../wp-cerber.php:2182 ../settings.php:153
184
+ #, fuzzy
185
+ msgid "White IP Access List"
186
+ msgstr "White IP Access List"
187
+
188
+ #: ../dashboard.php:102 ../dashboard.php:371 ../dashboard.php:436 ../dashboard.
189
+ #: php:839
190
+ #, fuzzy
191
+ msgid "Black IP Access List"
192
+ msgstr "Black IP Access List"
193
+
194
+ #: ../dashboard.php:125
195
+ msgid "List is empty"
196
+ msgstr "Lijst is leeg"
197
+
198
+ #: ../dashboard.php:147
199
+ #, fuzzy
200
+ msgid "Address %s was added to White IP Access List"
201
+ msgstr "Adres %s is toegevoegd aan de White IP Access List"
202
+
203
+ #: ../dashboard.php:160
204
+ #, fuzzy
205
+ msgid "Address %s was added to Black IP Access List"
206
+ msgstr "Adres %s is toegevoegd aan de Black IP Access List"
207
+
208
+ #: ../wp-cerber.php:1894
209
+ msgid "Citadel mode is activated after %d failed login attempts in %d minutes."
210
+ msgstr "Citadel modus is geactiveerd na %d mislukte inlogpogingen binnen %d minuten"
211
+
212
+ #: ../dashboard.php:1067
213
+ #, fuzzy
214
+ msgid "View Activity"
215
+ msgstr "Activiteit bekijken"
216
+
217
+ #: ../dashboard.php:657 ../dashboard.php:666 ../dashboard.php:847 ../dashboard.
218
+ #: php:1173
219
+ msgid "Settings"
220
+ msgstr "Instellingen"
221
+
222
+ #: ../dashboard.php:606
223
+ #, fuzzy
224
+ msgid "Last login"
225
+ msgstr "Laatst ingelogd"
226
+
227
+ #: ../dashboard.php:633 ../dashboard.php:821
228
+ msgid "Never"
229
+ msgstr "Nooit"
230
+
231
+ #: ../dashboard.php:991 ../dashboard.php:1784
232
+ msgid "Are you sure?"
233
+ msgstr "Weet je het zeker?"
234
+
235
+ #: ../dashboard.php:509 ../dashboard.php:516
236
+ msgid "WP Cerber Settings"
237
+ msgstr "WP Cerber instellingen"
238
+
239
+ #: ../settings.php:62
240
+ msgid "My site is behind a reverse proxy"
241
+ msgstr "Mijn website draait achter een reverse proxy"
242
+
243
+ #: ../settings.php:66
244
+ msgid "Non-existent users"
245
+ msgstr "Niet-bestaande gebruikers"
246
+
247
+ #: ../settings.php:66
248
+ msgid "Immediately block IP when attempting to login with a non-existent username"
249
+ msgstr "IP meteen blokkeren bij inlogpoging op niet-bestaande gebruiker"
250
+
251
+ #: ../settings.php:67
252
+ msgid "Disable automatic redirecting to the login page when /wp-admin/ is requested by an unauthorized request"
253
+ msgstr "Automatisch redirecten, naar de inlogpagina bij een verzoek aan wp-admin door een ongeautoriseerd verzoek, uitschakelen."
254
+
255
+ #: ../settings.php:137
256
+ msgid "Make your protection smarter!"
257
+ msgstr "Maak bescherming slimmer!"
258
+
259
+ #: ../settings.php:141
260
+ msgid "Please enable Permalinks to use this feature. Set Permalink Settings to something other than Default."
261
+ msgstr "Schakel Permalinks in om deze functionaliteit te gebruiken. Stel de Permalinks instelling in op iets anders dan Standaard."
262
+
263
+ #: ../settings.php:144
264
+ msgid "Be careful when enabling this options. If you forget the custom login URL you will not be able to login."
265
+ msgstr "Wees voorzichtig met het inschakelen van deze opties. Als je de aangepast inlog URL vergeet kun je niet meer inloggen."
266
+
267
+ #: ../wp-cerber.php:2187 ../settings.php:193
268
+ msgid "Main Settings"
269
+ msgstr "Hoofdinstellingen"
270
+
271
+ #: ../settings.php:207
272
+ msgid "Help"
273
+ msgstr "Hulp"
274
+
275
+ #: ../settings.php:283
276
+ msgid "Increase lockout duration to %s hours after %s lockouts in the last %s hours"
277
+ msgstr "Lockout duur verhogen naar %s uren na %s lockouts in de laatste %s uren"
278
+
279
+ #: ../wp-cerber.php:184
280
+ msgid "You are not allowed to log in. Ask your administrator for assistance."
281
+ msgstr "Je hebt geen toestemming om in te loggen. Neem contact op met de beheerder voor meer informatie."
282
+
283
+ #: ../wp-cerber.php:190
284
+ msgid "You have reached the login attempts limit. Please try again in %d minutes."
285
+ msgstr "Je hebt de limiet voor inlogpogingen bereikt. Probeer het nog eens over %d minuten."
286
+
287
+ #: ../wp-cerber.php:208
288
+ msgid "You have only one attempt remaining."
289
+ msgid_plural "You have %d attempts remaining."
290
+ msgstr[0] "Slechts één inlogpoging resterend!"
291
+ msgstr[1] "%s inlogpogingen resterend."
292
+
293
+ #: ../dashboard.php:410
294
+ msgid "Show only"
295
+ msgstr "Laat alleen zien"
296
+
297
+ #: ../dashboard.php:396
298
+ msgid "No activity has been logged."
299
+ msgstr "Geen activiteit waargenomen."
300
+
301
+ #: ../dashboard.php:75
302
+ msgid "Expires"
303
+ msgstr "Verloopt"
304
+
305
+ #: ../dashboard.php:87
306
+ #, fuzzy
307
+ msgid "No lockouts at the moment. The sky is clear."
308
+ msgstr "Geen lockouts op dit moment."
309
+
310
+ #: ../dashboard.php:100
311
+ msgid "These IPs will never be locked out"
312
+ msgstr "Deze IP's worden nooit geblokkeerd."
313
+
314
+ #: ../dashboard.php:104
315
+ msgid "Your IP"
316
+ msgstr "Jou IP"
317
+
318
+ #: ../dashboard.php:156
319
+ msgid "You can't add your IP address"
320
+ msgstr "Kan eigen IP niet toevoegen"
321
+
322
+ #: ../wp-cerber.php:1895
323
+ msgid "Last failed attempt was at %s from IP %s with user login: %s."
324
+ msgstr "Laatste mislukte inlogpoging was op %s vanaf IP %s op gebruiker %s."
325
+
326
+ #: ../wp-cerber.php:1957
327
+ msgid "Change notification settings"
328
+ msgstr "Notificatie instellingen wijzigen"
329
+
330
+ #: ../wp-cerber.php:2165
331
+ msgid "Can't activate WP Cerber due to a database error."
332
+ msgstr "Kan WP Cerber niet activeren vanwege een database error"
333
+
334
+ #: ../settings.php:290
335
+ msgid "Notify admin if the number of active lockouts above"
336
+ msgstr "Verwittig de beheerder als het aantal actieve lockouts komt boven"
337
+
338
+ #: ../settings.php:86 ../common.php:227
339
+ msgid "days"
340
+ msgstr "dagen"
341
+
342
+ #: ../dashboard.php:793
343
+ msgid "Cerber Quick View"
344
+ msgstr "Cerber Quick View"
345
+
346
+ #: ../dashboard.php:83
347
+ msgid "Hint"
348
+ msgstr "Tip"
349
+
350
+ #: ../dashboard.php:83
351
+ msgid "To view activity, click on the IP"
352
+ msgstr "Klik op het IP om activiteiten te bekijken"
353
+
354
+ #: ../dashboard.php:122 ../dashboard.php:466
355
+ msgid "Check for activity"
356
+ msgstr "Check voor activiteit"
357
+
358
+ #: ../settings.php:65
359
+ msgid "Always block entire subnet Class C of intruders IP"
360
+ msgstr "Altijd gehele IP Class C subnet blokkeren van aanvaller"
361
+
362
+ #: ../settings.php:78 ../settings.php:292
363
+ msgid "Click to send test"
364
+ msgstr "Klik om test te verzenden"
365
+
366
+ #: ../settings.php:345
367
+ msgid "Attention! You have changed the login URL! The new login URL is"
368
+ msgstr "Let op! Je hebt de inlog URL veranderd, de nieuwe login URL is"
369
+
370
+ #: ../dashboard.php:605
371
+ msgid "Comments"
372
+ msgstr "Reacties"
373
+
374
+ #: ../dashboard.php:608
375
+ msgid "Date of registration"
376
+ msgstr "Registratiedatum"
377
+
378
+ #: ../dashboard.php:246
379
+ msgid "Message has been sent to "
380
+ msgstr "Bericht is verzonden naar "
381
+
382
+ #: ../dashboard.php:1124
383
+ msgid "Update to version %s of WP Cerber"
384
+ msgstr "WP Cerber updaten naar versie %s"
385
+
386
+ #: ../wp-cerber.php:1896
387
+ msgid "View activity in dashboard"
388
+ msgstr "Activiteiten bekijken in dashboard"
389
+
390
+ #: ../wp-cerber.php:1924
391
+ msgid "Number of active lockouts"
392
+ msgstr "Aantal actieve lockouts"
393
+
394
+ #: ../wp-cerber.php:1929
395
+ msgid "View lockouts in dashboard"
396
+ msgstr "Lockouts bekijken in dashboard"
397
+
398
+ #: ../wp-cerber.php:1977
399
+ msgid "This message was sent by"
400
+ msgstr "Dit bericht is verzonden door"
401
+
402
+ #: ../settings.php:205
403
+ msgid "Tools"
404
+ msgstr "Gereedschap"
405
+
406
+ #: ../dashboard.php:654
407
+ msgid "Export settings to the file"
408
+ msgstr "Instellingen exporteren naar bestand"
409
+
410
+ #: ../dashboard.php:655
411
+ msgid "When you click the button below you will get a configuration file, which you can upload on another site."
412
+ msgstr "Door op onderstaande knop te klikken, word er een configuratie bestand gegenereerd die je kunt uploaden bij een andere website."
413
+
414
+ #: ../dashboard.php:656
415
+ msgid "What do you want to export?"
416
+ msgstr "Wat wil je exporteren?"
417
+
418
+ #: ../dashboard.php:659
419
+ msgid "Download file"
420
+ msgstr "Bestand downloaden"
421
+
422
+ #: ../dashboard.php:661
423
+ msgid "Import settings from the file"
424
+ msgstr "Instellingen importeren van bestand"
425
+
426
+ #: ../dashboard.php:662
427
+ msgid "When you click the button below, file will be uploaded and all existing settings will be overridden."
428
+ msgstr "Bij het klikken op de onderstaande knop word het bestand geüpload en worden alle bestaande instellingen overschreven."
429
+
430
+ #: ../dashboard.php:663
431
+ msgid "Select file to import."
432
+ msgstr "Kies bestand om te importeren"
433
+
434
+ #: ../dashboard.php:663
435
+ msgid "Maximum upload file size: %s."
436
+ msgstr "Maximum bestandsgrootte: %s"
437
+
438
+ #: ../dashboard.php:666
439
+ msgid "What do you want to import?"
440
+ msgstr "Wat wil je importeren?"
441
+
442
+ #: ../dashboard.php:668
443
+ msgid "Upload file"
444
+ msgstr "Bestand uploaden"
445
+
446
+ #: ../dashboard.php:749
447
+ msgid "No file was uploaded or file is corrupted"
448
+ msgstr "Geen bestand geüpload of bestand is beschadigd."
449
+
450
+ #: ../dashboard.php:775
451
+ msgid "Error while updating"
452
+ msgstr "Foutmelding tijdens updaten"
453
+
454
+ #: ../dashboard.php:778
455
+ msgid "Settings has imported successfully from"
456
+ msgstr "Instellingen succesvol geïmporteerd van"
457
+
458
+ #: ../dashboard.php:782
459
+ msgid "Error while parsing file"
460
+ msgstr "Fout bij verwerken bestand"
461
+
462
+ #: ../dashboard.php:75 ../dashboard.php:386
463
+ msgid "Hostname"
464
+ msgstr "Hostname"
465
+
466
+ #: ../dashboard.php:227
467
+ msgid "unknown"
468
+ msgstr "onbekend"
469
+
470
+ #: ../settings.php:86
471
+ #, fuzzy
472
+ msgid "Keep records for"
473
+ msgstr "Records behouden tot"
474
+
475
+ #: ../dashboard.php:825
476
+ msgid "active"
477
+ msgstr "actief"
478
+
479
+ #: ../dashboard.php:825
480
+ msgid "deactivate"
481
+ msgstr "deactiveren"
482
+
483
+ #: ../dashboard.php:827
484
+ msgid "not active"
485
+ msgstr "niet actief"
486
+
487
+ #: ../dashboard.php:828
488
+ msgid "disabled"
489
+ msgstr "gedeactiveerd"
490
+
491
+ #: ../dashboard.php:833
492
+ msgid "failed attempts"
493
+ msgstr "mislukte pogingen"
494
+
495
+ #: ../dashboard.php:833 ../dashboard.php:834
496
+ msgid "in 24 hours"
497
+ msgstr "in 24 uur"
498
+
499
+ #: ../dashboard.php:833 ../dashboard.php:834
500
+ msgid "view all"
501
+ msgstr "bekijk alles"
502
+
503
+ #: ../dashboard.php:834
504
+ msgid "lockouts"
505
+ msgstr "lockouts"
506
+
507
+ #: ../dashboard.php:836
508
+ msgid "Lockouts at the moment"
509
+ msgstr "Lockouts op dit moment"
510
+
511
+ #: ../dashboard.php:837
512
+ #, fuzzy
513
+ msgid "Last lockout"
514
+ msgstr "Laatste lockout"
515
+
516
+ #: ../dashboard.php:838 ../dashboard.php:839 ../dashboard.php:1155
517
+ msgid "entry"
518
+ msgid_plural "entries"
519
+ msgstr[0] "item"
520
+ msgstr[1] "items"
521
+
522
+ #: ../dashboard.php:986
523
+ #, fuzzy
524
+ msgid "Confused about some settings?"
525
+ msgstr "Verward over sommige instellingen?"
526
+
527
+ #: ../dashboard.php:987
528
+ #, fuzzy
529
+ msgid "You can easily load default recommended settings using button below"
530
+ msgstr "Je kunt gemakkelijk de standaard aanbevolen instellingen laden met de knop hieronder"
531
+
532
+ #: ../dashboard.php:989
533
+ #, fuzzy
534
+ msgid "Load default settings"
535
+ msgstr "Standaard instellingen laden"
536
+
537
+ #: ../dashboard.php:997
538
+ msgid "doesn't affect Custom login URL and Access Lists"
539
+ msgstr "heeft geen effect op Custom inlog URL en Access Lists"
540
+
541
+ #: ../dashboard.php:1016
542
+ msgid "Donate"
543
+ msgstr "Doneren"
544
+
545
+ #: ../dashboard.php:1118
546
+ msgid "New version is available"
547
+ msgstr "Nieuwe versie beschikbaar"
548
+
549
+ #. Name of the plugin
550
+ #: ../dashboard.php:509 ../dashboard.php:511 ../dashboard.php:516 ../dashboard.
551
+ #: php:540
552
+ msgid "WP Cerber"
553
+ msgstr "WP Cerber"
554
+
555
+ #. URI of the plugin
556
+ #:
557
+ msgid "http://wpcerber.com"
558
+ msgstr "http://wpcerber.com "
559
+
560
+ #: ../wp-cerber.php:1873
561
+ msgid "WP Cerber notify"
562
+ msgstr "WP Cerber melding"
563
+
564
+ #: ../wp-cerber.php:1892
565
+ msgid "Citadel mode is activated"
566
+ msgstr "Citadel modus is actief"
567
+
568
+ #: ../wp-cerber.php:1962
569
+ msgid "New Custom login URL"
570
+ msgstr "Nieuwe aangepaste inlog URL"
571
+
572
+ #: ../wp-cerber.php:2156
573
+ msgid "The WP Cerber requires PHP %s or higher. You are running"
574
+ msgstr "WP Cerber vereist PHP %s of hoger. Je gebruikt nu"
575
+
576
+ #: ../wp-cerber.php:2160
577
+ msgid "The WP Cerber requires WordPress %s or higher. You are running"
578
+ msgstr "WP Cerber vereist WordPress %s of hoger. Je gebruikt nu"
579
+
580
+ #: ../settings.php:92
581
+ msgid "Use file"
582
+ msgstr "Bestand gebruiken"
583
+
584
+ #: ../settings.php:92
585
+ msgid "Write failed login attempts to the file"
586
+ msgstr "Mislukte pogingen opslaan in bestand"
587
+
588
+ #: ../dashboard.php:607
589
+ msgid "Failed attempts in last 24 hours"
590
+ msgstr "Mislukte pogingen in de laatste 24 uur"
591
+
592
+ #: ../dashboard.php:1066
593
+ msgid "Deactivate"
594
+ msgstr "Deactiveren"
595
+
596
+ #: ../dashboard.php:75 ../wp-cerber.php:1927
597
+ msgid "Reason"
598
+ msgstr "Reden"
599
+
600
+ #: ../dashboard.php:129
601
+ msgid "Add IP to the list"
602
+ msgstr "IP-adres toevoegen aan lijst"
603
+
604
+ #: ../dashboard.php:484
605
+ msgid "Add IP to the Black List"
606
+ msgstr "IP-adres toevoegen aan Black List"
607
+
608
+ #: ../common.php:163
609
+ msgid "Attempt to access"
610
+ msgstr "Poging tot toegang"
611
+
612
+ #: ../common.php:162
613
+ msgid "Limit on login attempts is reached"
614
+ msgstr "Limiet voor aantal inlogpogingen is bereikt"
615
+
616
+ #: ../common.php:152 ../common.php:164
617
+ msgid "Attempt to log in with non-existent username"
618
+ msgstr "Poging om in te loggen met niet bestaande gebruikersnaam"
619
+
620
+ #: ../wp-cerber.php:1926
621
+ msgid "Last lockout was added: %s for IP %s"
622
+ msgstr "Laatste lockout was toegevoed: %s voor IP-adres %s"
623
+
624
+ #: ../wp-cerber.php:2184
625
+ msgid "It's important to check security settings."
626
+ msgstr "Het is belangrijk om de beveiligingsinstellingen na te kijken."
627
+
628
+ #: ../wp-cerber.php:2189 ../settings.php:198
629
+ msgid "Hardening"
630
+ msgstr "Hardening"
631
+
632
+ #: ../dashboard.php:462
633
+ msgid "Abuse email:"
634
+ msgstr ""
635
+
636
+ #: ../settings.php:82
637
+ msgid "Email Address"
638
+ msgstr "E-mailadres"
639
+
640
+ #: ../settings.php:82
641
+ msgid "if empty, the admin email %s will be used"
642
+ msgstr ""
643
+
644
+ #: ../settings.php:89
645
+ msgid "Drill down IP"
646
+ msgstr ""
647
+
648
+ #: ../settings.php:89
649
+ msgid "Retrieve extra WHOIS information for IP"
650
+ msgstr "Haal extra WHOIS informatie op voor IP-adres"
651
+
652
+ #: ../settings.php:99
653
+ msgid "Hardening WordPress"
654
+ msgstr "Hardening Wordpress"
655
+
656
+ #: ../settings.php:100
657
+ msgid "Stop user enumeration"
658
+ msgstr ""
659
+
660
+ #: ../settings.php:100
661
+ msgid "Block access to the pages like /?author=n"
662
+ msgstr ""
663
+
664
+ #: ../settings.php:101
665
+ msgid "Disable XML-RPC"
666
+ msgstr "XML-RPC uitschakelen"
667
+
668
+ #: ../settings.php:101
669
+ msgid "Block access to the XML-RPC server (including Pingbacks and Trackbacks)"
670
+ msgstr "Toegang tot XML-RPC server uitschakelen (inclusief Pingbacks en Trackbacks)"
671
+
672
+ #: ../settings.php:102
673
+ msgid "Disable feeds"
674
+ msgstr "Feeds uitschakelen"
675
+
676
+ #: ../settings.php:102
677
+ msgid "Block access to the RSS, Atom and RDF feeds"
678
+ msgstr ""
679
+
680
+ #: ../settings.php:103
681
+ msgid "Disable REST API"
682
+ msgstr "REST API uitschakelen"
683
+
684
+ #: ../settings.php:103
685
+ msgid "Block access to the WordPress REST API"
686
+ msgstr ""
687
+
688
+ #: ../settings.php:153
689
+ msgid "These settings do not affect hosts from the "
690
+ msgstr ""
691
+
692
+ #: ../settings.php:368
693
+ msgid "<strong>ERROR</strong>: please enter a valid email address."
694
+ msgstr ""
695
+
696
+ #: ../settings.php:618
697
+ msgid "Number of items per page:"
698
+ msgstr "Aantal items per pagina:"
699
+
700
+ #: ../wp-cerber.php:1956 ../wp-cerber.php:2181
701
+ msgid "WP Cerber is now active and has started protecting your site"
702
+ msgstr "WP Cerber is actief en beschermt nu je website"
703
+
704
+ #: ../dashboard.php:75
705
+ msgid "Action"
706
+ msgstr "Actie"
707
+
708
+ #: ../dashboard.php:102
709
+ msgid "Nobody can log in or register from these IPs"
710
+ msgstr ""
711
+
712
+ #: ../dashboard.php:144 ../dashboard.php:152
713
+ msgid "Incorrect IP address or IP range"
714
+ msgstr ""
715
+
716
+ #: ../dashboard.php:248
717
+ msgid "Unable to send notification email"
718
+ msgstr ""
719
+
720
+ #: ../dashboard.php:261 ../dashboard.php:1082
721
+ msgid "Settings saved"
722
+ msgstr "Instellingen opgeslagen"
723
+
724
+ #: ../dashboard.php:466
725
+ msgid "Network:"
726
+ msgstr "Netwerk:"
727
+
728
+ #: ../dashboard.php:480
729
+ msgid "Add network to the Black List"
730
+ msgstr "Voeg netwerk toe aan Black List"
731
+
732
+ #: ../dashboard.php:468
733
+ msgid "Cerber Security"
734
+ msgstr "Cerber Security"
735
+
736
+ #: ../dashboard.php:1065
737
+ msgid "Attention! Citadel mode is now active. Nobody is able to log in."
738
+ msgstr "Let op! Citadel modus is actief; niemand kan inloggen."
739
+
740
+ #: ../whois.php:211
741
+ msgid "Unknown"
742
+ msgstr "Onbekend"
743
+
744
+ #. Description of the plugin
745
+ #:
746
+ msgid "Protects site from brute force attacks, bots and hackers. Antispam protection with reCAPTCHA. Comprehensive control of user activity. Restrict login by IP access lists. Limit login attempts. Feel free to contact developer on the site <a href=\"http://wpcerber.com\">wpcerber.com</a>."
747
+ msgstr ""
748
+
749
+ #. Author of the plugin
750
+ #:
751
+ msgid "Gregory"
752
+ msgstr "Gregory"
753
+
754
+ #: ../wp-cerber.php:579 ../wp-cerber.php:629 ../wp-cerber.php:635 ../wp-cerber.
755
+ #: php:658 ../settings.php:400
756
+ msgid "ERROR:"
757
+ msgstr "FOUT:"
758
+
759
+ #: ../wp-cerber.php:481
760
+ msgid "Human verification failed. Please click the square box in the reCAPTCHA block below."
761
+ msgstr ""
762
+
763
+ #: ../wp-cerber.php:591
764
+ msgid "<strong>ERROR</strong>: The password you entered for the username %s is incorrect."
765
+ msgstr ""
766
+
767
+ #: ../wp-cerber.php:636
768
+ msgid "Username is not allowed. Please choose another one."
769
+ msgstr "Gebruikersnaam is niet toegestaan, kies alstublieft een andere."
770
+
771
+ #: ../wp-cerber.php:1918
772
+ msgid "unspecified"
773
+ msgstr ""
774
+
775
+ #: ../wp-cerber.php:1922
776
+ msgid "Number of lockouts is increasing"
777
+ msgstr ""
778
+
779
+ #: ../wp-cerber.php:1928
780
+ msgid "View activity for this IP"
781
+ msgstr ""
782
+
783
+ #: ../wp-cerber.php:1932 ../wp-cerber.php:1934
784
+ msgid "A new version of WP Cerber is available to install"
785
+ msgstr ""
786
+
787
+ #: ../wp-cerber.php:1933
788
+ msgid "Hi!"
789
+ msgstr ""
790
+
791
+ #: ../wp-cerber.php:1935 ../wp-cerber.php:1946
792
+ msgid "Website"
793
+ msgstr "Website"
794
+
795
+ #: ../wp-cerber.php:1938 ../wp-cerber.php:1939
796
+ msgid "The WP Cerber security plugin has been deactivated"
797
+ msgstr ""
798
+
799
+ #: ../wp-cerber.php:1941
800
+ msgid "Not logged in"
801
+ msgstr "Niet ingelogd"
802
+
803
+ #: ../wp-cerber.php:1947
804
+ msgid "By user"
805
+ msgstr "Door gebruiker"
806
+
807
+ #: ../wp-cerber.php:1948
808
+ msgid "From IP address"
809
+ msgstr ""
810
+
811
+ #: ../wp-cerber.php:1951
812
+ msgid "From country"
813
+ msgstr ""
814
+
815
+ #: ../wp-cerber.php:1955
816
+ msgid "The WP Cerber security plugin is now active"
817
+ msgstr ""
818
+
819
+ #: ../wp-cerber.php:2182
820
+ msgid "Your IP address is added to the"
821
+ msgstr ""
822
+
823
+ #: ../wp-cerber.php:2190 ../settings.php:203
824
+ msgid "reCAPTCHA"
825
+ msgstr "reCAPTCHA"
826
+
827
+ #: ../wp-cerber.php:2191
828
+ msgid "Import settings"
829
+ msgstr "Instellingen importeren"
830
+
831
+ #: ../settings.php:83
832
+ msgid "Notification limit"
833
+ msgstr ""
834
+
835
+ #: ../settings.php:83
836
+ msgid "notification letters allowed per hour (0 means unlimited)"
837
+ msgstr ""
838
+
839
+ #: ../settings.php:111
840
+ msgid "User related settings"
841
+ msgstr "Gebruikersinstellingen"
842
+
843
+ #: ../settings.php:112
844
+ msgid "Prohibited usernames"
845
+ msgstr "Verboden gebruikersnamen"
846
+
847
+ #: ../settings.php:112
848
+ msgid "Usernames from this list are not allowed to log in or register. Any IP address, have tried to use any of these usernames, will be immediately blocked. Use comma to separate logins."
849
+ msgstr ""
850
+
851
+ #: ../settings.php:113
852
+ msgid "User session expire"
853
+ msgstr ""
854
+
855
+ #: ../settings.php:113
856
+ msgid "in minutes (leave empty to use default WP value)"
857
+ msgstr "in minuten"
858
+
859
+ #: ../settings.php:117
860
+ msgid "reCAPTCHA settings"
861
+ msgstr "reCAPTCHA instellingen"
862
+
863
+ #: ../settings.php:118
864
+ msgid "Site key"
865
+ msgstr ""
866
+
867
+ #: ../settings.php:119
868
+ msgid "Secret key"
869
+ msgstr ""
870
+
871
+ #: ../settings.php:121
872
+ msgid "Enable reCAPTCHA for WordPress registration form"
873
+ msgstr ""
874
+
875
+ #: ../settings.php:124
876
+ msgid "Lost password form"
877
+ msgstr ""
878
+
879
+ #: ../settings.php:127
880
+ msgid "Login form"
881
+ msgstr ""
882
+
883
+ #: ../settings.php:127
884
+ msgid "Enable reCAPTCHA for WordPress login form"
885
+ msgstr ""
886
+
887
+ #: ../settings.php:148
888
+ msgid "In Citadel mode nobody is able to login. Active user's sessions will not be affected."
889
+ msgstr ""
890
+
891
+ #: ../settings.php:158
892
+ msgid "Before you can start using reCAPTCHA, you have to obtain Site key and Secret key on the Google website"
893
+ msgstr ""
894
+
895
+ #: ../settings.php:159
896
+ msgid "Know more"
897
+ msgstr ""
898
+
899
+ #: ../dashboard.php:511 ../settings.php:179
900
+ msgid "WP Cerber Security"
901
+ msgstr ""
902
+
903
+ #: ../settings.php:200
904
+ msgid "Users"
905
+ msgstr ""
906
+
907
+ #: ../common.php:129
908
+ msgid "User created"
909
+ msgstr ""
910
+
911
+ #: ../common.php:130
912
+ msgid "User registered"
913
+ msgstr ""
914
+
915
+ #: ../common.php:147
916
+ msgid "reCAPTCHA verification failed"
917
+ msgstr ""
918
+
919
+ #: ../common.php:148
920
+ msgid "reCAPTCHA settings are incorrect"
921
+ msgstr ""
922
+
923
+ #: ../common.php:151
924
+ msgid "Attempt to access prohibited URL"
925
+ msgstr ""
926
+
927
+ #: ../common.php:153 ../common.php:165
928
+ msgid "Attempt to log in with prohibited username"
929
+ msgstr ""
930
+
931
+ #: ../common.php:217
932
+ msgid "year"
933
+ msgstr "jaar"
934
+
935
+ #: ../common.php:218
936
+ msgid "month"
937
+ msgstr "maand"
938
+
939
+ #: ../common.php:219
940
+ msgid "day"
941
+ msgstr "dag"
942
+
943
+ #: ../common.php:220
944
+ msgid "hour"
945
+ msgstr "uur"
946
+
947
+ #: ../common.php:221
948
+ msgid "minute"
949
+ msgstr "minuut"
950
+
951
+ #: ../common.php:222
952
+ msgid "second"
953
+ msgstr "seconde"
954
+
955
+ #: ../common.php:225
956
+ msgid "years"
957
+ msgstr "jaren"
958
+
959
+ #: ../common.php:226
960
+ msgid "months"
961
+ msgstr "maanden"
962
+
963
+ #: ../common.php:228
964
+ msgid "hours"
965
+ msgstr "uren"
966
+
967
+ #: ../common.php:230
968
+ msgid "seconds"
969
+ msgstr "secondes"
970
+
971
+ #: ../common.php:236
972
+ msgid "ago"
973
+ msgstr "geleden"
974
+
975
+ #: ../settings.php:90
976
+ msgid "Cerber Lab connection"
977
+ msgstr ""
978
+
979
+ #: ../settings.php:90
980
+ msgid "Send malicious IP addresses to the Cerber Lab"
981
+ msgstr ""
982
+
983
+ #: ../settings.php:91
984
+ msgid "Cerber Lab protocol"
985
+ msgstr ""
986
+
987
+ #: ../settings.php:121
988
+ msgid "Registration form"
989
+ msgstr "Registratieformulier"
990
+
991
+ #: ../settings.php:122
992
+ msgid "Enable reCAPTCHA for WooCommerce registration form"
993
+ msgstr ""
994
+
995
+ #: ../settings.php:124
996
+ msgid "Enable reCAPTCHA for WordPress lost password form"
997
+ msgstr ""
998
+
999
+ #: ../settings.php:125
1000
+ msgid "Enable reCAPTCHA for WooCommerce lost password form"
1001
+ msgstr ""
1002
+
1003
+ #: ../settings.php:128
1004
+ msgid "Enable reCAPTCHA for WooCommerce login form"
1005
+ msgstr ""
1006
+
1007
+ #: ../common.php:149
1008
+ msgid "Request to the Google reCAPTCHA service failed"
1009
+ msgstr ""
1010
+
1011
+ #: ../dashboard.php:951 ../dashboard.php:963
1012
+ msgid "View all"
1013
+ msgstr ""
1014
+
1015
+ #: ../dashboard.php:964
1016
+ msgid "Recently locked out IP addresses"
1017
+ msgstr ""
1018
+
1019
+ #: ../cerber-news.php:73
1020
+ msgid "OK, nail them all"
1021
+ msgstr ""
1022
+
1023
+ #: ../cerber-news.php:74
1024
+ msgid "NO, maybe later"
1025
+ msgstr ""
1026
+
1027
+ #: ../settings.php:186
1028
+ msgid "Dashboard"
1029
+ msgstr ""
1030
+
1031
+ #: ../cerber-news.php:71
1032
+ msgid "Want to make WP Cerber even more powerful?"
1033
+ msgstr ""
1034
+
1035
+ #: ../cerber-news.php:72
1036
+ msgid "Allow WP Cerber to send locked out malicious IP addresses to Cerber Lab. This helps the plugin team to develop new algorithms for WP Cerber that will defend WordPress against new threats and botnets that are appearing everyday. You can disable the sending in the plugin settings at any time."
1037
+ msgstr ""
1038
+
languages/wp-cerber-pl_PL.mo ADDED
Binary file
languages/wp-cerber-pl_PL.po ADDED
@@ -0,0 +1,1176 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "MIME-Version: 1.0\n"
4
+ "Content-Type: text/plain; charset=UTF-8\n"
5
+ "Content-Transfer-Encoding: 8bit\n"
6
+ "X-Generator: POEditor.com\n"
7
+ "Project-Id-Version: WP Cerber\n"
8
+ "Language: pl\n"
9
+ "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
10
+
11
+ #: ../settings.php:57
12
+ msgid "Limit login attempts"
13
+ msgstr "Limit prób logowana"
14
+
15
+ #: ../settings.php:58
16
+ msgid "Attempts"
17
+ msgstr "Próby"
18
+
19
+ #: ../settings.php:59
20
+ msgid "Lockout duration"
21
+ msgstr "Czas zablokowania"
22
+
23
+ #: ../settings.php:59 ../settings.php:78
24
+ msgid "minutes"
25
+ msgstr "minuty"
26
+
27
+ #: ../settings.php:60
28
+ msgid "Aggressive lockout"
29
+ msgstr "Agresywna blokada"
30
+
31
+ #: ../settings.php:63
32
+ msgid "Site connection"
33
+ msgstr "Połączenie witryny"
34
+
35
+ #: ../settings.php:65
36
+ msgid "Proactive security rules"
37
+ msgstr "Pro-aktywne zasady bezpieczeństwa"
38
+
39
+ #: ../settings.php:66
40
+ msgid "Block subnet"
41
+ msgstr "Blokada podsieci"
42
+
43
+ #: ../settings.php:69
44
+ msgid "Request wp-login.php"
45
+ msgstr "Żądanie wp-login.php"
46
+
47
+ #: ../settings.php:69
48
+ msgid "Immediately block IP after any request to wp-login.php"
49
+ msgstr "Natychmiast blokuj wszystkie adresy IP, które próbują uzyskać dostęp do wp-login.php"
50
+
51
+ #: ../settings.php:68
52
+ msgid "Redirect dashboard requests"
53
+ msgstr "Przekieruj żądania do kokpitu"
54
+
55
+ #: ../settings.php:72
56
+ msgid "Custom login page"
57
+ msgstr "Własna strona logowania"
58
+
59
+ #: ../settings.php:73
60
+ msgid "Custom login URL"
61
+ msgstr "Własny URL logowania"
62
+
63
+ #: ../settings.php:73
64
+ msgid "must not overlap with the existing pages or posts slug"
65
+ msgstr "nie może nachodzić z istniejącym stronami lub uproszczonymi adresami wpisów"
66
+
67
+ #: ../settings.php:74
68
+ msgid "Disable wp-login.php"
69
+ msgstr "Wyłącz wp-login.php"
70
+
71
+ #: ../settings.php:74
72
+ msgid "Block direct access to wp-login.php and return HTTP 404 Not Found Error"
73
+ msgstr "Zablokuj bezpośredni dostęp do wp-login.php i przekieruj na błąd 404"
74
+
75
+ #: ../dashboard.php:888 ../settings.php:76
76
+ msgid "Citadel mode"
77
+ msgstr "Tryb Twierdzy"
78
+
79
+ #: ../settings.php:77
80
+ msgid "Threshold"
81
+ msgstr "Pułap"
82
+
83
+ #: ../settings.php:78
84
+ msgid "Duration"
85
+ msgstr "Czas trwania"
86
+
87
+ #: ../wp-cerber.php:2630 ../settings.php:62 ../settings.php:80 ../settings.php:230
88
+ msgid "Notifications"
89
+ msgstr "Notyfikacje"
90
+
91
+ #: ../settings.php:80
92
+ msgid "Send notification to admin email"
93
+ msgstr "Wyślij powiadomienie na adres mailowy administratora"
94
+
95
+ #: ../dashboard.php:897 ../dashboard.php:1377 ../wp-cerber.php:2628 ../settings.
96
+ #: php:223 ../cerber-tools.php:59 ../cerber-tools.php:68 ../cerber-tools.php:178
97
+ msgid "Access Lists"
98
+ msgstr "Listy Dostępowe"
99
+
100
+ #: ../dashboard.php:895 ../dashboard.php:1065 ../wp-cerber.php:2495 ../settings.
101
+ #: php:82 ../settings.php:213
102
+ msgid "Activity"
103
+ msgstr "Aktywność"
104
+
105
+ #: ../dashboard.php:896 ../settings.php:218
106
+ msgid "Lockouts"
107
+ msgstr "Blodady"
108
+
109
+ #: ../settings.php:348
110
+ msgid "%s allowed retries in %s minutes"
111
+ msgstr "%s prób w ciągu %s minut"
112
+
113
+ #: ../settings.php:365
114
+ msgid "Enable after %s failed login attempts in last %s minutes"
115
+ msgstr "Włączane po %d nieprawidłowych próbach logowania w ciągu ostatnich %d minut."
116
+
117
+ #: ../dashboard.php:77 ../dashboard.php:486 ../wp-cerber.php:2496
118
+ msgid "IP"
119
+ msgstr "IP"
120
+
121
+ #: ../dashboard.php:339 ../dashboard.php:486
122
+ msgid "Date"
123
+ msgstr "Data"
124
+
125
+ #: ../dashboard.php:339 ../dashboard.php:486
126
+ msgid "Local User"
127
+ msgstr "Użytkownik lokalny"
128
+
129
+ #: ../dashboard.php:339 ../dashboard.php:486 ../wp-cerber.php:2504
130
+ msgid "Username used"
131
+ msgstr "Nazwa użytkownika użyta"
132
+
133
+ #: ../dashboard.php:83
134
+ msgid "Showing last %d records from %d"
135
+ msgstr "Wyświetla ostatnie %d wpisów z %d"
136
+
137
+ #: ../common.php:284
138
+ msgid "Logged in"
139
+ msgstr "Zalogowano"
140
+
141
+ #: ../common.php:285
142
+ msgid "Logged out"
143
+ msgstr "Wylogowano"
144
+
145
+ #: ../common.php:286
146
+ msgid "Login failed"
147
+ msgstr "Nieprawidłowe logowanie"
148
+
149
+ #: ../common.php:289
150
+ msgid "IP blocked"
151
+ msgstr "Zablokowano IP"
152
+
153
+ #: ../common.php:290
154
+ msgid "Subnet blocked"
155
+ msgstr "Podsieć zablokowana"
156
+
157
+ #: ../common.php:292
158
+ msgid "Citadel activated!"
159
+ msgstr "Twierdza aktywowana!"
160
+
161
+ #: ../dashboard.php:472 ../dashboard.php:652 ../common.php:296
162
+ msgid "Locked out"
163
+ msgstr "Zablokowany"
164
+
165
+ #: ../common.php:297
166
+ msgid "IP blacklisted"
167
+ msgstr "IP dodany do czarnej listy"
168
+
169
+ #: ../common.php:303
170
+ msgid "Password changed"
171
+ msgstr "Zmieniono hasło"
172
+
173
+ #: ../dashboard.php:74 ../dashboard.php:123
174
+ msgid "Remove"
175
+ msgstr "Usuń"
176
+
177
+ #: ../dashboard.php:268
178
+ msgid "Lockout for %s was removed"
179
+ msgstr "Blokada dla %s została usunięta"
180
+
181
+ #: ../dashboard.php:102 ../dashboard.php:467 ../dashboard.php:647 ../dashboard.
182
+ #: php:886 ../wp-cerber.php:2622 ../settings.php:61 ../settings.php:181
183
+ msgid "White IP Access List"
184
+ msgstr "Lista dostępu dla białej listy"
185
+
186
+ #: ../dashboard.php:104 ../dashboard.php:468 ../dashboard.php:649 ../dashboard.
187
+ #: php:887
188
+ msgid "Black IP Access List"
189
+ msgstr "Lista dostępu dla czarnej listy"
190
+
191
+ #: ../dashboard.php:126
192
+ msgid "List is empty"
193
+ msgstr "Lista jest pusta"
194
+
195
+ #: ../dashboard.php:153
196
+ msgid "Address %s was added to White IP Access List"
197
+ msgstr "Adres %s został dodany do Białej listy dostępu"
198
+
199
+ #: ../dashboard.php:166
200
+ msgid "Address %s was added to Black IP Access List"
201
+ msgstr "Adres %s został dodany do czarnej listy"
202
+
203
+ #: ../wp-cerber.php:2181
204
+ msgid "Citadel mode is activated after %d failed login attempts in %d minutes."
205
+ msgstr "Tryb Twierdzy aktywuje się po %d nieprawidłowych logowania w czasie %d minut."
206
+
207
+ #: ../dashboard.php:1188
208
+ msgid "View Activity"
209
+ msgstr "Zobacz Aktywność"
210
+
211
+ #: ../cerber-tools.php:58 ../cerber-tools.php:67
212
+ msgid "Settings"
213
+ msgstr "Ustawienia"
214
+
215
+ #: ../dashboard.php:787
216
+ msgid "Last login"
217
+ msgstr "Ostatnie logowanie"
218
+
219
+ #: ../dashboard.php:814 ../dashboard.php:869
220
+ msgid "Never"
221
+ msgstr "Nigdy"
222
+
223
+ #: ../dashboard.php:1108
224
+ msgid "Are you sure?"
225
+ msgstr "Jesteś pewny/a?"
226
+
227
+ #: ../settings.php:63
228
+ msgid "My site is behind a reverse proxy"
229
+ msgstr "Moja strona łączy się z odwrotnego proxy"
230
+
231
+ #: ../settings.php:67
232
+ msgid "Non-existent users"
233
+ msgstr "Nie-istniejący użytkownicy"
234
+
235
+ #: ../settings.php:67
236
+ msgid "Immediately block IP when attempting to login with a non-existent username"
237
+ msgstr "Natychmiast blokuj IP, które próbują logować się na nieistniejące nazwy użytkownika"
238
+
239
+ #: ../settings.php:68
240
+ msgid "Disable automatic redirecting to the login page when /wp-admin/ is requested by an unauthorized request"
241
+ msgstr "Wyłącz automatyczne przekierowanie na stronę logowania, kiedy jest wykonywane nieautoryzowane żądanie."
242
+
243
+ #: ../settings.php:167
244
+ msgid "Make your protection smarter!"
245
+ msgstr "Zadbaj o to, aby twoja ochrona była mądrzejsza!"
246
+
247
+ #: ../settings.php:171
248
+ msgid "Please enable Permalinks to use this feature. Set Permalink Settings to something other than Default."
249
+ msgstr "Prosimy włączyć włączyć permalinki, aby funkcja była dostępna. Zmień ustawienia permalinków na inne, niż domyślne."
250
+
251
+ #: ../settings.php:174
252
+ msgid "Be careful when enabling this options. If you forget the custom login URL you will not be able to login."
253
+ msgstr "Uważaj przy zmianie tej opcji. Jeśli zapomnisz własnego adresu logowania, to możesz nie być w stanie się zalogować."
254
+
255
+ #: ../wp-cerber.php:2627 ../settings.php:220
256
+ msgid "Main Settings"
257
+ msgstr "Ustawienia Główne"
258
+
259
+ #: ../settings.php:234
260
+ msgid "Help"
261
+ msgstr "Pomoc"
262
+
263
+ #: ../settings.php:353
264
+ msgid "Increase lockout duration to %s hours after %s lockouts in the last %s hours"
265
+ msgstr "Zwiększ czas blokady do %s godzin po %s blokadach w czasie %s godzin"
266
+
267
+ #: ../wp-cerber.php:215
268
+ msgid "You are not allowed to log in. Ask your administrator for assistance."
269
+ msgstr "Nie masz pozwolenia na zalogowanie. Skontaktuj się z administratorem."
270
+
271
+ #: ../wp-cerber.php:221
272
+ msgid "You have reached the login attempts limit. Please try again in %d minutes."
273
+ msgstr "Osiągnięto limit logowań"
274
+
275
+ #: ../wp-cerber.php:240
276
+ msgid "You have only one attempt remaining."
277
+ msgid_plural "You have %d attempts remaining."
278
+ msgstr[0] "Pozostała tobie jedna próba."
279
+ msgstr[1] "Pozostałych prób: %d"
280
+ msgstr[2] "Pozostałych prób: %d"
281
+
282
+ #: ../dashboard.php:499
283
+ msgid "No activity has been logged."
284
+ msgstr "Nie zarejestrowano aktywności."
285
+
286
+ #: ../dashboard.php:77
287
+ msgid "Expires"
288
+ msgstr "Upływa"
289
+
290
+ #: ../dashboard.php:89
291
+ msgid "No lockouts at the moment. The sky is clear."
292
+ msgstr "Brak blokad na chwilę obecną. Niebo jest czyste."
293
+
294
+ #: ../dashboard.php:102
295
+ msgid "These IPs will never be locked out"
296
+ msgstr "Te adresy IP nigdy nie będą zablokowane."
297
+
298
+ #: ../dashboard.php:106
299
+ msgid "Your IP"
300
+ msgstr "Twoje IP"
301
+
302
+ #: ../dashboard.php:162
303
+ msgid "You can't add your IP address"
304
+ msgstr "Nie możesz dodać swojego adresu IP"
305
+
306
+ #: ../wp-cerber.php:2182
307
+ msgid "Last failed attempt was at %s from IP %s with user login: %s."
308
+ msgstr "Ostatnia nieudana próba miała miejsce %s z adresu IP %s oraz nazwie użytkownika: %s"
309
+
310
+ #: ../wp-cerber.php:2245
311
+ msgid "Change notification settings"
312
+ msgstr "Zmień ustawienia notyfikacji"
313
+
314
+ #: ../wp-cerber.php:2605
315
+ msgid "Can't activate WP Cerber due to a database error."
316
+ msgstr "Nie można aktywować WP Cerber przez błąd bazy danych."
317
+
318
+ #: ../settings.php:360
319
+ msgid "Notify admin if the number of active lockouts above"
320
+ msgstr "Powiadom administratora, jeśli liczba aktywnych blokad przekroczy"
321
+
322
+ #: ../settings.php:83
323
+ msgid "days"
324
+ msgstr "dni"
325
+
326
+ #: ../dashboard.php:838
327
+ msgid "Cerber Quick View"
328
+ msgstr "Szybki podgląd Cerbera"
329
+
330
+ #: ../dashboard.php:85
331
+ msgid "Hint"
332
+ msgstr "Podpowiedź"
333
+
334
+ #: ../dashboard.php:85
335
+ msgid "To view activity, click on the IP"
336
+ msgstr "Aby zobaczyć aktywność, kliknij na IP"
337
+
338
+ #: ../dashboard.php:123 ../dashboard.php:679
339
+ msgid "Check for activity"
340
+ msgstr "Sprawdź aktywność"
341
+
342
+ #: ../settings.php:66
343
+ msgid "Always block entire subnet Class C of intruders IP"
344
+ msgstr "Zawsze blokuj całą podsieć Klasy C z adresów IP intruzów"
345
+
346
+ #: ../settings.php:80 ../settings.php:362
347
+ msgid "Click to send test"
348
+ msgstr "Kliknij, aby wysłać wiadomość testową"
349
+
350
+ #: ../settings.php:445
351
+ msgid "Attention! You have changed the login URL! The new login URL is"
352
+ msgstr "Uwaga! Został zmieniony adres URL logowania! Nowy adres to"
353
+
354
+ #: ../dashboard.php:786
355
+ msgid "Comments"
356
+ msgstr "Komentarze"
357
+
358
+ #: ../dashboard.php:789
359
+ msgid "Date of registration"
360
+ msgstr "Data rejestracji"
361
+
362
+ #: ../dashboard.php:258
363
+ msgid "Message has been sent to "
364
+ msgstr "Wiadomość została wysłana do"
365
+
366
+ #: ../dashboard.php:1250
367
+ msgid "Update to version %s of WP Cerber"
368
+ msgstr "Aktualizuj WP Cerber do wersji %s"
369
+
370
+ #: ../wp-cerber.php:2183 ../wp-cerber.php:2520
371
+ msgid "View activity in dashboard"
372
+ msgstr "Zobacz aktywność na pulpicie"
373
+
374
+ #: ../wp-cerber.php:2213
375
+ msgid "Number of active lockouts"
376
+ msgstr "Liczba aktywnych blokad"
377
+
378
+ #: ../wp-cerber.php:2217
379
+ msgid "View lockouts in dashboard"
380
+ msgstr "Sprawdź blokady w kokpicie"
381
+
382
+ #: ../wp-cerber.php:2270
383
+ msgid "This message was sent by"
384
+ msgstr "Ta wiadomość została wysłana przez"
385
+
386
+ #: ../dashboard.php:733 ../cerber-tools.php:40
387
+ msgid "Tools"
388
+ msgstr "Narzędzia"
389
+
390
+ #: ../cerber-tools.php:55
391
+ msgid "Export settings to the file"
392
+ msgstr "Eksportuj ustawienia do pliku"
393
+
394
+ #: ../cerber-tools.php:56
395
+ msgid "When you click the button below you will get a configuration file, which you can upload on another site."
396
+ msgstr "Kiedy klikniesz na przycisk poniżej, to otrzymasz plik konfiguracyjny, który możesz importować na innej stronie."
397
+
398
+ #: ../cerber-tools.php:57
399
+ msgid "What do you want to export?"
400
+ msgstr "Co chcesz eksportować?"
401
+
402
+ #: ../cerber-tools.php:60
403
+ msgid "Download file"
404
+ msgstr "Pobierz plik"
405
+
406
+ #: ../cerber-tools.php:62
407
+ msgid "Import settings from the file"
408
+ msgstr "Importuj ustawienia z pliku"
409
+
410
+ #: ../cerber-tools.php:63
411
+ msgid "When you click the button below, file will be uploaded and all existing settings will be overridden."
412
+ msgstr "Kiedy klikniesz na przycisk poniżej, to zostanie zaimportowany plik i wszystkie dotychczasowe opcje zostaną nadpisane."
413
+
414
+ #: ../cerber-tools.php:64
415
+ msgid "Select file to import."
416
+ msgstr "Wybierz plik do importu"
417
+
418
+ #: ../cerber-tools.php:64
419
+ msgid "Maximum upload file size: %s."
420
+ msgstr "Maksymalna wielkość pliku importu: %s"
421
+
422
+ #: ../cerber-tools.php:67
423
+ msgid "What do you want to import?"
424
+ msgstr "Co chcesz importować?"
425
+
426
+ #: ../cerber-tools.php:69
427
+ msgid "Upload file"
428
+ msgstr "Wyślij plik"
429
+
430
+ #: ../cerber-tools.php:148
431
+ msgid "No file was uploaded or file is corrupted"
432
+ msgstr "Żaden plik nie został zaimportowany lub plik jest uszkodzony"
433
+
434
+ #: ../cerber-tools.php:178
435
+ msgid "Error while updating"
436
+ msgstr "Błąd podczas aktualizacji"
437
+
438
+ #: ../cerber-tools.php:181
439
+ msgid "Settings has imported successfully from"
440
+ msgstr "Ustawienia zaimportowano prawidłowo z"
441
+
442
+ #: ../cerber-tools.php:185
443
+ msgid "Error while parsing file"
444
+ msgstr "Bład parsowania pliku"
445
+
446
+ #: ../dashboard.php:77 ../dashboard.php:486
447
+ msgid "Hostname"
448
+ msgstr "Nazwa hosta"
449
+
450
+ #: ../dashboard.php:237
451
+ msgid "unknown"
452
+ msgstr "nieznane"
453
+
454
+ #: ../settings.php:83
455
+ msgid "Keep records for"
456
+ msgstr "Trzymaj zapisy przez"
457
+
458
+ #: ../dashboard.php:873
459
+ msgid "active"
460
+ msgstr "aktywne"
461
+
462
+ #: ../dashboard.php:873
463
+ msgid "deactivate"
464
+ msgstr "deaktywuj"
465
+
466
+ #: ../dashboard.php:875
467
+ msgid "not active"
468
+ msgstr "nieaktywne"
469
+
470
+ #: ../dashboard.php:876
471
+ msgid "disabled"
472
+ msgstr "wyłączone"
473
+
474
+ #: ../dashboard.php:881
475
+ msgid "failed attempts"
476
+ msgstr "nieudane próby"
477
+
478
+ #: ../dashboard.php:881 ../dashboard.php:882
479
+ msgid "in 24 hours"
480
+ msgstr "przez 24 godziny"
481
+
482
+ #: ../dashboard.php:881 ../dashboard.php:882
483
+ msgid "view all"
484
+ msgstr "zobacz wszystkie"
485
+
486
+ #: ../dashboard.php:882
487
+ msgid "lockouts"
488
+ msgstr "blokady"
489
+
490
+ #: ../dashboard.php:884
491
+ msgid "Lockouts at the moment"
492
+ msgstr "Blokad na chwilę obecną"
493
+
494
+ #: ../dashboard.php:885
495
+ msgid "Last lockout"
496
+ msgstr "Ostatnia blokada"
497
+
498
+ #: ../dashboard.php:886 ../dashboard.php:887 ../dashboard.php:1356
499
+ msgid "entry"
500
+ msgid_plural "entries"
501
+ msgstr[0] "wpis"
502
+ msgstr[1] "wpisów"
503
+ msgstr[2] "wpisy"
504
+
505
+ #: ../dashboard.php:1103
506
+ msgid "Confused about some settings?"
507
+ msgstr "Nie rozumiesz niektórych ustawień?"
508
+
509
+ #: ../dashboard.php:1104
510
+ msgid "You can easily load default recommended settings using button below"
511
+ msgstr "Możesz bez problemu załadować rekomendowane ustawienia klikając na przycisk poniżej"
512
+
513
+ #: ../dashboard.php:1106
514
+ msgid "Load default settings"
515
+ msgstr "Załaduj ustawienia domyślne"
516
+
517
+ #: ../dashboard.php:1114
518
+ msgid "doesn't affect Custom login URL and Access Lists"
519
+ msgstr "Nie ma wpływu na własny adres logowania oraz na Listy Dostępu"
520
+
521
+ #: ../dashboard.php:1133
522
+ msgid "Donate"
523
+ msgstr "Wyślij darowiznę"
524
+
525
+ #: ../dashboard.php:1244
526
+ msgid "New version is available"
527
+ msgstr "Dostępna jest nowa wersja"
528
+
529
+ #. Name of the plugin
530
+ #: ../dashboard.php:728 ../dashboard.php:743
531
+ msgid "WP Cerber"
532
+ msgstr "WP Cerber"
533
+
534
+ #. URI of the plugin
535
+ #:
536
+ msgid "http://wpcerber.com"
537
+ msgstr "http://wpcerber.com"
538
+
539
+ #: ../wp-cerber.php:2161
540
+ msgid "WP Cerber notify"
541
+ msgstr "Powiadomienie WP Cerber"
542
+
543
+ #: ../wp-cerber.php:2179
544
+ msgid "Citadel mode is activated"
545
+ msgstr "Tryb Twierdzy jest aktywny"
546
+
547
+ #: ../wp-cerber.php:2250
548
+ msgid "New Custom login URL"
549
+ msgstr "Nowy, własny URL logowania"
550
+
551
+ #: ../wp-cerber.php:2596
552
+ msgid "The WP Cerber requires PHP %s or higher. You are running"
553
+ msgstr "WP Cerber wymaga wersji PHP %s lub wyższej. Twoja wersja to"
554
+
555
+ #: ../wp-cerber.php:2600
556
+ msgid "The WP Cerber requires WordPress %s or higher. You are running"
557
+ msgstr "WP Cerber wymaga wersji Wordpress %s lub wyższej. Twoja wersja to"
558
+
559
+ #: ../settings.php:86
560
+ msgid "Use file"
561
+ msgstr "Użyj pliku"
562
+
563
+ #: ../settings.php:86
564
+ msgid "Write failed login attempts to the file"
565
+ msgstr "Zapisuj nieprawidłowe próby logowania do pliku"
566
+
567
+ #: ../dashboard.php:788
568
+ msgid "Failed attempts in last 24 hours"
569
+ msgstr "Nieudane próby w ciągu ostatnich 24 godzin"
570
+
571
+ #: ../dashboard.php:1187
572
+ msgid "Deactivate"
573
+ msgstr "Wyłącz"
574
+
575
+ #: ../dashboard.php:77 ../wp-cerber.php:2215
576
+ msgid "Reason"
577
+ msgstr "Powód"
578
+
579
+ #: ../dashboard.php:130
580
+ msgid "Add IP to the list"
581
+ msgstr "Dodaj IP do listy"
582
+
583
+ #: ../dashboard.php:697
584
+ msgid "Add IP to the Black List"
585
+ msgstr "Dodaj IP do czarnej listy"
586
+
587
+ #: ../common.php:325
588
+ msgid "Attempt to access"
589
+ msgstr "Próba dostępu"
590
+
591
+ #: ../common.php:324
592
+ msgid "Limit on login attempts is reached"
593
+ msgstr "Osiągnięto limit prób logowania"
594
+
595
+ #: ../common.php:311 ../common.php:326
596
+ msgid "Attempt to log in with non-existent username"
597
+ msgstr "Próba logowania z nieistniejącej nazwy użytkownika"
598
+
599
+ #: ../wp-cerber.php:2214
600
+ msgid "Last lockout was added: %s for IP %s"
601
+ msgstr "Ostatnią blokadę dodano: %s dla IP %s"
602
+
603
+ #: ../wp-cerber.php:2624
604
+ msgid "It's important to check security settings."
605
+ msgstr "Ważnym jest, aby sprawdzić ustawienia zabezpieczeń."
606
+
607
+ #: ../wp-cerber.php:2629 ../settings.php:225
608
+ msgid "Hardening"
609
+ msgstr "Wzmacnianie"
610
+
611
+ #: ../dashboard.php:675
612
+ msgid "Abuse email:"
613
+ msgstr "Nadużycie adresu email:"
614
+
615
+ #: ../settings.php:143
616
+ msgid "Email Address"
617
+ msgstr "Adres E-mail"
618
+
619
+ #: ../settings.php:143
620
+ msgid "if empty, the admin email %s will be used"
621
+ msgstr "jeśli puste, to zostanie użyty adres e-mail administratora: %s"
622
+
623
+ #: ../settings.php:89
624
+ msgid "Drill down IP"
625
+ msgstr "Przygwóźdź adres IP"
626
+
627
+ #: ../settings.php:89
628
+ msgid "Retrieve extra WHOIS information for IP"
629
+ msgstr "Sprawdź dodatkowe informacje WHOIS dla adresu IP"
630
+
631
+ #: ../settings.php:97
632
+ msgid "Hardening WordPress"
633
+ msgstr "Wzmacnianie Wordpressa"
634
+
635
+ #: ../settings.php:98
636
+ msgid "Stop user enumeration"
637
+ msgstr "Wyłącz numerację użytkowników"
638
+
639
+ #: ../settings.php:98
640
+ msgid "Block access to the pages like /?author=n"
641
+ msgstr "Wyłącz dostęp do stron typu /?author=n"
642
+
643
+ #: ../settings.php:99
644
+ msgid "Disable XML-RPC"
645
+ msgstr "Wyłącz XML-RPC"
646
+
647
+ #: ../settings.php:99
648
+ msgid "Block access to the XML-RPC server (including Pingbacks and Trackbacks)"
649
+ msgstr "Zablokuj dostęp do serwera XML-RPC (włączając w to Pingbacki i Trackbacki"
650
+
651
+ #: ../settings.php:100
652
+ msgid "Disable feeds"
653
+ msgstr "Wyłącz kanały RSS"
654
+
655
+ #: ../settings.php:100
656
+ msgid "Block access to the RSS, Atom and RDF feeds"
657
+ msgstr "Wyłącz dostęp do RSS"
658
+
659
+ #: ../settings.php:101
660
+ msgid "Disable REST API"
661
+ msgstr "Wyłącz REST API"
662
+
663
+ #: ../settings.php:101
664
+ msgid "Block access to the WordPress REST API"
665
+ msgstr "Zablokuj dostęp do REST API Wordpressa"
666
+
667
+ #: ../settings.php:181
668
+ msgid "These settings do not affect hosts from the "
669
+ msgstr "Te ustawienia nie mają wpływu na hosty od"
670
+
671
+ #: ../settings.php:525
672
+ msgid "<strong>ERROR</strong>: please enter a valid email address."
673
+ msgstr "<strong>BŁĄD</strong>: Proszę podać prawidłowy adres mailowy"
674
+
675
+ #: ../wp-cerber.php:2244 ../wp-cerber.php:2621
676
+ msgid "WP Cerber is now active and has started protecting your site"
677
+ msgstr "WP Cerber jest teraz aktywny i chroni twoją witrynę"
678
+
679
+ #: ../dashboard.php:77
680
+ msgid "Action"
681
+ msgstr "Akcja"
682
+
683
+ #: ../dashboard.php:104
684
+ msgid "Nobody can log in or register from these IPs"
685
+ msgstr "Z tych adresów IP nikt nie może się zalogować ani zarejestrować"
686
+
687
+ #: ../dashboard.php:150 ../dashboard.php:158
688
+ msgid "Incorrect IP address or IP range"
689
+ msgstr "Nieprawidłowy adres IP lub zakres IP"
690
+
691
+ #: ../dashboard.php:261
692
+ msgid "Unable to send notification email"
693
+ msgstr "Nie udało się wysłać powiadomienia"
694
+
695
+ #: ../dashboard.php:284 ../dashboard.php:1203
696
+ msgid "Settings saved"
697
+ msgstr "Ustawienia zapisano"
698
+
699
+ #: ../dashboard.php:679
700
+ msgid "Network:"
701
+ msgstr "Sieć:"
702
+
703
+ #: ../dashboard.php:693
704
+ msgid "Add network to the Black List"
705
+ msgstr "Dodaj sieć do Czarnej Listy"
706
+
707
+ #: ../dashboard.php:1186
708
+ msgid "Attention! Citadel mode is now active. Nobody is able to log in."
709
+ msgstr "Uwaga! Tryb Twierdzy jest aktywny. Nikt obecnie nie może się zalogować."
710
+
711
+ #: ../whois.php:210 ../common.php:323
712
+ msgid "Unknown"
713
+ msgstr "Nieznane"
714
+
715
+ #. Description of the plugin
716
+ #:
717
+ msgid "Protects site from brute force attacks, bots and hackers. Antispam protection with reCAPTCHA. Comprehensive control of user activity. Restrict login by IP access lists. Limit login attempts. Feel free to contact developer on the site <a href=\"http://wpcerber.com\">wpcerber.com</a>."
718
+ msgstr "Broni stronę przed atakami typu brute force, botami, czy hakerami. Zaopatrzona jest również w moduł bezpieczeństwa reCAPTCHA. Umożliwia kompleksowe zarządzanie aktywnością użytkownika. Dodatkowo umożliwia ustawienie limitu logowań. Możesz kontaktować się z autorem poprzez stronę <a href=\"http://wpcerber.com\">wpcerber.com</a>."
719
+
720
+ #. Author of the plugin
721
+ #:
722
+ msgid "Gregory"
723
+ msgstr "Gregory"
724
+
725
+ #: ../wp-cerber.php:302 ../wp-cerber.php:558 ../wp-cerber.php:570 ../wp-cerber.
726
+ #: php:577 ../wp-cerber.php:715 ../wp-cerber.php:919 ../wp-cerber.php:924 ../wp-
727
+ #: cerber.php:930 ../wp-cerber.php:960 ../common.php:80 ../common.php:133 ..
728
+ #: /common.php:137 ../settings.php:498
729
+ msgid "ERROR:"
730
+ msgstr "BŁĄD:"
731
+
732
+ #: ../wp-cerber.php:587
733
+ msgid "Human verification failed. Please click the square box in the reCAPTCHA block below."
734
+ msgstr "Nieudana weryfikacja. Proszę zaznaczyć kwadrat poniżej w bloku reCAPTCHA"
735
+
736
+ #: ../wp-cerber.php:726
737
+ msgid "<strong>ERROR</strong>: The password you entered for the username %s is incorrect."
738
+ msgstr "<strong>BŁĄD</strong>: Hasło dla nazwy użytkownika jest nieprawidłowe"
739
+
740
+ #: ../wp-cerber.php:925
741
+ msgid "Username is not allowed. Please choose another one."
742
+ msgstr "Nazwa użytkownika niedostępna. Prosimy wybrać inną."
743
+
744
+ #: ../wp-cerber.php:2208
745
+ msgid "unspecified"
746
+ msgstr "nieokreślone"
747
+
748
+ #: ../wp-cerber.php:2211
749
+ msgid "Number of lockouts is increasing"
750
+ msgstr "Liczba blokad wzrasta"
751
+
752
+ #: ../wp-cerber.php:2216
753
+ msgid "View activity for this IP"
754
+ msgstr "Zobacz aktywność tego IP"
755
+
756
+ #: ../wp-cerber.php:2220 ../wp-cerber.php:2222
757
+ msgid "A new version of WP Cerber is available to install"
758
+ msgstr "Dostępna jest nowa wersja WP Cerber"
759
+
760
+ #: ../wp-cerber.php:2221
761
+ msgid "Hi!"
762
+ msgstr "Cześć!"
763
+
764
+ #: ../wp-cerber.php:2223 ../wp-cerber.php:2234
765
+ msgid "Website"
766
+ msgstr "Witryna"
767
+
768
+ #: ../wp-cerber.php:2226 ../wp-cerber.php:2227
769
+ msgid "The WP Cerber security plugin has been deactivated"
770
+ msgstr "Wtyczka bezpieczeństwa WP Cerber została wyłączona"
771
+
772
+ #: ../wp-cerber.php:2229
773
+ msgid "Not logged in"
774
+ msgstr "Niezalogowany"
775
+
776
+ #: ../wp-cerber.php:2235
777
+ msgid "By user"
778
+ msgstr "- użytkownik"
779
+
780
+ #: ../wp-cerber.php:2236
781
+ msgid "From IP address"
782
+ msgstr "Z adresu IP"
783
+
784
+ #: ../wp-cerber.php:2239
785
+ msgid "From country"
786
+ msgstr "Z Państwa"
787
+
788
+ #: ../wp-cerber.php:2243
789
+ msgid "The WP Cerber security plugin is now active"
790
+ msgstr "Wtyczka WP Cerber jest teraz aktywna"
791
+
792
+ #: ../wp-cerber.php:2622
793
+ msgid "Your IP address is added to the"
794
+ msgstr "Twój adres IP został dodany do"
795
+
796
+ #: ../dashboard.php:732
797
+ msgid "reCAPTCHA"
798
+ msgstr "reCAPTCHA"
799
+
800
+ #: ../wp-cerber.php:2631
801
+ msgid "Import settings"
802
+ msgstr "Importuj ustawienia"
803
+
804
+ #: ../settings.php:144
805
+ msgid "Notification limit"
806
+ msgstr "Limit notyfikacji"
807
+
808
+ #: ../settings.php:144
809
+ msgid "notification letters allowed per hour (0 means unlimited)"
810
+ msgstr "limit powiadomień na godzinę (0 oznacza nieograniczone)"
811
+
812
+ #: ../settings.php:110
813
+ msgid "User related settings"
814
+ msgstr "Ustawienia związane z użytkownikami"
815
+
816
+ #: ../settings.php:111
817
+ msgid "Prohibited usernames"
818
+ msgstr "Zabronione nazwy użytkownika"
819
+
820
+ #: ../settings.php:111
821
+ msgid "Usernames from this list are not allowed to log in or register. Any IP address, have tried to use any of these usernames, will be immediately blocked. Use comma to separate logins."
822
+ msgstr "Użytkownicy z tej listy nie mogą się logować, ani rejestrować. Każdy adres IP próbujący używać jakiekolwiek nazwy użytkownika z tej listy zostanie zablokowany."
823
+
824
+ #: ../settings.php:112
825
+ msgid "User session expire"
826
+ msgstr "Sesja użytkownika przedawnia się"
827
+
828
+ #: ../settings.php:112
829
+ msgid "in minutes (leave empty to use default WP value)"
830
+ msgstr "w minutach (pozostaw puste, aby użyć standardowej wartości WP)"
831
+
832
+ #: ../cerber-tools.php:195
833
+ msgid "reCAPTCHA settings"
834
+ msgstr "Ustawienia reCAPTCHA"
835
+
836
+ #: ../settings.php:119
837
+ msgid "Site key"
838
+ msgstr "Klucz strony"
839
+
840
+ #: ../settings.php:120
841
+ msgid "Secret key"
842
+ msgstr "Sekretny klucz"
843
+
844
+ #: ../settings.php:123
845
+ msgid "Enable reCAPTCHA for WordPress registration form"
846
+ msgstr "Włącz reCAPTCHA dla formularza rejestracji Wordpressa"
847
+
848
+ #: ../settings.php:126
849
+ msgid "Lost password form"
850
+ msgstr "Formularz odzyskiwania hasła"
851
+
852
+ #: ../settings.php:129
853
+ msgid "Login form"
854
+ msgstr "Formularz logowania"
855
+
856
+ #: ../settings.php:129
857
+ msgid "Enable reCAPTCHA for WordPress login form"
858
+ msgstr "Włącz reCAPTCHę dla formularza logowania Wordpressa"
859
+
860
+ #: ../settings.php:184
861
+ msgid "Before you can start using reCAPTCHA, you have to obtain Site key and Secret key on the Google website"
862
+ msgstr "Zanim zaczniesz używać reCAPTCHA musisz zdobyć dwa klucze na specjalnej stronie Google"
863
+
864
+ #: ../cerber-lab.php:527 ../settings.php:185
865
+ msgid "Know more"
866
+ msgstr "Dowiedz się więcej"
867
+
868
+ #: ../dashboard.php:728 ../settings.php:206
869
+ msgid "WP Cerber Security"
870
+ msgstr "Zabezpieczenia WP Cerber"
871
+
872
+ #: ../settings.php:227
873
+ msgid "Users"
874
+ msgstr "Użytkownicy"
875
+
876
+ #: ../common.php:282
877
+ msgid "User created"
878
+ msgstr "Stworzono użytkownika"
879
+
880
+ #: ../common.php:283
881
+ msgid "User registered"
882
+ msgstr "Użytkownik zarejestrowany"
883
+
884
+ #: ../common.php:306
885
+ msgid "reCAPTCHA verification failed"
886
+ msgstr "nieprawidłowa weryfikacja reCATPCHA"
887
+
888
+ #: ../common.php:307
889
+ msgid "reCAPTCHA settings are incorrect"
890
+ msgstr "ustawienia reCAPTCHA są nieprawidłowe"
891
+
892
+ #: ../common.php:310
893
+ msgid "Attempt to access prohibited URL"
894
+ msgstr "Próba logowania na zabroniony URL"
895
+
896
+ #: ../common.php:312 ../common.php:327
897
+ msgid "Attempt to log in with prohibited username"
898
+ msgstr "Próba zalogowania z zabronioną nazwą użytkownika"
899
+
900
+ #: ../settings.php:84
901
+ msgid "Cerber Lab connection"
902
+ msgstr "Połączenie Cerber Lab"
903
+
904
+ #: ../settings.php:84
905
+ msgid "Send malicious IP addresses to the Cerber Lab"
906
+ msgstr "Wyślij szkodliwe adresy IP do Cerber Lab"
907
+
908
+ #: ../settings.php:85
909
+ msgid "Cerber Lab protocol"
910
+ msgstr "Protokół Cerber Lab"
911
+
912
+ #: ../settings.php:123
913
+ msgid "Registration form"
914
+ msgstr "Formularz rejestracji"
915
+
916
+ #: ../settings.php:124
917
+ msgid "Enable reCAPTCHA for WooCommerce registration form"
918
+ msgstr "Włącz reCAPTCHA dla formularza rejestracji WooCommerce"
919
+
920
+ #: ../settings.php:126
921
+ msgid "Enable reCAPTCHA for WordPress lost password form"
922
+ msgstr "Włącz reCAPTCHA dla formularza przypomnienia hasła Wordpressa"
923
+
924
+ #: ../settings.php:127
925
+ msgid "Enable reCAPTCHA for WooCommerce lost password form"
926
+ msgstr "Włącz reCAPTCHA dla formularza przypomnienia hasła WooCommerce"
927
+
928
+ #: ../settings.php:130
929
+ msgid "Enable reCAPTCHA for WooCommerce login form"
930
+ msgstr "Włącz reCAPTCHę dla formularza logowania WooCoomerce"
931
+
932
+ #: ../common.php:308
933
+ msgid "Request to the Google reCAPTCHA service failed"
934
+ msgstr "Wysyłanie żądania do Google reCAPTCHA nie powiodło się"
935
+
936
+ #: ../dashboard.php:1052 ../dashboard.php:1080
937
+ msgid "View all"
938
+ msgstr "Zobacz wszystkie"
939
+
940
+ #: ../dashboard.php:1081
941
+ msgid "Recently locked out IP addresses"
942
+ msgstr "Ostatnio zablokowane adresy IP"
943
+
944
+ #: ../cerber-lab.php:525
945
+ msgid "OK, nail them all"
946
+ msgstr "OK"
947
+
948
+ #: ../cerber-lab.php:526
949
+ msgid "NO, maybe later"
950
+ msgstr "NIE"
951
+
952
+ #: ../dashboard.php:730 ../dashboard.php:894 ../dashboard.php:1376 ../settings.
953
+ #: php:211
954
+ msgid "Dashboard"
955
+ msgstr "Kokpit"
956
+
957
+ #: ../cerber-lab.php:523
958
+ msgid "Want to make WP Cerber even more powerful?"
959
+ msgstr "Chcesz uczyć WP Cerber jeszcze bardziej potężnym?"
960
+
961
+ #: ../cerber-lab.php:524
962
+ msgid "Allow WP Cerber to send locked out malicious IP addresses to Cerber Lab. This helps the plugin team to develop new algorithms for WP Cerber that will defend WordPress against new threats and botnets that are appearing everyday. You can disable the sending in the plugin settings at any time."
963
+ msgstr "Pozwól na wysyłanie szkodliwych adresów IP do Cerber Lab. Pomoże to stworzyć nowe algorytmy dla obrony Wordpressa przed zagrożeniami botów pojawiających się na co dzień. Możesz wyłączyć tę opcję w każdej chwili w opcjach wtyczki."
964
+
965
+ #: ../dashboard.php:339
966
+ msgid "IP address"
967
+ msgstr "Adres IP"
968
+
969
+ #: ../dashboard.php:339
970
+ msgid "User login"
971
+ msgstr "Login użytkownika"
972
+
973
+ #: ../dashboard.php:339
974
+ msgid "User ID"
975
+ msgstr "ID użytkownika"
976
+
977
+ #: ../dashboard.php:495
978
+ msgid "Export"
979
+ msgstr "Eksport"
980
+
981
+ #: ../dashboard.php:505
982
+ msgid "All activities"
983
+ msgstr "Wszystkie aktywności"
984
+
985
+ #: ../dashboard.php:514
986
+ msgid "Search for IP or username"
987
+ msgstr "Szukaj IP lub użytkownika"
988
+
989
+ #: ../dashboard.php:514
990
+ msgid "Filter"
991
+ msgstr "Filtr"
992
+
993
+ #: ../dashboard.php:730
994
+ msgid "Cerber Dashboard"
995
+ msgstr "Kokpit Cerbera"
996
+
997
+ #: ../dashboard.php:732
998
+ msgid "Cerber reCAPTCHA settings"
999
+ msgstr "Ustawienia reCAPTCHA Cerbera"
1000
+
1001
+ #: ../dashboard.php:733
1002
+ msgid "Cerber tools"
1003
+ msgstr "Narzędzia Cerbera"
1004
+
1005
+ #: ../dashboard.php:1289
1006
+ msgid "Subscribe"
1007
+ msgstr "Subskrybuj"
1008
+
1009
+ #: ../dashboard.php:1290
1010
+ msgid "Unsubscribe"
1011
+ msgstr "Odsubskrybuj"
1012
+
1013
+ #: ../dashboard.php:1318
1014
+ msgid "You've subscribed"
1015
+ msgstr "Zasubskrybowałeś/aś"
1016
+
1017
+ #: ../dashboard.php:1321
1018
+ msgid "You've unsubscribed"
1019
+ msgstr "Odsubskrybowałeś/aś"
1020
+
1021
+ #: ../wp-cerber.php:2254 ../wp-cerber.php:2255
1022
+ msgid "A new activity has been recorded"
1023
+ msgstr "Zarejestrowano nową aktywność"
1024
+
1025
+ #: ../wp-cerber.php:2500
1026
+ msgid "User"
1027
+ msgstr "Użytkownik"
1028
+
1029
+ #: ../wp-cerber.php:2508
1030
+ msgid "Search string"
1031
+ msgstr "Fraza do wyszukania"
1032
+
1033
+ #: ../wp-cerber.php:2521
1034
+ msgid "To unsubscribe click here"
1035
+ msgstr "Aby wyłączyć subskrypcję, kliknij tutaj"
1036
+
1037
+ #: ../settings.php:88
1038
+ msgid "Preferences"
1039
+ msgstr "Preferencje"
1040
+
1041
+ #: ../settings.php:90
1042
+ msgid "Date format"
1043
+ msgstr "Format daty"
1044
+
1045
+ #: ../settings.php:90
1046
+ msgid "if empty, the default format %s will be used"
1047
+ msgstr "Jeśli puste, do zostanie użyty domyślny format %s"
1048
+
1049
+ #: ../dashboard.php:890 ../settings.php:146
1050
+ msgid "Push notifications"
1051
+ msgstr "Pchnij notyfikacje"
1052
+
1053
+ #: ../settings.php:141
1054
+ msgid "Email notifications"
1055
+ msgstr "Notyfikacje E-mail"
1056
+
1057
+ #: ../settings.php:143
1058
+ msgid "Use comma to specify multiple values"
1059
+ msgstr "Używaj przecinka, aby określić więcej wartości"
1060
+
1061
+ #: ../settings.php:153
1062
+ msgid "All connected devices"
1063
+ msgstr "Wszystkie połączone urządzenia"
1064
+
1065
+ #: ../settings.php:154
1066
+ msgid "No devices found"
1067
+ msgstr "Nie znaleziono urządzeń"
1068
+
1069
+ #: ../settings.php:156
1070
+ msgid "Not available"
1071
+ msgstr "Niedostępne"
1072
+
1073
+ #: ../common.php:304
1074
+ msgid "Password reset requested"
1075
+ msgstr "Zażądano reset hasła"
1076
+
1077
+ #: ../common.php:328
1078
+ msgid "Limit on failed reCAPTCHA verifications is reached"
1079
+ msgstr "Osiągnięto limit nieprawidłowych weryfikacji reCAPTCHA"
1080
+
1081
+ #: ../common.php:380
1082
+ msgid "%s ago"
1083
+ msgstr "%s temu"
1084
+
1085
+ #: ../settings.php:61
1086
+ msgid "Apply limit login rules to IP addresses in the White IP Access List"
1087
+ msgstr "Załącz zasadę limitu logować do adresów IP na białej liście"
1088
+
1089
+ #: ../settings.php:70
1090
+ msgid "Display 404 page"
1091
+ msgstr "Wyświetl stronę 404"
1092
+
1093
+ #: ../settings.php:121
1094
+ msgid "Invisible reCAPTCHA"
1095
+ msgstr "Niewidzialna reCAPTCHA"
1096
+
1097
+ #: ../settings.php:121
1098
+ msgid "Enable invisible reCAPTCHA"
1099
+ msgstr "Włącz niewidzialną reCAPTCHę"
1100
+
1101
+ #: ../settings.php:121
1102
+ msgid "(do not enable it unless you get and enter the Site and Secret keys for the invisible version)"
1103
+ msgstr "(nie włączaj, dopóki nie zaopatrzysz się w odpowiednie klucze dla wersji niewidzialnej reCAPTCHy)"
1104
+
1105
+ #: ../settings.php:132
1106
+ msgid "Anti-Spam"
1107
+ msgstr "Anty-Spam"
1108
+
1109
+ #: ../settings.php:132
1110
+ msgid "Enable reCAPTCHA for WordPress comment form"
1111
+ msgstr "Włącz reCAPTCHA dla formularza komentarzy Wordpressa"
1112
+
1113
+ #: ../settings.php:133
1114
+ msgid "Disable reCAPTCHA for logged in users"
1115
+ msgstr "Wyłącz reCAPTCHę dla zalogowanych użytkowników"
1116
+
1117
+ #: ../settings.php:135
1118
+ msgid "Limit attempts"
1119
+ msgstr "Limit prób"
1120
+
1121
+ #: ../settings.php:135
1122
+ msgid "Lock out IP address for %s minutes after %s failed attempts within %s minutes"
1123
+ msgstr "Zablokuj adres IP na %s minut po %s nieprawidłowych próbowach logowania w ciągu %s minut"
1124
+
1125
+ #: ../settings.php:178
1126
+ msgid "In the Citadel mode nobody is able to log in except IPs from the White IP Access List. Active user sessions will not be affected."
1127
+ msgstr "W trybie Twierdzy nie może się zalogować nikt oprócz adresów IP znajdujących się na białej liście. Nie ma to wpływu na aktywne sesje użytkowników."
1128
+
1129
+ #: ../dashboard.php:339 ../dashboard.php:486
1130
+ msgid "Event"
1131
+ msgstr "Zdarzenie"
1132
+
1133
+ #: ../dashboard.php:1033
1134
+ msgid "Spam comments denied"
1135
+ msgstr "Odrzuconych komentarzy ze spamem"
1136
+
1137
+ #: ../dashboard.php:1034
1138
+ msgid "Malicious IP addresses detected"
1139
+ msgstr "Wykrytych szkodliwych adresów IP"
1140
+
1141
+ #: ../dashboard.php:1035
1142
+ msgid "Lockouts occurred"
1143
+ msgstr "Blokad"
1144
+
1145
+ #: ../dashboard.php:1036
1146
+ msgid "Locked out IP now"
1147
+ msgstr "Obecnie zablokowanych adresów IP"
1148
+
1149
+ #: ../dashboard.php:1060
1150
+ msgid "All suspicious activity"
1151
+ msgstr "Cała podejrzana aktywność"
1152
+
1153
+ #: ../wp-cerber.php:931
1154
+ msgid "You are not allowed to register."
1155
+ msgstr "Nie masz zezwolenia na rejestrację."
1156
+
1157
+ #: ../common.php:293
1158
+ msgid "Spam comment denied"
1159
+ msgstr "Komentarz ze spamem odrzucony"
1160
+
1161
+ #: ../common.php:299
1162
+ msgid "by Cerber Lab"
1163
+ msgstr "- Cerber Lab"
1164
+
1165
+ #: ../common.php:314
1166
+ msgid "Attempt to log in denied"
1167
+ msgstr "Odrzucono próbę logowania"
1168
+
1169
+ #: ../common.php:315
1170
+ msgid "Attempt to register denied"
1171
+ msgstr "Odrzucono próbę rejestracji"
1172
+
1173
+ #: ../dashboard.php:1032
1174
+ msgid "Malicious activities mitigated"
1175
+ msgstr ""
1176
+
languages/wp-cerber-pt_BR.mo ADDED
Binary file
languages/wp-cerber-pt_BR.po ADDED
@@ -0,0 +1,1183 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "MIME-Version: 1.0\n"
4
+ "Content-Type: text/plain; charset=UTF-8\n"
5
+ "Content-Transfer-Encoding: 8bit\n"
6
+ "X-Generator: POEditor.com\n"
7
+ "Project-Id-Version: WP Cerber\n"
8
+ "Language: pt-br\n"
9
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
10
+
11
+ #: ../settings.php:57
12
+ msgid "Limit login attempts"
13
+ msgstr "Limitar tentativas de login"
14
+
15
+ #: ../settings.php:58
16
+ msgid "Attempts"
17
+ msgstr "Tentativas"
18
+
19
+ #: ../settings.php:59
20
+ msgid "Lockout duration"
21
+ msgstr "Duração do bloqueio"
22
+
23
+ #: ../settings.php:59 ../settings.php:78
24
+ msgid "minutes"
25
+ msgstr "minutos"
26
+
27
+ #: ../settings.php:60
28
+ msgid "Aggressive lockout"
29
+ msgstr "Bloqueio agressivo"
30
+
31
+ #: ../settings.php:63
32
+ msgid "Site connection"
33
+ msgstr "Conexão do site"
34
+
35
+ #: ../settings.php:65
36
+ msgid "Proactive security rules"
37
+ msgstr "Regras de segurança proativa"
38
+
39
+ #: ../settings.php:66
40
+ msgid "Block subnet"
41
+ msgstr "Bloquear sub-rede"
42
+
43
+ #: ../settings.php:69
44
+ msgid "Request wp-login.php"
45
+ msgstr "Requisitar wp-login.php"
46
+
47
+ #: ../settings.php:69
48
+ msgid "Immediately block IP after any request to wp-login.php"
49
+ msgstr "Bloquer IP imediatamente após qualquer requisição a wp-login.php"
50
+
51
+ #: ../settings.php:68
52
+ msgid "Redirect dashboard requests"
53
+ msgstr "Redirecionar requisições ao painel"
54
+
55
+ #: ../settings.php:72
56
+ msgid "Custom login page"
57
+ msgstr "Página alternativa de login"
58
+
59
+ #: ../settings.php:73
60
+ msgid "Custom login URL"
61
+ msgstr "URL alternativo de login"
62
+
63
+ #: ../settings.php:73
64
+ msgid "must not overlap with the existing pages or posts slug"
65
+ msgstr "não deve se sobrepor aos links permanentes de páginas e posts"
66
+
67
+ #: ../settings.php:74
68
+ msgid "Disable wp-login.php"
69
+ msgstr "Desabilitar wp-login.php"
70
+
71
+ #: ../settings.php:74
72
+ msgid "Block direct access to wp-login.php and return HTTP 404 Not Found Error"
73
+ msgstr "Bloquear acesso direto a wp-login.php e retornar o erro HTTP 404"
74
+
75
+ #: ../dashboard.php:888 ../settings.php:76
76
+ msgid "Citadel mode"
77
+ msgstr "Modo Fortaleza"
78
+
79
+ #: ../settings.php:77
80
+ msgid "Threshold"
81
+ msgstr "Limite"
82
+
83
+ #: ../settings.php:78
84
+ msgid "Duration"
85
+ msgstr "Duração"
86
+
87
+ #: ../wp-cerber.php:2630 ../settings.php:62 ../settings.php:80 ../settings.php:230
88
+ msgid "Notifications"
89
+ msgstr "Notificações"
90
+
91
+ #: ../settings.php:80
92
+ msgid "Send notification to admin email"
93
+ msgstr "Enviar notificação para o email do administrador"
94
+
95
+ #: ../dashboard.php:897 ../dashboard.php:1377 ../wp-cerber.php:2628 ../settings.
96
+ #: php:223 ../cerber-tools.php:59 ../cerber-tools.php:68 ../cerber-tools.php:178
97
+ msgid "Access Lists"
98
+ msgstr "Listas de Acesso"
99
+
100
+ #: ../dashboard.php:895 ../dashboard.php:1065 ../wp-cerber.php:2495 ../settings.
101
+ #: php:82 ../settings.php:213
102
+ msgid "Activity"
103
+ msgstr "Atividade"
104
+
105
+ #: ../dashboard.php:896 ../settings.php:218
106
+ msgid "Lockouts"
107
+ msgstr "Bloqueios"
108
+
109
+ #: ../settings.php:348
110
+ msgid "%s allowed retries in %s minutes"
111
+ msgstr "%s tentativas restantes em %s minutos"
112
+
113
+ #: ../settings.php:365
114
+ msgid "Enable after %s failed login attempts in last %s minutes"
115
+ msgstr "Habilitar após %s tentativas falhas de login nos últimos %s minutos"
116
+
117
+ #: ../dashboard.php:77 ../dashboard.php:486 ../wp-cerber.php:2496
118
+ msgid "IP"
119
+ msgstr "IP"
120
+
121
+ #: ../dashboard.php:339 ../dashboard.php:486
122
+ msgid "Date"
123
+ msgstr "Data"
124
+
125
+ #: ../dashboard.php:339 ../dashboard.php:486
126
+ msgid "Local User"
127
+ msgstr "Usuário Local"
128
+
129
+ #: ../dashboard.php:339 ../dashboard.php:486 ../wp-cerber.php:2504
130
+ msgid "Username used"
131
+ msgstr "Nome de usuário usado"
132
+
133
+ #: ../dashboard.php:83
134
+ msgid "Showing last %d records from %d"
135
+ msgstr "Mostrando últimos %d registros de %d"
136
+
137
+ #: ../common.php:284
138
+ msgid "Logged in"
139
+ msgstr "Conectado"
140
+
141
+ #: ../common.php:285
142
+ msgid "Logged out"
143
+ msgstr "Desconectado"
144
+
145
+ #: ../common.php:286
146
+ msgid "Login failed"
147
+ msgstr "Falha no login"
148
+
149
+ #: ../common.php:289
150
+ msgid "IP blocked"
151
+ msgstr "IP bloqueado"
152
+
153
+ #: ../common.php:290
154
+ msgid "Subnet blocked"
155
+ msgstr "Sub-rede bloqueada"
156
+
157
+ #: ../common.php:292
158
+ msgid "Citadel activated!"
159
+ msgstr "Fortaleza ativada!"
160
+
161
+ #: ../dashboard.php:472 ../dashboard.php:652 ../common.php:296
162
+ #, fuzzy
163
+ msgid "Locked out"
164
+ msgstr "Bloqueado"
165
+
166
+ #: ../common.php:297
167
+ msgid "IP blacklisted"
168
+ msgstr "IP bloqueado"
169
+
170
+ #: ../common.php:303
171
+ msgid "Password changed"
172
+ msgstr "Senha alterada"
173
+
174
+ #: ../dashboard.php:74 ../dashboard.php:123
175
+ msgid "Remove"
176
+ msgstr "Remover"
177
+
178
+ #: ../dashboard.php:268
179
+ msgid "Lockout for %s was removed"
180
+ msgstr "Bloqueio de %s foi removido"
181
+
182
+ #: ../dashboard.php:102 ../dashboard.php:467 ../dashboard.php:647 ../dashboard.
183
+ #: php:886 ../wp-cerber.php:2622 ../settings.php:61 ../settings.php:181
184
+ msgid "White IP Access List"
185
+ msgstr "Lista Segura de IPs"
186
+
187
+ #: ../dashboard.php:104 ../dashboard.php:468 ../dashboard.php:649 ../dashboard.
188
+ #: php:887
189
+ #, fuzzy
190
+ msgid "Black IP Access List"
191
+ msgstr "Lista Negra de IPs"
192
+
193
+ #: ../dashboard.php:126
194
+ msgid "List is empty"
195
+ msgstr "A lista está vazia"
196
+
197
+ #: ../dashboard.php:153
198
+ msgid "Address %s was added to White IP Access List"
199
+ msgstr "Endereço %s adicionado à Lista Segura de IPs"
200
+
201
+ #: ../dashboard.php:166
202
+ #, fuzzy
203
+ msgid "Address %s was added to Black IP Access List"
204
+ msgstr "Endereço %s adicionado à Lista Negra de IPs"
205
+
206
+ #: ../wp-cerber.php:2181
207
+ msgid "Citadel mode is activated after %d failed login attempts in %d minutes."
208
+ msgstr "O modo Fortaleza é atividado após %d tentaivas de login falhas em %d minutos."
209
+
210
+ #: ../dashboard.php:1188
211
+ #, fuzzy
212
+ msgid "View Activity"
213
+ msgstr "Ver Atividade"
214
+
215
+ #: ../cerber-tools.php:58 ../cerber-tools.php:67
216
+ msgid "Settings"
217
+ msgstr "Configurações"
218
+
219
+ #: ../dashboard.php:787
220
+ #, fuzzy
221
+ msgid "Last login"
222
+ msgstr "Último login"
223
+
224
+ #: ../dashboard.php:814 ../dashboard.php:869
225
+ msgid "Never"
226
+ msgstr "Nunca"
227
+
228
+ #: ../dashboard.php:1108
229
+ msgid "Are you sure?"
230
+ msgstr "Tem certeza?"
231
+
232
+ #: ../settings.php:63
233
+ msgid "My site is behind a reverse proxy"
234
+ msgstr "Meu site está sob um proxy reverso"
235
+
236
+ #: ../settings.php:67
237
+ msgid "Non-existent users"
238
+ msgstr "Usuários não-existentes"
239
+
240
+ #: ../settings.php:67
241
+ msgid "Immediately block IP when attempting to login with a non-existent username"
242
+ msgstr "Bloquear IP imediatamente nas tentativas de login com nomes de usuários não existentes"
243
+
244
+ #: ../settings.php:68
245
+ msgid "Disable automatic redirecting to the login page when /wp-admin/ is requested by an unauthorized request"
246
+ msgstr "Desabilitar redirecionamento automático para a página de login quando /wp-admin/ é requisitada sem autorização"
247
+
248
+ #: ../settings.php:167
249
+ msgid "Make your protection smarter!"
250
+ msgstr "Deixe sua proteção mais inteligente!"
251
+
252
+ #: ../settings.php:171
253
+ msgid "Please enable Permalinks to use this feature. Set Permalink Settings to something other than Default."
254
+ msgstr "Favor habilitar os Links Permanentes para utilizar essa funcionalidade. Configure os Link Permanentes para algo além do Padrão."
255
+
256
+ #: ../settings.php:174
257
+ msgid "Be careful when enabling this options. If you forget the custom login URL you will not be able to login."
258
+ msgstr "Tenha cuidado ao habilitar essas opções. Caso esqueça o URL de login, você não poderá mais se conectar."
259
+
260
+ #: ../wp-cerber.php:2627 ../settings.php:220
261
+ msgid "Main Settings"
262
+ msgstr "Configurações Principais"
263
+
264
+ #: ../settings.php:234
265
+ msgid "Help"
266
+ msgstr "Ajuda"
267
+
268
+ #: ../settings.php:353
269
+ msgid "Increase lockout duration to %s hours after %s lockouts in the last %s hours"
270
+ msgstr "Aumentar a duração do bloqueio para %s horas após %s bloqueios nas últimas %s horas."
271
+
272
+ #: ../wp-cerber.php:215
273
+ msgid "You are not allowed to log in. Ask your administrator for assistance."
274
+ msgstr "Você não tem permissão para entrar. Peça ajuda ao administrador."
275
+
276
+ #: ../wp-cerber.php:221
277
+ msgid "You have reached the login attempts limit. Please try again in %d minutes."
278
+ msgstr "Você atingiu o limite de tentativas de login. Por favor, tente novamente em %d minutos."
279
+
280
+ #: ../wp-cerber.php:240
281
+ msgid "You have only one attempt remaining."
282
+ msgid_plural "You have %d attempts remaining."
283
+ msgstr[0] "Você tem apenas uma tentativa restante."
284
+ msgstr[1] "Você tem %d tentativas restantes."
285
+
286
+ #: ../dashboard.php:499
287
+ msgid "No activity has been logged."
288
+ msgstr "Nenhuma atividade foi registrada."
289
+
290
+ #: ../dashboard.php:77
291
+ msgid "Expires"
292
+ msgstr "Expira"
293
+
294
+ #: ../dashboard.php:89
295
+ #, fuzzy
296
+ msgid "No lockouts at the moment. The sky is clear."
297
+ msgstr "Nenhum bloqueio no momento. O céu está limpo."
298
+
299
+ #: ../dashboard.php:102
300
+ msgid "These IPs will never be locked out"
301
+ msgstr "Estes IPs nunca serão bloqueados"
302
+
303
+ #: ../dashboard.php:106
304
+ msgid "Your IP"
305
+ msgstr "Seu IP"
306
+
307
+ #: ../dashboard.php:162
308
+ msgid "You can't add your IP address"
309
+ msgstr "Você não pode adicionar seu próprio IP"
310
+
311
+ #: ../wp-cerber.php:2182
312
+ msgid "Last failed attempt was at %s from IP %s with user login: %s."
313
+ msgstr "Última tentativa de login falha foi às %s do IP %s com o login de usuário: %s."
314
+
315
+ #: ../wp-cerber.php:2245
316
+ msgid "Change notification settings"
317
+ msgstr "Alterar configurações de notificações"
318
+
319
+ #: ../wp-cerber.php:2605
320
+ msgid "Can't activate WP Cerber due to a database error."
321
+ msgstr "Não foi possível ativar o WP Cerber devido a um erro na conexão com o banco de dados."
322
+
323
+ #: ../settings.php:360
324
+ msgid "Notify admin if the number of active lockouts above"
325
+ msgstr "Notificar o administrador caso o número de bloqueios ativos seja acima"
326
+
327
+ #: ../settings.php:83
328
+ msgid "days"
329
+ msgstr "dias"
330
+
331
+ #: ../dashboard.php:838
332
+ msgid "Cerber Quick View"
333
+ msgstr "Visualição Rápida do Cerber"
334
+
335
+ #: ../dashboard.php:85
336
+ msgid "Hint"
337
+ msgstr "Dica"
338
+
339
+ #: ../dashboard.php:85
340
+ msgid "To view activity, click on the IP"
341
+ msgstr "Para ver a atividade, clique no IP"
342
+
343
+ #: ../dashboard.php:123 ../dashboard.php:679
344
+ msgid "Check for activity"
345
+ msgstr "Verificar atividade"
346
+
347
+ #: ../settings.php:66
348
+ msgid "Always block entire subnet Class C of intruders IP"
349
+ msgstr "Sempre bloquear toda a sub-rede classe C de IPs invasores"
350
+
351
+ #: ../settings.php:80 ../settings.php:362
352
+ msgid "Click to send test"
353
+ msgstr "Clique para enviar teste"
354
+
355
+ #: ../settings.php:445
356
+ msgid "Attention! You have changed the login URL! The new login URL is"
357
+ msgstr "Atenção! Você alteraou o URL de login! O novo URL de login é"
358
+
359
+ #: ../dashboard.php:786
360
+ msgid "Comments"
361
+ msgstr "Comentários"
362
+
363
+ #: ../dashboard.php:789
364
+ msgid "Date of registration"
365
+ msgstr "Data de registro"
366
+
367
+ #: ../dashboard.php:258
368
+ msgid "Message has been sent to "
369
+ msgstr "A mensagem foi enviada para "
370
+
371
+ #: ../dashboard.php:1250
372
+ msgid "Update to version %s of WP Cerber"
373
+ msgstr "Atualizar WP Cerber para a versão %s"
374
+
375
+ #: ../wp-cerber.php:2183 ../wp-cerber.php:2520
376
+ msgid "View activity in dashboard"
377
+ msgstr "Ver atividade no painel"
378
+
379
+ #: ../wp-cerber.php:2213
380
+ msgid "Number of active lockouts"
381
+ msgstr "Número de bloqueios ativos"
382
+
383
+ #: ../wp-cerber.php:2217
384
+ msgid "View lockouts in dashboard"
385
+ msgstr "Ver bloqueios no painel"
386
+
387
+ #: ../wp-cerber.php:2270
388
+ msgid "This message was sent by"
389
+ msgstr "Esta mensagem foi enviada por"
390
+
391
+ #: ../dashboard.php:733 ../cerber-tools.php:40
392
+ msgid "Tools"
393
+ msgstr "Ferramentas"
394
+
395
+ #: ../cerber-tools.php:55
396
+ msgid "Export settings to the file"
397
+ msgstr "Exportar configurações para o arquivo"
398
+
399
+ #: ../cerber-tools.php:56
400
+ msgid "When you click the button below you will get a configuration file, which you can upload on another site."
401
+ msgstr "Assim que clicar no botão abaixo, você baixará um arquivo de configuração que poderá usar em outros sites."
402
+
403
+ #: ../cerber-tools.php:57
404
+ msgid "What do you want to export?"
405
+ msgstr "O que gostaria de exportar?"
406
+
407
+ #: ../cerber-tools.php:60
408
+ msgid "Download file"
409
+ msgstr "Baixar arquivo"
410
+
411
+ #: ../cerber-tools.php:62
412
+ msgid "Import settings from the file"
413
+ msgstr "Importar configurações de um arquivo"
414
+
415
+ #: ../cerber-tools.php:63
416
+ msgid "When you click the button below, file will be uploaded and all existing settings will be overridden."
417
+ msgstr "Assim que clicar no botão abaixo, o arquivo será enviado e todas as configurações existentes serão sobrescritas."
418
+
419
+ #: ../cerber-tools.php:64
420
+ msgid "Select file to import."
421
+ msgstr "Selecionar arquivo para importação."
422
+
423
+ #: ../cerber-tools.php:64
424
+ msgid "Maximum upload file size: %s."
425
+ msgstr "Tamanho máximo do arquivo para envio: %s."
426
+
427
+ #: ../cerber-tools.php:67
428
+ msgid "What do you want to import?"
429
+ msgstr "O que gostaria de importar?"
430
+
431
+ #: ../cerber-tools.php:69
432
+ msgid "Upload file"
433
+ msgstr "Enviar arquivo"
434
+
435
+ #: ../cerber-tools.php:148
436
+ msgid "No file was uploaded or file is corrupted"
437
+ msgstr "Nenhum arquivo foi enviado ou o arquivo está corrompido"
438
+
439
+ #: ../cerber-tools.php:178
440
+ msgid "Error while updating"
441
+ msgstr "Erro ao enviar arquivo"
442
+
443
+ #: ../cerber-tools.php:181
444
+ msgid "Settings has imported successfully from"
445
+ msgstr "As configurações foram importadas com sucesso de"
446
+
447
+ #: ../cerber-tools.php:185
448
+ msgid "Error while parsing file"
449
+ msgstr "Erro ao interpretar arquivo"
450
+
451
+ #: ../dashboard.php:77 ../dashboard.php:486
452
+ msgid "Hostname"
453
+ msgstr "Nome do servidor"
454
+
455
+ #: ../dashboard.php:237
456
+ msgid "unknown"
457
+ msgstr "desconhecido"
458
+
459
+ #: ../settings.php:83
460
+ msgid "Keep records for"
461
+ msgstr "Guardar registros por"
462
+
463
+ #: ../dashboard.php:873
464
+ msgid "active"
465
+ msgstr "ativo"
466
+
467
+ #: ../dashboard.php:873
468
+ msgid "deactivate"
469
+ msgstr "desativar"
470
+
471
+ #: ../dashboard.php:875
472
+ msgid "not active"
473
+ msgstr "inativo"
474
+
475
+ #: ../dashboard.php:876
476
+ msgid "disabled"
477
+ msgstr "desabilitado"
478
+
479
+ #: ../dashboard.php:881
480
+ msgid "failed attempts"
481
+ msgstr "tentativas falhas"
482
+
483
+ #: ../dashboard.php:881 ../dashboard.php:882
484
+ msgid "in 24 hours"
485
+ msgstr "em 24 horas"
486
+
487
+ #: ../dashboard.php:881 ../dashboard.php:882
488
+ msgid "view all"
489
+ msgstr "ver todos"
490
+
491
+ #: ../dashboard.php:882
492
+ msgid "lockouts"
493
+ msgstr "bloqueios"
494
+
495
+ #: ../dashboard.php:884
496
+ msgid "Lockouts at the moment"
497
+ msgstr "Bloqueios no momento"
498
+
499
+ #: ../dashboard.php:885
500
+ #, fuzzy
501
+ msgid "Last lockout"
502
+ msgstr "Último bloqueio"
503
+
504
+ #: ../dashboard.php:886 ../dashboard.php:887 ../dashboard.php:1356
505
+ msgid "entry"
506
+ msgid_plural "entries"
507
+ msgstr[0] "entrada"
508
+ msgstr[1] "entradas"
509
+
510
+ #: ../dashboard.php:1103
511
+ #, fuzzy
512
+ msgid "Confused about some settings?"
513
+ msgstr "Confuso em relação às configurações?"
514
+
515
+ #: ../dashboard.php:1104
516
+ #, fuzzy
517
+ msgid "You can easily load default recommended settings using button below"
518
+ msgstr "Você pode carregar as configurações recomendadas clicando no botão abaixo."
519
+
520
+ #: ../dashboard.php:1106
521
+ msgid "Load default settings"
522
+ msgstr "Carregar configurações padrão"
523
+
524
+ #: ../dashboard.php:1114
525
+ msgid "doesn't affect Custom login URL and Access Lists"
526
+ msgstr "não afeta URL alternativo de login e Listas de Acesso"
527
+
528
+ #: ../dashboard.php:1133
529
+ msgid "Donate"
530
+ msgstr "Doe"
531
+
532
+ #: ../dashboard.php:1244
533
+ msgid "New version is available"
534
+ msgstr "Nova versão disponível"
535
+
536
+ #. Name of the plugin
537
+ #: ../dashboard.php:728 ../dashboard.php:743
538
+ msgid "WP Cerber"
539
+ msgstr "WP Cerber"
540
+
541
+ #. URI of the plugin
542
+ #:
543
+ msgid "http://wpcerber.com"
544
+ msgstr "http://wpcerber.com"
545
+
546
+ #: ../wp-cerber.php:2161
547
+ msgid "WP Cerber notify"
548
+ msgstr "WP Cerber notifica"
549
+
550
+ #: ../wp-cerber.php:2179
551
+ msgid "Citadel mode is activated"
552
+ msgstr "Modo Fortaleza está ativado"
553
+
554
+ #: ../wp-cerber.php:2250
555
+ msgid "New Custom login URL"
556
+ msgstr "Novo URL alternativo de login"
557
+
558
+ #: ../wp-cerber.php:2596
559
+ msgid "The WP Cerber requires PHP %s or higher. You are running"
560
+ msgstr "WP Cerber requer PHP %s ou mais recente. Você está rodando"
561
+
562
+ #: ../wp-cerber.php:2600
563
+ msgid "The WP Cerber requires WordPress %s or higher. You are running"
564
+ msgstr "WP Cerber requer Wordpress %s ou mais recente. Você está rodando"
565
+
566
+ #: ../settings.php:86
567
+ msgid "Use file"
568
+ msgstr "Usar arquivo"
569
+
570
+ #: ../settings.php:86
571
+ msgid "Write failed login attempts to the file"
572
+ msgstr "Escrever tentativas falhas de login em um arquivo"
573
+
574
+ #: ../dashboard.php:788
575
+ msgid "Failed attempts in last 24 hours"
576
+ msgstr "Tentativas falhas de login nas últimas 24 horas"
577
+
578
+ #: ../dashboard.php:1187
579
+ msgid "Deactivate"
580
+ msgstr "Desativar"
581
+
582
+ #: ../dashboard.php:77 ../wp-cerber.php:2215
583
+ msgid "Reason"
584
+ msgstr "Razão"
585
+
586
+ #: ../dashboard.php:130
587
+ msgid "Add IP to the list"
588
+ msgstr "Adicionar IP à lista"
589
+
590
+ #: ../dashboard.php:697
591
+ msgid "Add IP to the Black List"
592
+ msgstr "Adicionar IP à Lista Negra"
593
+
594
+ #: ../common.php:325
595
+ msgid "Attempt to access"
596
+ msgstr "Tentativa de acesso"
597
+
598
+ #: ../common.php:324
599
+ msgid "Limit on login attempts is reached"
600
+ msgstr "O limite de tentativas de login foi atingido"
601
+
602
+ #: ../common.php:311 ../common.php:326
603
+ msgid "Attempt to log in with non-existent username"
604
+ msgstr "Tentativa de login com nome de usuário não existente"
605
+
606
+ #: ../wp-cerber.php:2214
607
+ msgid "Last lockout was added: %s for IP %s"
608
+ msgstr "Último bloqueio foi adicionado: %s para o IP %s"
609
+
610
+ #: ../wp-cerber.php:2624
611
+ msgid "It's important to check security settings."
612
+ msgstr "É importante verificar as configurações de segurança."
613
+
614
+ #: ../wp-cerber.php:2629 ../settings.php:225
615
+ msgid "Hardening"
616
+ msgstr "Fortalecendo"
617
+
618
+ #: ../dashboard.php:675
619
+ msgid "Abuse email:"
620
+ msgstr "Email para abusos:"
621
+
622
+ #: ../settings.php:143
623
+ msgid "Email Address"
624
+ msgstr "Endereço de Email"
625
+
626
+ #: ../settings.php:143
627
+ msgid "if empty, the admin email %s will be used"
628
+ msgstr "se vazio, o email do administrador %s será usado"
629
+
630
+ #: ../settings.php:89
631
+ msgid "Drill down IP"
632
+ msgstr "Rastrear IP"
633
+
634
+ #: ../settings.php:89
635
+ msgid "Retrieve extra WHOIS information for IP"
636
+ msgstr "Pegar informação extra de WHOIS para o IP"
637
+
638
+ #: ../settings.php:97
639
+ msgid "Hardening WordPress"
640
+ msgstr "Fortalecendo o Wordpress"
641
+
642
+ #: ../settings.php:98
643
+ msgid "Stop user enumeration"
644
+ msgstr "Bloquear enumeração de usuários"
645
+
646
+ #: ../settings.php:98
647
+ msgid "Block access to the pages like /?author=n"
648
+ msgstr "Bloquear acesso a páginas como /?autor=n"
649
+
650
+ #: ../settings.php:99
651
+ msgid "Disable XML-RPC"
652
+ msgstr "Desabilitar XML-RPC"
653
+
654
+ #: ../settings.php:99
655
+ msgid "Block access to the XML-RPC server (including Pingbacks and Trackbacks)"
656
+ msgstr "Bloquear acesso ao servidor XML-RPC (incluindo Pingbacks e Trackbacks)"
657
+
658
+ #: ../settings.php:100
659
+ msgid "Disable feeds"
660
+ msgstr "Desabilitar feeds"
661
+
662
+ #: ../settings.php:100
663
+ msgid "Block access to the RSS, Atom and RDF feeds"
664
+ msgstr "Bloquear acesso aos feeds RSS, Atom e RDF"
665
+
666
+ #: ../settings.php:101
667
+ msgid "Disable REST API"
668
+ msgstr "Desabilitar API REST"
669
+
670
+ #: ../settings.php:101
671
+ msgid "Block access to the WordPress REST API"
672
+ msgstr "Bloquear acesso à API REST do Wordpress"
673
+
674
+ #: ../settings.php:181
675
+ msgid "These settings do not affect hosts from the "
676
+ msgstr "Estas configurações não afetam servidores do "
677
+
678
+ #: ../settings.php:525
679
+ msgid "<strong>ERROR</strong>: please enter a valid email address."
680
+ msgstr "<strong>ERRO</strong>: favor digitar um endereço de email válido."
681
+
682
+ #: ../wp-cerber.php:2244 ../wp-cerber.php:2621
683
+ msgid "WP Cerber is now active and has started protecting your site"
684
+ msgstr "WP Cerver está ativo agora e já começou a proteger o seu site"
685
+
686
+ #: ../dashboard.php:77
687
+ msgid "Action"
688
+ msgstr "Ação"
689
+
690
+ #: ../dashboard.php:104
691
+ msgid "Nobody can log in or register from these IPs"
692
+ msgstr "Ninguém pode entrar ou se registrar a partir destes IPs"
693
+
694
+ #: ../dashboard.php:150 ../dashboard.php:158
695
+ msgid "Incorrect IP address or IP range"
696
+ msgstr "Endereço ou faixa de IP incorretos"
697
+
698
+ #: ../dashboard.php:261
699
+ msgid "Unable to send notification email"
700
+ msgstr "Não foi possível enviar o email de notificação"
701
+
702
+ #: ../dashboard.php:284 ../dashboard.php:1203
703
+ msgid "Settings saved"
704
+ msgstr "Configurações salvas"
705
+
706
+ #: ../dashboard.php:679
707
+ msgid "Network:"
708
+ msgstr "Rede:"
709
+
710
+ #: ../dashboard.php:693
711
+ msgid "Add network to the Black List"
712
+ msgstr "Adicionar rede à Lista Negra"
713
+
714
+ #: ../dashboard.php:1186
715
+ msgid "Attention! Citadel mode is now active. Nobody is able to log in."
716
+ msgstr "Atenção! O modo Fortaleza agora está ativado. Ninguém pode fazer login."
717
+
718
+ #: ../whois.php:210 ../common.php:323
719
+ msgid "Unknown"
720
+ msgstr "Desconhecido"
721
+
722
+ #. Description of the plugin
723
+ #:
724
+ msgid "Protects site from brute force attacks, bots and hackers. Antispam protection with reCAPTCHA. Comprehensive control of user activity. Restrict login by IP access lists. Limit login attempts. Feel free to contact developer on the site <a href=\"http://wpcerber.com\">wpcerber.com</a>."
725
+ msgstr "Protege sites contra ataques de força bruta, bots e hackers. Proteção anti-spam com reCAPTCHA. Controle abrangente para atividade de usuários. Restrição de login para listas de IPs. Limite de tentativas de login. Sinta-se à vontade para contatar o desenvolvedor no site <a href=\"http://wpcerber.com\">wpcerber.com</a>."
726
+
727
+ #. Author of the plugin
728
+ #:
729
+ msgid "Gregory"
730
+ msgstr "Gregory"
731
+
732
+ #: ../wp-cerber.php:302 ../wp-cerber.php:558 ../wp-cerber.php:570 ../wp-cerber.
733
+ #: php:577 ../wp-cerber.php:715 ../wp-cerber.php:919 ../wp-cerber.php:924 ../wp-
734
+ #: cerber.php:930 ../wp-cerber.php:960 ../common.php:80 ../common.php:133 ..
735
+ #: /common.php:137 ../settings.php:498
736
+ msgid "ERROR:"
737
+ msgstr "ERRO:"
738
+
739
+ #: ../wp-cerber.php:587
740
+ msgid "Human verification failed. Please click the square box in the reCAPTCHA block below."
741
+ msgstr "Verificação de humanidade falhou. Por favor, click no quadrado do bloco reCAPTCHA abaixo."
742
+
743
+ #: ../wp-cerber.php:726
744
+ msgid "<strong>ERROR</strong>: The password you entered for the username %s is incorrect."
745
+ msgstr "<strong>ERRO</strong>: A senha que você digitou para o usuário %s está incorreta."
746
+
747
+ #: ../wp-cerber.php:925
748
+ msgid "Username is not allowed. Please choose another one."
749
+ msgstr "Nome de usuário não permitido. Por favor, escolha outro nome."
750
+
751
+ #: ../wp-cerber.php:2208
752
+ msgid "unspecified"
753
+ msgstr "não especificado"
754
+
755
+ #: ../wp-cerber.php:2211
756
+ msgid "Number of lockouts is increasing"
757
+ msgstr "O número de bloqueios está aumentando"
758
+
759
+ #: ../wp-cerber.php:2216
760
+ msgid "View activity for this IP"
761
+ msgstr "Ver atividade do IP"
762
+
763
+ #: ../wp-cerber.php:2220 ../wp-cerber.php:2222
764
+ msgid "A new version of WP Cerber is available to install"
765
+ msgstr "Uma nova versão do WP Cerber está disponível para ser instalada"
766
+
767
+ #: ../wp-cerber.php:2221
768
+ msgid "Hi!"
769
+ msgstr "Olá!"
770
+
771
+ #: ../wp-cerber.php:2223 ../wp-cerber.php:2234
772
+ msgid "Website"
773
+ msgstr "Website"
774
+
775
+ #: ../wp-cerber.php:2226 ../wp-cerber.php:2227
776
+ msgid "The WP Cerber security plugin has been deactivated"
777
+ msgstr "O plugin de segurança WP Cerber foi desativado"
778
+
779
+ #: ../wp-cerber.php:2229
780
+ msgid "Not logged in"
781
+ msgstr "Não conectado"
782
+
783
+ #: ../wp-cerber.php:2235
784
+ msgid "By user"
785
+ msgstr "Pelo usuário"
786
+
787
+ #: ../wp-cerber.php:2236
788
+ msgid "From IP address"
789
+ msgstr "Do endereço de IP"
790
+
791
+ #: ../wp-cerber.php:2239
792
+ msgid "From country"
793
+ msgstr "Do país"
794
+
795
+ #: ../wp-cerber.php:2243
796
+ msgid "The WP Cerber security plugin is now active"
797
+ msgstr "O plugin de segurança WP Cerber está agora ativado"
798
+
799
+ #: ../wp-cerber.php:2622
800
+ msgid "Your IP address is added to the"
801
+ msgstr "Seu endereço de IP foi adicionado à"
802
+
803
+ #: ../dashboard.php:732
804
+ msgid "reCAPTCHA"
805
+ msgstr "reCAPTCHA"
806
+
807
+ #: ../wp-cerber.php:2631
808
+ msgid "Import settings"
809
+ msgstr "Importar configurações"
810
+
811
+ #: ../settings.php:144
812
+ msgid "Notification limit"
813
+ msgstr "Limite de notificação"
814
+
815
+ #: ../settings.php:144
816
+ msgid "notification letters allowed per hour (0 means unlimited)"
817
+ msgstr "notificações permitidas por hora (0 significa ilimitadas)"
818
+
819
+ #: ../settings.php:110
820
+ msgid "User related settings"
821
+ msgstr "Configurações de usuário"
822
+
823
+ #: ../settings.php:111
824
+ msgid "Prohibited usernames"
825
+ msgstr "Nomes de usuários proibidos"
826
+
827
+ #: ../settings.php:111
828
+ msgid "Usernames from this list are not allowed to log in or register. Any IP address, have tried to use any of these usernames, will be immediately blocked. Use comma to separate logins."
829
+ msgstr "Nomes de usuários desta lista não podem fazer login ou serem registrados. Qualquer endereço de IP que tentar utilizar algum destes nomes será imediatamente bloqueado. Utilize vírgulas para separar os logins."
830
+
831
+ #: ../settings.php:112
832
+ msgid "User session expire"
833
+ msgstr "Sessão de usuário expira"
834
+
835
+ #: ../settings.php:112
836
+ msgid "in minutes (leave empty to use default WP value)"
837
+ msgstr "em minutos (deixe em branco para usar o valor padrão do Wordpress)"
838
+
839
+ #: ../cerber-tools.php:195
840
+ msgid "reCAPTCHA settings"
841
+ msgstr "Configurações do reCAPTCHA"
842
+
843
+ #: ../settings.php:119
844
+ msgid "Site key"
845
+ msgstr "Chave do site"
846
+
847
+ #: ../settings.php:120
848
+ msgid "Secret key"
849
+ msgstr "Chave secreta"
850
+
851
+ #: ../settings.php:123
852
+ msgid "Enable reCAPTCHA for WordPress registration form"
853
+ msgstr "Habilitar reCAPTCHA para o formulário de registro do Wordpress"
854
+
855
+ #: ../settings.php:126
856
+ msgid "Lost password form"
857
+ msgstr "Formulário de senha perdida"
858
+
859
+ #: ../settings.php:129
860
+ msgid "Login form"
861
+ msgstr "Formulário de login"
862
+
863
+ #: ../settings.php:129
864
+ msgid "Enable reCAPTCHA for WordPress login form"
865
+ msgstr "Habilitar reCAPTCHA para o formulário de login do Wordpress"
866
+
867
+ #: ../settings.php:184
868
+ msgid "Before you can start using reCAPTCHA, you have to obtain Site key and Secret key on the Google website"
869
+ msgstr "Antes de começar a utilizar o reCAPTCHA, você precisa obter uma Chave do Site uma Chave Secreta no website do Google"
870
+
871
+ #: ../cerber-lab.php:527 ../settings.php:185
872
+ msgid "Know more"
873
+ msgstr "Saiba mais"
874
+
875
+ #: ../dashboard.php:728 ../settings.php:206
876
+ msgid "WP Cerber Security"
877
+ msgstr "WP Cerber Security"
878
+
879
+ #: ../settings.php:227
880
+ msgid "Users"
881
+ msgstr "Usuários"
882
+
883
+ #: ../common.php:282
884
+ msgid "User created"
885
+ msgstr "Usuário criado"
886
+
887
+ #: ../common.php:283
888
+ msgid "User registered"
889
+ msgstr "Usuário registrado"
890
+
891
+ #: ../common.php:306
892
+ msgid "reCAPTCHA verification failed"
893
+ msgstr "A verificação do reCAPTCHA falhou"
894
+
895
+ #: ../common.php:307
896
+ msgid "reCAPTCHA settings are incorrect"
897
+ msgstr "As configurações do reCAPTCHA estão incorretas"
898
+
899
+ #: ../common.php:310
900
+ msgid "Attempt to access prohibited URL"
901
+ msgstr "Tentativa de acesso a URL proibido"
902
+
903
+ #: ../common.php:312 ../common.php:327
904
+ msgid "Attempt to log in with prohibited username"
905
+ msgstr "Tentativa de login com nome de usuário proibido."
906
+
907
+ #: ../settings.php:84
908
+ msgid "Cerber Lab connection"
909
+ msgstr "Conexão Cerber Lab"
910
+
911
+ #: ../settings.php:84
912
+ msgid "Send malicious IP addresses to the Cerber Lab"
913
+ msgstr "Enviar endereço de IP malicioso para o Cerber Lab"
914
+
915
+ #: ../settings.php:85
916
+ msgid "Cerber Lab protocol"
917
+ msgstr "Protocolo Cerber Lab"
918
+
919
+ #: ../settings.php:123
920
+ msgid "Registration form"
921
+ msgstr "Formulário de restro"
922
+
923
+ #: ../settings.php:124
924
+ msgid "Enable reCAPTCHA for WooCommerce registration form"
925
+ msgstr "Habilitar reCAPTCHA para o formulário de registro do WooCommerce"
926
+
927
+ #: ../settings.php:126
928
+ msgid "Enable reCAPTCHA for WordPress lost password form"
929
+ msgstr "Habilitar reCAPTCHA para o formulário de senha perdida do Wordpress"
930
+
931
+ #: ../settings.php:127
932
+ msgid "Enable reCAPTCHA for WooCommerce lost password form"
933
+ msgstr "Habilitar reCAPTCHA para o formulário de senha perdida do WooCommerce"
934
+
935
+ #: ../settings.php:130
936
+ msgid "Enable reCAPTCHA for WooCommerce login form"
937
+ msgstr "Habilitar reCAPTCHA para o formulário de login do WooCommerce"
938
+
939
+ #: ../common.php:308
940
+ msgid "Request to the Google reCAPTCHA service failed"
941
+ msgstr "A requisição para o serviço Google reCAPTCHA falhou"
942
+
943
+ #: ../dashboard.php:1052 ../dashboard.php:1080
944
+ msgid "View all"
945
+ msgstr "Ver todos"
946
+
947
+ #: ../dashboard.php:1081
948
+ msgid "Recently locked out IP addresses"
949
+ msgstr "Endereços de IP recentemente bloqueados"
950
+
951
+ #: ../cerber-lab.php:525
952
+ msgid "OK, nail them all"
953
+ msgstr "OK, acabe com eles"
954
+
955
+ #: ../cerber-lab.php:526
956
+ msgid "NO, maybe later"
957
+ msgstr "NÃO, talvez mais tarde"
958
+
959
+ #: ../dashboard.php:730 ../dashboard.php:894 ../dashboard.php:1376 ../settings.
960
+ #: php:211
961
+ msgid "Dashboard"
962
+ msgstr "Painel de Controle"
963
+
964
+ #: ../cerber-lab.php:523
965
+ msgid "Want to make WP Cerber even more powerful?"
966
+ msgstr "Gostaria de fazer o WP Cerber ainda mais poderoso?"
967
+
968
+ #: ../cerber-lab.php:524
969
+ msgid "Allow WP Cerber to send locked out malicious IP addresses to Cerber Lab. This helps the plugin team to develop new algorithms for WP Cerber that will defend WordPress against new threats and botnets that are appearing everyday. You can disable the sending in the plugin settings at any time."
970
+ msgstr "Permita que o WP Cerber envie endereços de IP maliciosos para o Cerber Lab. Isso ajuda os desenvolvedores do plugin a criarem algoritmos para defender o WordPress de novas ameaças e botnets que surgem dia-a-dia. Você pode desabilitar este envio a qualquer momento nas configurações do plugin."
971
+
972
+ #: ../dashboard.php:339
973
+ msgid "IP address"
974
+ msgstr "Endereço de IP"
975
+
976
+ #: ../dashboard.php:339
977
+ msgid "User login"
978
+ msgstr "Login do usuário"
979
+
980
+ #: ../dashboard.php:339
981
+ msgid "User ID"
982
+ msgstr "ID do usuário"
983
+
984
+ #: ../dashboard.php:495
985
+ msgid "Export"
986
+ msgstr "Exportar"
987
+
988
+ #: ../dashboard.php:505
989
+ msgid "All activities"
990
+ msgstr "Todas as atividades"
991
+
992
+ #: ../dashboard.php:514
993
+ msgid "Search for IP or username"
994
+ msgstr "Buscar por IP ou usuário"
995
+
996
+ #: ../dashboard.php:514
997
+ msgid "Filter"
998
+ msgstr "Filtrar"
999
+
1000
+ #: ../dashboard.php:730
1001
+ msgid "Cerber Dashboard"
1002
+ msgstr "Painel de Controle do Cerber"
1003
+
1004
+ #: ../dashboard.php:732
1005
+ msgid "Cerber reCAPTCHA settings"
1006
+ msgstr "Configurações do reCAPTCHA do Cerber"
1007
+
1008
+ #: ../dashboard.php:733
1009
+ msgid "Cerber tools"
1010
+ msgstr "Ferramentas do Cerber"
1011
+
1012
+ #: ../dashboard.php:1289
1013
+ msgid "Subscribe"
1014
+ msgstr "Inscrever"
1015
+
1016
+ #: ../dashboard.php:1290
1017
+ msgid "Unsubscribe"
1018
+ msgstr "Cancelar inscrição"
1019
+
1020
+ #: ../dashboard.php:1318
1021
+ msgid "You've subscribed"
1022
+ msgstr "Você está inscrito"
1023
+
1024
+ #: ../dashboard.php:1321
1025
+ msgid "You've unsubscribed"
1026
+ msgstr "Você cancelou sua inscrição"
1027
+
1028
+ #: ../wp-cerber.php:2254 ../wp-cerber.php:2255
1029
+ msgid "A new activity has been recorded"
1030
+ msgstr "Uma nova atividade foi capturada"
1031
+
1032
+ #: ../wp-cerber.php:2500
1033
+ msgid "User"
1034
+ msgstr "Usuário"
1035
+
1036
+ #: ../wp-cerber.php:2508
1037
+ msgid "Search string"
1038
+ msgstr "Termo pesquisado"
1039
+
1040
+ #: ../wp-cerber.php:2521
1041
+ msgid "To unsubscribe click here"
1042
+ msgstr "Para cancelar sua inscrição, clique aqui"
1043
+
1044
+ #: ../settings.php:88
1045
+ msgid "Preferences"
1046
+ msgstr "Preferências"
1047
+
1048
+ #: ../settings.php:90
1049
+ msgid "Date format"
1050
+ msgstr "Formato da data"
1051
+
1052
+ #: ../settings.php:90
1053
+ msgid "if empty, the default format %s will be used"
1054
+ msgstr "se vazio, o formato padrão %s será usado"
1055
+
1056
+ #: ../dashboard.php:890 ../settings.php:146
1057
+ msgid "Push notifications"
1058
+ msgstr "Notificações push"
1059
+
1060
+ #: ../settings.php:141
1061
+ msgid "Email notifications"
1062
+ msgstr "Notificações por email"
1063
+
1064
+ #: ../settings.php:143
1065
+ msgid "Use comma to specify multiple values"
1066
+ msgstr "Use vírgulas para separar múltiplos valores"
1067
+
1068
+ #: ../settings.php:153
1069
+ msgid "All connected devices"
1070
+ msgstr "Todos os dispositivos conectados"
1071
+
1072
+ #: ../settings.php:154
1073
+ msgid "No devices found"
1074
+ msgstr "Nenhum dispositivo encontrado"
1075
+
1076
+ #: ../settings.php:156
1077
+ msgid "Not available"
1078
+ msgstr "Não disponível"
1079
+
1080
+ #: ../common.php:304
1081
+ msgid "Password reset requested"
1082
+ msgstr "Redefinição de senha solicitada"
1083
+
1084
+ #: ../common.php:328
1085
+ msgid "Limit on failed reCAPTCHA verifications is reached"
1086
+ msgstr "Foi atingido o limite de verificações falhas do reCAPTCHA"
1087
+
1088
+ #: ../common.php:380
1089
+ msgid "%s ago"
1090
+ msgstr "%s atrás"
1091
+
1092
+ #: ../settings.php:61
1093
+ msgid "Apply limit login rules to IP addresses in the White IP Access List"
1094
+ msgstr "Aplicar regras de limite para login aos endereçoes de IP da Lista Segura"
1095
+
1096
+ #: ../settings.php:70
1097
+ msgid "Display 404 page"
1098
+ msgstr "Exibir página 404"
1099
+
1100
+ #: ../settings.php:121
1101
+ msgid "Invisible reCAPTCHA"
1102
+ msgstr "reCAPTCHA invisível"
1103
+
1104
+ #: ../settings.php:121
1105
+ msgid "Enable invisible reCAPTCHA"
1106
+ msgstr "Habilitar reCAPTCHA invisível"
1107
+
1108
+ #: ../settings.php:121
1109
+ msgid "(do not enable it unless you get and enter the Site and Secret keys for the invisible version)"
1110
+ msgstr "(não habilite esta opção a menos que tenha as Chaves do Site e Secreta para esta versão invisível)"
1111
+
1112
+ #: ../settings.php:132
1113
+ msgid "Anti-Spam"
1114
+ msgstr "Anti-Spam"
1115
+
1116
+ #: ../settings.php:132
1117
+ msgid "Enable reCAPTCHA for WordPress comment form"
1118
+ msgstr "Habilitar reCAPTCHA para o formulário de comentários do Wordpress"
1119
+
1120
+ #: ../settings.php:133
1121
+ msgid "Disable reCAPTCHA for logged in users"
1122
+ msgstr "Desabilitar reCAPTCHA para usuários conectados"
1123
+
1124
+ #: ../settings.php:135
1125
+ msgid "Limit attempts"
1126
+ msgstr "Limitar tentativas"
1127
+
1128
+ #: ../settings.php:135
1129
+ msgid "Lock out IP address for %s minutes after %s failed attempts within %s minutes"
1130
+ msgstr "Bloquear endereço de IP por %s minutos depois de %s tentativas falhas dentro de %s minutos"
1131
+
1132
+ #: ../settings.php:178
1133
+ msgid "In the Citadel mode nobody is able to log in except IPs from the White IP Access List. Active user sessions will not be affected."
1134
+ msgstr "No modo Fortaleza apenas os IPs da Lista Segura podem se conectar. Sessões ativas de usuários não serão afetadas."
1135
+
1136
+ #: ../dashboard.php:339 ../dashboard.php:486
1137
+ msgid "Event"
1138
+ msgstr ""
1139
+
1140
+ #: ../dashboard.php:1033
1141
+ msgid "Spam comments denied"
1142
+ msgstr ""
1143
+
1144
+ #: ../dashboard.php:1034
1145
+ msgid "Malicious IP addresses detected"
1146
+ msgstr ""
1147
+
1148
+ #: ../dashboard.php:1035
1149
+ msgid "Lockouts occurred"
1150
+ msgstr ""
1151
+
1152
+ #: ../dashboard.php:1036
1153
+ msgid "Locked out IP now"
1154
+ msgstr ""
1155
+
1156
+ #: ../dashboard.php:1060
1157
+ msgid "All suspicious activity"
1158
+ msgstr ""
1159
+
1160
+ #: ../wp-cerber.php:931
1161
+ msgid "You are not allowed to register."
1162
+ msgstr ""
1163
+
1164
+ #: ../common.php:293
1165
+ msgid "Spam comment denied"
1166
+ msgstr ""
1167
+
1168
+ #: ../common.php:299
1169
+ msgid "by Cerber Lab"
1170
+ msgstr ""
1171
+
1172
+ #: ../common.php:314
1173
+ msgid "Attempt to log in denied"
1174
+ msgstr ""
1175
+
1176
+ #: ../common.php:315
1177
+ msgid "Attempt to register denied"
1178
+ msgstr ""
1179
+
1180
+ #: ../dashboard.php:1032
1181
+ msgid "Malicious activities mitigated"
1182
+ msgstr ""
1183
+
languages/wp-cerber-ru_RU.mo ADDED
Binary file
languages/wp-cerber-ru_RU.po ADDED
@@ -0,0 +1,1127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Translation of Plugins - Cerber Security &#38; Limit Login Attempts - Stable (latest release) in Russian
2
+ # This file is distributed under the same license as the Plugins - Cerber Security &#38; Limit Login Attempts - Stable (latest release) package.
3
+ msgid ""
4
+ msgstr ""
5
+ "PO-Revision-Date: 2017-04-21 04:20:49+0000\n"
6
+ "MIME-Version: 1.0\n"
7
+ "Content-Type: text/plain; charset=UTF-8\n"
8
+ "Content-Transfer-Encoding: 8bit\n"
9
+ "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
10
+ "X-Generator: GlotPress/2.4.0-alpha\n"
11
+ "Language: ru\n"
12
+ "Project-Id-Version: Plugins - Cerber Security &#38; Limit Login Attempts - Stable (latest release)\n"
13
+
14
+ #: settings.php:155
15
+ msgid "Not available"
16
+ msgstr "Недоступно"
17
+
18
+ #: settings.php:153
19
+ msgid "No devices found"
20
+ msgstr "Устройства не найдены"
21
+
22
+ #: settings.php:152
23
+ msgid "All connected devices"
24
+ msgstr "Все подключенные устройства"
25
+
26
+ #: settings.php:142
27
+ msgid "Use comma to specify multiple values"
28
+ msgstr "Используйте запятую для разделения множественных значений"
29
+
30
+ #: settings.php:140
31
+ msgid "Email notifications"
32
+ msgstr "Уведомления по эл.почте"
33
+
34
+ #: settings.php:71
35
+ msgid "Display 404 page"
36
+ msgstr "Показывать страницу 404"
37
+
38
+ #: dashboard.php:872 settings.php:145
39
+ msgid "Push notifications"
40
+ msgstr "Push уведомления"
41
+
42
+ #: dashboard.php:485
43
+ msgid "Search for IP or username"
44
+ msgstr "Поиск IP или имени пользователя"
45
+
46
+ #: dashboard.php:1236
47
+ msgid "Unsubscribe"
48
+ msgstr "Отменить подписку"
49
+
50
+ #: dashboard.php:337
51
+ msgid "User login"
52
+ msgstr "Имя пользователя"
53
+
54
+ #: dashboard.php:337
55
+ msgid "IP address"
56
+ msgstr "IP адрес"
57
+
58
+ #: dashboard.php:478
59
+ msgid "All activities"
60
+ msgstr "Вся активность"
61
+
62
+ #: dashboard.php:469
63
+ msgid "Export"
64
+ msgstr "Экспорт"
65
+
66
+ #: dashboard.php:337
67
+ msgid "User ID"
68
+ msgstr "ID пользователя"
69
+
70
+ #: dashboard.php:707
71
+ msgid "Cerber reCAPTCHA settings"
72
+ msgstr "Настройки Cerber reCAPTCHA"
73
+
74
+ #: dashboard.php:705
75
+ msgid "Cerber Dashboard"
76
+ msgstr "Консоль Cerber"
77
+
78
+ #: dashboard.php:485
79
+ msgid "Filter"
80
+ msgstr "Фильтр"
81
+
82
+ #: dashboard.php:708
83
+ msgid "Cerber tools"
84
+ msgstr "Инструменты Cerber"
85
+
86
+ #: dashboard.php:1235
87
+ msgid "Subscribe"
88
+ msgstr "Подписаться"
89
+
90
+ #: dashboard.php:1264
91
+ msgid "You've subscribed"
92
+ msgstr "Вы подписались"
93
+
94
+ #: dashboard.php:1267
95
+ msgid "You've unsubscribed"
96
+ msgstr "Подписка отменена"
97
+
98
+ #: wp-cerber.php:1960 wp-cerber.php:1961
99
+ msgid "A new activity has been recorded"
100
+ msgstr "Отмечена новая активность"
101
+
102
+ #: settings.php:96
103
+ msgid "if empty, the default format %s will be used"
104
+ msgstr "Если пусто, будет использован формат по умолчанию %s"
105
+
106
+ #: wp-cerber.php:2172
107
+ msgid "User"
108
+ msgstr "Пользователь"
109
+
110
+ #: wp-cerber.php:2180
111
+ msgid "Search string"
112
+ msgstr "Строка поиска"
113
+
114
+ #: wp-cerber.php:2193
115
+ msgid "To unsubscribe click here"
116
+ msgstr "Для отмены подписки нажмите здесь"
117
+
118
+ #: settings.php:94
119
+ msgid "Preferences"
120
+ msgstr "Настройки"
121
+
122
+ #: settings.php:96
123
+ msgid "Date format"
124
+ msgstr "Формат даты"
125
+
126
+ #. Author of the plugin/theme
127
+ msgid "Gregory"
128
+ msgstr "Gregory"
129
+
130
+ #. Description of the plugin/theme
131
+ msgid "Protects site from brute force attacks, bots and hackers. Antispam protection with reCAPTCHA. Comprehensive control of user activity. Restrict login by IP access lists. Limit login attempts. Feel free to contact developer on the site <a href=\"http://wpcerber.com\">wpcerber.com</a>."
132
+ msgstr "Защищает сайт от атак перебора, ботов, хакеров. Антиспам защита с reCAPTCHA. Всесторонний контроль активности пользователей. Ограничение входа по IP адресам. Ограничение попыток входа. Не стесняйтесь контактировать с разработчиком на сайте <a href=\"http://wpcerber.com\">wpcerber.com</a>."
133
+
134
+ #: dashboard.php:705 dashboard.php:876 dashboard.php:1320 settings.php:217
135
+ msgid "Dashboard"
136
+ msgstr "Консоль"
137
+
138
+ #: settings.php:134
139
+ msgid "Enable reCAPTCHA for WooCommerce login form"
140
+ msgstr "Включить reCAPTCHA для формы входа WooCommerce"
141
+
142
+ #: settings.php:133
143
+ msgid "Enable reCAPTCHA for WordPress login form"
144
+ msgstr "Включить reCAPTCHA для формы входа WordPress"
145
+
146
+ #: settings.php:131
147
+ msgid "Enable reCAPTCHA for WooCommerce lost password form"
148
+ msgstr "Включить reCAPTCHA для формы восстановления пароля WooCommerce"
149
+
150
+ #: settings.php:130
151
+ msgid "Enable reCAPTCHA for WordPress lost password form"
152
+ msgstr "Включить reCAPTCHA для формы восстановления пароля WordPress"
153
+
154
+ #: settings.php:128
155
+ msgid "Enable reCAPTCHA for WooCommerce registration form"
156
+ msgstr "Включить reCAPTCHA для формы регистрации WooCommerce"
157
+
158
+ #: settings.php:127
159
+ msgid "Enable reCAPTCHA for WordPress registration form"
160
+ msgstr "Включить reCAPTCHA для формы регистрации WordPress"
161
+
162
+ #: settings.php:127
163
+ msgid "Registration form"
164
+ msgstr "Форма регистрации"
165
+
166
+ #: settings.php:91
167
+ msgid "Cerber Lab protocol"
168
+ msgstr "Cerber Lab protocol"
169
+
170
+ #: settings.php:90
171
+ msgid "Send malicious IP addresses to the Cerber Lab"
172
+ msgstr "Посылать вредоносные IP адреса в Cerber Lab"
173
+
174
+ #: settings.php:90
175
+ msgid "Cerber Lab connection"
176
+ msgstr "Подключение Cerber Lab"
177
+
178
+ #: dashboard.php:1027
179
+ msgid "Recently locked out IP addresses"
180
+ msgstr "Недавно заблокированые IP адреса"
181
+
182
+ #: dashboard.php:1011 dashboard.php:1026
183
+ msgid "View all"
184
+ msgstr "Просмотреть все"
185
+
186
+ #: dashboard.php:703 settings.php:212
187
+ msgid "WP Cerber Security"
188
+ msgstr "WP Cerber Security"
189
+
190
+ #: dashboard.php:671
191
+ msgid "Add network to the Black List"
192
+ msgstr "Добавить сеть в черный список"
193
+
194
+ #: dashboard.php:657
195
+ msgid "Network:"
196
+ msgstr "Сеть:"
197
+
198
+ #: dashboard.php:150 dashboard.php:158
199
+ msgid "Incorrect IP address or IP range"
200
+ msgstr "Неверный IP адрес или диапазон адресов"
201
+
202
+ #: common.php:360
203
+ msgid "ago"
204
+ msgstr "назад"
205
+
206
+ #: common.php:354
207
+ msgid "seconds"
208
+ msgstr "секунд"
209
+
210
+ #: common.php:352
211
+ msgid "hours"
212
+ msgstr "часов"
213
+
214
+ #: common.php:350
215
+ msgid "months"
216
+ msgstr "месяцев"
217
+
218
+ #: common.php:349
219
+ msgid "years"
220
+ msgstr "лет"
221
+
222
+ #: common.php:346
223
+ msgid "second"
224
+ msgstr "секунда"
225
+
226
+ #: common.php:345
227
+ msgid "minute"
228
+ msgstr "минута"
229
+
230
+ #: common.php:344
231
+ msgid "hour"
232
+ msgstr "час"
233
+
234
+ #: common.php:343
235
+ msgid "day"
236
+ msgstr "день"
237
+
238
+ #: common.php:342
239
+ msgid "month"
240
+ msgstr "месяц"
241
+
242
+ #: common.php:341
243
+ msgid "year"
244
+ msgstr "год"
245
+
246
+ #: common.php:273
247
+ msgid "Request to the Google reCAPTCHA service failed"
248
+ msgstr "Запрос к сервису Google reCAPTCHA не удался"
249
+
250
+ #: cerber-lab.php:418
251
+ msgid "NO, maybe later"
252
+ msgstr "НЕТ, возможно позже"
253
+
254
+ #: cerber-lab.php:417
255
+ msgid "OK, nail them all"
256
+ msgstr "ОК, прибьем их всех"
257
+
258
+ #: cerber-lab.php:416
259
+ msgid "Allow WP Cerber to send locked out malicious IP addresses to Cerber Lab. This helps the plugin team to develop new algorithms for WP Cerber that will defend WordPress against new threats and botnets that are appearing everyday. You can disable the sending in the plugin settings at any time."
260
+ msgstr "Разрешить WP Cerber посылать заблокированные IP адреса в Cerber Lab. Это помогает команде плагина разрабатывать новые алгоритмы для WP Cerber, которые будут защищать WordPress против новых угроз и ботнетов появляюшихся каждый день. Вы всегда можете отключить отсылку в настройках плагина, в любой момент."
261
+
262
+ #: cerber-lab.php:415
263
+ msgid "Want to make WP Cerber even more powerful?"
264
+ msgstr "Хотите сделать WP Cerber еще мощнее ?"
265
+
266
+ #. #-#-#-#-# tmp-wp-cerber.pot (WP Cerber 4.5) #-#-#-#-#
267
+ #. Plugin URI of the plugin/theme
268
+ #. #-#-#-#-# tmp-wp-cerber.pot (WP Cerber 4.5) #-#-#-#-#
269
+ #. Author URI of the plugin/theme
270
+ msgid "http://wpcerber.com"
271
+ msgstr "http://wpcerber.com"
272
+
273
+ #: wp-cerber.php:2281
274
+ msgid "Import settings"
275
+ msgstr "Импорт настроек"
276
+
277
+ #: wp-cerber.php:2274
278
+ msgid "It's important to check security settings."
279
+ msgstr "Важно проверить настройки безопасности."
280
+
281
+ #: wp-cerber.php:2272
282
+ msgid "Your IP address is added to the"
283
+ msgstr "Ваш IP адрес добавлен к"
284
+
285
+ #: wp-cerber.php:2255
286
+ msgid "Can't activate WP Cerber due to a database error."
287
+ msgstr "Невозможно активировать плагин WP Cerber из-за ошибки в базе данных."
288
+
289
+ #: wp-cerber.php:2250
290
+ msgid "The WP Cerber requires WordPress %s or higher. You are running"
291
+ msgstr "WP Cerber требует WordPress версии %s или выше. У вас версия"
292
+
293
+ #: wp-cerber.php:2246
294
+ msgid "The WP Cerber requires PHP %s or higher. You are running"
295
+ msgstr "WP Cerber требует PHP версии %s или выше. У вас версия"
296
+
297
+ #: wp-cerber.php:1976
298
+ msgid "This message was sent by"
299
+ msgstr "Это сообщение было отправлено"
300
+
301
+ #: wp-cerber.php:1956
302
+ msgid "New Custom login URL"
303
+ msgstr "Новый URL для входа на сайт"
304
+
305
+ #: wp-cerber.php:1951
306
+ msgid "Change notification settings"
307
+ msgstr "Изменить настройки уведомлений"
308
+
309
+ #: wp-cerber.php:1950 wp-cerber.php:2271
310
+ msgid "WP Cerber is now active and has started protecting your site"
311
+ msgstr "WP Cerber активен и начал защищать ваш сайт"
312
+
313
+ #: wp-cerber.php:1949
314
+ msgid "The WP Cerber security plugin is now active"
315
+ msgstr "WP Cerber плагин безопасности активен"
316
+
317
+ #: wp-cerber.php:1945
318
+ msgid "From country"
319
+ msgstr "Из страны"
320
+
321
+ #: wp-cerber.php:1942
322
+ msgid "From IP address"
323
+ msgstr "С IP адреса"
324
+
325
+ #: wp-cerber.php:1941
326
+ msgid "By user"
327
+ msgstr "По пользователю"
328
+
329
+ #: wp-cerber.php:1935
330
+ msgid "Not logged in"
331
+ msgstr "Нет авторизации"
332
+
333
+ #: wp-cerber.php:1932 wp-cerber.php:1933
334
+ msgid "The WP Cerber security plugin has been deactivated"
335
+ msgstr "WP Cerber плагин деактивирован"
336
+
337
+ #: wp-cerber.php:1929 wp-cerber.php:1940
338
+ msgid "Website"
339
+ msgstr "Сайт"
340
+
341
+ #: wp-cerber.php:1927
342
+ msgid "Hi!"
343
+ msgstr "Привет!"
344
+
345
+ #: wp-cerber.php:1926 wp-cerber.php:1928
346
+ msgid "A new version of WP Cerber is available to install"
347
+ msgstr "Доступна новая версия WP Cerber!"
348
+
349
+ #: wp-cerber.php:1923
350
+ msgid "View lockouts in dashboard"
351
+ msgstr "Просмотреть список заблокированных IP"
352
+
353
+ #: wp-cerber.php:1922
354
+ msgid "View activity for this IP"
355
+ msgstr "Посмотреть активность для этого IP"
356
+
357
+ #: wp-cerber.php:1920
358
+ msgid "Last lockout was added: %s for IP %s"
359
+ msgstr "Последняя блокировка была добавлена %s для IP %s"
360
+
361
+ #: wp-cerber.php:1919
362
+ msgid "Number of active lockouts"
363
+ msgstr "Число активных блокировок на данный момент"
364
+
365
+ #: wp-cerber.php:1917
366
+ msgid "Number of lockouts is increasing"
367
+ msgstr "Число блокировок увеличилось"
368
+
369
+ #: wp-cerber.php:1914
370
+ msgid "unspecified"
371
+ msgstr "неуказано"
372
+
373
+ #: wp-cerber.php:1892 wp-cerber.php:2192
374
+ msgid "View activity in dashboard"
375
+ msgstr "Просмотреть журнал активности"
376
+
377
+ #: wp-cerber.php:1891
378
+ msgid "Last failed attempt was at %s from IP %s with user login: %s."
379
+ msgstr "Последняя неудачная попытка была в %s с IP адреса %s с логином %s."
380
+
381
+ #: wp-cerber.php:1890
382
+ msgid "Citadel mode is activated after %d failed login attempts in %d minutes."
383
+ msgstr "Режим Цитадель активирован после %d неудачных попыток за %d минут."
384
+
385
+ #: wp-cerber.php:1888
386
+ msgid "Citadel mode is activated"
387
+ msgstr "Активирован режим Цитадель"
388
+
389
+ #: wp-cerber.php:1870
390
+ msgid "WP Cerber notify"
391
+ msgstr "Уведомление WP Cerber"
392
+
393
+ #: common.php:286
394
+ msgid "Limit on login attempts is reached"
395
+ msgstr "Количество попыток исчерпано"
396
+
397
+ #: common.php:287
398
+ msgid "Attempt to access"
399
+ msgstr "Попытка доступа к"
400
+
401
+ #: wp-cerber.php:742
402
+ msgid "Username is not allowed. Please choose another one."
403
+ msgstr "Имя пользователя недопустимо. Выберите другое."
404
+
405
+ #: wp-cerber.php:613
406
+ msgid "<strong>ERROR</strong>: The password you entered for the username %s is incorrect."
407
+ msgstr "<strong>ОШИБКА</strong>: Пароль введенный для пользователя %s is некорректен."
408
+
409
+ #: wp-cerber.php:496
410
+ msgid "Human verification failed. Please click the square box in the reCAPTCHA block below."
411
+ msgstr "Антибот проверка неудачна. Пожалуйста тыкните в квадратную отметку блока reCAPTCHA ниже"
412
+
413
+ #: common.php:81 common.php:134 settings.php:479 wp-cerber.php:602
414
+ #: wp-cerber.php:734 wp-cerber.php:741 wp-cerber.php:765
415
+ msgid "ERROR:"
416
+ msgstr "ОШИБКА:"
417
+
418
+ #: wp-cerber.php:214
419
+ msgid "You have only one attempt remaining."
420
+ msgid_plural "You have %d attempts remaining."
421
+ msgstr[0] "У вас есть только одна попытка для входа"
422
+ msgstr[1] "У вас осталось %d попытки для входа."
423
+ msgstr[2] "У вас осталось %d попыток для входа."
424
+
425
+ #: wp-cerber.php:196
426
+ msgid "You have reached the login attempts limit. Please try again in %d minutes."
427
+ msgstr "Вход невозможен. Слишком много ошибочных попыток. Попробуйте войти через %d минут."
428
+
429
+ #: wp-cerber.php:190
430
+ msgid "You are not allowed to log in. Ask your administrator for assistance."
431
+ msgstr "Вход на сайт невозможен. Обратитесь к администратору сайта."
432
+
433
+ #: whois.php:211
434
+ msgid "Unknown"
435
+ msgstr "Неизвестен"
436
+
437
+ #: settings.php:501
438
+ msgid "<strong>ERROR</strong>: please enter a valid email address."
439
+ msgstr "<strong>ОШИБКА</strong>: Введите действительный адрес эл.почты."
440
+
441
+ #: settings.php:426
442
+ msgid "Attention! You have changed the login URL! The new login URL is"
443
+ msgstr "Внимание! Вы изменили URL страницы авторизации. Новый адрес"
444
+
445
+ #: settings.php:342
446
+ msgid "Enable after %s failed login attempts in last %s minutes"
447
+ msgstr "Активировать после %s неудачных авторизаций за последние %s минут"
448
+
449
+ #: settings.php:337
450
+ msgid "Notify admin if the number of active lockouts above"
451
+ msgstr "Уведомить администратора, если число заблокированных IP более"
452
+
453
+ #: settings.php:330
454
+ msgid "Increase lockout duration to %s hours after %s lockouts in the last %s hours"
455
+ msgstr "Увеличить длительность блокировки до %s часов после %s блокировок в течение последних %s часов"
456
+
457
+ #: settings.php:325
458
+ msgid "%s allowed retries in %s minutes"
459
+ msgstr "%s попыток разрешено в течении %s минут"
460
+
461
+ #: settings.php:238
462
+ msgid "Help"
463
+ msgstr "Помощь"
464
+
465
+ #: cerber-tools.php:40 dashboard.php:708
466
+ msgid "Tools"
467
+ msgstr "Инструменты"
468
+
469
+ #: dashboard.php:707
470
+ msgid "reCAPTCHA"
471
+ msgstr "reCAPTCHA"
472
+
473
+ #: settings.php:231
474
+ msgid "Users"
475
+ msgstr "Пользователи"
476
+
477
+ #: settings.php:229 wp-cerber.php:2279
478
+ msgid "Hardening"
479
+ msgstr "Панцирь"
480
+
481
+ #: settings.php:224 wp-cerber.php:2277
482
+ msgid "Main Settings"
483
+ msgstr "Главные настройки"
484
+
485
+ #: cerber-lab.php:419 settings.php:190
486
+ msgid "Know more"
487
+ msgstr "Узнать больше"
488
+
489
+ #: settings.php:189
490
+ msgid "Before you can start using reCAPTCHA, you have to obtain Site key and Secret key on the Google website"
491
+ msgstr "Перед использованием reCAPTCHA вам нужно получить ключ сайта и секретный ключ на сайте Google"
492
+
493
+ #: settings.php:184
494
+ msgid "These settings do not affect hosts from the "
495
+ msgstr "Эти настройки не применяются к адресам из"
496
+
497
+ #: settings.php:177
498
+ msgid "In Citadel mode nobody is able to login. Active user's sessions will not be affected."
499
+ msgstr "В режиме Цитадель никто не может войти. Активные сессии пользователей не затрагиваются."
500
+
501
+ #: settings.php:173
502
+ msgid "Be careful when enabling this options. If you forget the custom login URL you will not be able to login."
503
+ msgstr "Будте внимательны при установке этих параметров. Если вы забудете URL страницы авторизации вы не сможете войти в панель управления."
504
+
505
+ #: settings.php:170
506
+ msgid "Please enable Permalinks to use this feature. Set Permalink Settings to something other than Default."
507
+ msgstr "Для использования этой настройки необходимо активировать Постоянные ссылки в настройках сайта."
508
+
509
+ #: settings.php:166
510
+ msgid "Make your protection smarter!"
511
+ msgstr "Сделайте защиту от злоумышленников еще умнее"
512
+
513
+ #: settings.php:133
514
+ msgid "Login form"
515
+ msgstr "Форма входа"
516
+
517
+ #: settings.php:130
518
+ msgid "Lost password form"
519
+ msgstr "Форма восстановления пароля"
520
+
521
+ #: settings.php:125
522
+ msgid "Secret key"
523
+ msgstr "Секретный ключ"
524
+
525
+ #: settings.php:124
526
+ msgid "Site key"
527
+ msgstr "Ключ сайта"
528
+
529
+ #: cerber-tools.php:195
530
+ msgid "reCAPTCHA settings"
531
+ msgstr "Настройки reCAPTCHA"
532
+
533
+ #: settings.php:117
534
+ msgid "in minutes (leave empty to use default WP value)"
535
+ msgstr "В минутах (оставьте пустым для значения WP по умолчанию)"
536
+
537
+ #: settings.php:117
538
+ msgid "User session expire"
539
+ msgstr "Длительность сессии пользователя"
540
+
541
+ #: settings.php:116
542
+ msgid "Usernames from this list are not allowed to log in or register. Any IP address, have tried to use any of these usernames, will be immediately blocked. Use comma to separate logins."
543
+ msgstr "Имена пользователей из этого списка не разрешены для входа или регистрации. Любой IP адрес пытающийся использовать эти имена будет автоматически заблокирован. Испольуйте запятую как разделитель."
544
+
545
+ #: settings.php:116
546
+ msgid "Prohibited usernames"
547
+ msgstr "Запрещеные имена пользователей"
548
+
549
+ #: settings.php:115
550
+ msgid "User related settings"
551
+ msgstr "Настройки пользователей"
552
+
553
+ #: settings.php:107
554
+ msgid "Block access to the WordPress REST API"
555
+ msgstr "Закрыть доступ к функциям WordPress REST API"
556
+
557
+ #: settings.php:107
558
+ msgid "Disable REST API"
559
+ msgstr "Отключить REST API"
560
+
561
+ #: settings.php:106
562
+ msgid "Block access to the RSS, Atom and RDF feeds"
563
+ msgstr "Закрыть доступ к RSS, Atom и RDF фидам"
564
+
565
+ #: settings.php:106
566
+ msgid "Disable feeds"
567
+ msgstr "Отключить фиды"
568
+
569
+ #: settings.php:105
570
+ msgid "Block access to the XML-RPC server (including Pingbacks and Trackbacks)"
571
+ msgstr "Закрыть доступ к функциям XML-RPC, включая Pingback и Trackback"
572
+
573
+ #: settings.php:105
574
+ msgid "Disable XML-RPC"
575
+ msgstr "Отключить XML-RPC"
576
+
577
+ #: settings.php:104
578
+ msgid "Block access to the pages like /?author=n"
579
+ msgstr "Закрыть доступ к страницам авторов по номеру пользователя /?author=n"
580
+
581
+ #: settings.php:104
582
+ msgid "Stop user enumeration"
583
+ msgstr "Заблокировать сбор имен"
584
+
585
+ #: settings.php:103
586
+ msgid "Hardening WordPress"
587
+ msgstr "Усиление WordPress"
588
+
589
+ #: settings.php:92
590
+ msgid "Write failed login attempts to the file"
591
+ msgstr "Записывать попытки входа в файл"
592
+
593
+ #: settings.php:92
594
+ msgid "Use file"
595
+ msgstr "Использовать файл"
596
+
597
+ #: settings.php:95
598
+ msgid "Retrieve extra WHOIS information for IP"
599
+ msgstr "Получить дополнительную информацию об IP используя WHOIS"
600
+
601
+ #: settings.php:95
602
+ msgid "Drill down IP"
603
+ msgstr "Изучать IP"
604
+
605
+ #: common.php:351 settings.php:89
606
+ msgid "days"
607
+ msgstr "дней"
608
+
609
+ #: settings.php:89
610
+ msgid "Keep records for"
611
+ msgstr "Хранить записи не более"
612
+
613
+ #: settings.php:143
614
+ msgid "notification letters allowed per hour (0 means unlimited)"
615
+ msgstr "разрешенное число писем с уведомлениями в час (0 - без ограничений)"
616
+
617
+ #: settings.php:143
618
+ msgid "Notification limit"
619
+ msgstr "Ограничение уведомлений"
620
+
621
+ #: settings.php:142
622
+ msgid "if empty, the admin email %s will be used"
623
+ msgstr "Если пусто, то будет использован адрес администратора %s"
624
+
625
+ #: settings.php:142
626
+ msgid "Email Address"
627
+ msgstr "Адрес email"
628
+
629
+ #: settings.php:81 settings.php:339
630
+ msgid "Click to send test"
631
+ msgstr "Кликните, чтобы протестировать отправку"
632
+
633
+ #: settings.php:81
634
+ msgid "Send notification to admin email"
635
+ msgstr "Отправить уведомление на адрес email администратора сайта"
636
+
637
+ #: settings.php:79
638
+ msgid "Duration"
639
+ msgstr "Длительность"
640
+
641
+ #: settings.php:78
642
+ msgid "Threshold"
643
+ msgstr "Порог"
644
+
645
+ #: settings.php:75
646
+ msgid "Block direct access to wp-login.php and return HTTP 404 Not Found Error"
647
+ msgstr "Заблокировать доступ к wp-login.php и возвращать HTTP 404 Страница не найдена"
648
+
649
+ #: settings.php:75
650
+ msgid "Disable wp-login.php"
651
+ msgstr "Доступ к wp-login.php"
652
+
653
+ #: settings.php:74
654
+ msgid "must not overlap with the existing pages or posts slug"
655
+ msgstr "не должно совпадать с URL существующих страниц или постов"
656
+
657
+ #: settings.php:74
658
+ msgid "Custom login URL"
659
+ msgstr "Адрес страницы авторизации"
660
+
661
+ #: settings.php:73
662
+ msgid "Custom login page"
663
+ msgstr "Смена URL страницы авторизации"
664
+
665
+ #: settings.php:70
666
+ msgid "Immediately block IP after any request to wp-login.php"
667
+ msgstr "Блокировать IP при любом запросе wp-login.php"
668
+
669
+ #: settings.php:70
670
+ msgid "Request wp-login.php"
671
+ msgstr "Запрос wp-login.php"
672
+
673
+ #: settings.php:69
674
+ msgid "Disable automatic redirecting to the login page when /wp-admin/ is requested by an unauthorized request"
675
+ msgstr "Отключить автоматическую переадресацию при запросе /wp-admin/ неавторизованным пользователем"
676
+
677
+ #: settings.php:69
678
+ msgid "Redirect dashboard requests"
679
+ msgstr "Запросы к панели управления"
680
+
681
+ #: settings.php:68
682
+ msgid "Immediately block IP when attempting to login with a non-existent username"
683
+ msgstr "Блокировать IP при попытке авторизации с логином несуществующего пользователя"
684
+
685
+ #: settings.php:68
686
+ msgid "Non-existent users"
687
+ msgstr "Несуществующие пользователи"
688
+
689
+ #: settings.php:67
690
+ msgid "Always block entire subnet Class C of intruders IP"
691
+ msgstr "Всегда блокировать подсеть класса С вместо IP адреса"
692
+
693
+ #: settings.php:67
694
+ msgid "Block subnet"
695
+ msgstr "Блокировка подсети"
696
+
697
+ #: settings.php:66
698
+ msgid "Proactive security rules"
699
+ msgstr "Проактивные правила безопасности"
700
+
701
+ #: settings.php:64
702
+ msgid "My site is behind a reverse proxy"
703
+ msgstr "Мой сайт подключен к сети через прокси-сервер"
704
+
705
+ #: settings.php:64
706
+ msgid "Site connection"
707
+ msgstr "Подключение к сети"
708
+
709
+ #: settings.php:63 settings.php:81 settings.php:234 wp-cerber.php:2280
710
+ msgid "Notifications"
711
+ msgstr "Уведомления"
712
+
713
+ #: settings.php:62
714
+ msgid "Aggressive lockout"
715
+ msgstr "Ужесточение"
716
+
717
+ #: common.php:353 settings.php:61 settings.php:79
718
+ msgid "minutes"
719
+ msgstr "минут"
720
+
721
+ #: settings.php:61
722
+ msgid "Lockout duration"
723
+ msgstr "Длительность блокировки"
724
+
725
+ #: settings.php:60
726
+ msgid "Attempts"
727
+ msgstr "Попытки"
728
+
729
+ #: settings.php:59
730
+ msgid "Limit login attempts"
731
+ msgstr "Ограничение числа попыток авторизации"
732
+
733
+ #: dashboard.php:653
734
+ msgid "Abuse email:"
735
+ msgstr "Адрес email для жалоб:"
736
+
737
+ #: dashboard.php:1196
738
+ msgid "Update to version %s of WP Cerber"
739
+ msgstr "Обновить WP Cerber до версии %s"
740
+
741
+ #: dashboard.php:1190
742
+ msgid "New version is available"
743
+ msgstr "Доступна новая версия"
744
+
745
+ #: dashboard.php:1134
746
+ msgid "View Activity"
747
+ msgstr "Что происходит?"
748
+
749
+ #: dashboard.php:1133
750
+ msgid "Deactivate"
751
+ msgstr "Деактивировать"
752
+
753
+ #: dashboard.php:1132
754
+ msgid "Attention! Citadel mode is now active. Nobody is able to log in."
755
+ msgstr "Внимание! Режим Цитадель активен. Авторизация на сайте заблокирована."
756
+
757
+ #: dashboard.php:1079
758
+ msgid "Donate"
759
+ msgstr "Поддержите разработку"
760
+
761
+ #: dashboard.php:1060
762
+ msgid "doesn't affect Custom login URL and Access Lists"
763
+ msgstr "не затронет настройки URL страницы авторизации и списки доступа"
764
+
765
+ #: dashboard.php:1054 dashboard.php:1450
766
+ msgid "Are you sure?"
767
+ msgstr "Вы уверены?"
768
+
769
+ #: dashboard.php:1052
770
+ msgid "Load default settings"
771
+ msgstr "Загрузить настройки"
772
+
773
+ #: dashboard.php:1050
774
+ msgid "You can easily load default recommended settings using button below"
775
+ msgstr "Вы можете загрузить рекомендованные настройки с помощью всего одной кнопки"
776
+
777
+ #: dashboard.php:1049
778
+ msgid "Confused about some settings?"
779
+ msgstr "Сомневаетесь какие настройки оптимальны?"
780
+
781
+ #: dashboard.php:878 settings.php:222
782
+ msgid "Lockouts"
783
+ msgstr "Блокировки"
784
+
785
+ #: dashboard.php:870 settings.php:77
786
+ msgid "Citadel mode"
787
+ msgstr "Режим Цитадель"
788
+
789
+ #: dashboard.php:868 dashboard.php:869 dashboard.php:1300
790
+ msgid "entry"
791
+ msgid_plural "entries"
792
+ msgstr[0] "элемент"
793
+ msgstr[1] "элемента"
794
+ msgstr[2] "элементов"
795
+
796
+ #: dashboard.php:867
797
+ msgid "Last lockout"
798
+ msgstr "Последняя блокировка"
799
+
800
+ #: dashboard.php:866
801
+ msgid "Lockouts at the moment"
802
+ msgstr "Сейчас заблокировано"
803
+
804
+ #: dashboard.php:864
805
+ msgid "lockouts"
806
+ msgstr "блокировок"
807
+
808
+ #: dashboard.php:863 dashboard.php:864
809
+ msgid "view all"
810
+ msgstr "просмотреть все"
811
+
812
+ #: dashboard.php:863 dashboard.php:864
813
+ msgid "in 24 hours"
814
+ msgstr "за 24 часа"
815
+
816
+ #: dashboard.php:863
817
+ msgid "failed attempts"
818
+ msgstr "ошибок авторизации"
819
+
820
+ #: dashboard.php:858
821
+ msgid "disabled"
822
+ msgstr "отключен"
823
+
824
+ #: dashboard.php:857
825
+ msgid "not active"
826
+ msgstr "неактивен"
827
+
828
+ #: dashboard.php:855
829
+ msgid "deactivate"
830
+ msgstr "деактивировать"
831
+
832
+ #: dashboard.php:855
833
+ msgid "active"
834
+ msgstr "активен"
835
+
836
+ #: dashboard.php:822
837
+ msgid "Cerber Quick View"
838
+ msgstr "Сводка от Cerber"
839
+
840
+ #: cerber-tools.php:185
841
+ msgid "Error while parsing file"
842
+ msgstr "Возникла ошибка при обработке файла"
843
+
844
+ #: cerber-tools.php:181
845
+ msgid "Settings has imported successfully from"
846
+ msgstr "Все настройки успешно загружены"
847
+
848
+ #: cerber-tools.php:178
849
+ msgid "Error while updating"
850
+ msgstr "Возникла ошибка при обновлении"
851
+
852
+ #: cerber-tools.php:148
853
+ msgid "No file was uploaded or file is corrupted"
854
+ msgstr "Файл не был загружен или имеет неверный формат"
855
+
856
+ #: cerber-tools.php:69
857
+ msgid "Upload file"
858
+ msgstr "Загрузить файл"
859
+
860
+ #: cerber-tools.php:67
861
+ msgid "What do you want to import?"
862
+ msgstr "Что вы хотите импортировать?"
863
+
864
+ #: cerber-tools.php:64
865
+ msgid "Maximum upload file size: %s."
866
+ msgstr "Максимальный размер загружаемого файла: %s."
867
+
868
+ #: cerber-tools.php:64
869
+ msgid "Select file to import."
870
+ msgstr "Выберите файл для загрузки."
871
+
872
+ #: cerber-tools.php:63
873
+ msgid "When you click the button below, file will be uploaded and all existing settings will be overridden."
874
+ msgstr "Когда вы нажмете на кнопку, все настройки из файла будут загружены на сайт"
875
+
876
+ #: cerber-tools.php:62
877
+ msgid "Import settings from the file"
878
+ msgstr "Импорт настроек из файла"
879
+
880
+ #: cerber-tools.php:60
881
+ msgid "Download file"
882
+ msgstr "Скачать файл"
883
+
884
+ #: cerber-tools.php:59 cerber-tools.php:68 cerber-tools.php:178
885
+ #: dashboard.php:879 dashboard.php:1321 settings.php:227 wp-cerber.php:2278
886
+ msgid "Access Lists"
887
+ msgstr "Списки доступа"
888
+
889
+ #: cerber-tools.php:58 cerber-tools.php:67
890
+ msgid "Settings"
891
+ msgstr "Настройки"
892
+
893
+ #: cerber-tools.php:57
894
+ msgid "What do you want to export?"
895
+ msgstr "Что вы хотите экспортировать"
896
+
897
+ #: cerber-tools.php:56
898
+ msgid "When you click the button below you will get a configuration file, which you can upload on another site."
899
+ msgstr "Когда вы нажмете на кнопку, то получите файл с настройками, который можно использовать на других сайтах."
900
+
901
+ #: cerber-tools.php:55
902
+ msgid "Export settings to the file"
903
+ msgstr "Экспорт настроек в файл"
904
+
905
+ #: dashboard.php:798 dashboard.php:851
906
+ msgid "Never"
907
+ msgstr "Никогда"
908
+
909
+ #: common.php:253
910
+ msgid "User created"
911
+ msgstr "Пользователь создан"
912
+
913
+ #: common.php:254
914
+ msgid "User registered"
915
+ msgstr "Пользователь зарегистрирован"
916
+
917
+ #: common.php:255
918
+ msgid "Logged in"
919
+ msgstr "Вход"
920
+
921
+ #: common.php:256
922
+ msgid "Logged out"
923
+ msgstr "Выход"
924
+
925
+ #: common.php:257
926
+ msgid "Login failed"
927
+ msgstr "Ошибка авторизации"
928
+
929
+ #: common.php:260
930
+ msgid "IP blocked"
931
+ msgstr "IP заблокирован"
932
+
933
+ #: common.php:261
934
+ msgid "Subnet blocked"
935
+ msgstr "Подсеть заблокирована"
936
+
937
+ #: common.php:263
938
+ msgid "Citadel activated!"
939
+ msgstr "Режим Цитадель активирован!"
940
+
941
+ #: common.php:265 dashboard.php:445 dashboard.php:630
942
+ msgid "Locked out"
943
+ msgstr "Заблокировано"
944
+
945
+ #: common.php:269
946
+ msgid "Password changed"
947
+ msgstr "Пароль изменен"
948
+
949
+ #: common.php:266
950
+ msgid "IP blacklisted"
951
+ msgstr "IP в черном списке"
952
+
953
+ #: common.php:271
954
+ msgid "reCAPTCHA verification failed"
955
+ msgstr "проверка reCAPTCHA неудачна"
956
+
957
+ #: common.php:272
958
+ msgid "reCAPTCHA settings are incorrect"
959
+ msgstr "настройки reCAPTCHA неверны"
960
+
961
+ #: common.php:275
962
+ msgid "Attempt to access prohibited URL"
963
+ msgstr "Попытка доступа к запрещенному URL"
964
+
965
+ #: common.php:276 common.php:288
966
+ msgid "Attempt to log in with non-existent username"
967
+ msgstr "Попытка войти с несуществующим именем пользователя"
968
+
969
+ #: common.php:277 common.php:289
970
+ msgid "Attempt to log in with prohibited username"
971
+ msgstr "Попытка входа с запрещенным именем"
972
+
973
+ #: dashboard.php:74 dashboard.php:123
974
+ msgid "Remove"
975
+ msgstr "Удалить"
976
+
977
+ #: dashboard.php:77 dashboard.php:460 wp-cerber.php:2168
978
+ msgid "IP"
979
+ msgstr "IP"
980
+
981
+ #: dashboard.php:77 dashboard.php:460
982
+ msgid "Hostname"
983
+ msgstr "Имя узла"
984
+
985
+ #: dashboard.php:77
986
+ msgid "Expires"
987
+ msgstr "Истекает"
988
+
989
+ #: dashboard.php:77 wp-cerber.php:1921
990
+ msgid "Reason"
991
+ msgstr "Причина"
992
+
993
+ #: dashboard.php:77
994
+ msgid "Action"
995
+ msgstr "Действие"
996
+
997
+ #: dashboard.php:83
998
+ msgid "Showing last %d records from %d"
999
+ msgstr "Отображены последние %d строк из %d"
1000
+
1001
+ #: dashboard.php:85
1002
+ msgid "Hint"
1003
+ msgstr "Подсказка"
1004
+
1005
+ #: dashboard.php:85
1006
+ msgid "To view activity, click on the IP"
1007
+ msgstr "Чтобы увидеть активность, нажмите на адрес IP"
1008
+
1009
+ #: dashboard.php:89
1010
+ msgid "No lockouts at the moment. The sky is clear."
1011
+ msgstr "Блокировок нет. Все в порядке."
1012
+
1013
+ #: dashboard.php:102 dashboard.php:440 dashboard.php:625 dashboard.php:868
1014
+ #: settings.php:184 wp-cerber.php:2272
1015
+ msgid "White IP Access List"
1016
+ msgstr "Белый список доступа по IP"
1017
+
1018
+ #: dashboard.php:102
1019
+ msgid "These IPs will never be locked out"
1020
+ msgstr "Эти адреса не будут заблокированы ни при каких условиях"
1021
+
1022
+ #: dashboard.php:104 dashboard.php:441 dashboard.php:627 dashboard.php:869
1023
+ msgid "Black IP Access List"
1024
+ msgstr "Черный список доступа по IP"
1025
+
1026
+ #: dashboard.php:104
1027
+ msgid "Nobody can log in or register from these IPs"
1028
+ msgstr "Никто не сможет войти или зарегистрироваться с этих IP"
1029
+
1030
+ #: dashboard.php:106
1031
+ msgid "Your IP"
1032
+ msgstr "Ваш адрес IP"
1033
+
1034
+ #: dashboard.php:123 dashboard.php:657
1035
+ msgid "Check for activity"
1036
+ msgstr "Проверить активность"
1037
+
1038
+ #: dashboard.php:126
1039
+ msgid "List is empty"
1040
+ msgstr "Список пуст"
1041
+
1042
+ #: dashboard.php:130
1043
+ msgid "Add IP to the list"
1044
+ msgstr "Добавить IP в список"
1045
+
1046
+ #: dashboard.php:153
1047
+ msgid "Address %s was added to White IP Access List"
1048
+ msgstr "Адрес %s добавлен в белый список доступа"
1049
+
1050
+ #: dashboard.php:166
1051
+ msgid "Address %s was added to Black IP Access List"
1052
+ msgstr "Адрес %s добавлен в черный список доступа"
1053
+
1054
+ #: dashboard.php:237
1055
+ msgid "unknown"
1056
+ msgstr "неизвестно"
1057
+
1058
+ #: dashboard.php:162
1059
+ msgid "You can't add your IP address"
1060
+ msgstr "Вы не можете добавить свой адрес IP"
1061
+
1062
+ #: dashboard.php:260
1063
+ msgid "Unable to send notification email"
1064
+ msgstr "Невозможно послать письмо с уведомлением"
1065
+
1066
+ #: dashboard.php:257
1067
+ msgid "Message has been sent to "
1068
+ msgstr "Сообщение было отправлено на"
1069
+
1070
+ #: dashboard.php:267
1071
+ msgid "Lockout for %s was removed"
1072
+ msgstr "Удалена блокировка для %s"
1073
+
1074
+ #: dashboard.php:283 dashboard.php:1149
1075
+ msgid "Settings saved"
1076
+ msgstr "Настройки сохранены."
1077
+
1078
+ #: dashboard.php:337 dashboard.php:460
1079
+ msgid "Date"
1080
+ msgstr "Дата"
1081
+
1082
+ #: dashboard.php:337 dashboard.php:460 dashboard.php:877 dashboard.php:1012
1083
+ #: settings.php:88 settings.php:219 wp-cerber.php:2167
1084
+ msgid "Activity"
1085
+ msgstr "Активность"
1086
+
1087
+ #: dashboard.php:473
1088
+ msgid "No activity has been logged."
1089
+ msgstr "Ни одного события не зафиксировано."
1090
+
1091
+ #: dashboard.php:337 dashboard.php:460 wp-cerber.php:2176
1092
+ msgid "Username used"
1093
+ msgstr "Использован логин"
1094
+
1095
+ #: dashboard.php:337 dashboard.php:460
1096
+ msgid "Local User"
1097
+ msgstr "Пользователь"
1098
+
1099
+ #: dashboard.php:675
1100
+ msgid "Add IP to the Black List"
1101
+ msgstr "Добавить IP в черный список"
1102
+
1103
+ #: dashboard.php:700
1104
+ msgid "WP Cerber Settings"
1105
+ msgstr "Настройки WP Cerber"
1106
+
1107
+ #. #-#-#-#-# tmp-wp-cerber.pot (WP Cerber 4.5) #-#-#-#-#
1108
+ #. Plugin Name of the plugin/theme
1109
+ #: dashboard.php:700 dashboard.php:703 dashboard.php:732
1110
+ msgid "WP Cerber"
1111
+ msgstr "WP Cerber"
1112
+
1113
+ #: dashboard.php:770
1114
+ msgid "Comments"
1115
+ msgstr "Комментарии"
1116
+
1117
+ #: dashboard.php:771
1118
+ msgid "Last login"
1119
+ msgstr "Последний вход"
1120
+
1121
+ #: dashboard.php:772
1122
+ msgid "Failed attempts in last 24 hours"
1123
+ msgstr "Неудачные попытки входа за последние 24 часа"
1124
+
1125
+ #: dashboard.php:773
1126
+ msgid "Date of registration"
1127
+ msgstr "Дата регистрации"
languages/wp-cerber-uk.mo ADDED
Binary file
languages/wp-cerber-uk.po ADDED
@@ -0,0 +1,1216 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WP Cerber\n"
4
+ "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: Tue Sep 08 2015 21:38:11 GMT+0300\n"
6
+ "PO-Revision-Date: Wed Apr 12 2017 21:49:27 GMT+0300\n"
7
+ "Last-Translator: Greg <domain@xterm.ru>\n"
8
+ "Language-Team: \n"
9
+ "Language: Ukrainian\n"
10
+ "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10 >= 2 && "
11
+ "n%10<=4 &&(n%100<10||n%100 >= 20)? 1 : 2)\n"
12
+ "MIME-Version: 1.0\n"
13
+ "Content-Type: text/plain; charset=UTF-8\n"
14
+ "Content-Transfer-Encoding: 8bit\n"
15
+ "X-Poedit-SourceCharset: UTF-8\n"
16
+ "X-Generator: Loco - https://localise.biz/\n"
17
+ "X-Poedit-Basepath: .\n"
18
+ "X-Poedit-SearchPath-0: ..\n"
19
+ "X-Poedit-KeywordsList: _:1;gettext:1;dgettext:2;ngettext:1,2;dngettext:2,3;"
20
+ "__:1;_e:1;_c:1;_n:1,2;_n_noop:1,2;_nc:1,2;__ngettext:1,2;__ngettext_noop:1,2;"
21
+ "_x:1,2c;_ex:1,2c;_nx:1,2,4c;_nx_noop:1,2,3c;_n_js:1,2;_nx_js:1,2,3c;"
22
+ "esc_attr__:1;esc_html__:1;esc_attr_e:1;esc_html_e:1;esc_attr_x:1,2c;"
23
+ "esc_html_x:1,2c;comments_number_link:2,3;t:1;st:1;trans:1;transChoice:1,2\n"
24
+ "X-Loco-Target-Locale: uk_UA"
25
+
26
+ #: ../dashboard.php:150 ../dashboard.php:158
27
+ msgid "Incorrect IP address or IP range"
28
+ msgstr ""
29
+
30
+ #: ../dashboard.php:283 ../dashboard.php:1149
31
+ msgid "Settings saved"
32
+ msgstr ""
33
+
34
+ #: ../dashboard.php:337
35
+ msgid "IP address"
36
+ msgstr ""
37
+
38
+ #: ../dashboard.php:337
39
+ msgid "User login"
40
+ msgstr ""
41
+
42
+ #: ../dashboard.php:337
43
+ msgid "User ID"
44
+ msgstr ""
45
+
46
+ #: ../dashboard.php:469
47
+ msgid "Export"
48
+ msgstr ""
49
+
50
+ #: ../dashboard.php:478
51
+ msgid "All activities"
52
+ msgstr ""
53
+
54
+ #: ../dashboard.php:485
55
+ msgid "Search for IP or username"
56
+ msgstr ""
57
+
58
+ #: ../dashboard.php:485
59
+ msgid "Filter"
60
+ msgstr ""
61
+
62
+ #: ../dashboard.php:657
63
+ msgid "Network:"
64
+ msgstr ""
65
+
66
+ #: ../dashboard.php:671
67
+ msgid "Add network to the Black List"
68
+ msgstr ""
69
+
70
+ #: ../dashboard.php:703 ../settings.php:212
71
+ msgid "WP Cerber Security"
72
+ msgstr ""
73
+
74
+ #: ../dashboard.php:705
75
+ msgid "Cerber Dashboard"
76
+ msgstr ""
77
+
78
+ #: ../dashboard.php:705 ../dashboard.php:876 ../dashboard.php:1320 ../settings.
79
+ #: php:217
80
+ msgid "Dashboard"
81
+ msgstr ""
82
+
83
+ #: ../dashboard.php:707
84
+ msgid "Cerber reCAPTCHA settings"
85
+ msgstr ""
86
+
87
+ #: ../dashboard.php:708
88
+ msgid "Cerber tools"
89
+ msgstr ""
90
+
91
+ #: ../dashboard.php:872 ../settings.php:145
92
+ msgid "Push notifications"
93
+ msgstr ""
94
+
95
+ #: ../dashboard.php:1011 ../dashboard.php:1026
96
+ msgid "View all"
97
+ msgstr ""
98
+
99
+ #: ../dashboard.php:1027
100
+ msgid "Recently locked out IP addresses"
101
+ msgstr ""
102
+
103
+ #: ../dashboard.php:1132
104
+ msgid "Attention! Citadel mode is now active. Nobody is able to log in."
105
+ msgstr ""
106
+
107
+ #: ../dashboard.php:1235
108
+ msgid "Subscribe"
109
+ msgstr ""
110
+
111
+ #: ../dashboard.php:1236
112
+ msgid "Unsubscribe"
113
+ msgstr ""
114
+
115
+ #: ../dashboard.php:1264
116
+ msgid "You've subscribed"
117
+ msgstr ""
118
+
119
+ #: ../dashboard.php:1267
120
+ msgid "You've unsubscribed"
121
+ msgstr ""
122
+
123
+ #. Description of the plugin
124
+ msgid ""
125
+ "Protects site from brute force attacks, bots and hackers. Antispam "
126
+ "protection with reCAPTCHA. Comprehensive control of user activity. Restrict "
127
+ "login by IP access lists. Limit login attempts. Feel free to contact "
128
+ "developer on the site <a href=\"http://wpcerber.com\">wpcerber.com</a>."
129
+ msgstr ""
130
+
131
+ #. Author of the plugin
132
+ msgid "Gregory"
133
+ msgstr ""
134
+
135
+ #: ../wp-cerber.php:1960 ../wp-cerber.php:1961
136
+ msgid "A new activity has been recorded"
137
+ msgstr ""
138
+
139
+ #: ../wp-cerber.php:2172
140
+ msgid "User"
141
+ msgstr ""
142
+
143
+ #: ../wp-cerber.php:2180
144
+ msgid "Search string"
145
+ msgstr ""
146
+
147
+ #: ../wp-cerber.php:2193
148
+ msgid "To unsubscribe click here"
149
+ msgstr ""
150
+
151
+ #: ../common.php:273
152
+ msgid "Request to the Google reCAPTCHA service failed"
153
+ msgstr ""
154
+
155
+ #: ../common.php:341
156
+ msgid "year"
157
+ msgstr ""
158
+
159
+ #: ../common.php:342
160
+ msgid "month"
161
+ msgstr ""
162
+
163
+ #: ../common.php:343
164
+ msgid "day"
165
+ msgstr ""
166
+
167
+ #: ../common.php:344
168
+ msgid "hour"
169
+ msgstr ""
170
+
171
+ #: ../common.php:345
172
+ msgid "minute"
173
+ msgstr ""
174
+
175
+ #: ../common.php:346
176
+ msgid "second"
177
+ msgstr ""
178
+
179
+ #: ../common.php:349
180
+ msgid "years"
181
+ msgstr ""
182
+
183
+ #: ../common.php:350
184
+ msgid "months"
185
+ msgstr ""
186
+
187
+ #: ../common.php:352
188
+ msgid "hours"
189
+ msgstr ""
190
+
191
+ #: ../common.php:354
192
+ msgid "seconds"
193
+ msgstr ""
194
+
195
+ #: ../common.php:360
196
+ msgid "ago"
197
+ msgstr ""
198
+
199
+ #: ../cerber-lab.php:415
200
+ msgid "Want to make WP Cerber even more powerful?"
201
+ msgstr ""
202
+
203
+ #: ../cerber-lab.php:416
204
+ msgid ""
205
+ "Allow WP Cerber to send locked out malicious IP addresses to Cerber Lab. "
206
+ "This helps the plugin team to develop new algorithms for WP Cerber that will "
207
+ "defend WordPress against new threats and botnets that are appearing "
208
+ "everyday. You can disable the sending in the plugin settings at any time."
209
+ msgstr ""
210
+
211
+ #: ../cerber-lab.php:417
212
+ msgid "OK, nail them all"
213
+ msgstr ""
214
+
215
+ #: ../cerber-lab.php:418
216
+ msgid "NO, maybe later"
217
+ msgstr ""
218
+
219
+ #: ../settings.php:71
220
+ msgid "Display 404 page"
221
+ msgstr ""
222
+
223
+ #: ../settings.php:90
224
+ msgid "Cerber Lab connection"
225
+ msgstr ""
226
+
227
+ #: ../settings.php:90
228
+ msgid "Send malicious IP addresses to the Cerber Lab"
229
+ msgstr ""
230
+
231
+ #: ../settings.php:91
232
+ msgid "Cerber Lab protocol"
233
+ msgstr ""
234
+
235
+ #: ../settings.php:94
236
+ msgid "Preferences"
237
+ msgstr ""
238
+
239
+ #: ../settings.php:96
240
+ msgid "Date format"
241
+ msgstr ""
242
+
243
+ #: ../settings.php:96
244
+ #, php-format
245
+ msgid "if empty, the default format %s will be used"
246
+ msgstr ""
247
+
248
+ #: ../settings.php:127
249
+ msgid "Registration form"
250
+ msgstr ""
251
+
252
+ #: ../settings.php:127
253
+ msgid "Enable reCAPTCHA for WordPress registration form"
254
+ msgstr ""
255
+
256
+ #: ../settings.php:128
257
+ msgid "Enable reCAPTCHA for WooCommerce registration form"
258
+ msgstr ""
259
+
260
+ #: ../settings.php:130
261
+ msgid "Enable reCAPTCHA for WordPress lost password form"
262
+ msgstr ""
263
+
264
+ #: ../settings.php:131
265
+ msgid "Enable reCAPTCHA for WooCommerce lost password form"
266
+ msgstr ""
267
+
268
+ #: ../settings.php:133
269
+ msgid "Enable reCAPTCHA for WordPress login form"
270
+ msgstr ""
271
+
272
+ #: ../settings.php:134
273
+ msgid "Enable reCAPTCHA for WooCommerce login form"
274
+ msgstr ""
275
+
276
+ #: ../settings.php:140
277
+ msgid "Email notifications"
278
+ msgstr ""
279
+
280
+ #: ../settings.php:142
281
+ msgid "Use comma to specify multiple values"
282
+ msgstr ""
283
+
284
+ #: ../settings.php:152
285
+ msgid "All connected devices"
286
+ msgstr ""
287
+
288
+ #: ../settings.php:153
289
+ msgid "No devices found"
290
+ msgstr ""
291
+
292
+ #: ../settings.php:155
293
+ msgid "Not available"
294
+ msgstr ""
295
+
296
+ #: ../dashboard.php:74 ../dashboard.php:123
297
+ msgid "Remove"
298
+ msgstr "Видалити"
299
+
300
+ #: ../dashboard.php:77 ../dashboard.php:460 ../wp-cerber.php:2168
301
+ msgid "IP"
302
+ msgstr "IP"
303
+
304
+ #: ../dashboard.php:77 ../dashboard.php:460
305
+ msgid "Hostname"
306
+ msgstr "Ім'я хосту"
307
+
308
+ #: ../dashboard.php:77
309
+ msgid "Expires"
310
+ msgstr "Спливає"
311
+
312
+ #: ../dashboard.php:77 ../wp-cerber.php:1921
313
+ msgid "Reason"
314
+ msgstr "Причина"
315
+
316
+ #: ../dashboard.php:77
317
+ msgid "Action"
318
+ msgstr "Дія"
319
+
320
+ #: ../dashboard.php:83
321
+ #, php-format
322
+ msgid "Showing last %d records from %d"
323
+ msgstr "Відображається %d останніх записів з %d"
324
+
325
+ #: ../dashboard.php:85
326
+ msgid "Hint"
327
+ msgstr "Підказка"
328
+
329
+ #: ../dashboard.php:85
330
+ msgid "To view activity, click on the IP"
331
+ msgstr "Щоб переглянути активність, натисніть на IP адресу"
332
+
333
+ #: ../dashboard.php:89
334
+ msgid "No lockouts at the moment. The sky is clear."
335
+ msgstr "Наразі немає блокувань. Небо ясне."
336
+
337
+ #: ../dashboard.php:102 ../dashboard.php:440 ../dashboard.php:625 ../dashboard.
338
+ #: php:868 ../wp-cerber.php:2272 ../settings.php:184
339
+ msgid "White IP Access List"
340
+ msgstr "Білий список доступу за IP"
341
+
342
+ #: ../dashboard.php:102
343
+ msgid "These IPs will never be locked out"
344
+ msgstr "Ці IP-адреси ніколи не буде заблоковано"
345
+
346
+ #: ../dashboard.php:104 ../dashboard.php:441 ../dashboard.php:627 ../dashboard.
347
+ #: php:869
348
+ msgid "Black IP Access List"
349
+ msgstr "Чорний список доступу за IP"
350
+
351
+ #: ../dashboard.php:104
352
+ msgid "Nobody can log in or register from these IPs"
353
+ msgstr "Ніхто не може увійти або зареєструватися з цих IP-адрес"
354
+
355
+ #: ../dashboard.php:106
356
+ msgid "Your IP"
357
+ msgstr "Ваш IP"
358
+
359
+ #: ../dashboard.php:123 ../dashboard.php:657
360
+ msgid "Check for activity"
361
+ msgstr "Перевірити активність"
362
+
363
+ #: ../dashboard.php:126
364
+ msgid "List is empty"
365
+ msgstr "Список порожній"
366
+
367
+ #: ../dashboard.php:130
368
+ msgid "Add IP to the list"
369
+ msgstr "Додати IP до списку"
370
+
371
+ #: ../dashboard.php:153
372
+ #, php-format
373
+ msgid "Address %s was added to White IP Access List"
374
+ msgstr "Адресу %s було додано до білого списку доступу за IP"
375
+
376
+ #: ../dashboard.php:162
377
+ msgid "You can't add your IP address"
378
+ msgstr "Ви не можете додати вашу IP-адресу"
379
+
380
+ #: ../dashboard.php:166
381
+ #, php-format
382
+ msgid "Address %s was added to Black IP Access List"
383
+ msgstr "Адресу %s було додано до чорного списку доступу за IP"
384
+
385
+ #: ../dashboard.php:237
386
+ msgid "unknown"
387
+ msgstr "невідомо"
388
+
389
+ #: ../dashboard.php:257
390
+ msgid "Message has been sent to "
391
+ msgstr "Сповіщення було надіслано "
392
+
393
+ #: ../dashboard.php:260
394
+ msgid "Unable to send notification email"
395
+ msgstr "Неможливо відправити сповіщення на email"
396
+
397
+ #: ../dashboard.php:267
398
+ #, php-format
399
+ msgid "Lockout for %s was removed"
400
+ msgstr "Блокування для %s було видалено"
401
+
402
+ #: ../dashboard.php:337 ../dashboard.php:460
403
+ msgid "Date"
404
+ msgstr "Дата"
405
+
406
+ #: ../dashboard.php:337 ../dashboard.php:460 ../dashboard.php:877 ../dashboard.
407
+ #: php:1012 ../wp-cerber.php:2167 ../settings.php:88 ../settings.php:219
408
+ msgid "Activity"
409
+ msgstr "Активність"
410
+
411
+ #: ../dashboard.php:337 ../dashboard.php:460
412
+ msgid "Local User"
413
+ msgstr "Користувач"
414
+
415
+ #: ../dashboard.php:337 ../dashboard.php:460 ../wp-cerber.php:2176
416
+ msgid "Username used"
417
+ msgstr "Використано логін"
418
+
419
+ #: ../dashboard.php:445 ../dashboard.php:630 ../common.php:265
420
+ msgid "Locked out"
421
+ msgstr "Заблоковано"
422
+
423
+ #: ../dashboard.php:473
424
+ msgid "No activity has been logged."
425
+ msgstr "Не було відмічено жодної активності."
426
+
427
+ #: ../dashboard.php:653
428
+ msgid "Abuse email:"
429
+ msgstr "Email aдресa для скарг:"
430
+
431
+ #: ../dashboard.php:675
432
+ msgid "Add IP to the Black List"
433
+ msgstr "Додати IP в чорний список"
434
+
435
+ #: ../dashboard.php:700
436
+ msgid "WP Cerber Settings"
437
+ msgstr "Налаштування WP Cerber"
438
+
439
+ #. #-#-#-#-# tmp-wp-cerber.pot (WP Cerber 3.0) #-#-#-#-#
440
+ #. Plugin Name of the plugin/theme
441
+ #: ../dashboard.php:700 ../dashboard.php:703 ../dashboard.php:732
442
+ msgid "WP Cerber"
443
+ msgstr "WP Cerber"
444
+
445
+ #: ../dashboard.php:707
446
+ msgid "reCAPTCHA"
447
+ msgstr "reCAPTCHA"
448
+
449
+ #: ../dashboard.php:708 ../cerber-tools.php:40
450
+ msgid "Tools"
451
+ msgstr "Інструменти"
452
+
453
+ #: ../dashboard.php:770
454
+ msgid "Comments"
455
+ msgstr "Коментарі"
456
+
457
+ #: ../dashboard.php:771
458
+ msgid "Last login"
459
+ msgstr "Останній вхід"
460
+
461
+ #: ../dashboard.php:772
462
+ msgid "Failed attempts in last 24 hours"
463
+ msgstr "Невдалі спроби за останні 24 години"
464
+
465
+ #: ../dashboard.php:773
466
+ msgid "Date of registration"
467
+ msgstr "Дата реєстрації"
468
+
469
+ #: ../dashboard.php:798 ../dashboard.php:851
470
+ msgid "Never"
471
+ msgstr "Ніколи"
472
+
473
+ #: ../dashboard.php:822
474
+ msgid "Cerber Quick View"
475
+ msgstr "Швидкий огляд Cerber"
476
+
477
+ #: ../dashboard.php:855
478
+ msgid "active"
479
+ msgstr "активний"
480
+
481
+ #: ../dashboard.php:855
482
+ msgid "deactivate"
483
+ msgstr "деактивувати"
484
+
485
+ #: ../dashboard.php:857
486
+ msgid "not active"
487
+ msgstr "неактивний"
488
+
489
+ #: ../dashboard.php:858
490
+ msgid "disabled"
491
+ msgstr "відключений"
492
+
493
+ #: ../dashboard.php:863
494
+ msgid "failed attempts"
495
+ msgstr "невдалих спроб"
496
+
497
+ #: ../dashboard.php:863 ../dashboard.php:864
498
+ msgid "in 24 hours"
499
+ msgstr "за 24 години"
500
+
501
+ #: ../dashboard.php:863 ../dashboard.php:864
502
+ msgid "view all"
503
+ msgstr "переглянути усі"
504
+
505
+ #: ../dashboard.php:864
506
+ msgid "lockouts"
507
+ msgstr "блокувань"
508
+
509
+ #: ../dashboard.php:866
510
+ msgid "Lockouts at the moment"
511
+ msgstr "Наразі заблоковано"
512
+
513
+ #: ../dashboard.php:867
514
+ msgid "Last lockout"
515
+ msgstr "Останнє блокування"
516
+
517
+ #: ../dashboard.php:868 ../dashboard.php:869 ../dashboard.php:1300
518
+ msgid "entry"
519
+ msgid_plural "entries"
520
+ msgstr[0] "запис"
521
+ msgstr[1] "записи"
522
+ msgstr[2] "записів"
523
+
524
+ #: ../dashboard.php:870 ../settings.php:77
525
+ msgid "Citadel mode"
526
+ msgstr "Режим Цитадель"
527
+
528
+ #: ../dashboard.php:878 ../settings.php:222
529
+ msgid "Lockouts"
530
+ msgstr "Блокування"
531
+
532
+ #: ../dashboard.php:879 ../dashboard.php:1321 ../wp-cerber.php:2278 ../settings.
533
+ #: php:227 ../cerber-tools.php:59 ../cerber-tools.php:68 ../cerber-tools.php:178
534
+ msgid "Access Lists"
535
+ msgstr "Списки доступу"
536
+
537
+ #: ../dashboard.php:1049
538
+ msgid "Confused about some settings?"
539
+ msgstr "Маєте сумнів щодо налаштувань?"
540
+
541
+ #: ../dashboard.php:1050
542
+ msgid "You can easily load default recommended settings using button below"
543
+ msgstr ""
544
+ "Ви можете легко завантажити рекомендовані налаштування за допомогою кнопки "
545
+ "нижче"
546
+
547
+ #: ../dashboard.php:1052
548
+ msgid "Load default settings"
549
+ msgstr "Завантажити типові налаштування"
550
+
551
+ #: ../dashboard.php:1054 ../dashboard.php:1450
552
+ msgid "Are you sure?"
553
+ msgstr "Ви впевнені?"
554
+
555
+ #: ../dashboard.php:1060
556
+ msgid "doesn't affect Custom login URL and Access Lists"
557
+ msgstr "не впливає на URL сторінки авторизації та списки доступу"
558
+
559
+ #: ../dashboard.php:1079
560
+ msgid "Donate"
561
+ msgstr "Підтримайте розробку"
562
+
563
+ #: ../dashboard.php:1133
564
+ msgid "Deactivate"
565
+ msgstr "Деактивувати"
566
+
567
+ #: ../dashboard.php:1134
568
+ msgid "View Activity"
569
+ msgstr "Переглянути активність"
570
+
571
+ #: ../dashboard.php:1190
572
+ msgid "New version is available"
573
+ msgstr "Доступна нова версія"
574
+
575
+ #: ../dashboard.php:1196
576
+ #, php-format
577
+ msgid "Update to version %s of WP Cerber"
578
+ msgstr "Оновити WP Cerber до версії %s"
579
+
580
+ #. #-#-#-#-# tmp-wp-cerber.pot (WP Cerber 3.0) #-#-#-#-#
581
+ #. Plugin URI of the plugin/theme
582
+ #. #-#-#-#-# tmp-wp-cerber.pot (WP Cerber 3.0) #-#-#-#-#
583
+ #. Author URI of the plugin/theme
584
+ msgid "http://wpcerber.com"
585
+ msgstr "http://wpcerber.com"
586
+
587
+ #: ../wp-cerber.php:190
588
+ msgid "You are not allowed to log in. Ask your administrator for assistance."
589
+ msgstr "Вам заборонено вхід. Спитайте вашого адміністратора про допомогу."
590
+
591
+ #: ../wp-cerber.php:196
592
+ #, php-format
593
+ msgid "You have reached the login attempts limit. Please try again in %d minutes."
594
+ msgstr "Ви досягли ліміту спроб входу. Будь ласка, спробуйте ще раз за %d хвилин."
595
+
596
+ #: ../wp-cerber.php:214
597
+ #, php-format
598
+ msgid "You have only one attempt remaining."
599
+ msgid_plural "You have %d attempts remaining."
600
+ msgstr[0] "У вас залишилася тільки одна спроба."
601
+ msgstr[1] "У вас залишилося %d спроби."
602
+ msgstr[2] "У вас залишилося %d спроб."
603
+
604
+ #: ../wp-cerber.php:496
605
+ msgid ""
606
+ "Human verification failed. Please click the square box in the reCAPTCHA "
607
+ "block below."
608
+ msgstr ""
609
+ "Візуальна веріфікація невдала. Будь ласка клікніть на квадратик блока "
610
+ "reCAPTCHA нижче."
611
+
612
+ #: ../wp-cerber.php:602 ../wp-cerber.php:734 ../wp-cerber.php:741 ../wp-cerber.
613
+ #: php:765 ../common.php:81 ../common.php:134 ../settings.php:479
614
+ msgid "ERROR:"
615
+ msgstr "ПОМИЛКА:"
616
+
617
+ #: ../wp-cerber.php:613
618
+ #, php-format
619
+ msgid ""
620
+ "<strong>ERROR</strong>: The password you entered for the username %s is "
621
+ "incorrect."
622
+ msgstr ""
623
+ "<strong>ПОМИЛКА</strong>: Пароль, який ви ввели для імені користувача %s є "
624
+ "некоректний."
625
+
626
+ #: ../wp-cerber.php:742
627
+ msgid "Username is not allowed. Please choose another one."
628
+ msgstr "Недозволене ім'я користувача. Будь ласка, оберіть інше."
629
+
630
+ #: ../wp-cerber.php:1870
631
+ msgid "WP Cerber notify"
632
+ msgstr "Сповіщення WP Cerber"
633
+
634
+ #: ../wp-cerber.php:1888
635
+ msgid "Citadel mode is activated"
636
+ msgstr "Режим Цитадель активовано"
637
+
638
+ #: ../wp-cerber.php:1890
639
+ #, php-format
640
+ msgid "Citadel mode is activated after %d failed login attempts in %d minutes."
641
+ msgstr "Режим Цитадель активовано після %d невдалих спроб входу протягом %d хвилин."
642
+
643
+ #: ../wp-cerber.php:1891
644
+ #, php-format
645
+ msgid "Last failed attempt was at %s from IP %s with user login: %s."
646
+ msgstr "Остання невдала спроба відбулася %s з IP адреси %s з логіном користувача: %s."
647
+
648
+ #: ../wp-cerber.php:1892 ../wp-cerber.php:2192
649
+ msgid "View activity in dashboard"
650
+ msgstr "Переглянути активність на панелі управління"
651
+
652
+ #: ../wp-cerber.php:1914
653
+ msgid "unspecified"
654
+ msgstr "невизначена"
655
+
656
+ #: ../wp-cerber.php:1917
657
+ msgid "Number of lockouts is increasing"
658
+ msgstr "Кількість блокувань збільшується"
659
+
660
+ #: ../wp-cerber.php:1919
661
+ msgid "Number of active lockouts"
662
+ msgstr "Кількість активних блокувань"
663
+
664
+ #: ../wp-cerber.php:1920
665
+ #, php-format
666
+ msgid "Last lockout was added: %s for IP %s"
667
+ msgstr "Останнє блокування було додане: %s для IP %s"
668
+
669
+ #: ../wp-cerber.php:1922
670
+ msgid "View activity for this IP"
671
+ msgstr "Переглянути активність для цього IP"
672
+
673
+ #: ../wp-cerber.php:1923
674
+ msgid "View lockouts in dashboard"
675
+ msgstr "Переглянути блокування на панелі управління"
676
+
677
+ #: ../wp-cerber.php:1926 ../wp-cerber.php:1928
678
+ msgid "A new version of WP Cerber is available to install"
679
+ msgstr "Нова версія WP Cerber доступна для установки"
680
+
681
+ #: ../wp-cerber.php:1927
682
+ msgid "Hi!"
683
+ msgstr "Вітаємо!"
684
+
685
+ #: ../wp-cerber.php:1929 ../wp-cerber.php:1940
686
+ msgid "Website"
687
+ msgstr "Вебсайт"
688
+
689
+ #: ../wp-cerber.php:1932 ../wp-cerber.php:1933
690
+ msgid "The WP Cerber security plugin has been deactivated"
691
+ msgstr "Плагін безпеки WP Cerber було деактивовано"
692
+
693
+ #: ../wp-cerber.php:1935
694
+ msgid "Not logged in"
695
+ msgstr "Неавторизований"
696
+
697
+ #: ../wp-cerber.php:1941
698
+ msgid "By user"
699
+ msgstr "Від користувача"
700
+
701
+ #: ../wp-cerber.php:1942
702
+ msgid "From IP address"
703
+ msgstr "З IP-адреси"
704
+
705
+ #: ../wp-cerber.php:1945
706
+ msgid "From country"
707
+ msgstr "З країни"
708
+
709
+ #: ../wp-cerber.php:1949
710
+ msgid "The WP Cerber security plugin is now active"
711
+ msgstr "Плагін безпеки WP Cerber є активний"
712
+
713
+ #: ../wp-cerber.php:1950 ../wp-cerber.php:2271
714
+ msgid "WP Cerber is now active and has started protecting your site"
715
+ msgstr "Відтепер WP Cerber є активний і захищає ваш сайт"
716
+
717
+ #: ../wp-cerber.php:1951
718
+ msgid "Change notification settings"
719
+ msgstr "Змінити налаштування сповіщень"
720
+
721
+ #: ../wp-cerber.php:1956
722
+ msgid "New Custom login URL"
723
+ msgstr "Новий URL для входу на сайт"
724
+
725
+ #: ../wp-cerber.php:1976
726
+ msgid "This message was sent by"
727
+ msgstr "Це повідомлення було надіслано від"
728
+
729
+ #: ../wp-cerber.php:2246
730
+ #, php-format
731
+ msgid "The WP Cerber requires PHP %s or higher. You are running"
732
+ msgstr "WP Cerber потребує PHP %s або вище. Ви використовуєте"
733
+
734
+ #: ../wp-cerber.php:2250
735
+ #, php-format
736
+ msgid "The WP Cerber requires WordPress %s or higher. You are running"
737
+ msgstr "WP Cerber потребує WordPress %s або вище. Ви використовуєте"
738
+
739
+ #: ../wp-cerber.php:2255
740
+ msgid "Can't activate WP Cerber due to a database error."
741
+ msgstr "Не вдалося активувати WP Cerber через помилку у базі даних."
742
+
743
+ #: ../wp-cerber.php:2272
744
+ msgid "Your IP address is added to the"
745
+ msgstr "Ваша IP-адреса додана до"
746
+
747
+ #: ../wp-cerber.php:2274
748
+ msgid "It's important to check security settings."
749
+ msgstr "Важливо перевірити налаштування безпеки."
750
+
751
+ #: ../wp-cerber.php:2277 ../settings.php:224
752
+ msgid "Main Settings"
753
+ msgstr "Основні налаштування"
754
+
755
+ #: ../wp-cerber.php:2279 ../settings.php:229
756
+ msgid "Hardening"
757
+ msgstr "Зміцнення безпеки"
758
+
759
+ #: ../wp-cerber.php:2280 ../settings.php:63 ../settings.php:81 ../settings.php:234
760
+ msgid "Notifications"
761
+ msgstr "Сповіщення"
762
+
763
+ #: ../wp-cerber.php:2281
764
+ msgid "Import settings"
765
+ msgstr "Імпорт налаштувань"
766
+
767
+ #: ../whois.php:211
768
+ msgid "Unknown"
769
+ msgstr "Невідомо"
770
+
771
+ #: ../common.php:253
772
+ msgid "User created"
773
+ msgstr "Користувача створено"
774
+
775
+ #: ../common.php:254
776
+ msgid "User registered"
777
+ msgstr "Користувача зареєстровано"
778
+
779
+ #: ../common.php:255
780
+ msgid "Logged in"
781
+ msgstr "Увійшов"
782
+
783
+ #: ../common.php:256
784
+ msgid "Logged out"
785
+ msgstr "Вийшов"
786
+
787
+ #: ../common.php:257
788
+ msgid "Login failed"
789
+ msgstr "Невдалий вхід"
790
+
791
+ #: ../common.php:260
792
+ msgid "IP blocked"
793
+ msgstr "IP заблоковано"
794
+
795
+ #: ../common.php:261
796
+ msgid "Subnet blocked"
797
+ msgstr "Підсітку заблоковано"
798
+
799
+ #: ../common.php:263
800
+ msgid "Citadel activated!"
801
+ msgstr "Режим Цитадель активовано!"
802
+
803
+ #: ../common.php:266
804
+ msgid "IP blacklisted"
805
+ msgstr "IP у чорному списку"
806
+
807
+ #: ../common.php:269
808
+ msgid "Password changed"
809
+ msgstr "Пароль змінено"
810
+
811
+ #: ../common.php:271
812
+ msgid "reCAPTCHA verification failed"
813
+ msgstr "Перевірка reCAPTCHA невдала"
814
+
815
+ #: ../common.php:272
816
+ msgid "reCAPTCHA settings are incorrect"
817
+ msgstr "Налаштування reCAPTCHA невірні"
818
+
819
+ #: ../common.php:275
820
+ msgid "Attempt to access prohibited URL"
821
+ msgstr "Спроба отримати доступ до забороненого URL"
822
+
823
+ #: ../common.php:276 ../common.php:288
824
+ msgid "Attempt to log in with non-existent username"
825
+ msgstr "Спроба увійти з неіснуючим ім'ям користувача"
826
+
827
+ #: ../common.php:277 ../common.php:289
828
+ msgid "Attempt to log in with prohibited username"
829
+ msgstr "Спроба увійти із забороненим ім'ям користувача"
830
+
831
+ #: ../common.php:286
832
+ msgid "Limit on login attempts is reached"
833
+ msgstr "Досягнуто ліміт для спроб входу"
834
+
835
+ #: ../common.php:287
836
+ msgid "Attempt to access"
837
+ msgstr "Спроба отримати доступ до"
838
+
839
+ #: ../common.php:351 ../settings.php:89
840
+ msgid "days"
841
+ msgstr "днів"
842
+
843
+ #: ../common.php:353 ../settings.php:61 ../settings.php:79
844
+ msgid "minutes"
845
+ msgstr "хвилин"
846
+
847
+ #: ../cerber-lab.php:419 ../settings.php:190
848
+ msgid "Know more"
849
+ msgstr "Дізнатися більше"
850
+
851
+ #: ../settings.php:59
852
+ msgid "Limit login attempts"
853
+ msgstr "Ліміт спроб входу"
854
+
855
+ #: ../settings.php:60
856
+ msgid "Attempts"
857
+ msgstr "Спроби"
858
+
859
+ #: ../settings.php:61
860
+ msgid "Lockout duration"
861
+ msgstr "Тривалість блокування"
862
+
863
+ #: ../settings.php:62
864
+ msgid "Aggressive lockout"
865
+ msgstr "Агресивне блокування"
866
+
867
+ #: ../settings.php:64
868
+ msgid "Site connection"
869
+ msgstr "Підключення сайту"
870
+
871
+ #: ../settings.php:64
872
+ msgid "My site is behind a reverse proxy"
873
+ msgstr "Мій сайт підключено через проксі сервер"
874
+
875
+ #: ../settings.php:66
876
+ msgid "Proactive security rules"
877
+ msgstr "Профілактичні правила безпеки"
878
+
879
+ #: ../settings.php:67
880
+ msgid "Block subnet"
881
+ msgstr "Блокувати підсітку"
882
+
883
+ #: ../settings.php:67
884
+ msgid "Always block entire subnet Class C of intruders IP"
885
+ msgstr "Завжди блокувати всю подсітку класу С від IP-порушника"
886
+
887
+ #: ../settings.php:68
888
+ msgid "Non-existent users"
889
+ msgstr "Неіснуючі користувачі"
890
+
891
+ #: ../settings.php:68
892
+ msgid "Immediately block IP when attempting to login with a non-existent username"
893
+ msgstr "Негайно блокувати IP-адресу при спробі входу з неіснуючим ім'ям користувача"
894
+
895
+ #: ../settings.php:69
896
+ msgid "Redirect dashboard requests"
897
+ msgstr "Перенаправлення до панелі управління"
898
+
899
+ #: ../settings.php:69
900
+ msgid ""
901
+ "Disable automatic redirecting to the login page when /wp-admin/ is requested "
902
+ "by an unauthorized request"
903
+ msgstr ""
904
+ "Вимкнути автоматичне перенаправлення до сторінки авторизації коли /wp-admin/ "
905
+ "отримує неавторизований запит"
906
+
907
+ #: ../settings.php:70
908
+ msgid "Request wp-login.php"
909
+ msgstr "Запит до wp-login.php"
910
+
911
+ #: ../settings.php:70
912
+ msgid "Immediately block IP after any request to wp-login.php"
913
+ msgstr "Негайно блокувати IP-адресу після будь-якого запиту до wp-login.php"
914
+
915
+ #: ../settings.php:73
916
+ msgid "Custom login page"
917
+ msgstr "Власна сторінка авторизації"
918
+
919
+ #: ../settings.php:74
920
+ msgid "Custom login URL"
921
+ msgstr "Власний URL сторінки авторизації"
922
+
923
+ #: ../settings.php:74
924
+ msgid "must not overlap with the existing pages or posts slug"
925
+ msgstr "не має співпадати з URL сторінок або постів, що вже існують"
926
+
927
+ #: ../settings.php:75
928
+ msgid "Disable wp-login.php"
929
+ msgstr "Відключити wp-login.php"
930
+
931
+ #: ../settings.php:75
932
+ msgid "Block direct access to wp-login.php and return HTTP 404 Not Found Error"
933
+ msgstr ""
934
+ "Заблокувати прямий доступ до wp-login.php та повернути HTTP помилку 404 "
935
+ "\"Сторінку не знайдено\""
936
+
937
+ #: ../settings.php:78
938
+ msgid "Threshold"
939
+ msgstr "Поріг"
940
+
941
+ #: ../settings.php:79
942
+ msgid "Duration"
943
+ msgstr "Тривалість"
944
+
945
+ #: ../settings.php:81
946
+ msgid "Send notification to admin email"
947
+ msgstr "Надіслати сповіщення на email адміністратора"
948
+
949
+ #: ../settings.php:81 ../settings.php:339
950
+ msgid "Click to send test"
951
+ msgstr "Клікніть, щоб надіслати тестовий email"
952
+
953
+ #: ../settings.php:89
954
+ msgid "Keep records for"
955
+ msgstr "Зберігати записи не більше"
956
+
957
+ #: ../settings.php:92
958
+ msgid "Use file"
959
+ msgstr "Використовувати файл"
960
+
961
+ #: ../settings.php:92
962
+ msgid "Write failed login attempts to the file"
963
+ msgstr "Записувати невдалі спроби увійти до файлу"
964
+
965
+ #: ../settings.php:95
966
+ msgid "Drill down IP"
967
+ msgstr "Деталізувати інформацію про IP"
968
+
969
+ #: ../settings.php:95
970
+ msgid "Retrieve extra WHOIS information for IP"
971
+ msgstr "Отримати додаткову інформацію WHOIS для IP"
972
+
973
+ #: ../settings.php:103
974
+ msgid "Hardening WordPress"
975
+ msgstr "Зміцнення безпеки WordPress"
976
+
977
+ #: ../settings.php:104
978
+ msgid "Stop user enumeration"
979
+ msgstr "Відключити доступ до користувача за його ID"
980
+
981
+ #: ../settings.php:104
982
+ msgid "Block access to the pages like /?author=n"
983
+ msgstr "Блокувати доступ до сторінок таких як /?author=n"
984
+
985
+ #: ../settings.php:105
986
+ msgid "Disable XML-RPC"
987
+ msgstr "Відключити XML-RPC"
988
+
989
+ #: ../settings.php:105
990
+ msgid "Block access to the XML-RPC server (including Pingbacks and Trackbacks)"
991
+ msgstr "Блокувати доступ до XML-RPC серверу (включаючі Pingbacks та Trackbacks)"
992
+
993
+ #: ../settings.php:106
994
+ msgid "Disable feeds"
995
+ msgstr "Відключити канали (feeds)"
996
+
997
+ #: ../settings.php:106
998
+ msgid "Block access to the RSS, Atom and RDF feeds"
999
+ msgstr "Блокувати доступ до RSS, Atom та RDF канали (feeds)"
1000
+
1001
+ #: ../settings.php:107
1002
+ msgid "Disable REST API"
1003
+ msgstr "Відключити REST API"
1004
+
1005
+ #: ../settings.php:107
1006
+ msgid "Block access to the WordPress REST API"
1007
+ msgstr "Блокувати доступ до WordPress REST API"
1008
+
1009
+ #: ../settings.php:115
1010
+ msgid "User related settings"
1011
+ msgstr "Налаштування, що стосуються користувача"
1012
+
1013
+ #: ../settings.php:116
1014
+ msgid "Prohibited usernames"
1015
+ msgstr "Заборонені імена користувачів"
1016
+
1017
+ #: ../settings.php:116
1018
+ msgid ""
1019
+ "Usernames from this list are not allowed to log in or register. Any IP "
1020
+ "address, have tried to use any of these usernames, will be immediately "
1021
+ "blocked. Use comma to separate logins."
1022
+ msgstr ""
1023
+ "Імена користувачів з цього списку не дозволені для входу або реєстрації. "
1024
+ "Будь-яка IP-адреса, яка спробує використати одне з цих імен, буде негайно "
1025
+ "заблокована. Використовуйте кому, щоб розділити імена."
1026
+
1027
+ #: ../settings.php:117
1028
+ msgid "User session expire"
1029
+ msgstr "Сесія користувача збігає за"
1030
+
1031
+ #: ../settings.php:117
1032
+ msgid "in minutes (leave empty to use default WP value)"
1033
+ msgstr "у хвилинах (якщо порожнє - стандартне значення WP)"
1034
+
1035
+ #: ../settings.php:124
1036
+ msgid "Site key"
1037
+ msgstr "Ключ сайта (Site key)"
1038
+
1039
+ #: ../settings.php:125
1040
+ msgid "Secret key"
1041
+ msgstr "Секретний ключ (Secret key)"
1042
+
1043
+ #: ../settings.php:130
1044
+ msgid "Lost password form"
1045
+ msgstr "Форма відновлення втраченого паролю"
1046
+
1047
+ #: ../settings.php:133
1048
+ msgid "Login form"
1049
+ msgstr "Форма входу"
1050
+
1051
+ #: ../settings.php:142
1052
+ msgid "Email Address"
1053
+ msgstr "Email адреса"
1054
+
1055
+ #: ../settings.php:142
1056
+ #, php-format
1057
+ msgid "if empty, the admin email %s will be used"
1058
+ msgstr "якщо порожнє, email адміністратора %s буде використано"
1059
+
1060
+ #: ../settings.php:143
1061
+ msgid "Notification limit"
1062
+ msgstr "Ліміт сповіщень"
1063
+
1064
+ #: ../settings.php:143
1065
+ msgid "notification letters allowed per hour (0 means unlimited)"
1066
+ msgstr "листів зі сповіщеннями дозволено протягом години (0 означає нелімітовано)"
1067
+
1068
+ #: ../settings.php:166
1069
+ msgid "Make your protection smarter!"
1070
+ msgstr "Зробіть ваш захист розумнішим!"
1071
+
1072
+ #: ../settings.php:170
1073
+ msgid ""
1074
+ "Please enable Permalinks to use this feature. Set Permalink Settings to "
1075
+ "something other than Default."
1076
+ msgstr "Будь ласка, активуйте \"Постійні посилання\", щоб використовувати цю опцію."
1077
+
1078
+ #: ../settings.php:173
1079
+ msgid ""
1080
+ "Be careful when enabling this options. If you forget the custom login URL "
1081
+ "you will not be able to login."
1082
+ msgstr ""
1083
+ "Будьте уважними при установці цих параметрів. Якщо ви забудете URL сторінки "
1084
+ "авторизації, ви не зможете увійти."
1085
+
1086
+ #: ../settings.php:177
1087
+ msgid ""
1088
+ "In Citadel mode nobody is able to login. Active user's sessions will not be "
1089
+ "affected."
1090
+ msgstr ""
1091
+ "У режимі Цитадeль ніхто не може увійти на сайт. Активні сесії користувачів "
1092
+ "лишаться недоторканими."
1093
+
1094
+ #: ../settings.php:184
1095
+ msgid "These settings do not affect hosts from the "
1096
+ msgstr "Ці налаштування не впливають на хости з"
1097
+
1098
+ #: ../settings.php:189
1099
+ msgid ""
1100
+ "Before you can start using reCAPTCHA, you have to obtain Site key and Secret "
1101
+ "key on the Google website"
1102
+ msgstr ""
1103
+ "Перед тим, як використовувати reCAPTCHA, ви маєте отримати ключ сайта (Site "
1104
+ "key) та секретний ключ (Secret key) на сайті Гугла"
1105
+
1106
+ #: ../settings.php:231
1107
+ msgid "Users"
1108
+ msgstr "Користувачі"
1109
+
1110
+ #: ../settings.php:238
1111
+ msgid "Help"
1112
+ msgstr "Допомога"
1113
+
1114
+ #: ../settings.php:325
1115
+ #, php-format
1116
+ msgid "%s allowed retries in %s minutes"
1117
+ msgstr "%s дозволених спроб за %s хвилин"
1118
+
1119
+ #: ../settings.php:330
1120
+ #, php-format
1121
+ msgid "Increase lockout duration to %s hours after %s lockouts in the last %s hours"
1122
+ msgstr ""
1123
+ "Збільшити тривалість блокування до %s годин після %s блокувань протягом "
1124
+ "останніх %s годин"
1125
+
1126
+ #: ../settings.php:337
1127
+ msgid "Notify admin if the number of active lockouts above"
1128
+ msgstr "Сповіщати адміністратора, якщо кількість активних блокувань перевищує"
1129
+
1130
+ #: ../settings.php:342
1131
+ #, php-format
1132
+ msgid "Enable after %s failed login attempts in last %s minutes"
1133
+ msgstr "Активувати після %s невдалих спроб за останні %s хвилин"
1134
+
1135
+ #: ../settings.php:426
1136
+ msgid "Attention! You have changed the login URL! The new login URL is"
1137
+ msgstr "Увага! Ви змінили URL входу! Новий URL входу"
1138
+
1139
+ #: ../settings.php:501
1140
+ msgid "<strong>ERROR</strong>: please enter a valid email address."
1141
+ msgstr ""
1142
+ "<strong>ПОМИЛКА</strong>: будь ласка, введіть дійсну адресу електронної "
1143
+ "пошти."
1144
+
1145
+ #: ../cerber-tools.php:55
1146
+ msgid "Export settings to the file"
1147
+ msgstr "Експортувати налаштування у файл"
1148
+
1149
+ #: ../cerber-tools.php:56
1150
+ msgid ""
1151
+ "When you click the button below you will get a configuration file, which you "
1152
+ "can upload on another site."
1153
+ msgstr ""
1154
+ "Коли ви натиснете кнопку нижче, ви отримаєте конфігураційний файл, який "
1155
+ "зможете завантажити на інший сайт."
1156
+
1157
+ #: ../cerber-tools.php:57
1158
+ msgid "What do you want to export?"
1159
+ msgstr "Що ви хочете експортувати?"
1160
+
1161
+ #: ../cerber-tools.php:58 ../cerber-tools.php:67
1162
+ msgid "Settings"
1163
+ msgstr "Налаштування"
1164
+
1165
+ #: ../cerber-tools.php:60
1166
+ msgid "Download file"
1167
+ msgstr "Завантажити файл"
1168
+
1169
+ #: ../cerber-tools.php:62
1170
+ msgid "Import settings from the file"
1171
+ msgstr "Імпортувати налаштування з файлу"
1172
+
1173
+ #: ../cerber-tools.php:63
1174
+ msgid ""
1175
+ "When you click the button below, file will be uploaded and all existing "
1176
+ "settings will be overridden."
1177
+ msgstr ""
1178
+ "Коли ви натиснете кнопку нижче, файл буде завантажено, і всі існуючі "
1179
+ "налаштування будуть перезаписані."
1180
+
1181
+ #: ../cerber-tools.php:64
1182
+ msgid "Select file to import."
1183
+ msgstr "Обрати файл для імпорту."
1184
+
1185
+ #: ../cerber-tools.php:64
1186
+ #, php-format
1187
+ msgid "Maximum upload file size: %s."
1188
+ msgstr "Максимальний розмір файла: %s."
1189
+
1190
+ #: ../cerber-tools.php:67
1191
+ msgid "What do you want to import?"
1192
+ msgstr "Що ви хочете імпортувати?"
1193
+
1194
+ #: ../cerber-tools.php:69
1195
+ msgid "Upload file"
1196
+ msgstr "Завантажити файл"
1197
+
1198
+ #: ../cerber-tools.php:148
1199
+ msgid "No file was uploaded or file is corrupted"
1200
+ msgstr "Файл не було завантажено або файл пошкоджено"
1201
+
1202
+ #: ../cerber-tools.php:178
1203
+ msgid "Error while updating"
1204
+ msgstr "Помилка при оновленні"
1205
+
1206
+ #: ../cerber-tools.php:181
1207
+ msgid "Settings has imported successfully from"
1208
+ msgstr "Налаштування були успішно імпортовані з"
1209
+
1210
+ #: ../cerber-tools.php:185
1211
+ msgid "Error while parsing file"
1212
+ msgstr "Помилка під час парсингу файла"
1213
+
1214
+ #: ../cerber-tools.php:195
1215
+ msgid "reCAPTCHA settings"
1216
+ msgstr "Налаштування reCAPTCHA"
languages/wp-cerber.pot ADDED
@@ -0,0 +1,1286 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Loco Gettext template
2
+ #, fuzzy
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: WP Cerber\n"
6
+ "Report-Msgid-Bugs-To: \n"
7
+ "POT-Creation-Date: Tue Sep 08 2015 21:38:11 GMT+0300\n"
8
+ "POT-Revision-Date: Wed Aug 16 2017 17:10:17 GMT+0300\n"
9
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
10
+ "Last-Translator: \n"
11
+ "Language-Team: \n"
12
+ "Language: \n"
13
+ "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION\n"
14
+ "MIME-Version: 1.0\n"
15
+ "Content-Type: text/plain; charset=UTF-8\n"
16
+ "Content-Transfer-Encoding: 8bit\n"
17
+ "X-Poedit-SourceCharset: UTF-8\n"
18
+ "X-Poedit-Basepath: .\n"
19
+ "X-Poedit-SearchPath-0: ..\n"
20
+ "X-Poedit-KeywordsList: _:1;gettext:1;dgettext:2;ngettext:1,2;dngettext:2,3;"
21
+ "__:1;_e:1;_c:1;_n:1,2;_n_noop:1,2;_nc:1,2;__ngettext:1,2;__ngettext_noop:1,2;"
22
+ "_x:1,2c;_ex:1,2c;_nx:1,2,4c;_nx_noop:1,2,3c;_n_js:1,2;_nx_js:1,2,3c;"
23
+ "esc_attr__:1;esc_html__:1;esc_attr_e:1;esc_html_e:1;esc_attr_x:1,2c;"
24
+ "esc_html_x:1,2c;comments_number_link:2,3;t:1;st:1;trans:1;transChoice:1,2\n"
25
+ "X-Generator: Loco - https://localise.biz/"
26
+
27
+ #: ../dashboard.php:74 ../dashboard.php:123
28
+ msgid "Remove"
29
+ msgstr ""
30
+
31
+ #: ../dashboard.php:77 ../dashboard.php:502 ../wp-cerber.php:2696
32
+ msgid "IP"
33
+ msgstr ""
34
+
35
+ #: ../dashboard.php:77 ../dashboard.php:502
36
+ msgid "Hostname"
37
+ msgstr ""
38
+
39
+ #: ../dashboard.php:77
40
+ msgid "Expires"
41
+ msgstr ""
42
+
43
+ #: ../dashboard.php:77 ../wp-cerber.php:2402
44
+ msgid "Reason"
45
+ msgstr ""
46
+
47
+ #: ../dashboard.php:77
48
+ msgid "Action"
49
+ msgstr ""
50
+
51
+ #: ../dashboard.php:83
52
+ #, php-format
53
+ msgid "Showing last %d records from %d"
54
+ msgstr ""
55
+
56
+ #: ../dashboard.php:85
57
+ msgid "Hint"
58
+ msgstr ""
59
+
60
+ #: ../dashboard.php:85
61
+ msgid "To view activity, click on the IP"
62
+ msgstr ""
63
+
64
+ #: ../dashboard.php:89
65
+ msgid "No lockouts at the moment. The sky is clear."
66
+ msgstr ""
67
+
68
+ #: ../dashboard.php:102 ../dashboard.php:483 ../dashboard.php:663 ../dashboard.
69
+ #: php:902 ../wp-cerber.php:2822 ../settings.php:61 ../settings.php:192
70
+ msgid "White IP Access List"
71
+ msgstr ""
72
+
73
+ #: ../dashboard.php:102
74
+ msgid "These IPs will never be locked out"
75
+ msgstr ""
76
+
77
+ #: ../dashboard.php:104 ../dashboard.php:484 ../dashboard.php:665 ../dashboard.
78
+ #: php:903
79
+ msgid "Black IP Access List"
80
+ msgstr ""
81
+
82
+ #: ../dashboard.php:104
83
+ msgid "Nobody can log in or register from these IPs"
84
+ msgstr ""
85
+
86
+ #: ../dashboard.php:106
87
+ msgid "Your IP"
88
+ msgstr ""
89
+
90
+ #: ../dashboard.php:123 ../dashboard.php:695
91
+ msgid "Check for activity"
92
+ msgstr ""
93
+
94
+ #: ../dashboard.php:126
95
+ msgid "List is empty"
96
+ msgstr ""
97
+
98
+ #: ../dashboard.php:130
99
+ msgid "Add IP to the list"
100
+ msgstr ""
101
+
102
+ #: ../dashboard.php:150 ../dashboard.php:158
103
+ msgid "Incorrect IP address or IP range"
104
+ msgstr ""
105
+
106
+ #: ../dashboard.php:153
107
+ #, php-format
108
+ msgid "Address %s was added to White IP Access List"
109
+ msgstr ""
110
+
111
+ #: ../dashboard.php:162
112
+ msgid "You can't add your IP address"
113
+ msgstr ""
114
+
115
+ #: ../dashboard.php:166
116
+ #, php-format
117
+ msgid "Address %s was added to Black IP Access List"
118
+ msgstr ""
119
+
120
+ #: ../dashboard.php:237
121
+ msgid "unknown"
122
+ msgstr ""
123
+
124
+ #: ../dashboard.php:259
125
+ msgid "Message has been sent to "
126
+ msgstr ""
127
+
128
+ #: ../dashboard.php:262
129
+ msgid "Unable to send notification email"
130
+ msgstr ""
131
+
132
+ #: ../dashboard.php:270
133
+ #, php-format
134
+ msgid "Lockout for %s was removed"
135
+ msgstr ""
136
+
137
+ #: ../dashboard.php:287 ../dashboard.php:1220
138
+ msgid "Settings saved"
139
+ msgstr ""
140
+
141
+ #: ../dashboard.php:355
142
+ msgid "IP address"
143
+ msgstr ""
144
+
145
+ #: ../dashboard.php:355 ../dashboard.php:502
146
+ msgid "Date"
147
+ msgstr ""
148
+
149
+ #: ../dashboard.php:355 ../dashboard.php:502
150
+ msgid "Event"
151
+ msgstr ""
152
+
153
+ #: ../dashboard.php:355 ../dashboard.php:502
154
+ msgid "Local User"
155
+ msgstr ""
156
+
157
+ #: ../dashboard.php:355
158
+ msgid "User login"
159
+ msgstr ""
160
+
161
+ #: ../dashboard.php:355
162
+ msgid "User ID"
163
+ msgstr ""
164
+
165
+ #: ../dashboard.php:355 ../dashboard.php:502 ../wp-cerber.php:2704
166
+ msgid "Username used"
167
+ msgstr ""
168
+
169
+ #: ../dashboard.php:488 ../dashboard.php:668 ../common.php:347
170
+ msgid "Locked out"
171
+ msgstr ""
172
+
173
+ #: ../dashboard.php:511
174
+ msgid "Export"
175
+ msgstr ""
176
+
177
+ #: ../dashboard.php:515
178
+ msgid "No activity has been logged."
179
+ msgstr ""
180
+
181
+ #: ../dashboard.php:521
182
+ msgid "All activities"
183
+ msgstr ""
184
+
185
+ #: ../dashboard.php:530
186
+ msgid "Search for IP or username"
187
+ msgstr ""
188
+
189
+ #: ../dashboard.php:530
190
+ msgid "Filter"
191
+ msgstr ""
192
+
193
+ #: ../dashboard.php:691
194
+ msgid "Abuse email:"
195
+ msgstr ""
196
+
197
+ #: ../dashboard.php:695
198
+ msgid "Network:"
199
+ msgstr ""
200
+
201
+ #: ../dashboard.php:709
202
+ msgid "Add network to the Black List"
203
+ msgstr ""
204
+
205
+ #: ../dashboard.php:713
206
+ msgid "Add IP to the Black List"
207
+ msgstr ""
208
+
209
+ #: ../dashboard.php:744 ../settings.php:215
210
+ msgid "WP Cerber Security"
211
+ msgstr ""
212
+
213
+ #. Name of the plugin
214
+ #: ../dashboard.php:744 ../dashboard.php:759
215
+ msgid "WP Cerber"
216
+ msgstr ""
217
+
218
+ #: ../dashboard.php:746
219
+ msgid "Cerber Dashboard"
220
+ msgstr ""
221
+
222
+ #: ../dashboard.php:746 ../dashboard.php:910 ../dashboard.php:1412 ../settings.
223
+ #: php:220
224
+ msgid "Dashboard"
225
+ msgstr ""
226
+
227
+ #: ../dashboard.php:748
228
+ msgid "Cerber antispam settings"
229
+ msgstr ""
230
+
231
+ #: ../dashboard.php:748 ../settings.php:143
232
+ msgid "Antispam"
233
+ msgstr ""
234
+
235
+ #: ../dashboard.php:749
236
+ msgid "Cerber tools"
237
+ msgstr ""
238
+
239
+ #: ../dashboard.php:749 ../cerber-tools.php:43
240
+ msgid "Tools"
241
+ msgstr ""
242
+
243
+ #: ../dashboard.php:802
244
+ msgid "Comments"
245
+ msgstr ""
246
+
247
+ #: ../dashboard.php:803
248
+ msgid "Last login"
249
+ msgstr ""
250
+
251
+ #: ../dashboard.php:804
252
+ msgid "Failed attempts in last 24 hours"
253
+ msgstr ""
254
+
255
+ #: ../dashboard.php:805
256
+ msgid "Date of registration"
257
+ msgstr ""
258
+
259
+ #: ../dashboard.php:830 ../dashboard.php:885
260
+ msgid "Never"
261
+ msgstr ""
262
+
263
+ #: ../dashboard.php:854
264
+ msgid "Cerber Quick View"
265
+ msgstr ""
266
+
267
+ #: ../dashboard.php:889
268
+ msgid "active"
269
+ msgstr ""
270
+
271
+ #: ../dashboard.php:889
272
+ msgid "deactivate"
273
+ msgstr ""
274
+
275
+ #: ../dashboard.php:891
276
+ msgid "not active"
277
+ msgstr ""
278
+
279
+ #: ../dashboard.php:892
280
+ msgid "disabled"
281
+ msgstr ""
282
+
283
+ #: ../dashboard.php:897
284
+ msgid "failed attempts"
285
+ msgstr ""
286
+
287
+ #: ../dashboard.php:897 ../dashboard.php:898
288
+ msgid "in 24 hours"
289
+ msgstr ""
290
+
291
+ #: ../dashboard.php:897 ../dashboard.php:898
292
+ msgid "view all"
293
+ msgstr ""
294
+
295
+ #: ../dashboard.php:898
296
+ msgid "lockouts"
297
+ msgstr ""
298
+
299
+ #: ../dashboard.php:900
300
+ msgid "Lockouts at the moment"
301
+ msgstr ""
302
+
303
+ #: ../dashboard.php:901
304
+ msgid "Last lockout"
305
+ msgstr ""
306
+
307
+ #: ../dashboard.php:902 ../dashboard.php:903 ../dashboard.php:1392
308
+ msgid "entry"
309
+ msgid_plural "entries"
310
+ msgstr[0] ""
311
+ msgstr[1] ""
312
+
313
+ #: ../dashboard.php:904 ../settings.php:76
314
+ msgid "Citadel mode"
315
+ msgstr ""
316
+
317
+ #: ../dashboard.php:906 ../settings.php:157
318
+ msgid "Push notifications"
319
+ msgstr ""
320
+
321
+ #: ../dashboard.php:911 ../dashboard.php:1082 ../wp-cerber.php:2695 ../settings.
322
+ #: php:82 ../settings.php:222
323
+ msgid "Activity"
324
+ msgstr ""
325
+
326
+ #: ../dashboard.php:912 ../settings.php:226
327
+ msgid "Lockouts"
328
+ msgstr ""
329
+
330
+ #: ../dashboard.php:913 ../dashboard.php:1413 ../wp-cerber.php:2828 ../settings.
331
+ #: php:231 ../cerber-tools.php:87 ../cerber-tools.php:96 ../cerber-tools.php:162
332
+ msgid "Access Lists"
333
+ msgstr ""
334
+
335
+ #: ../dashboard.php:1048
336
+ msgid "Malicious activities mitigated"
337
+ msgstr ""
338
+
339
+ #: ../dashboard.php:1049
340
+ msgid "Spam comments denied"
341
+ msgstr ""
342
+
343
+ #: ../dashboard.php:1050
344
+ msgid "Malicious IP addresses detected"
345
+ msgstr ""
346
+
347
+ #: ../dashboard.php:1051
348
+ msgid "Lockouts occurred"
349
+ msgstr ""
350
+
351
+ #: ../dashboard.php:1052
352
+ msgid "Locked out IP now"
353
+ msgstr ""
354
+
355
+ #: ../dashboard.php:1068 ../dashboard.php:1097
356
+ msgid "View all"
357
+ msgstr ""
358
+
359
+ #: ../dashboard.php:1076 ../common.php:334
360
+ msgid "User registered"
361
+ msgstr ""
362
+
363
+ #: ../dashboard.php:1077
364
+ msgid "All suspicious activity"
365
+ msgstr ""
366
+
367
+ #: ../dashboard.php:1098
368
+ msgid "Recently locked out IP addresses"
369
+ msgstr ""
370
+
371
+ #: ../dashboard.php:1120
372
+ msgid "Confused about some settings?"
373
+ msgstr ""
374
+
375
+ #: ../dashboard.php:1121
376
+ msgid "You can easily load default recommended settings using button below"
377
+ msgstr ""
378
+
379
+ #: ../dashboard.php:1123
380
+ msgid "Load default settings"
381
+ msgstr ""
382
+
383
+ #: ../dashboard.php:1125
384
+ msgid "Are you sure?"
385
+ msgstr ""
386
+
387
+ #: ../dashboard.php:1131
388
+ msgid "doesn't affect Custom login URL and Access Lists"
389
+ msgstr ""
390
+
391
+ #: ../dashboard.php:1150
392
+ msgid "Donate"
393
+ msgstr ""
394
+
395
+ #: ../dashboard.php:1203
396
+ msgid "Attention! Citadel mode is now active. Nobody is able to log in."
397
+ msgstr ""
398
+
399
+ #: ../dashboard.php:1204
400
+ msgid "Deactivate"
401
+ msgstr ""
402
+
403
+ #: ../dashboard.php:1205
404
+ msgid "View Activity"
405
+ msgstr ""
406
+
407
+ #: ../dashboard.php:1280
408
+ msgid "New version is available"
409
+ msgstr ""
410
+
411
+ #: ../dashboard.php:1286
412
+ #, php-format
413
+ msgid "Update to version %s of WP Cerber"
414
+ msgstr ""
415
+
416
+ #: ../dashboard.php:1325
417
+ msgid "Subscribe"
418
+ msgstr ""
419
+
420
+ #: ../dashboard.php:1326
421
+ msgid "Unsubscribe"
422
+ msgstr ""
423
+
424
+ #: ../dashboard.php:1354
425
+ msgid "You've subscribed"
426
+ msgstr ""
427
+
428
+ #: ../dashboard.php:1357
429
+ msgid "You've unsubscribed"
430
+ msgstr ""
431
+
432
+ #. URI of the plugin
433
+ msgid "http://wpcerber.com"
434
+ msgstr ""
435
+
436
+ #. Description of the plugin
437
+ msgid ""
438
+ "Protects site from brute force attacks, bots and hackers. Antispam "
439
+ "protection with reCAPTCHA. Comprehensive control of user activity. Restrict "
440
+ "login by IP access lists. Limit login attempts. Know more: <a href=\"http:"
441
+ "//wpcerber.com\">wpcerber.com</a>."
442
+ msgstr ""
443
+
444
+ #. Author of the plugin
445
+ msgid "Gregory"
446
+ msgstr ""
447
+
448
+ #: ../wp-cerber.php:215
449
+ msgid "You are not allowed to log in. Ask your administrator for assistance."
450
+ msgstr ""
451
+
452
+ #: ../wp-cerber.php:221
453
+ #, php-format
454
+ msgid "You have reached the login attempts limit. Please try again in %d minutes."
455
+ msgstr ""
456
+
457
+ #: ../wp-cerber.php:240
458
+ #, php-format
459
+ msgid "You have only one attempt remaining."
460
+ msgid_plural "You have %d attempts remaining."
461
+ msgstr[0] ""
462
+ msgstr[1] ""
463
+
464
+ #: ../wp-cerber.php:560 ../wp-cerber.php:572 ../wp-cerber.php:579 ../wp-cerber.
465
+ #: php:717 ../wp-cerber.php:922 ../wp-cerber.php:927 ../wp-cerber.php:932 ../wp-
466
+ #: cerber.php:938 ../wp-cerber.php:968 ../wp-cerber.php:1062 ../common.php:128 ..
467
+ #: /common.php:181 ../common.php:185 ../settings.php:513
468
+ msgid "ERROR:"
469
+ msgstr ""
470
+
471
+ #: ../wp-cerber.php:589
472
+ msgid ""
473
+ "Human verification failed. Please click the square box in the reCAPTCHA "
474
+ "block below."
475
+ msgstr ""
476
+
477
+ #: ../wp-cerber.php:728
478
+ #, php-format
479
+ msgid ""
480
+ "<strong>ERROR</strong>: The password you entered for the username %s is "
481
+ "incorrect."
482
+ msgstr ""
483
+
484
+ #: ../wp-cerber.php:923 ../wp-cerber.php:939
485
+ msgid "You are not allowed to register."
486
+ msgstr ""
487
+
488
+ #: ../wp-cerber.php:933
489
+ msgid "Username is not allowed. Please choose another one."
490
+ msgstr ""
491
+
492
+ #: ../wp-cerber.php:1062
493
+ msgid "Sorry, human verification failed."
494
+ msgstr ""
495
+
496
+ #: ../wp-cerber.php:2348
497
+ msgid "WP Cerber notify"
498
+ msgstr ""
499
+
500
+ #: ../wp-cerber.php:2366
501
+ msgid "Citadel mode is activated"
502
+ msgstr ""
503
+
504
+ #: ../wp-cerber.php:2368
505
+ #, php-format
506
+ msgid "Citadel mode is activated after %d failed login attempts in %d minutes."
507
+ msgstr ""
508
+
509
+ #: ../wp-cerber.php:2369
510
+ #, php-format
511
+ msgid "Last failed attempt was at %s from IP %s with user login: %s."
512
+ msgstr ""
513
+
514
+ #: ../wp-cerber.php:2370 ../wp-cerber.php:2720
515
+ msgid "View activity in dashboard"
516
+ msgstr ""
517
+
518
+ #: ../wp-cerber.php:2395
519
+ msgid "unspecified"
520
+ msgstr ""
521
+
522
+ #: ../wp-cerber.php:2398
523
+ msgid "Number of lockouts is increasing"
524
+ msgstr ""
525
+
526
+ #: ../wp-cerber.php:2400
527
+ msgid "Number of active lockouts"
528
+ msgstr ""
529
+
530
+ #: ../wp-cerber.php:2401
531
+ #, php-format
532
+ msgid "Last lockout was added: %s for IP %s"
533
+ msgstr ""
534
+
535
+ #: ../wp-cerber.php:2403
536
+ msgid "View activity for this IP"
537
+ msgstr ""
538
+
539
+ #: ../wp-cerber.php:2404
540
+ msgid "View lockouts in dashboard"
541
+ msgstr ""
542
+
543
+ #: ../wp-cerber.php:2407 ../wp-cerber.php:2409
544
+ msgid "A new version of WP Cerber is available to install"
545
+ msgstr ""
546
+
547
+ #: ../wp-cerber.php:2408
548
+ msgid "Hi!"
549
+ msgstr ""
550
+
551
+ #: ../wp-cerber.php:2410 ../wp-cerber.php:2421
552
+ msgid "Website"
553
+ msgstr ""
554
+
555
+ #: ../wp-cerber.php:2413 ../wp-cerber.php:2414
556
+ msgid "The WP Cerber security plugin has been deactivated"
557
+ msgstr ""
558
+
559
+ #: ../wp-cerber.php:2416
560
+ msgid "Not logged in"
561
+ msgstr ""
562
+
563
+ #: ../wp-cerber.php:2422
564
+ msgid "By user"
565
+ msgstr ""
566
+
567
+ #: ../wp-cerber.php:2423
568
+ msgid "From IP address"
569
+ msgstr ""
570
+
571
+ #: ../wp-cerber.php:2426
572
+ msgid "From country"
573
+ msgstr ""
574
+
575
+ #: ../wp-cerber.php:2430
576
+ msgid "The WP Cerber security plugin is now active"
577
+ msgstr ""
578
+
579
+ #: ../wp-cerber.php:2431 ../wp-cerber.php:2821
580
+ msgid "WP Cerber is now active and has started protecting your site"
581
+ msgstr ""
582
+
583
+ #: ../wp-cerber.php:2432
584
+ msgid "Change notification settings"
585
+ msgstr ""
586
+
587
+ #: ../wp-cerber.php:2437
588
+ msgid "New Custom login URL"
589
+ msgstr ""
590
+
591
+ #: ../wp-cerber.php:2441 ../wp-cerber.php:2442
592
+ msgid "A new activity has been recorded"
593
+ msgstr ""
594
+
595
+ #: ../wp-cerber.php:2457
596
+ msgid "This message was sent by"
597
+ msgstr ""
598
+
599
+ #: ../wp-cerber.php:2700
600
+ msgid "User"
601
+ msgstr ""
602
+
603
+ #: ../wp-cerber.php:2708
604
+ msgid "Search string"
605
+ msgstr ""
606
+
607
+ #: ../wp-cerber.php:2721
608
+ msgid "To unsubscribe click here"
609
+ msgstr ""
610
+
611
+ #: ../wp-cerber.php:2796
612
+ #, php-format
613
+ msgid "The WP Cerber requires PHP %s or higher. You are running"
614
+ msgstr ""
615
+
616
+ #: ../wp-cerber.php:2800
617
+ #, php-format
618
+ msgid "The WP Cerber requires WordPress %s or higher. You are running"
619
+ msgstr ""
620
+
621
+ #: ../wp-cerber.php:2805
622
+ msgid "Can't activate WP Cerber due to a database error."
623
+ msgstr ""
624
+
625
+ #: ../wp-cerber.php:2822
626
+ msgid "Your IP address is added to the"
627
+ msgstr ""
628
+
629
+ #: ../wp-cerber.php:2824
630
+ msgid "It's important to check security settings."
631
+ msgstr ""
632
+
633
+ #: ../wp-cerber.php:2827 ../settings.php:228
634
+ msgid "Main Settings"
635
+ msgstr ""
636
+
637
+ #: ../wp-cerber.php:2829 ../settings.php:233
638
+ msgid "Hardening"
639
+ msgstr ""
640
+
641
+ #: ../wp-cerber.php:2830 ../settings.php:62 ../settings.php:80 ../settings.php:238
642
+ msgid "Notifications"
643
+ msgstr ""
644
+
645
+ #: ../wp-cerber.php:2831
646
+ msgid "Import settings"
647
+ msgstr ""
648
+
649
+ #: ../whois.php:210 ../common.php:374
650
+ msgid "Unknown"
651
+ msgstr ""
652
+
653
+ #: ../common.php:333
654
+ msgid "User created"
655
+ msgstr ""
656
+
657
+ #: ../common.php:335
658
+ msgid "Logged in"
659
+ msgstr ""
660
+
661
+ #: ../common.php:336
662
+ msgid "Logged out"
663
+ msgstr ""
664
+
665
+ #: ../common.php:337
666
+ msgid "Login failed"
667
+ msgstr ""
668
+
669
+ #: ../common.php:340
670
+ msgid "IP blocked"
671
+ msgstr ""
672
+
673
+ #: ../common.php:341
674
+ msgid "Subnet blocked"
675
+ msgstr ""
676
+
677
+ #: ../common.php:343
678
+ msgid "Citadel activated!"
679
+ msgstr ""
680
+
681
+ #: ../common.php:344
682
+ msgid "Spam comment denied"
683
+ msgstr ""
684
+
685
+ #: ../common.php:348
686
+ msgid "IP blacklisted"
687
+ msgstr ""
688
+
689
+ #: ../common.php:350
690
+ msgid "by Cerber Lab"
691
+ msgstr ""
692
+
693
+ #: ../common.php:354
694
+ msgid "Password changed"
695
+ msgstr ""
696
+
697
+ #: ../common.php:355
698
+ msgid "Password reset requested"
699
+ msgstr ""
700
+
701
+ #: ../common.php:357
702
+ msgid "reCAPTCHA verification failed"
703
+ msgstr ""
704
+
705
+ #: ../common.php:358
706
+ msgid "reCAPTCHA settings are incorrect"
707
+ msgstr ""
708
+
709
+ #: ../common.php:359
710
+ msgid "Request to the Google reCAPTCHA service failed"
711
+ msgstr ""
712
+
713
+ #: ../common.php:361
714
+ msgid "Attempt to access prohibited URL"
715
+ msgstr ""
716
+
717
+ #: ../common.php:362 ../common.php:377
718
+ msgid "Attempt to log in with non-existent username"
719
+ msgstr ""
720
+
721
+ #: ../common.php:363 ../common.php:378
722
+ msgid "Attempt to log in with prohibited username"
723
+ msgstr ""
724
+
725
+ #: ../common.php:365
726
+ msgid "Attempt to log in denied"
727
+ msgstr ""
728
+
729
+ #: ../common.php:366
730
+ msgid "Attempt to register denied"
731
+ msgstr ""
732
+
733
+ #: ../common.php:375
734
+ msgid "Limit on login attempts is reached"
735
+ msgstr ""
736
+
737
+ #: ../common.php:376
738
+ msgid "Attempt to access"
739
+ msgstr ""
740
+
741
+ #: ../common.php:379
742
+ msgid "Limit on failed reCAPTCHA verifications is reached"
743
+ msgstr ""
744
+
745
+ #: ../common.php:380
746
+ msgid "Bot activity is detected"
747
+ msgstr ""
748
+
749
+ #: ../common.php:432
750
+ #, php-format
751
+ msgid "%s ago"
752
+ msgstr ""
753
+
754
+ #: ../cerber-lab.php:576
755
+ msgid "Want to make WP Cerber even more powerful?"
756
+ msgstr ""
757
+
758
+ #: ../cerber-lab.php:577
759
+ msgid ""
760
+ "Allow WP Cerber to send locked out malicious IP addresses to Cerber Lab. "
761
+ "This helps the plugin team to develop new algorithms for WP Cerber that will "
762
+ "defend WordPress against new threats and botnets that are appearing "
763
+ "everyday. You can disable the sending in the plugin settings at any time."
764
+ msgstr ""
765
+
766
+ #: ../cerber-lab.php:578
767
+ msgid "OK, nail them all"
768
+ msgstr ""
769
+
770
+ #: ../cerber-lab.php:579
771
+ msgid "NO, maybe later"
772
+ msgstr ""
773
+
774
+ #: ../cerber-lab.php:580 ../settings.php:196
775
+ msgid "Know more"
776
+ msgstr ""
777
+
778
+ #: ../settings.php:57
779
+ msgid "Limit login attempts"
780
+ msgstr ""
781
+
782
+ #: ../settings.php:58
783
+ msgid "Attempts"
784
+ msgstr ""
785
+
786
+ #: ../settings.php:59
787
+ msgid "Lockout duration"
788
+ msgstr ""
789
+
790
+ #: ../settings.php:59 ../settings.php:78
791
+ msgid "minutes"
792
+ msgstr ""
793
+
794
+ #: ../settings.php:60
795
+ msgid "Aggressive lockout"
796
+ msgstr ""
797
+
798
+ #: ../settings.php:61
799
+ msgid "Apply limit login rules to IP addresses in the White IP Access List"
800
+ msgstr ""
801
+
802
+ #: ../settings.php:63
803
+ msgid "Site connection"
804
+ msgstr ""
805
+
806
+ #: ../settings.php:63
807
+ msgid "My site is behind a reverse proxy"
808
+ msgstr ""
809
+
810
+ #: ../settings.php:65
811
+ msgid "Proactive security rules"
812
+ msgstr ""
813
+
814
+ #: ../settings.php:66
815
+ msgid "Block subnet"
816
+ msgstr ""
817
+
818
+ #: ../settings.php:66
819
+ msgid "Always block entire subnet Class C of intruders IP"
820
+ msgstr ""
821
+
822
+ #: ../settings.php:67
823
+ msgid "Non-existent users"
824
+ msgstr ""
825
+
826
+ #: ../settings.php:67
827
+ msgid "Immediately block IP when attempting to login with a non-existent username"
828
+ msgstr ""
829
+
830
+ #: ../settings.php:68
831
+ msgid "Redirect dashboard requests"
832
+ msgstr ""
833
+
834
+ #: ../settings.php:68
835
+ msgid ""
836
+ "Disable automatic redirecting to the login page when /wp-admin/ is requested "
837
+ "by an unauthorized request"
838
+ msgstr ""
839
+
840
+ #: ../settings.php:69
841
+ msgid "Request wp-login.php"
842
+ msgstr ""
843
+
844
+ #: ../settings.php:69
845
+ msgid "Immediately block IP after any request to wp-login.php"
846
+ msgstr ""
847
+
848
+ #: ../settings.php:70
849
+ msgid "Display 404 page"
850
+ msgstr ""
851
+
852
+ #: ../settings.php:72
853
+ msgid "Custom login page"
854
+ msgstr ""
855
+
856
+ #: ../settings.php:73
857
+ msgid "Custom login URL"
858
+ msgstr ""
859
+
860
+ #: ../settings.php:73
861
+ msgid "must not overlap with the existing pages or posts slug"
862
+ msgstr ""
863
+
864
+ #: ../settings.php:74
865
+ msgid "Disable wp-login.php"
866
+ msgstr ""
867
+
868
+ #: ../settings.php:74
869
+ msgid "Block direct access to wp-login.php and return HTTP 404 Not Found Error"
870
+ msgstr ""
871
+
872
+ #: ../settings.php:77
873
+ msgid "Threshold"
874
+ msgstr ""
875
+
876
+ #: ../settings.php:78
877
+ msgid "Duration"
878
+ msgstr ""
879
+
880
+ #: ../settings.php:80
881
+ msgid "Send notification to admin email"
882
+ msgstr ""
883
+
884
+ #: ../settings.php:80 ../settings.php:367
885
+ msgid "Click to send test"
886
+ msgstr ""
887
+
888
+ #: ../settings.php:83
889
+ msgid "Keep records for"
890
+ msgstr ""
891
+
892
+ #: ../settings.php:83 ../settings.php:126
893
+ msgid "days"
894
+ msgstr ""
895
+
896
+ #: ../settings.php:84
897
+ msgid "Cerber Lab connection"
898
+ msgstr ""
899
+
900
+ #: ../settings.php:84
901
+ msgid "Send malicious IP addresses to the Cerber Lab"
902
+ msgstr ""
903
+
904
+ #: ../settings.php:85
905
+ msgid "Cerber Lab protocol"
906
+ msgstr ""
907
+
908
+ #: ../settings.php:86
909
+ msgid "Use file"
910
+ msgstr ""
911
+
912
+ #: ../settings.php:86
913
+ msgid "Write failed login attempts to the file"
914
+ msgstr ""
915
+
916
+ #: ../settings.php:88
917
+ msgid "Preferences"
918
+ msgstr ""
919
+
920
+ #: ../settings.php:89
921
+ msgid "Drill down IP"
922
+ msgstr ""
923
+
924
+ #: ../settings.php:89
925
+ msgid "Retrieve extra WHOIS information for IP"
926
+ msgstr ""
927
+
928
+ #: ../settings.php:90
929
+ msgid "Date format"
930
+ msgstr ""
931
+
932
+ #: ../settings.php:90
933
+ #, php-format
934
+ msgid "if empty, the default format %s will be used"
935
+ msgstr ""
936
+
937
+ #: ../settings.php:97
938
+ msgid "Hardening WordPress"
939
+ msgstr ""
940
+
941
+ #: ../settings.php:98
942
+ msgid "Stop user enumeration"
943
+ msgstr ""
944
+
945
+ #: ../settings.php:98
946
+ msgid "Block access to the pages like /?author=n"
947
+ msgstr ""
948
+
949
+ #: ../settings.php:99
950
+ msgid "Disable XML-RPC"
951
+ msgstr ""
952
+
953
+ #: ../settings.php:99
954
+ msgid "Block access to the XML-RPC server (including Pingbacks and Trackbacks)"
955
+ msgstr ""
956
+
957
+ #: ../settings.php:100
958
+ msgid "Disable feeds"
959
+ msgstr ""
960
+
961
+ #: ../settings.php:100
962
+ msgid "Block access to the RSS, Atom and RDF feeds"
963
+ msgstr ""
964
+
965
+ #: ../settings.php:101
966
+ msgid "Disable REST API"
967
+ msgstr ""
968
+
969
+ #: ../settings.php:101
970
+ msgid "Block access to the WordPress REST API"
971
+ msgstr ""
972
+
973
+ #: ../settings.php:110
974
+ msgid "User related settings"
975
+ msgstr ""
976
+
977
+ #: ../settings.php:111
978
+ msgid "Prohibited usernames"
979
+ msgstr ""
980
+
981
+ #: ../settings.php:111
982
+ msgid ""
983
+ "Usernames from this list are not allowed to log in or register. Any IP "
984
+ "address, have tried to use any of these usernames, will be immediately "
985
+ "blocked. Use comma to separate logins."
986
+ msgstr ""
987
+
988
+ #: ../settings.php:112
989
+ msgid "User session expire"
990
+ msgstr ""
991
+
992
+ #: ../settings.php:112
993
+ msgid "in minutes (leave empty to use default WP value)"
994
+ msgstr ""
995
+
996
+ #: ../settings.php:119
997
+ msgid "Cerber antispam engine"
998
+ msgstr ""
999
+
1000
+ #: ../settings.php:120
1001
+ msgid "Comment form"
1002
+ msgstr ""
1003
+
1004
+ #: ../settings.php:120
1005
+ msgid "Protect comment form with bot detection engine"
1006
+ msgstr ""
1007
+
1008
+ #: ../settings.php:121 ../settings.php:134
1009
+ msgid "Registration form"
1010
+ msgstr ""
1011
+
1012
+ #: ../settings.php:121
1013
+ msgid "Protect registration form with bot detection engine"
1014
+ msgstr ""
1015
+
1016
+ #: ../settings.php:124
1017
+ msgid "Comment processing"
1018
+ msgstr ""
1019
+
1020
+ #: ../settings.php:125
1021
+ msgid "If a spam comment detected"
1022
+ msgstr ""
1023
+
1024
+ #: ../settings.php:126
1025
+ msgid "Trash spam comments"
1026
+ msgstr ""
1027
+
1028
+ #: ../settings.php:126
1029
+ msgid "Move spam comments to trash after"
1030
+ msgstr ""
1031
+
1032
+ #: ../settings.php:129
1033
+ msgid "reCAPTCHA settings"
1034
+ msgstr ""
1035
+
1036
+ #: ../settings.php:130
1037
+ msgid "Site key"
1038
+ msgstr ""
1039
+
1040
+ #: ../settings.php:131
1041
+ msgid "Secret key"
1042
+ msgstr ""
1043
+
1044
+ #: ../settings.php:132
1045
+ msgid "Invisible reCAPTCHA"
1046
+ msgstr ""
1047
+
1048
+ #: ../settings.php:132
1049
+ msgid "Enable invisible reCAPTCHA"
1050
+ msgstr ""
1051
+
1052
+ #: ../settings.php:132
1053
+ msgid ""
1054
+ "(do not enable it unless you get and enter the Site and Secret keys for the "
1055
+ "invisible version)"
1056
+ msgstr ""
1057
+
1058
+ #: ../settings.php:134
1059
+ msgid "Enable reCAPTCHA for WordPress registration form"
1060
+ msgstr ""
1061
+
1062
+ #: ../settings.php:135
1063
+ msgid "Enable reCAPTCHA for WooCommerce registration form"
1064
+ msgstr ""
1065
+
1066
+ #: ../settings.php:137
1067
+ msgid "Lost password form"
1068
+ msgstr ""
1069
+
1070
+ #: ../settings.php:137
1071
+ msgid "Enable reCAPTCHA for WordPress lost password form"
1072
+ msgstr ""
1073
+
1074
+ #: ../settings.php:138
1075
+ msgid "Enable reCAPTCHA for WooCommerce lost password form"
1076
+ msgstr ""
1077
+
1078
+ #: ../settings.php:140
1079
+ msgid "Login form"
1080
+ msgstr ""
1081
+
1082
+ #: ../settings.php:140
1083
+ msgid "Enable reCAPTCHA for WordPress login form"
1084
+ msgstr ""
1085
+
1086
+ #: ../settings.php:141
1087
+ msgid "Enable reCAPTCHA for WooCommerce login form"
1088
+ msgstr ""
1089
+
1090
+ #: ../settings.php:143
1091
+ msgid "Enable reCAPTCHA for WordPress comment form"
1092
+ msgstr ""
1093
+
1094
+ #: ../settings.php:144
1095
+ msgid "Disable reCAPTCHA for logged in users"
1096
+ msgstr ""
1097
+
1098
+ #: ../settings.php:146
1099
+ msgid "Limit attempts"
1100
+ msgstr ""
1101
+
1102
+ #: ../settings.php:146
1103
+ #, php-format
1104
+ msgid "Lock out IP address for %s minutes after %s failed attempts within %s minutes"
1105
+ msgstr ""
1106
+
1107
+ #: ../settings.php:152
1108
+ msgid "Email notifications"
1109
+ msgstr ""
1110
+
1111
+ #: ../settings.php:154
1112
+ msgid "Email Address"
1113
+ msgstr ""
1114
+
1115
+ #: ../settings.php:154
1116
+ msgid "Use comma to specify multiple values"
1117
+ msgstr ""
1118
+
1119
+ #: ../settings.php:154
1120
+ #, php-format
1121
+ msgid "if empty, the admin email %s will be used"
1122
+ msgstr ""
1123
+
1124
+ #: ../settings.php:155
1125
+ msgid "Notification limit"
1126
+ msgstr ""
1127
+
1128
+ #: ../settings.php:155
1129
+ msgid "notification letters allowed per hour (0 means unlimited)"
1130
+ msgstr ""
1131
+
1132
+ #: ../settings.php:164
1133
+ msgid "All connected devices"
1134
+ msgstr ""
1135
+
1136
+ #: ../settings.php:165
1137
+ msgid "No devices found"
1138
+ msgstr ""
1139
+
1140
+ #: ../settings.php:167
1141
+ msgid "Not available"
1142
+ msgstr ""
1143
+
1144
+ #: ../settings.php:178
1145
+ msgid "Make your protection smarter!"
1146
+ msgstr ""
1147
+
1148
+ #: ../settings.php:182
1149
+ msgid ""
1150
+ "Please enable Permalinks to use this feature. Set Permalink Settings to "
1151
+ "something other than Default."
1152
+ msgstr ""
1153
+
1154
+ #: ../settings.php:185
1155
+ msgid ""
1156
+ "Be careful when enabling this options. If you forget the custom login URL "
1157
+ "you will not be able to login."
1158
+ msgstr ""
1159
+
1160
+ #: ../settings.php:189
1161
+ msgid ""
1162
+ "In the Citadel mode nobody is able to log in except IPs from the White IP "
1163
+ "Access List. Active user sessions will not be affected."
1164
+ msgstr ""
1165
+
1166
+ #: ../settings.php:192
1167
+ msgid "These settings do not affect hosts from the "
1168
+ msgstr ""
1169
+
1170
+ #: ../settings.php:195
1171
+ msgid ""
1172
+ "Before you can start using reCAPTCHA, you have to obtain Site key and Secret "
1173
+ "key on the Google website"
1174
+ msgstr ""
1175
+
1176
+ #: ../settings.php:235
1177
+ msgid "Users"
1178
+ msgstr ""
1179
+
1180
+ #: ../settings.php:240
1181
+ msgid "Help"
1182
+ msgstr ""
1183
+
1184
+ #: ../settings.php:353
1185
+ #, php-format
1186
+ msgid "%s allowed retries in %s minutes"
1187
+ msgstr ""
1188
+
1189
+ #: ../settings.php:358
1190
+ #, php-format
1191
+ msgid "Increase lockout duration to %s hours after %s lockouts in the last %s hours"
1192
+ msgstr ""
1193
+
1194
+ #: ../settings.php:365
1195
+ msgid "Notify admin if the number of active lockouts above"
1196
+ msgstr ""
1197
+
1198
+ #: ../settings.php:370
1199
+ #, php-format
1200
+ msgid "Enable after %s failed login attempts in last %s minutes"
1201
+ msgstr ""
1202
+
1203
+ #: ../settings.php:460
1204
+ msgid "Attention! You have changed the login URL! The new login URL is"
1205
+ msgstr ""
1206
+
1207
+ #: ../settings.php:540
1208
+ msgid "<strong>ERROR</strong>: please enter a valid email address."
1209
+ msgstr ""
1210
+
1211
+ #: ../cerber-tools.php:48
1212
+ msgid "Export & Import"
1213
+ msgstr ""
1214
+
1215
+ #: ../cerber-tools.php:49
1216
+ msgid "Diagnostic"
1217
+ msgstr ""
1218
+
1219
+ #: ../cerber-tools.php:83
1220
+ msgid "Export settings to the file"
1221
+ msgstr ""
1222
+
1223
+ #: ../cerber-tools.php:84
1224
+ msgid ""
1225
+ "When you click the button below you will get a configuration file, which you "
1226
+ "can upload on another site."
1227
+ msgstr ""
1228
+
1229
+ #: ../cerber-tools.php:85
1230
+ msgid "What do you want to export?"
1231
+ msgstr ""
1232
+
1233
+ #: ../cerber-tools.php:86 ../cerber-tools.php:95
1234
+ msgid "Settings"
1235
+ msgstr ""
1236
+
1237
+ #: ../cerber-tools.php:88
1238
+ msgid "Download file"
1239
+ msgstr ""
1240
+
1241
+ #: ../cerber-tools.php:90
1242
+ msgid "Import settings from the file"
1243
+ msgstr ""
1244
+
1245
+ #: ../cerber-tools.php:91
1246
+ msgid ""
1247
+ "When you click the button below, file will be uploaded and all existing "
1248
+ "settings will be overridden."
1249
+ msgstr ""
1250
+
1251
+ #: ../cerber-tools.php:92
1252
+ msgid "Select file to import."
1253
+ msgstr ""
1254
+
1255
+ #: ../cerber-tools.php:92
1256
+ #, php-format
1257
+ msgid "Maximum upload file size: %s."
1258
+ msgstr ""
1259
+
1260
+ #: ../cerber-tools.php:95
1261
+ msgid "What do you want to import?"
1262
+ msgstr ""
1263
+
1264
+ #: ../cerber-tools.php:97
1265
+ msgid "Upload file"
1266
+ msgstr ""
1267
+
1268
+ #: ../cerber-tools.php:132
1269
+ msgid "No file was uploaded or file is corrupted"
1270
+ msgstr ""
1271
+
1272
+ #: ../cerber-tools.php:162
1273
+ msgid "Error while updating"
1274
+ msgstr ""
1275
+
1276
+ #: ../cerber-tools.php:165
1277
+ msgid "Settings has imported successfully from"
1278
+ msgstr ""
1279
+
1280
+ #: ../cerber-tools.php:169
1281
+ msgid "Error while parsing file"
1282
+ msgstr ""
1283
+
1284
+ #: ../cerber-tools.php:267
1285
+ msgid "Antispam and bot detection settings"
1286
+ msgstr ""
readme.txt ADDED
@@ -0,0 +1,447 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === Cerber Security & Limit Login Attempts ===
2
+ Contributors: gioni
3
+ Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=SR8RJXFU35EW8
4
+ Tags: security, login, custom login, protect, antispam, woocommerce, recaptcha, captcha, activity, log, logging, block, fail2ban, monitoring, rename wp login, whitelist, blacklist, wordpress security, xmlrpc, user enumeration, hardening, authentication, notification, pushbullet, brute force, bruteforce, users
5
+ Requires at least: 4.4
6
+ Tested up to: 4.8.1
7
+ Stable tag: 5.0
8
+ License: GPLv2
9
+
10
+ Protection against hacker attacks and bots. Restrict access with IP access lists, track user and bot activity. reCAPTCHA. Limit login attempts.
11
+
12
+ == Description ==
13
+
14
+ Defends WordPress against brute force attacks by limiting the number of login attempts through the login form, XML-RPC / REST API requests or using auth cookies.
15
+ Restricts access with a Black IP Access List and a White IP Access List.
16
+ Tracks user and intruder activity with powerful email, mobile and desktop notifications.
17
+ Stop spam: activates reCAPTCHA for protecting registration and comments forms.
18
+ Hardening WordPress.
19
+
20
+ **Features you will love**
21
+
22
+ * Limit login attempts when logging in by IP address or entire subnet.
23
+ * Monitors logins made by login forms, XML-RPC requests or auth cookies.
24
+ * Permit or restrict access by [White IP Access list and Black IP Access List](http://wpcerber.com/using-ip-access-lists-to-protect-wordpress/) with a single IP, IP range or subnet.
25
+ * Log all activities related to the logging in/out process.
26
+ * Cool notifications with powerful filters
27
+ * Hide wp-login.php, wp-signup.php and wp-register.php from possible attacks and return 404 HTTP Error.
28
+ * Hide wp-admin (dashboard) and return 404 HTTP Error when a user isn't logged in.
29
+ * Create **Custom login URL** ([rename wp-login.php](http://wpcerber.com/how-to-rename-wp-login-php/)).
30
+ * Immediately block IP or subnet when attempting to log in with non-existent or prohibited username.
31
+ * Disable WP REST API
32
+ * Disable XML-RPC (block access to the XML-RPC interface including Pingbacks and Trackbacks)
33
+ * Disable feeds (block access to the RSS, Atom and RDF feeds)
34
+ * Restrict access to XML-RPC, REST API and feeds by **White IP Access list** with IP or IP range.
35
+ * Disable automatic redirecting to login page.
36
+ * **Stop user enumeration** (block access to the pages like /?author=n)
37
+ * Proactively **block IP subnet class C** for intruder's IP.
38
+ * Antispam: **reCAPTCHA** to protect WordPress register and comment forms.
39
+ * [reCAPTCHA for WooCommerce & WordPress forms](http://wpcerber.com/how-to-setup-recaptcha/).
40
+ * Invisible reCAPTCHA for WordPress comments forms
41
+ * Citadel mode for **massive brute force attack**.
42
+ * [Play nice with **fail2ban**](http://wpcerber.com/how-to-protect-wordpress-with-fail2ban/): write failed attempts to the syslog or a custom log file.
43
+ * Filter out and inspect activities by IP address, user, username or a particular activity.
44
+ * Filter out activities and export them to a CSV file.
45
+ * Limit login attempts works on a site/server behind a reverse proxy.
46
+ * [Notifications by email or mobile push notifications](http://wpcerber.com/wordpress-notifications-made-easy/).
47
+ * Trigger and action for the [jetFlow.io automation plugin](http://jetflow.io).
48
+
49
+ = Limit login attempts done right =
50
+
51
+ By default, WordPress allows unlimited login attempts through the login form, XML-RPC or by sending special cookies. This allows passwords to be cracked with relative ease via brute force attack.
52
+
53
+ WP Cerber blocks intruders by IP or subnet from making further attempts after a specified limit on retries is reached, making brute force attacks or distributed brute force attacks from botnets impossible.
54
+
55
+ You will be able to create a **Black IP Access List** or **White IP Access List** to block or allow logins from a particular IP address, IP address range or a subnet any class (A,B,C).
56
+
57
+ Moreover, you can create your Custom login page and forget about automatic attacks to the default wp-login.php, which takes your attention and consumes a lot of server resources. If an attacker tries to access wp-login.php they will be blocked and get a 404 Error response.
58
+
59
+ = Log, filter out and export activities =
60
+
61
+ WP Cerber tracks time, IP addresses and usernames for successful and failed login attempts, logins, logouts, password changes, blocked IP and actions taken by itself. You can export them to a CSV file.
62
+
63
+ = Limit login attempts reinvented =
64
+
65
+ You can **hide WordPress dashboard** (/wp-admin/) when a user isn't logged in. If a user isn't logged in and they attempt to access the dashboard by requesting /wp-admin/, WP Cerber will return a 404 Error.
66
+
67
+ Massive botnet brute force attack? That's no longer a problem. **Citadel mode** will automatically be activated for awhile and prevent your site from making further attempts to log in with any username.
68
+
69
+ = Antispam protection: invisible reCAPTCHA for WooCommerce =
70
+
71
+ * WooCommerce login form
72
+ * WooCommerce register form
73
+ * WooCommerce lost password form
74
+
75
+ = Antispam protection: invisible reCAPTCHA for WordPress =
76
+
77
+ * WordPress login form
78
+ * WordPress register form
79
+ * WordPress lost password form
80
+ * WordPress comment form
81
+
82
+ **Documentation & Tutorials**
83
+
84
+ * [How to set up notifications](http://wpcerber.com/wordpress-notifications-made-easy/)
85
+ * [Push notifications with Pushbullet](http://wpcerber.com/wordpress-mobile-and-browser-notifications-pushbullet/)
86
+ * [How to set up invisible reCAPTCHA for WooCommerce](http://wpcerber.com/how-to-setup-recaptcha/)
87
+ * [Changing default plugin messages](http://wpcerber.com/wordpress-hooks/)
88
+ * [Best alternatives to the Clef plugin](http://wpcerber.com/two-factor-authentication-plugins-for-wordpress/)
89
+ * [Why reCAPTCHA does not protect WordPress from bots and brute-force attacks](http://wpcerber.com/why-recaptcha-does-not-protect-wordpress/)
90
+
91
+ **Translations**
92
+
93
+ * Czech, thanks to [Hrohh](https://profiles.wordpress.org/hrohh/)
94
+ * Deutsche, thanks to mario, Mike and [Daniel](http://detacu.de)
95
+ * Dutch, thanks to [Bernardo](https://twitter.com/bernardohulsman)
96
+ * Français, thanks to [hardesfred](https://profiles.wordpress.org/hardesfred/)
97
+ * Norwegian (Bokmål), thanks to [Eirik Vorland](https://www.facebook.com/KjellDaSensei)
98
+ * Portuguese, thanks to [Felipe Turcheti](http://felipeturcheti.com)
99
+ * Polski, thanks to [Wojciech Górski](https://www.facebook.com/profile.php?id=100010484049780)
100
+ * Spanish, thanks to Ismael Murias and [leemon](https://profiles.wordpress.org/leemon/)
101
+ * Український, thanks to [Nadia](https://profiles.wordpress.org/webbistro)
102
+ * Русский, thanks to [Yui](https://profiles.wordpress.org/fierevere/)
103
+ * Italian, thanks to [Francesco Venuti](http://www.algostream.it/)
104
+
105
+ Thanks to [POEditor.com](https://poeditor.com) for helping to translate this project.
106
+
107
+ There are some semi-similar security plugins you can check out: Login LockDown, Login Security Solution,
108
+ BruteProtect, Ajax Login & Register, Lockdown WP Admin,
109
+ BulletProof Security, SiteGuard WP Plugin, All In One WP Security & Firewall, Brute Force Login Protection
110
+
111
+ **Another reliable plugins from the trusted author**
112
+
113
+ * [Plugin Inspector reveals issues with installed plugins](https://wordpress.org/plugins/plugin-inspector/)
114
+
115
+ Checks plugins for deprecated WordPress functions, known security vulnerabilities, and some unsafe PHP functions
116
+
117
+ * [Translate sites with Google Translate Widget](https://wordpress.org/plugins/goo-translate-widget/)
118
+
119
+ Make your website instantly available in 90+ languages with Google Translate Widget. Add the power of Google automatic translations with one click.
120
+
121
+ == Installation ==
122
+
123
+ Installing the WP Cerber security plugin is the same as other WordPress plugins.
124
+
125
+ 1. Install the plugin through Plugins > Add New > Upload or unzip plugin package into wp-content/plugins/.
126
+ 2. Activate the WP Cerber through the Plugins > Installed Plugins menu in the WordPress admin dashboard.
127
+ 3. The plugin is now active and has started protecting your WordPress with default settings.
128
+ 4. Make sure, that you received a notification letter with your site admin email.
129
+
130
+ **Important notes**
131
+
132
+ 1. Before enabling invisible reCAPTCHA, you must get separate keys for invisible version. [How to enable reCAPTCHA](http://wpcerber.com/how-to-setup-recaptcha/).
133
+ 2. If you want to test out plugin's features, do this from another computer and remove that computer's network from the White Access List. Cerber is smart enough to recognize "the boss".
134
+ 3. If you've set up the Custom login URL and you use some caching plugin like **W3 Total Cache** or **WP Super Cache**, you have to add a new Custom login URL to the list of pages not to cache.
135
+ 4. [Read this if your website is under CloudFlare](http://wpcerber.com/cloudflare-and-wordpress-cerber/)
136
+ 5. If you use the Jetpack plugin or another plugin that needs to connect to wordpress.com, you need to unlock XML-RPC. To do that go to the Hardening tab, uncheck Disable XML-RPC, and click the Save changes button.
137
+
138
+ The following steps are optional but they allow you to reinforce the protection of your WordPress.
139
+
140
+ 1. Fine tune **Limit login attempts** settings making them more restrictive according to your needs
141
+ 2. Configure your **Custom login URL** and remember it (the plugin will send you an email with it).
142
+ 3. Once you have configured Custom login URL, check 'Immediately block IP after any request to wp-login.php' and 'Block direct access to wp-login.php and return HTTP 404 Not Found Error'. Don't use wp-admin to log in to your WordPress dashboard anymore.
143
+ 4. If your WordPress has a few experienced users, check 'Immediately block IP when attempting to log in with a non-existent username'.
144
+ 5. Specify the list of prohibited usernames (logins) that legit users will never use. They will not be allowed to log in and register in any circumstances.
145
+ 6. Configure mobile and browser notifications via Pushbullet.
146
+ 7. Obtain keys and enable invisible reCAPTCHA for password reset and registration forms (WooCommerce supported too).
147
+
148
+
149
+ == Frequently Asked Questions ==
150
+
151
+ = Can I use the plugin with CloudFlare? =
152
+
153
+ Yes. [WP Cerber settings for CloudFlare](http://wpcerber.com/cloudflare-and-wordpress-cerber/).
154
+
155
+ = Is this plugin compatible with WordPress multisite mode? =
156
+
157
+ Yes. All settings apply to all sites in the network simultaneously. You have to activate the plugin in the Network Admin area on the Plugins page. Just click on the Network Activate link.
158
+
159
+ = Is WP Cerber compatible with bbPress? =
160
+
161
+ Yes. [Compatibility notes](http://wpcerber.com/compatibility/).
162
+
163
+ = Is this plugin compatible with WooCommerce? =
164
+
165
+ Completely.
166
+
167
+ = Is reCAPTCHA for WooCommerce free feature? =
168
+
169
+ Yes. [How to set up reCAPTCHA for WooCommerce](http://wpcerber.com/how-to-setup-recaptcha/).
170
+
171
+ = Can I change login URL (rename wp-login.php)? =
172
+
173
+ Yes, easily. [How to rename wp-login.php](http://wpcerber.com/how-to-rename-wp-login-php/)
174
+
175
+ = Can I hide wp-admin? =
176
+
177
+ Yes, easily. [How to hide wp-admin and wp-login.php from possible attacks](http://wpcerber.com/how-to-hide-wp-admin-and-wp-login-php-from-possible-attacks/)
178
+
179
+ = Can I rename wp-admin folder? =
180
+
181
+ Nope. It's not possible and not recommended for compatibility reasons.
182
+
183
+ = Can WP Cerber work together with the Limit Login Attempts plugin? =
184
+
185
+ Nope. WP Cerber is a drop in replacement for that outdated plugin.
186
+
187
+ = Can WP Cerber protect my site from DDoS attacks? =
188
+
189
+ Nope. WP Cerber protects your site from Brute force attacks or distributed Brute force attacks. By default WordPress allows unlimited login attempts either through the login form or by sending special cookies. This allows passwords to be cracked with relative ease via a brute force attack. To prevent from such a bad situation use WP Cerber.
190
+
191
+ = Is there any WordPress plugin to protect my site from DDoS attacks? =
192
+
193
+ Nope. This hard task cannot be done by using a plugin. That may be done by using special hardware from your hosting provider.
194
+
195
+ = What is the goal of Citadel mode? =
196
+
197
+ Citadel mode is intended to block massive, distributed botnet attacks and also slow attacks. The last type of attack has a large range of intruder IPs with a small number of attempts to login per each.
198
+
199
+ = How to turn off Citadel mode completely? =
200
+
201
+ Set Threshold fields to 0 or leave them empty.
202
+
203
+ = What is the goal of using Fail2Ban? =
204
+
205
+ With Fail2Ban you can protect site on the OS level with iptables. See details here: [http://wpcerber.com/how-to-protect-wordpress-with-fail2ban/](http://wpcerber.com/how-to-protect-wordpress-with-fail2ban/)
206
+
207
+ = Do I need using Fail2Ban to get the plugin working? =
208
+
209
+ No, you don't. It is optional.
210
+
211
+ = Can I use this plugin on the WP Engine hosting? =
212
+
213
+ Yes! WP Cerber is not on the list of disallowed plugins. There are no limitation on the hosting providers. You can use it even on the shared hosting. Plugin consumes minimum resources and does not impact server performance or response time.
214
+
215
+ = It seems that old activity records are not removing from the activity log =
216
+
217
+ That means that scheduled tasks are not executed on your site. In other words, WordPress cron is not working the right way.
218
+ Try to add the following line to your wp-config.php file:
219
+
220
+ define( 'ALTERNATE_WP_CRON', true );
221
+
222
+ = I'm unable to log in / I'm locked out of my site / How to get access (log in) to the dashboard? =
223
+
224
+ There is a special version of the plugin called **WP Cerber Reset**. This version performs only one task. It will reset all WP Cerber settings to initial values (excluding Access Lists) and then will deactivate itself.
225
+
226
+ To get access to your dashboard you need to copy the WP Cerber Reset folder to the plugins folder. Follow these simple steps.
227
+
228
+ 1. Download the wp-cerber-reset.zip archive to your computer using this link: [http://wpcerber.com/downloads/wp-cerber-reset.zip](http://wpcerber.com/downloads/wp-cerber-reset.zip)
229
+ 2. Unpack wp-cerber folder from the archive.
230
+ 3. Upload the wp-cerber folder to the **plugins** folder of your site using any FTP client or a file manager from your hosting control panel. If you see a question about overwriting files, click Yes.
231
+ 4. Log in to your site as usually. Now WP Cerber is disabled completely.
232
+ 5. Reinstall the WP Cerber plugin again. You need to do that, because **WP Cerber Reset** cannot work as a normal plugin.
233
+
234
+ == Screenshots ==
235
+
236
+ 1. The Dashboard: Recently recorded important security events and recently locked out IP addresses.
237
+ 2. WordPress activity log with filtering, export to CSV and powerful notifications. You can see what's going on right now, when an IP reaches the limit of login attempts and when it was blocked.
238
+ 3. Activity log filtered by login and specific type of activity. Export it or click Subscribe to be notified with each event.
239
+ 4. Detailed information about an IP address with WHOIS information.
240
+ 5. These settings allows you to customize the plugin according to your needs.
241
+ 6. White and Black IP access lists allow you to restrict access from a particular IP address, network or IP range.
242
+ 7. Hardening WordPress: disable REST API, XML-RPC and stop user enumeration.
243
+ 8. Powerful email, mobile and browser notifications for WordPress events.
244
+ 9. Stop spammer: visible/invisible reCAPTCHA for WooCommerce and WordPress forms - no spam comments anymore.
245
+ 10. You can export and import security settings and IP Access Lists on the Tools screen.
246
+ 11. Beautiful widget for the WP dashboard to keep an eye on things. Get quick analytic with trends over last 24 hours.
247
+ 12. WP Cerber adds four new columns on the WordPress Users screen: Date of registration, Date of last login, Number of failed login attempts and Number of comments. To get more information just click on the appropriate link.
248
+
249
+
250
+ == Changelog ==
251
+
252
+ = 5.0 =
253
+ * New: A new antispam and bot detection engine that protects comment and user registration forms from bot attacks. After several attempts bot IP will be locked out.
254
+ * New: You can tell Cerber either to mark detected spam comments as spam or deny them completely.
255
+ * New: Cerber can automatically move spam comments older than the specified amount of days to trash.
256
+ * New: Added the cerber_404_template filter for specifying an alternative to the default 404 page not found template.
257
+ * New: Added code to avoid possible conflict between Custom login URL and REST API.
258
+ * New: Italian translation has been added, thanks to Francesco Venuti.
259
+ * Bug fixed: WordPress database error: Table '...cerber_lab_net' doesn't exist.
260
+
261
+ = 4.9 =
262
+ * New: Additional details will be logged and displayed on the Activity page: the URL of a request and decision the plugin engine had made.
263
+ * New: Added a nice panel with performance indicators showing key events and plugin performance in the last 24 hours.
264
+ * New: To improve reliability self check-up code has been added.
265
+ * New: Polish translation has been added, thanks to Wojciech Górski.
266
+ * New: On a multisite WP installation scheduled tasks will be executed once per hour for the entire network: there will no excess SQL queries when the plugin executes hourly cron tasks.
267
+ * Bug fixed: The language for visible reCAPTCHA doesn't set according to the site language setting. It's always English.
268
+
269
+ = 4.8.2 =
270
+ * New: Starting with this version all database tables will be created with a default database engine. It should be InnoDB.
271
+ * New: To improve compatibility with some plugins the email notification function has been updated and now uses the comma-separated list of email addresses instead of an array.
272
+ * Bug fixed: An IP address from a range might not be allowed to log in if you have overlapping IP ranges in the both IP Access List.
273
+ * Bug fixed: A reason of blocking an IP address is not shown in notification emails if Always block entire subnet Class C of intruders IP is selected in the settings.
274
+
275
+ = 4.8 =
276
+ * New: You can enable/disable applying limit login rules to IP addresses in the White IP Access List.
277
+ * New: Block malicious IP addresses after a specified number of failed attempts to solve visible or invisible reCAPTCHA.
278
+ * New: Track password reset requests with username entered.
279
+
280
+ = 4.7.7 =
281
+ * New: invisible reCAPTCHA (classic, visible also available).
282
+ * New: reCAPTCHA for comment forms. Works well as anti-spam tool.
283
+ * Fixed bug: "Add network to the Black List" and "Add IP to the Black List" buttons on the Activity tab doesn't work in the Safari web browser.
284
+
285
+ = 4.5 =
286
+ * New: Instant mobile and browser notifications with Pushbullet.
287
+ * New: Ability to choose a 404 page template.
288
+ * New: Events on the Activity tab are displaying with user roles and avatars.
289
+ * Update: PHP function file_get_contents() has been replaced with cURL to improve compatibilty with restrictive hostings.
290
+ * Fixed bug: Password reset link that is generated by the WooCommerce reset password form can be corrupted if reCAPTCHA is enabled for the form.
291
+ * Fixed bug: The plugin doesn’t block IPv6 addresses from the Black IP Access List (versions affected: 4.0 – 4.3).
292
+
293
+ = 4.3 =
294
+ * New: Use powerful subscriptions to get email notifications according to filters for events you have set.
295
+ * New: Search and/or filter activity by IP address, username (login), specific event and a user. You may use any combination of them.
296
+ * New: Now you can export activity from your WordPress website to a CSV file. You may export all activities or just a set of filtered out activities.
297
+ * Update: Now you can specify multiple email boxes for notifications.
298
+ * Update: The Spanish translation has been updated, thanks to [leemon](https://profiles.wordpress.org/leemon/).
299
+
300
+ = 4.1 =
301
+ * New: Date format field allows you to specify a desirable format for displaying dates and time.
302
+ * Updated code for registration_errors filter to handle errors right way.
303
+ * The French translation has been updated.
304
+ * Fixed issue: Loading settings from a file with reCAPTCHA key and secret on a different website overwrite existing reCAPTCHA key and secret with values from the file.
305
+ * Fixed bug: The plugin tries to validate reCAPTCHA on WooCommerce login form if the validation enabled for the default WordPress login form only.
306
+
307
+ = 4.0 =
308
+ * New: reCAPTCHA for WooCommerce forms. [How to set up reCAPTCHA](http://wpcerber.com/how-to-setup-recaptcha/).
309
+ * New: IP Access Lists has got support for IP networks in three forms: ability to restrict access with IPv4 ranges, IPv4 CIDR notation and IPv4 subnets: A,B,C has been added. [Access Lists for WordPress](http://wpcerber.com/using-ip-access-lists-to-protect-wordpress/).
310
+ * New: Cerber can automatically detect an IP network of an intruder and suggest you to block entire network right from the Activity screen.
311
+ * New: Norwegian translation added, thanks to [Eirik Vorland](https://www.facebook.com/KjellDaSensei).
312
+ * Update: WP REST API is controlled by Access Lists. While REST API is blocked for the rest of the world, IP addresses from the White Access List can use WP REST API.
313
+ * Update: The WP Cerber admin menu is moved from Settings to the main admin menu.
314
+ * Update: To make Cerber more compatible with other plugins, the order of the init hook on the Custom login page (Custom login URL) has been changed.
315
+ * Update: Several languages and translations has been updated.
316
+ * Update: Large amount of code has been rewritten to improve performance and stability.
317
+ * Fixed bug: If a hacker or a bot uses login from the list of prohibited usernames or non-existent username, Citadel mode is unable to be automatically activated.
318
+ * Fixed bug: reCAPTCHA for an ordinary WordPress login form is incompatible with a WooCommerce login form.
319
+ * Fixed issue: In some cases the plugin log first digits of an IP address as an ID of existing user.
320
+
321
+ = 3.0 =
322
+ * New: [reCAPTCHA to protect WordPress forms spam registrations. Also available for lost password and login forms.](http://wpcerber.com/how-to-setup-recaptcha/)
323
+ * New: Registration, XML RCP, WP REST API are controlled by IP Access Lists now. If a particular IP address is locked out or blacklisted registration is impossible.
324
+ * New: Action Get WHOIS info and trigger IP locked out to create automation scenarios with the [jetFlow.io automation plugin](http://jetflow.io).
325
+ * New: Notification emails will contain Reason of a lockout.
326
+ * New: The activity DB table will be optimized after removing old records daily.
327
+ * Update: Column Username on the Activity tab now shows real value that submitted with WordPress login form.
328
+ * Update: Text domain is updated to 'wp-cerber'
329
+ * Fixed issue: If a user enter correct email address and wrong password to log in, IP address is locked immediately.
330
+
331
+ = 2.9 =
332
+ * New: Checking for a prohibited username (login). You can specify list of logins manually on the new settings page (Users).
333
+ * New: Rate limiting for notification letters. Set it on the main settings page.
334
+ * New: If new user registration disabled, automatic redirection from wp-register.php to the login page is blocked (404 error). Remote IP will be locked out.
335
+ * New: You can set user session expiration timeout.
336
+ * New: Define constant CERBER_IP_KEY if you want the plugin to use it as a key to get IP address from $_SERVER variable.
337
+ * Update: Improved WP-CLI compatibility.
338
+ * Update: All dates are displayed in a localized format with date_i18n function.
339
+ * Fixed bugs: incorrect admin URL in notification letters for multisite with multiple domains configuration, lack of error message on the login form if IP is blocked, CSRF vulnerability on the import settings page
340
+ * Removed calls of deprecated function get_currentuserinfo().
341
+
342
+ = 2.7.2 =
343
+ * Fixed bug for non-English WordPress configuration: the plugin is unable to block IP in some server environment. If you have configured language other than English you have to install this release.
344
+
345
+ = 2.7.1 =
346
+ * Fixed two small bugs related to 1) unable to remove IP subnet from the Access Lists and 2) getting IP address in case of reverse proxy doesn't work properly.
347
+
348
+ = 2.7 =
349
+
350
+ * New: Now you can view extra WHOIS information for IP addresses in the activity log including country, network info, abuse contact, etc.
351
+ * New: Added ability to disable WP REST API, see [Hardening WordPress](http://wpcerber.com/hardening-wordpress/)
352
+ * New: Added ability to add IP address to the Black List from the Activity tab. Nail it!
353
+ * New: Added Spanish translation, thanks to Ismael.
354
+ * New: Added ability to set numbers of displayed rows (lines) on the Activity and Lockout tabs. Click Screen Options on the top-right.
355
+ * Fixed minor security issue: Actions to remove IP on the Access Lists tab were not protected against CSRF attacks. Thanks to Gerard.
356
+ * Update: Small changes on the dashboard widget.
357
+ * Update: Action taken by the plugin (plugin makes a decision) now marked with dark vertical bar on the right side of the labels (Activity tab).
358
+
359
+ = 2.0.1.6 =
360
+ * New: Added Reason column on the Lockouts screen which will display cause of blocking particular IP.
361
+ * New: Added Hardening WP with options: disable XML-RPC completely, disable user enumeration, disable feeds (RSS, Atom, RSD).
362
+ * New: Added Custom email address for notifications.
363
+ * New: Added Dutch and Czech translations.
364
+ * New: Added Quick info about IP on Activity tab.
365
+ * Update: Removed option 'Allow whitelist in Citadel mode'. Now this whitelist is enabled by default all the time.
366
+ * Update: For notifications on the multisite installation the admin email address from the Network Settings will be used.
367
+ * Fixed Bug: Disable wp-login.php doesn't work for subfolder installation.
368
+ * Fixed Bug: Custom login URL doesn't work without trailing slash.
369
+ * Fixed Bug: Any request to wp-signup.php reveal hidden Custom login URL.
370
+
371
+ = 1.9 =
372
+ * Code refactoring and cleaning up.
373
+ * Unlocalized strings was localized.
374
+
375
+ = 1.8.1 =
376
+ * Fixed minor bug: no content (empty cells) in the custom colums added by other plugins on the Users screen in the Dashboard.
377
+
378
+ = 1.8 =
379
+ * New! added Hostname column for the Activity and Lockouts tabs.
380
+ * New! added ability to write failed login attempts to the specified file or to the syslog file. Use it to protect site with fail2ban.
381
+ * Added Ukrainian translation (Український переклад).
382
+
383
+ = 1.7 =
384
+ * Added ability to remove old records from the user activity log. Log will be cleaned up automatically. Check out new Keep records for field on the settings page.
385
+ * Added pagination for the Activity and Lockouts tabs.
386
+ * Added German (Deutsch) translation, thanks to mario.
387
+ * Added ability to reset settings to the recommended defaults at any time.
388
+
389
+ = 1.6 =
390
+ * New: beautiful widget for the dashboard to keep an eye on things. Get quick analytic with trends over 24 hours and ability to manually deactivate Citadel mode.
391
+ * French translation added, thanks to hardesfred.
392
+ * Hardening WordPress. Removed automatically redirection from /login/ to the login page, from /admin/ and /dashboard/ to the dashboard.
393
+ * Fixed issue with lost password link in the multisite mode.
394
+ * Now compatible with User Switching plugin.
395
+ * Added ability to manually deactivate Citadel mode, once it automatically switches on.
396
+
397
+ = 1.5 =
398
+ * New feature: importing and exporting settings and access lists from/to the file.
399
+ * Limited notifications in the dashboard.
400
+
401
+ = 1.4 =
402
+ * Added support Multisite mode for limit login attempts.
403
+ * Added Number of comments column on the Users screen in dashboard.
404
+ * Updated notification settings.
405
+ * Updated languages files.
406
+
407
+ = 1.3 =
408
+ * Fixed issue with hanging up during redirect to /wp-admin/ on some circumstance.
409
+ * Fixed minor issue with limit login attempts for non-admin users.
410
+ * Added Date of registration column on the Users screen in dashboard.
411
+ * Some UI improvements on access-list screen.
412
+ * Performance optimization & code refactoring.
413
+
414
+ = 1.2 =
415
+ * Added localization & internationalization files. You can use Loco Translate plugin to make your own translation.
416
+ * Added Russian translation.
417
+ * Added headers for failed attempts to use such headers with [fail2ban](http://www.fail2ban.org).
418
+
419
+ = 1.1 =
420
+ * Added ability to filter out Activity List by IP, username or particular event. You can see what happens and when it happened with particular IP or username. When IP reaches limit login attempts and when it was blocked.
421
+ * Added protection from adding to the Black IP Access List subnet belongs to current user's session IP.
422
+ * Added option to work with site/server behind reverse proxy.
423
+ * Update installation instruction.
424
+
425
+ = 1.0 =
426
+ * Initial version
427
+
428
+ == Other Notes ==
429
+
430
+ 1. If you want to test out plugin's features, do this from another computer and remove that computer's network from the White Access List. Cerber is smart enough to recognize "the boss".
431
+ 2. If you've set up the Custom login URL and you use some caching plugin like **W3 Total Cache** or **WP Super Cache**, you have to add a new Custom login URL to the list of pages not to cache.
432
+ 3. [Read this if your website is under CloudFlare](http://wpcerber.com/cloudflare-and-wordpress-cerber/)
433
+
434
+ **Deutsche**
435
+ Schützt vor Ort gegen Brute-Force-Attacken. Umfassende Kontrolle der Benutzeraktivität. Beschränken Sie die Anzahl der Anmeldeversuche durch die Login-Formular, XML-RPC-Anfragen oder mit Auth-Cookies. Beschränken Sie den Zugriff mit Schwarz-Weiß-Zugriffsliste Zugriffsliste. Track Benutzer und Einbruch Aktivität.
436
+
437
+ **Français**
438
+ Protège site contre les attaques par force brute. Un contrôle complet de l'activité de l'utilisateur. Limiter le nombre de tentatives de connexion à travers les demandes formulaire de connexion, XML-RPC ou en utilisant auth cookies. Restreindre l'accès à la liste noire accès et blanc Liste d'accès. L'utilisateur de la piste et l'activité anti-intrusion.
439
+
440
+ **Український**
441
+ Захищає сайт від атак перебором. Обмежте кількість спроб входу через запити ввійти форми, XML-RPC або за допомогою авторизації в печиво. Обмежити доступ з чорний список доступу і список білий доступу. Користувач трек і охоронної діяльності.
442
+
443
+ **What does "Cerber" mean?**
444
+
445
+ Cerber is derived from the name Cerberus. In Greek and Roman mythology, Cerberus is a multi-headed dog with a serpent's tail, a mane of snakes, and a lion's claws. Nobody can bypass this angry dog. Now you can order WP Cerber to guard the entrance to your site too.
446
+
447
+
ripe.php ADDED
@@ -0,0 +1,168 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Copyright (C) 2015-17 CERBER TECH INC., Gregory Markov, http://wpcerber.com
4
+
5
+ Licenced under the GNU GPL.
6
+
7
+ This program is free software; you can redistribute it and/or modify
8
+ it under the terms of the GNU General Public License as published by
9
+ the Free Software Foundation; either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program; if not, write to the Free Software
19
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20
+
21
+ */
22
+
23
+
24
+ /*
25
+
26
+ *========================================================================*
27
+ | |
28
+ | ATTENTION! Do not change or edit this file! |
29
+ | |
30
+ *========================================================================*
31
+
32
+ */
33
+
34
+
35
+
36
+
37
+ // If this file is called directly, abort executing.
38
+ if ( ! defined( 'WPINC' ) ) { exit; }
39
+
40
+ /**
41
+ * RIPE REST API
42
+ *
43
+ * RIPE Database Acceptable Use Policy
44
+ * https://www.ripe.net/manage-ips-and-asns/db/support/documentation/ripe-database-acceptable-use-policy
45
+ * https://www.ripe.net/manage-ips-and-asns/db/faq/faq-db
46
+ *
47
+ */
48
+
49
+ define('RIPE_ERR_EXPIRE',300);
50
+ define('RIPE_OK_EXPIRE',24 * 3600);
51
+ define('RIPE_HOST','http://rest.db.ripe.net/');
52
+ /*
53
+ * Search for information about IP by using RIPE REST API, method 'search'
54
+ * @since 2.7
55
+ *
56
+ */
57
+ function ripe_search($ip = ''){
58
+ //if ( !cerber_is_ip_or_net($ip) || !is_user_logged_in() || !is_admin()) return false;
59
+ if ( !cerber_is_ip_or_net($ip)) return false;
60
+ $key = 'ripe-'.cerber_get_id_ip($ip);
61
+ $ripe = get_transient($key);
62
+ if (false === $ripe) {
63
+ //if (1==1) {
64
+ $args = array();
65
+ $args['headers']['Accept'] = 'application/json';
66
+ $args['headers']['User-Agent'] = 'Cerber Security Plugin for WP';
67
+ $ripe_response = wp_remote_get( RIPE_HOST.'search?query-string=' . $ip, $args );
68
+ if ( is_wp_error( $ripe_response ) ) {
69
+ $error = 'WHOIS: '.$ripe_response->get_error_message();
70
+ return $error;
71
+ }
72
+ if (absint($ripe_response['response']['code']) != 200) {
73
+ $error = 'WHOIS: '.$ripe_response['response']['message'].' / '.$ripe_response['response']['code'];
74
+ set_transient( $key, $error , RIPE_ERR_EXPIRE );
75
+ //return $error;
76
+ return ''; // don't blow user mind
77
+ }
78
+ $ripe = $ripe_response;
79
+ $ripe['body'] = json_decode($ripe_response['body']);
80
+ if (JSON_ERROR_NONE != json_last_error()) {
81
+ $error = 'WHOIS: '.json_last_error_msg();
82
+ set_transient( $key, $error , RIPE_ERR_EXPIRE );
83
+ return $error;
84
+ }
85
+ $ripe['abuse-email'] = ripe_find_abuse_contact($ripe['body'],$ip);
86
+ set_transient( $key, serialize( $ripe ), RIPE_OK_EXPIRE );
87
+ }
88
+ else {
89
+ $ripe = unserialize($ripe);
90
+ }
91
+ //$ripe['abuse-email'] = ripe_get_abuse_contact($ripe['body'],$ip);
92
+ return $ripe;
93
+ }
94
+ /*
95
+ * Retrieve abuse email from response, rollback to direct request to the API
96
+ * @since 2.7
97
+ *
98
+ */
99
+ function ripe_find_abuse_contact($ripe_body, $ip){
100
+ //http://rest.db.ripe.net/abuse-contact
101
+ $email = '';
102
+ foreach ($ripe_body->objects->object as $object) {
103
+ foreach ($object->attributes->attribute as $att){
104
+ if ($att->name == 'abuse-mailbox' && is_email($att->value)){
105
+ $email = $att->value;
106
+ break;
107
+ }
108
+ }
109
+ }
110
+ if (!$email) { // make an API request
111
+ $args = array();
112
+ $args['headers']['Accept'] = 'application/json';
113
+ $ripe_response = wp_remote_get( RIPE_HOST.'abuse-contact/' . $ip, $args );
114
+ if ( is_wp_error( $ripe_response ) ) {
115
+ return $ripe_response->get_error_message();
116
+ }
117
+ $abuse = json_decode($ripe_response['body']);
118
+ $abuse = get_object_vars($abuse);
119
+ if (is_email($abuse['abuse-contacts']->email)) $email = $abuse['abuse-contacts']->email;
120
+ }
121
+ return $email;
122
+ }
123
+ /*
124
+ * Get and parse RIPE response to human readable view
125
+ * @since 2.7
126
+ *
127
+ */
128
+ function ripe_readable_info($ip){
129
+ $ripe = ripe_search($ip);
130
+ if (!is_array($ripe)) {
131
+ if (!$ripe) return array('error' => 'RIPE error');
132
+ return array('whois' => $ripe);
133
+ }
134
+ $ret = array();
135
+
136
+ $body = $ripe['body'];
137
+ if ($body->service->name != 'search') return $ret; // only for RIPE search requests & responses
138
+
139
+ $info = '';
140
+ foreach ($body->objects->object as $object) {
141
+ $info.='<table class="whois-object otype-'.$object->type.'"><tr><td colspan="2"><b>'.strtoupper($object->type).'</b></td></tr>';
142
+ foreach ($object->attributes->attribute as $att){
143
+ $ret['data'][$att->name] = $att->value;
144
+ if (is_email($att->value)) $value = '<a href="mailto:'.$att->value.'">'.$att->value.'</a>';
145
+ elseif (strtolower($att->name) == 'country') {
146
+ $value = '<b><span '.cerber_get_flag_css($att->value).'>'.cerber_country_name($att->value).'</span> ('.$att->value.')</b>';
147
+ $ret['country'] = $value;
148
+ }
149
+ else $value = $att->value;
150
+ $info.='<tr><td>'.$att->name.'</td><td>'.$value.'</td></tr>';
151
+ }
152
+ $info.='</table>';
153
+ }
154
+
155
+ if (!empty($ripe['abuse-email']) && is_email($ripe['abuse-email'])) {
156
+ $ret['data']['abuse-mailbox'] = $ripe['abuse-email'];
157
+ }
158
+
159
+ // Network
160
+ if (!empty($ret['data']['inetnum'])) {
161
+ $ret['data']['network'] = $ret['data']['inetnum'];
162
+ }
163
+
164
+ $ret['whois'] = $info;
165
+
166
+ return $ret;
167
+ }
168
+
settings.php ADDED
@@ -0,0 +1,766 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Copyright (C) 2015-17 CERBER TECH INC., Gregory Markov, http://wpcerber.com
4
+
5
+ Licenced under the GNU GPL.
6
+
7
+ This program is free software; you can redistribute it and/or modify
8
+ it under the terms of the GNU General Public License as published by
9
+ the Free Software Foundation; either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program; if not, write to the Free Software
19
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20
+
21
+ */
22
+
23
+ /*
24
+
25
+ *========================================================================*
26
+ | |
27
+ | ATTENTION! Do not change or edit this file! |
28
+ | |
29
+ *========================================================================*
30
+
31
+ */
32
+
33
+
34
+
35
+ // If this file is called directly, abort executing.
36
+ if ( ! defined( 'WPINC' ) ) { exit; }
37
+
38
+ define('CERBER_OPT','cerber-main');
39
+ define('CERBER_OPT_H','cerber-hardening');
40
+ define('CERBER_OPT_U','cerber-users');
41
+ define('CERBER_OPT_C','cerber-recaptcha');
42
+ define('CERBER_OPT_N','cerber-notifications');
43
+
44
+ /*
45
+ WP Settings API
46
+ */
47
+ add_action('admin_init', 'cerber_settings_init');
48
+ function cerber_settings_init(){
49
+
50
+ if (!cerber_is_admin_page() && !strpos($_SERVER['REQUEST_URI'],'/options.php')) return;
51
+
52
+ // Main Settings tab ---------------------------------------------------------------------
53
+
54
+ $tab='main'; // 'cerber-main' settings
55
+ register_setting( 'cerberus-'.$tab, 'cerber-'.$tab );
56
+
57
+ add_settings_section('cerber', __('Limit login attempts','wp-cerber'), 'cerber_sapi_section', 'cerber-' . $tab);
58
+ add_settings_field('attempts',__('Attempts','wp-cerber'),'cerberus_field_show','cerber-'.$tab,'cerber',array('group'=>$tab,'option'=>'attempts','type'=>'attempts'));
59
+ add_settings_field('lockout',__('Lockout duration','wp-cerber'),'cerberus_field_show','cerber-'.$tab,'cerber',array('group'=>$tab,'option'=>'lockout','type'=>'text','label'=>__('minutes','wp-cerber'),'size'=>3));
60
+ add_settings_field('aggressive',__('Aggressive lockout','wp-cerber'),'cerberus_field_show','cerber-'.$tab,'cerber',array('group'=>$tab,'type'=>'aggressive'));
61
+ add_settings_field('limitwhite',__('White IP Access List','wp-cerber'),'cerberus_field_show','cerber-'.$tab,'cerber',array('group'=>$tab,'option'=>'limitwhite','type'=>'checkbox','label'=>__('Apply limit login rules to IP addresses in the White IP Access List','wp-cerber')));
62
+ add_settings_field('notify',__('Notifications','wp-cerber'),'cerberus_field_show','cerber-'.$tab,'cerber',array('group'=>$tab,'type'=>'notify','option'=>'notify'));
63
+ add_settings_field('proxy',__('Site connection','wp-cerber'),'cerberus_field_show','cerber-'.$tab,'cerber',array('group'=>$tab,'option'=>'proxy','type'=>'checkbox','label'=>__('My site is behind a reverse proxy','wp-cerber')));
64
+
65
+ add_settings_section('proactive', __('Proactive security rules','wp-cerber'), 'cerber_sapi_section', 'cerber-' . $tab);
66
+ add_settings_field('subnet',__('Block subnet','wp-cerber'),'cerberus_field_show','cerber-'.$tab,'proactive',array('group'=>$tab,'option'=>'subnet','type'=>'checkbox','label'=>__('Always block entire subnet Class C of intruders IP','wp-cerber')));
67
+ add_settings_field('nonusers',__('Non-existent users','wp-cerber'),'cerberus_field_show','cerber-'.$tab,'proactive',array('group'=>$tab,'option'=>'nonusers','type'=>'checkbox','label'=>__('Immediately block IP when attempting to login with a non-existent username','wp-cerber')));
68
+ add_settings_field('noredirect',__('Redirect dashboard requests','wp-cerber'),'cerberus_field_show','cerber-'.$tab,'proactive',array('group'=>$tab,'option'=>'noredirect','type'=>'checkbox','label'=>__('Disable automatic redirecting to the login page when /wp-admin/ is requested by an unauthorized request','wp-cerber')));
69
+ add_settings_field('wplogin',__('Request wp-login.php','wp-cerber'),'cerberus_field_show','cerber-'.$tab,'proactive',array('group'=>$tab,'option'=>'wplogin','type'=>'checkbox','label'=>__('Immediately block IP after any request to wp-login.php','wp-cerber')));
70
+ add_settings_field('page404',__('Display 404 page','wp-cerber'),'cerberus_field_show','cerber-'.$tab,'proactive',array('group'=>$tab, 'option'=>'page404', 'type'=>'select', 'set' => array('Use 404 template from active theme', 'Display simple 404 page')));
71
+
72
+ add_settings_section('custom', __('Custom login page','wp-cerber'), 'cerber_sapi_section', 'cerber-' . $tab);
73
+ add_settings_field('loginpath',__('Custom login URL','wp-cerber'),'cerberus_field_show','cerber-'.$tab,'custom',array('group'=>$tab,'option'=>'loginpath','type'=>'text','label'=>__('must not overlap with the existing pages or posts slug','wp-cerber')));
74
+ add_settings_field('loginnowp',__('Disable wp-login.php','wp-cerber'),'cerberus_field_show','cerber-'.$tab,'custom',array('group'=>$tab,'option'=>'loginnowp','type'=>'checkbox','label'=>__('Block direct access to wp-login.php and return HTTP 404 Not Found Error','wp-cerber')));
75
+
76
+ add_settings_section('citadel', __('Citadel mode','wp-cerber'), 'cerber_sapi_section', 'cerber-' . $tab);
77
+ add_settings_field('citadel',__('Threshold','wp-cerber'),'cerberus_field_show','cerber-'.$tab,'citadel',array('group'=>$tab,'type'=>'citadel'));
78
+ add_settings_field('ciduration',__('Duration','wp-cerber'),'cerberus_field_show','cerber-'.$tab,'citadel',array('group'=>$tab,'option'=>'ciduration','type'=>'text','label'=>__('minutes','wp-cerber'),'size'=>3));
79
+ //add_settings_field('ciwhite',__('White IP Access List','wp-cerber'),'cerberus_field_show','cerber-'.$tab,'citadel',array('group'=>$tab,'option'=>'ciwhite','type'=>'checkbox','label'=>__('Permit IPs from the White IP Access List to log in','wp-cerber')));
80
+ add_settings_field('cinotify',__('Notifications','wp-cerber'),'cerberus_field_show','cerber-'.$tab,'citadel',array('group'=>$tab,'option'=>'cinotify','type'=>'checkbox','label'=>__('Send notification to admin email','wp-cerber').' (<a href="'.wp_nonce_url(add_query_arg(array('testnotify'=>'citadel', 'settings-updated' => 0)),'control','cerber_nonce').'">'.__('Click to send test','wp-cerber').'</a>)'));
81
+
82
+ add_settings_section('activity', __('Activity','wp-cerber'), 'cerber_sapi_section', 'cerber-' . $tab);
83
+ add_settings_field('keeplog',__('Keep records for','wp-cerber'),'cerberus_field_show','cerber-'.$tab,'activity',array('group'=>$tab,'option'=>'keeplog','type'=>'text','label'=>__('days','wp-cerber'),'size'=>3));
84
+ add_settings_field('cerberlab',__('Cerber Lab connection','wp-cerber'),'cerberus_field_show','cerber-'.$tab,'activity',array('group'=>$tab,'option'=>'cerberlab','type'=>'checkbox','label'=>__('Send malicious IP addresses to the Cerber Lab','wp-cerber').' <a target="_blank" href="http://wpcerber.com/cerber-laboratory/">Know more</a>'));
85
+ add_settings_field('cerberproto',__('Cerber Lab protocol','wp-cerber'),'cerberus_field_show','cerber-'.$tab,'activity',array('group'=>$tab,'option'=>'cerberproto','type'=>'select','set'=> array('HTTP', 'HTTPS')));
86
+ add_settings_field('usefile',__('Use file','wp-cerber'),'cerberus_field_show','cerber-'.$tab,'activity',array('group'=>$tab,'option'=>'usefile','type'=>'checkbox','label'=>__('Write failed login attempts to the file','wp-cerber')));
87
+
88
+ add_settings_section('prefs', __('Preferences','wp-cerber'), 'cerber_sapi_section', 'cerber-' . $tab);
89
+ add_settings_field('ip_extra',__('Drill down IP','wp-cerber'),'cerberus_field_show','cerber-'.$tab,'prefs',array('group'=>$tab,'option'=>'ip_extra','type'=>'checkbox','label'=>__('Retrieve extra WHOIS information for IP','wp-cerber').' <a href="' . cerber_admin_link('help') . '">Know more</a>'));
90
+ add_settings_field( 'dateformat', __( 'Date format', 'wp-cerber' ), 'cerberus_field_show', 'cerber-' . $tab, 'prefs', array( 'group' => $tab, 'option' => 'dateformat', 'type' => 'text', 'label' => sprintf(__('if empty, the default format %s will be used','wp-cerber'),'<b>'.cerber_date(time()).'</b>') . ' <a target="_blank" href="http://wpcerber.com/date-format-setting/">Know more</a>'
91
+ ) );
92
+
93
+ // Hardening tab --------------------------------------------------------------------------
94
+
95
+ $tab='hardening'; // 'cerber-hardening' settings
96
+ register_setting( 'cerberus-'.$tab, CERBER_OPT_H);
97
+ add_settings_section('hwp', __('Hardening WordPress','wp-cerber'), 'cerber_sapi_section', CERBER_OPT_H);
98
+ add_settings_field('stopenum',__('Stop user enumeration','wp-cerber'),'cerberus_field_show',CERBER_OPT_H,'hwp',array('group'=>$tab,'option'=>'stopenum','type'=>'checkbox','label'=>__('Block access to the pages like /?author=n','wp-cerber')));
99
+ add_settings_field('xmlrpc',__('Disable XML-RPC','wp-cerber'),'cerberus_field_show',CERBER_OPT_H,'hwp',array('group'=>$tab,'option'=>'xmlrpc','type'=>'checkbox','label'=>__('Block access to the XML-RPC server (including Pingbacks and Trackbacks)','wp-cerber')));
100
+ add_settings_field('nofeeds',__('Disable feeds','wp-cerber'),'cerberus_field_show',CERBER_OPT_H,'hwp',array('group'=>$tab,'option'=>'nofeeds','type'=>'checkbox','label'=>__('Block access to the RSS, Atom and RDF feeds','wp-cerber')));
101
+ add_settings_field('norest',__('Disable REST API','wp-cerber'),'cerberus_field_show',CERBER_OPT_H,'hwp',array('group'=>$tab,'option'=>'norest','type'=>'checkbox','label'=>__('Block access to the WordPress REST API','wp-cerber')));
102
+ //add_settings_field('hashauthor',__('Hide author usernames','wp-cerber'),'cerberus_field_show',CERBER_OPT_H,'hwp',array('group'=>$tab,'option'=>'hashauthor','type'=>'checkbox','label'=>__('Replace author username with hash for author pages and URLs','wp-cerber')));
103
+ //add_settings_field('cleanhead',__('Clean up HEAD','wp-cerber'),'cerberus_field_show','cerber-'.$tab,'hwp',array('group'=>$tab,'option'=>'cleanhead','type'=>'checkbox','label'=>__('Remove generator and version tags from HEAD section','wp-cerber')));
104
+ //add_settings_field('ping',__('Disable Pingback','wp-cerber'),'cerberus_field_show','cerber-'.$tab,'hwp',array('group'=>$tab,'option'=>'ping','type'=>'checkbox','label'=>__('Block access to ping functional','wp-cerber')));
105
+
106
+ // Users tab -----------------------------------------------------------------------------
107
+
108
+ $tab='users'; // 'cerber-users' settings
109
+ register_setting( 'cerberus-'.$tab, CERBER_OPT_U);
110
+ add_settings_section('us', __('User related settings','wp-cerber'), 'cerber_sapi_section', CERBER_OPT_U);
111
+ add_settings_field('prohibited',__('Prohibited usernames','wp-cerber'),'cerberus_field_show',CERBER_OPT_U,'us',array('group'=>$tab,'option'=>'prohibited','type'=>'textarea','label'=>__('Usernames from this list are not allowed to log in or register. Any IP address, have tried to use any of these usernames, will be immediately blocked. Use comma to separate logins.','wp-cerber')));
112
+ add_settings_field('auth_expire',__('User session expire','wp-cerber'),'cerberus_field_show',CERBER_OPT_U,'us',array('group'=>$tab,'option'=>'auth_expire','type'=>'text','label'=>__('in minutes (leave empty to use default WP value)','wp-cerber'),'size' => 6));
113
+
114
+ // reCAPTCHA -----------------------------------------------------------------------------
115
+
116
+ $tab='recaptcha'; // 'cerber-recaptcha' settings
117
+ register_setting( 'cerberus-'.$tab, CERBER_OPT_C);
118
+
119
+ add_settings_section('antibot', __('Cerber antispam engine','wp-cerber'), 'cerber_sapi_section', CERBER_OPT_C);
120
+ add_settings_field('botscomm',__('Comment form','wp-cerber'),'cerberus_field_show',CERBER_OPT_C,'antibot',array('group'=>$tab,'option'=>'botscomm','type'=>'checkbox','label'=>__('Protect comment form with bot detection engine','wp-cerber') ));
121
+ add_settings_field('botsreg',__('Registration form','wp-cerber'),'cerberus_field_show',CERBER_OPT_C,'antibot',array('group'=>$tab,'option'=>'botsreg','type'=>'checkbox','label'=>__('Protect registration form with bot detection engine','wp-cerber') ));
122
+ //add_settings_field('botsany',__('Any form','wp-cerber'),'cerberus_field_show',CERBER_OPT_C,'antibot',array('group'=>$tab,'option'=>'botsany','type'=>'checkbox','label'=>__('Protect all forms with bot detection engine','wp-cerber') ));
123
+
124
+ add_settings_section('commproc', __('Comment processing','wp-cerber'), 'cerber_sapi_section', CERBER_OPT_C);
125
+ add_settings_field('spamcomm',__('If a spam comment detected','wp-cerber'),'cerberus_field_show',CERBER_OPT_C,'commproc',array('group'=>$tab, 'option'=>'spamcomm', 'type'=>'select', 'set' => array('Deny it completely', 'Mark it as spam')));
126
+ add_settings_field('trashafter',__('Trash spam comments','wp-cerber'),'cerberus_field_show',CERBER_OPT_C,'commproc',array('group'=>$tab,'option'=>'trashafter','type'=>'text','enabled'=>__('Move spam comments to trash after'),'label'=>__('days','wp-cerber'),'size'=>3));
127
+ //add_settings_field('deleteafter',__('Delete comments from trash after','wp-cerber'),'cerberus_field_show',CERBER_OPT_C,'commproc',array('group'=>$tab,'option'=>'deleteafter','type'=>'text','label'=>__('days','wp-cerber'),'size'=>3));
128
+
129
+ add_settings_section('recap', __('reCAPTCHA settings','wp-cerber'), 'cerber_sapi_section', CERBER_OPT_C);
130
+ add_settings_field('sitekey',__('Site key','wp-cerber'),'cerberus_field_show',CERBER_OPT_C,'recap',array('group'=>$tab,'option'=>'sitekey','type'=>'text','size' => 60));
131
+ add_settings_field('secretkey',__('Secret key','wp-cerber'),'cerberus_field_show',CERBER_OPT_C,'recap',array('group'=>$tab,'option'=>'secretkey','type'=>'text','size' => 60));
132
+ add_settings_field('invirecap',__('Invisible reCAPTCHA','wp-cerber'),'cerberus_field_show',CERBER_OPT_C,'recap',array('group'=>$tab,'option'=>'invirecap','type'=>'checkbox','label'=>__('Enable invisible reCAPTCHA','wp-cerber') .' '. __('(do not enable it unless you get and enter the Site and Secret keys for the invisible version)','wp-cerber')));
133
+
134
+ add_settings_field('recapreg',__('Registration form','wp-cerber'),'cerberus_field_show',CERBER_OPT_C,'recap',array('group'=>$tab,'option'=>'recapreg','type'=>'checkbox','label'=>__('Enable reCAPTCHA for WordPress registration form','wp-cerber')));
135
+ add_settings_field('recapwooreg', '' ,'cerberus_field_show',CERBER_OPT_C,'recap',array('group'=>$tab,'option'=>'recapwooreg','type'=>'checkbox','label'=>__('Enable reCAPTCHA for WooCommerce registration form','wp-cerber')));
136
+
137
+ add_settings_field('recaplost',__('Lost password form','wp-cerber'),'cerberus_field_show',CERBER_OPT_C,'recap',array('group'=>$tab,'option'=>'recaplost','type'=>'checkbox','label'=>__('Enable reCAPTCHA for WordPress lost password form','wp-cerber')));
138
+ add_settings_field('recapwoolost', '' ,'cerberus_field_show',CERBER_OPT_C,'recap',array('group'=>$tab,'option'=>'recapwoolost','type'=>'checkbox','label'=>__('Enable reCAPTCHA for WooCommerce lost password form','wp-cerber')));
139
+
140
+ add_settings_field('recaplogin',__('Login form','wp-cerber'),'cerberus_field_show',CERBER_OPT_C,'recap',array('group'=>$tab,'option'=>'recaplogin','type'=>'checkbox','label'=>__('Enable reCAPTCHA for WordPress login form','wp-cerber')));
141
+ add_settings_field('recapwoologin', '' ,'cerberus_field_show',CERBER_OPT_C,'recap',array('group'=>$tab,'option'=>'recapwoologin','type'=>'checkbox','label'=>__('Enable reCAPTCHA for WooCommerce login form','wp-cerber')));
142
+
143
+ add_settings_field('recapcom',__('Antispam','wp-cerber'),'cerberus_field_show',CERBER_OPT_C,'recap',array('group'=>$tab,'option'=>'recapcom','type'=>'checkbox','label'=>__('Enable reCAPTCHA for WordPress comment form','wp-cerber')));
144
+ add_settings_field('recapcomauth', '' ,'cerberus_field_show',CERBER_OPT_C,'recap',array('group'=>$tab,'option'=>'recapcomauth','type'=>'checkbox','label'=>__('Disable reCAPTCHA for logged in users','wp-cerber')));
145
+
146
+ add_settings_field('recaplimit',__('Limit attempts','wp-cerber'),'cerberus_field_show',CERBER_OPT_C,'recap',array('group'=>$tab,'option'=>'recaplimit','type'=>'limitz','label' => __('Lock out IP address for %s minutes after %s failed attempts within %s minutes','wp-cerber') ));
147
+
148
+ // Notifications -----------------------------------------------------------------------------
149
+
150
+ $tab='notifications'; // 'cerber-notifications' settings
151
+ register_setting( 'cerberus-'.$tab, CERBER_OPT_N);
152
+ add_settings_section('notify', __('Email notifications','wp-cerber'), 'cerber_sapi_section', 'cerber-' . $tab);
153
+ $def_email = '<b>'.get_site_option('admin_email').'</b>';
154
+ add_settings_field('email',__('Email Address','wp-cerber'),'cerberus_field_show','cerber-'.$tab,'notify',array('group'=>$tab,'option'=>'email','type'=>'text','placeholder'=>__('Use comma to specify multiple values','wp-cerber'),'size'=>60,'label'=>sprintf(__('if empty, the admin email %s will be used','wp-cerber'),$def_email)));
155
+ add_settings_field('emailrate',__('Notification limit','wp-cerber'),'cerberus_field_show','cerber-'.$tab,'notify',array('group'=>$tab,'option'=>'emailrate','type'=>'text','label'=>__('notification letters allowed per hour (0 means unlimited)','wp-cerber'),'size'=>3));
156
+
157
+ add_settings_section('pushit', __('Push notifications','wp-cerber'). ' <a class="help-sign" href="'.cerber_admin_link('help').'">?</a>', 'cerber_sapi_section', 'cerber-' . $tab);
158
+ add_settings_field('pbtoken','Pushbullet access token','cerberus_field_show','cerber-'.$tab,'pushit',array('group'=>$tab,'option'=>'pbtoken','type'=>'text','size'=>60));
159
+
160
+ $set = array();
161
+ if (cerber_is_admin_page(false, array('tab'=>'notifications'))){
162
+ $set = cerber_pb_get_devices();
163
+ if (is_array($set)){
164
+ if (!empty($set)) $set = array('all' => __('All connected devices','wp-cerber')) + $set;
165
+ else $set = array('N' => __('No devices found','wp-cerber'));
166
+ }
167
+ else $set = array('N' => __('Not available','wp-cerber'));
168
+ }
169
+ add_settings_field('pbdevice','Pushbullet device','cerberus_field_show','cerber-'.$tab,'pushit',array('group'=>$tab,'option'=>'pbdevice','type'=>'select','set'=>$set));
170
+
171
+ }
172
+ /*
173
+ Generate HTML for every sections on a settings page
174
+ */
175
+ function cerber_sapi_section($args){
176
+ switch ($args['id']){ // a section id
177
+ case 'proactive':
178
+ _e('Make your protection smarter!','wp-cerber');
179
+ break;
180
+ case 'custom':
181
+ if (!get_option('permalink_structure')) {
182
+ echo '<span style="color:#DF0000;">'.__('Please enable Permalinks to use this feature. Set Permalink Settings to something other than Default.','wp-cerber').'</span>';
183
+ }
184
+ else {
185
+ _e('Be careful when enabling this options. If you forget the custom login URL you will not be able to login.','wp-cerber');
186
+ }
187
+ break;
188
+ case 'citadel':
189
+ _e("In the Citadel mode nobody is able to log in except IPs from the White IP Access List. Active user sessions will not be affected.",'wp-cerber');
190
+ break;
191
+ case 'hwp':
192
+ echo __('These settings do not affect hosts from the ','wp-cerber').' '.__('White IP Access List','wp-cerber');
193
+ break;
194
+ case 'recap':
195
+ _e('Before you can start using reCAPTCHA, you have to obtain Site key and Secret key on the Google website','wp-cerber');
196
+ echo ' <a href="http://wpcerber.com/how-to-setup-recaptcha/">'.__('Know more','wp-cerber').'</a>';
197
+ break;
198
+ }
199
+ }
200
+
201
+ /*
202
+ *
203
+ * Generate HTML for admin page with tabs
204
+ * @since 1.0
205
+ *
206
+ */
207
+ function cerber_settings_page(){
208
+ global $wpdb;
209
+
210
+ $tab = cerber_get_tab('dashboard', array('main','acl','activity','lockouts','messages','help','hardening','users','notifications'));
211
+
212
+ ?>
213
+ <div class="wrap">
214
+
215
+ <h2><?php _e('WP Cerber Security','wp-cerber') ?></h2>
216
+
217
+ <h2 class="nav-tab-wrapper cerber-tabs">
218
+ <?php
219
+
220
+ echo '<a href="' . cerber_admin_link() . '" class="nav-tab ' . ( $tab == 'dashboard' ? 'nav-tab-active' : '') . '"><span class="dashicons dashicons-dashboard"></span> ' . __('Dashboard') . '</a>';
221
+
222
+ echo '<a href="' . cerber_admin_link('activity') . '" class="nav-tab ' . ( $tab == 'activity' ? 'nav-tab-active' : '') . '"><span class="dashicons dashicons-welcome-view-site"></span> ' . __('Activity','wp-cerber') . '</a>';
223
+
224
+ $total = cerber_blocked_num();
225
+
226
+ echo '<a href="' . cerber_admin_link('lockouts') . '" class="nav-tab ' . ( $tab == 'lockouts' ? 'nav-tab-active' : '') . '"><span class="dashicons dashicons-shield"></span> ' . __('Lockouts','wp-cerber') . ' <sup class="loctotal">' . $total . '</sup></a>';
227
+
228
+ echo '<a href="' . cerber_admin_link('main') . '" class="nav-tab ' . ( $tab == 'main' ? 'nav-tab-active' : '') . '"><span class="dashicons dashicons-admin-settings"></span> ' . __('Main Settings','wp-cerber') . '</a>';
229
+
230
+ $total = $wpdb->get_var('SELECT count(ip) FROM '. CERBER_ACL_TABLE);
231
+ echo '<a href="' . cerber_admin_link('acl') . '" class="nav-tab ' . ( $tab == 'acl' ? 'nav-tab-active' : '') . '"><span class="dashicons dashicons-admin-network"></span> ' . __('Access Lists','wp-cerber') . ' <sup class="acltotal">' . $total . '</sup></a>';
232
+
233
+ echo '<a href="' . cerber_admin_link('hardening') . '" class="nav-tab ' . ( $tab == 'hardening' ? 'nav-tab-active' : '') . '"><span class="dashicons dashicons-shield-alt"></span> ' . __('Hardening','wp-cerber') . '</a>';
234
+
235
+ echo '<a href="' . cerber_admin_link('users') . '" class="nav-tab ' . ( $tab == 'users' ? 'nav-tab-active' : '') . '"><span class="dashicons dashicons-admin-users"></span> ' . __('Users') . '</a>';
236
+ //echo '<a href="'.cerber_admin_link('messages').'" class="nav-tab '. ($tab == 'messages' ? 'nav-tab-active' : '') .'">'. __('Messages','wp-cerber').'</a>';
237
+
238
+ echo '<a href="' . cerber_admin_link('notifications') . '" class="nav-tab ' . ( $tab == 'notifications' ? 'nav-tab-active' : '') . '"><span class="dashicons dashicons-controls-volumeon"></span> ' . __('Notifications','wp-cerber') . '</a>';
239
+
240
+ echo '<a href="' . cerber_admin_link('help') . '" class="nav-tab ' . ( $tab == 'help' ? 'nav-tab-active' : '') . '"><span class="dashicons dashicons-editor-help"></span> ' . __('Help','wp-cerber') . '</a>';
241
+
242
+ ?>
243
+ </h2>
244
+ <?php
245
+
246
+ cerber_show_aside($tab);
247
+
248
+ echo '<div class="crb-main">';
249
+
250
+ switch ($tab){
251
+ case 'acl':
252
+ cerber_acl_form();
253
+ break;
254
+ case 'activity':
255
+ cerber_show_activity();
256
+ break;
257
+ case 'lockouts':
258
+ cerber_show_lockouts();
259
+ break;
260
+ case 'help':
261
+ cerber_show_help();
262
+ break;
263
+ case 'dashboard':
264
+ cerber_show_dashboard();
265
+ break;
266
+ default: cerber_show_settings($tab);
267
+ }
268
+
269
+ echo '</div>';
270
+
271
+ $pi ['Version'] = CERBER_VER;
272
+ $pi ['time'] = time();
273
+ $pi ['user'] = get_current_user_id();
274
+ update_site_option( '_cp_tabs_' . $tab, serialize( $pi ) );
275
+
276
+ ?>
277
+ </div>
278
+ <?php
279
+ }
280
+ /*
281
+ * Display settings screen (one tab)
282
+ *
283
+ */
284
+ function cerber_show_settings($active_tab = null){
285
+ if (is_multisite()) $action = ''; // Settings API doesn't work in multisite. Post data will be handled in the cerber_ms_update()
286
+ else $action ='options.php';
287
+ // Display form with settings fields via Settings API
288
+ echo '<form method="post" action="'.$action.'">';
289
+
290
+ settings_fields( 'cerberus-'.$active_tab ); // option group name, the same as used in register_setting().
291
+ do_settings_sections( 'cerber-'.$active_tab ); // the same as used in add_settings_section() $page
292
+ echo '<div style="padding-left: 220px">';
293
+ submit_button();
294
+ echo '</div>';
295
+ echo '</form>';
296
+ }
297
+ /*
298
+ * Prepare values to display.
299
+ * Generate HTML for one input field on the settings page.
300
+ *
301
+ *
302
+ */
303
+ function cerberus_field_show($args){
304
+
305
+ $settings = get_site_option('cerber-'.$args['group']);
306
+ if ( is_array( $settings ) ) {
307
+ array_walk_recursive( $settings, 'esc_html' );
308
+ }
309
+ $pre = '';
310
+ $value = '';
311
+ if ( ! empty( $args['label'] ) ) {
312
+ $label = $args['label'];
313
+ } else {
314
+ $label = '';
315
+ }
316
+ if ( isset( $args['option'] ) ) {
317
+ if ( isset( $settings[ $args['option'] ] ) ) {
318
+ $value = $settings[ $args['option'] ];
319
+ }
320
+ if ( ( $args['option'] == 'loginnowp' || $args['option'] == 'loginpath' ) && ! get_option( 'permalink_structure' ) ) {
321
+ $disabled = ' disabled="disabled" ';
322
+ }
323
+ else {
324
+ $disabled = '';
325
+ }
326
+ if ( $args['option'] == 'loginpath' ) {
327
+ $pre = rtrim( get_home_url(), '/' ) . '/';
328
+ $value = urldecode( $value );
329
+ }
330
+ elseif ( $args['option'] == 'prohibited' || $args['option'] == 'email' ) {
331
+ if ( is_array( $value ) ) {
332
+ $value = implode( ', ', $value );
333
+ }
334
+ }
335
+ }
336
+
337
+ $name = 'cerber-'.$args['group'].'['.$args['option'].']';
338
+
339
+ switch ($args['type']) {
340
+
341
+ case 'limitz':
342
+ $s1 = $args['group'].'-period';
343
+ $s2 = $args['group'].'-number';
344
+ $s3 = $args['group'].'-within';
345
+
346
+ $html=sprintf( $args['label'] ,
347
+ '<input type="text" name="cerber-'.$args['group'].'['.$s1.']" value="'.$settings[$s1].'" size="3" maxlength="3" />',
348
+ '<input type="text" name="cerber-'.$args['group'].'['.$s2.']" value="'.$settings[$s2].'" size="3" maxlength="3" />',
349
+ '<input type="text" name="cerber-'.$args['group'].'['.$s3.']" value="'.$settings[$s3].'" size="3" maxlength="3" />');
350
+ break;
351
+
352
+ case 'attempts':
353
+ $html=sprintf(__('%s allowed retries in %s minutes','wp-cerber'),
354
+ '<input type="text" id="attempts" name="cerber-'.$args['group'].'[attempts]" value="'.$settings['attempts'].'" size="3" maxlength="3" />',
355
+ '<input type="text" id="period" name="cerber-'.$args['group'].'[period]" value="'.$settings['period'].'" size="3" maxlength="3" />');
356
+ break;
357
+ case 'aggressive':
358
+ $html=sprintf(__('Increase lockout duration to %s hours after %s lockouts in the last %s hours','wp-cerber'),
359
+ '<input type="text" id="agperiod" name="cerber-'.$args['group'].'[agperiod]" value="'.$settings['agperiod'].'" size="3" maxlength="3" />',
360
+ '<input type="text" id="aglocks" name="cerber-'.$args['group'].'[aglocks]" value="'.$settings['aglocks'].'" size="3" maxlength="3" />',
361
+ '<input type="text" id="aglast" name="cerber-'.$args['group'].'[aglast]" value="'.$settings['aglast'].'" size="3" maxlength="3" />');
362
+ break;
363
+ case 'notify':
364
+ $html= '<input type="checkbox" id="'.$args['option'].'" name="cerber-'.$args['group'].'['.$args['option'].']" value="1" '.checked(1,$value,false).$disabled.' /> '
365
+ .__('Notify admin if the number of active lockouts above','wp-cerber').
366
+ ' <input type="text" id="above" name="cerber-'.$args['group'].'[above]" value="'.$settings['above'].'" size="3" maxlength="3" />'.
367
+ ' (<a href="' . wp_nonce_url( add_query_arg( array( 'testnotify' => 'lockout', 'settings-updated' => 0 ) ), 'control', 'cerber_nonce' ) . '">' . __( 'Click to send test', 'wp-cerber' ) . '</a>)';
368
+ break;
369
+ case 'citadel':
370
+ $html=sprintf(__('Enable after %s failed login attempts in last %s minutes','wp-cerber'),
371
+ '<input type="text" id="cilimit" name="cerber-'.$args['group'].'[cilimit]" value="'.$settings['cilimit'].'" size="3" maxlength="3" />',
372
+ '<input type="text" id="ciperiod" name="cerber-'.$args['group'].'[ciperiod]" value="'.$settings['ciperiod'].'" size="3" maxlength="3" />');
373
+ break;
374
+ case 'checkbox':
375
+ //$name = 'cerber-'.$args['group'].'['.$args['option'].']';
376
+ $html='<input type="checkbox" id="'.$args['option'].'" name="'.$name.'" value="1" '.checked(1,$value,false).$disabled.' />';
377
+ $html.= ' <label for="'.$args['option'].'">'.$args['label'].'</label>';
378
+ break;
379
+ case 'textarea':
380
+ //$name = 'cerber-'.$args['group'].'['.$args['option'].']';
381
+ $html='<textarea class="large-text code" id="'.$args['option'].'" name="'.$name.'" '.$disabled.' />'.$value.'</textarea>';
382
+ $html.= '<br><label for="'.$args['option'].'">'.$args['label'].'</label>';
383
+ break;
384
+ case 'select':
385
+ //$name = 'cerber-'.$args['group'].'['.$args['option'].']';
386
+ $html=cerber_select($name,$args['set'],$value);
387
+ break;
388
+ case 'text':
389
+ default:
390
+ //$name = 'cerber-'.$args['group'].'['.$args['option'].']';
391
+ if ( isset( $args['size'] ) ) {
392
+ $size = ' size="' . $args['size'] . '" maxlength="' . $args['size'] . '" ';
393
+ } else {
394
+ $size = '';
395
+ }
396
+ if ( isset( $args['placeholder'] ) ) {
397
+ $plh = ' placeholder="' . $args['placeholder'] . '"';
398
+ } else {
399
+ $plh = '';
400
+ }
401
+ $html = $pre . '<input type="text" id="' . $args['option'] . '" name="'.$name.'" value="' . $value . '"' . $disabled . $size . $plh. '/>';
402
+ $html .= ' <label for="' . $args['option'] . '">' . $label . '</label>';
403
+ break;
404
+ }
405
+
406
+ if (!empty($args['enabled'])){
407
+ $name = 'cerber-'.$args['group'].'['.$args['option'].'-enabled]';
408
+ $value = 0;
409
+ if ( isset( $settings[ $args['option'] . '-enabled' ] ) ) {
410
+ $value = $settings[ $args['option'] . '-enabled' ];
411
+ }
412
+ $checkbox = '<input type="checkbox" id="' . $args['option'] . '-enabled" name="' . $name . '" value="1" ' . checked( 1, $value, false ) . ' /> <label for="' . $args['option'] . '-enabled">' . $args['enabled'] . '</label> ';
413
+ $html = $checkbox . $html;
414
+ }
415
+
416
+ echo $html."\n";
417
+ }
418
+
419
+ /**
420
+ * @param $name string HTML input name
421
+ * @param $list array List of elements
422
+ * @param null $selected Index of selected element in the list
423
+ * @param string $class HTML class
424
+ * @param string $multiple
425
+ *
426
+ * @return string HTML for select element
427
+ */
428
+ function cerber_select($name, $list, $selected = null, $class = '' , $multiple = ''){
429
+ $options = array();
430
+ foreach ($list as $key => $value ) {
431
+ if ($selected == (string)$key) {
432
+ $s = 'selected';
433
+ }
434
+ else $s = '';
435
+ $options[]= '<option value="'.$key.'" '.$s.'>'.htmlspecialchars($value).'</option>';
436
+ }
437
+ if ($multiple) $m = 'multiple="multiple"'; else $m = '';
438
+ return ' <select name="'.$name.'" class="crb-select '.$class.'" '.$m.'>'.implode("\n",$options).'</select>';
439
+ }
440
+
441
+ /*
442
+ Sanitizing users input for Main Settings
443
+ */
444
+ add_filter( 'pre_update_option_'.CERBER_OPT, 'cerber_sanitize_options', 10, 3 );
445
+ function cerber_sanitize_options($new, $old, $option) { // $option added in WP 4.4.0
446
+
447
+ $new['attempts'] = absint( $new['attempts'] );
448
+ $new['period'] = absint( $new['period'] );
449
+ $new['lockout'] = absint( $new['lockout'] );
450
+
451
+ $new['agperiod'] = absint( $new['agperiod'] );
452
+ $new['aglocks'] = absint( $new['aglocks'] );
453
+ $new['aglast'] = absint( $new['aglast'] );
454
+
455
+ if ( get_option( 'permalink_structure' ) ) {
456
+ $new['loginpath'] = urlencode( str_replace( '/', '', $new['loginpath'] ) );
457
+ if ( $new['loginpath'] && $new['loginpath'] != $old['loginpath'] ) {
458
+ $href = get_home_url() . '/' . $new['loginpath'] . '/';
459
+ $url = urldecode( $href );
460
+ $msg = __( 'Attention! You have changed the login URL! The new login URL is', 'wp-cerber' );
461
+ cerber_admin_notice( $msg . ': <a href="' . $href . '">' . $url . '</a>' );
462
+ cerber_send_notify( 'newlurl', $msg . ': ' . $url );
463
+ }
464
+ } else {
465
+ $new['loginpath'] = '';
466
+ $new['loginnowp'] = 0;
467
+ }
468
+
469
+ $new['ciduration'] = absint( $new['ciduration'] );
470
+ $new['cilimit'] = absint( $new['cilimit'] );
471
+ $new['cilimit'] = $new['cilimit'] == 0 ? '' : $new['cilimit'];
472
+ $new['ciperiod'] = absint( $new['ciperiod'] );
473
+ $new['ciperiod'] = $new['ciperiod'] == 0 ? '' : $new['ciperiod'];
474
+ if ( ! $new['cilimit'] ) {
475
+ $new['ciperiod'] = '';
476
+ }
477
+ if ( ! $new['ciperiod'] ) {
478
+ $new['cilimit'] = '';
479
+ }
480
+
481
+ if ( absint( $new['keeplog'] ) == 0 ) {
482
+ $new['keeplog'] = '';
483
+ }
484
+
485
+ return $new;
486
+ }
487
+ /*
488
+ Sanitizing/checking user input for User tab settings
489
+ */
490
+ add_filter( 'pre_update_option_'.CERBER_OPT_U, 'cerber_sanitize_u', 10, 3 );
491
+ function cerber_sanitize_u($new, $old, $option) { // $option added in WP 4.4.0
492
+ if ( ! is_array( $new['prohibited'] ) ) {
493
+ $list = explode( ',', $new['prohibited'] );
494
+ } else {
495
+ $list = $new['prohibited'];
496
+ }
497
+ $list = array_map('trim', $list);
498
+ $list = array_filter($list);
499
+ $list = array_unique($list);
500
+ $new['prohibited'] = $list;
501
+ return $new;
502
+ }
503
+ /*
504
+ Sanitizing/checking user input for reCAPTCHA tab settings
505
+ */
506
+ add_filter( 'pre_update_option_'.CERBER_OPT_C, 'cerber_sanitize_c', 10, 3 );
507
+ function cerber_sanitize_c($new, $old, $option) {
508
+ global $wp_cerber;
509
+ // Check ability to make external HTTP requests
510
+ if ($wp_cerber && !empty($new['sitekey']) && !empty($new['secretkey'])) {
511
+ if (!$goo = $wp_cerber->reCaptchaRequest('1')) {
512
+ $labels = cerber_get_labels( 'activity' );
513
+ cerber_admin_notice( __( 'ERROR:', 'wp-cerber' ) . ' ' . $labels[42] );
514
+ cerber_log( 42 );
515
+ }
516
+ }
517
+
518
+ $new['recaptcha-period'] = absint( $new['recaptcha-period'] );
519
+ $new['recaptcha-number'] = absint( $new['recaptcha-number'] );
520
+ $new['recaptcha-within'] = absint( $new['recaptcha-within'] );
521
+
522
+ return $new;
523
+ }
524
+ /*
525
+ Sanitizing/checking user input for Notifications tab settings
526
+ */
527
+ add_filter( 'pre_update_option_'.CERBER_OPT_N, 'cerber_sanitize_n', 10, 3 );
528
+ function cerber_sanitize_n($new, $old, $option) {
529
+
530
+ if ( ! empty( $new['email'] ) ) {
531
+ if ( ! is_array( $new['email'] ) ) {
532
+ $list = explode( ',', $new['email'] );
533
+ } else {
534
+ $list = $new['email'];
535
+ }
536
+ $list = array_map('trim', $list);
537
+ $list = array_filter($list);
538
+ $list = array_unique($list);
539
+ foreach ( $list as $item ) {
540
+ if (!is_email( $item )) cerber_admin_notice( __( '<strong>ERROR</strong>: please enter a valid email address.' ) );
541
+ }
542
+ $new['email'] = $list;
543
+ }
544
+ $new['emailrate'] = absint( $new['emailrate'] );
545
+
546
+ // set 'default' value for device setting if a new token has been entered
547
+ if ( $new['pbtoken'] != $old['pbtoken'] ) {
548
+ $list = cerber_pb_get_devices($new['pbtoken']);
549
+ if (is_array($list) && !empty($list)) $new['pbdevice'] = 'all';
550
+ else $new['pbdevice'] = '';
551
+ }
552
+
553
+ return $new;
554
+ }
555
+ /**
556
+ * Let's sanitize them all
557
+ * @since 4.1
558
+ *
559
+ */
560
+ add_filter( 'pre_update_option','cerber_o_o_sanitizer', 10 , 3);
561
+ function cerber_o_o_sanitizer($value, $option, $old_value) {
562
+ if (in_array($option, array(CERBER_OPT, CERBER_OPT_H, CERBER_OPT_U, CERBER_OPT_C, CERBER_OPT_N))){
563
+ if (is_array($value)){
564
+ array_walk_recursive($value, function (&$element, $key) {
565
+ if (!is_array($element)) $element = sanitize_text_field($element);
566
+ });
567
+ }
568
+ else {
569
+ $value = sanitize_text_field($value);
570
+ }
571
+ }
572
+ return $value;
573
+ }
574
+
575
+ /*
576
+ * Save settings on the multisite WP.
577
+ * Process POST Form for settings screens.
578
+ * Because Settings API doesn't work in multisite mode!
579
+ *
580
+ */
581
+ if (is_multisite()) {
582
+ add_action('admin_init', 'cerber_ms_update');
583
+ }
584
+ function cerber_ms_update() {
585
+ if ( $_SERVER['REQUEST_METHOD'] != 'POST' || ! isset( $_POST['action'] ) || $_POST['action'] != 'update' ) {
586
+ return;
587
+ }
588
+ if ( ! isset( $_POST['option_page'] ) || false === strpos( $_POST['option_page'], 'cerberus-' ) ) {
589
+ return;
590
+ }
591
+ if ( ! current_user_can( 'manage_options' ) ) {
592
+ return;
593
+ }
594
+
595
+ // See wp_nonce_field() in the settings_fields() function
596
+ check_admin_referer($_POST['option_page'].'-options');
597
+
598
+ $opt_name = 'cerber-' . substr( $_POST['option_page'], 9 ); // 8 = length of 'cerberus-'
599
+
600
+ $old = (array) get_site_option( $opt_name );
601
+ $new = $_POST[ $opt_name ];
602
+ $new = apply_filters( 'pre_update_option_' . $opt_name, $new, $old, $opt_name );
603
+ update_site_option( $opt_name, $new );
604
+ }
605
+
606
+ /*
607
+ * Default settings
608
+ *
609
+ */
610
+ function cerber_get_defaults($field = null) {
611
+ $all_defaults = array(
612
+ CERBER_OPT => array(
613
+ 'attempts' => 3,
614
+ 'period' => 60,
615
+ 'lockout' => 60,
616
+ 'agperiod' => 24,
617
+ 'aglocks' => 2,
618
+ 'aglast' => 4,
619
+ 'limitwhite' => 0,
620
+ 'notify' => 1,
621
+ 'above' => 3,
622
+
623
+ 'proxy' => 0,
624
+
625
+ 'subnet' => 0,
626
+ 'nonusers' => 1,
627
+ 'wplogin' => 0,
628
+ 'noredirect' => 1,
629
+ 'page404' => 0,
630
+
631
+ 'loginpath' => '',
632
+ 'loginnowp' => 0,
633
+
634
+ 'cilimit' => 200,
635
+ 'ciperiod' => 30,
636
+ 'ciduration' => 60,
637
+ 'ciwhite' => 1,
638
+ 'cinotify' => 1,
639
+
640
+ 'keeplog' => 30,
641
+ 'ip_extra' => 1,
642
+ 'cerberlab' => 0,
643
+ 'cerberproto' => 0,
644
+ 'usefile' => 0,
645
+ 'dateformat' => ''
646
+
647
+ ),
648
+ CERBER_OPT_H => array(
649
+ 'stopenum' => 1,
650
+ 'xmlrpc' => 0,
651
+ 'nofeeds' => 0,
652
+ 'norest' => 1,
653
+ 'hashauthor' => 0,
654
+ 'cleanhead' => 1,
655
+ ),
656
+ CERBER_OPT_U => array(
657
+ 'prohibited' => array(),
658
+ 'auth_expire' => '',
659
+ ),
660
+ CERBER_OPT_C => array(
661
+ 'botscomm' => 1,
662
+ 'botsreg' => 1,
663
+ 'spamcomm' => 0,
664
+ 'trashafter' => 7,
665
+ 'trashafter-enabled' => 0,
666
+ 'sitekey' => '',
667
+ 'secretkey' => '',
668
+ 'invirecap' => 0,
669
+ 'recaplogin' => 0,
670
+ 'recaplost' => 0,
671
+ 'recapreg' => 0,
672
+ 'recapwoologin' => 0,
673
+ 'recapwoolost' => 0,
674
+ 'recapwooreg' => 0,
675
+ 'recapcom' => 0,
676
+ 'recapcomauth' => 0,
677
+ 'recaptcha-period' => 60,
678
+ 'recaptcha-number' => 3,
679
+ 'recaptcha-within' => 30,
680
+ ),
681
+ CERBER_OPT_N => array(
682
+ 'email' => '',
683
+ 'emailrate' => 12,
684
+ 'pbtoken' => '',
685
+ 'pbdevice' => '',
686
+ )
687
+ );
688
+ if ( $field ) {
689
+ foreach ( $all_defaults as $option ) {
690
+ if ( isset( $option[ $field ] ) ) {
691
+ return $option[ $field ];
692
+ }
693
+ }
694
+ return false;
695
+ } else {
696
+ return $all_defaults;
697
+ }
698
+ }
699
+
700
+ /*
701
+ *
702
+ * Right way to save Cerber settings outside of wp-admin settings page
703
+ * @since 2.0
704
+ *
705
+ */
706
+ function cerber_save_options($options){
707
+ foreach ( cerber_get_defaults() as $option_name => $fields ) {
708
+ $save=array();
709
+ foreach ( $fields as $field_name => $def ) {
710
+ if (isset($options[$field_name])) $save[$field_name]=$options[$field_name];
711
+ }
712
+ if (!empty($save)) {
713
+ $result = update_site_option($option_name,$save);
714
+ }
715
+ }
716
+ }
717
+
718
+ /**
719
+ *
720
+ * @deprecated since 4.0 use $wp_cerber->getSettings() instead.
721
+ * @param string $option
722
+ *
723
+ * @return array|bool|mixed
724
+ */
725
+ function cerber_get_options($option = '') {
726
+ $options = array( CERBER_OPT, CERBER_OPT_H, CERBER_OPT_U, CERBER_OPT_C, CERBER_OPT_N );
727
+ $united = array();
728
+ foreach ( $options as $opt ) {
729
+ $o = get_site_option( $opt );
730
+ if (!is_array($o)) continue;
731
+ $united = array_merge( $united, $o );
732
+ }
733
+ $options = $united;
734
+ if ( ! empty( $option ) ) {
735
+ if ( isset( $options[ $option ] ) ) {
736
+ return $options[ $option ];
737
+ } else {
738
+ return false;
739
+ }
740
+ }
741
+ return $options;
742
+ }
743
+ /*
744
+ Load default settings, except Custom Login URL
745
+ */
746
+ function cerber_load_defaults() {
747
+ $save = array();
748
+ foreach ( cerber_get_defaults() as $option_name => $fields ) {
749
+ foreach ( $fields as $field_name => $def ) {
750
+ $save[ $field_name ] = $def;
751
+ }
752
+ }
753
+ $old = cerber_get_options();
754
+ if (!empty($old['loginpath'])) $save['loginpath'] = $old['loginpath'];
755
+ cerber_save_options( $save );
756
+ }
757
+ /*
758
+ Email addresses for notification
759
+ */
760
+ function cerber_get_email() {
761
+ global $wp_cerber;
762
+ if (!$email = $wp_cerber->getSettings('email')) $email = get_site_option('admin_email');
763
+ //if (!is_array($email)) $email = array($email);
764
+ if (is_array($email)) $email = implode(',',$email); // @since 4.9
765
+ return $email;
766
+ }
whois.php ADDED
@@ -0,0 +1,465 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Copyright (C) 2015-17 CERBER TECH INC., Gregory Markov, http://wpcerber.com
4
+
5
+ Licenced under the GNU GPL.
6
+
7
+ This program is free software; you can redistribute it and/or modify
8
+ it under the terms of the GNU General Public License as published by
9
+ the Free Software Foundation; either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program; if not, write to the Free Software
19
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20
+
21
+ */
22
+
23
+ /*
24
+
25
+ *========================================================================*
26
+ | |
27
+ | ATTENTION! Do not change or edit this file! |
28
+ | |
29
+ *========================================================================*
30
+
31
+ */
32
+
33
+
34
+ // If this file is called directly, abort executing.
35
+ if ( ! defined( 'WPINC' ) ) { exit; }
36
+
37
+ define('WHOIS_ERR_EXPIRE',300);
38
+ define('WHOIS_OK_EXPIRE',24 * 3600);
39
+ define('WHOIS_IO_TIMEOUT', 3);
40
+
41
+ require_once(dirname(__FILE__).'/ripe.php');
42
+
43
+ /*
44
+ * Get WHOIS about IP
45
+ * @since 2.7
46
+ *
47
+ */
48
+ function cerber_ip_whois_info($ip) {
49
+ $ret = array();
50
+
51
+ $whois_server = cerber_get_whois_server($ip);
52
+ if (is_array($whois_server)) return $whois_server;
53
+
54
+ if ($whois_server == 'whois.ripe.net') {
55
+ return ripe_readable_info($ip);
56
+ }
57
+
58
+ $whois_info = cerber_get_whois($ip);
59
+ if (is_array($whois_info)) return $whois_info;
60
+ $data = cerber_parse_whois_data($whois_info);
61
+
62
+ // Special case - network was transfered to RIPE
63
+ if (isset($data['ReferralServer']) && $data['ReferralServer'] == 'whois://whois.ripe.net') {
64
+ return ripe_readable_info($ip);
65
+ }
66
+
67
+ $table1 = '';
68
+ if (!empty($data)) {
69
+ $table1 = '<table class="whois-object"><tr><td colspan="2"><b>FILTERED WHOIS INFO</b></td></tr>';
70
+ foreach ( $data as $key => $value ) {
71
+ if (is_email($value)) $value = '<a href="mailto:'.$value.'">'.$value.'</a>';
72
+ elseif (strtolower($key) == 'country') {
73
+ $value = '<b><span '.cerber_get_flag_css($value).'>'.cerber_country_name($value).'</span> ('.$value.')</b>';
74
+ $ret['country'] = $value;
75
+ }
76
+
77
+ $table1.='<tr><td>'.$key.'</td><td>'.$value.'</td></tr>';
78
+ }
79
+ $table1.='</table>';
80
+ }
81
+
82
+ $table2 ='<table class="whois-object raw"><tr><td><b>RAW WHOIS INFO</b></td></tr>';
83
+ $table2.='<tr><td><pre>'.$whois_info."\n WHOIS server: ".$whois_server.'</pre></td></tr>';
84
+ $table2.='</table>';
85
+
86
+ $info = $table1.$table2;
87
+
88
+ // Other possible field with abuse email address
89
+ if (empty($data['abuse-mailbox']) && !empty($data['OrgAbuseEmail'])){
90
+ $data['abuse-mailbox'] = $data['OrgAbuseEmail'];
91
+ }
92
+ if (empty($data['abuse-mailbox'])){
93
+ foreach ($data as $field){
94
+ $maybe_email = trim($field);
95
+ if (false !== strpos($maybe_email,'abuse') && is_email($maybe_email)){
96
+ $data['abuse-mailbox'] = $maybe_email;
97
+ break;
98
+ }
99
+ }
100
+ }
101
+
102
+ // Network
103
+ if (!empty($data['inetnum'])){
104
+ $data['network'] = $data['inetnum'];
105
+ }
106
+ elseif (!empty($data['NetRange'])){
107
+ $data['network'] = $data['NetRange'];
108
+ }
109
+
110
+ $ret['data'] = $data;
111
+ $ret['whois'] = $info;
112
+ return $ret;
113
+ }
114
+ /*
115
+ * Get WHOIS info fro given IP
116
+ * @since 2.7
117
+ *
118
+ */
119
+ function cerber_get_whois($ip){
120
+ $key = 'WHS-'.cerber_get_id_ip($ip);
121
+ $info = get_transient($key);
122
+ if (false === $info) {
123
+ $whois_server = cerber_get_whois_server($ip);
124
+ if (is_array($whois_server)) return $whois_server;
125
+ $info = make_whois_request($whois_server, $ip);
126
+ if (is_array($info)) return $info;
127
+ set_transient( $key, $info , WHOIS_OK_EXPIRE );
128
+ }
129
+ return $info;
130
+ }
131
+ /*
132
+ * Find out what is server storing WHOIS info for given IP
133
+ * @since 2.7
134
+ *
135
+ */
136
+ function cerber_get_whois_server($ip){
137
+ $key = 'SRV-'.cerber_get_id_ip($ip);
138
+ $server = get_transient($key);
139
+ if (false === $server) {
140
+ $w = make_whois_request( 'whois.iana.org', $ip);
141
+ if (is_array($w)) return $w;
142
+ preg_match( '/^whois\:\s+([\w\.\-]{3,})/m', $w, $data );
143
+ if ( ! isset( $data[1] ) ) return array('error'=>'No WHOIS server was found for IP '.$ip);
144
+ $server = $data[1];
145
+ set_transient( $key, $server , WHOIS_OK_EXPIRE );
146
+ }
147
+ return $server;
148
+ }
149
+ /*
150
+ * Attempt to parse TXT WHOIS response to associative array
151
+ * @since 2.7
152
+ *
153
+ */
154
+ function cerber_parse_whois_data($txt){
155
+ $lines = explode("\n",$txt);
156
+ $lines = array_filter($lines);
157
+ $ret = array();
158
+ foreach ( $lines as $line ) {
159
+ if (preg_match( '/^([\w\-]+)\:\s+(.+)/', trim($line), $data )) $ret[$data[1]] = $data[2];
160
+ }
161
+ return $ret;
162
+ }
163
+ /*
164
+ *
165
+ * Retrieve RAW IP information by using WHOIS protocol
166
+ * @since 2.7
167
+ *
168
+ */
169
+ function make_whois_request($server, $ip) {
170
+ if (!$f = fsockopen( $server, 43, $errno, $errstr, WHOIS_IO_TIMEOUT )) return array('error'=>$errstr.' (WHOIS: '.$server.').');
171
+ #Set the timeout for answering
172
+ if (!stream_set_timeout($f,WHOIS_IO_TIMEOUT)) return array('error'=>'WHOIS: Unable to set IO timeout.');
173
+ #Send the IP address to the whois server
174
+ if (false === fwrite($f, "$ip\r\n" )) return array('error'=>'WHOIS: Unable to send request to remote WHOIS server ('.$server.').');
175
+ //Set the timeout limit for reading again
176
+ if (!stream_set_timeout($f,WHOIS_IO_TIMEOUT)) return array('error'=>'WHOIS: Unable to set IO timeout.');
177
+ //Set socket in non-blocking mode
178
+ if (!stream_set_blocking( $f, 0 )) return array('error'=>'WHOIS: Unable to set IO non-blocking mode.');
179
+ //If connection still valid
180
+ if ($f) {
181
+ $data = '';
182
+ while (!feof($f)) {
183
+ $data .= fread($f,256);
184
+ }
185
+ }
186
+ else return array('error'=>'Unable to get WHOIS response.');
187
+ if (!$data) return array('error'=>'Remote WHOIS server return empty response ('.$server.').');
188
+ return $data;
189
+ }
190
+ /*
191
+ * Tiny national flag by country code
192
+ * @since 2.7
193
+ *
194
+ */
195
+ function cerber_get_flag_css($code){
196
+ $assets_url = plugin_dir_url(CERBER_FILE).'assets';
197
+ return 'style="padding-left: 24px; background: url(\''.$assets_url.'/flags/'.strtolower($code).'.gif\') no-repeat left;"';
198
+ }
199
+ /*
200
+ *
201
+ * Country name from two letter code
202
+ * ISO 3166-1 alpha-2
203
+ * @since 2.7
204
+ *
205
+ */
206
+ function cerber_country_name($code) {
207
+ global $cerber_country_names;
208
+ $code = strtoupper($code);
209
+ if (isset($cerber_country_names[$code])) return $cerber_country_names[$code];
210
+ return __('Unknown','wp-cerber');
211
+ }
212
+
213
+ $cerber_country_names = array(
214
+ 'AF' => 'AFGHANISTAN',
215
+ 'AL' => 'ALBANIA',
216
+ 'AX' => 'Åland Islands',
217
+ 'DZ' => 'ALGERIA',
218
+ 'AS' => 'AMERICAN SAMOA',
219
+ 'AD' => 'ANDORRA',
220
+ 'AO' => 'ANGOLA',
221
+ 'AI' => 'ANGUILLA',
222
+ 'AQ' => 'ANTARCTICA',
223
+ 'AG' => 'ANTIGUA AND BARBUDA',
224
+ 'AR' => 'ARGENTINA',
225
+ 'AM' => 'ARMENIA',
226
+ 'AW' => 'ARUBA',
227
+ 'AU' => 'AUSTRALIA',
228
+ 'AT' => 'AUSTRIA',
229
+ 'AZ' => 'AZERBAIJAN',
230
+ 'BS' => 'BAHAMAS',
231
+ 'BH' => 'BAHRAIN',
232
+ 'BD' => 'BANGLADESH',
233
+ 'BB' => 'BARBADOS',
234
+ 'BY' => 'BELARUS',
235
+ 'BE' => 'BELGIUM',
236
+ 'BZ' => 'BELIZE',
237
+ 'BJ' => 'BENIN',
238
+ 'BM' => 'BERMUDA',
239
+ 'BT' => 'BHUTAN',
240
+ 'BO' => 'BOLIVIA, PLURINATIONAL STATE OF',
241
+ 'BQ' => 'BONAIRE, SINT EUSTATIUS AND SABA',
242
+ 'BA' => 'BOSNIA AND HERZEGOVINA',
243
+ 'BW' => 'BOTSWANA',
244
+ 'BV' => 'BOUVET ISLAND',
245
+ 'BR' => 'BRAZIL',
246
+ 'IO' => 'BRITISH INDIAN OCEAN TERRITORY',
247
+ 'BN' => 'BRUNEI DARUSSALAM',
248
+ 'BG' => 'BULGARIA',
249
+ 'BF' => 'BURKINA FASO',
250
+ 'BI' => 'BURUNDI',
251
+ 'KH' => 'CAMBODIA',
252
+ 'CM' => 'CAMEROON',
253
+ 'CA' => 'CANADA',
254
+ 'CV' => 'CAPE VERDE',
255
+ 'KY' => 'CAYMAN ISLANDS',
256
+ 'CF' => 'CENTRAL AFRICAN REPUBLIC',
257
+ 'TD' => 'CHAD',
258
+ 'CL' => 'CHILE',
259
+ 'CN' => 'CHINA',
260
+ 'CX' => 'CHRISTMAS ISLAND',
261
+ 'CC' => 'COCOS (KEELING) ISLANDS',
262
+ 'CO' => 'COLOMBIA',
263
+ 'KM' => 'COMOROS',
264
+ 'CG' => 'CONGO',
265
+ 'CD' => 'CONGO, THE DEMOCRATIC REPUBLIC OF THE',
266
+ 'CK' => 'COOK ISLANDS',
267
+ 'CR' => 'COSTA RICA',
268
+ 'CI' => 'COTE DIVOIRE',
269
+ 'HR' => 'CROATIA',
270
+ 'CU' => 'CUBA',
271
+ 'CW' => 'CURACAO',
272
+ 'CY' => 'CYPRUS',
273
+ 'CZ' => 'CZECH REPUBLIC',
274
+ 'DK' => 'DENMARK',
275
+ 'DJ' => 'DJIBOUTI',
276
+ 'DM' => 'DOMINICA',
277
+ 'DO' => 'DOMINICAN REPUBLIC',
278
+ 'EC' => 'ECUADOR',
279
+ 'EG' => 'EGYPT',
280
+ 'SV' => 'EL SALVADOR',
281
+ 'GQ' => 'EQUATORIAL GUINEA',
282
+ 'ER' => 'ERITREA',
283
+ 'EE' => 'ESTONIA',
284
+ 'ET' => 'ETHIOPIA',
285
+ 'EU' => 'European Union',
286
+ 'EZ' => 'Eurozone',
287
+ 'FK' => 'FALKLAND ISLANDS (MALVINAS)',
288
+ 'FO' => 'FAROE ISLANDS',
289
+ 'FJ' => 'FIJI',
290
+ 'FI' => 'FINLAND',
291
+ 'FR' => 'FRANCE',
292
+ 'GF' => 'FRENCH GUIANA',
293
+ 'PF' => 'FRENCH POLYNESIA',
294
+ 'TF' => 'FRENCH SOUTHERN TERRITORIES',
295
+ 'GA' => 'GABON',
296
+ 'GM' => 'GAMBIA',
297
+ 'GE' => 'GEORGIA',
298
+ 'DE' => 'GERMANY',
299
+ 'GH' => 'GHANA',
300
+ 'GI' => 'GIBRALTAR',
301
+ 'GR' => 'GREECE',
302
+ 'GL' => 'GREENLAND',
303
+ 'GD' => 'GRENADA',
304
+ 'GP' => 'GUADELOUPE',
305
+ 'GU' => 'GUAM',
306
+ 'GT' => 'GUATEMALA',
307
+ 'GG' => 'GUERNSEY',
308
+ 'GN' => 'GUINEA',
309
+ 'GW' => 'GUINEA-BISSAU',
310
+ 'GY' => 'GUYANA',
311
+ 'HT' => 'HAITI',
312
+ 'HM' => 'HEARD ISLAND AND MCDONALD ISLANDS',
313
+ 'VA' => 'HOLY SEE (VATICAN CITY STATE)',
314
+ 'HN' => 'HONDURAS',
315
+ 'HK' => 'HONG KONG',
316
+ 'HU' => 'HUNGARY',
317
+ 'IS' => 'ICELAND',
318
+ 'IN' => 'INDIA',
319
+ 'ID' => 'INDONESIA',
320
+ 'IR' => 'IRAN, ISLAMIC REPUBLIC OF',
321
+ 'IQ' => 'IRAQ',
322
+ 'IE' => 'IRELAND',
323
+ 'IM' => 'ISLE OF MAN',
324
+ 'IL' => 'ISRAEL',
325
+ 'IT' => 'ITALY',
326
+ 'JM' => 'JAMAICA',
327
+ 'JP' => 'JAPAN',
328
+ 'JE' => 'JERSEY',
329
+ 'JO' => 'JORDAN',
330
+ 'KZ' => 'KAZAKHSTAN',
331
+ 'KE' => 'KENYA',
332
+ 'KI' => 'KIRIBATI',
333
+ 'KP' => 'KOREA, DEMOCRATIC PEOPLES REPUBLIC OF',
334
+ 'KR' => 'KOREA, REPUBLIC OF',
335
+ 'KW' => 'KUWAIT',
336
+ 'KG' => 'KYRGYZSTAN',
337
+ 'LA' => 'LAO PEOPLES DEMOCRATIC REPUBLIC',
338
+ 'LV' => 'LATVIA',
339
+ 'LB' => 'LEBANON',
340
+ 'LS' => 'LESOTHO',
341
+ 'LR' => 'LIBERIA',
342
+ 'LY' => 'LIBYA',
343
+ 'LI' => 'LIECHTENSTEIN',
344
+ 'LT' => 'LITHUANIA',
345
+ 'LU' => 'LUXEMBOURG',
346
+ 'MO' => 'MACAO',
347
+ 'MK' => 'MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF',
348
+ 'MG' => 'MADAGASCAR',
349
+ 'MW' => 'MALAWI',
350
+ 'MY' => 'MALAYSIA',
351
+ 'MV' => 'MALDIVES',
352
+ 'ML' => 'MALI',
353
+ 'MT' => 'MALTA',
354
+ 'MH' => 'MARSHALL ISLANDS',
355
+ 'MQ' => 'MARTINIQUE',
356
+ 'MR' => 'MAURITANIA',
357
+ 'MU' => 'MAURITIUS',
358
+ 'YT' => 'MAYOTTE',
359
+ 'MX' => 'MEXICO',
360
+ 'FM' => 'MICRONESIA, FEDERATED STATES OF',
361
+ 'MD' => 'MOLDOVA, REPUBLIC OF',
362
+ 'MC' => 'MONACO',
363
+ 'MN' => 'MONGOLIA',
364
+ 'ME' => 'MONTENEGRO',
365
+ 'MS' => 'MONTSERRAT',
366
+ 'MA' => 'MOROCCO',
367
+ 'MZ' => 'MOZAMBIQUE',
368
+ 'MM' => 'MYANMAR',
369
+ 'NA' => 'NAMIBIA',
370
+ 'NR' => 'NAURU',
371
+ 'NP' => 'NEPAL',
372
+ 'NL' => 'NETHERLANDS',
373
+ 'NC' => 'NEW CALEDONIA',
374
+ 'NZ' => 'NEW ZEALAND',
375
+ 'NI' => 'NICARAGUA',
376
+ 'NE' => 'NIGER',
377
+ 'NG' => 'NIGERIA',
378
+ 'NU' => 'NIUE',
379
+ 'NF' => 'NORFOLK ISLAND',
380
+ 'MP' => 'NORTHERN MARIANA ISLANDS',
381
+ 'NO' => 'NORWAY',
382
+ 'OM' => 'OMAN',
383
+ 'PK' => 'PAKISTAN',
384
+ 'PW' => 'PALAU',
385
+ 'PS' => 'PALESTINE, STATE OF',
386
+ 'PA' => 'PANAMA',
387
+ 'PG' => 'PAPUA NEW GUINEA',
388
+ 'PY' => 'PARAGUAY',
389
+ 'PE' => 'PERU',
390
+ 'PH' => 'PHILIPPINES',
391
+ 'PN' => 'PITCAIRN',
392
+ 'PL' => 'POLAND',
393
+ 'PT' => 'PORTUGAL',
394
+ 'PR' => 'PUERTO RICO',
395
+ 'QA' => 'QATAR',
396
+ 'RE' => 'REUNION',
397
+ 'RO' => 'ROMANIA',
398
+ 'RU' => 'RUSSIAN FEDERATION',
399
+ 'RW' => 'RWANDA',
400
+ 'BL' => 'SAINT BARTHÉLEMY',
401
+ 'SH' => 'SAINT HELENA, ASCENSION AND TRISTAN DA CUNHA',
402
+ 'KN' => 'SAINT KITTS AND NEVIS',
403
+ 'LC' => 'SAINT LUCIA',
404
+ 'MF' => 'SAINT MARTIN (FRENCH PART)',
405
+ 'PM' => 'SAINT PIERRE AND MIQUELON',
406
+ 'VC' => 'SAINT VINCENT AND THE GRENADINES',
407
+ 'WS' => 'SAMOA',
408
+ 'SM' => 'SAN MARINO',
409
+ 'ST' => 'SAO TOME AND PRINCIPE',
410
+ 'SA' => 'SAUDI ARABIA',
411
+ 'SN' => 'SENEGAL',
412
+ 'RS' => 'SERBIA',
413
+ 'SC' => 'SEYCHELLES',
414
+ 'SL' => 'SIERRA LEONE',
415
+ 'SG' => 'SINGAPORE',
416
+ 'SX' => 'SINT MAARTEN (DUTCH PART)',
417
+ 'SK' => 'SLOVAKIA',
418
+ 'SI' => 'SLOVENIA',
419
+ 'SB' => 'SOLOMON ISLANDS',
420
+ 'SO' => 'SOMALIA',
421
+ 'ZA' => 'SOUTH AFRICA',
422
+ 'GS' => 'SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS',
423
+ 'SS' => 'SOUTH SUDAN',
424
+ 'ES' => 'SPAIN',
425
+ 'LK' => 'SRI LANKA',
426
+ 'SD' => 'SUDAN',
427
+ 'SR' => 'SURINAME',
428
+ 'SJ' => 'SVALBARD AND JAN MAYEN',
429
+ 'SZ' => 'SWAZILAND',
430
+ 'SE' => 'SWEDEN',
431
+ 'CH' => 'SWITZERLAND',
432
+ 'SY' => 'SYRIAN ARAB REPUBLIC',
433
+ 'TW' => 'TAIWAN, PROVINCE OF CHINA',
434
+ 'TJ' => 'TAJIKISTAN',
435
+ 'TZ' => 'TANZANIA, UNITED REPUBLIC OF',
436
+ 'TH' => 'THAILAND',
437
+ 'TL' => 'TIMOR-LESTE',
438
+ 'TG' => 'TOGO',
439
+ 'TK' => 'TOKELAU',
440
+ 'TO' => 'TONGA',
441
+ 'TT' => 'TRINIDAD AND TOBAGO',
442
+ 'TN' => 'TUNISIA',
443
+ 'TR' => 'TURKEY',
444
+ 'TM' => 'TURKMENISTAN',
445
+ 'TC' => 'TURKS AND CAICOS ISLANDS',
446
+ 'TV' => 'TUVALU',
447
+ 'UG' => 'UGANDA',
448
+ 'UA' => 'UKRAINE',
449
+ 'AE' => 'UNITED ARAB EMIRATES',
450
+ 'GB' => 'UNITED KINGDOM',
451
+ 'US' => 'UNITED STATES',
452
+ 'UM' => 'UNITED STATES MINOR OUTLYING ISLANDS',
453
+ 'UY' => 'URUGUAY',
454
+ 'UZ' => 'UZBEKISTAN',
455
+ 'VU' => 'VANUATU',
456
+ 'VE' => 'VENEZUELA, BOLIVARIAN REPUBLIC OF',
457
+ 'VN' => 'VIET NAM',
458
+ 'VG' => 'VIRGIN ISLANDS, BRITISH',
459
+ 'VI' => 'VIRGIN ISLANDS, U.S.',
460
+ 'WF' => 'WALLIS AND FUTUNA',
461
+ 'EH' => 'WESTERN SAHARA',
462
+ 'YE' => 'YEMEN',
463
+ 'ZM' => 'ZAMBIA',
464
+ 'ZW' => 'ZIMBABWE'
465
+ );
wp-cerber.php ADDED
@@ -0,0 +1,3295 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Plugin Name: WP Cerber Security
4
+ Plugin URI: http://wpcerber.com
5
+ Description: Protects site from brute force attacks, bots and hackers. Antispam protection with reCAPTCHA. Comprehensive control of user activity. Restrict login by IP access lists. Limit login attempts. Know more: <a href="http://wpcerber.com">wpcerber.com</a>.
6
+ Author: Gregory
7
+ Author URI: http://wpcerber.com
8
+ Version: 5.0
9
+ Text Domain: wp-cerber
10
+ Domain Path: /languages
11
+ Network: true
12
+
13
+ Copyright (C) 2015-17 CERBER TECH INC., Gregory Markov, http://wpcerber.com
14
+ Flag icons - http://www.famfamfam.com
15
+
16
+ Licenced under the GNU GPL.
17
+
18
+ This program is free software; you can redistribute it and/or modify
19
+ it under the terms of the GNU General Public License as published by
20
+ the Free Software Foundation; either version 3 of the License, or
21
+ (at your option) any later version.
22
+
23
+ This program is distributed in the hope that it will be useful,
24
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
25
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26
+ GNU General Public License for more details.
27
+
28
+ You should have received a copy of the GNU General Public License
29
+ along with this program; if not, write to the Free Software
30
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
31
+
32
+ */
33
+ /*
34
+
35
+
36
+
37
+ ▄████▄ ▓█████ ██▀███ ▄▄▄▄ ▓█████ ██▀███
38
+ ▒██▀ ▀█ ▓█ ▀ ▓██ ▒ ██▒ ▓█████▄ ▓█ ▀ ▓██ ▒ ██▒
39
+ ▒▓█ ▄ ▒███ ▓██ ░▄█ ▒ ▒██▒ ▄██ ▒███ ▓██ ░▄█ ▒
40
+ ▒▓▓▄ ▄██▒ ▒▓█ ▄ ▒██▀▀█▄ ▒██░█▀ ▒▓█ ▄ ▒██▀▀█▄
41
+ ▒ ▓███▀ ░ ░▒████▒ ░██▓ ▒██▒ ░▓█ ▀█▓ ░▒████▒ ░██▓ ▒██▒
42
+ ░ ░▒ ▒ ░ ░░ ▒░ ░ ░ ▒▓ ░▒▓░ ░▒▓███▀▒ ░░ ▒░ ░ ░ ▒▓ ░▒▓░
43
+ ░ ▒ ░ ░ ░ ░▒ ░ ▒░ ▒░▒ ░ ░ ░ ░ ░▒ ░ ▒░
44
+ ░ ░ ░░ ░ ░ ░ ░ ░░ ░
45
+ ░ ░ ░ ░ ░ ░ ░ ░ ░
46
+ ░ ░
47
+
48
+
49
+
50
+
51
+ *========================================================================*
52
+ | |
53
+ | ATTENTION! Do not change or edit this file! |
54
+ | |
55
+ *========================================================================*
56
+
57
+ */
58
+
59
+ // If this file is called directly, abort executing.
60
+ if ( ! defined( 'WPINC' ) ) { exit; }
61
+
62
+ define( 'CERBER_VER', '5.0' );
63
+ define( 'CERBER_LOG_TABLE', 'cerber_log' );
64
+ define( 'CERBER_ACL_TABLE', 'cerber_acl' );
65
+ define( 'CERBER_BLOCKS_TABLE', 'cerber_blocks' );
66
+ define( 'CERBER_LAB_TABLE', 'cerber_lab' );
67
+ define( 'CERBER_LAB_IP_TABLE', 'cerber_lab_ip' );
68
+ define( 'CERBER_LAB_NET_TABLE', 'cerber_lab_net' );
69
+
70
+ define( 'WP_LOGIN_SCRIPT', 'wp-login.php' );
71
+ define( 'WP_REG_URI', 'wp-register.php' );
72
+ define( 'WP_XMLRPC_SCRIPT', 'xmlrpc.php' );
73
+ define( 'WP_TRACKBACK_SCRIPT', 'wp-trackback.php' );
74
+ define( 'WP_PING_SCRIPT', 'wp-trackback.php' );
75
+ define( 'WP_SIGNUP_SCRIPT', 'wp-signup.php' );
76
+
77
+ define( 'GOO_RECAPTCHA_URL', 'https://www.google.com/recaptcha/api/siteverify' );
78
+
79
+ define( 'CERBER_REQ_PHP', '5.3.0' );
80
+ define( 'CERBER_REQ_WP', '4.4' );
81
+ define( 'CERBER_FILE', __FILE__ );
82
+ define( 'CERBER_TECH', 'https://cerber.tech/' );
83
+
84
+ require_once( dirname( __FILE__ ) . '/common.php' );
85
+ require_once( dirname( __FILE__ ) . '/settings.php' );
86
+ require_once( dirname( __FILE__ ) . '/cerber-lab.php' );
87
+ require_once( dirname( __FILE__ ) . '/whois.php' );
88
+ require_once( dirname( __FILE__ ) . '/jetflow.php' );
89
+ require_once( dirname( __FILE__ ) . '/cerber-news.php' );
90
+
91
+ if ( defined( 'WP_ADMIN' ) || defined( 'WP_NETWORK_ADMIN' ) ) {
92
+ // Load dashboard stuff
93
+ require_once( dirname( __FILE__ ) . '/dashboard.php' );
94
+ }
95
+
96
+ cerber_upgrade_all();
97
+
98
+ class WP_Cerber {
99
+ private $remote_ip;
100
+ private $session_id;
101
+ private $status = null;
102
+ private $options;
103
+ private $locked = null; // IP has been locked out
104
+
105
+ private $recaptcha = null; // Can recaptcha be verified with a current request
106
+ private $recaptcha_verified = null; // Is recaptcha successfully verified with a current request
107
+ public $recaptcha_here = null; // Is recaptcha widget enabled on the currently displayed page
108
+
109
+ public $garbage = false; // Garbage has been deleted
110
+
111
+ final function __construct() {
112
+
113
+ //$this->session_id = wp_generate_password( 16, false, false );
114
+ $this->session_id = substr(str_shuffle('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'), 0, 24);
115
+
116
+ // Load settings with filling missing (not-set) array keys
117
+ $this->options = cerber_get_options();
118
+ $keys = array();
119
+ //$defaults = array();
120
+ foreach ( cerber_get_defaults() as $item ) {
121
+ $keys = array_merge( $keys, array_keys( $item ) );
122
+ //$defaults = array_merge( $defaults, $item );
123
+ }
124
+ foreach ( $keys as $key ) {
125
+ if ( ! isset( $this->options[ $key ] ) ) {
126
+ $this->options[ $key ] = null;
127
+ }
128
+ }
129
+
130
+ if ( defined( 'CERBER_IP_KEY' ) ) {
131
+ $this->remote_ip = filter_var( $_SERVER[ CERBER_IP_KEY ], FILTER_VALIDATE_IP );
132
+ }
133
+ elseif ( $this->options['proxy'] && isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
134
+ $list = explode( ',', $_SERVER['HTTP_X_FORWARDED_FOR'] );
135
+ foreach ( $list as $maybe_ip ) {
136
+ $this->remote_ip = filter_var( trim( $maybe_ip ), FILTER_VALIDATE_IP );
137
+ if ( $this->remote_ip ) {
138
+ break;
139
+ }
140
+ }
141
+ if ( ! $this->remote_ip && isset( $_SERVER['HTTP_X_REAL_IP'] ) ) {
142
+ $this->remote_ip = filter_var( $_SERVER['HTTP_X_REAL_IP'], FILTER_VALIDATE_IP );
143
+ }
144
+ } else {
145
+ if ( isset( $_SERVER['REMOTE_ADDR'] ) ) {
146
+ $this->remote_ip = $_SERVER['REMOTE_ADDR'];
147
+ } elseif ( isset( $_SERVER['HTTP_X_REAL_IP'] ) ) {
148
+ $this->remote_ip = $_SERVER['HTTP_X_REAL_IP'];
149
+ } elseif ( isset( $_SERVER['HTTP_CLIENT_IP'] ) ) {
150
+ $this->remote_ip = $_SERVER['HTTP_CLIENT_IP'];
151
+ } elseif ( isset( $_SERVER['SERVER_ADDR'] ) ) {
152
+ $this->remote_ip = $_SERVER['SERVER_ADDR'];
153
+ }
154
+ $this->remote_ip = filter_var( $this->remote_ip, FILTER_VALIDATE_IP );
155
+ }
156
+ // No IP address was found? Roll back to localhost.
157
+ if ( ! $this->remote_ip ) {
158
+ $this->remote_ip = '127.0.0.1';
159
+ } // including WP-CLI, other way is: if defined('WP_CLI')
160
+
161
+
162
+ $this->reCaptchaInit();
163
+
164
+ $this->deleteGarbage();
165
+
166
+ // Condition to check reCAPTCHA
167
+
168
+ add_action( 'login_init', array( $this, 'reCaptchaNow' ) );
169
+
170
+ }
171
+
172
+ final public function getRemoteIp() {
173
+ return $this->remote_ip;
174
+ }
175
+
176
+ final public function getSessionID() {
177
+ return $this->session_id;
178
+ }
179
+
180
+ final public function getStatus() {
181
+ if (isset($this->status)) return $this->status;
182
+
183
+ $this->status = 0; // Default
184
+
185
+ if ( cerber_is_citadel() ) {
186
+ $this->status = 3;
187
+ }
188
+ else {
189
+ //if ( ! cerber_is_allowed( $this->remote_ip ) ) {
190
+ if ( cerber_block_check( $this->remote_ip ) ) {
191
+ $this->status = 2;
192
+ }
193
+ else {
194
+ $tag = cerber_acl_check( $this->remote_ip );
195
+ if ( $tag == 'W' ) {
196
+ //$this->status = 4;
197
+ }
198
+ elseif ( $tag == 'B' || lab_is_blocked($this->remote_ip, false)) {
199
+ $this->status = 1;
200
+ }
201
+ }
202
+ }
203
+
204
+ return $this->status;
205
+ }
206
+
207
+ /*
208
+ Return Error message in context
209
+ */
210
+ final public function getErrorMsg() {
211
+ $status = $this->getStatus();
212
+ switch ( $status ) {
213
+ case 1:
214
+ case 3:
215
+ return apply_filters( 'cerber_msg_blocked', __( 'You are not allowed to log in. Ask your administrator for assistance.', 'wp-cerber' ) , $status);
216
+ case 2:
217
+ $block = cerber_get_block();
218
+ $min = 1 + ( $block->block_until - time() ) / 60;
219
+
220
+ return apply_filters( 'cerber_msg_reached',
221
+ sprintf( __( 'You have reached the login attempts limit. Please try again in %d minutes.', 'wp-cerber' ), $min ),
222
+ $min );
223
+ break;
224
+ default:
225
+ return '';
226
+ }
227
+ }
228
+
229
+ /*
230
+ Return Remain message in context
231
+ */
232
+ final public function getRemainMsg() {
233
+ $acl = !$this->options['limitwhite'];
234
+ $remain = cerber_get_remain_count($this->remote_ip, $acl);
235
+ if ( $remain < $this->options['attempts'] ) {
236
+ if ( $remain == 0 ) {
237
+ $remain = 1; // with some settings or when lockout was manually removed, we need to have 1 attempt.
238
+ }
239
+ return apply_filters( 'cerber_msg_remain',
240
+ sprintf( _n( 'You have only one attempt remaining.', 'You have %d attempts remaining.', $remain, 'wp-cerber' ), $remain ),
241
+ $remain );
242
+ }
243
+
244
+ return false;
245
+ }
246
+
247
+ final public function getSettings( $name = null ) {
248
+ if ( ! empty( $name ) ) {
249
+ if ( isset( $this->options[ $name ] ) ) {
250
+ return $this->options[ $name ];
251
+ } else {
252
+ return false;
253
+ }
254
+ }
255
+
256
+ return $this->options;
257
+ }
258
+
259
+ final public function isProhibited( $username ) {
260
+ if ( empty( $this->options['prohibited'] ) ) {
261
+ return false;
262
+ }
263
+
264
+ return in_array( $username, (array) $this->options['prohibited'] );
265
+ }
266
+
267
+ /**
268
+ * Adding reCAPTCHA widgets
269
+ *
270
+ */
271
+ final public function reCaptchaInit(){
272
+
273
+ if ( $this->status == 4 || empty( $this->options['sitekey'] ) || empty( $this->options['secretkey'] )) return;
274
+
275
+ // Native WP forms
276
+ add_action( 'login_form', function () {
277
+ global $wp_cerber;
278
+ $wp_cerber->reCaptcha( 'widget', 'recaplogin' );
279
+ } );
280
+ add_filter( 'login_form_middle', function ( $value ) {
281
+ global $wp_cerber;
282
+ $value .= $wp_cerber->reCaptcha( 'widget', 'recaplogin', false );
283
+ return $value;
284
+ });
285
+ add_action( 'lostpassword_form', function () {
286
+ global $wp_cerber;
287
+ $wp_cerber->reCaptcha( 'widget', 'recaplost' );
288
+ } );
289
+ add_action( 'register_form', function () {
290
+ global $wp_cerber;
291
+ if ( !did_action( 'woocommerce_register_form_start' ) ) {
292
+ $wp_cerber->reCaptcha( 'widget', 'recapreg' );
293
+ }
294
+ } );
295
+
296
+ // Commenting
297
+ /*
298
+ add_filter( 'comment_form_submit_field', function ( $value ) {
299
+ global $wp_cerber, $post;
300
+ $au = $wp_cerber->getSettings('recapcomauth');
301
+ if (!$au || ($au && !is_user_logged_in())) {
302
+ if (!empty($_COOKIE["cerber-recaptcha-id"]) && $_COOKIE["cerber-recaptcha-id"] == $post->ID){
303
+ echo 'ZZ<div id="cerber-recaptcha-msg">'. __( 'ERROR:', 'wp-cerber' ) .' '. $wp_cerber->reCaptchaMsg('comment').'</div>';
304
+ echo '<script type="text/javascript">document.cookie = "the-recaptcha-id=0";</script>';
305
+ }
306
+ $wp_cerber->reCaptcha( 'widget', 'recapcom' );
307
+ }
308
+ return $value;
309
+ } );
310
+ */
311
+ // $approved = apply_filters( 'pre_comment_approved', $approved, $commentdata );
312
+ /* @since 4.9
313
+ add_action( 'pre_comment_on_post', function ( $comment_post_ID ) {
314
+ global $wp_cerber;
315
+
316
+ if ($wp_cerber->getSettings('recapcomauth') && is_user_logged_in()) return;
317
+
318
+ if ( ! $wp_cerber->reCaptchaValidate('comment', true) ) {
319
+ cerber_log(16);
320
+ setcookie('cerber-recaptcha-id', $comment_post_ID, time() + 60, '/');
321
+ $comments = get_comments( array( 'number' => '1', 'post_id' => $comment_post_ID ) );
322
+ if ($comments) {
323
+ $loc = get_comment_link($comments[0]->comment_ID);
324
+ }
325
+ else {
326
+ $loc = get_permalink($comment_post_ID).'#cerber-recaptcha-msg';
327
+ }
328
+ wp_safe_redirect( $loc );
329
+ exit;
330
+ }
331
+ });
332
+ */
333
+
334
+ // Support for WooCommerce forms: @since 3.8
335
+ add_action( 'woocommerce_login_form', function () {
336
+ global $wp_cerber;
337
+ $wp_cerber->reCaptcha( 'widget', 'recapwoologin' );
338
+ } );
339
+ add_action( 'woocommerce_lostpassword_form', function () {
340
+ global $wp_cerber;
341
+ $wp_cerber->reCaptcha( 'widget', 'recapwoolost' );
342
+ } );
343
+ add_action( 'woocommerce_register_form', function () {
344
+ global $wp_cerber;
345
+ if ( ! did_action( 'woocommerce_register_form_start' ) ) {
346
+ return;
347
+ }
348
+ $wp_cerber->reCaptcha( 'widget', 'recapwooreg' );
349
+ } );
350
+ add_filter( 'woocommerce_process_login_errors', function ( $validation_error ) {
351
+ global $wp_cerber;
352
+ //$wp_cerber->reCaptchaNow();
353
+ if ( ! $wp_cerber->reCaptchaValidate('woologin', true) ) {
354
+
355
+ return new WP_Error( 'incorrect_recaptcha', $wp_cerber->reCaptchaMsg('woocommerce-login'));
356
+ }
357
+ return $validation_error;
358
+ });
359
+ add_filter( 'allow_password_reset', function ( $var ) { // Note: 'allow_password_reset' also is fired in WP itself
360
+ global $wp_cerber;
361
+ if ( isset( $_POST['wc_reset_password'] ) && did_action( 'woocommerce_init' )) {
362
+ //$wp_cerber->reCaptchaNow();
363
+ if ( ! $wp_cerber->reCaptchaValidate( 'woolost' , true) ) {
364
+
365
+ return new WP_Error( 'incorrect_recaptcha', $wp_cerber->reCaptchaMsg('woocommerce-lost'));
366
+ }
367
+ }
368
+ return $var;
369
+ });
370
+ add_filter( 'woocommerce_process_registration_errors', function ( $validation_error ) {
371
+ global $wp_cerber;
372
+ //$wp_cerber->reCaptchaNow();
373
+ if ( ! $wp_cerber->reCaptchaValidate('wooreg' , true) ) {
374
+
375
+ return new WP_Error( 'incorrect_recaptcha', $wp_cerber->reCaptchaMsg('woocommerce-register'));
376
+ }
377
+ return $validation_error;
378
+ });
379
+
380
+ }
381
+
382
+ /**
383
+ * Generates reCAPTCHA HTML
384
+ *
385
+ * @param string $part 'style' or 'widget'
386
+ * @param null $option what plugin setting must be set to show the reCAPTCHA
387
+ * @param bool $echo if false, return the code, otherwise show it
388
+ *
389
+ * @return null|string
390
+ */
391
+ final public function reCaptcha( $part = '', $option = null, $echo = true ) {
392
+ if ( $this->status == 4 || empty( $this->options['sitekey'] ) || empty( $this->options['secretkey'] )
393
+ || ( $option && empty( $this->options[ $option ] ) )
394
+ ) {
395
+ return null;
396
+ }
397
+
398
+ $sitekey = $this->options['sitekey'];
399
+ $ret = '';
400
+
401
+ switch ( $part ) {
402
+ case 'style': // for default login WP form only - fit it in width nicely.
403
+ ?>
404
+ <style type="text/css" media="all">
405
+ #rc-imageselect, .g-recaptcha {
406
+ transform: scale(0.9);
407
+ -webkit-transform: scale(0.9);
408
+ transform-origin: 0 0;
409
+ -webkit-transform-origin: 0 0;
410
+ }
411
+
412
+ .g-recaptcha {
413
+ margin: 16px 0 20px 0;
414
+ }
415
+ </style>
416
+ <?php
417
+ break;
418
+ case 'widget':
419
+ if ( ! empty( $this->options[ $option ] ) ) {
420
+ $this->recaptcha_here = true;
421
+
422
+ //if ($this->options['invirecap']) $ret = '<div data-size="invisible" class="g-recaptcha" data-sitekey="' . $sitekey . '" data-callback="now_submit_the_form" id="cerber-recaptcha" data-badge="bottomright"></div>';
423
+ if ($this->options['invirecap']) {
424
+ $ret = '<span class="cerber-form-marker"></span><div data-size="invisible" class="g-recaptcha" data-sitekey="' . $sitekey . '" data-callback="now_submit_the_form" id="cerber-recaptcha" data-badge="bottomright"></div>';
425
+ }
426
+ else $ret = '<span class="cerber-form-marker"></span><div class="g-recaptcha" data-sitekey="' . $sitekey . '" data-callback="form_button_enabler" id="cerber-recaptcha"></div>';
427
+
428
+ //$ret = '<span class="cerber-form-marker g-recaptcha"></span>';
429
+
430
+ }
431
+ break;
432
+ }
433
+ if ( $echo ) {
434
+ echo $ret;
435
+ $ret = null;
436
+ }
437
+
438
+ return $ret;
439
+ /*
440
+ <script type="text/javascript">
441
+ var onloadCallback = function() {
442
+ //document.getElementById("wp-submit").disabled = true;
443
+ grecaptcha.render("c-recaptcha", {"sitekey" : "<?php echo $sitekey; ?>" });
444
+ //document.getElementById("wp-submit").disabled = false;
445
+ };
446
+ </script>
447
+ <script src = "https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit&hl=<?php echo $lang; ?>" async defer></script>
448
+ */
449
+ }
450
+
451
+ /**
452
+ * Validate reCAPTCHA by calling Google service
453
+ *
454
+ * @param string $form Form ID (slug)
455
+ * @param boolean $force Force validate without pre-checks
456
+ *
457
+ * @return bool true on success false on failure
458
+ */
459
+ final public function reCaptchaValidate($form = null, $force = false) {
460
+ if (!$force) {
461
+ if ( ! $this->recaptcha || $this->status == 4 ) {
462
+ return true;
463
+ }
464
+ }
465
+
466
+ if ($this->recaptcha_verified != null) return $this->recaptcha_verified;
467
+
468
+ if ( $form == 'comment' && $this->options['recapcomauth'] && is_user_logged_in()) return true;
469
+
470
+ if ( ! $form ) {
471
+ $form = isset( $_REQUEST['action'] ) ? $_REQUEST['action'] : 'login';
472
+ }
473
+
474
+ $forms = array( // known pairs: form => specific plugin setting
475
+ 'lostpassword' => 'recaplost',
476
+ 'register' => 'recapreg',
477
+ 'login' => 'recaplogin',
478
+ 'comment' => 'recapcom',
479
+ 'woologin' => 'recapwoologin',
480
+ 'woolost' => 'recapwoolost',
481
+ 'wooreg' => 'recapwooreg',
482
+ );
483
+
484
+ if ( isset( $forms[ $form ] ) ) {
485
+ if ( empty( $this->options[ $forms[ $form ] ] ) ) {
486
+ return true; // no validation is required
487
+ }
488
+ }
489
+ else {
490
+ return true; // we don't know this form
491
+ }
492
+
493
+ if ( empty( $_POST['g-recaptcha-response'] ) ) {
494
+ $this->reCaptchaFailed($form);
495
+ return false;
496
+ }
497
+
498
+ $result = $this->reCaptchaRequest($_POST['g-recaptcha-response']);
499
+ if ( ! $result ) {
500
+ cerber_log( 42 );
501
+ return false;
502
+ }
503
+
504
+ $result = json_decode( $result );
505
+ $result = obj_to_arr_deep( $result );
506
+
507
+ if ( ! empty( $result['success'] ) ) {
508
+ $this->recaptcha_verified = true;
509
+ return true;
510
+ }
511
+ $this->recaptcha_verified = false;
512
+
513
+ if ( ! empty( $result['error-codes'] ) ) {
514
+ if ( in_array( 'invalid-input-secret', (array) $result['error-codes'] ) ) {
515
+ cerber_log( 41 );
516
+ }
517
+ }
518
+
519
+ $this->reCaptchaFailed($form);
520
+
521
+ return false;
522
+ }
523
+
524
+ final function reCaptchaFailed($context = '') {
525
+ cerber_log( 40 );
526
+ if ($this->options['recaptcha-period'] && $this->options['recaptcha-number'] && $this->options['recaptcha-within']) {
527
+ $remain = cerber_get_remain_count($this->remote_ip , true, 40, $this->options['recaptcha-number'], $this->options['recaptcha-within']);
528
+ if ($remain < 1) cerber_block_add( $this->remote_ip, 5 );
529
+ }
530
+ }
531
+
532
+ /**
533
+ * A form with possible reCAPTCHA has been submitted.
534
+ * Allow to process reCAPTCHA by setting a global flag.
535
+ * Must be called before reCaptchaValidate();
536
+ *
537
+ */
538
+ final public function reCaptchaNow() {
539
+ if ( $_SERVER['REQUEST_METHOD'] == 'POST' && $this->options['sitekey'] && $this->options['secretkey'] ) {
540
+ $this->recaptcha = true;
541
+ }
542
+ }
543
+
544
+ /**
545
+ * Make a request to the Google reCaptcha web service
546
+ *
547
+ * @param string $response Google specific field from the submitted form (widget)
548
+ *
549
+ * @return bool|string Response of the Google service or false on failure
550
+ */
551
+ final public function reCaptchaRequest($response = ''){
552
+
553
+ if (!$response) {
554
+ if (!empty($_POST['g-recaptcha-response'])) $response = $_POST['g-recaptcha-response'];
555
+ else return false;
556
+ }
557
+
558
+ $curl = @curl_init(); // @since 4.32
559
+ if (!$curl) {
560
+ cerber_admin_notice(__( 'ERROR:', 'wp-cerber' ) .' Unable to initialize cURL');
561
+ return false;
562
+ }
563
+
564
+ $opt = curl_setopt_array($curl, array(
565
+ CURLOPT_URL => GOO_RECAPTCHA_URL,
566
+ CURLOPT_POST => true,
567
+ CURLOPT_POSTFIELDS => array( 'secret' => $this->options['secretkey'], 'response' => $response ),
568
+ CURLOPT_RETURNTRANSFER => true,
569
+ ));
570
+
571
+ if (!$opt) {
572
+ cerber_admin_notice(__( 'ERROR:', 'wp-cerber' ) .' '. curl_error($curl));
573
+ curl_close($curl);
574
+ return false;
575
+ }
576
+
577
+ $result = curl_exec($curl);
578
+ if (!$result) {
579
+ cerber_admin_notice(__( 'ERROR:', 'wp-cerber' ) .' '. curl_error($curl));
580
+ $result = false;
581
+ }
582
+ curl_close($curl);
583
+
584
+ return $result;
585
+
586
+ }
587
+
588
+ final public function reCaptchaMsg($context = null){
589
+ return apply_filters( 'cerber_msg_recaptcha', __( 'Human verification failed. Please click the square box in the reCAPTCHA block below.', 'wp-cerber' ), $context);
590
+ }
591
+
592
+ final public function setLocked() {
593
+ if ( ! isset( $this->locked ) ) {
594
+ $this->locked = 1;
595
+ }
596
+ }
597
+
598
+ final public function isLocked() {
599
+ if ( ! empty( $this->locked ) ) {
600
+ return 1;
601
+ }
602
+ return 0;
603
+ }
604
+
605
+ final public function deleteGarbage() {
606
+ global $wpdb;
607
+ if ( $this->garbage ) {
608
+ return;
609
+ }
610
+ $wpdb->query( 'DELETE FROM ' . CERBER_BLOCKS_TABLE . ' WHERE block_until < ' . time() );
611
+ $this->garbage = true;
612
+ }
613
+ }
614
+
615
+ global $wp_cerber;
616
+ $wp_cerber = new WP_Cerber();
617
+
618
+
619
+ /*
620
+ *
621
+ * Initialize Cerber
622
+ *
623
+ */
624
+ add_action( 'plugins_loaded', 'cerber_init', 1000 );
625
+ function cerber_init() {
626
+ global $wp_cerber;
627
+
628
+ load_plugin_textdomain( 'wp-cerber', false, basename( dirname( __FILE__ ) ) . '/languages' );
629
+
630
+ if ( ! is_object( $wp_cerber ) || get_class($wp_cerber) != 'WP_Cerber') {
631
+ $wp_cerber = new WP_Cerber();
632
+ }
633
+
634
+ if ( !cerber_check_groove() && !cerber_is_allowed() ) {
635
+ wp_clear_auth_cookie();
636
+ }
637
+
638
+ if ( ! wp_next_scheduled( 'cerber_hourly' ) ) {
639
+ wp_schedule_event( time(), 'hourly', 'cerber_hourly' );
640
+ }
641
+ if ( ! wp_next_scheduled( 'cerber_daily' ) ) {
642
+ wp_schedule_event( time(), 'daily', 'cerber_daily' );
643
+ }
644
+ }
645
+
646
+ /*
647
+ Display login form if Custom login URL has been requested
648
+
649
+ */
650
+ add_action( 'init', 'cerber_wp_login_page', 20 );
651
+ function cerber_wp_login_page() {
652
+ global $wp_cerber;
653
+ if ( $path = $wp_cerber->getSettings( 'loginpath' ) ) {
654
+ $request = $_SERVER['REQUEST_URI'];
655
+ if ( $pos = strpos( $request, '?' ) ) {
656
+ //$request = explode( '?', $request );
657
+ //$request = array_shift( $request );
658
+ $request = substr( $request, 0, $pos - 1 ); // @since 4.8
659
+ }
660
+ $request = explode( '/', rtrim( $request, '/' ) );
661
+ //$request = array_pop( $request );
662
+ $request = end($request); // @since 4.8
663
+ if ( $path == $request && !cerber_is_rest_url() ) {
664
+ require( ABSPATH . WP_LOGIN_SCRIPT ); // load default wp-login form
665
+ exit;
666
+ }
667
+ }
668
+ }
669
+
670
+ /*
671
+ Create message to show it above login form for any simply GET
672
+ */
673
+ add_action( 'login_head', 'cerber_login_head' );
674
+ function cerber_login_head() {
675
+ global $error, $wp_cerber;
676
+
677
+ if ( !$allowed = cerber_is_allowed() ) :
678
+ ?>
679
+ <style type="text/css" media="all">
680
+ #logidnform {
681
+ display: none;
682
+ }
683
+ </style>
684
+ <?php
685
+ endif;
686
+
687
+ $wp_cerber->reCaptcha( 'style' );
688
+
689
+ if ( $_SERVER['REQUEST_METHOD'] != 'GET' ) {
690
+ return;
691
+ }
692
+ if ( ! cerber_can_msg() ) {
693
+ return;
694
+ }
695
+ if ( ! $allowed ) {
696
+ $error = $wp_cerber->getErrorMsg();
697
+ }
698
+ elseif ( $msg = $wp_cerber->getRemainMsg() ) {
699
+ $error = $msg;
700
+ }
701
+ }
702
+
703
+ /**
704
+ * Control the process of authentication
705
+ *
706
+ * @since 2.9
707
+ *
708
+ */
709
+ remove_filter( 'authenticate', 'wp_authenticate_username_password', 20 );
710
+ add_filter( 'authenticate', 'cerber_auth_control', 20, 3 );
711
+ function cerber_auth_control( $null, $username, $password ) {
712
+ global $wp_cerber;
713
+
714
+ if ( ! $wp_cerber->reCaptchaValidate() ) {
715
+
716
+ return new WP_Error( 'incorrect_recaptcha',
717
+ '<strong>' . __( 'ERROR:', 'wp-cerber' ) . ' </strong>' .
718
+ $wp_cerber->reCaptchaMsg('login'));
719
+ }
720
+
721
+ // Check for prohibited username
722
+ if ( $wp_cerber->isProhibited( $username ) ) {
723
+ cerber_log( 52, $username );
724
+ cerber_block_add( null, 4, $username );
725
+
726
+ // Create with message which is identical default WP
727
+ return new WP_Error( 'incorrect_password', sprintf(
728
+ __( '<strong>ERROR</strong>: The password you entered for the username %s is incorrect.' ),
729
+ '<strong>' . $username . '</strong>'
730
+ ) );
731
+ }
732
+ /*
733
+ if ( lab_is_blocked($wp_cerber->getRemoteIp()) ) {
734
+
735
+ // Create with message which is identical default WP
736
+ return new WP_Error( 'incorrect_password', sprintf(
737
+ __( '<strong>ERROR</strong>: The password you entered for the username %s is incorrect.' ),
738
+ '<strong>' . $username . '</strong>'
739
+ ) );
740
+ }*/
741
+
742
+ $user = wp_authenticate_username_password( $null, $username, $password );
743
+
744
+ // @since 4.18 it is replacement for 'wp_login_failed' action hook
745
+ // see WP function wp_authenticate()
746
+ $ignore_codes = array( 'empty_username', 'empty_password' );
747
+ if ( is_wp_error( $user ) && ! in_array( $user->get_error_code(), $ignore_codes ) ) {
748
+ cerber_login_failed( $username );
749
+ }
750
+
751
+ return $user;
752
+ }
753
+
754
+ /*
755
+ Block authentication for an existing user if IP is not allowed.
756
+ Invoked in the 'wp_authenticate_username_password()'
757
+ */
758
+ add_filter( 'wp_authenticate_user', 'cerber_stop_authentication', 9999, 2 ); // fires after user found, with 'authenticate' filter
759
+ function cerber_stop_authentication( $user, $password ) {
760
+ global $wp_cerber;
761
+
762
+ if ( !cerber_is_allowed() || lab_is_blocked($wp_cerber->getRemoteIp())) {
763
+ status_header( 403 );
764
+ $error = new WP_Error();
765
+ $error->add( 'cerber_wp_error', $wp_cerber->getErrorMsg() );
766
+
767
+ return $error;
768
+ }
769
+
770
+ return $user;
771
+ }
772
+
773
+ // Block prohibited usernames
774
+ // add_filter('illegal_user_logins',function(){ return cerber_get_options('prohibited'); });
775
+
776
+
777
+ /*
778
+ * Handler for failed login attempts
779
+ *
780
+ */
781
+ //add_action( 'wp_login_failed', 'cerber_login_failed' ); // @since 4.18
782
+ function cerber_login_failed( $user_login ) {
783
+ global $wpdb, $wp_cerber;
784
+ static $is_processed = false;
785
+
786
+ if ( $is_processed ) return;
787
+ $is_processed = true;
788
+
789
+ $ip = $wp_cerber->getRemoteIp();
790
+ $acl = cerber_acl_check( $ip );
791
+ if ( ! cerber_get_user( $user_login ) ) {
792
+ $no_user = true;
793
+ }
794
+ else {
795
+ $no_user = false;
796
+ }
797
+
798
+ //cerber_failed_work($ip, $acl, $no_user, $user_login);
799
+
800
+ //if ( ! $wp_cerber->isProcessed() ) {
801
+ //if ( ! cerber_get_user( $user_login ) ) {
802
+ // $no_user = true;
803
+ //}
804
+
805
+ $ac = 7;
806
+
807
+ if ( $no_user ) {
808
+ $ac = 51;
809
+ }
810
+ elseif ( ! cerber_is_allowed( $ip ) ) {
811
+ $ac = 53;
812
+ }
813
+ /*
814
+ elseif ( $acl == 'B' ) {
815
+ $ac = 14;
816
+ }
817
+ elseif ( lab_is_blocked($ip, false) ) {
818
+ $ac = 53;
819
+ }
820
+ else {
821
+ $ac = 53;
822
+ }*/
823
+
824
+ cerber_log( $ac, $user_login );
825
+
826
+ //}
827
+
828
+
829
+ // White? Stop further actions.
830
+ if ( $acl == 'W' && !$wp_cerber->getSettings( 'limitwhite' )) {
831
+ return;
832
+ }
833
+
834
+ if ( $wp_cerber->getSettings( 'usefile' ) ) {
835
+ cerber_file_log( $user_login, $ip );
836
+ }
837
+
838
+ if ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) { // Needs additional researching and, maybe, refactoring
839
+ status_header( 403 );
840
+ }
841
+
842
+ // Blacklisted? No more actions are needed.
843
+ if ( $acl == 'B' ) {
844
+ return;
845
+ }
846
+
847
+ // Must the Citadel mode be activated?
848
+ if ( $wp_cerber->getSettings( 'ciperiod' ) && ! cerber_is_citadel() ) {
849
+ $range = time() - $wp_cerber->getSettings( 'ciperiod' ) * 60;
850
+ $lockouts = $wpdb->get_var( 'SELECT count(ip) FROM ' . CERBER_LOG_TABLE . ' WHERE activity IN (7,51,52) AND stamp > ' . $range );
851
+ if ( $lockouts >= $wp_cerber->getSettings( 'cilimit' ) ) {
852
+ cerber_enable_citadel();
853
+ }
854
+ }
855
+
856
+ if ( $no_user && $wp_cerber->getSettings( 'nonusers' ) ) {
857
+ cerber_block_add( $ip, 3, $user_login, null, false );
858
+ }
859
+ elseif ( cerber_get_remain_count($ip, false) < 1 ) { //Limit on the number of login attempts is reached
860
+ cerber_block_add( $ip, 1, '', null, false);
861
+ }
862
+
863
+ }
864
+
865
+ /**
866
+ * Do the work with failed/blocked attempt
867
+ *
868
+ * @param $ip
869
+ * @param $acl
870
+ * @param $user_login
871
+ */
872
+ function cerber_failed_work($ip, $acl, $no_user, $user_login){
873
+ global $wpdb, $wp_cerber;
874
+
875
+ // White? Stop further actions.
876
+ if ( $acl == 'W' && !$wp_cerber->getSettings( 'limitwhite' )) {
877
+ return;
878
+ }
879
+
880
+ if ( $wp_cerber->getSettings( 'usefile' ) ) {
881
+ cerber_file_log( $user_login, $ip );
882
+ }
883
+
884
+ if ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) { // Needs additional researching and, maybe, refactoring
885
+ status_header( 403 );
886
+ }
887
+
888
+ // Blacklisted? No more actions are needed.
889
+ if ( $acl == 'B' ) {
890
+ return;
891
+ }
892
+
893
+ // Must the Citadel mode be activated?
894
+ if ( $wp_cerber->getSettings( 'ciperiod' ) && ! cerber_is_citadel() ) {
895
+ $range = time() - $wp_cerber->getSettings( 'ciperiod' ) * 60;
896
+ $lockouts = $wpdb->get_var( 'SELECT count(ip) FROM ' . CERBER_LOG_TABLE . ' WHERE activity IN (7,51,52) AND stamp > ' . $range );
897
+ if ( $lockouts >= $wp_cerber->getSettings( 'cilimit' ) ) {
898
+ cerber_enable_citadel();
899
+ }
900
+ }
901
+
902
+ if ( $no_user && $wp_cerber->getSettings( 'nonusers' ) ) {
903
+ cerber_block_add( $ip, 3, $user_login, null, false );
904
+ }
905
+ elseif ( cerber_get_remain_count($ip, false) <= 1 ) { //Limit on the number of login attempts is reached
906
+ cerber_block_add( $ip, 1, '', null, false);
907
+ }
908
+ }
909
+
910
+ // Registration -----------------------------------------------------------------------
911
+
912
+ add_filter( 'registration_errors', 'cerber_registration_request', 10, 3 );
913
+ function cerber_registration_request( $errors, $sanitized_user_login, $user_email ) {
914
+ global $wp_cerber;
915
+
916
+ $code = null;
917
+ $msg = null;
918
+
919
+ if ( cerber_is_bot('botsreg') ) {
920
+ cerber_log(54);
921
+ $code = 'bot_detected';
922
+ $msg = '<strong>' . __( 'ERROR:', 'wp-cerber' ) . ' </strong>' .
923
+ apply_filters( 'cerber_msg_denied', __( 'You are not allowed to register.', 'wp-cerber' ), 'register' );
924
+ }
925
+ elseif ( ! $wp_cerber->reCaptchaValidate() ) {
926
+ $code = 'incorrect_recaptcha';
927
+ $msg = '<strong>' . __( 'ERROR:', 'wp-cerber' ) . ' </strong>' .
928
+ $wp_cerber->reCaptchaMsg('register');
929
+ }
930
+ elseif ( $wp_cerber->isProhibited( $sanitized_user_login ) ) {
931
+ $code = 'prohibited_login';
932
+ $msg = '<strong>' . __( 'ERROR:', 'wp-cerber' ) . ' </strong>' .
933
+ apply_filters( 'cerber_msg_prohibited', __( 'Username is not allowed. Please choose another one.', 'wp-cerber' ), 'register' );
934
+ }
935
+ elseif ( !cerber_is_allowed() || lab_is_blocked($wp_cerber->getRemoteIp()) ) {
936
+ cerber_log(54);
937
+ $code = 'ip_denied';
938
+ $msg = '<strong>' . __( 'ERROR:', 'wp-cerber' ) . ' </strong>' .
939
+ apply_filters( 'cerber_msg_denied', __( 'You are not allowed to register.', 'wp-cerber' ), 'register' );
940
+ }
941
+
942
+ if ($code){
943
+ return new WP_Error($code, $msg);
944
+ }
945
+
946
+ return $errors;
947
+ }
948
+
949
+ add_filter( 'option_users_can_register', function ( $value ) {
950
+ if ( ! cerber_is_allowed() ) {
951
+ return false;
952
+ }
953
+
954
+ return $value;
955
+ }, 9999 );
956
+
957
+
958
+ // Lost password form --------------------------------------------------------------------
959
+
960
+ /**
961
+ * Validate reCAPTCHA for the WordPress lost password form
962
+ */
963
+ add_action( 'login_form_' . 'lostpassword', 'cerber_lost_captcha' );
964
+ function cerber_lost_captcha() {
965
+ global $wp_cerber, $cerber_lost;
966
+ if ( ! $wp_cerber->reCaptchaValidate() ) {
967
+ $_POST['user_login'] = null; // workaround due to lack of any way to control lost password form
968
+ $cerber_lost = '<strong>' . __( 'ERROR:', 'wp-cerber' ) . ' </strong>' . $wp_cerber->reCaptchaMsg('lostpassword');
969
+ }
970
+ }
971
+ /**
972
+ * Display message on the WordPress lost password form screen
973
+ */
974
+ add_action( 'lostpassword_form', 'cerber_lost_show_msg' );
975
+ function cerber_lost_show_msg() {
976
+ global $cerber_lost;
977
+ if ( ! $cerber_lost ) {
978
+ return;
979
+ }
980
+ ?>
981
+ <script type="text/javascript">
982
+ //document.getElementById('login_error').style.visibility = "hidden";
983
+ document.getElementById('login_error').innerHTML = "<?php echo $cerber_lost; ?>";
984
+ </script>
985
+ <?php
986
+ }
987
+
988
+
989
+ // Comments section ----------------------------------------------------------------------
990
+
991
+
992
+ if (1 == cerber_get_options('spamcomm')) {
993
+ // $approved = apply_filters( 'pre_comment_approved', $approved, $commentdata );
994
+ add_filter( 'pre_comment_approved', function ( $approved, $commentdata ) {
995
+ if ( ! cerber_is_comment_allowed() ) {
996
+ $approved = 'spam';
997
+ }
998
+ return $approved;
999
+ }, 10, 2 );
1000
+ }
1001
+ else {
1002
+ add_action( 'pre_comment_on_post', function ( $comment_post_ID ) {
1003
+ global $wp_cerber;
1004
+
1005
+ if ( ! cerber_is_comment_allowed() ) {
1006
+ setcookie( 'cerber-post-id', $comment_post_ID, time() + 60, '/' );
1007
+ $comments = get_comments( array( 'number' => '1', 'post_id' => $comment_post_ID ) );
1008
+ if ( $comments ) {
1009
+ $loc = get_comment_link( $comments[0]->comment_ID );
1010
+ } else {
1011
+ $loc = get_permalink( $comment_post_ID ) . '#cerber-recaptcha-msg';
1012
+ }
1013
+ wp_safe_redirect( $loc );
1014
+ exit;
1015
+ }
1016
+
1017
+ } );
1018
+
1019
+ }
1020
+ /**
1021
+ * Check if if submitted comment is allowed
1022
+ *
1023
+ * @return bool
1024
+ */
1025
+ function cerber_is_comment_allowed(){
1026
+ global $wp_cerber;
1027
+
1028
+ $deny = false;
1029
+
1030
+ if ( ! cerber_is_allowed() ) {
1031
+ $deny = true;
1032
+ }
1033
+ elseif ( cerber_is_bot('botscomm') ) {
1034
+ $remain = cerber_get_remain_count( null , true, 16, 3, 60);
1035
+ if ($remain < 1) cerber_block_add( null, 6, '', 60 );
1036
+ $deny = true;
1037
+ }
1038
+ elseif ( ! $wp_cerber->reCaptchaValidate( 'comment' , true ) ) {
1039
+ $deny = true;
1040
+ }
1041
+ elseif ( lab_is_blocked( $wp_cerber->getRemoteIp() ) ) {
1042
+ $deny = true;
1043
+ }
1044
+
1045
+ if ($deny) {
1046
+ cerber_log( 16 );
1047
+ }
1048
+
1049
+ return !$deny;
1050
+ }
1051
+
1052
+ /**
1053
+ * Showing reCAPTCHA widget.
1054
+ * Displaying error message on the comment form for a human.
1055
+ *
1056
+ */
1057
+ add_filter( 'comment_form_submit_field', function ( $value ) {
1058
+ global $wp_cerber, $post;
1059
+
1060
+ if ( ! empty( $_COOKIE["cerber-post-id"] ) && absint( $_COOKIE["cerber-post-id"] ) == $post->ID ) {
1061
+ //echo '<div id="cerber-recaptcha-msg">' . __( 'ERROR:', 'wp-cerber' ) . ' ' . $wp_cerber->reCaptchaMsg( 'comment' ) . '</div>';
1062
+ echo '<div id="cerber-recaptcha-msg">' . __( 'ERROR:', 'wp-cerber' ) . ' ' . __('Sorry, human verification failed.') . '</div>';
1063
+ echo '<script type="text/javascript">document.cookie = "cerber-post-id=0;path=/";</script>';
1064
+ }
1065
+
1066
+ $au = $wp_cerber->getSettings( 'recapcomauth' );
1067
+ if ( ! $au || ( $au && ! is_user_logged_in() ) ) {
1068
+ $wp_cerber->reCaptcha( 'widget', 'recapcom' );
1069
+ }
1070
+
1071
+ return $value;
1072
+ } );
1073
+
1074
+
1075
+ // Messages ----------------------------------------------------------------------
1076
+
1077
+ /**
1078
+ * Replace ANY system messages or add notify message above login form if IP is not allowed (blocked or locked out)
1079
+ */
1080
+ add_filter( 'login_errors', 'cerber_login_form_msg' ); // hook on POST if credentials was wrong
1081
+ function cerber_login_form_msg( $errors ) {
1082
+ global $error, $wp_cerber;
1083
+ if ( cerber_can_msg() ) {
1084
+ if ( ! cerber_is_allowed() ) {
1085
+ $errors = $wp_cerber->getErrorMsg();
1086
+ }
1087
+ elseif ( ! $error && ( $msg = $wp_cerber->getRemainMsg() ) ) {
1088
+ $errors .= '<p>' . $msg;
1089
+ }
1090
+ }
1091
+
1092
+ return $errors;
1093
+ }
1094
+
1095
+ add_filter( 'shake_error_codes', 'cerber_login_failure_shake' ); // Shake it, baby!
1096
+ function cerber_login_failure_shake( $shake_error_codes ) {
1097
+ $shake_error_codes[] = 'cerber_wp_error';
1098
+
1099
+ return $shake_error_codes;
1100
+ }
1101
+
1102
+ /*
1103
+ Replace default login/logout URL with Custom login page URL
1104
+ */
1105
+ add_filter( 'site_url', 'cerber_login_logout', 9999, 4 );
1106
+ add_filter( 'network_site_url', 'cerber_login_logout', 9999, 3 );
1107
+ function cerber_login_logout( $url, $path, $scheme, $blog_id = 0 ) { // $blog_id only for 'site_url'
1108
+ global $wp_cerber;
1109
+ if ( $login_path = $wp_cerber->getSettings( 'loginpath' ) ) {
1110
+ $url = str_replace( WP_LOGIN_SCRIPT, $login_path . '/', $url );
1111
+ }
1112
+
1113
+ return $url;
1114
+ }
1115
+
1116
+ /*
1117
+ Replace default logout redirect URL with Custom login page URL
1118
+ */
1119
+ add_filter( 'wp_redirect', 'cerber_redirect', 9999, 2 );
1120
+ function cerber_redirect( $location, $status ) {
1121
+ global $wp_cerber;
1122
+ if ( ($path = $wp_cerber->getSettings( 'loginpath' )) && ( 0 === strpos( $location, WP_LOGIN_SCRIPT . '?' ) ) ) {
1123
+ $loc = explode( '?', $location );
1124
+ $location = get_home_url() . '/' . $path . '/?' . $loc[1];
1125
+ }
1126
+
1127
+ return $location;
1128
+ }
1129
+
1130
+ // Access control ========================================================================================
1131
+
1132
+ /*
1133
+ Direct access to the restricted WP php scripts - what will we do?
1134
+ */
1135
+ add_action( 'init', 'cerber_access_control' );
1136
+ function cerber_access_control() {
1137
+ global $wp_cerber;
1138
+
1139
+ if ( is_admin() ) {
1140
+ return;
1141
+ }
1142
+
1143
+ // IPs from White List are allowed
1144
+ $acl = cerber_acl_check();
1145
+ if ( $acl == 'W' ) {
1146
+ return;
1147
+ }
1148
+ elseif ( $acl == 'B' || cerber_block_check() ) {
1149
+ $deny = true;
1150
+ }
1151
+ else {
1152
+ $deny = false;
1153
+ }
1154
+
1155
+ $opt = $wp_cerber->getSettings();
1156
+ //$script = substr( strrchr( $_SERVER['SCRIPT_NAME'], '/' ), 1 );
1157
+ $script = substr( strrchr( $_SERVER['REQUEST_URI'], '/' ), 1 );
1158
+
1159
+ if ( $script ) {
1160
+ if ( $script == WP_LOGIN_SCRIPT || $script == WP_SIGNUP_SCRIPT || ( $script == WP_REG_URI && ! get_option( 'users_can_register' ) ) ) { // no direct access
1161
+ if ( !empty( $opt['wplogin'] ) ) {
1162
+ cerber_log( 50 );
1163
+ cerber_soft_block_add( $wp_cerber->getRemoteIp(), 2, $script );
1164
+ cerber_404_page();
1165
+ }
1166
+ if ( $deny || !empty( $opt['loginnowp'] ) ) {
1167
+ cerber_log( 50 );
1168
+ cerber_404_page();
1169
+ }
1170
+ }
1171
+ elseif ( $script == WP_XMLRPC_SCRIPT || $script == WP_TRACKBACK_SCRIPT ) { // no direct access
1172
+ if ( $deny || ! empty( $opt['xmlrpc'] ) ) {
1173
+ //cerber_log( 50 );
1174
+ cerber_404_page();
1175
+ }
1176
+ }
1177
+ }
1178
+
1179
+ if ( $deny || ! empty( $opt['norest'] ) ) {
1180
+ cerber_block_rest();
1181
+ }
1182
+
1183
+ if ( $deny || ! empty( $opt['xmlrpc'] ) ) {
1184
+ add_filter( 'xmlrpc_enabled', '__return_false' );
1185
+ add_filter( 'pings_open', '__return_false' );
1186
+ add_filter( 'bloginfo_url', 'cerber_pingback_url', 10, 2 );
1187
+ remove_action( 'wp_head', 'rsd_link', 10 );
1188
+ remove_action( 'wp_head', 'wlwmanifest_link', 10 );
1189
+ }
1190
+
1191
+ if ( $deny || ! empty( $opt['nofeeds'] ) ) {
1192
+ remove_action( 'wp_head', 'feed_links', 2 );
1193
+ remove_action( 'wp_head', 'feed_links_extra', 3 );
1194
+
1195
+ remove_action( 'do_feed_rdf', 'do_feed_rdf', 10 );
1196
+ remove_action( 'do_feed_rss', 'do_feed_rss', 10 );
1197
+ remove_action( 'do_feed_rss2', 'do_feed_rss2', 10 );
1198
+ remove_action( 'do_feed_atom', 'do_feed_atom', 10 );
1199
+ remove_action( 'do_pings', 'do_all_pings', 10 );
1200
+
1201
+ add_action( 'do_feed_rdf', 'cerber_404_page', 1 );
1202
+ add_action( 'do_feed_rss', 'cerber_404_page', 1 );
1203
+ add_action( 'do_feed_rss2', 'cerber_404_page', 1 );
1204
+ add_action( 'do_feed_atom', 'cerber_404_page', 1 );
1205
+ add_action( 'do_feed_rss2_comments', 'cerber_404_page', 1 );
1206
+ add_action( 'do_feed_atom_comments', 'cerber_404_page', 1 );
1207
+ }
1208
+ }
1209
+
1210
+ /*
1211
+ * Disable pingback URL (hide from HEAD)
1212
+ */
1213
+ function cerber_pingback_url( $output, $show ) {
1214
+ if ( $show == 'pingback_url' ) {
1215
+ $output = '';
1216
+ }
1217
+
1218
+ return $output;
1219
+ }
1220
+
1221
+ /**
1222
+ * Disable REST API
1223
+ *
1224
+ */
1225
+ function cerber_block_rest() {
1226
+ // OLD WP
1227
+ add_filter( 'json_enabled', '__return_false' );
1228
+ add_filter( 'json_jsonp_enabled', '__return_false' );
1229
+ // WP 4.4
1230
+ add_filter( 'rest_enabled', '__return_false', 9999 );
1231
+ // WP 4.7
1232
+ add_filter( 'rest_jsonp_enabled', '__return_false' );
1233
+ // Links
1234
+ remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );
1235
+ remove_action( 'template_redirect', 'rest_output_link_header', 11 );
1236
+ // Default REST API hooks from default-filters.php
1237
+ remove_action( 'init', 'rest_api_init' );
1238
+ remove_action( 'rest_api_init', 'rest_api_default_filters', 10 );
1239
+ remove_action( 'rest_api_init', 'register_initial_settings', 10 );
1240
+ remove_action( 'rest_api_init', 'create_initial_rest_routes', 99 );
1241
+ remove_action( 'parse_request', 'rest_api_loaded' );
1242
+
1243
+ if ( cerber_is_rest_url() ) {
1244
+ cerber_404_page();
1245
+ }
1246
+ }
1247
+
1248
+ /*
1249
+ * Redirection control: standard admin/login redirections
1250
+ *
1251
+ */
1252
+ add_filter( 'wp_redirect', 'cerber_no_redirect', 10, 2 );
1253
+ function cerber_no_redirect( $location, $status ) {
1254
+ global $current_user, $wp_cerber;
1255
+ if ( $current_user->ID == 0 && $wp_cerber->getSettings( 'noredirect' ) ) {
1256
+ $str = 'redirect_to=' . urlencode( admin_url() );
1257
+ if ( strpos( $location, $str ) ) {
1258
+ cerber_404_page();
1259
+ }
1260
+ }
1261
+
1262
+ return $location;
1263
+ }
1264
+ /*
1265
+ * Redirection control: no default aliases for redirections
1266
+ *
1267
+ */
1268
+ if ( $wp_cerber->getSettings( 'noredirect' ) ) {
1269
+ remove_action( 'template_redirect', 'wp_redirect_admin_locations', 1000 );
1270
+ }
1271
+ /*
1272
+ * Stop user enumeration
1273
+ *
1274
+ */
1275
+ add_action( 'template_redirect', 'cerber_canonical', 1 );
1276
+ function cerber_canonical() {
1277
+ global $wp_cerber;
1278
+ if ( $wp_cerber->getSettings( 'stopenum' ) ) {
1279
+ if ( ! is_admin() && ! empty( $_GET['author'] ) ) {
1280
+ cerber_404_page();
1281
+ }
1282
+ }
1283
+ }
1284
+ /*
1285
+ if ( $wp_cerber->getSettings( 'hashauthor' ) ) {
1286
+ add_filter( 'request',
1287
+ function ( $vars ) {
1288
+ if (isset($vars['author_name']) && !is_admin()) {
1289
+ $vars['author_name'] = '><';
1290
+ }
1291
+
1292
+ return $vars;
1293
+ } );
1294
+ }
1295
+ */
1296
+
1297
+ /*
1298
+ Can login form message be shown?
1299
+ */
1300
+ function cerber_can_msg() {
1301
+ if ( ! isset( $_REQUEST['action'] ) ) {
1302
+ return true;
1303
+ }
1304
+ if ( $_REQUEST['action'] == 'login' ) {
1305
+ return true;
1306
+ }
1307
+
1308
+ return false;
1309
+ //if ( !in_array( $action, array( 'postpass', 'logout', 'lostpassword', 'retrievepassword', 'resetpass', 'rp', 'register', 'login' );
1310
+ }
1311
+
1312
+
1313
+ // Cookies ---------------------------------------------------------------------------------
1314
+ /*
1315
+ Mark user with groove
1316
+ @since 1.3
1317
+ */
1318
+ add_action( 'auth_cookie_valid', 'cerber_cookie1', 10, 2 );
1319
+ function cerber_cookie1( $cookie_elements = null, $user = null ) {
1320
+ global $current_user;
1321
+ if ( ! $user ) {
1322
+ $user = wp_get_current_user();
1323
+ }
1324
+ $expire = time() + apply_filters( 'auth_cookie_expiration', 14 * 24 * 3600, $user->ID, true ) + ( 24 * 3600 );
1325
+ cerber_set_cookie( $expire );
1326
+ }
1327
+
1328
+ /*
1329
+ Mark switched user with groove
1330
+ @since 1.6
1331
+ */
1332
+ add_action( 'set_logged_in_cookie', 'cerber_cookie2', 10, 5 );
1333
+ function cerber_cookie2( $logged_in_cookie, $expire, $expiration, $user_id, $logged_in ) {
1334
+ cerber_set_cookie( $expire );
1335
+ }
1336
+
1337
+ function cerber_set_cookie( $expire ) {
1338
+ if ( ! headers_sent() ) {
1339
+ setcookie( 'cerber_groove', cerber_get_groove(), $expire + 1, COOKIEPATH );
1340
+ }
1341
+ }
1342
+
1343
+ /*
1344
+ Mark current user when they logged out
1345
+ @since 1.0
1346
+ */
1347
+ add_action( 'wp_logout', 'cerber_clear_cookie' );
1348
+ function cerber_clear_cookie() {
1349
+ if ( ! headers_sent() ) {
1350
+ setcookie( 'cerber_logout', 'ok', time() + 24 * 3600, COOKIEPATH );
1351
+ }
1352
+ }
1353
+
1354
+ /*
1355
+ Track BAD cookies with non-existence user or bad password (hash)
1356
+ */
1357
+ add_action( 'auth_cookie_bad_username', 'cerber_cookie_bad' );
1358
+ add_action( 'auth_cookie_bad_hash', 'cerber_cookie_bad' );
1359
+ function cerber_cookie_bad( $cookie_elements ) {
1360
+ cerber_login_failed( $cookie_elements['username'] );
1361
+ wp_clear_auth_cookie();
1362
+ }
1363
+
1364
+ /*
1365
+ Get special Cerber Sign for using with cookies
1366
+ */
1367
+ function cerber_get_groove() {
1368
+ $groove = get_site_option( 'cerber-groove' );
1369
+ if ( empty( $groove ) ) {
1370
+ $groove = wp_generate_password( 16, false );
1371
+ update_site_option( 'cerber-groove', $groove );
1372
+ }
1373
+
1374
+ return md5( $groove );
1375
+ }
1376
+
1377
+ /*
1378
+ Check if special Cerber Sign valid
1379
+ */
1380
+ function cerber_check_groove( $hash = '' ) {
1381
+ if ( ! $hash ) {
1382
+ if ( ! isset( $_COOKIE['cerber_groove'] ) ) {
1383
+ return false;
1384
+ }
1385
+ $hash = $_COOKIE['cerber_groove'];
1386
+ }
1387
+ $groove = get_site_option( 'cerber-groove' );
1388
+ if ( $hash == md5( $groove ) ) {
1389
+ return true;
1390
+ }
1391
+
1392
+ return false;
1393
+ }
1394
+
1395
+ /**
1396
+ * Is bot detection engine enabled in a given location
1397
+ *
1398
+ * @param $location string|array Location
1399
+ *
1400
+ * @return bool true if enabled
1401
+ */
1402
+ function cerber_antibot_enabled($location) {
1403
+ global $wp_cerber;
1404
+
1405
+ if ( is_array( $location ) ) {
1406
+ foreach ( $location as $loc ) {
1407
+ if ( $wp_cerber->getSettings( $loc ) ) {
1408
+ return true;
1409
+ }
1410
+ }
1411
+ }
1412
+ else {
1413
+ if ( $wp_cerber->getSettings( $location ) ) {
1414
+ return true;
1415
+ }
1416
+ }
1417
+
1418
+ return false;
1419
+ }
1420
+
1421
+ /**
1422
+ * Print out the antibot/antispam jQuery code
1423
+ *
1424
+ * @param $location string|array Location (setting)
1425
+ */
1426
+ function cerber_antibot_code($location) {
1427
+ if ( ! cerber_antibot_enabled( $location ) ) {
1428
+ return;
1429
+ }
1430
+
1431
+ $ret = get_site_option( 'cerber-antibot', null );
1432
+
1433
+ /*
1434
+ if ( empty( $ret ) ) {
1435
+ $var = substr( str_shuffle( 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' ), 0, 16 );
1436
+ $val = substr( str_shuffle( '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' ), 0, 16 );
1437
+ $ret = array( $var, $val );
1438
+ update_site_option( 'cerber-antibot', $ret );
1439
+ }
1440
+ */
1441
+
1442
+ if ( empty( $ret ) || !is_array( $ret ) ) {
1443
+ $ret = cerber_antibot_gene();
1444
+ }
1445
+
1446
+ ?>
1447
+ <script type="text/javascript">
1448
+ jQuery(document).ready(function ($) {
1449
+ $(document).on('submit', 'form', function () {
1450
+ $(this).append('<input type="hidden" name="<?php echo $ret[0][0]; ?>" value="<?php echo $ret[0][1]; ?>" />');
1451
+ $(this).append('<input type="hidden" name="<?php echo $ret[1][0]; ?>" value="<?php echo $ret[1][1]; ?>" />');
1452
+ return true;
1453
+ });
1454
+ });
1455
+ </script>
1456
+ <?php
1457
+
1458
+ }
1459
+
1460
+ /**
1461
+ * Generates and saves antibot markers
1462
+ *
1463
+ * @return array
1464
+ */
1465
+ function cerber_antibot_gene() {
1466
+
1467
+ $length = rand( 10, 16 );
1468
+ $string1 = str_shuffle( 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' );
1469
+ $string2 = str_shuffle( '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz @*-+!?.,' );
1470
+
1471
+ $ret = array(
1472
+ array( substr( $string1, 0, $length - 1 ), substr( $string2, 0, $length + 1 ) ),
1473
+ array( substr( $string1, 1, $length + 1 ), substr( $string2, 2, $length - 1 ) ),
1474
+ );
1475
+
1476
+ update_site_option( 'cerber-antibot', $ret );
1477
+
1478
+ return $ret;
1479
+ }
1480
+
1481
+ /**
1482
+ * Is a POST request (a form) was submitted by a bot
1483
+ *
1484
+ * @return bool|mixed|null
1485
+ */
1486
+ function cerber_is_bot($location) {
1487
+ global $wp_cerber;
1488
+ static $ret = null;
1489
+
1490
+ if ( !$location || $_SERVER['REQUEST_METHOD'] != 'POST' ) {
1491
+ return false;
1492
+ }
1493
+
1494
+ if ( isset( $ret ) ) {
1495
+ return $ret;
1496
+ }
1497
+
1498
+ if ( ! cerber_antibot_enabled($location) ) {
1499
+ $ret = false;
1500
+ return $ret;
1501
+ }
1502
+
1503
+ $fields = get_site_option( 'cerber-antibot', null );
1504
+
1505
+ if ( empty( $fields ) ) {
1506
+ $ret = false;
1507
+ }
1508
+ elseif (
1509
+ empty( $_POST[ $fields[0][0] ] ) || $_POST[ $fields[0][0] ] != $fields[0][1]
1510
+ || empty( $_POST[ $fields[1][0] ] ) || $_POST[ $fields[1][0] ] != $fields[1][1]
1511
+ ) {
1512
+ $ret = true;
1513
+ if ( $wp_cerber->getSettings( 'cerberlab' ) ) {
1514
+ lab_save_push( $wp_cerber->getRemoteIp(), 333, '' );
1515
+ }
1516
+ }
1517
+ else {
1518
+ $ret = false;
1519
+ }
1520
+
1521
+ return $ret;
1522
+ }
1523
+
1524
+ /**
1525
+ * Set user session expiration
1526
+ *
1527
+ */
1528
+ add_filter( 'auth_cookie_expiration', function ( $expire ) {
1529
+ global $wp_cerber;
1530
+ $time = $wp_cerber->getSettings( 'auth_expire' );
1531
+ if ( $time ) {
1532
+ $expire = 60 * $time;
1533
+ }
1534
+
1535
+ return $expire;
1536
+ } );
1537
+
1538
+ // Track various activity -------------------------------------------------------------------------
1539
+
1540
+ add_action( 'wp_login', 'cerber_log_login', 10, 2 );
1541
+ function cerber_log_login( $login, $user ) {
1542
+ if ( ! empty( $_POST['log'] ) ) { // default WP form
1543
+ $user_login = htmlspecialchars($_POST['log']);
1544
+ } else {
1545
+ $user_login = $login;
1546
+ }
1547
+ cerber_log( 5, $user_login, $user->ID, null );
1548
+ }
1549
+
1550
+ add_action( 'wp_logout', 'cerber_log_logout' );
1551
+ function cerber_log_logout() {
1552
+ global $user_ID;
1553
+ if ( ! $user_ID ) {
1554
+ $user = wp_get_current_user();
1555
+ $user_ID = $user->ID;
1556
+ }
1557
+ cerber_log( 6, '', $user_ID, null );
1558
+ }
1559
+
1560
+ //add_action( 'lostpassword_post', 'cerber_password_post' );
1561
+ add_action( 'retrieve_password', 'cerber_password_post' );
1562
+ function cerber_password_post( $user_login ) {
1563
+ cerber_log( 21, $user_login );
1564
+ }
1565
+
1566
+ add_action( 'password_reset', 'cerber_password_reset' );
1567
+ function cerber_password_reset( $user ) {
1568
+ cerber_log( 20, $user->user_login, $user->ID );
1569
+ }
1570
+
1571
+ add_action( 'register_new_user', 'cerber_log_reg' );
1572
+ function cerber_log_reg( $user_id ) {
1573
+ $user = get_user_by( 'ID', $user_id );
1574
+ cerber_log( 2, $user->user_login, $user_id );
1575
+ }
1576
+
1577
+ add_action( 'edit_user_created_user', 'cerber_log_create', 10, 2 );
1578
+ function cerber_log_create( $user_id, $notify = null ) {
1579
+ $user = get_user_by( 'ID', $user_id );
1580
+ cerber_log( 1, $user->user_login, $user_id );
1581
+ }
1582
+
1583
+ // Lockouts routines ---------------------------------------------------------------------
1584
+
1585
+ /**
1586
+ * Lock out IP address if it is an alien IP only (browser does not have valid Cerber groove)
1587
+ *
1588
+ * @param $ip string IP address to block
1589
+ * @param integer $reason_id ID of reason of blocking
1590
+ * @param string $details Reason of blocking
1591
+ * @param null $duration Duration of blocking
1592
+ *
1593
+ * @return bool|false|int
1594
+ */
1595
+ function cerber_soft_block_add( $ip, $reason_id, $details = '', $duration = null ) {
1596
+ if ( cerber_check_groove() ) {
1597
+ return false;
1598
+ }
1599
+
1600
+ return cerber_block_add( $ip, $reason_id, $details, $duration );
1601
+ }
1602
+
1603
+ /**
1604
+ * Lock out IP address
1605
+ *
1606
+ * @param $ip string IP address to block
1607
+ * @param integer $reason_id ID of reason of blocking
1608
+ * @param string $details Reason of blocking
1609
+ * @param int $duration Duration of blocking
1610
+ * @param bool $check_acl Check for ACL
1611
+ *
1612
+ * @return bool|false|int
1613
+ */
1614
+ function cerber_block_add( $ip, $reason_id = 1, $details = '', $duration = null, $check_acl = true ) {
1615
+ global $wpdb, $wp_cerber;
1616
+
1617
+ //$wp_cerber->setProcessed();
1618
+
1619
+ if (cerber_get_block($ip)) return false;
1620
+
1621
+ if ( empty($ip) ) {
1622
+ $ip = $wp_cerber->getRemoteIp();
1623
+ }
1624
+
1625
+ if ( $check_acl && cerber_acl_check( $ip ) ) {
1626
+ return false;
1627
+ }
1628
+
1629
+ $ip_address = $ip;
1630
+
1631
+ if ( $wp_cerber->getSettings( 'cerberlab' ) ) {
1632
+ lab_save_push( $ip, $reason_id, $details );
1633
+ }
1634
+
1635
+ if ( $wp_cerber->getSettings( 'subnet' ) ) {
1636
+ $ip = cerber_get_subnet( $ip );
1637
+ $activity = 11;
1638
+ } else {
1639
+ $activity = 10;
1640
+ }
1641
+
1642
+ if ( $wpdb->get_var( $wpdb->prepare( 'SELECT count(ip) FROM ' . CERBER_BLOCKS_TABLE . ' WHERE ip = %s', $ip ) ) ) {
1643
+ return false;
1644
+ }
1645
+
1646
+ $reason = cerber_get_reason( $reason_id );
1647
+ if ($details) $reason .= ': <b>' . $details . '</b>';
1648
+
1649
+ if ( ! $duration ) {
1650
+ $duration = cerber_calc_duration( $ip );
1651
+ }
1652
+ $until = time() + $duration;
1653
+
1654
+ //$result = $wpdb->query($wpdb->prepare('INSERT INTO '. CERBER_BLOCKS_TABLE . ' (ip,block_until,reason) VALUES (%s,%d,%s)',$ip,$until,$reason));
1655
+ $result = $wpdb->insert( CERBER_BLOCKS_TABLE, array(
1656
+ 'ip' => $ip,
1657
+ 'block_until' => $until,
1658
+ 'reason' => $reason
1659
+ ), array( '%s', '%d', '%s' ) );
1660
+
1661
+ if ( $result ) {
1662
+ cerber_log( $activity, null, null, $ip_address );
1663
+ $wp_cerber->setLocked();
1664
+ do_action( 'cerber_ip_locked', array( 'IP' => $ip_address, 'reason' => $reason ) );
1665
+ $result = true;
1666
+ }
1667
+ else {
1668
+ cerber_db_error_log();
1669
+ $result = false;
1670
+ }
1671
+
1672
+ if ( $wp_cerber->getSettings( 'notify' ) ) {
1673
+ //$count = $wpdb->get_var( 'SELECT count(ip) FROM ' . CERBER_BLOCKS_TABLE );
1674
+ $count = cerber_blocked_num();
1675
+ if ( $count > $wp_cerber->getSettings( 'above' ) ) {
1676
+ cerber_send_notify( 'lockout', '', $ip_address );
1677
+ }
1678
+ }
1679
+
1680
+ return $result;
1681
+ }
1682
+
1683
+ function cerber_block_delete( $ip ) {
1684
+ global $wpdb;
1685
+
1686
+ return $wpdb->query( $wpdb->prepare( 'DELETE FROM ' . CERBER_BLOCKS_TABLE . ' WHERE ip = %s', $ip ) );
1687
+ }
1688
+
1689
+
1690
+ /**
1691
+ *
1692
+ * Check if an IP address is currently blocked. With C subnet also.
1693
+ *
1694
+ * @param string $ip an IP address
1695
+ *
1696
+ * @return bool true if IP is locked out
1697
+ */
1698
+ function cerber_block_check( $ip = '' ) {
1699
+
1700
+ // @since 4.8
1701
+ if (cerber_get_block($ip)) return true;
1702
+
1703
+ return false;
1704
+ }
1705
+
1706
+ /**
1707
+ *
1708
+ * Return the lockout row for an IP if it is blocked. With C subnet also.
1709
+ *
1710
+ * @param string $ip an IP address
1711
+ *
1712
+ * @return object|bool object if IP is locked out, false otherwise
1713
+ */
1714
+ function cerber_get_block( $ip = '' ) {
1715
+ global $wpdb, $wp_cerber;
1716
+
1717
+ if ( ! $ip ) {
1718
+ $ip = $wp_cerber->getRemoteIp();
1719
+ }
1720
+
1721
+ if ( ! filter_var( $ip, FILTER_VALIDATE_IP ) ) {
1722
+ return false;
1723
+ }
1724
+
1725
+ $where = ' WHERE ip = "' . $ip . '"';
1726
+ if ( cerber_is_ipv4( $ip ) ) {
1727
+ $subnet = cerber_get_subnet( $ip );
1728
+ $where .= ' OR ip = "' . $subnet . '"';
1729
+ }
1730
+ if ( $ret = $wpdb->get_row( 'SELECT * FROM ' . CERBER_BLOCKS_TABLE . $where ) ) {
1731
+ return $ret;
1732
+ }
1733
+
1734
+ return false;
1735
+ }
1736
+
1737
+ // TODO: replace all entrance of $count = $wpdb->get_var('SELECT count(ip) FROM '. CERBER_BLOCKS_TABLE ); with this function
1738
+ /**
1739
+ * Return the number of currently locked out IPs
1740
+ *
1741
+ * @return int the number of currently locked out IPs
1742
+ * @since 3.0
1743
+ */
1744
+ function cerber_blocked_num(){
1745
+ global $wpdb;
1746
+ $count = $wpdb->get_var('SELECT count(ip) FROM '. CERBER_BLOCKS_TABLE );
1747
+ return absint($count);
1748
+ }
1749
+
1750
+ /*
1751
+ Calculation duration of blocking (lockout) IP address based on settings & rules.
1752
+ */
1753
+ function cerber_calc_duration( $ip ) {
1754
+ global $wpdb, $wp_cerber;
1755
+ $range = time() - $wp_cerber->getSettings( 'aglast' ) * 3600;
1756
+ $lockouts = $wpdb->get_var( $wpdb->prepare( 'SELECT count(ip) FROM ' . CERBER_LOG_TABLE . ' WHERE ip = %s AND activity IN (10,11) AND stamp > %d', $ip, $range ) );
1757
+ if ( $lockouts >= $wp_cerber->getSettings( 'aglocks' ) ) {
1758
+ return $wp_cerber->getSettings( 'agperiod' ) * 3600;
1759
+ }
1760
+
1761
+ return $wp_cerber->getSettings( 'lockout' ) * 60;
1762
+ }
1763
+
1764
+ /**
1765
+ * Calculation of remaining attempts
1766
+ *
1767
+ * @param $ip string an IP address
1768
+ * @param $check_acl bool if true will check the White IP ACL first
1769
+ * @param $activity string comma-separated list of activity IDs to calculate for
1770
+ * @param $allowed int Allowed attempts within $period
1771
+ * @param $period int Period for count attempts
1772
+ *
1773
+ * @return int Allowed attempts for now
1774
+ */
1775
+ function cerber_get_remain_count( $ip = '', $check_acl = true, $activity = '7,51,52', $allowed = null, $period = null ) {
1776
+ global $wpdb, $wp_cerber;
1777
+ if ( ! $ip ) {
1778
+ $ip = $wp_cerber->getRemoteIp();
1779
+ }
1780
+
1781
+ if (!$allowed) $allowed = $wp_cerber->getSettings( 'attempts' );
1782
+
1783
+ if ( $check_acl && cerber_acl_check( $ip, 'W' ) ) {
1784
+ return $allowed; // whitelist = infinity attempts
1785
+ }
1786
+
1787
+ //if (!is_string($activity)) $activity = (string)$activity;
1788
+
1789
+ if (!$period) $period = $wp_cerber->getSettings( 'period' );
1790
+
1791
+ $range = time() - $period * 60;
1792
+ $attempts = $wpdb->get_var( $wpdb->prepare( 'SELECT count(ip) FROM ' . CERBER_LOG_TABLE . ' WHERE ip = %s AND activity IN (%s) AND stamp > %d', $ip, $activity, $range ) );
1793
+
1794
+ if ( ! $attempts ) {
1795
+ return $allowed;
1796
+ }
1797
+ else {
1798
+ $ret = $allowed - $attempts;
1799
+ }
1800
+ $ret = $ret < 0 ? 0 : $ret;
1801
+
1802
+ return $ret;
1803
+ }
1804
+
1805
+ /**
1806
+ * Is a given IP is allowed to do restricted things?
1807
+ * Here Cerber makes its decision.
1808
+ *
1809
+ * @param $ip string IP address
1810
+ *
1811
+ * @return bool
1812
+ */
1813
+ function cerber_is_allowed( $ip = '' ) {
1814
+ global $wp_cerber;
1815
+ static $cache = array();
1816
+
1817
+ if ( ! $ip ) {
1818
+ $ip = $wp_cerber->getRemoteIp();
1819
+ }
1820
+
1821
+ if ( ! filter_var( $ip, FILTER_VALIDATE_IP ) ) {
1822
+ return false;
1823
+ }
1824
+
1825
+ /*
1826
+ if ( isset( $cache[ $ip ] ) ) {
1827
+ return $cache[ $ip ];
1828
+ }
1829
+ */
1830
+
1831
+ // @since 4.7.9
1832
+ if ( cerber_block_check( $ip ) ) {
1833
+ $cache[ $ip ] = false;
1834
+ return false;
1835
+ }
1836
+
1837
+ $tag = cerber_acl_check( $ip );
1838
+ if ( $tag == 'W' ) {
1839
+ $cache[ $ip ] = true;
1840
+ return true;
1841
+ }
1842
+ if ( $tag == 'B' ) {
1843
+ $cache[ $ip ] = false;
1844
+ return false;
1845
+ }
1846
+
1847
+ /* @since 4.7.9
1848
+ if ( cerber_block_check( $ip ) ) {
1849
+ return false;
1850
+ }*/
1851
+
1852
+ if ( cerber_is_citadel() ) {
1853
+ $cache[ $ip ] = false;
1854
+ return false;
1855
+ }
1856
+
1857
+ if ( lab_is_blocked( $ip, false ) ) {
1858
+ $cache[ $ip ] = false;
1859
+ return false;
1860
+ }
1861
+
1862
+ $cache[ $ip ] = true;
1863
+ return true;
1864
+ }
1865
+ // TODO: Merge with $wp_cerber->getStatus();
1866
+ function cerber_get_status( $ip ) {
1867
+
1868
+ if ( cerber_block_check( $ip ) ) {
1869
+ return 13;
1870
+ }
1871
+
1872
+ $tag = cerber_acl_check( $ip );
1873
+ if ( $tag == 'W' ) {
1874
+ return 0;
1875
+ }
1876
+ if ( $tag == 'B' ) {
1877
+ return 14;
1878
+ }
1879
+
1880
+ if ( cerber_is_citadel() ) {
1881
+ return 12;
1882
+ }
1883
+
1884
+ if ( lab_is_blocked( $ip, false ) ) {
1885
+ return 15;
1886
+ }
1887
+
1888
+ return 0;
1889
+ }
1890
+
1891
+ // Access lists (ACL) routines --------------------------------------------------------------------------------
1892
+
1893
+ /**
1894
+ * Add IP to specified access list
1895
+ *
1896
+ * @param $ip string|array single IP address, string with IP network, range or associative range array
1897
+ * @param $tag string 'B'|'W'
1898
+ *
1899
+ * @return bool|int Result of operation
1900
+ */
1901
+ function cerber_acl_add( $ip, $tag ) {
1902
+ global $wpdb;
1903
+ if ( is_string( $ip ) ) {
1904
+ if ( $wpdb->get_var( $wpdb->prepare( 'SELECT COUNT(ip) FROM ' . CERBER_ACL_TABLE . ' WHERE ip = %s', $ip ) ) ) {
1905
+ return false;
1906
+ }
1907
+ $range = cerber_any2range( $ip );
1908
+ if ( is_array( $range ) ) {
1909
+ $begin = $range['begin'];
1910
+ $end = $range['end'];
1911
+ } else {
1912
+ $begin = ip2long( $ip );
1913
+ $end = ip2long( $ip );
1914
+ }
1915
+
1916
+ return $wpdb->query( $wpdb->prepare( 'INSERT INTO ' . CERBER_ACL_TABLE . ' (ip, ip_long_begin, ip_long_end,tag) VALUES (%s,%d,%d,%s)', $ip, $begin, $end, $tag ) );
1917
+ //cerber_db_error_log();
1918
+ }
1919
+ elseif ( is_array( $ip ) ) {
1920
+ $range = $ip['range'];
1921
+ $begin = $ip['begin'];
1922
+ $end = $ip['end'];
1923
+ if ( $wpdb->get_var( $wpdb->prepare( 'SELECT COUNT(ip) FROM ' . CERBER_ACL_TABLE . ' WHERE ip_long_begin = %d AND ip_long_end = %d', $begin, $end ) ) ) {
1924
+ return false;
1925
+ }
1926
+
1927
+ return $wpdb->query( $wpdb->prepare( 'INSERT INTO ' . CERBER_ACL_TABLE . ' (ip, ip_long_begin, ip_long_end, tag) VALUES (%s,%d,%d,%s)', $range, $begin, $end, $tag ) );
1928
+ }
1929
+
1930
+ return false;
1931
+ }
1932
+
1933
+ function cerber_add_white( $ip ) {
1934
+ return cerber_acl_add( $ip, 'W' );
1935
+ }
1936
+
1937
+ function cerber_add_black( $ip ) {
1938
+ return cerber_acl_add( $ip, 'B' );
1939
+ }
1940
+
1941
+ function cerber_acl_remove( $ip ) {
1942
+ global $wpdb;
1943
+ if ( is_string( $ip ) ) {
1944
+ return $wpdb->query( $wpdb->prepare( 'DELETE FROM ' . CERBER_ACL_TABLE . ' WHERE ip = %s ', $ip ) );
1945
+ } elseif ( is_array( $ip ) ) {
1946
+ return $wpdb->query( $wpdb->prepare( 'DELETE FROM ' . CERBER_ACL_TABLE . ' WHERE ip_long_begin = %d AND ip_long_end = %d', $ip['begin'], $ip['end'] ) );
1947
+ }
1948
+
1949
+ return false;
1950
+ }
1951
+
1952
+ /**
1953
+ * Check ACL for given IP. Some extra lines for performance reason.
1954
+ *
1955
+ * @param string $ip
1956
+ * @param string $tag
1957
+ *
1958
+ * @return bool|string
1959
+ */
1960
+ function cerber_acl_check( $ip = null, $tag = '' ) {
1961
+ global $wpdb, $wp_cerber;
1962
+ if ( ! $ip ) {
1963
+ $ip = $wp_cerber->getRemoteIp();
1964
+ }
1965
+
1966
+ if ( ! cerber_is_ipv4( $ip ) ) {
1967
+ return cerber_acl_checkV6( $ip, $tag );
1968
+ }
1969
+
1970
+ $long = ip2long( $ip );
1971
+
1972
+ if ( $tag ) {
1973
+ if ( $tag != 'W' && $tag != 'B' ) {
1974
+ return false;
1975
+ }
1976
+ if ( $wpdb->get_var( 'SELECT ip FROM ' . CERBER_ACL_TABLE . ' WHERE ip_long_begin <= '.$long.' AND '.$long.' <= ip_long_end AND tag = "'.$tag.'" LIMIT 1' ) ) {
1977
+ return true;
1978
+ }
1979
+ return false;
1980
+ }
1981
+ else {
1982
+ if ( $ret = $wpdb->get_var( 'SELECT tag FROM ' . CERBER_ACL_TABLE . ' WHERE ip_long_begin <= ' . $long . ' AND ' . $long . ' <= ip_long_end AND tag = "W" LIMIT 1' ) ) {
1983
+ return $ret;
1984
+ }
1985
+ if ( $ret = $wpdb->get_var( 'SELECT tag FROM ' . CERBER_ACL_TABLE . ' WHERE ip_long_begin <= ' . $long . ' AND ' . $long . ' <= ip_long_end AND tag = "B" LIMIT 1' ) ) {
1986
+ return $ret;
1987
+ }
1988
+
1989
+ return false;
1990
+ }
1991
+ }
1992
+
1993
+ /**
1994
+ * IPv6 version of cerber_acl_check() without subnets and ranges
1995
+ *
1996
+ * @param null $ip
1997
+ * @param string $tag
1998
+ *
1999
+ * @return bool|null|string
2000
+ */
2001
+ function cerber_acl_checkV6( $ip = null, $tag = '' ) {
2002
+ global $wpdb, $wp_cerber;
2003
+ if ( ! $ip ) {
2004
+ $ip = $wp_cerber->getRemoteIp();
2005
+ }
2006
+ if ( $tag ) {
2007
+ if ( $wpdb->get_var( $wpdb->prepare( 'SELECT count(ip) FROM ' . CERBER_ACL_TABLE . ' WHERE ip = %s AND tag = %s', $ip, $tag ) ) ) {
2008
+ return true;
2009
+ }
2010
+
2011
+ return false;
2012
+ } else {
2013
+ if ( $ret = $wpdb->get_var( $wpdb->prepare( 'SELECT tag FROM ' . CERBER_ACL_TABLE . ' WHERE ip = %s', $ip ) ) ) {
2014
+ return $ret;
2015
+ }
2016
+
2017
+ return false;
2018
+ }
2019
+ }
2020
+
2021
+ /*
2022
+ * Logging directly to the file
2023
+ *
2024
+ * CERBER_FAIL_LOG optional, full path including filename to the log file
2025
+ * CERBER_LOG_FACILITY optional, use to specify what type of program is logging the messages
2026
+ *
2027
+ * */
2028
+ function cerber_file_log( $user_login, $ip ) {
2029
+ if ( defined( 'CERBER_FAIL_LOG' ) ) {
2030
+ if ( $log = @fopen( CERBER_FAIL_LOG, 'a' ) ) {
2031
+ $pid = absint( @posix_getpid() );
2032
+ @fwrite( $log, date( 'M j H:i:s ' ) . $_SERVER['SERVER_NAME'] . ' Cerber(' . $_SERVER['HTTP_HOST'] . ')[' . $pid . ']: Authentication failure for ' . $user_login . ' from ' . $ip . "\n" );
2033
+ @fclose( $log );
2034
+ }
2035
+ } else {
2036
+ @openlog( 'Cerber(' . $_SERVER['HTTP_HOST'] . ')', LOG_NDELAY | LOG_PID, defined( 'CERBER_LOG_FACILITY' ) ? CERBER_LOG_FACILITY : LOG_AUTH );
2037
+ @syslog( LOG_NOTICE, 'Authentication failure for ' . $user_login . ' from ' . $ip );
2038
+ @closelog();
2039
+ }
2040
+ }
2041
+
2042
+ /*
2043
+ Return wildcard - string like subnet Class C
2044
+ */
2045
+ function cerber_get_subnet( $ip ) {
2046
+ return preg_replace( '/\.\d{1,3}$/', '.*', $ip );
2047
+ }
2048
+
2049
+ /*
2050
+ Check if given IP address or wildcard or CIDR is valid
2051
+ */
2052
+ function cerber_is_ip_or_net( $ip ) {
2053
+ if ( @inet_pton( $ip ) ) {
2054
+ return true;
2055
+ }
2056
+ // WILDCARD: 192.168.1.*
2057
+ $ip = str_replace( '*', '0', $ip );
2058
+ if ( @inet_pton( $ip ) ) {
2059
+ return true;
2060
+ }
2061
+ // CIDR: 192.168.1/24
2062
+ if ( strpos( $ip, '/' ) ) {
2063
+ $cidr = explode( '/', $ip );
2064
+ $net = $cidr[0];
2065
+ $mask = absint( $cidr[1] );
2066
+ $dots = substr_count( $net, '.' );
2067
+ if ( $dots < 3 ) {
2068
+ if ( $dots == 1 ) {
2069
+ $net .= '.0.0';
2070
+ } elseif ( $dots == 2 ) {
2071
+ $net .= '.0';
2072
+ }
2073
+ }
2074
+ if ( ! cerber_is_ipv4( $net ) ) {
2075
+ return false;
2076
+ }
2077
+ if ( ! is_numeric( $mask ) ) {
2078
+ return false;
2079
+ }
2080
+
2081
+ return true;
2082
+ }
2083
+
2084
+ return false;
2085
+ }
2086
+
2087
+ /**
2088
+ * Tries to recognize single IP address or IP v4 range (with dash) in a given string.
2089
+ *
2090
+ * @param string $string String to recognize IP address in
2091
+ *
2092
+ * @return array|bool|string Return single IP address or wildcard or CIDR as a string, and IP range as an array.
2093
+ */
2094
+ function cerber_parse_ip( $string = '' ) {
2095
+ $string = trim( $string );
2096
+ if ( cerber_is_ip_or_net( $string ) ) {
2097
+ return $string;
2098
+ }
2099
+ $explode = explode( '-', $string );
2100
+ if ( ! is_array( $explode ) || ! $explode ) {
2101
+ return false;
2102
+ }
2103
+ $range = array();
2104
+ $count = 0;
2105
+ foreach ( $explode as $ip ) {
2106
+ $ip = trim( $ip );
2107
+ if ( filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 ) ) {
2108
+ $range[] = $ip;
2109
+ $count ++;
2110
+ if ( $count >= 2 ) {
2111
+ break;
2112
+ }
2113
+ }
2114
+ }
2115
+ if ( count( $range ) < 2 ) {
2116
+ return false;
2117
+ }
2118
+ if ( ip2long( $range[1] ) <= ip2long( $range[0] ) ) {
2119
+ return false;
2120
+ }
2121
+
2122
+ return array(
2123
+ 'range' => $range[0] . ' - ' . $range[1],
2124
+ 'begin_ip' => $range[0],
2125
+ 'end_ip' => $range[1],
2126
+ 'begin' => ip2long( $range[0] ),
2127
+ 'end' => ip2long( $range[1] ),
2128
+ );
2129
+ }
2130
+
2131
+ /**
2132
+ * Convert a network wildcard string like x.x.x.* to an IP v4 range
2133
+ *
2134
+ * @param $wildcard string
2135
+ *
2136
+ * @return array|bool|string False if no wildcard found, otherwise result of cerber_parse_ip()
2137
+ */
2138
+ function cerber_wildcard2range( $wildcard = '' ) {
2139
+ $begin = str_replace( '*', '0', $wildcard );
2140
+ $end = str_replace( '*', '255', $wildcard );
2141
+ if ( ! cerber_is_ipv4( $begin ) ) {
2142
+ return false;
2143
+ }
2144
+ if ( ! cerber_is_ipv4( $end ) ) {
2145
+ return false;
2146
+ }
2147
+
2148
+ return cerber_parse_ip( $begin . ' - ' . $end );
2149
+ }
2150
+
2151
+ /**
2152
+ * Convert a CIDR to an IP v4 range
2153
+ *
2154
+ * @param $cidr string
2155
+ *
2156
+ * @return array|bool|string
2157
+ */
2158
+ function cerber_cidr2range( $cidr = '' ) {
2159
+ if ( ! strpos( $cidr, '/' ) ) {
2160
+ return false;
2161
+ }
2162
+ $cidr = explode( '/', $cidr );
2163
+ $net = $cidr[0];
2164
+ $mask = absint( $cidr[1] );
2165
+ $dots = substr_count( $net, '.' );
2166
+ if ( $dots < 3 ) { // not completed CIDR
2167
+ if ( $dots == 1 ) {
2168
+ $net .= '.0.0';
2169
+ } elseif ( $dots == 2 ) {
2170
+ $net .= '.0';
2171
+ }
2172
+ }
2173
+ if ( ! cerber_is_ipv4( $net ) ) {
2174
+ return false;
2175
+ }
2176
+ if ( ! is_numeric( $mask ) ) {
2177
+ return false;
2178
+ }
2179
+ $begin = long2ip( ( ip2long( $net ) ) & ( ( - 1 << ( 32 - (int) $mask ) ) ) );
2180
+ $end = long2ip( ( ip2long( $net ) ) + pow( 2, ( 32 - (int) $mask ) ) - 1 );
2181
+
2182
+ return cerber_parse_ip( $begin . ' - ' . $end );
2183
+ }
2184
+
2185
+ /**
2186
+ * Try to recognize an IP range or a single IP in a string.
2187
+ *
2188
+ * @param $string string Network wildcard, CIDR or IP range.
2189
+ *
2190
+ * @return array|bool|string
2191
+ */
2192
+ function cerber_any2range( $string = '' ) {
2193
+ // Do not change the order!
2194
+ $ret = cerber_wildcard2range( $string );
2195
+ if ( ! $ret ) {
2196
+ $ret = cerber_cidr2range( $string );
2197
+ }
2198
+ if ( ! $ret ) {
2199
+ $ret = cerber_parse_ip( $string ); // must be last due to checking for cidr and wildcard
2200
+ }
2201
+
2202
+ return $ret;
2203
+ }
2204
+
2205
+ /*
2206
+ Check for given IP address or subnet belong to this session.
2207
+ */
2208
+ function cerber_is_myip( $ip ) {
2209
+ global $wp_cerber;
2210
+ if ( ! is_string( $ip ) ) {
2211
+ return false;
2212
+ }
2213
+ $remote_ip = $wp_cerber->getRemoteIp();
2214
+ if ( $ip == $remote_ip ) {
2215
+ return true;
2216
+ }
2217
+ if ( $ip == cerber_get_subnet( $remote_ip ) ) {
2218
+ return true;
2219
+ }
2220
+
2221
+ return false;
2222
+ }
2223
+
2224
+ function cerber_is_ip_in_range( $range, $ip = null ) {
2225
+ global $wp_cerber;
2226
+ if ( ! is_array( $range ) ) {
2227
+ return false;
2228
+ }
2229
+ if ( ! $ip ) {
2230
+ $ip = $wp_cerber->getRemoteIp();
2231
+ }
2232
+ $long = ip2long( $ip );
2233
+ if ( $range['begin'] <= $long && $long <= $range['end'] ) {
2234
+ return true;
2235
+ }
2236
+
2237
+ return false;
2238
+ }
2239
+
2240
+ /*
2241
+ Display 404 page to bump bots and bad guys
2242
+ */
2243
+ function cerber_404_page() {
2244
+ global $wp_query, $wp_cerber;
2245
+ status_header( '404' );
2246
+ $wp_query->set_404();
2247
+
2248
+ if ( 0 == $wp_cerber->getSettings( 'page404' ) ) {
2249
+ $template = apply_filters( 'cerber_404_template', get_404_template() );
2250
+ if ( @file_exists( $template ) ) {
2251
+ include( $template );
2252
+ exit;
2253
+ }
2254
+ }
2255
+
2256
+ header( 'HTTP/1.0 404 Not Found', true, 404 );
2257
+ echo '<html><head><title>404 Not Found</title></head><body><h1>Not Found</h1><p>The requested URL ' . esc_url( $_SERVER['REQUEST_URI'] ) . ' was not found on this server.</p></body></html>';
2258
+ exit;
2259
+ }
2260
+
2261
+ // Citadel mode -------------------------------------------------------------------------------------
2262
+
2263
+ function cerber_enable_citadel() {
2264
+ global $wp_cerber;
2265
+ if ( get_transient( 'cerber_citadel' ) ) {
2266
+ return;
2267
+ }
2268
+ set_transient( 'cerber_citadel', true, $wp_cerber->getSettings( 'ciduration' ) * 60 );
2269
+ cerber_log( 12 );
2270
+
2271
+ // Notify admin
2272
+ if ( $wp_cerber->getSettings( 'cinotify' ) ) {
2273
+ cerber_send_notify( 'citadel' );
2274
+ }
2275
+ }
2276
+
2277
+ function cerber_disable_citadel() {
2278
+ delete_transient( 'cerber_citadel' );
2279
+ }
2280
+
2281
+ function cerber_is_citadel() {
2282
+ if ( get_transient( 'cerber_citadel' ) ) {
2283
+ return true;
2284
+ }
2285
+
2286
+ return false;
2287
+ }
2288
+
2289
+ // Hardening -------------------------------------------------------------------------------------
2290
+
2291
+ //if (!cerber_acl_check(cerber_get_ip(),'W') && false) {
2292
+
2293
+ /*
2294
+ if ($hardening['ping']) {
2295
+ add_filter( 'xmlrpc_methods', 'remove_xmlrpc_pingback' );
2296
+ function remove_xmlrpc_pingback( $methods ) {
2297
+ unset($methods['pingback.ping']);
2298
+ unset($methods['pingback.extensions.getPingbacks']);
2299
+ return $methods;
2300
+ }
2301
+ add_filter( 'wp_headers', 'remove_pingback_header' );
2302
+ function remove_pingback_header( $headers ) {
2303
+ unset( $headers['X-Pingback'] );
2304
+ return $headers;
2305
+ }
2306
+ }
2307
+ */
2308
+ //pingback_ping();
2309
+
2310
+
2311
+ /*
2312
+ // Remove shortlink from HEAD <link rel='shortlink' href='http://адрес-сайта/?p=45' />
2313
+ remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0 );
2314
+ */
2315
+
2316
+ /**
2317
+ *
2318
+ * Send notification letter
2319
+ *
2320
+ * @param string $type Notification type
2321
+ * @param string $msg Additional message
2322
+ * @param string $ip Remote IP address, if applicable
2323
+ *
2324
+ * @return bool
2325
+ */
2326
+ function cerber_send_notify( $type = '', $msg = '', $ip = '' ) {
2327
+ global $wpdb, $wp_cerber;
2328
+ if ( ! $type ) {
2329
+ return false;
2330
+ }
2331
+
2332
+ if ( $type == 'lockout' && !is_super_admin()) {
2333
+ $rate = absint( $wp_cerber->getSettings( 'emailrate' ) );
2334
+ if ( $rate ) {
2335
+ $last = get_transient( 'cerber_last' );
2336
+ $period = 60 * 60; // per hour
2337
+ if ( $last ) {
2338
+ if ( $last > ( time() - $period / $rate ) ) {
2339
+ return false;
2340
+ }
2341
+ }
2342
+ set_transient( 'cerber_last', time(), $period );
2343
+ }
2344
+ }
2345
+
2346
+ $to = cerber_get_email();
2347
+
2348
+ $subj = '[' . get_option( 'blogname' ) . '] ' . __( 'WP Cerber notify', 'wp-cerber' ) . ': ';
2349
+ $body = '';
2350
+
2351
+ switch ( $type ) {
2352
+ case 'citadel':
2353
+ $max = $wpdb->get_var( 'SELECT MAX(stamp) FROM ' . CERBER_LOG_TABLE . ' WHERE activity = 7' );
2354
+ if ($max) {
2355
+ $last_date = cerber_date( $max );
2356
+ $last = $wpdb->get_row( 'SELECT * FROM ' . CERBER_LOG_TABLE . ' WHERE stamp = ' . $max . ' AND activity = 7' );
2357
+ }
2358
+ else $last = null;
2359
+
2360
+ if ( ! $last ) { // workaround for the empty log table
2361
+ $last = new stdClass();
2362
+ $last->ip = '127.0.0.1';
2363
+ $last->user_login = 'test';
2364
+ }
2365
+
2366
+ $subj .= __( 'Citadel mode is activated', 'wp-cerber' );
2367
+
2368
+ $body = sprintf( __( 'Citadel mode is activated after %d failed login attempts in %d minutes.', 'wp-cerber' ), $wp_cerber->getSettings( 'cilimit' ), $wp_cerber->getSettings( 'ciperiod' ) ) . "\n\n";
2369
+ $body .= sprintf( __( 'Last failed attempt was at %s from IP %s with user login: %s.', 'wp-cerber' ), $last_date, $last->ip, $last->user_login ) . "\n\n";
2370
+ $body .= __( 'View activity in dashboard', 'wp-cerber' ) . ': ' . cerber_admin_link( 'activity' ) . "\n\n";
2371
+ //$body .= __('Change notification settings','wp-cerber').': '.cerber_admin_link();
2372
+ break;
2373
+ case 'lockout':
2374
+ $max = $wpdb->get_var( 'SELECT MAX(stamp) FROM ' . CERBER_LOG_TABLE . ' WHERE activity IN (10,11)' );
2375
+ if ($max){
2376
+ $last_date = cerber_date( $max );
2377
+ $last = $wpdb->get_row( 'SELECT * FROM ' . CERBER_LOG_TABLE . ' WHERE stamp = ' . $max . ' AND activity IN (10,11)' );
2378
+ }
2379
+ else $last = null;
2380
+ if ( ! $last ) { // workaround for the empty log table
2381
+ $last = new stdClass();
2382
+ $last->ip = '127.0.0.1';
2383
+ $last->user_login = 'test';
2384
+ }
2385
+
2386
+ //if ( ! $active = $wpdb->get_var( 'SELECT count(ip) FROM ' . CERBER_BLOCKS_TABLE ) ) {
2387
+ if ( ! $active = cerber_blocked_num() ) {
2388
+ $active = 0;
2389
+ }
2390
+ //if ( $ip && ( $block = cerber_get_block( $ip ) ) ) {
2391
+ if ( $last->ip && ( $block = cerber_get_block( $last->ip ) ) ) {
2392
+ $reason = $block->reason;
2393
+ }
2394
+ else {
2395
+ $reason = __( 'unspecified', 'wp-cerber' );
2396
+ }
2397
+
2398
+ $subj .= __( 'Number of lockouts is increasing', 'wp-cerber' ) . ' (' . $active . ')';
2399
+
2400
+ $body = __( 'Number of active lockouts', 'wp-cerber' ) . ': ' . $active . "\n\n";
2401
+ $body .= sprintf( __( 'Last lockout was added: %s for IP %s', 'wp-cerber' ), $last_date, $last->ip . ' (' . @gethostbyaddr( $last->ip ) . ')' ) . "\n\n";
2402
+ $body .= __( 'Reason', 'wp-cerber' ) . ': ' . strip_tags($reason) . "\n\n";
2403
+ $body .= __( 'View activity for this IP', 'wp-cerber' ) . ': ' . cerber_admin_link( 'activity' ) . '&filter_ip=' . $last->ip . "\n\n";
2404
+ $body .= __( 'View lockouts in dashboard', 'wp-cerber' ) . ': ' . cerber_admin_link( 'lockouts' ) . "\n\n";
2405
+ break;
2406
+ case 'new_version':
2407
+ $subj = __( 'A new version of WP Cerber is available to install', 'wp-cerber' );
2408
+ $body = __( 'Hi!', 'wp-cerber' ) . "\n\n";
2409
+ $body .= __( 'A new version of WP Cerber is available to install', 'wp-cerber' ) . "\n\n";
2410
+ $body .= __( 'Website', 'wp-cerber' ) . ': ' . get_bloginfo( 'name' ) . "\n";
2411
+ break;
2412
+ case 'shutdown':
2413
+ $subj = '[' . get_option( 'blogname' ) . '] ' . __( 'The WP Cerber security plugin has been deactivated', 'wp-cerber' );
2414
+ $body .= __( 'The WP Cerber security plugin has been deactivated', 'wp-cerber' ) . "\n\n";
2415
+ if ( ! is_user_logged_in() ) {
2416
+ $u = __( 'Not logged in', 'wp-cerber' );
2417
+ } else {
2418
+ $user = wp_get_current_user();
2419
+ $u = $user->display_name;
2420
+ }
2421
+ $body .= __( 'Website', 'wp-cerber' ) . ': ' . get_bloginfo( 'name' ) . "\n";
2422
+ $body .= __( 'By user', 'wp-cerber' ) . ': ' . $u . "\n";
2423
+ $body .= __( 'From IP address', 'wp-cerber' ) . ': ' . $wp_cerber->getRemoteIp() . "\n";
2424
+ $whois = cerber_ip_whois_info( $wp_cerber->getRemoteIp() );
2425
+ if ( ! empty( $whois['data']['country'] ) ) {
2426
+ $body .= __( 'From country', 'wp-cerber' ) . ': ' . cerber_country_name( $whois['data']['country'] );
2427
+ }
2428
+ break;
2429
+ case 'activated':
2430
+ $subj = '[' . get_option( 'blogname' ) . '] ' . __( 'The WP Cerber security plugin is now active', 'wp-cerber' );
2431
+ $body .= __( 'WP Cerber is now active and has started protecting your site', 'wp-cerber' ) . "\n\n";
2432
+ $body .= __( 'Change notification settings', 'wp-cerber' ) . ': ' . cerber_admin_link('notifications') . "\n\n";
2433
+ $body .= 'Be in touch with the developer. Subscribe to Cerber\'s newsletter: http://wpcerber.com/subscribe-newsletter/';
2434
+ //$body .= get_bloginfo( 'name' );
2435
+ break;
2436
+ case 'newlurl':
2437
+ $subj .= __( 'New Custom login URL', 'wp-cerber' );
2438
+ $body .= $msg;
2439
+ break;
2440
+ case 'subs':
2441
+ $subj .= __( 'A new activity has been recorded', 'wp-cerber' );
2442
+ $body = __( 'A new activity has been recorded', 'wp-cerber' ) . "\n\n";
2443
+ $body .= $msg;
2444
+ break;
2445
+ }
2446
+
2447
+ $body_filtered = apply_filters( 'cerber_notify_body', $body, array( 'type' => $type,
2448
+ 'IP' => $ip,
2449
+ 'to' => $to,
2450
+ 'subject' => $subj
2451
+ ) );
2452
+ if ( $body_filtered && is_string( $body_filtered ) ) {
2453
+ $body = $body_filtered;
2454
+ } // correct body only allowed
2455
+
2456
+ //$body .= __('This message was sent by','wp-cerber').' <a href="http://wpcerber.com">WP Cerber security plugin</a>.'."\n";
2457
+ $body .= "\n\n\n" . __( 'This message was sent by', 'wp-cerber' ) . " WP Cerber.\n";
2458
+ $body .= 'http://wpcerber.com';
2459
+
2460
+ if ( $to && $subj && $body ) {
2461
+ cerber_pb_send($subj, $body);
2462
+ $result = wp_mail( $to, $subj, $body );
2463
+ }
2464
+ else {
2465
+ $result = false;
2466
+ }
2467
+
2468
+ $params = array( 'type' => $type, 'IP' => $ip, 'to' => $to, 'subject' => $subj );
2469
+ if ( $result ) {
2470
+ do_action( 'cerber_notify_sent', $body, $params );
2471
+ }
2472
+ else {
2473
+ do_action( 'cerber_notify_fail', $body, $params );
2474
+ }
2475
+
2476
+ return $result;
2477
+ }
2478
+
2479
+
2480
+ /*
2481
+ TODO: Return themed page with message instead of login form.
2482
+ */
2483
+ /*
2484
+ function cerber_info_page(){
2485
+ global $wp_query;
2486
+ $wp_query->is_page = true;
2487
+ add_filter('the_content', 'cerber_info_page_content');
2488
+ if(!include(TEMPLATEPATH.'/page.php')) { // wow, theme does not have page.php file?
2489
+ echo '<html><head><title>Login not permited</title></head><body><h1>Login not permited</h1><p>You not allowed to login to this site.</p></body></html>';
2490
+ }
2491
+ exit;
2492
+ }
2493
+ function cerber_info_page_content(){
2494
+ return 'Login not permited.';
2495
+ }
2496
+ */
2497
+
2498
+ // Maintenance routines ----------------------------------------------------------------
2499
+
2500
+ add_action( 'cerber_hourly', 'cerber_do_hourly' );
2501
+ function cerber_do_hourly($force = false) {
2502
+ global $wpdb, $wp_cerber;
2503
+
2504
+ if ( !$force && get_site_transient( 'cerber_multisite' ) ) {
2505
+ return;
2506
+ }
2507
+ set_site_transient( 'cerber_multisite', 'executed', 3600 );
2508
+
2509
+ $days = absint( $wp_cerber->getSettings( 'keeplog' ) );
2510
+ $time = time();
2511
+
2512
+ if ( $days > 0 ) {
2513
+ $wpdb->query( 'DELETE FROM ' . CERBER_LOG_TABLE . ' WHERE stamp < ' . ( $time - $days * 24 * 3600 ) );
2514
+ }
2515
+ if ( $wp_cerber->getSettings( 'cerberlab' ) ) {
2516
+ cerber_push_lab();
2517
+ }
2518
+
2519
+ $wpdb->query( 'DELETE FROM ' . CERBER_LAB_IP_TABLE . ' WHERE expires < ' . $time );
2520
+
2521
+ if ( $wp_cerber->getSettings( 'trashafter-enabled') && absint($wp_cerber->getSettings('trashafter'))) {
2522
+ $list = get_comments( array( 'status' => 'spam' ) );
2523
+ if ( $list ) {
2524
+ $time = time() - DAY_IN_SECONDS * absint($wp_cerber->getSettings( 'trashafter' ));
2525
+ foreach ( $list as $item ) {
2526
+ if ( $time > strtotime( $item->comment_date_gmt ) ) {
2527
+ wp_trash_comment( $item->comment_ID );
2528
+ }
2529
+ }
2530
+ }
2531
+ }
2532
+
2533
+ cerber_up_data();
2534
+ }
2535
+
2536
+ add_action( 'cerber_daily', 'cerber_do_daily' );
2537
+ function cerber_do_daily() {
2538
+ global $wpdb, $wp_cerber;
2539
+
2540
+ cerber_do_hourly( true );
2541
+
2542
+ $time = time();
2543
+
2544
+ if ( $wp_cerber->getSettings( 'cerberlab' ) ) {
2545
+ lab_check_nodes();
2546
+ }
2547
+
2548
+ lab_trunc_push();
2549
+
2550
+ $wpdb->query( 'DELETE FROM ' . CERBER_LAB_NET_TABLE . ' WHERE expires < ' . $time );
2551
+
2552
+ $wpdb->query( 'OPTIMIZE TABLE ' . CERBER_LOG_TABLE );
2553
+ $wpdb->query( 'OPTIMIZE TABLE ' . CERBER_ACL_TABLE );
2554
+ $wpdb->query( 'OPTIMIZE TABLE ' . CERBER_BLOCKS_TABLE );
2555
+ $wpdb->query( 'OPTIMIZE TABLE ' . CERBER_LAB_TABLE );
2556
+ $wpdb->query( 'OPTIMIZE TABLE ' . CERBER_LAB_IP_TABLE );
2557
+ $wpdb->query( 'OPTIMIZE TABLE ' . CERBER_LAB_NET_TABLE );
2558
+
2559
+ lab_validate_key();
2560
+ }
2561
+
2562
+ /*
2563
+ Return system ID of the WP Cerber plugin
2564
+ */
2565
+ function cerber_plug_in() {
2566
+ return plugin_basename( __FILE__ );
2567
+ }
2568
+
2569
+ /*
2570
+ Return plugin info
2571
+ */
2572
+ function cerber_plugin_data() {
2573
+ return get_plugin_data( __FILE__ );
2574
+ }
2575
+
2576
+ /*
2577
+ Return main plugin file
2578
+ */
2579
+ function cerber_plugin_file() {
2580
+ return __FILE__;
2581
+ }
2582
+
2583
+ /*
2584
+ Format date
2585
+ */
2586
+ function cerber_date( $timestamp ) {
2587
+ global $wp_cerber;
2588
+ $timestamp = absint( $timestamp );
2589
+ $gmt_offset = get_option( 'gmt_offset' ) * 3600;
2590
+ if ($df = $wp_cerber->getSettings('dateformat')){
2591
+ return date_i18n( $df, $gmt_offset + $timestamp );
2592
+ }
2593
+ else {
2594
+ $tf = get_option( 'time_format' );
2595
+ $df = get_option( 'date_format' );
2596
+ return date_i18n( $df, $gmt_offset + $timestamp ) . ', ' . date_i18n( $tf, $gmt_offset + $timestamp );
2597
+ }
2598
+ }
2599
+
2600
+ /**
2601
+ * Log activity
2602
+ *
2603
+ * @param int $activity Activity ID
2604
+ * @param string $login Login used or any additional information
2605
+ * @param int $user_id User ID
2606
+ * @param null $ip IP Address
2607
+ *
2608
+ * @return false|int
2609
+ * @since 3.0
2610
+ */
2611
+ function cerber_log( $activity, $login = '', $user_id = 0, $ip = null ) {
2612
+ global $wpdb, $wp_cerber;
2613
+
2614
+ //$wp_cerber->setProcessed();
2615
+
2616
+ if ( empty( $ip ) ) {
2617
+ $ip = $wp_cerber->getRemoteIp();
2618
+ }
2619
+ if ( cerber_is_ipv4( $ip ) ) {
2620
+ $ip_long = ip2long( $ip );
2621
+ }
2622
+ else {
2623
+ $ip_long = 1;
2624
+ }
2625
+ if ( empty( $user_id ) ) {
2626
+ $user_id = 0;
2627
+ }
2628
+
2629
+ $stamp = microtime( true );
2630
+
2631
+ $pos = strpos($_SERVER['REQUEST_URI'],'?');
2632
+ if ($pos) {
2633
+ $path = substr( $_SERVER['REQUEST_URI'], 0, $pos );
2634
+ }
2635
+ else {
2636
+ $path = $_SERVER['REQUEST_URI'];
2637
+ }
2638
+ $url = strip_tags($_SERVER['HTTP_HOST'] . $path);
2639
+
2640
+ $why = 0;
2641
+ if ($activity != 10 && $activity != 11) {
2642
+ $why = cerber_get_status($ip);
2643
+ }
2644
+
2645
+ $details = $why .'|0|0|0|'. $url;
2646
+
2647
+ $ret = $wpdb->query( $wpdb->prepare( 'INSERT INTO ' . CERBER_LOG_TABLE . ' (ip, ip_long, user_login, user_id, stamp, activity, session_id, details) VALUES (%s,%d,%s,%d,%f,%d,%s,%s)', $ip, $ip_long, $login, $user_id, $stamp, $activity, $wp_cerber->getSessionID(), $details ) );
2648
+ if ( ! $ret ) {
2649
+ // workaround for a WP bugs like this: WP silently doesn't not insert a row into a table
2650
+ // https://core.trac.wordpress.org/ticket/32315
2651
+ $ret = $wpdb->insert( CERBER_LOG_TABLE, array(
2652
+ 'ip' => $ip,
2653
+ 'ip_long' => $ip_long,
2654
+ 'user_login' => $login,
2655
+ 'user_id' => $user_id,
2656
+ 'stamp' => $stamp,
2657
+ 'activity' => $activity,
2658
+ 'session_id' => $wp_cerber->getSessionID(),
2659
+ 'details' => $details,
2660
+ ), array( '%s', '%d', '%s', '%d', '%f', '%d' ) );
2661
+ }
2662
+
2663
+ if ( ! $ret ) {
2664
+ cerber_watchdog();
2665
+ }
2666
+
2667
+ // Subscriptions - notifications for admin ---------------------------------------------------
2668
+
2669
+ $subs = get_site_option( '_cerber_subs', null );
2670
+
2671
+ if (!empty($subs)) {
2672
+ foreach ( $subs as $hash => $sub ) {
2673
+
2674
+ // Loop through parameters
2675
+ if ( ! empty( $sub[1] ) && $sub[1] != $user_id ) {
2676
+ continue;
2677
+ }
2678
+ if ( ! empty( $sub[3] ) && ( $ip_long < $sub[2] || $sub[3] < $ip_long ) ) {
2679
+ continue;
2680
+ }
2681
+ if ( ! empty( $sub[4] ) && $sub[4] != $ip ) {
2682
+ continue;
2683
+ }
2684
+ if ( ! empty( $sub[5] ) && $sub[5] != $login ) {
2685
+ continue;
2686
+ }
2687
+ if ( ! empty( $sub[6] ) && (false === strpos( $ip, $sub[6] )) && (false === mb_strpos( $login, $sub[6] )) ) {
2688
+ continue;
2689
+ }
2690
+
2691
+ // Some parameter(s) matched, send notification
2692
+
2693
+ $labels = cerber_get_labels( 'activity' );
2694
+
2695
+ $msg = __( 'Activity', 'wp-cerber' ) . ': ' . $labels[$activity] . "\n\n";
2696
+ $msg .= __( 'IP', 'wp-cerber' ) . ': ' . $ip . "\n\n";
2697
+
2698
+ if ( $user_id ) {
2699
+ $u = get_userdata( $user_id );
2700
+ $msg .= __( 'User', 'wp-cerber' ) . ': ' . $u->display_name . "\n\n";
2701
+ }
2702
+
2703
+ if ( $login ) {
2704
+ $msg .= __( 'Username used', 'wp-cerber' ) . ': ' . $login . "\n\n";
2705
+ }
2706
+
2707
+ if ( ! empty( $sub['6'] ) ) {
2708
+ $msg .= __( 'Search string', 'wp-cerber' ) . ': ' . $sub['6'] . "\n\n";
2709
+ }
2710
+
2711
+ $args = cerber_subscribe_params();
2712
+ $i = 0; $str = '';
2713
+ foreach ($args as $arg => $val){
2714
+ $str .= '&'.$arg.'='.$sub[$i];
2715
+ $i++;
2716
+ }
2717
+
2718
+ $link = cerber_admin_link( 'activity' ).$str;
2719
+
2720
+ $msg .= __( 'View activity in dashboard', 'wp-cerber' ) . ': ' . $link;
2721
+ $msg .= "\n\n" . __( 'To unsubscribe click here', 'wp-cerber' ) .': '. cerber_admin_link( 'activity' ).'&unsubscribeme='.$hash;
2722
+
2723
+ cerber_send_notify( 'subs', $msg, $ip );
2724
+
2725
+ break; // Just one notification letter per event
2726
+ }
2727
+ }
2728
+
2729
+ if ( $activity == 40 && $wp_cerber->getSettings( 'cerberlab' ) ) {
2730
+ lab_save_push( $ip, $activity, '' );
2731
+ }
2732
+
2733
+ return $ret;
2734
+ }
2735
+
2736
+ function cerber_get_log( $args ) {
2737
+ global $wpdb, $wp_cerber;
2738
+
2739
+ $locked = $wpdb->get_var('SELECT count(ip) FROM '. CERBER_LOG_TABLE .' WHERE activity IN (10,11) AND stamp > '.(time() - 24 * 3600));
2740
+
2741
+ }
2742
+
2743
+ function cerber_count_log($activity = array()) {
2744
+ global $wpdb;
2745
+
2746
+ // TODO: replace with SELECT COUNT(DISTINCT session_id)
2747
+ $ret = $wpdb->get_var('SELECT COUNT(ip) FROM '. CERBER_LOG_TABLE .' WHERE activity IN ('.implode(',',$activity).') AND stamp > '.(time() - 24 * 3600));
2748
+ if (!$ret) $ret = 0;
2749
+
2750
+ return $ret;
2751
+ }
2752
+
2753
+ /**
2754
+ * Create a set of parameters for using it in Subscriptions
2755
+ * The keys are used to built an URL. Values to calculate a hash.
2756
+ *
2757
+ * @return array The set of parameters
2758
+ */
2759
+ function cerber_subscribe_params() {
2760
+ $begin = 0;
2761
+ $end = 0;
2762
+ $ip = 0;
2763
+ if ( ! empty( $_GET['filter_ip'] ) ) {
2764
+ $ip = cerber_any2range( $_GET['filter_ip'] );
2765
+ if ( is_array( $ip ) ) {
2766
+ $begin = $ip['begin'];
2767
+ $end = $ip['end'];
2768
+ $ip = 0;
2769
+ } elseif ( ! $ip ) {
2770
+ $ip = 0;
2771
+ }
2772
+ }
2773
+
2774
+ $filter_activity = ( empty( $_GET['filter_activity'] ) ) ? 0 : $_GET['filter_activity'];
2775
+ $filter_user = ( empty( $_GET['filter_user'] ) ) ? 0 : $_GET['filter_user'];
2776
+ $filter_login = ( empty( $_GET['filter_login'] ) ) ? 0 : $_GET['filter_login'];
2777
+ $search_activity = ( empty( $_GET['search_activity'] ) ) ? 0 : $_GET['search_activity'];
2778
+ $filter_role = ( empty( $_GET['filter_role'] ) ) ? 0 : $_GET['filter_role'];
2779
+
2780
+ // 'begin' and 'end' array keys are not used, added for compatibility
2781
+ return array( 'filter_activity' => $filter_activity, 'filter_user' => $filter_user, 'being' => $begin, 'end' => $end, 'filter_ip' => $ip, 'filter_login' => $filter_login, 'search_activity' => $search_activity, 'filter_role' => $filter_role );
2782
+ }
2783
+
2784
+ /*
2785
+ Plugin activation
2786
+ */
2787
+ register_activation_hook( __FILE__, 'cerber_activate' );
2788
+ function cerber_activate() {
2789
+ global $wp_version, $wp_cerber;
2790
+ $assets_url = plugin_dir_url( CERBER_FILE ) . 'assets';
2791
+
2792
+ //cerber_load_lang();
2793
+ load_plugin_textdomain( 'wp-cerber', false, basename( dirname( __FILE__ ) ) . '/languages' );
2794
+
2795
+ if ( version_compare( CERBER_REQ_PHP, phpversion(), '>' ) ) {
2796
+ cerber_stop_activating( '<h3>' . sprintf( __( 'The WP Cerber requires PHP %s or higher. You are running', 'wp-cerber' ), CERBER_REQ_PHP ) . ' ' . phpversion() . '</h3>' );
2797
+ }
2798
+
2799
+ if ( version_compare( CERBER_REQ_WP, $wp_version, '>' ) ) {
2800
+ cerber_stop_activating( '<h3>' . sprintf( __( 'The WP Cerber requires WordPress %s or higher. You are running', 'wp-cerber' ), CERBER_REQ_WP ) . ' ' . $wp_version . '</h3>' );
2801
+ }
2802
+
2803
+ $db_errors = cerber_create_db();
2804
+ if ( $db_errors ) {
2805
+ cerber_stop_activating( '<h3>' . __( "Can't activate WP Cerber due to a database error.", 'wp-cerber' ) . '</h3><p>' . implode( '<p>', $db_errors ) );
2806
+ }
2807
+
2808
+ cerber_upgrade_all();
2809
+
2810
+ cerber_cookie1();
2811
+ cerber_disable_citadel();
2812
+ //cerber_get_groove();
2813
+
2814
+ if ( ! is_object( $wp_cerber ) ) {
2815
+ $wp_cerber = new WP_Cerber();
2816
+ }
2817
+ cerber_add_white( cerber_get_subnet( $wp_cerber->getRemoteIp() ) ); // Protection for non-experienced user
2818
+
2819
+ cerber_admin_message(
2820
+ '<img style="float:left; margin-left:-10px;" src="' . $assets_url . '/icon-128x128.png">' .
2821
+ '<p style="font-size:120%;">' . __( 'WP Cerber is now active and has started protecting your site', 'wp-cerber' ) . '</p>' .
2822
+ ' <p>' . __( 'Your IP address is added to the', 'wp-cerber' ) . ' ' . __( 'White IP Access List', 'wp-cerber' ) .
2823
+
2824
+ ' <p><b>' . __( "It's important to check security settings.", 'wp-cerber' ) . '</b> &nbsp;<a href="http://wpcerber.com/" target="_blank">Read Cerber\'s blog</a> ' .
2825
+ '&nbsp; <a href="http://wpcerber.com/subscribe-newsletter/" target="_blank">Subscribe to Cerber\'s newsletter</a></p>' .
2826
+
2827
+ ' <p> </p><p><span class="dashicons dashicons-admin-settings"></span> <a href="' . cerber_admin_link( 'main' ) . '">' . __( 'Main Settings', 'wp-cerber' ) . '</a>' .
2828
+ ' <span style="margin-left:20px;" class="dashicons dashicons-admin-network"></span> <a href="' . cerber_admin_link( 'acl' ) . '">' . __( 'Access Lists', 'wp-cerber' ) . '</a>' .
2829
+ ' <span style="margin-left:20px;" class="dashicons dashicons-shield-alt"></span> <a href="' . cerber_admin_link( 'hardening' ) . '">' . __( 'Hardening', 'wp-cerber' ) . '</a>' .
2830
+ ' <span style="margin-left:20px;" class="dashicons dashicons-controls-volumeon"></span> <a href="' . cerber_admin_link( 'notifications' ) . '">' . __( 'Notifications', 'wp-cerber' ) . '</a>' .
2831
+ ' <span style="margin-left:20px;" class="dashicons dashicons-admin-tools"></span> <a href="' . cerber_admin_link( 'tools' ) . '">' . __( 'Import settings', 'wp-cerber' ) . '</a>' .
2832
+ '</p>' );
2833
+
2834
+
2835
+ // Check for existing options
2836
+ $opt = cerber_get_options();
2837
+ $opt = array_filter( $opt );
2838
+ if ( ! empty( $opt ) ) {
2839
+ return;
2840
+ }
2841
+
2842
+ cerber_load_defaults();
2843
+
2844
+ cerber_send_notify( 'activated' );
2845
+
2846
+ $pi = get_file_data( cerber_plugin_file(), array( 'Version' => 'Version' ), 'plugin' );
2847
+ $pi ['time'] = time();
2848
+ $pi ['user'] = get_current_user_id();
2849
+ update_site_option( '_cerber_activated', serialize( $pi ) );
2850
+ }
2851
+
2852
+ /*
2853
+ Abort activating plugin!
2854
+ */
2855
+ function cerber_stop_activating( $msg ) {
2856
+ deactivate_plugins( plugin_basename( __FILE__ ) );
2857
+ wp_die( $msg );
2858
+ }
2859
+
2860
+ /**
2861
+ * Upgrade database tables, data and plugin settings
2862
+ *
2863
+ * @since 3.0
2864
+ *
2865
+ */
2866
+ function cerber_upgrade_all() {
2867
+ $ver = get_site_option( '_cerber_up', false );
2868
+ if ( ! $ver || $ver['v'] != CERBER_VER ) {
2869
+ cerber_create_db();
2870
+ cerber_upgrade_db();
2871
+
2872
+ cerber_push_the_news( CERBER_VER );
2873
+ cerber_acl_fixer();
2874
+ cerber_antibot_gene();
2875
+
2876
+ // Updating the plugin settings ----------------------------------------------
2877
+
2878
+ // @since 4.4
2879
+ $main = get_site_option( CERBER_OPT );
2880
+ if (!empty($main['email']) || !empty($main['emailrate'])){
2881
+ $new = get_site_option( CERBER_OPT_N, array() );
2882
+ $new['email'] = $main['email'];
2883
+ $new['emailrate'] = $main['emailrate'];
2884
+ update_site_option( CERBER_OPT_N, $new );
2885
+ // clean up old values
2886
+ $main['email'] = '';
2887
+ $main['emailrate'] = '';
2888
+ update_site_option( CERBER_OPT, $main );
2889
+ }
2890
+
2891
+ // @since 4.8, new settings
2892
+ $settings = get_site_option( CERBER_OPT_C );
2893
+ $new_fields = array('recaptcha-period', 'recaptcha-number', 'recaptcha-within');
2894
+ foreach ( $new_fields as $field ) {
2895
+ if (!isset($settings[$field])) $settings[$field] = cerber_get_defaults($field);
2896
+ }
2897
+ update_site_option( CERBER_OPT_C, $settings );
2898
+
2899
+ update_site_option( '_cerber_up', array( 'v' => CERBER_VER, 't' => time() ) );
2900
+ }
2901
+ }
2902
+
2903
+ /**
2904
+ * Creates DB tables if they don't exist
2905
+ *
2906
+ * @param bool $recreate If true, recreate some tables completely (with data lost)
2907
+ *
2908
+ * @return array Errors
2909
+ */
2910
+ function cerber_create_db($recreate = true) {
2911
+ global $wpdb;
2912
+
2913
+ $wpdb->hide_errors();
2914
+ $db_errors = array();
2915
+ $sql = array();
2916
+
2917
+ if (!cerber_is_table(CERBER_LOG_TABLE)){
2918
+ $sql[] = "
2919
+ CREATE TABLE IF NOT EXISTS " . CERBER_LOG_TABLE . " (
2920
+ ip varchar(39) CHARACTER SET ascii NOT NULL COMMENT 'Remote IP',
2921
+ user_login varchar(60) NOT NULL COMMENT 'Username from HTTP request',
2922
+ user_id bigint(20) unsigned NOT NULL DEFAULT '0',
2923
+ stamp bigint(20) unsigned NOT NULL COMMENT 'Unix timestamp',
2924
+ activity int(10) unsigned NOT NULL DEFAULT '0',
2925
+ KEY ip (ip)
2926
+ ) DEFAULT CHARSET=utf8 COMMENT='Cerber activity log';
2927
+ ";
2928
+ }
2929
+
2930
+ if (!cerber_is_table(CERBER_ACL_TABLE)){
2931
+ $sql[] = "
2932
+ CREATE TABLE IF NOT EXISTS " . CERBER_ACL_TABLE . " (
2933
+ ip varchar(39) CHARACTER SET ascii NOT NULL COMMENT 'IP',
2934
+ tag char(1) NOT NULL COMMENT 'Type: B or W',
2935
+ comments varchar(250) NOT NULL,
2936
+ UNIQUE KEY ip (ip)
2937
+ ) DEFAULT CHARSET=utf8 COMMENT='Cerber IP Access Lists';
2938
+ ";
2939
+ }
2940
+
2941
+ if (!cerber_is_table(CERBER_BLOCKS_TABLE)){
2942
+ $sql[] = "
2943
+ CREATE TABLE IF NOT EXISTS " . CERBER_BLOCKS_TABLE . " (
2944
+ ip varchar(39) CHARACTER SET ascii NOT NULL COMMENT 'Remote IP',
2945
+ block_until bigint(20) unsigned NOT NULL COMMENT 'Unix timestamp',
2946
+ reason varchar(250) NOT NULL COMMENT 'Why IP was blocked',
2947
+ UNIQUE KEY ip (ip)
2948
+ ) DEFAULT CHARSET=utf8 COMMENT='Cerber list of currently blocked IPs';
2949
+ ";
2950
+ }
2951
+
2952
+ if (!cerber_is_table(CERBER_LAB_TABLE)){
2953
+ $sql[] = "
2954
+ CREATE TABLE IF NOT EXISTS " . CERBER_LAB_TABLE . " (
2955
+ ip varchar(39) CHARACTER SET ascii NOT NULL COMMENT 'Remote IP',
2956
+ reason_id int(11) unsigned NOT NULL DEFAULT '0',
2957
+ stamp bigint(20) unsigned NOT NULL COMMENT 'Unix timestamp',
2958
+ details text NOT NULL
2959
+ ) DEFAULT CHARSET=utf8 COMMENT='Cerber lab cache';
2960
+ ";
2961
+ }
2962
+
2963
+
2964
+ if ($recreate || !cerber_is_table(CERBER_LAB_IP_TABLE)){
2965
+ if ( $recreate && cerber_is_table( CERBER_LAB_IP_TABLE ) ) {
2966
+ $sql[] = 'DROP TABLE ' . CERBER_LAB_IP_TABLE;
2967
+ }
2968
+ $sql[] = "
2969
+ CREATE TABLE IF NOT EXISTS " . CERBER_LAB_IP_TABLE . " (
2970
+ ip varchar(39) CHARACTER SET ascii NOT NULL COMMENT 'IP',
2971
+ reputation INT(11) UNSIGNED NOT NULL COMMENT 'Reputation of IP',
2972
+ expires INT(11) UNSIGNED NOT NULL COMMENT 'Unix timestamp',
2973
+ PRIMARY KEY (ip)
2974
+ ) DEFAULT CHARSET=utf8 COMMENT='Cerber lab IP cache';
2975
+ ";
2976
+ }
2977
+
2978
+ if ( $recreate || ! cerber_is_table( CERBER_LAB_NET_TABLE ) ) {
2979
+ if ( $recreate && cerber_is_table( CERBER_LAB_NET_TABLE ) ) {
2980
+ $sql[] = 'DROP TABLE ' . CERBER_LAB_NET_TABLE;
2981
+ }
2982
+ $sql[] = '
2983
+ CREATE TABLE IF NOT EXISTS ' . CERBER_LAB_NET_TABLE . ' (
2984
+ ip varchar(39) CHARACTER SET ascii NOT NULL COMMENT "Malicious IP",
2985
+ expires INT(11) UNSIGNED NOT NULL,
2986
+ PRIMARY KEY (ip)
2987
+ ) DEFAULT CHARSET=utf8 COMMENT="Cerber lab network cache";
2988
+ ';
2989
+ }
2990
+
2991
+ foreach ( $sql as $query ) {
2992
+ if ( ! $wpdb->query( $query ) && $wpdb->last_error ) {
2993
+ $db_errors[] = array( $wpdb->last_error, $wpdb->last_query );
2994
+ }
2995
+ }
2996
+
2997
+ return $db_errors;
2998
+ }
2999
+
3000
+ /**
3001
+ * Upgrade structure of existing DB tables
3002
+ *
3003
+ * @return array Errors during upgrading
3004
+ * @since 3.0
3005
+ */
3006
+ function cerber_upgrade_db( $force = false ) {
3007
+ global $wpdb;
3008
+ $wpdb->hide_errors();
3009
+ if ($force) $wpdb->suppress_errors();
3010
+ $db_errors = array();
3011
+ $sql = array();
3012
+
3013
+ // @since 3.0
3014
+ $sql[] = 'ALTER TABLE ' . CERBER_LOG_TABLE . ' CHANGE stamp stamp DECIMAL(14,4) NOT NULL';
3015
+
3016
+ // @since 3.1
3017
+ if ( $force || ! cerber_is_column( CERBER_LOG_TABLE, 'ip_long' ) ) {
3018
+ $sql[] = 'ALTER TABLE ' . CERBER_LOG_TABLE . ' ADD ip_long BIGINT UNSIGNED NOT NULL DEFAULT "0" COMMENT "IPv4 long" AFTER ip, ADD INDEX (ip_long)';
3019
+ }
3020
+ if ( $force || ! cerber_is_column( CERBER_ACL_TABLE, 'ip_long_begin' ) ) {
3021
+ $sql[] = 'ALTER TABLE ' . CERBER_ACL_TABLE . " ADD ip_long_begin BIGINT UNSIGNED NOT NULL DEFAULT '0' COMMENT 'IPv4 range begin' AFTER ip, ADD ip_long_end BIGINT UNSIGNED NOT NULL DEFAULT '0' COMMENT 'IPv4 range end' AFTER ip_long_begin";
3022
+ }
3023
+ if ( $force || !cerber_is_index( CERBER_ACL_TABLE, 'ip_begin_end' ) ) {
3024
+ $sql[] = 'ALTER TABLE ' . CERBER_ACL_TABLE . ' ADD UNIQUE ip_begin_end (ip, ip_long_begin, ip_long_end)';
3025
+ }
3026
+ if ( $force || cerber_is_index( CERBER_ACL_TABLE, 'ip' ) ) {
3027
+ $sql[] = 'ALTER TABLE ' . CERBER_ACL_TABLE . ' DROP INDEX ip';
3028
+ }
3029
+
3030
+ // @since 4.8.2
3031
+ if ( $force || cerber_is_index( CERBER_ACL_TABLE, 'begin_end' ) ) {
3032
+ $sql[] = 'ALTER TABLE ' . CERBER_ACL_TABLE . ' DROP INDEX begin_end';
3033
+ }
3034
+ if ( $force || !cerber_is_index( CERBER_ACL_TABLE, 'begin_end_tag' ) ) {
3035
+ $sql[] = 'ALTER TABLE ' . CERBER_ACL_TABLE . ' ADD INDEX begin_end_tag (ip_long_begin, ip_long_end, tag)';
3036
+ }
3037
+
3038
+ // @since 4.9
3039
+ if ( $force || ! cerber_is_column( CERBER_ACL_TABLE, 'session_id' ) ) {
3040
+ $sql[] = 'ALTER TABLE cerber_log
3041
+ ADD session_id CHAR(32) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT "",
3042
+ ADD country CHAR(3) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT "" COMMENT "Country code",
3043
+ ADD details VARCHAR(250) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL DEFAULT "" COMMENT "Details about HTTP request";
3044
+ ';
3045
+ }
3046
+
3047
+ if (!empty($sql)) {
3048
+ foreach ( $sql as $query ) {
3049
+ if ( !$wpdb->query( $query ) && $wpdb->last_error ) {
3050
+ $db_errors[] = array( $wpdb->last_error, $wpdb->last_query );
3051
+ }
3052
+ }
3053
+ }
3054
+
3055
+
3056
+ // Convert existing data into the new format
3057
+ $rows = $wpdb->get_results( 'SELECT * FROM ' . CERBER_ACL_TABLE );
3058
+ if ( $rows ) {
3059
+ foreach ( $rows as $row ) {
3060
+ $range = cerber_wildcard2range( $row->ip );
3061
+ if ( is_array( $range ) ) {
3062
+ $begin = $range['begin'];
3063
+ $end = $range['end'];
3064
+ } elseif ( cerber_is_ipv4( $row->ip ) ) {
3065
+ $begin = ip2long( $row->ip );
3066
+ $end = ip2long( $row->ip );
3067
+ } else {
3068
+ $begin = 0;
3069
+ $end = 0;
3070
+ }
3071
+ $query = $wpdb->prepare( 'UPDATE ' . CERBER_ACL_TABLE . ' SET ip_long_begin = %d, ip_long_end = %d WHERE ip = %s', $begin, $end, $row->ip );
3072
+ if ( ! $wpdb->query( $query ) ) {
3073
+ if ( $wpdb->last_error ) {
3074
+ $db_errors[] = array( $wpdb->last_error, $wpdb->last_query );
3075
+ }
3076
+ }
3077
+ }
3078
+ }
3079
+
3080
+ if ( $db_errors ) {
3081
+ update_site_option( '_cerber_db_errors', $db_errors );
3082
+ }
3083
+ else {
3084
+ update_site_option( '_cerber_db_errors', '' );
3085
+ }
3086
+
3087
+ return $db_errors;
3088
+ }
3089
+
3090
+ /**
3091
+ * Updating old activity log records to the new row format (has been introduced in v 3.1)
3092
+ *
3093
+ * @since 4.0
3094
+ *
3095
+ */
3096
+ function cerber_up_data() {
3097
+ global $wpdb;
3098
+ $ips = $wpdb->get_col( 'SELECT DISTINCT ip FROM ' . CERBER_LOG_TABLE . ' WHERE ip_long = 0 LIMIT 50' );
3099
+ if ( ! $ips ) {
3100
+ return;
3101
+ }
3102
+ foreach ( $ips as $ip ) {
3103
+ if ( cerber_is_ipv4( $ip ) ) {
3104
+ $ip_long = ip2long( $ip );
3105
+ } else {
3106
+ $ip_long = 1;
3107
+ }
3108
+ $wpdb->query( 'UPDATE ' . CERBER_LOG_TABLE . ' SET ip_long = ' . $ip_long . ' WHERE ip = "' . $ip .'" AND ip_long = 0');
3109
+ }
3110
+ }
3111
+
3112
+ /**
3113
+ * Just fix corrupted (have no long values) ACL entries
3114
+ *
3115
+ */
3116
+ function cerber_acl_fixer(){
3117
+ global $wpdb;
3118
+ $rows = $wpdb->get_col( 'SELECT ip FROM ' . CERBER_ACL_TABLE . ' WHERE ip_long_begin = 0 OR ip_long_end = 0' );
3119
+ if ( ! $rows ) {
3120
+ return;
3121
+ }
3122
+ foreach ( $rows as $ip ) {
3123
+ if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) continue;
3124
+ $range = cerber_any2range( $ip );
3125
+ if ( is_array( $range ) ) {
3126
+ $begin = $range['begin'];
3127
+ $end = $range['end'];
3128
+ } else {
3129
+ $begin = ip2long( $ip );
3130
+ $end = ip2long( $ip );
3131
+ }
3132
+
3133
+ $wpdb->query( 'UPDATE ' . CERBER_ACL_TABLE . ' SET ip_long_begin = ' . $begin . ', ip_long_end = ' . $end . ' WHERE ip = "' . $ip .'"');
3134
+ }
3135
+ }
3136
+
3137
+ $file = plugin_basename( cerber_plugin_file() );
3138
+ add_action( 'deac' . 'tivate_' . $file, 'cerber_clean' );
3139
+ function cerber_clean( $ip ) {
3140
+ wp_clear_scheduled_hook( 'cerber' . '_hourly' );
3141
+ $pi = get_file_data( cerber_plugin_file(), array( 'Version' => 'Version' ), 'plugin' );
3142
+ $pi ['v'] = time();
3143
+ $pi ['u'] = get_current_user_id();
3144
+ update_site_option( '_cerber_o' . 'ff', $pi );
3145
+ $f = 'cerb' . 'er_se' . 'nd_not' . 'ify';
3146
+ $f( 'sh' . 'utd' . 'own' );
3147
+ }
3148
+
3149
+ /*
3150
+ Fix an issue with the empty user_id field in the comments table.
3151
+ */
3152
+ add_filter( 'preprocess_comment', 'cerber_add_uid' );
3153
+ function cerber_add_uid( $commentdata ) {
3154
+ $current_user = wp_get_current_user();
3155
+ $commentdata['user_ID'] = $current_user->ID;
3156
+
3157
+ return $commentdata;
3158
+ }
3159
+
3160
+ /**
3161
+ * Load jQuery on the page
3162
+ *
3163
+ */
3164
+ add_action( 'login_enqueue_scripts', 'cerber_login_scripts' );
3165
+ function cerber_login_scripts() {
3166
+ if ( cerber_antibot_enabled( 'botsreg' ) ) {
3167
+ wp_enqueue_script( 'jquery' );
3168
+ }
3169
+ }
3170
+ add_action( 'wp_enqueue_scripts', 'cerber_scripts' );
3171
+ function cerber_scripts() {
3172
+ global $wp_cerber;
3173
+ if ( ( is_singular() && cerber_antibot_enabled( array( 'botscomm', 'botsany' ) ) )
3174
+ || ( $wp_cerber->getSettings( 'sitekey' ) && $wp_cerber->getSettings( 'secretkey' ) )
3175
+ ) {
3176
+ wp_enqueue_script( 'jquery' );
3177
+ }
3178
+ }
3179
+
3180
+ /**
3181
+ * Footer stuff
3182
+ * Explicit rendering reCAPTCHA
3183
+ *
3184
+ */
3185
+ add_action( 'login_footer', 'cerber_login_foo', 1000 );
3186
+ function cerber_login_foo( $ip ) {
3187
+ global $wp_cerber;
3188
+
3189
+ cerber_antibot_code('botsreg');
3190
+
3191
+ // Universal JS
3192
+ if (!$wp_cerber->recaptcha_here) return;
3193
+
3194
+ $sitekey = $wp_cerber->getSettings('sitekey');
3195
+
3196
+ if (!$wp_cerber->getSettings('invirecap')){
3197
+ // Classic version (visible reCAPTCHA)
3198
+ echo '<script src = https://www.google.com/recaptcha/api.js?hl='.cerber_recaptcha_lang().' async defer></script>';
3199
+ }
3200
+ else {
3201
+ // Pure JS version with explicit rendering
3202
+ ?>
3203
+ <script src="https://www.google.com/recaptcha/api.js?onload=init_recaptcha_widgets&render=explicit&hl=<?php echo cerber_recaptcha_lang(); ?>" async defer></script>
3204
+ <script type='text/javascript'>
3205
+
3206
+ document.getElementById("cerber-recaptcha").remove();
3207
+
3208
+ var init_recaptcha_widgets = function () {
3209
+ for (var i = 0; i < document.forms.length; ++i) {
3210
+ var form = document.forms[i];
3211
+ var place = form.querySelector('.cerber-form-marker');
3212
+ if (null !== place) render_recaptcha_widget(form, place);
3213
+ }
3214
+ };
3215
+
3216
+ function render_recaptcha_widget(form, place) {
3217
+ var place_id = grecaptcha.render(place, {
3218
+ 'callback': function (g_recaptcha_response) {
3219
+ HTMLFormElement.prototype.submit.call(form);
3220
+ },
3221
+ 'sitekey': '<?php echo $sitekey; ?>',
3222
+ 'size': 'invisible',
3223
+ 'badge': 'bottomright'
3224
+ });
3225
+
3226
+ form.onsubmit = function (event) {
3227
+ event.preventDefault();
3228
+ grecaptcha.execute(place_id);
3229
+ };
3230
+
3231
+ }
3232
+ </script>
3233
+ <?php
3234
+ }
3235
+ }
3236
+
3237
+ /**
3238
+ * Inline reCAPTCHA widget
3239
+ *
3240
+ */
3241
+ add_action( 'wp_footer', 'cerber_foo', 1000 );
3242
+ function cerber_foo() {
3243
+ global $wp_cerber;
3244
+
3245
+ if (is_singular()) cerber_antibot_code( array( 'botscomm', 'botsany' ) );
3246
+
3247
+ if (!$wp_cerber->recaptcha_here) return;
3248
+
3249
+ // jQuery version with support visible and invisible reCAPTCHA
3250
+ // TODO: convert it into pure JS
3251
+ ?>
3252
+ <script type="text/javascript">
3253
+
3254
+ jQuery(document).ready(function ($) {
3255
+
3256
+ var recaptcha_ok = false;
3257
+ var the_recaptcha_widget = $("#cerber-recaptcha");
3258
+ var is_recaptcha_visible = ($(the_recaptcha_widget).data('size') !== 'invisible');
3259
+
3260
+ var the_form = $(the_recaptcha_widget).closest("form");
3261
+ var the_button = $(the_form).find('input[type="submit"]');
3262
+ if (!the_button.length) {
3263
+ the_button = $(the_form).find(':button');
3264
+ }
3265
+
3266
+ // visible
3267
+ if (the_button.length && is_recaptcha_visible) {
3268
+ the_button.prop("disabled", true);
3269
+ the_button.css("opacity", 0.5);
3270
+ }
3271
+
3272
+ window.form_button_enabler = function () {
3273
+ if (!the_button.length) return;
3274
+ the_button.prop("disabled", false);
3275
+ the_button.css( "opacity", 1 );
3276
+ };
3277
+
3278
+ // invisible
3279
+ if (!is_recaptcha_visible) {
3280
+ $(the_button).click(function (event) {
3281
+ if (recaptcha_ok) return;
3282
+ event.preventDefault();
3283
+ grecaptcha.execute();
3284
+ });
3285
+ }
3286
+
3287
+ window.now_submit_the_form = function () {
3288
+ recaptcha_ok = true;
3289
+ $(the_button).click(); // this is only way to submit a form that contains "submit" inputs
3290
+ };
3291
+ });
3292
+ </script>
3293
+ <script src = "https://www.google.com/recaptcha/api.js?hl=<?php echo cerber_recaptcha_lang(); ?>" async defer></script>
3294
+ <?php
3295
+ }