IP Geo Block - Version 3.0.14

Version Description

  • Fix issue: Fix wrong handling of anonymized IPv6 on clicking a link or applying bulk actions.
  • Fix issue: Fix the issue that added a server's country code which was not in "Whitelist of country code" but its IP address was in "Whitelist of extra IP addresses prior to country code" on activation. (forum topic)
  • Fix issue: Fix the issue of "Fatal error: Call to undefined function" which caused 500 Internal error on admin screen under a certain condition.
  • Fix issue: Fix the issue of undefined symbol for openssl in PHP 5.3.5 and under.
  • New feature: Introduce an emergency login link in "Plugins settings" section.
  • New feature: Introduce a new filter hook ip-geo-block-dns to specify the primary and secondary domain name resolvers.
  • New feature: Introduce a new filter hook ip-geo-block-logs. (forum topic)
  • New feature: Introduce a new drop-in file drop-in-admin.php in Geolocation API library folder.
  • Improvement: Provide help links on "Settings" tab.
  • Improvement: Sort out some related items in the section on "Settings" tab.
  • Improvement: All the http had been replaced to https if possible.
Download this release

Release Info

Developer tokkonopapa
Plugin Icon 128x128 IP Geo Block
Version 3.0.14
Comparing to
See all releases

Code changes from version 3.0.12.1 to 3.0.14

Files changed (151) hide show
  1. README.txt +78 -56
  2. admin/class-ip-geo-block-admin.php +95 -59
  3. admin/css/admin-icons.css +90 -34
  4. admin/css/admin-icons.min.css +7 -2
  5. admin/css/admin.css +89 -74
  6. admin/css/admin.min.css +1 -1
  7. admin/css/cidr.min.css +1 -1
  8. admin/css/fonts/icomoon.eot +0 -0
  9. admin/css/fonts/icomoon.svg +2 -7
  10. admin/css/fonts/icomoon.ttf +0 -0
  11. admin/css/fonts/icomoon.woff +0 -0
  12. admin/datatables/css/datatables-all.css +218 -181
  13. admin/datatables/css/datatables-all.min.css +5 -3
  14. admin/datatables/js/dataTables.responsive.js +3 -3
  15. admin/datatables/js/datatables-all.js +13 -13
  16. admin/datatables/js/datatables-all.min.js +1 -1
  17. admin/datatables/js/jquery.dataTables.js +10 -10
  18. admin/datatables/js/jquery.dataTables.min.js +1 -1
  19. admin/datatables/license.txt +1 -1
  20. admin/images/ajax-loader-snake.gif +0 -0
  21. admin/includes/class-admin-ajax.php +39 -27
  22. admin/includes/class-admin-rewrite.php +3 -3
  23. admin/includes/tab-accesslog.php +14 -20
  24. admin/includes/tab-attribution.php +4 -9
  25. admin/includes/tab-geolocation.php +17 -20
  26. admin/includes/tab-network.php +3 -5
  27. admin/includes/tab-settings.php +460 -513
  28. admin/includes/tab-statistics.php +29 -40
  29. admin/js/admin.js +63 -28
  30. admin/js/admin.min.js +6 -6
  31. admin/js/whois.js +2 -2
  32. admin/js/whois.min.js +1 -1
  33. classes/class-ip-geo-block-actv.php +1 -1
  34. classes/class-ip-geo-block-apis.php +20 -20
  35. classes/class-ip-geo-block-cron.php +5 -5
  36. classes/class-ip-geo-block-file.php +2 -2
  37. classes/class-ip-geo-block-lkup.php +30 -35
  38. classes/class-ip-geo-block-load.php +1 -1
  39. classes/class-ip-geo-block-logs.php +326 -108
  40. classes/class-ip-geo-block-opts.php +30 -18
  41. classes/class-ip-geo-block-util.php +173 -101
  42. classes/class-ip-geo-block.php +36 -32
  43. includes/Net/DNS2.php +1 -1
  44. includes/Net/DNS2/BitMap.php +0 -254
  45. includes/Net/DNS2/Cache.php +0 -311
  46. includes/Net/DNS2/Cache/File.php +0 -247
  47. includes/Net/DNS2/Cache/Shm.php +0 -318
  48. includes/Net/DNS2/PrivateKey.php +0 -424
  49. includes/Net/DNS2/RR/A.php +0 -156
  50. includes/Net/DNS2/RR/AAAA.php +0 -177
  51. includes/Net/DNS2/RR/AFSDB.php +0 -174
  52. includes/Net/DNS2/RR/ANY.php +0 -129
  53. includes/Net/DNS2/RR/APL.php +0 -343
  54. includes/Net/DNS2/RR/ATMA.php +0 -210
  55. includes/Net/DNS2/RR/AVC.php +0 -75
  56. includes/Net/DNS2/RR/CAA.php +0 -179
  57. includes/Net/DNS2/RR/CDNSKEY.php +0 -77
  58. includes/Net/DNS2/RR/CDS.php +0 -77
  59. includes/Net/DNS2/RR/CERT.php +0 -292
  60. includes/Net/DNS2/RR/CSYNC.php +0 -203
  61. includes/Net/DNS2/RR/DHCID.php +0 -207
  62. includes/Net/DNS2/RR/DLV.php +0 -75
  63. includes/Net/DNS2/RR/DNAME.php +0 -153
  64. includes/Net/DNS2/RR/DNSKEY.php +0 -198
  65. includes/Net/DNS2/RR/DS.php +0 -209
  66. includes/Net/DNS2/RR/EID.php +0 -130
  67. includes/Net/DNS2/RR/EUI48.php +0 -187
  68. includes/Net/DNS2/RR/EUI64.php +0 -188
  69. includes/Net/DNS2/RR/HINFO.php +0 -175
  70. includes/Net/DNS2/RR/HIP.php +0 -287
  71. includes/Net/DNS2/RR/IPSECKEY.php +0 -386
  72. includes/Net/DNS2/RR/ISDN.php +0 -190
  73. includes/Net/DNS2/RR/KEY.php +0 -85
  74. includes/Net/DNS2/RR/KX.php +0 -179
  75. includes/Net/DNS2/RR/L32.php +0 -180
  76. includes/Net/DNS2/RR/L64.php +0 -187
  77. includes/Net/DNS2/RR/LOC.php +0 -440
  78. includes/Net/DNS2/RR/LP.php +0 -177
  79. includes/Net/DNS2/RR/MX.php +0 -175
  80. includes/Net/DNS2/RR/NAPTR.php +0 -231
  81. includes/Net/DNS2/RR/NID.php +0 -187
  82. includes/Net/DNS2/RR/NIMLOC.php +0 -130
  83. includes/Net/DNS2/RR/NS.php +0 -153
  84. includes/Net/DNS2/RR/NSAP.php +0 -262
  85. includes/Net/DNS2/RR/NSEC.php +0 -184
  86. includes/Net/DNS2/RR/NSEC3.php +0 -310
  87. includes/Net/DNS2/RR/NSEC3PARAM.php +0 -220
  88. includes/Net/DNS2/RR/OPENPGPKEY.php +0 -159
  89. includes/Net/DNS2/RR/PX.php +0 -186
  90. includes/Net/DNS2/RR/RP.php +0 -167
  91. includes/Net/DNS2/RR/RRSIG.php +0 -329
  92. includes/Net/DNS2/RR/RT.php +0 -175
  93. includes/Net/DNS2/RR/SMIMEA.php +0 -75
  94. includes/Net/DNS2/RR/SPF.php +0 -75
  95. includes/Net/DNS2/RR/SRV.php +0 -186
  96. includes/Net/DNS2/RR/SSHFP.php +0 -250
  97. includes/Net/DNS2/RR/TA.php +0 -75
  98. includes/Net/DNS2/RR/TALINK.php +0 -171
  99. includes/Net/DNS2/RR/TKEY.php +0 -307
  100. includes/Net/DNS2/RR/TLSA.php +0 -194
  101. includes/Net/DNS2/RR/TXT.php +0 -177
  102. includes/Net/DNS2/RR/URI.php +0 -183
  103. includes/Net/DNS2/RR/WKS.php +0 -235
  104. includes/Net/DNS2/RR/X25.php +0 -160
  105. includes/Net/DNS2/Updater.php +0 -654
  106. includes/Net/IPv4.php +0 -0
  107. includes/random_compat/LICENSE +22 -0
  108. includes/random_compat/byte_safe_strings.php +195 -0
  109. includes/random_compat/cast_to_int.php +77 -0
  110. includes/random_compat/error_polyfill.php +49 -0
  111. includes/random_compat/random.php +225 -0
  112. includes/random_compat/random_bytes_com_dotnet.php +91 -0
  113. includes/random_compat/random_bytes_dev_urandom.php +172 -0
  114. includes/random_compat/random_bytes_libsodium.php +91 -0
  115. includes/random_compat/random_bytes_libsodium_legacy.php +93 -0
  116. includes/random_compat/random_bytes_mcrypt.php +79 -0
  117. includes/random_compat/random_int.php +204 -0
  118. ip-geo-block.php +4 -4
  119. languages/ip-geo-block-ja.mo +0 -0
  120. languages/ip-geo-block-ja.po +685 -760
  121. languages/ip-geo-block.mo +0 -0
  122. languages/ip-geo-block.po +484 -476
  123. languages/ip-geo-block.pot +484 -476
  124. rewrite-ini.php +1 -1
  125. rewrite.php +9 -9
  126. samples.php +17 -3
  127. uninstall.php +1 -1
  128. wp-content/ip-geo-api/drop-in-sample.php +2 -2
  129. wp-content/ip-geo-api/ip2location/IP2Location.php +2 -2
  130. wp-content/ip-geo-api/ip2location/bcmath.php +4 -4
  131. wp-content/ip-geo-api/ip2location/class-ip2location.php +9 -9
  132. wp-content/ip-geo-api/maxmind/class-maxmind-geolite2.php +6 -6
  133. wp-content/ip-geo-api/maxmind/class-maxmind-legacy.php +11 -11
  134. wp-content/ip-geo-api/maxmind/class-maxmind.php +3 -3
  135. wp-content/ip-geo-api/maxmind/vendor/LICENSE +2 -2
  136. wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/LICENSE +2 -2
  137. wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/README.md +14 -14
  138. wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/City.php +1 -1
  139. wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/Country.php +1 -1
  140. wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/Enterprise.php +1 -1
  141. wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/Insights.php +1 -1
  142. wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/Country.php +1 -1
  143. wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/Location.php +1 -1
  144. wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/RepresentedCountry.php +1 -1
  145. wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/Subdivision.php +1 -1
  146. wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/Traits.php +2 -2
  147. wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/LICENSE +2 -2
  148. wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/README.md +3 -3
  149. wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/LICENSE +2 -2
  150. wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/README.md +1 -1
  151. wp-content/mu-plugins/ip-geo-block-mu.php +3 -3
