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.

79 lines
2.9 KiB

  1. import 'dart:async';
  2. import 'package:flutter/widgets.dart';
  3. import 'package:path/path.dart';
  4. import 'package:sqflite/sqflite.dart';
  5. Future<void> deleteDb() async {
  6. final path = join(await getDatabasesPath(), 'envelope.db');
  7. deleteDatabase(path);
  8. }
  9. Future<Database> getDatabaseConnection() async {
  10. WidgetsFlutterBinding.ensureInitialized();
  11. final path = join(await getDatabasesPath(), 'envelope.db');
  12. final database = openDatabase(
  13. path,
  14. onCreate: (db, version) async {
  15. await db.execute(
  16. '''
  17. CREATE TABLE IF NOT EXISTS friends(
  18. id TEXT PRIMARY KEY,
  19. user_id TEXT,
  20. username TEXT,
  21. friend_id TEXT,
  22. symmetric_key TEXT,
  23. asymmetric_public_key TEXT,
  24. accepted_at TEXT
  25. );
  26. ''');
  27. // TODO: Change users to use its own table, as it is a json blob
  28. await db.execute(
  29. '''
  30. CREATE TABLE IF NOT EXISTS conversations(
  31. id TEXT PRIMARY KEY,
  32. user_id TEXT,
  33. conversation_detail_id TEXT,
  34. symmetric_key TEXT,
  35. admin INTEGER,
  36. name TEXT,
  37. );
  38. ''');
  39. await db.execute(
  40. '''
  41. CREATE TABLE IF NOT EXISTS conversation_users(
  42. id TEXT PRIMARY KEY,
  43. conversation_id TEXT,
  44. username TEXT,
  45. data TEXT,
  46. association_key TEXT,
  47. admin INTEGER
  48. );
  49. ''');
  50. await db.execute(
  51. '''
  52. CREATE TABLE IF NOT EXISTS messages(
  53. id TEXT PRIMARY KEY,
  54. symmetric_key TEXT,
  55. user_symmetric_key TEXT,
  56. data TEXT,
  57. sender_id TEXT,
  58. sender_username TEXT,
  59. association_key TEXT,
  60. created_at TEXT,
  61. failed_to_send INTEGER
  62. );
  63. ''');
  64. },
  65. // Set the version. This executes the onCreate function and provides a
  66. // path to perform database upgrades and downgrades.
  67. version: 1,
  68. );
  69. return database;
  70. }