App-ActivityPubClient
view release on metacpan or search on metacpan
1234567891011121314.perltidyrc
lib/App/ActivityPubClient.pm
Makefile.PL
MANIFEST This list of files
MANIFEST.SKIP
script/ap-backup
script/ap-fetch
script/ap-represent
script/webfinger
t/pleroma.t
t/pleroma_user.json
t/pleroma_user.out
META.yml Module YAML meta-data (added by MakeMaker)
META.json Module JSON meta-data (added by MakeMaker)
Makefile.PL view on Meta::CPAN
6789101112131415161718192021222324252627282930use
warnings;
use
ExtUtils::MakeMaker;
WriteMakefile(
NAME
=>
'App::ActivityPubClient'
,
ABSTRACT
=>
'CLI-based client / toolbox for ActivityPub Client-to-Server'
,
AUTHOR
=>
'Haelwenn (lanodan) Monnier <contact+ap-client@hacktivis.me>'
,
LICENSE
=>
'bsd'
,
VERSION
=>
'v0.1.4'
,
EXE_FILES
=>
[
'script/ap-fetch'
,
'script/ap-represent'
,
'script/ap-backup'
],
MAN1PODS
=> {
'script/ap-fetch'
=>
'blib/man1/ap-fetch.1'
,
'script/ap-represent'
=>
'blib/man1/ap-represent.1'
,
'script/ap-backup'
=>
'blib/man1/ap-backup.1'
,
},
PREREQ_PM
=> {
'Exporter'
=> 0,
'Getopt::Std'
=> 0,
'HTTP::Request::Common'
=> 0,
'JSON'
=> 0,
'LWP::UserAgent'
=> 0,
'MIME::Base64'
=> 0,
'Scalar::Util'
=> 0,
},
script/ap-backup view on Meta::CPAN
89101112131415161718192021222324252627282930313233343536our
$VERSION
=
'v0.1.4'
;
use
Getopt::Std;
$Getopt::Std::STANDARD_HELP_VERSION
= 1;
use
LWP::UserAgent;
use
MIME::Base64;
use
JSON;
=head1 NAME
ap-backup - Backup an ActivityPub account
=head1 SYNOPSIS
B<ap-backup.pl> <-u user:password|-o OAuth-Bearer-Token> <url>
=head1 DESCRIPTION
ap-backup is used to backup an ActivityPub account, authentication is required.
=over 4
=item B<-u>
HTTP Basic Auth
=item B<-o>
OAuth2 Bearer Token
script/ap-backup view on Meta::CPAN
727374757677787980818283848586878889909192
}
#print "Saving ", $item->{"id"}, " to ", $filename, "\n";
open
(
my
$fh
,
'>'
,
$filename
) or
die
"couldn't open"
,
$filename
;
$fh
encode_json(
$item
);
close
$fh
;
}
}
sub
apc2s_backup {
my
(
$url
) =
@_
;
my
$req
= HTTP::Request->new(
GET
=>
$url
);
$req
->header(
'Accept'
=>
'application/activity+json'
);
$req
->header(
'Authorization'
=>
$auth
);
my
$res
=
$ua
->request(
$req
);
if
(
$res
->is_success) {
"Got $url\n"
;
script/ap-backup view on Meta::CPAN
949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
my
$content_match
= /application\/([^+]*+)?json(; .*)?/;
if
(
$content_type
=~
$content_match
) {
my
$response
= decode_json(
$res
->content);
if
(
$response
->{
"type"
} eq
"OrderedCollection"
) {
if
(not
$response
->{
"first"
}) {
die
"“first†property of OrderedCollection undefined"
;
}
"Fetching first property: "
,
$response
->{
"first"
},
"\n"
;
apc2s_backup(
$response
->{
"first"
});
}
elsif
(
$response
->{
"type"
} eq
"OrderedCollectionPage"
) {
if
(
$response
->{
"orderedItems"
}) {
save_collection(
$response
->{
"orderedItems"
});
"next: "
,
$response
->{
"next"
},
"\n"
if
$response
->{
"next"
};
"prev: "
,
$response
->{
"prev"
},
"\n"
if
$response
->{
"prev"
};
if
(
$response
->{
"next"
}) {
"Fetching next property\n"
;
apc2s_backup(
$response
->{
"next"
});
}
else
{
"No “next†property defined, done?\n"
;
}
}
else
{
die
"OrderedCollectionPage without “orderedItems†defined is unsupported"
;
}
}
elsif
(
$response
->{
"type"
} eq
"Person"
) {
if
(
$response
->{
"outbox"
}) {
"Fetching outbox property: "
,
$response
->{
"outbox"
},
"\n"
;
apc2s_backup(
$response
->{
"outbox"
});
}
else
{
die
"Person actor with no outbox"
;
}
}
else
{
die
"Unknown type: "
,
$response
->{
"type"
};
}
}
else
{
die
"Got "
,
$content_type
,
" instead of "
,
$content_match
;
}
}
else
{
die
"Got "
,
$res
->status_line,
" instead of 2xx"
;
}
}
getopts(
"u:o:"
, \
%options
);
if
(
$#ARGV
!= 0) {
"usage: ap-backup.pl <-u user:password|-o OAuth-Bearer-Token> <url>\n"
;
exit
1;
}
if
(
defined
$options
{u}) {
$auth
=
"Basic "
. encode_base64(
$options
{u});
}
if
(
defined
$options
{o}) {
$auth
=
"Bearer "
.
$options
{o};
}
"Authorization: $auth"
;
"Fetching: "
,
$ARGV
[0],
"\n"
;
apc2s_backup(
$ARGV
[0]);
( run in 0.266 second using v1.01-cache-2.11-cpan-3cd7ad12f66 )