def get_incoming_mail( user_addr ): # FIXME: streaming/paging solution storage_root = user_mail_dir( user_addr ) if not os.path.exists( storage_root ): return {"messages": []} # get size and listing mail_list = os.listdir( storage_root ) mail_list.sort() ret = {"messages": []} messages = [] for m in mail_list: m_path = storage.path_join( storage_root, m ) m_fd = open( m_path, "r" ) m_data = m_fd.read() m_fd.close() messages.append( m_data ) ret['messages'] = messages return ret
def clear_user_incoming_mail( user_addr ): storage_root = user_mail_dir( user_addr ) present = os.listdir(storage_root) for m in present: m_path = storage.path_join( storage_root, m ) try: os.unlink( m_path ) except Exception, e: log.exception(e) log.error("Failed to remove %s" % m_path )
def read_user_pubkey_sig( user_addr ): user_dir = user_account_dir( user_addr ) user_key_path = storage.path_join( user_dir, "pubkey.sig" ) try: fd = open( user_key_path ) pubkey_str = fd.read() fd.close() return pubkey_str except Exception, e: log.exception(e) log.error("Failed to read public key signature for %s" % user_addr ) return None
def user_account_dir( user_addr ): global USER_ACCOUNTS_DIR return storage.path_join( USER_ACCOUNTS_DIR, user_addr )
def user_mail_dir( user_addr ): global INCOMING_MAIL_DIR return storage.path_join( INCOMING_MAIL_DIR, user_addr )
return None #------------------------- def add_or_replace_user( user_addr, pubkey_pem, pubkey_sig ): salt = os.urandom(64) user_dir = user_account_dir( user_addr ) try: os.makedirs( user_dir ) except OSError, oe: if oe.errno != errno.EEXIST: raise oe else: log.info("Replace user %s" % user_addr ) pubkey_path = storage.path_join( user_dir, "pubkey" ) pubkey_sig_path = storage.path_join( user_dir, "pubkey.sig") try: pubkey_fd = open( pubkey_path, "w" ) pubkey_fd.write( pubkey_pem ) pubkey_fd.close() pubkey_sig_fd = open( pubkey_sig_path, "w" ) pubkey_sig_fd.write( pubkey_sig ) pubkey_sig_fd.close() return True except Exception, e: log.exception(e)