def validateTo(self, user): recipient = str(user.dest) valid = yield self.isRecipientValid(recipient) if not valid: raise SMTPBadRcpt(user) swift_filesystem = SwiftFileSystem(self.swift_connection) path = '/smtp/%s/%s' % (recipient, uuid4()) d, swift_file = swift_filesystem.startFileUpload(path) message = SwiftMessage(d, swift_file) @defer.inlineCallbacks def onUpload(ignored): if not self.rabbitmq_cluster or not self.queue_name: defer.returnValue(None) replica = yield self.rabbitmq_cluster.connect() yield replica.send( self.queue_name, json.dumps({ 'username': self.swift_connection.username, 'path': path, 'origin': self.origin, 'recipient': recipient, 'subj': message.subject, 'gate': 'smtp' })) d.addCallback(onUpload) yield swift_file.started msg("Uploading %s" % path) defer.returnValue(lambda: message)
def __init__(self, avatar): self.swiftconn = avatar.swiftconn self.swiftfilesystem = SwiftFileSystem(self.swiftconn) self.avatar = avatar self.rabbitmq_cluster = avatar.rabbitmq_cluster self.queue_name = avatar.queue_name self.conn = avatar.conn self.log_command('login')
def prepare_path(): swift_conn = yield swift_connect() swift_filesystem = SwiftFileSystem(swift_conn) try: yield swift_filesystem.get_container_listing('smtp', '/') except swift.NotFound: yield swift_filesystem.makeDirectory('/smtp/') defer.returnValue(None)
def isRecipientValid(self, recipient): valid = self.recipients.get(recipient) if valid is not None: msg("Recipient %s is %svalid [cached]" % (recipient, "" if valid else "not ")) defer.returnValue(valid) if not self.swift_connection: self.swift_connection = yield self.connectToSwift() swift_filesystem = SwiftFileSystem(self.swift_connection) try: yield swift_filesystem.getAttrs(''.join(['/smtp/', recipient])) valid = True except swift.NotFound: valid = False msg("Recipient %s is %svalid" % (recipient, "" if valid else "not ")) self.recipients[recipient] = valid defer.returnValue(valid)
def remove_test_data(swift, prefix): swift_fs = SwiftFileSystem(swift) time.sleep(2) containers = yield swift_fs.get_account_listing() sem = defer.DeferredSemaphore(200) for container in containers: if container.startswith(prefix): while True: objs = yield list_all_objects(swift, container) dl = [] for obj in objs: dl.append(sem.run( swift.delete_object, container, obj['name'])) # Wait till all objects are done deleting yield DeferredList(dl, fireOnOneErrback=True) try: # Delete the container yield swift.delete_container(container) break except Conflict: # Retry listing if there are still objects # (this can happen a lot since the container server isn't # guarenteed to be consistent) pass
def __init__(self, swiftconn, rabbitmq_cluster, queue_name): self.swiftconn = swiftconn self.swiftfilesystem = SwiftFileSystem(self.swiftconn) self.log_command('login') self.rabbitmq_cluster = rabbitmq_cluster self.queue_name = queue_name
def __init__(self, swiftconn): self.swiftconn = swiftconn self.swiftfilesystem = SwiftFileSystem(self.swiftconn) self.log_command('login')