A work in progress flutter plugin for using Tozny's products such as TozStore and TozId to encrypt and secure data, applications, and identities.
Use in your Dart or Flutter project by adding plugin_tozny
as a dependency in your pubspec file:
plugin_tozny:
git:
url: git://github.com/tozny/flutter-plugin
ref: 0.0.6
After creating a Realm (using all lowercase characters) and Registration Token, update the example values for realm_name and registration token below, and then you can run the following example function to register a new Identity for that Realm, login as that Identity, and encrypt and write data to TozStore.
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', // Your Registration Token goes here
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 = await 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:
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}}
- Plugin implements a partial set of all the methods and classes provided by the native SDK (e3db-java/e3db-swift). See the example application, or the flutter code example above, for the currently available methods and classes.