-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add more complete examples, remove logging of credentials, document h…
…ow to publish new plugin versions.
- Loading branch information
Levi Sky
committed
Mar 8, 2021
1 parent
f38c4ec
commit cc6e099
Showing
8 changed files
with
188 additions
and
74 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,105 @@ | ||
# plugin_tozny | ||
|
||
A flutter plugin for Tozny's products. | ||
A work in progress flutter plugin for using [Tozny's](https://www.tozny.com) products such as TozStore and TozId to encrypt and secure data, | ||
applications, and identities. | ||
|
||
## Using | ||
|
||
Use in your Dart or Flutter project by adding `plugin_tozny` as a dependency in your pubspec file: | ||
|
||
```yaml | ||
plugin_tozny: | ||
git: | ||
url: git://github.com/tozny/flutter-plugin | ||
ref: 0.0.5 | ||
``` | ||
|
||
### End-to-end TozId Identity Registration, Login, & TozStore encrypted filed storage example | ||
|
||
```dart | ||
import 'package:plugin_tozny/plugin_tozny.dart'; | ||
import 'package:plugin_tozny/plugin_identity.dart'; | ||
import 'package:plugin_tozny/plugin_realm.dart'; | ||
import 'package:plugin_tozny/tozny_model.dart'; | ||
void registerLoginStoreFileExample() async { | ||
RealmConfig realmConfig = new RealmConfig.fromJson({ | ||
"realm_name": "example", | ||
"app_name": "account", // Only supported value at the moment | ||
"broker_target_url": "https://id.tozny.com/example/recover", // Default value in the form of https://<TozIdBaseURL>/<YourRealmName>/recover will use a Tozny Hosted broker compute function for password recovery flows | ||
"api_url": "https://api.e3db.com" // Default value for SaaS customers | ||
}); | ||
var realmClient = PluginRealm(realmConfig); | ||
try { | ||
var username = 'example'; | ||
var email = 'example@example.com'; // Note that username and password can be the same if the username is a valid email | ||
var password = 'StrongpassW0rd1!'; | ||
var realmIdentity = await realmClient.register( | ||
username, | ||
password, | ||
'10a0cd84416e0950e345EXAMPLE813ec34a32ce1e9f76e3c192c932d2add', | ||
email, | ||
'FirstName', | ||
'LastName', | ||
60); | ||
print("Registered Realm Identity ${realmIdentity.toJson().toString()}"); | ||
try { | ||
var loggedInIdentity = await realmClient.login(username, password); | ||
print( | ||
"Logged into Realm as Identity ${loggedInIdentity.config.toJson().toString()}"); | ||
try { | ||
var absoluteFilePath = writeExampleFile(); | ||
var recordType = "android-gyroscope-sensor-data"; | ||
var searchableRecordMetadata = { | ||
"sensor-category": "movement", | ||
"collection-timestamp": "1615146901", | ||
"anonymous-participant-id": "u-u-i-d", | ||
}; | ||
var storedRecordDetails = await loggedInIdentity.client.writeFile( | ||
recordType, absoluteFilePath, searchableRecordMetadata); | ||
print("Wrote file Record ${storedRecordDetails.toJson().toString()}"); | ||
} catch (e, s) { | ||
print(e); | ||
print(s); | ||
} | ||
} catch (e, s) { | ||
print(e); | ||
print(s); | ||
} | ||
} catch (e, s) { | ||
print(e); | ||
print(s); | ||
} | ||
} | ||
Future<String> writeExampleFile() async { | ||
final directory = await getApplicationDocumentsDirectory(); | ||
var filename = "example.txt"; | ||
final path = '${directory.path}/$filename'; | ||
var file = new File(path); | ||
var sink = file.openWrite(); | ||
sink.write('example'); | ||
await sink.close(); | ||
return file.absolute.path; | ||
} | ||
``` | ||
|
||
Running the example above after replacing the example values (realm name, registration token, username and email) | ||
will output text similar to the below to the emulator or device console: | ||
|
||
```text | ||
I/flutter ( 6719): Registered Realm Identity {client_credentials: {api_key_id: fbd4b8EXAMPLE8b180a88435eec7c4e7e60e6873e820a9d, api_secret: b43de1815737df6c4EXAMPLE83ccf45991a0118c415ba3d0cd86735f, client_id: fa7da2d4-1486-41ab-8d68-accf01c27a3e, client_email: , public_key: xCNRuxVh-83qYV7WQ1EXAMPLLUygwN_-GbijgQ, private_key: yi_UZqiQ1BpYxF2X3i0kGjUmP3AmvkEXAMPL, public_signing_key: QI8-D-dl5y3bgl2CFUFIykfPJ0KaXdz505YPGpYRYeg, private_signing_key: kradKCZbLCVu0m61-rZILQtgEjqhVBRsW3MhilYLnG1Ajz4P52XnLduCXYIVQUjKR88nQppdEXAMPL, api_url: https://api.e3db.com}, identity_config: {api_url: , appName: null, broker_target_url: https://id.tozny.com/flutter/recover, realm_name: flutter, user_id: 1786, username: example2}} | ||
I/flutter ( 6719): Logged into Realm as Identity {client_credentials: {api_key_id: fbd4b81604971a8fa5977958c646EXAMPL7c4e7e60e6873e820a9d, api_secret: b43de1815737df6EXAMPELcf45991a0118c415ba3d0cd86735f, client_id: fa7da2d4-1486-41ab-8d68-accf01c27a3e, client_email: , public_key: xCNRuxVh-83EXAMPLCkLoLUygwN_-GbijgQ, private_key: yi_UZqiQ1BpYxF2X3i0kGjUmP3AmEXAMPL, public_signing_key: QI8-D-dl5y3bgl2CFUFIykfPJ0KaXdz505YPGpYRYeg, private_signing_key: kradKCZbLCVu0m61-rZILQtgEjqhVBRsW3MhilYLnG1Ajz4P52XnLduCXYIVQUjKR88nEXAMPL, api_url: https://api.e3db.com}, identity_config: {api_url: , appName: null, broker_target_url: https://id.tozny.com/flutter/recover, realm_name: flutter, user_id: 1786, username: example2}, user_agent_token: {access_token: eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJnTWlGYWVxMFZVRjFzN1NXTW90UzJEWU9nT0s1UC1zQ2N2UkZhcVV1N2EwIn0.eyJleHAiOjE2MTUxNjQ1NzIsImlhdCI6MTYxNTE2MDk3MiwiYXV0aF90aW1lIjoxNjE1MTYwOTcyLCJqdGkiOiI0NDI3MWRiMC00ZmFmLTQ0NzQtEXAMPL | ||
I/flutter ( 6719): Wrote file Record {record_id: 0901582a-1ae2-4e42-8435-f74212ea86f8, writer_id: fa7da2d4-1486-41ab-8d68-accf01c27a3e, user_id: fa7da2d4-1486-41ab-8d68-accf01c27a3e, created: 2021-03-08T07:49:33.000Z, last_modified: 2021-03-08T07:49:33.000Z, version: 91af53ee-0575-4a73-bbc2-ee0803038f25, type: android-gyroscope-sensor-data, plain: {sensor-category: movement, anonymous-participant-id: u-u-i-d, collection-timestamp: 1615146901}, file: {file_url: null, file_name: 91b18cc7-cb08-4372-ac94-baab6cae31b4-1615160973, checksum: vwItq0yNXV2q/QzrhLd6Fw==, compression: RAW, size: null}} | ||
``` | ||
|
||
## Current Limitations | ||
|
||
* Plugin only works for Flutter apps running on Android. | ||
* Plugin implements a partial set of all the methods and classes provided by the native SDK ([e3db-java](https://github.com/tozny/e3db-java)). | ||
* Plugin only works with TozId Realms where the realm name is all lowercase. | ||
* Plugin only works with TozId Identities creating using this plugin / is incompatible with those created via the TozId UI. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.