From d78f1325418f845b6cfda0d2d2e7a098f8e45482 Mon Sep 17 00:00:00 2001 From: Mohamed Larabi Date: Fri, 29 Nov 2013 18:11:07 +0100 Subject: [PATCH] GetPeerData() ignores Sites/Slices/Persons that have the tag sfa_created=True, so they dont get treated by RefreshPeer() --- PLC/Methods/GetPeerData.py | 58 +++++++++++++++++++++++++++++--------- 1 file changed, 45 insertions(+), 13 deletions(-) diff --git a/PLC/Methods/GetPeerData.py b/PLC/Methods/GetPeerData.py index b220f18..aff8f88 100644 --- a/PLC/Methods/GetPeerData.py +++ b/PLC/Methods/GetPeerData.py @@ -47,6 +47,7 @@ class GetPeerData(Method): # Filter out various secrets node_fields = [ field for field in Node.fields if field \ not in ['boot_nonce', 'key', 'session', 'root_person_ids']] + node_fields += ['hrn'] nodes = Nodes(self.api, {'peer_id': None}, node_fields); # filter out whitelisted nodes nodes = [ n for n in nodes if not n['slice_ids_whitelist']] @@ -55,27 +56,58 @@ class GetPeerData(Method): person_fields = [ field for field in Person.fields if field \ not in ['password', 'verification_key', 'verification_expires']] - # XXX Optimize to return only those Persons, Keys, and Slices - # necessary for slice creation on the calling peer's nodes. + site_fields = Site.fields + slice_fields = Slice.fields + try: + person_fields += ['sfa_created','hrn'] + site_fields += ['sfa_created','hrn'] + slice_fields +=['sfa_created','hrn'] + + # XXX Optimize to return only those Persons, Keys, and Slices + # necessary for slice creation on the calling peer's nodes. - # filter out special person - persons = Persons(self.api, {'~email':[self.api.config.PLC_API_MAINTENANCE_USER, - self.api.config.PLC_ROOT_USER], - 'peer_id': None}, person_fields) + # filter out special person + + persons = Persons(self.api, {'~email':[self.api.config.PLC_API_MAINTENANCE_USER, self.api.config.PLC_ROOT_USER], 'peer_id': None}, person_fields) + + # filter out system slices + system_slice_ids = SliceTags(self.api, {'name': 'system', 'value': '1'}).dict('slice_id') + slices = Slices(self.api, {'peer_id': None,'~slice_id':system_slice_ids.keys()}, slice_fields) + + sites = Sites(self.api, {'peer_id': None}, site_fields) + + # filter out objects with sfa_created=True + filtered_sites = [site for site in sites if site.get('sfa_created', None) != 'True'] + filtered_slices = [slice for slice in slices if slice.get('sfa_created', None) != 'True'] + filtered_persons = [person for person in persons if person.get('sfa_created', None) != 'True'] + + except: + # handle peers with old version of MyPLC that does not support 'sfa_created' and 'hrn' fields for Site/Slice/Person + + # XXX Optimize to return only those Persons, Keys, and Slices + # necessary for slice creation on the calling peer's nodes. + + # filter out special person + + filtered_persons = Persons(self.api, {'~email':[self.api.config.PLC_API_MAINTENANCE_USER, self.api.config.PLC_ROOT_USER], 'peer_id': None}, person_fields) + + # filter out system slices + system_slice_ids = SliceTags(self.api, {'name': 'system', 'value': '1'}).dict('slice_id') + filtered_slices = Slices(self.api, {'peer_id': None, + '~slice_id':system_slice_ids.keys()}, slice_fields) + + filtered_sites = Sites(self.api, {'peer_id': None}, site_fields) - # filter out system slices - system_slice_ids = SliceTags(self.api, {'name': 'system', 'value': '1'}).dict('slice_id') - slices = Slices(self.api, {'peer_id': None, - '~slice_id':system_slice_ids.keys()}) result = { - 'Sites': Sites(self.api, {'peer_id': None}), + 'Sites': filtered_sites, 'Keys': Keys(self.api, {'peer_id': None}), 'Nodes': nodes, - 'Persons': persons, - 'Slices': slices, + 'Persons': filtered_persons, + 'Slices': filtered_slices, } + if isinstance(self.caller, Peer): result['PeerNodes'] = Nodes(self.api, {'peer_id': self.caller['peer_id']}) -- 2.43.0