X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_export%2Fsaisei.pm;h=98079cbc4f270fe5597e859c7e3d005cf611e02e;hb=2250a4d2812ae83e8e32cc206a6e697c3daa174f;hp=799220ef2c3f316d0124ca4b06510e9f2f2bd631;hpb=88746e7e37bb89d03b6c8a5098d25842d9f88f59;p=freeside.git diff --git a/FS/FS/part_export/saisei.pm b/FS/FS/part_export/saisei.pm index 799220ef2..98079cbc4 100644 --- a/FS/FS/part_export/saisei.pm +++ b/FS/FS/part_export/saisei.pm @@ -1,15 +1,13 @@ package FS::part_export::saisei; use strict; -use base qw( FS::part_export ); use vars qw( @ISA %info ); +use base qw( FS::part_export ); use Date::Format 'time2str'; use Cpanel::JSON::XS; -use Net::HTTPS::Any qw(https_post); use MIME::Base64; use REST::Client; use Data::Dumper; - use FS::Conf; #@ISA = qw( FS::part_export::http ); @@ -33,19 +31,12 @@ This module also provides generic methods for working through the L =cut tie my %options, 'Tie::IxHash', + 'port' => { label => 'Port', + default => 5000 }, 'username' => { label => 'User Name', default => '' }, 'password' => { label => 'Password', default => '' }, - 'host' => { label => 'Host', - default => 'STM IP ADDRESS' }, - 'port' => { label => 'Port', - default => 5000 }, - 'customer_name' => { label => 'Customer Name', - default => 'FREESIDE CUST $custnum' }, - 'account_id' => { label => 'Account ID', - default => 'SVC$svcnum' }, - 'product_id' => { label => 'Account Product ID' }, 'debug' => { type => 'checkbox', label => 'Enable debug warnings' }, ; @@ -101,22 +92,28 @@ sub _export_insert { my $username = $email[0]; my $description = $cust_main->{Hash}->{first}." ".$cust_main->{Hash}->{last}; - # check for existing user. - my $existing_user; - $existing_user = $self->api_get_user($username) unless ( $self->{'__saisei_error'} || !$username); + if (!$username) { + $self->{'__saisei_error'} = 'no username - can not export'; + warn "No email found $username\n" if $self->option('debug'); + return; + } + else { + # check for existing user. + my $existing_user; + $existing_user = $self->api_get_user($username) unless $self->{'__saisei_error'}; - # if no existing user create one. - $self->api_create_user($username, $description) unless $existing_user; + # if no existing user create one. + $self->api_create_user($username, $description) unless $existing_user; - # set user to existing one or newly created one. - my $user = $existing_user ? $existing_user : $self->api_get_user($username); + # set user to existing one or newly created one. + my $user = $existing_user ? $existing_user : $self->api_get_user($username); - ## add access point ? + ## add access point ? - ## tie host to user - $self->api_add_host_to_user($user->{collection}->[0]->{name}, $rateplan->{collection}->[0]->{name}, $svc_broadband->{Hash}->{ip_addr}) unless $self->{'__saisei_error'}; + ## tie host to user + $self->api_add_host_to_user($user->{collection}->[0]->{name}, $rateplan->{collection}->[0]->{name}, $svc_broadband->{Hash}->{ip_addr}) unless $self->{'__saisei_error'}; + } - #die('ending for testing'); return ''; } @@ -187,14 +184,18 @@ sub api_call { my $auth_info = $self->option('username') . ':' . $self->option('password'); $params ||= {}; - print "Calling /$method\n" if $self->option('debug'); + warn "Calling $method on http://" + .$self->{Hash}->{machine}.':'.$self->option('port') + ."/rest/stm/configurations/running/$path\n" if $self->option('debug'); my $data = encode_json($params) if keys %{ $params }; my $client = REST::Client->new(); $client->addHeader("Authorization", "Basic ".encode_base64($auth_info)); - $client->setHost('http://'.$self->option('host').':'.$self->option('port')); - $client->$method('/rest/stm/configurations/running/'.$path, $data, { "Content-type" => 'application/json'}); + $client->setHost('http://'.$self->{Hash}->{machine}.':'.$self->option('port')); + $client->$method('/rest/stm/configurations/running'.$path, $data, { "Content-type" => 'application/json'}); + + warn "Response Code is ".$client->responseCode()."\n" if $self->option('debug'); my $result; @@ -207,7 +208,7 @@ sub api_call { } else { $self->{'__saisei_error'} = "Bad response from server during $method: " . $client->responseContent(); - print "My response content fo /$method\n". Dumper($client->responseContent) if $self->option('debug'); + warn "Response Content is\n".$client->responseContent."\n" if $self->option('debug'); return; } @@ -236,7 +237,7 @@ Gets a list of global policies. sub api_get_policies { my $self = shift; - my $get_policies = $self->api_call("GET", 'policies/?token=1&order=name&start=0&limit=20&select=name%2Cpercent_rate%2Cassured%2C'); + my $get_policies = $self->api_call("GET", '/policies/?token=1&order=name&start=0&limit=20&select=name%2Cpercent_rate%2Cassured%2C'); return if $self->api_error; $self->{'__saisei_error'} = "Did not receive any global policies" unless $get_policies; @@ -254,7 +255,7 @@ sub api_get_rateplan { my $self = shift; my $rateplan = shift; - my $get_rateplan = $self->api_call("GET", "rate_plans/$rateplan"); + my $get_rateplan = $self->api_call("GET", "/rate_plans/$rateplan"); return if $self->api_error; $self->{'__saisei_error'} = "Did not receive any rateplan info" unless $get_rateplan; @@ -272,7 +273,7 @@ sub api_get_user { my $self = shift; my $user = shift; - my $get_user = $self->api_call("GET", "users/$user"); + my $get_user = $self->api_call("GET", "/users/$user"); return if $self->api_error; $self->{'__saisei_error'} = "Did not receive any user info" unless $get_user; @@ -290,7 +291,7 @@ sub api_get_accesspoint { my $self = shift; my $accesspoint; - my $get_accesspoint = $self->api_call("GET", "access_points/$accesspoint"); + my $get_accesspoint = $self->api_call("GET", "/access_points/$accesspoint"); return if $self->api_error; $self->{'__saisei_error'} = "Did not receive any user info" unless $get_accesspoint; @@ -309,7 +310,7 @@ sub api_create_rateplan { my $new_rateplan = $self->api_call( "PUT", - "rate_plans/$rateplan", + "/rate_plans/$rateplan", { 'downstream_rate' => $svc->{Hash}->{speed_down}, 'upstream_rate' => $svc->{Hash}->{speed_up}, @@ -337,7 +338,7 @@ sub api_modify_rateplan { if ($policy->{background}) { $rate_multiplier = ".01"; } my $modified_rateplan = $self->api_call( "PUT", - "rate_plans/$rateplan_name/partitions/$policyname", + "/rate_plans/$rateplan_name/partitions/$policyname", { 'restricted' => $policy->{assured}, # policy_assured_flag 'rate_multiplier' => $rate_multiplier, # policy_background 0.1 @@ -365,7 +366,7 @@ sub api_create_user { my $new_user = $self->api_call( "PUT", - "users/$user", + "/users/$user", { 'description' => $description, }, @@ -387,16 +388,16 @@ Creates a access point. sub api_create_accesspoint { my ($self,$accesspoint) = @_; - my $new_accesspoint = $self->api_call( - "PUT", - "access_points/$accesspoint", - { - 'description' => 'my description', - }, - ); + #my $new_accesspoint = $self->api_call( + # "PUT", + # "/access_points/$accesspoint", + # { + # 'description' => 'my description', + # }, + #); - $self->{'__saisei_error'} = "Access point not created" - unless $new_accesspoint; # should never happen + #$self->{'__saisei_error'} = "Access point not created" + # unless $new_accesspoint; # should never happen return; } @@ -412,7 +413,7 @@ sub api_add_host_to_user { my $new_host = $self->api_call( "PUT", - "hosts/$ip", + "/hosts/$ip", { 'user' => $user, 'rate_plan' => $rateplan, @@ -435,7 +436,22 @@ ties host to user and rateplan. sub api_delete_host_to_user { my ($self,$user, $rateplan, $ip) = @_; - my $delete_host = $self->api_call("DELETE", "hosts/$ip"); + my $default_rate_plan = $self->api_call("GET", '?token=1&select=default_rate_plan'); + return if $self->api_error; + $self->{'__saisei_error'} = "Did not receive a default rate plan" + unless $default_rate_plan; + + my $default_rateplan_name = $default_rate_plan->{collection}->[0]->{default_rate_plan}->{link}->{name}; + + my $delete_host = $self->api_call( + "PUT", + "/hosts/$ip", + { + 'user' => '', + 'access_point' => '', + 'rate_plan' => $default_rateplan_name, + }, + ); $self->{'__saisei_error'} = "Host not created" unless $delete_host; # should never happen