Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 12 additions & 12 deletions Core/CloudinaryImageProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,27 +24,19 @@ class CloudinaryImageProvider implements ImageProvider
*/
private $configurationBuilder;

/**
* @var CredentialValidator
*/
private $credentialValidator;

/**
* @param ConfigurationInterface $configuration
* @param ConfigurationBuilder $configurationBuilder
* @param UploadResponseValidator $uploadResponseValidator
* @param CredentialValidator $credentialValidator
*/
public function __construct(
ConfigurationInterface $configuration,
ConfigurationBuilder $configurationBuilder,
UploadResponseValidator $uploadResponseValidator,
CredentialValidator $credentialValidator
UploadResponseValidator $uploadResponseValidator
) {
$this->configuration = $configuration;
$this->uploadResponseValidator = $uploadResponseValidator;
$this->configurationBuilder = $configurationBuilder;
$this->credentialValidator = $credentialValidator;
if ($configuration->isEnabled()) {
$this->authorise();
}
Expand All @@ -59,8 +51,7 @@ public static function fromConfiguration(ConfigurationInterface $configuration)
return new CloudinaryImageProvider(
$configuration,
new ConfigurationBuilder($configuration),
new UploadResponseValidator(),
new CredentialValidator()
new UploadResponseValidator()
);
}

Expand Down Expand Up @@ -139,7 +130,16 @@ public function delete(Image $image)
*/
public function validateCredentials()
{
return $this->credentialValidator->validate($this->configuration->getCredentials());
try {
$pingValidation = $this->api->ping();
if (!(isset($pingValidation["status"]) && $pingValidation["status"] === "ok")) {
return false;
//throw new ValidatorException(__(self::CREDENTIALS_CHECK_UNSURE));
}
} catch (\Exception $e) {
return false;
}
return true;
}

private function authorise()
Expand Down
1 change: 0 additions & 1 deletion Core/CredentialValidator.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,5 @@ public function validate(Credentials $credentials)

$request = new ValidateRemoteUrlRequest($signedValidationUrl);
return $request->validate();

}
}
58 changes: 37 additions & 21 deletions Model/Config/Backend/Credentials.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,19 @@

namespace Cloudinary\Cloudinary\Model\Config\Backend;

use Cloudinary;
use Cloudinary\Api;
use Cloudinary\Cloudinary\Core\ConfigurationBuilder;
use Cloudinary\Cloudinary\Core\ConfigurationInterface;
use Cloudinary\Cloudinary\Core\Credentials as CredentialsValue;
use Cloudinary\Cloudinary\Core\Exception\InvalidCredentials;
use Cloudinary\Cloudinary\Core\Security\CloudinaryEnvironmentVariable;
use Magento\Config\Model\Config\Backend\Encrypted;
use Magento\Framework\App\Cache\TypeListInterface;
use Magento\Framework\App\Config\ScopeConfigInterface;
use Magento\Framework\Data\Collection\AbstractDb;
use Magento\Framework\Encryption\EncryptorInterface;
use Magento\Framework\Exception\ValidatorException;
use Cloudinary\Cloudinary\Core\CredentialValidator;
use Cloudinary\Cloudinary\Core\ConfigurationInterface;
use Cloudinary\Cloudinary\Core\Security\CloudinaryEnvironmentVariable;
use Cloudinary\Cloudinary\Core\Credentials as CredentialsValue;
use Cloudinary\Cloudinary\Core\Exception\InvalidCredentials;
use Magento\Framework\Model\Context;
use Magento\Framework\Model\ResourceModel\AbstractResource;
use Magento\Framework\Registry;
Expand All @@ -25,25 +27,31 @@ class Credentials extends Encrypted
const CLOUDINARY_ENABLED_PATH = 'groups/cloud/fields/cloudinary_enabled/value';

/**
* @var CredentialValidator
* @var ConfigurationInterface
*/
private $configuration;

/**
* @var ConfigurationBuilder
*/
private $credentialValidator;
private $configurationBuilder;

/**
* @var ConfigurationInterface
* @var Cloudinary\Api
*/
private $configuration;
private $api;

/**
* @param Context $context
* @param Registry $registry
* @param ScopeConfigInterface $config
* @param TypeListInterface $cacheTypeList
* @param EncryptorInterface $encryptor
* @param CredentialValidator $credentialValidator
* @param ConfigurationInterface $configuration
* @param AbstractResource $resource
* @param AbstractDb $resourceCollection
* @param ConfigurationBuilder $configurationBuilder
* @param Api $api
* @param array $data
*/
public function __construct(
Expand All @@ -52,14 +60,16 @@ public function __construct(
ScopeConfigInterface $config,
TypeListInterface $cacheTypeList,
EncryptorInterface $encryptor,
CredentialValidator $credentialValidator,
ConfigurationInterface $configuration,
AbstractResource $resource = null,
AbstractDb $resourceCollection = null,
ConfigurationBuilder $configurationBuilder,
Api $api,
array $data = []
) {
$this->credentialValidator = $credentialValidator;
$this->configuration = $configuration;
$this->configurationBuilder = $configurationBuilder;
$this->api = $api;

parent::__construct(
$context,
Expand All @@ -79,14 +89,12 @@ public function beforeSave()

parent::beforeSave();

if (!$rawValue) {
throw new ValidatorException(__(self::CREDENTIALS_CHECK_MISSING));
}

if ($this->isSaveAllowed()) {
$this->validate($this->getCredentialsFromEnvironmentVariable($rawValue));
} else {
$this->validate($this->getCredentialsFromConfig());
if ($rawValue) {
if ($this->isSaveAllowed()) {
$this->validate($this->getCredentialsFromEnvironmentVariable($rawValue));
} else {
$this->validate($this->getCredentialsFromConfig());
}
}
}

Expand All @@ -96,7 +104,9 @@ public function beforeSave()
*/
private function validate(CredentialsValue $credentials)
{
if (!$this->credentialValidator->validate($credentials)) {
$this->_authorise();
$pingValidation = $this->api->ping();
if (!(isset($pingValidation["status"]) && $pingValidation["status"] === "ok")) {
throw new ValidatorException(__(self::CREDENTIALS_CHECK_UNSURE));
}
}
Expand Down Expand Up @@ -135,4 +145,10 @@ private function isModuleActiveInFormData()
{
return $this->getDataByPath(self::CLOUDINARY_ENABLED_PATH) === '1';
}

private function _authorise()
{
Cloudinary::config($this->configurationBuilder->build());
Cloudinary::$USER_PLATFORM = $this->configuration->getUserPlatform();
}
}
60 changes: 22 additions & 38 deletions Model/Config/Source/Dropdown/Gravity.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,63 +8,47 @@ class Gravity implements OptionSourceInterface
{
public function toOptionArray()
{
return array(
array(
return [
[
'value' => '',
'label' => 'Magento\'s Default',
),
array(
'value' => 'face',
'label' => 'Face',
),
array(
'value' => 'faces',
'label' => 'Faces',
),
array(
],
[
'value' => 'north_west',
'label' => 'North West',
),
array(
],
[
'value' => 'north',
'label' => 'North',
),
array(
],
[
'value' => 'north_east',
'label' => 'North East',
),
array(
],
[
'value' => 'east',
'label' => 'East',
),
array(
],
[
'value' => 'center',
'label' => 'Center',
),
array(
],
[
'value' => 'west',
'label' => 'West',
),
array(
],
[
'value' => 'south_west',
'label' => 'South West',
),
array(
],
[
'value' => 'south',
'label' => 'South',
),
array(
],
[
'value' => 'south_east',
'label' => 'South East',
),
array(
'value' => 'face:center',
'label' => 'Face (Center)',
),
array(
'value' => 'faces:center',
'label' => 'Faces (Center)',
),
);
],
];
}
}
2 changes: 1 addition & 1 deletion Model/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ public function getCdnSubdomainStatus()
*/
public function getUserPlatform()
{
return sprintf(self::USER_PLATFORM_TEMPLATE, '1.7.0', '2.0.0');
return sprintf(self::USER_PLATFORM_TEMPLATE, '1.7.2', '2.0.0');
}

/**
Expand Down
4 changes: 1 addition & 3 deletions Model/Observer/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@ public function __construct(
*/
public function execute(Observer $observer)
{
$force = false;
//Clear config cache if needed
$this->changedPaths = (array) $observer->getEvent()->getChangedPaths();
if (count(array_intersect($this->changedPaths, [
Expand All @@ -66,10 +65,9 @@ public function execute(Observer $observer)
\Cloudinary\Cloudinary\Model\AutoUploadMapping\AutoUploadConfiguration::REQUEST_PATH
])) > 0) {
$this->cleanConfigCache();
$force = true;
}

if (!$this->requestProcessor->handle('media', $this->configuration->getMediaBaseUrl(), $force)) {
if (!$this->requestProcessor->handle('media', $this->configuration->getMediaBaseUrl(), true)) {
$this->messageManager->addErrorMessage(self::AUTO_UPLOAD_SETUP_FAIL_MESSAGE);
}
}
Expand Down
23 changes: 18 additions & 5 deletions Plugin/Catalog/Block/Product/ImageFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,23 @@
use Magento\Catalog\Block\Product\ImageFactory as CatalogImageFactory;
use Magento\Catalog\Helper\Image as CatalogImageHelper;
use Magento\Catalog\Model\Product;
use Magento\Catalog\Model\Product\Image\ParamsBuilder;
use Magento\Framework\ObjectManagerInterface;
use Magento\Framework\View\ConfigInterface;

class ImageFactory
{
/**
* @var ObjectManagerInterface
*/
protected $objectManager;

/**
* @var ConfigInterface
*/
private $presentationConfig;

/**
* @var ParamsBuilder
* @var \Magento\Catalog\Model\Product\Image\ParamsBuilder
*/
private $imageParamsBuilder;

Expand Down Expand Up @@ -73,23 +78,23 @@ class ImageFactory
private $transformationModel;

/**
* @param ObjectManagerInterface $objectManager
* @param ConfigInterface $presentationConfig
* @param ParamsBuilder $imageParamsBuilder
* @param CloudinaryImageFactory $cloudinaryImageFactory
* @param UrlGenerator $urlGenerator
* @param ConfigurationInterface $configuration
* @param TransformationFactory $transformationFactory
*/
public function __construct(
ObjectManagerInterface $objectManager,
ConfigInterface $presentationConfig,
ParamsBuilder $imageParamsBuilder,
CloudinaryImageFactory $cloudinaryImageFactory,
UrlGenerator $urlGenerator,
ConfigurationInterface $configuration,
TransformationFactory $transformationFactory
) {
$this->objectManager = $objectManager;
$this->presentationConfig = $presentationConfig;
$this->imageParamsBuilder = $imageParamsBuilder;
$this->cloudinaryImageFactory = $cloudinaryImageFactory;
$this->urlGenerator = $urlGenerator;
$this->configuration = $configuration;
Expand All @@ -111,10 +116,18 @@ public function __construct(
public function aroundCreate(CatalogImageFactory $catalogImageFactory, callable $proceed, Product $product, string $imageId, array $attributes = null): ImageBlock
{
$imageBlock = $proceed($product, $imageId, $attributes);

if (!$this->configuration->isEnabled()) {
return $imageBlock;
}

if (class_exists('\Magento\Catalog\Model\Product\Image\ParamsBuilder')) {
$this->imageParamsBuilder = $this->objectManager->get('\Magento\Catalog\Model\Product\Image\ParamsBuilder');
} else {
//Skip on Magento versions prior to 2.3
return $imageBlock;
}

try {
if (strpos($imageBlock->getImageUrl(), $this->configuration->getMediaBaseUrl() . 'catalog/product') === 0) {
$viewImageConfig = $this->presentationConfig->getViewConfig()->getMediaAttributes(
Expand Down
Loading