From 493859a688d4d011c1fbcdcee479107929dcd4bf Mon Sep 17 00:00:00 2001 From: osaajani Date: Fri, 8 Nov 2019 18:06:18 +0100 Subject: [PATCH] Update database creation to support multi-user paradigm --- SmsApi.php | 138 --------------------------------------------- createDatabase.sql | 71 ++++++++++++++++------- 2 files changed, 50 insertions(+), 159 deletions(-) delete mode 100755 SmsApi.php diff --git a/SmsApi.php b/SmsApi.php deleted file mode 100755 index 3113055..0000000 --- a/SmsApi.php +++ /dev/null @@ -1,138 +0,0 @@ -bdd = $bdd; - $this->model = $model; - - $this->internal_user = new \controllers\internals\User($this->bdd); - $this->internalContact = new \controllers\internals\Contact($this->bdd); - - \controllers\internals\Tool::verifyconnect(); - } - - /** - * Cette fonction permet d'envoyer un Sms, en passant simplement des arguments à l'URL (ou pas $_GET) - * @param string text = Le contenu du Sms - * @param mixed numbers = Les numéros auxquels envoyer les Sms. Soit un seul numéro, et il s'agit d'un string. Soit plusieurs numéros, et il s'agit d'un tableau - * @param mixed contacts = Les noms des contacts auxquels envoyer les Sms. Soit un seul et il s'agit d'un string. Soit plusieurs, et il s'agit d'un tableau - * @param mixed groupes = Les noms des groupes auxquels envoyer les Sms. Soit un seul et il s'agit d'un string. Soit plusieurs, et il s'agit d'un tableau - * @param optionnal string date = La date à laquelle doit être envoyé le Sms. Au format 'Y-m-d H:i'. Si non fourni, le Sms sera envoyé dans 2 minutes - */ - public function api() - { - //On récupère l'email et le password - $email = isset($_GET['email']) ? $_GET['email'] : null; - $email = isset($_POST['email']) ? $_POST['email'] : $email; - $password = isset($_GET['password']) ? $_GET['password'] : null; - $password = isset($_POST['password']) ? $_POST['password'] : $password; - - //Si les identifiants sont incorrect on retourne une erreur - $user = $internal_user->check_credentials($email, $password); - - if (!$user) { - echo json_encode(array( - 'error' => self::API_ERROR_BAD_ID, - )); - return true; - } - - //On map les variables $_GET - $get_numbers = isset($_GET['numbers']) ? $_GET['numbers'] : array(); - $get_contacts = isset($_GET['contacts']) ? $_GET['contacts'] : array(); - $get_groupes = isset($_GET['groupes']) ? $_GET['groupes'] : array(); - - //On map les variables POST - $post_numbers = isset($_POST['numbers']) ? $_POST['numbers'] : array(); - $post_contacts = isset($_POST['contacts']) ? $_POST['contacts'] : array(); - $post_groupes = isset($_POST['groupes']) ? $_POST['groupes'] : array(); - - //On map le texte et la date à part car c'est les seuls arguments qui ne sera jamais un tableau - $text = isset($_GET['text']) ? $_GET['text'] : null; - $text = isset($_POST['text']) ? $_POST['text'] : $text; - $date = isset($_GET['date']) ? $_GET['date'] : null; - $date = isset($_POST['date']) ? $_POST['date'] : $date; - - //On passe tous les paramètres GET en tableau - $get_numbers = is_array($get_numbers) ? $get_numbers : ($get_numbers ? array($get_numbers) : array()); - $get_contacts = is_array($get_contacts) ? $get_contacts : array($get_contacts); - $get_groupes = is_array($get_groupes) ? $get_groupes : array($get_groupes); - - //On passe tous les paramètres POST en tableau - $post_numbers = is_array($post_numbers) ? $post_numbers : array($post_numbers); - $post_contacts = is_array($post_contacts) ? $post_contacts : array($post_contacts); - $post_groupes = is_array($post_groupes) ? $post_groupes : array($post_groupes); - - //On merge les données reçus en GET, et celles en POST - $numbers = array_merge($get_numbers, $post_numbers); - $contacts = array_merge($get_contacts, $post_contacts); - $groupes = array_merge($get_groupes, $post_groupes); - - //Pour chaque contact, on récupère l'id du contact - foreach ($contacts as $key => $contact) { - if (!$contact = $internalContact->get_by_name($contact)) { - unset($contacts[$key]); - continue; - } - - $contacts[$key] = $contact['id']; - } - - //Pour chaque groupe, on récupère l'id du groupe - foreach ($groupes as $key => $name) { - if (!$groupe = $internalContact->get_by_name($groupe)) { - unset($groupes[$key]); - continue; - } - - $groupes[$key] = $groupe['id']; - } - - //Si la date n'est pas définie, on la met à la date du jour - if (!$date) { - $now = new \DateTime(); - $date = $now->format('Y-m-d H:i'); - } - - //Si il manque des champs essentiels, on leve une erreur - if (!$text || (!$numbers && !$contacts && !$groupes)) { - echo json_encode(array( - 'error' => self::API_ERROR_MISSING_FIELD, - )); - return false; - } - - //On assigne les variable POST (après avoir vidé $_POST) en prévision de la création du Sms - if (!$this->internalScheduled->create(['at' => $date, 'content' => $text], $numbers, $contacts, $groupes)) { - echo json_encode(array( - 'error' => self::API_ERROR_CREATION_FAILED, - )); - return false; - } - - echo json_encode(array( - 'error' => self::API_ERROR_NO, - )); - return true; - } - } diff --git a/createDatabase.sql b/createDatabase.sql index 8e4c2c2..063d00b 100755 --- a/createDatabase.sql +++ b/createDatabase.sql @@ -6,18 +6,23 @@ USE raspisms; CREATE TABLE IF NOT EXISTS setting ( id INT NOT NULL AUTO_INCREMENT, + id_user INT NOT NULL, name VARCHAR(50) NOT NULL, value VARCHAR(1000) NOT NULL, PRIMARY KEY (id), + FOREIGN KEY (id_user) REFERENCES user (id) ON DELETE CASCADE ON UPDATE CASCADE, UNIQUE (name) ); CREATE TABLE IF NOT EXISTS scheduled ( id INT NOT NULL AUTO_INCREMENT, + id_user INT NOT NULL, + send_by VARCHAR(25) DEFAULT NULL, at DATETIME NOT NULL, text VARCHAR(1000) NOT NULL, flash BOOLEAN NOT NULL DEFAULT 0, + FOREIGN KEY (id_user) REFERENCES user (id) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY (id) ); @@ -32,7 +37,7 @@ CREATE TABLE IF NOT EXISTS received PRIMARY KEY (id) ); -CREATE TABLE IF NOT EXISTS sent +CREATE TABLE IF NOT EXISTS sended ( id INT NOT NULL AUTO_INCREMENT, at DATETIME NOT NULL, @@ -46,29 +51,32 @@ CREATE TABLE IF NOT EXISTS sent CREATE TABLE IF NOT EXISTS contact ( - id INT NOT NULL AUTO_INCREMENT, + id_user INT NOT NULL, name VARCHAR(100) NOT NULL, number VARCHAR(20) NOT NULL, PRIMARY KEY (id), + FOREIGN KEY (id_user) REFERENCES user (id) ON DELETE CASCADE ON UPDATE CASCADE, UNIQUE (name) ); -CREATE TABLE IF NOT EXISTS groupe +CREATE TABLE IF NOT EXISTS group ( id INT NOT NULL AUTO_INCREMENT, + id_user INT NOT NULL, name VARCHAR(100) NOT NULL, PRIMARY KEY (id), + FOREIGN KEY (id_user) REFERENCES user (id) ON DELETE CASCADE ON UPDATE CASCADE, UNIQUE (name) ); -CREATE TABLE IF NOT EXISTS groupe_contact +CREATE TABLE IF NOT EXISTS group_contact ( id INT NOT NULL AUTO_INCREMENT, - id_groupe INT NOT NULL, + id_group INT NOT NULL, id_contact INT NOT NULL, PRIMARY KEY (id), - FOREIGN KEY (id_groupe) REFERENCES groupe (id) ON DELETE CASCADE ON UPDATE CASCADE, + FOREIGN KEY (id_group) REFERENCES group (id) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (id_contact) REFERENCES contact (id) ON DELETE CASCADE ON UPDATE CASCADE ); @@ -82,14 +90,14 @@ CREATE TABLE IF NOT EXISTS scheduled_contact FOREIGN KEY (id_contact) REFERENCES contact (id) ON DELETE CASCADE ON UPDATE CASCADE ); -CREATE TABLE IF NOT EXISTS scheduled_groupe +CREATE TABLE IF NOT EXISTS scheduled_group ( id INT NOT NULL AUTO_INCREMENT, id_scheduled INT NOT NULL, - id_groupe INT NOT NULL, + id_group INT NOT NULL, PRIMARY KEY (id), FOREIGN KEY (id_scheduled) REFERENCES scheduled (id) ON DELETE CASCADE ON UPDATE CASCADE, - FOREIGN KEY (id_groupe) REFERENCES groupe (id) ON DELETE CASCADE ON UPDATE CASCADE + FOREIGN KEY (id_group) REFERENCES group (id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE TABLE IF NOT EXISTS scheduled_number @@ -104,19 +112,23 @@ CREATE TABLE IF NOT EXISTS scheduled_number CREATE TABLE IF NOT EXISTS command ( id INT NOT NULL AUTO_INCREMENT, + id_user INT NOT NULL, name VARCHAR(25) NOT NULL, script VARCHAR(100) NOT NULL, admin BOOLEAN NOT NULL, PRIMARY KEY (id), + FOREIGN KEY (id_user) REFERENCES user (id) ON DELETE CASCADE ON UPDATE CASCADE, UNIQUE (name) ); CREATE TABLE IF NOT EXISTS event ( id INT NOT NULL AUTO_INCREMENT, + id_user INT NOT NULL, type VARCHAR(25) NOT NULL, at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, text VARCHAR(255) NOT NULL, + FOREIGN KEY (id_user) REFERENCES user (id) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY (id) ); @@ -131,11 +143,35 @@ CREATE TABLE IF NOT EXISTS user UNIQUE (email) ); +CREATE TABLE IF NOT EXISTS user_number +( + id INT NOT NULL AUTO_INCREMENT, + id_user INT NOT NULL, + phone_number VARCHAR(25) NOT NULL, + platform VARCHAR(100) NOT NULL, + platform_datas JSON NOT NULL, + CHECK (JSON_VALID(platform_datas)), + PRIMARY KEY (id), + FOREIGN KEY (id_user) REFERENCES user (id) ON DELETE CASCADE ON UPDATE CASCADE +); + +#Table to ensure external validation process by mailing or other +CREATE TABLE IF NOT EXISTS validation +( + id INT NOT NULL AUTO_INCREMENT, + token VARCHAR(200) NOT NULL, + random VARCHAR(32) NOT NULL, + action VARCHAR(200) NOT NULL, + datas JSON NOT NULL, + CHECK (JSON_VALID(datas)), + PRIMARY KEY (id), + UNIQUE(token) +); + CREATE TABLE IF NOT EXISTS transfer ( id INT NOT NULL AUTO_INCREMENT, id_received INT NOT NULL, - progress BOOLEAN NOT NULL DEFAULT FALSE, PRIMARY KEY (id), FOREIGN KEY (id_received) REFERENCES received (id) ON DELETE CASCADE ON UPDATE CASCADE ); @@ -143,16 +179,20 @@ CREATE TABLE IF NOT EXISTS transfer CREATE TABLE IF NOT EXISTS smsstop ( id INT NOT NULL AUTO_INCREMENT, + id_user INT NOT NULL, number VARCHAR(20) NOT NULL, PRIMARY KEY (id), + FOREIGN KEY (id_user) REFERENCES user (id) ON DELETE CASCADE ON UPDATE CASCADE, UNIQUE (number) ); CREATE TABLE IF NOT EXISTS webhook ( id INT NOT NULL AUTO_INCREMENT, + id_user INT NOT NULL, url VARCHAR(250) NOT NULL, type INT NOT NULL, + FOREIGN KEY (id_user) REFERENCES user (id) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY (id) ); @@ -161,16 +201,5 @@ CREATE TABLE IF NOT EXISTS webhook_querie id INT NOT NULL AUTO_INCREMENT, url VARCHAR(250) NOT NULL, datas VARCHAR(10000) NOT NULL, - progress BOOLEAN NOT NULL DEFAULT FALSE, PRIMARY KEY (id) ); - -#On insert les données par défaut dans les settings -INSERT INTO setting (name, value) -VALUES ('transfer', '1'), -('smsstops', '1'), -('detect_url', '1'), -('default_phone_country', 'fr'), -('preferred_phone_country', 'fr,be,ca'), -('sms_flash', '0'), -('sms_reception_sound', '1');