コード例 #1
0
    def run(self, params={}):
        address = params.get('address')
        order_amount = params.get('order_amount')
        order_currency = params.get('order_currency')
        order_discount_code = params.get('order_discount_code')
        order_affiliate_id = params.get('order_affiliate_id')
        order_subaffiliate_id = params.get('order_subaffiliate_id')
        order_referrer_uri = params.get('order_referrer_uri')
        order_is_gift = params.get('order_is_gift')
        order_has_gift_message = params.get('order_has_gift_message')
        user = self.connection.user
        license = self.connection.license

        # Set client
        client = minfraud.Client(user, license)

        # Define request
        request = {'device': {'ip_address': address}}
        order = {}
        if order_amount:
            order['amount'] = float(order_amount)
        if order_currency:
            order['currency'] = order_currency
        if order_discount_code:
            order['discount_code'] = order_discount_code
        if order_affiliate_id:
            order['affiliate_id'] = order_affiliate_id
        if order_subaffiliate_id:
            order['subaffiliate_id'] = order_subaffiliate_id
        if order_referrer_uri:
            order['referrer_uri'] = order_referrer_uri
        order['is_gift'] = order_is_gift
        order['has_gift_message'] = order_has_gift_message

        # Add order dic to request
        request['order'] = order

        try:
            # Generate request
            insights = client.insights(request)
        except minfraud.AuthenticationError:
            self.logger.error('Authentication failed')
            raise
        except minfraud.InsufficientFundsError:
            self.logger.error('Insufficient funds')
            raise
        except minfraud.InvalidRequestError:
            self.logger.error('Invalid request')
            raise
        except minfraud.HttpError:
            self.logger.error('Unexpected HTTP error occurred')
            raise
        except minfraud.MinFraudError:
            self.logger.error('Unexpected content received from server')
            raise

        # Overall risk score
        risk_score = str(insights.risk_score)
        return {'risk_score': risk_score}
コード例 #2
0
    def run(self, params={}):
        address = params.get("address")
        order_amount = params.get("order_amount")
        order_currency = params.get("order_currency")
        order_discount_code = params.get("order_discount_code")
        order_affiliate_id = params.get("order_affiliate_id")
        order_subaffiliate_id = params.get("order_subaffiliate_id")
        order_referrer_uri = params.get("order_referrer_uri")
        order_is_gift = params.get("order_is_gift")
        order_has_gift_message = params.get("order_has_gift_message")
        user = self.connection.user
        license = self.connection.license

        # Set client
        client = minfraud.Client(user, license)

        # Define request
        request = {"device": {"ip_address": address}}
        order = {}
        if order_amount:
            order["amount"] = float(order_amount)
        if order_currency:
            order["currency"] = order_currency
        if order_discount_code:
            order["discount_code"] = order_discount_code
        if order_affiliate_id:
            order["affiliate_id"] = order_affiliate_id
        if order_subaffiliate_id:
            order["subaffiliate_id"] = order_subaffiliate_id
        if order_referrer_uri:
            order["referrer_uri"] = order_referrer_uri
        order["is_gift"] = order_is_gift
        order["has_gift_message"] = order_has_gift_message

        # Add order dic to request
        request["order"] = order

        try:
            # Generate request
            insights = client.insights(request)
        except minfraud.AuthenticationError:
            self.logger.error("Authentication failed")
            raise
        except minfraud.InsufficientFundsError:
            self.logger.error("Insufficient funds")
            raise
        except minfraud.InvalidRequestError:
            self.logger.error("Invalid request")
            raise
        except minfraud.HttpError:
            self.logger.error("Unexpected HTTP error occurred")
            raise
        except minfraud.MinFraudError:
            self.logger.error("Unexpected content received from server")
            raise

        # Overall risk score
        risk_score = str(insights.risk_score)
        return {"risk_score": risk_score}
コード例 #3
0
    def run(self, params={}):
        address = params.get("address")
        domain = params.get("domain")
        email = params.get("email")
        user = self.connection.user
        license = self.connection.license

        # Set client
        client = minfraud.Client(user, license)

        # Define request
        request = {"device": {"ip_address": address}}
        email_dic = {}
        if domain:
            email_dic["domain"] = domain
        if email:
            email_dic["address"] = email

        # Add email_dic to request
        if email_dic:
            request["email"] = email_dic
        else:
            self.logger.info("No email info provided")

        try:
            # Generate request
            insights = client.insights(request)
        except minfraud.AuthenticationError:
            self.logger.error("Authentication failed")
            raise
        except minfraud.InsufficientFundsError:
            self.logger.error("Insufficient funds")
            raise
        except minfraud.InvalidRequestError:
            self.logger.error("Invalid request")
            raise
        except minfraud.HttpError:
            self.logger.error("Unexpected HTTP error occurred")
            raise
        except minfraud.MinFraudError:
            self.logger.error("Unexpected content received from server")
            raise

        # Overall risk score
        risk_score = str(insights.risk_score)

        # TO-DO - rename email to email_result
        # Email info
        is_free = insights.email.is_free
        is_high_risk = insights.email.is_high_risk
        email_result = {"is_free": is_free, "is_high_risk": is_high_risk}

        # Clean email dict
        email_result = komand.helper.clean_dict(email_result)

        return {"risk_score": risk_score, "email_result": email_result}
コード例 #4
0
    def run(self, params={}):
        address = params.get('address')
        transaction_id = params.get('transaction_id')
        shop_id = params.get('shop_id')
        time = params.get('time')
        event_type = params.get('event_type')
        user = self.connection.user
        license = self.connection.license

        # Set client
        client = minfraud.Client(user, license)

        # Define request
        request = {'device': {'ip_address': address}}
        event = {}
        if transaction_id:
          event['transaction_id'] = transaction_id
        if shop_id:
          event['shop_id'] = shop_id
        if time:
          event['time'] = time
        if event_type != "none":
          event['type'] = event_type

        # Add event dic to request
        # TO-DO - raise exception "if not event"
        if event:
          request['event'] = event
        else:
          self.logger.info('No event info provided')

        try:
          # Generate request
          insights = client.insights(request)
        except minfraud.AuthenticationError:
          self.logger.error('Authentication failed')
          raise
        except minfraud.InsufficientFundsError:
          self.logger.error('Insufficient funds')
          raise
        except minfraud.InvalidRequestError:
          self.logger.error('Invalid request')
          raise
        except minfraud.HttpError:
          self.logger.error('Unexpected HTTP error occurred')
          raise
        except minfraud.MinFraudError:
          self.logger.error('Unexpected content received from server')
          raise

        # Overall risk score
        risk_score = str(insights.risk_score)
        return {'risk_score': risk_score}
コード例 #5
0
    def run(self, params={}):
        address = params.get("address")
        item_category = params.get("item_category")
        item_id = params.get("item_id")
        quantity = params.get("quantity")
        price = params.get("price")
        user = self.connection.user
        license = self.connection.license

        # Set client
        client = minfraud.Client(user, license)

        # Define request
        request = {"device": {"ip_address": address}}
        shopping_cart = {}
        if item_category:
            shopping_cart["category"] = item_category
        if item_id:
            shopping_cart["item_id"] = item_id
        if quantity:
            shopping_cart["quantity"] = quantity
        if price:
            shopping_cart["price"] = float(price)

        # Add shopping_cart dic to request
        if shopping_cart:
            shopping_cart = [shopping_cart]
            request["shopping_cart"] = shopping_cart
        else:
            self.logger.info("No shopping cart info provided")

        try:
            # Generate request
            insights = client.insights(request)
        except minfraud.AuthenticationError:
            self.logger.error("Authentication failed")
            raise
        except minfraud.InsufficientFundsError:
            self.logger.error("Insufficient funds")
            raise
        except minfraud.InvalidRequestError:
            self.logger.error("Invalid request")
            raise
        except minfraud.HttpError:
            self.logger.error("Unexpected HTTP error occurred")
            raise
        except minfraud.MinFraudError:
            self.logger.error("Unexpected content received from server")
            raise

        # Overall risk score
        risk_score = str(insights.risk_score)
        return {"risk_score": risk_score}
コード例 #6
0
    def run(self, params={}):
        address = params.get("address")
        transaction_id = params.get("transaction_id")
        shop_id = params.get("shop_id")
        time = params.get("time")
        event_type = params.get("event_type")
        user = self.connection.user
        license = self.connection.license

        # Set client
        client = minfraud.Client(user, license)

        # Define request
        request = {"device": {"ip_address": address}}
        event = {}
        if transaction_id:
            event["transaction_id"] = transaction_id
        if shop_id:
            event["shop_id"] = shop_id
        if time:
            event["time"] = time
        if event_type != "none":
            event["type"] = event_type

        # Add event dic to request
        # TO-DO - raise exception "if not event"
        if event:
            request["event"] = event
        else:
            self.logger.info("No event info provided")

        try:
            # Generate request
            insights = client.insights(request)
        except minfraud.AuthenticationError:
            self.logger.error("Authentication failed")
            raise
        except minfraud.InsufficientFundsError:
            self.logger.error("Insufficient funds")
            raise
        except minfraud.InvalidRequestError:
            self.logger.error("Invalid request")
            raise
        except minfraud.HttpError:
            self.logger.error("Unexpected HTTP error occurred")
            raise
        except minfraud.MinFraudError:
            self.logger.error("Unexpected content received from server")
            raise

        # Overall risk score
        risk_score = str(insights.risk_score)
        return {"risk_score": risk_score}
