def sync_privacy_groups(): api_key = AWSSecrets.te_api_key() api = ThreatExchangeAPI(api_key) privacy_group_member_list = api.get_threat_privacy_groups_member() privacy_group_owner_list = api.get_threat_privacy_groups_owner() unique_privacy_groups = set(privacy_group_member_list + privacy_group_owner_list) priavcy_group_id_in_use = set() for privacy_group in unique_privacy_groups: if privacy_group.threat_updates_enabled: # HMA can only read from privacy groups that have threat_updates enabled. # # See here for more details: # https://developers.facebook.com/docs/threat-exchange/reference/apis/threat-updates/v9.0 logger.info("Adding collaboration name %s", privacy_group.name) priavcy_group_id_in_use.add(privacy_group.id) config = ThreatExchangeConfig( privacy_group.id, # TODO Currently default to True for testing purpose, # need to switch it to False before v0 launch fetcher_active=FETCHER_ACTIVE, privacy_group_name=privacy_group.name, in_use=True, write_back=WRITE_BACK, ) try: hmaconfig.create_config(config) except ClientError as e: if e.response["Error"]["Code"] == "ConditionalCheckFailedException": logger.warning( "Can't insert duplicated config, %s", e.response["Error"]["Message"], ) else: raise update_privacy_group_in_use(priavcy_group_id_in_use)
def try_api_token(api_token: str) -> bool: """ Try the new API token to make a get_privacy_groups member call. If successful, return True, else False. Some doctests to choose from: >>> from hmalib.common.threatexchange_config import try_api_token >>> try_api_token("<valid token>") True >>> try_api_token("<blank_string>") False >>> try_api_token("<invalid_token>") False """ api = ThreatExchangeAPI(api_token) try: api.get_threat_privacy_groups_member() return True except (ValueError, HTTPError): return False
class APIIntegrationTest(unittest.TestCase): def setUp(self): self.api = ThreatExchangeAPI(THREAT_EXCHANGE_INTEGRATION_TEST_TOKEN) def test_get_threat_privacy_groups_member(self): """ Assumes that the app (if token is provided) will have at least one privacy group. """ response = self.api.get_threat_privacy_groups_member() self.assertTrue( isinstance(response, collections.abc.Sequence) and not isinstance(response, staticmethod), "API returned something that's not a list!", ) self.assertTrue(isinstance(response[0], ThreatPrivacyGroup))
def sync_privacy_groups(): api_key = AWSSecrets().te_api_key() api = ThreatExchangeAPI(api_key) privacy_group_member_list = api.get_threat_privacy_groups_member() privacy_group_owner_list = api.get_threat_privacy_groups_owner() unique_privacy_groups = set(privacy_group_member_list + privacy_group_owner_list) priavcy_group_id_in_use = set() for privacy_group in unique_privacy_groups: if privacy_group.threat_updates_enabled: # HMA can only read from privacy groups that have threat_updates enabled. # # See here for more details: # https://developers.facebook.com/docs/threat-exchange/reference/apis/threat-updates/v9.0 priavcy_group_id_in_use.add(privacy_group.id) create_privacy_group_if_not_exists( str(privacy_group.id), privacy_group_name=privacy_group.name, description=privacy_group.description, ) update_privacy_groups_in_use(priavcy_group_id_in_use)
def sync_privacy_groups(): api_token = AWSSecrets().te_api_token() api = ThreatExchangeAPI(api_token) privacy_group_member_list = api.get_threat_privacy_groups_member() privacy_group_owner_list = api.get_threat_privacy_groups_owner() unique_privacy_groups = set(privacy_group_member_list + privacy_group_owner_list) priavcy_group_id_in_use = set( SAMPLE_DATASET_PRIVACY_GROUP_ID ) # add sample test dataset id to avoid disable it when syncing from HMA UI for privacy_group in unique_privacy_groups: if privacy_group.threat_updates_enabled: # HMA can only read from privacy groups that have threat_updates enabled. # # See here for more details: # https://developers.facebook.com/docs/threat-exchange/reference/apis/threat-updates/v9.0 priavcy_group_id_in_use.add(str(privacy_group.id)) create_privacy_group_if_not_exists( str(privacy_group.id), privacy_group_name=privacy_group.name, description=privacy_group.description, ) update_privacy_groups_in_use(priavcy_group_id_in_use)