Skip to content

Commit 25dce2e

Browse files
committed
statis method get header from rules
1 parent 91fe4d3 commit 25dce2e

File tree

4 files changed

+164
-1
lines changed

4 files changed

+164
-1
lines changed

src/Dtos/TraitDtos.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* PHP version 8
55
*
66
* @category Library
7-
* @package Exceptions
7+
* @package Dtos
88
* @author Made Mas Adi Winata <m45adiwinata@gmail.com>
99
* @license https://mit-license.org/ MIT License
1010
* @version GIT: 0.0.4

src/Middlewares/ServiceActivity.php

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace Spotlibs\PhpLib\Middlewares;
4+
5+
use Closure;
6+
use StdClass;
7+
use Illuminate\Support\Facades\Log;
8+
use Spotlibs\PhpLib\Services\ContextService;
9+
10+
class ServiceActivity
11+
{
12+
private ContextService $contextService;
13+
14+
/**
15+
* Create instance of ServiceActivity
16+
* @param \Spotlibs\PhpLib\Services\ContextService $contextService
17+
*/
18+
public function __construct(ContextService $contextService)
19+
{
20+
$this->contextService = $contextService;
21+
}
22+
23+
/**
24+
* Handle an incoming request.
25+
*
26+
* @param \Illuminate\Http\Request $request
27+
* @param \Closure $next
28+
* @return mixed
29+
*/
30+
public function handle($request, Closure $next)
31+
{
32+
$this->contextService->set('method', $request->method());
33+
$this->contextService->set('User-Agent', $request->header('User-Agent'));
34+
$this->contextService->set('Content-Type', $request->header('Content-Type'));
35+
$this->contextService->set('Accept', $request->header('Accept'));
36+
$this->contextService->set('Accept-Encoding', $request->header('Accept-Encoding'));
37+
$this->contextService->set('Cache-Control', $request->header('Cache-Control'));
38+
$this->contextService->set('X-Forwarded-For', $request->header('X-Forwarded-For'));
39+
$this->contextService->set('X-Request-From', $request->header('X-Request-From'));
40+
$this->contextService->set('X-Device-ID', $request->header('X-Device-ID'));
41+
$this->contextService->set('X-App', $request->header('X-App'));
42+
$this->contextService->set('X-Version-App', $request->header('X-Version-App'));
43+
$this->contextService->set('X-Request-ID', $request->header('X-Request-ID'));
44+
$this->contextService->set('X-Request-User', $request->header('X-Request-User'));
45+
$this->contextService->set('X-Request-Nama', $request->header('X-Request-Nama'));
46+
$this->contextService->set('X-Request-Kode-Jabatan', $request->header('X-Request-Kode-Jabatan'));
47+
$this->contextService->set('X-Request-Nama-Jabatan', $request->header('X-Request-Nama-Jabatan'));
48+
$this->contextService->set('X-Request-Kode-Uker', $request->header('X-Request-Kode-Uker'));
49+
$this->contextService->set('X-Request-Nama-Uker', $request->header('X-Request-Nama-Uker'));
50+
$this->contextService->set('X-Request-Jenis-Uker', $request->header('X-Request-Jenis-Uker'));
51+
$this->contextService->set('X-Request-Kode-MainUker', $request->header('X-Request-Kode-MainUker'));
52+
$this->contextService->set('X-Request-Kode-Region', $request->header('X-Request-Kode-Region'));
53+
$this->contextService->set('X-Path-Gateway', $request->header('X-Path-Gateway'));
54+
$this->contextService->set('Authorization', $request->header('Authorization'));
55+
$this->contextService->set('X-Api-Key', $request->header('X-Api-Key'));
56+
57+
return $next($request);
58+
}
59+
60+
/**
61+
* Handle tasks after the response has been sent to the browser.
62+
*
63+
* @param \Illuminate\Http\Request $request
64+
* @param \Illuminate\Http\Response $response
65+
* @return mixed
66+
*/
67+
public function terminate($request, $response)
68+
{
69+
$log = new StdClass;
70+
$log->app_name = getenv('APP_NAME');
71+
$log->host = getenv('HTTP_HOST');
72+
$log->clientip = $request->header('X-Forwarded-For') !== null ? $request->header('X-Forwarded-For') : $request->ip();
73+
$log->clientapp = $request->header('X-App') !== null ? $request->header('X-App') : null;
74+
$log->path = $request->getPathInfo();
75+
$log->path_alias = $request->header('X-Path-Gateway') !== null ? $request->header('X-Path-Gateway') : null;
76+
$log->requestID = $request->header('X-Request-ID') !== null ? $request->header('X-Request-ID') : null;
77+
$log->requestFrom = $request->header('X-Request-From') !== null ? $request->header('X-Request-From') : null;
78+
$log->requestUser = $request->header('X-Request-User') !== null ? $request->header('X-Request-User') : null;
79+
$log->deviceID = $request->header('X-Device-ID') !== null ? $request->header('X-Device-ID') : null;
80+
$log->requestTags = $request->header('X-Request-Tags') !== null ? $request->header('X-Request-Tags') : null;
81+
$log->requestBody = strlen(json_encode($request->all())) < 3000 ? $request->all() : null;
82+
83+
# hashing secret information
84+
if(isset($log->requestBody['password'])) {
85+
$log->requestBody['password'] = hash('sha256', $log->requestBody['password']);
86+
}
87+
$responseObjContent = json_decode($response->getContent());
88+
if(strlen($response->getContent()) > 5000 && isset($responseObjContent->responseData)) {
89+
unset($responseObjContent->responseData);
90+
}
91+
$log->responseBody = $request->getPathInfo() !== '/docs' ? $responseObjContent : ['responseCode' => '00', 'responseDesc' => 'Sukses API Docs'];
92+
$log->responseTime = round((microtime(true) - $request->server('REQUEST_TIME_FLOAT'))*1000);
93+
$log->httpCode = $response->status();
94+
$log->memoryUsage = memory_get_usage();
95+
$log->requestAt = \DateTime::createFromFormat(
96+
'U.u',
97+
number_format((float) $request->server('REQUEST_TIME_FLOAT'), 6, '.', '')
98+
)
99+
->setTimezone(new \DateTimeZone('Asia/Jakarta'))
100+
->format(\DateTimeInterface::RFC3339_EXTENDED);
101+
Log::channel('activity')->info(json_encode($log));
102+
}
103+
}

