Skip to content

Commit 4d80e4b

Browse files
committed
Added configurable permission for creating folders
1 parent 7d0df26 commit 4d80e4b

File tree

3 files changed

+34
-5
lines changed

3 files changed

+34
-5
lines changed

readme.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,15 @@ webimages:
5555

5656
> By default all these routes will be prepended before your other routes - assuming you use `Nette\Application\Routers\RouteList` as your root router. You can disable this by setting `prependRoutesToRouter: false`. Then it's your responsibility to plug webimages router (service `webimages.router`) to your routing implementation.
5757
58+
If you need custom permission for creating folders, you can set the permission in config:
59+
60+
```
61+
webimages:
62+
umask: 0777
63+
```
64+
65+
> Custom permission implementation uses umask
66+
5867
Addon gives you new macro `n:src`. Now you're ready to use it.
5968

6069
```html

src/Extension.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class Extension extends DI\CompilerExtension
1414

1515
/** @var array */
1616
private $defaults = [
17+
'umask' => FALSE,
1718
'routes' => [],
1819
'prependRoutesToRouter' => TRUE,
1920
'rules' => [],
@@ -35,6 +36,7 @@ public function loadConfiguration()
3536
$generator = $container->addDefinition($this->prefix('generator'))
3637
->setClass('DotBlue\WebImages\Generator', [
3738
$config['wwwDir'],
39+
$config['umask'],
3840
]);
3941

4042
foreach ($config['rules'] as $rule) {

src/Generator.php

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,16 @@ class Generator extends Nette\Object
3333

3434
/** @var IProvider[] */
3535
private $providers = [];
36+
37+
/** @var integer */
38+
private $umask;
3639

3740

3841

39-
public function __construct($wwwDir, Http\IRequest $httpRequest, Http\IResponse $httpResponse, Validator $validator)
42+
public function __construct($wwwDir, $umask, Http\IRequest $httpRequest, Http\IResponse $httpResponse, Validator $validator)
4043
{
4144
$this->wwwDir = $wwwDir;
45+
$this->umask = $umask;
4246
$this->httpRequest = $httpRequest;
4347
$this->httpResponse = $httpResponse;
4448
$this->validator = $validator;
@@ -91,10 +95,7 @@ public function generateImage(ImageRequest $request)
9195

9296
$dirname = dirname($destination);
9397
if (!is_dir($dirname)) {
94-
$success = @mkdir($dirname, 0777, TRUE);
95-
if (!$success) {
96-
throw new Application\BadRequestException;
97-
}
98+
$this->createFolder($dirname);
9899
}
99100

100101
$success = $image->save($destination, 90, $format);
@@ -105,5 +106,22 @@ public function generateImage(ImageRequest $request)
105106
$image->send();
106107
exit;
107108
}
109+
110+
111+
112+
private function createFolder($dirname)
113+
{
114+
if ($this->umask) {
115+
$oldmask = umask(0);
116+
$success = @mkdir($dirname, octdec($this->umask), TRUE);
117+
umask($oldmask);
118+
} else {
119+
$success = @mkdir($dirname, 0777, TRUE);
120+
}
121+
122+
if (!$success) {
123+
throw new Application\BadRequestException;
124+
}
125+
}
108126

109127
}

0 commit comments

Comments
 (0)