Links
💿

@portal-hq/gdrive-storage

Portal Google Drive backup storage

The @portal-hq/gdrive-storage package contains a storage adapter intended for use with the @portal-hq/core package.
This storage adapter allows end users to save backup MPC shares to their Google Drive.

Basic usage

Install the package in your React Native project.

yarn
npm
yarn add @portal-hq/gdrive-storage
npm install --save @portal-hq/gdrive-storage

Import the package into the component where you initialize the Portal class

import Portal from '@portal-hq/core'
import GoogleStorage from '@portal-hq/google-storage'

Register your storage adapter and initialize the Portal class

const storage = new GoogleStorage({
// Required for Android
androidClientId: 'YOUR_ANDROID_CLIENT_ID',
// Required for iOS
iosClientId: 'YOUR_IOS_CLIENT_ID',
// Optional
folder: 'YOUR_CUSTOM_STORAGE_LOCATION',
})
const portal = new Portal({
// ...your other config options
backup: {
gdrive: storage,
},
})

Create a Google App

To enable Google Drive backups you will need to create a Google Project within your organization that will act as the OAuth consumer.
  • Create a new Google project in the Google Cloud Console​
  • On the APIs & Services page click ENABLE APIS AND SERVICES
  • Search for Google Drive API, select it, and click Enable
  • Click on OAuth consent screen
    • For user type select internal.
    • Fill out the relevant information.
    Skip scopes as we configure that within our sdk.
  • Click on Credentials in the left menu and select + Create Credentials
Android
iOS
  • Select OAuth client ID and choose Android from the Application Type list
  • Fill in the form as instructed, with Name, Package name, and SHA-1 from your Keystore.
    • Note that when testing you'll want to use your debug.keystore at /android/app/debug.keystore; However, you'll need to switch this value when pushing it to the store.
    • Find the Sha-1 fingerprint with this command from the root project folder: keytool -keystore ./app/debug.keystore -list -v
  • Once you have successfully created your Android Client ID , download the JSON, and rename it to begoogle-service.json
  • Move the downloaded file into the /android/app directory.
  • Now, go back to the Credentials screen from the previous step and select Web Application.
  • Input the name. Then click create and copy the value from Your Client ID
  • This value is what you will pass into the PortalOptions config when instantiating your portal class.
  • Add emails for internal testing until you've published your app for external use.
  • Select OAuth client ID and choose iOS from the Application Type list
  • Get your Bundle ID from the react-native / iOS project
  • Once you've successfully created your iOS client ID, download the .plist config and copy the REVERSED_CLIENT_ID to the URL Scheme section of your info.plist either in xcode or your IDE:
info.plist
1
...
2
<key>CFBundleURLTypes</key>
3
<array>
4
<dict>
5
<key>CFBundleTypeRole</key>
6
<string>Editor</string>
7
<key>CFBundleURLSchemes</key>
8
<array>
9
<string>REVERSE_CLIENT_ID</string>
10
</array>
11
</dict>
12
</array>
13
...
  • Rename the downloaded .plist file to GoogleService-Info.plist and save that to your /ios directory
  • Copy and paste the Client ID from the GoogleService-Info.plistinto the PortalOptions config object when instantiating your portal class