fix #26 validate path
This commit is contained in:
parent
1fa3824ea5
commit
855cfad124
|
@ -22,7 +22,8 @@
|
||||||
"symfony/filesystem": "^2.3",
|
"symfony/filesystem": "^2.3",
|
||||||
"nesbot/carbon": "^1.14",
|
"nesbot/carbon": "^1.14",
|
||||||
"doctrine/collections": "^1.3",
|
"doctrine/collections": "^1.3",
|
||||||
"webmozart/path-util": "^2.0"
|
"webmozart/path-util": "^2.0",
|
||||||
|
"webmozart/assert": "^1.0.1"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpunit/phpunit": "^4.0",
|
"phpunit/phpunit": "^4.0",
|
||||||
|
|
|
@ -7,6 +7,7 @@ use DavidBadura\Taskwarrior\Exception\CommandException;
|
||||||
use DavidBadura\Taskwarrior\Exception\TaskwarriorException;
|
use DavidBadura\Taskwarrior\Exception\TaskwarriorException;
|
||||||
use Symfony\Component\Filesystem\Filesystem;
|
use Symfony\Component\Filesystem\Filesystem;
|
||||||
use Symfony\Component\Process\Process;
|
use Symfony\Component\Process\Process;
|
||||||
|
use Webmozart\Assert\Assert;
|
||||||
use Webmozart\PathUtil\Path;
|
use Webmozart\PathUtil\Path;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -15,14 +16,24 @@ use Webmozart\PathUtil\Path;
|
||||||
class Taskwarrior
|
class Taskwarrior
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @var array
|
* @var string
|
||||||
*/
|
*/
|
||||||
private $rcOptions;
|
private $bin;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
private $bin;
|
private $taskrc;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $taskData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private $rcOptions;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
|
@ -44,10 +55,13 @@ class Taskwarrior
|
||||||
public function __construct($taskrc = '~/.taskrc', $taskData = '~/.task', $rcOptions = [], $bin = 'task')
|
public function __construct($taskrc = '~/.taskrc', $taskData = '~/.task', $rcOptions = [], $bin = 'task')
|
||||||
{
|
{
|
||||||
$this->bin = Path::canonicalize($bin);
|
$this->bin = Path::canonicalize($bin);
|
||||||
|
$this->taskrc = Path::canonicalize($taskrc);
|
||||||
|
$this->taskData = Path::canonicalize($taskData);
|
||||||
|
|
||||||
$this->rcOptions = array_merge(
|
$this->rcOptions = array_merge(
|
||||||
array(
|
array(
|
||||||
'rc:' . Path::canonicalize($taskrc),
|
'rc:' . $this->taskrc,
|
||||||
'rc.data.location=' . Path::canonicalize($taskData),
|
'rc.data.location=' . $this->taskData,
|
||||||
'rc.json.array=true',
|
'rc.json.array=true',
|
||||||
'rc.confirmation=no',
|
'rc.confirmation=no',
|
||||||
),
|
),
|
||||||
|
@ -57,6 +71,14 @@ class Taskwarrior
|
||||||
if (version_compare($this->version(), '2.4.3') < 0) {
|
if (version_compare($this->version(), '2.4.3') < 0) {
|
||||||
throw new TaskwarriorException(sprintf("Taskwarrior version %s isn't supported", $this->version()));
|
throw new TaskwarriorException(sprintf("Taskwarrior version %s isn't supported", $this->version()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Assert::readable($this->taskrc);
|
||||||
|
Assert::readable($this->taskData);
|
||||||
|
Assert::writable($this->taskData);
|
||||||
|
} catch (\InvalidArgumentException $e) {
|
||||||
|
throw new TaskwarriorException($e->getMessage(), $e->getCode(), $e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -218,6 +240,22 @@ class Taskwarrior
|
||||||
return $this->version;
|
return $this->version;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getTaskrcPath()
|
||||||
|
{
|
||||||
|
return $this->taskrc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getTaskDataPath()
|
||||||
|
{
|
||||||
|
return $this->taskData;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Config
|
* @return Config
|
||||||
* @throws CommandException
|
* @throws CommandException
|
||||||
|
|
|
@ -37,4 +37,18 @@ class TaskwarriorTest extends \PHPUnit_Framework_TestCase
|
||||||
$this->assertTrue($config->has('urgency.age.max'));
|
$this->assertTrue($config->has('urgency.age.max'));
|
||||||
$this->assertEquals('365', $config->get('urgency.age.max'));
|
$this->assertEquals('365', $config->get('urgency.age.max'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testTaskrcNotFound()
|
||||||
|
{
|
||||||
|
$this->setExpectedException('DavidBadura\Taskwarrior\Exception\TaskwarriorException');
|
||||||
|
|
||||||
|
new Taskwarrior('/not/found/.taskrc', __DIR__ . '/.task');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testTaskDataNotFound()
|
||||||
|
{
|
||||||
|
$this->setExpectedException('DavidBadura\Taskwarrior\Exception\TaskwarriorException');
|
||||||
|
|
||||||
|
new Taskwarrior(__DIR__ . '/.taskrc', '/not/found/.task');
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue