[Astpp-commit] SF.net SVN: astpp:[2256] trunk
Brought to you by:
darrenkw
|
From: <dar...@us...> - 2009-09-22 04:11:20
|
Revision: 2256
http://astpp.svn.sourceforge.net/astpp/?rev=2256&view=rev
Author: darrenkw
Date: 2009-09-22 04:11:06 +0000 (Tue, 22 Sep 2009)
Log Message:
-----------
I finished the Freeswitch SIP device editing/deleting/adding interface allowing easy access to work with SIP devices in FreeSwitch from the GUI.
Modified Paths:
--------------
trunk/modules/ASTPP/lib/ASTPP.pm
trunk/templates/freeswitch-sip-list.tpl
trunk/web_interface/astpp-admin.cgi
Modified: trunk/modules/ASTPP/lib/ASTPP.pm
===================================================================
--- trunk/modules/ASTPP/lib/ASTPP.pm 2009-09-20 03:31:28 UTC (rev 2255)
+++ trunk/modules/ASTPP/lib/ASTPP.pm 2009-09-22 04:11:06 UTC (rev 2256)
@@ -233,6 +233,194 @@
return $arg{xml};
}
+sub fs_add_sip_user
+# Add a SIP user
+# Arguments
+# sip_ext_prepend = $config->{sip_ext_prepend}
+# accountcode
+# context = $config->{freeswitch_context}
+# vm_password = Password
+# password = Password
+#
+{
+ my ($self, %arg) = @_;
+ # Find uniqueid to prepend to the login
+ my $sipid = 0;
+ if (!$arg{username} || $arg{username} eq "") {
+ $arg{username} = $arg{accountcode};
+ for ( ; ; ) {
+ my $count = 1;
+ $sipid =
+ int( rand() * 9000 + 1000 )
+ . int( rand() * 9000 + 1000 )
+ . int( rand() * 9000 + 1000 )
+ . int( rand() * 9000 + 1000 )
+ . int( rand() * 9000 + 1000 )
+ . int( rand() * 9000 + 1000 )
+ . int( rand() * 9000 + 1000 )
+ . int( rand() * 9000 + 1000 );
+ $sipid = $arg{sip_ext_prepend} . $sipid;
+ $sipid = substr( $sipid, 0, 5 );
+ $sipid = $arg{username} . $sipid;
+ my $sql =
+ $self->{_freeswitch_db}->prepare(
+ "SELECT COUNT(*) FROM directory WHERE username = "
+ . $self->{_freeswitch_db}->quote($sipid) );
+ $sql->execute;
+ my $record = $sql->fetchrow_hashref;
+ $sql->finish;
+ if ( $record->{"COUNT(*)"} == 0 ) {
+ last;
+ }
+ }
+ } else {
+ $arg{username} =~ s/\W//mg;
+ $sipid = $arg{username}
+ }
+
+ my $tmp =
+ "INSERT INTO directory (username,domain) VALUES ("
+ . $self->{_freeswitch_db}->quote($sipid) . ", "
+ . $self->{_freeswitch_db}->quote($arg{freeswitch_domain}). ")";
+ print STDERR $tmp . "\n";
+ my $sql = $self->{_freeswitch_db}->prepare($tmp);
+ if ( !$sql->execute ) {
+ print "$tmp failed";
+ return (1,"SIP Device Creation Failed!");
+ }
+ else {
+ my $directory_id = $sql->{'mysql_insertid'};
+ my $tmp = "INSERT INTO directory_vars (directory_id,var_name,var_value) VALUES ("
+ . $self->{_freeswitch_db}->quote($directory_id) . ","
+ . "'accountcode',"
+ . $self->{_freeswitch_db}->quote($arg{accountcode})
+ . "),("
+ . $self->{_freeswitch_db}->quote($directory_id) . ","
+ . "'user_context',"
+ . $self->{_freeswitch_db}->quote($arg{freeswitch_context}) . ")";
+ print STDERR $tmp . "\n";
+ $self->{_freeswitch_db}->do($tmp);
+
+ $tmp = "INSERT INTO directory_params (directory_id,param_name,param_value) VALUES ("
+ . $self->{_freeswitch_db}->quote($directory_id) . ","
+ . "'vm-password',"
+ . $self->{_freeswitch_db}->quote($arg{vm_password})
+ . "),("
+ . $self->{_freeswitch_db}->quote($directory_id) . ","
+ . "'password',"
+ . $self->{_freeswitch_db}->quote($arg{password}) . ")";
+ print STDERR $tmp . "\n";
+ $self->{_freeswitch_db}->do($tmp);
+
+ return (0, "SIP Device Added!" . "Username:" . " " . $sipid . " " . "Password:" . " " . $arg{password}, $sipid);
+ }
+}
+
+
+sub fs_save_sip_user
+{
+ my ($self, %arg) = @_;
+ my $tmp = "UPDATE directory SET username = "
+ . $self->{_freeswitch_db}->quote($arg{username})
+ . " WHERE id = "
+ . $self->{_freeswitch_db}->quote($arg{directory_id});
+ print STDERR $tmp . "\n";
+ $self->{_freeswitch_db}->do($tmp);
+
+ $tmp = "UPDATE directory_vars SET var_value = "
+ . $self->{_freeswitch_db}->quote($arg{accountcode})
+ . " WHERE var_name = 'accountcode'"
+ . " AND directory_id = "
+ . $self->{_freeswitch_db}->quote($arg{directory_id});
+ print STDERR $tmp . "\n";
+ $self->{_freeswitch_db}->do($tmp);
+
+ $tmp = "UPDATE directory_vars SET var_value = "
+ . $self->{_freeswitch_db}->quote($arg{freeswitch_context})
+ . " WHERE var_name = 'user_context'"
+ . " AND directory_id = "
+ . $self->{_freeswitch_db}->quote($arg{directory_id});
+ print STDERR $tmp . "\n";
+ $self->{_freeswitch_db}->do($tmp);
+
+ $tmp = "UPDATE directory_params SET param_value = "
+ . $self->{_freeswitch_db}->quote($arg{vm_password})
+ . " WHERE param_name = 'vm-password'"
+ . " AND directory_id = "
+ . $self->{_freeswitch_db}->quote($arg{directory_id});
+ print STDERR $tmp . "\n";
+ $self->{_freeswitch_db}->do($tmp);
+
+ $tmp = "UPDATE directory_params SET param_value = "
+ . $self->{_freeswitch_db}->quote($arg{password})
+ . " WHERE param_name = 'password'"
+ . " AND directory_id = "
+ . $self->{_freeswitch_db}->quote($arg{directory_id});
+ print STDERR $tmp . "\n";
+ $self->{_freeswitch_db}->do($tmp);
+
+ return (0, "SIP Device Saved!" . "Username:" . " " . $arg{username} . " " . "Password:" . " " . $arg{password}, $arg{username});
+}
+
+sub fs_retrieve_sip_user
+# Retrieve a SIP user
+# Parameters
+# directory_id = directory_id of sip user you are looking for.
+{
+ my ($self, %arg) = @_;
+ my ($tmp,$record,$sql,$deviceinfo);
+ $tmp = "SELECT username FROM directory WHERE id = "
+ . $self->{_freeswitch_db}->quote($arg{directory_id});
+ print STDERR $tmp . "\n";
+ $sql = $self->{_freeswitch_db}->prepare($tmp);
+ $sql->execute;
+ $record = $sql->fetchrow_hashref;
+ $sql->finish;
+ $deviceinfo->{username} = $record->{username};
+
+ $tmp = "SELECT var_value FROM directory_vars WHERE directory_id = "
+ . $self->{_freeswitch_db}->quote($arg{directory_id})
+ . " AND var_name = 'user_context'";
+ print STDERR $tmp . "\n";
+ $sql = $self->{_freeswitch_db}->prepare($tmp);
+ $sql->execute;
+ $record = $sql->fetchrow_hashref;
+ $sql->finish;
+ $deviceinfo->{context} = $record->{var_value};
+
+ $tmp = "SELECT param_value FROM directory_params WHERE directory_id = "
+ . $self->{_freeswitch_db}->quote($arg{directory_id})
+ . " AND param_name = 'password' LIMIT 1";
+ print STDERR $tmp . "\n";
+ $sql = $self->{_freeswitch_db}->prepare($tmp);
+ $sql->execute;
+ $record = $sql->fetchrow_hashref;
+ $sql->finish;
+ $deviceinfo->{password} = $record->{param_value};
+
+ $tmp = "SELECT param_value FROM directory_params WHERE directory_id = "
+ . $self->{_freeswitch_db}->quote($arg{directory_id})
+ . " AND param_name = 'vm-password' LIMIT 1";
+ print STDERR $tmp . "\n";
+ $sql = $self->{_freeswitch_db}->prepare($tmp);
+ $sql->execute;
+ $record = $sql->fetchrow_hashref;
+ $sql->finish;
+ $deviceinfo->{vm_password} = $record->{param_value};
+
+ $tmp = "SELECT var_value FROM directory_vars WHERE directory_id = "
+ . $self->{_freeswitch_db}->quote($arg{directory_id})
+ . " AND var_name = 'accountcode' LIMIT 1";
+ print STDERR $tmp . "\n";
+ $sql = $self->{_freeswitch_db}->prepare($tmp);
+ $sql->execute;
+ $record = $sql->fetchrow_hashref;
+ $sql->finish;
+ $deviceinfo->{accountcode} = $record->{var_value};
+ return $deviceinfo;
+}
+
+
sub fs_delete_sip_user
#Delete the SIP user
#id = directory.id to delete
Modified: trunk/templates/freeswitch-sip-list.tpl
===================================================================
--- trunk/templates/freeswitch-sip-list.tpl 2009-09-20 03:31:28 UTC (rev 2255)
+++ trunk/templates/freeswitch-sip-list.tpl 2009-09-22 04:11:06 UTC (rev 2256)
@@ -2,14 +2,32 @@
<table>
<tr>
<input type="hidden" name="mode" value="Freeswitch(TM) SIP Devices"/>
- <td colspan=7 align=center><TMPL_VAR NAME="status"></td>
+ <td colspan=8 align=center><TMPL_VAR NAME="status"></td>
</tr>
- <tr class="header">
- <td colspan=7><TMPL_VAR NAME="account_types"></td>
+ <tr align="center" class="header">
+ <td colspan=8>Add / Edit Device</td>
</tr>
<tr class="header">
- <td colspan=7><input type="submit" name="action" value="Add..." /> <input type="submit" name="Refresh" value="Refresh" /></td>
+ <td>Directory ID</td>
+ <td>Username</td>
+ <td>Password</td>
+ <td>Accountcode</td>
+ <td>VM Password</td>
+ <td>Context</td>
+ <td colspan=2>Action</td>
</tr>
+ <tr>
+ <td><TMPL_VAR NAME="directory_id"><input type="hidden" name="directory_id" value="<TMPL_VAR NAME="directory_id">"></td>
+ <TD><input name="fs_username" size="20" type="text" value="<TMPL_VAR NAME="fs_username">"></a></TD>
+ <TD><input name="fs_password" size="20" type="text" value="<TMPL_VAR NAME="fs_password">"></a></TD>
+ <TD><input name="accountcode" size="20" type="text" value="<TMPL_VAR NAME="accountcode">"></a></TD>
+ <TD><input name="vm_password" size="20" type="text" value="<TMPL_VAR NAME="vm_password">"></a></TD>
+ <TD><input name="context" size="20" type="text" value="<TMPL_VAR NAME="context">"></a></TD>
+ <td colspan=2><input type="submit" name="action" value="Save..." /></td>
+ </tr>
+ <tr align="Center" class="header">
+ <td colspan=8>Current Devices</td>
+ </tr>
<tr class="header">
<td>Directory ID</td>
<td>Username</td>
@@ -17,15 +35,15 @@
<td>Accountcode</td>
<td>VM Password</td>
<td>Context</td>
- <td>Action</td>
+ <td colspan=2>Action</td>
</tr>
<TMPL_LOOP NAME="device_list">
<TR>
<TD><TMPL_VAR NAME="directory_id"></td>
- <TD><TMPL_VAR NAME="username"></a></TD>
- <TD><TMPL_VAR NAME="password"></TD>
+ <TD><TMPL_VAR NAME="fs_username"></a></TD>
+ <TD><TMPL_VAR NAME="fs_password"></TD>
<TD><TMPL_VAR NAME="accountcode"></TD>
- <TD><TMPL_VAR NAME="vmpassword"></TD>
+ <TD><TMPL_VAR NAME="vm_password"></TD>
<TD><TMPL_VAR NAME="context"></TD>
<TD><a href="astpp-admin.cgi?mode=Freeswitch(TM) SIP Devices&directory_id=<TMPL_VAR NAME="directory_id">&action=Delete...">Delete...</a></TD>
<TD><a href="astpp-admin.cgi?mode=Freeswitch(TM) SIP Devices&directory_id=<TMPL_VAR NAME="directory_id">&action=Edit...">Edit...</a></TD>
Modified: trunk/web_interface/astpp-admin.cgi
===================================================================
--- trunk/web_interface/astpp-admin.cgi 2009-09-20 03:31:28 UTC (rev 2255)
+++ trunk/web_interface/astpp-admin.cgi 2009-09-22 04:11:06 UTC (rev 2256)
@@ -2066,8 +2066,9 @@
);
foreach my $record (@sip_devices) {
print STDERR $record->{username};
- my $deviceinfo =
- &get_sip_account_freeswitch( $fs_db, $config, $record->{id} );
+ my $deviceinfo = $ASTPP->fs_retrieve_sip_user(
+ directory_id => $record->{id}
+ );
my %row;
$row{tech} = "SIP";
$row{type} = "user@" . $record->{domain};
@@ -2441,7 +2442,7 @@
}
}
if ( $config->{openser} == 1 ) {
- $status .= $status .=
+ $status .=
&add_sip_user_openser( $openser_db, $config, $name,
$params->{accountpassword},
$params->{context}, $params->{number}, $params );
@@ -2454,13 +2455,15 @@
}
}
if ( $config->{users_dids_freeswitch} == 1 ) {
- my $name =
- &finduniquesip_freeswitch( $fs_db, $config,
- $params->{number} );
- $status .=
- &add_sip_user_freeswitch( $fs_db, $config, $name,
- $params->{accountpassword},
- $params->{number}, $params, $accountinfo->{cc} );
+ my $failure;
+ ($failure, $status, $name) .= $ASTPP->fs_add_sip_user(
+ accountcode => $params->{number},
+ freeswitch_domain => $config->{freeswitch_domain},
+ freeswitch_context => $config->{freeswitch_context},
+ vm_password => $params->{accountpassword},
+ password => $params->{accountpassword},
+ sip-ext-prepend => $config->{sip_ext_prepend},
+ );
$status .= "<br>";
if ( $config->{email} == 1 && $params->{accounttype} == 0 ) {
$params->{extension} = $name;
@@ -9614,7 +9617,8 @@
$ASTPP->set_cdr_db($cdr_db);
}
-############### Freeswitch SIP Device handling ##############################
+############### Freeswitch SIP Device handling #########################
+
sub build_freeswitch_sip_devices() {
return gettext("Database is NOT configured!") . "\n" unless $astpp_db;
my ( @device_list, @sip_devices );
@@ -9629,18 +9633,59 @@
. $params->{directory_id} . " "
. gettext("Removed Successfully!");
}
+ elsif ( $params->{action} eq "Save..." ) {
+ my $failure;
+ $ASTPP->debug( user => $param->{username}, debug => "Directory ID: " . $params->{directory_id});
+ if (!$params->{directory_id} || $params->{directory_id} == 0 || $params->{directory_id} eq "") {
+ $ASTPP->debug( user => $param->{username}, debug => "Adding User");
+ $params->{domain} = $config->{freeswitch_domain} if !$params->{domain};
+ $params->{context} = $config->{freeswitch_context} if !$params->{context};
+ ($failure, $status, $name) .= $ASTPP->fs_add_sip_user(
+ username => $params->{fs_username},
+ accountcode => $params->{accountcode},
+ freeswitch_domain => $params->{domain},
+ freeswitch_context => $params->{context},
+ vm_password => $params->{vm_password},
+ password => $params->{fs_password},
+ sip_ext_prepend => $config->{sip_ext_prepend},
+ );
+ } else {
+ $ASTPP->debug( user => $param->{username}, debug => "Saving User");
+ $ASTPP->fs_save_sip_user( directory_id => $params->{directory_id},
+ username => $params->{fs_username},
+ accountcode => $params->{accountcode},
+ freeswitch_domain => $params->{domain},
+ freeswitch_context => $params->{context},
+ vm_password => $params->{vm_password},
+ password => $params->{fs_password},
+ );
+ }
+ $status .= "<br>";
+ }
+ elsif ( $params->{action} eq "Edit..." ) {
+ my $deviceinfo = $ASTPP->fs_retrieve_sip_user(
+ directory_id => $params->{directory_id}
+ );
+ $template->param( directory_id => $params->{directory_id} );
+ $template->param( accountcode => $deviceinfo->{accountcode} );
+ $template->param( context => $deviceinfo->{context} );
+ $template->param( fs_password => $deviceinfo->{password} );
+ $template->param( vm_password => $deviceinfo->{vm_password} );
+ $template->param( fs_username => $deviceinfo->{username} );
+ }
@sip_devices = $ASTPP->fs_list_sip_usernames();
foreach my $record (@sip_devices) {
- my $deviceinfo =
- &get_sip_account_freeswitch( $fs_db, $config, $record->{id} );
+ my $deviceinfo = $ASTPP->fs_retrieve_sip_user(
+ directory_id => $record->{id}
+ );
my %row;
$row{directory_id} = $record->{id};
$row{tech} = "SIP";
$row{type} = "user@" . $record->{domain};
- $row{username} = $record->{username};
- $row{password} = $deviceinfo->{password};
- $row{vmpassword} = $deviceinfo->{vmpassword};
+ $row{fs_username} = $record->{username};
+ $row{fs_password} = $deviceinfo->{password};
+ $row{vm_password} = $deviceinfo->{vm_password};
$row{context} = $deviceinfo->{context};
$row{accountcode} = $deviceinfo->{accountcode};
push( @device_list, \%row );
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|