mirror of
https://gitlab.com/t6353/sharee.bike.git
synced 2024-09-27 17:46:28 +02:00
107 lines
2.6 KiB
Perl
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;
|