2023-05-12 11:52:04 -04:00
< ? php
declare ( strict_types = 1 );
/**
2024-05-28 10:42:42 -04:00
* SPDX - FileCopyrightText : 2023 Nextcloud GmbH and Nextcloud contributors
* SPDX - License - Identifier : AGPL - 3.0 - or - later
2023-05-12 11:52:04 -04:00
*/
namespace OCA\Files\Command\Object ;
use Symfony\Component\Console\Command\Command ;
use Symfony\Component\Console\Input\InputArgument ;
use Symfony\Component\Console\Input\InputInterface ;
use Symfony\Component\Console\Input\InputOption ;
use Symfony\Component\Console\Output\OutputInterface ;
class Get extends Command {
2023-07-04 14:43:32 -04:00
public function __construct (
private ObjectUtil $objectUtils ,
) {
2023-05-12 11:52:04 -04:00
parent :: __construct ();
}
protected function configure () : void {
$this
-> setName ( 'files:object:get' )
-> setDescription ( 'Get the contents of an object' )
2024-08-23 09:10:27 -04:00
-> addArgument ( 'object' , InputArgument :: REQUIRED , 'Object to get' )
-> addArgument ( 'output' , InputArgument :: REQUIRED , 'Target local file to output to, use - for STDOUT' )
2023-05-12 11:52:04 -04:00
-> addOption ( 'bucket' , 'b' , InputOption :: VALUE_REQUIRED , " Bucket to get the object from, only required in cases where it can't be determined from the config " );
}
public function execute ( InputInterface $input , OutputInterface $output ) : int {
$object = $input -> getArgument ( 'object' );
$outputName = $input -> getArgument ( 'output' );
2024-08-23 09:10:27 -04:00
$objectStore = $this -> objectUtils -> getObjectStore ( $input -> getOption ( 'bucket' ), $output );
2023-05-12 11:52:04 -04:00
if ( ! $objectStore ) {
2023-07-04 14:43:32 -04:00
return self :: FAILURE ;
2023-05-12 11:52:04 -04:00
}
if ( ! $objectStore -> objectExists ( $object )) {
$output -> writeln ( " <error>Object $object does not exist</error> " );
2023-07-04 14:43:32 -04:00
return self :: FAILURE ;
}
2023-05-12 11:52:04 -04:00
2023-07-04 14:43:32 -04:00
try {
$source = $objectStore -> readObject ( $object );
} catch ( \Exception $e ) {
$msg = $e -> getMessage ();
$output -> writeln ( " <error>Failed to read $object from object store: $msg </error> " );
return self :: FAILURE ;
2023-05-12 11:52:04 -04:00
}
2023-07-04 14:43:32 -04:00
$target = $outputName === '-' ? STDOUT : fopen ( $outputName , 'w' );
if ( ! $target ) {
$output -> writeln ( " <error>Failed to open $outputName for writing</error> " );
return self :: FAILURE ;
}
stream_copy_to_stream ( $source , $target );
return self :: SUCCESS ;
2023-05-12 11:52:04 -04:00
}
}