{"id":15138582,"url":"https://github.com/cprite/save-env","last_synced_at":"2026-01-19T06:02:05.668Z","repository":{"id":256637361,"uuid":"853480911","full_name":"cprite/save-env","owner":"cprite","description":"SaveEnv is an automated tool that scans public GitHub repositories for exposed OpenAI API keys in .env files. It verifies the keys and automatically opens issues to notify developers.","archived":false,"fork":false,"pushed_at":"2025-01-29T10:02:37.000Z","size":187,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-06T09:19:16.905Z","etag":null,"topics":["python","selenium","telebot","webscraping"],"latest_commit_sha":null,"homepage":"","language":"Python","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/cprite.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}},"created_at":"2024-09-06T18:37:12.000Z","updated_at":"2025-02-05T13:29:07.000Z","dependencies_parsed_at":"2024-09-12T06:16:40.321Z","dependency_job_id":"f56d3f50-4790-43cc-ab8f-0cc6e45c4db2","html_url":"https://github.com/cprite/save-env","commit_stats":null,"previous_names":["cprite/save-env"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cprite/save-env","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cprite%2Fsave-env","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cprite%2Fsave-env/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cprite%2Fsave-env/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cprite%2Fsave-env/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cprite","download_url":"https://codeload.github.com/cprite/save-env/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cprite%2Fsave-env/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28562237,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-19T03:31:16.861Z","status":"ssl_error","status_checked_at":"2026-01-19T03:31:15.069Z","response_time":67,"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":["python","selenium","telebot","webscraping"],"created_at":"2024-09-26T07:41:49.296Z","updated_at":"2026-01-19T06:02:05.649Z","avatar_url":"https://github.com/cprite.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- Improved compatibility of back to top link: See: https://github.com/othneildrew/Best-README-Template/pull/73 --\u003e\r\n\u003ca name=\"readme-top\"\u003e\u003c/a\u003e\r\n\r\n[![Contributors][contributors-shield]][contributors-url]\r\n[![Forks][forks-shield]][forks-url]\r\n[![Stargazers][stars-shield]][stars-url]\r\n[![Issues][issues-shield]][issues-url]\r\n[![MIT][license-shield]][license-url]\r\n[![LinkedIn][linkedin-shield]][linkedin-url]\r\n\r\n\r\n\u003c!-- PROJECT LOGO --\u003e\r\n\u003cbr /\u003e\r\n\u003cdiv align=\"center\"\u003e\r\n  \u003ca href=\"https://github.com/othneildrew/Best-README-Template\"\u003e\r\n    \u003cimg src=\"images/logo.png\" alt=\"Logo\" width=\"200\" height=\"200\"\u003e\r\n  \u003c/a\u003e\r\n\r\n  \u003cp align=\"center\"\u003e\r\n    \u003cbr /\u003e\r\n    \u003cbr /\u003e\r\n    \u003cbr /\u003e\r\n    \u003ca href=\"https://github.com/cprite/save-env/issues\"\u003eReport Bug\u003c/a\u003e\r\n    ·\r\n    \u003ca href=\"https://github.com/cprite/save-env/issues\"\u003eRequest Feature\u003c/a\u003e\r\n  \u003c/p\u003e\r\n\u003c/div\u003e\r\n\r\n\r\n\r\n\u003c!-- TABLE OF CONTENTS --\u003e\r\n\u003cdetails\u003e\r\n  \u003csummary\u003eTable of Contents\u003c/summary\u003e\r\n  \u003col\u003e\r\n    \u003cli\u003e\r\n      \u003ca href=\"#about-the-project\"\u003eAbout The Project\u003c/a\u003e\r\n      \u003cul\u003e\r\n        \u003cli\u003e\u003ca href=\"#disclaimer\"\u003e[!] Disclaimer\u003c/a\u003e\u003c/li\u003e\r\n        \u003cli\u003e\u003ca href=\"#built-with\"\u003eBuilt With\u003c/a\u003e\u003c/li\u003e\r\n      \u003c/ul\u003e\r\n    \u003c/li\u003e\r\n    \u003cli\u003e\r\n      \u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e\r\n    \u003c/li\u003e\r\n    \u003cli\u003e\u003ca href=\"#donations\"\u003eDonations\u003c/a\u003e\r\n    \u003c/li\u003e\r\n  \u003c/ol\u003e\r\n\u003c/details\u003e\r\n\r\n\r\n\r\n\u003c!-- ABOUT THE PROJECT --\u003e\r\n## About The Project\r\n\r\nIn the world of software development, API keys and other sensitive credentials are the keys to accessing critical services and applications. Unfortunately, these keys are sometimes accidentally exposed in public repositories, putting both developers and organizations at risk. If left unprotected, malicious actors can exploit these exposed credentials to access and misuse valuable data, leading to breaches, financial losses, and damaged reputations.\r\n\r\n**SaveEnv** was created to address this growing problem by automating the process of detecting and notifying developers about exposed OpenAI API keys in ```.env``` files. By continuously monitoring public GitHub repositories, SaveEnv helps prevent sensitive data from falling into the wrong hands. The project's aim is to provide an easy-to-use tool that alerts developers to their mistakes before they can be exploited.\r\n\r\nThe script automatically scans GitHub every hour for ```.env``` files that may have OpenAI API keys. Here’s how the process works:\r\n\r\n1. The script searches for public repositories with .env files that may contain sensitive data.\r\n2. It identifies OpenAI API keys within these .env files.\r\n3. For each extracted key, the script calls the OpenAI API to verify whether the key is still valid.\r\n4. If the key is valid, the script automatically opens an issue on the affected repository, notifying the developer about the exposed key.\r\n\r\nIf you’re interested in monitoring the results of scanning hundreds of repositories daily, you can easily do so through my [custom-designed Telegram chat bot](https://t.me/save_env_bot) (currently off, will get it back soon). The results not only keep you informed about potential issues but can also serve as a motivating reminder to prioritize security in your own projects.\r\n\r\n\r\n### 🛑 Disclaimer 🛑\r\nThis tool is designed to help developers protect their sensitive data. It is not intended for malicious use. By using this script, you agree to use it responsibly and within ethical boundaries. Always respect data privacy and security best practices.\r\n\r\n### Built With\r\n\r\n* [![Python](https://img.shields.io/badge/Python-FFD43B?style=for-the-badge\u0026logo=python\u0026logoColor=blue)](https://www.python.org)\r\n* [![Selenium](https://img.shields.io/badge/Selenium-43B02A?style=for-the-badge\u0026logo=Selenium\u0026logoColor=white)](https://www.selenium.dev/)\r\n* [![Jupyter](https://img.shields.io/badge/Jupyter-F37626.svg?\u0026style=for-the-badge\u0026logo=Jupyter\u0026logoColor=white)](https://jupyterlab.readthedocs.io/en/stable)\r\n* [![Pandas](https://img.shields.io/badge/Pandas-2C2D72?style=for-the-badge\u0026logo=pandas\u0026logoColor=white)](https://pandas.pydata.org/)\r\n* [![Google Chrome](https://img.shields.io/badge/Google_chrome-4285F4?style=for-the-badge\u0026logo=Google-chrome\u0026logoColor=white)](https://www.google.com/chrome/)\r\n* [![VScode](https://img.shields.io/badge/VSCode-0078D4?style=for-the-badge\u0026logo=visual%20studio%20code\u0026logoColor=white)](https://code.visualstudio.com/)\r\n* [![Raspberry Pi](https://img.shields.io/badge/Raspberry%20Pi-A22846?style=for-the-badge\u0026logo=Raspberry%20Pi\u0026logoColor=white)](https://www.raspberrypi.com/products/raspberry-pi-4-model-b/)\r\n\r\n**P.S.** You’re probably wondering why there’s a Raspberry Pi badge here… Well, this entire project is hosted on a home server I built using a Raspberry Pi 4 and a router! Raspberry Pi is one of the areas I’m currently actively exploring, and I love using it to bring creative ideas to life.\r\n\r\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\r\n\r\n\r\n\u003c!-- CONTRIBUTING --\u003e\r\n## Contributing\r\n\r\nI'm open to collaboration and contributions from fellow developers! You can easily adapt the code to work with other APIs beyond OpenAI. Feel free to fork the project and modify it to suit your needs. Together, we can enhance this tool and help more developers safeguard their projects.\r\n\r\n\r\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\r\n\r\n\u003c!-- MARKDOWN LINKS \u0026 IMAGES --\u003e\r\n\u003c!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --\u003e\r\n[contributors-shield]: https://img.shields.io/github/contributors/cprite/save-env.svg?style=for-the-badge\r\n[contributors-url]: https://github.com/cprite/save-env/graphs/contributors\r\n[forks-shield]: https://img.shields.io/github/forks/cprite/save-env.svg?style=for-the-badge\r\n[forks-url]: https://github.com/cprite/save-env/network/members\r\n[stars-shield]: https://img.shields.io/github/stars/cprite/save-env.svg?style=for-the-badge\r\n[stars-url]: https://github.com/cprite/save-env/stargazers\r\n[issues-shield]: https://img.shields.io/github/issues/cprite/save-env.svg?style=for-the-badge\r\n[issues-url]: https://github.com/cprite/save-env/issues\r\n[license-shield]: https://img.shields.io/github/license/cprite/save-env.svg?style=for-the-badge\r\n[license-url]: https://github.com/cprite/save-env/blob/master/LICENSE\r\n[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=for-the-badge\u0026logo=linkedin\u0026colorB=555\r\n[linkedin-url]: https://linkedin.com/in/niknmirosh\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcprite%2Fsave-env","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcprite%2Fsave-env","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcprite%2Fsave-env/lists"}