[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. |