diff --git a/GD_INSTRUCTIONS.MD b/GD_INSTRUCTIONS.MD index be3ccf3..e20c76d 100644 --- a/GD_INSTRUCTIONS.MD +++ b/GD_INSTRUCTIONS.MD @@ -1,36 +1,66 @@ #
How to use Google Drive with TYSS
-**Google only allows unverified apps to have up to 100 test users. Not only would this limit be filled within minutes, but each user has to manually added.** - - -1. Go to https://console.cloud.google.com/, if this is your first time, accept the terms and you should now have the dashboard in front of you. -2. Click `CREATE PROJECT` on the next screen.
-3. On the next screen name your project TYSS. Organization is not required. Click create. -4. Give it a few seconds and the project should be created. Select TYSS if it hasn't been selected already.
-5. On the left side, find APIs and Services and click Dashboard.
-6. Once the dashboard loads, click `+ENABLE APIS AND SERVICES`.
-7. Scroll down a little and find Google Drive API under Google Workspace.
-8. Click on it and Click Enable on the next screen. -9. On the next screen, Google should be informing you that you need to create credentials in order to use Drive. Click Create Credentials.
-10. Under `Which API are you using?`, find `Cloud Storage API`. Under `What data will you be accessing?`, select `User data`. Click done. -11. On the next screen, there should be a reminder to configure your OAuth Consent screen AKA your login screen. Click `CONFIGURE CONSENT SCREEN`.
-12. Select external and then create. -13. Fill out the next screen. Only App name, user support email, and developer contact information are required. The rest can be left blank. Save and Continue. -14. On the next screen, click `ADD OR REMOVE SCOPES`. Find `../auth/drive` or just type `https://www.googleapis.com/auth/drive` into `Manually add scopes`. Click update at the bottom. Save and Continue. -15. Add yourself as a test user. Save and Continue. -16. `BACK TO DASHBOARD` -17. On the left under APIs and Services, click Credentials.
-18. On the next screen, click `+ CREATE_CREDENTIALS`. Select `OAuth Client ID`.
-19. On the next screen, under `Application Type`, select `Desktop App`. Click `Create`. -20. You now have your Client ID and Client Secret. Copy and paste these somewhere for later. Almost done! -21. You're going to need to login and get an authentication code for TYSS to exchange. This is only needed once. Afterwards, TYSS will use a refresh token so you do not have to log in every time you want to upload or download something. Replace `YOUR_CLIENT_ID_HERE` with your client ID obtained in the previous step: `https://accounts.google.com/o/oauth2/v2/auth?client_id=YOUR_CLIENT_ID_HERE&redirect_uri=urn:ietf:wg:oauth:2.0:oob&response_type=code&scope=https://www.googleapis.com/auth/drive`. -22. At the end, you will be presented with a code. You will need this for the final step. -23. On your 3DS's SD card, go to `SDMC:/TYSS`. Create a file named `drive.json`. -24. Add these lines and save. You should be good to go now: -``` -{ - "driveClientID" : "YOUR_CLIENT_ID_HERE", - "driveClientSecret" : "YOU_CLIENT_SECRET_HERE", - "driveAuthCode" : "YOU_CODE_FROM_STEP_22_HERE" -} -``` +These steps create your own Google Drive OAuth credentials and a refresh token for TYSS. + +**Never share `drive.json`. Never commit real client secrets or refresh tokens.** + +1. Go to https://console.cloud.google.com/ and create or select a project for TYSS. +2. Go to `APIs and Services`, then `Library`. +3. Search for `Google Drive API` and enable it. +4. Open `Google Auth Platform` or `OAuth consent screen`. +5. Configure the OAuth consent screen. For personal use, fill in the required app name, user support email, and developer contact email. +6. Add the Drive scope: + + ``` + https://www.googleapis.com/auth/drive + ``` + +7. If your OAuth app remains `External` and `Testing`, Google may expire refresh tokens for the Drive scope after 7 days. For personal use, publish the app to `In production` to avoid the testing-mode token expiry when Google allows it. Because the Drive scope may be sensitive or restricted, Google may still show an unverified app warning or require app verification. +8. Go to `APIs and Services`, then `Credentials`. +9. Click `+ CREATE CREDENTIALS`, then `OAuth client ID`. +10. Set `Application type` to `Web application`. Do not use `Desktop app`. +11. Add this exact `Authorized redirect URI`: + + ``` + https://developers.google.com/oauthplayground + ``` + +12. Create the client and copy the Web OAuth client ID and client secret. Because `drive.json` is stored on the SD card, do not treat this client secret as confidential after copying it there. +13. Open https://developers.google.com/oauthplayground. +14. Click the gear icon and use these settings: + - `OAuth flow`: `Server-side` + - `Access type`: `Offline` + - `Force prompt`: `Consent Screen` + - Enable `Use your own OAuth credentials` + - Enter the Web OAuth client ID and client secret from Google Cloud +15. In the scope box, enter: + + ``` + https://www.googleapis.com/auth/drive + ``` + +16. Click `Authorize APIs` and sign in with the Google account you want TYSS to use. +17. Click `Exchange authorization code for tokens`. +18. Copy the `Refresh token`. +19. On your 3DS's SD card, go to `SDMC:/TYSS`. Create a file named `drive.json`. +20. Add these lines and save: + + ``` + { + "driveClientID": "YOUR_WEB_CLIENT_ID_HERE", + "driveClientSecret": "YOUR_WEB_CLIENT_SECRET_HERE", + "driveRefreshToken": "YOUR_REFRESH_TOKEN_HERE", + "driveInitOnBoot": true + } + ``` + +Do not include `driveAuthCode` when using this method. + +`driveInitOnBoot` controls whether TYSS initializes Google Drive when TYSS starts and `drive.json` exists. If this key is omitted, the current default is `true`. Set it to `false` if you do not want Drive to initialize on startup. + +If `drive.json` is exposed, revoke the app's access from your Google Account, rotate the Web OAuth client secret in Google Cloud, and generate a new refresh token. Refresh tokens can also become invalid if you revoke app access, the token is unused for a long time, or too many refresh tokens are generated. + +## Troubleshooting + +- `invalid_client` usually means the client ID or client secret is wrong, the OAuth client was deleted, you are using the wrong Google Cloud project, or the client is not a `Web application` client. +- `redirect_uri_mismatch` means `https://developers.google.com/oauthplayground` was not added exactly as an `Authorized redirect URI`.