Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Webhook Tester

A simple Python-based webhook receiver for testing and debugging webhook integrations.

Overview

Webhook Tester is a lightweight HTTP server that listens for incoming webhook requests, displays their contents, verifies signatures, and saves the received data for analysis. It's designed for testing webhook integrations during development and debugging.

Features

  • Easy Setup: Simple Python script with no external dependencies
  • Real-time Display: View incoming webhook payloads, headers, and metadata in real-time
  • Signature Verification: Verify webhook signatures using HMAC-SHA256
  • Data Export: Save received webhooks to a JSON file for later analysis
  • Configurable: Set host, port, logging level, and shared secret via configuration file

Requirements

  • Python 3.6 or higher

Installation

No installation is required. Simply download the webhook_tester.py script to your machine.

# Make the script executable (Unix-like systems)
chmod +x webhook_tester.py

Usage

Basic Usage

Start the webhook receiver with default settings:

python webhook_tester.py

This will:

  • Start the server on localhost:7999
  • Save received webhooks to webhooks.json
  • Use INFO level logging

Example output:

Example output

Configuration File

The script uses a JSON configuration file (default: webhook_config.json). If the file doesn't exist, a default one will be created automatically with these settings:

{
"host": "localhost",
"port": 7999,
"secret": null,
"output_file": "webhooks.json",
"truncate_output": false,
"log_level": "INFO"
}

You can customize:

  • host: Host address to bind to
  • port: Port to listen on
  • secret: Shared secret for signature verification
  • output_file: Path to save received webhooks
  • truncate_output: Whether to clear the output file on startup
  • log_level: Logging level (INFO, DEBUG, ERROR)

Using a Custom Configuration

python webhook_tester.py --config my_custom_config.json

Using with External Services

To receive webhooks from external services, you'll need to expose your local server to the internet. You can use a tool like smee.io:

```bash# Install smee-client if you haven't alreadynpm install -g smee-client# Create a new channel on smee.io (or use an existing one)# Visit https://smee.io/ and click "Start a new channel"# You'll get a URL like https://smee.io/U3bZl3QanVw30bn# Start the forwarding clientsmee --url https://smee.io/U3bZl3QanVw30bn --target http://127.0.0.1:7999

Use the URL provided by smee.io as your webhook url that voltage will hit with events

Signature Verification

The webhook tester supports signature verification using HMAC-SHA256. To verify signatures:

  1. Add a secret value in your configuration file
  2. Ensure your webhook source is sending the following headers:
    • x-voltage-signature: Base64-encoded HMAC-SHA256 signature
    • x-voltage-timestamp: Timestamp used in the signature calculation

The signature is calculated as:

HMAC-SHA256(shared_secret, payload_string + "." + timestamp)

Reading Webhook Data

When a webhook is received, the following information is displayed:

  • Webhook number and event type
  • Timestamp when the webhook was received
  • Signature verification result (if a secret is configured)

In DEBUG mode, additional information is shown:

  • Request path
  • All request headers
  • Full JSON payload

Saving Webhook Data

Received webhooks are automatically saved to the configured output file in JSON format. Each webhook entry includes:

  • Timestamp
  • Path
  • Headers
  • Payload
  • Signature details
  • Event type

When you stop the webhook tester (by pressing Ctrl+C), you'll see a summary of all received webhooks during that session.

Troubleshooting

  • Need more detailed information: Set log_level to "DEBUG" in your configuration
  • Signature verification fails: Check that the shared secret matches between sender and receiver
  • Can't receive external webhooks: Ensure your server is accessible from the internet (e.g., using localtunnel)
  • JSON parsing errors: Ensure the webhook payload is valid JSON
  • Need to start fresh: Set truncate_output to true in your configuration

About

Small python file that can be used to test webhooks

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Webhook Tester

A simple Python-based webhook receiver for testing and debugging webhook integrations.

Overview

Webhook Tester is a lightweight HTTP server that listens for incoming webhook requests, displays their contents, verifies signatures, and saves the received data for analysis. It's designed for testing webhook integrations during development and debugging.

Features

  • Easy Setup: Simple Python script with no external dependencies
  • Real-time Display: View incoming webhook payloads, headers, and metadata in real-time
  • Signature Verification: Verify webhook signatures using HMAC-SHA256
  • Data Export: Save received webhooks to a JSON file for later analysis
  • Configurable: Set host, port, logging level, and shared secret via configuration file

Requirements

  • Python 3.6 or higher

Installation

No installation is required. Simply download the webhook_tester.py script to your machine.

# Make the script executable (Unix-like systems)
chmod +x webhook_tester.py

Usage

Basic Usage

Start the webhook receiver with default settings:

python webhook_tester.py

This will:

  • Start the server on localhost:7999
  • Save received webhooks to webhooks.json
  • Use INFO level logging

Example output:

Example output

Configuration File

The script uses a JSON configuration file (default: webhook_config.json). If the file doesn't exist, a default one will be created automatically with these settings:

{
"host": "localhost",
"port": 7999,
"secret": null,
"output_file": "webhooks.json",
"truncate_output": false,
"log_level": "INFO"
}

You can customize:

  • host: Host address to bind to
  • port: Port to listen on
  • secret: Shared secret for signature verification
  • output_file: Path to save received webhooks
  • truncate_output: Whether to clear the output file on startup
  • log_level: Logging level (INFO, DEBUG, ERROR)

Using a Custom Configuration

python webhook_tester.py --config my_custom_config.json

Using with External Services

To receive webhooks from external services, you'll need to expose your local server to the internet. You can use a tool like smee.io:

```bash# Install smee-client if you haven't alreadynpm install -g smee-client# Create a new channel on smee.io (or use an existing one)# Visit https://smee.io/ and click "Start a new channel"# You'll get a URL like https://smee.io/U3bZl3QanVw30bn# Start the forwarding clientsmee --url https://smee.io/U3bZl3QanVw30bn --target http://127.0.0.1:7999

