diff --git a/README.md b/README.md new file mode 100644 index 0000000..ddff7b5 --- /dev/null +++ b/README.md @@ -0,0 +1,72 @@ +Use Cloudflare Workers to turn your Google Drive into S3 object storage at no extra cost. + +## About +This is a Workers script that converts the Google Drive API into an S3-compatible API. Turn your Google Drive into object storage at no extra cost! + +### Does it work with the free Workers plan? +Signature verification uses the native Web Crypto API, and exceeding the 10ms CPU time limit is not normal usage. It also leverages JavaScript streams to handle large files. +However, this means that features such as hash verification are not implemented. This is because the memory limitations of Workers make it impossible to expand the entire uploaded file into memory. + +### Does this violate the Google Terms of Service? +We believe that it does not violate the Terms of Service as long as you do not upload illegal content such as CSAM. +For the sake of your Google account, we strongly recommend using this in an environment where only you can upload. + + +## How to Deploy + +### 1. Prepare a Google Drive API Refresh Token +You will need to use rclone to obtain your Google API credentials and a Google Drive API refresh token. +Follow the rclone documentation to configure the client. +https://rclone.org/drive/#making-your-own-client-id + +> [!NOTE] +> When your Google API client is in "Testing" mode, the refresh token will expire after a certain period of time, so if you need to use it for a long period of time, be sure to switch the mode before authenticating with rclone. +> +> You can complete the OAuth flow by skipping the very scary confirmation screen without submitting your app for validation. + +Once complete, obtain the path to your rclone configuration file using `rclone config file`, read the configuration file, and note the following values: + +``` +[my-remote] +type = drive +# Use as GOOGLE_CLIENT_ID +client_id = myud.apps.googleusercontent.com +# Use as GOOGLE_CLIENT_SECRET +client_secret = SUPER_SECRET_TOKEN +scope = drive +token = { + "access_token":"SECRET_ACCESS_TOKEN", + "token_type":"Bearer", + # ↓ Use this value as GOOGLE_REFRESH_TOKEN. + "refresh_token":"SECRET_REFRESH_TOKEN", + "expiry":"2026-01-08T12:37:09.064662+09:00", + "expires_in":3599 +} + +``` + +### 2. Configure Cloudflare +From the Cloudflare dashboard, create two KV databases. +Create a fork of this repository, edit `wrangler.json`, and modify the binding to the ID of your KV database. + +Once complete, deploy Workers by running the following command: +```bash +wrangler deploy +``` + +### 3. Configure Secrets +Follow the documentation to configure the following secrets: +https://developers.cloudflare.com/workers/configuration/secrets/#via-the-dashboard + +| Key | Description | +| :--- | :--- | +| `ACCESS_KEY` | Any access key used by the S3 client. | +| `SECRET_KEY` | A secure secret key used by the S3 client. | +| `REGION` | The region used by the S3 client. | +| `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET`, `GOOGLE_REFRESH_TOKEN` | Google API credentials obtained from rclone. | +| `ALLOWED_BUCKETS` | Set the buckets allowed, separated by `,`. A directory with the bucket name will be created directly under Google Drive. | + + +### 4. CORS Configuration +If you need to configure CORS, set up your own domain for Workers and use Cloudflare's Response Header Transform Rules to add the necessary headers. +https://developers.cloudflare.com/rules/transform/response-header-modification/