def parse_alias_address(self): """ Parses an alias address from string format, returning a tuple containing the address' alias name and randomization string (as an integer). Returns False if not properly formatted. """ if not isinstance(self.localpart, str) or len(self.localpart) <= cfgdata.RANDLEN: return False # Separator is required if self.localpart[-cfgdata.RANDLEN-1] not in cfgdata.SEPARATORS: return False # Uncomment the following if allowing separators to be optional; # aliasname = self.localpart[0: -cfgdata.RANDLEN \ # if self.localpart[-cfgdata.RANDLEN-1] \ # not in cfgdata.SEPARATORS \ # else -cfgdata.RANDLEN-1] aliasname = self.localpart[0: -cfgdata.RANDLEN-1] randstr = self.localpart[-cfgdata.RANDLEN:] if not self.is_servername(): return False randint = alias.rstr_to_rint(randstr) if randint is False or not alias.is_alias_name(aliasname): return False return (aliasname, randint)
def create_alias(self, user, mailfrom, rcpttos, msg): """ Handles Case 1b, for creating a new alias. """ # Use first string token as aliasname. # The second string token can specify options. # Current options supported: # - UNTRUSTED # - HINT <hint> aliastokens = msg['Subject'].rsplit(' ') aliasname = aliastokens[0] isprimary = False istrusted = True hint = None # TODO: This is not the most robust way to parse options, # but will do for now. if len(aliastokens) > 1: for t in range(1, len(aliastokens)): opt = aliastokens[t].lower() if opt == 'untrusted': istrusted = False elif opt == 'primary': isprimary = True elif opt == 'hint' and t < (len(aliastokens)-1): hint = aliastokens[t+1] # aliasname must be properly formatted if not alias.is_alias_name(aliasname): logging.info('Improper aliasname format: "%s"', aliasname) # Create error response message err = ErrorMessage('createalias.badalias', fromaddx = self.cfg.GETALIAS, toaddx = user.get_account_address(), aliasname = aliasname, maxlen = self.cfg.MAXALIASNAMELEN) self.send(err['From'], [user.get_forwarding_address()], err) return aliasaddx = self.create_alias_helper(user, aliasname, rcpt=None, \ primary=isprimary, trusted=istrusted, hint=hint) if aliasaddx == None: # Something went terribly wrong return # Create response message msg = UserMessage('createalias.aliascreated', fromaddx = self.cfg.GETALIAS, toaddx = user.get_account_address(), aliasaddx = aliasaddx) self.send(msg['From'], [user.get_forwarding_address()], msg) return
def parse_areq_address(self): """ Parses an alias request address, returning the requested alias name; Returns False if not properly formatted. """ if not isinstance(self.localpart, str) or \ not (self.is_servername() and alias.is_alias_name(self.localpart)): return False return self.localpart