diff --git a/.github/workflows/generate-doc.yml b/.github/workflows/generate-doc.yml new file mode 100644 index 0000000..9284f9d --- /dev/null +++ b/.github/workflows/generate-doc.yml @@ -0,0 +1,20 @@ +name: Generate Readme Doc +on: + workflow_dispatch: + push: + paths: + - '*.json' + - 'readme.html' + - 'manual_readme_content.md' + tags-ignore: + - '**' + branches-ignore: + - next + - main +jobs: + generate-doc: + runs-on: ubuntu-latest + steps: + - uses: 'phantomcyber/dev-cicd-tools/github-actions/generate-doc@main' + with: + GITHUB_TOKEN: ${{ secrets.SOAR_APPS_TOKEN }} diff --git a/.github/workflows/review-release.yml b/.github/workflows/review-release.yml new file mode 100644 index 0000000..6f3bf31 --- /dev/null +++ b/.github/workflows/review-release.yml @@ -0,0 +1,22 @@ +name: Review Release +concurrency: + group: app-release + cancel-in-progress: true +permissions: + contents: read + id-token: write + statuses: write +on: + workflow_dispatch: + inputs: + task_token: + description: 'StepFunction task token' + required: true + +jobs: + review: + uses: 'phantomcyber/dev-cicd-tools/.github/workflows/review-release.yml@main' + with: + task_token: ${{ inputs.task_token }} + secrets: + resume_release_role_arn: ${{ secrets.RESUME_RELEASE_ROLE_ARN }} diff --git a/.github/workflows/start-release.yml b/.github/workflows/start-release.yml index 7d47230..7bbce79 100644 --- a/.github/workflows/start-release.yml +++ b/.github/workflows/start-release.yml @@ -1,5 +1,9 @@ name: Start Release -on: workflow_dispatch +on: + workflow_dispatch: + push: + tags: + - '*-beta*' jobs: start-release: runs-on: ubuntu-latest diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 8dec7a3..44ea29c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,11 +1,11 @@ repos: - repo: https://github.com/phantomcyber/dev-cicd-tools - rev: v1.6 + rev: v1.17 hooks: - id: org-hook - id: package-app-dependencies - repo: https://github.com/Yelp/detect-secrets - rev: v1.1.0 + rev: v1.4.0 hooks: - id: detect-secrets args: ['--no-verify', '--exclude-files', '^maxmind.json$'] diff --git a/LICENSE b/LICENSE index 56c8192..b7b3c69 100644 --- a/LICENSE +++ b/LICENSE @@ -186,7 +186,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2021 Splunk Inc. + Copyright (c) 2016-2024 Splunk Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -198,4 +198,4 @@ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and - limitations under the License. + limitations under the License. \ No newline at end of file diff --git a/NOTICE b/NOTICE index 6b7a47f..e205c45 100644 --- a/NOTICE +++ b/NOTICE @@ -1,18 +1,18 @@ Splunk SOAR MaxMind -Copyright (c) 2016-2020 Splunk Inc. +Copyright (c) 2016-2024 Splunk Inc. Third-party Software Attributions: -Library: certifi -Version: 2019.11.28 -License: Mozilla 2.0 -PyPA - Library: geoip2 Version: 2.9.0 License: Apache 2.0 MaxMind +Library: maxminddb +Version: 1.5.1 +License: Apache 2.0 +MaxMind + Library: idna Version: 2.8 License: BSD 3 @@ -20,11 +20,6 @@ Copyright 1991-2014 Unicode, Inc Copyright 2001-2014 Python Software Foundation; All Rights Reserved Copyright 2013-2018 Kim Davies -Library: maxminddb -Version: 1.5.1 -License: Apache 2.0 -MaxMind - Library: python-dateutil Version: 2.8.1 License: Apache 2.0 @@ -37,11 +32,6 @@ Copyright 2015 - dateutil contributors (see AUTHORS file) Copyright 2017 Paul Ganssle Copyright 2017 dateutil contributors (see AUTHORS file) -Library: requests -Version: 2.26.0 -License: Apache 2.0 -Kenneth Reitz - Library: urllib3 Version: 1.26.6 License: MIT diff --git a/README.md b/README.md index 2909433..940ceb1 100644 --- a/README.md +++ b/README.md @@ -2,16 +2,16 @@ # MaxMind Publisher: Splunk -Connector Version: 2\.2\.5 +Connector Version: 2.2.6 Product Vendor: MaxMind Product Name: GeoIP2 -Product Version Supported (regex): "\.\*" -Minimum Product Version: 5\.0\.0 +Product Version Supported (regex): ".\*" +Minimum Product Version: 5.2.0 This app provides IP geolocation with the included MaxMind database [comment]: # " File: README.md" -[comment]: # "Copyright (c) 2016-2020 Splunk Inc." +[comment]: # "Copyright (c) 2016-2024 Splunk Inc." [comment]: # "" [comment]: # "Licensed under the Apache License, Version 2.0 (the 'License');" [comment]: # "you may not use this file except in compliance with the License." @@ -74,17 +74,17 @@ The below configuration variables are required for this Connector to operate. T VARIABLE | REQUIRED | TYPE | DESCRIPTION -------- | -------- | ---- | ----------- -**ip\_address** | optional | string | IP Address for testing connectivity \(default\: 8\.8\.8\.8\) -**license\_key** | optional | password | MaxMind License key to download new databases +**ip_address** | optional | string | IP Address for testing connectivity (default: 8.8.8.8) +**license_key** | optional | password | MaxMind License key to download new databases ### Supported Actions -[test connectivity](#action-test-connectivity) - Validate the asset configuration for connectivity\. This action queries the MaxMind DB for the IP mentioned in the configuration parameters +[test connectivity](#action-test-connectivity) - Validate the asset configuration for connectivity. This action queries the MaxMind DB for the IP mentioned in the configuration parameters [geolocate ip](#action-geolocate-ip) - Queries MaxMind for IP location info [update data](#action-update-data) - Update database used to locate an ip [on poll](#action-on-poll) - Update the database if there is a newer one on the server ## action: 'test connectivity' -Validate the asset configuration for connectivity\. This action queries the MaxMind DB for the IP mentioned in the configuration parameters +Validate the asset configuration for connectivity. This action queries the MaxMind DB for the IP mentioned in the configuration parameters Type: **test** Read only: **True** @@ -107,28 +107,28 @@ PARAMETER | REQUIRED | DESCRIPTION | TYPE | CONTAINS **ip** | required | IP to geolocate | string | `ip` #### Action Output -DATA PATH | TYPE | CONTAINS ---------- | ---- | -------- -action\_result\.status | string | -action\_result\.data\.\*\.continent\_name | string | -action\_result\.data\.\*\.country\_iso\_code | string | -action\_result\.data\.\*\.country\_name | string | -action\_result\.data\.\*\.latitude | numeric | -action\_result\.data\.\*\.longitude | numeric | -action\_result\.parameter\.ip | string | `ip` -action\_result\.parameter\.ip | string | `ip` -action\_result\.data\.\*\.city\_name | string | -action\_result\.data\.\*\.postal\_code | string | -action\_result\.data\.\*\.as\_org | string | -action\_result\.data\.\*\.state\_iso\_code | string | -action\_result\.data\.\*\.state\_name | string | -action\_result\.data\.\*\.time\_zone | string | -action\_result\.summary\.city | string | -action\_result\.summary\.state | string | -action\_result\.summary\.country | string | -action\_result\.message | string | -summary\.total\_objects | numeric | -summary\.total\_objects\_successful | numeric | +DATA PATH | TYPE | CONTAINS | EXAMPLE VALUES +--------- | ---- | -------- | -------------- +action_result.status | string | | success failed +action_result.data.\*.continent_name | string | | Asia +action_result.data.\*.country_iso_code | string | | IN +action_result.data.\*.country_name | string | | India +action_result.data.\*.latitude | numeric | | 23.0333 +action_result.data.\*.longitude | numeric | | 72.6167 +action_result.parameter.ip | string | `ip` | 203.88.139.34 +action_result.parameter.ip | string | `ip` | 203.88.139.34 +action_result.data.\*.city_name | string | | Ahmedabad +action_result.data.\*.postal_code | string | | 380007 +action_result.data.\*.as_org | string | | +action_result.data.\*.state_iso_code | string | | GJ +action_result.data.\*.state_name | string | | Gujarat +action_result.data.\*.time_zone | string | | Asia/Kolkata +action_result.summary.city | string | | Ahmedabad +action_result.summary.state | string | | GJ +action_result.summary.country | string | | India +action_result.message | string | | City: Ahmedabad, State: GJ, Country: India +summary.total_objects | numeric | | 1 +summary.total_objects_successful | numeric | | 1 ## action: 'update data' Update database used to locate an ip @@ -136,35 +136,35 @@ Update database used to locate an ip Type: **generic** Read only: **False** -This app uses the MaxMind GeoLite2 City database\. +This app uses the MaxMind GeoLite2 City database. #### Action Parameters No parameters are required for this action #### Action Output -DATA PATH | TYPE | CONTAINS ---------- | ---- | -------- -action\_result\.status | string | -action\_result\.data\.\*\.Date | string | -action\_result\.data\.\*\.ETag | string | -action\_result\.data\.\*\.Vary | string | -action\_result\.data\.\*\.CF\-Ray | string | -action\_result\.data\.\*\.Server | string | -action\_result\.data\.\*\.Expires | string | -action\_result\.data\.\*\.expect\-ct | string | -action\_result\.data\.\*\.Connection | string | -action\_result\.data\.\*\.Content\-Type | string | -action\_result\.data\.\*\.Accept\-Ranges | string | -action\_result\.data\.\*\.Cache\-Control | string | -action\_result\.data\.\*\.Last\-Modified | string | -action\_result\.data\.\*\.Content\-Length | string | -action\_result\.data\.\*\.CF\-Cache\-Status | string | -action\_result\.data\.\*\.X\-MaxMind\-Worker | string | -action\_result\.data\.\*\.Content\-Disposition | string | -action\_result\.message | string | -action\_result\.summary | string | -summary\.total\_objects | numeric | -summary\.total\_objects\_successful | numeric | +DATA PATH | TYPE | CONTAINS | EXAMPLE VALUES +--------- | ---- | -------- | -------------- +action_result.status | string | | success failed +action_result.data.\*.Date | string | | Mon, 03 Jan 2022 19:37:02 GMT +action_result.data.\*.ETag | string | | a3fd54f5dae1d3760e32ee743e21ffbc +action_result.data.\*.Vary | string | | Accept-Encoding +action_result.data.\*.CF-Ray | string | | 6c7eadeaee340899-SEA +action_result.data.\*.Server | string | | cloudflare +action_result.data.\*.Expires | string | | Mon, 03 Jan 2022 19:37:02 GMT +action_result.data.\*.expect-ct | string | | max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" +action_result.data.\*.Connection | string | | keep-alive +action_result.data.\*.Content-Type | string | | application/gzip +action_result.data.\*.Accept-Ranges | string | | bytes +action_result.data.\*.Cache-Control | string | | private, max-age=0 +action_result.data.\*.Last-Modified | string | | Tue, 28 Dec 2021 17:52:24 GMT +action_result.data.\*.Content-Length | string | | 35748628 +action_result.data.\*.CF-Cache-Status | string | | DYNAMIC +action_result.data.\*.X-MaxMind-Worker | string | | enabled +action_result.data.\*.Content-Disposition | string | | attachment; filename=GeoLite2-City_20211228.tar.gz +action_result.message | string | | Successfully updated database. +action_result.summary | string | | +summary.total_objects | numeric | | 1 +summary.total_objects_successful | numeric | | 1 ## action: 'on poll' Update the database if there is a newer one on the server @@ -175,11 +175,11 @@ Read only: **True** #### Action Parameters PARAMETER | REQUIRED | DESCRIPTION | TYPE | CONTAINS --------- | -------- | ----------- | ---- | -------- -**container\_id** | optional | Container IDs to limit the ingestion to | string | -**start\_time** | optional | Start of time range, in epoch time \(milliseconds\) | numeric | -**end\_time** | optional | End of time range, in epoch time \(milliseconds\) | numeric | -**container\_count** | optional | Maximum number of container records to query for | numeric | -**artifact\_count** | optional | Maximum number of artifact records to query for | numeric | +**container_id** | optional | Container IDs to limit the ingestion to | string | +**start_time** | optional | Start of time range, in epoch time (milliseconds) | numeric | +**end_time** | optional | End of time range, in epoch time (milliseconds) | numeric | +**container_count** | optional | Maximum number of container records to query for | numeric | +**artifact_count** | optional | Maximum number of artifact records to query for | numeric | #### Action Output No Output \ No newline at end of file diff --git a/__init__.py b/__init__.py index 16af8e7..d7d82bb 100644 --- a/__init__.py +++ b/__init__.py @@ -1,6 +1,6 @@ # File: __init__.py # -# Copyright (c) 2016-2020 Splunk Inc. +# Copyright (c) 2016-2024 Splunk Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/manual_readme_content.md b/manual_readme_content.md new file mode 100644 index 0000000..5737840 --- /dev/null +++ b/manual_readme_content.md @@ -0,0 +1,57 @@ +[comment]: # " File: README.md" +[comment]: # "Copyright (c) 2016-2024 Splunk Inc." +[comment]: # "" +[comment]: # "Licensed under the Apache License, Version 2.0 (the 'License');" +[comment]: # "you may not use this file except in compliance with the License." +[comment]: # "You may obtain a copy of the License at" +[comment]: # "" +[comment]: # " http://www.apache.org/licenses/LICENSE-2.0" +[comment]: # "" +[comment]: # "Unless required by applicable law or agreed to in writing, software distributed under" +[comment]: # "the License is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND," +[comment]: # "either express or implied. See the License for the specific language governing permissions" +[comment]: # "and limitations under the License." +[comment]: # "" +## Getting a MaxMind license key + +Navigate to [MaxMind site](https://www.maxmind.com/) \> Manage License Keys \> Create OR Get a +license key here + +NOTE: You need to be logged in to see the option **Manage License Keys** + +## Inputting Google API Key (OPTIONAL) + +Navigate to Administration \> Administration Settings \> Google Maps. From there, insert the API +key. + +This will be used to display a map widget. + +## geoip2 + +This app makes use of the Python geoip2 module, which is licensed under the Apache 2.0 License, +Copyright (c) 2018 + +## POLL NOW + +POLL NOW can be used to investigate what gets run on each poll during ingestion. + +IMPORTANT: LicenseKey is required to be specified in your asset. It's used to fetch the latest +MaxMind database. + +For more info on what gets run on each poll, see "Scheduled Polling" below. + +## Scheduled Polling + +This mode is used to schedule a polling action on the asset at regular intervals, which is +configured via the INGEST SETTINGS tab of the asset. + +In the case of Scheduled Polling, on every poll, the app compares the timestamp of the current +database with the one on MaxMind server. The app will download the database from the server only if +the server has a newer database. With this check, the app can avoid downloading a duplicate database +and stay within the daily MaxMind download limit. As of September 14, 2021, each account can perform +up to 2,000 total downloads in each 24 hour period. For more info, visit +[here](https://support.maxmind.com/geoip-faq/databases-and-database-updates/is-there-a-limit-to-how-often-i-can-download-a-database-from-my-maxmind-account/) + +It's recommended to run the database update every 30 days. The schedule of the database update can +be found +[here](https://support.maxmind.com/geoip-faq/databases-and-database-updates/how-often-should-i-purchase-geoip2-or-geoip-legacy-database-updates/) diff --git a/maxmind.json b/maxmind.json index 0e2a594..4450e7b 100644 --- a/maxmind.json +++ b/maxmind.json @@ -5,13 +5,13 @@ "type": "information", "publisher": "Splunk", "main_module": "maxmind_connector.py", - "app_version": "2.2.5", - "utctime_updated": "2022-01-11T21:27:07.000000Z", + "app_version": "2.2.6", + "utctime_updated": "2022-04-26T17:17:54.000000Z", "package_name": "phantom_maxmind", "product_name": "GeoIP2", "product_vendor": "MaxMind", "product_version_regex": ".*", - "min_phantom_version": "5.0.0", + "min_phantom_version": "5.2.0", "fips_compliant": true, "latest_tested_versions": [ "GeoLite2-City MMDB Updated 2020-11-03" @@ -32,25 +32,13 @@ "consolidate_widgets": false, "logo": "logo_maxmind.svg", "logo_dark": "logo_maxmind_dark.svg", - "license": "Copyright (c) 2016-2020 Splunk Inc.", + "license": "Copyright (c) 2016-2024 Splunk Inc.", "pip_dependencies": { "wheel": [ - { - "module": "certifi", - "input_file": "wheels/shared/certifi-2019.11.28-py2.py3-none-any.whl" - }, - { - "module": "chardet", - "input_file": "wheels/shared/chardet-4.0.0-py2.py3-none-any.whl" - }, { "module": "geoip2", "input_file": "wheels/shared/geoip2-2.9.0-py2.py3-none-any.whl" }, - { - "module": "idna", - "input_file": "wheels/shared/idna-2.8-py2.py3-none-any.whl" - }, { "module": "ipaddress", "input_file": "wheels/shared/ipaddress-1.0.23-py2.py3-none-any.whl" @@ -63,57 +51,13 @@ "module": "python_dateutil", "input_file": "wheels/shared/python_dateutil-2.8.1-py2.py3-none-any.whl" }, - { - "module": "requests", - "input_file": "wheels/shared/requests-2.26.0-py2.py3-none-any.whl" - }, - { - "module": "six", - "input_file": "wheels/shared/six-1.16.0-py2.py3-none-any.whl" - }, - { - "module": "urllib3", - "input_file": "wheels/shared/urllib3-1.26.6-py2.py3-none-any.whl" - } - ] - }, - "pip3_dependencies": { - "wheel": [ - { - "module": "certifi", - "input_file": "wheels/shared/certifi-2019.11.28-py2.py3-none-any.whl" - }, - { - "module": "charset_normalizer", - "input_file": "wheels/py3/charset_normalizer-2.0.9-py3-none-any.whl" - }, - { - "module": "geoip2", - "input_file": "wheels/shared/geoip2-2.9.0-py2.py3-none-any.whl" - }, - { - "module": "idna", - "input_file": "wheels/shared/idna-2.8-py2.py3-none-any.whl" - }, - { - "module": "maxminddb", - "input_file": "wheels/py3/maxminddb-1.5.1-py3-none-any.whl" - }, - { - "module": "python_dateutil", - "input_file": "wheels/shared/python_dateutil-2.8.1-py2.py3-none-any.whl" - }, - { - "module": "requests", - "input_file": "wheels/shared/requests-2.26.0-py2.py3-none-any.whl" - }, { "module": "six", "input_file": "wheels/shared/six-1.16.0-py2.py3-none-any.whl" }, { "module": "urllib3", - "input_file": "wheels/shared/urllib3-1.26.6-py2.py3-none-any.whl" + "input_file": "wheels/shared/urllib3-1.26.18-py2.py3-none-any.whl" } ] }, @@ -519,5 +463,33 @@ "output": [], "versions": "EQ(*)" } - ] -} \ No newline at end of file + ], + "pip39_dependencies": { + "wheel": [ + { + "module": "geoip2", + "input_file": "wheels/shared/geoip2-2.9.0-py2.py3-none-any.whl" + }, + { + "module": "idna", + "input_file": "wheels/shared/idna-2.8-py2.py3-none-any.whl" + }, + { + "module": "maxminddb", + "input_file": "wheels/py3/maxminddb-1.5.1-py3-none-any.whl" + }, + { + "module": "python_dateutil", + "input_file": "wheels/shared/python_dateutil-2.8.1-py2.py3-none-any.whl" + }, + { + "module": "six", + "input_file": "wheels/shared/six-1.16.0-py2.py3-none-any.whl" + }, + { + "module": "urllib3", + "input_file": "wheels/shared/urllib3-1.26.18-py2.py3-none-any.whl" + } + ] + } +} diff --git a/maxmind_connector.py b/maxmind_connector.py index 9d509c9..9eac279 100644 --- a/maxmind_connector.py +++ b/maxmind_connector.py @@ -1,6 +1,6 @@ # File: maxmind_connector.py # -# Copyright (c) 2016-2020 Splunk Inc. +# Copyright (c) 2016-2024 Splunk Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -93,7 +93,7 @@ def _handle_test_connectivity(self, param): # Create a ActionResult object to store the result self.save_progress('In action handler for: {0}'.format(self.get_action_identifier())) - self.save_progress('Querying the Maxmind DB for the IP: {}'.format(self._ip_address)) + self.save_progress('Querying the MaxMind DB for the IP: {}'.format(self._ip_address)) try: _ = self.reader.city(self._ip_address) diff --git a/maxmind_consts.py b/maxmind_consts.py index 8550e55..20f97c7 100644 --- a/maxmind_consts.py +++ b/maxmind_consts.py @@ -1,6 +1,6 @@ # File: maxmind_consts.py # -# Copyright (c) 2016-2020 Splunk Inc. +# Copyright (c) 2016-2024 Splunk Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -22,7 +22,6 @@ MAXMIND_SUCCESS_MSG_IP_FOUND = "Successfully able to query the MaxMind DB for the IP: '{ip}'" MAXMIND_ERR_IP_NOT_FOUND = "IP not found" -MAXMIND_SUCC_IP_FOUND = "IP found" MAXMIND_DEFAULT_IP_CONNECTIVITY = "8.8.8.8" # Jsons used either in params or result diff --git a/readme.html b/readme.html deleted file mode 100644 index 8ff0e2d..0000000 --- a/readme.html +++ /dev/null @@ -1,44 +0,0 @@ - - -

