Issues (30)

Security Analysis    no request data  

This project does not seem to handle request data directly as such no vulnerable execution paths were found.

  Cross-Site Scripting
Cross-Site Scripting enables an attacker to inject code into the response of a web-request that is viewed by other users. It can for example be used to bypass access controls, or even to take over other users' accounts.
  File Exposure
File Exposure allows an attacker to gain access to local files that he should not be able to access. These files can for example include database credentials, or other configuration files.
  File Manipulation
File Manipulation enables an attacker to write custom data to files. This potentially leads to injection of arbitrary code on the server.
  Object Injection
Object Injection enables an attacker to inject an object into PHP code, and can lead to arbitrary code execution, file exposure, or file manipulation attacks.
  Code Injection
Code Injection enables an attacker to execute arbitrary code on the server.
  Response Splitting
Response Splitting can be used to send arbitrary responses.
  File Inclusion
File Inclusion enables an attacker to inject custom files into PHP's file loading mechanism, either explicitly passed to include, or for example via PHP's auto-loading mechanism.
  Command Injection
Command Injection enables an attacker to inject a shell command that is execute with the privileges of the web-server. This can be used to expose sensitive data, or gain access of your server.
  SQL Injection
SQL Injection enables an attacker to execute arbitrary SQL code on your database server gaining access to user data, or manipulating user data.
  XPath Injection
XPath Injection enables an attacker to modify the parts of XML document that are read. If that XML document is for example used for authentication, this can lead to further vulnerabilities similar to SQL Injection.
  LDAP Injection
LDAP Injection enables an attacker to inject LDAP statements potentially granting permission to run unauthorized queries, or modify content inside the LDAP tree.
  Header Injection
  Other Vulnerability
This category comprises other attack vectors such as manipulating the PHP runtime, loading custom extensions, freezing the runtime, or similar.
  Regex Injection
Regex Injection enables an attacker to execute arbitrary code in your PHP process.
  XML Injection
XML Injection enables an attacker to read files on your local filesystem including configuration files, or can be abused to freeze your web-server process.
  Variable Injection
Variable Injection enables an attacker to overwrite program variables with custom data, and can lead to further vulnerabilities.
Unfortunately, the security analysis is currently not available for your project. If you are a non-commercial open-source project, please contact support to gain access.

src/TaskBag.php (8 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
namespace Mistletoe;
3
use Cron\CronExpression;
4
use Mistletoe\Contracts\ExpressionBuilderInterface;
5
use Mistletoe\Contracts\TaskBagInterface;
6
7
/**
8
 * Class TaskBag
9
 * @package FBS\Planner
10
 */
11
class TaskBag implements TaskBagInterface
12
{
13
    /** @var string Task */
14
    protected $task;
15
16
    /** @var array */
17
    protected $environments = [TaskPlanner::PRODUCTION_ENVIRONMENT, TaskPlanner::DEVELOPMENT_ENVIRONMENT];
18
19
    /** @var array|string Tasks that must follow this one */
20
    protected $followedBy = [];
21
22
    /** @var  CronExpression */
23
    protected $cronExpression;
24
25
    /* Expressions */
26
    /** @var null|string */
27
    protected $interval = null; // @daily, @yearly
28
29
    /** @var null|string|int|array */
30
    protected $minute = null;
31
32
    /** @var null|string|int|array */
33
    protected $hour = null;
34
35
    /** @var null|string|int|array */
36
    protected $month = null; // 12
37
38
    /** @var null|string|int|array */
39
    protected $day = null; // 25
40
41
    /** @var null|string|int|array */
42
    protected $weekday = null;
43
44
    /* Dependencies */
45
    /** @var ExpressionBuilderInterface */
46
    protected $expressionBuilder;
47
48
49
    /**
50
     * TaskBag constructor.
51
     * @param string $task
52
     */
53 40
    public function __construct($task = null)
54
    {
55 40
        if (is_string($task)) {
56 37
            $this->task = $task;
57
58 40
        } elseif (is_array($task)) {
59
60
            // You may also pass in an array of values at construction
61
            // They MUST match the property names exactly
62 3
            foreach ($task as $key => $value) {
63 3
                $this->{'set'.ucfirst($key)}($value);
64 3
            }
65 3
        }
66 40
    }
67
68
    /**
69
     * @return string
70
     */
71 4
    public function getTask()
72
    {
73 4
        return $this->task;
74
    }
75
76
    /**
77
     * @param string $task
78
     * @return $this
79
     */
80 29
    public function setTask($task)
81
    {
82 29
        $this->task = $task;
83 29
        return $this;
84
    }
85
86
    /**
87
     * @return null|string
88
     */
89 14
    public function getInterval()
90
    {
91 14
        return $this->interval;
92
    }
93
94
    /**
95
     * @param string $interval
96
     * @return $this
97
     */
98 15
    public function setInterval($interval)
99
    {
100 15
        $this->interval = $interval;
101 15
        return $this;
102
    }
103
104
    /**
105
     * Parses a time from format 12:14
106
     * @param $time
107
     * @return $this
108
     */
109 5
    public function setTime($time)
110
    {
111 5
        $parts = $this->parseTime($time);
112 5
        $this->setHour($parts[0]);
113 5
        $this->setMinute($parts[1]);
114
115 5
        return $this;
116
    }
117
118
    /**
119
     * @param string $time
120
     * @return $this
121
     */
122 12
    public function addTime($time)
123
    {
124 12
        $parts = $this->parseTime($time);
125 12
        $this->addHour($parts[0]);
126 12
        $this->addMinute($parts[1]);
127
128 12
        return $this;
129
    }
130
131
    /**
132
     * Parses a time from formats 11/15 or 11-15
133
     * @param string $date
134
     * @return $this
135
     */
136 2
    public function setDate($date)
0 ignored issues
show
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
137
    {
138 2
        $parts = $this->parseDate($date);
139 2
        $this->setMonth(intval($parts[0]));
140 2
        $this->setDay(intval($parts[1]));
141
142 2
        return $this;
143
    }
144
145
    /**
146
     * @param string $date
147
     * @return $this
148
     */
149 4
    public function addDate($date)
0 ignored issues
show
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
150
    {
151 4
        $parts = $this->parseDate($date);
152 4
        $this->addMonth(intval($parts[0]));
153 4
        $this->addDay(intval($parts[1]));
154
155 4
        return $this;
156
    }
157
158
    /**
159
     * @param integer $month
160
     * @return $this
161
     */
162 6
    public function setMonth($month)
163
    {
164 6
        $this->month = $month;
165 6
        return $this;
166
    }
167
168
    /**
169
     * @return int|bool|string
0 ignored issues
show
Should the return type not be null|string|integer|array?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
170
     */
171 14
    public function getMonth()
172
    {
173 14
        return $this->month;
174
    }
175
176
    /**
177
     * @param string|int|array $month
178
     * @return $this
179
     */
180 7
    public function addMonth($month)
181
    {
182 7
        $this->appendValue('month', $month);
183 7
        return $this;
184
    }
185
186
    /**
187
     * @param integer $day
188
     * @return $this
189
     */
190 8
    public function setDay($day)
191
    {
192 8
        $this->day = $day;
193 8
        return $this;
194
    }
195
196
    /**
197
     * @return int|null|string
0 ignored issues
show
Should the return type not be null|string|integer|array?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
198
     */
199 14
    public function getDay()
200
    {
201 14
        return $this->day;
202
    }
203
204
    /**
205
     * @param string|int|array $day
206
     * @return $this
207
     */
208 9
    public function addDay($day)
209
    {
210 9
        $this->appendValue('day', $day);
211 9
        return $this;
212
    }
213
214
    /**
215
     * @param string|int|array $minute
216
     * @return $this
217
     * @throws \Exception
218
     */
219 8
    public function setMinute($minute)
220
    {
221 8
        $this->minute = $minute;
222 8
        return $this;
223
    }
224
225
    /**
226
     * @return int|null|string
0 ignored issues
show
Should the return type not be null|string|integer|array?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
227
     */
228 14
    public function getMinute()
229
    {
230 14
        return $this->minute;
231
    }
232
233
    /**
234
     * @param string|int|array $minute
235
     * @return $this
236
     */
237 13
    public function addMinute($minute)
238
    {
239 13
        $this->appendValue('minute', $minute);
240 13
        return $this;
241
    }
242
243
    /**
244
     * @param string|int|array $hour
245
     * @return $this
246
     */
247 8
    public function setHour($hour)
248
    {
249 8
        $this->hour = $hour;
250 8
        return $this;
251
    }
252
253
    /**
254
     * @return int|null|string
0 ignored issues
show
Should the return type not be null|string|integer|array?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
255
     */
256 14
    public function getHour()
257
    {
258 14
        return $this->hour;
259
    }
260
261
    /**
262
     * @param string|int|array $hour
263
     * @return $this
264
     */
265 13
    public function addHour($hour)
266
    {
267 13
        $this->appendValue('hour', $hour);
268 13
        return $this;
269
    }
270
271
    /**
272
     * @param string|int|array $weekday
273
     * @return $this
274
     */
275 2
    public function setWeekday($weekday)
276
    {
277 2
        $this->weekday = $weekday;
278 2
        return $this;
279
    }
280
281
    /**
282
     * @return int|null|string
0 ignored issues
show
Should the return type not be null|string|integer|array?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
283
     */
284 10
    public function getWeekday()
285
    {
286 10
        return $this->weekday;
287
    }
288
289
    /**
290
     * @param string|int|array $weekday
291
     * @return $this
292
     */
293 3
    public function addWeekday($weekday)
294
    {
295 3
        $this->appendValue('weekday', $weekday);
296 3
        return $this;
297
    }
298
299 5
    public function setEnvironments($environments)
300
    {
301 5
        if (!is_array($environments)) {
302 2
            $environments = [$environments];
303 2
        }
304
305 5
        $this->environments = $environments;
306 5
        return $this;
307
    }
308
309
    /**
310
     * @param string $environment
311
     * @return $this
312
     */
313 2
    public function addEnvironment($environment)
314
    {
315 2
        $this->environments[] = $environment;
316 2
        return $this;
317
    }
318
319
    /**
320
     * @return array
321
     */
322 4
    public function getEnvironments()
323
    {
324 4
        return $this->environments;
325
    }
326
327
    /**
328
     * @param string $task
329
     * @return $this
330
     */
331 7
    public function addFollowedBy($task)
332
    {
333 7
        $this->followedBy[] = $task;
334 7
        return $this;
335
    }
336
337
    /**
338
     * @return array
0 ignored issues
show
Should the return type not be array|string?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
339
     */
340 3
    public function getFollowedBy()
341
    {
342 3
        return $this->followedBy;
343
    }
344
345
    /**
346
     * @param string $followedBy
347
     * @return $this
348
     */
349 3
    public function setFollowedBy($followedBy)
350
    {
351 3
        $this->followedBy = $followedBy;
352 3
        return $this;
353
    }
354
355
    /**
356
     * @param string|CronExpression $cronExpression
357
     * @return $this
358
     */
359 16
    public function setCronExpression($cronExpression)
360
    {
361 16
        $this->cronExpression = ($cronExpression instanceof CronExpression)
362 16
            ? $cronExpression
363 16
            : CronExpression::factory($cronExpression);
364
365 16
        return $this;
366
    }
367
368
    /**
369
     * @return CronExpression
370
     */
371 12
    public function getCronExpression()
372
    {
373 12
        return ($this->cronExpression instanceof CronExpression) ? $this->cronExpression : $this->buildExpression();
374
    }
375
376
    /**
377
     * @return CronExpression
378
     */
379 8
    protected function buildExpression()
380
    {
381 8
        $expression = $this->getExpressionBuilder()->setTaskBag($this)->build();
382 8
        $this->setCronExpression($expression);
383 8
        return $expression;
384
    }
385
386
    /**
387
     * @param ExpressionBuilderInterface $expressionBuilder
388
     */
389 1
    public function setExpressionBuilder(ExpressionBuilderInterface $expressionBuilder)
390
    {
391 1
        $this->expressionBuilder = $expressionBuilder;
392 1
    }
393
394
    /**
395
     * @return ExpressionBuilder|ExpressionBuilderInterface
396
     */
397 8
    protected function getExpressionBuilder()
398
    {
399 8
        return ($this->expressionBuilder instanceof ExpressionBuilderInterface) ? $this->expressionBuilder : new ExpressionBuilder();
400
    }
401
402
403
    /* Just passed through to CronExpression */
404
    /**
405
     * @param string $currentTime
406
     * @return bool
407
     */
408 2
    public function isDue($currentTime = 'now')
409
    {
410 2
        return $this->getCronExpression()->isDue($currentTime);
411
    }
412
413
    /**
414
     * @param string $currentTime
415
     * @param int $nth
416
     * @param bool $allowCurrentDate
417
     */
418
    public function getNextRunDate($currentTime = 'now', $nth = 0, $allowCurrentDate = false)
419
    {
420
        $this->getCronExpression()->getNextRunDate($currentTime, $nth, $allowCurrentDate);
421
    }
422
423
    /**
424
     * @param string $currentTime
425
     * @param int $nth
426
     * @param bool $allowCurrentDate
427
     */
428
    public function getPreviousRunDate($currentTime = 'now', $nth = 0, $allowCurrentDate = false)
429
    {
430
        $this->getCronExpression()->getPreviousRunDate($currentTime, $nth, $allowCurrentDate);
431
    }
432
433
    /* Internals */
434
    /**
435
     * @param $time
436
     * @return array
437
     */
438 14
    protected function parseTime($time)
439
    {
440 14
        $parts = explode(':', $time);
441 14
        return $parts;
442
    }
443
444
    /**
445
     * @param string $date
446
     * @return array
447
     */
448 6
    protected function parseDate($date)
449
    {
450 6
        if (strpos($date, '-')) {
451 4
            $parts = explode('-', $date);
452 4
            return $parts;
453
        } else {
454 5
            $parts = explode('/', $date);
455 5
            return $parts;
456
        }
457
    }
458
459
    /**
460
     * @param string $key
461
     * @param $value
462
     * @param string $deliminator
463
     */
464 21
    protected function appendValue($key, $value, $deliminator = ',')
465
    {
466 21
        $value = $this->forceToArray($value);
467
468 21
        foreach ($value as $item) {
469 21
            if (!is_null($this->$key)) {
470 12
                $this->$key = (string)$this->$key . $deliminator . $item;
471 12
            } else {
472 21
                $this->$key = (string)$item;
473
            }
474 21
        }
475 21
    }
476
477
    /**
478
     * @param $value
479
     * @return array
480
     * @internal param $minute
481
     */
482 21
    protected function forceToArray($value)
483
    {
484 21
        if (!is_array($value)) {
485 21
            return [$value];
486
        }
487
488 3
        return $value;
489
    }
490
}
491