diff --git a/README.md b/README.md index 189ce561..5984b637 100644 --- a/README.md +++ b/README.md @@ -164,6 +164,7 @@ Class | Method | HTTP request | Description - [ErrorEvent404ResponseError](docs/ErrorEvent404ResponseError.md) - [ErrorVisits403](docs/ErrorVisits403.md) - [EventResponse](docs/EventResponse.md) + - [HighActivityResult](docs/HighActivityResult.md) - [IPLocation](docs/IPLocation.md) - [IPLocationCity](docs/IPLocationCity.md) - [IdentificationError](docs/IdentificationError.md) @@ -173,6 +174,7 @@ Class | Method | HTTP request | Description - [IpInfoResultV4](docs/IpInfoResultV4.md) - [IpInfoResultV6](docs/IpInfoResultV6.md) - [Location](docs/Location.md) + - [LocationSpoofingResult](docs/LocationSpoofingResult.md) - [ManyRequestsResponse](docs/ManyRequestsResponse.md) - [ProductError](docs/ProductError.md) - [ProductsResponse](docs/ProductsResponse.md) @@ -191,12 +193,14 @@ Class | Method | HTTP request | Description - [SignalResponseFactoryResetData](docs/SignalResponseFactoryResetData.md) - [SignalResponseFrida](docs/SignalResponseFrida.md) - [SignalResponseFridaData](docs/SignalResponseFridaData.md) + - [SignalResponseHighActivity](docs/SignalResponseHighActivity.md) - [SignalResponseIncognito](docs/SignalResponseIncognito.md) - [SignalResponseIncognitoData](docs/SignalResponseIncognitoData.md) - [SignalResponseIpBlocklist](docs/SignalResponseIpBlocklist.md) - [SignalResponseIpInfo](docs/SignalResponseIpInfo.md) - [SignalResponseJailbroken](docs/SignalResponseJailbroken.md) - [SignalResponseJailbrokenData](docs/SignalResponseJailbrokenData.md) + - [SignalResponseLocationSpoofing](docs/SignalResponseLocationSpoofing.md) - [SignalResponsePrivacySettings](docs/SignalResponsePrivacySettings.md) - [SignalResponsePrivacySettingsData](docs/SignalResponsePrivacySettingsData.md) - [SignalResponseProxy](docs/SignalResponseProxy.md) diff --git a/docs/HighActivityResult.md b/docs/HighActivityResult.md new file mode 100644 index 00000000..80435cc8 --- /dev/null +++ b/docs/HighActivityResult.md @@ -0,0 +1,10 @@ +# HighActivityResult + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**result** | **bool** | Flag indicating whether the request came from a high activity visitor. | [optional] +**daily_requests** | **float** | Number of requests from the same visitor in the previous day. | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/docs/IPLocation.md b/docs/IPLocation.md index a665bbb2..5fc4bd38 100644 --- a/docs/IPLocation.md +++ b/docs/IPLocation.md @@ -3,7 +3,7 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**accuracy_radius** | **int** | | [optional] +**accuracy_radius** | **int** | The IP address is likely to be within this radius (in km) of the specified location. | [optional] **latitude** | **float** | | [optional] **longitude** | **float** | | [optional] **postal_code** | **str** | | [optional] diff --git a/docs/LocationSpoofingResult.md b/docs/LocationSpoofingResult.md new file mode 100644 index 00000000..8f41c6be --- /dev/null +++ b/docs/LocationSpoofingResult.md @@ -0,0 +1,9 @@ +# LocationSpoofingResult + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**result** | **bool** | Flag indicating whether the request came from a device with location spoofing enabled. | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/docs/ProductsResponse.md b/docs/ProductsResponse.md index c7eb19c6..2f0f6d80 100644 --- a/docs/ProductsResponse.md +++ b/docs/ProductsResponse.md @@ -22,6 +22,8 @@ Name | Type | Description | Notes **vpn** | [**SignalResponseVpn**](SignalResponseVpn.md) | | [optional] **proxy** | [**SignalResponseProxy**](SignalResponseProxy.md) | | [optional] **tampering** | [**SignalResponseTampering**](SignalResponseTampering.md) | | [optional] +**high_activity** | [**SignalResponseHighActivity**](SignalResponseHighActivity.md) | | [optional] +**location_spoofing** | [**SignalResponseLocationSpoofing**](SignalResponseLocationSpoofing.md) | | [optional] **raw_device_attributes** | [**SignalResponseRawDeviceAttributes**](SignalResponseRawDeviceAttributes.md) | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/ProductsResponseIdentificationData.md b/docs/ProductsResponseIdentificationData.md index 3f37da5a..250b1356 100644 --- a/docs/ProductsResponseIdentificationData.md +++ b/docs/ProductsResponseIdentificationData.md @@ -17,7 +17,7 @@ Name | Type | Description | Notes **visitor_found** | **bool** | Attribute represents if a visitor had been identified before. | **first_seen_at** | [**SeenAt**](SeenAt.md) | | **last_seen_at** | [**SeenAt**](SeenAt.md) | | -**visitor_id** | **str** | String of 20 characters that uniquely identifies the visitor's browser. **Pro Plus:** If a bot is detected (`products.botd.bot.result != \"notDetected\"`), the `visitorId` value contains a placeholder string `BotDetected000000000`. | +**visitor_id** | **str** | String of 20 characters that uniquely identifies the visitor's browser. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/SignalResponseHighActivity.md b/docs/SignalResponseHighActivity.md new file mode 100644 index 00000000..c98d5bbe --- /dev/null +++ b/docs/SignalResponseHighActivity.md @@ -0,0 +1,10 @@ +# SignalResponseHighActivity + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**data** | [**HighActivityResult**](HighActivityResult.md) | | [optional] +**error** | [**ProductError**](ProductError.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/docs/SignalResponseLocationSpoofing.md b/docs/SignalResponseLocationSpoofing.md new file mode 100644 index 00000000..1975c88a --- /dev/null +++ b/docs/SignalResponseLocationSpoofing.md @@ -0,0 +1,10 @@ +# SignalResponseLocationSpoofing + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**data** | [**LocationSpoofingResult**](LocationSpoofingResult.md) | | [optional] +**error** | [**ProductError**](ProductError.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/docs/VpnResult.md b/docs/VpnResult.md index 1084545d..6c38c69e 100644 --- a/docs/VpnResult.md +++ b/docs/VpnResult.md @@ -4,6 +4,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **result** | **bool** | VPN or other anonymizing service has been used when sending the request. | [optional] +**origin_timezone** | **str** | Local timezone which is used in timezoneMismatch method. | [optional] **methods** | [**VpnResultMethods**](VpnResultMethods.md) | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/WebhookVisit.md b/docs/WebhookVisit.md index d1220bb5..b2e524cd 100644 --- a/docs/WebhookVisit.md +++ b/docs/WebhookVisit.md @@ -23,6 +23,8 @@ Name | Type | Description | Notes **proxy** | [**WebhookSignalResponseProxy**](WebhookSignalResponseProxy.md) | | [optional] **tampering** | [**TamperingResult**](TamperingResult.md) | | [optional] **raw_device_attributes** | [**RawDeviceAttributesResult**](RawDeviceAttributesResult.md) | | [optional] +**high_activity** | [**HighActivityResult**](HighActivityResult.md) | | [optional] +**location_spoofing** | [**LocationSpoofingResult**](LocationSpoofingResult.md) | | [optional] **request_id** | **str** | Unique identifier of the user's identification request. | **browser_details** | [**BrowserDetails**](BrowserDetails.md) | | **ip** | **str** | | diff --git a/fingerprint_pro_server_api_sdk/__init__.py b/fingerprint_pro_server_api_sdk/__init__.py index 10968191..56345ddd 100644 --- a/fingerprint_pro_server_api_sdk/__init__.py +++ b/fingerprint_pro_server_api_sdk/__init__.py @@ -32,6 +32,7 @@ from fingerprint_pro_server_api_sdk.models.error_event404_response_error import ErrorEvent404ResponseError from fingerprint_pro_server_api_sdk.models.error_visits403 import ErrorVisits403 from fingerprint_pro_server_api_sdk.models.event_response import EventResponse +from fingerprint_pro_server_api_sdk.models.high_activity_result import HighActivityResult from fingerprint_pro_server_api_sdk.models.ip_location import IPLocation from fingerprint_pro_server_api_sdk.models.ip_location_city import IPLocationCity from fingerprint_pro_server_api_sdk.models.identification_error import IdentificationError @@ -41,6 +42,7 @@ from fingerprint_pro_server_api_sdk.models.ip_info_result_v4 import IpInfoResultV4 from fingerprint_pro_server_api_sdk.models.ip_info_result_v6 import IpInfoResultV6 from fingerprint_pro_server_api_sdk.models.location import Location +from fingerprint_pro_server_api_sdk.models.location_spoofing_result import LocationSpoofingResult from fingerprint_pro_server_api_sdk.models.many_requests_response import ManyRequestsResponse from fingerprint_pro_server_api_sdk.models.product_error import ProductError from fingerprint_pro_server_api_sdk.models.products_response import ProductsResponse @@ -59,12 +61,14 @@ from fingerprint_pro_server_api_sdk.models.signal_response_factory_reset_data import SignalResponseFactoryResetData from fingerprint_pro_server_api_sdk.models.signal_response_frida import SignalResponseFrida from fingerprint_pro_server_api_sdk.models.signal_response_frida_data import SignalResponseFridaData +from fingerprint_pro_server_api_sdk.models.signal_response_high_activity import SignalResponseHighActivity from fingerprint_pro_server_api_sdk.models.signal_response_incognito import SignalResponseIncognito from fingerprint_pro_server_api_sdk.models.signal_response_incognito_data import SignalResponseIncognitoData from fingerprint_pro_server_api_sdk.models.signal_response_ip_blocklist import SignalResponseIpBlocklist from fingerprint_pro_server_api_sdk.models.signal_response_ip_info import SignalResponseIpInfo from fingerprint_pro_server_api_sdk.models.signal_response_jailbroken import SignalResponseJailbroken from fingerprint_pro_server_api_sdk.models.signal_response_jailbroken_data import SignalResponseJailbrokenData +from fingerprint_pro_server_api_sdk.models.signal_response_location_spoofing import SignalResponseLocationSpoofing from fingerprint_pro_server_api_sdk.models.signal_response_privacy_settings import SignalResponsePrivacySettings from fingerprint_pro_server_api_sdk.models.signal_response_privacy_settings_data import SignalResponsePrivacySettingsData from fingerprint_pro_server_api_sdk.models.signal_response_proxy import SignalResponseProxy diff --git a/fingerprint_pro_server_api_sdk/models/__init__.py b/fingerprint_pro_server_api_sdk/models/__init__.py index 4a275a66..091c0c72 100644 --- a/fingerprint_pro_server_api_sdk/models/__init__.py +++ b/fingerprint_pro_server_api_sdk/models/__init__.py @@ -26,6 +26,7 @@ from fingerprint_pro_server_api_sdk.models.error_event404_response_error import ErrorEvent404ResponseError from fingerprint_pro_server_api_sdk.models.error_visits403 import ErrorVisits403 from fingerprint_pro_server_api_sdk.models.event_response import EventResponse +from fingerprint_pro_server_api_sdk.models.high_activity_result import HighActivityResult from fingerprint_pro_server_api_sdk.models.ip_location import IPLocation from fingerprint_pro_server_api_sdk.models.ip_location_city import IPLocationCity from fingerprint_pro_server_api_sdk.models.identification_error import IdentificationError @@ -35,6 +36,7 @@ from fingerprint_pro_server_api_sdk.models.ip_info_result_v4 import IpInfoResultV4 from fingerprint_pro_server_api_sdk.models.ip_info_result_v6 import IpInfoResultV6 from fingerprint_pro_server_api_sdk.models.location import Location +from fingerprint_pro_server_api_sdk.models.location_spoofing_result import LocationSpoofingResult from fingerprint_pro_server_api_sdk.models.many_requests_response import ManyRequestsResponse from fingerprint_pro_server_api_sdk.models.product_error import ProductError from fingerprint_pro_server_api_sdk.models.products_response import ProductsResponse @@ -53,12 +55,14 @@ from fingerprint_pro_server_api_sdk.models.signal_response_factory_reset_data import SignalResponseFactoryResetData from fingerprint_pro_server_api_sdk.models.signal_response_frida import SignalResponseFrida from fingerprint_pro_server_api_sdk.models.signal_response_frida_data import SignalResponseFridaData +from fingerprint_pro_server_api_sdk.models.signal_response_high_activity import SignalResponseHighActivity from fingerprint_pro_server_api_sdk.models.signal_response_incognito import SignalResponseIncognito from fingerprint_pro_server_api_sdk.models.signal_response_incognito_data import SignalResponseIncognitoData from fingerprint_pro_server_api_sdk.models.signal_response_ip_blocklist import SignalResponseIpBlocklist from fingerprint_pro_server_api_sdk.models.signal_response_ip_info import SignalResponseIpInfo from fingerprint_pro_server_api_sdk.models.signal_response_jailbroken import SignalResponseJailbroken from fingerprint_pro_server_api_sdk.models.signal_response_jailbroken_data import SignalResponseJailbrokenData +from fingerprint_pro_server_api_sdk.models.signal_response_location_spoofing import SignalResponseLocationSpoofing from fingerprint_pro_server_api_sdk.models.signal_response_privacy_settings import SignalResponsePrivacySettings from fingerprint_pro_server_api_sdk.models.signal_response_privacy_settings_data import SignalResponsePrivacySettingsData from fingerprint_pro_server_api_sdk.models.signal_response_proxy import SignalResponseProxy diff --git a/fingerprint_pro_server_api_sdk/models/high_activity_result.py b/fingerprint_pro_server_api_sdk/models/high_activity_result.py new file mode 100644 index 00000000..3bb83f29 --- /dev/null +++ b/fingerprint_pro_server_api_sdk/models/high_activity_result.py @@ -0,0 +1,143 @@ +# coding: utf-8 + +""" + Fingerprint Pro Server API + + 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. # noqa: E501 + + OpenAPI spec version: 3 + Contact: support@fingerprint.com + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class HighActivityResult(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'result': 'bool', + 'daily_requests': 'float' + } + + attribute_map = { + 'result': 'result', + 'daily_requests': 'dailyRequests' + } + + def __init__(self, result=None, daily_requests=None): # noqa: E501 + """HighActivityResult - a model defined in Swagger""" # noqa: E501 + self._result = None + self._daily_requests = None + self.discriminator = None + if result is not None: + self.result = result + if daily_requests is not None: + self.daily_requests = daily_requests + + @property + def result(self): + """Gets the result of this HighActivityResult. # noqa: E501 + + Flag indicating whether the request came from a high activity visitor. # noqa: E501 + + :return: The result of this HighActivityResult. # noqa: E501 + :rtype: bool + """ + return self._result + + @result.setter + def result(self, result): + """Sets the result of this HighActivityResult. + + Flag indicating whether the request came from a high activity visitor. # noqa: E501 + + :param result: The result of this HighActivityResult. # noqa: E501 + :type: bool + """ + + self._result = result + + @property + def daily_requests(self): + """Gets the daily_requests of this HighActivityResult. # noqa: E501 + + Number of requests from the same visitor in the previous day. # noqa: E501 + + :return: The daily_requests of this HighActivityResult. # noqa: E501 + :rtype: float + """ + return self._daily_requests + + @daily_requests.setter + def daily_requests(self, daily_requests): + """Sets the daily_requests of this HighActivityResult. + + Number of requests from the same visitor in the previous day. # noqa: E501 + + :param daily_requests: The daily_requests of this HighActivityResult. # noqa: E501 + :type: float + """ + + self._daily_requests = daily_requests + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(HighActivityResult, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, HighActivityResult): + return False + + return self.to_dict() == other.to_dict() + + def __ne__(self, other): + """Returns true if both objects are not equal""" + if not isinstance(other, HighActivityResult): + return True + + return self.to_dict() != other.to_dict() diff --git a/fingerprint_pro_server_api_sdk/models/ip_location.py b/fingerprint_pro_server_api_sdk/models/ip_location.py index 3a27fa60..fc5710f4 100644 --- a/fingerprint_pro_server_api_sdk/models/ip_location.py +++ b/fingerprint_pro_server_api_sdk/models/ip_location.py @@ -86,6 +86,7 @@ def __init__(self, accuracy_radius=None, latitude=None, longitude=None, postal_c def accuracy_radius(self): """Gets the accuracy_radius of this IPLocation. # noqa: E501 + The IP address is likely to be within this radius (in km) of the specified location. # noqa: E501 :return: The accuracy_radius of this IPLocation. # noqa: E501 :rtype: int @@ -96,6 +97,7 @@ def accuracy_radius(self): def accuracy_radius(self, accuracy_radius): """Sets the accuracy_radius of this IPLocation. + The IP address is likely to be within this radius (in km) of the specified location. # noqa: E501 :param accuracy_radius: The accuracy_radius of this IPLocation. # noqa: E501 :type: int diff --git a/fingerprint_pro_server_api_sdk/models/location_spoofing_result.py b/fingerprint_pro_server_api_sdk/models/location_spoofing_result.py new file mode 100644 index 00000000..808df4fb --- /dev/null +++ b/fingerprint_pro_server_api_sdk/models/location_spoofing_result.py @@ -0,0 +1,115 @@ +# coding: utf-8 + +""" + Fingerprint Pro Server API + + 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. # noqa: E501 + + OpenAPI spec version: 3 + Contact: support@fingerprint.com + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class LocationSpoofingResult(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'result': 'bool' + } + + attribute_map = { + 'result': 'result' + } + + def __init__(self, result=None): # noqa: E501 + """LocationSpoofingResult - a model defined in Swagger""" # noqa: E501 + self._result = None + self.discriminator = None + if result is not None: + self.result = result + + @property + def result(self): + """Gets the result of this LocationSpoofingResult. # noqa: E501 + + Flag indicating whether the request came from a device with location spoofing enabled. # noqa: E501 + + :return: The result of this LocationSpoofingResult. # noqa: E501 + :rtype: bool + """ + return self._result + + @result.setter + def result(self, result): + """Sets the result of this LocationSpoofingResult. + + Flag indicating whether the request came from a device with location spoofing enabled. # noqa: E501 + + :param result: The result of this LocationSpoofingResult. # noqa: E501 + :type: bool + """ + + self._result = result + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(LocationSpoofingResult, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, LocationSpoofingResult): + return False + + return self.to_dict() == other.to_dict() + + def __ne__(self, other): + """Returns true if both objects are not equal""" + if not isinstance(other, LocationSpoofingResult): + return True + + return self.to_dict() != other.to_dict() diff --git a/fingerprint_pro_server_api_sdk/models/products_response.py b/fingerprint_pro_server_api_sdk/models/products_response.py index 22f5e0cc..1440a34a 100644 --- a/fingerprint_pro_server_api_sdk/models/products_response.py +++ b/fingerprint_pro_server_api_sdk/models/products_response.py @@ -45,6 +45,8 @@ class ProductsResponse(object): 'vpn': 'SignalResponseVpn', 'proxy': 'SignalResponseProxy', 'tampering': 'SignalResponseTampering', + 'high_activity': 'SignalResponseHighActivity', + 'location_spoofing': 'SignalResponseLocationSpoofing', 'raw_device_attributes': 'SignalResponseRawDeviceAttributes' } @@ -66,10 +68,12 @@ class ProductsResponse(object): 'vpn': 'vpn', 'proxy': 'proxy', 'tampering': 'tampering', + 'high_activity': 'highActivity', + 'location_spoofing': 'locationSpoofing', 'raw_device_attributes': 'rawDeviceAttributes' } - def __init__(self, identification=None, botd=None, ip_info=None, incognito=None, root_apps=None, emulator=None, cloned_app=None, factory_reset=None, jailbroken=None, frida=None, ip_blocklist=None, tor=None, privacy_settings=None, virtual_machine=None, vpn=None, proxy=None, tampering=None, raw_device_attributes=None): # noqa: E501 + def __init__(self, identification=None, botd=None, ip_info=None, incognito=None, root_apps=None, emulator=None, cloned_app=None, factory_reset=None, jailbroken=None, frida=None, ip_blocklist=None, tor=None, privacy_settings=None, virtual_machine=None, vpn=None, proxy=None, tampering=None, high_activity=None, location_spoofing=None, raw_device_attributes=None): # noqa: E501 """ProductsResponse - a model defined in Swagger""" # noqa: E501 self._identification = None self._botd = None @@ -88,6 +92,8 @@ def __init__(self, identification=None, botd=None, ip_info=None, incognito=None, self._vpn = None self._proxy = None self._tampering = None + self._high_activity = None + self._location_spoofing = None self._raw_device_attributes = None self.discriminator = None if identification is not None: @@ -124,6 +130,10 @@ def __init__(self, identification=None, botd=None, ip_info=None, incognito=None, self.proxy = proxy if tampering is not None: self.tampering = tampering + if high_activity is not None: + self.high_activity = high_activity + if location_spoofing is not None: + self.location_spoofing = location_spoofing if raw_device_attributes is not None: self.raw_device_attributes = raw_device_attributes @@ -484,6 +494,48 @@ def tampering(self, tampering): self._tampering = tampering + @property + def high_activity(self): + """Gets the high_activity of this ProductsResponse. # noqa: E501 + + + :return: The high_activity of this ProductsResponse. # noqa: E501 + :rtype: SignalResponseHighActivity + """ + return self._high_activity + + @high_activity.setter + def high_activity(self, high_activity): + """Sets the high_activity of this ProductsResponse. + + + :param high_activity: The high_activity of this ProductsResponse. # noqa: E501 + :type: SignalResponseHighActivity + """ + + self._high_activity = high_activity + + @property + def location_spoofing(self): + """Gets the location_spoofing of this ProductsResponse. # noqa: E501 + + + :return: The location_spoofing of this ProductsResponse. # noqa: E501 + :rtype: SignalResponseLocationSpoofing + """ + return self._location_spoofing + + @location_spoofing.setter + def location_spoofing(self, location_spoofing): + """Sets the location_spoofing of this ProductsResponse. + + + :param location_spoofing: The location_spoofing of this ProductsResponse. # noqa: E501 + :type: SignalResponseLocationSpoofing + """ + + self._location_spoofing = location_spoofing + @property def raw_device_attributes(self): """Gets the raw_device_attributes of this ProductsResponse. # noqa: E501 diff --git a/fingerprint_pro_server_api_sdk/models/products_response_identification_data.py b/fingerprint_pro_server_api_sdk/models/products_response_identification_data.py index 5044c2c6..cee6eb96 100644 --- a/fingerprint_pro_server_api_sdk/models/products_response_identification_data.py +++ b/fingerprint_pro_server_api_sdk/models/products_response_identification_data.py @@ -436,7 +436,7 @@ def last_seen_at(self, last_seen_at): def visitor_id(self): """Gets the visitor_id of this ProductsResponseIdentificationData. # noqa: E501 - String of 20 characters that uniquely identifies the visitor's browser. **Pro Plus:** If a bot is detected (`products.botd.bot.result != \"notDetected\"`), the `visitorId` value contains a placeholder string `BotDetected000000000`. # noqa: E501 + String of 20 characters that uniquely identifies the visitor's browser. # noqa: E501 :return: The visitor_id of this ProductsResponseIdentificationData. # noqa: E501 :rtype: str @@ -447,7 +447,7 @@ def visitor_id(self): def visitor_id(self, visitor_id): """Sets the visitor_id of this ProductsResponseIdentificationData. - String of 20 characters that uniquely identifies the visitor's browser. **Pro Plus:** If a bot is detected (`products.botd.bot.result != \"notDetected\"`), the `visitorId` value contains a placeholder string `BotDetected000000000`. # noqa: E501 + String of 20 characters that uniquely identifies the visitor's browser. # noqa: E501 :param visitor_id: The visitor_id of this ProductsResponseIdentificationData. # noqa: E501 :type: str diff --git a/fingerprint_pro_server_api_sdk/models/signal_response_high_activity.py b/fingerprint_pro_server_api_sdk/models/signal_response_high_activity.py new file mode 100644 index 00000000..84195238 --- /dev/null +++ b/fingerprint_pro_server_api_sdk/models/signal_response_high_activity.py @@ -0,0 +1,139 @@ +# coding: utf-8 + +""" + Fingerprint Pro Server API + + 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. # noqa: E501 + + OpenAPI spec version: 3 + Contact: support@fingerprint.com + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class SignalResponseHighActivity(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'data': 'HighActivityResult', + 'error': 'ProductError' + } + + attribute_map = { + 'data': 'data', + 'error': 'error' + } + + def __init__(self, data=None, error=None): # noqa: E501 + """SignalResponseHighActivity - a model defined in Swagger""" # noqa: E501 + self._data = None + self._error = None + self.discriminator = None + if data is not None: + self.data = data + if error is not None: + self.error = error + + @property + def data(self): + """Gets the data of this SignalResponseHighActivity. # noqa: E501 + + + :return: The data of this SignalResponseHighActivity. # noqa: E501 + :rtype: HighActivityResult + """ + return self._data + + @data.setter + def data(self, data): + """Sets the data of this SignalResponseHighActivity. + + + :param data: The data of this SignalResponseHighActivity. # noqa: E501 + :type: HighActivityResult + """ + + self._data = data + + @property + def error(self): + """Gets the error of this SignalResponseHighActivity. # noqa: E501 + + + :return: The error of this SignalResponseHighActivity. # noqa: E501 + :rtype: ProductError + """ + return self._error + + @error.setter + def error(self, error): + """Sets the error of this SignalResponseHighActivity. + + + :param error: The error of this SignalResponseHighActivity. # noqa: E501 + :type: ProductError + """ + + self._error = error + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(SignalResponseHighActivity, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, SignalResponseHighActivity): + return False + + return self.to_dict() == other.to_dict() + + def __ne__(self, other): + """Returns true if both objects are not equal""" + if not isinstance(other, SignalResponseHighActivity): + return True + + return self.to_dict() != other.to_dict() diff --git a/fingerprint_pro_server_api_sdk/models/signal_response_location_spoofing.py b/fingerprint_pro_server_api_sdk/models/signal_response_location_spoofing.py new file mode 100644 index 00000000..b6e30e12 --- /dev/null +++ b/fingerprint_pro_server_api_sdk/models/signal_response_location_spoofing.py @@ -0,0 +1,139 @@ +# coding: utf-8 + +""" + Fingerprint Pro Server API + + 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. # noqa: E501 + + OpenAPI spec version: 3 + Contact: support@fingerprint.com + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class SignalResponseLocationSpoofing(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'data': 'LocationSpoofingResult', + 'error': 'ProductError' + } + + attribute_map = { + 'data': 'data', + 'error': 'error' + } + + def __init__(self, data=None, error=None): # noqa: E501 + """SignalResponseLocationSpoofing - a model defined in Swagger""" # noqa: E501 + self._data = None + self._error = None + self.discriminator = None + if data is not None: + self.data = data + if error is not None: + self.error = error + + @property + def data(self): + """Gets the data of this SignalResponseLocationSpoofing. # noqa: E501 + + + :return: The data of this SignalResponseLocationSpoofing. # noqa: E501 + :rtype: LocationSpoofingResult + """ + return self._data + + @data.setter + def data(self, data): + """Sets the data of this SignalResponseLocationSpoofing. + + + :param data: The data of this SignalResponseLocationSpoofing. # noqa: E501 + :type: LocationSpoofingResult + """ + + self._data = data + + @property + def error(self): + """Gets the error of this SignalResponseLocationSpoofing. # noqa: E501 + + + :return: The error of this SignalResponseLocationSpoofing. # noqa: E501 + :rtype: ProductError + """ + return self._error + + @error.setter + def error(self, error): + """Sets the error of this SignalResponseLocationSpoofing. + + + :param error: The error of this SignalResponseLocationSpoofing. # noqa: E501 + :type: ProductError + """ + + self._error = error + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(SignalResponseLocationSpoofing, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, SignalResponseLocationSpoofing): + return False + + return self.to_dict() == other.to_dict() + + def __ne__(self, other): + """Returns true if both objects are not equal""" + if not isinstance(other, SignalResponseLocationSpoofing): + return True + + return self.to_dict() != other.to_dict() diff --git a/fingerprint_pro_server_api_sdk/models/vpn_result.py b/fingerprint_pro_server_api_sdk/models/vpn_result.py index 37c3a842..f1d22f68 100644 --- a/fingerprint_pro_server_api_sdk/models/vpn_result.py +++ b/fingerprint_pro_server_api_sdk/models/vpn_result.py @@ -29,21 +29,26 @@ class VpnResult(object): """ swagger_types = { 'result': 'bool', + 'origin_timezone': 'str', 'methods': 'VpnResultMethods' } attribute_map = { 'result': 'result', + 'origin_timezone': 'originTimezone', 'methods': 'methods' } - def __init__(self, result=None, methods=None): # noqa: E501 + def __init__(self, result=None, origin_timezone=None, methods=None): # noqa: E501 """VpnResult - a model defined in Swagger""" # noqa: E501 self._result = None + self._origin_timezone = None self._methods = None self.discriminator = None if result is not None: self.result = result + if origin_timezone is not None: + self.origin_timezone = origin_timezone if methods is not None: self.methods = methods @@ -70,6 +75,29 @@ def result(self, result): self._result = result + @property + def origin_timezone(self): + """Gets the origin_timezone of this VpnResult. # noqa: E501 + + Local timezone which is used in timezoneMismatch method. # noqa: E501 + + :return: The origin_timezone of this VpnResult. # noqa: E501 + :rtype: str + """ + return self._origin_timezone + + @origin_timezone.setter + def origin_timezone(self, origin_timezone): + """Sets the origin_timezone of this VpnResult. + + Local timezone which is used in timezoneMismatch method. # noqa: E501 + + :param origin_timezone: The origin_timezone of this VpnResult. # noqa: E501 + :type: str + """ + + self._origin_timezone = origin_timezone + @property def methods(self): """Gets the methods of this VpnResult. # noqa: E501 diff --git a/fingerprint_pro_server_api_sdk/models/webhook_visit.py b/fingerprint_pro_server_api_sdk/models/webhook_visit.py index 69cf8467..3d8a40ea 100644 --- a/fingerprint_pro_server_api_sdk/models/webhook_visit.py +++ b/fingerprint_pro_server_api_sdk/models/webhook_visit.py @@ -48,6 +48,8 @@ class WebhookVisit(object): 'proxy': 'WebhookSignalResponseProxy', 'tampering': 'TamperingResult', 'raw_device_attributes': 'RawDeviceAttributesResult', + 'high_activity': 'HighActivityResult', + 'location_spoofing': 'LocationSpoofingResult', 'request_id': 'str', 'browser_details': 'BrowserDetails', 'ip': 'str', @@ -84,6 +86,8 @@ class WebhookVisit(object): 'proxy': 'proxy', 'tampering': 'tampering', 'raw_device_attributes': 'rawDeviceAttributes', + 'high_activity': 'highActivity', + 'location_spoofing': 'locationSpoofing', 'request_id': 'requestId', 'browser_details': 'browserDetails', 'ip': 'ip', @@ -99,7 +103,7 @@ class WebhookVisit(object): 'last_seen_at': 'lastSeenAt' } - def __init__(self, visitor_id=None, client_referrer=None, user_agent=None, bot=None, ip_info=None, incognito=None, root_apps=None, emulator=None, cloned_app=None, factory_reset=None, jailbroken=None, frida=None, ip_blocklist=None, tor=None, privacy_settings=None, virtual_machine=None, vpn=None, proxy=None, tampering=None, raw_device_attributes=None, request_id=None, browser_details=None, ip=None, ip_location=None, timestamp=None, time=None, url=None, tag=None, linked_id=None, confidence=None, visitor_found=None, first_seen_at=None, last_seen_at=None): # noqa: E501 + def __init__(self, visitor_id=None, client_referrer=None, user_agent=None, bot=None, ip_info=None, incognito=None, root_apps=None, emulator=None, cloned_app=None, factory_reset=None, jailbroken=None, frida=None, ip_blocklist=None, tor=None, privacy_settings=None, virtual_machine=None, vpn=None, proxy=None, tampering=None, raw_device_attributes=None, high_activity=None, location_spoofing=None, request_id=None, browser_details=None, ip=None, ip_location=None, timestamp=None, time=None, url=None, tag=None, linked_id=None, confidence=None, visitor_found=None, first_seen_at=None, last_seen_at=None): # noqa: E501 """WebhookVisit - a model defined in Swagger""" # noqa: E501 self._visitor_id = None self._client_referrer = None @@ -121,6 +125,8 @@ def __init__(self, visitor_id=None, client_referrer=None, user_agent=None, bot=N self._proxy = None self._tampering = None self._raw_device_attributes = None + self._high_activity = None + self._location_spoofing = None self._request_id = None self._browser_details = None self._ip = None @@ -173,6 +179,10 @@ def __init__(self, visitor_id=None, client_referrer=None, user_agent=None, bot=N self.tampering = tampering if raw_device_attributes is not None: self.raw_device_attributes = raw_device_attributes + if high_activity is not None: + self.high_activity = high_activity + if location_spoofing is not None: + self.location_spoofing = location_spoofing self.request_id = request_id self.browser_details = browser_details self.ip = ip @@ -616,6 +626,48 @@ def raw_device_attributes(self, raw_device_attributes): self._raw_device_attributes = raw_device_attributes + @property + def high_activity(self): + """Gets the high_activity of this WebhookVisit. # noqa: E501 + + + :return: The high_activity of this WebhookVisit. # noqa: E501 + :rtype: HighActivityResult + """ + return self._high_activity + + @high_activity.setter + def high_activity(self, high_activity): + """Sets the high_activity of this WebhookVisit. + + + :param high_activity: The high_activity of this WebhookVisit. # noqa: E501 + :type: HighActivityResult + """ + + self._high_activity = high_activity + + @property + def location_spoofing(self): + """Gets the location_spoofing of this WebhookVisit. # noqa: E501 + + + :return: The location_spoofing of this WebhookVisit. # noqa: E501 + :rtype: LocationSpoofingResult + """ + return self._location_spoofing + + @location_spoofing.setter + def location_spoofing(self, location_spoofing): + """Sets the location_spoofing of this WebhookVisit. + + + :param location_spoofing: The location_spoofing of this WebhookVisit. # noqa: E501 + :type: LocationSpoofingResult + """ + + self._location_spoofing = location_spoofing + @property def request_id(self): """Gets the request_id of this WebhookVisit. # noqa: E501 diff --git a/res/fingerprint-server-api.yaml b/res/fingerprint-server-api.yaml index bdd5fc4c..d5a61a28 100644 --- a/res/fingerprint-server-api.yaml +++ b/res/fingerprint-server-api.yaml @@ -182,6 +182,7 @@ paths: vpn: data: result: false + originTimezone: Europe/Berlin methods: timezoneMismatch: false publicVPN: false @@ -231,106 +232,12 @@ paths: value: 0 cookiesEnabled: value: true - proPlusBotDetectedResponse: - summary: Bot detected on Pro Plus plan - value: - products: - identification: - data: - visitorId: BotDetected000000000 - requestId: 0KSh65EnVoB85JBmloQK - incognito: true - linkedId: somelinkedId - time: '2019-05-21T16:40:13Z' - timestamp: 1582299576512 - url: https://www.example.com/login - ip: 61.127.217.15 - ipLocation: {} - browserDetails: - browserName: '' - browserMajorVersion: '' - browserFullVersion: '' - os: '' - osVersion: '' - device: '' - userAgent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) .... - confidence: - score: 0.5 - comment: The real score is unknown - visitorFound: false - firstSeenAt: - global: null - subscription: null - lastSeenAt: - global: null - subscription: null - botd: - data: - bot: - result: bad - type: selenium - url: https://www.example.com/login - ip: 61.127.217.15 - time: '2019-05-21T16:40:13Z' - ipInfo: - data: - v4: - address: 94.142.239.124 - geolocation: - accuracyRadius: 20 - latitude: 50.05 - longitude: 14.4 - postalCode: 150 00 - timezone: Europe/Prague - city: - name: Prague - country: - code: CZ - name: Czechia - continent: - code: EU - name: Europe - subdivisions: - - isoCode: '10' - name: Hlavni mesto Praha - asn: - asn: '7922' - name: COMCAST-7922 - network: 73.136.0.0/13 - dataCenter: - result: true - name: DediPath - incognito: - data: - result: false - rootApps: - data: - result: false - emulator: - data: - result: false - ipBlocklist: + highActivity: data: result: false - details: - emailSpam: false - attackSource: false - tor: + locationSpoofing: data: result: false - vpn: - data: - result: false - methods: - timezoneMismatch: false - publicVPN: false - proxy: - data: - result: false - tampering: - data: - result: false - anomalyScore: 0 allErrorsResponse: summary: All failed signals value: @@ -3810,6 +3717,7 @@ paths: result: false vpn: result: false + originTimezone: Europe/Berlin methods: timezoneMismatch: false publicVPN: false @@ -3850,6 +3758,10 @@ paths: value: 0 cookiesEnabled: value: true + highActivity: + result: false + locationSpoofing: + result: true responses: default: description: The server doesn't validate the answer. @@ -4186,6 +4098,10 @@ components: $ref: '#/components/schemas/TamperingResult' rawDeviceAttributes: $ref: '#/components/schemas/RawDeviceAttributesResult' + highActivity: + $ref: '#/components/schemas/HighActivityResult' + locationSpoofing: + $ref: '#/components/schemas/LocationSpoofingResult' requestId: description: Unique identifier of the user's identification request. type: string @@ -4421,6 +4337,9 @@ components: additionalProperties: false properties: accuracyRadius: + description: >- + The IP address is likely to be within this radius (in km) of the + specified location. type: integer minimum: 0 example: 1000 @@ -4563,16 +4482,8 @@ components: description: > String of 20 characters that uniquely identifies the visitor's browser. - - - **Pro Plus:** - - If a bot is detected (`products.botd.bot.result != - "notDetected"`), the `visitorId` value contains a - placeholder string `BotDetected000000000`. example: - Ibk1527CUFmcnjLwIs4A - - BotDetected000000000 additionalProperties: false required: - browserDetails @@ -4816,6 +4727,22 @@ components: $ref: '#/components/schemas/TamperingResult' error: $ref: '#/components/schemas/ProductError' + highActivity: + title: SignalResponseHighActivity + type: object + properties: + data: + $ref: '#/components/schemas/HighActivityResult' + error: + $ref: '#/components/schemas/ProductError' + locationSpoofing: + title: SignalResponseLocationSpoofing + type: object + properties: + data: + $ref: '#/components/schemas/LocationSpoofingResult' + error: + $ref: '#/components/schemas/ProductError' rawDeviceAttributes: title: SignalResponseRawDeviceAttributes type: object @@ -4975,6 +4902,10 @@ components: VPN or other anonymizing service has been used when sending the request. example: false + originTimezone: + type: string + description: Local timezone which is used in timezoneMismatch method. + example: Europe/Berlin methods: type: object properties: @@ -5014,6 +4945,29 @@ components: example: 0 minimum: 0 maximum: 1 + HighActivityResult: + type: object + properties: + result: + type: boolean + description: >- + Flag indicating whether the request came from a high activity + visitor. + example: false + dailyRequests: + type: number + description: Number of requests from the same visitor in the previous day. + example: 10 + minimum: 1 + LocationSpoofingResult: + type: object + properties: + result: + type: boolean + description: >- + Flag indicating whether the request came from a device with location + spoofing enabled. + example: false RawDeviceAttributesResult: type: object description: > diff --git a/test/mocks/get_event.json b/test/mocks/get_event.json index 90abb41c..0a89f7d4 100644 --- a/test/mocks/get_event.json +++ b/test/mocks/get_event.json @@ -139,6 +139,7 @@ "vpn": { "data": { "result": false, + "originTimezone": "Europe/Berlin", "methods": { "timezoneMismatch": false, "publicVPN": false, @@ -216,6 +217,16 @@ "value": true } } + }, + "highActivity": { + "data": { + "result": false + } + }, + "locationSpoofing": { + "data": { + "result": false + } } } -} +} \ No newline at end of file diff --git a/test/mocks/webhook.json b/test/mocks/webhook.json index 9ad85c5f..9ae35fa0 100644 --- a/test/mocks/webhook.json +++ b/test/mocks/webhook.json @@ -118,6 +118,7 @@ }, "vpn": { "result": false, + "originTimezone": "Europe/Berlin", "methods": { "timezoneMismatch": false, "publicVPN": false, @@ -176,5 +177,11 @@ "cookiesEnabled": { "value": true } + }, + "highActivity": { + "result": false + }, + "locationSpoofing": { + "result": true } -} +} \ No newline at end of file