def link(self,endorsers_selected,subscriptions_selected): pairs, extra_selectors ,extra_paths = pairsNnot(endorsers_selected,subscriptions_selected) Session = self.SessionFactory() for pair in pairs: endorser = pair[0] subscription = pair[1] subauth_list = Session.query(model.Endorser,model.Subscription,model.SubscriptionAuth).\ filter(model.Endorser.identifier == endorser).\ filter(model.Subscription.identifier == subscription).\ filter(model.SubscriptionAuth.endorser == model.Endorser.id).\ filter(model.SubscriptionAuth.subscription == model.Subscription.id) if subauth_list.count() == 0: endorser_list = Session.query(model.Endorser).\ filter(model.Endorser.identifier == endorser) if endorser_list.count() == 0: self.log.warning("endorser not available.") continue sub_list = Session.query(model.Subscription).\ filter(model.Subscription.identifier == subscription) if sub_list.count() == 0: self.log.warning("subscription not available.") continue db_endorser = endorser_list.one() db_sub = sub_list.one() newsubauth = model.SubscriptionAuth(db_sub.id,db_endorser.id,True) Session.add(newsubauth) Session.commit() else: self.log.warning("endorser and subscription already linked.")
def images_info(self,images_selected,outputfiles): pairs, extra_selectors ,extra_paths = pairsNnot(images_selected,outputfiles) for item in extra_selectors: pairs.append([item,None]) NoErrorHappened = True Session = self.SessionFactory() for pair in pairs: selector_filter = pair[0] output_file_name = pair[1] output_fileptr = sys.stdout if output_file_name != None: output_fileptr = open(output_file_name,'w+') output_fileptr.flush() queryImageDef = self.selector_curent(Session, selector_filter) if queryImageDef.count() == 0: self.log.warning("Selections '%s' does not match any known images." % (selector_filter)) continue #view = self.factory_view(output_fileptr,Session,self.anchor) self._outputter.fpOutput = output_fileptr self._outputter.saSession = Session self._outputter.x509anchor = self.anchor for imagedef in queryImageDef: good = self._outputter.display_imagedef(imagedef) if good != True: NoErrorHappened = False if output_file_name != None: output_fileptr.close() return NoErrorHappened
def subscriptions_image_refuse(self, subscriptions, images): pairs, extra_subscriptions, extra_images = pairsNnot( subscriptions, images) if len(extra_subscriptions) > 0: self.log.error('Not enough images selected') return False if len(extra_images) > 0: self.log.error('Not enough subscriptions selected') return False Session = self.SessionFactory() errors = 0 for sub_uuid, image_uuid in pairs: image_known = Session.query(model.Subscription,model.ImageDefinition).\ filter(model.ImageDefinition.identifier == image_uuid).\ filter(model.ImageDefinition.subscription == model.Subscription.id).\ filter(model.Subscription.identifier == sub_uuid) if image_known.count() == 0: self.log.error( "Subscription '%s' already refuses image '%s'." % (sub_uuid, image_uuid)) errors = errors + 1 continue subscription, imageDef = image_known.one() imageInstance_known = Session.query(model.ImageInstance).\ filter(model.ImageInstance.fkIdentifier == imageDef.id) for instance in imageInstance_known: Session.delete(instance) subscription.imagelist_latest = None Session.delete(imageDef) Session.add(subscription) Session.commit() if errors != 0: return False return True
def subscriptions_image_refuse(self,subscriptions,images): pairs, extra_subscriptions ,extra_images = pairsNnot(subscriptions,images) if len(extra_subscriptions) > 0: self.log.error('Not enough images selected') return False if len(extra_images) > 0: self.log.error('Not enough subscriptions selected') return False Session = self.SessionFactory() errors = 0 for sub_uuid, image_uuid in pairs: image_known = Session.query(model.Subscription,model.ImageDefinition).\ filter(model.ImageDefinition.identifier == image_uuid).\ filter(model.ImageDefinition.subscription == model.Subscription.id).\ filter(model.Subscription.identifier == sub_uuid) if image_known.count() == 0: self.log.error("Subscription '%s' already refuses image '%s'." % (sub_uuid,image_uuid)) errors = errors + 1 continue subscription ,imageDef = image_known.one() imageInstance_known = Session.query(model.ImageInstance).\ filter(model.ImageInstance.fkIdentifier == imageDef.id) for instance in imageInstance_known: Session.delete(instance) subscription.imagelist_latest = None Session.delete(imageDef) Session.add(subscription) Session.commit() if errors != 0: return False return True
def subscriptions_image_list(self,subscriptions_selected,outputfiles): pairs, extra_selectors ,extra_paths = pairsNnot(subscriptions_selected,outputfiles) for item in extra_selectors: pairs.append([item,None]) errorhappened = False Session = self.SessionFactory() for pair in pairs: selector_filter = pair[0] output_file_name = pair[1] output_fileptr = sys.stdout if output_file_name != None: output_fileptr = open(output_file_name,'w+') output_fileptr.flush() query_subscription = self.selector_curent(Session,selector_filter) if query_subscription.count() == 0: self.log.warning("Selections '%s' does not match any known subscriptions." % (selector_filter)) continue self._outputter.fpOutput = output_fileptr self._outputter.saSession = Session self._outputter.x509anchor = self.anchor for item in query_subscription: self._outputter.display_subscription(item) query_image_def = Session.query(model.ImageDefinition).\ filter(model.ImageDefinition.subscription==item.id) for imagedef in query_image_def: self._outputter.display_image_def(imagedef) if output_file_name != None: output_fileptr.close()
def subscriptions_image_list(self, subscriptions_selected, outputfiles): pairs, extra_selectors, extra_paths = pairsNnot( subscriptions_selected, outputfiles) for item in extra_selectors: pairs.append([item, None]) errorhappened = False Session = self.SessionFactory() for pair in pairs: selector_filter = pair[0] output_file_name = pair[1] output_fileptr = sys.stdout if output_file_name != None: output_fileptr = open(output_file_name, 'w+') output_fileptr.flush() query_subscription = self.selector_curent(Session, selector_filter) if query_subscription.count() == 0: self.log.warning( "Selections '%s' does not match any known subscriptions." % (selector_filter)) continue self._outputter.fpOutput = output_fileptr self._outputter.saSession = Session self._outputter.x509anchor = self.anchor for item in query_subscription: self._outputter.display_subscription(item) query_image_def = Session.query(model.ImageDefinition).\ filter(model.ImageDefinition.subscription==item.id) for imagedef in query_image_def: self._outputter.display_image_def(imagedef) if output_file_name != None: output_fileptr.close()
def link(self, endorsers_selected, subscriptions_selected): pairs, extra_selectors, extra_paths = pairsNnot( endorsers_selected, subscriptions_selected) Session = self.SessionFactory() for pair in pairs: endorser = pair[0] subscription = pair[1] subauth_list = Session.query(model.Endorser,model.Subscription,model.SubscriptionAuth).\ filter(model.Endorser.identifier == endorser).\ filter(model.Subscription.identifier == subscription).\ filter(model.SubscriptionAuth.endorser == model.Endorser.id).\ filter(model.SubscriptionAuth.subscription == model.Subscription.id) if subauth_list.count() == 0: endorser_list = Session.query(model.Endorser).\ filter(model.Endorser.identifier == endorser) if endorser_list.count() == 0: self.log.warning("endorser not available.") continue sub_list = Session.query(model.Subscription).\ filter(model.Subscription.identifier == subscription) if sub_list.count() == 0: self.log.warning("subscription not available.") continue db_endorser = endorser_list.one() db_sub = sub_list.one() newsubauth = model.SubscriptionAuth(db_sub.id, db_endorser.id, True) Session.add(newsubauth) Session.commit() else: self.log.warning("endorser and subscription already linked.")
def endorser_create(self, endorser, subjects, issuers): # Check input parameters. pairs, extra_subs, extra_issuers = pairsNnot(subjects, issuers) if len(extra_subs) > 0: if len(issuers) > 1: self.log.warning( "Unsure how to add subjects credentials without issuer credentials." ) return False else: if len(issuers) > 0: thisissuer = issuers[0] for this_sub in extra_subs: pairs.append([this_sub, thisissuer]) else: self.log.warning( "Cant add subjects credentials without issuer credentials." ) return False if len(extra_issuers) > 0: self.log.warning("Cant add issuer credentials, without a subject.") return False if len(pairs) == 0: return True # Now we process requests error = False deleteOnError = False Session = self.SessionFactory() endorserQuery = Session.query(model.Endorser).\ filter(model.Endorser.identifier==endorser) endorserObj = None if endorserQuery.count() == 0: endorserObj = model.Endorser({'dc:identifier': str(endorser)}) Session.add(endorserObj) Session.commit() deleteOnError = True endorserQuery = Session.query(model.Endorser).\ filter(model.Endorser.identifier==endorser) endorserObj = endorserQuery.one() endorserObjId = int(endorserObj.id) for pair in pairs: dn = pair[0] issuer = pair[1] cred = model.EndorserPrincible(endorserObjId, { u'hv:dn': dn, u'hv:ca': issuer }) Session.add(cred) try: Session.commit() except IntegrityError, E: self.log.error( "Database integrity error while adding '%s' credentials to '%s'." % (dn, endorser)) self.log.debug(E.params) Session.rollback() error = True break
def endorser_create(self,endorser,subjects,issuers): # Check input parameters. pairs, extra_subs ,extra_issuers = pairsNnot(subjects,issuers) if len(extra_subs) > 0: if len(issuers) > 1: self.log.warning("Unsure how to add subjects credentials without issuer credentials.") return False else: if len (issuers) > 0: thisissuer = issuers[0] for this_sub in extra_subs: pairs.append([this_sub,thisissuer]) else: self.log.warning("Cant add subjects credentials without issuer credentials.") return False if len (extra_issuers) > 0: self.log.warning("Cant add issuer credentials, without a subject.") return False if len(pairs) == 0: return True # Now we process requests error = False deleteOnError = False Session = self.SessionFactory() endorserQuery = Session.query(model.Endorser).\ filter(model.Endorser.identifier==endorser) endorserObj = None if endorserQuery.count() == 0: endorserObj = model.Endorser({'dc:identifier' : str(endorser)}) Session.add(endorserObj) Session.commit() deleteOnError = True endorserQuery = Session.query(model.Endorser).\ filter(model.Endorser.identifier==endorser) endorserObj = endorserQuery.one() endorserObjId = int(endorserObj.id) for pair in pairs: dn = pair[0] issuer = pair[1] cred = model.EndorserPrincible(endorserObjId,{u'hv:dn' : dn, u'hv:ca' : issuer}) Session.add(cred) try: Session.commit() except IntegrityError as expt: self.log.error("Database integrity error while adding '%s' credentials to '%s'." % (dn,endorser)) self.log.debug(expt.params) Session.rollback() error = True break if error and deleteOnError: endorserQuery = Session.query(model.Endorser).\ filter(model.Endorser.identifier==endorser) if endorserQuery.count() > 0: EndorserToDel = endorserQuery.one() Session.delete(EndorserToDel) Session.commit() return False return True
def unlink(self,endorsers_selected,subscriptions_selected): Session = self.SessionFactory() pairs, extra_selectors ,extra_paths = pairsNnot(endorsers_selected,subscriptions_selected) for pair in pairs: endorser = pair[0] subscription = pair[1] subauth_list = Session.query(model.Endorser,model.Subscription,model.SubscriptionAuth).\ filter(model.Endorser.identifier == endorser).\ filter(model.Subscription.identifier == subscription).\ filter(model.SubscriptionAuth.endorser == model.Endorser.id).\ filter(model.SubscriptionAuth.subscription == model.Subscription.id) if subauth_list.count() == 0: self.log.warning("endorser and subscription are not linked.") else: for query_row in subauth_list: db_endorser = query_row[0] db_sub = query_row[1] db_subAuthEnd = query_row[2] Session.delete(db_subAuthEnd) Session.commit()
def subscriptions_image_accept(self, subscriptions, images): pairs, extra_subscriptions, extra_images = pairsNnot( subscriptions, images) if len(extra_subscriptions) > 0: self.log.error('Not enough images selected') return False if len(extra_images) > 0: self.log.error('Not enough subscriptions selected') return False Session = self.SessionFactory() errors = 0 for sub_uuid, image_uuid in pairs: image_known = Session.query(model.ImageDefinition.identifier,model.Subscription.identifier).\ filter(model.ImageDefinition.identifier == image_uuid).\ filter(model.ImageDefinition.subscription == model.Subscription.id) if image_known.count() > 0: iident, sident = image_known.one() self.log.error("Subscription '%s' has image '%s' already." % (sident, iident)) errors = errors + 1 continue sub_known = Session.query(model.Subscription).\ filter(model.Subscription.identifier == sub_uuid) if sub_known.count() == 0: self.log.error("Subscription '%s' is unknown." % (sub_uuid)) errors = errors + 1 return False subscription = sub_known.one() subscription.imagelist_latest = None key = subscription.id metadata = {'dc:identifier': image_uuid, 'cache': 0} newlist = model.ImageDefinition(key, metadata) Session.add(newlist) Session.add(subscription) Session.commit() #self.log.info("Subscription '%s' include image '%s'." % (sub_uuid,image_uuid)) if errors != 0: return False return True
def unlink(self, endorsers_selected, subscriptions_selected): Session = self.SessionFactory() pairs, extra_selectors, extra_paths = pairsNnot( endorsers_selected, subscriptions_selected) for pair in pairs: endorser = pair[0] subscription = pair[1] subauth_list = Session.query(model.Endorser,model.Subscription,model.SubscriptionAuth).\ filter(model.Endorser.identifier == endorser).\ filter(model.Subscription.identifier == subscription).\ filter(model.SubscriptionAuth.endorser == model.Endorser.id).\ filter(model.SubscriptionAuth.subscription == model.Subscription.id) if subauth_list.count() == 0: self.log.warning("endorser and subscription are not linked.") else: for query_row in subauth_list: db_endorser = query_row[0] db_sub = query_row[1] db_subAuthEnd = query_row[2] Session.delete(db_subAuthEnd) Session.commit()
def subscriptions_image_accept(self,subscriptions,images): pairs, extra_subscriptions ,extra_images = pairsNnot(subscriptions,images) if len(extra_subscriptions) > 0: self.log.error('Not enough images selected') return False if len(extra_images) > 0: self.log.error('Not enough subscriptions selected') return False Session = self.SessionFactory() errors = 0 for sub_uuid, image_uuid in pairs: image_known = Session.query(model.ImageDefinition.identifier,model.Subscription.identifier).\ filter(model.ImageDefinition.identifier == image_uuid).\ filter(model.ImageDefinition.subscription == model.Subscription.id) if image_known.count() > 0: iident, sident = image_known.one() self.log.error("Subscription '%s' has image '%s' already." % (sident,iident)) errors = errors + 1 continue sub_known = Session.query(model.Subscription).\ filter(model.Subscription.identifier == sub_uuid) if sub_known.count() == 0: self.log.error("Subscription '%s' is unknown." % (sub_uuid)) errors = errors + 1 return False subscription = sub_known.one() subscription.imagelist_latest = None key = subscription.id metadata = { 'dc:identifier' : image_uuid, 'cache' : 0} newlist = model.ImageDefinition(key,metadata) Session.add(newlist) Session.add(subscription) Session.commit() #self.log.info("Subscription '%s' include image '%s'." % (sub_uuid,image_uuid)) if errors != 0: return False return True