[Nym3-commit] r39 - trunk
nym3-devel@lists.noreply.org
nym3-devel@lists.noreply.org
Thu, 29 Jul 2004 00:28:32 +0200
Author: laurent
Date: 2004-07-29 00:28:31 +0200 (Thu, 29 Jul 2004)
New Revision: 39
Added:
trunk/Config.py
trunk/Main.py
trunk/User.py
Modified:
trunk/Mail.py
Log:
Add user and incoming mail handling.
Added: trunk/Config.py
===================================================================
--- trunk/Config.py 2004-07-28 22:11:49 UTC (rev 38)
+++ trunk/Config.py 2004-07-28 22:28:31 UTC (rev 39)
@@ -0,0 +1,2 @@
+
+path = '/var/lib/nym3'
Modified: trunk/Mail.py
===================================================================
--- trunk/Mail.py 2004-07-28 22:11:49 UTC (rev 38)
+++ trunk/Mail.py 2004-07-28 22:28:31 UTC (rev 39)
@@ -5,6 +5,7 @@
slen = 180
random.seed(None)
+midLen = 20
def synopsize(msg):
vheaders = [ 'Cc', 'From', 'Date', 'In-Reply-To', 'Sender',
@@ -25,7 +26,7 @@
return res + 'X-Octets: ' + repr(len(msg)) + "\n" + body
-def genMid(length):
+def genMid(length = midLen):
res = ""
for i in range(0, length): res = res + chr(random.randint(0, 255))
return res
Added: trunk/Main.py
===================================================================
--- trunk/Main.py 2004-07-28 22:11:49 UTC (rev 38)
+++ trunk/Main.py 2004-07-28 22:28:31 UTC (rev 39)
@@ -0,0 +1,20 @@
+#!/usr/bin/env python2.3
+
+import sys
+import os
+import User
+import Config
+
+def processIncoming(localpart, msg):
+ try:
+ nymuser = User.User(localpart)
+ except NoSuchUser:
+ print "No such user"
+ sys.exit(73)
+ if nymuser.usage() + len(msg) > nymuser.quota():
+ print "Quota exceeded."
+ sys.exit(75)
+ # Valid user, not over quota. Filtering policy can wait.
+ nymuser.store(msg)
+ sys.exit(0)
+
Added: trunk/User.py
===================================================================
--- trunk/User.py 2004-07-28 22:11:49 UTC (rev 38)
+++ trunk/User.py 2004-07-28 22:28:31 UTC (rev 39)
@@ -0,0 +1,50 @@
+
+import os
+import Config
+import Mail
+import pickle
+
+class User:
+ """Hold user data"""
+ def __init__(self, username):
+ self.datafile = Config.path + '/' + username + '.dat'
+ f = open(self.datafile, 'r') # TODO : Locks?
+ self.data = pickle.load(f)
+ f.close()
+
+ def quota(self):
+ return self.data.quota
+
+ def usage(self):
+ return self.data.usage
+
+ def save(self):
+ f = open(self.filename, 'w') # TODO : Locks?
+ pickle.dump(self.data, f)
+ f.close()
+
+ def store(msg):
+ "Store an incoming message"
+ syn = Mail.synopsize(msg)
+ mbox = Config.path + '/' + self.data.username + '.mbox'
+ f = open(mbox, 'r') # TODO : Locks?
+ self.mbox = pickle.load(f)
+ f.close()
+ mid = Mail.genMid()
+ while self.mbox.has_key(mid): mid = Mail.genMid()
+ self.mbox[mid] = msg # TODO : this is where we're supposed to crypt.
+ f = open(mbox, 'w') # TODO : Locks?
+ pickle.dump(self.mbox, f)
+ f.close()
+
+ synbox = Config.path + '/' + self.data.username + '.syn'
+ f = open(synbox, 'r') # TODO : Locks?
+ self.syn = pickle.load(f)
+ f.close()
+ self.syn.append({'time' : int(time.time()), 'encrypted' : 0,
+ 'mid' : mid, 'synopsis' : syn})
+ f = open(synbox, 'w') # TODO : Locks?
+ pickle.dump(self.syn, f)
+ f.close()
+
+