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('
'),
+ $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