From a62fa13b2c8c9cac096914c2f6d122eb9cc895a3 Mon Sep 17 00:00:00 2001 From: Marta Carlos Date: Tue, 14 Feb 2023 12:05:02 +0000 Subject: [PATCH 01/11] feat: add endpoint logic to android hook --- hooks/androidCopyPreferences.js | 109 +++++++++++++++++--------------- 1 file changed, 57 insertions(+), 52 deletions(-) diff --git a/hooks/androidCopyPreferences.js b/hooks/androidCopyPreferences.js index 8bb81bb..aaa13af 100644 --- a/hooks/androidCopyPreferences.js +++ b/hooks/androidCopyPreferences.js @@ -5,72 +5,77 @@ const fs = require('fs'); const ProvidersEnum = Object.freeze({"apple":"1", "facebook":"2", "google":"3", "linkedIn":"4"}) const ApplicationTypeEnum = Object.freeze({"web":"1", "ios":"2", "android":"3"}) -module.exports = function (context) { - const configFileName = 'www/json-config/SocialLoginsConfigurations.json'; - var linkedin_deeplink_url = ""; - var linkedin_deeplink_host = ""; - var linkedin_deeplink_path = ""; - var projectRoot = context.opts.cordova.project ? context.opts.cordova.project.root : context.opts.projectRoot; +module.exports = async function (context) { - copyFacebookPreferences(projectRoot); + + let linkedin_deeplink_url = ""; + let linkedin_deeplink_host = ""; + let linkedin_deeplink_path = ""; + let projectRoot = context.opts.cordova.project ? context.opts.cordova.project.root : context.opts.projectRoot; + + let configXML = path.join(projectRoot, 'config.xml'); + let configParser = new ConfigParser(configXML); + let configuratorBaseURL = configParser.getGlobalPreference("CONFIGURATOR_BASE_URL"); + let appName = configParser.name(); + + let jsonConfig = await getJsonFile(configuratorBaseURL, appName); + copyFacebookPreferences(jsonConfig); - //read json config file www/jsonConfig/sociallogins_configurations.json - var jsonConfig = ""; try { - jsonConfig = path.join(projectRoot, configFileName); - var jsonConfigFile = fs.readFileSync(jsonConfig).toString(); - var jsonParsed = JSON.parse(jsonConfigFile); - - linkedin_deeplink_url = jsonParsed.app_deeplink.url_scheme.replace(/\s/g, '') - linkedin_deeplink_host = jsonParsed.app_deeplink.url_host.replace(/\s/g, '') - linkedin_deeplink_path = jsonParsed.app_deeplink.url_path.replace(/\s/g, '') + linkedin_deeplink_url = jsonConfig.app_deeplink.url_scheme.replace(/\s/g, '') + linkedin_deeplink_host = jsonConfig.app_deeplink.url_host.replace(/\s/g, '') + linkedin_deeplink_path = jsonConfig.app_deeplink.url_path.replace(/\s/g, '') } catch { throw new Error("Missing configuration file or error trying to obtain the configuration."); } //go inside the AndroidManifest and change values for schema, host and path - var manifestPath = path.join(projectRoot, 'platforms/android/app/src/main/AndroidManifest.xml'); - var manifestFile = fs.readFileSync(manifestPath).toString(); - var etreeManifest = et.parse(manifestFile); + let manifestPath = path.join(projectRoot, 'platforms/android/app/src/main/AndroidManifest.xml'); + let manifestFile = fs.readFileSync(manifestPath).toString(); + let etreeManifest = et.parse(manifestFile); - var dataTags = etreeManifest.findall('./application/activity/intent-filter/data[@android:scheme="OAUTH_DEEPLINK_SCHEME"]'); - for (var i = 0; i < dataTags.length; i++) { - var data = dataTags[i]; - data.set("android:scheme", linkedin_deeplink_url); - } + let dataTags = etreeManifest.findall('./application/activity/intent-filter/data[@android:scheme="OAUTH_DEEPLINK_SCHEME"]'); + dataTags.forEach((data) => data.set("android:scheme", linkedin_deeplink_url)); dataTags = null; dataTags = etreeManifest.findall('./application/activity/intent-filter/data[@android:host="OAUTH_DEEPLINK_HOST"]'); - for (var i = 0; i < dataTags.length; i++) { - var data = dataTags[i]; - data.set("android:host", linkedin_deeplink_host); - } - + dataTags.forEach((data) => data.set("android:host", linkedin_deeplink_host)); dataTags = null; - dataTags = etreeManifest.findall('./application/activity/intent-filter/data[@android:path="OAUTH_DEEPLINK_PATH"]'); - for (var i = 0; i < dataTags.length; i++) { - var data = dataTags[i]; - data.set("android:path", linkedin_deeplink_path); - } - var resultXmlManifest = etreeManifest.write(); + dataTags = etreeManifest.findall('./application/activity/intent-filter/data[@android:path="OAUTH_DEEPLINK_PATH"]'); + dataTags.forEach((data) => data.set("android:path", linkedin_deeplink_path)); + + let resultXmlManifest = etreeManifest.write(); fs.writeFileSync(manifestPath, resultXmlManifest); }; -function copyFacebookPreferences(projectRoot) { +async function getJsonFile(baseURL, appName){ + let jsonURL = baseURL + `/SocialLoginConfigurator/rest/v1/configurations?AppName=${appName}`; + let response = await fetch(jsonURL, { + method: 'GET', + headers: { + 'Accept': 'application/json' + } + }); + + if(response.status != 200){ + let errorJSON = await response.json(); + throw new Error(errorJSON.Errors[0]); + } + let json = await response.json(); + return json; + +}; + +function copyFacebookPreferences(jsonConfig) { - var facebook_client_appId = ""; - var facebook_client_token = ""; + let facebook_client_appId = ""; + let facebook_client_token = ""; - var jsonConfig = ""; try { - jsonConfig = path.join(projectRoot, 'www/json-config/SocialLoginsConfigurations.json'); - var jsonConfigFile = fs.readFileSync(jsonConfig).toString(); - var jsonParsed = JSON.parse(jsonConfigFile); - - jsonParsed.app_configurations.forEach(function(configItem) { + jsonConfig.app_configurations.forEach( (configItem) =>{ if ((configItem.provider_id == ProvidersEnum.facebook) && (configItem.application_type_id == ApplicationTypeEnum.android)) { facebook_client_appId = configItem.client_id; @@ -81,21 +86,21 @@ function copyFacebookPreferences(projectRoot) { throw new Error("Missing configuration file or error trying to obtain the configuration."); } - var stringsPath = path.join(projectRoot, 'platforms/android/app/src/main/res/values/strings.xml'); - var stringsFile = fs.readFileSync(stringsPath).toString(); - var etreeStrings = et.parse(stringsFile); + let stringsPath = path.join(projectRoot, 'platforms/android/app/src/main/res/values/strings.xml'); + let stringsFile = fs.readFileSync(stringsPath).toString(); + let etreeStrings = et.parse(stringsFile); - var appIdTags = etreeStrings.findall('./string/[@name="facebook_app_id"]'); - for (var tag of appIdTags) { + let appIdTags = etreeStrings.findall('./string/[@name="facebook_app_id"]'); + for (let tag of appIdTags) { tag.text = facebook_client_appId; } - var clientTokenTags = etreeStrings.findall('./string/[@name="facebook_client_token"]'); - for (var tag of clientTokenTags) { + let clientTokenTags = etreeStrings.findall('./string/[@name="facebook_client_token"]'); + for (let tag of clientTokenTags) { tag.text = facebook_client_token; } - var resultXmlStrings = etreeStrings.write(); + let resultXmlStrings = etreeStrings.write(); fs.writeFileSync(stringsPath, resultXmlStrings); }; From 75401b5bb17d321e9d3e9c4b6074b31d3c88f67b Mon Sep 17 00:00:00 2001 From: Marta Carlos Date: Tue, 14 Feb 2023 12:14:31 +0000 Subject: [PATCH 02/11] fix: add config parser import --- hooks/androidCopyPreferences.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hooks/androidCopyPreferences.js b/hooks/androidCopyPreferences.js index aaa13af..ffa641b 100644 --- a/hooks/androidCopyPreferences.js +++ b/hooks/androidCopyPreferences.js @@ -1,7 +1,7 @@ const et = require('elementtree'); const path = require('path'); const fs = require('fs'); - +const { ConfigParser } = require('cordova-common'); const ProvidersEnum = Object.freeze({"apple":"1", "facebook":"2", "google":"3", "linkedIn":"4"}) const ApplicationTypeEnum = Object.freeze({"web":"1", "ios":"2", "android":"3"}) From da63fb4956c22a9354c228503c3569844507c28b Mon Sep 17 00:00:00 2001 From: Marta Carlos Date: Tue, 14 Feb 2023 15:09:41 +0000 Subject: [PATCH 03/11] removing fetch + add axios --- hooks/androidCopyPreferences.js | 35 +++++++++++++++++++-------------- package.json | 5 ++++- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/hooks/androidCopyPreferences.js b/hooks/androidCopyPreferences.js index ffa641b..8ebf212 100644 --- a/hooks/androidCopyPreferences.js +++ b/hooks/androidCopyPreferences.js @@ -2,13 +2,13 @@ const et = require('elementtree'); const path = require('path'); const fs = require('fs'); const { ConfigParser } = require('cordova-common'); +const axios = require('axios'); + const ProvidersEnum = Object.freeze({"apple":"1", "facebook":"2", "google":"3", "linkedIn":"4"}) const ApplicationTypeEnum = Object.freeze({"web":"1", "ios":"2", "android":"3"}) module.exports = async function (context) { - - let linkedin_deeplink_url = ""; let linkedin_deeplink_host = ""; let linkedin_deeplink_path = ""; @@ -51,24 +51,29 @@ module.exports = async function (context) { }; + async function getJsonFile(baseURL, appName){ - let jsonURL = baseURL + `/SocialLoginConfigurator/rest/v1/configurations?AppName=${appName}`; - let response = await fetch(jsonURL, { - method: 'GET', - headers: { - 'Accept': 'application/json' + try { + let jsonURL = baseURL + `/SocialLoginConfigurator/rest/v1/configurations`; + let response = await axios.get(jsonURL, { + params: { AppName : appName } + }); + + let json = response.data; + return json; + } catch(err){ + if(err.response){ + let errorJSON = err.response.data; + throw new Error(errorJSON.Errors[0]); + } else if(err.request){ + throw new Error(err.request); + } else{ + throw new Error(err.message) } - }); - - if(response.status != 200){ - let errorJSON = await response.json(); - throw new Error(errorJSON.Errors[0]); } - let json = await response.json(); - return json; - }; + function copyFacebookPreferences(jsonConfig) { let facebook_client_appId = ""; diff --git a/package.json b/package.json index 1f5b967..4299358 100644 --- a/package.json +++ b/package.json @@ -16,5 +16,8 @@ "browser" ] }, - "engines": [] + "engines": [], + "dependencies": { + "axios": "^1.3.3" + } } From 4da904ac8463878b18a72cdb73ada47fb6bbb913 Mon Sep 17 00:00:00 2001 From: Marta Carlos Date: Tue, 14 Feb 2023 15:22:04 +0000 Subject: [PATCH 04/11] minor typo fix --- hooks/androidCopyPreferences.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hooks/androidCopyPreferences.js b/hooks/androidCopyPreferences.js index 8ebf212..8df97f8 100644 --- a/hooks/androidCopyPreferences.js +++ b/hooks/androidCopyPreferences.js @@ -20,7 +20,7 @@ module.exports = async function (context) { let appName = configParser.name(); let jsonConfig = await getJsonFile(configuratorBaseURL, appName); - copyFacebookPreferences(jsonConfig); + copyFacebookPreferences(jsonConfig, projectRoot); try { linkedin_deeplink_url = jsonConfig.app_deeplink.url_scheme.replace(/\s/g, '') @@ -74,7 +74,7 @@ async function getJsonFile(baseURL, appName){ }; -function copyFacebookPreferences(jsonConfig) { +function copyFacebookPreferences(jsonConfig, projectRoot) { let facebook_client_appId = ""; let facebook_client_token = ""; From 8c187dbb3599050d3316c987c2b792b883251b35 Mon Sep 17 00:00:00 2001 From: Marta Carlos Date: Wed, 15 Feb 2023 16:35:02 +0000 Subject: [PATCH 05/11] feat: add get endpoint to iOS --- hooks/androidCopyPreferences.js | 52 +++++++++++---------------------- hooks/iOSCopyPreferences.js | 26 +++++++---------- hooks/utils.js | 31 ++++++++++++++++++++ 3 files changed, 58 insertions(+), 51 deletions(-) create mode 100644 hooks/utils.js diff --git a/hooks/androidCopyPreferences.js b/hooks/androidCopyPreferences.js index 8df97f8..718ae7d 100644 --- a/hooks/androidCopyPreferences.js +++ b/hooks/androidCopyPreferences.js @@ -2,39 +2,43 @@ const et = require('elementtree'); const path = require('path'); const fs = require('fs'); const { ConfigParser } = require('cordova-common'); -const axios = require('axios'); + +const getJson = require('./utils'); const ProvidersEnum = Object.freeze({"apple":"1", "facebook":"2", "google":"3", "linkedIn":"4"}) const ApplicationTypeEnum = Object.freeze({"web":"1", "ios":"2", "android":"3"}) module.exports = async function (context) { - let linkedin_deeplink_url = ""; - let linkedin_deeplink_host = ""; - let linkedin_deeplink_path = ""; let projectRoot = context.opts.cordova.project ? context.opts.cordova.project.root : context.opts.projectRoot; - let configXML = path.join(projectRoot, 'config.xml'); let configParser = new ConfigParser(configXML); let configuratorBaseURL = configParser.getGlobalPreference("CONFIGURATOR_BASE_URL"); let appName = configParser.name(); - let jsonConfig = await getJsonFile(configuratorBaseURL, appName); + let jsonConfig = await getJson(configuratorBaseURL, appName); copyFacebookPreferences(jsonConfig, projectRoot); + copyLinkedInPreferences(jsonConfig, projectRoot); +}; + +function copyLinkedInPreferences(jsonConfig, projectRoot) { + let linkedin_deeplink_url = ""; + let linkedin_deeplink_host = ""; + let linkedin_deeplink_path = ""; try { linkedin_deeplink_url = jsonConfig.app_deeplink.url_scheme.replace(/\s/g, '') linkedin_deeplink_host = jsonConfig.app_deeplink.url_host.replace(/\s/g, '') linkedin_deeplink_path = jsonConfig.app_deeplink.url_path.replace(/\s/g, '') } catch { - throw new Error("Missing configuration file or error trying to obtain the configuration."); + throw new Error("Error trying to obtain the configuration."); } - + //go inside the AndroidManifest and change values for schema, host and path let manifestPath = path.join(projectRoot, 'platforms/android/app/src/main/AndroidManifest.xml'); let manifestFile = fs.readFileSync(manifestPath).toString(); let etreeManifest = et.parse(manifestFile); - + let dataTags = etreeManifest.findall('./application/activity/intent-filter/data[@android:scheme="OAUTH_DEEPLINK_SCHEME"]'); dataTags.forEach((data) => data.set("android:scheme", linkedin_deeplink_url)); dataTags = null; @@ -45,34 +49,10 @@ module.exports = async function (context) { dataTags = etreeManifest.findall('./application/activity/intent-filter/data[@android:path="OAUTH_DEEPLINK_PATH"]'); dataTags.forEach((data) => data.set("android:path", linkedin_deeplink_path)); - + let resultXmlManifest = etreeManifest.write(); fs.writeFileSync(manifestPath, resultXmlManifest); - -}; - - -async function getJsonFile(baseURL, appName){ - try { - let jsonURL = baseURL + `/SocialLoginConfigurator/rest/v1/configurations`; - let response = await axios.get(jsonURL, { - params: { AppName : appName } - }); - - let json = response.data; - return json; - } catch(err){ - if(err.response){ - let errorJSON = err.response.data; - throw new Error(errorJSON.Errors[0]); - } else if(err.request){ - throw new Error(err.request); - } else{ - throw new Error(err.message) - } - } -}; - +} function copyFacebookPreferences(jsonConfig, projectRoot) { @@ -109,3 +89,5 @@ function copyFacebookPreferences(jsonConfig, projectRoot) { fs.writeFileSync(stringsPath, resultXmlStrings); }; + + diff --git a/hooks/iOSCopyPreferences.js b/hooks/iOSCopyPreferences.js index e2ab0c5..09cdbec 100644 --- a/hooks/iOSCopyPreferences.js +++ b/hooks/iOSCopyPreferences.js @@ -4,8 +4,9 @@ const fs = require('fs'); const plist = require('plist'); const { ConfigParser } = require('cordova-common'); const { Console } = require('console'); +const getJson = require('./utils'); -module.exports = function (context) { +module.exports = async function (context) { const ProvidersEnum = Object.freeze({"apple":"1", "facebook":"2", "google":"3", "linkedIn":"4"}) const ApplicationTypeEnum = Object.freeze({"web":"1", "ios":"2", "android":"3"}) @@ -19,22 +20,15 @@ module.exports = function (context) { var deeplink_url_scheme = ""; var appNamePath = path.join(projectRoot, 'config.xml'); - var appNameParser = new ConfigParser(appNamePath); - var appName = appNameParser.name(); + var configParser = new ConfigParser(appNamePath); + var appName = configParser.name(); let platformPath = path.join(projectRoot, 'platforms/ios'); + let configuratorBaseURL = configParser.getGlobalPreference("CONFIGURATOR_BASE_URL"); + + let jsonConfig = await getJson(configuratorBaseURL, appName); - //read json config file platforms/ios/www/jsonConfig - var jsonConfig = ""; - try { - jsonConfig = path.join(projectRoot, 'www/json-config/SocialLoginsConfigurations.json'); - var jsonConfigFile = fs.readFileSync(jsonConfig, 'utf8'); - var jsonParsed = JSON.parse(jsonConfigFile); - } catch { - throw new Error("Missing configuration file or error trying to obtain the configuration."); - } - - const iOSConfigArray = jsonParsed.app_configurations.filter(configItem => configItem.application_type_id == ApplicationTypeEnum.ios); + const iOSConfigArray = jsonConfig.app_configurations.filter(configItem => configItem.application_type_id == ApplicationTypeEnum.ios); const errorMap = new Map(); iOSConfigArray.forEach(function(configItem) { @@ -73,8 +67,8 @@ module.exports = function (context) { } }); - if (jsonParsed.app_deeplink.url_scheme != null && jsonParsed.app_deeplink.url_scheme !== "") { - deeplink_url_scheme = jsonParsed.app_deeplink.url_scheme; + if (jsonConfig.app_deeplink.url_scheme != null && jsonConfig.app_deeplink.url_scheme !== "") { + deeplink_url_scheme = jsonConfig.app_deeplink.url_scheme; } else { errorMap['General'] = ['URL Scheme']; } diff --git a/hooks/utils.js b/hooks/utils.js new file mode 100644 index 0000000..7e28ede --- /dev/null +++ b/hooks/utils.js @@ -0,0 +1,31 @@ +const axios = require('axios'); + +module.exports = async function getJsonFile(baseURL, appName){ + const configuratorEndpoint =`/rest/v1/configurations`; + try { + let jsonURL = baseURL + configuratorEndpoint; + let response = await axios.get(jsonURL, { + params: { AppName : appName } + }); + + let json = response.data; + return json; + + } catch(err){ + if(err.response){ + if(err.response.status == 400){ + let data = err.response.data; + if(data.Errors){ + throw new Error(data.Errors); + } else throw new Error("Bad Request: make sure your apps is configured correctly") + } + if(err.response.status == 404){ + throw new Error("Not found: Social Logins Configurator is either outdated or CONFIGURATOR_BASE_URL is not well defined."); + } + } else if(err.request){ + throw new Error("Request was sent but no response from Social Logins Configurator."); + } else{ + throw new Error(err.message) + } + } +}; From 8ab24fb8165fa4a0cf428fab8400f0ca6d292a5c Mon Sep 17 00:00:00 2001 From: Marta Carlos Date: Wed, 15 Feb 2023 17:20:15 +0000 Subject: [PATCH 06/11] remove static dependency --- hooks/androidCopyPreferences.js | 4 ++-- hooks/iOSCopyPreferences.js | 6 +++--- hooks/utils.js | 6 ++---- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/hooks/androidCopyPreferences.js b/hooks/androidCopyPreferences.js index 718ae7d..5de9347 100644 --- a/hooks/androidCopyPreferences.js +++ b/hooks/androidCopyPreferences.js @@ -13,10 +13,10 @@ module.exports = async function (context) { let projectRoot = context.opts.cordova.project ? context.opts.cordova.project.root : context.opts.projectRoot; let configXML = path.join(projectRoot, 'config.xml'); let configParser = new ConfigParser(configXML); - let configuratorBaseURL = configParser.getGlobalPreference("CONFIGURATOR_BASE_URL"); + let configuratorURL = configParser.getGlobalPreference("CONFIGURATOR_BASE_URL"); let appName = configParser.name(); - let jsonConfig = await getJson(configuratorBaseURL, appName); + let jsonConfig = await getJson(configuratorURL, appName); copyFacebookPreferences(jsonConfig, projectRoot); copyLinkedInPreferences(jsonConfig, projectRoot); }; diff --git a/hooks/iOSCopyPreferences.js b/hooks/iOSCopyPreferences.js index 09cdbec..8d3d6e7 100644 --- a/hooks/iOSCopyPreferences.js +++ b/hooks/iOSCopyPreferences.js @@ -24,9 +24,9 @@ module.exports = async function (context) { var appName = configParser.name(); let platformPath = path.join(projectRoot, 'platforms/ios'); - let configuratorBaseURL = configParser.getGlobalPreference("CONFIGURATOR_BASE_URL"); - - let jsonConfig = await getJson(configuratorBaseURL, appName); + let configuratorURL = configParser.getGlobalPreference("CONFIGURATOR_BASE_URL"); + + let jsonConfig = await getJson(configuratorURL, appName); const iOSConfigArray = jsonConfig.app_configurations.filter(configItem => configItem.application_type_id == ApplicationTypeEnum.ios); const errorMap = new Map(); diff --git a/hooks/utils.js b/hooks/utils.js index 7e28ede..97e95a6 100644 --- a/hooks/utils.js +++ b/hooks/utils.js @@ -1,10 +1,8 @@ const axios = require('axios'); -module.exports = async function getJsonFile(baseURL, appName){ - const configuratorEndpoint =`/rest/v1/configurations`; +module.exports = async function getJsonFile(endpoint, appName){ try { - let jsonURL = baseURL + configuratorEndpoint; - let response = await axios.get(jsonURL, { + let response = await axios.get(endpoint, { params: { AppName : appName } }); From 5aac7d286bde97993c243164b1028be1e81ebf92 Mon Sep 17 00:00:00 2001 From: Marta Carlos Date: Wed, 15 Feb 2023 17:37:57 +0000 Subject: [PATCH 07/11] adding more error handling --- hooks/androidCopyPreferences.js | 4 ++++ hooks/iOSCopyPreferences.js | 5 ++++- hooks/utils.js | 3 +-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/hooks/androidCopyPreferences.js b/hooks/androidCopyPreferences.js index 5de9347..1faf5a6 100644 --- a/hooks/androidCopyPreferences.js +++ b/hooks/androidCopyPreferences.js @@ -14,6 +14,10 @@ module.exports = async function (context) { let configXML = path.join(projectRoot, 'config.xml'); let configParser = new ConfigParser(configXML); let configuratorURL = configParser.getGlobalPreference("CONFIGURATOR_BASE_URL"); + + if(configuratorURL.length == 0) + throw new Error("Missing preference: CONFIGURATOR_BASE_URL. Please make sure this preference is configured"); + let appName = configParser.name(); let jsonConfig = await getJson(configuratorURL, appName); diff --git a/hooks/iOSCopyPreferences.js b/hooks/iOSCopyPreferences.js index 8d3d6e7..afbf327 100644 --- a/hooks/iOSCopyPreferences.js +++ b/hooks/iOSCopyPreferences.js @@ -25,7 +25,10 @@ module.exports = async function (context) { let platformPath = path.join(projectRoot, 'platforms/ios'); let configuratorURL = configParser.getGlobalPreference("CONFIGURATOR_BASE_URL"); - + + if(configuratorURL.length == 0) + throw new Error("Missing preference: CONFIGURATOR_BASE_URL. Please make sure this preference is configured"); + let jsonConfig = await getJson(configuratorURL, appName); const iOSConfigArray = jsonConfig.app_configurations.filter(configItem => configItem.application_type_id == ApplicationTypeEnum.ios); diff --git a/hooks/utils.js b/hooks/utils.js index 97e95a6..eca6985 100644 --- a/hooks/utils.js +++ b/hooks/utils.js @@ -8,7 +8,6 @@ module.exports = async function getJsonFile(endpoint, appName){ let json = response.data; return json; - } catch(err){ if(err.response){ if(err.response.status == 400){ @@ -21,7 +20,7 @@ module.exports = async function getJsonFile(endpoint, appName){ throw new Error("Not found: Social Logins Configurator is either outdated or CONFIGURATOR_BASE_URL is not well defined."); } } else if(err.request){ - throw new Error("Request was sent but no response from Social Logins Configurator."); + throw new Error("Something went wrong with the request. " + err.toJSON()); } else{ throw new Error(err.message) } From 07220a2aefeec5057791087b06cf55a35082dfa1 Mon Sep 17 00:00:00 2001 From: Marta Carlos Date: Thu, 16 Feb 2023 09:37:51 +0000 Subject: [PATCH 08/11] chore: refactor --- hooks/androidCopyPreferences.js | 8 ++--- hooks/iOSCopyPreferences.js | 8 ++--- hooks/utils.js | 52 ++++++++++++++++++--------------- 3 files changed, 33 insertions(+), 35 deletions(-) diff --git a/hooks/androidCopyPreferences.js b/hooks/androidCopyPreferences.js index 1faf5a6..9bbfd72 100644 --- a/hooks/androidCopyPreferences.js +++ b/hooks/androidCopyPreferences.js @@ -3,11 +3,7 @@ const path = require('path'); const fs = require('fs'); const { ConfigParser } = require('cordova-common'); -const getJson = require('./utils'); - -const ProvidersEnum = Object.freeze({"apple":"1", "facebook":"2", "google":"3", "linkedIn":"4"}) -const ApplicationTypeEnum = Object.freeze({"web":"1", "ios":"2", "android":"3"}) - +const {getJsonFile, ProvidersEnum, ApplicationTypeEnum} = require('./utils'); module.exports = async function (context) { let projectRoot = context.opts.cordova.project ? context.opts.cordova.project.root : context.opts.projectRoot; @@ -20,7 +16,7 @@ module.exports = async function (context) { let appName = configParser.name(); - let jsonConfig = await getJson(configuratorURL, appName); + let jsonConfig = await getJsonFile(configuratorURL, appName); copyFacebookPreferences(jsonConfig, projectRoot); copyLinkedInPreferences(jsonConfig, projectRoot); }; diff --git a/hooks/iOSCopyPreferences.js b/hooks/iOSCopyPreferences.js index afbf327..5732802 100644 --- a/hooks/iOSCopyPreferences.js +++ b/hooks/iOSCopyPreferences.js @@ -4,12 +4,10 @@ const fs = require('fs'); const plist = require('plist'); const { ConfigParser } = require('cordova-common'); const { Console } = require('console'); -const getJson = require('./utils'); -module.exports = async function (context) { +const {getJsonFile, ProvidersEnum, ApplicationTypeEnum} = require('./utils'); - const ProvidersEnum = Object.freeze({"apple":"1", "facebook":"2", "google":"3", "linkedIn":"4"}) - const ApplicationTypeEnum = Object.freeze({"web":"1", "ios":"2", "android":"3"}) +module.exports = async function (context) { var projectRoot = context.opts.cordova.project ? context.opts.cordova.project.root : context.opts.projectRoot; var google_url_scheme = ""; @@ -29,7 +27,7 @@ module.exports = async function (context) { if(configuratorURL.length == 0) throw new Error("Missing preference: CONFIGURATOR_BASE_URL. Please make sure this preference is configured"); - let jsonConfig = await getJson(configuratorURL, appName); + let jsonConfig = await getJsonFile(configuratorURL, appName); const iOSConfigArray = jsonConfig.app_configurations.filter(configItem => configItem.application_type_id == ApplicationTypeEnum.ios); const errorMap = new Map(); diff --git a/hooks/utils.js b/hooks/utils.js index eca6985..939af60 100644 --- a/hooks/utils.js +++ b/hooks/utils.js @@ -1,28 +1,32 @@ const axios = require('axios'); -module.exports = async function getJsonFile(endpoint, appName){ - try { - let response = await axios.get(endpoint, { - params: { AppName : appName } - }); - - let json = response.data; - return json; - } catch(err){ - if(err.response){ - if(err.response.status == 400){ - let data = err.response.data; - if(data.Errors){ - throw new Error(data.Errors); - } else throw new Error("Bad Request: make sure your apps is configured correctly") +module.exports = { + getJsonFile: async function getJsonFile(endpoint, appName){ + try { + let response = await axios.get(endpoint, { + params: { AppName : appName } + }); + + let json = response.data; + return json; + } catch(err){ + if(err.response){ + if(err.response.status == 400){ + let data = err.response.data; + if(data.Errors){ + throw new Error(data.Errors); + } else throw new Error("Bad Request: make sure your apps is configured correctly") + } + if(err.response.status == 404){ + throw new Error("Not found: Social Logins Configurator is either outdated or CONFIGURATOR_BASE_URL is not well defined."); + } + } else if(err.request){ + throw new Error("Something went wrong with the request. " + err.toJSON()); + } else{ + throw new Error(err.message) } - if(err.response.status == 404){ - throw new Error("Not found: Social Logins Configurator is either outdated or CONFIGURATOR_BASE_URL is not well defined."); - } - } else if(err.request){ - throw new Error("Something went wrong with the request. " + err.toJSON()); - } else{ - throw new Error(err.message) } - } -}; + }, + ProvidersEnum: Object.freeze({"apple":"1", "facebook":"2", "google":"3", "linkedIn":"4"}), + ApplicationTypeEnum: Object.freeze({"web":"1", "ios":"2", "android":"3"}) +} From ab68ce223b458852b888b825a3cb4ec580ec09ef Mon Sep 17 00:00:00 2001 From: Marta Carlos Date: Thu, 16 Feb 2023 10:14:31 +0000 Subject: [PATCH 09/11] refactor: rename preference to be more accurate --- hooks/androidCopyPreferences.js | 2 +- hooks/iOSCopyPreferences.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hooks/androidCopyPreferences.js b/hooks/androidCopyPreferences.js index 9bbfd72..8c89a80 100644 --- a/hooks/androidCopyPreferences.js +++ b/hooks/androidCopyPreferences.js @@ -9,7 +9,7 @@ module.exports = async function (context) { let projectRoot = context.opts.cordova.project ? context.opts.cordova.project.root : context.opts.projectRoot; let configXML = path.join(projectRoot, 'config.xml'); let configParser = new ConfigParser(configXML); - let configuratorURL = configParser.getGlobalPreference("CONFIGURATOR_BASE_URL"); + let configuratorURL = configParser.getGlobalPreference("CONFIGURATOR_URL"); if(configuratorURL.length == 0) throw new Error("Missing preference: CONFIGURATOR_BASE_URL. Please make sure this preference is configured"); diff --git a/hooks/iOSCopyPreferences.js b/hooks/iOSCopyPreferences.js index 5732802..4f02a86 100644 --- a/hooks/iOSCopyPreferences.js +++ b/hooks/iOSCopyPreferences.js @@ -22,7 +22,7 @@ module.exports = async function (context) { var appName = configParser.name(); let platformPath = path.join(projectRoot, 'platforms/ios'); - let configuratorURL = configParser.getGlobalPreference("CONFIGURATOR_BASE_URL"); + let configuratorURL = configParser.getGlobalPreference("CONFIGURATOR_URL"); if(configuratorURL.length == 0) throw new Error("Missing preference: CONFIGURATOR_BASE_URL. Please make sure this preference is configured"); From 7aa0804ea2979857c962318c23535ac061f09cbb Mon Sep 17 00:00:00 2001 From: Marta Carlos Date: Thu, 16 Feb 2023 11:05:28 +0000 Subject: [PATCH 10/11] reactor: change preference according to Dev Exp suggestion --- hooks/androidCopyPreferences.js | 2 +- hooks/iOSCopyPreferences.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hooks/androidCopyPreferences.js b/hooks/androidCopyPreferences.js index 8c89a80..1f79140 100644 --- a/hooks/androidCopyPreferences.js +++ b/hooks/androidCopyPreferences.js @@ -9,7 +9,7 @@ module.exports = async function (context) { let projectRoot = context.opts.cordova.project ? context.opts.cordova.project.root : context.opts.projectRoot; let configXML = path.join(projectRoot, 'config.xml'); let configParser = new ConfigParser(configXML); - let configuratorURL = configParser.getGlobalPreference("CONFIGURATOR_URL"); + let configuratorURL = configParser.getGlobalPreference("SOCIAL_CONF_API_ENDPOINT"); if(configuratorURL.length == 0) throw new Error("Missing preference: CONFIGURATOR_BASE_URL. Please make sure this preference is configured"); diff --git a/hooks/iOSCopyPreferences.js b/hooks/iOSCopyPreferences.js index 4f02a86..14f6d8f 100644 --- a/hooks/iOSCopyPreferences.js +++ b/hooks/iOSCopyPreferences.js @@ -22,7 +22,7 @@ module.exports = async function (context) { var appName = configParser.name(); let platformPath = path.join(projectRoot, 'platforms/ios'); - let configuratorURL = configParser.getGlobalPreference("CONFIGURATOR_URL"); + let configuratorURL = configParser.getGlobalPreference("SOCIAL_CONF_API_ENDPOINT"); if(configuratorURL.length == 0) throw new Error("Missing preference: CONFIGURATOR_BASE_URL. Please make sure this preference is configured"); From 57b9a5987a950a26ff3e367cf86007898a4c521a Mon Sep 17 00:00:00 2001 From: Marta Carlos Date: Thu, 16 Feb 2023 11:06:15 +0000 Subject: [PATCH 11/11] fix: change error accordingly --- hooks/androidCopyPreferences.js | 2 +- hooks/iOSCopyPreferences.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hooks/androidCopyPreferences.js b/hooks/androidCopyPreferences.js index 1f79140..98fda5d 100644 --- a/hooks/androidCopyPreferences.js +++ b/hooks/androidCopyPreferences.js @@ -12,7 +12,7 @@ module.exports = async function (context) { let configuratorURL = configParser.getGlobalPreference("SOCIAL_CONF_API_ENDPOINT"); if(configuratorURL.length == 0) - throw new Error("Missing preference: CONFIGURATOR_BASE_URL. Please make sure this preference is configured"); + throw new Error("Missing preference: SOCIAL_CONF_API_ENDPOINT. Please make sure this preference is configured"); let appName = configParser.name(); diff --git a/hooks/iOSCopyPreferences.js b/hooks/iOSCopyPreferences.js index 14f6d8f..34924f8 100644 --- a/hooks/iOSCopyPreferences.js +++ b/hooks/iOSCopyPreferences.js @@ -25,7 +25,7 @@ module.exports = async function (context) { let configuratorURL = configParser.getGlobalPreference("SOCIAL_CONF_API_ENDPOINT"); if(configuratorURL.length == 0) - throw new Error("Missing preference: CONFIGURATOR_BASE_URL. Please make sure this preference is configured"); + throw new Error("Missing preference: SOCIAL_CONF_API_ENDPOINT. Please make sure this preference is configured"); let jsonConfig = await getJsonFile(configuratorURL, appName);