示例#1
0
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
示例#2
0
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 )
示例#3
0
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
示例#4
0
def user_account_dir( user_addr ):
   global USER_ACCOUNTS_DIR
   return storage.path_join( USER_ACCOUNTS_DIR, user_addr )
示例#5
0
def user_mail_dir( user_addr ):
   global INCOMING_MAIL_DIR
   return storage.path_join( INCOMING_MAIL_DIR, user_addr )
示例#6
0
      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)