README.txt CHANGED
@@ -3,8 +3,8 @@ Contributors: tokkonopapa
3
Donate link:
4
Tags: security, firewall, brute force, vulnerability, login, wp-admin, admin, ajax, xmlrpc, comment, pingback, trackback, spam, IP address, geo, geolocation, buddypress, bbPress
5
Requires at least: 3.7
6
- Tested up to: 4.9.6
7
- Stable tag: 3.0.12.1
8
License: GPLv3
9
License URI: https://www.gnu.org/licenses/gpl-3.0.txt
10
@@ -33,7 +33,7 @@ After several days of installation, you'll be supprised to find many malicious o
33
In order to prevent hacking through the login form and XML-RPC by brute-force and the reverse-brute-force attacks, the number of login attempts will be limited per IP address even from the permitted countries.
34
35
* **Minimize server load against brute-force attacks:**
36
- You can configure this plugin as a [Must Use Plugins](https://codex.wordpress.org/Must_Use_Plugins "Must Use Plugins « WordPress Codex") so that this plugin can be loaded prior to regular plugins. It can massively [reduce the load on server](http://www.ipgeoblock.com/codex/validation-timing.html "Validation timing | IP Geo Block").
37
38
* **Prevent malicious down/uploading:**
39
A malicious request such as exposing `wp-config.php` or uploading malwares via vulnerable plugins/themes can be blocked.
@@ -48,8 +48,8 @@ After several days of installation, you'll be supprised to find many malicious o
48
When you click an external hyperlink on admin screens, http referrer will be eliminated to hide a footprint of your site.
49
50
* **Multiple source of IP Geolocation databases:**
51
- [MaxMind GeoLite2 free databases](http://www.maxmind.com "MaxMind - IP Geolocation and Online Fraud Prevention") (it requires PHP 5.4.0+) and [IP2Location LITE databases](http://www.ip2location.com/ "IP Address Geolocation to Identify Website Visitor's Geographical Location") can be installed in this plugin. Also free Geolocation REST APIs and whois information can be available for audit purposes.
52
- Father more, [dedicated API class libraries](http://www.ipgeoblock.com/article/api-class-library.html "CloudFlare & CloudFront API class library | IP Geo Block") can be installed for CloudFlare and CloudFront as a reverse proxy service.
53
54
* **Customizing response:**
55
HTTP response code can be selectable as `403 Forbidden` to deny access pages, `404 Not Found` to hide pages or even `200 OK` to redirect to the top page.
@@ -59,27 +59,27 @@ After several days of installation, you'll be supprised to find many malicious o
59
Validation logs for useful information to audit attack patterns can be manageable.
60
61
* **Cooperation with full spec security plugin:**
62
- This plugin is lite enough to be able to cooperate with other full spec security plugin such as [Wordfence Security](https://wordpress.org/plugins/wordfence/ "Wordfence Security — WordPress Plugins"). See [this report](http://www.ipgeoblock.com/codex/page-speed-performance.html "Page speed performance | IP Geo Block") about page speed performance.
63
64
* **Extendability:**
65
- You can customize the behavior of this plugin via `add_filter()` with [pre-defined filter hook](http://www.ipgeoblock.com/codex/ "Codex | IP Geo Block"). See various use cases in [samples.php](https://github.com/tokkonopapa/WordPress-IP-Geo-Block/blob/master/ip-geo-block/samples.php "WordPress-IP-Geo-Block/samples.php at master - tokkonopapa/WordPress-IP-Geo-Block - GitHub") bundled within this package.
66
You can also get the extension [IP Geo Allow](https://github.com/ddur/WordPress-IP-Geo-Allow "GitHub - ddur/WordPress-IP-Geo-Allow: WordPress Plugin Exension for WordPress-IP-Geo-Block Plugin") by [Dragan](https://github.com/ddur "ddur (Dragan) - GitHub"). It makes admin screens strictly private with more flexible way than specifying IP addresses.
67
68
* **Self blocking prevention and easy rescue:**
69
- Website owners do not prefer themselves to be blocked. This plugin prevents such a sad thing unless you force it. And futhermore, if such a situation occurs, you can [rescue yourself](http://www.ipgeoblock.com/codex/what-should-i-do-when-i-m-locked-out.html "What should I do when I'm locked out? | IP Geo Block") easily.
70
71
* **Clean uninstallation:**
72
Nothing is left in your precious mySQL database after uninstallation. So you can feel free to install and activate to make a trial of this plugin's functionality.
73
74
= Attribution =
75
76
- This package includes GeoLite2 library distributed by MaxMind, available from [MaxMind](http://www.maxmind.com "MaxMind - IP Geolocation and Online Fraud Prevention") (it requires PHP 5.4.0+), and also includes IP2Location open source libraries available from [IP2Location](http://www.ip2location.com "IP Address Geolocation to Identify Website Visitor's Geographical Location").
77
78
Also thanks for providing the following great services and REST APIs for free.
79
80
* [https://ipdata.co/](https://ipdata.co/ "ipdata.co - IP Geolocation and Threat Data API") (IPv4, IPv6 / free)
81
* [https://ipinfo.io/](https://ipinfo.io/ "IP Address API and Data Solutions") (IPv4, IPv6 / free)
82
- * [http://geoip.nekudo.com/](http://geoip.nekudo.com/ "Free IP GeoLocation/GeoIp API - geoip.nekudo.com") (IPv4, IPv6 / free)
83
* [http://geoiplookup.net/](http://geoiplookup.net/ "What Is My IP Address | GeoIP Lookup") (IPv4, IPv6 / free)
84
* [http://ip-api.com/](http://ip-api.com/ "IP-API.com - Free Geolocation API") (IPv4, IPv6 / free for non-commercial use)
85
* [https://ipinfodb.com/](https://ipinfodb.com/ "Free IP Geolocation Tools and API| IPInfoDB") (IPv4, IPv6 / free for registered user, need API key)
@@ -89,7 +89,7 @@ Also thanks for providing the following great services and REST APIs for free.
89
90
Development of this plugin is promoted at [WordPress-IP-Geo-Block](https://github.com/tokkonopapa/WordPress-IP-Geo-Block "tokkonopapa/WordPress-IP-Geo-Block - GitHub") and class libraries to handle geo-location database are developed separately as "add-in"s at [WordPress-IP-Geo-API](https://github.com/tokkonopapa/WordPress-IP-Geo-API "tokkonopapa/WordPress-IP-Geo-API - GitHub").
91
92
- All contributions will always be welcome. Or visit my [development blog](http://www.ipgeoblock.com/ "IP Geo Block").
93
94
== Installation ==
95
@@ -101,7 +101,7 @@ All contributions will always be welcome. Or visit my [development blog](http://
101
4. Activate the plugin on the Plugin dashboard
102
5. Try 'Best for Back-end' button for easy setup at the bottom of this plugin's setting page.
103
104
- Please refer to [the document](http://www.ipgeoblock.com/codex/ "Codex | IP Geo Block")
105
or following descriptions for your best setup.
106
107
= Validation rule settings =
@@ -110,10 +110,10 @@ or following descriptions for your best setup.
110
Choose either `White list` (recommended) or `Black list` to specify the countries from which you want to pass or block.
111
112
* **Whitelist/Blacklist of country code**
113
- Specify the country code with two letters (see [ISO 3166-1 alpha-2](http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements "ISO 3166-1 alpha-2 - Wikipedia, the free encyclopedia")). Each of them should be separated by comma.
114
115
* **Use Autonomous System Number (ASN)**
116
- It enables you to use "AS number" in the whitelist and blacklist of extra IP addresses to specify a group of IP networks.
117
118
* **Whitelist/Blacklist of extra IP addresses prior to country code**
119
The list of extra IP addresses prior to the validation of country code. [CIDR notation](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing "Classless Inter-Domain Routing - Wikipedia, the free encyclopedia") and [AS number](https://en.wikipedia.org/wiki/Autonomous_system_(Internet) "Autonomous system (Internet) - Wikipedia") are also acceptable to specify the range.
@@ -128,7 +128,7 @@ or following descriptions for your best setup.
128
It restricts the file types on upload to block malware and backdoor via both back-end and front-end.
129
130
* **Response code**
131
- Choose one of the [response code](http://tools.ietf.org/html/rfc2616#section-10 "RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1") to be sent when it blocks a comment.
132
The 2xx code will lead to your top page, the 3xx code will redirect to [Black Hole Server](http://blackhole.webpagetest.org/), the 4xx code will lead to WordPress error page, and the 5xx will pretend an server error.
133
134
* **Max number of failed login attempts per IP address**
@@ -186,7 +186,7 @@ or following descriptions for your best setup.
186
= Geolocation API settings =
187
188
* **API selection and key settings**
189
- If you wish to use `IPInfoDB`, you should register at [their site](http://ipinfodb.com/ "IPInfoDB | Free IP Address Geolocation Tools") to get a free API key and set it into the textfield. And `ip-api.com` and `Smart-IP.net` require non-commercial use.
190
191
= Local database settings settings =
192
@@ -242,7 +242,7 @@ or following descriptions for your best setup.
242
243
= Does the site using this plugin comply with GDPR? =
244
245
- Using this plugin itself should not be the problem, because from version 3.0.11 IP addresses in logs and cache of this plugin are encrypted by default in preparation for personal data breach. It also not only provides a way to manually erase them but also has the functionality to remove them when those are exceeded a certain amount/time. The option "Privacy friendly" helps you to restrict sending the ip address to the 3rd parties such as geolocation APIs and whois service equipped in this plugin. However, these functions are part of the requirements that GDPR requires and do not guarantee that the site is compliant with GDPR. Refer to [3.0.11 release note](http://www.ipgeoblock.com/changelog/release-3.0.11.html) for details.
246
247
= Does this plugin support multisite? =
248
@@ -273,17 +273,17 @@ Other plugins adopting `mod_rewrite` (e.g. WP Fastest Cache) or `advanced-cache.
273
274
Thus your site would have less risk against the exploiting via vulnerable plugins and themes.
275
276
- For more details, please refer to some documents at "[Blocking on front-end](http://www.ipgeoblock.com/codex/#blocking-on-front-end 'Codex | IP Geo Block')".
277
278
= I still have access from blacklisted country. Does it work correctly? =
279
280
Absolutely, YES.
281
282
- Sometimes, a Wordfence Security user would report this type of claim when he/she found some accesses in its Live traffic view. But please don't worry. Before WordPress runs, Wordfence cleverly filters out malicious requests to your site using <a href="http://php.net/manual/en/ini.core.php#ini.auto-prepend-file" title="PHP: Description of core php.ini directives - Manual">auto_prepend_file</a> directive to include PHP based Web Application Firewall. Then this plugin validates the rest of the requests that pass over Wordfence because those were not in WAF rules, especially you enables "**Prevent Zero-day Exploit**".
283
284
It would also possibly be caused by the accuracy of country code in the geolocation databases. Actually, there is a case that a same IP address has different country code.
285
286
- For more detail, please refer to "[I still have access from blacklisted country.](http://www.ipgeoblock.com/codex/access-from-blacklisted-country.html 'I still have access from blacklisted country. | IP Geo Block')".
287
288
= How can I test this plugin works? =
289
@@ -293,7 +293,7 @@ Another one is to use [http header browser addon](https://www.google.com/search?
293
294
You can add an IP address to the `X-Forwarded-For` header to emulate the access behind the proxy. In this case, you should add `HTTP_X_FORWARDED_FOR` into the "**$_SERVER keys for extra IPs**" on "**Settings**" tab.
295
296
- See more details at "[How to test prevention of attacks](http://www.ipgeoblock.com/codex/#how-to-test-prevention-of-attacks 'Codex | IP Geo Block')".
297
298
= I'm locked out! What shall I do? =
299
@@ -319,7 +319,7 @@ After saving and uploading it to `/wp-content/plugins/ip-geo-block/` on your ser
319
320
Remember that you should upload the original one after re-configuration to deactivate this feature.
321
322
- [This document](http://www.ipgeoblock.com/codex/what-should-i-do-when-i-m-locked-out.html "What should I do when I'm locked out? | IP Geo Block") can also help you.
323
324
= Do I have to turn on all the selection to enhance security? =
325
@@ -337,7 +337,7 @@ Yes. Roughly speaking, the strategy of this plugin has been constructed as follo
337
- **Bad signatures in query**
338
It blocks the request which has not been covered in the above three.
339
340
- Please try "**Best for Back-end**" button at the bottom of this plugin's setting page for easy setup. And also see more details in "[The best practice of target settings](http://www.ipgeoblock.com/codex/the-best-practice-for-target-settings.html 'The best practice of target settings | IP Geo Block')".
341
342
= Does this plugin validate all the requests? =
343
@@ -347,17 +347,17 @@ But there're exceptions: When you enable "**Force to load WP core**" for **Plugi
347
348
= How to resolve "Sorry, your request cannot be accepted."? =
349
350
- If you encounter this message, please refer to [this document](http://www.ipgeoblock.com/codex/you-are-not-allowed-to-access.html "Why &ldquo;Sorry, your request cannot be accepted&rdquo; ? | IP Geo Block") to resolve your blocking issue.
351
352
If you can't solve your issue, please let me know about it on the [support forum](https://wordpress.org/support/plugin/ip-geo-block/ "View: Plugin Support &laquo; WordPress.org Forums"). Your logs in this plugin and "**Installation information**" at "**Plugin settings**" will be a great help to resolve the issue.
353
354
= How can I fix "Unable to write" error? =
355
356
- When you enable "**Force to load WP core**" options, this plugin will try to configure `.htaccess` in your `/wp-content/plugins/` and `/wp-content/themes/` directory in order to protect your site against the malicous attacks to the [OMG plugins and themes](http://www.ipgeoblock.com/article/exposure-of-wp-config-php.html "Prevent exposure of wp-config.php | IP Geo Block").
357
358
But some servers doesn't give read / write permission against `.htaccess` to WordPress. In this case, you can configure `.htaccess` files by your own hand instead of enabling "**Force to load WP core**" options.
359
360
- Please refer to "[How can I fix permission troubles?](http://www.ipgeoblock.com/codex/how-can-i-fix-permission-troubles.html 'How can I fix permission troubles? | IP Geo Block')" in order to fix this error.
361
362
== Other Notes ==
363
@@ -382,11 +382,33 @@ Please refer to "[How can I fix permission troubles?](http://www.ipgeoblock.com/
382
383
== Changelog ==
384
385
= 3.0.12.1 =
386
- * **Issue fix:** Unexpected blocking cause by an extra slash at the end of `$_SERVER['DOCUMENT_ROOT']` that might be added by server's configuration. ([forum topic](https://wordpress.org/support/topic/wpwebinar/ "Topic: WPWebinar &#124; WordPress.org"))
387
- * **Issue fix:** [Human friendly error page](http://www.ipgeoblock.com/codex/customizing-the-response.html#human-friendly-error-page) now works properly. ([forum topic](https://wordpress.org/support/topic/problem-with-permalinks-51/ "Topic: Problem with Permalinks &#124; WordPress.org"))
388
- * **Issue fix:** Fix the conflict with WP hide & Security Enhancer. ([forum topic](https://wordpress.org/support/topic/problem-with-permalinks-51/ "Topic: Problem with Permalinks &#124; WordPress.org"))
389
- * **Issue fix:** Hotfix [WordPress File Delete to Code Execution](https://blog.ripstech.com/2018/wordpress-file-delete-to-code-execution/ "WARNING: WordPress File Delete to Code Execution") by RIPS Technologies.
390
391
= 3.0.12 =
392
* **Improvement:** Enhance "Privacy and record settings" where "Expiration time [sec] for Logs" can be specified.
@@ -398,7 +420,7 @@ Please refer to "[How can I fix permission troubles?](http://www.ipgeoblock.com/
398
* **Improvement:** Update geolocation APIs and add a new one.
399
* **Improvement:** Change the JavaScript compressor from Google Closure Compiler to UglifyJS 2 to prevent "Uncaught TypeError: Cannot read property ‘toLowerCase’ of undefined" in a certain environment.
400
* **Fix:** Fix the issue that blocking occurred immediately instead of displaying the login page again when login failed, even the number of times did not exceed the limit.
401
- * See [3.0.11 release note](http://www.ipgeoblock.com/changelog/release-3.0.11.html) for some details.
402
403
= 3.0.10.4 =
404
* **Fix:** JavaScript error caused by bad handling form tag without method property. This error was happened with Wordfence Live Traffic.
@@ -438,7 +460,7 @@ If you still find the error "/plugins/ip-geo-block/classes/class-ip-geo-block-lo
438
* **Maintenance:** Change the priority order of local geolocation databases.
439
* **Bug fix:** Fix the issue that the target action for login form on settings tab could not unchecked on saving changes.
440
* **Bug fix:** Fix some other minor bugs.
441
- * See [3.0.9 release note](http://www.ipgeoblock.com/changelog/release-3.0.9.html "3.0.9 Release Note | IP Geo Block") for some details.
442
443
= 3.0.8 =
444
* **Improvement:** Use both Maxmind Legacy and GeoLite2 databases parallely.
@@ -471,14 +493,14 @@ Sorry for frequent update but the following bug should be fixed.
471
* **Bug fix:** Fix the bug using php short open tag on "Logs" tab.
472
* **Bug fix:** Fix the bug related to absolute path in filesystem on windows system.
473
* **Bug fix:** Fix the issue that "Auto updating (once a month)" could not be disabled.
474
- * See [3.0.6 release note](http://www.ipgeoblock.com/changelog/release-3.0.6.html "3.0.6 Release Note | IP Geo Block") for some details.
475
476
= 3.0.5 =
477
* **New feature:** Add "Live update" mode on "Logs" tab.
478
* **Improvement:** List all the IP addresses in cache are now displayed and manageable on "Statistics" tab.
479
* **Improvement:** Add "Either blocked or passed" as a new condition for recording logs. It enables to verify the requests "passed" from the blacklisted countries or the countries not in the whitelist.
480
* **Improvement:** Add two new filter hooks to utilize Google APIs from native domain in China.
481
- * See [3.0.5 release note](http://www.ipgeoblock.com/changelog/release-3.0.5.html "3.0.5 Release Note | IP Geo Block") for some details.
482
483
= 3.0.4.6 =
484
* **Bug fix:** Fix the issue that the emergent functionality didn't work when the number of login attempts reached to the limit.
@@ -521,7 +543,7 @@ Thank you all for taking your time again since last update.
521
* **Improvement:** Inhibit to embed a special nonce into links when WP-ZEP is disabled at each target. This may improve compatibility with some plugins and themes.
522
* **Bug fix:** Fix the issue of verifying file upload. It could not handle multiple files. ([@](https://wordpress.org/support/topic/incompatible-with-awesome-support-plugin/#post-9403708 "Topic: incompatible with Awesome Support plugin &laquo; WordPress.org Forums"))
523
* **Bug fix:** Fix the issue of illegal click event handling on anchor tag without href. ([@](https://wordpress.org/support/topic/pagebuilder-broken-by-ipgeoblock-v3-0-3-4/ "Topic: Pagebuilder broken by IPGeoblock v3.0.3.4 &laquo; WordPress.org Forums"))
524
- * See [3.0.4 release note](http://www.ipgeoblock.com/changelog/release-3.0.4.html "3.0.4 Release Note | IP Geo Block") for some details.
525
526
= 3.0.3.4 =
527
* **Improvement:** Some minor refactoring for the future release.
@@ -564,7 +586,7 @@ This is a maintenance release addressing various internal improvement.
564
* **Improvement:** Better handling of server and private IP address.
565
* **Bug fix:** Fix the bug of "Export/Import settings". **Please export json file again if you hold it as backup purpose** because some of settings data might be incompatible.
566
* **Bug fix:** Fix the bug of "Password Reset" caused by miss-spelling "resetpasss".
567
- * See some details at [release 3.0.3](http://www.ipgeoblock.com/changelog/release-3.0.3.html "3.0.3 Release Note | IP Geo Block").
568
569
= 3.0.2.2 =
570
* **Improvement:** Change the behavior of "Referrer Suppressor" not to open a new window on public facing pages.
@@ -588,8 +610,8 @@ This is a maintenance release addressing some issues.
588
* **New feature:** Add "Exceptions" for "Admin ajax/post" to specify the name of action which causes undesired blocking (typically on the public facing pages).
589
* **Improvement:** Add "Disable" to "Max number of failed login attempts per IP address" to avoid conflict with other similar plugin.
590
* **Improvement:** Update geolocation database libraries to 1.1.7 for better compatibility on some platform.
591
- * **Trial feature:** Add custom action hook `ip-geo-block-send-response`. This is useful to control firewall via [fail2ban](http://www.fail2ban.org/ "Fail2ban") like [WP fail2ban](https://wordpress.org/plugins/wp-fail2ban/ "WP fail2ban - WordPress Plugins").
592
- * See some details at [release 3.0.2](http://www.ipgeoblock.com/changelog/release-3.0.2.html "3.0.2 Release Note | IP Geo Block").
593
594
= 3.0.1.2 =
595
* **Bug fix:** Fix the blocking issue in some environments when upgrading from 2.2.9.1 to 3.0.0.
@@ -617,7 +639,7 @@ This is a maintenance release addressing some issues.
617
* **Improvement:** Better compatibility with some plugins, themes and widgets.
618
* **Improvement:** Deferred execution of SQL command to improve the response.
619
* **Improvement:** Make the response compatible with WP original when it is requested by GET method.
620
- * See some details at [release 3.0.0](http://www.ipgeoblock.com/changelog/release-3.0.0.html "3.0.0 Release Note | IP Geo Block").
621
622
= 2.2.9.1 =
623
* **Bug fix:** Blocking Wordfence scanning. ([@](https://wordpress.org/support/topic/wordfence-conflict-2/ "WordFence Conflict"))
@@ -630,7 +652,7 @@ This is a maintenance release addressing some issues.
630
* **New feature:** A new option that makes this plugin configured as a "Must-use plugin". It can massively reduce the server load especially against brute-force attacks because it initiates this plugin prior to other typical plugins.
631
* **Improvement:** Validation of a certain signature against XSS is internally added to "Bad signature in query" by default.
632
* **Improvement:** Improved compatibility with PHP 7 (Thanks to [FireMyst](https://wordpress.org/support/topic/plans-for-php-7-compatiblity/ "Topic: Plans for PHP 7 compatiblity? &laquo; WordPress.org Forums")).
633
- * Find details in [2.2.9 Release Note](http://www.ipgeoblock.com/changelog/release-2.2.9.html "2.2.9 Release Note").
634
635
= 2.2.8.2 =
636
* **Bug fix:** Fixed the mismatched internal version number.
@@ -643,19 +665,19 @@ This is a maintenance release addressing some issues.
643
* **Bug fix:** Fixed the issue of stripping some required characters for Google maps API key.
644
* **New feature:** Whois database Lookup for IP address on search tab.
645
* **Update:** Updated geolocation API libraries and services.
646
- * Find more details in [2.2.8 Release Note](http://www.ipgeoblock.com/changelog/release-2.2.8.html "2.2.8 Release Note").
647
648
= 2.2.7 =
649
* **Bug fix:** Fix inadequate validation of "**Bad signatures in query**".
650
* **Improvement:** Add fallback for Google Maps API key ([@](https://wordpress.org/support/topic/226-problem-with-search-resp-google-maps "WordPress &#8250; Support &raquo; [2.2.6] Problem with SEARCH resp. Google Maps")) and corruption of "Bad signatures" ([@](https://wordpress.org/support/topic/226-problem-with-bad-signatures-in-query "WordPress &#8250; Support &raquo; [2.2.6] Problem with &quot;Bad signatures in query&quot;")).
651
* **Update:** Update geolocation service api.
652
- * Find details about Google Maps API in [2.2.7 Release Note](http://www.ipgeoblock.com/changelog/release-2.2.7.html "2.2.7 Release Note").
653
654
= 2.2.6 =
655
* **New feature:** Add saving csv file of logs in "Logs" tab.
656
* **New feature:** Add filter hook `ip-geo-block-record-log` to control over the conditions of recording in more detail.
657
* **Bug fix:** Fixed the issue that "Exceptions" for Plugins/Themes area does not work properly. Please confirm your settings again.
658
- * See details at [release 2.2.6](http://www.ipgeoblock.com/changelog/release-2.2.6.html "2.2.6 Release Note").
659
660
= 2.2.5 =
661
* **New feature:** On the settings page, you can specify the pliugin or theme which would cause undesired blocking in order to exclude it from the validation target without embedding any codes into `functions.php`.
@@ -680,7 +702,7 @@ Sorry for frequent updating.
680
* **Improvement:** Made the logout url compatible with [Rename wp-login.php](https://wordpress.org/plugins/rename-wp-login/).
681
* **Improvement:** Made condition of validation more strictly at admin diagnosis to prevent unnecessary notice of self blocking. ([@](https://wordpress.org/support/topic/youll-be-blocked-after-you-log-out-notice-doesnt-disappear "[resolved] &quot;You'll be blocked after you log out&quot; notice doesn't disappear"))
682
* **Improvement:** Improved some of UI. ([@](https://wordpress.org/support/topic/possible-to-select-which-countries-are-blocked "[resolved] Possible to select which countries are blocked?"), [@](https://wordpress.org/support/topic/ip-geo-block-black-list "IP Geo Block Black List"))
683
- * See some details at [release 2.2.4](http://www.ipgeoblock.com/changelog/release-2.2.4.html "2.2.4 Release Note").
684
685
= 2.2.3.1 =
686
* **Bug fix:** Fixed the issue that disabled validation target was still blocked by country. ([@](https://wordpress.org/support/topic/logs-whitelist-comments-still-blocked "[resolved] logs whitelist comments still blocked?"))
@@ -694,7 +716,7 @@ Sorry for frequent updating.
694
* **Improvement:** Prevent self blocking caused by irrelevant signature. ([@](https://wordpress.org/support/topic/works-too-well-blocked-my-wp-admin-myself "[resolved] Works too well - Blocked my wp-admin myself"))
695
* **Bug fix:** Fixed the issue of conflicting with certain plugins due to the irrelevant handling of js event. ([@](https://wordpress.org/support/topic/cannot-edit-pages-when-ip-geo-block-is-enabled "[resolved] Cannot edit pages when ip-geo-block is enabled."))
696
* **New feature:** Add "Blocked per day" graph for the daily statistics.
697
- * See some details at [2.2.3 release note](http://www.ipgeoblock.com/changelog/release-2.2.3.html "2.2.3 Release Note").
698
699
= 2.2.2.3 =
700
Sorry for frequent update again but the following obvious bugs should be fixed.
@@ -716,14 +738,14 @@ Sorry for frequent update.
716
* **Improvement:** In the previous version, the statistical data was recorded into `wp_options`. It caused the uncertainty of recording especially in case of burst attacks. Now the data will be recorded in an independent table to improve this issue.
717
* **Bug fix:** Fixed conflict with NextGEN Gallary Pro. Thanks to [bodowewer](https://wordpress.org/support/profile/bodowewer).
718
* **Bug fix:** Fixed some filter hooks that did not work as intended.
719
- * See more details at [2.2.2 release note](http://www.ipgeoblock.com/changelog/release-2.2.2.html "2.2.2 Release Note").
720
721
= 2.2.1.1 =
722
* **Bug fix:** Fixed "open_basedir restriction" issue caused by `file_exists()`.
723
724
= 2.2.1 =
725
* **Enhancement:** In previous version, local geolocation databases will always be removed and downloaded again at every upgrading. Now, the class library for Maxmind and IP2Location have become independent of this plugin and you can put them outside this plugin in order to cut the above useless process. The library can be available from [WordPress-IP-Geo-API](https://github.com/tokkonopapa/WordPress-IP-Geo-API).
726
- * **Deprecated:** Cooperation with IP2Location plugins such as [IP2Location Tags](http://wordpress.org/plugins/ip2location-tags/ "WordPress - IP2Location Tags - WordPress Plugins"), [IP2Location Variables](http://wordpress.org/plugins/ip2location-variables/ "WordPress - IP2Location Variables - WordPress Plugins"), [IP2Location Country Blocker](http://wordpress.org/plugins/ip2location-country-blocker/ "WordPress - IP2Location Country Blocker - WordPress Plugins") is out of use. Instead of it, free [IP2Location LITE databases for IPv4 and IPv6](http://lite.ip2location.com/ "Free IP Geolocation Database") will be downloaded.
727
* **Improvement:** Improved connectivity with Jetpack.
728
* **Improvement:** Improved immediacy of downloading databases at upgrading.
729
* **Improvement:** Replaced a terminated RESTful API service with a new stuff.
@@ -743,7 +765,7 @@ Sorry for frequent update.
743
* **New feature:** Malicious signatures to prevent disclosing the important files via vulnerable plugins or themes. A malicious request to try to expose `wp-config.php` or `passwd` can be blocked.
744
* **New feature:** Add privacy considerations related to IP address. Add **Anonymize IP address** at **Record settings**.
745
* **Bug fix:** Fix the issue that spaces in **Text message on comment form** are deleted.
746
- * See details at [2.2.0 release note](http://www.ipgeoblock.com/changelog/release-2.2.0.html "2.2.0 Release Note").
747
748
= 2.1.5.1 =
749
* **Bug fix:** Fixed the issue that the Blacklist did not work properly. Thanks to TJayYay for reporting this issue at [support forum](https://wordpress.org/support/topic/hackers-from-country-in-blocked-list-of-countries-trying-to-login "WordPress &rsaquo; Support &raquo; Hackers from country in Blocked List of Countries trying to login").
@@ -753,13 +775,13 @@ Sorry for frequent update.
753
* **New feature:** Add pie chart to display statistics of "Blocked by country".
754
* **Enhancement:** WP-ZEP is reinforced against CSRF.
755
* **Bug fix:** Fix illegal handling of the fragment in a link.
756
- * See details at [2.1.5 release note](http://www.ipgeoblock.com/changelog/release-2.1.5.html "2.1.5 Release Note").
757
758
= 2.1.4 =
759
* **Bug fix:** Fix the issue that this plugin broke functionality of a certain plugin. Thanks to **opsec** for reporting this issue at [support forum](https://wordpress.org/support/topic/blocks-saves-in-types-or-any-plugins-from-wp-typescom "WordPress &rsaquo; Support &raquo; Blocks saves in Types or any plugins from wp-types.com").
760
* **Improvement:** Add checking process for validation rule to prevent being blocked itself. Thanks to **internationals** for proposing at [support forum](https://wordpress.org/support/topic/locked-out-due-to-eu-vs-country "WordPress &rsaquo; Support &raquo; Locked out due to EU vs. Country")
761
* **Improvement:** Arrage the order of setting sections to focus the goal of this plugin.
762
- * See details at [2.1.4 release note](http://www.ipgeoblock.com/changelog/release-2.1.4.html "2.1.4 Release Note").
763
764
= 2.1.3 =
765
* **New feature:** Add "show" / "hide" at each section on the "Settings" tab.
@@ -768,7 +790,7 @@ Sorry for frequent update.
768
* **Improvement:** Improved the compatibility with Autoptimize.
769
* **Bug fix:** Fix the issue related to showing featured themes on dashboard.
770
* **Bug fix:** Fix minor bug in `rewrite.php` for the advanced use case.
771
- * See details at [2.1.3 release note](http://www.ipgeoblock.com/changelog/release-2.1.3.html "2.1.3 Release Note").
772
773
= 2.1.2 =
774
This is a maintenance release.
@@ -779,16 +801,16 @@ This is a maintenance release.
779
* **Improvement:** Hide checking the existence of log db behind the symbol `IP_GEO_BLOCK_DEBUG` to reduce 1 query on admin screen.
780
* **Improvement:** Add alternative functions of BCMath extension to avoid `PHP Fatal error: Call to undefined function` in `IP2Location.php` when IPv6 is specified.
781
* **Improvement:** Use MaxMind database at the activating process not to be locked out by means of inconsistency of database at the activation and after.
782
- * See more details at [2.1.2 release note](http://www.ipgeoblock.com/changelog/release-2.1.2.html "2.1.2 Release Note").
783
784
= 2.1.1 =
785
* **New feature:** Added `Block by country (register, lost password)` at `Login form` on `Settings` tab in order to accept the registered users as membership from anywhere but block the request of new user ragistration and lost password by the country code. Is't suitable for BuddyPress and bbPress.
786
* **Improvement:** Added showing the custom error page for http response code 4xx and 5xx. For example the `403.php` in the theme template directory or in the child theme directory is used if it exists. And new filter hooks `ip-geo-block-(comment|xmlrpc|login|admin)-(status|reason)` are available to customize the response code and reason for human.
787
* **Obsoleted:** Obsoleted the filter hooks `ip-geo-block-(admin-actions|admin-pages|wp-content)`. Alternatively new filter hooks `ip-geo-block-bypass-(admins|plugins|themes)` are added to bypass WP-ZEP.
788
- * Find out more details in the [2.1.1 release note](http://www.ipgeoblock.com/changelog/release-2.1.1.html "2.1.1 Release Note").
789
790
= 2.1.0 =
791
- * **New feature:** Expanded the operating range of ZP-ZEP, that includes admin area, plugins area, themes area. Now it can prevent a direct malicios attack to the file in plugins and themes area. Please go to the "Validation Settings" on "Settings" tab and check it. Also check my article in "[Analysis of Attack Vector against WP Plugins](http://www.ipgeoblock.com/article/analysis-attack-vector.html)".
792
* **Bug fix:** Fixed the issue that action hook `ip-geo-block-backup-dir` did not work correctly because the order of argument was mismatched.
793
* **Bug fix:** Fixed the issue that a record including utf8 4 bytes character in its columns was not logged into DB in WordPress 4.2.
794
* **Improvement:** Fixed the issue that Referrer Suppressor do nothing with a new element which is added into DOM after DOM ready. The event handler is now delegated at the `body`.
@@ -798,7 +820,7 @@ This is a maintenance release.
798
* Added re-creating DB table for validation logs in case of accidentally failed at activation process.
799
* The time of day is shown with local time by adding GMT offset based on the time zone setting.
800
* Optimized resource loading and settings to avoid redundancy.
801
- * See details at [this plugin's blog](http://www.ipgeoblock.com/changelog/release-2.0.8.html "2.0.8 Release Note").
802
803
= 2.0.7 =
804
* Avoid JavaScript error which occurs if an anchor link has no `href`.
@@ -820,7 +842,7 @@ This is a maintenance release.
820
* Also added the filter hook `ip-geo-block-admin-actions` for safe actions on back-end.
821
822
= 2.0.2 =
823
- * **New feature:** Include `wp-admin/admin-post.php` as a validation target in the `Admin area`. This feature is to protect against a vulnerability such as [Analysis of the Fancybox-For-WordPress Vulnerability](http://blog.sucuri.net/2015/02/analysis-of-the-fancybox-for-wordpress-vulnerability.html) on Sucuri Blog.
824
* Added a sample code snippet as a use case for 'Give ajax permission in case of safe actions on front facing page'. See Example 10 in `sample.php`.
825
826
= 2.0.1 =
3
Donate link:
4
Tags: security, firewall, brute force, vulnerability, login, wp-admin, admin, ajax, xmlrpc, comment, pingback, trackback, spam, IP address, geo, geolocation, buddypress, bbPress
5
Requires at least: 3.7
6
+ Tested up to: 4.9.8
7
+ Stable tag: 3.0.14
8
License: GPLv3
9
License URI: https://www.gnu.org/licenses/gpl-3.0.txt
10
33
In order to prevent hacking through the login form and XML-RPC by brute-force and the reverse-brute-force attacks, the number of login attempts will be limited per IP address even from the permitted countries.
34
35
* **Minimize server load against brute-force attacks:**
36
+ You can configure this plugin as a [Must Use Plugins](https://codex.wordpress.org/Must_Use_Plugins "Must Use Plugins &laquo; WordPress Codex") so that this plugin can be loaded prior to regular plugins. It can massively [reduce the load on server](https://www.ipgeoblock.com/codex/validation-timing.html "Validation timing | IP Geo Block").
37
38
* **Prevent malicious down/uploading:**
39
A malicious request such as exposing `wp-config.php` or uploading malwares via vulnerable plugins/themes can be blocked.
48
When you click an external hyperlink on admin screens, http referrer will be eliminated to hide a footprint of your site.
49
50
* **Multiple source of IP Geolocation databases:**
51
+ [MaxMind GeoLite2 free databases](https://www.maxmind.com "MaxMind - IP Geolocation and Online Fraud Prevention") (it requires PHP 5.4.0+) and [IP2Location LITE databases](https://www.ip2location.com/ "IP Address Geolocation to Identify Website Visitor's Geographical Location") can be installed in this plugin. Also free Geolocation REST APIs and whois information can be available for audit purposes.
52
+ Father more, [dedicated API class libraries](https://www.ipgeoblock.com/article/api-class-library.html "CloudFlare & CloudFront API class library | IP Geo Block") can be installed for CloudFlare and CloudFront as a reverse proxy service.
53
54
* **Customizing response:**
55
HTTP response code can be selectable as `403 Forbidden` to deny access pages, `404 Not Found` to hide pages or even `200 OK` to redirect to the top page.
59
Validation logs for useful information to audit attack patterns can be manageable.
60
61
* **Cooperation with full spec security plugin:**
62
+ This plugin is lite enough to be able to cooperate with other full spec security plugin such as [Wordfence Security](https://wordpress.org/plugins/wordfence/ "Wordfence Security &mdash; WordPress Plugins"). See [this report](https://www.ipgeoblock.com/codex/page-speed-performance.html "Page speed performance | IP Geo Block") about page speed performance.
63
64
* **Extendability:**
65
+ You can customize the behavior of this plugin via `add_filter()` with [pre-defined filter hook](https://www.ipgeoblock.com/codex/ "Codex | IP Geo Block"). See various use cases in [samples.php](https://github.com/tokkonopapa/WordPress-IP-Geo-Block/blob/master/ip-geo-block/samples.php "WordPress-IP-Geo-Block/samples.php at master - tokkonopapa/WordPress-IP-Geo-Block - GitHub") bundled within this package.
66
You can also get the extension [IP Geo Allow](https://github.com/ddur/WordPress-IP-Geo-Allow "GitHub - ddur/WordPress-IP-Geo-Allow: WordPress Plugin Exension for WordPress-IP-Geo-Block Plugin") by [Dragan](https://github.com/ddur "ddur (Dragan) - GitHub"). It makes admin screens strictly private with more flexible way than specifying IP addresses.
67
68
* **Self blocking prevention and easy rescue:**
69
+ Website owners do not prefer themselves to be blocked. This plugin prevents such a sad thing unless you force it. And futhermore, if such a situation occurs, you can [rescue yourself](https://www.ipgeoblock.com/codex/what-should-i-do-when-i-m-locked-out.html "What should I do when I'm locked out? | IP Geo Block") easily.
70
71
* **Clean uninstallation:**
72
Nothing is left in your precious mySQL database after uninstallation. So you can feel free to install and activate to make a trial of this plugin's functionality.
73
74
= Attribution =
75
76
+ This package includes GeoLite2 library distributed by MaxMind, available from [MaxMind](https://www.maxmind.com "MaxMind - IP Geolocation and Online Fraud Prevention") (it requires PHP 5.4.0+), and also includes IP2Location open source libraries available from [IP2Location](https://www.ip2location.com "IP Address Geolocation to Identify Website Visitor's Geographical Location").
77
78
Also thanks for providing the following great services and REST APIs for free.
79
80
* [https://ipdata.co/](https://ipdata.co/ "ipdata.co - IP Geolocation and Threat Data API") (IPv4, IPv6 / free)
81
* [https://ipinfo.io/](https://ipinfo.io/ "IP Address API and Data Solutions") (IPv4, IPv6 / free)
82
+ * [https://geoip.nekudo.com/](https://geoip.nekudo.com/ "Free IP GeoLocation/GeoIp API - geoip.nekudo.com") (IPv4, IPv6 / free)
83
* [http://geoiplookup.net/](http://geoiplookup.net/ "What Is My IP Address | GeoIP Lookup") (IPv4, IPv6 / free)
84
* [http://ip-api.com/](http://ip-api.com/ "IP-API.com - Free Geolocation API") (IPv4, IPv6 / free for non-commercial use)
85
* [https://ipinfodb.com/](https://ipinfodb.com/ "Free IP Geolocation Tools and API| IPInfoDB") (IPv4, IPv6 / free for registered user, need API key)
89
90
Development of this plugin is promoted at [WordPress-IP-Geo-Block](https://github.com/tokkonopapa/WordPress-IP-Geo-Block "tokkonopapa/WordPress-IP-Geo-Block - GitHub") and class libraries to handle geo-location database are developed separately as "add-in"s at [WordPress-IP-Geo-API](https://github.com/tokkonopapa/WordPress-IP-Geo-API "tokkonopapa/WordPress-IP-Geo-API - GitHub").
91
92
+ All contributions will always be welcome. Or visit my [development blog](https://www.ipgeoblock.com/ "IP Geo Block").
93
94
== Installation ==
95
101
4. Activate the plugin on the Plugin dashboard
102
5. Try 'Best for Back-end' button for easy setup at the bottom of this plugin's setting page.
103
104
+ Please refer to [the document](https://www.ipgeoblock.com/codex/ "Codex | IP Geo Block")
105
or following descriptions for your best setup.
106
107
= Validation rule settings =
110
Choose either `White list` (recommended) or `Black list` to specify the countries from which you want to pass or block.
111
112
* **Whitelist/Blacklist of country code**
113
+ Specify the country code with two letters (see [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements "ISO 3166-1 alpha-2 - Wikipedia, the free encyclopedia")). Each of them should be separated by comma.
114
115
* **Use Autonomous System Number (ASN)**
116
+ It enables you to use "AS number" in the whitelist and blacklist of extra IP addresses to specify a group of IP networks.
117
118
* **Whitelist/Blacklist of extra IP addresses prior to country code**
119
The list of extra IP addresses prior to the validation of country code. [CIDR notation](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing "Classless Inter-Domain Routing - Wikipedia, the free encyclopedia") and [AS number](https://en.wikipedia.org/wiki/Autonomous_system_(Internet) "Autonomous system (Internet) - Wikipedia") are also acceptable to specify the range.
128
It restricts the file types on upload to block malware and backdoor via both back-end and front-end.
129
130
* **Response code**
131
+ Choose one of the [response code](https://tools.ietf.org/html/rfc2616#section-10 "RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1") to be sent when it blocks a comment.
132
The 2xx code will lead to your top page, the 3xx code will redirect to [Black Hole Server](http://blackhole.webpagetest.org/), the 4xx code will lead to WordPress error page, and the 5xx will pretend an server error.
133
134
* **Max number of failed login attempts per IP address**
186
= Geolocation API settings =
187
188
* **API selection and key settings**
189
+ If you wish to use `IPInfoDB`, you should register at [their site](https://ipinfodb.com/ "IPInfoDB | Free IP Address Geolocation Tools") to get a free API key and set it into the textfield. And `ip-api.com` and `Smart-IP.net` require non-commercial use.
190
191
= Local database settings settings =
192
242
243
= Does the site using this plugin comply with GDPR? =
244
245
+ Using this plugin itself should not be the problem, because from version 3.0.11 IP addresses in logs and cache of this plugin are encrypted by default in preparation for personal data breach. It also not only provides a way to manually erase them but also has the functionality to remove them when those are exceeded a certain amount/time. The option "Privacy friendly" helps you to restrict sending the ip address to the 3rd parties such as geolocation APIs and whois service equipped in this plugin. However, these functions are part of the requirements that GDPR requires and do not guarantee that the site is compliant with GDPR. Refer to [3.0.11 release note](https://www.ipgeoblock.com/changelog/release-3.0.11.html) for details.
246
247
= Does this plugin support multisite? =
248
273
274
Thus your site would have less risk against the exploiting via vulnerable plugins and themes.
275
276
+ For more details, please refer to some documents at "[Blocking on front-end](https://www.ipgeoblock.com/codex/#blocking-on-front-end 'Codex | IP Geo Block')".
277
278
= I still have access from blacklisted country. Does it work correctly? =
279
280
Absolutely, YES.
281
282
+ Sometimes, a Wordfence Security user would report this type of claim when he/she found some accesses in its Live traffic view. But please don't worry. Before WordPress runs, Wordfence cleverly filters out malicious requests to your site using <a href="https://php.net/manual/en/ini.core.php#ini.auto-prepend-file" title="PHP: Description of core php.ini directives - Manual">auto_prepend_file</a> directive to include PHP based Web Application Firewall. Then this plugin validates the rest of the requests that pass over Wordfence because those were not in WAF rules, especially you enables "**Prevent Zero-day Exploit**".
283
284
It would also possibly be caused by the accuracy of country code in the geolocation databases. Actually, there is a case that a same IP address has different country code.
285
286
+ For more detail, please refer to "[I still have access from blacklisted country.](https://www.ipgeoblock.com/codex/access-from-blacklisted-country.html 'I still have access from blacklisted country. | IP Geo Block')".
287
288
= How can I test this plugin works? =
289
293
294
You can add an IP address to the `X-Forwarded-For` header to emulate the access behind the proxy. In this case, you should add `HTTP_X_FORWARDED_FOR` into the "**$_SERVER keys for extra IPs**" on "**Settings**" tab.
295
296
+ See more details at "[How to test prevention of attacks](https://www.ipgeoblock.com/codex/#how-to-test-prevention-of-attacks 'Codex | IP Geo Block')".
297
298
= I'm locked out! What shall I do? =
299
319
320
Remember that you should upload the original one after re-configuration to deactivate this feature.
321
322
+ [This document](https://www.ipgeoblock.com/codex/what-should-i-do-when-i-m-locked-out.html "What should I do when I'm locked out? | IP Geo Block") can also help you.
323
324
= Do I have to turn on all the selection to enhance security? =
325
337
- **Bad signatures in query**
338
It blocks the request which has not been covered in the above three.
339
340
+ Please try "**Best for Back-end**" button at the bottom of this plugin's setting page for easy setup. And also see more details in "[The best practice of target settings](https://www.ipgeoblock.com/codex/the-best-practice-for-target-settings.html 'The best practice of target settings | IP Geo Block')".
341
342
= Does this plugin validate all the requests? =
343
347
348
= How to resolve "Sorry, your request cannot be accepted."? =
349
350
+ If you encounter this message, please refer to [this document](https://www.ipgeoblock.com/codex/you-are-not-allowed-to-access.html "Why &ldquo;Sorry, your request cannot be accepted&rdquo; ? | IP Geo Block") to resolve your blocking issue.
351
352
If you can't solve your issue, please let me know about it on the [support forum](https://wordpress.org/support/plugin/ip-geo-block/ "View: Plugin Support &laquo; WordPress.org Forums"). Your logs in this plugin and "**Installation information**" at "**Plugin settings**" will be a great help to resolve the issue.
353
354
= How can I fix "Unable to write" error? =
355
356
+ When you enable "**Force to load WP core**" options, this plugin will try to configure `.htaccess` in your `/wp-content/plugins/` and `/wp-content/themes/` directory in order to protect your site against the malicous attacks to the [OMG plugins and themes](https://www.ipgeoblock.com/article/exposure-of-wp-config-php.html "Prevent exposure of wp-config.php | IP Geo Block").
357
358
But some servers doesn't give read / write permission against `.htaccess` to WordPress. In this case, you can configure `.htaccess` files by your own hand instead of enabling "**Force to load WP core**" options.
359
360
+ Please refer to "[How can I fix permission troubles?](https://www.ipgeoblock.com/codex/how-can-i-fix-permission-troubles.html 'How can I fix permission troubles? | IP Geo Block')" in order to fix this error.
361
362
== Other Notes ==
363
382
383
== Changelog ==
384
385
+ = 3.0.14 =
386
+ * **Fix issue:** Fix wrong handling of anonymized IPv6 on clicking a link or applying bulk actions.
387
+ * **Fix issue:** Fix the issue that added a server's country code which was not in "Whitelist of country code" but its IP address was in "Whitelist of extra IP addresses prior to country code" on activation. ([forum topic](https://wordpress.org/support/topic/possible-bug-disabling-enabling-adds-us-to-whitelist-country-code/ "Topic: Possible bug: disabling/enabling adds &#8220;,US&#8221; to whitelist country code &#124; WordPress.org"))
388
+ * **Fix issue:** Fix the issue of "Fatal error: Call to undefined function" which caused 500 Internal error on admin screen under a certain condition.
389
+ * **Fix issue:** Fix the issue of undefined symbol for openssl in PHP 5.3.5 and under.
390
+ * **New feature:** Introduce an emergency login link in "Plugins settings" section.
391
+ * **New feature:** Introduce a new filter hook [`ip-geo-block-dns`](https://www.ipgeoblock.com/codex/ip-geo-block-dns.html "ip-geo-block-dns | IP Geo Block") to specify the primary and secondary domain name resolvers.
392
+ * **New feature:** Introduce a new filter hook `ip-geo-block-logs`. ([forum topic](https://wordpress.org/support/topic/request-log-filtering/ "Topic: Request: Log filtering &#124; WordPress.org"))
393
+ * **New feature:** Introduce a new drop-in file `drop-in-admin.php` in Geolocation API library folder.
394
+ * **Improvement:** Provide help links on "Settings" tab.
395
+ * **Improvement:** Sort out some related items in the section on "Settings" tab.
396
+ * **Improvement:** All the http had been replaced to https if possible.
397
+
398
+ = 3.0.13 =
399
+ * **Deprecate:** Remove the hotfix in 3.0.12.1 because of [WordPress 4.9.7 Security and Maintenance Release](https://wordpress.org/news/2018/07/wordpress-4-9-7-security-and-maintenance-release/ "WordPress 4.9.7 Security and Maintenance Release").
400
+ * **Fix issue:** Local databases settings will be updated when Geolocation API folder can not be found on activation. ([forum topic](https://wordpress.org/support/topic/local-database-settings-wrong-after-server-move/ "Topic: Local Database settings wrong after server move &#124; WordPress.org"))
401
+ * **Fix issue:** Fix the issue of "ip_geo_block_cache doesn't exist" at activation on clean installation.
402
+ * **Fix issue:** Fix the issue that "Remove entries by IP address" did not work when "Anonymize IP address" in "Privacy and record settings" section was enabled.
403
+ * **Fix issue:** Ipdata.co became to require API key for registered user to make up to 1500 requests daily.
404
+ * **Improvement:** AES256 is applied to encrypt IP address if the algorithm is available. (PHP 5.3.3+)
405
+ * **Improvement:** Add "Do not send IP address to external APIs" apart from "Anonymize IP address" in "Privacy and record settings" section.
406
+
407
= 3.0.12.1 =
408
+ * **Fix issue:** Unexpected blocking cause by an extra slash at the end of `$_SERVER['DOCUMENT_ROOT']` that might be added by server's configuration. ([forum topic](https://wordpress.org/support/topic/wpwebinar/ "Topic: WPWebinar &#124; WordPress.org"))
409
+ * **Fix issue:** [Human friendly error page](https://www.ipgeoblock.com/codex/customizing-the-response.html#human-friendly-error-page) now works properly. ([forum topic](https://wordpress.org/support/topic/problem-with-permalinks-51/ "Topic: Problem with Permalinks &#124; WordPress.org"))
410
+ * **Fix issue:** Fix the conflict with WP hide & Security Enhancer. ([forum topic](https://wordpress.org/support/topic/problem-with-permalinks-51/ "Topic: Problem with Permalinks &#124; WordPress.org"))
411
+ * **Fix issue:** Hotfix [WordPress File Delete to Code Execution](https://blog.ripstech.com/2018/wordpress-file-delete-to-code-execution/ "WARNING: WordPress File Delete to Code Execution") by RIPS Technologies.
412
413
= 3.0.12 =
414
* **Improvement:** Enhance "Privacy and record settings" where "Expiration time [sec] for Logs" can be specified.
420
* **Improvement:** Update geolocation APIs and add a new one.
421
* **Improvement:** Change the JavaScript compressor from Google Closure Compiler to UglifyJS 2 to prevent "Uncaught TypeError: Cannot read property ‘toLowerCase’ of undefined" in a certain environment.
422
* **Fix:** Fix the issue that blocking occurred immediately instead of displaying the login page again when login failed, even the number of times did not exceed the limit.
423
+ * See [3.0.11 release note](https://www.ipgeoblock.com/changelog/release-3.0.11.html) for some details.
424
425
= 3.0.10.4 =
426
* **Fix:** JavaScript error caused by bad handling form tag without method property. This error was happened with Wordfence Live Traffic.
460
* **Maintenance:** Change the priority order of local geolocation databases.
461
* **Bug fix:** Fix the issue that the target action for login form on settings tab could not unchecked on saving changes.
462
* **Bug fix:** Fix some other minor bugs.
463
+ * See [3.0.9 release note](https://www.ipgeoblock.com/changelog/release-3.0.9.html "3.0.9 Release Note | IP Geo Block") for some details.
464
465
= 3.0.8 =
466
* **Improvement:** Use both Maxmind Legacy and GeoLite2 databases parallely.
493
* **Bug fix:** Fix the bug using php short open tag on "Logs" tab.
494
* **Bug fix:** Fix the bug related to absolute path in filesystem on windows system.
495
* **Bug fix:** Fix the issue that "Auto updating (once a month)" could not be disabled.
496
+ * See [3.0.6 release note](https://www.ipgeoblock.com/changelog/release-3.0.6.html "3.0.6 Release Note | IP Geo Block") for some details.
497
498
= 3.0.5 =
499
* **New feature:** Add "Live update" mode on "Logs" tab.
500
* **Improvement:** List all the IP addresses in cache are now displayed and manageable on "Statistics" tab.
501
* **Improvement:** Add "Either blocked or passed" as a new condition for recording logs. It enables to verify the requests "passed" from the blacklisted countries or the countries not in the whitelist.
502
* **Improvement:** Add two new filter hooks to utilize Google APIs from native domain in China.
503
+ * See [3.0.5 release note](https://www.ipgeoblock.com/changelog/release-3.0.5.html "3.0.5 Release Note | IP Geo Block") for some details.
504
505
= 3.0.4.6 =
506
* **Bug fix:** Fix the issue that the emergent functionality didn't work when the number of login attempts reached to the limit.
543
* **Improvement:** Inhibit to embed a special nonce into links when WP-ZEP is disabled at each target. This may improve compatibility with some plugins and themes.
544
* **Bug fix:** Fix the issue of verifying file upload. It could not handle multiple files. ([@](https://wordpress.org/support/topic/incompatible-with-awesome-support-plugin/#post-9403708 "Topic: incompatible with Awesome Support plugin &laquo; WordPress.org Forums"))
545
* **Bug fix:** Fix the issue of illegal click event handling on anchor tag without href. ([@](https://wordpress.org/support/topic/pagebuilder-broken-by-ipgeoblock-v3-0-3-4/ "Topic: Pagebuilder broken by IPGeoblock v3.0.3.4 &laquo; WordPress.org Forums"))
546
+ * See [3.0.4 release note](https://www.ipgeoblock.com/changelog/release-3.0.4.html "3.0.4 Release Note | IP Geo Block") for some details.
547
548
= 3.0.3.4 =
549
* **Improvement:** Some minor refactoring for the future release.
586
* **Improvement:** Better handling of server and private IP address.
587
* **Bug fix:** Fix the bug of "Export/Import settings". **Please export json file again if you hold it as backup purpose** because some of settings data might be incompatible.
588
* **Bug fix:** Fix the bug of "Password Reset" caused by miss-spelling "resetpasss".
589
+ * See some details at [release 3.0.3](https://www.ipgeoblock.com/changelog/release-3.0.3.html "3.0.3 Release Note | IP Geo Block").
590
591
= 3.0.2.2 =
592
* **Improvement:** Change the behavior of "Referrer Suppressor" not to open a new window on public facing pages.
610
* **New feature:** Add "Exceptions" for "Admin ajax/post" to specify the name of action which causes undesired blocking (typically on the public facing pages).
611
* **Improvement:** Add "Disable" to "Max number of failed login attempts per IP address" to avoid conflict with other similar plugin.
612
* **Improvement:** Update geolocation database libraries to 1.1.7 for better compatibility on some platform.
613
+ * **Trial feature:** Add custom action hook `ip-geo-block-send-response`. This is useful to control firewall via [fail2ban](https://www.fail2ban.org/ "Fail2ban") like [WP fail2ban](https://wordpress.org/plugins/wp-fail2ban/ "WP fail2ban - WordPress Plugins").
614
+ * See some details at [release 3.0.2](https://www.ipgeoblock.com/changelog/release-3.0.2.html "3.0.2 Release Note | IP Geo Block").
615
616
= 3.0.1.2 =
617
* **Bug fix:** Fix the blocking issue in some environments when upgrading from 2.2.9.1 to 3.0.0.
639
* **Improvement:** Better compatibility with some plugins, themes and widgets.
640
* **Improvement:** Deferred execution of SQL command to improve the response.
641
* **Improvement:** Make the response compatible with WP original when it is requested by GET method.
642
+ * See some details at [release 3.0.0](https://www.ipgeoblock.com/changelog/release-3.0.0.html "3.0.0 Release Note | IP Geo Block").
643
644
= 2.2.9.1 =
645
* **Bug fix:** Blocking Wordfence scanning. ([@](https://wordpress.org/support/topic/wordfence-conflict-2/ "WordFence Conflict"))
652
* **New feature:** A new option that makes this plugin configured as a "Must-use plugin". It can massively reduce the server load especially against brute-force attacks because it initiates this plugin prior to other typical plugins.
653
* **Improvement:** Validation of a certain signature against XSS is internally added to "Bad signature in query" by default.
654
* **Improvement:** Improved compatibility with PHP 7 (Thanks to [FireMyst](https://wordpress.org/support/topic/plans-for-php-7-compatiblity/ "Topic: Plans for PHP 7 compatiblity? &laquo; WordPress.org Forums")).
655
+ * Find details in [2.2.9 Release Note](https://www.ipgeoblock.com/changelog/release-2.2.9.html "2.2.9 Release Note").
656
657
= 2.2.8.2 =
658
* **Bug fix:** Fixed the mismatched internal version number.
665
* **Bug fix:** Fixed the issue of stripping some required characters for Google maps API key.
666
* **New feature:** Whois database Lookup for IP address on search tab.
667
* **Update:** Updated geolocation API libraries and services.
668
+ * Find more details in [2.2.8 Release Note](https://www.ipgeoblock.com/changelog/release-2.2.8.html "2.2.8 Release Note").
669
670
= 2.2.7 =
671
* **Bug fix:** Fix inadequate validation of "**Bad signatures in query**".
672
* **Improvement:** Add fallback for Google Maps API key ([@](https://wordpress.org/support/topic/226-problem-with-search-resp-google-maps "WordPress &#8250; Support &raquo; [2.2.6] Problem with SEARCH resp. Google Maps")) and corruption of "Bad signatures" ([@](https://wordpress.org/support/topic/226-problem-with-bad-signatures-in-query "WordPress &#8250; Support &raquo; [2.2.6] Problem with &quot;Bad signatures in query&quot;")).
673
* **Update:** Update geolocation service api.
674
+ * Find details about Google Maps API in [2.2.7 Release Note](https://www.ipgeoblock.com/changelog/release-2.2.7.html "2.2.7 Release Note").
675
676
= 2.2.6 =
677
* **New feature:** Add saving csv file of logs in "Logs" tab.
678
* **New feature:** Add filter hook `ip-geo-block-record-log` to control over the conditions of recording in more detail.
679
* **Bug fix:** Fixed the issue that "Exceptions" for Plugins/Themes area does not work properly. Please confirm your settings again.
680
+ * See details at [release 2.2.6](https://www.ipgeoblock.com/changelog/release-2.2.6.html "2.2.6 Release Note").
681
682
= 2.2.5 =
683
* **New feature:** On the settings page, you can specify the pliugin or theme which would cause undesired blocking in order to exclude it from the validation target without embedding any codes into `functions.php`.
702
* **Improvement:** Made the logout url compatible with [Rename wp-login.php](https://wordpress.org/plugins/rename-wp-login/).
703
* **Improvement:** Made condition of validation more strictly at admin diagnosis to prevent unnecessary notice of self blocking. ([@](https://wordpress.org/support/topic/youll-be-blocked-after-you-log-out-notice-doesnt-disappear "[resolved] &quot;You'll be blocked after you log out&quot; notice doesn't disappear"))
704
* **Improvement:** Improved some of UI. ([@](https://wordpress.org/support/topic/possible-to-select-which-countries-are-blocked "[resolved] Possible to select which countries are blocked?"), [@](https://wordpress.org/support/topic/ip-geo-block-black-list "IP Geo Block Black List"))
705
+ * See some details at [release 2.2.4](https://www.ipgeoblock.com/changelog/release-2.2.4.html "2.2.4 Release Note").
706
707
= 2.2.3.1 =
708
* **Bug fix:** Fixed the issue that disabled validation target was still blocked by country. ([@](https://wordpress.org/support/topic/logs-whitelist-comments-still-blocked "[resolved] logs whitelist comments still blocked?"))
716
* **Improvement:** Prevent self blocking caused by irrelevant signature. ([@](https://wordpress.org/support/topic/works-too-well-blocked-my-wp-admin-myself "[resolved] Works too well - Blocked my wp-admin myself"))
717
* **Bug fix:** Fixed the issue of conflicting with certain plugins due to the irrelevant handling of js event. ([@](https://wordpress.org/support/topic/cannot-edit-pages-when-ip-geo-block-is-enabled "[resolved] Cannot edit pages when ip-geo-block is enabled."))
718
* **New feature:** Add "Blocked per day" graph for the daily statistics.
719
+ * See some details at [2.2.3 release note](https://www.ipgeoblock.com/changelog/release-2.2.3.html "2.2.3 Release Note").
720
721
= 2.2.2.3 =
722
Sorry for frequent update again but the following obvious bugs should be fixed.
738
* **Improvement:** In the previous version, the statistical data was recorded into `wp_options`. It caused the uncertainty of recording especially in case of burst attacks. Now the data will be recorded in an independent table to improve this issue.
739
* **Bug fix:** Fixed conflict with NextGEN Gallary Pro. Thanks to [bodowewer](https://wordpress.org/support/profile/bodowewer).
740
* **Bug fix:** Fixed some filter hooks that did not work as intended.
741
+ * See more details at [2.2.2 release note](https://www.ipgeoblock.com/changelog/release-2.2.2.html "2.2.2 Release Note").
742
743
= 2.2.1.1 =
744
* **Bug fix:** Fixed "open_basedir restriction" issue caused by `file_exists()`.
745
746
= 2.2.1 =
747
* **Enhancement:** In previous version, local geolocation databases will always be removed and downloaded again at every upgrading. Now, the class library for Maxmind and IP2Location have become independent of this plugin and you can put them outside this plugin in order to cut the above useless process. The library can be available from [WordPress-IP-Geo-API](https://github.com/tokkonopapa/WordPress-IP-Geo-API).
748
+ * **Deprecated:** Cooperation with IP2Location plugins such as [IP2Location Tags](https://wordpress.org/plugins/ip2location-tags/ "WordPress - IP2Location Tags - WordPress Plugins"), [IP2Location Variables](https://wordpress.org/plugins/ip2location-variables/ "WordPress - IP2Location Variables - WordPress Plugins"), [IP2Location Country Blocker](https://wordpress.org/plugins/ip2location-country-blocker/ "WordPress - IP2Location Country Blocker - WordPress Plugins") is out of use. Instead of it, free [IP2Location LITE databases for IPv4 and IPv6](https://lite.ip2location.com/ "Free IP Geolocation Database") will be downloaded.
749
* **Improvement:** Improved connectivity with Jetpack.
750
* **Improvement:** Improved immediacy of downloading databases at upgrading.
751
* **Improvement:** Replaced a terminated RESTful API service with a new stuff.
765
* **New feature:** Malicious signatures to prevent disclosing the important files via vulnerable plugins or themes. A malicious request to try to expose `wp-config.php` or `passwd` can be blocked.
766
* **New feature:** Add privacy considerations related to IP address. Add **Anonymize IP address** at **Record settings**.
767
* **Bug fix:** Fix the issue that spaces in **Text message on comment form** are deleted.
768
+ * See details at [2.2.0 release note](https://www.ipgeoblock.com/changelog/release-2.2.0.html "2.2.0 Release Note").
769
770
= 2.1.5.1 =
771
* **Bug fix:** Fixed the issue that the Blacklist did not work properly. Thanks to TJayYay for reporting this issue at [support forum](https://wordpress.org/support/topic/hackers-from-country-in-blocked-list-of-countries-trying-to-login "WordPress &rsaquo; Support &raquo; Hackers from country in Blocked List of Countries trying to login").
775
* **New feature:** Add pie chart to display statistics of "Blocked by country".
776
* **Enhancement:** WP-ZEP is reinforced against CSRF.
777
* **Bug fix:** Fix illegal handling of the fragment in a link.
778
+ * See details at [2.1.5 release note](https://www.ipgeoblock.com/changelog/release-2.1.5.html "2.1.5 Release Note").
779
780
= 2.1.4 =
781
* **Bug fix:** Fix the issue that this plugin broke functionality of a certain plugin. Thanks to **opsec** for reporting this issue at [support forum](https://wordpress.org/support/topic/blocks-saves-in-types-or-any-plugins-from-wp-typescom "WordPress &rsaquo; Support &raquo; Blocks saves in Types or any plugins from wp-types.com").
782
* **Improvement:** Add checking process for validation rule to prevent being blocked itself. Thanks to **internationals** for proposing at [support forum](https://wordpress.org/support/topic/locked-out-due-to-eu-vs-country "WordPress &rsaquo; Support &raquo; Locked out due to EU vs. Country")
783
* **Improvement:** Arrage the order of setting sections to focus the goal of this plugin.
784
+ * See details at [2.1.4 release note](https://www.ipgeoblock.com/changelog/release-2.1.4.html "2.1.4 Release Note").
785
786
= 2.1.3 =
787
* **New feature:** Add "show" / "hide" at each section on the "Settings" tab.
790
* **Improvement:** Improved the compatibility with Autoptimize.
791
* **Bug fix:** Fix the issue related to showing featured themes on dashboard.
792
* **Bug fix:** Fix minor bug in `rewrite.php` for the advanced use case.
793
+ * See details at [2.1.3 release note](https://www.ipgeoblock.com/changelog/release-2.1.3.html "2.1.3 Release Note").
794
795
= 2.1.2 =
796
This is a maintenance release.
801
* **Improvement:** Hide checking the existence of log db behind the symbol `IP_GEO_BLOCK_DEBUG` to reduce 1 query on admin screen.
802
* **Improvement:** Add alternative functions of BCMath extension to avoid `PHP Fatal error: Call to undefined function` in `IP2Location.php` when IPv6 is specified.
803
* **Improvement:** Use MaxMind database at the activating process not to be locked out by means of inconsistency of database at the activation and after.
804
+ * See more details at [2.1.2 release note](https://www.ipgeoblock.com/changelog/release-2.1.2.html "2.1.2 Release Note").
805
806
= 2.1.1 =
807
* **New feature:** Added `Block by country (register, lost password)` at `Login form` on `Settings` tab in order to accept the registered users as membership from anywhere but block the request of new user ragistration and lost password by the country code. Is't suitable for BuddyPress and bbPress.
808
* **Improvement:** Added showing the custom error page for http response code 4xx and 5xx. For example the `403.php` in the theme template directory or in the child theme directory is used if it exists. And new filter hooks `ip-geo-block-(comment|xmlrpc|login|admin)-(status|reason)` are available to customize the response code and reason for human.
809
* **Obsoleted:** Obsoleted the filter hooks `ip-geo-block-(admin-actions|admin-pages|wp-content)`. Alternatively new filter hooks `ip-geo-block-bypass-(admins|plugins|themes)` are added to bypass WP-ZEP.
810
+ * Find out more details in the [2.1.1 release note](https://www.ipgeoblock.com/changelog/release-2.1.1.html "2.1.1 Release Note").
811
812
= 2.1.0 =
813
+ * **New feature:** Expanded the operating range of ZP-ZEP, that includes admin area, plugins area, themes area. Now it can prevent a direct malicios attack to the file in plugins and themes area. Please go to the "Validation Settings" on "Settings" tab and check it. Also check my article in "[Analysis of Attack Vector against WP Plugins](https://www.ipgeoblock.com/article/analysis-attack-vector.html)".
814
* **Bug fix:** Fixed the issue that action hook `ip-geo-block-backup-dir` did not work correctly because the order of argument was mismatched.
815
* **Bug fix:** Fixed the issue that a record including utf8 4 bytes character in its columns was not logged into DB in WordPress 4.2.
816
* **Improvement:** Fixed the issue that Referrer Suppressor do nothing with a new element which is added into DOM after DOM ready. The event handler is now delegated at the `body`.
820
* Added re-creating DB table for validation logs in case of accidentally failed at activation process.
821
* The time of day is shown with local time by adding GMT offset based on the time zone setting.
822
* Optimized resource loading and settings to avoid redundancy.
823
+ * See details at [this plugin's blog](https://www.ipgeoblock.com/changelog/release-2.0.8.html "2.0.8 Release Note").
824
825
= 2.0.7 =
826
* Avoid JavaScript error which occurs if an anchor link has no `href`.
842
* Also added the filter hook `ip-geo-block-admin-actions` for safe actions on back-end.
843
844
= 2.0.2 =
845
+ * **New feature:** Include `wp-admin/admin-post.php` as a validation target in the `Admin area`. This feature is to protect against a vulnerability such as [Analysis of the Fancybox-For-WordPress Vulnerability](https://blog.sucuri.net/2015/02/analysis-of-the-fancybox-for-wordpress-vulnerability.html) on Sucuri Blog.
846
* Added a sample code snippet as a use case for 'Give ajax permission in case of safe actions on front facing page'. See Example 10 in `sample.php`.
847
848
= 2.0.1 =
admin/class-ip-geo-block-admin.php CHANGED
@@ -5,7 +5,7 @@
5
* @package IP_Geo_Block
6
* @author tokkonopapa <tokkonopapa@yahoo.com>
7
* @license GPL-3.0
8
- * @link http://www.ipgeoblock.com/
9
* @copyright 2013-2018 tokkonopapa
10
*/
11
define( 'IP_GEO_BLOCK_NETWORK', FALSE );
@@ -39,6 +39,9 @@ class IP_Geo_Block_Admin {
39
// Load plugin text domain and add body class
40
add_action( 'init', array( $this, 'admin_init' ) );
41
42
// Setup a nonce to validate authentication.
43
add_filter( 'wp_redirect', array( $this, 'add_redirect_nonce' ), 10, 2 );
44
}
@@ -56,6 +59,10 @@ class IP_Geo_Block_Admin {
56
*
57
*/
58
public function admin_init() {
59
// Add the options page and menu item.
60
add_action( 'admin_menu', array( $this, 'setup_admin_page' ) );
61
add_action( 'admin_post_ip_geo_block', array( $this, 'admin_ajax_callback' ) );
@@ -108,6 +115,7 @@ class IP_Geo_Block_Admin {
108
$urls = array( wp_login_url() );
109
110
// avoid multiple redirection caused by WP hide 1.4.9.1
111
if ( is_plugin_active( 'wp-hide-security-enhancer/wp-hide.php' ) )
112
$urls[] = 'options-permalink.php';
113
@@ -158,17 +166,14 @@ class IP_Geo_Block_Admin {
158
*/
159
public function create_blog( $blog_id, $user_id, $domain, $path, $site_id, $meta ) {
160
defined( 'IP_GEO_BLOCK_DEBUG' ) and IP_GEO_BLOCK_DEBUG and assert( is_main_site(), 'Not main blog.' );
161
-
162
require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-actv.php';
163
164
- // Get option of main blog.
165
- $settings = IP_Geo_Block::get_option();
166
-
167
// Switch to the new blog and initialize.
168
switch_to_blog( $blog_id );
169
IP_Geo_Block_Activate::activate_blog();
170
171
// Copy option from main blog.
172
if ( $this->is_network && $settings['network_wide'] )
173
update_option( IP_Geo_Block::OPTION_NAME, $settings );
174
@@ -249,10 +254,12 @@ class IP_Geo_Block_Admin {
249
$dependency, IP_Geo_Block::VERSION, $footer
250
);
251
}
252
wp_enqueue_script( IP_Geo_Block::PLUGIN_NAME . '-whois-js',
253
plugins_url( $release ? 'js/whois.min.js' : 'js/whois.js', __FILE__ ),
254
$dependency, IP_Geo_Block::VERSION, $footer
255
);
256
}
257
258
// css for option page
@@ -280,19 +287,18 @@ class IP_Geo_Block_Admin {
280
'url' => admin_url( 'admin-ajax.php' ),
281
'nonce' => IP_Geo_Block_Util::create_nonce( $this->get_ajax_action() ),
282
'msg' => array(
283
- /* [ 0] */ __( 'Import settings ?', 'ip-geo-block' ),
284
- /* [ 1] */ __( 'Create table ?', 'ip-geo-block' ),
285
- /* [ 2] */ __( 'Delete table ?', 'ip-geo-block' ),
286
- /* [ 3] */ __( 'Clear statistics ?', 'ip-geo-block' ),
287
- /* [ 4] */ __( 'Clear cache ?', 'ip-geo-block' ),
288
- /* [ 5] */ __( 'Clear logs ?', 'ip-geo-block' ),
289
- /* [ 6] */ __( 'ajax for logged-in user', 'ip-geo-block' ),
290
- /* [ 7] */ __( 'ajax for non logged-in user', 'ip-geo-block' ),
291
- /* [ 8] */ __( '[Found: %d]', 'ip-geo-block' ),
292
- /* [ 9] */ __( 'Find and verify `%s` on &#8220;Logs&#8221; tab.', 'ip-geo-block' ),
293
- /* [10] */ __( 'This feature is available with HTML5 compliant browsers.', 'ip-geo-block' ),
294
- /* [11] */ __( 'The selected row cannot be found in the visible area.', 'ip-geo-block' ),
295
- /* [12] */ __( 'An error occurred while executing the ajax command `%s`.', 'ip-geo-block' ),
296
),
297
'i18n' => array(
298
/* [ 0] */ '<div class="ip-geo-block-loading"></div>',
@@ -355,6 +361,17 @@ class IP_Geo_Block_Admin {
355
);
356
}
357
358
/**
359
* Show global notice.
360
*
@@ -405,9 +422,7 @@ class IP_Geo_Block_Admin {
405
* Register the administration menu into the WordPress Dashboard menu.
406
*
407
*/
408
- private function add_plugin_admin_menu() {
409
- $settings = IP_Geo_Block::get_option();
410
-
411
// Network wide or not
412
$admin_menu = ( 'admin_menu' === current_filter() ); // @since: 2.5 `admin_menu` or `network_admin_menu`
413
@@ -454,6 +469,7 @@ class IP_Geo_Block_Admin {
454
array( $this, 'display_plugin_admin_page' )
455
//, 'dashicons-admin-site' // or 'data:image/svg+xml;base64...'
456
);
457
if ( $settings['network_wide'] ) {
458
add_submenu_page(
459
IP_Geo_Block::PLUGIN_NAME,
@@ -464,6 +480,7 @@ class IP_Geo_Block_Admin {
464
array( $this, 'display_plugin_admin_page' )
465
);
466
}
467
add_submenu_page(
468
IP_Geo_Block::PLUGIN_NAME,
469
__( 'IP Geo Block', 'ip-geo-block' ),
@@ -489,8 +506,7 @@ class IP_Geo_Block_Admin {
489
* Diagnosis of admin settings.
490
*
491
*/
492
- private function diagnose_admin_screen() {
493
- $settings = IP_Geo_Block::get_option();
494
$updating = get_transient( IP_Geo_Block::CRON_NAME );
495
$adminurl = $this->dashboard_url( $this->is_network && $settings['network_wide'] );
496
@@ -530,8 +546,9 @@ class IP_Geo_Block_Admin {
530
self::add_admin_notice( 'error',
531
__( 'Once you logout, you will be unable to login again because the number of login attempts reaches the limit.', 'ip-geo-block' ) . ' ' .
532
sprintf(
533
- __( 'Please execute "<strong>Clear cache</strong>" on <a href="%s">Statistics tab</a> to prevent locking yourself out.', 'ip-geo-block' ),
534
- esc_url( add_query_arg( array( 'page' => IP_Geo_Block::PLUGIN_NAME, 'tab' => 1 ), $adminurl ) )
535
)
536
);
537
break;
@@ -555,7 +572,6 @@ class IP_Geo_Block_Admin {
555
)
556
)
557
);
558
- break;
559
}
560
}
561
if ( defined( 'IP_GEO_BLOCK_DEBUG' ) && IP_GEO_BLOCK_DEBUG ):
@@ -567,6 +583,16 @@ if ( defined( 'IP_GEO_BLOCK_DEBUG' ) && IP_GEO_BLOCK_DEBUG ):
567
}
568
}
569
endif;
570
// Check activation of IP Geo Allow
571
if ( $settings['validation']['timing'] && is_plugin_active( 'ip-geo-allow/index.php' ) ) {
572
self::add_admin_notice( 'error',
@@ -580,12 +606,14 @@ endif;
580
*
581
*/
582
public function setup_admin_page() {
583
// Register the administration menu.
584
- $this->add_plugin_admin_menu();
585
586
// Avoid multiple validation.
587
- if ( 'POST' !== $_SERVER['REQUEST_METHOD'] )
588
- $this->diagnose_admin_screen();
589
590
// Register settings page only if it is needed.
591
if ( ( isset( $_GET ['page' ] ) && IP_Geo_Block::PLUGIN_NAME === $_GET ['page' ] ) ||
@@ -729,7 +757,7 @@ endif;
729
<p class="ip-geo-block-navi-link">[ <a id="ip-geo-block-toggle-sections" href="#!"><?php _e( 'Toggle all', 'ip-geo-block' ); ?></a> ]
730
<?php if ( 4 === $tab ) { /* Logs tab */ ?>
731
<input id="ip-geo-block-live-update" type="checkbox"<?php checked( isset( $cookie[4][1] ) && 'o' === $cookie[4][1] ); disabled( $settings['validation']['reclogs'] && extension_loaded( 'pdo_sqlite' ), FALSE ); ?> /><label for="ip-geo-block-live-update">
732
- <dfn title="<?php _e( 'Independent of &#8220;Statistics and Logs settings&#8221;, you can see all the requests validated by this plugin in almost real time.', 'ip-geo-block' ); ?>"><?php _e( 'Live update', 'ip-geo-block' ); ?></dfn>
733
</label>
734
<?php } elseif (5 === $tab ) { /* Site List tab */ ?>
735
<input id="ip-geo-block-open-new" type="checkbox"<?php checked( isset( $cookie[5][1] ) && 'o' === $cookie[5][1] );?> /><label for="ip-geo-block-open-new">
@@ -757,7 +785,7 @@ endif;
757
}
758
echo '<p>', implode( '<br />', $tab ), "</p>\n";
759
echo '<p>', __( 'Thanks for providing these great services for free.', 'ip-geo-block' ), "<br />\n";
760
- echo __( '(Most browsers will redirect you to each site <a href="http://www.ipgeoblock.com/etc/referer.html" title="Referer Checker">without referrer when you click the link</a>.)', 'ip-geo-block' ), "</p>\n";
761
} ?>
762
<?php if ( defined( 'IP_GEO_BLOCK_DEBUG' ) && IP_GEO_BLOCK_DEBUG ) {
763
echo '<p>', get_num_queries(), ' queries. ', timer_stop(0), ' seconds. ', memory_get_usage(), " bytes.</p>\n";
@@ -919,10 +947,10 @@ endif;
919
*
920
* @param array $input The values to be validated.
921
*
922
- * @link http://codex.wordpress.org/Validating_Sanitizing_and_Escaping_User_Data
923
- * @link http://codex.wordpress.org/Function_Reference/sanitize_option
924
- * @link http://codex.wordpress.org/Function_Reference/sanitize_text_field
925
- * @link http://codex.wordpress.org/Plugin_API/Filter_Reference/sanitize_option_$option
926
* @link https://core.trac.wordpress.org/browser/trunk/src/wp-includes/formatting.php
927
*/
928
public function sanitize_options( $input ) {
@@ -1076,7 +1104,7 @@ endif;
1076
// Initialize not on the form (mainly unchecked checkbox)
1077
public function preprocess_options( $output, $default ) {
1078
// initialize checkboxes not in the form (added after 2.0.0, just in case)
1079
- foreach ( array( 'providers', 'save_statistics', 'cache_hold', 'anonymize', 'network_wide', 'clean_uninstall' ) as $key ) {
1080
$output[ $key ] = is_array( $default[ $key ] ) ? array() : 0;
1081
}
1082
@@ -1103,6 +1131,9 @@ endif;
1103
$output['public'][ $key ] = is_array( $default['public'][ $key ] ) ? array() : FALSE;
1104
}
1105
1106
// 3.0.4 AS number, 3.0.6 Auto updating of DB files, 3.0.8 Geolite2
1107
$output['Maxmind']['use_asn'] = $output['Geolite2']['use_asn'] = $output['update']['auto'] = FALSE;
1108
@@ -1201,14 +1232,19 @@ endif;
1201
IP_Geo_Block_Cron::stop_update_db();
1202
}
1203
1204
return $output;
1205
}
1206
1207
/**
1208
* A fallback function of array_replace_recursive() before PHP 5.3.
1209
*
1210
- * @link http://php.net/manual/en/function.array-replace-recursive.php#92574
1211
- * @link http://php.net/manual/en/function.array-replace-recursive.php#109390
1212
*/
1213
public function array_replace_recursive() {
1214
if ( function_exists( 'array_replace_recursive' ) ) {
@@ -1377,16 +1413,16 @@ endif;
1377
/**
1378
* Ajax callback function
1379
*
1380
- * @link http://codex.wordpress.org/AJAX_in_Plugins
1381
- * @link http://codex.wordpress.org/Function_Reference/check_ajax_referer
1382
- * @link http://core.trac.wordpress.org/browser/trunk/wp-admin/admin-ajax.php
1383
*/
1384
public function admin_ajax_callback() {
1385
// Check request origin, nonce, capability.
1386
$this->check_admin_post( TRUE );
1387
1388
- require_once IP_GEO_BLOCK_PATH . 'admin/includes/class-admin-ajax.php';
1389
-
1390
// `$which` and `$cmd` should be restricted by whitelist in each function
1391
$settings = IP_Geo_Block::get_option();
1392
$which = isset( $_POST['which'] ) ? $_POST['which'] : NULL;
@@ -1461,6 +1497,14 @@ endif;
1461
}
1462
break;
1463
1464
case 'show-info': // Show system and debug information
1465
$res = IP_Geo_Block_Admin_Ajax::get_wp_info();
1466
break;
@@ -1501,9 +1545,9 @@ endif;
1501
foreach ( array_unique( (array)$which[ $src ] ) as $val ) {
1502
// replace anonymized IP address with CIDR (IPv4:256, IPv6:4096)
1503
$val = preg_replace(
1504
- array( '/\.\*\*\*.*#x2F;', '/\*\*\*.*#x2F;' ),
1505
- array( '.0/24', '000/116' ),
1506
- $val
1507
);
1508
if ( ( filter_var( preg_replace( '/\/\d+#x2F;', '', $val ), FILTER_VALIDATE_IP ) || preg_match( '/^AS\d+#x2F;', $val ) ) &&
1509
( FALSE === strpos( $settings['extra_ips'][ $dst ], $val ) ) ) {
@@ -1516,9 +1560,7 @@ endif;
1516
else
1517
update_option( IP_Geo_Block::OPTION_NAME, $settings );
1518
1519
- $res = array(
1520
- 'page' => 'options-general.php?page=' . IP_Geo_Block::PLUGIN_NAME,
1521
- );
1522
break;
1523
1524
case 'restore-network': // Restore blocked per target in logs
@@ -1555,17 +1597,11 @@ endif;
1555
$res = IP_Geo_Block_Admin_Ajax::find_exceptions( $cmd );
1556
break;
1557
1558
- case 'create-table':
1559
- case 'delete-table':
1560
// Need to define `IP_GEO_BLOCK_DEBUG` to true
1561
- if ( 'create-table' === $cmd )
1562
- IP_Geo_Block_Logs::create_tables();
1563
- else
1564
- IP_Geo_Block_Logs::delete_tables();
1565
-
1566
- $res = array(
1567
- 'page' => 'options-general.php?page=' . IP_Geo_Block::PLUGIN_NAME,
1568
- );
1569
break;
1570
}
1571
5
* @package IP_Geo_Block
6
* @author tokkonopapa <tokkonopapa@yahoo.com>
7
* @license GPL-3.0
8
+ * @link https://www.ipgeoblock.com/
9
* @copyright 2013-2018 tokkonopapa
10
*/
11
define( 'IP_GEO_BLOCK_NETWORK', FALSE );
39
// Load plugin text domain and add body class
40
add_action( 'init', array( $this, 'admin_init' ) );
41
42
+ // Add suggest text for inclusion in the site's privacy policy. @since 4.9.6
43
+ // add_action( 'admin_init', array( $this, 'add_privacy_policy' ) );
44
+
45
// Setup a nonce to validate authentication.
46
add_filter( 'wp_redirect', array( $this, 'add_redirect_nonce' ), 10, 2 );
47
}
59
*
60
*/
61
public function admin_init() {
62
+ // include drop in for admin if it exists
63
+ $settings = IP_Geo_Block::get_option();
64
+ file_exists( $file = IP_Geo_Block_Util::unslashit( $settings['api_dir'] ) . '/drop-in-admin.php' ) and include( $file );
65
+
66
// Add the options page and menu item.
67
add_action( 'admin_menu', array( $this, 'setup_admin_page' ) );
68
add_action( 'admin_post_ip_geo_block', array( $this, 'admin_ajax_callback' ) );
115
$urls = array( wp_login_url() );
116
117
// avoid multiple redirection caused by WP hide 1.4.9.1
118
+ require_once ABSPATH . 'wp-admin/includes/plugin.php'; // is_plugin_active_for_network() @since 3.0.0
119
if ( is_plugin_active( 'wp-hide-security-enhancer/wp-hide.php' ) )
120
$urls[] = 'options-permalink.php';
121
166
*/
167
public function create_blog( $blog_id, $user_id, $domain, $path, $site_id, $meta ) {
168
defined( 'IP_GEO_BLOCK_DEBUG' ) and IP_GEO_BLOCK_DEBUG and assert( is_main_site(), 'Not main blog.' );
169
require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-actv.php';
170
171
// Switch to the new blog and initialize.
172
switch_to_blog( $blog_id );
173
IP_Geo_Block_Activate::activate_blog();
174
175
// Copy option from main blog.
176
+ $settings = IP_Geo_Block::get_option();
177
if ( $this->is_network && $settings['network_wide'] )
178
update_option( IP_Geo_Block::OPTION_NAME, $settings );
179
254
$dependency, IP_Geo_Block::VERSION, $footer
255
);
256
}
257
+
258
wp_enqueue_script( IP_Geo_Block::PLUGIN_NAME . '-whois-js',
259
plugins_url( $release ? 'js/whois.min.js' : 'js/whois.js', __FILE__ ),
260
$dependency, IP_Geo_Block::VERSION, $footer
261
);
262
+ break;
263
}
264
265
// css for option page
287
'url' => admin_url( 'admin-ajax.php' ),
288
'nonce' => IP_Geo_Block_Util::create_nonce( $this->get_ajax_action() ),
289
'msg' => array(
290
+ /* [ 0] */ __( 'Are you sure ?', 'ip-geo-block' ),
291
+ /* [ 1] */ __( 'Open a new window', 'ip-geo-block' ),
292
+ /* [ 2] */ __( 'Generate new link', 'ip-geo-block' ),
293
+ /* [ 3] */ __( 'Delete current link', 'ip-geo-block' ),
294
+ /* [ 4] */ __( 'Please add the following link to favorites / bookmarks in your browser : ', 'ip-geo-block' ),
295
+ /* [ 5] */ __( 'ajax for logged-in user', 'ip-geo-block' ),
296
+ /* [ 6] */ __( 'ajax for non logged-in user', 'ip-geo-block' ),
297
+ /* [ 7] */ __( '[Found: %d]', 'ip-geo-block' ),
298
+ /* [ 8] */ __( 'Find and verify `%s` on &#8220;Logs&#8221; tab.', 'ip-geo-block' ),
299
+ /* [ 9] */ __( 'This feature is available with HTML5 compliant browsers.', 'ip-geo-block' ),
300
+ /* [10] */ __( 'The selected row cannot be found in the visible area.', 'ip-geo-block' ),
301
+ /* [11] */ __( 'An error occurred while executing the ajax command `%s`.', 'ip-geo-block' ),
302
),
303
'i18n' => array(
304
/* [ 0] */ '<div class="ip-geo-block-loading"></div>',
361
);
362
}
363
364
+ /**
365
+ * Add suggest text for inclusion in the site's privacy policy. @since 4.9.6
366
+ *
367
+ * /wp-admin/tools.php?wp-privacy-policy-guide
368
+ * https://developer.wordpress.org/plugins/privacy/privacy-related-options-hooks-and-capabilities/
369
+ */
370
+ public function add_privacy_policy() {
371
+ if ( function_exists( 'wp_add_privacy_policy_content' ) )
372
+ wp_add_privacy_policy_content( 'IP Geo Block', __( 'suggested text.', 'ip-geo-block' ) );
373
+ }
374
+
375
/**
376
* Show global notice.
377
*
422
* Register the administration menu into the WordPress Dashboard menu.
423
*
424
*/
425
+ private function add_plugin_admin_menu( $settings ) {
426
// Network wide or not
427
$admin_menu = ( 'admin_menu' === current_filter() ); // @since: 2.5 `admin_menu` or `network_admin_menu`
428
469
array( $this, 'display_plugin_admin_page' )
470
//, 'dashicons-admin-site' // or 'data:image/svg+xml;base64...'
471
);
472
+
473
if ( $settings['network_wide'] ) {
474
add_submenu_page(
475
IP_Geo_Block::PLUGIN_NAME,
480
array( $this, 'display_plugin_admin_page' )
481
);
482
}
483
+
484
add_submenu_page(
485
IP_Geo_Block::PLUGIN_NAME,
486
__( 'IP Geo Block', 'ip-geo-block' ),
506
* Diagnosis of admin settings.
507
*
508
*/
509
+ private function diagnose_admin_screen( $settings ) {
510
$updating = get_transient( IP_Geo_Block::CRON_NAME );
511
$adminurl = $this->dashboard_url( $this->is_network && $settings['network_wide'] );
512
546
self::add_admin_notice( 'error',
547
__( 'Once you logout, you will be unable to login again because the number of login attempts reaches the limit.', 'ip-geo-block' ) . ' ' .
548
sprintf(
549
+ __( 'Please remove your IP address in &#8220;%1$sStatistics in IP address cache%2$s&#8221; on &#8220;%3$sStatistics%4$s&#8221; tab to prevent locking yourself out.', 'ip-geo-block' ),
550
+ '<strong><a href="' . esc_url( add_query_arg( array( 'page' => IP_Geo_Block::PLUGIN_NAME, 'tab' => 1, 'sec' => 2 ), $adminurl ) . '#' . IP_Geo_Block::PLUGIN_NAME . '-section-2' ) . '">', '</a></strong>',
551
+ '<strong>', '</strong>'
552
)
553
);
554
break;
572
)
573
)
574
);
575
}
576
}
577
if ( defined( 'IP_GEO_BLOCK_DEBUG' ) && IP_GEO_BLOCK_DEBUG ):
583
}
584
}
585
endif;
586
+ // Check consistency of emergency login link
587
+ if ( $settings['login_link']['link'] && ! IP_Geo_Block_Util::verify_link( $settings['login_link']['link'], $settings['login_link']['hash'] ) ) {
588
+ self::add_admin_notice( 'error',
589
+ sprintf(
590
+ __( 'Emergency login link is outdated. Please delete it once and generate again at &#8220;%sPlugin settings%s&#8221; section. Also do not forget to update favorites / bookmarks in your browser.', 'ip-geo-block' ),
591
+ '<strong><a href="' . esc_url( add_query_arg( array( 'page' => IP_Geo_Block::PLUGIN_NAME, 'tab' => 0, 'sec' => 7 ), $adminurl ) . '#' . IP_Geo_Block::PLUGIN_NAME . '-section-7' ) . '">', '</a></strong>'
592
+ )
593
+ );
594
+ }
595
+
596
// Check activation of IP Geo Allow
597
if ( $settings['validation']['timing'] && is_plugin_active( 'ip-geo-allow/index.php' ) ) {
598
self::add_admin_notice( 'error',
606
*
607
*/
608
public function setup_admin_page() {
609
+ $settings = IP_Geo_Block::get_option();
610
+
611
// Register the administration menu.
612
+ $this->add_plugin_admin_menu( $settings );
613
614
// Avoid multiple validation.
615
+ if ( 'GET' === $_SERVER['REQUEST_METHOD'] )
616
+ $this->diagnose_admin_screen( $settings );
617
618
// Register settings page only if it is needed.
619
if ( ( isset( $_GET ['page' ] ) && IP_Geo_Block::PLUGIN_NAME === $_GET ['page' ] ) ||
757
<p class="ip-geo-block-navi-link">[ <a id="ip-geo-block-toggle-sections" href="#!"><?php _e( 'Toggle all', 'ip-geo-block' ); ?></a> ]
758
<?php if ( 4 === $tab ) { /* Logs tab */ ?>
759
<input id="ip-geo-block-live-update" type="checkbox"<?php checked( isset( $cookie[4][1] ) && 'o' === $cookie[4][1] ); disabled( $settings['validation']['reclogs'] && extension_loaded( 'pdo_sqlite' ), FALSE ); ?> /><label for="ip-geo-block-live-update">
760
+ <dfn title="<?php _e( 'Independent of &#8220;Privacy and record settings&#8221;, you can see all the requests validated by this plugin in almost real time.', 'ip-geo-block' ); ?>"><?php _e( 'Live update', 'ip-geo-block' ); ?></dfn>
761
</label>
762
<?php } elseif (5 === $tab ) { /* Site List tab */ ?>
763
<input id="ip-geo-block-open-new" type="checkbox"<?php checked( isset( $cookie[5][1] ) && 'o' === $cookie[5][1] );?> /><label for="ip-geo-block-open-new">
785
}
786
echo '<p>', implode( '<br />', $tab ), "</p>\n";
787
echo '<p>', __( 'Thanks for providing these great services for free.', 'ip-geo-block' ), "<br />\n";
788
+ echo __( '(Most browsers will redirect you to each site <a href="https://www.ipgeoblock.com/etc/referer.html" title="Referer Checker">without referrer when you click the link</a>.)', 'ip-geo-block' ), "</p>\n";
789
} ?>
790
<?php if ( defined( 'IP_GEO_BLOCK_DEBUG' ) && IP_GEO_BLOCK_DEBUG ) {
791
echo '<p>', get_num_queries(), ' queries. ', timer_stop(0), ' seconds. ', memory_get_usage(), " bytes.</p>\n";
947
*
948
* @param array $input The values to be validated.
949
*
950
+ * @link https://codex.wordpress.org/Validating_Sanitizing_and_Escaping_User_Data
951
+ * @link https://codex.wordpress.org/Function_Reference/sanitize_option
952
+ * @link https://codex.wordpress.org/Function_Reference/sanitize_text_field
953
+ * @link https://codex.wordpress.org/Plugin_API/Filter_Reference/sanitize_option_$option
954
* @link https://core.trac.wordpress.org/browser/trunk/src/wp-includes/formatting.php
955
*/
956
public function sanitize_options( $input ) {
1104
// Initialize not on the form (mainly unchecked checkbox)
1105
public function preprocess_options( $output, $default ) {
1106
// initialize checkboxes not in the form (added after 2.0.0, just in case)
1107
+ foreach ( array( 'providers', 'save_statistics', 'cache_hold', 'anonymize', 'restrict_api', 'network_wide', 'clean_uninstall' ) as $key ) {
1108
$output[ $key ] = is_array( $default[ $key ] ) ? array() : 0;
1109
}
1110
1131
$output['public'][ $key ] = is_array( $default['public'][ $key ] ) ? array() : FALSE;
1132
}
1133
1134
+ // disabled in case IP address cache is disabled
1135
+ empty( $output['cache_hold'] ) and $output['login_fails'] = -1;
1136
+
1137
// 3.0.4 AS number, 3.0.6 Auto updating of DB files, 3.0.8 Geolite2
1138
$output['Maxmind']['use_asn'] = $output['Geolite2']['use_asn'] = $output['update']['auto'] = FALSE;
1139
1232
IP_Geo_Block_Cron::stop_update_db();
1233
}
1234
1235
+ // expiration time [days]
1236
+ if ( version_compare( $output['version'], '3.0.13' ) < 0 )
1237
+ $output['validation']['explogs'] /= DAY_IN_SECONDS;
1238
+ $output['validation']['explogs'] = min( 365, max( 1, (int)$output['validation']['explogs'] ) );
1239
+
1240
return $output;
1241
}
1242
1243
/**
1244
* A fallback function of array_replace_recursive() before PHP 5.3.
1245
*
1246
+ * @link https://php.net/manual/en/function.array-replace-recursive.php#92574
1247
+ * @link https://php.net/manual/en/function.array-replace-recursive.php#109390
1248
*/
1249
public function array_replace_recursive() {
1250
if ( function_exists( 'array_replace_recursive' ) ) {
1413
/**
1414
* Ajax callback function
1415
*
1416
+ * @link https://codex.wordpress.org/AJAX_in_Plugins
1417
+ * @link https://codex.wordpress.org/Function_Reference/check_ajax_referer
1418
+ * @link https://core.trac.wordpress.org/browser/trunk/wp-admin/admin-ajax.php
1419
*/
1420
public function admin_ajax_callback() {
1421
+ require_once IP_GEO_BLOCK_PATH . 'admin/includes/class-admin-ajax.php';
1422
+
1423
// Check request origin, nonce, capability.
1424
$this->check_admin_post( TRUE );
1425
1426
// `$which` and `$cmd` should be restricted by whitelist in each function
1427
$settings = IP_Geo_Block::get_option();
1428
$which = isset( $_POST['which'] ) ? $_POST['which'] : NULL;
1497
}
1498
break;
1499
1500
+ case 'generate-link': // Generate new link
1501
+ $res = array( 'link' => IP_Geo_Block_Util::generate_link() );
1502
+ break;
1503
+
1504
+ case 'delete-link': // Delete existing link
1505
+ IP_Geo_Block_Util::delete_link();
1506
+ break;
1507
+
1508
case 'show-info': // Show system and debug information
1509
$res = IP_Geo_Block_Admin_Ajax::get_wp_info();
1510
break;
1545
foreach ( array_unique( (array)$which[ $src ] ) as $val ) {
1546
// replace anonymized IP address with CIDR (IPv4:256, IPv6:4096)
1547
$val = preg_replace(
1548
+ array( '/\.\*\*\*#x2F;', '/:\w*\*\*\*#x2F;', '/(::.*)::\/116#x2F;' ),
1549
+ array( '.0/24', '::/116', '$1/116' ),
1550
+ trim( $val )
1551
);
1552
if ( ( filter_var( preg_replace( '/\/\d+#x2F;', '', $val ), FILTER_VALIDATE_IP ) || preg_match( '/^AS\d+#x2F;', $val ) ) &&
1553
( FALSE === strpos( $settings['extra_ips'][ $dst ], $val ) ) ) {
1560
else
1561
update_option( IP_Geo_Block::OPTION_NAME, $settings );
1562
1563
+ $res = array( 'page' => 'options-general.php?page=' . IP_Geo_Block::PLUGIN_NAME );
1564
break;
1565
1566
case 'restore-network': // Restore blocked per target in logs
1597
$res = IP_Geo_Block_Admin_Ajax::find_exceptions( $cmd );
1598
break;
1599
1600
+ case 'init-table':
1601
// Need to define `IP_GEO_BLOCK_DEBUG` to true
1602
+ IP_Geo_Block_Logs::delete_tables();
1603
+ IP_Geo_Block_Logs::create_tables();
1604
+ $res = array( 'page' => 'options-general.php?page=' . IP_Geo_Block::PLUGIN_NAME );
1605
break;
1606
}
1607
admin/css/admin-icons.css CHANGED
@@ -1,54 +1,110 @@
1
- /*! IP Geo Block admin icons */
2
@font-face {
3
- font-family: 'icomoon';
4
- src: url('fonts/icomoon.eot?astkh8');
5
- src: url('fonts/icomoon.eot?astkh8#iefix') format('embedded-opentype'),
6
- url('fonts/icomoon.ttf?astkh8') format('truetype'),
7
- url('fonts/icomoon.woff?astkh8') format('woff'),
8
- url('fonts/icomoon.svg?astkh8#icomoon') format('svg');
9
- font-weight: normal;
10
- font-style: normal;
11
}
12
13
[class^="ip-geo-block-icon-"], [class*=" ip-geo-block-icon-"] {
14
- /* use !important to prevent issues with browser extensions that change fonts */
15
- font-family: 'icomoon' !important;
16
- speak: none;
17
- font-style: normal;
18
- font-weight: normal;
19
- font-variant: normal;
20
- text-transform: none;
21
- line-height: 1;
22
- /* Better Font Rendering =========== */
23
- -webkit-font-smoothing: antialiased;
24
- -moz-osx-font-smoothing: grayscale;
25
}
26
27
.ip-geo-block-icon-play:before {
28
- content: "\ea1c";
29
}
30
.ip-geo-block-icon-pause:before {
31
- content: "\ea1d";
32
}
33
.ip-geo-block-icon-stop:before {
34
- content: "\ea1e";
35
}
36
- .ip-geo-block-icon-warn:before {
37
- content: "\ea07";
38
- color: #c43322;
39
}
40
41
#toplevel_page_ip-geo-block .dashicons-admin-generic:before {
42
font-family: 'icomoon';
43
- content: "\e9c9";
44
font-size: 18px;
45
margin-left: 2px;
46
}
47
- /*#toplevel_page_ip-geo-block .dashicons-admin-generic:after {
48
font-family: 'icomoon';
49
- content: "\e9b4";
50
- font-size: 10px;
51
- position: absolute;
52
- top: 1.4em;
53
- left: 2em;
54
- }*/
1
+ /*! IP Geo Block admin icons
2
+ * This package includes the following icon font.
3
+ * IcoMoon - Free / Designer: Keyamoon / License: GPL / CC BY 4.0
4
+ * Zondicons / Designer: Steve Schoger / License: CC BY 4.0
5
+ * Material Icons / Designer: Google / License: Apache License 2.0
6
+ */
7
@font-face {
8
+ font-family: 'icomoon';
9
+ src: url('fonts/icomoon.eot?119jp3');
10
+ src: url('fonts/icomoon.eot?119jp3#iefix') format('embedded-opentype'),
11
+ url('fonts/icomoon.ttf?119jp3') format('truetype'),
12
+ url('fonts/icomoon.woff?119jp3') format('woff'),
13
+ url('fonts/icomoon.svg?119jp3#icomoon') format('svg');
14
+ font-weight: normal;
15
+ font-style: normal;
16
}
17
18
[class^="ip-geo-block-icon-"], [class*=" ip-geo-block-icon-"] {
19
+ /* use !important to prevent issues with browser extensions that change fonts */
20
+ font-family: 'icomoon' !important;
21
+ speak: none;
22
+ font-style: normal;
23
+ font-weight: normal;
24
+ font-variant: normal;
25
+ text-transform: none;
26
+ line-height: 1;
27
+
28
+ /* Better Font Rendering =========== */
29
+ -webkit-font-smoothing: antialiased;
30
+ -moz-osx-font-smoothing: grayscale;
31
}
32
33
+ .ip-geo-block-icon-calc {
34
+ margin-top: 0.2em !important;
35
+ }
36
+ .ip-geo-block-icon-calc:before {
37
+ content: "\e901";
38
+ }
39
+ .ip-geo-block-icon-vpn_lock:before {
40
+ content: "\e62f";
41
+ }
42
+ .ip-geo-block-icon-search:before {
43
+ content: "\e986";
44
+ }
45
+ .ip-geo-block-icon-key:before {
46
+ content: "\e98d";
47
+ }
48
+ .ip-geo-block-icon-lock:before {
49
+ content: "\e98f";
50
+ }
51
+ .ip-geo-block-icon-unlocked:before {
52
+ content: "\e990";
53
+ }
54
+ .ip-geo-block-icon-cogs:before {
55
+ content: "\e995";
56
+ }
57
+ .ip-geo-block-icon-pie-chart:before {
58
+ content: "\e99a";
59
+ }
60
+ .ip-geo-block-icon-stats-dots:before {
61
+ content: "\e99b";
62
+ }
63
+ .ip-geo-block-icon-stats-bars:before {
64
+ content: "\e99c";
65
+ }
66
+ .ip-geo-block-icon-stats-bars2:before {
67
+ content: "\e99d";
68
+ }
69
+ .ip-geo-block-icon-switch:before {
70
+ content: "\e9b6";
71
+ }
72
+ .ip-geo-block-icon-sphere:before {
73
+ content: "\e9c9";
74
+ }
75
+ .ip-geo-block-icon-earth:before {
76
+ content: "\e9ca";
77
+ }
78
.ip-geo-block-icon-play:before {
79
+ content: "\ea1c";
80
}
81
.ip-geo-block-icon-pause:before {
82
+ content: "\ea1d";
83
}
84
.ip-geo-block-icon-stop:before {
85
+ content: "\ea1e";
86
+ }
87
+ .ip-geo-block-icon-eject:before {
88
+ content: "\ea25";
89
+ }
90
+ .ip-geo-block-icon-new-tab:before {
91
+ content: "\ea7e";
92
}
93
+ .ip-geo-block-icon-warning:before {
94
+ content: "\e900";
95
}
96
97
#toplevel_page_ip-geo-block .dashicons-admin-generic:before {
98
font-family: 'icomoon';
99
+ content: "\e62f";
100
font-size: 18px;
101
margin-left: 2px;
102
}
103
+ /*
104
+ #toplevel_page_ip-geo-block .dashicons-admin-generic:before {
105
font-family: 'icomoon';
106
+ content: "\e9c9";
107
+ font-size: 18px;
108
+ margin-left: 2px;
109
+ }
110
+ */
admin/css/admin-icons.min.css CHANGED
@@ -1,2 +1,7 @@
1
- /*! IP Geo Block admin icons */
2
- @font-face{font-family:icomoon;src:url(fonts/icomoon.eot?astkh8);src:url(fonts/icomoon.eot?astkh8#iefix) format('embedded-opentype'),url(fonts/icomoon.ttf?astkh8) format('truetype'),url(fonts/icomoon.woff?astkh8) format('woff'),url(fonts/icomoon.svg?astkh8#icomoon) format('svg');font-weight:400;font-style:normal}[class*=" ip-geo-block-icon-"],[class^=ip-geo-block-icon-]{font-family:icomoon!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ip-geo-block-icon-play:before{content:"\ea1c"}.ip-geo-block-icon-pause:before{content:"\ea1d"}.ip-geo-block-icon-stop:before{content:"\ea1e"}.ip-geo-block-icon-warn:before{content:"\ea07";color:#c43322}#toplevel_page_ip-geo-block .dashicons-admin-generic:before{font-family:icomoon;content:"\e9c9";font-size:18px;margin-left:2px}
1
+ /*! IP Geo Block admin icons
2
+ * This package includes the following icon font.
3
+ * IcoMoon - Free / Designer: Keyamoon / License: GPL / CC BY 4.0
4
+ * Zondicons / Designer: Steve Schoger / License: CC BY 4.0
5
+ * Material Icons / Designer: Google / License: Apache License 2.0
6
+ */
7
+ @font-face{font-family:icomoon;src:url(fonts/icomoon.eot?119jp3);src:url(fonts/icomoon.eot?119jp3#iefix) format('embedded-opentype'),url(fonts/icomoon.ttf?119jp3) format('truetype'),url(fonts/icomoon.woff?119jp3) format('woff'),url(fonts/icomoon.svg?119jp3#icomoon) format('svg');font-weight:400;font-style:normal}[class*=" ip-geo-block-icon-"],[class^=ip-geo-block-icon-]{font-family:icomoon!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ip-geo-block-icon-calc{margin-top:.2em!important}.ip-geo-block-icon-calc:before{content:"\e901"}.ip-geo-block-icon-vpn_lock:before{content:"\e62f"}.ip-geo-block-icon-search:before{content:"\e986"}.ip-geo-block-icon-key:before{content:"\e98d"}.ip-geo-block-icon-lock:before{content:"\e98f"}.ip-geo-block-icon-unlocked:before{content:"\e990"}.ip-geo-block-icon-cogs:before{content:"\e995"}.ip-geo-block-icon-pie-chart:before{content:"\e99a"}.ip-geo-block-icon-stats-dots:before{content:"\e99b"}.ip-geo-block-icon-stats-bars:before{content:"\e99c"}.ip-geo-block-icon-stats-bars2:before{content:"\e99d"}.ip-geo-block-icon-switch:before{content:"\e9b6"}.ip-geo-block-icon-sphere:before{content:"\e9c9"}.ip-geo-block-icon-earth:before{content:"\e9ca"}.ip-geo-block-icon-play:before{content:"\ea1c"}.ip-geo-block-icon-pause:before{content:"\ea1d"}.ip-geo-block-icon-stop:before{content:"\ea1e"}.ip-geo-block-icon-eject:before{content:"\ea25"}.ip-geo-block-icon-new-tab:before{content:"\ea7e"}.ip-geo-block-icon-warning:before{content:"\e900"}#toplevel_page_ip-geo-block .dashicons-admin-generic:before{font-family:icomoon;content:"\e62f";font-size:18px;margin-left:2px}
admin/css/admin.css CHANGED
@@ -213,22 +213,32 @@ input[id*="ip_geo_block_settings_providers"] + label {
213
color: #2786C2;
214
display: inline-block;
215
}
216
217
/* Loading image */
218
.ip-geo-block-loading,
219
#ip-geo-block-live-loading {
220
background-size: 16px 16px;
221
background-position: center center;
222
background-repeat: no-repeat;
223
- height: 16px;
224
- width: 16px;
225
margin-left: 1em;
226
margin-top: 0.2em;
227
display: inline-block;
228
vertical-align: top;
229
}
230
.ip-geo-block-loading {
231
- background-image: url(data:image/gif;base64,R0lGODlhEAAQAPIGAAAAAMLCwkJCQpKSkmJiYoKCgv///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJCgAGACwAAAAAEAAQAAADM2i63P4wyklrC0IEKgAQnAdOmGYFBLExwboQWcG2rlHEwTDQLUsUOd2mBxkUCgNKa+dIAAAh+QQJCgAGACwAAAIACgAOAAADLWgWIqHQCABEVLPe1R4MBOFFRFNsRUNsYDFewTC8iixvQ1EMyxjEvyBLODQkAAAh+QQJCgAGACwAAAAACgAOAAADLWi6IRJrCQCECoU0ag1xxeBARuEQ0UUU5DUM7fK+qTEUYR0EcM3Ev51uB7wAEwAh+QQJCgAGACwAAAAADgAKAAADLWi6URQrLiJEkSaM0eqrkLFtAVEEAgAIylAUQ5SuSqCFNZjhWG3zmB8wOJQkAAAh+QQJCgAGACwCAAAADgAKAAADK2hqMRMrLuekCnCU8gqBDCZ2glBcYkSUxIJJgQdaUVDOtAAAAr3oPN/llgAAIfkECQoABgAsBgAAAAoADgAAAytoEdauiz0Yx5BQFTvN2EMXWNgUFETZFIJQdERLiGgZtKohAIDQ7T0RrpEAACH5BAkKAAYALAYAAgAKAA4AAAMqaKoR+609Fie1K4zhZiibNRSg1XAQUXQPIQgE835voQgAIARqh+ummSUBACH5BAUKAAYALAIABgAOAAoAAAMsaLpsES2+F9mEddEgBFbBMGACAAiMOCrlGRBFWBQD2L0dYYjfUuQZEKynSAAAOw==);
232
}
233
234
/* Google Map infomation window */
@@ -333,16 +343,6 @@ table.ip-geo-block-table td:first-child {
333
word-break: normal;
334
white-space: pre;
335
}
336
- #ip-geo-block-preferred {
337
- color: #fff;
338
- background: #00838f !important;
339
- border-color: #00707a !important;
340
- text-shadow: none; /* for WordPress 3.7.21 */
341
- }
342
- #ip-geo-block-preferred:hover {
343
- background-color: #00919e !important;
344
- border-color: #00525a !important;
345
- }
346
#ip-geo-block-back-to-top {
347
margin:0;
348
text-align:right;
@@ -359,7 +359,7 @@ table.ip-geo-block-table td:first-child {
359
360
/* Icons */
361
dfn ~ .ip-geo-block-icon {
362
- margin-left: 0.6em;
363
}
364
.ip-geo-block-icon {
365
position: relative;
@@ -383,9 +383,6 @@ dfn ~ .ip-geo-block-icon {
383
background-position: center center;
384
background-repeat: no-repeat;
385
}
386
- .ip-geo-block-icon-cidr span {
387
- vertical-align: text-top;
388
- }
389
.ip-geo-block-icon-cycle span {
390
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAh1BMVEUAda2otLp+rsSHprWHr8IBd7EpfKRGhaNajqeUqrRymKuKoq5yo7prlKgAcqoVe6w8gqQmgq5Tj6wIdqsVdKIshrEMea1Uhp+Anqw0hawDdq4gfKhljqE7hqoLdKYbgbM4jLQygKUGeK8CdawQd6gVeKcad6NKkrSerrZAj7UAc6sAc6rc3NySrVGQAAAALXRSTlP//////////////////////////////////////////////////////////wCl7wv9AAACOklEQVR4Ae2W15rzKgxF9xTZzhTX9B7S/gN6/9ebYqzzGZsw/S7LV3FZgCSIwD/kQ8FVcBU8xatZUczy8luC/ABNOn0DSHEsvyZ4PgLatNCYR3efFxyhTQ8g+qQgJxgv2JefERzJXATRh4LHOUwAHD4S7OGEztRJaN86hAUxtaNWDUf/bRdDBbQMWVDAO8jn89WUhag1MeyCAh6hHofyrliLgZKggDMYgzF3eVAwFq0uCZq5KY0TezjIHDDzC0qqmkwe2ctGDOQVLMkgu+F3/rGXwb4xIPcJ6P3JgkM8wFjmfcFAWfeKQywaAz33BJVuHsUcAt09gVbuLDThAJkdR687ggLmf4gDJLIGV7BydtB8yn3u+fbtuj/LS7G9wZAd1AKK+yxJ1x+aBmibTtgCcEHGHsh0wdbOgNLek4L7lI5BigY8nWuZUQ3qGEXes9JzOKGJztPaGtLslu3lIXJirdxCWkASHGDTMqg7V1DKPplygDG61YJukLHjEErGSXqCSos6xNSOgzP3BDmsQBcchNwkoV8oiNnPA78zIefUgCdJeGIfE7LmFWXsFTCFdzTJ/RlfEMRiSGnFXXbkC7AIeqcKDu4ynseozeouKJiSEYBDwkJyIC1nRUjgblkNWp/e/1vXc2gjoAoLksYgjrrFMi0oDgjEEIDij1scBXMJSH6DAj6RNl7o8MkuLak8Co15/Pk+MRmT0xilQJV/sdWNKg2kTaeroudvNNsDjmejYjSL+e6v2/2r4Cp4BXNajr0H7hRfAAAAAElFTkSuQmCC);
391
}
@@ -539,33 +536,33 @@ input#ip_geo_block_settings_behavior_time {
539
/*------------------------------------------------------------
540
* Customizing based on jquery.dataTables.css
541
*------------------------------------------------------------*/
542
- table.dataTable {
543
clear: none !important;
544
}
545
- table.dataTable th,
546
- table.dataTable td {
547
text-align: right;
548
}
549
- table.dataTable th:nth-child(n+2),
550
- table.dataTable td:nth-child(n+2) {
551
padding-left: 0 !important;
552
}
553
- table.dataTable th {
554
white-space: nowrap;
555
}
556
- table.dataTable > thead > tr {
557
line-height: 1.8em;
558
}
559
- table.dataTable > tbody > tr {
560
cursor: pointer;
561
}
562
- table.dataTable > thead > tr > th,
563
- table.dataTable > thead > tr > td,
564
- table.dataTable.no-footer {
565
border-bottom: 1px solid #ddd;
566
}
567
- table.dataTable thead th,
568
- table.dataTable thead td {
569
padding: 10px 16px;
570
}
571
/* country code */
@@ -575,18 +572,18 @@ table.dataTable thead td {
575
}
576
577
/* Scroll bar */
578
- .dataTables_wrapper.no-footer .dataTables_scrollBody {
579
border-bottom: 1px solid #ddd;
580
}
581
582
/* Size of column */
583
- table.dataTable.nowrap td,
584
- table.dataTable > tbody > tr > td span {
585
white-space: normal !important;
586
word-wrap: break-word !important;
587
word-break: break-all !important;
588
}
589
- table.dataTable > tbody > tr > td span {
590
display: inline-block;
591
}
592
@@ -594,36 +591,36 @@ table.dataTable > tbody > tr > td span {
594
.ip-geo-block-settings-folding input[type="checkbox"] {
595
margin-right: 0.5em;
596
}
597
- table.dataTable input[type="checkbox"] {
598
max-height: 16px;
599
max-width: 16px;
600
margin: 0;
601
}
602
- table.dataTable > thead > tr > th:first-child,
603
- table.dataTable > tbody > tr > td:first-child {
604
padding: 8px 4px 8px 1.4em;
605
text-align: left;
606
}
607
608
/* No data available in table */
609
- table.dataTable > tbody > tr > td.dataTables_empty,
610
table.collapsed > tbody > tr > td.dataTables_empty:first-child::before {
611
border: none;
612
text-align: center;
613
}
614
615
/* Checkbox column */
616
- table.dataTable thead > tr > th:first-child.sorting_asc {
617
background-image: none !important;
618
}
619
- table.dataTable.display tbody tr.even > .sorting_1,
620
- table.dataTable.display tbody tr.odd > .sorting_1,
621
- table.dataTable.display tbody tr:hover > .sorting_1 {
622
background-color: inherit !important;
623
}
624
625
/* Collapsed */
626
- table.dataTable.collapsed > tbody > tr > td:first-child {
627
padding: 8px 4px 8px 8px !important;
628
}
629
table.collapsed > tbody > tr > td:first-child::before,
@@ -671,21 +668,21 @@ table.collapsed > tbody > tr.child > td.child > ul li span.dtr-data {
671
}
672
673
/* Pagenation */
674
- .dataTables_wrapper .dataTables_paginate {
675
float: none;
676
text-align: center;
677
margin-bottom: 1em;
678
}
679
- .dataTables_wrapper .dataTables_paginate span.ellipsis,
680
- .dataTables_wrapper .dataTables_paginate a.paginate_button,
681
- .dataTables_wrapper .dataTables_paginate a.paginate_button:hover,
682
- .dataTables_wrapper .dataTables_paginate a.paginate_button:active,
683
- .dataTables_wrapper .dataTables_paginate a.paginate_button.current,
684
- .dataTables_wrapper .dataTables_paginate a.paginate_button.current:hover,
685
- .dataTables_wrapper .dataTables_paginate a.paginate_button.current:active,
686
- .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled,
687
- .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:hover,
688
- .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:active {
689
min-width: 2em;
690
background: inherit;
691
border-color: #ddd;
@@ -699,37 +696,37 @@ table.collapsed > tbody > tr.child > td.child > ul li span.dtr-data {
699
display: inline-block;
700
text-decoration: none;
701
}
702
- .dataTables_wrapper .dataTables_paginate > a.paginate_button:first-child,
703
- .dataTables_wrapper .dataTables_paginate:hover > a.paginate_button:first-child,
704
- .dataTables_wrapper .dataTables_paginate:active > a.paginate_button:first-child {
705
border-left-width: 1px;
706
border-bottom-left-radius: 4px;
707
border-top-left-radius: 4px;
708
}
709
- .dataTables_wrapper .dataTables_paginate > a.paginate_button:last-child,
710
- .dataTables_wrapper .dataTables_paginate:hover > a.paginate_button:last-child,
711
- .dataTables_wrapper .dataTables_paginate:active > a.paginate_button:last-child {
712
border-bottom-right-radius: 4px;
713
border-top-right-radius: 4px;
714
}
715
- .dataTables_wrapper .dataTables_paginate a.paginate_button {
716
color: #0073aa !important;
717
}
718
- .dataTables_wrapper .dataTables_paginate a.paginate_button:hover {
719
color: #0096dd !important;
720
background-color: #fff;
721
}
722
- .dataTables_wrapper .dataTables_paginate span.ellipsis,
723
- .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled,
724
- .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:hover,
725
- .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:active {
726
cursor: default;
727
color: #999 !important;
728
background-color: transparent;
729
}
730
- .dataTables_wrapper .dataTables_paginate a.paginate_button.current,
731
- .dataTables_wrapper .dataTables_paginate a.paginate_button.current:hover,
732
- .dataTables_wrapper .dataTables_paginate a.paginate_button.current:active {
733
cursor: default;
734
color: #444 !important;
735
background-color: #fff !important;
@@ -770,10 +767,10 @@ table.collapsed > tbody > tr.child > td.child > ul li span.dtr-data {
770
}
771
772
/* Transition for new row */
773
- table.dataTable.display tbody tr.ip-geo-block-passed {
774
background-color: #edf6ff !important;
775
}
776
- table.dataTable.display tbody tr.ip-geo-block-blocked {
777
background-color: #ffefef !important;
778
}
779
.ip-geo-block-new-passed {
@@ -866,7 +863,7 @@ mark {
866
display: block;
867
height: 1em;
868
width: 1em;
869
- background: radial-gradient(#0073aa, #72777c);
870
border-radius: 50%;
871
position: absolute;
872
top: 0;
@@ -898,8 +895,8 @@ mark {
898
transform: rotate(180deg);
899
}
900
.ip-geo-block-live-timer > div:last-child:before {
901
- /* older webkit seems buggy with zero so use 0.00001 */
902
- transform: rotate(0.00001deg);
903
animation: 30s spin-timer linear 30s forwards;
904
}
905
@keyframes spin-timer {
@@ -907,6 +904,24 @@ mark {
907
100% {transform: rotate(180deg);}
908
}
909
910
:placeholder-shown { color: #888; }
911
::-webkit-input-placeholder { color: #888; } /* Google Chrome, Safari, Opera 15+, Android, iOS */
912
:-moz-placeholder { color: #888; opacity: 1; } /* Firefox 18- */
213
color: #2786C2;
214
display: inline-block;
215
}
216
+ .ip-geo-block-primary {
217
+ color: #fff !important;;
218
+ background: #00838f !important;
219
+ border-color: #00707a !important;
220
+ text-shadow: none; /* for WordPress 3.7.21 */
221
+ }
222
+ .ip-geo-block-primary:hover {
223
+ background-color: #00919e !important;
224
+ border-color: #00525a !important;
225
+ }
226
227
/* Loading image */
228
.ip-geo-block-loading,
229
#ip-geo-block-live-loading {
230
+ height: 16px;
231
+ width: 16px;
232
background-size: 16px 16px;
233
background-position: center center;
234
background-repeat: no-repeat;
235
margin-left: 1em;
236
margin-top: 0.2em;
237
display: inline-block;
238
vertical-align: top;
239
}
240
.ip-geo-block-loading {
241
+ background-image: url(data:image/gif;base64,R0lGODlhEAAQAPYCAKqqqsbGxlZWVsrKyvr6+ubm5tDQ0K6urmZmZmJiYuzs7IaGhvT09JycnLq6us7Ozurq6o6OjtbW1tra2vDw8CgoKCYmJvz8/NLS0kJCQlJSUqysrPLy8vb29pqamra2tm5ubujo6Kampvj4+IiIiMjIyEhISNzc3OLi4rKysj4+PlBQULi4uJKSkmRkZODg4KKiou7u7iQkJB4eHlpaWhISErCwsHh4eMDAwDIyMi4uLqSkpIKCgr6+vt7e3n5+fggICJCQkAwMDEpKSmBgYHZ2dhgYGBYWFnx8fF5eXk5OTiIiIjAwMIyMjISEhDQ0NJaWltTU1AQEBBwcHGpqaoqKiuTk5CoqKlhYWAoKCtjY2Hp6ehAQEJ6ensLCwkxMTJSUlCwsLAYGBnR0dDg4OFxcXLy8vKCgoA4ODsTExMzMzDw8PERERDY2NqioqHJycrS0tGhoaBQUFEZGRjo6OkBAQICAgHBwcFRUVCAgIGxsbP///wAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJCgACACwAAAAAEAAQAEAHjIACgoOEhYJsbTGGghcPGIJRbFNNhgQKCheDDkllDQYMHSc4MAcvhTB0aFliggQjmYNEFQ6LAh0+VoIwbFW1GGamhCgfUE5NbgMKtQYLc0a1gjsyR3E2IYwMFASDYDJvtRRWFIJ1TMq1ElqCICpetQoBEoInVCsAhhI2XhyEPUgIIG7waALlwAloCAMBACH5BAkKAAIALAEAAQAOAA4AAAeDgAKCEmBYYRVKJAaCjAcrVzIzRjVoTw2MKRk5Ww4KECkuWTWCE0Rrl4yCTow7bAupsBcCW19psKkjBEQaFLeMHBwINBy+ggoxVQkPxSMFMXBUMMUQPhRWVUU9tyFRLwQCA048cCcjIyFaJQYxjA8NEVBnAClmahCwEANwbjYBJwyMAgEAIfkECQoABQAsAQABAA4ADgAAB4OABYInO29DbC5QUYKMZiBfbCptTBUmIow4LgJBaTExZkVLFTAFKD8JB4yMQUZrBixUXaqqVFwkUG8Ys4wpQiZOWwy7ghBiRk08HcOqblUTy4wlLWbLBCMFCgBdurMjFMoFE24ADxAXFwwKITEEjD5mH2YBDxI+IdeqHCcGAxgv7IwCAQAh+QQJCgAAACwBAAEADgAOAAAHhYAAglYfTVQJSCITgowDVSAISQJKJgkpjA8LWyIGHBQBJCoZBwAQDU44jIxdTxoSAxEfqqpbFWApUCezjA5LWCJdI7uCClNXGyLCwxBHFl4HBcMAKVxfEx8Y0glZCxwlOCjDUkwPACElAygMghftAB6MClpRJygQFB0EuyMKBQUKDPQxCgQAIfkECQoAAAAsAQABAA4ADgAAB4SAAIIKahstTQ0OVoKMJzYeLVU8W29OXowvBztePh0dUTtxVD0AHDgHEoyMKWVvPj4sBqqqLUoiGDgQs4wBJmNqARe7gjEqXxgPwsMxbWw+UQzDAGY6LjEnusNjFmAEBVbRs00zc1EAHRAKHYw2CHIyO4wEHAwjgmJCZDC7F8psC7IEBQIAIfkECQoARwAsAQABAA4ADgAAB4OAR4IMPgMfNg4PCoKMEA84LCkAMB47GIwxBiUTEAQjKD0REQ9HBD4YIYyMATwtBRQnqaqMG0UOEC8ds4wYIEEQBbuMHC4gMYvCRxw0CAwcF8kBGj8EHdDCJCYiRxfXsw0qCROqRDYQECw3ORkpqjpAQjVGMxYrB7MPC0MyFQItEowCAQAh+QQJCgACACwBAAEADgAOAAAHgIACghcUVhIYEigMgowjEC8nUQ8BOGkojAQxITEdAhcxEh9wPoIMFCOMjBMAKTEXHaipjGldDxcEsqkvUAe5sh1NLb6pHTxNbGK9vlE3DU5ZLsNnIA4GbTVVuQcJdpdnS0Z3LAoxXhF4LjiMMBl5FjptKiZ6ZrJRLUkqbCAwJ4yBACH5BAUKAAEALAEAAQAOAA4AAAd/gAGCARcjHDExHASDjAQdHAoFLy8Ugw2MgiMKWhIKAQ9MYpiCEA8YHQtZCaOCJ14vX2g2rAEKZgMyNRC0BCksFUa7rCMANgIzH7QvZw4tMmO0DlAPUV9hHqNeVTC7G2tkTmkUHA8iSFUGgzZlGSYaNC4gTWqYEzA3SQhVH1aDgQA7);
242
}
243
244
/* Google Map infomation window */
343
word-break: normal;
344
white-space: pre;
345
}
346
#ip-geo-block-back-to-top {
347
margin:0;
348
text-align:right;
359
360
/* Icons */
361
dfn ~ .ip-geo-block-icon {
362
+ margin-left: 0.4em;
363
}
364
.ip-geo-block-icon {
365
position: relative;
383
background-position: center center;
384
background-repeat: no-repeat;
385
}
386
.ip-geo-block-icon-cycle span {
387
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAh1BMVEUAda2otLp+rsSHprWHr8IBd7EpfKRGhaNajqeUqrRymKuKoq5yo7prlKgAcqoVe6w8gqQmgq5Tj6wIdqsVdKIshrEMea1Uhp+Anqw0hawDdq4gfKhljqE7hqoLdKYbgbM4jLQygKUGeK8CdawQd6gVeKcad6NKkrSerrZAj7UAc6sAc6rc3NySrVGQAAAALXRSTlP//////////////////////////////////////////////////////////wCl7wv9AAACOklEQVR4Ae2W15rzKgxF9xTZzhTX9B7S/gN6/9ebYqzzGZsw/S7LV3FZgCSIwD/kQ8FVcBU8xatZUczy8luC/ABNOn0DSHEsvyZ4PgLatNCYR3efFxyhTQ8g+qQgJxgv2JefERzJXATRh4LHOUwAHD4S7OGEztRJaN86hAUxtaNWDUf/bRdDBbQMWVDAO8jn89WUhag1MeyCAh6hHofyrliLgZKggDMYgzF3eVAwFq0uCZq5KY0TezjIHDDzC0qqmkwe2ctGDOQVLMkgu+F3/rGXwb4xIPcJ6P3JgkM8wFjmfcFAWfeKQywaAz33BJVuHsUcAt09gVbuLDThAJkdR687ggLmf4gDJLIGV7BydtB8yn3u+fbtuj/LS7G9wZAd1AKK+yxJ1x+aBmibTtgCcEHGHsh0wdbOgNLek4L7lI5BigY8nWuZUQ3qGEXes9JzOKGJztPaGtLslu3lIXJirdxCWkASHGDTMqg7V1DKPplygDG61YJukLHjEErGSXqCSos6xNSOgzP3BDmsQBcchNwkoV8oiNnPA78zIefUgCdJeGIfE7LmFWXsFTCFdzTJ/RlfEMRiSGnFXXbkC7AIeqcKDu4ynseozeouKJiSEYBDwkJyIC1nRUjgblkNWp/e/1vXc2gjoAoLksYgjrrFMi0oDgjEEIDij1scBXMJSH6DAj6RNl7o8MkuLak8Co15/Pk+MRmT0xilQJV/sdWNKg2kTaeroudvNNsDjmejYjSL+e6v2/2r4Cp4BXNajr0H7hRfAAAAAElFTkSuQmCC);
388
}
536
/*------------------------------------------------------------
537
* Customizing based on jquery.dataTables.css
538
*------------------------------------------------------------*/
539
+ table.ip-geo-block-dataTable {
540
clear: none !important;
541
}
542
+ table.ip-geo-block-dataTable th,
543
+ table.ip-geo-block-dataTable td {
544
text-align: right;
545
}
546
+ table.ip-geo-block-dataTable th:nth-child(n+2),
547
+ table.ip-geo-block-dataTable td:nth-child(n+2) {
548
padding-left: 0 !important;
549
}
550
+ table.ip-geo-block-dataTable th {
551
white-space: nowrap;
552
}
553
+ table.ip-geo-block-dataTable > thead > tr {
554
line-height: 1.8em;
555
}
556
+ table.ip-geo-block-dataTable > tbody > tr {
557
cursor: pointer;
558
}
559
+ table.ip-geo-block-dataTable > thead > tr > th,
560
+ table.ip-geo-block-dataTable > thead > tr > td,
561
+ table.ip-geo-block-dataTable.no-footer {
562
border-bottom: 1px solid #ddd;
563
}
564
+ table.ip-geo-block-dataTable thead th,
565
+ table.ip-geo-block-dataTable thead td {
566
padding: 10px 16px;
567
}
568
/* country code */
572
}
573
574
/* Scroll bar */
575
+ div[class*="ip-geo-block"] .dataTables_wrapper.no-footer .dataTables_scrollBody {
576
border-bottom: 1px solid #ddd;
577
}
578
579
/* Size of column */
580
+ table.ip-geo-block-dataTable.nowrap td,
581
+ table.ip-geo-block-dataTable > tbody > tr > td span {
582
white-space: normal !important;
583
word-wrap: break-word !important;
584
word-break: break-all !important;
585
}
586
+ table.ip-geo-block-dataTable > tbody > tr > td span {
587
display: inline-block;
588
}
589
591
.ip-geo-block-settings-folding input[type="checkbox"] {
592
margin-right: 0.5em;
593
}
594
+ table.ip-geo-block-dataTable input[type="checkbox"] {
595
max-height: 16px;
596
max-width: 16px;
597
margin: 0;
598
}
599
+ table.ip-geo-block-dataTable > thead > tr > th:first-child,
600
+ table.ip-geo-block-dataTable > tbody > tr > td:first-child {
601
padding: 8px 4px 8px 1.4em;
602
text-align: left;
603
}
604
605
/* No data available in table */
606
+ table.ip-geo-block-dataTable > tbody > tr > td.dataTables_empty,
607
table.collapsed > tbody > tr > td.dataTables_empty:first-child::before {
608
border: none;
609
text-align: center;
610
}
611
612
/* Checkbox column */
613
+ table.ip-geo-block-dataTable thead > tr > th:first-child.sorting_asc {
614
background-image: none !important;
615
}
616
+ table.ip-geo-block-dataTable.display tbody tr.even > .sorting_1,
617
+ table.ip-geo-block-dataTable.display tbody tr.odd > .sorting_1,
618
+ table.ip-geo-block-dataTable.display tbody tr:hover > .sorting_1 {
619
background-color: inherit !important;
620
}
621
622
/* Collapsed */
623
+ table.ip-geo-block-dataTable.collapsed > tbody > tr > td:first-child {
624
padding: 8px 4px 8px 8px !important;
625
}
626
table.collapsed > tbody > tr > td:first-child::before,
668
}
669
670
/* Pagenation */
671
+ div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate {
672
float: none;
673
text-align: center;
674
margin-bottom: 1em;
675
}
676
+ div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate span.ellipsis,
677
+ div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button,
678
+ div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button:hover,
679
+ div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button:active,
680
+ div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button.current,
681
+ div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button.current:hover,
682
+ div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button.current:active,
683
+ div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled,
684
+ div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:hover,
685
+ div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:active {
686
min-width: 2em;
687
background: inherit;
688
border-color: #ddd;
696
display: inline-block;
697
text-decoration: none;
698
}
699
+ div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate > a.paginate_button:first-child,
700
+ div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate:hover > a.paginate_button:first-child,
701
+ div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate:active > a.paginate_button:first-child {
702
border-left-width: 1px;
703
border-bottom-left-radius: 4px;
704
border-top-left-radius: 4px;
705
}
706
+ div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate > a.paginate_button:last-child,
707
+ div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate:hover > a.paginate_button:last-child,
708
+ div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate:active > a.paginate_button:last-child {
709
border-bottom-right-radius: 4px;
710
border-top-right-radius: 4px;
711
}
712
+ div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button {
713
color: #0073aa !important;
714
}
715
+ div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button:hover {
716
color: #0096dd !important;
717
background-color: #fff;
718
}
719
+ div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate span.ellipsis,
720
+ div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled,
721
+ div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:hover,
722
+ div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:active {
723
cursor: default;
724
color: #999 !important;
725
background-color: transparent;
726
}
727
+ div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button.current,
728
+ div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button.current:hover,
729
+ div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button.current:active {
730
cursor: default;
731
color: #444 !important;
732
background-color: #fff !important;
767
}
768
769
/* Transition for new row */
770
+ table.ip-geo-block-dataTable.display tbody tr.ip-geo-block-passed {
771
background-color: #edf6ff !important;
772
}
773
+ table.ip-geo-block-dataTable.display tbody tr.ip-geo-block-blocked {
774
background-color: #ffefef !important;
775
}
776
.ip-geo-block-new-passed {
863
display: block;
864
height: 1em;
865
width: 1em;
866
+ background: #0073aa;
867
border-radius: 50%;
868
position: absolute;
869
top: 0;
895
transform: rotate(180deg);
896
}
897
.ip-geo-block-live-timer > div:last-child:before {
898
+ /* older webkit seems buggy with zero so use 0.00001 if you notice something strange */
899
+ transform: rotate(0deg);
900
animation: 30s spin-timer linear 30s forwards;
901
}
902
@keyframes spin-timer {
904
100% {transform: rotate(180deg);}
905
}
906
907
+ /* sub items in settings */
908
+ .ip-geo-block-subitem {
909
+ margin-left: 1.7em
910
+ }
911
+ .ip-geo-block-subitem:before {
912
+ content: "\00bb"; /* &raquo; */
913
+ position: absolute;
914
+ left: 2em;
915
+ }
916
+ .ip-geo-block-subitem dfn {
917
+ vertical-align: middle;
918
+ }
919
+ .ip-geo-block-subitem-parent th,
920
+ .ip-geo-block-subitem-parent td {
921
+ padding-top: 0;
922
+ }
923
+
924
+ /* placeholder */
925
:placeholder-shown { color: #888; }
926
::-webkit-input-placeholder { color: #888; } /* Google Chrome, Safari, Opera 15+, Android, iOS */
927
:-moz-placeholder { color: #888; opacity: 1; } /* Firefox 18- */
admin/css/admin.min.css CHANGED
@@ -3,4 +3,4 @@
3
* Copyright (c) 2013-2018 tokkonopapa (tokkonopapa@yahoo.com)
4
* This software is released under the MIT License.
5
*/
6
- dfn{cursor:help;border-bottom:1px dotted #888}.ip-geo-block-icon,svg a,table.dataTable>tbody>tr{cursor:pointer}fieldset,legend{padding:0;margin:0;border:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}fieldset{min-width:0}legend{display:block;line-height:inherit;width:100%}.panel-body,label{display:inline-block}label{max-width:100%}.panel{border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);-moz-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);background:#f5f5f5}#ip-geo-block-back-to-top a,#ip-geo-block-toggle-sections,.ip-geo-block-help-link a{box-shadow:none}.panel-heading{float:left!important;background:#fff}.panel-default>.panel-heading{border-color:inherit}.panel-body{width:100%;padding:0 1em;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.panel-body:after,.panel-body:before{content:" ";display:table}.panel-body:after{clear:both}.ip-geo-block-navi-link{text-align:left}.ip-geo-block-help-link{float:right;font-size:90%;font-weight:400}fieldset label{vertical-align:text-middle}fieldset input[type=checkbox]{margin:1px 2px 0}fieldset.ip-geo-block-field{margin:1em 0}fieldset.ip-geo-block-field h2,fieldset.ip-geo-block-field h3{padding:0;margin:0;font-size:14px!important}fieldset.ip-geo-block-field h4{margin:.75em 0 .5em}fieldset.ip-geo-block-field legend.panel-heading{padding:10px}fieldset.ip-geo-block-field .ip-geo-block-dropdown,fieldset.ip-geo-block-field .ip-geo-block-dropup{cursor:pointer;position:relative;padding-left:1em}fieldset.ip-geo-block-field .ip-geo-block-dropdown:before,fieldset.ip-geo-block-field .ip-geo-block-dropup:before{content:'';height:0;width:0;border:.4em solid transparent;position:absolute}fieldset.ip-geo-block-field .ip-geo-block-dropup:before{border-left:.4em solid #555;left:2px;top:18%}fieldset.ip-geo-block-field .ip-geo-block-dropdown:before{border-top:.4em solid #555;left:-2px;top:38%}fieldset.ip-geo-block-field .form-table .ip-geo-block-dropdown,fieldset.ip-geo-block-field .form-table .ip-geo-block-dropup{margin-top:.75em}fieldset.ip-geo-block-field ul.ip-geo-block-dropup:before{top:.25em}fieldset.ip-geo-block-field ul.ip-geo-block-dropdown:before{top:.5em}fieldset.ip-geo-block-field table.form-table{margin:0 0 .5em;width:100%}textarea.regular-text{width:25em}fieldset.ip-geo-block-field input.regular-text,fieldset.ip-geo-block-field textarea.regular-text{font-size:95%}input[id*=ip_geo_block_settings_rewrite_]+label{margin-left:.25em}input[id*=ip_geo_block_settings_providers]+label{min-width:7em}.ip-geo-block-settings-folding{margin:.5em 0}.ip-geo-block-settings-folding ul{margin-bottom:0}.ip-geo-block-settings-folding li{margin:.5em 0}.folding-disable{pointer-events:none;opacity:.5}.folding-inactive{opacity:.5;font-style:oblique!important}.ip-geo-block-float li{display:inline-block;width:18em;margin-top:0}.ip-geo-block-checked{list-style-type:disc}.ip-geo-block-ip-addr{display:inline-block;padding-top:5px}.ip-geo-block-hide{display:none}.ip-geo-block-sup{margin-left:.2em;display:inline-block}.ip-geo-block-note{margin-top:1em;list-style:disc inside}.ip-geo-block-note li{text-indent:-1em;padding-left:1em}.ip-geo-block-border{border-top:inherit}.ip-geo-block-notice{color:#dd3d36}.ip-geo-block-title{width:100px;display:inline-block}.ip-geo-block-result{color:#2786C2;display:inline-block}#ip-geo-block-live-loading,.ip-geo-block-loading{background-size:16px 16px;background-position:center center;background-repeat:no-repeat;height:16px;width:16px;margin-left:1em;margin-top:.2em;display:inline-block;vertical-align:top}.ip-geo-block-loading{background-image:url(data:image/gif;base64,R0lGODlhEAAQAPIGAAAAAMLCwkJCQpKSkmJiYoKCgv///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJCgAGACwAAAAAEAAQAAADM2i63P4wyklrC0IEKgAQnAdOmGYFBLExwboQWcG2rlHEwTDQLUsUOd2mBxkUCgNKa+dIAAAh+QQJCgAGACwAAAIACgAOAAADLWgWIqHQCABEVLPe1R4MBOFFRFNsRUNsYDFewTC8iixvQ1EMyxjEvyBLODQkAAAh+QQJCgAGACwAAAAACgAOAAADLWi6IRJrCQCECoU0ag1xxeBARuEQ0UUU5DUM7fK+qTEUYR0EcM3Ev51uB7wAEwAh+QQJCgAGACwAAAAADgAKAAADLWi6URQrLiJEkSaM0eqrkLFtAVEEAgAIylAUQ5SuSqCFNZjhWG3zmB8wOJQkAAAh+QQJCgAGACwCAAAADgAKAAADK2hqMRMrLuekCnCU8gqBDCZ2glBcYkSUxIJJgQdaUVDOtAAAAr3oPN/llgAAIfkECQoABgAsBgAAAAoADgAAAytoEdauiz0Yx5BQFTvN2EMXWNgUFETZFIJQdERLiGgZtKohAIDQ7T0RrpEAACH5BAkKAAYALAYAAgAKAA4AAAMqaKoR+609Fie1K4zhZiibNRSg1XAQUXQPIQgE835voQgAIARqh+ummSUBACH5BAUKAAYALAIABgAOAAoAAAMsaLpsES2+F9mEddEgBFbBMGACAAiMOCrlGRBFWBQD2L0dYYjfUuQZEKynSAAAOw==)}#ip-geo-block-map{height:400px;margin:1em auto}.gm-style-iw{width:18em;height:auto!important;height:100%;min-height:100%:}.gm-style-iw ul{margin:.1em}.gm-style-iw li{margin:.2em}svg a:hover>text{fill:#0096dd}svg a>text{fill:#0073aa;text-decoration:underline}table.ip-geo-block-statistics-table{float:right}table.ip-geo-block-statistics-table td,table.ip-geo-block-statistics-table th{width:12em;margin:0;padding:.2em;text-align:right;line-height:1.5em;word-wrap:break-word}table.ip-geo-block-statistics-table tr:nth-child(even){background-color:#eee}table.ip-geo-block-table{margin:1em 0;white-space:normal;word-wrap:break-word;word-break:break-all}table.ip-geo-block-table td:first-child{min-width:4.3em}@media screen and (max-width:782px){#ip-geo-block-whois .panel-body{padding:0 .5em}}#ip-geo-block-scan-code{vertical-align:middle}#ip-geo-block-code-list{display:none;margin-bottom:0}#ip-geo-block-chart-countries{height:200px}#ip-geo-block-chart-daily{height:240px}#ip_geo_block_settings_validation_mimetype+label{padding-top:.25em}#ip_geo_block_settings_validation_mimetype+label+ul{margin-top:.7em}#ip_geo_block_settings_create_user{margin-bottom:.5em}#ip-geo-block-wp-info textarea{margin-top:.5em;overflow:auto;width:100%;word-wrap:normal;word-break:normal;white-space:pre}#ip-geo-block-preferred{color:#fff;background:#00838f!important;border-color:#00707a!important;text-shadow:none}#ip-geo-block-preferred:hover{background-color:#00919e!important;border-color:#00525a!important}.ip-geo-block-icon,.ip-geo-block-list-exceptions a.ip-geo-block-icon{background-color:transparent;box-shadow:none;text-decoration:none;outline:0}#ip-geo-block-back-to-top{margin:0;text-align:right}#ip-geo-block-live-update,#ip-geo-block-open-new{margin-left:1em}.ip-geo-block-menu-link{font-size:13px!important}dfn~.ip-geo-block-icon{margin-left:.6em}.ip-geo-block-icon{position:relative}.ip-geo-block-icon:active{top:1px}.ip-geo-block-icon span{height:16px;width:16px;margin:0;border:none;display:inline-block;vertical-align:middle;background-size:16px 16px;background-position:center center;background-repeat:no-repeat}.ip-geo-block-icon-cidr span{vertical-align:text-top}.ip-geo-block-icon-cycle span{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAh1BMVEUAda2otLp+rsSHprWHr8IBd7EpfKRGhaNajqeUqrRymKuKoq5yo7prlKgAcqoVe6w8gqQmgq5Tj6wIdqsVdKIshrEMea1Uhp+Anqw0hawDdq4gfKhljqE7hqoLdKYbgbM4jLQygKUGeK8CdawQd6gVeKcad6NKkrSerrZAj7UAc6sAc6rc3NySrVGQAAAALXRSTlP//////////////////////////////////////////////////////////wCl7wv9AAACOklEQVR4Ae2W15rzKgxF9xTZzhTX9B7S/gN6/9ebYqzzGZsw/S7LV3FZgCSIwD/kQ8FVcBU8xatZUczy8luC/ABNOn0DSHEsvyZ4PgLatNCYR3efFxyhTQ8g+qQgJxgv2JefERzJXATRh4LHOUwAHD4S7OGEztRJaN86hAUxtaNWDUf/bRdDBbQMWVDAO8jn89WUhag1MeyCAh6hHofyrliLgZKggDMYgzF3eVAwFq0uCZq5KY0TezjIHDDzC0qqmkwe2ctGDOQVLMkgu+F3/rGXwb4xIPcJ6P3JgkM8wFjmfcFAWfeKQywaAz33BJVuHsUcAt09gVbuLDThAJkdR687ggLmf4gDJLIGV7BydtB8yn3u+fbtuj/LS7G9wZAd1AKK+yxJ1x+aBmibTtgCcEHGHsh0wdbOgNLek4L7lI5BigY8nWuZUQ3qGEXes9JzOKGJztPaGtLslu3lIXJirdxCWkASHGDTMqg7V1DKPplygDG61YJukLHjEErGSXqCSos6xNSOgzP3BDmsQBcchNwkoV8oiNnPA78zIefUgCdJeGIfE7LmFWXsFTCFdzTJ/RlfEMRiSGnFXXbkC7AIeqcKDu4ynseozeouKJiSEYBDwkJyIC1nRUjgblkNWp/e/1vXc2gjoAoLksYgjrrFMi0oDgjEEIDij1scBXMJSH6DAj6RNl7o8MkuLak8Co15/Pk+MRmT0xilQJV/sdWNKg2kTaeroudvNNsDjmejYjSL+e6v2/2r4Cp4BXNajr0H7hRfAAAAAElFTkSuQmCC)}.ip-geo-block-icon-lock span{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAYFBMVEXc3Ny3y9Zzq8dRmb7M1dlXnsIFdK0AcawAcqwphrYAcKvZ29wAb6oJd680jrqlw9MBcqxmo8MUfbJLl75eoMI7kbzX2ttqp8VSmL1YnL8NeK+Tu89DlL1ImMEOebBNmL4OkqMoAAAAAXRSTlMAQObYZgAAAPlJREFUeAG9kAWyhTAQBIPOsCzufv9TPnf4Ll0CSbpmxXwNy3Yc23rz2fV8kPA99433AIQIiGDTCD0lojiOQPXCDSFJIbF16CMWItkQMkF+inZzSLYhFKLl+a9UKTZaqJTZJYtarZuo40chrv9CqJTN+behVi+Cm7RdDgRld6AMgLxrE/dxBz0BEjwBEmD/uIsWPAOAF9A+CE56ufSryr8oqfOYcBbQJ8YkES7COkFOYzTypqCDOTDo2wljaEw4vp1APYyWKd8WMBozylvCpcvmXeHQ5fCegHia4s1FgZcIVeVFeFx1M4MvYG4eBHdYWufC+addBtf8E3vdjBNhWnVQqAAAAABJRU5ErkJggg==)}.ip-geo-block-icon-unlock span{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAYFBMVEXc3NyzydRzq8dRmb7I09hYnsEFdK0AcawAcqzP1toqhrYAcKvZ29wAb6oMeK8zjbqrxtQBcazBz9Zko8MVfbLF0thMmL07kbtpp8WjwtJSmL1YnL+Tu89DlL1JmMEPebBFV++UAAAAAXRSTlMAQObYZgAAAONJREFUeAG9kAWChDAMAIMmJaTFXf7/ynXflvMbnE5j8DU8Pwh8D1yEUYxEGEchWFEJEjEflESBhTQSQm2MRpIotQhZTmgKgMIg5ZlFKBmrGg7UFXJpEQKW8qIKN7YeikJdBJI2BTtXwfyx0L3XoPphvBEliNU49OoxqEa6g4cTST/OYshvi3hV8+FxSNfluG3jqxG8C6h7gF6jU+AODnTsFGSCA5O4I8wpQDq7I5CUAKWQW+AZYOYtoQPoGDeECWDaioBmWQxeBduoWURso+5WpBdw7R4ENTVDcGE435tJwT+xB+vMEnZRNB0YAAAAAElFTkSuQmCC)}.ip-geo-block-icon-find span{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAYFBMVEXc3NzS19rD0NWHtMpGk7kYfbAGda0Req+WtcTT1temwM4AcasAcqwAc6wAcKydvMt1pr8Ab6pqpcLX2doggrKoxdNYm7yzw8u/y9HO1tkKdq4th7Td3t6DrcLL0taxyNPGe/YhAAAAAXRSTlMAQObYZgAAARVJREFUeAGtkkeiwyAMRP2xDfxoRjElvd3/lOkNUlZ5u0GPruan/Bnz96Xadr21rvP/7+ujXsAjom78rj4ApCoERIipqfGB1H7wPmYhw1DXjZI6nOel1oJhVAmdUP0tTEDkVC4AYvqIbaDOCqFV6vwRF0tIeYoo6J/X7ICuPAJl9ZynwiIfB5DXxZlRChulbh8xZci0EHZK3TziJFDL504rEOZ+iR5cVj82DoS7XtSshLJpKqaB0Dg3ZjcsQWKaKiF1gVQlITwh/bw2pgKeEeURhE29yKSzUFF03p1V7Wqj2Y7GfrY9X/NirJsPxKsxfBLSSs5GmH8yjAWPSNd8Yoez4f4/G1nIsksqFtGK1i9e39o0P+EAqaoRLlQ+r94AAAAASUVORK5CYII=)}.ip-geo-block-icon-alert span,span.ip-geo-block-icon-alert{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAkFBMVEXc3Nzc2trWl5DHRDTFOyvOgXfc1tXCLBrEMiHEMyLNcmfaxMLDMSDDLx7bu7jRiYHDLhzDMB/LX1PaxsTDLh3YtrHMY1bWmpPJVknSjYXUkYnZuLTMZVnENCPWlI3QhXzENiXXrqrDLRzXsa3Oal7Pe3Hc2NjVn5nNbmPayMbbwb7ay8rUj4fc09Lbw8Db0dDBbRUDAAAAAXRSTlMAQObYZgAAAPVJREFUeAG9ktXWwyAQBonC12brFvff5f2frr4nBredK2DnTFS8Gst2XM8XZmypIGeWcT4PFABaGIXlClfWG1NiC4Ubu705oKRcY32wTAHl2MdTYEqEK8hIiHgHSnSJeaogMyEWO4BijZCvwII2MS9UJ2BXTh+hQidoEttboBOwq3WBnkCNpQlA2iyAhol2hRu71n97p4fw0Z9/ugoPHCfFA+o/iLfCkyBglRJdICBas7uuey+R56fF14wNanj+/QjwY3aX23cBFn6EiHmHNT/ICYxystv/wJy4UHWGlN2cuPB72tFqAq3dP/Hk3zs0E5LZVryGC/hqGNnUa0SVAAAAAElFTkSuQmCC);vertical-align:bottom}table.form-table th .ip-geo-block-cycle span{vertical-align:text-bottom}.ip-geo-block-list{margin-top:0;margin-bottom:.7em}@media screen and (min-width:782px){ul.ip-geo-block-list .code{width:15em}}.ip-geo-block-list-exceptions label{display:inline-block}.ip-geo-block-list-exceptions dfn{border:none}.dataTables_wrapper.no-footer .dataTables_scrollBody,table.dataTable.no-footer,table.dataTable>thead>tr>td,table.dataTable>thead>tr>th{border-bottom:1px solid #ddd}.ip-geo-block-list-exceptions span.dashicons{font-size:14px}.ip-geo-block-list-exceptions a.ip-geo-block-icon{margin-left:.3em}.form-table td p.ip-geo-block-desc,.form-table td p.ip-geo-block-find-desc{color:#666;font-size:13px!important;margin:4px 0 .5em .5em}.ip-geo-block-find-desc{display:none}.ip-geo-block-admin-post{color:#c43322;margin-left:.25em}.ip-geo-block-warn{color:#c43322;font-weight:700}input#ip_geo_block_settings_behavior_time,input#ip_geo_block_settings_behavior_view{width:3.5em}.ip-geo-block-top-list{display:inline-table;list-style-position:outside;margin:0 2em .5em 1.75em}.ip-geo-block-top-list h4{margin:1em 0}.ip-geo-block-top-list li code{background:0 0}.ip-geo-block-network{margin-bottom:1em}.ip-geo-block-container{margin:0 auto;padding:0 1em;position:relative;width:100%}.ip-geo-block-row{display:flex;flex-direction:column;align-items:flex-start;align-items:stretch;padding:0;width:100%}.ip-geo-block-row .ip-geo-block-column{display:block;flex:1 1 auto;align-self:flex-start;margin-left:0;max-width:100%;width:100%}.ip-geo-block-row .ip-geo-block-column.column-20{flex:0 0 20%;max-width:20%}.ip-geo-block-row .ip-geo-block-column.column-25{flex:0 0 25%;max-width:25%}.ip-geo-block-row .ip-geo-block-column.column-33{flex:0 0 33.3333%;max-width:33.3333%}.ip-geo-block-row .ip-geo-block-column.column-50{flex:0 0 50%;max-width:50%}@media (min-width:40rem){.ip-geo-block-row{flex-direction:row;margin-left:-2em;width:calc(100% + 2em)}.ip-geo-block-row .ip-geo-block-column{margin-bottom:inherit;padding:0 1em}}table.dataTable{clear:none!important}table.dataTable td,table.dataTable th{text-align:right}table.dataTable td:nth-child(n+2),table.dataTable th:nth-child(n+2){padding-left:0!important}table.dataTable th{white-space:nowrap}table.dataTable>thead>tr{line-height:1.8em}table.dataTable thead td,table.dataTable thead th{padding:10px 16px}#ip-geo-block-statistics-cache td:nth-child(3),#ip-geo-block-validation-logs td:nth-child(4){min-width:1.6em}table.dataTable.nowrap td,table.dataTable>tbody>tr>td span{white-space:normal!important;word-wrap:break-word!important;word-break:break-all!important}table.dataTable>tbody>tr>td span{display:inline-block}.ip-geo-block-settings-folding input[type=checkbox]{margin-right:.5em}table.dataTable input[type=checkbox]{max-height:16px;max-width:16px;margin:0}table.dataTable>tbody>tr>td:first-child,table.dataTable>thead>tr>th:first-child{padding:8px 4px 8px 1.4em;text-align:left}table.collapsed>tbody>tr>td.dataTables_empty:first-child::before,table.dataTable>tbody>tr>td.dataTables_empty{border:none;text-align:center}table.dataTable thead>tr>th:first-child.sorting_asc{background-image:none!important}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.display tbody tr:hover>.sorting_1{background-color:inherit!important}table.dataTable.collapsed>tbody>tr>td:first-child{padding:8px 4px 8px 8px!important}table.collapsed>tbody>tr.parent>td:first-child::before,table.collapsed>tbody>tr>td:first-child::before{content:'';height:0;width:0;display:inline-block;border-radius:0;border:5px solid transparent;box-shadow:none;position:relative;background-color:transparent}table.collapsed>tbody>tr>td:first-child::before{border-left:5px solid #555;top:1px;left:-2px}table.collapsed>tbody>tr.parent>td:first-child::before{border-top:5px solid #555;top:4px;left:-4px}table.collapsed>tbody>tr.child>td:first-child::before{border:none}table.collapsed>tbody>tr.child>td.child>ul li{border:none;padding:0;margin:0;line-height:1.8em}table.collapsed>tbody>tr.child>td.child>ul li span.dtr-data,table.collapsed>tbody>tr.child>td.child>ul li span.dtr-title{font-size:13px!important;display:block;white-space:normal;word-wrap:break-word;word-break:break-all}table.collapsed>tbody>tr.child>td.child>ul li span.dtr-data{margin-left:1.25em;margin-right:.3em}.dataTables_wrapper .dataTables_paginate{float:none;text-align:center;margin-bottom:1em}.dataTables_wrapper .dataTables_paginate a.paginate_button,.dataTables_wrapper .dataTables_paginate a.paginate_button.current,.dataTables_wrapper .dataTables_paginate a.paginate_button.current:active,.dataTables_wrapper .dataTables_paginate a.paginate_button.current:hover,.dataTables_wrapper .dataTables_paginate a.paginate_button.disabled,.dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:active,.dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate a.paginate_button:active,.dataTables_wrapper .dataTables_paginate a.paginate_button:hover,.dataTables_wrapper .dataTables_paginate span.ellipsis{min-width:2em;background:inherit;border-color:#ddd;border-radius:0;border-image:none;border-style:solid;border-width:1px 1px 1px 0;box-shadow:none;margin:.5em 0 0;padding:.25em 0;display:inline-block;text-decoration:none}#ip-geo-block-1 #ip-geo-block-section-2 .panel-body,#ip-geo-block-4 #ip-geo-block-section-0 .panel-body,mark{padding:0}.dataTables_wrapper .dataTables_paginate:active>a.paginate_button:first-child,.dataTables_wrapper .dataTables_paginate:hover>a.paginate_button:first-child,.dataTables_wrapper .dataTables_paginate>a.paginate_button:first-child{border-left-width:1px;border-bottom-left-radius:4px;border-top-left-radius:4px}.dataTables_wrapper .dataTables_paginate:active>a.paginate_button:last-child,.dataTables_wrapper .dataTables_paginate:hover>a.paginate_button:last-child,.dataTables_wrapper .dataTables_paginate>a.paginate_button:last-child{border-bottom-right-radius:4px;border-top-right-radius:4px}.dataTables_wrapper .dataTables_paginate a.paginate_button{color:#0073aa!important}.dataTables_wrapper .dataTables_paginate a.paginate_button:hover{color:#0096dd!important;background-color:#fff}.dataTables_wrapper .dataTables_paginate a.paginate_button.disabled,.dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:active,.dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate span.ellipsis{cursor:default;color:#999!important;background-color:transparent}.dataTables_wrapper .dataTables_paginate a.paginate_button.current,.dataTables_wrapper .dataTables_paginate a.paginate_button.current:active,.dataTables_wrapper .dataTables_paginate a.paginate_button.current:hover{cursor:default;color:#444!important;background-color:#fff!important}#ip-geo-block-1 #ip-geo-block-section-2 table.form-table,#ip-geo-block-4 #ip-geo-block-section-0 table.form-table{margin-left:1em;max-width:95%}#ip-geo-block-live-log,#ip-geo-block-select-duration,#ip-geo-block-select-layout,#ip-geo-block-select-target{margin:0}#ip-geo-block-select-duration li,#ip-geo-block-select-layout li,#ip-geo-block-select-target li{float:left;margin-right:1.5em}#ip-geo-block-select-duration li label,#ip-geo-block-select-target li label{cursor:pointer}#ip_geo_block_settings_search_filter{width:16em;padding-top:3px}table.dataTable.display tbody tr.ip-geo-block-passed{background-color:#edf6ff!important}table.dataTable.display tbody tr.ip-geo-block-blocked{background-color:#ffefef!important}.ip-geo-block-new-passed{animation:ip-geo-block-flash-passed 1s ease-out 0s 1 normal both running}.ip-geo-block-new-blocked{animation:ip-geo-block-flash-blocked 1s ease-out 0s 1 normal both running}@keyframes ip-geo-block-flash-passed{0%{background-color:gold}100%{background-color:#edf6ff}}@keyframes ip-geo-block-flash-blocked{0%{background-color:gold}100%{background-color:#ffefef}}mark{background:gold}#ip-geo-block-live-log li{float:left;margin-right:3em}#ip-geo-block-live-log li:last-child{margin-right:0}#ip-geo-block-live-log li input[type=radio]{visibility:hidden;position:absolute}#ip-geo-block-live-log li input[type=radio]+label{display:inline-block;margin:-2px -2px 0;padding:4px 12px;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);border-bottom-color:#b3b3b3;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}#ip-geo-block-live-log li input[type=radio]:checked+label{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);background-color:#e0e0e0}.ip-geo-block-live-timer{height:1em;width:1em;margin:0;position:relative;top:0;left:0}.ip-geo-block-live-timer:before{content:"";display:block;height:1em;width:1em;background:radial-gradient(#0073aa,#72777c);border-radius:50%;position:absolute;top:0;left:0}.ip-geo-block-live-timer:after{display:none}.ip-geo-block-live-timer>div{position:absolute;width:1em;height:1em;clip:rect(0,1em,1em,.5em)}.ip-geo-block-live-timer>div:before{content:" ";position:absolute;width:1em;height:1em;border-radius:.5em;clip:rect(0,.5em,1em,0);background-color:#f1f1f1;transform:rotate(0)}.ip-geo-block-live-timer>div:first-child:before{animation:30s spin-timer linear forwards}.ip-geo-block-live-timer>div:last-child{transform:rotate(180deg)}.ip-geo-block-live-timer>div:last-child:before{transform:rotate(.00001deg);animation:30s spin-timer linear 30s forwards}@keyframes spin-timer{0%{transform:rotate(0)}100%{transform:rotate(180deg)}}:placeholder-shown{color:#888}::-webkit-input-placeholder{color:#888}:-moz-placeholder{color:#888;opacity:1}::-moz-placeholder{color:#888;opacity:1}:-ms-input-placeholder{color:#888}
3
* Copyright (c) 2013-2018 tokkonopapa (tokkonopapa@yahoo.com)
4
* This software is released under the MIT License.
5
*/
6
+ dfn{cursor:help;border-bottom:1px dotted #888}.ip-geo-block-icon,svg a,table.ip-geo-block-dataTable>tbody>tr{cursor:pointer}fieldset,legend{padding:0;margin:0;border:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}fieldset{min-width:0}legend{display:block;line-height:inherit;width:100%}.panel-body,label{display:inline-block}label{max-width:100%}.panel{border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);-moz-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);background:#f5f5f5}.panel-heading{float:left!important;background:#fff}.panel-default>.panel-heading{border-color:inherit}.panel-body{width:100%;padding:0 1em;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.panel-body:after,.panel-body:before{content:" ";display:table}.panel-body:after{clear:both}.ip-geo-block-navi-link{text-align:left}.ip-geo-block-help-link{float:right;font-size:90%;font-weight:400}.ip-geo-block-help-link a{box-shadow:none}fieldset label{vertical-align:text-middle}fieldset input[type=checkbox]{margin:1px 2px 0}fieldset.ip-geo-block-field{margin:1em 0}fieldset.ip-geo-block-field h2,fieldset.ip-geo-block-field h3{padding:0;margin:0;font-size:14px!important}fieldset.ip-geo-block-field h4{margin:.75em 0 .5em}fieldset.ip-geo-block-field legend.panel-heading{padding:10px}fieldset.ip-geo-block-field .ip-geo-block-dropdown,fieldset.ip-geo-block-field .ip-geo-block-dropup{cursor:pointer;position:relative;padding-left:1em}fieldset.ip-geo-block-field .ip-geo-block-dropdown:before,fieldset.ip-geo-block-field .ip-geo-block-dropup:before{content:'';height:0;width:0;border:.4em solid transparent;position:absolute}fieldset.ip-geo-block-field .ip-geo-block-dropup:before{border-left:.4em solid #555;left:2px;top:18%}fieldset.ip-geo-block-field .ip-geo-block-dropdown:before{border-top:.4em solid #555;left:-2px;top:38%}fieldset.ip-geo-block-field .form-table .ip-geo-block-dropdown,fieldset.ip-geo-block-field .form-table .ip-geo-block-dropup{margin-top:.75em}fieldset.ip-geo-block-field ul.ip-geo-block-dropup:before{top:.25em}fieldset.ip-geo-block-field ul.ip-geo-block-dropdown:before{top:.5em}fieldset.ip-geo-block-field table.form-table{margin:0 0 .5em;width:100%}textarea.regular-text{width:25em}fieldset.ip-geo-block-field input.regular-text,fieldset.ip-geo-block-field textarea.regular-text{font-size:95%}input[id*=ip_geo_block_settings_rewrite_]+label{margin-left:.25em}input[id*=ip_geo_block_settings_providers]+label{min-width:7em}.ip-geo-block-settings-folding{margin:.5em 0}.ip-geo-block-settings-folding ul{margin-bottom:0}.ip-geo-block-settings-folding li{margin:.5em 0}.folding-disable{pointer-events:none;opacity:.5}.folding-inactive{opacity:.5;font-style:oblique!important}.ip-geo-block-float li{display:inline-block;width:18em;margin-top:0}.ip-geo-block-checked{list-style-type:disc}.ip-geo-block-ip-addr{display:inline-block;padding-top:5px}.ip-geo-block-hide{display:none}.ip-geo-block-sup{margin-left:.2em;display:inline-block}.ip-geo-block-note{margin-top:1em;list-style:disc inside}.ip-geo-block-note li{text-indent:-1em;padding-left:1em}.ip-geo-block-border{border-top:inherit}.ip-geo-block-notice{color:#dd3d36}.ip-geo-block-title{width:100px;display:inline-block}.ip-geo-block-result{color:#2786C2;display:inline-block}.ip-geo-block-primary{color:#fff!important;background:#00838f!important;border-color:#00707a!important;text-shadow:none}#ip-geo-block-live-loading,.ip-geo-block-icon span,.ip-geo-block-loading{background-size:16px 16px;background-position:center center;background-repeat:no-repeat}.ip-geo-block-primary:hover{background-color:#00919e!important;border-color:#00525a!important}#ip-geo-block-live-loading,.ip-geo-block-loading{height:16px;width:16px;margin-left:1em;margin-top:.2em;display:inline-block;vertical-align:top}.ip-geo-block-loading{background-image:url(data:image/gif;base64,R0lGODlhEAAQAPYCAKqqqsbGxlZWVsrKyvr6+ubm5tDQ0K6urmZmZmJiYuzs7IaGhvT09JycnLq6us7Ozurq6o6OjtbW1tra2vDw8CgoKCYmJvz8/NLS0kJCQlJSUqysrPLy8vb29pqamra2tm5ubujo6Kampvj4+IiIiMjIyEhISNzc3OLi4rKysj4+PlBQULi4uJKSkmRkZODg4KKiou7u7iQkJB4eHlpaWhISErCwsHh4eMDAwDIyMi4uLqSkpIKCgr6+vt7e3n5+fggICJCQkAwMDEpKSmBgYHZ2dhgYGBYWFnx8fF5eXk5OTiIiIjAwMIyMjISEhDQ0NJaWltTU1AQEBBwcHGpqaoqKiuTk5CoqKlhYWAoKCtjY2Hp6ehAQEJ6ensLCwkxMTJSUlCwsLAYGBnR0dDg4OFxcXLy8vKCgoA4ODsTExMzMzDw8PERERDY2NqioqHJycrS0tGhoaBQUFEZGRjo6OkBAQICAgHBwcFRUVCAgIGxsbP///wAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJCgACACwAAAAAEAAQAEAHjIACgoOEhYJsbTGGghcPGIJRbFNNhgQKCheDDkllDQYMHSc4MAcvhTB0aFliggQjmYNEFQ6LAh0+VoIwbFW1GGamhCgfUE5NbgMKtQYLc0a1gjsyR3E2IYwMFASDYDJvtRRWFIJ1TMq1ElqCICpetQoBEoInVCsAhhI2XhyEPUgIIG7waALlwAloCAMBACH5BAkKAAIALAEAAQAOAA4AAAeDgAKCEmBYYRVKJAaCjAcrVzIzRjVoTw2MKRk5Ww4KECkuWTWCE0Rrl4yCTow7bAupsBcCW19psKkjBEQaFLeMHBwINBy+ggoxVQkPxSMFMXBUMMUQPhRWVUU9tyFRLwQCA048cCcjIyFaJQYxjA8NEVBnAClmahCwEANwbjYBJwyMAgEAIfkECQoABQAsAQABAA4ADgAAB4OABYInO29DbC5QUYKMZiBfbCptTBUmIow4LgJBaTExZkVLFTAFKD8JB4yMQUZrBixUXaqqVFwkUG8Ys4wpQiZOWwy7ghBiRk08HcOqblUTy4wlLWbLBCMFCgBdurMjFMoFE24ADxAXFwwKITEEjD5mH2YBDxI+IdeqHCcGAxgv7IwCAQAh+QQJCgAAACwBAAEADgAOAAAHhYAAglYfTVQJSCITgowDVSAISQJKJgkpjA8LWyIGHBQBJCoZBwAQDU44jIxdTxoSAxEfqqpbFWApUCezjA5LWCJdI7uCClNXGyLCwxBHFl4HBcMAKVxfEx8Y0glZCxwlOCjDUkwPACElAygMghftAB6MClpRJygQFB0EuyMKBQUKDPQxCgQAIfkECQoAAAAsAQABAA4ADgAAB4SAAIIKahstTQ0OVoKMJzYeLVU8W29OXowvBztePh0dUTtxVD0AHDgHEoyMKWVvPj4sBqqqLUoiGDgQs4wBJmNqARe7gjEqXxgPwsMxbWw+UQzDAGY6LjEnusNjFmAEBVbRs00zc1EAHRAKHYw2CHIyO4wEHAwjgmJCZDC7F8psC7IEBQIAIfkECQoARwAsAQABAA4ADgAAB4OAR4IMPgMfNg4PCoKMEA84LCkAMB47GIwxBiUTEAQjKD0REQ9HBD4YIYyMATwtBRQnqaqMG0UOEC8ds4wYIEEQBbuMHC4gMYvCRxw0CAwcF8kBGj8EHdDCJCYiRxfXsw0qCROqRDYQECw3ORkpqjpAQjVGMxYrB7MPC0MyFQItEowCAQAh+QQJCgACACwBAAEADgAOAAAHgIACghcUVhIYEigMgowjEC8nUQ8BOGkojAQxITEdAhcxEh9wPoIMFCOMjBMAKTEXHaipjGldDxcEsqkvUAe5sh1NLb6pHTxNbGK9vlE3DU5ZLsNnIA4GbTVVuQcJdpdnS0Z3LAoxXhF4LjiMMBl5FjptKiZ6ZrJRLUkqbCAwJ4yBACH5BAUKAAEALAEAAQAOAA4AAAd/gAGCARcjHDExHASDjAQdHAoFLy8Ugw2MgiMKWhIKAQ9MYpiCEA8YHQtZCaOCJ14vX2g2rAEKZgMyNRC0BCksFUa7rCMANgIzH7QvZw4tMmO0DlAPUV9hHqNeVTC7G2tkTmkUHA8iSFUGgzZlGSYaNC4gTWqYEzA3SQhVH1aDgQA7)}#ip-geo-block-map{height:400px;margin:1em auto}.gm-style-iw{width:18em;height:auto!important;height:100%;min-height:100%:}.gm-style-iw ul{margin:.1em}.gm-style-iw li{margin:.2em}svg a:hover>text{fill:#0096dd}svg a>text{fill:#0073aa;text-decoration:underline}table.ip-geo-block-statistics-table{float:right}table.ip-geo-block-statistics-table td,table.ip-geo-block-statistics-table th{width:12em;margin:0;padding:.2em;text-align:right;line-height:1.5em;word-wrap:break-word}table.ip-geo-block-statistics-table tr:nth-child(even){background-color:#eee}.ip-geo-block-icon,.ip-geo-block-list-exceptions a.ip-geo-block-icon{background-color:transparent;box-shadow:none;text-decoration:none;outline:0}table.ip-geo-block-table{margin:1em 0;white-space:normal;word-wrap:break-word;word-break:break-all}table.ip-geo-block-table td:first-child{min-width:4.3em}@media screen and (max-width:782px){#ip-geo-block-whois .panel-body{padding:0 .5em}}#ip-geo-block-scan-code{vertical-align:middle}#ip-geo-block-code-list{display:none;margin-bottom:0}#ip-geo-block-chart-countries{height:200px}#ip-geo-block-chart-daily{height:240px}#ip_geo_block_settings_validation_mimetype+label{padding-top:.25em}#ip_geo_block_settings_validation_mimetype+label+ul{margin-top:.7em}#ip_geo_block_settings_create_user{margin-bottom:.5em}#ip-geo-block-back-to-top a,#ip-geo-block-toggle-sections{box-shadow:none}#ip-geo-block-wp-info textarea{margin-top:.5em;overflow:auto;width:100%;word-wrap:normal;word-break:normal;white-space:pre}#ip-geo-block-back-to-top{margin:0;text-align:right}#ip-geo-block-live-update,#ip-geo-block-open-new{margin-left:1em}.ip-geo-block-menu-link{font-size:13px!important}dfn~.ip-geo-block-icon{margin-left:.4em}.ip-geo-block-icon{position:relative}.ip-geo-block-icon:active{top:1px}.ip-geo-block-icon span{height:16px;width:16px;margin:0;border:none;display:inline-block;vertical-align:middle}.ip-geo-block-icon-cycle span{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAh1BMVEUAda2otLp+rsSHprWHr8IBd7EpfKRGhaNajqeUqrRymKuKoq5yo7prlKgAcqoVe6w8gqQmgq5Tj6wIdqsVdKIshrEMea1Uhp+Anqw0hawDdq4gfKhljqE7hqoLdKYbgbM4jLQygKUGeK8CdawQd6gVeKcad6NKkrSerrZAj7UAc6sAc6rc3NySrVGQAAAALXRSTlP//////////////////////////////////////////////////////////wCl7wv9AAACOklEQVR4Ae2W15rzKgxF9xTZzhTX9B7S/gN6/9ebYqzzGZsw/S7LV3FZgCSIwD/kQ8FVcBU8xatZUczy8luC/ABNOn0DSHEsvyZ4PgLatNCYR3efFxyhTQ8g+qQgJxgv2JefERzJXATRh4LHOUwAHD4S7OGEztRJaN86hAUxtaNWDUf/bRdDBbQMWVDAO8jn89WUhag1MeyCAh6hHofyrliLgZKggDMYgzF3eVAwFq0uCZq5KY0TezjIHDDzC0qqmkwe2ctGDOQVLMkgu+F3/rGXwb4xIPcJ6P3JgkM8wFjmfcFAWfeKQywaAz33BJVuHsUcAt09gVbuLDThAJkdR687ggLmf4gDJLIGV7BydtB8yn3u+fbtuj/LS7G9wZAd1AKK+yxJ1x+aBmibTtgCcEHGHsh0wdbOgNLek4L7lI5BigY8nWuZUQ3qGEXes9JzOKGJztPaGtLslu3lIXJirdxCWkASHGDTMqg7V1DKPplygDG61YJukLHjEErGSXqCSos6xNSOgzP3BDmsQBcchNwkoV8oiNnPA78zIefUgCdJeGIfE7LmFWXsFTCFdzTJ/RlfEMRiSGnFXXbkC7AIeqcKDu4ynseozeouKJiSEYBDwkJyIC1nRUjgblkNWp/e/1vXc2gjoAoLksYgjrrFMi0oDgjEEIDij1scBXMJSH6DAj6RNl7o8MkuLak8Co15/Pk+MRmT0xilQJV/sdWNKg2kTaeroudvNNsDjmejYjSL+e6v2/2r4Cp4BXNajr0H7hRfAAAAAElFTkSuQmCC)}.ip-geo-block-icon-lock span{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAYFBMVEXc3Ny3y9Zzq8dRmb7M1dlXnsIFdK0AcawAcqwphrYAcKvZ29wAb6oJd680jrqlw9MBcqxmo8MUfbJLl75eoMI7kbzX2ttqp8VSmL1YnL8NeK+Tu89DlL1ImMEOebBNmL4OkqMoAAAAAXRSTlMAQObYZgAAAPlJREFUeAG9kAWyhTAQBIPOsCzufv9TPnf4Ll0CSbpmxXwNy3Yc23rz2fV8kPA99433AIQIiGDTCD0lojiOQPXCDSFJIbF16CMWItkQMkF+inZzSLYhFKLl+a9UKTZaqJTZJYtarZuo40chrv9CqJTN+behVi+Cm7RdDgRld6AMgLxrE/dxBz0BEjwBEmD/uIsWPAOAF9A+CE56ufSryr8oqfOYcBbQJ8YkES7COkFOYzTypqCDOTDo2wljaEw4vp1APYyWKd8WMBozylvCpcvmXeHQ5fCegHia4s1FgZcIVeVFeFx1M4MvYG4eBHdYWufC+addBtf8E3vdjBNhWnVQqAAAAABJRU5ErkJggg==)}.ip-geo-block-icon-unlock span{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAYFBMVEXc3NyzydRzq8dRmb7I09hYnsEFdK0AcawAcqzP1toqhrYAcKvZ29wAb6oMeK8zjbqrxtQBcazBz9Zko8MVfbLF0thMmL07kbtpp8WjwtJSmL1YnL+Tu89DlL1JmMEPebBFV++UAAAAAXRSTlMAQObYZgAAAONJREFUeAG9kAWChDAMAIMmJaTFXf7/ynXflvMbnE5j8DU8Pwh8D1yEUYxEGEchWFEJEjEflESBhTQSQm2MRpIotQhZTmgKgMIg5ZlFKBmrGg7UFXJpEQKW8qIKN7YeikJdBJI2BTtXwfyx0L3XoPphvBEliNU49OoxqEa6g4cTST/OYshvi3hV8+FxSNfluG3jqxG8C6h7gF6jU+AODnTsFGSCA5O4I8wpQDq7I5CUAKWQW+AZYOYtoQPoGDeECWDaioBmWQxeBduoWURso+5WpBdw7R4ENTVDcGE435tJwT+xB+vMEnZRNB0YAAAAAElFTkSuQmCC)}.ip-geo-block-icon-find span{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAYFBMVEXc3NzS19rD0NWHtMpGk7kYfbAGda0Req+WtcTT1temwM4AcasAcqwAc6wAcKydvMt1pr8Ab6pqpcLX2doggrKoxdNYm7yzw8u/y9HO1tkKdq4th7Td3t6DrcLL0taxyNPGe/YhAAAAAXRSTlMAQObYZgAAARVJREFUeAGtkkeiwyAMRP2xDfxoRjElvd3/lOkNUlZ5u0GPruan/Bnz96Xadr21rvP/7+ujXsAjom78rj4ApCoERIipqfGB1H7wPmYhw1DXjZI6nOel1oJhVAmdUP0tTEDkVC4AYvqIbaDOCqFV6vwRF0tIeYoo6J/X7ICuPAJl9ZynwiIfB5DXxZlRChulbh8xZci0EHZK3TziJFDL504rEOZ+iR5cVj82DoS7XtSshLJpKqaB0Dg3ZjcsQWKaKiF1gVQlITwh/bw2pgKeEeURhE29yKSzUFF03p1V7Wqj2Y7GfrY9X/NirJsPxKsxfBLSSs5GmH8yjAWPSNd8Yoez4f4/G1nIsksqFtGK1i9e39o0P+EAqaoRLlQ+r94AAAAASUVORK5CYII=)}.ip-geo-block-icon-alert span,span.ip-geo-block-icon-alert{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAkFBMVEXc3Nzc2trWl5DHRDTFOyvOgXfc1tXCLBrEMiHEMyLNcmfaxMLDMSDDLx7bu7jRiYHDLhzDMB/LX1PaxsTDLh3YtrHMY1bWmpPJVknSjYXUkYnZuLTMZVnENCPWlI3QhXzENiXXrqrDLRzXsa3Oal7Pe3Hc2NjVn5nNbmPayMbbwb7ay8rUj4fc09Lbw8Db0dDBbRUDAAAAAXRSTlMAQObYZgAAAPVJREFUeAG9ktXWwyAQBonC12brFvff5f2frr4nBredK2DnTFS8Gst2XM8XZmypIGeWcT4PFABaGIXlClfWG1NiC4Ubu705oKRcY32wTAHl2MdTYEqEK8hIiHgHSnSJeaogMyEWO4BijZCvwII2MS9UJ2BXTh+hQidoEttboBOwq3WBnkCNpQlA2iyAhol2hRu71n97p4fw0Z9/ugoPHCfFA+o/iLfCkyBglRJdICBas7uuey+R56fF14wNanj+/QjwY3aX23cBFn6EiHmHNT/ICYxystv/wJy4UHWGlN2cuPB72tFqAq3dP/Hk3zs0E5LZVryGC/hqGNnUa0SVAAAAAElFTkSuQmCC);vertical-align:bottom}table.form-table th .ip-geo-block-cycle span{vertical-align:text-bottom}.ip-geo-block-list{margin-top:0;margin-bottom:.7em}@media screen and (min-width:782px){ul.ip-geo-block-list .code{width:15em}}.ip-geo-block-list-exceptions label{display:inline-block}.ip-geo-block-list-exceptions dfn{border:none}div[class*=ip-geo-block] .dataTables_wrapper.no-footer .dataTables_scrollBody,table.ip-geo-block-dataTable.no-footer,table.ip-geo-block-dataTable>thead>tr>td,table.ip-geo-block-dataTable>thead>tr>th{border-bottom:1px solid #ddd}.ip-geo-block-list-exceptions span.dashicons{font-size:14px}.ip-geo-block-list-exceptions a.ip-geo-block-icon{margin-left:.3em}.form-table td p.ip-geo-block-desc,.form-table td p.ip-geo-block-find-desc{color:#666;font-size:13px!important;margin:4px 0 .5em .5em}.ip-geo-block-find-desc{display:none}.ip-geo-block-admin-post{color:#c43322;margin-left:.25em}.ip-geo-block-warn{color:#c43322;font-weight:700}input#ip_geo_block_settings_behavior_time,input#ip_geo_block_settings_behavior_view{width:3.5em}.ip-geo-block-top-list{display:inline-table;list-style-position:outside;margin:0 2em .5em 1.75em}.ip-geo-block-top-list h4{margin:1em 0}.ip-geo-block-top-list li code{background:0 0}.ip-geo-block-network{margin-bottom:1em}.ip-geo-block-container{margin:0 auto;padding:0 1em;position:relative;width:100%}.ip-geo-block-row{display:flex;flex-direction:column;align-items:flex-start;align-items:stretch;padding:0;width:100%}.ip-geo-block-row .ip-geo-block-column{display:block;flex:1 1 auto;align-self:flex-start;margin-left:0;max-width:100%;width:100%}.ip-geo-block-row .ip-geo-block-column.column-20{flex:0 0 20%;max-width:20%}.ip-geo-block-row .ip-geo-block-column.column-25{flex:0 0 25%;max-width:25%}.ip-geo-block-row .ip-geo-block-column.column-33{flex:0 0 33.3333%;max-width:33.3333%}.ip-geo-block-row .ip-geo-block-column.column-50{flex:0 0 50%;max-width:50%}@media (min-width:40rem){.ip-geo-block-row{flex-direction:row;margin-left:-2em;width:calc(100% + 2em)}.ip-geo-block-row .ip-geo-block-column{margin-bottom:inherit;padding:0 1em}}table.ip-geo-block-dataTable{clear:none!important}table.ip-geo-block-dataTable td,table.ip-geo-block-dataTable th{text-align:right}table.ip-geo-block-dataTable td:nth-child(n+2),table.ip-geo-block-dataTable th:nth-child(n+2){padding-left:0!important}table.ip-geo-block-dataTable th{white-space:nowrap}table.ip-geo-block-dataTable>thead>tr{line-height:1.8em}table.ip-geo-block-dataTable thead td,table.ip-geo-block-dataTable thead th{padding:10px 16px}#ip-geo-block-statistics-cache td:nth-child(3),#ip-geo-block-validation-logs td:nth-child(4){min-width:1.6em}table.ip-geo-block-dataTable.nowrap td,table.ip-geo-block-dataTable>tbody>tr>td span{white-space:normal!important;word-wrap:break-word!important;word-break:break-all!important}table.ip-geo-block-dataTable>tbody>tr>td span{display:inline-block}.ip-geo-block-settings-folding input[type=checkbox]{margin-right:.5em}table.ip-geo-block-dataTable input[type=checkbox]{max-height:16px;max-width:16px;margin:0}table.ip-geo-block-dataTable>tbody>tr>td:first-child,table.ip-geo-block-dataTable>thead>tr>th:first-child{padding:8px 4px 8px 1.4em;text-align:left}table.collapsed>tbody>tr>td.dataTables_empty:first-child::before,table.ip-geo-block-dataTable>tbody>tr>td.dataTables_empty{border:none;text-align:center}table.ip-geo-block-dataTable thead>tr>th:first-child.sorting_asc{background-image:none!important}table.ip-geo-block-dataTable.display tbody tr.even>.sorting_1,table.ip-geo-block-dataTable.display tbody tr.odd>.sorting_1,table.ip-geo-block-dataTable.display tbody tr:hover>.sorting_1{background-color:inherit!important}table.ip-geo-block-dataTable.collapsed>tbody>tr>td:first-child{padding:8px 4px 8px 8px!important}table.collapsed>tbody>tr.parent>td:first-child::before,table.collapsed>tbody>tr>td:first-child::before{content:'';height:0;width:0;display:inline-block;border-radius:0;border:5px solid transparent;box-shadow:none;position:relative;background-color:transparent}table.collapsed>tbody>tr>td:first-child::before{border-left:5px solid #555;top:1px;left:-2px}table.collapsed>tbody>tr.parent>td:first-child::before{border-top:5px solid #555;top:4px;left:-4px}table.collapsed>tbody>tr.child>td:first-child::before{border:none}table.collapsed>tbody>tr.child>td.child>ul li{border:none;padding:0;margin:0;line-height:1.8em}table.collapsed>tbody>tr.child>td.child>ul li span.dtr-data,table.collapsed>tbody>tr.child>td.child>ul li span.dtr-title{font-size:13px!important;display:block;white-space:normal;word-wrap:break-word;word-break:break-all}table.collapsed>tbody>tr.child>td.child>ul li span.dtr-data{margin-left:1.25em;margin-right:.3em}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate{float:none;text-align:center;margin-bottom:1em}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.current,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.current:active,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.current:hover,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:active,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:hover,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button:active,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button:hover,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate span.ellipsis{min-width:2em;background:inherit;border-color:#ddd;border-radius:0;border-image:none;border-style:solid;border-width:1px 1px 1px 0;box-shadow:none;margin:.5em 0 0;padding:.25em 0;display:inline-block;text-decoration:none}#ip-geo-block-1 #ip-geo-block-section-2 .panel-body,#ip-geo-block-4 #ip-geo-block-section-0 .panel-body,mark{padding:0}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate:active>a.paginate_button:first-child,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate:hover>a.paginate_button:first-child,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate>a.paginate_button:first-child{border-left-width:1px;border-bottom-left-radius:4px;border-top-left-radius:4px}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate:active>a.paginate_button:last-child,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate:hover>a.paginate_button:last-child,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate>a.paginate_button:last-child{border-bottom-right-radius:4px;border-top-right-radius:4px}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button{color:#0073aa!important}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button:hover{color:#0096dd!important;background-color:#fff}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:active,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:hover,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate span.ellipsis{cursor:default;color:#999!important;background-color:transparent}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.current,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.current:active,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.current:hover{cursor:default;color:#444!important;background-color:#fff!important}#ip-geo-block-1 #ip-geo-block-section-2 table.form-table,#ip-geo-block-4 #ip-geo-block-section-0 table.form-table{margin-left:1em;max-width:95%}#ip-geo-block-live-log,#ip-geo-block-select-duration,#ip-geo-block-select-layout,#ip-geo-block-select-target{margin:0}#ip-geo-block-select-duration li,#ip-geo-block-select-layout li,#ip-geo-block-select-target li{float:left;margin-right:1.5em}#ip-geo-block-select-duration li label,#ip-geo-block-select-target li label{cursor:pointer}#ip_geo_block_settings_search_filter{width:16em;padding-top:3px}table.ip-geo-block-dataTable.display tbody tr.ip-geo-block-passed{background-color:#edf6ff!important}table.ip-geo-block-dataTable.display tbody tr.ip-geo-block-blocked{background-color:#ffefef!important}.ip-geo-block-new-passed{animation:ip-geo-block-flash-passed 1s ease-out 0s 1 normal both running}.ip-geo-block-new-blocked{animation:ip-geo-block-flash-blocked 1s ease-out 0s 1 normal both running}@keyframes ip-geo-block-flash-passed{0%{background-color:gold}100%{background-color:#edf6ff}}@keyframes ip-geo-block-flash-blocked{0%{background-color:gold}100%{background-color:#ffefef}}mark{background:gold}#ip-geo-block-live-log li{float:left;margin-right:3em}#ip-geo-block-live-log li:last-child{margin-right:0}#ip-geo-block-live-log li input[type=radio]{visibility:hidden;position:absolute}#ip-geo-block-live-log li input[type=radio]+label{display:inline-block;margin:-2px -2px 0;padding:4px 12px;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);border-bottom-color:#b3b3b3;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}#ip-geo-block-live-log li input[type=radio]:checked+label{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);background-color:#e0e0e0}.ip-geo-block-live-timer{height:1em;width:1em;margin:0;position:relative;top:0;left:0}.ip-geo-block-live-timer:before{content:"";display:block;height:1em;width:1em;background:#0073aa;border-radius:50%;position:absolute;top:0;left:0}.ip-geo-block-live-timer:after{display:none}.ip-geo-block-live-timer>div{position:absolute;width:1em;height:1em;clip:rect(0,1em,1em,.5em)}.ip-geo-block-live-timer>div:before{content:" ";position:absolute;width:1em;height:1em;border-radius:.5em;clip:rect(0,.5em,1em,0);background-color:#f1f1f1;transform:rotate(0)}.ip-geo-block-live-timer>div:first-child:before{animation:30s spin-timer linear forwards}.ip-geo-block-live-timer>div:last-child{transform:rotate(180deg)}.ip-geo-block-live-timer>div:last-child:before{transform:rotate(0);animation:30s spin-timer linear 30s forwards}@keyframes spin-timer{0%{transform:rotate(0)}100%{transform:rotate(180deg)}}.ip-geo-block-subitem{margin-left:1.7em}.ip-geo-block-subitem:before{content:"\00bb";position:absolute;left:2em}.ip-geo-block-subitem dfn{vertical-align:middle}.ip-geo-block-subitem-parent td,.ip-geo-block-subitem-parent th{padding-top:0}:placeholder-shown{color:#888}::-webkit-input-placeholder{color:#888}:-moz-placeholder{color:#888;opacity:1}::-moz-placeholder{color:#888;opacity:1}:-ms-input-placeholder{color:#888}
admin/css/cidr.min.css CHANGED
@@ -1 +1 @@
1
- *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body{margin:8xp;font-size:14px;line-height:1.4}#g,textarea{border:1px solid #ccc;font-size:12px;font-family:Consolas,Monaco,monospace}.container{margin:0;padding:0}.clr:after,.col:after,.container:after,.row:after{content:"";display:table;clear:both}.row{padding-bottom:0}#g,fieldset{padding:.5rem}.col{display:block;float:left;width:100%}.span_2{width:8.33333333333%}.span_11{width:45.8333333333%}.span_24,textarea{width:100%}fieldset{border:none;margin:0}textarea{height:4.5rem;resize:horizontal}legend input[type=button]{margin-left:.5rem;vertical-align:middle}#j,#i{display:-ms-flexbox;display:-webkit-box;display:-webkit-flex;display:flex;justify-content:center;align-items:center}#j{padding:0 .5rem}ul#h{padding:1.5rem 0 0;list-style:none}ul#h li{width:100%;margin:.1rem 0;display:inline-block}ul#h li input{padding:0}#g{text-align:center}
1
+ *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body{margin:8xp;font-size:14px;line-height:1.4}#g,textarea{border:1px solid #ccc;font-size:12px;font-family:Consolas,Monaco,monospace}.container{margin:0;padding:0}.clr:after,.col:after,.container:after,.row:after{content:"";display:table;clear:both}.row{padding-bottom:0}#g,fieldset{padding:.5rem}.col{display:block;float:left;width:100%}.span_2{width:8.33333333333%}.span_11{width:45.8333333333%}.span_24,textarea{width:100%}fieldset{border:none;margin:0}textarea{height:4.5rem;resize:horizontal}legend input[type=button]{margin-left:.5rem;vertical-align:middle}#j,#i{display:-ms-flexbox;display:-webkit-box;display:-webkit-flex;display:flex;justify-content:center;align-items:center}#j{padding:0 .5rem}ul#h{padding:1.5rem 0 0;list-style:none}ul#h li{width:100%;margin:.1rem 0;display:inline-block}ul#h li input{padding:0}#g{height:3em;text-align:center}
admin/css/fonts/icomoon.eot CHANGED
Binary file
admin/css/fonts/icomoon.svg CHANGED
@@ -7,12 +7,9 @@
7
<font-face units-per-em="1024" ascent="960" descent="-64" />
8
<missing-glyph horiz-adv-x="1024" />
9
<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
10
<glyph unicode="&#xe900;" glyph-name="warning" d="M1010.432 121.248l-383.968 768c-21.664 43.36-65.952 70.752-114.464 70.752s-92.8-27.392-114.464-70.752l-383.968-768c-19.84-39.68-17.728-86.816 5.6-124.576 23.328-37.696 64.512-60.672 108.864-60.672h767.904c44.384 0 85.568 22.976 108.864 60.672 23.328 37.76 25.44 84.896 5.632 124.576zM575.936 96c0-17.696-14.304-32-32-32h-64c-17.696 0-32 14.304-32 32v64c0 17.696 14.304 32 32 32h64c17.696 0 32-14.304 32-32v-64zM575.936 352c0-17.696-14.304-32-32-32h-64c-17.696 0-32 14.304-32 32v320c0 17.664 14.304 32 32 32h64c17.696 0 32-14.336 32-32v-320z" />
11
- <glyph unicode="&#xe933;" glyph-name="folder-download" d="M576 704l-128 128h-448v-832h1024v704h-448zM512 96l-224 224h160v256h128v-256h160l-224-224z" />
12
- <glyph unicode="&#xe948;" glyph-name="location2" d="M512 960c-176.732 0-320-143.268-320-320 0-320 320-704 320-704s320 384 320 704c0 176.732-143.27 320-320 320zM512 444c-108.248 0-196 87.752-196 196s87.752 196 196 196 196-87.752 196-196-87.752-196-196-196zM388 640c0 68.483 55.517 124 124 124s124-55.517 124-124c0-68.483-55.517-124-124-124s-124 55.517-124 124z" />
13
- <glyph unicode="&#xe94b;" glyph-name="map" d="M0 768l320 128v-768l-320-128zM384 928l320-192v-736l-320 160zM768 736l256 192v-768l-256-192z" />
14
- <glyph unicode="&#xe964;" glyph-name="database" d="M512 960c-282.77 0-512-71.634-512-160v-128c0-88.366 229.23-160 512-160s512 71.634 512 160v128c0 88.366-229.23 160-512 160zM512 416c-282.77 0-512 71.634-512 160v-192c0-88.366 229.23-160 512-160s512 71.634 512 160v192c0-88.366-229.23-160-512-160zM512 128c-282.77 0-512 71.634-512 160v-192c0-88.366 229.23-160 512-160s512 71.634 512 160v192c0-88.366-229.23-160-512-160z" />
15
- <glyph unicode="&#xe985;" glyph-name="binoculars" d="M64 960h384v-64h-384zM576 960h384v-64h-384zM952 640h-56v256h-256v-256h-256v256h-256v-256h-56c-39.6 0-72-32.4-72-72v-560c0-39.6 32.4-72 72-72h304c39.6 0 72 32.4 72 72v376h128v-376c0-39.6 32.4-72 72-72h304c39.6 0 72 32.4 72 72v560c0 39.6-32.4 72-72 72zM348 0h-248c-19.8 0-36 14.4-36 32s16.2 32 36 32h248c19.8 0 36-14.4 36-32s-16.2-32-36-32zM544 448h-64c-17.6 0-32 14.4-32 32s14.4 32 32 32h64c17.6 0 32-14.4 32-32s-14.4-32-32-32zM924 0h-248c-19.8 0-36 14.4-36 32s16.2 32 36 32h248c19.8 0 36-14.4 36-32s-16.2-32-36-32z" />
16
<glyph unicode="&#xe986;" glyph-name="search" d="M992.262 88.604l-242.552 206.294c-25.074 22.566-51.89 32.926-73.552 31.926 57.256 67.068 91.842 154.078 91.842 249.176 0 212.078-171.922 384-384 384-212.076 0-384-171.922-384-384s171.922-384 384-384c95.098 0 182.108 34.586 249.176 91.844-1-21.662 9.36-48.478 31.926-73.552l206.294-242.552c35.322-39.246 93.022-42.554 128.22-7.356s31.892 92.898-7.354 128.22zM384 320c-141.384 0-256 114.616-256 256s114.616 256 256 256 256-114.616 256-256-114.614-256-256-256z" />
17
<glyph unicode="&#xe98d;" glyph-name="key" d="M704 960c-176.73 0-320-143.268-320-320 0-20.026 1.858-39.616 5.376-58.624l-389.376-389.376v-192c0-35.346 28.654-64 64-64h64v64h128v128h128v128h128l83.042 83.042c34.010-12.316 70.696-19.042 108.958-19.042 176.73 0 320 143.268 320 320s-143.27 320-320 320zM799.874 639.874c-53.020 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96-42.98-96-96-96z" />
18
<glyph unicode="&#xe98f;" glyph-name="lock" d="M592 512h-16v192c0 105.87-86.13 192-192 192h-128c-105.87 0-192-86.13-192-192v-192h-16c-26.4 0-48-21.6-48-48v-480c0-26.4 21.6-48 48-48h544c26.4 0 48 21.6 48 48v480c0 26.4-21.6 48-48 48zM192 704c0 35.29 28.71 64 64 64h128c35.29 0 64-28.71 64-64v-192h-256v192z" />
@@ -22,9 +19,7 @@
22
<glyph unicode="&#xe99b;" glyph-name="stats-dots" d="M128 64h896v-128h-1024v1024h128zM288 128c-53.020 0-96 42.98-96 96s42.98 96 96 96c2.828 0 5.622-0.148 8.388-0.386l103.192 171.986c-9.84 15.070-15.58 33.062-15.58 52.402 0 53.020 42.98 96 96 96s96-42.98 96-96c0-19.342-5.74-37.332-15.58-52.402l103.192-171.986c2.766 0.238 5.56 0.386 8.388 0.386 2.136 0 4.248-0.094 6.35-0.23l170.356 298.122c-10.536 15.408-16.706 34.036-16.706 54.11 0 53.020 42.98 96 96 96s96-42.98 96-96c0-53.020-42.98-96-96-96-2.14 0-4.248 0.094-6.35 0.232l-170.356-298.124c10.536-15.406 16.706-34.036 16.706-54.11 0-53.020-42.98-96-96-96s-96 42.98-96 96c0 19.34 5.74 37.332 15.578 52.402l-103.19 171.984c-2.766-0.238-5.56-0.386-8.388-0.386s-5.622 0.146-8.388 0.386l-103.192-171.986c9.84-15.068 15.58-33.060 15.58-52.4 0-53.020-42.98-96-96-96z" />
23
<glyph unicode="&#xe99c;" glyph-name="stats-bars" d="M0 128h1024v-128h-1024zM128 384h128v-192h-128zM320 640h128v-448h-128zM512 448h128v-256h-128zM704 832h128v-640h-128z" />
24
<glyph unicode="&#xe99d;" glyph-name="stats-bars2" d="M288 576h-192c-17.6 0-32-14.4-32-32v-576c0-17.6 14.4-32 32-32h192c17.6 0 32 14.4 32 32v576c0 17.6-14.4 32-32 32zM288 0h-192v256h192v-256zM608 704h-192c-17.6 0-32-14.4-32-32v-704c0-17.6 14.4-32 32-32h192c17.6 0 32 14.4 32 32v704c0 17.6-14.4 32-32 32zM608 0h-192v320h192v-320zM928 832h-192c-17.6 0-32-14.4-32-32v-832c0-17.6 14.4-32 32-32h192c17.6 0 32 14.4 32 32v832c0 17.6-14.4 32-32 32zM928 0h-192v384h192v-384z" />
25
- <glyph unicode="&#xe9b4;" glyph-name="shield" d="M960 960l-448-128-448 128c0 0-4.5-51.698 0-128l448-140.090 448 140.090c4.498 76.302 0 128 0 128zM72.19 764.894c23.986-250.696 113.49-672.234 439.81-828.894 326.32 156.66 415.824 578.198 439.81 828.894l-439.81-165.358-439.81 165.358z" />
26
<glyph unicode="&#xe9b6;" glyph-name="switch" d="M640 813.412v-135.958c36.206-15.804 69.5-38.408 98.274-67.18 60.442-60.44 93.726-140.8 93.726-226.274s-33.286-165.834-93.726-226.274c-60.44-60.44-140.798-93.726-226.274-93.726s-165.834 33.286-226.274 93.726c-60.44 60.44-93.726 140.8-93.726 226.274s33.286 165.834 93.726 226.274c28.774 28.774 62.068 51.378 98.274 67.182v135.956c-185.048-55.080-320-226.472-320-429.412 0-247.424 200.578-448 448-448 247.424 0 448 200.576 448 448 0 202.94-134.95 374.332-320 429.412zM448 960h128v-512h-128z" />
27
- <glyph unicode="&#xe9b7;" glyph-name="power-cord" d="M1024 677.5l-90.506 90.5-178.746-178.752-101.5 101.502 178.75 178.75-90.5 90.5-178.75-178.75-114.748 114.75-86.626-86.624 512.002-512 86.624 86.622-114.752 114.752 178.752 178.75zM794.040 286.21l-443.824 443.824c-95.818-114.904-204.52-292.454-129.396-445.216l-132.248-132.248c-31.112-31.114-31.112-82.024 0-113.136l14.858-14.858c31.114-31.114 82.026-31.114 113.138 0l132.246 132.244c152.764-75.132 330.318 33.566 445.226 129.39z" />
28
<glyph unicode="&#xe9c9;" glyph-name="sphere" d="M480 896c-265.096 0-480-214.904-480-480 0-265.098 214.904-480 480-480 265.098 0 480 214.902 480 480 0 265.096-214.902 480-480 480zM751.59 256c8.58 40.454 13.996 83.392 15.758 128h127.446c-3.336-44.196-13.624-87.114-30.68-128h-112.524zM208.41 576c-8.58-40.454-13.996-83.392-15.758-128h-127.444c3.336 44.194 13.622 87.114 30.678 128h112.524zM686.036 576c9.614-40.962 15.398-83.854 17.28-128h-191.316v128h174.036zM512 640v187.338c14.59-4.246 29.044-11.37 43.228-21.37 26.582-18.74 52.012-47.608 73.54-83.486 14.882-24.802 27.752-52.416 38.496-82.484h-155.264zM331.232 722.484c21.528 35.878 46.956 64.748 73.54 83.486 14.182 10 28.638 17.124 43.228 21.37v-187.34h-155.264c10.746 30.066 23.616 57.68 38.496 82.484zM448 576v-128h-191.314c1.88 44.146 7.666 87.038 17.278 128h174.036zM95.888 256c-17.056 40.886-27.342 83.804-30.678 128h127.444c1.762-44.608 7.178-87.546 15.758-128h-112.524zM256.686 384h191.314v-128h-174.036c-9.612 40.96-15.398 83.854-17.278 128zM448 192v-187.34c-14.588 4.246-29.044 11.372-43.228 21.37-26.584 18.74-52.014 47.61-73.54 83.486-14.882 24.804-27.75 52.418-38.498 82.484h155.266zM628.768 109.516c-21.528-35.876-46.958-64.746-73.54-83.486-14.184-9.998-28.638-17.124-43.228-21.37v187.34h155.266c-10.746-30.066-23.616-57.68-38.498-82.484zM512 256v128h191.314c-1.88-44.146-7.666-87.040-17.28-128h-174.034zM767.348 448c-1.762 44.608-7.178 87.546-15.758 128h112.524c17.056-40.886 27.344-83.806 30.68-128h-127.446zM830.658 640h-95.9c-18.638 58.762-44.376 110.294-75.316 151.428 42.536-20.34 81.058-47.616 114.714-81.272 21.48-21.478 40.362-44.938 56.502-70.156zM185.844 710.156c33.658 33.658 72.18 60.932 114.714 81.272-30.942-41.134-56.676-92.666-75.316-151.428h-95.898c16.138 25.218 35.022 48.678 56.5 70.156zM129.344 192h95.898c18.64-58.762 44.376-110.294 75.318-151.43-42.536 20.34-81.058 47.616-114.714 81.274-21.48 21.478-40.364 44.938-56.502 70.156zM774.156 121.844c-33.656-33.658-72.18-60.934-114.714-81.274 30.942 41.134 56.678 92.668 75.316 151.43h95.9c-16.14-25.218-35.022-48.678-56.502-70.156z" />
29
<glyph unicode="&#xe9ca;" glyph-name="earth" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512-0.002c-62.958 0-122.872 13.012-177.23 36.452l233.148 262.29c5.206 5.858 8.082 13.422 8.082 21.26v96c0 17.674-14.326 32-32 32-112.99 0-232.204 117.462-233.374 118.626-6 6.002-14.14 9.374-22.626 9.374h-128c-17.672 0-32-14.328-32-32v-192c0-12.122 6.848-23.202 17.69-28.622l110.31-55.156v-187.886c-116.052 80.956-192 215.432-192 367.664 0 68.714 15.49 133.806 43.138 192h116.862c8.488 0 16.626 3.372 22.628 9.372l128 128c6 6.002 9.372 14.14 9.372 22.628v77.412c40.562 12.074 83.518 18.588 128 18.588 70.406 0 137.004-16.26 196.282-45.2-4.144-3.502-8.176-7.164-12.046-11.036-36.266-36.264-56.236-84.478-56.236-135.764s19.97-99.5 56.236-135.764c36.434-36.432 85.218-56.264 135.634-56.26 3.166 0 6.342 0.080 9.518 0.236 13.814-51.802 38.752-186.656-8.404-372.334-0.444-1.744-0.696-3.488-0.842-5.224-81.324-83.080-194.7-134.656-320.142-134.656z" />
30
<glyph unicode="&#xea1c;" glyph-name="play3" d="M192 832l640-384-640-384z" />
7
<font-face units-per-em="1024" ascent="960" descent="-64" />
8
<missing-glyph horiz-adv-x="1024" />
9
<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
10
+ <glyph unicode="&#xe62f;" glyph-name="vpn_lock" d="M426 44.667v84c-46 0-84 38-84 84v44l-206 204c-6-24-8-50-8-76 0-174 130-320 298-340zM808 426.667h86c2-14 2-28 2-42 0-236-190-428-426-428s-428 192-428 428 192 426 428 426c44 0 88-8 128-20v-108c0-46-40-86-86-86h-86v-84c0-24-18-44-42-44h-86v-84h256c24 0 44-20 44-44v-128h42c38 0 70-24 82-58 56 60 88 142 88 230 0 14 0 28-2 42zM904 768.667v20c0 40-32 74-72 74s-72-34-72-74v-20h144zM938 768.667c24 0 44-20 44-44v-170c0-24-20-42-44-42h-212c-24 0-44 18-44 42v170c0 24 20 44 44 44v20c0 58 48 108 106 108s106-50 106-108v-20z" />
11
<glyph unicode="&#xe900;" glyph-name="warning" d="M1010.432 121.248l-383.968 768c-21.664 43.36-65.952 70.752-114.464 70.752s-92.8-27.392-114.464-70.752l-383.968-768c-19.84-39.68-17.728-86.816 5.6-124.576 23.328-37.696 64.512-60.672 108.864-60.672h767.904c44.384 0 85.568 22.976 108.864 60.672 23.328 37.76 25.44 84.896 5.632 124.576zM575.936 96c0-17.696-14.304-32-32-32h-64c-17.696 0-32 14.304-32 32v64c0 17.696 14.304 32 32 32h64c17.696 0 32-14.304 32-32v-64zM575.936 352c0-17.696-14.304-32-32-32h-64c-17.696 0-32 14.304-32 32v320c0 17.664 14.304 32 32 32h64c17.696 0 32-14.336 32-32v-320z" />
12
+ <glyph unicode="&#xe901;" glyph-name="calculator" d="M102.4 870.4c0 56.32 46.080 102.4 102.4 102.4h614.4c56.554 0 102.4-45.846 102.4-102.4v0-819.2c0-56.554-45.846-102.4-102.4-102.4v0h-614.4c-56.554 0-102.4 45.846-102.4 102.4v0 819.2zM256 819.2v-102.4h512v102.4h-512zM256 614.4v-102.4h102.4v102.4h-102.4zM460.8 614.4v-102.4h102.4v102.4h-102.4zM665.6 614.4v-102.4h102.4v102.4h-102.4zM256 409.6v-102.4h102.4v102.4h-102.4zM460.8 409.6v-102.4h102.4v102.4h-102.4zM665.6 409.6v-307.2h102.4v307.2h-102.4zM256 204.8v-102.4h102.4v102.4h-102.4zM460.8 204.8v-102.4h102.4v102.4h-102.4z" />
13
<glyph unicode="&#xe986;" glyph-name="search" d="M992.262 88.604l-242.552 206.294c-25.074 22.566-51.89 32.926-73.552 31.926 57.256 67.068 91.842 154.078 91.842 249.176 0 212.078-171.922 384-384 384-212.076 0-384-171.922-384-384s171.922-384 384-384c95.098 0 182.108 34.586 249.176 91.844-1-21.662 9.36-48.478 31.926-73.552l206.294-242.552c35.322-39.246 93.022-42.554 128.22-7.356s31.892 92.898-7.354 128.22zM384 320c-141.384 0-256 114.616-256 256s114.616 256 256 256 256-114.616 256-256-114.614-256-256-256z" />
14
<glyph unicode="&#xe98d;" glyph-name="key" d="M704 960c-176.73 0-320-143.268-320-320 0-20.026 1.858-39.616 5.376-58.624l-389.376-389.376v-192c0-35.346 28.654-64 64-64h64v64h128v128h128v128h128l83.042 83.042c34.010-12.316 70.696-19.042 108.958-19.042 176.73 0 320 143.268 320 320s-143.27 320-320 320zM799.874 639.874c-53.020 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96-42.98-96-96-96z" />
15
<glyph unicode="&#xe98f;" glyph-name="lock" d="M592 512h-16v192c0 105.87-86.13 192-192 192h-128c-105.87 0-192-86.13-192-192v-192h-16c-26.4 0-48-21.6-48-48v-480c0-26.4 21.6-48 48-48h544c26.4 0 48 21.6 48 48v480c0 26.4-21.6 48-48 48zM192 704c0 35.29 28.71 64 64 64h128c35.29 0 64-28.71 64-64v-192h-256v192z" />
19
<glyph unicode="&#xe99b;" glyph-name="stats-dots" d="M128 64h896v-128h-1024v1024h128zM288 128c-53.020 0-96 42.98-96 96s42.98 96 96 96c2.828 0 5.622-0.148 8.388-0.386l103.192 171.986c-9.84 15.070-15.58 33.062-15.58 52.402 0 53.020 42.98 96 96 96s96-42.98 96-96c0-19.342-5.74-37.332-15.58-52.402l103.192-171.986c2.766 0.238 5.56 0.386 8.388 0.386 2.136 0 4.248-0.094 6.35-0.23l170.356 298.122c-10.536 15.408-16.706 34.036-16.706 54.11 0 53.020 42.98 96 96 96s96-42.98 96-96c0-53.020-42.98-96-96-96-2.14 0-4.248 0.094-6.35 0.232l-170.356-298.124c10.536-15.406 16.706-34.036 16.706-54.11 0-53.020-42.98-96-96-96s-96 42.98-96 96c0 19.34 5.74 37.332 15.578 52.402l-103.19 171.984c-2.766-0.238-5.56-0.386-8.388-0.386s-5.622 0.146-8.388 0.386l-103.192-171.986c9.84-15.068 15.58-33.060 15.58-52.4 0-53.020-42.98-96-96-96z" />
20
<glyph unicode="&#xe99c;" glyph-name="stats-bars" d="M0 128h1024v-128h-1024zM128 384h128v-192h-128zM320 640h128v-448h-128zM512 448h128v-256h-128zM704 832h128v-640h-128z" />
21
<glyph unicode="&#xe99d;" glyph-name="stats-bars2" d="M288 576h-192c-17.6 0-32-14.4-32-32v-576c0-17.6 14.4-32 32-32h192c17.6 0 32 14.4 32 32v576c0 17.6-14.4 32-32 32zM288 0h-192v256h192v-256zM608 704h-192c-17.6 0-32-14.4-32-32v-704c0-17.6 14.4-32 32-32h192c17.6 0 32 14.4 32 32v704c0 17.6-14.4 32-32 32zM608 0h-192v320h192v-320zM928 832h-192c-17.6 0-32-14.4-32-32v-832c0-17.6 14.4-32 32-32h192c17.6 0 32 14.4 32 32v832c0 17.6-14.4 32-32 32zM928 0h-192v384h192v-384z" />
22
<glyph unicode="&#xe9b6;" glyph-name="switch" d="M640 813.412v-135.958c36.206-15.804 69.5-38.408 98.274-67.18 60.442-60.44 93.726-140.8 93.726-226.274s-33.286-165.834-93.726-226.274c-60.44-60.44-140.798-93.726-226.274-93.726s-165.834 33.286-226.274 93.726c-60.44 60.44-93.726 140.8-93.726 226.274s33.286 165.834 93.726 226.274c28.774 28.774 62.068 51.378 98.274 67.182v135.956c-185.048-55.080-320-226.472-320-429.412 0-247.424 200.578-448 448-448 247.424 0 448 200.576 448 448 0 202.94-134.95 374.332-320 429.412zM448 960h128v-512h-128z" />
23
<glyph unicode="&#xe9c9;" glyph-name="sphere" d="M480 896c-265.096 0-480-214.904-480-480 0-265.098 214.904-480 480-480 265.098 0 480 214.902 480 480 0 265.096-214.902 480-480 480zM751.59 256c8.58 40.454 13.996 83.392 15.758 128h127.446c-3.336-44.196-13.624-87.114-30.68-128h-112.524zM208.41 576c-8.58-40.454-13.996-83.392-15.758-128h-127.444c3.336 44.194 13.622 87.114 30.678 128h112.524zM686.036 576c9.614-40.962 15.398-83.854 17.28-128h-191.316v128h174.036zM512 640v187.338c14.59-4.246 29.044-11.37 43.228-21.37 26.582-18.74 52.012-47.608 73.54-83.486 14.882-24.802 27.752-52.416 38.496-82.484h-155.264zM331.232 722.484c21.528 35.878 46.956 64.748 73.54 83.486 14.182 10 28.638 17.124 43.228 21.37v-187.34h-155.264c10.746 30.066 23.616 57.68 38.496 82.484zM448 576v-128h-191.314c1.88 44.146 7.666 87.038 17.278 128h174.036zM95.888 256c-17.056 40.886-27.342 83.804-30.678 128h127.444c1.762-44.608 7.178-87.546 15.758-128h-112.524zM256.686 384h191.314v-128h-174.036c-9.612 40.96-15.398 83.854-17.278 128zM448 192v-187.34c-14.588 4.246-29.044 11.372-43.228 21.37-26.584 18.74-52.014 47.61-73.54 83.486-14.882 24.804-27.75 52.418-38.498 82.484h155.266zM628.768 109.516c-21.528-35.876-46.958-64.746-73.54-83.486-14.184-9.998-28.638-17.124-43.228-21.37v187.34h155.266c-10.746-30.066-23.616-57.68-38.498-82.484zM512 256v128h191.314c-1.88-44.146-7.666-87.040-17.28-128h-174.034zM767.348 448c-1.762 44.608-7.178 87.546-15.758 128h112.524c17.056-40.886 27.344-83.806 30.68-128h-127.446zM830.658 640h-95.9c-18.638 58.762-44.376 110.294-75.316 151.428 42.536-20.34 81.058-47.616 114.714-81.272 21.48-21.478 40.362-44.938 56.502-70.156zM185.844 710.156c33.658 33.658 72.18 60.932 114.714 81.272-30.942-41.134-56.676-92.666-75.316-151.428h-95.898c16.138 25.218 35.022 48.678 56.5 70.156zM129.344 192h95.898c18.64-58.762 44.376-110.294 75.318-151.43-42.536 20.34-81.058 47.616-114.714 81.274-21.48 21.478-40.364 44.938-56.502 70.156zM774.156 121.844c-33.656-33.658-72.18-60.934-114.714-81.274 30.942 41.134 56.678 92.668 75.316 151.43h95.9c-16.14-25.218-35.022-48.678-56.502-70.156z" />
24
<glyph unicode="&#xe9ca;" glyph-name="earth" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512-0.002c-62.958 0-122.872 13.012-177.23 36.452l233.148 262.29c5.206 5.858 8.082 13.422 8.082 21.26v96c0 17.674-14.326 32-32 32-112.99 0-232.204 117.462-233.374 118.626-6 6.002-14.14 9.374-22.626 9.374h-128c-17.672 0-32-14.328-32-32v-192c0-12.122 6.848-23.202 17.69-28.622l110.31-55.156v-187.886c-116.052 80.956-192 215.432-192 367.664 0 68.714 15.49 133.806 43.138 192h116.862c8.488 0 16.626 3.372 22.628 9.372l128 128c6 6.002 9.372 14.14 9.372 22.628v77.412c40.562 12.074 83.518 18.588 128 18.588 70.406 0 137.004-16.26 196.282-45.2-4.144-3.502-8.176-7.164-12.046-11.036-36.266-36.264-56.236-84.478-56.236-135.764s19.97-99.5 56.236-135.764c36.434-36.432 85.218-56.264 135.634-56.26 3.166 0 6.342 0.080 9.518 0.236 13.814-51.802 38.752-186.656-8.404-372.334-0.444-1.744-0.696-3.488-0.842-5.224-81.324-83.080-194.7-134.656-320.142-134.656z" />
25
<glyph unicode="&#xea1c;" glyph-name="play3" d="M192 832l640-384-640-384z" />
admin/css/fonts/icomoon.ttf CHANGED
Binary file
admin/css/fonts/icomoon.woff CHANGED
Binary file
admin/datatables/css/datatables-all.css CHANGED
@@ -1,8 +1,8 @@
1
/*! DataTables 1.10.16
2
* 2008-2017 SpryMedia Ltd - datatables.net/license
3
*/
4
-
5
- table.dataTable {
6
width: 100%;
7
margin: 0 auto;
8
clear: both;
@@ -15,285 +15,315 @@ table.dataTable {
15
* Body styles
16
*/
17
}
18
- table.dataTable thead th,
19
- table.dataTable tfoot th {
20
font-weight: bold;
21
}
22
- table.dataTable thead th,
23
- table.dataTable thead td {
24
padding: 10px 18px;
25
border-bottom: 1px solid #111;
26
}
27
- table.dataTable thead th:active,
28
- table.dataTable thead td:active {
29
outline: none;
30
}
31
- table.dataTable tfoot th,
32
- table.dataTable tfoot td {
33
padding: 10px 18px 6px 18px;
34
border-top: 1px solid #111;
35
}
36
- table.dataTable thead .sorting,
37
- table.dataTable thead .sorting_asc,
38
- table.dataTable thead .sorting_desc,
39
- table.dataTable thead .sorting_asc_disabled,
40
- table.dataTable thead .sorting_desc_disabled {
41
cursor: pointer;
42
*cursor: hand;
43
background-repeat: no-repeat;
44
background-position: center right;
45
}
46
- table.dataTable thead .sorting {
47
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAATCAYAAACZZ43PAAAAN0lEQVR4AWO4c+cORZhmBvyH4QEx4D86pqsB/3Fjwgb8J4RpaQBhPES8gE/z0ElI9M9MA1+gAAD5jWGc4eZ87AAAAABJRU5ErkJggg==); /*url("../images/sort_both.png");*/
48
}
49
- table.dataTable thead .sorting_asc {
50
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAATCAIAAAAWBRqYAAAABnRSTlMA3ADcANwpVcdiAAAAdUlEQVR4AWO4QyKgWMONG3eWrrh76xbRGtZvulPTdHfzVuI0nDl7p7XrblXD3Y7eu+fPE6FhwWKgaihasuIuAQ2Hj95pbENoqG+9e/QYbg3Xr9+ZPB2iFIGmzrp78yYODdt3gvxa24yCgCK79pAcD8NEw6gGAPv5+lejjyPQAAAAAElFTkSuQmCC); /*url("../images/sort_asc.png");*/
51
}
52
- table.dataTable thead .sorting_desc {
53
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAATCAIAAAAWBRqYAAAABnRSTlMA3ADcANwpVcdiAAAAcklEQVR4AWO4QyIY2hpGNezac6em6W5tMwoCimzfiUPDzZt3ps66W9WAgiZPv3v9Om4nHT12p74Vobqx7e7ho4T8sGQFQsOCxXcJe/r8+TsdvSDVrV13z5wlLpQ2bwX5fv0mooP11q07S1fcvXFjACMOAM7v+leNDkNAAAAAAElFTkSuQmCC); /*url("../images/sort_desc.png");*/
54
}
55
- table.dataTable thead .sorting_asc_disabled {
56
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAATCAYAAACZZ43PAAAALklEQVR4AWO4c+cORZhmBvyH4QEx4D86pqsB/3Fjwgb8J4RpZsDAJ6RRA0YNAAAd2DjFaOCLnQAAAABJRU5ErkJggg==); /*url("../images/sort_asc_disabled.png");*/
57
}
58
- table.dataTable thead .sorting_desc_disabled {
59
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAATCAYAAACZZ43PAAAALUlEQVR4AWO4c+cORZjqBowaMGrAf0KYlgYQNoToMMClma4GMKBrpqsB9E9IAFTzOMWpD7f6AAAAAElFTkSuQmCC); /*url("../images/sort_desc_disabled.png");*/
60
}
61
- table.dataTable tbody tr {
62
background-color: #ffffff;
63
}
64
- table.dataTable tbody tr.selected {
65
background-color: #B0BED9;
66
}
67
- table.dataTable tbody th,
68
- table.dataTable tbody td {
69
padding: 8px 10px;
70
}
71
- table.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td {
72
border-top: 1px solid #ddd;
73
}
74
- table.dataTable.row-border tbody tr:first-child th,
75
- table.dataTable.row-border tbody tr:first-child td, table.dataTable.display tbody tr:first-child th,
76
- table.dataTable.display tbody tr:first-child td {
77
border-top: none;
78
}
79
- table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td {
80
border-top: 1px solid #ddd;
81
border-right: 1px solid #ddd;
82
}
83
- table.dataTable.cell-border tbody tr th:first-child,
84
- table.dataTable.cell-border tbody tr td:first-child {
85
border-left: 1px solid #ddd;
86
}
87
- table.dataTable.cell-border tbody tr:first-child th,
88
- table.dataTable.cell-border tbody tr:first-child td {
89
border-top: none;
90
}
91
- table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd {
92
background-color: #f9f9f9;
93
}
94
- table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected {
95
background-color: #acbad4;
96
}
97
- table.dataTable.hover tbody tr:hover, table.dataTable.display tbody tr:hover {
98
background-color: #f6f6f6;
99
}
100
- table.dataTable.hover tbody tr:hover.selected, table.dataTable.display tbody tr:hover.selected {
101
background-color: #aab7d1;
102
}
103
- table.dataTable.order-column tbody tr > .sorting_1,
104
- table.dataTable.order-column tbody tr > .sorting_2,
105
- table.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1,
106
- table.dataTable.display tbody tr > .sorting_2,
107
- table.dataTable.display tbody tr > .sorting_3 {
108
background-color: #fafafa;
109
}
110
- table.dataTable.order-column tbody tr.selected > .sorting_1,
111
- table.dataTable.order-column tbody tr.selected > .sorting_2,
112
- table.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1,
113
- table.dataTable.display tbody tr.selected > .sorting_2,
114
- table.dataTable.display tbody tr.selected > .sorting_3 {
115
background-color: #acbad5;
116
}
117
- table.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 {
118
background-color: #f1f1f1;
119
}
120
- table.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 {
121
background-color: #f3f3f3;
122
}
123
- table.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 {
124
background-color: whitesmoke;
125
}
126
- table.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 {
127
background-color: #a6b4cd;
128
}
129
- table.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 {
130
background-color: #a8b5cf;
131
}
132
- table.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 {
133
background-color: #a9b7d1;
134
}
135
- table.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 {
136
background-color: #fafafa;
137
}
138
- table.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 {
139
background-color: #fcfcfc;
140
}
141
- table.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 {
142
background-color: #fefefe;
143
}
144
- table.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 {
145
background-color: #acbad5;
146
}
147
- table.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 {
148
background-color: #aebcd6;
149
}
150
- table.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 {
151
background-color: #afbdd8;
152
}
153
- table.dataTable.display tbody tr:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1 {
154
background-color: #eaeaea;
155
}
156
- table.dataTable.display tbody tr:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2 {
157
background-color: #ececec;
158
}
159
- table.dataTable.display tbody tr:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3 {
160
background-color: #efefef;
161
}
162
- table.dataTable.display tbody tr:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1 {
163
background-color: #a2aec7;
164
}
165
- table.dataTable.display tbody tr:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2 {
166
background-color: #a3b0c9;
167
}
168
- table.dataTable.display tbody tr:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3 {
169
background-color: #a5b2cb;
170
}
171
- table.dataTable.no-footer {
172
border-bottom: 1px solid #111;
173
}
174
- table.dataTable.nowrap th, table.dataTable.nowrap td {
175
white-space: nowrap;
176
}
177
- table.dataTable.compact thead th,
178
- table.dataTable.compact thead td {
179
padding: 4px 17px 4px 4px;
180
}
181
- table.dataTable.compact tfoot th,
182
- table.dataTable.compact tfoot td {
183
padding: 4px;
184
}
185
- table.dataTable.compact tbody th,
186
- table.dataTable.compact tbody td {
187
padding: 4px;
188
}
189
- table.dataTable th.dt-left,
190
- table.dataTable td.dt-left {
191
text-align: left;
192
}
193
- table.dataTable th.dt-center,
194
- table.dataTable td.dt-center,
195
- table.dataTable td.dataTables_empty {
196
text-align: center;
197
}
198
- table.dataTable th.dt-right,
199
- table.dataTable td.dt-right {
200
text-align: right;
201
}
202
- table.dataTable th.dt-justify,
203
- table.dataTable td.dt-justify {
204
text-align: justify;
205
}
206
- table.dataTable th.dt-nowrap,
207
- table.dataTable td.dt-nowrap {
208
white-space: nowrap;
209
}
210
- table.dataTable thead th.dt-head-left,
211
- table.dataTable thead td.dt-head-left,
212
- table.dataTable tfoot th.dt-head-left,
213
- table.dataTable tfoot td.dt-head-left {
214
text-align: left;
215
}
216
- table.dataTable thead th.dt-head-center,
217
- table.dataTable thead td.dt-head-center,
218
- table.dataTable tfoot th.dt-head-center,
219
- table.dataTable tfoot td.dt-head-center {
220
text-align: center;
221
}
222
- table.dataTable thead th.dt-head-right,
223
- table.dataTable thead td.dt-head-right,
224
- table.dataTable tfoot th.dt-head-right,
225
- table.dataTable tfoot td.dt-head-right {
226
text-align: right;
227
}
228
- table.dataTable thead th.dt-head-justify,
229
- table.dataTable thead td.dt-head-justify,
230
- table.dataTable tfoot th.dt-head-justify,
231
- table.dataTable tfoot td.dt-head-justify {
232
text-align: justify;
233
}
234
- table.dataTable thead th.dt-head-nowrap,
235
- table.dataTable thead td.dt-head-nowrap,
236
- table.dataTable tfoot th.dt-head-nowrap,
237
- table.dataTable tfoot td.dt-head-nowrap {
238
white-space: nowrap;
239
}
240
- table.dataTable tbody th.dt-body-left,
241
- table.dataTable tbody td.dt-body-left {
242
text-align: left;
243
}
244
- table.dataTable tbody th.dt-body-center,
245
- table.dataTable tbody td.dt-body-center {
246
text-align: center;
247
}
248
- table.dataTable tbody th.dt-body-right,
249
- table.dataTable tbody td.dt-body-right {
250
text-align: right;
251
}
252
- table.dataTable tbody th.dt-body-justify,
253
- table.dataTable tbody td.dt-body-justify {
254
text-align: justify;
255
}
256
- table.dataTable tbody th.dt-body-nowrap,
257
- table.dataTable tbody td.dt-body-nowrap {
258
white-space: nowrap;
259
}
260
261
- table.dataTable,
262
- table.dataTable th,
263
- table.dataTable td {
264
box-sizing: content-box;
265
}
266
267
/*
268
* Control feature layout
269
*/
270
- .dataTables_wrapper {
271
position: relative;
272
clear: both;
273
*zoom: 1;
274
zoom: 1;
275
}
276
- .dataTables_wrapper .dataTables_length {
277
float: left;
278
}
279
- .dataTables_wrapper .dataTables_filter {
280
float: right;
281
text-align: right;
282
}
283
- .dataTables_wrapper .dataTables_filter input {
284
margin-left: 0.5em;
285
}
286
- .dataTables_wrapper .dataTables_info {
287
clear: both;
288
float: left;
289
padding-top: 0.755em;
290
}
291
- .dataTables_wrapper .dataTables_paginate {
292
float: right;
293
text-align: right;
294