--- a/iro/acounting.py Thu Nov 03 22:47:30 2011 +0100
+++ b/iro/acounting.py Fri Nov 18 22:36:50 2011 +0100
@@ -9,8 +9,13 @@
Database.__init__(self,connection)
self.id=id
- def setId(self,id):
+ def setId(self,id, user):
self.id=id
+ if user:
+ self.connect()
+ self.cursor.execute ("INSERT INTO %s (id,user) VALUES ('%s','%s')" % (self.connection['overview'], self.id,user.name))
+ self.disconnect()
+
def getStatus(self):
self.connect()
--- a/iro/anbieter/content.py Thu Nov 03 22:47:30 2011 +0100
+++ b/iro/anbieter/content.py Fri Nov 18 22:36:50 2011 +0100
@@ -24,6 +24,12 @@
def getContent(self):
return self.content
+ def __eq__(self,other):
+ return self.content == other.content
+
+ def __ne__(self,other):
+ return not self.__eq__(other)
+
class SMS(content):
def __init__(self, cont):
content.__init__(self,cont)
@@ -31,6 +37,7 @@
def sendto(self,anbieter,recipients):
anbieter.sendSMS(self,recipients)
+
class FAX(content):
def __init__(self,header,cont,attachments):
content.__init__(self,cont)
@@ -41,9 +48,26 @@
anbieter.sendFAX(self,recipients)
def getAttachment(self,i):
- print self.attachments
return self.attachments[i]
+ def __eq__(self,other):
+ if not content.__eq__(self,other):
+ return False
+
+ if self.header != other.header:
+ return False
+
+ if len(self.attachments) != len(other.attachments):
+ return False
+
+ for i in range(len(self.attachments)):
+ if self.attachments[i] != other.attachments[i]:
+ return False
+
+ return True
+
+
+
class Mail(content):
def __init__(self, subject, body, frm):
con=MIMEText(body.encode("utf-8"), _charset='utf-8')
@@ -60,3 +84,12 @@
def getFrom(self):
return self.frm
+
+ def __eq__(self,other):
+ if self.as_string() != other.as_string():
+ return False
+
+ if self.frm != other.frm:
+ return False
+
+ return True
--- a/iro/anbieter/sipgate.py Thu Nov 03 22:47:30 2011 +0100
+++ b/iro/anbieter/sipgate.py Fri Nov 18 22:36:50 2011 +0100
@@ -16,12 +16,15 @@
from telnumber import telnumber, NotATelNumber
import ConfigParser
import xmlrpclib
-import base64
import logging
logger=logging.getLogger("sipgate")
class NoValidStatusCode(Exception):
- pass
+ def __init__(self, value):
+ self.value = value
+
+ def __str__(self):
+ return repr(self.value)
class sipgate(anbieter):
"""
@@ -53,30 +56,30 @@
def sendFAX(self,fax,recipients):
"""send the PDF file $fax to $recipients"""
logger.debug('sipgate.sendFAX(%s,%s)'%(fax, str(recipients)))
- logger.debug(fax.getAttachment(0));
- pdf=open(fax.getAttachment(0),"rb")
args={
"TOS" : "fax",
- "Content" : base64.encodestring(pdf.read())
+ "Content" : xmlrpclib.Binary(fax.getAttachment(0)),
}
- pdf.close()
self.__send(args,recipients)
def __connect(self):
"""connect to sipgate XMLRPC Server"""
logger.debug("sipgate.__connect()-"+self.url%(self.user,"XXXXXXXX"))
-
- self.samurai=xmlrpclib.Server(self.url%(self.user,self.password)).samurai
+
+ self.serv=xmlrpclib.ServerProxy(self.url%(self.user,self.password))
+ self.samurai=self.serv.samurai
+
args_identify = {
"ClientName" : "anbieter.py",
"ClientVersion" : "V1.0",
"ClientVendor" : "Sandro Knauss"
}
-
self.__send_method(self.samurai.ClientIdentify, args_identify)
+ return self.serv
def __send_method(self, func, args=None):
"""execute $func and test weather if the func ran successfully or not"""
+ logger.debug("sipgate.__send_method(func,%s)"%( args))
if args==None:
xmlrpc_result = func()
@@ -84,16 +87,15 @@
xmlrpc_result = func(args)
if xmlrpc_result['StatusCode'] != 200:
raise NoValidStatusCode("There was an error during identification to the server! %d %s"% (xmlrpc_result['StatusCode'], xmlrpc_result['StatusString']))
-
-
+ logger.debug("sipgate.__send_method(..):ok");
return xmlrpc_result
def __send(self,args,recipients):
"""main sending method - sending the args to $recipients"""
sended=[]
- self.__connect()
- logger.debug('sipgate.__send(%s,%s)'%(str(args), str(recipients)))
+ serv=self.__connect()
+ logger.debug('sipgate.__send(%s,%s)'%(args, recipients))
for recipient in recipients:
try:
tel = telnumber(recipient)
@@ -103,10 +105,10 @@
sended.append(tel)
args["RemoteUri"]="sip:%s%s@sipgate.net"%(tel.land,tel.number)
- self.__send_method(self.samurai.SessionInitiate, args)
+ self.__send_method(serv.samurai.SessionInitiate, args)
self.updateStatus(arranged=recipient)
- except NotATelNumber, NoValidStatusCode:
+ except (NotATelNumber, NoValidStatusCode):
self.updateStatus(failed=recipient)
self.__disconnect()
@@ -149,4 +151,7 @@
def __disconnect(self):
"""disconnect xmlrpc client"""
+ logger.debug('sipgate.__disconnect()')
+ self.samurai=None
+ self.serv=None
self.xmlrpc=None
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/iro/dump_test_log.py Fri Nov 18 22:36:50 2011 +0100
@@ -0,0 +1,42 @@
+import time, os, signal
+LOG_FILE = 'test.log'
+
+log_file = open(LOG_FILE, 'a')
+
+def log(msg):
+ log_file.write(msg + '\n')
+ log_file.flush()
+
+def SigUSR1Handler(signum, frame):
+ print "Reacting on USR1 signal (signal 10)"
+ global log_file
+ log_file.close()
+ log_file = open(LOG_FILE, 'a')
+ return
+
+def init():
+ if os.path.isfile('/var/usr/dump_test_log.pid'):
+ print 'Have to stop server first'
+ os.exit(1)
+ else:
+ print 'Starting server...'
+ #write process id file
+ f = open('/var/run/dump_test_log.pid', 'w')
+ f.write(str(os.getpid()))
+ f.flush()
+ f.close()
+ print 'Process start with pid ', os.getpid()
+
+ signal.signal(signal.SIGUSR1, SigUSR1Handler)
+
+def main():
+ init()
+ count = 1
+ while True:
+ log('log line #%d, pid: %d' % (count, os.getpid()))
+ count = count + 1
+ time.sleep(1)
+
+if __name__ == '__main__':
+ main()
+
--- a/iro/iro.py Thu Nov 03 22:47:30 2011 +0100
+++ b/iro/iro.py Fri Nov 18 22:36:50 2011 +0100
@@ -34,7 +34,7 @@
UserDB.__init__(self, None,userlist,jobqueue)
def createUser(self, user):
- self.userlist[self.createHash(user)]=user["class"](self.jobqueue)
+ self.userlist[self.createHash(user)]=user["class"](user["name"],self.jobqueue)
--- a/iro/joblist.py Thu Nov 03 22:47:30 2011 +0100
+++ b/iro/joblist.py Fri Nov 18 22:36:50 2011 +0100
@@ -12,7 +12,7 @@
#along with this program; if not, see <http://www.gnu.org/licenses/>.
from anbieter import content
-import md5, os, time
+import hashlib, os, time
import logging
logger=logging.getLogger("iro.joblist");
@@ -31,42 +31,42 @@
def __getitem__(self,key):
return self.jobs[key]
- def __registerJob__(self, job):
+ def __registerJob__(self, job, user):
id = self._createID()
if self.dbconn:
job.setAcounting(self.manager.Acounting(id,self.dbconn))
- job.setId(id)
+ job.setId(id, user)
self.jobs[id]=job
self.queue.put(job)
return id
- def newSMS(self, message, recipients, provider="default"):
+ def newSMS(self, message, recipients, provider="default", user=None):
'''
creates a new SMS
'''
job=self.manager.SMSJob(self.providerlist, provider,message, content.SMS(message),recipients)
- return self.__registerJob__(job)
+ return self.__registerJob__(job,user)
- def newFAX(self,subject, fax,recipients,provider="default"):
+ def newFAX(self,subject, fax,recipients,provider="default",user=None):
'''
creates a new Fax
'''
job=self.manager.FaxJob(self.providerlist, provider,subject, content.FAX(subject,'' ,fax),recipients)
- return self.__registerJob__(job)
+ return self.__registerJob__(job,user)
- def newMail(self, subject, body, recipients, frm, provider="default"):
+ def newMail(self, subject, body, recipients, frm, provider="default",user=None):
'''
creates a new Mail
'''
job=self.manager.MailJob(self.providerlist, provider,subject, content.Mail(subject, body, frm),recipients)
- return self.__registerJob__(job)
+ return self.__registerJob__(job,user)
def _createID(self):
'''
creats a random hash id
'''
while True:
- m = md5.new()
+ m = hashlib.sha1()
m.update(str(time.time()))
m.update(os.urandom(10))
if not self.jobs.has_key(m.hexdigest):
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/iro/tests/stopableServer.py Fri Nov 18 22:36:50 2011 +0100
@@ -0,0 +1,118 @@
+import ConfigParser
+
+import threading
+
+from multiprocessing import Queue
+from multiprocessing.managers import BaseManager
+
+from iro import xmlrpc,anbieter
+from iro.user import User, Admin
+from iro.iro import MySMTP,MySmstrade,MyUserDB
+from iro.job import SMSJob, FAXJob, MailJob
+from iro.joblist import Joblist
+from iro.providerlist import Providerlist
+
+class StoppableXMLRPCServer(xmlrpc.SecureUserDBXMLRPCServer, threading.Thread):
+ running=False
+ def __init__(self, *args, **kwargs):
+ xmlrpc.SecureUserDBXMLRPCServer.__init__(self, *args, **kwargs)
+ threading.Thread.__init__(self)
+ self.timeout=.5
+
+ def start(self):
+ self.running=True
+ threading.Thread.start(self)
+
+
+ def run(self):
+ # *serve_forever* muss in einem eigenen Thread laufen, damit man es
+ # unterbrochen werden kann!
+ while (self.running):
+ try:
+ self.handle_request()
+ except :
+ break
+
+ def stop(self):
+ if (self.running):
+ self.running=False
+ self.server_close()
+ self.join()
+
+ def __del__(self):
+ self.stop()
+
+ def __enter__(self):
+ self.start()
+ return self
+
+ def __exit__(self,type,value,traceback):
+ self.stop()
+
+
+class Internal:
+ pass
+
+def init_server():
+ userlist=[{"name":"test","password":"test", "class":User},
+ {"name":"test2","password":"test2", "class": User},
+ {"name":"admin","password":"admin", "class": Admin}]
+
+
+
+ class MyManager(BaseManager):
+ pass
+
+ internal=Internal()
+
+ MyManager.register('SMSJob', SMSJob)
+ MyManager.register('FaxJob', FAXJob)
+ MyManager.register('MailJob',MailJob)
+ MyManager.register('Providerlist',Providerlist)
+ manager = MyManager()
+ manager.start()
+
+ internal.manager=manager
+
+ #anbieter erzeugen und konfigurieren
+ sip=anbieter.sipgate()
+ sip.read_basic_config("iro.conf")
+
+ localhost=MySMTP()
+ localhost.read_basic_config("iro.conf")
+
+ smstrade=MySmstrade()
+ smstrade.read_basic_config("iro.conf")
+
+ #Benutzerdatenbank erstellen
+ queue = Queue()
+ internal.queue=queue
+ provider=Providerlist()
+ internal.provider=provider
+ provider.add("sipgate", sip, ["sms", "fax", ])
+ provider.add("smstrade", smstrade, ["sms", ])
+ provider.add("geonet", None, ["sms", "fax", ])
+ provider.add("fax.de", None, ["sms", "fax", ])
+ provider.add("localhost", localhost, ["mail", ])
+ provider.setDefault("sms","smstrade")
+ provider.setDefault("fax","sipgate")
+ provider.setDefault("mail","localhost")
+ jobqueue=Joblist(manager, queue, provider)
+ internal.jobqueue=jobqueue
+ userdb=MyUserDB(userlist,jobqueue)
+ internal.userdb=userdb
+
+
+ #Server starten
+ cp = ConfigParser.ConfigParser()
+ cp.read(["iro.conf"])
+ cert=cp.get('server', 'cert')
+ key=cp.get('server', 'key')
+ serv = StoppableXMLRPCServer(addr=("localhost", 8000),
+ userdb=userdb,
+ certificate=cert,privatekey=key,
+ logRequests=False)
+ serv.relam="xmlrpc"
+ internal.serv=serv
+ return internal
+
Binary file iro/tests/test.pdf has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/iro/tests/testJob.py Fri Nov 18 22:36:50 2011 +0100
@@ -0,0 +1,82 @@
+# -*- coding: utf-8 -*-
+
+import unittest
+
+import xmlrpclib
+from stopableServer import init_server
+from iro.anbieter.content import SMS,FAX,Mail
+
+class TestServer(unittest.TestCase):
+
+ def setUp(self):
+ self.i = init_server()
+ self.serv=self.i.serv
+ self.serv.start()
+
+ def tearDown(self):
+ self.serv.stop()
+
+
+ def SendSMS(self,msg):
+ servstr="https://test:test@localhost:8000"
+ client=xmlrpclib.Server(servstr)
+ id=client.startSMS(msg,["01234", ] )
+ self.assertEqual(client.status(id),{id: {'status': ['init',{}], 'name': unicode(msg)}} )
+ ele=self.i.queue.get(.1)
+ self.assertEqual(ele.getRecipients(),["01234", ] )
+ self.assertNotEqual(ele.getMessage(),SMS('') )
+ self.assertEqual(ele.getMessage(),SMS(msg) )
+
+ def testSimpleSMS(self):
+ self.SendSMS("test")
+
+ def testSpecialCharacters(self):
+ self.SendSMS(u"!\"§$%&/()=?\'")
+ self.SendSMS(u"@ł€ł€¶ŧł¼¼½¬¬↓ŧ←ĸ↓→øđŋħ“”µ·…–|")
+
+ def testSendFAX(self):
+ servstr="https://test:test@localhost:8000"
+ client=xmlrpclib.Server(servstr)
+ msg="2134wergsdfg4w56q34134æſðđæðſđŋ³@¼ŧæðđŋł€¶ŧ€¶ŧ"
+ id=client.startFAX("test",xmlrpclib.Binary(msg),["01234", ] )
+ self.assertEqual(client.status(id),{id: {'status': ['init',{}], 'name': 'test'}} )
+ ele=self.i.queue.get(.1)
+ self.assertEqual(ele.getRecipients(),["01234", ] )
+ self.assertEqual(ele.getMessage(),FAX('test','',[msg]))
+
+ def testDoubleFAX(self):
+ servstr="https://test:test@localhost:8000"
+ client=xmlrpclib.Server(servstr)
+ msg="2134wergsdfg4w56q34134æſðđæðſđŋ³@¼ŧæðđŋł€¶ŧ€¶ŧ"
+ pdf=open('tests/test.pdf').read()
+ id=client.startFAX("test",[xmlrpclib.Binary(msg),xmlrpclib.Binary(pdf)],["01234", ] )
+ self.assertEqual(client.status(id),{id: {'status': ['init',{}], 'name': 'test'}} )
+ ele=self.i.queue.get(.1)
+ self.assertEqual(ele.getRecipients(),["01234", ] )
+ self.assertEqual(ele.getMessage(),FAX('test','',[msg, pdf]))
+
+ def testSendMail(self):
+ servstr="https://test:test@localhost:8000"
+ client=xmlrpclib.Server(servstr)
+ msg=u"2134wergsdfg4w56q34134æſðđæðſđŋ³@¼ŧæðđŋł€¶ŧ€¶ŧ"
+ id=client.startMail("test",msg,["test@test.de", ],'absender@test.de' )
+ self.assertEqual(client.status(id),{id: {'status': ['init',{}], 'name': 'test'}} )
+ ele=self.i.queue.get(.1)
+ self.assertEqual(ele.getRecipients(),["test@test.de", ] )
+ self.assertEqual(ele.getMessage(),Mail('test',msg,'absender@test.de'))
+ self.assertEqual(ele.getMessage().as_string(),"""Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: base64
+Subject: =?utf-8?q?test?=
+
+MjEzNHdlcmdzZGZnNHc1NnEzNDEzNMOmxb/DsMSRw6bDsMW/xJHFi8KzQMK8xafDpsOwxJHFi8WC
+4oKswrbFp+KCrMK2xac=
+""")
+ sub=u"³¼½ſðđŋſ€¼½ÖÄÜß"
+ id=client.startMail(sub,msg,["test@test.de", ],'absender@test.de' )
+ self.assertEqual(client.status(id),{id: {'status': ['init',{}], 'name': sub}})
+ ele=self.i.queue.get(.1)
+ self.assertEqual(ele.getMessage(),Mail(sub, msg, 'absender@test.de'))
+
+if __name__ == "__main__":
+ unittest.main()
--- a/iro/tests/testXMLRPCServer.py Thu Nov 03 22:47:30 2011 +0100
+++ b/iro/tests/testXMLRPCServer.py Fri Nov 18 22:36:50 2011 +0100
@@ -1,115 +1,16 @@
# -*- coding: utf-8 -*-
-import unittest, ConfigParser
-
-import threading, xmlrpclib
-from multiprocessing import Queue
-from multiprocessing.managers import BaseManager
-
-from iro import xmlrpc,anbieter
-from iro.iro import MySMTP,MySmstrade,MyUserDB
-from iro.job import SMSJob, FAXJob, MailJob
-from iro.joblist import Joblist
-from iro.providerlist import Providerlist
-from iro.user import User, Admin
-
-
-class StoppableXMLRPCServer(xmlrpc.SecureUserDBXMLRPCServer, threading.Thread):
- running=False
- def __init__(self, *args, **kwargs):
- xmlrpc.SecureUserDBXMLRPCServer.__init__(self, *args, **kwargs)
- threading.Thread.__init__(self)
- self.timeout=.5
-
- def start(self):
- self.running=True
- threading.Thread.start(self)
-
-
- def run(self):
- # *serve_forever* muss in einem eigenen Thread laufen, damit man es
- # unterbrochen werden kann!
- while (self.running):
- self.handle_request()
-
- def stop(self):
- if (self.running):
- self.running=False
- self.server_close()
- self.join()
-
- def __del__(self):
- self.stop()
-
- def __enter__(self):
- self.start()
- return self
-
- def __exit__(self,type,value,traceback):
- self.stop()
-
-
+import unittest
-def init_server():
- userlist=[{"name":"test","password":"test", "class":User},
- {"name":"test2","password":"test2", "class": User},
- {"name":"admin","password":"admin", "class": Admin}]
-
-
-
- class MyManager(BaseManager):
- pass
-
- MyManager.register('SMSJob', SMSJob)
- MyManager.register('FAXob', FAXJob)
- MyManager.register('MailJob',MailJob)
- MyManager.register('Providerlist',Providerlist)
- manager = MyManager()
- manager.start()
-
-
- #anbieter erzeugen und konfigurieren
- sip=anbieter.sipgate()
- sip.read_basic_config("iro.conf")
-
- localhost=MySMTP()
- localhost.read_basic_config("iro.conf")
-
- smstrade=MySmstrade()
- smstrade.read_basic_config("iro.conf")
+import xmlrpclib
+from stopableServer import init_server
- #Benutzerdatenbank erstellen
- queue = Queue()
- provider=Providerlist()
- provider.add("sipgate", sip, ["sms", "fax", ])
- provider.add("smstrade", smstrade, ["sms", ])
- provider.add("geonet", None, ["sms", "fax", ])
- provider.add("fax.de", None, ["sms", "fax", ])
- provider.add("localhost", localhost, ["mail", ])
- provider.setDefault("sms","smstrade")
- provider.setDefault("fax","sipgate")
- provider.setDefault("mail","localhost")
- jobqueue=Joblist(manager, queue, provider)
- userdb=MyUserDB(userlist,jobqueue)
-
-
- #Server starten
- cp = ConfigParser.ConfigParser()
- cp.read(["iro.conf"])
- cert=cp.get('server', 'cert')
- key=cp.get('server', 'key')
- serv = StoppableXMLRPCServer(addr=("localhost", 8000),
- userdb=userdb,
- certificate=cert,privatekey=key,
- logRequests=False)
- serv.relam="xmlrpc"
- return serv
-
-
class TestServer(unittest.TestCase):
def setUp(self):
- self.serv = init_server()
+ self.i = init_server()
+ self.serv=self.i.serv
+
self.serv.start()
def tearDown(self):
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/iro/tests/testloglock.py Fri Nov 18 22:36:50 2011 +0100
@@ -0,0 +1,98 @@
+
+import unittest
+import os
+import tempfile
+import signal
+import threading
+import time
+
+class testLogLock(unittest.TestCase):
+ def test_ThreadingAndLocks(self):
+ #create a thread, have that thread grab a lock, and sleep.
+ fd, file = tempfile.mkstemp('.nonlog')
+ _lock = threading.RLock()
+ os.close(fd)
+ def locker():
+ os.write(fd, 'Thread acquiring lock\n')
+ _lock.acquire()
+ os.write(fd, 'Thread acquired lock\n')
+ time.sleep(0.4)
+ os.write(fd, 'Thread releasing lock\n')
+ _lock.release()
+ os.write(fd, 'Thread released lock\n')
+
+ #Then in the main thread, throw a signal to self
+ def handleSignal(sigNum, frame):
+ os.write(fd, 'Main Thread acquiring lock\n')
+ lock = False
+ endtime = time.time() + 1.0
+ while not lock:
+ lock = _lock.acquire(blocking=0)
+ time.sleep(0.01)
+ if time.time() > endtime:
+ break
+ if not lock:
+ os.write(fd, 'Main Thread could not acquire lock\n')
+ return
+ os.write(fd, 'Main Thread acquired lock\n')
+ os.write(fd, 'Main Thread releasing lock\n')
+ _lock.release()
+ os.write(fd, 'Main Thread released lock\n')
+
+ sighndlr = signal.signal(signal.SIGUSR1, handleSignal)
+ try:
+ fd = os.open(file, os.O_SYNC | os.O_WRONLY | os.O_CREAT)
+ thread = threading.Thread(target=locker)
+ thread.start()
+ time.sleep(0.1)
+ os.kill(os.getpid(), signal.SIGUSR1)
+ thread.join()
+
+ #check the results
+ os.close(fd)
+ fileconts = open(file, 'r').read()
+ self.assertTrue('Main Thread released lock' in fileconts)
+ self.assertEqual(fileconts,
+ '''Thread acquiring lock
+Thread acquired lock
+Main Thread acquiring lock
+Thread releasing lock
+Thread released lock
+Main Thread acquired lock
+Main Thread releasing lock
+Main Thread released lock
+''')
+
+ #Now try after acquiring the lock from the main thread
+ fd = os.open(file, os.O_SYNC | os.O_WRONLY | os.O_CREAT)
+ _lock.acquire()
+ thread = threading.Thread(target=locker)
+ thread.start()
+ time.sleep(0.1)
+ os.kill(os.getpid(), signal.SIGUSR1)
+ _lock.release()
+ thread.join()
+ os.close(fd)
+ fileconts = open(file, 'r').read()
+ self.assertEqual(fileconts,
+ '''Thread acquiring lock
+Main Thread acquiring lock
+Main Thread acquired lock
+Main Thread releasing lock
+Main Thread released lock
+Thread acquired lock
+Thread releasing lock
+Thread released lock
+''')
+
+ finally:
+ signal.signal(signal.SIGUSR1, sighndlr)
+ try:
+ os.close(fd)
+ except OSError:
+ pass
+ try:
+ os.unlink(file)
+ except OSError:
+ pass
+
--- a/iro/user.py Thu Nov 03 22:47:30 2011 +0100
+++ b/iro/user.py Fri Nov 18 22:36:50 2011 +0100
@@ -31,9 +31,10 @@
'''
class for a xmlrpc user
'''
- def __init__(self,jobqueue):
+ def __init__(self, name, jobqueue):
self.jobqueue=jobqueue
self.jobs={}
+ self.name=name
self.features=["mail", "sms", "fax", ]
def status(self,id=None,detailed=False):
@@ -82,7 +83,7 @@
'''
if not "sms" in self.features:
raise NotSupportedFeature("sms")
- id = self.jobqueue.newSMS(message,recipients,provider)
+ id = self.jobqueue.newSMS(message,recipients,provider,user=self)
self.jobs[id]=self.jobqueue[id]
return id
@@ -94,7 +95,12 @@
logger.debug("startFAX(%s,%s,%s,%s)"%(subject, fax, recipients, provider))
if not "fax" in self.features:
raise NotSupportedFeature("fax")
- id = self.jobqueue.newFAX(subject, fax,recipients,provider)
+
+ if type(fax) != list:
+ fax=[fax]
+ f=[i.data for i in fax]
+
+ id = self.jobqueue.newFAX(subject, f,recipients,provider,user=self)
self.jobs[id]=self.jobqueue[id]
return id
@@ -102,7 +108,7 @@
if not "mail" in self.features:
raise NotSupportedFeature("mail")
logger.debug("startMail(%s,%s,%s,%s,%s)"%(subject, body, recipients, frm, provider))
- id = self.jobqueue.newMail(subject, body, recipients, frm, provider)
+ id = self.jobqueue.newMail(subject, body, recipients, frm, provider,user=self)
self.jobs[id]=self.jobqueue[id]
return id
@@ -119,6 +125,6 @@
return self.jobqueue.providerlist.getDefault(name)["name"]
class Admin(User):
- def __init__(self,jobqueue):
- User.__init__(self, jobqueue)
+ def __init__(self, name, jobqueue):
+ User.__init__(self, name, jobqueue)
self.jobs=jobqueue.jobs
--- a/iro/worker.py Thu Nov 03 22:47:30 2011 +0100
+++ b/iro/worker.py Fri Nov 18 22:36:50 2011 +0100
@@ -11,6 +11,7 @@
self.queue=queue
def run(self):
+ logger.info('Workerprocess läuft nun...')
indifier=0
while 1:
job=self.queue.get()
--- a/iro/xmlrpc/SecureUserdbXMLRPCServer.py Thu Nov 03 22:47:30 2011 +0100
+++ b/iro/xmlrpc/SecureUserdbXMLRPCServer.py Fri Nov 18 22:36:50 2011 +0100
@@ -1,6 +1,6 @@
from SecureAuthentificateXMLRPCServer import SecureAuthentificateXMLRPCRequestHandler
from SecureXMLRPCServer import SecureXMLRPCServer
-import os, md5
+import os, hashlib
class UserDB:
'''
@@ -20,14 +20,14 @@
returns a hash out of username and the password and self.salt
user is a directory with two keys: username and password
"""
- m=md5.new()
+ m=hashlib.sha512()
m.update(user["name"])
m.update(self.salt)
m.update(user["password"])
return m.hexdigest()
def createUser(self,user):
- self.userlist[self.createHash(user)]=self.userClass(self.jobqueue)
+ self.userlist[self.createHash(user)]=self.userClass(user["name"],self.jobqueue)
def __getitem__(self,key):
return self.userlist[key]