diff --git a/README.md b/README.md new file mode 100644 index 0000000..07c73a3 --- /dev/null +++ b/README.md @@ -0,0 +1,46 @@ +# GoogleDonts - a privacy-friendly Google Fonts proxy + +GoogleDonts is a Flask app that acts as a proxy for Google Fonts. It allows you to use fonts without disclosing your website visitors' IP addresses to Google. + +## How it works + +GoogleDonts works by fetching the font files from Google and serving them to the client. This way, the client's IP address is never disclosed to Google. It does not store any data about the client. + +It modifies the CSS files so that the font URLs also point to the proxy. This way, the client's browser fetches the font files from the proxy instead of Google. + +### Disclaimer + +We try our best to ensure that users do not make any connections to Google's servers. However, we cannot guarantee that we catch everything. If you find any issues, please report them. And if at all possible, please host your own fonts instead of using Google Fonts. + +## Setup + +1. Clone the repository + +```bash +git clone https://git.private.coffee/PrivateCoffee/googledonts.git +cd googledonts +``` + +2. Create a virtual environment and install the dependencies + +```bash +python3 -m venv venv +source venv/bin/activate +pip install -r requirements.txt +``` + +3. Use the flask command or a WSGI server to run the app + +```bash +flask run +``` + +In production, you should use a WSGI server like uWSGI, and a reverse proxy like Caddy. Ensure that your server does not log the client's IP address! + +## Configuration + +GoogleDonts does not require any configuration. However, if you use `flask run`, you can set the `PORT` environment variable to change the port the app listens on. By default, it listens on port 5678. + +## License + +TypeNot is licensed under the MIT License. See [LICENSE](LICENSE) for more information. diff --git a/app.py b/app.py index e6eb75e..f19c43e 100644 --- a/app.py +++ b/app.py @@ -1,6 +1,7 @@ from flask import Flask, request, Response, render_template import requests import re +import os app = Flask(__name__) @@ -51,11 +52,8 @@ def proxy_fonts_api(path): if query_string: url += f"?{query_string}" headers = { - key: value for (key, value) in request.headers.items() if key.lower() != "host" + "Accept-Encoding": "" } - headers["Accept-Encoding"] = ( - "" # Disable Accept-Encoding to avoid compressed responses - ) response = requests.get(url, headers=headers) replacement = request.host.encode( @@ -103,4 +101,4 @@ def proxy_fonts_api(path): if __name__ == "__main__": - app.run(host="0.0.0.0", port=5678) + app.run(host="0.0.0.0", port=os.environ.get("PORT", 5678))