{"id":37436339,"url":"https://github.com/sjitech/proxy-login-automator","last_synced_at":"2026-01-16T06:40:41.826Z","repository":{"id":33087868,"uuid":"36725265","full_name":"sjitech/proxy-login-automator","owner":"sjitech","description":"A single node.js script to automatically inject user/password to http proxy server via a local forwarder","archived":false,"fork":false,"pushed_at":"2021-12-16T00:55:40.000Z","size":48,"stargazers_count":400,"open_issues_count":17,"forks_count":97,"subscribers_count":22,"default_branch":"master","last_synced_at":"2025-09-23T16:37:11.577Z","etag":null,"topics":["authentication","automate","proxy-server"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/sjitech.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}},"created_at":"2015-06-02T10:17:47.000Z","updated_at":"2025-09-10T04:07:51.000Z","dependencies_parsed_at":"2022-08-07T20:00:21.137Z","dependency_job_id":null,"html_url":"https://github.com/sjitech/proxy-login-automator","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sjitech/proxy-login-automator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sjitech%2Fproxy-login-automator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sjitech%2Fproxy-login-automator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sjitech%2Fproxy-login-automator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sjitech%2Fproxy-login-automator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sjitech","download_url":"https://codeload.github.com/sjitech/proxy-login-automator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sjitech%2Fproxy-login-automator/sbom","scorecard":{"id":828687,"data":{"date":"2025-08-11","repo":{"name":"github.com/sjitech/proxy-login-automator","commit":"e4be349cbda8708eab663d892c2dff1aa7dc2f3e"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":0,"reason":"Found 2/28 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 4 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-23T17:09:19.866Z","repository_id":33087868,"created_at":"2025-08-23T17:09:19.866Z","updated_at":"2025-08-23T17:09:19.866Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28477913,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T06:30:42.265Z","status":"ssl_error","status_checked_at":"2026-01-16T06:30:16.248Z","response_time":107,"last_error":"SSL_read: 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":["authentication","automate","proxy-server"],"created_at":"2026-01-16T06:40:41.310Z","updated_at":"2026-01-16T06:40:41.817Z","avatar_url":"https://github.com/sjitech.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# proxy-login-automator\nA single node.js script to automatically inject user/password to http proxy server via a local forwarder\n\n- This is done by creating a local proxy server which forward requests to real proxy server with password injected.\nYou change your browser's proxy config to use the local proxy server so that you can browse internet \nwithout being asked for user/password.\n\n- Can act as a [PAC(proxy auto configuration)](https://en.wikipedia.org/wiki/Proxy_auto-config) server if real proxy provides PAC. \nIn this case, each real proxy server defined in PAC will be dynamically replaced with a local proxy server\nwhich forward requests to real proxy with password injected.\n\n## Usage\n\n- Please install node.js first.\n \n- Install \u0026 Run\n\n  - Normal way: Download \u0026 cd this project dir then run the js from node.\n  ```\n  git clone https://github.com/sjitech/proxy-login-automator\n  node proxy-login-automator/proxy-login-automator.js\n  ```\n\n  - NPM way: You can also install it by npm then run it directly\n  ```\n  npm install -g proxy-login-automator\n  proxy-login-automator\n  ```\n\n  - Geek way: If you do not want to save anything to your disk then you can run this command in `bash`\n  ```\n  node \u003c(curl -sSL https://raw.githubusercontent.com/sjitech/proxy-login-automator/master/proxy-login-automator.js)\n  ```\n\n- Parameters of `proxy-login-automator.js`:\n\n    ```\n    -local_host host        Listening address. Default: localhost. (* means all interfaces)\n    -local_port port        Listening port. Default: 8080\n    -remote_host host       Real proxy/PAC server address\n    -remote_port port       Real proxy/PAC server port. Default: 8080\n    -usr user               Real proxy/PAC server user id\n    -pwd password           Real proxy/PAC user password\n    -as_pac_server true/false       Treat real proxy/PAC server as a PAC server. Default: false\n    \n    -is_remote_https true/false     Talk to real proxy/PAC server with HTTPS. Default: false\n    -ignore_https_cert true/false   ignore error when verify certificate of real proxy/PAC server. Default: false\n    -are_remotes_in_pac_https true/false    Talk to proxy servers defined in PAC with HTTPS. Default: false\n    ```\n\n### Normal Proxy Server\n\n- You have a proxy server `http://REAL_PROXY_IP:8080`\n\n    This server requires a user/password.\n\n- You run following command to create a local trampoline at `localhost:8081`\n\n    Mac/Linux:\n    ```\n    node proxy-login-automator.js \\\n        -local_port 8081 \\\n        -remote_host REAL_PROXY_IP \\\n        -remote_port 8080 \\\n        -usr USER -pwd PASSWORD\n    ```\n    Windows:\n    ```\n    node proxy-login-automator.js ^\n        -local_port 8081 ^\n        -remote_host REAL_PROXY_IP ^\n        -remote_port 8080 ^\n        -usr USER -pwd PASSWORD\n    ```\n\n- Then you can set your browser's proxy = `localhost:8081`\n\n    As a quick test, you can start a new process of chrome with the local proxy:\n\n    MacOS/Linux: (for Linux, just change the path of Chrome please):\n    ```\n    \"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome\" \\\n        --user-data-dir=$HOME/chrome_data/ \\\n        --proxy-server=http://localhost:8081 \\\n        \u003e/dev/null 2\u003e\u00261 \u0026\n    ```\n    Windows:\n    ```\n    \"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe\" ^\n        --user-data-dir=%APPDATA%\\chrome_data ^\n        --proxy-server=http://localhost:8081\n    ```\n\n### [PAC(proxy auto configuration)](https://en.wikipedia.org/wiki/Proxy_auto-config) Server\n\n- You have a pac server serving at `http://REAL_PAC_SERVER_IP:8080/PAC_PATH/PAC_NAME`\n\n    This server may require a user/password or not, it does not matter.\n\n    The PAC_PATH/PAC_NAME points to a [PAC file](https://en.wikipedia.org/wiki/Proxy_auto-config)\n    which contains instructions says\n    ```\n    function FindProxyForURL(url, host) {\n        if (shExpMatch(url,\"*.google.com*\")) return \"PROXY proxy1:port1\"\n        if (shExpMatch(url,\"*.microsoft.com*\")) return \"PROXY proxy2:port2\"\n        ...\n        return \"DIRECT\"\n    }\n    ```\n    means use child proxy servers\n    ```\n    proxy1:port1\n    proxy2:port2\n    ...\n    ```\n\n    **Assume all user/password are same**.\n\n    If you want use your own local PAC file, you need set up a local http server to serve the PAC file.\n    See [use a local pac](https://github.com/sjitech/proxy-login-automator/issues/14#issuecomment-379951268).\n\n- You run following command to create a trampoline at `http://localhost:65000/PAC_PATH/PAC_NAME`\n\n    Mac/Linux:\n    ```\n\tnode proxy-login-automator.js \\\n\t    -local_port 65000 \\\n\t    -remote_host REAL_PAC_SERVER_IP \\\n\t    -remote_port 8080 \\\n\t    -usr USER -pwd PASSWORD \\\n\t    -as_pac_server true\n\t```\n    Windows:\n    ```\n\tnode proxy-login-automator.js ^\n\t    -local_port 65000 ^\n\t    -remote_host REAL_PAC_SERVER_IP ^\n\t    -remote_port 8080 ^\n\t    -usr USER -pwd PASSWORD ^\n\t    -as_pac_server true\n\t```\n\n    - This tool dynamically creates multiple child proxy servers which auto inject user/password when talking to real proxy servers.\n\n    - The child proxy servers will listen at\n    ```\n    localhost:65001 for proxy1:port1\n    localhost:65002 for proxy2:port2\n    ...\n    ```\n\n    **Please specify a big port number as PAC server port because this tool allocate ports INCREMENTALLY like**\n    ```\n    65000 + 1 for first detected proxy server from PAC\n    65000 + 2 for second detected proxy server from PAC\n    ....\n    65000 + Count Of Real Proxy Servers\n    ```\n\n    If you specify a small port number as PAC server port, then the port allocation may fail due to other process may have been using that port.\n\n- Then you can set your browser's PAC url = `http://localhost:65000/PAC_PATH/PAC_NAME`\n\n    As a quick test, you can start a new process of chrome with the local PAC server:\n\n    MacOS/Linux: (for Linux, just change the path of Chrome please):\n    ```\n    “/Applications/Google Chrome.app/Contents/MacOS/Google Chrome” \\\n       --user-data-dir=$HOME/chrome_data/ \\\n       --proxy-pac-url=http://localhost:65000/PAC_PATH/PAC_NAME \\\n       \u003e/dev/null 2\u003e\u00261 \u0026\n    ```\n    Windows:\n    ```\n    \"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe\" \\\n      --user-data-dir=%APPDATA%\\chrome_data \\\n      --proxy-pac-url=http://localhost:65000/PAC_PATH/PAC_NAME\n    ```\n\n## Docker\n\nA dockerized version of this tool is availbale;\n\n```\ndocker run -p 8080:8080 --env REMOTE_HOST=proxy1.proxy.com:1234,proxy2.proxy.com:1234 --env REMOTE_USER=user --env REMOTE_PASSWORD=password --env IGNORE_CERT=true --env REMOTE_HTTPS=false ejoebstl/proxy-login-automator\n\n```\n\nPlease find the documentation for the docker image [here](https://github.com/ejoebstl/proxy-login-automator-docker).\n\n----\n\n## Note for \"Windows Store Apps\"\n\nThe Windows Store Apps (such as pre-installed Weather, Calender) maybe use \"Isolated Network\" settings which does not respect Internet Option of IE or control panel.\n\nWindows Store Apps may have its own network policy such as how to connect to internet.\nThere are group policy Computer Configuration\\Policies\\Administrative Templates\\Network\\Network Isolation\\Internet proxy servers for apps to serve these apps.\n\nTo change proxy of \"Windows Store Apps\"\nSee [setup-proxy-metro-application-windows-8](http://www.thewindowsclub.com/setup-proxy-metro-application-windows-8)\n\n## Note for other authentication(such as NTLM)\n\nThis tool currently only support HTTP basic authentication to real proxy/PAC server.\n\nIf you want to use other authentication such as NTLM,\nyou can use other tool such as [NGINX reverse proxy to NTLM authenticated http server](http://nginx.org/en/docs/http/ngx_http_upstream_module.html#ntlm).\n\n2018/04/10: plan to support NTLM and other normal authentication.\n\n## Note for HTTPS\n\nProxy Server normally supports HTTPS browsing by [handling HTTP tunnel request](https://en.wikipedia.org/wiki/HTTP_tunnel),\nso this tool also support HTTPS browsing of course if the real proxy server does.\n\nHowever, due to historical reason, **most browsers always use HTTP to talk to proxy server\neven when browsing HTTPS sites**(done by HTTP tunnel described in above link).\n\nCurrently only Chrome support HTTPS talking.\n\nSo this tool only use HTTP to talk to real proxy server. **You can use NGINX to redirect HTTP to other HTTPS server**.\n\n### 2017/01/30: now support talk to real proxy/PAC server with HTTPS by specify following parameters:\n\n```\n-is_remote_https true\n```\nin addition, to ignore error when verify HTTPS server certificate, you can specify\n```\n-ignore_https_cert true\n```\nFor proxy servers defined in PAC, if they also need be talked with HTTPS, then specify\n```\n-are_remotes_in_pac_https true\n```\n\nNote: anyway, the local proxy/PAC server is always served as a HTTP server.\n\n## Note for WebSocket\n\nThis tool support WebSocket if the real proxy server supports.\n\nGood luck\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsjitech%2Fproxy-login-automator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsjitech%2Fproxy-login-automator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsjitech%2Fproxy-login-automator/lists"}