![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mautic.corals.io/plugins/MauticCloudStorageBundle/Integration/ |
<?php namespace MauticPlugin\MauticCloudStorageBundle\Integration; use Aws\S3\S3Client; use Gaufrette\Adapter\AwsS3; use Gaufrette\Extras\Resolvable\ResolvableFilesystem; use Gaufrette\Extras\Resolvable\Resolver\AwsS3PublicUrlResolver; use Gaufrette\Filesystem; use MauticPlugin\MauticCloudStorageBundle\Exception\NoFormNeededException; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\Form; use Symfony\Component\Form\FormBuilder; class AmazonS3Integration extends CloudStorageIntegration { private ?ResolvableFilesystem $fileSystem = null; public function getName(): string { return 'AmazonS3'; } public function getDisplayName(): string { return 'Amazon S3'; } /** * Get the array key for clientId. */ public function getClientIdKey(): string { return 'client_id'; } /** * Get the array key for client secret. */ public function getClientSecretKey(): string { return 'client_secret'; } /** * @return array<string, string> */ public function getRequiredKeyFields(): array { return [ 'client_id' => 'mautic.integration.keyfield.clientid', 'client_secret' => 'mautic.integration.keyfield.clientsecret', 'bucket' => 'mautic.integration.keyfield.amazons3.bucket', ]; } /** * @param Form|FormBuilder $builder * @param array $data * @param string $formArea */ public function appendToForm(&$builder, $data, $formArea): void { if ('keys' === $formArea) { $builder->add( 'region', TextType::class, [ 'label' => 'mautic.integration.Amazon.region', 'attr' => ['class' => 'form-control'], 'data' => empty($data['region']) ? 'us-east-1' : $data['region'], 'required' => false, ] ); $builder->add( 'endpoint', TextType::class, [ 'label' => 'mautic.integration.Amazon.endpoint', 'attr' => ['class' => 'form-control'], 'data' => empty($data['endpoint']) ? null : $data['endpoint'], 'required' => false, ] ); } } /** * @return AwsS3 */ public function getAdapter() { if (!$this->adapter || !$this->fileSystem) { $keys = $this->getDecryptedApiKeys(); $s3Args = [ 'version' => 'latest', 'region' => (empty($keys['region'])) ? 'us-east-1' : $keys['region'], 'credentials' => [ 'key' => $keys['client_id'], 'secret' => $keys['client_secret'], ], ]; if (!empty($keys['endpoint'])) { $s3Args['endpoint'] = $keys['endpoint']; } $service = new S3Client($s3Args); $this->adapter = new AwsS3($service, $keys['bucket']); $decorated = new Filesystem($this->adapter); $this->fileSystem = new ResolvableFilesystem( $decorated, new AwsS3PublicUrlResolver($service, $keys['bucket']) ); } return $this->adapter; } public function getForm(): string { throw new NoFormNeededException(); } public function getPublicUrl($key) { $this->getAdapter(); return $this->fileSystem->resolve($key); } }