コード例 #7
0
    def run(self, params={}):
        address = params.get('address')
        item_category = params.get('item_category')
        item_id = params.get('item_id')
        quantity = params.get('quantity')
        price = params.get('price')
        user = self.connection.user
        license = self.connection.license

        # Set client
        client = minfraud.Client(user, license)

        # Define request
        request = {'device': {'ip_address': address}}
        shopping_cart = {}
        if item_category:
            shopping_cart['category'] = item_category
        if item_id:
            shopping_cart['item_id'] = item_id
        if quantity:
            shopping_cart['quantity'] = quantity
        if price:
            shopping_cart['price'] = float(price)

        # Add shopping_cart dic to request
        if shopping_cart:
            shopping_cart = [shopping_cart]
            request['shopping_cart'] = shopping_cart
        else:
            self.logger.info('No shopping cart info provided')

        try:
            # Generate request
            insights = client.insights(request)
        except minfraud.AuthenticationError:
            self.logger.error('Authentication failed')
            raise
        except minfraud.InsufficientFundsError:
            self.logger.error('Insufficient funds')
            raise
        except minfraud.InvalidRequestError:
            self.logger.error('Invalid request')
            raise
        except minfraud.HttpError:
            self.logger.error('Unexpected HTTP error occurred')
            raise
        except minfraud.MinFraudError:
            self.logger.error('Unexpected content received from server')
            raise

        # Overall risk score
        risk_score = str(insights.risk_score)
        return {'risk_score': risk_score}
コード例 #8
0
    def run(self, params={}):
        address = params.get('address')
        user_id = params.get('user_id')
        username_md5 = params.get('username_md5')
        user = self.connection.user
        license = self.connection.license

        # Set client
        client = minfraud.Client(user, license)

        # Define request
        request = {'device': {'ip_address': address}}
        account = {}
        if user_id:
            account['user_id'] = user_id
        if username_md5:
            account['username_md5'] = username_md5

        # Add account dic to request
        if account:
            request['account'] = account
        else:
            self.logger.info('No account info provided')

        try:
            # Generate request
            insights = client.insights(request)
        except minfraud.AuthenticationError:
            self.logger.error('Authentication failed')
            raise
        except minfraud.InsufficientFundsError:
            self.logger.error('Insufficient funds')
            raise
        except minfraud.InvalidRequestError:
            self.logger.error('Invalid request')
            raise
        except minfraud.HttpError:
            self.logger.error('Unexpected HTTP error occurred')
            raise
        except minfraud.MinFraudError:
            self.logger.error('Unexpected content received from server')
            raise

        # Overall risk score
        risk_score = str(insights.risk_score)
        return {'risk_score': risk_score}
コード例 #9
0
    def run(self, params={}):
        address = params.get("address")
        user_id = params.get("user_id")
        username_md5 = params.get("username_md5")
        user = self.connection.user
        license = self.connection.license

        # Set client
        client = minfraud.Client(user, license)

        # Define request
        request = {"device": {"ip_address": address}}
        account = {}
        if user_id:
            account["user_id"] = user_id
        if username_md5:
            account["username_md5"] = username_md5

        # Add account dic to request
        if account:
            request["account"] = account
        else:
            self.logger.info("No account info provided")

        try:
            # Generate request
            insights = client.insights(request)
        except minfraud.AuthenticationError:
            self.logger.error("Authentication failed")
            raise
        except minfraud.InsufficientFundsError:
            self.logger.error("Insufficient funds")
            raise
        except minfraud.InvalidRequestError:
            self.logger.error("Invalid request")
            raise
        except minfraud.HttpError:
            self.logger.error("Unexpected HTTP error occurred")
            raise
        except minfraud.MinFraudError:
            self.logger.error("Unexpected content received from server")
            raise

        # Overall risk score
        risk_score = str(insights.risk_score)
        return {"risk_score": risk_score}
コード例 #10
0
    def run(self, params={}):
        address = params.get('address')
        payment_processor = params.get('payment_processor')
        payment_was_authorized = params.get('payment_was_authorized')
        payment_decline_code = params.get('payment_delince_code')
        user = self.connection.user
        license = self.connection.license

        # Set client
        client = minfraud.Client(user, license)

        # Define request
        request = {'device': {'ip_address': address}}
        payment = {}
        if payment_processor != "none":
            payment['processor'] = payment_processor
        if payment_decline_code:
            payment['decline_code'] = payment_decline_code
        payment['was_authorized'] = payment_was_authorized

        # Add payment dic to request
        request['payment'] = payment

        try:
            # Generate request
            insights = client.insights(request)
        except minfraud.AuthenticationError:
            self.logger.error('Authentication failed')
            raise
        except minfraud.InsufficientFundsError:
            self.logger.error('Insufficient funds')
            raise
        except minfraud.InvalidRequestError:
            self.logger.error('Invalid request')
            raise
        except minfraud.HttpError:
            self.logger.error('Unexpected HTTP error occurred')
            raise
        except minfraud.MinFraudError:
            self.logger.error('Unexpected content received from server')
            raise

        # Overall risk score
        risk_score = str(insights.risk_score)
        return {'risk_score': risk_score}
コード例 #11
0
    def run(self, params={}):
        address = params.get("address")
        payment_processor = params.get("payment_processor")
        payment_was_authorized = params.get("payment_was_authorized")
        payment_decline_code = params.get("payment_delince_code")
        user = self.connection.user
        license = self.connection.license

        # Set client
        client = minfraud.Client(user, license)

        # Define request
        request = {"device": {"ip_address": address}}
        payment = {}
        if payment_processor != "none":
            payment["processor"] = payment_processor
        if payment_decline_code:
            payment["decline_code"] = payment_decline_code
        payment["was_authorized"] = payment_was_authorized

        # Add payment dic to request
        request["payment"] = payment

        try:
            # Generate request
            insights = client.insights(request)
        except minfraud.AuthenticationError:
            self.logger.error("Authentication failed")
            raise
        except minfraud.InsufficientFundsError:
            self.logger.error("Insufficient funds")
            raise
        except minfraud.InvalidRequestError:
            self.logger.error("Invalid request")
            raise
        except minfraud.HttpError:
            self.logger.error("Unexpected HTTP error occurred")
            raise
        except minfraud.MinFraudError:
            self.logger.error("Unexpected content received from server")
            raise

        # Overall risk score
        risk_score = str(insights.risk_score)
        return {"risk_score": risk_score}
コード例 #12
0
    def test(self):
        user = self.connection.user
        license = self.connection.license

        # Set client
        client = minfraud.Client(user, license)

        # Define request
        request = {'device': {'ip_address': '8.8.8.8'}}

        try:
            # Generate request
            insights = client.insights(request)
        except minfraud.AuthenticationError:
            self.logger.error('Authentication failed')
            raise
        except minfraud.InsufficientFundsError:
            self.logger.error('Insufficient funds')
            raise
        return {}
コード例 #13
0
    def test(self):
        user = self.connection.user
        license = self.connection.license

        # Set client
        client = minfraud.Client(user, license)

        # Define request
        request = {"device": {"ip_address": "8.8.8.8"}}

        try:
            # Generate request
            insights = client.insights(request)
        except minfraud.AuthenticationError:
            self.logger.error("Authentication failed")
            raise
        except minfraud.InsufficientFundsError:
            self.logger.error("Insufficient funds")
            raise
        return {}
コード例 #14
0
    def run(self, params={}):
        address = params.get('address')
        user_agent = params.get('user_agent')
        accept_language = params.get('accept_language')
        user = self.connection.user
        license = self.connection.license

        # Set client
        client = minfraud.Client(user, license)

        # Define request
        device = {'ip_address': address}
        if user_agent:
            device['user_agent'] = user_agent
        if accept_language:
            device['accept_language'] = accept_language

        try:
            # Generate request
            insights = client.insights({'device': device})
        except minfraud.AuthenticationError:
            self.logger.error('Authentication failed')
            raise
        except minfraud.InsufficientFundsError:
            self.logger.error('Insufficient funds')
            raise
        except minfraud.InvalidRequestError:
            self.logger.error('Invalid request')
            raise
        except minfraud.HttpError:
            self.logger.error('Unexpected HTTP error occurred')
            raise
        except minfraud.MinFraudError:
            self.logger.error('Unexpected content received from server')
            raise

        # IP portion of response
        ip = insights.ip_address

        # Overall risk score
        risk_score = str(insights.risk_score)

        # Risk score for IP
        risk = str(ip.risk)

        # City info
        confidence = ip.city.confidence
        geoname_id = ip.city.geoname_id
        name = str(ip.city.name)
        city = {
            'confidence': confidence,
            'geoname_id': geoname_id,
            'name': name
        }

        # Continent info
        code = str(ip.continent.code)
        geoname_id = ip.continent.geoname_id
        name = str(ip.continent.name)
        continent = {'code': code, 'geoname_id': geoname_id, 'name': name}

        # Country info
        confidence = ip.country.confidence
        geoname_id = ip.country.geoname_id
        name = str(ip.country.name)
        is_high_risk = ip.country.is_high_risk
        iso_code = str(ip.country.iso_code)
        country = {
            'confidence': confidence,
            'geoname_id': geoname_id,
            'name': name,
            'is_high_risk': is_high_risk,
            'iso_code': iso_code
        }

        # Location info
        accuracy_radius = ip.location.accuracy_radius
        average_income = ip.location.average_income
        population_density = ip.location.population_density
        latitude = str(ip.location.latitude)
        local_time = str(ip.location.local_time)
        longitude = str(ip.location.longitude)
        metro_code = ip.location.metro_code
        time_zone = str(ip.location.time_zone)
        location = {
            'accuracy_radius': accuracy_radius,
            'avergae_income': average_income,
            'population_density': population_density,
            'latitude': latitude,
            'local_time': local_time,
            'longitude': longitude,
            'metro_code': metro_code,
            'time_zone': time_zone
        }

        # Postal info
        code = int(ip.postal.code)
        confidence = ip.postal.confidence
        postal = {'code': code, 'confidence': confidence}

        # Registered country info
        geoname_id = ip.registered_country.geoname_id
        iso_code = str(ip.registered_country.iso_code)
        name = str(ip.registered_country.name)
        registered_country = {
            'geoname_id': geoname_id,
            'iso_code': iso_code,
            'name': name
        }

        # Represented country info
        geoname_id = ip.represented_country.geoname_id
        iso_code = str(ip.represented_country.iso_code)
        name = str(ip.represented_country.name)
        _type = str(ip.represented_country.type)
        represented_country = {
            'geoname_id': geoname_id,
            'iso_code': iso_code,
            'name': name,
            '_type': _type
        }

        # Subdivisions info
        iso_code = str(ip.subdivisions.most_specific.iso_code)
        confidence = ip.subdivisions.most_specific.confidence
        geoname_id = ip.subdivisions.most_specific.geoname_id
        name = str(ip.subdivisions.most_specific.name)
        subdivisions = {
            'confidence': confidence,
            'geoname_id': geoname_id,
            'iso_code': iso_code,
            'name': name
        }

        # Traits info
        autonomous_system_number = ip.traits.autonomous_system_number
        autonomous_system_organization = str(
            ip.traits.autonomous_system_organization)
        domain = str(ip.traits.domain)
        is_anonymous_proxy = ip.traits.is_anonymous_proxy
        is_satellite_provider = ip.traits.is_satellite_provider
        isp = str(ip.traits.isp)
        ip_address = str(ip.traits.ip_address)
        organization = str(ip.traits.organization)
        user_type = str(ip.traits.user_type)
        traits = {
            'autonomous_system_number': autonomous_system_number,
            'autonomous_system_organization': autonomous_system_organization,
            'domain': domain,
            'is_anonymous_proxy': is_anonymous_proxy,
            'is_satellite_provider': is_satellite_provider,
            'isp': isp,
            'ip_address': ip_address,
            'organization': organization,
            'user_type': user_type
        }

        # Device info
        confidence = insights.device.confidence
        id = insights.device.id
        last_seen = insights.device.last_seen
        device_result = {
            'confidence': confidence,
            'id': id,
            'last_seen': last_seen
        }

        # Clean device dict
        device_result = komand.helper.clean_dict(device_result)

        # Set result dict
        ip_result = {
            'risk': risk,
            'city': city,
            'continent': continent,
            'country': country,
            'location': location,
            'postal': postal,
            'registered_country': registered_country,
            'represented_country': represented_country,
            'subdivisions': subdivisions,
            'traits': traits
        }

        # Clean dict
        for k, v in ip_result.items():
            if k != "risk":
                ip_result[k] = komand.helper.clean_dict(ip_result[k])

        return {
            'risk_score': risk_score,
            'ip_result': ip_result,
            'device_result': device_result
        }
コード例 #15
0
    def run(self, params={}):  # noqa: MC0001
        address = params.get("address")
        shipping_first_name = params.get("shipping_first_name")
        shipping_last_name = params.get("shipping_last_name")
        shipping_company = params.get("shipping_company")
        shipping_address = params.get("shipping_address")
        shipping_address_2 = params.get("shipping_address_2")
        shipping_city = params.get("shipping_city")
        shipping_region = params.get("shipping_region")
        shipping_country = params.get("shipping_country")
        shipping_postal = params.get("shipping_postal")
        shipping_phone_number = params.get("shipping_phone_number")
        shipping_phone_country_code = params.get("shipping_phone_country_code")
        shipping_delivery_speed = params.get("shipping_delivery_speed")
        user = self.connection.user
        license = self.connection.license

        # Set client
        client = minfraud.Client(user, license)

        # define request
        request = {"device": {"ip_address": address}}
        shipping = {}
        if shipping_first_name:
            shipping["first_name"] = shipping_first_name
        if shipping_last_name:
            shipping["last_name"] = shipping_last_name
        if shipping_company:
            shipping["company"] = shipping_company
        if shipping_address:
            shipping["address"] = shipping_address
        if shipping_address_2:
            shipping["address_2"] = shipping_address_2
        if shipping_city:
            shipping["city"] = shipping_city
        if shipping_region:
            shipping["region"] = shipping_region
        if shipping_country:
            shipping["country"] = shipping_country
        if shipping_postal:
            shipping["postal"] = shipping_postal
        if shipping_phone_number:
            shipping["phone_number"] = shipping_phone_number
        if shipping_phone_country_code:
            shipping["phone_country_code"] = shipping_phone_country_code
        if shipping_delivery_speed != "none":
            shipping["delivery_speed"] = shipping_delivery_speed

        # Add shipping dict to request
        if shipping:
            request["shipping"] = shipping
        else:
            self.logger.info("No shipping info provided")

        try:
            # Generate Request
            insights = client.insights(request)
        except minfraud.AuthenticationError:
            self.logger.error("Authentication failed")
            raise
        except minfraud.InsufficientFundsError:
            self.logger.error("Insufficient funds")
            raise
        except minfraud.InvalidRequestError:
            self.logger.error("Invalid request")
            raise
        except minfraud.HttpError:
            self.logger.error("Unexpected HTTP error occurred")
            raise
        except minfraud.MinFraudError:
            self.logger.error("Unexpected content received from server")
            raise

        # Overall risk score
        risk_score = str(insights.risk_score)

        # Shipping info
        is_high_risk = insights.shipping_address.is_high_risk
        is_postal_in_city = insights.shipping_address.is_postal_in_city
        latitude = str(insights.shipping_address.latitude)
        longitude = str(insights.shipping_address.longitude)
        distance_to_ip_location = insights.shipping_address.distance_to_ip_location
        distance_to_billing_address = insights.shipping_address.distance_to_billing_address
        is_in_ip_country = insights.shipping_address.is_in_ip_country
        shipping_result = {
            "is_high_risk": is_high_risk,
            "is_postal_in_city": is_postal_in_city,
            "latitude": latitude,
            "longitude": longitude,
            "distance_to_ip_location": distance_to_ip_location,
            "distance_to_billing_address": distance_to_billing_address,
            "is_in_ip_country": is_in_ip_country,
        }

        # Clean shipping dict
        shipping_result = komand.helper.clean_dict(shipping_result)

        return {"risk_score": risk_score, "shipping_result": shipping_result}
コード例 #16
0
    def run(self, params={}):
        address = params.get('address')
        billing_first_name = params.get('billing_first_name')
        billing_last_name = params.get('billing_last_name')
        billing_company = params.get('billing_company')
        billing_address = params.get('billing_address')
        billing_address_2 = params.get('billing_address_2')
        billing_city = params.get('billing_city')
        billing_region = params.get('billing_region')
        billing_country = params.get('billing_country')
        billing_postal = params.get('billing_postal')
        billing_phone_number = params.get('billing_phone_number')
        billing_phone_country_code = params.get('billing_phone_country_code')
        user = self.connection.user
        license = self.connection.license

        # Set client
        client = minfraud.Client(user, license)

        # define request
        request = {'device': {'ip_address': address}}
        billing = {}
        if billing_first_name:
            billing['first_name'] = billing_first_name
        if billing_last_name:
            billing['last_name'] = billing_last_name
        if billing_company:
            billing['company'] = billing_company
        if billing_address:
            billing['address'] = billing_address
        if billing_address_2:
            billing['address_2'] = billing_address_2
        if billing_city:
            billing['city'] = billing_city
        if billing_region:
            billing['region'] = billing_region
        if billing_country:
            billing['country'] = billing_country
        if billing_postal:
            billing['postal'] = billing_postal
        if billing_phone_number:
            billing['phone_number'] = billing_phone_number
        if billing_phone_country_code:
            billing['phone_country_code'] = billing_phone_country_code

        # Add billing dict to request
        if billing:
            request['billing'] = billing
        else:
            self.logger.info('No billing info provided')

        try:
            # Generate Request
            insights = client.insights(request)
        except minfraud.AuthenticationError:
            self.logger.error('Authentication failed')
            raise
        except minfraud.InsufficientFundsError:
            self.logger.error('Insufficient funds')
            raise
        except minfraud.InvalidRequestError:
            self.logger.error('Invalid request')
            raise
        except minfraud.HttpError:
            self.logger.error('Unexpected HTTP error occurred')
            raise
        except minfraud.MinFraudError:
            self.logger.error('Unexpected content received from server')
            raise

        # Overall risk score
        risk_score = str(insights.risk_score)

        # Billing info
        is_postal_in_city = insights.billing_address.is_postal_in_city
        latitude = str(insights.billing_address.latitude)
        longitude = str(insights.billing_address.longitude)
        distance_to_ip_location = insights.billing_address.distance_to_ip_location
        # TO-DO - change to is_in_ip_country
        is_ip_in_country = insights.billing_address.is_in_ip_country
        billing_result = {
            'is_postal_in_city': is_postal_in_city,
            'latitude': latitude,
            'longitude': longitude,
            'distance_to_ip_location': distance_to_ip_location,
            'is_ip_in_country': is_ip_in_country
        }

        # Clean billing dict
        billing_result = komand.helper.clean_dict(billing_result)

        return {'risk_score': risk_score, 'billing_result': billing_result}
