{"id":34178774,"url":"https://github.com/justenwalker/squiggly","last_synced_at":"2026-03-10T20:02:55.184Z","repository":{"id":47102048,"uuid":"192464730","full_name":"justenwalker/squiggly","owner":"justenwalker","description":"A Forwarding proxy with support for upstream Proxy Auto Config (PAC) written in Go.","archived":false,"fork":false,"pushed_at":"2021-09-13T14:29:46.000Z","size":41,"stargazers_count":9,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-12-18T10:58:54.490Z","etag":null,"topics":["forward-proxy","proxy","proxy-pac"],"latest_commit_sha":null,"homepage":null,"language":"Go","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/justenwalker.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":"2019-06-18T04:24:05.000Z","updated_at":"2023-08-11T11:46:10.000Z","dependencies_parsed_at":"2022-09-26T19:01:33.252Z","dependency_job_id":null,"html_url":"https://github.com/justenwalker/squiggly","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/justenwalker/squiggly","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/justenwalker%2Fsquiggly","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/justenwalker%2Fsquiggly/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/justenwalker%2Fsquiggly/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/justenwalker%2Fsquiggly/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/justenwalker","download_url":"https://codeload.github.com/justenwalker/squiggly/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/justenwalker%2Fsquiggly/sbom","scorecard":{"id":543727,"data":{"date":"2025-08-11","repo":{"name":"github.com/justenwalker/squiggly","commit":"8b4df746ee09242294602fa2c8754cc57c370f38"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.7,"checks":[{"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":"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":"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 1/19 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":"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":"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: 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 2 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"}},{"name":"Vulnerabilities","score":0,"reason":"11 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2023-1941 / GHSA-4r8x-2p26-976p","Warn: Project is vulnerable to: GO-2022-0229 / GHSA-cjjc-xp8v-855w","Warn: Project is vulnerable to: GO-2020-0012 / GHSA-ffhg-7mh4-33c4","Warn: Project is vulnerable to: GO-2021-0227 / GHSA-3vm4-22fp-5rfm","Warn: Project is vulnerable to: GO-2022-0968 / GHSA-gwc9-m7rh-j2ww","Warn: Project is vulnerable to: GO-2021-0356 / GHSA-8c26-wmh5-6g9v","Warn: Project is vulnerable to: GO-2024-2961","Warn: Project is vulnerable to: GO-2023-2402 / GHSA-45x7-px36-x8w8","Warn: Project is vulnerable to: GO-2024-3321 / GHSA-v778-237x-gjrc","Warn: Project is vulnerable to: GO-2025-3487 / GHSA-hcg3-q754-cr77","Warn: Project is vulnerable to: GO-2022-0493 / GHSA-p782-xgp4-8hr8"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-20T08:53:04.332Z","repository_id":47102048,"created_at":"2025-08-20T08:53:04.332Z","updated_at":"2025-08-20T08:53:04.332Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30351766,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T15:55:29.454Z","status":"ssl_error","status_checked_at":"2026-03-10T15:54:58.440Z","response_time":106,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["forward-proxy","proxy","proxy-pac"],"created_at":"2025-12-15T13:03:12.101Z","updated_at":"2026-03-10T20:02:55.176Z","avatar_url":"https://github.com/justenwalker.png","language":"Go","readme":"# Squiggly\n\nA Forwarding proxy with support for upstream Proxy Auto Config (PAC) written in Go.\n\n`squiggly` will configure the upstream proxy based on the PAC file given. It will check every so often to determine if the upstream proxies are still reachable, and if not it will automatically disable routing to the upstream proxy and use a direct connection. Once the PAC file becomes reachable again, it will enable the upstream proxy.\n\nOptionally, `squiggly` support proxy Basic authentication.\n\n## Installation\n\n### via go get\n\nThis will install to your `$GOPATH/bin` folder.\n\n```bash\n$ go install github.com/justenwalker/squiggly\n```\n\n## Quick Start\n\nSet your password if you need to\n\n```bash\n$ squiggly auth --user \"yourusername\"\n```\n\nDownload [scripts/squiggly.sh](./scripts/squiggly.sh), update the settings, and source it from your `.bashrc/.zshrc`\n\nAfter you open a new terminal, you can run `squiggly_up` to start using the proxy, and `squiggly_down` to switch it off.\n\n## Authenticate\n\n### Usage\n\n```\nSets the proxy authentication credentials\n\nUsage:\n  squiggly auth [flags]\n\nFlags:\n  -h, --help             help for auth\n  -s, --service string   service name, used to distinguish between auth configurations (default \"squiggly\")\n  -u, --user string      user name, used to log into proxy servers (default \"yourusername\")\n```\n\n### Example\n\nThis will create a keychain entry for \"squiggly\" using the given \"username\", and will prompt for a password:\n\n```bash\n$ squiggly auth -u justen\n[justen] Password: ********************\n```\n\n## Running the Proxy\n\n### Usage\n\n```\nStarts the proxy server.\n\nUsage:\n  squiggly proxy [flags]\n\nFlags:\n  -a, --address string    listen address for the proxy server (default \"localhost:8800\")\n  -h, --help              help for proxy\n  -k, --krb5conf string   kerberos config\n      --pac string        url to the proxy auto config (PAC) file\n  -p, --proxy string      the upstream HTTP Proxy\n  -r, --realm string      realm for kerberos/negotiate authentication\n  -s, --service string    service name, used to distinguish between auth configurations (default \"squiggly\")\n  -u, --user string       user name, used to log into proxy servers. Omit to use an unauthenticated proxy.\n  -v, --verbose           enable verbose logging\n```\n\n### Example\n\nRuns the proxy on the default address (`localhost:8800`) using the default service name (`squiggly`) to retreive proxy authentication from the keyring.\n\n```bash\n$ squiggly proxy --pac http://example.com/proxy.pac --verbose --user myusername\n```\n\n## Kerberos Config\n\nThere is a utility method for writing a default `krb5.conf` that uses dns to discover the servers, to make it easier to configure the Kerberos auth.\nIt will probably need some modifications to work correctly, but it might be a good starting point.\n\n### Usage\n\n```\nGenerate a krb5.conf\n\nUsage:\n  squiggly krb5conf [flags]\n\nFlags:\n  -h, --help           help for krb5conf\n  -r, --realm string   kerberos realm\n```\n\n### Example\n\n```bash\n$ squiggly krb5conf --realm REALM.EXAMPLE.COM \u003e krb5.conf\n```","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjustenwalker%2Fsquiggly","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjustenwalker%2Fsquiggly","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjustenwalker%2Fsquiggly/lists"}