maxmind-geoip2 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -0
- data/README.md +10 -5
- data/lib/maxmind/geoip2/client.rb +18 -9
- data/lib/maxmind/geoip2/model/city.rb +4 -5
- data/lib/maxmind/geoip2/model/connection_type.rb +3 -2
- data/lib/maxmind/geoip2/model/enterprise.rb +2 -3
- data/lib/maxmind/geoip2/model/insights.rb +3 -5
- data/lib/maxmind/geoip2/record/traits.rb +39 -27
- data/lib/maxmind/geoip2/version.rb +8 -0
- data/maxmind-geoip2.gemspec +7 -2
- data/test/data/cmd/write-test-data/main.go +68 -0
- data/test/data/go.mod +13 -0
- data/test/data/go.sum +16 -0
- data/test/data/perltidyrc +6 -0
- data/test/data/pkg/writer/decoder.go +178 -0
- data/test/data/pkg/writer/geoip2.go +182 -0
- data/test/data/pkg/writer/ip.go +39 -0
- data/test/data/pkg/writer/maxmind.go +245 -0
- data/test/data/pkg/writer/nestedstructures.go +73 -0
- data/test/data/pkg/writer/writer.go +58 -0
- data/test/data/source-data/GeoIP2-City-Test.json +322 -1
- data/test/data/source-data/GeoIP2-Connection-Type-Test.json +15 -10
- data/test/data/source-data/GeoIP2-Country-Test.json +99 -0
- data/test/data/source-data/GeoIP2-Domain-Test.json +5 -0
- data/test/data/source-data/GeoIP2-Enterprise-Test.json +347 -1
- data/test/data/source-data/GeoIP2-Precision-Enterprise-Sandbox-Test.json +296 -0
- data/test/data/source-data/GeoIP2-Precision-Enterprise-Test.json +412 -2
- data/test/data/source-data/GeoIP2-Static-IP-Score-Test.json +15 -0
- data/test/data/source-data/GeoIP2-User-Count-Test.json +18 -0
- data/test/data/source-data/GeoLite2-City-Test.json +168 -0
- data/test/data/source-data/GeoLite2-Country-Test.json +92 -0
- data/test/data/test-data/GeoIP2-Anonymous-IP-Test.mmdb +0 -0
- data/test/data/test-data/GeoIP2-City-Test-Broken-Double-Format.mmdb +0 -0
- data/test/data/test-data/GeoIP2-City-Test-Invalid-Node-Count.mmdb +0 -0
- data/test/data/test-data/GeoIP2-City-Test.mmdb +0 -0
- data/test/data/test-data/GeoIP2-Connection-Type-Test.mmdb +0 -0
- data/test/data/test-data/GeoIP2-Country-Test.mmdb +0 -0
- data/test/data/test-data/GeoIP2-DensityIncome-Test.mmdb +0 -0
- data/test/data/test-data/GeoIP2-Domain-Test.mmdb +0 -0
- data/test/data/test-data/GeoIP2-Enterprise-Test.mmdb +0 -0
- data/test/data/test-data/GeoIP2-ISP-Test.mmdb +0 -0
- data/test/data/test-data/GeoIP2-Precision-Enterprise-Test.mmdb +0 -0
- data/test/data/test-data/GeoIP2-Static-IP-Score-Test.mmdb +0 -0
- data/test/data/test-data/GeoIP2-User-Count-Test.mmdb +0 -0
- data/test/data/test-data/GeoLite2-ASN-Test.mmdb +0 -0
- data/test/data/test-data/GeoLite2-City-Test.mmdb +0 -0
- data/test/data/test-data/GeoLite2-Country-Test.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-no-ipv4-search-tree.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-string-value-entries.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-broken-pointers-24.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-broken-search-tree-24.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-decoder.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-ipv4-24.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-ipv4-28.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-ipv4-32.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-ipv6-24.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-ipv6-28.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-ipv6-32.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-metadata-pointers.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-mixed-24.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-mixed-28.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-mixed-32.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-nested.mmdb +0 -0
- data/test/data/test-data/MaxMind-DB-test-pointer-decoder.mmdb +0 -0
- data/test/data/test-data/README.md +28 -12
- data/test/test_client.rb +18 -2
- data/test/test_reader.rb +19 -1
- metadata +16 -7
- data/test/data/source-data/README +0 -15
- data/test/data/test-data/write-test-data.pl +0 -695
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c1d04d352a8344e1e8d9c232ab7713bc0b74ddaa1e4a82aec61dbbf37bfd925
|
4
|
+
data.tar.gz: 20bcee370b35a4e098b48b36146eb7da9674f6c271ba94744a435addbd9c5e05
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0331f1fe319379d035bd4f8675f775bbe31f0d3747d2f9a65754523cb6718160237d5a232d54cad7cd00cdcfe5243ff0f8a39276d749948116fc974221eb3d8a
|
7
|
+
data.tar.gz: 1d3e2f6c9a5847671b4b86004c7407bacf25cb271674d7dd49c5217b15d20a307ba416ec19a5f04d2050925ee689a97f01ca899f2edcb611bb44c5ee1a13ba35
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 1.2.0 (2023-12-04)
|
4
|
+
|
5
|
+
* `MaxMind::GeoIP2::Client` now validates the IP address before making a
|
6
|
+
request to the web service.
|
7
|
+
* `MaxMind::GeoIP2::Client` now includes the version of Ruby, the version
|
8
|
+
of the HTTP client library, and its own version in the User-Agent header.
|
9
|
+
* The `anycast?` method was added to `MaxMind::GeoIP2::Record::Traits`.
|
10
|
+
This returns `true` if the IP address belongs to an [anycast
|
11
|
+
network](https://en.wikipedia.org/wiki/Anycast). This is available for
|
12
|
+
the GeoIP2 Country, City Plus, and Insights web services and the GeoIP2
|
13
|
+
Country, City, and Enterprise databases.
|
14
|
+
|
3
15
|
## 1.1.0 (2021-11-18)
|
4
16
|
|
5
17
|
* Exceptions from this gem now inherit from `MaxMind::GeoIP2::Error`. IP
|
data/README.md
CHANGED
@@ -228,14 +228,19 @@ client = MaxMind::GeoIP2::Client.new(
|
|
228
228
|
account_id: 42,
|
229
229
|
license_key: 'license_key',
|
230
230
|
|
231
|
-
# To use the GeoLite2 web service instead of GeoIP2
|
231
|
+
# To use the GeoLite2 web service instead of the GeoIP2 web service, set
|
232
232
|
# the host parameter to "geolite.info":
|
233
233
|
# host: 'geolite.info',
|
234
|
+
|
235
|
+
# To use the Sandbox GeoIP2 web service instead of the production GeoIP2
|
236
|
+
# web service, set the host parameter to "sandbox.maxmind.com":
|
237
|
+
# host: 'sandbox.maxmind.com',
|
234
238
|
)
|
235
239
|
|
236
240
|
# Replace "city" with the method corresponding to the web service that
|
237
241
|
# you are using, e.g., "country", "insights". Please note that Insights
|
238
|
-
# is only supported by GeoIP2
|
242
|
+
# is only supported by the GeoIP2 web service and not the GeoLite2 web
|
243
|
+
# service.
|
239
244
|
record = client.city('128.101.101.101')
|
240
245
|
|
241
246
|
puts record.country.iso_code # US
|
@@ -279,8 +284,8 @@ which can be populated vary between end points. In addition, while an end
|
|
279
284
|
point may offer a particular piece of data, MaxMind does not always have
|
280
285
|
every piece of data for any given IP address.
|
281
286
|
|
282
|
-
See the [GeoIP2
|
283
|
-
|
287
|
+
See the [GeoIP2 web service
|
288
|
+
documentation](https://dev.maxmind.com/geoip/docs/web-services?lang=en) for details on
|
284
289
|
what data each end point may return.
|
285
290
|
|
286
291
|
The only piece of data which is always returned is the `ip_address`
|
@@ -340,7 +345,7 @@ This library uses [Semantic Versioning](https://semver.org/).
|
|
340
345
|
|
341
346
|
## Copyright and License
|
342
347
|
|
343
|
-
This software is Copyright (c) 2020-
|
348
|
+
This software is Copyright (c) 2020-2023 by MaxMind, Inc.
|
344
349
|
|
345
350
|
This is free software, licensed under the [Apache License, Version
|
346
351
|
2.0](LICENSE-APACHE) or the [MIT License](LICENSE-MIT), at your option.
|
@@ -4,15 +4,17 @@ require 'connection_pool'
|
|
4
4
|
require 'http'
|
5
5
|
require 'json'
|
6
6
|
require 'maxmind/geoip2/errors'
|
7
|
+
require 'maxmind/geoip2/version'
|
7
8
|
require 'maxmind/geoip2/model/city'
|
8
9
|
require 'maxmind/geoip2/model/country'
|
9
10
|
require 'maxmind/geoip2/model/insights'
|
11
|
+
require 'resolv'
|
10
12
|
|
11
13
|
module MaxMind
|
12
14
|
module GeoIP2
|
13
15
|
# This class provides a client API for all the
|
14
|
-
# {https://dev.maxmind.com/geoip/docs/web-services?lang=en GeoIP2
|
15
|
-
# services}. The services are Country, City, and Insights. Each service
|
16
|
+
# {https://dev.maxmind.com/geoip/docs/web-services?lang=en GeoIP2 web
|
17
|
+
# services}. The services are Country, City Plus, and Insights. Each service
|
16
18
|
# returns a different set of data about an IP address, with Country returning
|
17
19
|
# the least data and Insights the most.
|
18
20
|
#
|
@@ -58,7 +60,7 @@ module MaxMind
|
|
58
60
|
# rubocop:disable Metrics/CyclomaticComplexity
|
59
61
|
# rubocop:disable Metrics/PerceivedComplexity
|
60
62
|
|
61
|
-
# Create a Client that may be used to query a GeoIP2
|
63
|
+
# Create a Client that may be used to query a GeoIP2 web service.
|
62
64
|
#
|
63
65
|
# Once created, the Client is safe to use for lookups from multiple
|
64
66
|
# threads.
|
@@ -71,8 +73,10 @@ module MaxMind
|
|
71
73
|
# property from most preferred to least preferred.
|
72
74
|
#
|
73
75
|
# @param host [String] the host to use when querying the web service. Set
|
74
|
-
# this to "geolite.info" to use the GeoLite2 web service instead of
|
75
|
-
# GeoIP2
|
76
|
+
# this to "geolite.info" to use the GeoLite2 web service instead of the
|
77
|
+
# GeoIP2 web service. Set this to "sandbox.maxmind.com" to use the
|
78
|
+
# Sandbox environment. The sandbox allows you to experiment with the
|
79
|
+
# API without affecting your production data.
|
76
80
|
#
|
77
81
|
# @param timeout [Integer] the number of seconds to wait for a request
|
78
82
|
# before timing out. If 0, no timeout is set.
|
@@ -117,7 +121,7 @@ module MaxMind
|
|
117
121
|
# rubocop:enable Metrics/CyclomaticComplexity
|
118
122
|
# rubocop:enable Metrics/ParameterLists
|
119
123
|
|
120
|
-
# This method calls the City web service.
|
124
|
+
# This method calls the City Plus web service.
|
121
125
|
#
|
122
126
|
# @param ip_address [String] IPv4 or IPv6 address as a string. If no
|
123
127
|
# address is provided, the address that the web service is called from is
|
@@ -193,8 +197,8 @@ module MaxMind
|
|
193
197
|
|
194
198
|
# This method calls the Insights web service.
|
195
199
|
#
|
196
|
-
# Insights is only supported by the GeoIP2
|
197
|
-
#
|
200
|
+
# Insights is only supported by the GeoIP2 web service. The GeoLite2 web
|
201
|
+
# service does not support it.
|
198
202
|
#
|
199
203
|
# @param ip_address [String] IPv4 or IPv6 address as a string. If no
|
200
204
|
# address is provided, the address that the web service is called from is
|
@@ -234,6 +238,10 @@ module MaxMind
|
|
234
238
|
private
|
235
239
|
|
236
240
|
def response_for(endpoint, model_class, ip_address)
|
241
|
+
if ip_address != 'me' && ip_address !~ Resolv::AddressRegex
|
242
|
+
raise AddressInvalidError, "The value \"#{ip_address}\" is not a valid IP address"
|
243
|
+
end
|
244
|
+
|
237
245
|
record = get(endpoint, ip_address)
|
238
246
|
|
239
247
|
model_class.new(record, @locales)
|
@@ -243,8 +251,9 @@ module MaxMind
|
|
243
251
|
headers = HTTP.basic_auth(user: @account_id, pass: @license_key)
|
244
252
|
.headers(
|
245
253
|
accept: 'application/json',
|
246
|
-
user_agent:
|
254
|
+
user_agent: "MaxMind-GeoIP2-ruby/#{VERSION} ruby/#{RUBY_VERSION} http/#{HTTP::VERSION}"
|
247
255
|
)
|
256
|
+
|
248
257
|
timeout = @timeout > 0 ? headers.timeout(@timeout) : headers
|
249
258
|
|
250
259
|
proxy = timeout
|
@@ -9,12 +9,11 @@ require 'maxmind/geoip2/record/subdivision'
|
|
9
9
|
module MaxMind
|
10
10
|
module GeoIP2
|
11
11
|
module Model
|
12
|
-
# Model class for the data returned by the GeoIP2 City web service
|
13
|
-
# database. It is also used for GeoLite2 City lookups.
|
12
|
+
# Model class for the data returned by the GeoIP2 City Plus web service
|
13
|
+
# and the City database. It is also used for GeoLite2 City lookups.
|
14
14
|
#
|
15
|
-
#
|
16
|
-
#
|
17
|
-
# https://dev.maxmind.com/geoip/docs/web-services?lang=en for more details.
|
15
|
+
# See https://dev.maxmind.com/geoip/docs/web-services?lang=en for more
|
16
|
+
# details.
|
18
17
|
#
|
19
18
|
# See {MaxMind::GeoIP2::Model::Country} for inherited methods.
|
20
19
|
class City < Country
|
@@ -7,8 +7,9 @@ module MaxMind
|
|
7
7
|
module Model
|
8
8
|
# Model class for the GeoIP2 Connection Type database.
|
9
9
|
class ConnectionType < Abstract
|
10
|
-
# The connection type may take the following values: "Dialup",
|
11
|
-
# "Corporate", "Cellular". Additional
|
10
|
+
# The connection type may take the following values: "Dialup",
|
11
|
+
# "Cable/DSL", "Corporate", "Cellular", and "Satellite". Additional
|
12
|
+
# values may be added in the future.
|
12
13
|
#
|
13
14
|
# @return [String, nil]
|
14
15
|
def connection_type
|
@@ -7,9 +7,8 @@ module MaxMind
|
|
7
7
|
module Model
|
8
8
|
# Model class for the data returned by GeoIP2 Enterprise database lookups.
|
9
9
|
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
# https://dev.maxmind.com/geoip/docs/web-services?lang=en for more details.
|
10
|
+
# See https://dev.maxmind.com/geoip/docs/web-services?lang=en for more
|
11
|
+
# details.
|
13
12
|
#
|
14
13
|
# See {MaxMind::GeoIP2::Model::City} for inherited methods.
|
15
14
|
class Enterprise < City
|
@@ -5,12 +5,10 @@ require 'maxmind/geoip2/model/city'
|
|
5
5
|
module MaxMind
|
6
6
|
module GeoIP2
|
7
7
|
module Model
|
8
|
-
# Model class for the data returned by the GeoIP2
|
9
|
-
# service.
|
8
|
+
# Model class for the data returned by the GeoIP2 Insights web service.
|
10
9
|
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
# https://dev.maxmind.com/geoip/docs/web-services?lang=en for more details.
|
10
|
+
# See https://dev.maxmind.com/geoip/docs/web-services?lang=en for more
|
11
|
+
# details.
|
14
12
|
class Insights < City
|
15
13
|
end
|
16
14
|
end
|
@@ -22,8 +22,8 @@ module MaxMind
|
|
22
22
|
|
23
23
|
# The autonomous system number associated with the IP address. See
|
24
24
|
# Wikipedia[https://en.wikipedia.org/wiki/Autonomous_system_(Internet)].
|
25
|
-
# This attribute is only available from the City and Insights web
|
26
|
-
# and the
|
25
|
+
# This attribute is only available from the City Plus and Insights web
|
26
|
+
# services and the Enterprise database.
|
27
27
|
#
|
28
28
|
# @return [Integer, nil]
|
29
29
|
def autonomous_system_number
|
@@ -33,8 +33,8 @@ module MaxMind
|
|
33
33
|
# The organization associated with the registered autonomous system number
|
34
34
|
# for the IP address. See
|
35
35
|
# Wikipedia[https://en.wikipedia.org/wiki/Autonomous_system_(Internet)].
|
36
|
-
# This attribute is only available from the City and Insights web
|
37
|
-
# and the
|
36
|
+
# This attribute is only available from the City Plus and Insights web
|
37
|
+
# services and the Enterprise database.
|
38
38
|
#
|
39
39
|
# @return [String, nil]
|
40
40
|
def autonomous_system_organization
|
@@ -42,8 +42,9 @@ module MaxMind
|
|
42
42
|
end
|
43
43
|
|
44
44
|
# The connection type may take the following values: "Dialup",
|
45
|
-
# "Cable/DSL", "Corporate", "Cellular". Additional
|
46
|
-
# the future. This attribute is only available
|
45
|
+
# "Cable/DSL", "Corporate", "Cellular", and "Satellite". Additional
|
46
|
+
# values may be added in the future. This attribute is only available
|
47
|
+
# from the City Plus and Insights web services and the Enterprise
|
47
48
|
# database.
|
48
49
|
#
|
49
50
|
# @return [String, nil]
|
@@ -53,8 +54,8 @@ module MaxMind
|
|
53
54
|
|
54
55
|
# The second level domain associated with the IP address. This will be
|
55
56
|
# something like "example.com" or "example.co.uk", not "foo.example.com".
|
56
|
-
# This attribute is only available from the City and Insights web
|
57
|
-
# and the
|
57
|
+
# This attribute is only available from the City Plus and Insights web
|
58
|
+
# services and the Enterprise database.
|
58
59
|
#
|
59
60
|
# @return [String, nil]
|
60
61
|
def domain
|
@@ -73,7 +74,7 @@ module MaxMind
|
|
73
74
|
end
|
74
75
|
|
75
76
|
# This is true if the IP address belongs to any sort of anonymous network.
|
76
|
-
# This property is only available from
|
77
|
+
# This property is only available from Insights.
|
77
78
|
#
|
78
79
|
# @return [Boolean]
|
79
80
|
def anonymous?
|
@@ -83,17 +84,28 @@ module MaxMind
|
|
83
84
|
# This is true if the IP address is registered to an anonymous VPN
|
84
85
|
# provider. If a VPN provider does not register subnets under names
|
85
86
|
# associated with them, we will likely only flag their IP ranges using the
|
86
|
-
# hosting_provider? property. This property is only available from
|
87
|
-
# Precision Insights.
|
87
|
+
# hosting_provider? property. This property is only available from Insights.
|
88
88
|
#
|
89
89
|
# @return [Boolean]
|
90
90
|
def anonymous_vpn?
|
91
91
|
get('is_anonymous_vpn')
|
92
92
|
end
|
93
93
|
|
94
|
+
# This is true if the IP address belongs to an
|
95
|
+
# {https://en.wikipedia.org/wiki/Anycast anycast network}.
|
96
|
+
#
|
97
|
+
# This property is only available from the Country, City Plus, and
|
98
|
+
# Insights web services and the GeoIP2 Country, City, and Enterprise
|
99
|
+
# databases.
|
100
|
+
#
|
101
|
+
# @return [Boolean]
|
102
|
+
def anycast?
|
103
|
+
get('is_anycast')
|
104
|
+
end
|
105
|
+
|
94
106
|
# This is true if the IP address belongs to a hosting or VPN provider (see
|
95
107
|
# description of the anonymous_vpn? property). This property is only
|
96
|
-
# available from
|
108
|
+
# available from Insights.
|
97
109
|
#
|
98
110
|
# @return [Boolean]
|
99
111
|
def hosting_provider?
|
@@ -102,7 +114,7 @@ module MaxMind
|
|
102
114
|
|
103
115
|
# This attribute is true if MaxMind believes this IP address to be a
|
104
116
|
# legitimate proxy, such as an internal VPN used by a corporation. This
|
105
|
-
# attribute is only available in the
|
117
|
+
# attribute is only available in the Enterprise database.
|
106
118
|
#
|
107
119
|
# @return [Boolean]
|
108
120
|
def legitimate_proxy?
|
@@ -112,8 +124,8 @@ module MaxMind
|
|
112
124
|
# The {https://en.wikipedia.org/wiki/Mobile_country_code mobile country
|
113
125
|
# code (MCC)} associated with the IP address and ISP.
|
114
126
|
#
|
115
|
-
# This attribute is only available from the City and Insights web
|
116
|
-
# and the
|
127
|
+
# This attribute is only available from the City Plus and Insights web
|
128
|
+
# services and the Enterprise database.
|
117
129
|
#
|
118
130
|
# @return [String, nil]
|
119
131
|
def mobile_country_code
|
@@ -123,8 +135,8 @@ module MaxMind
|
|
123
135
|
# The {https://en.wikipedia.org/wiki/Mobile_country_code mobile network
|
124
136
|
# code (MNC)} associated with the IP address and ISP.
|
125
137
|
#
|
126
|
-
# This attribute is only available from the City and Insights web
|
127
|
-
# and the
|
138
|
+
# This attribute is only available from the City Plus and Insights web
|
139
|
+
# services and the Enterprise database.
|
128
140
|
#
|
129
141
|
# @return [String, nil]
|
130
142
|
def mobile_network_code
|
@@ -132,7 +144,7 @@ module MaxMind
|
|
132
144
|
end
|
133
145
|
|
134
146
|
# This is true if the IP address belongs to a public proxy. This property
|
135
|
-
# is only available from
|
147
|
+
# is only available from Insights.
|
136
148
|
#
|
137
149
|
# @return [Boolean]
|
138
150
|
def public_proxy?
|
@@ -141,7 +153,7 @@ module MaxMind
|
|
141
153
|
|
142
154
|
# This is true if the IP address is on a suspected anonymizing network
|
143
155
|
# and belongs to a residential ISP. This property is only available
|
144
|
-
# from
|
156
|
+
# from Insights.
|
145
157
|
#
|
146
158
|
# @return [Boolean]
|
147
159
|
def residential_proxy?
|
@@ -149,7 +161,7 @@ module MaxMind
|
|
149
161
|
end
|
150
162
|
|
151
163
|
# This is true if the IP address is a Tor exit node. This property is only
|
152
|
-
# available from
|
164
|
+
# available from Insights.
|
153
165
|
#
|
154
166
|
# @return [Boolean]
|
155
167
|
def tor_exit_node?
|
@@ -157,7 +169,7 @@ module MaxMind
|
|
157
169
|
end
|
158
170
|
|
159
171
|
# The name of the ISP associated with the IP address. This attribute is
|
160
|
-
# only available from the City and Insights web services and the
|
172
|
+
# only available from the City Plus and Insights web services and the
|
161
173
|
# Enterprise database.
|
162
174
|
#
|
163
175
|
# @return [String, nil]
|
@@ -175,8 +187,8 @@ module MaxMind
|
|
175
187
|
end
|
176
188
|
|
177
189
|
# The name of the organization associated with the IP address. This
|
178
|
-
# attribute is only available from the City and Insights web services
|
179
|
-
# the
|
190
|
+
# attribute is only available from the City Plus and Insights web services
|
191
|
+
# and the Enterprise database.
|
180
192
|
#
|
181
193
|
# @return [String, nil]
|
182
194
|
def organization
|
@@ -184,7 +196,7 @@ module MaxMind
|
|
184
196
|
end
|
185
197
|
|
186
198
|
# An indicator of how static or dynamic an IP address is. This property is
|
187
|
-
# only available from
|
199
|
+
# only available from Insights.
|
188
200
|
#
|
189
201
|
# @return [Float, nil]
|
190
202
|
def static_ip_score
|
@@ -193,8 +205,7 @@ module MaxMind
|
|
193
205
|
|
194
206
|
# The estimated number of users sharing the IP/network during the past 24
|
195
207
|
# hours. For IPv4, the count is for the individual IP. For IPv6, the count
|
196
|
-
# is for the /64 network. This property is only available from
|
197
|
-
# Precision Insights.
|
208
|
+
# is for the /64 network. This property is only available from Insights.
|
198
209
|
#
|
199
210
|
# @return [Integer, nil]
|
200
211
|
def user_count
|
@@ -208,6 +219,7 @@ module MaxMind
|
|
208
219
|
# * cafe
|
209
220
|
# * cellular
|
210
221
|
# * college
|
222
|
+
# * consumer_privacy_network
|
211
223
|
# * content_delivery_network
|
212
224
|
# * dialup
|
213
225
|
# * government
|
@@ -221,7 +233,7 @@ module MaxMind
|
|
221
233
|
# * traveler
|
222
234
|
#
|
223
235
|
# This attribute is only available from the Insights web service and the
|
224
|
-
#
|
236
|
+
# Enterprise database.
|
225
237
|
#
|
226
238
|
# @return [String, nil]
|
227
239
|
def user_type
|
data/maxmind-geoip2.gemspec
CHANGED
@@ -1,11 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
|
6
|
+
require 'maxmind/geoip2/version'
|
7
|
+
|
3
8
|
Gem::Specification.new do |s|
|
4
9
|
s.authors = ['William Storey']
|
5
10
|
s.files = Dir['**/*']
|
6
11
|
s.name = 'maxmind-geoip2'
|
7
12
|
s.summary = 'A gem for interacting with the GeoIP2 webservices and databases.'
|
8
|
-
s.version =
|
13
|
+
s.version = MaxMind::GeoIP2::VERSION
|
9
14
|
|
10
15
|
s.description = 'A gem for interacting with the GeoIP2 webservices and databases. MaxMind provides geolocation data as downloadable databases as well as through a webservice.'
|
11
16
|
s.email = 'support@maxmind.com'
|
@@ -23,7 +28,7 @@ Gem::Specification.new do |s|
|
|
23
28
|
|
24
29
|
s.add_runtime_dependency 'connection_pool', ['~> 2.2']
|
25
30
|
s.add_runtime_dependency 'http', '>= 4.3', '< 6.0'
|
26
|
-
s.add_runtime_dependency 'maxmind-db', ['~> 1.
|
31
|
+
s.add_runtime_dependency 'maxmind-db', ['~> 1.2']
|
27
32
|
|
28
33
|
s.add_development_dependency 'minitest'
|
29
34
|
s.add_development_dependency 'rake'
|
@@ -0,0 +1,68 @@
|
|
1
|
+
// write-test-data generates test mmdb files.
|
2
|
+
package main
|
3
|
+
|
4
|
+
import (
|
5
|
+
"flag"
|
6
|
+
"fmt"
|
7
|
+
"os"
|
8
|
+
|
9
|
+
"github.com/maxmind/MaxMind-DB/pkg/writer"
|
10
|
+
)
|
11
|
+
|
12
|
+
func main() {
|
13
|
+
source := flag.String("source", "", "Source data directory")
|
14
|
+
target := flag.String("target", "", "Destination directory for the generated mmdb files")
|
15
|
+
|
16
|
+
flag.Parse()
|
17
|
+
|
18
|
+
w, err := writer.New(*source, *target)
|
19
|
+
if err != nil {
|
20
|
+
fmt.Printf("creating writer: %+v\n", err)
|
21
|
+
os.Exit(1)
|
22
|
+
}
|
23
|
+
|
24
|
+
if err := w.WriteIPv4TestDB(); err != nil {
|
25
|
+
fmt.Printf("writing IPv4 test databases: %+v\n", err)
|
26
|
+
os.Exit(1)
|
27
|
+
}
|
28
|
+
|
29
|
+
if err := w.WriteIPv6TestDB(); err != nil {
|
30
|
+
fmt.Printf("writing IPv6 test databases: %+v\n", err)
|
31
|
+
os.Exit(1)
|
32
|
+
}
|
33
|
+
|
34
|
+
if err := w.WriteMixedIPTestDB(); err != nil {
|
35
|
+
fmt.Printf("writing IPv6 test databases: %+v\n", err)
|
36
|
+
os.Exit(1)
|
37
|
+
}
|
38
|
+
|
39
|
+
if err := w.WriteNoIPv4TestDB(); err != nil {
|
40
|
+
fmt.Printf("writing no IPv4 test databases: %+v\n", err)
|
41
|
+
os.Exit(1)
|
42
|
+
}
|
43
|
+
|
44
|
+
if err := w.WriteNoMapTestDB(); err != nil {
|
45
|
+
fmt.Printf("writing no map test databases: %+v\n", err)
|
46
|
+
os.Exit(1)
|
47
|
+
}
|
48
|
+
|
49
|
+
if err := w.WriteMetadataPointersTestDB(); err != nil {
|
50
|
+
fmt.Printf("writing metadata pointers test databases: %+v\n", err)
|
51
|
+
os.Exit(1)
|
52
|
+
}
|
53
|
+
|
54
|
+
if err := w.WriteDecoderTestDB(); err != nil {
|
55
|
+
fmt.Printf("writing decoder test databases: %+v\n", err)
|
56
|
+
os.Exit(1)
|
57
|
+
}
|
58
|
+
|
59
|
+
if err := w.WriteDeeplyNestedStructuresTestDB(); err != nil {
|
60
|
+
fmt.Printf("writing decoder test databases: %+v\n", err)
|
61
|
+
os.Exit(1)
|
62
|
+
}
|
63
|
+
|
64
|
+
if err := w.WriteGeoIP2TestDB(); err != nil {
|
65
|
+
fmt.Printf("writing GeoIP2 test databases: %+v\n", err)
|
66
|
+
os.Exit(1)
|
67
|
+
}
|
68
|
+
}
|
data/test/data/go.mod
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
module github.com/maxmind/MaxMind-DB
|
2
|
+
|
3
|
+
go 1.21
|
4
|
+
|
5
|
+
require (
|
6
|
+
github.com/maxmind/mmdbwriter v1.0.0
|
7
|
+
go4.org/netipx v0.0.0-20230824141953-6213f710f925
|
8
|
+
)
|
9
|
+
|
10
|
+
require (
|
11
|
+
github.com/oschwald/maxminddb-golang v1.12.0 // indirect
|
12
|
+
golang.org/x/sys v0.10.0 // indirect
|
13
|
+
)
|
data/test/data/go.sum
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
2
|
+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
3
|
+
github.com/maxmind/mmdbwriter v1.0.0 h1:bieL4P6yaYaHvbtLSwnKtEvScUKKD6jcKaLiTM3WSMw=
|
4
|
+
github.com/maxmind/mmdbwriter v1.0.0/go.mod h1:noBMCUtyN5PUQ4H8ikkOvGSHhzhLok51fON2hcrpKj8=
|
5
|
+
github.com/oschwald/maxminddb-golang v1.12.0 h1:9FnTOD0YOhP7DGxGsq4glzpGy5+w7pq50AS6wALUMYs=
|
6
|
+
github.com/oschwald/maxminddb-golang v1.12.0/go.mod h1:q0Nob5lTCqyQ8WT6FYgS1L7PXKVVbgiymefNwIjPzgY=
|
7
|
+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
8
|
+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
9
|
+
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
10
|
+
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
11
|
+
go4.org/netipx v0.0.0-20230824141953-6213f710f925 h1:eeQDDVKFkx0g4Hyy8pHgmZaK0EqB4SD6rvKbUdN3ziQ=
|
12
|
+
go4.org/netipx v0.0.0-20230824141953-6213f710f925/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y=
|
13
|
+
golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA=
|
14
|
+
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
15
|
+
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
16
|
+
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
data/test/data/perltidyrc
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
--blank-lines-before-packages=0
|
2
2
|
--iterations=2
|
3
3
|
--no-outdent-long-comments
|
4
|
+
--weld-nested-containers
|
4
5
|
-b
|
5
6
|
-bar
|
6
7
|
-boc
|
@@ -10,3 +11,8 @@
|
|
10
11
|
-nolq
|
11
12
|
-se
|
12
13
|
-wbb="% + - * / x != == >= <= =~ !~ < > | & >= < = **= += *= &= <<= &&= -= /= |= >>= ||= .= %= ^= x="
|
14
|
+
--character-encoding=utf8
|
15
|
+
--valign-exclusion-list="q"
|
16
|
+
--want-trailing-commas=m
|
17
|
+
--add-trailing-commas
|
18
|
+
--delete-repeated-commas
|