def recv_captcha(self, mailfrom, msg): """ Receives and verifies captcha. """ subject = msg['Subject'] orgidentifier = string.split(subject,' ')[-1] logging.debug('Orig CAPTCHA identifier\t: %s', orgidentifier) # TODO: Reject if original identifier is not in DB try: if msg.is_multipart(): answer = msg.get_payload(0).get_payload().splitlines()[0].strip() else: answer = msg.get_payload().splitlines()[0].strip() except: return identifier = self.db.hash_data(Address(mailfrom).address, answer) match = self.db.get_captcha_word(identifier) if match != None and match['word'] == answer: # Update captcha status to CAPTCHA_APPROVED cid, rid, word = match adata = self.db.get_alias_data(rid) aobj = Alias(**adata) user = User(**self.db.get_user(uid=aobj.get_uid())) # send message to recipient's alias requesting mailfrom's permission to send msg = UserMessage('senderverify.senduserreq', \ fromaddx = self.cfg.SVCALIAS, \ aliasaddx = aobj.get_alias_address(), \ useraddx = user.get_account_address(), \ requestor = mailfrom) msg.generate_message_id(self.cfg.DOMAIN) self.db.set_captcha(msg['Message-ID'], '', cid, rid, self.db.CAPTCHA_APPROVED) logging.debug('Sending approval request to user %s', user.get_username()) self.send(msg['From'], [user.get_forwarding_address()], msg) # Delete identifier from database #self.db.delete_captcha_identifier(identifier) else: # TOFIX: should replace with new captcha and increment numtries; pass
def __init__(self, msgfile, errordir=None, **keywords): if errordir is None: errordir = cfgdata.ERRORDIR UserMessage.__init__(self, msgfile, userdir=errordir, **keywords)