Use the URL provided by smee.io as your webhook url that voltage will hit with events

Signature Verification

The webhook tester supports signature verification using HMAC-SHA256. To verify signatures:

  1. Add a secret value in your configuration file
  2. Ensure your webhook source is sending the following headers:
    • x-voltage-signature: Base64-encoded HMAC-SHA256 signature
    • x-voltage-timestamp: Timestamp used in the signature calculation

The signature is calculated as:

HMAC-SHA256(shared_secret, payload_string + "." + timestamp)

Reading Webhook Data

When a webhook is received, the following information is displayed:

  • Webhook number and event type
  • Timestamp when the webhook was received
  • Signature verification result (if a secret is configured)

In DEBUG mode, additional information is shown:

  • Request path
  • All request headers
  • Full JSON payload

Saving Webhook Data

Received webhooks are automatically saved to the configured output file in JSON format. Each webhook entry includes:

  • Timestamp
  • Path
  • Headers
  • Payload
  • Signature details
  • Event type

When you stop the webhook tester (by pressing Ctrl+C), you'll see a summary of all received webhooks during that session.

Troubleshooting

  • Need more detailed information: Set log_level to "DEBUG" in your configuration
  • Signature verification fails: Check that the shared secret matches between sender and receiver
  • Can't receive external webhooks: Ensure your server is accessible from the internet (e.g., using localtunnel)
  • JSON parsing errors: Ensure the webhook payload is valid JSON
  • Need to start fresh: Set truncate_output to true in your configuration

About

Small python file that can be used to test webhooks

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Webhook Tester

A simple Python-based webhook receiver for testing and debugging webhook integrations.

Overview

Webhook Tester is a lightweight HTTP server that listens for incoming webhook requests, displays their contents, verifies signatures, and saves the received data for analysis. It's designed for testing webhook integrations during development and debugging.

Features

  • Easy Setup: Simple Python script with no external dependencies
  • Real-time Display: View incoming webhook payloads, headers, and metadata in real-time
  • Signature Verification: Verify webhook signatures using HMAC-SHA256
  • Data Export: Save received webhooks to a JSON file for later analysis
  • Configurable: Set host, port, logging level, and shared secret via configuration file

Requirements

  • Python 3.6 or higher

Installation

No installation is required. Simply download the webhook_tester.py script to your machine.

# Make the script executable (Unix-like systems)
chmod +x webhook_tester.py

Usage

Basic Usage

Start the webhook receiver with default settings:

python webhook_tester.py

This will:

  • Start the server on localhost:7999
  • Save received webhooks to webhooks.json
  • Use INFO level logging

Example output:

Example output

Configuration File

The script uses a JSON configuration file (default: webhook_config.json). If the file doesn't exist, a default one will be created automatically with these settings:

{
"host": "localhost",
"port": 7999,
"secret": null,
"output_file": "webhooks.json",
"truncate_output": false,
"log_level": "INFO"
}

You can customize:

  • host: Host address to bind to
  • port: Port to listen on
  • secret: Shared secret for signature verification
  • output_file: Path to save received webhooks
  • truncate_output: Whether to clear the output file on startup
  • log_level: Logging level (INFO, DEBUG, ERROR)

Using a Custom Configuration

python webhook_tester.py --config my_custom_config.json

Using with External Services

To receive webhooks from external services, you'll need to expose your local server to the internet. You can use a tool like smee.io:

```bash# Install smee-client if you haven't alreadynpm install -g smee-client# Create a new channel on smee.io (or use an existing one)# Visit https://smee.io/ and click "Start a new channel"# You'll get a URL like https://smee.io/U3bZl3QanVw30bn# Start the forwarding clientsmee --url https://smee.io/U3bZl3QanVw30bn --target http://127.0.0.1:7999

Use the URL provided by smee.io as your webhook url that voltage will hit with events

Signature Verification

The webhook tester supports signature verification using HMAC-SHA256. To verify signatures:

  1. Add a secret value in your configuration file
  2. Ensure your webhook source is sending the following headers:
    • x-voltage-signature: Base64-encoded HMAC-SHA256 signature
    • x-voltage-timestamp: Timestamp used in the signature calculation

The signature is calculated as:

HMAC-SHA256(shared_secret, payload_string + "." + timestamp)

Reading Webhook Data

When a webhook is received, the following information is displayed:

  • Webhook number and event type
  • Timestamp when the webhook was received
  • Signature verification result (if a secret is configured)

In DEBUG mode, additional information is shown:

  • Request path
  • All request headers
  • Full JSON payload

Saving Webhook Data

Received webhooks are automatically saved to the configured output file in JSON format. Each webhook entry includes:

  • Timestamp
  • Path
  • Headers
  • Payload
  • Signature details
  • Event type

When you stop the webhook tester (by pressing Ctrl+C), you'll see a summary of all received webhooks during that session.

Troubleshooting

  • Need more detailed information: Set log_level to "DEBUG" in your configuration
  • Signature verification fails: Check that the shared secret matches between sender and receiver
  • Can't receive external webhooks: Ensure your server is accessible from the internet (e.g., using localtunnel)
  • JSON parsing errors: Ensure the webhook payload is valid JSON
  • Need to start fresh: Set truncate_output to true in your configuration

About

Small python file that can be used to test webhooks

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Webhook Tester

A simple Python-based webhook receiver for testing and debugging webhook integrations.

Overview

Webhook Tester is a lightweight HTTP server that listens for incoming webhook requests, displays their contents, verifies signatures, and saves the received data for analysis. It's designed for testing webhook integrations during development and debugging.

Features

  • Easy Setup: Simple Python script with no external dependencies
  • Real-time Display: View incoming webhook payloads, headers, and metadata in real-time
  • Signature Verification: Verify webhook signatures using HMAC-SHA256
  • Data Export: Save received webhooks to a JSON file for later analysis
  • Configurable: Set host, port, logging level, and shared secret via configuration file

Requirements

  • Python 3.6 or higher

Installation

No installation is required. Simply download the webhook_tester.py script to your machine.

# Make the script executable (Unix-like systems)
chmod +x webhook_tester.py

Usage

Basic Usage

Start the webhook receiver with default settings:

python webhook_tester.py

This will:

  • Start the server on localhost:7999
  • Save received webhooks to webhooks.json
  • Use INFO level logging

Example output:

Example output

Configuration File

The script uses a JSON configuration file (default: webhook_config.json). If the file doesn't exist, a default one will be created automatically with these settings:

{
"host": "localhost",
"port": 7999,
"secret": null,
"output_file": "webhooks.json",
"truncate_output": false,
"log_level": "INFO"
}

You can customize:

  • host: Host address to bind to
  • port: Port to listen on
  • secret: Shared secret for signature verification
  • output_file: Path to save received webhooks
  • truncate_output: Whether to clear the output file on startup
  • log_level: Logging level (INFO, DEBUG, ERROR)

Using a Custom Configuration

python webhook_tester.py --config my_custom_config.json

Using with External Services

To receive webhooks from external services, you'll need to expose your local server to the internet. You can use a tool like smee.io:

```bash# Install smee-client if you haven't alreadynpm install -g smee-client# Create a new channel on smee.io (or use an existing one)# Visit https://smee.io/ and click "Start a new channel"# You'll get a URL like https://smee.io/U3bZl3QanVw30bn# Start the forwarding clientsmee --url https://smee.io/U3bZl3QanVw30bn --target http://127.0.0.1:7999

Use the URL provided by smee.io as your webhook url that voltage will hit with events

Signature Verification

The webhook tester supports signature verification using HMAC-SHA256. To verify signatures:

  1. Add a secret value in your configuration file
  2. Ensure your webhook source is sending the following headers:
    • x-voltage-signature: Base64-encoded HMAC-SHA256 signature
    • x-voltage-timestamp: Timestamp used in the signature calculation

The signature is calculated as:

HMAC-SHA256(shared_secret, payload_string + "." + timestamp)

Reading Webhook Data

When a webhook is received, the following information is displayed:

  • Webhook number and event type
  • Timestamp when the webhook was received
  • Signature verification result (if a secret is configured)

In DEBUG mode, additional information is shown:

  • Request path
  • All request headers
  • Full JSON payload

Saving Webhook Data

Received webhooks are automatically saved to the configured output file in JSON format. Each webhook entry includes:

  • Timestamp
  • Path
  • Headers
  • Payload
  • Signature details
  • Event type

When you stop the webhook tester (by pressing Ctrl+C), you'll see a summary of all received webhooks during that session.

Troubleshooting

  • Need more detailed information: Set log_level to "DEBUG" in your configuration
  • Signature verification fails: Check that the shared secret matches between sender and receiver
  • Can't receive external webhooks: Ensure your server is accessible from the internet (e.g., using localtunnel)
  • JSON parsing errors: Ensure the webhook payload is valid JSON
  • Need to start fresh: Set truncate_output to true in your configuration

About

Small python file that can be used to test webhooks

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Webhook Tester

A simple Python-based webhook receiver for testing and debugging webhook integrations.

Overview

Webhook Tester is a lightweight HTTP server that listens for incoming webhook requests, displays their contents, verifies signatures, and saves the received data for analysis. It's designed for testing webhook integrations during development and debugging.

Features

  • Easy Setup: Simple Python script with no external dependencies
  • Real-time Display: View incoming webhook payloads, headers, and metadata in real-time
  • Signature Verification: Verify webhook signatures using HMAC-SHA256
  • Data Export: Save received webhooks to a JSON file for later analysis
  • Configurable: Set host, port, logging level, and shared secret via configuration file

Requirements

  • Python 3.6 or higher

Installation

No installation is required. Simply download the webhook_tester.py script to your machine.

# Make the script executable (Unix-like systems)
chmod +x webhook_tester.py

Usage

Basic Usage

Start the webhook receiver with default settings:

python webhook_tester.py

This will:

  • Start the server on localhost:7999
  • Save received webhooks to webhooks.json
  • Use INFO level logging

Example output:

Example output

Configuration File

The script uses a JSON configuration file (default: webhook_config.json). If the file doesn't exist, a default one will be created automatically with these settings:

{
"host": "localhost",
"port": 7999,
"secret": null,
"output_file": "webhooks.json",
"truncate_output": false,
"log_level": "INFO"
}

You can customize:

  • host: Host address to bind to
  • port: Port to listen on
  • secret: Shared secret for signature verification
  • output_file: Path to save received webhooks
  • truncate_output: Whether to clear the output file on startup
  • log_level: Logging level (INFO, DEBUG, ERROR)

Using a Custom Configuration

python webhook_tester.py --config my_custom_config.json

Using with External Services

To receive webhooks from external services, you'll need to expose your local server to the internet. You can use a tool like smee.io:

