From 9d07a1354cbf3f63de0eab2b36a6c4eb5eea2dd6 Mon Sep 17 00:00:00 2001 From: Hoan Luu Huu <110280845+xquanluu@users.noreply.github.com> Date: Mon, 30 Jan 2023 02:35:29 +0700 Subject: [PATCH] feat: support app_json in application (#236) * feat: support app_json in application * feat: support app_json in application * update db schema to latest --------- Co-authored-by: Quan HL Co-authored-by: Dave Horton --- lib/middleware.js | 51 ++++++----- test/db/create-and-populate-schema.sql | 17 ++-- test/db/jambones-sql.sql | 116 ++++++++++++++++++++----- test/listen-tests.js | 2 +- test/play-tests.js | 19 ++++ 5 files changed, 154 insertions(+), 51 deletions(-) diff --git a/lib/middleware.js b/lib/middleware.js index fae43e09..000c46b9 100644 --- a/lib/middleware.js +++ b/lib/middleware.js @@ -276,34 +276,39 @@ module.exports = function(srf, logger) { return next(); } /* retrieve the application to execute for this inbound call */ - const params = Object.assign(['POST', 'WS'].includes(app.call_hook.method) ? {sip: req.msg} : {}, - req.locals.callInfo, - {service_provider_sid: req.locals.service_provider_sid}, - { - defaults: { - synthesizer: { - vendor: app.speech_synthesis_vendor, - language: app.speech_synthesis_language, - voice: app.speech_synthesis_voice - }, - recognizer: { - vendor: app.speech_recognizer_vendor, - language: app.speech_recognizer_language + let json; + if (app.app_json) { + json = JSON.parse(app.app_json); + } else { + const params = Object.assign(['POST', 'WS'].includes(app.call_hook.method) ? { sip: req.msg } : {}, + req.locals.callInfo, + { service_provider_sid: req.locals.service_provider_sid }, + { + defaults: { + synthesizer: { + vendor: app.speech_synthesis_vendor, + language: app.speech_synthesis_language, + voice: app.speech_synthesis_voice + }, + recognizer: { + vendor: app.speech_recognizer_vendor, + language: app.speech_recognizer_language + } } - } - }); - logger.debug({params}, 'sending initial webhook'); - const obj = rootSpan.startChildSpan('performAppWebhook'); - span = obj.span; - const b3 = rootSpan.getTracingPropagation(); - const httpHeaders = b3 && {b3}; - const json = await app.requestor.request('session:new', app.call_hook, params, httpHeaders); + }); + logger.debug({ params }, 'sending initial webhook'); + const obj = rootSpan.startChildSpan('performAppWebhook'); + span = obj.span; + const b3 = rootSpan.getTracingPropagation(); + const httpHeaders = b3 && { b3 }; + json = await app.requestor.request('session:new', app.call_hook, params, httpHeaders); + } app.tasks = normalizeJambones(logger, json).map((tdata) => makeTask(logger, tdata)); - span.setAttributes({ + span?.setAttributes({ 'http.statusCode': 200, 'app.tasks': listTaskNames(app.tasks) }); - span.end(); + span?.end(); if (0 === app.tasks.length) throw new Error('no application provided'); if (siprec) { diff --git a/test/db/create-and-populate-schema.sql b/test/db/create-and-populate-schema.sql index dcfebef6..234f50eb 100644 --- a/test/db/create-and-populate-schema.sql +++ b/test/db/create-and-populate-schema.sql @@ -217,6 +217,7 @@ CREATE TABLE `applications` ( `call_hook_sid` char(36) DEFAULT NULL COMMENT 'webhook to call for inbound calls ', `call_status_hook_sid` char(36) DEFAULT NULL COMMENT 'webhook to call for call status events', `messaging_hook_sid` char(36) DEFAULT NULL COMMENT 'webhook to call for inbound SMS/MMS ', + `app_json` VARCHAR(16384), `speech_synthesis_vendor` varchar(64) NOT NULL DEFAULT 'google', `speech_synthesis_language` varchar(12) NOT NULL DEFAULT 'en-US', `speech_synthesis_voice` varchar(64) DEFAULT NULL, @@ -245,13 +246,14 @@ CREATE TABLE `applications` ( LOCK TABLES `applications` WRITE; /*!40000 ALTER TABLE `applications` DISABLE KEYS */; -INSERT INTO `applications` VALUES ('0dddaabf-0a30-43e3-84e8-426873b1a78b','decline call',NULL,'bb845d4b-83a9-4cde-a6e9-50f3743bab3f','c71e79db-24f2-4866-a3ee-febb0f97b341','293904c1-351b-4bca-8d58-1a29b853c7db',NULL,'google','en-US','en-US-Standard-C','google','en-US'); -INSERT INTO `applications` VALUES ('308b4f41-1a18-4052-b89a-c054e75ce242','say',NULL,'bb845d4b-83a9-4cde-a6e9-50f3743bab3f','54ab0976-a6c0-45d8-89a4-d90d45bf9d96','293904c1-351b-4bca-8d58-1a29b853c7db',NULL,'google','en-US','en-US-Standard-C','google','en-US'); -INSERT INTO `applications` VALUES ('24d0f6af-e976-44dd-a2e8-41c7b55abe33','say account 2',NULL,'622f62e4-303a-49f2-bbe0-eb1e1714e37a','54ab0976-a6c0-45d8-89a4-d90d45bf9d96','293904c1-351b-4bca-8d58-1a29b853c7db',NULL,'google','en-US','en-US-Standard-C','google','en-US'); -INSERT INTO `applications` VALUES ('17461c69-56b5-4dab-ad83-1c43a0f93a3d','gather',NULL,'bb845d4b-83a9-4cde-a6e9-50f3743bab3f','10692465-a511-4277-9807-b7157e4f81e1','293904c1-351b-4bca-8d58-1a29b853c7db',NULL,'google','en-US','en-US-Standard-C','google','en-US'); -INSERT INTO `applications` VALUES ('baf9213b-5556-4c20-870c-586392ed246f','transcribe',NULL,'bb845d4b-83a9-4cde-a6e9-50f3743bab3f','ecb67a8f-f7ce-4919-abf0-bbc69c1001e5','293904c1-351b-4bca-8d58-1a29b853c7db',NULL,'google','en-US','en-US-Standard-C','google','en-US'); -INSERT INTO `applications` VALUES ('ae026ab5-3029-47b4-9d7c-236e3a4b4ebe','transcribe account 2',NULL,'622f62e4-303a-49f2-bbe0-eb1e1714e37a','ecb67a8f-f7ce-4919-abf0-bbc69c1001e5','293904c1-351b-4bca-8d58-1a29b853c7db',NULL,'google','en-US','en-US-Standard-C','google','en-US'); -INSERT INTO `applications` VALUES ('195d9507-6a42-46a8-825f-f009e729d023','sip info',NULL,'bb845d4b-83a9-4cde-a6e9-50f3743bab3f','c9113e7a-741f-48b9-96c1-f2f78176eeb3','293904c1-351b-4bca-8d58-1a29b853c7db',NULL,'google','en-US','en-US-Standard-C','google','en-US'); +INSERT INTO `applications` VALUES ('0dddaabf-0a30-43e3-84e8-426873b1a78b','decline call',NULL,'bb845d4b-83a9-4cde-a6e9-50f3743bab3f','c71e79db-24f2-4866-a3ee-febb0f97b341','293904c1-351b-4bca-8d58-1a29b853c7db',NULL,NULL,'google','en-US','en-US-Standard-C','google','en-US'); +INSERT INTO `applications` VALUES ('308b4f41-1a18-4052-b89a-c054e75ce242','say',NULL,'bb845d4b-83a9-4cde-a6e9-50f3743bab3f','54ab0976-a6c0-45d8-89a4-d90d45bf9d96','293904c1-351b-4bca-8d58-1a29b853c7db',NULL,NULL,'google','en-US','en-US-Standard-C','google','en-US'); +INSERT INTO `applications` VALUES ('24d0f6af-e976-44dd-a2e8-41c7b55abe33','say account 2',NULL,'622f62e4-303a-49f2-bbe0-eb1e1714e37a','54ab0976-a6c0-45d8-89a4-d90d45bf9d96','293904c1-351b-4bca-8d58-1a29b853c7db',NULL,NULL,'google','en-US','en-US-Standard-C','google','en-US'); +INSERT INTO `applications` VALUES ('17461c69-56b5-4dab-ad83-1c43a0f93a3d','gather',NULL,'bb845d4b-83a9-4cde-a6e9-50f3743bab3f','10692465-a511-4277-9807-b7157e4f81e1','293904c1-351b-4bca-8d58-1a29b853c7db',NULL,NULL,'google','en-US','en-US-Standard-C','google','en-US'); +INSERT INTO `applications` VALUES ('baf9213b-5556-4c20-870c-586392ed246f','transcribe',NULL,'bb845d4b-83a9-4cde-a6e9-50f3743bab3f','ecb67a8f-f7ce-4919-abf0-bbc69c1001e5','293904c1-351b-4bca-8d58-1a29b853c7db',NULL,NULL,'google','en-US','en-US-Standard-C','google','en-US'); +INSERT INTO `applications` VALUES ('ae026ab5-3029-47b4-9d7c-236e3a4b4ebe','transcribe account 2',NULL,'622f62e4-303a-49f2-bbe0-eb1e1714e37a','ecb67a8f-f7ce-4919-abf0-bbc69c1001e5','293904c1-351b-4bca-8d58-1a29b853c7db',NULL,NULL,'google','en-US','en-US-Standard-C','google','en-US'); +INSERT INTO `applications` VALUES ('195d9507-6a42-46a8-825f-f009e729d023','sip info',NULL,'bb845d4b-83a9-4cde-a6e9-50f3743bab3f','c9113e7a-741f-48b9-96c1-f2f78176eeb3','293904c1-351b-4bca-8d58-1a29b853c7db',NULL,NULL,'google','en-US','en-US-Standard-C','google','en-US'); +INSERT INTO `applications` VALUES ('0dddaabf-0a30-43e3-84e8-426873b1a78c','app json',NULL,'bb845d4b-83a9-4cde-a6e9-50f3743bab3f','c71e79db-24f2-4866-a3ee-febb0f97b341','293904c1-351b-4bca-8d58-1a29b853c7db',NULL,'[{"verb": "play","url": "silence_stream://5000"}]','google','en-US','en-US-Standard-C','google','en-US'); /*!40000 ALTER TABLE `applications` ENABLE KEYS */; UNLOCK TABLES; @@ -451,6 +453,7 @@ INSERT INTO `phone_numbers` VALUES ('05eeed62-b29b-4679-bf38-d7a4e318be44','1617 INSERT INTO `phone_numbers` VALUES ('f3c53863-b629-4cf6-9dcb-c7fb7072314b','16174000004','5145b436-2f38-4029-8d4c-fd8c67831c7a','bb845d4b-83a9-4cde-a6e9-50f3743bab3f','baf9213b-5556-4c20-870c-586392ed246f', NULL); INSERT INTO `phone_numbers` VALUES ('f6416c17-829a-4f11-9c32-f0d00e4a9ae9','16174000005','5145b436-2f38-4029-8d4c-fd8c67831c7a','622f62e4-303a-49f2-bbe0-eb1e1714e37a','ae026ab5-3029-47b4-9d7c-236e3a4b4ebe', NULL); INSERT INTO `phone_numbers` VALUES ('964d0581-9627-44cb-be20-8118050406b2','16174000006','5145b436-2f38-4029-8d4c-fd8c67831c7a','bb845d4b-83a9-4cde-a6e9-50f3743bab3f','195d9507-6a42-46a8-825f-f009e729d023', NULL); +INSERT INTO `phone_numbers` VALUES ('964d0581-9627-44cb-be20-8118050406b3','16174000007','5145b436-2f38-4029-8d4c-fd8c67831c7a','bb845d4b-83a9-4cde-a6e9-50f3743bab3f','0dddaabf-0a30-43e3-84e8-426873b1a78c', NULL); /*!40000 ALTER TABLE `phone_numbers` ENABLE KEYS */; UNLOCK TABLES; diff --git a/test/db/jambones-sql.sql b/test/db/jambones-sql.sql index b157f3aa..bfdb7ef2 100644 --- a/test/db/jambones-sql.sql +++ b/test/db/jambones-sql.sql @@ -4,6 +4,8 @@ SET FOREIGN_KEY_CHECKS=0; DROP TABLE IF EXISTS account_static_ips; +DROP TABLE IF EXISTS account_limits; + DROP TABLE IF EXISTS account_products; DROP TABLE IF EXISTS account_subscriptions; @@ -18,6 +20,12 @@ DROP TABLE IF EXISTS lcr_carrier_set_entry; DROP TABLE IF EXISTS lcr_routes; +DROP TABLE IF EXISTS password_settings; + +DROP TABLE IF EXISTS user_permissions; + +DROP TABLE IF EXISTS permissions; + DROP TABLE IF EXISTS predefined_sip_gateways; DROP TABLE IF EXISTS predefined_smpp_gateways; @@ -36,6 +44,8 @@ DROP TABLE IF EXISTS sbc_addresses; DROP TABLE IF EXISTS ms_teams_tenants; +DROP TABLE IF EXISTS service_provider_limits; + DROP TABLE IF EXISTS signup_history; DROP TABLE IF EXISTS smpp_addresses; @@ -69,6 +79,15 @@ private_ipv4 VARBINARY(16) NOT NULL UNIQUE , PRIMARY KEY (account_static_ip_sid) ); +CREATE TABLE account_limits +( +account_limits_sid CHAR(36) NOT NULL UNIQUE , +account_sid CHAR(36) NOT NULL, +category ENUM('api_rate','voice_call_session', 'device','voice_call_minutes','voice_call_session_license', 'voice_call_minutes_license') NOT NULL, +quantity INTEGER NOT NULL, +PRIMARY KEY (account_limits_sid) +); + CREATE TABLE account_subscriptions ( account_subscription_sid CHAR(36) NOT NULL UNIQUE , @@ -123,6 +142,21 @@ priority INTEGER NOT NULL UNIQUE COMMENT 'lower priority routes are attempted f PRIMARY KEY (lcr_route_sid) ) COMMENT='Least cost routing table'; +CREATE TABLE password_settings +( +min_password_length INTEGER NOT NULL DEFAULT 8, +require_digit BOOLEAN NOT NULL DEFAULT false, +require_special_character BOOLEAN NOT NULL DEFAULT false +); + +CREATE TABLE permissions +( +permission_sid CHAR(36) NOT NULL UNIQUE , +name VARCHAR(32) NOT NULL UNIQUE , +description VARCHAR(255), +PRIMARY KEY (permission_sid) +); + CREATE TABLE predefined_carriers ( predefined_carrier_sid CHAR(36) NOT NULL UNIQUE , @@ -228,6 +262,15 @@ tenant_fqdn VARCHAR(255) NOT NULL UNIQUE , PRIMARY KEY (ms_teams_tenant_sid) ) COMMENT='A Microsoft Teams customer tenant'; +CREATE TABLE service_provider_limits +( +service_provider_limits_sid CHAR(36) NOT NULL UNIQUE , +service_provider_sid CHAR(36) NOT NULL, +category ENUM('api_rate','voice_call_session', 'device','voice_call_minutes','voice_call_session_license', 'voice_call_minutes_license') NOT NULL, +quantity INTEGER NOT NULL, +PRIMARY KEY (service_provider_limits_sid) +); + CREATE TABLE signup_history ( email VARCHAR(255) NOT NULL, @@ -283,6 +326,7 @@ email_activation_code VARCHAR(16), email_validated BOOLEAN NOT NULL DEFAULT false, phone_validated BOOLEAN NOT NULL DEFAULT false, email_content_opt_out BOOLEAN NOT NULL DEFAULT false, +is_active BOOLEAN NOT NULL DEFAULT true, PRIMARY KEY (user_sid) ); @@ -310,9 +354,20 @@ smpp_password VARCHAR(64), smpp_enquire_link_interval INTEGER DEFAULT 0, smpp_inbound_system_id VARCHAR(255), smpp_inbound_password VARCHAR(64), +register_from_user VARCHAR(128), +register_from_domain VARCHAR(255), +register_public_ip_in_contact BOOLEAN NOT NULL DEFAULT false, PRIMARY KEY (voip_carrier_sid) ) COMMENT='A Carrier or customer PBX that can send or receive calls'; +CREATE TABLE user_permissions +( +user_permissions_sid CHAR(36) NOT NULL UNIQUE , +user_sid CHAR(36) NOT NULL, +permission_sid CHAR(36) NOT NULL, +PRIMARY KEY (user_permissions_sid) +); + CREATE TABLE smpp_gateways ( smpp_gateway_sid CHAR(36) NOT NULL UNIQUE , @@ -330,7 +385,7 @@ PRIMARY KEY (smpp_gateway_sid) CREATE TABLE phone_numbers ( phone_number_sid CHAR(36) UNIQUE , -number VARCHAR(32) NOT NULL UNIQUE , +number VARCHAR(132) NOT NULL UNIQUE , voip_carrier_sid CHAR(36), account_sid CHAR(36), application_sid CHAR(36), @@ -380,6 +435,7 @@ account_sid CHAR(36) COMMENT 'account that this application belongs to (if null, call_hook_sid CHAR(36) COMMENT 'webhook to call for inbound calls ', call_status_hook_sid CHAR(36) COMMENT 'webhook to call for call status events', messaging_hook_sid CHAR(36) COMMENT 'webhook to call for inbound SMS/MMS ', +app_json VARCHAR(16384), speech_synthesis_vendor VARCHAR(64) NOT NULL DEFAULT 'google', speech_synthesis_language VARCHAR(12) NOT NULL DEFAULT 'en-US', speech_synthesis_voice VARCHAR(64), @@ -418,6 +474,11 @@ disable_cdrs BOOLEAN NOT NULL DEFAULT 0, trial_end_date DATETIME, deactivated_reason VARCHAR(255), device_to_call_ratio INTEGER NOT NULL DEFAULT 5, +subspace_client_id VARCHAR(255), +subspace_client_secret VARCHAR(255), +subspace_sip_teleport_id VARCHAR(255), +subspace_sip_teleport_destinations VARCHAR(255), +siprec_hook_sid CHAR(36), PRIMARY KEY (account_sid) ) COMMENT='An enterprise that uses the platform for comm services'; @@ -425,19 +486,23 @@ CREATE INDEX account_static_ip_sid_idx ON account_static_ips (account_static_ip_ CREATE INDEX account_sid_idx ON account_static_ips (account_sid); ALTER TABLE account_static_ips ADD FOREIGN KEY account_sid_idxfk (account_sid) REFERENCES accounts (account_sid); +CREATE INDEX account_sid_idx ON account_limits (account_sid); +ALTER TABLE account_limits ADD FOREIGN KEY account_sid_idxfk_1 (account_sid) REFERENCES accounts (account_sid) ON DELETE CASCADE; + CREATE INDEX account_subscription_sid_idx ON account_subscriptions (account_subscription_sid); CREATE INDEX account_sid_idx ON account_subscriptions (account_sid); -ALTER TABLE account_subscriptions ADD FOREIGN KEY account_sid_idxfk_1 (account_sid) REFERENCES accounts (account_sid); +ALTER TABLE account_subscriptions ADD FOREIGN KEY account_sid_idxfk_2 (account_sid) REFERENCES accounts (account_sid); CREATE INDEX invite_code_idx ON beta_invite_codes (invite_code); CREATE INDEX call_route_sid_idx ON call_routes (call_route_sid); -ALTER TABLE call_routes ADD FOREIGN KEY account_sid_idxfk_2 (account_sid) REFERENCES accounts (account_sid); +ALTER TABLE call_routes ADD FOREIGN KEY account_sid_idxfk_3 (account_sid) REFERENCES accounts (account_sid); ALTER TABLE call_routes ADD FOREIGN KEY application_sid_idxfk (application_sid) REFERENCES applications (application_sid); CREATE INDEX dns_record_sid_idx ON dns_records (dns_record_sid); -ALTER TABLE dns_records ADD FOREIGN KEY account_sid_idxfk_3 (account_sid) REFERENCES accounts (account_sid); +ALTER TABLE dns_records ADD FOREIGN KEY account_sid_idxfk_4 (account_sid) REFERENCES accounts (account_sid); +CREATE INDEX permission_sid_idx ON permissions (permission_sid); CREATE INDEX predefined_carrier_sid_idx ON predefined_carriers (predefined_carrier_sid); CREATE INDEX predefined_sip_gateway_sid_idx ON predefined_sip_gateways (predefined_sip_gateway_sid); CREATE INDEX predefined_carrier_sid_idx ON predefined_sip_gateways (predefined_carrier_sid); @@ -456,14 +521,14 @@ ALTER TABLE account_products ADD FOREIGN KEY product_sid_idxfk (product_sid) REF CREATE INDEX account_offer_sid_idx ON account_offers (account_offer_sid); CREATE INDEX account_sid_idx ON account_offers (account_sid); -ALTER TABLE account_offers ADD FOREIGN KEY account_sid_idxfk_4 (account_sid) REFERENCES accounts (account_sid); +ALTER TABLE account_offers ADD FOREIGN KEY account_sid_idxfk_5 (account_sid) REFERENCES accounts (account_sid); CREATE INDEX product_sid_idx ON account_offers (product_sid); ALTER TABLE account_offers ADD FOREIGN KEY product_sid_idxfk_1 (product_sid) REFERENCES products (product_sid); CREATE INDEX api_key_sid_idx ON api_keys (api_key_sid); CREATE INDEX account_sid_idx ON api_keys (account_sid); -ALTER TABLE api_keys ADD FOREIGN KEY account_sid_idxfk_5 (account_sid) REFERENCES accounts (account_sid); +ALTER TABLE api_keys ADD FOREIGN KEY account_sid_idxfk_6 (account_sid) REFERENCES accounts (account_sid); CREATE INDEX service_provider_sid_idx ON api_keys (service_provider_sid); ALTER TABLE api_keys ADD FOREIGN KEY service_provider_sid_idxfk (service_provider_sid) REFERENCES service_providers (service_provider_sid); @@ -477,44 +542,53 @@ ALTER TABLE sbc_addresses ADD FOREIGN KEY service_provider_sid_idxfk_1 (service_ CREATE INDEX ms_teams_tenant_sid_idx ON ms_teams_tenants (ms_teams_tenant_sid); ALTER TABLE ms_teams_tenants ADD FOREIGN KEY service_provider_sid_idxfk_2 (service_provider_sid) REFERENCES service_providers (service_provider_sid); -ALTER TABLE ms_teams_tenants ADD FOREIGN KEY account_sid_idxfk_6 (account_sid) REFERENCES accounts (account_sid); +ALTER TABLE ms_teams_tenants ADD FOREIGN KEY account_sid_idxfk_7 (account_sid) REFERENCES accounts (account_sid); ALTER TABLE ms_teams_tenants ADD FOREIGN KEY application_sid_idxfk_1 (application_sid) REFERENCES applications (application_sid); CREATE INDEX tenant_fqdn_idx ON ms_teams_tenants (tenant_fqdn); +CREATE INDEX service_provider_sid_idx ON service_provider_limits (service_provider_sid); +ALTER TABLE service_provider_limits ADD FOREIGN KEY service_provider_sid_idxfk_3 (service_provider_sid) REFERENCES service_providers (service_provider_sid) ON DELETE CASCADE; + CREATE INDEX email_idx ON signup_history (email); CREATE INDEX smpp_address_sid_idx ON smpp_addresses (smpp_address_sid); CREATE INDEX service_provider_sid_idx ON smpp_addresses (service_provider_sid); -ALTER TABLE smpp_addresses ADD FOREIGN KEY service_provider_sid_idxfk_3 (service_provider_sid) REFERENCES service_providers (service_provider_sid); +ALTER TABLE smpp_addresses ADD FOREIGN KEY service_provider_sid_idxfk_4 (service_provider_sid) REFERENCES service_providers (service_provider_sid); CREATE UNIQUE INDEX speech_credentials_idx_1 ON speech_credentials (vendor,account_sid); CREATE INDEX speech_credential_sid_idx ON speech_credentials (speech_credential_sid); CREATE INDEX service_provider_sid_idx ON speech_credentials (service_provider_sid); -ALTER TABLE speech_credentials ADD FOREIGN KEY service_provider_sid_idxfk_4 (service_provider_sid) REFERENCES service_providers (service_provider_sid); +ALTER TABLE speech_credentials ADD FOREIGN KEY service_provider_sid_idxfk_5 (service_provider_sid) REFERENCES service_providers (service_provider_sid); CREATE INDEX account_sid_idx ON speech_credentials (account_sid); -ALTER TABLE speech_credentials ADD FOREIGN KEY account_sid_idxfk_7 (account_sid) REFERENCES accounts (account_sid); +ALTER TABLE speech_credentials ADD FOREIGN KEY account_sid_idxfk_8 (account_sid) REFERENCES accounts (account_sid); CREATE INDEX user_sid_idx ON users (user_sid); CREATE INDEX email_idx ON users (email); CREATE INDEX phone_idx ON users (phone); CREATE INDEX account_sid_idx ON users (account_sid); -ALTER TABLE users ADD FOREIGN KEY account_sid_idxfk_8 (account_sid) REFERENCES accounts (account_sid); +ALTER TABLE users ADD FOREIGN KEY account_sid_idxfk_9 (account_sid) REFERENCES accounts (account_sid); CREATE INDEX service_provider_sid_idx ON users (service_provider_sid); -ALTER TABLE users ADD FOREIGN KEY service_provider_sid_idxfk_5 (service_provider_sid) REFERENCES service_providers (service_provider_sid); +ALTER TABLE users ADD FOREIGN KEY service_provider_sid_idxfk_6 (service_provider_sid) REFERENCES service_providers (service_provider_sid); CREATE INDEX email_activation_code_idx ON users (email_activation_code); CREATE INDEX voip_carrier_sid_idx ON voip_carriers (voip_carrier_sid); CREATE INDEX account_sid_idx ON voip_carriers (account_sid); -ALTER TABLE voip_carriers ADD FOREIGN KEY account_sid_idxfk_9 (account_sid) REFERENCES accounts (account_sid); +ALTER TABLE voip_carriers ADD FOREIGN KEY account_sid_idxfk_10 (account_sid) REFERENCES accounts (account_sid); CREATE INDEX service_provider_sid_idx ON voip_carriers (service_provider_sid); -ALTER TABLE voip_carriers ADD FOREIGN KEY service_provider_sid_idxfk_6 (service_provider_sid) REFERENCES service_providers (service_provider_sid); +ALTER TABLE voip_carriers ADD FOREIGN KEY service_provider_sid_idxfk_7 (service_provider_sid) REFERENCES service_providers (service_provider_sid); ALTER TABLE voip_carriers ADD FOREIGN KEY application_sid_idxfk_2 (application_sid) REFERENCES applications (application_sid); +CREATE INDEX user_permissions_sid_idx ON user_permissions (user_permissions_sid); +CREATE INDEX user_sid_idx ON user_permissions (user_sid); +ALTER TABLE user_permissions ADD FOREIGN KEY user_sid_idxfk (user_sid) REFERENCES users (user_sid) ON DELETE CASCADE; + +ALTER TABLE user_permissions ADD FOREIGN KEY permission_sid_idxfk (permission_sid) REFERENCES permissions (permission_sid); + CREATE INDEX smpp_gateway_sid_idx ON smpp_gateways (smpp_gateway_sid); CREATE INDEX voip_carrier_sid_idx ON smpp_gateways (voip_carrier_sid); ALTER TABLE smpp_gateways ADD FOREIGN KEY voip_carrier_sid_idxfk (voip_carrier_sid) REFERENCES voip_carriers (voip_carrier_sid); @@ -524,12 +598,12 @@ CREATE INDEX number_idx ON phone_numbers (number); CREATE INDEX voip_carrier_sid_idx ON phone_numbers (voip_carrier_sid); ALTER TABLE phone_numbers ADD FOREIGN KEY voip_carrier_sid_idxfk_1 (voip_carrier_sid) REFERENCES voip_carriers (voip_carrier_sid); -ALTER TABLE phone_numbers ADD FOREIGN KEY account_sid_idxfk_10 (account_sid) REFERENCES accounts (account_sid); +ALTER TABLE phone_numbers ADD FOREIGN KEY account_sid_idxfk_11 (account_sid) REFERENCES accounts (account_sid); ALTER TABLE phone_numbers ADD FOREIGN KEY application_sid_idxfk_3 (application_sid) REFERENCES applications (application_sid); CREATE INDEX service_provider_sid_idx ON phone_numbers (service_provider_sid); -ALTER TABLE phone_numbers ADD FOREIGN KEY service_provider_sid_idxfk_7 (service_provider_sid) REFERENCES service_providers (service_provider_sid); +ALTER TABLE phone_numbers ADD FOREIGN KEY service_provider_sid_idxfk_8 (service_provider_sid) REFERENCES service_providers (service_provider_sid); CREATE INDEX sip_gateway_idx_hostport ON sip_gateways (ipv4,port); @@ -545,10 +619,10 @@ CREATE UNIQUE INDEX applications_idx_name ON applications (account_sid,name); CREATE INDEX application_sid_idx ON applications (application_sid); CREATE INDEX service_provider_sid_idx ON applications (service_provider_sid); -ALTER TABLE applications ADD FOREIGN KEY service_provider_sid_idxfk_8 (service_provider_sid) REFERENCES service_providers (service_provider_sid); +ALTER TABLE applications ADD FOREIGN KEY service_provider_sid_idxfk_9 (service_provider_sid) REFERENCES service_providers (service_provider_sid); CREATE INDEX account_sid_idx ON applications (account_sid); -ALTER TABLE applications ADD FOREIGN KEY account_sid_idxfk_11 (account_sid) REFERENCES accounts (account_sid); +ALTER TABLE applications ADD FOREIGN KEY account_sid_idxfk_12 (account_sid) REFERENCES accounts (account_sid); ALTER TABLE applications ADD FOREIGN KEY call_hook_sid_idxfk (call_hook_sid) REFERENCES webhooks (webhook_sid); @@ -564,7 +638,7 @@ ALTER TABLE service_providers ADD FOREIGN KEY registration_hook_sid_idxfk (regis CREATE INDEX account_sid_idx ON accounts (account_sid); CREATE INDEX sip_realm_idx ON accounts (sip_realm); CREATE INDEX service_provider_sid_idx ON accounts (service_provider_sid); -ALTER TABLE accounts ADD FOREIGN KEY service_provider_sid_idxfk_9 (service_provider_sid) REFERENCES service_providers (service_provider_sid); +ALTER TABLE accounts ADD FOREIGN KEY service_provider_sid_idxfk_10 (service_provider_sid) REFERENCES service_providers (service_provider_sid); ALTER TABLE accounts ADD FOREIGN KEY registration_hook_sid_idxfk_1 (registration_hook_sid) REFERENCES webhooks (webhook_sid); @@ -572,4 +646,6 @@ ALTER TABLE accounts ADD FOREIGN KEY queue_event_hook_sid_idxfk (queue_event_hoo ALTER TABLE accounts ADD FOREIGN KEY device_calling_application_sid_idxfk (device_calling_application_sid) REFERENCES applications (application_sid); -SET FOREIGN_KEY_CHECKS=0; +ALTER TABLE accounts ADD FOREIGN KEY siprec_hook_sid_idxfk (siprec_hook_sid) REFERENCES applications (application_sid); + +SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file diff --git a/test/listen-tests.js b/test/listen-tests.js index 7f259739..ff24f78c 100644 --- a/test/listen-tests.js +++ b/test/listen-tests.js @@ -80,7 +80,7 @@ test('\'listen-maxLength\'', async(t) => { // THEN await sippUac('uac-gather-account-creds-success.xml', '172.38.0.10', from); let obj = await getJSON(`http://127.0.0.1:3100/ws_packet_count/${from}`); - t.ok(30000 <= obj.count, 'listen: success maxLength incomming call audio'); + t.ok(30000 <= obj.count, 'listen: success maxLength incoming call audio'); obj = await getJSON(`http://127.0.0.1:3100/ws_metadata/${from}`); t.ok(obj.metadata.from === from && obj.metadata.sampleRate === 8000, 'listen: success maxLength metadata'); diff --git a/test/play-tests.js b/test/play-tests.js index ac4524a3..06544ff4 100644 --- a/test/play-tests.js +++ b/test/play-tests.js @@ -233,3 +233,22 @@ test('\'play\' tests with earlymedia', async(t) => { t.error(err); } }); + +test('\'play\' tests with initial app_json', async(t) => { + clearModule.all(); + const {srf, disconnect} = require('../app'); + + try { + await connect(srf); + const from = 'play_initial_app_json'; + + // THEN + await sippUac('uac-success-received-bye.xml', '172.38.0.10', from, "16174000007"); + t.pass('application can use app_json for initial instructions'); + disconnect(); + } catch (err) { + console.log(`error received: ${err}`); + disconnect(); + t.error(err); + } +});