Backblaze-B2V2Client
view release on metacpan or search on metacpan
script/b2_client view on Meta::CPAN
Upload a file to B2. Required arguments are the name of the destination B2 bucket and the path to the file to be uploaded. Best if the file has a standard extension (i.e. .txt, .png, .js, etc.)
# b2_client list
Lists the B2 buckets in your account.
# b2_client new_bucket BUCKET_NAME
Creates a new B2 Bucket with the given name. Alphanumeric characters only.
# b2_client help
Prints this help screen.
--
Backblaze::B2V2Client and this command are released under the MIT License. Copyright (c) 2020 Eric Chernoff
};
}
# Next two subroutines will retrieve or save their B2 API tokens
sub get_b2_tokens {
my ($obfuscated_tokens, $the_tokens, $application_key_id, $application_key);
# try to read it in
eval {
$obfuscated_tokens = path('~/.b2_tokens')->slurp_raw;
$the_tokens = pack "h*", $obfuscated_tokens;
($application_key_id,$application_key) = split /:::/, $the_tokens;
};
# error out if there was any failure
if ($@ || !$application_key_id || !$application_key) {
die "ERROR: B2 tokens not available.".
"\nPlease use 'b2_client save_tokens APPLICATION_KEY_ID APPLICATION_KEY' to save tokens to your home directory.\n";
# send out an arrayref
} else {
return [$application_key_id ,$application_key];
}
}
sub save_b2_tokens {
my (@args) = @_;
if (!$ARGV[0] || !$ARGV[1]) {
die "ERROR: Please provide both the APPLICATION_KEY_ID and APPLICATION_KEY arguments for 'save_tokens'\n";
}
# test them before saving
my $b2client = get_b2_session( [$args[0], $args[1]] );
# get_b2_session() will test those for us
my $obfuscated_content = unpack "h*", $args[0].':::'.$args[1];
my $file_location = '~/.b2_tokens';
path($file_location)->spew_raw( $obfuscated_content );
chmod 0600, $file_location;
print "B2 API Tokens saved to $file_location\n";
}
# subroutine to actually log into B2 with their tokens
sub get_b2_session {
my ($tokens) = @_;
# if no tokens provided, try to load them
if (!$$tokens[0]) {
$tokens = get_b2_tokens();
}
# no tokens? prompt them to create
die "API tokens needed for get_b2_session()\nPlease run 'b2_client save_tokens'.\n" if !$$tokens[0] || !$$tokens[1];
# attempt to log in
my $b2client = Backblaze::B2V2Client->new($$tokens[0], $$tokens[1]);
# test them
if ($b2client->{current_status} eq 'OK') { # save to proceed
return $b2client;
} else {
die "ERROR: The B2 API keys you provided did not authenticate. Please verify and try again.\n";
}
}
# reusable snipped to prep the error message
sub get_error_message {
my ($b2client) = @_;
return "Error: $b2client->{errors}[-1]{response_code} $b2client->{errors}[-1]{error_message}\n";
}
( run in 0.406 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )