{"id":45191359,"url":"https://github.com/ahmad-alkadri/simple-depot","last_synced_at":"2026-02-20T12:03:51.113Z","repository":{"id":308989326,"uuid":"1027593983","full_name":"ahmad-alkadri/simple-depot","owner":"ahmad-alkadri","description":"Lightweight Go HTTP server for capturing and saving incoming request payloads locally","archived":false,"fork":false,"pushed_at":"2025-08-09T03:35:48.000Z","size":5,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-09T05:32:33.260Z","etag":null,"topics":["go","golang","payload-bin","request-baskets","request-bin"],"latest_commit_sha":null,"homepage":"","language":"Go","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/ahmad-alkadri.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}},"created_at":"2025-07-28T08:43:49.000Z","updated_at":"2025-07-28T08:45:23.000Z","dependencies_parsed_at":"2025-08-16T01:45:36.918Z","dependency_job_id":null,"html_url":"https://github.com/ahmad-alkadri/simple-depot","commit_stats":null,"previous_names":["ahmad-alkadri/simple-depot"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/ahmad-alkadri/simple-depot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ahmad-alkadri%2Fsimple-depot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ahmad-alkadri%2Fsimple-depot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ahmad-alkadri%2Fsimple-depot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ahmad-alkadri%2Fsimple-depot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ahmad-alkadri","download_url":"https://codeload.github.com/ahmad-alkadri/simple-depot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ahmad-alkadri%2Fsimple-depot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29650504,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-20T09:27:29.698Z","status":"ssl_error","status_checked_at":"2026-02-20T09:26:12.373Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["go","golang","payload-bin","request-baskets","request-bin"],"created_at":"2026-02-20T12:03:51.050Z","updated_at":"2026-02-20T12:03:51.106Z","avatar_url":"https://github.com/ahmad-alkadri.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Simple Depot\n\n**simple-depot** is a lightweight, extensible Go HTTP server for capturing, storing, and inspecting incoming HTTP request payloads. It supports JSON, multipart form data, and arbitrary binary data, saving them locally or to a MinIO/S3-compatible backend. Designed for debugging, prototyping, and webhook testing.\n\n---\n\n## Table of Contents\n1. [File Structure](#file-structure)\n2. [Features](#features)\n3. [Setup \u0026 Development Environment](#setup--development-environment)\n4. [Configuration](#configuration)\n5. [Launching the Server](#launching-the-server)\n6. [API Usage](#api-usage)\n7. [Listing \u0026 Retrieving Payloads](#listing--retrieving-payloads)\n8. [Extending \u0026 Customizing](#extending--customizing)\n9. [Future Enhancements](#future-enhancements)\n10. [License](#license)\n\n---\n\n## File Structure\n\n```\nsimple-depot/\n├── cmd/                 # Entry points (API server)\n├── internal/\n│   ├── config/          # Configuration management\n│   ├── handlers/        # HTTP handlers (Depot, List, Get)\n│   ├── http/            # HTTP utilities\n│   ├── middleware/      # Middleware (auth, logging, etc.)\n│   ├── payload/         # Payload processing logic\n│   ├── services/        # Service interfaces \u0026 implementations\n│   ├── storage/         # Storage backends (local, MinIO)\n├── pkg/                 # Shared utilities\n├── testdata/            # Sample payloads for testing\n├── tests/               # Unit \u0026 integration tests\n├── tmp/                 # Default local payload storage\n├── main.go              # Main server entry point\n├── go.mod, go.sum       # Go modules\n├── LICENSE              # MIT License\n├── README.md            # This file\n└── ...\n```\n\n---\n\n## Features\n\n- **HTTP POST endpoint** at `/depot` for capturing payloads\n- **Supports**: JSON, multipart file uploads, arbitrary binary data\n- **Asynchronous storage** to local `tmp/` or MinIO/S3\n- **List \u0026 retrieve** stored payloads via `/list` and `/get`\n- **Zero dependencies** (uses Go standard library)\n- **Extensible**: add storage backends, UI, metadata, authentication\n\n---\n\n## Setup \u0026 Development Environment\n\n### Prerequisites\n\nTo set up the development environment, ensure you have the following tools installed:\n\n- **Go** (version 1.18 or later)\n- **Git** (for cloning the repository)\n- **curl** (for sending HTTP requests to test endpoints)\n- **VS Code** (recommended for development)\n- **Docker** (optional, for running in containers or using dev containers)\n- **MinIO** (optional, if you want to test S3-compatible storage backend)\n- **make** (optional, for build/test automation)\n\n### Clone \u0026 Install\n\n```bash\ngit clone https://github.com/ahmad-alkadri/simple-depot.git\ncd simple-depot\ngo mod tidy\n```\n\n---\n\n## Configuration\n\n- **Default port**: `3003`\n- **Default storage**: `./tmp` (local directory)\n- **MinIO/S3 support**: Configure in `main.go` or via `internal/config/config.go`\n- **Customizing**: Change port, storage backend, or other settings in config files or code.\n\n---\n\n## Launching the Server\n\n### Direct Run\n```bash\ngo run main.go\n```\n\n### Build \u0026 Run\n```bash\ngo build -o simple-depot main.go\n./simple-depot\n```\n\nYou should see:\n```\nServer listening on :3003\n```\n\n---\n\n## API Usage\n\n### 1. Capture Payload (`POST /depot`)\n\nSend requests to `http://localhost:3003/depot`:\n\n- **JSON**\n  ```bash\n  curl -X POST \\\n    -H \"Content-Type: application/json\" \\\n    -d '{\"message\":\"Hello World\"}' \\\n    http://localhost:3003/depot\n  ```\n\n- **Multipart File Upload**\n  ```bash\n  curl -X POST \\\n    -F \"file=@/path/to/local-file.txt\" \\\n    http://localhost:3003/depot\n  ```\n\n- **Binary Data**\n  ```bash\n  curl -X POST \\\n    --data-binary @/path/to/image.png \\\n    -H \"Content-Type: application/octet-stream\" \\\n    http://localhost:3003/depot\n  ```\n\n**Response:**\nReturns JSON with request ID, payload size, timestamp, and filename.\n\n### 2. List All Payloads (`GET /list`)\n\n```bash\ncurl -X GET http://localhost:3003/list\n```\nReturns a JSON array of stored payloads and their metadata.\n\n### 3. Retrieve Payload (`GET /get?request_id=\u003cid\u003e\u0026raw=true|false`)\n\n```bash\ncurl -X GET \"http://localhost:3003/get?request_id=\u003cid\u003e\u0026raw=true\"\n```\n- If `raw=true`, returns the file (or zip if multiple files) as a download.\n- If `raw=false` (default), returns JSON metadata and base64-encoded payload.\n\n---\n\n## Output \u0026 Storage\n\n- **JSON bodies**: `tmp/\u003ctimestamp\u003e.json`\n- **Multipart files**: `tmp/\u003coriginal_filename\u003e`\n- **Binary data**: `tmp/\u003ctimestamp\u003e.bin`\n- **MinIO/S3**: If configured, files are stored in the specified bucket.\n\nLogs include request timestamp, payload size, and file paths.\n\n---\n\n## Extending \u0026 Customizing\n\n- Add new storage backends in `internal/storage/`\n- Implement authentication in `internal/middleware/`\n- Add metadata extraction in `internal/payload/`\n- UI/web frontend can be added for browsing payloads\n\n---\n\n## Future Enhancements\n\n- Database/cloud storage backends (AWS S3, etc.)\n- Web UI for browsing requests\n- Configurable endpoints \u0026 storage locations\n- Authentication \u0026 access control\n- Structured metadata (headers, query params, IP)\n\n---\n\n## License\n\nMIT License. See [LICENSE](LICENSE).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fahmad-alkadri%2Fsimple-depot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fahmad-alkadri%2Fsimple-depot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fahmad-alkadri%2Fsimple-depot/lists"}