📄 provactions.pm
字号:
$retval = 1; } else { $output .= "Failed to create user \"$$params{user}\": $!"; $output .= "<br>voice mailbox creation failed<p>"; $output .= "vm reason: $vm_errmsg"; $retval = undef; } } else { $output .= "Failed to create user \"$$params{user}\": $!"; $output .= "<br>user creation failed<P>"; $output .= "reason: $user_errmsg"; $retval = undef; } } else { # invalid user if($$params{user} ne "7000") { $output = "Failed: Users may have 4-16 digit user IDs only<p>"; $retval = undef; } else { $output = "Failed: User 7000 is reserved for voice mail<p>"; $retval = undef; } } return wantarray ? ($retval, $output) : $retval;}sub create_new_user { my ($retval, $text) = &i_create_user(@_); return $text;}sub validate_input { my($params) = @_; # validate input here, return 1 if ok. if( # validate the user &validate_user($$params{user}) && # validate that passwords can only contain "reasonable" characters $$params{passwd} =~ /^([0-9A-Za-z\!\@\#\$\%\^\&\*\(\)\[\]\{\}\|\\\,\.\<\>\/\?]*)$/ ) { return 1; } else { return 0; }}sub print_input { my($params) = @_; my($output, $tmp); foreach $tmp (sort keys %$params) { $output .= $tmp . " : " . $$params{$tmp} . "<p>"; } print $output;}sub get_original_params { my($params) = @_; my($original_params) = {}; my($key); foreach $key (sort keys %$params) { my($trimmed_key) = $key; if($trimmed_key =~ s/^original_//) { # remove from params, put in original_params $$original_params{$trimmed_key} = $$params{$key};# undef($$params{$key}); } } return $original_params;}sub params_changed { my($params) = @_; my($key); my($original_params) = &get_original_params($params); my(@changed_params); foreach $key (@user_parameter_list) { if($$params{$key->{name}} ne $$original_params{$key->{name}}) { &psdebug($key->{name} . " has been changed"); push(@changed_params, $key->{name}); } } return @changed_params;}# returns:# -1 on error, # 0 if ok, # 1 if unchangedsub update_one_user_entry { my($params) = @_; my(@changed_params) = ¶ms_changed($params); if(&validate_input($params)) { my($new_user_xml); my($data) = &get_data($pserver_hostname, "Accounts", $$params{user}); if($data) { &psdebug("got data"); $new_user_xml = &modify_user_xml($params, \@changed_params, $data); &psdebug("output", $new_user_xml); } else { &psdebug("from scratch"); $new_user_xml = &create_user_xml($params); } my($new_called_xml) = &create_contact_called_from_user($new_user_xml); my($new_calling_xml) = &create_contact_calling_from_user($new_user_xml); my($new_fna_xml) = &create_fna_feature_xml($params); my($ret, $err) = &put_data_one_user($$params{user}, $new_user_xml, $new_called_xml, $new_calling_xml, $new_fna_xml); return ($ret, $err); } else { return (undef, "invalid parameters"); }}# returns -1 on error or 0 if oksub update_one_user { my($params, $fh) = @_; my($output); if(¶ms_changed($params)) { my($r, $r_err) = &update_one_user_entry($params); my($r2, $r2_err) = &update_vm_box($params, $fh); if($r && $r2) { $output = "Saved user \"$$params{user}\" successfully"; } else { $output .= "Failed to save user \"$$params{user}\" successfully"; $output .= "\n<p>\n"; if(!$r) { $output .= $r_err; } if(!$r2) { $output .= $r2_err; } } } else { $output = "No data changed."; } return $output;}sub get_gw_data { my($data) = &get_data($pserver_hostname, "Marshals", "${local_ip}:5065"); my($param) = {}; if($data =~ /gateway host=\"((\w|\d|[\.\-])*)\" port=\"([0-9]*)\"/) { $$param{gw_location} = "$1:$3"; } return $param;}sub update_gw { my($params) = @_; my($output); my($retcode) = 0; my($reason); # validate here if($$params{gw_location} =~ /^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}.[0-9]{1,3}(:[0-9]{1,5})?$/) { $retcode = 0; } else { $retcode = "Illegal gateway location (must be in the form host:port, where host is an IP address)"; } if(!$retcode) { my($gw_xml) = &create_gw_marshal_xml($params); $retcode = &put_data($pserver_hostname, "Marshals", "${local_ip}:5065", $gw_xml); if($retcode) { $retcode = "Unable to write data to provisioning server"; } } if(!$retcode) { $output = "Wrote new gateway successfully"; } else { $output = "Failed to write new gateway successfully.<p>Reason: $retcode"; } return $output;}sub update_vm_box { my($params, $fh) = @_; my($greeting) = "greeting.wav"; my($vm, $errmsg); if(!$$params{enable_vm}) { # nothing to do if there's no VM enabled# print "no vm enabled\n"; return 1, "did nothing"; } if(!-d "$vmhome_dir/$$params{user}") { ($vm, $errmsg) = &create_vm_box($params); if(!$vm) { $output .= "Failed to add voicemail box for user \"$$params{user}\": $!"; $output .= "<br>voice mailbox creation failed<p>"; $output .= "vm reason: $errmsg"; return undef, $output; } } if($$params{use_custom}) { # use a custom greeting $greeting = "custom.wav"; } # modify the config file with the appropriate bits open(CONFIG, ">$vmhome_dir/$$params{user}/config") || return undef, "could not write file: $!"; print CONFIG "Name string User\n"; print CONFIG "SendTo string $$params{voicemail_addr}\n"; print CONFIG "Greeting string $greeting\n"; close(CONFIG) || return undef, "could not write file: $!"; # if the wav file has been uploaded, upload it. if($fh) { # print "I received an uploaded_greeting!\n"; open(CUSTOM, ">$vmhome_dir/$$params{user}/custom.wav") || return undef, "could not write file: $!"; while(<$fh>) { print CUSTOM; } close(CUSTOM) || return undef, "could not write file: $!"; } return 1, "successfully created voice mailbox";}# returns -1 on error or 0 if oksub create_vm_box { my($params) = @_; # test to make sure that I can write in vmhome if(!-w $vmhome_dir) { return undef, "cannot write directory $vmhome_dir"; } my ($ret) = mkdir "$vmhome_dir/$$params{user}", 0757; if(!$ret) { return undef, "could not make directory $vmhome_dir/$$params{user}: $!"; } return 1, "created vm box successfully";}sub delete_vm_box { my($user) = @_; if($user !~ /\.\./ && $user !~ /\//) { my($userdir) = "$vmhome_dir/$user"; my($x); # allow deletions if things don't have 2 . in them # simultaneously or a / opendir(DIR, $userdir) || return undef, "could not read $userdir: $!"; @files = grep(!/^\.\.?$/, readdir(DIR)); closedir(DIR); foreach $x (@files) { $x = "$userdir/$x";# print "deleting $x...<br>\n"; unlink $x || return undef, "could not remove $userdir/$x: $!"; }# unlink @files || return -1; rmdir $userdir || return undef, "could not remove userdir: $!"; } return true, "delete succeeded";}sub i_delete_user { my($params) = @_; my($output); my($retval) = undef; if(!defined(&delete_user($pserver_hostname, $$params{user}))) { # an error $retval = undef; $output = "Failed to delete user \"$$params{user}\" successfully:<br>"; $output .= "could not delete user XML data"; } else { my ($vm_r, $vm_err) = &delete_vm_box($$params{user}) || $retcode; if(!defined($vm_r)) { $output = "Failed to delete user \"$$params{user}\" successfully:<br>"; $output .= "could not delete voicemail box"; $retval = undef; } else { $output = "Deleted user \"$$params{user}\" successfully"; $retval = 1; } } return wantarray ? ($retval, $output) : $retval;}sub delete_one_user { my($retval, $output) = &i_delete_user(@_); return $output;}sub set_vm_dialplan { my($output); my($retcode) = &put_data($pserver_hostname, "SystemConfiguration", "defaultPhonePlan", &create_digitalplan_xml()); $retcode = &put_data($pserver_hostname, "SystemConfiguration", "defaultIpPlan", &create_ipplan_xml()) || $retcode; if(!$retcode) { $output = "Created VM dialplan successfully"; } else { $output = "Failed to create VM dialplan successfully: $!"; } return $output;}return 1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -