diff --git a/back/imap/index.js b/back/imap/index.js index 49a32bd..66c2977 100644 --- a/back/imap/index.js +++ b/back/imap/index.js @@ -5,8 +5,8 @@ const saveMessage = require('./storeMessage').saveMessage; const imap = new Imap({ - user: '***REMOVED***', - password: '***REMOVED***', + user: '', + password: '', tlsOptions: {servername: "imap.gmail.com"}, host: 'imap.gmail.com', port: 993, diff --git a/back/sql/database.dart b/back/sql/database.dart new file mode 100644 index 0000000..335c16d --- /dev/null +++ b/back/sql/database.dart @@ -0,0 +1,105 @@ +Table "addresses" { + "id" int [pk, not null, increment] + "name" text + "localpart" text [not null] + "domain" text [not null] + "email" text [not null] + + Indexes { + email [unique] + } +} + +Table "mailboxes" { + "id" int [pk, not null, increment] + "name" text [not null] + "uidnext" int [not null, default: 1] + "nextmodseq" bigint [not null, default: 1] + "first_recent" int [not null, default: 1] + "uidvalidity" int [not null, default: 1] + + Indexes { + name [unique] + } +} + +Table "messages" { + "id" int [pk, not null, increment] + "idate" timestamp [not null] + "rfc822size" int +} + +Table "mailbox_messages" { + "mailbox" int [not null] + "uid" int [pk, not null] + "message" int [pk, not null] + "modseq" bigint [not null] + "seen" boolean [not null, default: false] + "deleted" boolean [not null, default: false] +} + +Ref: mailbox_messages.mailbox > mailboxes.id +Ref: mailbox_messages.message - messages.id + +Table "bodyparts" { + "id" int [pk, not null, increment] + "bytes" int [not null] + "hash" text [not null] + "text" text + "data" binary +} + +Table "part_numbers" { + "message" int [pk, not null] + "part" text [not null] + "bodypart" int [not null] + "bytes" int + "nb_lines" int +} + +// todo on delete cascade +Ref: part_numbers.message > messages.id +Ref: part_numbers.bodypart - bodyparts.id + +Table "field_names" { + "id" int [pk, not null, increment] + "name" text [not null] + + Indexes { + name [unique] + } +} + +Table "header_fields" { + "id" int [pk, not null, increment] + "message" int [pk, not null] + "part" text [not null] + "position" int [not null] + "field" int [not null] + "value" text + + Indexes { + message [unique] + part [unique] + position [unique] + field [unique] + } +} + +Ref: header_fields.message > messages.id +Ref: header_fields.part > part_numbers.part +Ref: header_fields.field > field_names.id + +Table "address_fields" { + "message" int [not null] + "part" text [not null] + "position" int [not null] + "field" int [not null] + "number" int + "address" int [not null] +} + +Ref: address_fields.message > messages.id +Ref: address_fields.part > part_numbers.part +Ref: address_fields.field > field_names.id +Ref: address_fields.address > addresses.id diff --git a/back/sql/database.png b/back/sql/database.png new file mode 100644 index 0000000..97d79fd Binary files /dev/null and b/back/sql/database.png differ diff --git a/back/sql/database.sql b/back/sql/database.sql new file mode 100644 index 0000000..a9a2490 --- /dev/null +++ b/back/sql/database.sql @@ -0,0 +1,108 @@ +CREATE TABLE `addresses` ( + `id` int PRIMARY KEY NOT NULL AUTO_INCREMENT, + `name` text, + `localpart` text NOT NULL, + `domain` text NOT NULL, + `email` text NOT NULL +); + +CREATE TABLE `mailboxes` ( + `id` int PRIMARY KEY NOT NULL AUTO_INCREMENT, + `name` text NOT NULL, + `uidnext` int NOT NULL DEFAULT 1, + `nextmodseq` bigint NOT NULL DEFAULT 1, + `first_recent` int NOT NULL DEFAULT 1, + `uidvalidity` int NOT NULL DEFAULT 1 +); + +CREATE TABLE `messages` ( + `id` int PRIMARY KEY NOT NULL AUTO_INCREMENT, + `idate` timestamp NOT NULL, + `rfc822size` int +); + +CREATE TABLE `mailbox_messages` ( + `mailbox` int NOT NULL, + `uid` int NOT NULL, + `message` int NOT NULL, + `modseq` bigint NOT NULL, + `seen` boolean NOT NULL DEFAULT false, + `deleted` boolean NOT NULL DEFAULT false, + PRIMARY KEY (`uid`, `message`) +); + +CREATE TABLE `bodyparts` ( + `id` int PRIMARY KEY NOT NULL AUTO_INCREMENT, + `bytes` int NOT NULL, + `hash` text NOT NULL, + `text` text, + `data` binary +); + +CREATE TABLE `part_numbers` ( + `message` int PRIMARY KEY NOT NULL, + `part` text NOT NULL, + `bodypart` int NOT NULL, + `bytes` int, + `nb_lines` int +); + +CREATE TABLE `field_names` ( + `id` int PRIMARY KEY NOT NULL AUTO_INCREMENT, + `name` text NOT NULL +); + +CREATE TABLE `header_fields` ( + `id` int NOT NULL AUTO_INCREMENT, + `message` int NOT NULL, + `part` text NOT NULL, + `position` int NOT NULL, + `field` int NOT NULL, + `value` text, + PRIMARY KEY (`id`, `message`) +); + +CREATE TABLE `address_fields` ( + `message` int NOT NULL, + `part` text NOT NULL, + `position` int NOT NULL, + `field` int NOT NULL, + `number` int, + `address` int NOT NULL +); + +CREATE UNIQUE INDEX `addresses_index_0` ON `addresses` (`email`); + +CREATE UNIQUE INDEX `mailboxes_index_1` ON `mailboxes` (`name`); + +CREATE UNIQUE INDEX `field_names_index_2` ON `field_names` (`name`); + +CREATE UNIQUE INDEX `header_fields_index_3` ON `header_fields` (`message`); + +CREATE UNIQUE INDEX `header_fields_index_4` ON `header_fields` (`part`); + +CREATE UNIQUE INDEX `header_fields_index_5` ON `header_fields` (`position`); + +CREATE UNIQUE INDEX `header_fields_index_6` ON `header_fields` (`field`); + +ALTER TABLE `mailbox_messages` ADD FOREIGN KEY (`mailbox`) REFERENCES `mailboxes` (`id`); + +ALTER TABLE `messages` ADD FOREIGN KEY (`id`) REFERENCES `mailbox_messages` (`message`); + +ALTER TABLE `part_numbers` ADD FOREIGN KEY (`message`) REFERENCES `messages` (`id`); + +ALTER TABLE `bodyparts` ADD FOREIGN KEY (`id`) REFERENCES `part_numbers` (`bodypart`); + +ALTER TABLE `header_fields` ADD FOREIGN KEY (`message`) REFERENCES `messages` (`id`); + +ALTER TABLE `header_fields` ADD FOREIGN KEY (`part`) REFERENCES `part_numbers` (`part`); + +ALTER TABLE `header_fields` ADD FOREIGN KEY (`field`) REFERENCES `field_names` (`id`); + +ALTER TABLE `address_fields` ADD FOREIGN KEY (`message`) REFERENCES `messages` (`id`); + +ALTER TABLE `address_fields` ADD FOREIGN KEY (`part`) REFERENCES `part_numbers` (`part`); + +ALTER TABLE `address_fields` ADD FOREIGN KEY (`field`) REFERENCES `field_names` (`id`); + +ALTER TABLE `address_fields` ADD FOREIGN KEY (`address`) REFERENCES `addresses` (`id`);