コード例 #17
0
    def run(self, params={}):
        address = params.get("address")
        user_agent = params.get("user_agent")
        accept_language = params.get("accept_language")
        user = self.connection.user
        license = self.connection.license

        # Set client
        client = minfraud.Client(user, license)

        # Define request
        device = {"ip_address": address}
        if user_agent:
            device["user_agent"] = user_agent
        if accept_language:
            device["accept_language"] = accept_language

        try:
            # Generate request
            insights = client.insights({"device": device})
        except minfraud.AuthenticationError:
            self.logger.error("Authentication failed")
            raise
        except minfraud.InsufficientFundsError:
            self.logger.error("Insufficient funds")
            raise
        except minfraud.InvalidRequestError:
            self.logger.error("Invalid request")
            raise
        except minfraud.HttpError:
            self.logger.error("Unexpected HTTP error occurred")
            raise
        except minfraud.MinFraudError:
            self.logger.error("Unexpected content received from server")
            raise

        # IP portion of response
        ip = insights.ip_address

        # Overall risk score
        risk_score = str(insights.risk_score)

        # Risk score for IP
        risk = str(ip.risk)

        # City info
        confidence = ip.city.confidence
        geoname_id = ip.city.geoname_id
        name = str(ip.city.name)
        city = {"confidence": confidence, "geoname_id": geoname_id, "name": name}

        # Continent info
        code = str(ip.continent.code)
        geoname_id = ip.continent.geoname_id
        name = str(ip.continent.name)
        continent = {"code": code, "geoname_id": geoname_id, "name": name}

        # Country info
        confidence = ip.country.confidence
        geoname_id = ip.country.geoname_id
        name = str(ip.country.name)
        is_high_risk = ip.country.is_high_risk
        iso_code = str(ip.country.iso_code)
        country = {
            "confidence": confidence,
            "geoname_id": geoname_id,
            "name": name,
            "is_high_risk": is_high_risk,
            "iso_code": iso_code,
        }

        # Location info
        accuracy_radius = ip.location.accuracy_radius
        average_income = ip.location.average_income
        population_density = ip.location.population_density
        latitude = str(ip.location.latitude)
        local_time = str(ip.location.local_time)
        longitude = str(ip.location.longitude)
        metro_code = ip.location.metro_code
        time_zone = str(ip.location.time_zone)
        location = {
            "accuracy_radius": accuracy_radius,
            "avergae_income": average_income,
            "population_density": population_density,
            "latitude": latitude,
            "local_time": local_time,
            "longitude": longitude,
            "metro_code": metro_code,
            "time_zone": time_zone,
        }

        # Postal info
        code = int(ip.postal.code)
        confidence = ip.postal.confidence
        postal = {"code": code, "confidence": confidence}

        # Registered country info
        geoname_id = ip.registered_country.geoname_id
        iso_code = str(ip.registered_country.iso_code)
        name = str(ip.registered_country.name)
        registered_country = {"geoname_id": geoname_id, "iso_code": iso_code, "name": name}

        # Represented country info
        geoname_id = ip.represented_country.geoname_id
        iso_code = str(ip.represented_country.iso_code)
        name = str(ip.represented_country.name)
        _type = str(ip.represented_country.type)
        represented_country = {
            "geoname_id": geoname_id,
            "iso_code": iso_code,
            "name": name,
            "_type": _type,
        }

        # Subdivisions info
        iso_code = str(ip.subdivisions.most_specific.iso_code)
        confidence = ip.subdivisions.most_specific.confidence
        geoname_id = ip.subdivisions.most_specific.geoname_id
        name = str(ip.subdivisions.most_specific.name)
        subdivisions = {
            "confidence": confidence,
            "geoname_id": geoname_id,
            "iso_code": iso_code,
            "name": name,
        }

        # Traits info
        autonomous_system_number = ip.traits.autonomous_system_number
        autonomous_system_organization = str(ip.traits.autonomous_system_organization)
        domain = str(ip.traits.domain)
        is_anonymous_proxy = ip.traits.is_anonymous_proxy
        is_satellite_provider = ip.traits.is_satellite_provider
        isp = str(ip.traits.isp)
        ip_address = str(ip.traits.ip_address)
        organization = str(ip.traits.organization)
        user_type = str(ip.traits.user_type)
        traits = {
            "autonomous_system_number": autonomous_system_number,
            "autonomous_system_organization": autonomous_system_organization,
            "domain": domain,
            "is_anonymous_proxy": is_anonymous_proxy,
            "is_satellite_provider": is_satellite_provider,
            "isp": isp,
            "ip_address": ip_address,
            "organization": organization,
            "user_type": user_type,
        }

        # Device info
        confidence = insights.device.confidence
        id = insights.device.id
        last_seen = insights.device.last_seen
        device_result = {"confidence": confidence, "id": id, "last_seen": last_seen}

        # Clean device dict
        device_result = komand.helper.clean_dict(device_result)

        # Set result dict
        ip_result = {
            "risk": risk,
            "city": city,
            "continent": continent,
            "country": country,
            "location": location,
            "postal": postal,
            "registered_country": registered_country,
            "represented_country": represented_country,
            "subdivisions": subdivisions,
            "traits": traits,
        }

        # Clean dict
        for k, v in ip_result.items():
            if k != "risk":
                ip_result[k] = komand.helper.clean_dict(ip_result[k])

        return {"risk_score": risk_score, "ip_result": ip_result, "device_result": device_result}
コード例 #18
0
    def run(self, params={}):  # noqa: MC0001
        address = params.get("address")
        issuer_id_number = params.get("card_issuer_id_number")
        last_4_digits = params.get("card_last_4_digits")
        token = params.get("card_token")
        bank_name = params.get("card_bank_name")
        bank_phone_country_code = params.get("bank_phone_country_code")
        bank_phone_number = params.get("bank_phone_number")
        avs_result = params.get("avs_result")
        cvv_result = params.get("cvv_result")
        user = self.connection.user
        license = self.connection.license

        # Set client
        client = minfraud.Client(user, license)

        # define request
        request = {"device": {"ip_address": address}}
        credit_card = {}
        if issuer_id_number:
            credit_card["issuer_id_number"] = issuer_id_number
        if last_4_digits:
            credit_card["last_4_digits"] = last_4_digits
        if token:
            credit_card["token"] = token
        if bank_name:
            credit_card["bank_name"] = bank_name
        if bank_phone_country_code:
            credit_card["bank_phone_country_code"] = bank_phone_country_code
        if bank_phone_number:
            credit_card["bank_phone_number"] = bank_phone_number
        if avs_result:
            credit_card["avs_result"] = avs_result
        if cvv_result:
            credit_card["cvv_result"] = cvv_result

        # Add credit_card dict to request
        if credit_card:
            request["credit_card"] = credit_card
        else:
            self.logger.info("No credit card info provided")

        try:
            # Generate Request
            insights = client.insights(request)
        except minfraud.AuthenticationError:
            self.logger.error("Authentication failed")
            raise
        except minfraud.InsufficientFundsError:
            self.logger.error("Insufficient funds")
            raise
        except minfraud.InvalidRequestError:
            self.logger.error("Invalid request")
            raise
        except minfraud.HttpError:
            self.logger.error("Unexpected HTTP error occurred")
            raise
        except minfraud.MinFraudError:
            self.logger.error("Unexpected content received from server")
            raise

        # Overall risk score
        risk_score = str(insights.risk_score)

        # Issuer info
        name = str(insights.credit_card.issuer.name)
        matches_provided_name = insights.credit_card.issuer.matches_provided_name
        phone_number = str(insights.credit_card.issuer.phone_number)
        matches_provided_phone_number = insights.credit_card.issuer.matches_provided_phone_number
        issuer = {
            "name": name,
            "matches_provided_name": matches_provided_name,
            "phone_number": phone_number,
            "matches_provided_phone_number": matches_provided_phone_number,
        }

        # Clean issuer dict
        issuer = komand.helper.clean_dict(issuer)

        # Additional info
        brand = str(insights.credit_card.brand)
        country = str(insights.credit_card.country)
        is_issued_in_billing_address_country = insights.credit_card.is_issued_in_billing_address_country
        is_prepaid = insights.credit_card.is_prepaid
        type = insights.credit_card.type
        credit_card = {
            "brand": brand,
            "country": country,
            "is_issued_in_billing_address_country":
            is_issued_in_billing_address_country,
            "is_prepaid": is_prepaid,
            "type": type,
        }

        # Clean additional dict
        credit_card = komand.helper.clean_dict(credit_card)

        # Combine dicts
        credit_card_result = {"issuer": issuer, "credit_card": credit_card}

        # Clean issuer_result dict
        credit_card_result = komand.helper.clean_dict(credit_card_result)

        return {
            "risk_score": risk_score,
            "credit_card_result": credit_card_result
        }
コード例 #19
0
    def run(self, params={}):
        address = params.get('address')
        user_agent = params.get('user_agent')
        accept_language = params.get('accept_language')
        domain = params.get('domain')
        email = params.get('email')
        billing_first_name = params.get('billing_first_name')
        billing_last_name = params.get('billing_last_name')
        billing_company = params.get('billing_company')
        billing_address = params.get('billing_address')
        billing_address_2 = params.get('billing_address_2')
        billing_city = params.get('billing_city')
        billing_region = params.get('billing_region')
        billing_country = params.get('billing_country')
        billing_postal = params.get('billing_postal')
        billing_phone_number = params.get('billing_phone_number')
        billing_phone_country_code = params.get('billing_phone_country_code')
        shipping_first_name = params.get('shipping_first_name')
        shipping_last_name = params.get('shipping_last_name')
        shipping_company = params.get('shipping_company')
        shipping_address = params.get('shipping_address')
        shipping_address_2 = params.get('shipping_address_2')
        shipping_city = params.get('shipping_city')
        shipping_region = params.get('shipping_region')
        shipping_country = params.get('shipping_country')
        shipping_postal = params.get('shipping_postal')
        shipping_phone_number = params.get('shipping_phone_number')
        shipping_phone_country_code = params.get('shipping_phone_country_code')
        shipping_delivery_speed = params.get('shipping_delivery_speed')
        issuer_id_number = params.get('card_issuer_id_number')
        last_4_digits = params.get('card_last_4_digits')
        token = params.get('card_token')
        bank_name = params.get('card_bank_name')
        bank_phone_country_code = params.get('bank_phone_country_code')
        bank_phone_number = params.get('bank_phone_number')
        avs_result = params.get('avs_result')
        cvv_result = params.get('cvv_result')
        transaction_id = params.get('transaction_id')
        shop_id = params.get('shop_id')
        time = params.get('time')
        event_type = params.get('event_type')
        user_id = params.get('user_id')
        username_md5 = params.get('username_md5')
        item_category = params.get('item_category')
        item_id = params.get('item_id')
        quantity = params.get('quantity')
        price = params.get('price')
        order_amount = params.get('order_amount')
        order_currency = params.get('order_currency')
        order_discount_code = params.get('order_discount_code')
        order_affiliate_id = params.get('order_affiliate_id')
        order_subaffiliate_id = params.get('order_subaffiliate_id')
        order_referrer_uri = params.get('order_referrer_uri')
        order_is_gift = params.get('order_is_gift')
        order_has_gift_message = params.get('order_has_gift_message')
        payment_processor = params.get('payment_processor')
        payment_was_authorized = params.get('payment_was_authorized')
        payment_decline_code = params.get('payment_delince_code')
        user = self.connection.user
        license = self.connection.license

        # Set client
        client = minfraud.Client(user, license)

        # Initiate request dict
        request = {}

        # Initiate all_result dict
        all_result = {}

        ################################
        # Device Request
        ###############################
        # Define device request
        device = {}
        device['ip_address'] = address
        if user_agent:
          device['user_agent'] = user_agent
        if accept_language:
          device['accept_language'] = accept_language

        request['device'] = device

        ###############################
        # Email Request
        ##############################
        # Define email request
        email_dic = {}
        if domain:
          email_dic['domain'] = domain
        if email:
          email_dic['address'] = email

        if email_dic:
          request['email'] = email_dic

        ###############################
        # Billing Request
        ##############################
        billing = {}
        if billing_first_name:
          billing['first_name'] = billing_first_name
        if billing_last_name:
          billing['last_name'] = billing_last_name
        if billing_company:
          billing['company'] = billing_company
        if billing_address:
          billing['address'] = billing_address
        if billing_address_2:
          billing['address_2'] = billing_address_2
        if billing_city:
          billing['city'] = billing_city
        if billing_region:
          billing['region'] = billing_region
        if billing_country:
          billing['country'] = billing_country
        if billing_postal:
          billing['postal'] = billing_postal
        if billing_phone_number:
          billing['phone_number'] = billing_phone_number
        if billing_phone_country_code:
          billing['phone_country_code'] = billing_phone_country_code

        if billing:
          request['billing'] = billing

        ################################
        # Shipping Request
        ###############################
        shipping = {}
        if shipping_first_name:
          shipping['first_name'] = shipping_first_name
        if shipping_last_name:
          shipping['last_name'] = shipping_last_name
        if shipping_company:
          shipping['company'] = shipping_company
        if shipping_address:
          shipping['address'] = shipping_address
        if shipping_address_2:
          shipping['address_2'] = shipping_address_2
        if shipping_city:
          shipping['city'] = shipping_city
        if shipping_region:
          shipping['region'] = shipping_region
        if shipping_country:
          shipping['country'] = shipping_country
        if shipping_postal:
          shipping['postal'] = shipping_postal
        if shipping_phone_number:
          shipping['phone_number'] = shipping_phone_number
        if shipping_phone_country_code:
          shipping['phone_country_code'] = shipping_phone_country_code
        if shipping_delivery_speed != "none":
          shipping['delivery_speed'] = shipping_delivery_speed

        if shipping:
          request['shipping'] = shipping

        ################################
        # Card Request
        ###############################
        credit_card = {}
        if issuer_id_number:
          credit_card['issuer_id_number'] = issuer_id_number
        if last_4_digits:
          credit_card['last_4_digits'] = last_4_digits
        if token:
          credit_card['token'] = token
        if bank_name:
          credit_card['bank_name'] = bank_name
        if bank_phone_country_code:
          credit_card['bank_phone_country_code'] = bank_phone_country_code
        if bank_phone_number:
          credit_card['bank_phone_number'] = bank_phone_number
        if avs_result:
          credit_card['avs_result'] = avs_result
        if cvv_result:
          credit_card['cvv_result'] = cvv_result

        if credit_card:
          request['credit_card'] = credit_card

        ################################
        # Event Request
        ###############################
        event = {}
        if transaction_id:
          event['transaction_id'] = transaction_id
        if shop_id:
          event['shop_id'] = shop_id
        if time:
          event['time'] = time
        if event_type != "none":
          event['type'] = event_type

        if event:
          request['event'] = event

        ################################
        # Account Request
        ###############################
        account = {}
        if user_id:
          account['user_id'] = user_id
        if username_md5:
          account['username_md5'] = username_md5

        if account:
          request['account'] = account


        ################################
        # Cart Request
        ###############################
        shopping_cart = {}
        if item_category:
          shopping_cart['category'] = item_category
        if item_id:
          shopping_cart['item_id'] = item_id
        if quantity:
          shopping_cart['quantity'] = quantity
        if price:
          shopping_cart['price'] = float(price)

        if shopping_cart:
          shopping_cart = [shopping_cart]
          request['shopping_cart'] = shopping_cart

        ################################
        # Order Request
        ###############################
        order = {}
        if order_amount:
          order['amount'] = float(order_amount)
        if order_currency:
          order['currency'] = order_currency
        if order_discount_code:
          order['discount_code'] = order_discount_code
        if order_affiliate_id:
          order['affiliate_id'] = order_affiliate_id
        if order_subaffiliate_id:
          order['subaffiliate_id'] = order_subaffiliate_id
        if order_referrer_uri:
          order['referrer_uri'] = order_referrer_uri
        order['is_gift'] = order_is_gift
        order['has_gift_message'] = order_has_gift_message

        request['order'] = order

        ################################
        # Payment Request
        ###############################
        payment = {}
        if payment_processor != "none":
          payment['processor'] = payment_processor
        if payment_decline_code:
          payment['decline_code'] = payment_decline_code
        payment['was_authorized'] = payment_was_authorized

        request['payment'] = payment


        try:
          # Generate Request
          insights = client.insights(request)
        except minfraud.AuthenticationError:
          self.logger.error('Authentication failed')
          raise
        except minfraud.InsufficientFundsError:
          self.logger.error('Insufficient funds')
          raise
        except minfraud.InvalidRequestError:
          self.logger.error('Invalid request')
          raise
        except minfraud.HttpError:
          self.logger.error('Unexpected HTTP error occurred')
          raise
        except minfraud.MinFraudError:
          self.logger.error('Unexpected content received from server')
          raise

        ###############################
        # Gather Device Data
        ##############################
        # IP portion of response
        ip = insights.ip_address

        # Overall risk score
        risk_score = str(insights.risk_score)

        # Risk score for IP
        risk = str(ip.risk)

        # City info
        confidence = ip.city.confidence
        geoname_id = ip.city.geoname_id
        name = str(ip.city.name)
        city = {'confidence': confidence,
          'geoname_id': geoname_id,
          'name': name
          }

        # Continent info
        code = str(ip.continent.code)
        geoname_id = ip.continent.geoname_id
        name = str(ip.continent.name)
        continent = {'code': code,
          'geoname_id': geoname_id,
          'name': name
          }

        # Country info
        confidence = ip.country.confidence
        geoname_id = ip.country.geoname_id
        name = str(ip.country.name)
        is_high_risk = ip.country.is_high_risk
        iso_code = str(ip.country.iso_code)
        country = {'confidence': confidence,
          'geoname_id': geoname_id,
          'name': name,
          'is_high_risk': is_high_risk,
          'iso_code': iso_code
          }

        # Location info
        accuracy_radius = ip.location.accuracy_radius
        average_income = ip.location.average_income
        population_density = ip.location.population_density
        latitude = str(ip.location.latitude)
        local_time = str(ip.location.local_time)
        longitude = str(ip.location.longitude)
        metro_code = ip.location.metro_code
        time_zone = str(ip.location.time_zone)
        location = {'accuracy_radius': accuracy_radius,
          'avergae_income': average_income,
          'population_density': population_density,
          'latitude': latitude,
          'local_time': local_time,
          'longitude': longitude,
          'metro_code': metro_code,
          'time_zone': time_zone
          }

        # Postal info
        code = int(ip.postal.code)
        confidence = ip.postal.confidence
        postal = {'code': code,
          'confidence': confidence
          }

        # Registered country info
        geoname_id = ip.registered_country.geoname_id
        iso_code = str(ip.registered_country.iso_code)
        name = str(ip.registered_country.name)
        registered_country = {'geoname_id': geoname_id,
          'iso_code': iso_code,
          'name': name
          }

        # Represented country info
        geoname_id = ip.represented_country.geoname_id
        iso_code = str(ip.represented_country.iso_code)
        name = str(ip.represented_country.name)
        _type = str(ip.represented_country.type)
        represented_country = {'geoname_id': geoname_id,
          'iso_code': iso_code,
          'name': name,
          '_type': _type
          }

        # Subdivisions info
        iso_code = str(ip.subdivisions.most_specific.iso_code)
        confidence = ip.subdivisions.most_specific.confidence
        geoname_id = ip.subdivisions.most_specific.geoname_id
        name = str(ip.subdivisions.most_specific.name)
        subdivisions = {'confidence': confidence,
          'geoname_id': geoname_id,
          'iso_code': iso_code,
          'name': name
          }

        # Traits info
        autonomous_system_number = ip.traits.autonomous_system_number
        autonomous_system_organization = str(ip.traits.autonomous_system_organization)
        domain = str(ip.traits.domain)
        is_anonymous_proxy = ip.traits.is_anonymous_proxy
        is_satellite_provider = ip.traits.is_satellite_provider
        isp = str(ip.traits.isp)
        ip_address = str(ip.traits.ip_address)
        organization = str(ip.traits.organization)
        user_type = str(ip.traits.user_type)
        traits = {'autonomous_system_number': autonomous_system_number,
          'autonomous_system_organization': autonomous_system_organization,
          'domain': domain,
          'is_anonymous_proxy': is_anonymous_proxy,
          'is_satellite_provider': is_satellite_provider,
          'isp': isp,
          'ip_address': ip_address,
          'organization': organization,
          'user_type': user_type
          }

        # Device info
        confidence = insights.device.confidence
        id = insights.device.id
        last_seen = insights.device.last_seen
        device_result = {'confidence': confidence,
          'id': id,
          'last_seen': last_seen
          }

        # Clean device dict
        device_result = komand.helper.clean_dict(device_result)

        # Set result dict
        ip_result = {'risk': risk,
          'city': city,
          'continent': continent,
          'country': country,
          'location': location,
          'postal': postal,
          'registered_country': registered_country,
          'represented_country': represented_country,
          'subdivisions': subdivisions,
          'traits': traits
          }

        # Clean dict
        for k, v in ip_result.items():
          if k != "risk":
            ip_result[k] = komand.helper.clean_dict(ip_result[k])

        all_result['ip_result'] = ip_result
        all_result['device_result'] = device_result

        ###################################
        # Gather email data
        ##################################
        is_free = insights.email.is_free
        is_high_risk = insights.email.is_high_risk
        email_result = {'is_free': is_free,
          'is_high_risk': is_high_risk
          }

        # Clean email dict
        email_result = komand.helper.clean_dict(email_result)

        all_result['email_result'] = email_result


        ###################################
        # Gather billing data
        ##################################
        is_postal_in_city = insights.billing_address.is_postal_in_city
        latitude = str(insights.billing_address.latitude)
        longitude = str(insights.billing_address.longitude)
        distance_to_ip_location = insights.billing_address.distance_to_ip_location
        # TO-DO - change to is_in_ip_country
        is_ip_in_country = insights.billing_address.is_in_ip_country
        billing_result = {'is_postal_in_city': is_postal_in_city,
          'latitude': latitude,
          'longitude': longitude,
          'distance_to_ip_location': distance_to_ip_location,
          'is_ip_in_country': is_ip_in_country
          }

        # Clean billing dict
        billing_result = komand.helper.clean_dict(billing_result)

        all_result['billing_result'] = billing_result


        ###################################
        # Gather shipping data
        ##################################
        is_high_risk = insights.shipping_address.is_high_risk
        is_postal_in_city = insights.shipping_address.is_postal_in_city
        latitude = str(insights.shipping_address.latitude)
        longitude = str(insights.shipping_address.longitude)
        distance_to_ip_location = insights.shipping_address.distance_to_ip_location
        distance_to_billing_address = insights.shipping_address.distance_to_billing_address
        is_in_ip_country = insights.shipping_address.is_in_ip_country
        shipping_result = {'is_high_risk': is_high_risk,
          'is_postal_in_city': is_postal_in_city,
          'latitude': latitude,
          'longitude': longitude,
          'distance_to_ip_location': distance_to_ip_location,
          'distance_to_billing_address': distance_to_billing_address,
          'is_in_ip_country': is_in_ip_country
          }

        # Clean shipping dict
        shipping_result = komand.helper.clean_dict(shipping_result)

        all_result['shipping_result'] = shipping_result

        ###################################
        # Gather card data
        ##################################
        # Issuer info
        name = str(insights.credit_card.issuer.name)
        matches_provided_name = insights.credit_card.issuer.matches_provided_name
        phone_number = str(insights.credit_card.issuer.phone_number)
        matches_provided_phone_number = insights.credit_card.issuer.matches_provided_phone_number
        issuer = {'name': name,
          'matches_provided_name': matches_provided_name,
          'phone_number': phone_number,
          'matches_provided_phone_number': matches_provided_phone_number
          }

        # Clean issuer dict
        issuer = komand.helper.clean_dict(issuer)

        # Additional info
        brand = str(insights.credit_card.brand)
        country = str(insights.credit_card.country)
        is_issued_in_billing_address_country = insights.credit_card.is_issued_in_billing_address_country
        is_prepaid = insights.credit_card.is_prepaid
        type = insights.credit_card.type
        credit_card = {'brand': brand,
          'country': country,
          'is_issued_in_billing_address_country': is_issued_in_billing_address_country,
          'is_prepaid': is_prepaid,
          'type': type
          }

        # Clean additional dict
        credit_card = komand.helper.clean_dict(credit_card)

        # Combine dicts
        credit_card_result = {'issuer': issuer,
          'credit_card': credit_card
          }

        # Clean issuer_result dict
        credit_card_result = komand.helper.clean_dict(credit_card_result)

        all_result['credit_card_result'] = credit_card_result

        return {'all_result': all_result, 'risk_score': risk_score}
コード例 #20
0
    def run(self, params={}):
        address = params.get('address')
        issuer_id_number = params.get('card_issuer_id_number')
        last_4_digits = params.get('card_last_4_digits')
        token = params.get('card_token')
        bank_name = params.get('card_bank_name')
        bank_phone_country_code = params.get('bank_phone_country_code')
        bank_phone_number = params.get('bank_phone_number')
        avs_result = params.get('avs_result')
        cvv_result = params.get('cvv_result')
        user = self.connection.user
        license = self.connection.license

        # Set client
        client = minfraud.Client(user, license)

        # define request
        request = {'device': {'ip_address': address}}
        credit_card = {}
        if issuer_id_number:
            credit_card['issuer_id_number'] = issuer_id_number
        if last_4_digits:
            credit_card['last_4_digits'] = last_4_digits
        if token:
            credit_card['token'] = token
        if bank_name:
            credit_card['bank_name'] = bank_name
        if bank_phone_country_code:
            credit_card['bank_phone_country_code'] = bank_phone_country_code
        if bank_phone_number:
            credit_card['bank_phone_number'] = bank_phone_number
        if avs_result:
            credit_card['avs_result'] = avs_result
        if cvv_result:
            credit_card['cvv_result'] = cvv_result

        # Add credit_card dict to request
        if credit_card:
            request['credit_card'] = credit_card
        else:
            self.logger.info('No credit card info provided')

        try:
            # Generate Request
            insights = client.insights(request)
        except minfraud.AuthenticationError:
            self.logger.error('Authentication failed')
            raise
        except minfraud.InsufficientFundsError:
            self.logger.error('Insufficient funds')
            raise
        except minfraud.InvalidRequestError:
            self.logger.error('Invalid request')
            raise
        except minfraud.HttpError:
            self.logger.error('Unexpected HTTP error occurred')
            raise
        except minfraud.MinFraudError:
            self.logger.error('Unexpected content received from server')
            raise

        # Overall risk score
        risk_score = str(insights.risk_score)

        # Issuer info
        name = str(insights.credit_card.issuer.name)
        matches_provided_name = insights.credit_card.issuer.matches_provided_name
        phone_number = str(insights.credit_card.issuer.phone_number)
        matches_provided_phone_number = insights.credit_card.issuer.matches_provided_phone_number
        issuer = {
            'name': name,
            'matches_provided_name': matches_provided_name,
            'phone_number': phone_number,
            'matches_provided_phone_number': matches_provided_phone_number
        }

        # Clean issuer dict
        issuer = komand.helper.clean_dict(issuer)

        # Additional info
        brand = str(insights.credit_card.brand)
        country = str(insights.credit_card.country)
        is_issued_in_billing_address_country = insights.credit_card.is_issued_in_billing_address_country
        is_prepaid = insights.credit_card.is_prepaid
        type = insights.credit_card.type
        credit_card = {
            'brand': brand,
            'country': country,
            'is_issued_in_billing_address_country':
            is_issued_in_billing_address_country,
            'is_prepaid': is_prepaid,
            'type': type
        }

        # Clean additional dict
        credit_card = komand.helper.clean_dict(credit_card)

        # Combine dicts
        credit_card_result = {'issuer': issuer, 'credit_card': credit_card}

        # Clean issuer_result dict
        credit_card_result = komand.helper.clean_dict(credit_card_result)

        return {
            'risk_score': risk_score,
            'credit_card_result': credit_card_result
        }
