Asterisk: How to authenticate users by callerid?
Refer to ian’s OP1 at voip wiki and OP2 at velocityreviews.
Here is a simple method of authenticating users, This will work for internal and external as long as the have cli. first you need to create a database family
for example:- database put auth_user 123456 1234
will create a user whose cli must be 123456 and password is 1234
Then ad something similar to you extensions.conf
;password system
exten => 567,1,Answer ; Answer the line
exten => 567,n,Noop(${CALLERIDNUM})
exten => 567,n,Background, Welcome-to-test
exten => 567,n,DBget(passkey=auth_user/${CALLERIDNUM})
exten => 567,n,Authenticate(${passkey})
exten => 567,n,SetAccount(${CALLERIDNUM})
exten => 567,n,DISA(no-password|default)
If you want to set up a calling card gateway without putting in any pin, it can be done as follows.
[auth]
exten => xxxxxxx,1,Answer
exten => xxxxxxx,2,DigitTimeout(5)
exten => xxxxxxx,3,ResponseTimeout(20)
;;exten => xxxxxxx,2,NoOp(${CALLERIDNUM})
;exten => xxxxxxx,2,Set(foo=${DB(auth_user/${CALLERIDNUM})})
;;exten => xxxxxxx,3,NoOp(${foo})
;;exten => xxxxxxx,5,NoOp($["${foo}"="1234"])
;exten => xxxxxxx,6,GotoIf(${${foo}=1234}?11)
exten => xxxxxxx,4,GotoIf($["${DB(auth_user/${CALLERIDNUM})}"="1234"]?11)
exten => xxxxxxx,5,Hangup
exten => xxxxxxx,11,Disa(no-password|default)
I didn’t install sound or voicemail on my WRT54GS+OpenWRT+Asterisk. To use authenticate, I need some sounds. I wget some gsm files to /usr/lib/asterisk/sounds. Then edit /etc/init.d/asterisk, add the following line:
[ -d /var/spool/asterisk/sounds ] || ln -s /usr/lib/asterisk/sounds /var/spool/asterisk/sounds
It will be very simple to set up the system so users can change passwords themselves from their phone as well as you to add users from yours.
Here’s an example. I didn’t test this code yet.
exten => 567,1,Answer ; Answer the line
exten => 567,2,DBget(passkey=auth_user/${CALLERIDNUM})
exten => 567,3,Authenticate(${passkey})
exten => 567,4,SetAccount(${CALLERIDNUM})
exten => 567,5,Goto(ivr,s,1) [ivr]enjoy
exten => s,1,Background(please_choose)
exten => s,2,DigitTimeout,5
exten => s,3,ResponseTimeout,15
;Option1 allows outdialing
exten => 1,1,Goto(ivr_dial,s,1)
;Option2 goes to vmail
exten => 2,1,Goto(demo,1571,1)
;Option3, change pin
exten => 3,1,Goto(change_pin,s,1)
[ivr_dial]
include => international
exten => s,1,Background(please_dial)
exten => s,2,DigitTimeout,5
exten => s,3,ResponseTimeout,15
exten => t,1,hangup
exten => i,1,Goto(s,1)
[change_pin]
exten => s,1,Background(put in new pin)
exten => _X.,1,Set(newpin1=${EXTEN})
exten => _X.,2,Background(confirm new pin)
exten => _X.,3,Set(newpin2=${EXTEN})
exten => _X.,4,Gotoif(${newpin1}=${newpin2}?7:5)
exten => _X.,5,Background(pin not confirmed)
exten => _X.,6,Goto(s,1)
exten => _X.,7,Set(DB(auth_user/key)=${EXTEN}))
exten => _X.,8,Background(pin changed)
exten => _X.,9,Goto(ivr,s,1)
Sphere: Related Content