src/Services/ContextService.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Spotlibs\PhpLib\Services;
6+
7+
class ContextService
8+
{
9+
protected $data = [];
10+
11+
public function set($key, $value)
12+
{
13+
$this->data[$key] = $value;
14+
}
15+
16+
public function get($key)
17+
{
18+
return $this->data[$key] ?? null;
19+
}
20+
21+
}

src/Validations/GeneralValidation.php

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
/**
4+
* PHP version 8
5+
*
6+
* @category Library
7+
* @package Validations
8+
* @author Made Mas Adi Winata <m45adiwinata@gmail.com>
9+
* @license https://mit-license.org/ MIT License
10+
* @version GIT: 0.0.5
11+
* @link https://github.com/spotlibs
12+
*/
13+
14+
declare(strict_types=1);
15+
16+
namespace Spotlibs\PhpLib\Validations;
17+
18+
class GeneralValidation
19+
{
20+
/**
21+
* Get header keys
22+
* @param array $header
23+
* @param array $rules
24+
* @return array
25+
*/
26+
public static function getHeaderFromRules(array $header, array &$rules): array
27+
{
28+
$result = [];
29+
foreach ($rules as $key => $value) {
30+
if (str_contains($value, 'required')) {
31+
if (!isset($header[strtolower($key)])) {
32+
continue;
33+
}
34+
$result[$key] = $header[strtolower($key)][0];
35+
}
36+
}
37+
return $result;
38+
}
39+
}

0 commit comments

Comments
 (0)