def test_validLEI_should_return_a_boolean(self):
        invalid_types = [None, "", list(), dict(), int()]
        for invalid_type in invalid_types:
            with self.subTest(invalid_type=invalid_type):
                valid_phone = SpiderFootHelpers.validLEI(invalid_type)
                self.assertIsInstance(valid_phone, bool)
                self.assertFalse(valid_phone)

        valid_lei = SpiderFootHelpers.validLEI('7ZW8QJWVPR4P1J1KQYZZ')
        self.assertIsInstance(valid_lei, bool)
        self.assertFalse(valid_lei)

        valid_lei = SpiderFootHelpers.validLEI('7ZW8QJWVPR4P1J1KQY45')
        self.assertIsInstance(valid_lei, bool)
        self.assertTrue(valid_lei)
Beispiel #2
0
    def handleEvent(self, event):
        eventName = event.eventType
        srcModuleName = event.module
        eventData = event.data

        if eventData in self.results:
            self.debug(f"Skipping {eventData}, already checked.")
            return

        self.results[eventData] = True

        self.debug(f"Received event, {eventName}, from {srcModuleName}")

        leis = list()

        if eventName == "LEI":
            leis.append(eventData)
        elif eventName == "COMPANY_NAME":
            res = self.searchAutocompletions(eventData)

            if res is None:
                self.debug(f"Found no results for {eventData}")
                return

            e = SpiderFootEvent("RAW_RIR_DATA", str(res), self.__name__, event)
            self.notifyListeners(e)

            for record in res:
                relationships = record.get('relationships')
                if not relationships:
                    continue

                lei_records = relationships.get('lei-records')
                if not lei_records:
                    continue

                data = lei_records.get('data')
                if not data:
                    continue

                lei = data.get('id')
                if not SpiderFootHelpers.validLEI(lei):
                    continue

                leis.append(lei)

            self.info(f"Found {len(leis)} LEIs matching {eventData}")

        for lei in set(leis):
            if lei in self.results:
                continue

            if not SpiderFootHelpers.validLEI(lei):
                continue

            e = SpiderFootEvent("LEI", lei, self.__name__, event)
            self.notifyListeners(e)

            self.results[lei] = True

            res = self.retrieveRecord(lei)
            if not res:
                self.debug(f"Found no results for {eventData}")
                return

            attributes = res.get('attributes')
            if not attributes:
                continue

            entity = attributes.get('entity')
            if not entity:
                continue

            legal_name = entity.get('legalName')
            if legal_name:
                entity_name = legal_name.get('value')
                if entity_name:
                    e = SpiderFootEvent("COMPANY_NAME", entity_name,
                                        self.__name__, event)
                    self.notifyListeners(e)

            addresses = list()

            address = entity.get('legalAddress')
            if address.get('addressLines'):
                address_lines = ', '.join(
                    filter(None, address.get('addressLines')))
                location = ', '.join(
                    filter(None, [
                        address_lines,
                        address.get('city'),
                        address.get('region'),
                        address.get('country'),
                        address.get('postalCode')
                    ]))

                if location:
                    addresses.append(location)

            address = entity.get('headquartersAddress')
            if address.get('addressLines'):
                address_lines = ', '.join(
                    filter(None, address.get('addressLines')))
                location = ', '.join(
                    filter(None, [
                        address_lines,
                        address.get('city'),
                        address.get('region'),
                        address.get('country'),
                        address.get('postalCode')
                    ]))

                if location:
                    addresses.append(location)

            for address in set(addresses):
                e = SpiderFootEvent("PHYSICAL_ADDRESS", address, self.__name__,
                                    event)
                self.notifyListeners(e)