{"id":19706438,"url":"https://github.com/superioone/endpoint_proxy","last_synced_at":"2026-06-11T08:31:21.162Z","repository":{"id":197675820,"uuid":"699069773","full_name":"SuperioOne/endpoint_proxy","owner":"SuperioOne","description":"Small endpoint proxy server","archived":false,"fork":false,"pushed_at":"2025-09-21T05:18:34.000Z","size":134,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-11-22T08:29:10.812Z","etag":null,"topics":["self-hosted","tool"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SuperioOne.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":"2023-10-01T20:29:06.000Z","updated_at":"2025-09-21T05:18:38.000Z","dependencies_parsed_at":"2024-11-11T21:45:44.437Z","dependency_job_id":null,"html_url":"https://github.com/SuperioOne/endpoint_proxy","commit_stats":null,"previous_names":["superioone/endpoint_proxy"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/SuperioOne/endpoint_proxy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SuperioOne%2Fendpoint_proxy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SuperioOne%2Fendpoint_proxy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SuperioOne%2Fendpoint_proxy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SuperioOne%2Fendpoint_proxy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SuperioOne","download_url":"https://codeload.github.com/SuperioOne/endpoint_proxy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SuperioOne%2Fendpoint_proxy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34190583,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-11T02:00:06.485Z","response_time":57,"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":["self-hosted","tool"],"created_at":"2024-11-11T21:35:31.361Z","updated_at":"2026-06-11T08:31:21.145Z","avatar_url":"https://github.com/SuperioOne.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Endpoint Proxy\n\nBasic HTTP utility server for map external URLs to a route with pre-configured headers, body content, HTTP methods, and\nquery parameters.\n\n- [Usage](#usage)\n    - [Binary](#binary)\n    - [Docker](#docker)\n    - [Kubernetes basic example](#kubernetes-basic-example)\n- [Server Configuration](#server-configuration)\n    - [CLI arguments](#cli-arguments)\n    - [Container environment variables](#container-environment-variables)\n- [Endpoint Configuration](#endpoint-configuration)\n    - [Configuration options](#configuration-options)\n- [Building From Source](#building-from-source)\n- [License](#license)\n\n## Usage\n\n### Binary\n\n1. Create a `config.yaml` file with URL configurations.\n    ```yaml\n    # config.yaml\n    proxy_urls:\n      - path: \"/my-ip\"\n        url: \"http://ip-api.com/json\"\n        headers:\n          - name: \"Accept\"\n            value: \"application/json\"\n    ```\n2. Start `endpoint_proxy` executable.\n    ```shell\n     endpoint_proxy --config-file config.yaml\n    ``` \n3. Test the service\n    ```shell\n    curl http://localhost:8080/my-ip\n    ```\n\n\u003e See [CLI Arguments](#cli-arguments) for available options.\n\n### Docker\n\n1. Create a `config.yaml` file.\n2. Start container with config file mounted to `/etc/endpoint_proxy/config.yaml`.\n    ```shell\n     docker run -v $(pwd)/config.yaml:/etc/endpoint_proxy/config.yaml -p 8080:8080 ghcr.io/superioone/endpoint_proxy:latest\n    ```\n3. Test the service.\n    ```shell\n    curl http://localhost:8080/my-ip\n    ```\n\n\u003e See [Container Environment Variables](#container-environment-variables) for available options.\n\n### Kubernetes basic example\n\n```yaml\n# Endpoint configuration file as config map.\napiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: endpoint-proxy-configmap\ndata:\n  config.yaml: |\n    proxy_urls:\n      - path: /my-ip\n        url: http://ip-api.com/json\n        headers:\n          - name: Accept\n            value: application/json\n      - path: /posts\n        url: https://jsonplaceholder.typicode.com/posts\n        headers:\n          - name: Accept\n            value: application/json\n      - path: /posts\n        url: https://jsonplaceholder.typicode.com/posts\n        method: post\n        default_body: |\n          {\n            \"title\": \"foo\",\n            \"body\": \"bar\",\n            \"userId\": 1\n          }\n        headers:\n          - name: \"Accept\"\n            value: \"application/json\"\n          - name: \"Content-Type\"\n            value: \"application/json\"\n\n---\napiVersion: v1\nkind: Pod\nmetadata:\n  name: myapp\n  labels:\n    name: myapp\nspec:\n  volumes:\n    - name: endpoint-config-file\n      configMap:\n        name: endpoint-proxy-configmap\n  containers:\n    - name: myapp\n      image: ghcr.io/superioone/endpoint_proxy:latest\n      ports:\n        - containerPort: 8080             # Expose the same port from 'HTTP_PORT' env variable.\n      volumeMounts:\n        - name: endpoint-config-file\n          mountPath: /etc/endpoint_proxy  # Make sure mount point is valid for 'ROUTE_CONF_LOCATION' env variable.\n```\n\n## Server Configuration\n\n### CLI arguments\n\n| Name                | Default Value       | Allowed values                                                            |\n|---------------------|---------------------|---------------------------------------------------------------------------|\n| `--log-level`       | `INFO`              | `INFO`, `DEBUG`, `WARN`, `ERROR`, `OFF`, `TRACE`                          |\n| `--bind`            | `0.0.0.0`           | `IP Address`                                                              |\n| `--port`            | `8080`              | 1-65535                                                                   |\n| `--proxy-url`       | -                   | Proxy server URL. `socks5://xyz.com`, `http://xyz.com`, `https://xyz.com` |\n| `--proxy-auth-user` | -                   | (Optional) Proxy server authentication user                               |\n| `--proxy-auth-pass` | -                   | (Optional) Proxy server authentication password                           |\n| `--enable-cookies`  | -                   | `true`, `false`                                                           |\n| `--worker-count`    | All available cores | number                                                                    |\n| `--config-file`     | `config.yaml`       | `Path`                                                                    |\n\n### Container environment variables\n\n| Name                  | Default Value                     | Allowed values                                      |\n|-----------------------|-----------------------------------|-----------------------------------------------------|\n| `LOG_LEVEL`           | `INFO`                            | `INFO`, `DEBUG`, `WARN`, `ERROR`, `OFF`, `TRACE`    |\n| `HTTP_BIND`           | `0.0.0.0`                         | `IP Address`                                        |\n| `HTTP_PORT`           | `8080`                            | 1-65535                                             |\n| `HTTP_PROXY_URL`      | -                                 | Proxy server URL `socks5://`, `http://`, `https://` |\n| `HTTP_PROXY_USER`     | -                                 | (Optional) Proxy server authentication user         |\n| `HTTP_PROXY_PASS`     | -                                 | (Optional) Proxy server authentication password     |\n| `ENABLE_COOKIES`      | -                                 | `true`, `false`                                     |\n| `HTTP_WORKER_COUNT`   | All available cores               | number                                              |\n| `ROUTE_CONF_LOCATION` | `/etc/endpoint_proxy/config.yaml` | `Path`                                              |\n\n## Endpoint Configuration\n\nCreate a YAML configuration file to specify the proxy rules. For example, create a file named `config.yaml` with the\nfollowing content:\n\n```yaml\nproxy_urls:\n  - path: \"/my-ip\"\n    url: \"http://ip-api.com/json\"\n    method: \"get\"\n    headers:\n      - name: \"Accept\"\n        value: \"application/json\"\n```\n\nIn this example, any request to `http://localhost:8080/my-ip` will be forwarded to `http://ip-api.com/json`\nusing the HTTP method `GET`. Additionally, the request will include an `Accept: application/json` header.\n\n### Configuration options\n\n### `proxy_urls`\n\n- List of objects representing proxy rules.\n- Each rule contains:\n    - `path`: The path on the local server that triggers this rule.\n    - `url`: The target URL where the request will be forwarded.\n    - `method`: (optional) The HTTP method to use for the incoming request. Default value is `get`.\n    - `target_method` (optional): The HTTP method to use for the forwarded request. If not defined, `method` value is\n      used.\n    - `default_body` (optional): The default request body to use if one is not provided in the incoming request.\n    - `headers` (optional): A list of objects representing headers to be added to the request.\n    - `query` (optional): A list of objects representing query parameters to be added to the request if one is not\n      provided in the incoming request.\n\n\u003e `target_method` and `method` properties are case-sensitive and accepts the following **lowercase** HTTP\n\u003e verbs; `get`, `post`, `put`, `delete`, `head` and `patch`.\n\n**Example**:\n\n```yaml\nproxy_urls:\n  - path: /my-ip\n    url: http://ip-api.com/json\n    headers:\n      - name: Accept\n        value: application/json\n  - path: /posts\n    url: https://jsonplaceholder.typicode.com/posts\n    headers:\n      - name: Accept\n        value: application/json\n\n  - path: /posts\n    url: https://jsonplaceholder.typicode.com/posts\n    method: post\n    default_body: |\n      {\n        \"title\": \"foo\",\n        \"body\": \"bar\",\n        \"userId\": 1\n      }\n    headers:\n      - name: \"Accept\"\n        value: \"application/json\"\n      - name: \"Content-Type\"\n        value: \"application/json\"\n  - path: /search\n    url: https://duckduckgo.com\n    method: post\n    target_method: get\n    query:\n      - name: \"t\"\n        value: \"ffab\"\n      - name: \"q\"\n        value: \"alpine+linux\"\n      - name: \"ia\"\n        value: \"web\"\n```\n\nMappings are:\n\n- GET: http://localhost:8080/my-ip **translates to --\u003e** GET: http://ip-api.com/json\n- GET: http://localhost:8080/posts **translates to --\u003e** GET: https://jsonplaceholder.typicode.com/posts\n- POST: http://localhost:8080/posts **translates to --\u003e** POST: https://jsonplaceholder.typicode.com/posts\n- POST: http://localhost:8080/search **translates to --\u003e** GET: https://duckduckgo.com/?t=ffab\u0026q=alpine+linux\u0026ia=web\n- POST: http://localhost:8080/search?q=my+query **translates to --\u003e**\n  GET: https://duckduckgo.com/?t=ffab\u0026q=my+query\u0026ia=web\n\n## Building From Source\n\n- **Binary:**\n    ```bash\n    git clone https://github.com/SuperioOne/endpoint_proxy.git\n    cd endpoint_proxy\n    cargo build --release\n    ```\n    - **Multi-architecture container image**\n      \u003e Current script requires [buildah](https://buildah.io/) to be installed on the system.\n      ```shell\n      git clone https://github.com/SuperioOne/endpoint_proxy.git\n      cd endpoint_proxy\n         \n      ## Image primary tag.\n      export VERSION_TAG=\"1.1.0\"\n      \n      ## Sets custom image name. default is enpoint_proxy\n      # export IMAGE_NAME=my_image_name\n      \n      ## Target registry when publishing is enabled. Make sure your buildah is already logged in to the target registry.    \n      # export REGISTRY=ghcr.io\n  \n      ## Controls --tls-verify for untrusted registries. Default is true.\n      # export VERIFY_TLS=true\n      \n      ## Specify custom Alpine image tag. Default is latest.\n      # export ALPINE_TAG=latest\n      \n      ## Additional whitespace separated alias tags like 'latest', 'v1.0', 'v1' etc.\n      # export ALIAS_TAGS=\"latest v1 v1.1\"\n      \n      ## Only prints logs, does not build or push images. Default is false.\n      # export DRY_RUN=true\n      \n      ## Pushes generated images and manifests to the target registry. Default is false.\n      # export PUBLISH=false\n      \n      ./build_images.sh # or sudo -E ./build_images.sh\n      ```\n\n## But Why?\n\n![alt](https://media.tenor.com/KjJTBQ9lftsAAAAC/why-huh.gif)\n\nTechnically, use cases are limited compared to fully-fledged proxy servers.\n\nI simply use it as a sidecar container to duck-tape my RSS aggregator to work with some finicky sites, a quick dirty way to bypass CORS on some\nAPIs.\n\n## License\n\nThis project is licensed under the [MIT License](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsuperioone%2Fendpoint_proxy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsuperioone%2Fendpoint_proxy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsuperioone%2Fendpoint_proxy/lists"}