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 )