sharee.bike/copri4/main/src/Mod/RPCshareeio.pm

107 lines
2.6 KiB
Perl

package RPCshareeio;
#
# SPDX-License-Identifier: AGPL-3.0-or-later
# Copyright (c) Rainer Gümpelein, TeilRad GmbH
#
#APIshareeio APIcall
#
#use lib "/var/www/copri-bike/shareedms-primary/src";
#
use strict;
use warnings;
use POSIX;
use CGI;
use Digest::SHA qw(hmac_sha256 hmac_sha256_base64);
use JSON;
my $json = JSON->new->allow_nonref;
use LWP::UserAgent;
use URI::Encode;
my $uri_encode = URI::Encode->new( { encode_reserved => 1 } );
use Scalar::Util qw(looks_like_number);
use Mod::DBtank;
use Mod::Basework;
use Data::Dumper;
my $q = new CGI;
my $dbt = new DBtank;
my $bw = new Basework;
sub new {
my $class = shift;
my $self = {};
bless($self,$class);
return $self;
}
#@all request with defined $shareeio_json
sub request_shareeio {
my $self = shift;
my $varenv = shift;
my $dbh = shift;
my $ctadr = shift || {};
my $shareeio_json = shift || { request => ""};
my $response_in = {};
my $now_dt = strftime "%Y-%m-%d %H:%M:%S", localtime;
open(EMA, ">> $varenv->{logdir}/RPCshareeio.log");
print EMA "\n*** $now_dt RPC $shareeio_json->{request}\n";
if($shareeio_json->{request}){
my $rest_json = encode_json(\%{ $shareeio_json });
print EMA "rest_json:\n" . Dumper($rest_json) . "\n";
my $ret_json = {};
($ret_json, my $ret_status) = $self->rpcsharee_postjson($rest_json);
eval {
$response_in = decode_json($ret_json);
print EMA "<--- success shareeio response_in: $ret_status\n" . Dumper($response_in) . "\n";
print EMA $ret_json . "\n";
};
if ($@){
print EMA "<--- failure shareeio raw response_in: $ret_status\n" . Dumper($ret_json) . "\n";
print EMA "warn:" . $@ . "\n";
$response_in->{shareeio}->{response_state} = "Failure: $ret_status";
}
}
close EMA;
return $response_in;
}
#request JSON POST to shareeio
sub rpcsharee_postjson {
my $self = shift;
my $rest_json = shift || "";
my $api_file = "/var/www/copri4/shareeconf/apikeys.cfg";
my $aconf = Config::General->new($api_file);
my %apikeyconf = $aconf->getall;
my $ua = LWP::UserAgent->new();
$ua->agent("RPCshareeio POST");
my $bytes = 100000;
$ua->max_size( $bytes );
$ua->default_header( 'SHAREE-API-KEY' => "$apikeyconf{shareeio}->{sharee_api_key}" );
#print Dumper($ua);
my $req = HTTP::Request->new(POST => "$apikeyconf{shareeio}->{endpoint}");
$req->content_type('application/json');
$req->content($rest_json);
my $res = $ua->request($req);
if ($res->is_success) {
#print $res->content;
#print $res->status_line, "\n";
return ($res->content, $res->status_line);
}else {
#print $res->status_line, "\n";
return ("", $res->status_line);
}
}
1;