pin is authenticated against XMLRPC authentication server.

example server in test/authserver.py



git-svn-id: http://svn.berlios.de/svnroot/repos/sems/trunk@190 8eb893ce-cfd4-0310-b710-fb5ebe64c474
sayer/1.4-spce2.6
Stefan Sayer 19 years ago
parent 14489dd125
commit 59d6177207

@ -1,3 +1,6 @@
welcome_msg=/usr/lib/sems/audio/pincollect/welcome.wav
pin_msg=/usr/lib/sems/audio/pincollect/enter_pin.wav
fail_msg=/usr/lib/sems/audio/pincollect/fail.wav
auth_fail_msg=/usr/lib/sems/audio/pincollect/notcorrect.wav
auth_xmlrpc_url = http://127.0.0.1:9090/

@ -1,38 +1,32 @@
from log import *
from ivr import *
import xmlrpclib
#states
collect = 0
connect = 1
connect_failed = 2
HINT_TIMER = 1
HINT_TIMEOUT = 10 # seconds until hint msg is played
CONF_TIMER = 2
# def loopedTTS(str):
# af = IvrAudioFile.tts(str)
# af.loop = True
# return af
class IvrDialog(IvrDialogBase):
# messages to be played to the caller
welcome_msg = None
auth_ok_msg = None
auth_fail_msg = None
pin_msg = None
auth_fail_msg = None
fail_msg = None
transfer_cseq = None
dlg_remote_uri = None
# initial state
state = collect
# entered keys
keys = ''
conf_to = ''
conf_uri = ''
conf_duration = 0
conf_participants = 0
# cseq of transfer request
transfer_cseq = None
# remote_uri of dialog
dlg_remote_uri = None
def sessionInfo(self):
debug("IVR Session info:")
@ -75,13 +69,27 @@ class IvrDialog(IvrDialogBase):
debug("added key, PIN = " + self.keys)
self.setTimer(HINT_TIMER, HINT_TIMEOUT)
elif key == 10:
self.state = connect
self.removeTimer(HINT_TIMER)
self.dlg_remote_uri = self.dialog.remote_uri
debug("saved remote_uri "+ self.dlg_remote_uri)
self.transfer_cseq = self.dialog.cseq
self.redirect("sip:" + self.dialog.user + "@" + \
self.dialog.domain)
c = xmlrpclib.ServerProxy(config['auth_xmlrpc_url'])
erg = c.authorize(self.dialog.user, self.keys)
debug('result of authentication: '+ str(erg))
if erg == 'OK':
self.state = connect
self.removeTimer(HINT_TIMER)
self.dlg_remote_uri = self.dialog.remote_uri
debug("saved remote_uri "+ self.dlg_remote_uri)
self.transfer_cseq = self.dialog.cseq
self.redirect("sip:" + self.dialog.user + "@" + \
self.dialog.domain)
else:
self.flush()
self.keys = ''
if self.auth_fail_msg == None:
self.auth_fail_msg = IvrAudioFile()
self.auth_fail_msg.open(config['auth_fail_msg'],AUDIO_READ)
self.enqueue(self.auth_fail_msg,None)
def onEmptyQueue(self):
if self.state == collect:

@ -0,0 +1,24 @@
import SimpleXMLRPCServer
#The server object
class AuthServer:
def __init__(self):
self.keys = {}
def authorize(self, room, pin):
if self.keys.has_key(room):
if self.keys[room] == pin:
return 'OK'
else:
return 'FAIL'
else:
self.keys[room] = pin
return 'OK'
authsrv = AuthServer()
server = SimpleXMLRPCServer.SimpleXMLRPCServer(("127.0.0.1", 9090))
server.register_instance(authsrv)
#Go into the main listener loop
print "Listening on port 9090"
server.serve_forever()
Loading…
Cancel
Save