Getting a MaxMind license key

-

Navigate to MaxMind site > Manage License Keys > Create OR Get a license key here

-

NOTE: You need to be logged in to see the option Manage License Keys

- -

Inputting Google API Key (OPTIONAL)

-

Navigate to Administration > Administration Settings > Google Maps. From there, insert the API key.

-

This will be used to display a map widget.

- -

geoip2

-

This app makes use of the Python geoip2 module, which is licensed under the Apache 2.0 License, Copyright (c) 2018

- -

POLL NOW

-

POLL NOW can be used to investigate what gets run on each poll during ingestion.

-

IMPORTANT: LicenseKey is required to be specified in your asset. It's used to fetch the latest MaxMind database.

-

For more info on what gets run on each poll, see "Scheduled Polling" below.

- -

Scheduled Polling

-

This mode is used to schedule a polling action on the asset at regular intervals, which is configured via the INGEST SETTINGS tab of the asset.

-

- In the case of Scheduled Polling, on every poll, the app compares the timestamp of the current database with the one on MaxMind server. - The app will download the database from the server only if the server has a newer database. - With this check, the app can avoid downloading a duplicate database and stay within the daily MaxMind download limit. - As of September 14, 2021, each account can perform up to 2,000 total downloads in each 24 hour period. - For more info, visit here -