コード例 #21
0
    def run(self, params={}):  # noqa: MC0001
        address = params.get("address")
        user_agent = params.get("user_agent")
        accept_language = params.get("accept_language")
        domain = params.get("domain")
        email = params.get("email")
        billing_first_name = params.get("billing_first_name")
        billing_last_name = params.get("billing_last_name")
        billing_company = params.get("billing_company")
        billing_address = params.get("billing_address")
        billing_address_2 = params.get("billing_address_2")
        billing_city = params.get("billing_city")
        billing_region = params.get("billing_region")
        billing_country = params.get("billing_country")
        billing_postal = params.get("billing_postal")
        billing_phone_number = params.get("billing_phone_number")
        billing_phone_country_code = params.get("billing_phone_country_code")
        shipping_first_name = params.get("shipping_first_name")
        shipping_last_name = params.get("shipping_last_name")
        shipping_company = params.get("shipping_company")
        shipping_address = params.get("shipping_address")
        shipping_address_2 = params.get("shipping_address_2")
        shipping_city = params.get("shipping_city")
        shipping_region = params.get("shipping_region")
        shipping_country = params.get("shipping_country")
        shipping_postal = params.get("shipping_postal")
        shipping_phone_number = params.get("shipping_phone_number")
        shipping_phone_country_code = params.get("shipping_phone_country_code")
        shipping_delivery_speed = params.get("shipping_delivery_speed")
        issuer_id_number = params.get("card_issuer_id_number")
        last_4_digits = params.get("card_last_4_digits")
        token = params.get("card_token")
        bank_name = params.get("card_bank_name")
        bank_phone_country_code = params.get("bank_phone_country_code")
        bank_phone_number = params.get("bank_phone_number")
        avs_result = params.get("avs_result")
        cvv_result = params.get("cvv_result")
        transaction_id = params.get("transaction_id")
        shop_id = params.get("shop_id")
        time = params.get("time")
        event_type = params.get("event_type")
        user_id = params.get("user_id")
        username_md5 = params.get("username_md5")
        item_category = params.get("item_category")
        item_id = params.get("item_id")
        quantity = params.get("quantity")
        price = params.get("price")
        order_amount = params.get("order_amount")
        order_currency = params.get("order_currency")
        order_discount_code = params.get("order_discount_code")
        order_affiliate_id = params.get("order_affiliate_id")
        order_subaffiliate_id = params.get("order_subaffiliate_id")
        order_referrer_uri = params.get("order_referrer_uri")
        order_is_gift = params.get("order_is_gift")
        order_has_gift_message = params.get("order_has_gift_message")
        payment_processor = params.get("payment_processor")
        payment_was_authorized = params.get("payment_was_authorized")
        payment_decline_code = params.get("payment_delince_code")
        user = self.connection.user
        license = self.connection.license

        # Set client
        client = minfraud.Client(user, license)

        # Initiate request dict
        request = {}

        # Initiate all_result dict
        all_result = {}

        ################################
        # Device Request
        ###############################
        # Define device request
        device = {}
        device["ip_address"] = address
        if user_agent:
            device["user_agent"] = user_agent
        if accept_language:
            device["accept_language"] = accept_language

        request["device"] = device

        ###############################
        # Email Request
        ##############################
        # Define email request
        email_dic = {}
        if domain:
            email_dic["domain"] = domain
        if email:
            email_dic["address"] = email

        if email_dic:
            request["email"] = email_dic

        ###############################
        # Billing Request
        ##############################
        billing = {}
        if billing_first_name:
            billing["first_name"] = billing_first_name
        if billing_last_name:
            billing["last_name"] = billing_last_name
        if billing_company:
            billing["company"] = billing_company
        if billing_address:
            billing["address"] = billing_address
        if billing_address_2:
            billing["address_2"] = billing_address_2
        if billing_city:
            billing["city"] = billing_city
        if billing_region:
            billing["region"] = billing_region
        if billing_country:
            billing["country"] = billing_country
        if billing_postal:
            billing["postal"] = billing_postal
        if billing_phone_number:
            billing["phone_number"] = billing_phone_number
        if billing_phone_country_code:
            billing["phone_country_code"] = billing_phone_country_code

        if billing:
            request["billing"] = billing

        ################################
        # Shipping Request
        ###############################
        shipping = {}
        if shipping_first_name:
            shipping["first_name"] = shipping_first_name
        if shipping_last_name:
            shipping["last_name"] = shipping_last_name
        if shipping_company:
            shipping["company"] = shipping_company
        if shipping_address:
            shipping["address"] = shipping_address
        if shipping_address_2:
            shipping["address_2"] = shipping_address_2
        if shipping_city:
            shipping["city"] = shipping_city
        if shipping_region:
            shipping["region"] = shipping_region
        if shipping_country:
            shipping["country"] = shipping_country
        if shipping_postal:
            shipping["postal"] = shipping_postal
        if shipping_phone_number:
            shipping["phone_number"] = shipping_phone_number
        if shipping_phone_country_code:
            shipping["phone_country_code"] = shipping_phone_country_code
        if shipping_delivery_speed != "none":
            shipping["delivery_speed"] = shipping_delivery_speed

        if shipping:
            request["shipping"] = shipping

        ################################
        # Card Request
        ###############################
        credit_card = {}
        if issuer_id_number:
            credit_card["issuer_id_number"] = issuer_id_number
        if last_4_digits:
            credit_card["last_4_digits"] = last_4_digits
        if token:
            credit_card["token"] = token
        if bank_name:
            credit_card["bank_name"] = bank_name
        if bank_phone_country_code:
            credit_card["bank_phone_country_code"] = bank_phone_country_code
        if bank_phone_number:
            credit_card["bank_phone_number"] = bank_phone_number
        if avs_result:
            credit_card["avs_result"] = avs_result
        if cvv_result:
            credit_card["cvv_result"] = cvv_result

        if credit_card:
            request["credit_card"] = credit_card

        ################################
        # Event Request
        ###############################
        event = {}
        if transaction_id:
            event["transaction_id"] = transaction_id
        if shop_id:
            event["shop_id"] = shop_id
        if time:
            event["time"] = time
        if event_type != "none":
            event["type"] = event_type

        if event:
            request["event"] = event

        ################################
        # Account Request
        ###############################
        account = {}
        if user_id:
            account["user_id"] = user_id
        if username_md5:
            account["username_md5"] = username_md5

        if account:
            request["account"] = account

        ################################
        # Cart Request
        ###############################
        shopping_cart = {}
        if item_category:
            shopping_cart["category"] = item_category
        if item_id:
            shopping_cart["item_id"] = item_id
        if quantity:
            shopping_cart["quantity"] = quantity
        if price:
            shopping_cart["price"] = float(price)

        if shopping_cart:
            shopping_cart = [shopping_cart]
            request["shopping_cart"] = shopping_cart

        ################################
        # Order Request
        ###############################
        order = {}
        if order_amount:
            order["amount"] = float(order_amount)
        if order_currency:
            order["currency"] = order_currency
        if order_discount_code:
            order["discount_code"] = order_discount_code
        if order_affiliate_id:
            order["affiliate_id"] = order_affiliate_id
        if order_subaffiliate_id:
            order["subaffiliate_id"] = order_subaffiliate_id
        if order_referrer_uri:
            order["referrer_uri"] = order_referrer_uri
        order["is_gift"] = order_is_gift
        order["has_gift_message"] = order_has_gift_message

        request["order"] = order

        ################################
        # Payment Request
        ###############################
        payment = {}
        if payment_processor != "none":
            payment["processor"] = payment_processor
        if payment_decline_code:
            payment["decline_code"] = payment_decline_code
        payment["was_authorized"] = payment_was_authorized

        request["payment"] = payment

        try:
            # Generate Request
            insights = client.insights(request)
        except minfraud.AuthenticationError:
            self.logger.error("Authentication failed")
            raise
        except minfraud.InsufficientFundsError:
            self.logger.error("Insufficient funds")
            raise
        except minfraud.InvalidRequestError:
            self.logger.error("Invalid request")
            raise
        except minfraud.HttpError:
            self.logger.error("Unexpected HTTP error occurred")
            raise
        except minfraud.MinFraudError:
            self.logger.error("Unexpected content received from server")
            raise

        ###############################
        # Gather Device Data
        ##############################
        # IP portion of response
        ip = insights.ip_address

        # Overall risk score
        risk_score = str(insights.risk_score)

        # Risk score for IP
        risk = str(ip.risk)

        # City info
        confidence = ip.city.confidence
        geoname_id = ip.city.geoname_id
        name = str(ip.city.name)
        city = {"confidence": confidence, "geoname_id": geoname_id, "name": name}

        # Continent info
        code = str(ip.continent.code)
        geoname_id = ip.continent.geoname_id
        name = str(ip.continent.name)
        continent = {"code": code, "geoname_id": geoname_id, "name": name}

        # Country info
        confidence = ip.country.confidence
        geoname_id = ip.country.geoname_id
        name = str(ip.country.name)
        is_high_risk = ip.country.is_high_risk
        iso_code = str(ip.country.iso_code)
        country = {
            "confidence": confidence,
            "geoname_id": geoname_id,
            "name": name,
            "is_high_risk": is_high_risk,
            "iso_code": iso_code,
        }

        # Location info
        accuracy_radius = ip.location.accuracy_radius
        average_income = ip.location.average_income
        population_density = ip.location.population_density
        latitude = str(ip.location.latitude)
        local_time = str(ip.location.local_time)
        longitude = str(ip.location.longitude)
        metro_code = ip.location.metro_code
        time_zone = str(ip.location.time_zone)
        location = {
            "accuracy_radius": accuracy_radius,
            "avergae_income": average_income,
            "population_density": population_density,
            "latitude": latitude,
            "local_time": local_time,
            "longitude": longitude,
            "metro_code": metro_code,
            "time_zone": time_zone,
        }

        # Postal info
        code = int(ip.postal.code)
        confidence = ip.postal.confidence
        postal = {"code": code, "confidence": confidence}

        # Registered country info
        geoname_id = ip.registered_country.geoname_id
        iso_code = str(ip.registered_country.iso_code)
        name = str(ip.registered_country.name)
        registered_country = {"geoname_id": geoname_id, "iso_code": iso_code, "name": name}

        # Represented country info
        geoname_id = ip.represented_country.geoname_id
        iso_code = str(ip.represented_country.iso_code)
        name = str(ip.represented_country.name)
        _type = str(ip.represented_country.type)
        represented_country = {
            "geoname_id": geoname_id,
            "iso_code": iso_code,
            "name": name,
            "_type": _type,
        }

        # Subdivisions info
        iso_code = str(ip.subdivisions.most_specific.iso_code)
        confidence = ip.subdivisions.most_specific.confidence
        geoname_id = ip.subdivisions.most_specific.geoname_id
        name = str(ip.subdivisions.most_specific.name)
        subdivisions = {
            "confidence": confidence,
            "geoname_id": geoname_id,
            "iso_code": iso_code,
            "name": name,
        }

        # Traits info
        autonomous_system_number = ip.traits.autonomous_system_number
        autonomous_system_organization = str(ip.traits.autonomous_system_organization)
        domain = str(ip.traits.domain)
        is_anonymous_proxy = ip.traits.is_anonymous_proxy
        is_satellite_provider = ip.traits.is_satellite_provider
        isp = str(ip.traits.isp)
        ip_address = str(ip.traits.ip_address)
        organization = str(ip.traits.organization)
        user_type = str(ip.traits.user_type)
        traits = {
            "autonomous_system_number": autonomous_system_number,
            "autonomous_system_organization": autonomous_system_organization,
            "domain": domain,
            "is_anonymous_proxy": is_anonymous_proxy,
            "is_satellite_provider": is_satellite_provider,
            "isp": isp,
            "ip_address": ip_address,
            "organization": organization,
            "user_type": user_type,
        }

        # Device info
        confidence = insights.device.confidence
        id = insights.device.id
        last_seen = insights.device.last_seen
        device_result = {"confidence": confidence, "id": id, "last_seen": last_seen}

        # Clean device dict
        device_result = komand.helper.clean_dict(device_result)

        # Set result dict
        ip_result = {
            "risk": risk,
            "city": city,
            "continent": continent,
            "country": country,
            "location": location,
            "postal": postal,
            "registered_country": registered_country,
            "represented_country": represented_country,
            "subdivisions": subdivisions,
            "traits": traits,
        }

        # Clean dict
        for k, v in ip_result.items():
            if k != "risk":
                ip_result[k] = komand.helper.clean_dict(ip_result[k])

        all_result["ip_result"] = ip_result
        all_result["device_result"] = device_result

        ###################################
        # Gather email data
        ##################################
        is_free = insights.email.is_free
        is_high_risk = insights.email.is_high_risk
        email_result = {"is_free": is_free, "is_high_risk": is_high_risk}

        # Clean email dict
        email_result = komand.helper.clean_dict(email_result)

        all_result["email_result"] = email_result

        ###################################
        # Gather billing data
        ##################################
        is_postal_in_city = insights.billing_address.is_postal_in_city
        latitude = str(insights.billing_address.latitude)
        longitude = str(insights.billing_address.longitude)
        distance_to_ip_location = insights.billing_address.distance_to_ip_location
        # TO-DO - change to is_in_ip_country
        is_ip_in_country = insights.billing_address.is_in_ip_country
        billing_result = {
            "is_postal_in_city": is_postal_in_city,
            "latitude": latitude,
            "longitude": longitude,
            "distance_to_ip_location": distance_to_ip_location,
            "is_ip_in_country": is_ip_in_country,
        }

        # Clean billing dict
        billing_result = komand.helper.clean_dict(billing_result)

        all_result["billing_result"] = billing_result

        ###################################
        # Gather shipping data
        ##################################
        is_high_risk = insights.shipping_address.is_high_risk
        is_postal_in_city = insights.shipping_address.is_postal_in_city
        latitude = str(insights.shipping_address.latitude)
        longitude = str(insights.shipping_address.longitude)
        distance_to_ip_location = insights.shipping_address.distance_to_ip_location
        distance_to_billing_address = insights.shipping_address.distance_to_billing_address
        is_in_ip_country = insights.shipping_address.is_in_ip_country
        shipping_result = {
            "is_high_risk": is_high_risk,
            "is_postal_in_city": is_postal_in_city,
            "latitude": latitude,
            "longitude": longitude,
            "distance_to_ip_location": distance_to_ip_location,
            "distance_to_billing_address": distance_to_billing_address,
            "is_in_ip_country": is_in_ip_country,
        }

        # Clean shipping dict
        shipping_result = komand.helper.clean_dict(shipping_result)

        all_result["shipping_result"] = shipping_result

        ###################################
        # Gather card data
        ##################################
        # Issuer info
        name = str(insights.credit_card.issuer.name)
        matches_provided_name = insights.credit_card.issuer.matches_provided_name
        phone_number = str(insights.credit_card.issuer.phone_number)
        matches_provided_phone_number = insights.credit_card.issuer.matches_provided_phone_number
        issuer = {
            "name": name,
            "matches_provided_name": matches_provided_name,
            "phone_number": phone_number,
            "matches_provided_phone_number": matches_provided_phone_number,
        }

        # Clean issuer dict
        issuer = komand.helper.clean_dict(issuer)

        # Additional info
        brand = str(insights.credit_card.brand)
        country = str(insights.credit_card.country)
        is_issued_in_billing_address_country = insights.credit_card.is_issued_in_billing_address_country
        is_prepaid = insights.credit_card.is_prepaid
        type = insights.credit_card.type
        credit_card = {
            "brand": brand,
            "country": country,
            "is_issued_in_billing_address_country": is_issued_in_billing_address_country,
            "is_prepaid": is_prepaid,
            "type": type,
        }

        # Clean additional dict
        credit_card = komand.helper.clean_dict(credit_card)

        # Combine dicts
        credit_card_result = {"issuer": issuer, "credit_card": credit_card}

        # Clean issuer_result dict
        credit_card_result = komand.helper.clean_dict(credit_card_result)

        all_result["credit_card_result"] = credit_card_result

        return {"all_result": all_result, "risk_score": risk_score}