Encrypted messaging app
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
2.9 KiB

import 'dart:async';
import 'package:flutter/widgets.dart';
import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';
Future<void> deleteDb() async {
final path = join(await getDatabasesPath(), 'envelope.db');
deleteDatabase(path);
}
Future<Database> getDatabaseConnection() async {
WidgetsFlutterBinding.ensureInitialized();
final path = join(await getDatabasesPath(), 'envelope.db');
final database = openDatabase(
path,
onCreate: (db, version) async {
await db.execute(
'''
CREATE TABLE IF NOT EXISTS friends(
id TEXT PRIMARY KEY,
user_id TEXT,
username TEXT,
friend_id TEXT,
symmetric_key TEXT,
asymmetric_public_key TEXT,
accepted_at TEXT
);
''');
// TODO: Change users to use its own table, as it is a json blob
await db.execute(
'''
CREATE TABLE IF NOT EXISTS conversations(
id TEXT PRIMARY KEY,
user_id TEXT,
conversation_detail_id TEXT,
symmetric_key TEXT,
admin INTEGER,
name TEXT,
users TEXT
);
''');
await db.execute(
'''
CREATE TABLE IF NOT EXISTS conversation_users(
id TEXT PRIMARY KEY,
conversation_id TEXT,
username TEXT,
data TEXT,
association_key TEXT,
admin TEXT
);
''');
await db.execute(
'''
CREATE TABLE IF NOT EXISTS messages(
id TEXT PRIMARY KEY,
symmetric_key TEXT,
user_symmetric_key TEXT,
data TEXT,
sender_id TEXT,
sender_username TEXT,
association_key TEXT,
created_at TEXT,
failed_to_send INTEGER
);
''');
},
// Set the version. This executes the onCreate function and provides a
// path to perform database upgrades and downgrades.
version: 1,
);
return database;
}