fingerprint-pro-server-api-sdk 7.0.0.dev1__tar.gz → 7.0.0.dev2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/PKG-INFO +8 -7
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/README.md +4 -5
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/__init__.py +2 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/api/fingerprint_api.py +4 -4
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/api_client.py +72 -63
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/configuration.py +1 -1
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/sealed.py +30 -14
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk.egg-info/PKG-INFO +8 -7
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/setup.cfg +1 -1
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/setup.py +5 -1
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/test/test_fingerprint_api.py +1 -1
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/test/test_sealed.py +23 -20
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/LICENSE +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/api/__init__.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/base_model.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/dummy_pool.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/extend_exception.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/__init__.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/asn.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/botd_detection_result.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/botd_result.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/browser_details.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/cloned_app_result.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/common403_error_response.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/confidence.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/data_center.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/deprecated_ip_location.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/deprecated_ip_location_city.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/developer_tools_result.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/emulator_result.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/error_common403_response.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/error_common429_response.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/error_common429_response_error.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/error_event404_response.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/error_event404_response_error.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/error_update_event400_response.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/error_update_event400_response_error.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/error_update_event409_response.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/error_update_event409_response_error.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/error_visitor400_response.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/error_visitor400_response_error.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/error_visitor404_response.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/error_visitor404_response_error.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/error_visits403.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/event_response.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/event_update_request.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/factory_reset_result.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/frida_result.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/high_activity_result.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/identification_error.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/incognito_result.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/ip_block_list_result.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/ip_block_list_result_details.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/ip_info_result.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/ip_info_result_v4.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/ip_info_result_v6.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/ip_location.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/ip_location_city.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/jailbroken_result.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/location.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/location_spoofing_result.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/privacy_settings_result.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/product_error.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/products_response.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/products_response_botd.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/products_response_identification.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/products_response_identification_data.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/proxy_result.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/raw_device_attributes_result.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/remote_control_result.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/response.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/response_visits.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/root_apps_result.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/seen_at.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/signal_response_cloned_app.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/signal_response_developer_tools.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/signal_response_emulator.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/signal_response_factory_reset.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/signal_response_frida.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/signal_response_high_activity.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/signal_response_incognito.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/signal_response_ip_blocklist.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/signal_response_ip_info.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/signal_response_jailbroken.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/signal_response_location_spoofing.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/signal_response_privacy_settings.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/signal_response_proxy.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/signal_response_raw_device_attributes.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/signal_response_remote_control.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/signal_response_root_apps.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/signal_response_suspect_score.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/signal_response_tampering.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/signal_response_tor.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/signal_response_velocity.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/signal_response_virtual_machine.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/signal_response_vpn.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/subdivision.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/suspect_score_result.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/tampering_result.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/too_many_requests_response.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/tor_result.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/velocity_interval_result.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/velocity_intervals.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/velocity_result.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/virtual_machine_result.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/visit.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/vpn_result.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/vpn_result_methods.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/models/webhook_visit.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/rest.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk/webhook.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk.egg-info/SOURCES.txt +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk.egg-info/dependency_links.txt +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk.egg-info/requires.txt +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/fingerprint_pro_server_api_sdk.egg-info/top_level.txt +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/test/__init__.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/test/test_base_model.py +0 -0
- {fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/test/test_webhook_validation.py +0 -0
{fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/PKG-INFO
RENAMED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: fingerprint-pro-server-api-sdk
|
|
3
|
-
Version: 7.0.0.
|
|
3
|
+
Version: 7.0.0.dev2
|
|
4
4
|
Summary: Fingerprint Pro Server API allows you to get information about visitors and about individual events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device.
|
|
5
|
-
Home-page: https://github.com/fingerprintjs/fingerprint-pro-server-api-python-sdk
|
|
6
5
|
Author: Fingerprint
|
|
7
6
|
Author-email: support@fingerprint.com
|
|
8
7
|
License: MIT
|
|
8
|
+
Project-URL: Changelog, https://github.com/fingerprintjs/fingerprint-pro-server-api-python-sdk/blob/main/CHANGELOG.md
|
|
9
|
+
Project-URL: Code, https://github.com/fingerprintjs/fingerprint-pro-server-api-python-sdk
|
|
10
|
+
Project-URL: Issue Tracker, https://github.com/fingerprintjs/fingerprint-pro-server-api-python-sdk/issues
|
|
9
11
|
Keywords: Swagger,Fingerprint Pro Server API,browser,detection,fingerprint,identification,fingerprinting,browser-fingerprinting,browser-fingerprint,fraud-detection,fraud,audio-fingerprinting,fingerprintjs,fingerprintjs-pro,visitor-identifier
|
|
10
12
|
Classifier: Development Status :: 5 - Production/Stable
|
|
11
13
|
Classifier: Intended Audience :: Developers
|
|
@@ -49,7 +51,7 @@ The Fingerprint Server Python SDK is an easy way to interact with the Fingerprin
|
|
|
49
51
|
This Python package is automatically generated by the [Swagger Codegen](https://github.com/swagger-api/swagger-codegen) project:
|
|
50
52
|
|
|
51
53
|
- API version: 3
|
|
52
|
-
- Package version: 7.0.0.
|
|
54
|
+
- Package version: 7.0.0.dev2
|
|
53
55
|
- Build package: io.swagger.codegen.v3.generators.python.PythonClientCodegen
|
|
54
56
|
|
|
55
57
|
## Requirements
|
|
@@ -205,8 +207,7 @@ import os
|
|
|
205
207
|
|
|
206
208
|
from dotenv import load_dotenv
|
|
207
209
|
|
|
208
|
-
from fingerprint_pro_server_api_sdk import
|
|
209
|
-
from fingerprint_pro_server_api_sdk.sealed import unseal_events_response, DecryptionKey, DecryptionAlgorithm
|
|
210
|
+
from fingerprint_pro_server_api_sdk import unseal_event_response, DecryptionKey, DecryptionAlgorithm
|
|
210
211
|
|
|
211
212
|
load_dotenv()
|
|
212
213
|
|
|
@@ -214,8 +215,8 @@ sealed_result = base64.b64decode(os.environ["BASE64_SEALED_RESULT"])
|
|
|
214
215
|
key = base64.b64decode(os.environ["BASE64_KEY"])
|
|
215
216
|
|
|
216
217
|
try:
|
|
217
|
-
|
|
218
|
-
print("\n\n\nEvent response: \n",
|
|
218
|
+
event_response = unseal_event_response(sealed_result, [DecryptionKey(key, DecryptionAlgorithm['Aes256Gcm'])])
|
|
219
|
+
print("\n\n\nEvent response: \n", event_response.products)
|
|
219
220
|
except Exception as e:
|
|
220
221
|
print("Exception when calling unsealing events response: %s\n" % e)
|
|
221
222
|
exit(1)
|
{fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/README.md
RENAMED
|
@@ -26,7 +26,7 @@ The Fingerprint Server Python SDK is an easy way to interact with the Fingerprin
|
|
|
26
26
|
This Python package is automatically generated by the [Swagger Codegen](https://github.com/swagger-api/swagger-codegen) project:
|
|
27
27
|
|
|
28
28
|
- API version: 3
|
|
29
|
-
- Package version: 7.0.0.
|
|
29
|
+
- Package version: 7.0.0.dev2
|
|
30
30
|
- Build package: io.swagger.codegen.v3.generators.python.PythonClientCodegen
|
|
31
31
|
|
|
32
32
|
## Requirements
|
|
@@ -182,8 +182,7 @@ import os
|
|
|
182
182
|
|
|
183
183
|
from dotenv import load_dotenv
|
|
184
184
|
|
|
185
|
-
from fingerprint_pro_server_api_sdk import
|
|
186
|
-
from fingerprint_pro_server_api_sdk.sealed import unseal_events_response, DecryptionKey, DecryptionAlgorithm
|
|
185
|
+
from fingerprint_pro_server_api_sdk import unseal_event_response, DecryptionKey, DecryptionAlgorithm
|
|
187
186
|
|
|
188
187
|
load_dotenv()
|
|
189
188
|
|
|
@@ -191,8 +190,8 @@ sealed_result = base64.b64decode(os.environ["BASE64_SEALED_RESULT"])
|
|
|
191
190
|
key = base64.b64decode(os.environ["BASE64_KEY"])
|
|
192
191
|
|
|
193
192
|
try:
|
|
194
|
-
|
|
195
|
-
print("\n\n\nEvent response: \n",
|
|
193
|
+
event_response = unseal_event_response(sealed_result, [DecryptionKey(key, DecryptionAlgorithm['Aes256Gcm'])])
|
|
194
|
+
print("\n\n\nEvent response: \n", event_response.products)
|
|
196
195
|
except Exception as e:
|
|
197
196
|
print("Exception when calling unsealing events response: %s\n" % e)
|
|
198
197
|
exit(1)
|
|
@@ -113,3 +113,5 @@ from fingerprint_pro_server_api_sdk.models.vpn_result_methods import VpnResultMe
|
|
|
113
113
|
from fingerprint_pro_server_api_sdk.models.webhook_visit import WebhookVisit
|
|
114
114
|
# import custom methods into sdk package
|
|
115
115
|
from fingerprint_pro_server_api_sdk.webhook import Webhook
|
|
116
|
+
from fingerprint_pro_server_api_sdk.sealed import ApiClientDeserializer, DecryptionAlgorithm, DecryptionKey, \
|
|
117
|
+
UnsealError, UnsealAggregateError, unseal_event_response
|
|
@@ -109,7 +109,7 @@ class FingerprintApi:
|
|
|
109
109
|
if 'visitor_id' in params:
|
|
110
110
|
path_params['visitor_id'] = params['visitor_id'] # noqa: E501
|
|
111
111
|
|
|
112
|
-
query_params = [('ii', 'fingerprint-pro-server-python-sdk/7.0.0.
|
|
112
|
+
query_params = [('ii', 'fingerprint-pro-server-python-sdk/7.0.0.dev2')]
|
|
113
113
|
|
|
114
114
|
header_params = {}
|
|
115
115
|
|
|
@@ -219,7 +219,7 @@ class FingerprintApi:
|
|
|
219
219
|
if 'request_id' in params:
|
|
220
220
|
path_params['request_id'] = params['request_id'] # noqa: E501
|
|
221
221
|
|
|
222
|
-
query_params = [('ii', 'fingerprint-pro-server-python-sdk/7.0.0.
|
|
222
|
+
query_params = [('ii', 'fingerprint-pro-server-python-sdk/7.0.0.dev2')]
|
|
223
223
|
|
|
224
224
|
header_params = {}
|
|
225
225
|
|
|
@@ -338,7 +338,7 @@ class FingerprintApi:
|
|
|
338
338
|
if 'visitor_id' in params:
|
|
339
339
|
path_params['visitor_id'] = params['visitor_id'] # noqa: E501
|
|
340
340
|
|
|
341
|
-
query_params = [('ii', 'fingerprint-pro-server-python-sdk/7.0.0.
|
|
341
|
+
query_params = [('ii', 'fingerprint-pro-server-python-sdk/7.0.0.dev2')]
|
|
342
342
|
if 'request_id' in params:
|
|
343
343
|
query_params.append(('request_id', params['request_id'])) # noqa: E501
|
|
344
344
|
if 'linked_id' in params:
|
|
@@ -458,7 +458,7 @@ class FingerprintApi:
|
|
|
458
458
|
if 'request_id' in params:
|
|
459
459
|
path_params['request_id'] = params['request_id'] # noqa: E501
|
|
460
460
|
|
|
461
|
-
query_params = [('ii', 'fingerprint-pro-server-python-sdk/7.0.0.
|
|
461
|
+
query_params = [('ii', 'fingerprint-pro-server-python-sdk/7.0.0.dev2')]
|
|
462
462
|
|
|
463
463
|
header_params = {}
|
|
464
464
|
|
|
@@ -25,6 +25,18 @@ from fingerprint_pro_server_api_sdk import rest
|
|
|
25
25
|
from fingerprint_pro_server_api_sdk.rest import ApiException, RESTResponse
|
|
26
26
|
from fingerprint_pro_server_api_sdk.base_model import BaseModel
|
|
27
27
|
|
|
28
|
+
PRIMITIVE_TYPES = (float, bool, bytes, str, int)
|
|
29
|
+
NATIVE_TYPES_MAPPING = {
|
|
30
|
+
'int': int,
|
|
31
|
+
'long': int,
|
|
32
|
+
'float': float,
|
|
33
|
+
'str': str,
|
|
34
|
+
'bool': bool,
|
|
35
|
+
'date': date,
|
|
36
|
+
'datetime': datetime,
|
|
37
|
+
'object': object,
|
|
38
|
+
}
|
|
39
|
+
|
|
28
40
|
|
|
29
41
|
class ApiClient:
|
|
30
42
|
"""Generic API client for Swagger client library builds.
|
|
@@ -46,18 +58,6 @@ class ApiClient:
|
|
|
46
58
|
to the API
|
|
47
59
|
"""
|
|
48
60
|
|
|
49
|
-
PRIMITIVE_TYPES = (float, bool, bytes, str, int)
|
|
50
|
-
NATIVE_TYPES_MAPPING = {
|
|
51
|
-
'int': int,
|
|
52
|
-
'long': int,
|
|
53
|
-
'float': float,
|
|
54
|
-
'str': str,
|
|
55
|
-
'bool': bool,
|
|
56
|
-
'date': date,
|
|
57
|
-
'datetime': datetime,
|
|
58
|
-
'object': object,
|
|
59
|
-
}
|
|
60
|
-
|
|
61
61
|
def __init__(self, configuration: Optional[Configuration] = None, header_name: Optional[str] = None,
|
|
62
62
|
header_value: Optional[str] = None, cookie: Optional[str] = None, pool: Optional[Pool] = None):
|
|
63
63
|
if configuration is None:
|
|
@@ -79,7 +79,7 @@ class ApiClient:
|
|
|
79
79
|
self.default_headers[header_name] = header_value
|
|
80
80
|
self.cookie = cookie
|
|
81
81
|
# Set default User-Agent.
|
|
82
|
-
self.user_agent = 'Swagger-Codegen/7.0.0.
|
|
82
|
+
self.user_agent = 'Swagger-Codegen/7.0.0.dev2/python'
|
|
83
83
|
|
|
84
84
|
def __del__(self):
|
|
85
85
|
self.pool.close()
|
|
@@ -197,7 +197,7 @@ class ApiClient:
|
|
|
197
197
|
"""
|
|
198
198
|
if obj is None:
|
|
199
199
|
return None
|
|
200
|
-
elif isinstance(obj,
|
|
200
|
+
elif isinstance(obj, PRIMITIVE_TYPES):
|
|
201
201
|
return obj
|
|
202
202
|
elif isinstance(obj, list):
|
|
203
203
|
return [self.sanitize_for_serialization(sub_obj)
|
|
@@ -251,46 +251,7 @@ class ApiClient:
|
|
|
251
251
|
except ValueError:
|
|
252
252
|
data = response.data
|
|
253
253
|
|
|
254
|
-
return
|
|
255
|
-
|
|
256
|
-
def __deserialize(self, data: Union[Dict, List, str], klass: Any):
|
|
257
|
-
"""Deserializes dict, list, str into an object.
|
|
258
|
-
|
|
259
|
-
:param data: dict, list or str.
|
|
260
|
-
:param klass: class literal, or string of class name.
|
|
261
|
-
|
|
262
|
-
:return: object.
|
|
263
|
-
"""
|
|
264
|
-
if data is None:
|
|
265
|
-
return None
|
|
266
|
-
|
|
267
|
-
if type(klass) == str:
|
|
268
|
-
if klass.startswith('list['):
|
|
269
|
-
sub_kls = re.match(r'list\[(.*)\]', klass).group(1)
|
|
270
|
-
return [self.__deserialize(sub_data, sub_kls)
|
|
271
|
-
for sub_data in data]
|
|
272
|
-
|
|
273
|
-
if klass.startswith('dict('):
|
|
274
|
-
sub_kls = re.match(r'dict\(([^,]*), (.*)\)', klass).group(2)
|
|
275
|
-
return {k: self.__deserialize(v, sub_kls)
|
|
276
|
-
for k, v in data.items()}
|
|
277
|
-
|
|
278
|
-
# convert str to class
|
|
279
|
-
if klass in self.NATIVE_TYPES_MAPPING:
|
|
280
|
-
klass = self.NATIVE_TYPES_MAPPING[klass]
|
|
281
|
-
else:
|
|
282
|
-
klass = getattr(fingerprint_pro_server_api_sdk.models, klass)
|
|
283
|
-
|
|
284
|
-
if klass in self.PRIMITIVE_TYPES:
|
|
285
|
-
return self.__deserialize_primitive(data, klass)
|
|
286
|
-
elif klass == object:
|
|
287
|
-
return data
|
|
288
|
-
elif klass == date:
|
|
289
|
-
return self.__deserialize_date(data)
|
|
290
|
-
elif klass == datetime:
|
|
291
|
-
return self.__deserialize_datatime(data)
|
|
292
|
-
else:
|
|
293
|
-
return self.__deserialize_model(data, klass)
|
|
254
|
+
return ApiClientDeserializer.deserialize(data, response_type)
|
|
294
255
|
|
|
295
256
|
def call_api(self, resource_path: str, method: str, path_params: Optional[Dict[str, Any]] = None,
|
|
296
257
|
query_params: Optional[List[Tuple[str, Any]]] = None, header_params: Optional[Dict[str, Any]] = None,
|
|
@@ -515,7 +476,51 @@ class ApiClient:
|
|
|
515
476
|
f.write(response_data)
|
|
516
477
|
return path
|
|
517
478
|
|
|
518
|
-
|
|
479
|
+
|
|
480
|
+
class ApiClientDeserializer:
|
|
481
|
+
"""Deserializes server response into appropriate type."""
|
|
482
|
+
@staticmethod
|
|
483
|
+
def deserialize(data: Union[Dict, List, str], klass: Any):
|
|
484
|
+
"""Deserializes dict, list, str into an object.
|
|
485
|
+
|
|
486
|
+
:param data: dict, list or str.
|
|
487
|
+
:param klass: class literal, or string of class name.
|
|
488
|
+
|
|
489
|
+
:return: object.
|
|
490
|
+
"""
|
|
491
|
+
if data is None:
|
|
492
|
+
return None
|
|
493
|
+
|
|
494
|
+
if type(klass) == str:
|
|
495
|
+
if klass.startswith('list['):
|
|
496
|
+
sub_kls = re.match(r'list\[(.*)\]', klass).group(1)
|
|
497
|
+
return [ApiClientDeserializer.deserialize(sub_data, sub_kls)
|
|
498
|
+
for sub_data in data]
|
|
499
|
+
|
|
500
|
+
if klass.startswith('dict('):
|
|
501
|
+
sub_kls = re.match(r'dict\(([^,]*), (.*)\)', klass).group(2)
|
|
502
|
+
return {k: ApiClientDeserializer.deserialize(v, sub_kls)
|
|
503
|
+
for k, v in data.items()}
|
|
504
|
+
|
|
505
|
+
# convert str to class
|
|
506
|
+
if klass in NATIVE_TYPES_MAPPING:
|
|
507
|
+
klass = NATIVE_TYPES_MAPPING[klass]
|
|
508
|
+
else:
|
|
509
|
+
klass = getattr(fingerprint_pro_server_api_sdk.models, klass)
|
|
510
|
+
|
|
511
|
+
if klass in PRIMITIVE_TYPES:
|
|
512
|
+
return ApiClientDeserializer.__deserialize_primitive(data, klass)
|
|
513
|
+
elif klass == object:
|
|
514
|
+
return data
|
|
515
|
+
elif klass == date:
|
|
516
|
+
return ApiClientDeserializer.__deserialize_date(data)
|
|
517
|
+
elif klass == datetime:
|
|
518
|
+
return ApiClientDeserializer.__deserialize_datatime(data)
|
|
519
|
+
else:
|
|
520
|
+
return ApiClientDeserializer.__deserialize_model(data, klass)
|
|
521
|
+
|
|
522
|
+
@staticmethod
|
|
523
|
+
def __deserialize_primitive(data, klass):
|
|
519
524
|
"""Deserializes string to primitive type.
|
|
520
525
|
|
|
521
526
|
:param data: str.
|
|
@@ -530,7 +535,8 @@ class ApiClient:
|
|
|
530
535
|
except TypeError:
|
|
531
536
|
return data
|
|
532
537
|
|
|
533
|
-
|
|
538
|
+
@staticmethod
|
|
539
|
+
def __deserialize_date(string: str) -> date:
|
|
534
540
|
"""Deserializes string to date.
|
|
535
541
|
|
|
536
542
|
:param string: str.
|
|
@@ -546,7 +552,8 @@ class ApiClient:
|
|
|
546
552
|
reason="Failed to parse `{0}` as date object".format(string)
|
|
547
553
|
)
|
|
548
554
|
|
|
549
|
-
|
|
555
|
+
@staticmethod
|
|
556
|
+
def __deserialize_datatime(string: str) -> datetime:
|
|
550
557
|
"""Deserializes string to datetime.
|
|
551
558
|
|
|
552
559
|
The string should be in iso8601 datetime format.
|
|
@@ -567,10 +574,12 @@ class ApiClient:
|
|
|
567
574
|
)
|
|
568
575
|
)
|
|
569
576
|
|
|
570
|
-
|
|
577
|
+
@staticmethod
|
|
578
|
+
def __hasattr(object, name):
|
|
571
579
|
return name in object.__class__.__dict__
|
|
572
580
|
|
|
573
|
-
|
|
581
|
+
@staticmethod
|
|
582
|
+
def __deserialize_model(data, klass):
|
|
574
583
|
"""Deserializes list or dict to model.
|
|
575
584
|
|
|
576
585
|
:param data: dict, list.
|
|
@@ -578,7 +587,7 @@ class ApiClient:
|
|
|
578
587
|
:return: model object.
|
|
579
588
|
"""
|
|
580
589
|
|
|
581
|
-
if not klass.swagger_types and not
|
|
590
|
+
if not klass.swagger_types and not ApiClientDeserializer.__hasattr(klass, 'get_real_child_model'):
|
|
582
591
|
return data
|
|
583
592
|
|
|
584
593
|
kwargs = {}
|
|
@@ -588,7 +597,7 @@ class ApiClient:
|
|
|
588
597
|
klass.attribute_map[attr] in data and
|
|
589
598
|
isinstance(data, (list, dict))):
|
|
590
599
|
value = data[klass.attribute_map[attr]]
|
|
591
|
-
kwargs[attr] =
|
|
600
|
+
kwargs[attr] = ApiClientDeserializer.deserialize(value, attr_type)
|
|
592
601
|
|
|
593
602
|
instance = klass(**kwargs)
|
|
594
603
|
|
|
@@ -598,8 +607,8 @@ class ApiClient:
|
|
|
598
607
|
for key, value in data.items():
|
|
599
608
|
if key not in klass.swagger_types:
|
|
600
609
|
instance[key] = value
|
|
601
|
-
if
|
|
610
|
+
if ApiClientDeserializer.__hasattr(instance, 'get_real_child_model'):
|
|
602
611
|
klass_name = instance.get_real_child_model(data)
|
|
603
612
|
if klass_name:
|
|
604
|
-
instance =
|
|
613
|
+
instance = ApiClientDeserializer.deserialize(data, klass_name)
|
|
605
614
|
return instance
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import json
|
|
2
|
+
from typing import List
|
|
3
|
+
|
|
2
4
|
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
|
|
3
5
|
from cryptography.hazmat.backends import default_backend
|
|
4
6
|
import zlib
|
|
5
7
|
|
|
8
|
+
from fingerprint_pro_server_api_sdk.api_client import ApiClientDeserializer
|
|
6
9
|
from fingerprint_pro_server_api_sdk.models.event_response import EventResponse
|
|
7
10
|
|
|
8
11
|
SEALED_HEADER = bytes([0x9e, 0x85, 0xdc, 0xed])
|
|
@@ -12,41 +15,53 @@ DecryptionAlgorithm = {
|
|
|
12
15
|
|
|
13
16
|
|
|
14
17
|
class DecryptionKey:
|
|
15
|
-
|
|
18
|
+
"""Key for decryption of sealed data."""
|
|
19
|
+
exception: Exception
|
|
20
|
+
algorithm: str
|
|
21
|
+
|
|
22
|
+
def __init__(self, key: bytes, algorithm: str):
|
|
16
23
|
self.key = key
|
|
17
24
|
self.algorithm = algorithm
|
|
18
25
|
|
|
19
26
|
|
|
20
27
|
class UnsealError(Exception):
|
|
28
|
+
"""Error during unsealing."""
|
|
21
29
|
exception: Exception
|
|
22
30
|
key: DecryptionKey
|
|
23
31
|
|
|
24
|
-
def __init__(self, exception, key):
|
|
32
|
+
def __init__(self, exception: Exception, key: DecryptionKey):
|
|
25
33
|
self.exception = exception
|
|
26
34
|
self.key = key
|
|
27
35
|
|
|
28
36
|
|
|
29
37
|
class UnsealAggregateError(Exception):
|
|
30
|
-
|
|
38
|
+
"""Aggregated error during unsealing."""
|
|
39
|
+
errors: List[UnsealError]
|
|
40
|
+
|
|
41
|
+
def __init__(self, errors: List[UnsealError]):
|
|
31
42
|
self.errors = errors
|
|
32
43
|
super().__init__("Unable to decrypt sealed data")
|
|
33
44
|
|
|
34
45
|
|
|
35
|
-
def
|
|
36
|
-
|
|
46
|
+
def unseal_event_response(sealed_data: bytes, decryption_keys: List[DecryptionKey]) -> EventResponse:
|
|
47
|
+
"""Unseal event response with one of the provided keys."""
|
|
48
|
+
unsealed = __unseal(sealed_data, decryption_keys)
|
|
49
|
+
return __parse_event_response(unsealed)
|
|
37
50
|
|
|
38
|
-
if 'products' not in json_data:
|
|
39
|
-
raise ValueError('Sealed data is not valid events response')
|
|
40
51
|
|
|
41
|
-
|
|
52
|
+
def __parse_event_response(unsealed: str) -> EventResponse:
|
|
53
|
+
"""Parse event response from unsealed data."""
|
|
54
|
+
json_data = json.loads(unsealed)
|
|
42
55
|
|
|
56
|
+
if 'products' not in json_data:
|
|
57
|
+
raise ValueError('Sealed data is not valid event response')
|
|
43
58
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
return parse_events_response(unsealed)
|
|
59
|
+
result: EventResponse = ApiClientDeserializer.deserialize(json_data, 'EventResponse')
|
|
60
|
+
return result
|
|
47
61
|
|
|
48
62
|
|
|
49
|
-
def
|
|
63
|
+
def __unseal(sealed_data: bytes, decryption_keys: List[DecryptionKey]) -> str:
|
|
64
|
+
"""Unseal data with one of the provided keys."""
|
|
50
65
|
if sealed_data[:len(SEALED_HEADER)].hex() != SEALED_HEADER.hex():
|
|
51
66
|
raise ValueError('Invalid sealed data header')
|
|
52
67
|
|
|
@@ -54,7 +69,7 @@ def unseal(sealed_data, decryption_keys):
|
|
|
54
69
|
for decryption_key in decryption_keys:
|
|
55
70
|
if decryption_key.algorithm == DecryptionAlgorithm['Aes256Gcm']:
|
|
56
71
|
try:
|
|
57
|
-
return
|
|
72
|
+
return __unseal_aes256gcm(sealed_data, decryption_key.key)
|
|
58
73
|
except Exception as e:
|
|
59
74
|
errors.append(UnsealError(e, decryption_key))
|
|
60
75
|
continue
|
|
@@ -64,7 +79,8 @@ def unseal(sealed_data, decryption_keys):
|
|
|
64
79
|
raise UnsealAggregateError(errors)
|
|
65
80
|
|
|
66
81
|
|
|
67
|
-
def
|
|
82
|
+
def __unseal_aes256gcm(sealed_data: bytes, decryption_key: bytes) -> str:
|
|
83
|
+
"""Unseal data with AES-256-GCM."""
|
|
68
84
|
nonce_length = 12
|
|
69
85
|
nonce = sealed_data[len(SEALED_HEADER):len(SEALED_HEADER) + nonce_length]
|
|
70
86
|
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: fingerprint-pro-server-api-sdk
|
|
3
|
-
Version: 7.0.0.
|
|
3
|
+
Version: 7.0.0.dev2
|
|
4
4
|
Summary: Fingerprint Pro Server API allows you to get information about visitors and about individual events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device.
|
|
5
|
-
Home-page: https://github.com/fingerprintjs/fingerprint-pro-server-api-python-sdk
|
|
6
5
|
Author: Fingerprint
|
|
7
6
|
Author-email: support@fingerprint.com
|
|
8
7
|
License: MIT
|
|
8
|
+
Project-URL: Changelog, https://github.com/fingerprintjs/fingerprint-pro-server-api-python-sdk/blob/main/CHANGELOG.md
|
|
9
|
+
Project-URL: Code, https://github.com/fingerprintjs/fingerprint-pro-server-api-python-sdk
|
|
10
|
+
Project-URL: Issue Tracker, https://github.com/fingerprintjs/fingerprint-pro-server-api-python-sdk/issues
|
|
9
11
|
Keywords: Swagger,Fingerprint Pro Server API,browser,detection,fingerprint,identification,fingerprinting,browser-fingerprinting,browser-fingerprint,fraud-detection,fraud,audio-fingerprinting,fingerprintjs,fingerprintjs-pro,visitor-identifier
|
|
10
12
|
Classifier: Development Status :: 5 - Production/Stable
|
|
11
13
|
Classifier: Intended Audience :: Developers
|
|
@@ -49,7 +51,7 @@ The Fingerprint Server Python SDK is an easy way to interact with the Fingerprin
|
|
|
49
51
|
This Python package is automatically generated by the [Swagger Codegen](https://github.com/swagger-api/swagger-codegen) project:
|
|
50
52
|
|
|
51
53
|
- API version: 3
|
|
52
|
-
- Package version: 7.0.0.
|
|
54
|
+
- Package version: 7.0.0.dev2
|
|
53
55
|
- Build package: io.swagger.codegen.v3.generators.python.PythonClientCodegen
|
|
54
56
|
|
|
55
57
|
## Requirements
|
|
@@ -205,8 +207,7 @@ import os
|
|
|
205
207
|
|
|
206
208
|
from dotenv import load_dotenv
|
|
207
209
|
|
|
208
|
-
from fingerprint_pro_server_api_sdk import
|
|
209
|
-
from fingerprint_pro_server_api_sdk.sealed import unseal_events_response, DecryptionKey, DecryptionAlgorithm
|
|
210
|
+
from fingerprint_pro_server_api_sdk import unseal_event_response, DecryptionKey, DecryptionAlgorithm
|
|
210
211
|
|
|
211
212
|
load_dotenv()
|
|
212
213
|
|
|
@@ -214,8 +215,8 @@ sealed_result = base64.b64decode(os.environ["BASE64_SEALED_RESULT"])
|
|
|
214
215
|
key = base64.b64decode(os.environ["BASE64_KEY"])
|
|
215
216
|
|
|
216
217
|
try:
|
|
217
|
-
|
|
218
|
-
print("\n\n\nEvent response: \n",
|
|
218
|
+
event_response = unseal_event_response(sealed_result, [DecryptionKey(key, DecryptionAlgorithm['Aes256Gcm'])])
|
|
219
|
+
print("\n\n\nEvent response: \n", event_response.products)
|
|
219
220
|
except Exception as e:
|
|
220
221
|
print("Exception when calling unsealing events response: %s\n" % e)
|
|
221
222
|
exit(1)
|
{fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/setup.py
RENAMED
|
@@ -45,7 +45,11 @@ setup(
|
|
|
45
45
|
license_files=["LICENSE"],
|
|
46
46
|
author="Fingerprint",
|
|
47
47
|
author_email="support@fingerprint.com",
|
|
48
|
-
|
|
48
|
+
project_urls={
|
|
49
|
+
"Changelog": "https://github.com/fingerprintjs/fingerprint-pro-server-api-python-sdk/blob/main/CHANGELOG.md",
|
|
50
|
+
"Code": "https://github.com/fingerprintjs/fingerprint-pro-server-api-python-sdk",
|
|
51
|
+
"Issue Tracker": "https://github.com/fingerprintjs/fingerprint-pro-server-api-python-sdk/issues",
|
|
52
|
+
},
|
|
49
53
|
keywords=["Swagger", "Fingerprint Pro Server API", "browser", "detection", "fingerprint", "identification",
|
|
50
54
|
"fingerprinting", "browser-fingerprinting", "browser-fingerprint", "fraud-detection", "fraud",
|
|
51
55
|
"audio-fingerprinting", "fingerprintjs", "fingerprintjs-pro", "visitor-identifier"],
|
|
@@ -3,10 +3,9 @@ import io
|
|
|
3
3
|
import json
|
|
4
4
|
import unittest
|
|
5
5
|
|
|
6
|
-
from fingerprint_pro_server_api_sdk import
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
from fingerprint_pro_server_api_sdk import ApiClientDeserializer, DecryptionAlgorithm, DecryptionKey, \
|
|
7
|
+
unseal_event_response, UnsealError, UnsealAggregateError, EventResponse, ProductsResponse, \
|
|
8
|
+
ProductsResponseIdentification, BrowserDetails
|
|
10
9
|
|
|
11
10
|
class TestSealed(unittest.TestCase):
|
|
12
11
|
valid_key = base64.b64decode('p2PA7MGy5tx56cnyJaFZMr96BCFwZeHjZV2EqMvTq53=')
|
|
@@ -14,24 +13,28 @@ class TestSealed(unittest.TestCase):
|
|
|
14
13
|
|
|
15
14
|
def test_unseal_aes256gcm(self):
|
|
16
15
|
with io.open("./test/mocks/sealed_result.json", 'r', encoding='utf-8') as f:
|
|
17
|
-
expected_result =
|
|
16
|
+
expected_result = ApiClientDeserializer.deserialize(json.load(f), 'EventResponse')
|
|
18
17
|
|
|
19
18
|
sealed_data = base64.b64decode(
|
|
20
19
|
'noXc7SXO+mqeAGrvBMgObi/S0fXTpP3zupk8qFqsO/1zdtWCD169iLA3VkkZh9ICHpZ0oWRzqG0M9/TnCeKFohgBLqDp6O0zEfXOv6i5q++aucItznQdLwrKLP+O0blfb4dWVI8/aSbd4ELAZuJJxj9bCoVZ1vk+ShbUXCRZTD30OIEAr3eiG9aw00y1UZIqMgX6CkFlU9L9OnKLsNsyomPIaRHTmgVTI5kNhrnVNyNsnzt9rY7fUD52DQxJILVPrUJ1Q+qW7VyNslzGYBPG0DyYlKbRAomKJDQIkdj/Uwa6bhSTq4XYNVvbk5AJ/dGwvsVdOnkMT2Ipd67KwbKfw5bqQj/cw6bj8Cp2FD4Dy4Ud4daBpPRsCyxBM2jOjVz1B/lAyrOp8BweXOXYugwdPyEn38MBZ5oL4D38jIwR/QiVnMHpERh93jtgwh9Abza6i4/zZaDAbPhtZLXSM5ztdctv8bAb63CppLU541Kf4OaLO3QLvfLRXK2n8bwEwzVAqQ22dyzt6/vPiRbZ5akh8JB6QFXG0QJF9DejsIspKF3JvOKjG2edmC9o+GfL3hwDBiihYXCGY9lElZICAdt+7rZm5UxMx7STrVKy81xcvfaIp1BwGh/HyMsJnkE8IczzRFpLlHGYuNDxdLoBjiifrmHvOCUDcV8UvhSV+UAZtAVejdNGo5G/bz0NF21HUO4pVRPu6RqZIs/aX4hlm6iO/0Ru00ct8pfadUIgRcephTuFC2fHyZxNBC6NApRtLSNLfzYTTo/uSjgcu6rLWiNo5G7yfrM45RXjalFEFzk75Z/fu9lCJJa5uLFgDNKlU+IaFjArfXJCll3apbZp4/LNKiU35ZlB7ZmjDTrji1wLep8iRVVEGht/DW00MTok7Zn7Fv+MlxgWmbZB3BuezwTmXb/fNw==')
|
|
21
20
|
|
|
22
|
-
result =
|
|
21
|
+
result = unseal_event_response(sealed_data, [
|
|
23
22
|
DecryptionKey(self.invalid_key, DecryptionAlgorithm['Aes256Gcm']),
|
|
24
23
|
DecryptionKey(self.valid_key, DecryptionAlgorithm['Aes256Gcm']),
|
|
25
24
|
])
|
|
26
25
|
|
|
27
26
|
self.assertEqual(result, expected_result)
|
|
27
|
+
self.assertIsInstance(result, EventResponse)
|
|
28
|
+
self.assertIsInstance(result.products, ProductsResponse)
|
|
29
|
+
self.assertIsInstance(result.products.identification, ProductsResponseIdentification)
|
|
30
|
+
self.assertIsInstance(result.products.identification.data.browser_details, BrowserDetails)
|
|
28
31
|
|
|
29
32
|
def test_unseal_invalid_header(self):
|
|
30
33
|
sealed_data = base64.b64decode(
|
|
31
34
|
'xzXc7SXO+mqeAGrvBMgObi/S0fXTpP3zupk8qFqsO/1zdtWCD169iLA3VkkZh9ICHpZ0oWRzqG0M9/TnCeKFohgBLqDp6O0zEfXOv6i5q++aucItznQdLwrKLP+O0blfb4dWVI8/aSbd4ELAZuJJxj9bCoVZ1vk+ShbUXCRZTD30OIEAr3eiG9aw00y1UZIqMgX6CkFlU9L9OnKLsNsyomPIaRHTmgVTI5kNhrnVNyNsnzt9rY7fUD52DQxJILVPrUJ1Q+qW7VyNslzGYBPG0DyYlKbRAomKJDQIkdj/Uwa6bhSTq4XYNVvbk5AJ/dGwvsVdOnkMT2Ipd67KwbKfw5bqQj/cw6bj8Cp2FD4Dy4Ud4daBpPRsCyxBM2jOjVz1B/lAyrOp8BweXOXYugwdPyEn38MBZ5oL4D38jIwR/QiVnMHpERh93jtgwh9Abza6i4/zZaDAbPhtZLXSM5ztdctv8bAb63CppLU541Kf4OaLO3QLvfLRXK2n8bwEwzVAqQ22dyzt6/vPiRbZ5akh8JB6QFXG0QJF9DejsIspKF3JvOKjG2edmC9o+GfL3hwDBiihYXCGY9lElZICAdt+7rZm5UxMx7STrVKy81xcvfaIp1BwGh/HyMsJnkE8IczzRFpLlHGYuNDxdLoBjiifrmHvOCUDcV8UvhSV+UAZtAVejdNGo5G/bz0NF21HUO4pVRPu6RqZIs/aX4hlm6iO/0Ru00ct8pfadUIgRcephTuFC2fHyZxNBC6NApRtLSNLfzYTTo/uSjgcu6rLWiNo5G7yfrM45RXjalFEFzk75Z/fu9lCJJa5uLFgDNKlU+IaFjArfXJCll3apbZp4/LNKiU35ZlB7ZmjDTrji1wLep8iRVVEGht/DW00MTok7Zn7Fv+MlxgWmbZB3BuezwTmXb/fNw==')
|
|
32
35
|
|
|
33
|
-
with self.assertRaisesRegex(
|
|
34
|
-
|
|
36
|
+
with self.assertRaisesRegex(ValueError, "Invalid sealed data header"):
|
|
37
|
+
unseal_event_response(sealed_data, [
|
|
35
38
|
DecryptionKey(self.invalid_key, DecryptionAlgorithm['Aes256Gcm']),
|
|
36
39
|
DecryptionKey(self.valid_key, DecryptionAlgorithm['Aes256Gcm']),
|
|
37
40
|
])
|
|
@@ -40,8 +43,8 @@ class TestSealed(unittest.TestCase):
|
|
|
40
43
|
sealed_data = base64.b64decode(
|
|
41
44
|
'noXc7SXO+mqeAGrvBMgObi/S0fXTpP3zupk8qFqsO/1zdtWCD169iLA3VkkZh9ICHpZ0oWRzqG0M9/TnCeKFohgBLqDp6O0zEfXOv6i5q++aucItznQdLwrKLP+O0blfb4dWVI8/aSbd4ELAZuJJxj9bCoVZ1vk+ShbUXCRZTD30OIEAr3eiG9aw00y1UZIqMgX6CkFlU9L9OnKLsNsyomPIaRHTmgVTI5kNhrnVNyNsnzt9rY7fUD52DQxJILVPrUJ1Q+qW7VyNslzGYBPG0DyYlKbRAomKJDQIkdj/Uwa6bhSTq4XYNVvbk5AJ/dGwvsVdOnkMT2Ipd67KwbKfw5bqQj/cw6bj8Cp2FD4Dy4Ud4daBpPRsCyxBM2jOjVz1B/lAyrOp8BweXOXYugwdPyEn38MBZ5oL4D38jIwR/QiVnMHpERh93jtgwh9Abza6i4/zZaDAbPhtZLXSM5ztdctv8bAb63CppLU541Kf4OaLO3QLvfLRXK2n8bwEwzVAqQ22dyzt6/vPiRbZ5akh8JB6QFXG0QJF9DejsIspKF3JvOKjG2edmC9o+GfL3hwDBiihYXCGY9lElZICAdt+7rZm5UxMx7STrVKy81xcvfaIp1BwGh/HyMsJnkE8IczzRFpLlHGYuNDxdLoBjiifrmHvOCUDcV8UvhSV+UAZtAVejdNGo5G/bz0NF21HUO4pVRPu6RqZIs/aX4hlm6iO/0Ru00ct8pfadUIgRcephTuFC2fHyZxNBC6NApRtLSNLfzYTTo/uSjgcu6rLWiNo5G7yfrM45RXjalFEFzk75Z/fu9lCJJa5uLFgDNKlU+IaFjArfXJCll3apbZp4/LNKiU35ZlB7ZmjDTrji1wLep8iRVVEGht/DW00MTok7Zn7Fv+MlxgWmbZB3BuezwTmXb/fNw==')
|
|
42
45
|
|
|
43
|
-
with self.assertRaisesRegex(
|
|
44
|
-
|
|
46
|
+
with self.assertRaisesRegex(ValueError, "Unsupported decryption algorithm: invalid"):
|
|
47
|
+
unseal_event_response(sealed_data, [
|
|
45
48
|
DecryptionKey(self.invalid_key, 'invalid'),
|
|
46
49
|
DecryptionKey(self.valid_key, DecryptionAlgorithm['Aes256Gcm']),
|
|
47
50
|
])
|
|
@@ -51,8 +54,8 @@ class TestSealed(unittest.TestCase):
|
|
|
51
54
|
# "{\"invalid\":true}"
|
|
52
55
|
'noXc7VOpBstjjcavDKSKr4HTavt4mdq8h6NC32T0hUtw9S0jXT8lPjZiWL8SyHxmrF3uTGqO+g==')
|
|
53
56
|
|
|
54
|
-
with self.assertRaisesRegex(
|
|
55
|
-
|
|
57
|
+
with self.assertRaisesRegex(ValueError, "Sealed data is not valid event response"):
|
|
58
|
+
unseal_event_response(sealed_data, [
|
|
56
59
|
DecryptionKey(self.invalid_key, DecryptionAlgorithm['Aes256Gcm']),
|
|
57
60
|
DecryptionKey(self.valid_key, DecryptionAlgorithm['Aes256Gcm']),
|
|
58
61
|
])
|
|
@@ -61,8 +64,8 @@ class TestSealed(unittest.TestCase):
|
|
|
61
64
|
sealed_data = base64.b64decode(
|
|
62
65
|
'noXc7dtuk0smGE+ZbaoXzrp6Rq8ySxLepejTsu7+jUXlPhV1w+WuHx9gbPhaENJnOQo8BcGmsaRhL5k2NVj+DRNzYO9cQD7wHxmXKCyTbl/dvSYOMoHziUZ2VbQ7tmaorFny26v8jROr/UBGfvPE0dLKC36IN9ZlJ3X0NZJO8SY+8bCr4mTrkVZsv/hpvZp+OjC4h7e5vxcpmnBWXzxfaO79Lq3aMRIEf9XfK7/bVIptHaEqtPKCTwl9rz1KUpUUNQSHTPM0NlqJe9bjYf5mr1uYvWHhcJoXSyRyVMxIv/quRiw3SKJzAMOTBiAvFICpWuRFa+T/xIMHK0g96w/IMQo0jdY1E067ZEvBUOBmsJnGJg1LllS3rbJVe+E2ClFNL8SzFphyvtlcfvYB+SVSD4bzI0w/YCldv5Sq42BFt5bn4n4aE5A6658DYsfSRYWqP6OpqPJx96cY34W7H1t/ZG0ulez6zF5NvWhc1HDQ1gMtXd+K/ogt1n+FyFtn8xzvtSGkmrc2jJgYNI5Pd0Z0ent73z0MKbJx9v2ta/emPEzPr3cndN5amdr6TmRkDU4bq0vyhAh87DJrAnJQLdrvYLddnrr8xTdeXxj1i1Yug6SGncPh9sbTYkdOfuamPAYOuiJVBAMcfYsYEiQndZe8mOQ4bpCr+hxAAqixhZ16pQ8CeUwa247+D2scRymLB8qJXlaERuFZtWGVAZ8VP/GS/9EXjrzpjGX9vlrIPeJP8fh2S5QPzw55cGNJ7JfAdOyManXnoEw2/QzDhSZQARVl+akFgSO0Y13YmbiL7H6HcKWGcJ2ipDKIaj2fJ7GE0Vzyt+CBEezSQR99Igd8x3p2JtvsVKp35iLPksjS1VqtSCTbuIRUlINlfQHNjeQiE/B/61jo3Mf7SmjYjqtvXt5e9RKb+CQku2qH4ZU8xN3DSg+4mLom3BgKBkm/MoyGBpMK41c96d2tRp3tp4hV0F6ac02Crg7P2lw8IUct+i2VJ8VUjcbRfTIPQs0HjNjM6/gLfLCkWOHYrlFjwusXWQCJz91Kq+hVxj7M9LtplPO4AUq6RUMNhlPGUmyOI2tcUMrjq9vMLXGlfdkH185zM4Mk+O7DRLC8683lXZFZvcBEmxr855PqLLH/9SpYKHBoGRatDRdQe3oRp6gHS0jpQ1SW/si4kvLKiUNjiBExvbQVOUV7/VFXvG1RpM9wbzSoOd40gg7ZzD/72QshUC/25DkM/Pm7RBzwtjgmnRKjT+mROeC/7VQLoz3amv09O8Mvbt+h/lX5+51Q834F7NgIGagbB20WtWcMtrmKrvCEZlaoiZrmYVSbi1RfknRK7CTPJkopw9IjO7Ut2EhKZ+jL4rwk6TlVm6EC6Kuj7KNqp6wB/UNe9eM2Eym/aiHAcja8XN4YQhSIuJD2Wxb0n3LkKnAjK1/GY65c8K6rZsVYQ0MQL1j4lMl0UZPjG/vzKyetIsVDyXc4J9ZhOEMYnt/LaxEeSt4EMJGBA9wpTmz33X4h3ij0Y3DY/rH7lrEScUknw20swTZRm5T6q1bnimj7M1OiOkebdI09MZ0nyaTWRHdB7B52C/moh89Q7qa2Fulp5h8Us1FYRkWBLt37a5rGI1IfVeP38KaPbagND+XzWpNqX4HVrAVPLQVK5EwUvGamED3ooJ0FMieTc0IH0N+IeUYG7Q8XmrRVBcw32W8pEfYLO9L71An/J0jQZCIP8DuQnUG0mOvunOuloBGvP/9LvkBlkamh68F0a5f5ny1jloyIFJhRh5dt2SBlbsXS9AKqUwARYSSsA9Ao4WJWOZMyjp8A+qIBAfW65MdhhUDKYMBgIAbMCc3uiptzElQQopE5TT5xIhwfYxa503jVzQbz1Q==')
|
|
63
66
|
|
|
64
|
-
with self.assertRaisesRegex(
|
|
65
|
-
|
|
67
|
+
with self.assertRaisesRegex(UnsealAggregateError, "Unable to decrypt sealed data") as context:
|
|
68
|
+
unseal_event_response(sealed_data, [
|
|
66
69
|
DecryptionKey(self.invalid_key, DecryptionAlgorithm['Aes256Gcm']),
|
|
67
70
|
DecryptionKey(self.valid_key, DecryptionAlgorithm['Aes256Gcm']),
|
|
68
71
|
])
|
|
@@ -76,8 +79,8 @@ class TestSealed(unittest.TestCase):
|
|
|
76
79
|
sealed_data = base64.b64decode(
|
|
77
80
|
'noXc7SXO+mqeAGrvBMgObi/S0fXTpP3zupk8qFqsO/1zdtWCD169iLA3VkkZh9ICHpZ0oWRzqG0M9/TnCeKFohgBLqDp6O0zEfXOv6i5q++aucItznQdLwrKLP+O0blfb4dWVI8/aSbd4ELAZuJJxj9bCoVZ1vk+ShbUXCRZTD30OIEAr3eiG9aw00y1UZIqMgX6CkFlU9L9OnKLsNsyomPIaRHTmgVTI5kNhrnVNyNsnzt9rY7fUD52DQxJILVPrUJ1Q+qW7VyNslzGYBPG0DyYlKbRAomKJDQIkdj/Uwa6bhSTq4XYNVvbk5AJ/dGwvsVdOnkMT2Ipd67KwbKfw5bqQj/cw6bj8Cp2FD4Dy4Ud4daBpPRsCyxBM2jOjVz1B/lAyrOp8BweXOXYugwdPyEn38MBZ5oL4D38jIwR/QiVnMHpERh93jtgwh9Abza6i4/zZaDAbPhtZLXSM5ztdctv8bAb63CppLU541Kf4OaLO3QLvfLRXK2n8bwEwzVAqQ22dyzt6/vPiRbZ5akh8JB6QFXG0QJF9DejsIspKF3JvOKjG2edmC9o+GfL3hwDBiihYXCGY9lElZICAdt+7rZm5UxMx7STrVKy81xcvfaIp1BwGh/HyMsJnkE8IczzRFpLlHGYuNDxdLoBjiifrmHvOCUDcV8UvhSV+UAZtAVejdNGo5G/bz0NF21HUO4pVRPu6RqZIs/aX4hlm6iO/0Ru00ct8pfadUIgRcephTuFC2fHyZxNBC6NApRtLSNLfzYTTo/uSjgcu6rLWiNo5G7yfrM45RXjalFEFzk75Z/fu9lCJJa5uLFgDNKlU+IaFjArfXJCll3apbZp4/LNKiU35ZlB7ZmjDTrji1wLep8iRVVEGht/DW00MTok7Zn7Fv+MlxgWmbZB3BuezwTmXb/fNw==')
|
|
78
81
|
|
|
79
|
-
with self.assertRaisesRegex(
|
|
80
|
-
|
|
82
|
+
with self.assertRaisesRegex(UnsealAggregateError, 'Unable to decrypt sealed data'):
|
|
83
|
+
unseal_event_response(sealed_data, [
|
|
81
84
|
DecryptionKey(self.invalid_key, DecryptionAlgorithm['Aes256Gcm']),
|
|
82
85
|
DecryptionKey(self.invalid_key, DecryptionAlgorithm['Aes256Gcm']),
|
|
83
86
|
])
|
|
@@ -85,8 +88,8 @@ class TestSealed(unittest.TestCase):
|
|
|
85
88
|
def test_unseal_empty_data(self):
|
|
86
89
|
sealed_data = bytearray(b'')
|
|
87
90
|
|
|
88
|
-
with self.assertRaisesRegex(
|
|
89
|
-
|
|
91
|
+
with self.assertRaisesRegex(ValueError, 'Invalid sealed data header'):
|
|
92
|
+
unseal_event_response(sealed_data, [
|
|
90
93
|
DecryptionKey(self.invalid_key, DecryptionAlgorithm['Aes256Gcm']),
|
|
91
94
|
DecryptionKey(self.valid_key, DecryptionAlgorithm['Aes256Gcm']),
|
|
92
95
|
])
|
|
@@ -94,8 +97,8 @@ class TestSealed(unittest.TestCase):
|
|
|
94
97
|
def test_unseal_invalid_nonce(self):
|
|
95
98
|
sealed_data = bytes([0x9E, 0x85, 0xDC, 0xED, 0xAA, 0xBB, 0xCC])
|
|
96
99
|
|
|
97
|
-
with self.assertRaisesRegex(
|
|
98
|
-
|
|
100
|
+
with self.assertRaisesRegex(UnsealAggregateError, 'Unable to decrypt sealed data') as context:
|
|
101
|
+
unseal_event_response(sealed_data, [
|
|
99
102
|
DecryptionKey(self.invalid_key, DecryptionAlgorithm['Aes256Gcm']),
|
|
100
103
|
DecryptionKey(self.valid_key, DecryptionAlgorithm['Aes256Gcm']),
|
|
101
104
|
])
|
{fingerprint_pro_server_api_sdk-7.0.0.dev1 → fingerprint_pro_server_api_sdk-7.0.0.dev2}/LICENSE
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|