```bash# Install smee-client if you haven't alreadynpm install -g smee-client# Create a new channel on smee.io (or use an existing one)# Visit https://smee.io/ and click "Start a new channel"# You'll get a URL like https://smee.io/U3bZl3QanVw30bn# Start the forwarding clientsmee --url https://smee.io/U3bZl3QanVw30bn --target http://127.0.0.1:7999

Use the URL provided by smee.io as your webhook url that voltage will hit with events

Signature Verification

The webhook tester supports signature verification using HMAC-SHA256. To verify signatures:

  1. Add a secret value in your configuration file
  2. Ensure your webhook source is sending the following headers:
    • x-voltage-signature: Base64-encoded HMAC-SHA256 signature
    • x-voltage-timestamp: Timestamp used in the signature calculation

The signature is calculated as:

HMAC-SHA256(shared_secret, payload_string + "." + timestamp)

Reading Webhook Data

When a webhook is received, the following information is displayed:

  • Webhook number and event type
  • Timestamp when the webhook was received
  • Signature verification result (if a secret is configured)

In DEBUG mode, additional information is shown:

  • Request path
  • All request headers
  • Full JSON payload

Saving Webhook Data

Received webhooks are automatically saved to the configured output file in JSON format. Each webhook entry includes:

  • Timestamp
  • Path
  • Headers
  • Payload
  • Signature details
  • Event type

When you stop the webhook tester (by pressing Ctrl+C), you'll see a summary of all received webhooks during that session.

Troubleshooting

  • Need more detailed information: Set log_level to "DEBUG" in your configuration
  • Signature verification fails: Check that the shared secret matches between sender and receiver
  • Can't receive external webhooks: Ensure your server is accessible from the internet (e.g., using localtunnel)
  • JSON parsing errors: Ensure the webhook payload is valid JSON
  • Need to start fresh: Set truncate_output to true in your configuration

About

Small python file that can be used to test webhooks

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Webhook Tester

A simple Python-based webhook receiver for testing and debugging webhook integrations.

Overview

Webhook Tester is a lightweight HTTP server that listens for incoming webhook requests, displays their contents, verifies signatures, and saves the received data for analysis. It's designed for testing webhook integrations during development and debugging.

Features

  • Easy Setup: Simple Python script with no external dependencies
  • Real-time Display: View incoming webhook payloads, headers, and metadata in real-time
  • Signature Verification: Verify webhook signatures using HMAC-SHA256
  • Data Export: Save received webhooks to a JSON file for later analysis
  • Configurable: Set host, port, logging level, and shared secret via configuration file

Requirements

  • Python 3.6 or higher

Installation

No installation is required. Simply download the webhook_tester.py script to your machine.

# Make the script executable (Unix-like systems)
chmod +x webhook_tester.py

Usage

Basic Usage

Start the webhook receiver with default settings:

python webhook_tester.py

This will:

  • Start the server on localhost:7999
  • Save received webhooks to webhooks.json
  • Use INFO level logging

Example output:

Example output

Configuration File

The script uses a JSON configuration file (default: webhook_config.json). If the file doesn't exist, a default one will be created automatically with these settings:

{
"host": "localhost",
"port": 7999,
"secret": null,
"output_file": "webhooks.json",
"truncate_output": false,
"log_level": "INFO"
}

You can customize:

  • host: Host address to bind to
  • port: Port to listen on
  • secret: Shared secret for signature verification
  • output_file: Path to save received webhooks
  • truncate_output: Whether to clear the output file on startup
  • log_level: Logging level (INFO, DEBUG, ERROR)

Using a Custom Configuration

python webhook_tester.py --config my_custom_config.json

Using with External Services

To receive webhooks from external services, you'll need to expose your local server to the internet. You can use a tool like smee.io:

```bash# Install smee-client if you haven't alreadynpm install -g smee-client# Create a new channel on smee.io (or use an existing one)# Visit https://smee.io/ and click "Start a new channel"# You'll get a URL like https://smee.io/U3bZl3QanVw30bn# Start the forwarding clientsmee --url https://smee.io/U3bZl3QanVw30bn --target http://127.0.0.1:7999

Use the URL provided by smee.io as your webhook url that voltage will hit with events

Signature Verification

The webhook tester supports signature verification using HMAC-SHA256. To verify signatures:

  1. Add a secret value in your configuration file
  2. Ensure your webhook source is sending the following headers:
    • x-voltage-signature: Base64-encoded HMAC-SHA256 signature
    • x-voltage-timestamp: Timestamp used in the signature calculation

The signature is calculated as:

HMAC-SHA256(shared_secret, payload_string + "." + timestamp)

Reading Webhook Data

When a webhook is received, the following information is displayed:

  • Webhook number and event type
  • Timestamp when the webhook was received
  • Signature verification result (if a secret is configured)

In DEBUG mode, additional information is shown:

  • Request path
  • All request headers
  • Full JSON payload

Saving Webhook Data

Received webhooks are automatically saved to the configured output file in JSON format. Each webhook entry includes:

  • Timestamp
  • Path
  • Headers
  • Payload
  • Signature details
  • Event type

When you stop the webhook tester (by pressing Ctrl+C), you'll see a summary of all received webhooks during that session.

Troubleshooting

  • Need more detailed information: Set log_level to "DEBUG" in your configuration
  • Signature verification fails: Check that the shared secret matches between sender and receiver
  • Can't receive external webhooks: Ensure your server is accessible from the internet (e.g., using localtunnel)
  • JSON parsing errors: Ensure the webhook payload is valid JSON
  • Need to start fresh: Set truncate_output to true in your configuration

About

Small python file that can be used to test webhooks

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Webhook Tester

A simple Python-based webhook receiver for testing and debugging webhook integrations.

Overview

Webhook Tester is a lightweight HTTP server that listens for incoming webhook requests, displays their contents, verifies signatures, and saves the received data for analysis. It's designed for testing webhook integrations during development and debugging.

Features

  • Easy Setup: Simple Python script with no external dependencies
  • Real-time Display: View incoming webhook payloads, headers, and metadata in real-time
  • Signature Verification: Verify webhook signatures using HMAC-SHA256
  • Data Export: Save received webhooks to a JSON file for later analysis
  • Configurable: Set host, port, logging level, and shared secret via configuration file

Requirements

  • Python 3.6 or higher

Installation

No installation is required. Simply download the webhook_tester.py script to your machine.

# Make the script executable (Unix-like systems)
chmod +x webhook_tester.py

Usage

Basic Usage

Start the webhook receiver with default settings:

python webhook_tester.py

This will:

  • Start the server on localhost:7999
  • Save received webhooks to webhooks.json
  • Use INFO level logging

Example output:

Example output

Configuration File

The script uses a JSON configuration file (default: webhook_config.json). If the file doesn't exist, a default one will be created automatically with these settings:

{
"host": "localhost",
"port": 7999,
"secret": null,
"output_file": "webhooks.json",
"truncate_output": false,
"log_level": "INFO"
}

You can customize:

  • host: Host address to bind to
  • port: Port to listen on
  • secret: Shared secret for signature verification
  • output_file: Path to save received webhooks
  • truncate_output: Whether to clear the output file on startup
  • log_level: Logging level (INFO, DEBUG, ERROR)

Using a Custom Configuration

python webhook_tester.py --config my_custom_config.json

Using with External Services

To receive webhooks from external services, you'll need to expose your local server to the internet. You can use a tool like smee.io:

