implemented server side webhook request side debugging. Closes #251

This commit is contained in:
abdulmohsen
2022-10-27 16:37:00 +03:00
parent 3cf63bd39e
commit dfe91149cf
5 changed files with 29 additions and 29 deletions

32
FAQ.md
View File

@@ -146,22 +146,22 @@ $ docker exec -ti watchstate console system:env
These environment variables relates to the tool itself, you can load them via the recommended methods. These environment variables relates to the tool itself, you can load them via the recommended methods.
| Key | Type | Description | Default | | Key | Type | Description | Default |
|--------------------------|---------|-------------------------------------------------------------------------------|--------------------| |--------------------------|---------|-------------------------------------------------------------------------|--------------------|
| WS_DATA_PATH | string | Where to store main data. (config, db). | `${BASE_PATH}/var` | | WS_DATA_PATH | string | Where to store main data. (config, db). | `${BASE_PATH}/var` |
| WS_TMP_DIR | string | Where to store temp data. (logs, cache) | `${WS_DATA_PATH}` | | WS_TMP_DIR | string | Where to store temp data. (logs, cache) | `${WS_DATA_PATH}` |
| WS_TZ | string | Set timezone. | `UTC` | | WS_TZ | string | Set timezone. | `UTC` |
| WS_CRON_{TASK} | bool | Enable {task} task. Value casted to bool. | `false` | | WS_CRON_{TASK} | bool | Enable {task} task. Value casted to bool. | `false` |
| WS_CRON_{TASK}_AT | string | When to run {task} task. Valid Cron Expression Expected. | `*/1 * * * *` | | WS_CRON_{TASK}_AT | string | When to run {task} task. Valid Cron Expression Expected. | `*/1 * * * *` |
| WS_CRON_{TASK}_ARGS | string | Flags to pass to the {task} command. | `-v` | | WS_CRON_{TASK}_ARGS | string | Flags to pass to the {task} command. | `-v` |
| WS_LOGS_CONTEXT | bool | Add context to console output messages. | `false` | | WS_LOGS_CONTEXT | bool | Add context to console output messages. | `false` |
| WS_LOGGER_FILE_ENABLE | bool | Save logs to file. | `true` | | WS_LOGGER_FILE_ENABLE | bool | Save logs to file. | `true` |
| WS_LOGGER_FILE_LEVEL | string | File Logger Level. | `ERROR` | | WS_LOGGER_FILE_LEVEL | string | File Logger Level. | `ERROR` |
| WS_WEBHOOK_DEBUG | bool | If enabled, allow dumping request/webhook using `rdump` & `wdump` parameters. | `false` | | WS_WEBHOOK_DUMP_REQUEST | bool | If enabled, will dump all received requests. | `false` |
| WS_EPISODES_DISABLE_GUID | bool | Disable external id parsing for episodes and rely on relative ids. | `true` | | WS_EPISODES_DISABLE_GUID | bool | Disable external id parsing for episodes and rely on relative ids. | `true` |
| WS_TRUST_PROXY | bool | Trust `WS_TRUST_HEADER` ip. Value casted to bool. | `false` | | WS_TRUST_PROXY | bool | Trust `WS_TRUST_HEADER` ip. Value casted to bool. | `false` |
| WS_TRUST_HEADER | string | Which header contain user true IP. | `X-Forwarded-For` | | WS_TRUST_HEADER | string | Which header contain user true IP. | `X-Forwarded-For` |
| WS_LIBRARY_SEGMENT | integer | Paginate backend library items request. Per request get total X number. | `1000` | | WS_LIBRARY_SEGMENT | integer | Paginate backend library items request. Per request get total X number. | `1000` |
**Note**: for environment variables that has `{TASK}` tag, you **MUST** replace it with one **Note**: for environment variables that has `{TASK}` tag, you **MUST** replace it with one
of `IMPORT`, `EXPORT`, `PUSH`, `BACKUP`, `PRUNE`, `INDEXES`, `REQUESTS`. To see tasks active settings run of `IMPORT`, `EXPORT`, `PUSH`, `BACKUP`, `PRUNE`, `INDEXES`, `REQUESTS`. To see tasks active settings run

View File

@@ -16,5 +16,6 @@ return [
'webhook.match.user', 'webhook.match.user',
'webhook.match.uuid', 'webhook.match.uuid',
'webhook.token', 'webhook.token',
'options.ignore' 'options.ignore',
'options.DUMP_PAYLOAD',
]; ];

View File

@@ -76,7 +76,8 @@ return (function () {
$config['webhook'] = [ $config['webhook'] = [
'logfile' => ag($config, 'tmpDir') . '/logs/access.' . $logDateFormat . '.log', 'logfile' => ag($config, 'tmpDir') . '/logs/access.' . $logDateFormat . '.log',
'debug' => (bool)env('WS_WEBHOOK_DEBUG', false), 'debug' => (bool)env('WS_WEBHOOK_DEBUG', false),
'tokenLength' => 16, 'dumpRequest' => (bool)env('WS_WEBHOOK_DUMP_REQUEST', false),
'tokenLength' => (int)env('WS_WEBHOOK_TOKEN_LENGTH', 16),
]; ];
$config['mapper'] = [ $config['mapper'] = [

View File

@@ -167,15 +167,12 @@ final class Initializer
$httpException = (true === ($e instanceof HttpException)); $httpException = (true === ($e instanceof HttpException));
if (false === $httpException || $e->getCode() !== 200) { if (false === $httpException || $e->getCode() !== 200) {
Container::get(LoggerInterface::class)->error( Container::get(LoggerInterface::class)->error($e->getMessage(), [
$e->getMessage(), 'file' => $e->getFile(),
[ 'line' => $e->getLine(),
'file' => $e->getFile(), 'kind' => get_class($e),
'line' => $e->getLine(), 'trace' => $e->getTrace(),
'kind' => get_class($e), ]);
'trace' => $e->getTrace(),
]
);
} }
$response = new Response( $response = new Response(
@@ -205,7 +202,7 @@ final class Initializer
} }
// -- Save request payload. // -- Save request payload.
if (true === Config::get('webhook.debug') && true === (bool)ag($realRequest->getQueryParams(), 'rdump')) { if (true === Config::get('webhook.dumpRequest')) {
saveRequestPayload($realRequest); saveRequestPayload($realRequest);
} }
@@ -326,7 +323,7 @@ final class Initializer
$entity = $class->parseWebhook($request); $entity = $class->parseWebhook($request);
// -- Dump Webhook context. // -- Dump Webhook context.
if (true === Config::get('webhook.debug') && true === (bool)ag($request->getQueryParams(), 'wdump')) { if (true === (bool)ag($backend, 'options.' . Options::DUMP_PAYLOAD)) {
saveWebhookPayload($entity, $request); saveWebhookPayload($entity, $request);
} }

View File

@@ -21,6 +21,7 @@ final class Options
public const DISABLE_GUID = 'DISABLE_GUID'; public const DISABLE_GUID = 'DISABLE_GUID';
public const LIBRARY_SEGMENT = 'LIBRARY_SEGMENT'; public const LIBRARY_SEGMENT = 'LIBRARY_SEGMENT';
public const STATE_UPDATE_EVENT = 'STATE_UPDATE_EVENT'; public const STATE_UPDATE_EVENT = 'STATE_UPDATE_EVENT';
public const DUMP_PAYLOAD = 'DUMP_PAYLOAD';
private function __construct() private function __construct()
{ {