[Nym3-commit] r201 - trunk/nym3/Client
jr at conuropsis.org
jr at conuropsis.org
Thu Apr 28 15:36:33 CEST 2005
Author: jr
Date: 2005-04-28 15:36:32 +0200 (Thu, 28 Apr 2005)
New Revision: 201
Modified:
trunk/nym3/Client/Account.py
trunk/nym3/Client/Main.py
Log:
- add relaying command
- correct some bug in Tagmap and Account
- add the case create = False in Account.__init__
Modified: trunk/nym3/Client/Account.py
===================================================================
--- trunk/nym3/Client/Account.py 2005-04-27 19:54:27 UTC (rev 200)
+++ trunk/nym3/Client/Account.py 2005-04-28 13:36:32 UTC (rev 201)
@@ -50,8 +50,9 @@
class TagMap:
"""Contains mapping between idTag and nickname"""
def __init__(self, filename):
- self.id2nick = {}
- self.nick2id = {}
+ self.lock = None
+ self.id2nick = None
+ self.nick2id = None
self.filename = filename
def __del__(self):
@@ -77,8 +78,11 @@
f.close()
except IOError:
self.id2nick = {}
+ self.nick2id = {}
for i in self.id2nick.keys():
self.nick2id[self.id2nick[i]] = i
+ print self.nick2id.keys()
+ print self.id2nick.keys()
def _loadifneeded(self):
if self.id2nick == None:
@@ -95,11 +99,17 @@
def nickFromId(self, idTag):
self._loadifneeded()
- return self.id2nick[idTag]
+ try:
+ return self.id2nick[idTag]
+ except KeyError:
+ raise NoSuchAccount()
def idFromNick(self, nick):
self._loadifneeded()
- return self.nick2id[nick]
+ try:
+ return self.nick2id[nick]
+ except KeyError:
+ raise NoSuchAccount()
def getnewId(self, nick):
self._lock()
@@ -147,10 +157,10 @@
# Some data related to the account are loaded only on demand,
# this includes the journal, the mailbox, the synbox.
self.lock = None
+ self.succeded = True
self.config = config
-
+ tagmap = TagMap(config.path + os.sep + 'tagmap')
if create:
- tagmap = TagMap(config.path + os.sep + 'tagmap')
self.data = {}
self.succeded = False
self['idTag'] = tagmap.getnewId(nickname)
@@ -170,14 +180,17 @@
self.idKey = None
self.pendingKey = None
else:
+ print "nickname: %s" % nickname
+ self.data_status = 'unloaded'
+ self.journal_status = 'unloaded'
+ self.mbox_status = 'unloaded'
+ self.synbox_status = 'unloaded'
+ idTag = tagmap.idFromNick(nickname)
+ self.base_path = config.path + os.sep + idTag
self._load_data()
self.journal = None
- self.journal_status = 'unloaded'
self.mbox = None
- self.mbox_status = 'unloaded'
self.synbox = None
- self.synbox_status = 'unloaded'
- self.base_path = config.path + os.sep + self['idTag']
self.succeded = True
self._lock()
@@ -336,6 +349,18 @@
self.mbox = {} # ?
self.mbox_status = 'ok'
+ def _load_data(self):
+ """Loads the datafile from the disk"""
+ if not self.data_status == 'unloaded': return
+ datafile = self.datafile()
+ try:
+ f = open(datafile, 'r')
+ self.data = pickle.load(f)
+ f.close()
+ except IOError:
+ self.data = {}
+ self.data_status = 'ok'
+
def _load_synbox(self):
"""Loads the synbox from the disk"""
if not self.synbox_status == 'unloaded': return
Modified: trunk/nym3/Client/Main.py
===================================================================
--- trunk/nym3/Client/Main.py 2005-04-27 19:54:27 UTC (rev 200)
+++ trunk/nym3/Client/Main.py 2005-04-28 13:36:32 UTC (rev 201)
@@ -38,6 +38,7 @@
import nym3.Mail as Mail
import nym3.Client.Keyring as Keyring
import mixminion.Crypto as _cr
+import mixminion.ClientDirectory as _cl
class CLI:
def __init__(self):
@@ -77,13 +78,17 @@
def display(self, s):
print s
+ def promptblock(self, s):
+ print s
+ return sys.stdin.read()
+
def processMessage(msg, config, ui, nickname):
"""process incoming control message"""
sr = Message.StrReader(msg)
comList = sr.readCommandCToSList()
for com in comList:
- if (com.ct() == SToCCODE['Created']):
+ if (com.ct() == SToCCODE['Created']):
account = Account.Account(config, nickname)
# No challenge/response scheme decided yet:
account['handshake'] = 'completed'
@@ -172,8 +177,60 @@
surbc = Message.Surb()
surbc.fromData(account.generateSurbs(7))
account.sendControl([createc, newpkc, surbc], idKey)
- account['handshake'] = "initiated"
-
+
+def relayMessage(ui, config, nickname = None, to = None, input = None):
+ body = None
+ exAdr = None
+ if not to:
+ ui.display("No destination given, abort")
+ ui.display("Use -t <dest>")
+ sys.exit()
+ try:
+ exAdr = _cl.parseAddress(to)
+ except _cl.ParseError:
+ ui.display("Address format unknown")
+ #TODO add here the supported formats?
+ sys.exit()
+ if not nickname:
+ ui.display("No nickname given, abort")
+ ui.display("Use -n <nickname>")
+ sys.exit()
+ account = None
+ try:
+ account = Account.Account(config, nickname)
+ except Account.NoSuchAccount:
+ ui.display("No account relative to the provided nickname, abort")
+ sys.exit(42)
+ if input:
+ try:
+ fd = open(input)
+ body = fd.read()
+ fd.close()
+ except IOError:
+ ui.display("Unable to read message from input file")
+ sys.exit()
+ else:
+ try:
+ body = ui.promptblock("Enter your message:")
+ except IOError:
+ ui.display("Unable to read message from stdin")
+ sys.exit()
+ rt, ri, lh = exAdr.getRouting()
+ relayc = Message.Relay()
+ relayc.fromData(Message.intToStrBE(rt, 2), ri, body)
+ try:
+ secring = Keyring.Keyring(config.secring_path)
+ ui.display("You need to provide your passphrase to unlock your keyring")
+ while True:
+ passphrase1 = ui.prompthidden("Passphrase")
+ if secring.decrypt(passphrase1): break
+ ui.display("wrong passphrase")
+ except Keyring.NewKeyring:
+ # The Keyring is new. That shouldn't happen
+ raise Exception('Bug keyring?')
+ idKey = _cr.pk_decode_private_key(secring.get_key(account['idKey']))
+ account.sendControl([relayc], idKey)
+
def main(args):
if len(args) < 2:
print "Usage: WRITEME"
@@ -201,8 +258,28 @@
setupAccount(config, ui, serverName = options.server,
usernamelist = myusernamelist,
emailAddress = options.email, nickname = options.nickname)
+<<<<<<< .mine
+ sys.exit(0)
+ if args[1] == "send":
+ parser = OptionParser()
+ parser.add_option("-n", "--nickname", action = "store",
+ dest = "nickname", help = "The nickname refering "
+ "to the account used to send a message")
+ parser.add_option("-t", "--to", help = "Specify the recipient's "
+ "address", action = "store",
+ dest = "to")
+ parser.add_option("-i", "--input", action = "store",
+ dest = "input", help = "The file to read the message "
+ "from (defaults to stdin)")
+ (options, args) = parser.parse_args(args[2:])
+ ui = CLI()
+ config = Config.Config()
+ relayMessage(ui, config, options.nickname, options.to, options.input)
+ sys.exit(0)
+=======
sys.exit(1)
+>>>>>>> .r200
if args[1] == "process":
parser = OptionParser()
parser.add_option("-i", "--idtag", action = "store",
@@ -234,6 +311,7 @@
sys.exit(1)
else: msg = sys.stdin.read()
processMessage(msg, config, ui, nick)
+ sys.exit(0)
if __name__ == '__main__':
main(sys.argv)
More information about the Nym3-commit
mailing list