From 8607266634356ea85c26e4dfb40e396b4295049a Mon Sep 17 00:00:00 2001 From: Daniel Berteaud Date: Fri, 13 Apr 2012 13:02:37 +0200 Subject: [PATCH] use bootstrap css, net::telnet and allow custom CID --- .../templates/etc/callback/callback.conf/All | 2 + root/usr/share/callback/cgi-bin/callback.cgi | 134 ++++++++++++++++----- smeserver-callback.spec | 10 +- 3 files changed, 112 insertions(+), 34 deletions(-) mode change 100644 => 100755 root/usr/share/callback/cgi-bin/callback.cgi diff --git a/root/etc/e-smith/templates/etc/callback/callback.conf/All b/root/etc/e-smith/templates/etc/callback/callback.conf/All index 3de9edc..a372827 100644 --- a/root/etc/e-smith/templates/etc/callback/callback.conf/All +++ b/root/etc/e-smith/templates/etc/callback/callback.conf/All @@ -2,5 +2,7 @@ $host = "{$callback{'Host'} || '127.0.0.1';}"; $port = "{$callback{'Port'} || '5038';}"; $user = "{$callback{'User'} || 'callback';}"; $secret = "{$callback{'Secret'} || 'secret';}"; +$cid = "{$callback{'CallerID'} || ''}"; +$webhost = "http://{$SystemName.'.'.$DomainName}"; 1 diff --git a/root/usr/share/callback/cgi-bin/callback.cgi b/root/usr/share/callback/cgi-bin/callback.cgi old mode 100644 new mode 100755 index a1f3407..d6684f7 --- a/root/usr/share/callback/cgi-bin/callback.cgi +++ b/root/usr/share/callback/cgi-bin/callback.cgi @@ -1,6 +1,7 @@ #!/usr/bin/perl -w use Asterisk::AMI; +use Net::Telnet; use CGI qw/:standard/; require ('/etc/callback/callback.conf'); @@ -9,47 +10,122 @@ $host ||= '127.0.0.1'; $port ||= '5038'; $user ||= 'callback'; $secret ||= 'secret'; +$cid ||= ''; +$webhost ||= ''; my $q = new CGI; print $q->header, $q->start_html(-title=>'CallBack', - ), - $q->h1('page de callback'), - $q->start_form, - "Entrez ici votre numero ",textfield('nback'),p, - "Entrez ici le numero de votre destinataire ", textfield('ndest'),p, - $q->submit, - $q->end_form, - $q->hr; + -style=>{"src"=>"$webhost/server-common/css/bootstrap.min.css"} + ), + + $q->div({ + -class=>"well", + -style=>"width: 500px; margin-top: 40px; margin-right: auto; margin-left: auto" + }), + + $q->h1('
Mise en relation téléphonique

'), + $q->start_form(-class=>"form-horizontal"), + + $q->div({-class=>"control-group"}, + "", + $q->div({-class=>"controls"}, + $q->textfield( + -name=>"nback", + -class=>"input-xlarge", + -size=>"30", + -style=>"width: 300px; height: 25px" + ), + ) + ), + $q->div({-class=>"control-group"}, + "", + $q->div({-class=>"controls"}, + $q->textfield( + -name=>"ndest", + -class=>"input-xlarge", + -size=>"30", + -style=>"width: 300px; height: 25px" + ), + ) + ), + $q->div({-class=>"control-group"}, + "", + $q->div({-class=>"controls"}, + $q->textfield( + -name=>"cid", + -class=>"input-xlarge", + -size=>"30", + -style=>"width: 300px; height: 25px" + ), + ) + ), + $q->submit( + -name=>"submit", + -class=>"btn btn-primary", + -style=>"margin-left: 200px", + -value=>"Appeler", + ), + $q->end_form; if ($q->param()) { - my $nback = $q->param('nback') || $ENV{'HTTP_USER_EXTENSION'}; - my $ndest = $q->param('ndest'); + my $nback = $q->param('nback') || $ENV{'HTTP_USER_EXTENSION'}; + my $ndest = $q->param('ndest'); + my $cid = $q->param('cid') || $cid; + + $nback =~ s/[\s\(\)\.<>]//g; + $ndest =~ s/[\s\(\)\.<>]//g; + $nback =~ s/^\+/00/g; + $ndest =~ s/^\+/00/g; + + unless (($nback =~ m/^\d+$/) && ($ndest =~ m/^\d+$/)){ + print $q->div({-class=>"alert-message error",}, + "Erreur ! Un des numeros ne semble pas valide" + ); + die 'bad number'; + } + + my $telnet = new Net::Telnet (Timeout => 5, + Errmode => "die", + Host => "$host", + Port => "$port"); + # Login + $telnet->open (); + $telnet->print ("Action: Login"); + $telnet->print ("Username: $user"); + $telnet->print ("Secret: $secret"); + $telnet->print (""); - $nback =~ s/[\s\(\)\.<>]//g; - $ndest =~ s/[\s\(\)\.<>]//g; + my ($status, $what) = $telnet->waitfor ("/Message: .*/"); - unless (($nback =~ m/^\d+$/) && ($ndest =~ m/^\d+$/)){ - print $q->h1('un des numeros ne semble pas valide, ils ne doivent contenir que des chiffres'); - die ('bad number'); - } + # Check login status + unless (($status =~ m/Success/) && ($what =~ m/Authentication/)) { + print $q->div({-class=>"alert-message error",}, + "Erreur ! Une erreur d'authentification est survenue" + ); + die 'Authentication error'; + } - my $astman = Asterisk::AMI->new(PeerAddr => "$host", - PeerPort => "$port", - Username => "$user", - Secret => "$secret" - ); + $telnet->print ("Action: Originate"); + $telnet->print ("Channel: Local/$nback\@from-internal"); + $telnet->print ("Context: from-internal"); + $telnet->print ("Exten: $ndest"); + $telnet->print ("Priority: 1"); + $telnet->print ("Callerid: $cid"); + $telnet->print (""); - die "Unable to connect to asterisk" unless ($astman); + ($status, $what) = $telnet->waitfor ("/Message: .*/"); - my $response = $astman->action({Action => 'Originate', - Channel => "Local/$nback\@from-internal", - Context => 'from-internal', - CallerID => $ndest, - Exten => $ndest, - Priority => 1}); + # Check originate command status + unless (($status =~ m/Success/) && ($what =~ m/Originate/)) { + print $q->div({-class=>"alert-message error",}, + "Erreur ! Une erreur est survenue pendant la numérotation" + ); + die 'Originate error'; + } -} + $telnet->close; +} diff --git a/smeserver-callback.spec b/smeserver-callback.spec index 87ddcc2..276312d 100644 --- a/smeserver-callback.spec +++ b/smeserver-callback.spec @@ -1,8 +1,8 @@ Summary: A small page to originate calls through an asterisk server %define name smeserver-callback Name: %{name} -%define version 0.1 -%define release 0.beta3 +%define version 0.1.0 +%define release 1 Version: %{version} Release: %{release}%{?dist} License: GPL @@ -15,15 +15,15 @@ BuildArch: noarch BuildRequires: e-smith-devtools Requires: e-smith-base -Requires: smeserver-webapps-common -Requires: perl(Asterisk::AMI) +Requires: smeserver-webapps-common >= 0.2.3 +Requires: perl(Net::Telnet) %description This package contains all the needed scripts and templates to run the callback form %changelog -* Fri Nov 18 2011 Daniel Berteaud - 0.1 +* Fri Nov 18 2011 Daniel Berteaud - 0.1.0 - Initiale release %prep