mirror of https://github.com/MISP/MISP
102 lines
2.6 KiB
PHP
102 lines
2.6 KiB
PHP
<?php
|
|
|
|
use Aws\S3\S3Client;
|
|
|
|
class AWSS3Client
|
|
{
|
|
private $__settings = false;
|
|
private $__client = false;
|
|
|
|
private function __getSetSettings()
|
|
{
|
|
$settings = array(
|
|
'enabled' => false,
|
|
'bucket_name' => 'my-malware-bucket',
|
|
'region' => 'eu-west-1',
|
|
'aws_access_key' => '',
|
|
'aws_secret_key' => ''
|
|
);
|
|
|
|
// We have 2 situations
|
|
// Either we're running on EC2 and we can assume an IAM role
|
|
// Or we're not and need explicitly set AWS key
|
|
if (strlen($settings['aws_access_key']) > 0) {
|
|
putenv('AWS_ACCESS_KEY_ID='.$settings['aws_access_key']);
|
|
}
|
|
if (strlen($settings['aws_secret_key']) > 0) {
|
|
putenv('AWS_SECRET_ACCESS_KEY='.$settings['aws_secret_key']);
|
|
}
|
|
|
|
foreach ($settings as $key => $setting) {
|
|
$temp = Configure::read('Plugin.S3_' . $key);
|
|
if ($temp) {
|
|
$settings[$key] = $temp;
|
|
}
|
|
}
|
|
return $settings;
|
|
}
|
|
|
|
public function initTool()
|
|
{
|
|
$settings = $this->__getSetSettings();
|
|
$s3 = new Aws\S3\S3Client([
|
|
'version' => 'latest',
|
|
'region' => $settings['region']
|
|
]);
|
|
|
|
$this->__client = $s3;
|
|
$this->__settings = $settings;
|
|
return $s3;
|
|
}
|
|
|
|
public function upload($key, $data)
|
|
{
|
|
$this->__client->putObject([
|
|
'Bucket' => $this->__settings['bucket_name'],
|
|
'Key' => $key,
|
|
'Body' => $data
|
|
]);
|
|
}
|
|
|
|
public function download($key)
|
|
{
|
|
$result = $this->__client->getObject([
|
|
'Bucket' => $this->__settings['bucket_name'],
|
|
'Key' => $key
|
|
]);
|
|
|
|
return $result['Body'];
|
|
}
|
|
|
|
public function delete($key)
|
|
{
|
|
$this->__client->deleteObject([
|
|
'Bucket' => $this->__settings['bucket_name'],
|
|
'Key' => $key
|
|
]);
|
|
}
|
|
|
|
public function deleteDirectory($prefix) {
|
|
$keys = $this->__client->listObjectsV2([
|
|
'Bucket' => $this->__settings['bucket_name'],
|
|
'Prefix' => $prefix
|
|
]);
|
|
|
|
$toDelete = array_map(
|
|
function ($key) {
|
|
return ['Key' => $key['Key']];
|
|
},
|
|
is_array($keys['Contents'])?$keys['Contents']:[]
|
|
);
|
|
|
|
if (sizeof($toDelete) != 0) {
|
|
$this->__client->deleteObjects([
|
|
'Bucket' => $this->__settings['bucket_name'],
|
|
'Delete' => [
|
|
'Objects' => $toDelete
|
|
]
|
|
]);
|
|
}
|
|
}
|
|
}
|