66 */
77namespace eZ \Publish \Core \FieldType \BinaryBase ;
88
9+ use eZ \Publish \Core \Base \Exceptions \ContentFieldValidationException ;
10+ use eZ \Publish \Core \FieldType \Validator \FileExtensionBlackListValidator ;
911use eZ \Publish \Core \IO \IOServiceInterface ;
1012use eZ \Publish \SPI \FieldType \BinaryBase \PathGenerator ;
1113use eZ \Publish \SPI \FieldType \BinaryBase \RouteAwarePathGenerator ;
@@ -39,24 +41,21 @@ class BinaryBaseStorage extends GatewayBasedStorage
3941 /** @var \eZ\Publish\Core\FieldType\BinaryBase\BinaryBaseStorage\Gateway */
4042 protected $ gateway ;
4143
42- /**
43- * Construct from gateways.
44- *
45- * @param \eZ\Publish\SPI\FieldType\StorageGateway $gateway
46- * @param \eZ\Publish\Core\IO\IOServiceInterface $ioService
47- * @param \eZ\Publish\SPI\FieldType\BinaryBase\PathGenerator $pathGenerator
48- * @param \eZ\Publish\SPI\IO\MimeTypeDetector $mimeTypeDetector
49- */
44+ /** @var \eZ\Publish\Core\FieldType\Validator\FileExtensionBlackListValidator */
45+ protected $ fileExtensionBlackListValidator ;
46+
5047 public function __construct (
5148 StorageGateway $ gateway ,
5249 IOServiceInterface $ ioService ,
5350 PathGenerator $ pathGenerator ,
54- MimeTypeDetector $ mimeTypeDetector
51+ MimeTypeDetector $ mimeTypeDetector ,
52+ FileExtensionBlackListValidator $ fileExtensionBlackListValidator
5553 ) {
5654 parent ::__construct ($ gateway );
5755 $ this ->ioService = $ ioService ;
5856 $ this ->pathGenerator = $ pathGenerator ;
5957 $ this ->mimeTypeDetector = $ mimeTypeDetector ;
58+ $ this ->fileExtensionBlackListValidator = $ fileExtensionBlackListValidator ;
6059 }
6160
6261 /**
@@ -67,6 +66,10 @@ public function setDownloadUrlGenerator(PathGenerator $downloadUrlGenerator)
6766 $ this ->downloadUrlGenerator = $ downloadUrlGenerator ;
6867 }
6968
69+ /**
70+ * @throws \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException
71+ * @throws \eZ\Publish\API\Repository\Exceptions\ContentFieldValidationException
72+ */
7073 public function storeFieldData (VersionInfo $ versionInfo , Field $ field , array $ context )
7174 {
7275 if ($ field ->value ->externalData === null ) {
@@ -76,6 +79,17 @@ public function storeFieldData(VersionInfo $versionInfo, Field $field, array $co
7679 }
7780
7881 if (isset ($ field ->value ->externalData ['inputUri ' ])) {
82+ $ this ->fileExtensionBlackListValidator ->validateFileExtension ($ field ->value ->externalData ['fileName ' ]);
83+ if (!empty ($ errors = $ this ->fileExtensionBlackListValidator ->getErrors ())) {
84+ $ preparedErrors = [];
85+ $ preparedErrors [$ field ->fieldDefinitionId ][$ field ->languageCode ] = $ errors ;
86+
87+ throw ContentFieldValidationException::createNewWithMultiline (
88+ $ preparedErrors ,
89+ $ versionInfo ->contentInfo ->name
90+ );
91+ }
92+
7993 $ field ->value ->externalData ['mimeType ' ] = $ this ->mimeTypeDetector ->getFromPath ($ field ->value ->externalData ['inputUri ' ]);
8094 $ createStruct = $ this ->ioService ->newBinaryCreateStructFromLocalFile ($ field ->value ->externalData ['inputUri ' ]);
8195 $ createStruct ->id = $ this ->pathGenerator ->getStoragePathForField ($ field , $ versionInfo );
0 commit comments