-

- It's recommended to run the database update every 30 days. - The schedule of the database update can be found here -

diff --git a/release_notes/2.2.6.md b/release_notes/2.2.6.md new file mode 100644 index 0000000..95aebe3 --- /dev/null +++ b/release_notes/2.2.6.md @@ -0,0 +1 @@ +* Removed certifi and requests dependencies in order to use platform packages [PAPP-31096, PAPP-30822] \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 0e6730b..b905392 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,5 @@ -certifi==2019.11.28 geoip2==2.9.0 idna==2.8 maxminddb==1.5.1 python-dateutil==2.8.1 -requests==2.26.0 -urllib3==1.26.6 +urllib3==1.26.18 diff --git a/tox.ini b/tox.ini index 127a08b..c4644ad 100644 --- a/tox.ini +++ b/tox.ini @@ -1,7 +1,7 @@ [flake8] max-line-length = 145 max-complexity = 28 -ignore = F403,E128,E126,E111,E121,E127,E731,E201,E202,F405,E722,D,W292 +extend-ignore = F403,E128,E126,E111,E121,E127,E731,E201,E202,F405,E722,D,W292 [isort] line_length = 145 diff --git a/wheels/py2/certifi-2019.11.28-py2.py3-none-any.whl b/wheels/py2/certifi-2019.11.28-py2.py3-none-any.whl deleted file mode 100644 index 1ab6713..0000000 Binary files a/wheels/py2/certifi-2019.11.28-py2.py3-none-any.whl and /dev/null differ diff --git a/wheels/py2/chardet-3.0.4-py2.py3-none-any.whl b/wheels/py2/chardet-3.0.4-py2.py3-none-any.whl deleted file mode 100644 index d276977..0000000 Binary files a/wheels/py2/chardet-3.0.4-py2.py3-none-any.whl and /dev/null differ diff --git a/wheels/py2/geoip2-2.9.0-py2.py3-none-any.whl b/wheels/py2/geoip2-2.9.0-py2.py3-none-any.whl deleted file mode 100644 index 2ba93c4..0000000 Binary files a/wheels/py2/geoip2-2.9.0-py2.py3-none-any.whl and /dev/null differ diff --git a/wheels/py2/idna-2.8-py2.py3-none-any.whl b/wheels/py2/idna-2.8-py2.py3-none-any.whl deleted file mode 100644 index 95cb228..0000000 Binary files a/wheels/py2/idna-2.8-py2.py3-none-any.whl and /dev/null differ diff --git a/wheels/py2/ipaddress-1.0.23-py2.py3-none-any.whl b/wheels/py2/ipaddress-1.0.23-py2.py3-none-any.whl deleted file mode 100644 index 8721f5a..0000000 Binary files a/wheels/py2/ipaddress-1.0.23-py2.py3-none-any.whl and /dev/null differ diff --git a/wheels/py2/maxminddb-1.5.1-cp27-none-any.whl b/wheels/py2/maxminddb-1.5.1-cp27-none-any.whl deleted file mode 100644 index f737879..0000000 Binary files a/wheels/py2/maxminddb-1.5.1-cp27-none-any.whl and /dev/null differ diff --git a/wheels/py2/requests-2.26.0-py2.py3-none-any.whl b/wheels/py2/requests-2.26.0-py2.py3-none-any.whl deleted file mode 100644 index 86429fb..0000000 Binary files a/wheels/py2/requests-2.26.0-py2.py3-none-any.whl and /dev/null differ diff --git a/wheels/py2/urllib3-1.26.6-py2.py3-none-any.whl b/wheels/py2/urllib3-1.26.6-py2.py3-none-any.whl deleted file mode 100644 index 504ffbc..0000000 Binary files a/wheels/py2/urllib3-1.26.6-py2.py3-none-any.whl and /dev/null differ diff --git a/wheels/py3/charset_normalizer-2.0.9-py3-none-any.whl b/wheels/py3/charset_normalizer-2.0.9-py3-none-any.whl deleted file mode 100644 index e32a934..0000000 Binary files a/wheels/py3/charset_normalizer-2.0.9-py3-none-any.whl and /dev/null differ diff --git a/wheels/shared/certifi-2019.11.28-py2.py3-none-any.whl b/wheels/shared/certifi-2019.11.28-py2.py3-none-any.whl deleted file mode 100644 index 1ab6713..0000000 Binary files a/wheels/shared/certifi-2019.11.28-py2.py3-none-any.whl and /dev/null differ diff --git a/wheels/shared/chardet-3.0.4-py2.py3-none-any.whl b/wheels/shared/chardet-3.0.4-py2.py3-none-any.whl deleted file mode 100644 index d276977..0000000 Binary files a/wheels/shared/chardet-3.0.4-py2.py3-none-any.whl and /dev/null differ diff --git a/wheels/shared/chardet-4.0.0-py2.py3-none-any.whl b/wheels/shared/chardet-4.0.0-py2.py3-none-any.whl deleted file mode 100644 index b83344e..0000000 Binary files a/wheels/shared/chardet-4.0.0-py2.py3-none-any.whl and /dev/null differ diff --git a/wheels/shared/requests-2.26.0-py2.py3-none-any.whl b/wheels/shared/requests-2.26.0-py2.py3-none-any.whl deleted file mode 100644 index 86429fb..0000000 Binary files a/wheels/shared/requests-2.26.0-py2.py3-none-any.whl and /dev/null differ diff --git a/wheels/shared/urllib3-1.26.18-py2.py3-none-any.whl b/wheels/shared/urllib3-1.26.18-py2.py3-none-any.whl new file mode 100644 index 0000000..c7337c7 Binary files /dev/null and b/wheels/shared/urllib3-1.26.18-py2.py3-none-any.whl differ diff --git a/wheels/shared/urllib3-1.26.6-py2.py3-none-any.whl b/wheels/shared/urllib3-1.26.6-py2.py3-none-any.whl deleted file mode 100644 index 504ffbc..0000000 Binary files a/wheels/shared/urllib3-1.26.6-py2.py3-none-any.whl and /dev/null differ