```bash# Install smee-client if you haven't alreadynpm install -g smee-client# Create a new channel on smee.io (or use an existing one)# Visit https://smee.io/ and click "Start a new channel"# You'll get a URL like https://smee.io/U3bZl3QanVw30bn# Start the forwarding clientsmee --url https://smee.io/U3bZl3QanVw30bn --target http://127.0.0.1:7999

Use the URL provided by smee.io as your webhook url that voltage will hit with events

Signature Verification

The webhook tester supports signature verification using HMAC-SHA256. To verify signatures:

  1. Add a secret value in your configuration file
  2. Ensure your webhook source is sending the following headers:
    • x-voltage-signature: Base64-encoded HMAC-SHA256 signature
    • x-voltage-timestamp: Timestamp used in the signature calculation

The signature is calculated as:

HMAC-SHA256(shared_secret, payload_string + "." + timestamp)

Reading Webhook Data

When a webhook is received, the following information is displayed:

  • Webhook number and event type
  • Timestamp when the webhook was received
  • Signature verification result (if a secret is configured)

In DEBUG mode, additional information is shown:

  • Request path
  • All request headers
  • Full JSON payload

Saving Webhook Data

Received webhooks are automatically saved to the configured output file in JSON format. Each webhook entry includes:

  • Timestamp
  • Path
  • Headers
  • Payload
  • Signature details
  • Event type

When you stop the webhook tester (by pressing Ctrl+C), you'll see a summary of all received webhooks during that session.

Troubleshooting

  • Need more detailed information: Set log_level to "DEBUG" in your configuration
  • Signature verification fails: Check that the shared secret matches between sender and receiver
  • Can't receive external webhooks: Ensure your server is accessible from the internet (e.g., using localtunnel)
  • JSON parsing errors: Ensure the webhook payload is valid JSON
  • Need to start fresh: Set truncate_output to true in your configuration

About

Small python file that can be used to test webhooks

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Webhook Tester

A simple Python-based webhook receiver for testing and debugging webhook integrations.

Overview

Webhook Tester is a lightweight HTTP server that listens for incoming webhook requests, displays their contents, verifies signatures, and saves the received data for analysis. It's designed for testing webhook integrations during development and debugging.

Features

  • Easy Setup: Simple Python script with no external dependencies
  • Real-time Display: View incoming webhook payloads, headers, and metadata in real-time
  • Signature Verification: Verify webhook signatures using HMAC-SHA256
  • Data Export: Save received webhooks to a JSON file for later analysis
  • Configurable: Set host, port, logging level, and shared secret via configuration file

Requirements

  • Python 3.6 or higher

Installation

No installation is required. Simply download the webhook_tester.py script to your machine.

# Make the script executable (Unix-like systems)
chmod +x webhook_tester.py

Usage

Basic Usage

Start the webhook receiver with default settings:

python webhook_tester.py

This will:

  • Start the server on localhost:7999
  • Save received webhooks to webhooks.json
  • Use INFO level logging

Example output:

Example output

Configuration File

The script uses a JSON configuration file (default: webhook_config.json). If the file doesn't exist, a default one will be created automatically with these settings:

{
"host": "localhost",
"port": 7999,
"secret": null,
"output_file": "webhooks.json",
"truncate_output": false,
"log_level": "INFO"
}

You can customize:

  • host: Host address to bind to
  • port: Port to listen on
  • secret: Shared secret for signature verification
  • output_file: Path to save received webhooks
  • truncate_output: Whether to clear the output file on startup
  • log_level: Logging level (INFO, DEBUG, ERROR)

Using a Custom Configuration

python webhook_tester.py --config my_custom_config.json

Using with External Services

To receive webhooks from external services, you'll need to expose your local server to the internet. You can use a tool like smee.io:

```bash# Install smee-client if you haven't alreadynpm install -g smee-client# Create a new channel on smee.io (or use an existing one)# Visit https://smee.io/ and click "Start a new channel"# You'll get a URL like https://smee.io/U3bZl3QanVw30bn# Start the forwarding clientsmee --url https://smee.io/U3bZl3QanVw30bn --target http://127.0.0.1:7999

Use the URL provided by smee.io as your webhook url that voltage will hit with events

Signature Verification

The webhook tester supports signature verification using HMAC-SHA256. To verify signatures:

  1. Add a secret value in your configuration file
  2. Ensure your webhook source is sending the following headers:
    • x-voltage-signature: Base64-encoded HMAC-SHA256 signature
    • x-voltage-timestamp: Timestamp used in the signature calculation

The signature is calculated as:

HMAC-SHA256(shared_secret, payload_string + "." + timestamp)

Reading Webhook Data

When a webhook is received, the following information is displayed:

  • Webhook number and event type
  • Timestamp when the webhook was received
  • Signature verification result (if a secret is configured)

In DEBUG mode, additional information is shown:

  • Request path
  • All request headers
  • Full JSON payload

Saving Webhook Data

Received webhooks are automatically saved to the configured output file in JSON format. Each webhook entry includes:

  • Timestamp
  • Path
  • Headers
  • Payload
  • Signature details
  • Event type

When you stop the webhook tester (by pressing Ctrl+C), you'll see a summary of all received webhooks during that session.

Troubleshooting

  • Need more detailed information: Set log_level to "DEBUG" in your configuration
  • Signature verification fails: Check that the shared secret matches between sender and receiver
  • Can't receive external webhooks: Ensure your server is accessible from the internet (e.g., using localtunnel)
  • JSON parsing errors: Ensure the webhook payload is valid JSON
  • Need to start fresh: Set truncate_output to true in your configuration

About

Small python file that can be used to test webhooks

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages