forked from ProcessMaker/processmaker
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRequestError.php
More file actions
88 lines (75 loc) · 2.19 KB
/
RequestError.php
File metadata and controls
88 lines (75 loc) · 2.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<?php
namespace ProcessMaker\Events;
use Carbon\Carbon;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\RateLimiter;
use ProcessMaker\Contracts\SecurityLogEventInterface;
use ProcessMaker\Models\ProcessRequest;
class RequestError implements SecurityLogEventInterface
{
use Dispatchable;
private ProcessRequest $data;
private string $error;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(ProcessRequest $data, string $error)
{
$this->data = $data;
$this->error = $error;
}
/**
* Return event data
*/
public function getData(): array
{
return [
'request' => [
'label' => $this->data->getAttribute('id'),
'link' => route('requests.show', $this->data),
],
'error' => $this->error,
'occurred_at' => Carbon::now(),
];
}
/**
* Return event changes
*/
public function getChanges(): array
{
return [];
}
/**
* return event name
*/
public function getEventName(): string
{
return 'RequestError';
}
/**
* Dispatch the event if the process request is not rate limited
*
* @param ProcessRequest $request
* @param string $error
*
* @return bool
*/
public static function dispatchIfNotRateLimited(ProcessRequest $request, string $error): bool
{
$key = 'process-request-errors:' . $request->getKey();
$limit = config('app.process_request_errors_rate_limit', 1);
Log::info("Rate limit is set to {$limit} for process request errors.");
if (RateLimiter::tooManyAttempts($key, $limit)) {
Log::warning("Process {$request->id} has reached the request error limit for today.");
return false;
}
$duration = config('app.process_request_errors_rate_limit_duration', 86400);
Log::info("Rate limit duration is set to {$duration} for process request errors.");
RateLimiter::hit($key, $duration);
event(new static($request, $error));
return true;
}
}