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

Leave a Reply