mirror of https://github.com/MISP/MISP
chg: [internal] Use FileAccessTool for Feed::unzipFirstFile
parent
d983d10c14
commit
9610fb1e93
|
@ -3167,23 +3167,6 @@ class AppModel extends Model
|
|||
return $this->log($message, $type);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates random file name in tmp dir.
|
||||
* @return string
|
||||
*/
|
||||
protected function tempFileName()
|
||||
{
|
||||
return $this->tempDir() . DS . $this->generateRandomFileName();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
protected function tempDir()
|
||||
{
|
||||
return Configure::read('MISP.tmpdir') ?: sys_get_temp_dir();
|
||||
}
|
||||
|
||||
/**
|
||||
* Decodes JSON string and throws exception if string is not valid JSON or if is not array.
|
||||
*
|
||||
|
|
|
@ -1932,16 +1932,14 @@ class Feed extends AppModel
|
|||
|
||||
$contentType = $response->getHeader('Content-Type');
|
||||
if ($contentType === 'application/zip') {
|
||||
$zipFile = new File($this->tempFileName());
|
||||
$zipFile->write($response->body);
|
||||
$zipFile->close();
|
||||
$zipFilePath = FileAccessTool::writeToTempFile($response->body);
|
||||
|
||||
try {
|
||||
$response->body = $this->unzipFirstFile($zipFile);
|
||||
$response->body = $this->unzipFirstFile($zipFilePath);
|
||||
} catch (Exception $e) {
|
||||
throw new Exception("Fetching the '$uri' failed: {$e->getMessage()}");
|
||||
} finally {
|
||||
$zipFile->delete();
|
||||
FileAccessTool::deleteFile($zipFilePath);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2047,18 +2045,18 @@ class Feed extends AppModel
|
|||
}
|
||||
|
||||
/**
|
||||
* @param File $zipFile
|
||||
* @param string $zipFile
|
||||
* @return string Uncompressed data
|
||||
* @throws Exception
|
||||
*/
|
||||
private function unzipFirstFile(File $zipFile)
|
||||
private function unzipFirstFile($zipFile)
|
||||
{
|
||||
if (!class_exists('ZipArchive')) {
|
||||
throw new Exception('ZIP archive decompressing is not supported. ZIP extension is missing in PHP.');
|
||||
}
|
||||
|
||||
$zip = new ZipArchive();
|
||||
$result = $zip->open($zipFile->pwd());
|
||||
$result = $zip->open($zipFile);
|
||||
if ($result !== true) {
|
||||
$errorCodes = [
|
||||
ZipArchive::ER_EXISTS => 'file already exists',
|
||||
|
@ -2086,18 +2084,12 @@ class Feed extends AppModel
|
|||
|
||||
$zip->close();
|
||||
|
||||
$destinationFile = $this->tempFileName();
|
||||
$result = copy("zip://{$zipFile->pwd()}#$filename", $destinationFile);
|
||||
$destinationFile = FileAccessTool::createTempFile();
|
||||
$result = copy("zip://$zipFile#$filename", $destinationFile);
|
||||
if ($result === false) {
|
||||
throw new Exception("Remote server returns ZIP file, that contains '$filename' file, but this file cannot be extracted.");
|
||||
}
|
||||
|
||||
$unzipped = new File($destinationFile);
|
||||
$data = $unzipped->read();
|
||||
if ($data === false) {
|
||||
throw new Exception("Couldn't read extracted file content.");
|
||||
}
|
||||
$unzipped->delete();
|
||||
return $data;
|
||||
return FileAccessTool::readAndDelete($destinationFile);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue